From d0850405e3230685be31ef9a10502bf787f6c9f8 Mon Sep 17 00:00:00 2001 From: berryplus Date: Sat, 16 May 2020 21:00:25 +0900 Subject: [PATCH 0001/1024] =?UTF-8?q?=E3=83=97=E3=83=AD=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=A4=E3=83=AB=E3=83=9E=E3=83=8D=E3=83=BC=E3=82=B8=E3=83=A3?= =?UTF-8?q?=E3=82=92=E8=A1=A8=E7=A4=BA=E3=81=99=E3=82=8B=E3=81=8B=E3=81=A9?= =?UTF-8?q?=E3=81=86=E3=81=8B=E3=81=AE=E5=88=A4=E5=AE=9A=E3=82=92=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E5=8F=AF=E8=83=BD=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/_main/CProcessFactory.cpp | 28 +---- sakura_core/dlg/CDlgProfileMgr.cpp | 32 ++++++ sakura_core/dlg/CDlgProfileMgr.h | 4 + tests/unittests/test-cdlgprofilemgr.cpp | 134 ++++++++++++++++++++++++ tests/unittests/tests1.vcxproj | 1 + tests/unittests/tests1.vcxproj.filters | 3 + 6 files changed, 178 insertions(+), 24 deletions(-) create mode 100644 tests/unittests/test-cdlgprofilemgr.cpp diff --git a/sakura_core/_main/CProcessFactory.cpp b/sakura_core/_main/CProcessFactory.cpp index 06861fb67d..b841c8e2f9 100644 --- a/sakura_core/_main/CProcessFactory.cpp +++ b/sakura_core/_main/CProcessFactory.cpp @@ -83,13 +83,6 @@ CProcess* CProcessFactory::Create( HINSTANCE hInstance, LPCWSTR lpCmdLine ) bool CProcessFactory::ProfileSelect( HINSTANCE hInstance, LPCWSTR lpCmdLine ) { - CDlgProfileMgr dlgProf; - SProfileSettings settings; - - CDlgProfileMgr::ReadProfSettings( settings ); - CSelectLang::InitializeLanguageEnvironment(); - CSelectLang::ChangeLang( settings.m_szDllLanguage ); - // May 30, 2000 genta // 実行ファイル名をもとに漢字コードを固定する. WCHAR szExeFileName[MAX_PATH]; @@ -98,23 +91,10 @@ bool CProcessFactory::ProfileSelect( HINSTANCE hInstance, LPCWSTR lpCmdLine ) CCommandLine::getInstance()->ParseCommandLine(lpCmdLine); - bool bDialog; - if( CCommandLine::getInstance()->IsProfileMgr() ){ - bDialog = true; - }else if( CCommandLine::getInstance()->IsSetProfile() ){ - bDialog = false; - }else if( settings.m_nDefaultIndex == -1 ){ - bDialog = true; - }else{ - assert( 0 <= settings.m_nDefaultIndex ); - if( 0 < settings.m_nDefaultIndex ){ - CCommandLine::getInstance()->SetProfileName( settings.m_vProfList[settings.m_nDefaultIndex - 1].c_str() ); - }else{ - CCommandLine::getInstance()->SetProfileName( L"" ); - } - bDialog = false; - } - if( bDialog ){ + // コマンドラインオプションから起動プロファイルを判定する + bool profileSelected = CDlgProfileMgr::TrySelectProfile( CCommandLine::getInstance() ); + if( !profileSelected ){ + CDlgProfileMgr dlgProf; if( dlgProf.DoModal( hInstance, NULL, 0 ) ){ CCommandLine::getInstance()->SetProfileName( dlgProf.m_strProfileName.c_str() ); }else{ diff --git a/sakura_core/dlg/CDlgProfileMgr.cpp b/sakura_core/dlg/CDlgProfileMgr.cpp index 4a4300ac54..22abeba97c 100644 --- a/sakura_core/dlg/CDlgProfileMgr.cpp +++ b/sakura_core/dlg/CDlgProfileMgr.cpp @@ -51,6 +51,38 @@ const DWORD p_helpids[] = { 0, 0 }; +//! コマンドラインだけでプロファイルが確定するか調べる +bool CDlgProfileMgr::TrySelectProfile( CCommandLine* pcCommandLine ) noexcept +{ + SProfileSettings settings; + bool bSettingLoaded = ReadProfSettings( settings ); + + bool bDialog; + if( pcCommandLine->IsProfileMgr() ){ // コマンドラインでプロファイルマネージャの表示が指定されている + bDialog = true; + }else if( pcCommandLine->IsSetProfile() ){ // コマンドラインでプロファイル名が指定されている + bDialog = false; + }else if( !bSettingLoaded ){ // プロファイル設定がなかった + bDialog = false; + }else if( 0 < settings.m_nDefaultIndex && settings.m_nDefaultIndex <= static_cast(settings.m_vProfList.size()) ){ + // プロファイル設定のデフォルトインデックス値から該当のプロファイル名が指定されたものとして動作する + pcCommandLine->SetProfileName( settings.m_vProfList[settings.m_nDefaultIndex - 1].c_str() ); + bDialog = false; + }else{ + // プロファイル設定のデフォルトインデックス値が不正なのでプロファイルマネージャを表示して設定更新を促す + bDialog = true; + } + if( bDialog ){ + // プロファイルマネージャを表示する場合、言語環境の初期化を済ませておく + CSelectLang::InitializeLanguageEnvironment(); + if( bSettingLoaded ){ + // 設定が読めた場合のみ、日本語以外の設定言語を適用する + CSelectLang::ChangeLang( settings.m_szDllLanguage ); + } + } + return !bDialog; +} + CDlgProfileMgr::CDlgProfileMgr() : CDialog(false, false) { diff --git a/sakura_core/dlg/CDlgProfileMgr.h b/sakura_core/dlg/CDlgProfileMgr.h index dd9f143708..b302fce149 100644 --- a/sakura_core/dlg/CDlgProfileMgr.h +++ b/sakura_core/dlg/CDlgProfileMgr.h @@ -30,6 +30,7 @@ #pragma once #include "dlg/CDialog.h" +#include "_main/CCommandLine.h" #include #include @@ -44,6 +45,9 @@ struct SProfileSettings class CDlgProfileMgr final : public CDialog { public: + //! コマンドラインだけでプロファイルが確定するか調べる + static bool TrySelectProfile( CCommandLine* pcCommandLine ) noexcept; + /* || Constructors */ diff --git a/tests/unittests/test-cdlgprofilemgr.cpp b/tests/unittests/test-cdlgprofilemgr.cpp new file mode 100644 index 0000000000..95f97c8834 --- /dev/null +++ b/tests/unittests/test-cdlgprofilemgr.cpp @@ -0,0 +1,134 @@ +/*! @file */ +/* + Copyright (C) 2018-2020 Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include + +#ifndef NOMINMAX +#define NOMINMAX +#endif /* #ifndef NOMINMAX */ + +#include +#include + +#include "dlg/CDlgProfileMgr.h" + +#include +#include + +/*! + * テスト用の極薄ラッパークラス + */ +class CCommandLineWrapper : public CCommandLine +{ +public: + CCommandLineWrapper() = default; +}; + +/*! + * @brief TrySelectProfileのテスト + */ +TEST(CDlgProfileMgr, TrySelectProfile_001 ) +{ + // プロファイルマネージャ表示オプションが付いてたらプロファイルは確定しない + CCommandLineWrapper cCommandLine; + cCommandLine.ParseCommandLine( L"-PROFMGR", false ); + ASSERT_FALSE( CDlgProfileMgr::TrySelectProfile( &cCommandLine ) ); +} + +/*! + * @brief TrySelectProfileのテスト + */ +TEST( CDlgProfileMgr, TrySelectProfile_002 ) +{ + // プロファイル名が指定されていたらプロファイルは確定する + CCommandLineWrapper cCommandLine; + cCommandLine.ParseCommandLine( L"-PROF=執筆用", false ); + ASSERT_TRUE( CDlgProfileMgr::TrySelectProfile( &cCommandLine ) ); +} + +/*! + * @brief TrySelectProfileのテスト + */ +TEST( CDlgProfileMgr, TrySelectProfile_003 ) +{ + // プロファイル設定を削除する + std::remove( "tests1_prof.ini" ); + + // プロファイル設定がなかったらプロファイルは確定する + CCommandLineWrapper cCommandLine; + ASSERT_TRUE( CDlgProfileMgr::TrySelectProfile( &cCommandLine ) ); +} + +/*! + * @brief TrySelectProfileのテスト + */ +TEST( CDlgProfileMgr, TrySelectProfile_004 ) +{ + // プロファイル設定を作る + SProfileSettings settings; + settings.m_szDllLanguage[0] = L'\0'; + settings.m_nDefaultIndex = 3; + settings.m_vProfList = { L"保存用", L"鑑賞用", L"使用用" }; + settings.m_bDefaultSelect = true; + CDlgProfileMgr::WriteProfSettings( settings ); + + // プロファイル設定にデフォルト定義があればプロファイルは確定する + CCommandLineWrapper cCommandLine; + ASSERT_TRUE( CDlgProfileMgr::TrySelectProfile( &cCommandLine ) ); +} + +/*! + * @brief TrySelectProfileのテスト + */ +TEST( CDlgProfileMgr, TrySelectProfile_005 ) +{ + // プロファイル設定を作る + SProfileSettings settings; + settings.m_szDllLanguage[0] = L'\0'; + settings.m_nDefaultIndex = 4; + settings.m_vProfList = { L"保存用", L"鑑賞用", L"使用用" }; + settings.m_bDefaultSelect = true; + CDlgProfileMgr::WriteProfSettings( settings ); + + // プロファイル設定にデフォルト定義がおかしればプロファイルは確定しない + CCommandLineWrapper cCommandLine; + ASSERT_FALSE( CDlgProfileMgr::TrySelectProfile( &cCommandLine ) ); +} + +/*! + * @brief TrySelectProfileのテスト + */ +TEST( CDlgProfileMgr, TrySelectProfile_006 ) +{ + // 空のプロファイル設定を作る + SProfileSettings settings; + settings.m_szDllLanguage[0] = L'\0'; + settings.m_nDefaultIndex = -1; + settings.m_bDefaultSelect = false; + CDlgProfileMgr::WriteProfSettings( settings ); + + // プロファイル設定が空定義ならプロファイルは確定しない + CCommandLineWrapper cCommandLine; + ASSERT_FALSE( CDlgProfileMgr::TrySelectProfile( &cCommandLine ) ); +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index e2661f6600..295ca08889 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -106,6 +106,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index 50805feae4..1c19c8427b 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -65,5 +65,8 @@ Test Files + + Test Files + \ No newline at end of file From a40a52c28ea3d510970dbac15f27414411d85cd2 Mon Sep 17 00:00:00 2001 From: berryplus Date: Mon, 18 May 2020 01:29:08 +0900 Subject: [PATCH 0002/1024] =?UTF-8?q?INI=E3=82=92=E4=BD=BF=E3=81=86?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=81=AESetUp/TearDown=E3=82=92?= =?UTF-8?q?=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-cdlgprofilemgr.cpp | 45 +++++++++++++++++++++---- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/tests/unittests/test-cdlgprofilemgr.cpp b/tests/unittests/test-cdlgprofilemgr.cpp index 95f97c8834..1ff1aed86b 100644 --- a/tests/unittests/test-cdlgprofilemgr.cpp +++ b/tests/unittests/test-cdlgprofilemgr.cpp @@ -45,6 +45,40 @@ class CCommandLineWrapper : public CCommandLine CCommandLineWrapper() = default; }; +/*! + * プロファイルマネージャ設定ファイルを使うテストのためのフィクスチャクラス + * + * 設定ファイルを使うテストは「設定ファイルがない状態」からの始動を想定しているので + * 始動前に設定ファイルを削除するようにしている。 + * テスト実行後に設定ファイルを残しておく意味はないので終了後も削除している。 + */ +class CDlgProfileMgrIniTest : public ::testing::Test { +protected: + /*! + * プロファイルマネージャ設定ファイルの名前 + * + * この名前は "%s_prof.ini" に 実行ファイル名 を埋め込んで生成される。 + * 実稼働環境では "sakura_prof.ini" となることに注意。 + */ + static constexpr const char szProfileMgrIniName[] = "tests1_prof.ini"; + + /*! + * テストが起動される直前に毎回呼ばれる関数 + */ + virtual void SetUp() { + // プロファイル設定を削除する + std::remove( szProfileMgrIniName ); + } + + /*! + * テストが実行された直後に毎回呼ばれる関数 + */ + virtual void TearDown() { + // プロファイル設定を削除する + std::remove( szProfileMgrIniName ); + } +}; + /*! * @brief TrySelectProfileのテスト */ @@ -70,11 +104,8 @@ TEST( CDlgProfileMgr, TrySelectProfile_002 ) /*! * @brief TrySelectProfileのテスト */ -TEST( CDlgProfileMgr, TrySelectProfile_003 ) +TEST_F( CDlgProfileMgrIniTest, TrySelectProfile_003 ) { - // プロファイル設定を削除する - std::remove( "tests1_prof.ini" ); - // プロファイル設定がなかったらプロファイルは確定する CCommandLineWrapper cCommandLine; ASSERT_TRUE( CDlgProfileMgr::TrySelectProfile( &cCommandLine ) ); @@ -83,7 +114,7 @@ TEST( CDlgProfileMgr, TrySelectProfile_003 ) /*! * @brief TrySelectProfileのテスト */ -TEST( CDlgProfileMgr, TrySelectProfile_004 ) +TEST_F( CDlgProfileMgrIniTest, TrySelectProfile_004 ) { // プロファイル設定を作る SProfileSettings settings; @@ -101,7 +132,7 @@ TEST( CDlgProfileMgr, TrySelectProfile_004 ) /*! * @brief TrySelectProfileのテスト */ -TEST( CDlgProfileMgr, TrySelectProfile_005 ) +TEST_F( CDlgProfileMgrIniTest, TrySelectProfile_005 ) { // プロファイル設定を作る SProfileSettings settings; @@ -119,7 +150,7 @@ TEST( CDlgProfileMgr, TrySelectProfile_005 ) /*! * @brief TrySelectProfileのテスト */ -TEST( CDlgProfileMgr, TrySelectProfile_006 ) +TEST_F( CDlgProfileMgrIniTest, TrySelectProfile_006 ) { // 空のプロファイル設定を作る SProfileSettings settings; From d774d8fcc6ad2dd5ae8e0335ece97a9743e010f0 Mon Sep 17 00:00:00 2001 From: berryplus Date: Mon, 18 May 2020 01:46:11 +0900 Subject: [PATCH 0003/1024] =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB?= =?UTF-8?q?=E5=89=8A=E9=99=A4=E3=81=AB=E4=BD=BF=E3=81=86=E9=96=A2=E6=95=B0?= =?UTF-8?q?=E3=82=92=E5=89=8A=E9=99=A4=E4=BE=8B=E5=A4=96=E3=81=8C=E5=87=BA?= =?UTF-8?q?=E3=82=8B=E3=82=82=E3=81=AE=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-cdlgprofilemgr.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/unittests/test-cdlgprofilemgr.cpp b/tests/unittests/test-cdlgprofilemgr.cpp index 1ff1aed86b..0e6e5c123e 100644 --- a/tests/unittests/test-cdlgprofilemgr.cpp +++ b/tests/unittests/test-cdlgprofilemgr.cpp @@ -34,6 +34,7 @@ #include "dlg/CDlgProfileMgr.h" #include +#include #include /*! @@ -67,7 +68,7 @@ class CDlgProfileMgrIniTest : public ::testing::Test { */ virtual void SetUp() { // プロファイル設定を削除する - std::remove( szProfileMgrIniName ); + std::filesystem::remove( szProfileMgrIniName ); } /*! @@ -75,7 +76,7 @@ class CDlgProfileMgrIniTest : public ::testing::Test { */ virtual void TearDown() { // プロファイル設定を削除する - std::remove( szProfileMgrIniName ); + std::filesystem::remove( szProfileMgrIniName ); } }; From 01fbfe54c3fc7891086456e6672c3964429c6418 Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Wed, 6 May 2020 02:29:44 +0900 Subject: [PATCH 0004/1024] Build chm on Azure Pipelines and GitHub Actions * Install Locale Emulator via chocolatey. * Try to find LEProc.exe and use it when building chm files. - "start /wait" doesn't work for LEProc.exe. Check the status of the chm file. --- .github/workflows/build-sakura.yml | 21 +++++----- build-chm.bat | 38 +++++++++++++------ .../template.job.build-unittest.yml | 18 +++++---- tools/find-tools.bat | 12 ++++++ tools/find-tools.md | 1 + 5 files changed, 63 insertions(+), 27 deletions(-) diff --git a/.github/workflows/build-sakura.yml b/.github/workflows/build-sakura.yml index 015fc81aef..931236d651 100644 --- a/.github/workflows/build-sakura.yml +++ b/.github/workflows/build-sakura.yml @@ -58,15 +58,18 @@ jobs: run: build-sln.bat ${{ matrix.platform }} ${{ matrix.config }} shell: cmd - ## #922 のため無効化 - # - #- name: Build HTML Help - # run: build-chm.bat - # shell: cmd - # - #- name: Build installer with Inno Setup - # run: build-installer.bat ${{ matrix.platform }} ${{ matrix.config }} - # shell: cmd + - name: Install Locale Emulator + run: choco install locale-emulator -y + shell: cmd + + - name: Build HTML Help + run: build-chm.bat + shell: cmd + + - name: Build installer with Inno Setup + run: build-installer.bat ${{ matrix.platform }} ${{ matrix.config }} + shell: cmd + - name: zipArtifacts run: zipArtifacts.bat ${{ matrix.platform }} ${{ matrix.config }} shell: cmd diff --git a/build-chm.bat b/build-chm.bat index 6b5f181781..41c2603b53 100644 --- a/build-chm.bat +++ b/build-chm.bat @@ -65,19 +65,35 @@ set PROJECT_CHM=%2 if exist "%PROJECT_CHM%" del /F "%PROJECT_CHM%" -@rem hhc.exe returns 1 on success, and returns 0 on failure -"%CMD_HHC%" %PROJECT_HHP% -if not errorlevel 1 ( - echo error %PROJECT_HHP% errorlevel %errorlevel% - - del /F "%PROJECT_CHM%" - "%CMD_HHC%" %PROJECT_HHP% -) -if not errorlevel 1 ( - echo retry error %PROJECT_HHP% errorlevel %errorlevel% +if defined CMD_LEPROC ( + "%CMD_LEPROC%" %COMSPEC% /c """%CMD_HHC%"" %PROJECT_HHP%" + if errorlevel 1 ( + echo fail to execute LEProc + exit /b 1 + ) + @rem wait to create chm + for /L %%i in (1,1,30) do ( + ping -n 2 localhost > NUL + copy "%PROJECT_CHM%" nul > NUL 2>&1 + if not errorlevel 1 exit /b 0 + ) + echo fail to create %PROJECT_CHM% exit /b 1 +) else ( + @rem hhc.exe returns 1 on success, and returns 0 on failure + "%CMD_HHC%" %PROJECT_HHP% + if not errorlevel 1 ( + echo error %PROJECT_HHP% errorlevel %errorlevel% + + del /F "%PROJECT_CHM%" + "%CMD_HHC%" %PROJECT_HHP% + ) + if not errorlevel 1 ( + echo retry error %PROJECT_HHP% errorlevel %errorlevel% + exit /b 1 + ) + exit /b 0 ) -exit /b 0 :download_archive pwsh.exe -ExecutionPolicy RemoteSigned -File %SRC_HELP%\extract-chm-from-artifact.ps1 diff --git a/ci/azure-pipelines/template.job.build-unittest.yml b/ci/azure-pipelines/template.job.build-unittest.yml index 256460dd66..12b576be71 100644 --- a/ci/azure-pipelines/template.job.build-unittest.yml +++ b/ci/azure-pipelines/template.job.build-unittest.yml @@ -45,13 +45,17 @@ jobs: - script: build-bmp-tools.bat $(Configuration) displayName: Bitmap Split/Mux -# # Build HTML Help -# - script: build-chm.bat -# displayName: Build HTML Help -# -# # Build installer with Inno Setup -# - script: build-installer.bat $(BuildPlatform) $(Configuration) -# displayName: Build installer with Inno Setup + # Install Locale Emulator + - script: choco install locale-emulator -y + displayName: Install Locale Emulator + + # Build HTML Help + - script: build-chm.bat + displayName: Build HTML Help + + # Build installer with Inno Setup + - script: build-installer.bat $(BuildPlatform) $(Configuration) + displayName: Build installer with Inno Setup # zip files for artifacts - script: zipArtifacts.bat $(BuildPlatform) $(Configuration) diff --git a/tools/find-tools.bat b/tools/find-tools.bat index a8f4976a26..73a49dd816 100644 --- a/tools/find-tools.bat +++ b/tools/find-tools.bat @@ -13,6 +13,7 @@ if "%1" equ "clear" ( set CMD_MSBUILD= set CMD_CMAKE= set CMD_NINJA= + set CMD_LEPROC= set NUM_VSVERSION= set CMAKE_G_PARAM= set FIND_TOOLS_CALLED= @@ -37,6 +38,7 @@ if not defined CMD_VSWHERE call :vswhere 2> nul if not defined CMD_MSBUILD call :msbuild 2> nul if not defined CMD_CMAKE call :cmake 2> nul if not defined CMD_NINJA call :cmake 2> nul +if not defined CMD_LEPROC call :leproc 2> nul echo ^|- CMD_GIT=%CMD_GIT% echo ^|- CMD_7Z=%CMD_7Z% echo ^|- CMD_HHC=%CMD_HHC% @@ -47,6 +49,7 @@ echo ^|- CMD_VSWHERE=%CMD_VSWHERE% echo ^|- CMD_MSBUILD=%CMD_MSBUILD% echo ^|- CMD_CMAKE=%CMD_CMAKE% echo ^|- CMD_NINJA=%CMD_NINJA% +echo ^|- CMD_LEPROC=%CMD_LEPROC% echo ^|- CMAKE_G_PARAM=%CMAKE_G_PARAM% endlocal ^ && set "CMD_GIT=%CMD_GIT%" ^ @@ -59,6 +62,7 @@ endlocal ^ && set "CMD_MSBUILD=%CMD_MSBUILD%" ^ && set "CMD_CMAKE=%CMD_CMAKE%" ^ && set "CMD_NINJA=%CMD_NINJA%" ^ + && set "CMD_LEPROC=%CMD_LEPROC%" ^ && set "NUM_VSVERSION=%NUM_VSVERSION%" ^ && set "CMAKE_G_PARAM=%CMAKE_G_PARAM%" ^ && echo end @@ -258,3 +262,11 @@ for /f "usebackq delims=" %%a in (`where $PATH:ninja`) do ( exit /b ) exit /b + +:leproc +set PATH2=%PATH% +for /f "usebackq delims=" %%a in (`where $PATH2:LEProc.exe`) do ( + set "CMD_LEPROC=%%a" + exit /b +) +exit /b diff --git a/tools/find-tools.md b/tools/find-tools.md index 3d81836720..f03b1baa9f 100644 --- a/tools/find-tools.md +++ b/tools/find-tools.md @@ -21,6 +21,7 @@ | doxygen | CMD_DOXYGEN | doxygen\bin | doxygen.exe | | vswhere | CMD_VSWHERE | Microsoft Visual Studio\Installer | vswhere.exe | | MSBuild | CMD_MSBUILD | 特殊 | MSBuild.exe | +| Locale Emulator | CMD_LEPROC | なし | LEProc.exe | ## MSBuild以外の探索手順 MSBuild以外の探索手順は同一であり、7-Zipを例に説明する。 From 5ad3b160b02f77e3fd96d4e2147d07541f4a534d Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Mon, 18 May 2020 20:30:22 +0900 Subject: [PATCH 0005/1024] chm: Retry creating chm when LEProc is used Also add extra wait. --- build-chm.bat | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/build-chm.bat b/build-chm.bat index 41c2603b53..50b6d21a86 100644 --- a/build-chm.bat +++ b/build-chm.bat @@ -66,16 +66,23 @@ set PROJECT_CHM=%2 if exist "%PROJECT_CHM%" del /F "%PROJECT_CHM%" if defined CMD_LEPROC ( - "%CMD_LEPROC%" %COMSPEC% /c """%CMD_HHC%"" %PROJECT_HHP%" - if errorlevel 1 ( - echo fail to execute LEProc - exit /b 1 - ) - @rem wait to create chm - for /L %%i in (1,1,30) do ( - ping -n 2 localhost > NUL - copy "%PROJECT_CHM%" nul > NUL 2>&1 - if not errorlevel 1 exit /b 0 + for /L %%j in (1,1,2) do ( + "%CMD_LEPROC%" %COMSPEC% /c """%CMD_HHC%"" %PROJECT_HHP%" + if errorlevel 1 ( + echo fail to execute LEProc + exit /b 1 + ) + @rem wait to create chm + for /L %%i in (1,1,30) do ( + ping -n 2 localhost > NUL + copy "%PROJECT_CHM%" nul > NUL 2>&1 + if not errorlevel 1 ( + @rem additional wait + ping -n 5 localhost > NUL + exit /b 0 + ) + ) + echo retry creating %PROJECT_CHM% ) echo fail to create %PROJECT_CHM% exit /b 1 From 7ca5c6dbd73e32020c92340b55ed7f71cc3f5390 Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Mon, 18 May 2020 20:55:05 +0900 Subject: [PATCH 0006/1024] chm: Check log file to wait completion of hhc Check instead of chm file. --- build-chm.bat | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/build-chm.bat b/build-chm.bat index 50b6d21a86..1f2fcbfaac 100644 --- a/build-chm.bat +++ b/build-chm.bat @@ -62,8 +62,10 @@ exit /b 0 :BuildChm set PROJECT_HHP=%1 set PROJECT_CHM=%2 +set PROJECT_LOG=%~dp2\Compile.log if exist "%PROJECT_CHM%" del /F "%PROJECT_CHM%" +if exist "%PROJECT_LOG%" del /F "%PROJECT_LOG%" if defined CMD_LEPROC ( for /L %%j in (1,1,2) do ( @@ -75,12 +77,8 @@ if defined CMD_LEPROC ( @rem wait to create chm for /L %%i in (1,1,30) do ( ping -n 2 localhost > NUL - copy "%PROJECT_CHM%" nul > NUL 2>&1 - if not errorlevel 1 ( - @rem additional wait - ping -n 5 localhost > NUL - exit /b 0 - ) + copy "%PROJECT_LOG%" nul > NUL 2>&1 + if not errorlevel 1 exit /b 0 ) echo retry creating %PROJECT_CHM% ) From 0c4e7b729b9fd88d8071d6cb2d090568064858e7 Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Tue, 19 May 2020 11:21:39 +0900 Subject: [PATCH 0007/1024] chm: Revise retry processing --- build-chm.bat | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/build-chm.bat b/build-chm.bat index 1f2fcbfaac..5ce2daba7c 100644 --- a/build-chm.bat +++ b/build-chm.bat @@ -68,14 +68,10 @@ if exist "%PROJECT_CHM%" del /F "%PROJECT_CHM%" if exist "%PROJECT_LOG%" del /F "%PROJECT_LOG%" if defined CMD_LEPROC ( - for /L %%j in (1,1,2) do ( + for /L %%i in (1,1,2) do ( "%CMD_LEPROC%" %COMSPEC% /c """%CMD_HHC%"" %PROJECT_HHP%" - if errorlevel 1 ( - echo fail to execute LEProc - exit /b 1 - ) @rem wait to create chm - for /L %%i in (1,1,30) do ( + for /L %%j in (1,1,30) do ( ping -n 2 localhost > NUL copy "%PROJECT_LOG%" nul > NUL 2>&1 if not errorlevel 1 exit /b 0 @@ -83,22 +79,16 @@ if defined CMD_LEPROC ( echo retry creating %PROJECT_CHM% ) echo fail to create %PROJECT_CHM% - exit /b 1 ) else ( - @rem hhc.exe returns 1 on success, and returns 0 on failure - "%CMD_HHC%" %PROJECT_HHP% - if not errorlevel 1 ( + for /L %%i in (1,1,2) do ( + @rem hhc.exe returns 1 on success, and returns 0 on failure + "%CMD_HHC%" %PROJECT_HHP% + if errorlevel 1 exit /b 0 echo error %PROJECT_HHP% errorlevel %errorlevel% - del /F "%PROJECT_CHM%" - "%CMD_HHC%" %PROJECT_HHP% - ) - if not errorlevel 1 ( - echo retry error %PROJECT_HHP% errorlevel %errorlevel% - exit /b 1 ) - exit /b 0 ) +exit /b 1 :download_archive pwsh.exe -ExecutionPolicy RemoteSigned -File %SRC_HELP%\extract-chm-from-artifact.ps1 From 00c3d180e406a9e1722a332036cd2417dd7d8d7c Mon Sep 17 00:00:00 2001 From: TAKEUCHI Hiroaki Date: Wed, 20 May 2020 11:42:09 +0900 Subject: [PATCH 0008/1024] =?UTF-8?q?v2.4.1=20beta3=20=E3=81=BE=E3=81=A7?= =?UTF-8?q?=E3=81=AE=20CHANGELOG.md=20=E3=82=92=E5=8F=8D=E6=98=A0=20<-=20h?= =?UTF-8?q?ttps://ci.appveyor.com/project/sakuraeditor/changelog-sakura/bu?= =?UTF-8?q?ilds/32993860/artifacts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0134acb5d6..78ac0d15ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,57 @@ # Change Log +## [v2.4.1-beta3](https://github.com/sakura-editor/sakura/tree/v2.4.1-beta3) (2020-05-20) + +[Full Changelog](https://github.com/sakura-editor/sakura/compare/v2.4.1-beta2...v2.4.1-beta3) + + + +### その他変更 + +- README.md の「変更履歴」に CHANGELOG.md へのリンクを追加 [\#1309](https://github.com/sakura-editor/sakura/pull/1309) ([takke](https://github.com/takke)) +- \#1302 OSDNより転載: 「タイプ別設定」等ダイアログ内の「ヘルプ」ボタンが機能しない [\#1306](https://github.com/sakura-editor/sakura/pull/1306) ([m-tmatma](https://github.com/m-tmatma)) +- MinGW のコンパイルエラーを修正する [\#1299](https://github.com/sakura-editor/sakura/pull/1299) ([k-takata](https://github.com/k-takata)) +- コンパイルテストを導入する [\#1297](https://github.com/sakura-editor/sakura/pull/1297) ([berryzplus](https://github.com/berryzplus)) + +## [v2.4.1-beta2](https://github.com/sakura-editor/sakura/tree/v2.4.1-beta2) (2020-05-10) + +[Full Changelog](https://github.com/sakura-editor/sakura/compare/v2.4.0...v2.4.1-beta2) + +### バグ修正 + +- CImpExpRegex::Import の実装を見直し [\#1273](https://github.com/sakura-editor/sakura/pull/1273) ([beru](https://github.com/beru)) +- ツールイメージのリサイズ機構にフォールバック機能を付ける [\#1261](https://github.com/sakura-editor/sakura/pull/1261) ([berryzplus](https://github.com/berryzplus)) +- 正規表現キーワードのインポートで許容サイズを超える文字列を無駄にコピーしているのを修正する [\#1244](https://github.com/sakura-editor/sakura/pull/1244) ([berryzplus](https://github.com/berryzplus)) + + + +### その他変更 + +- installer のタイトルのアプリ名で 32bit/64bit の区別ができるようにする [\#1293](https://github.com/sakura-editor/sakura/pull/1293) ([m-tmatma](https://github.com/m-tmatma)) +- Combo\_AddString の戻り値の型を int にする [\#1291](https://github.com/sakura-editor/sakura/pull/1291) ([m-tmatma](https://github.com/m-tmatma)) +- CLayoutIntのテストを追加 [\#1290](https://github.com/sakura-editor/sakura/pull/1290) ([berryzplus](https://github.com/berryzplus)) +- 単体テストで文字列リソースを利用できるようにする [\#1275](https://github.com/sakura-editor/sakura/pull/1275) ([berryzplus](https://github.com/berryzplus)) +- CodeFactor の警告を修正 [\#1272](https://github.com/sakura-editor/sakura/pull/1272) ([m-tmatma](https://github.com/m-tmatma)) +- GitHub Actions の yml のCodeFactor の警告 [\#1270](https://github.com/sakura-editor/sakura/pull/1270) ([m-tmatma](https://github.com/m-tmatma)) +- azure pipeline の表示名のタイポ修正 [\#1258](https://github.com/sakura-editor/sakura/pull/1258) ([m-tmatma](https://github.com/m-tmatma)) +- PR1254 のヘルプの修正を 2.4.1 beta1 にマージする [\#1257](https://github.com/sakura-editor/sakura/pull/1257) ([m-tmatma](https://github.com/m-tmatma)) +- googletest を無視リストに追加 [\#1256](https://github.com/sakura-editor/sakura/pull/1256) ([m-tmatma](https://github.com/m-tmatma)) +- 履歴コンボの履歴削除機能の発動条件を変更したい [\#1255](https://github.com/sakura-editor/sakura/pull/1255) ([berryzplus](https://github.com/berryzplus)) +- ヘルプの動作環境OSの記述を更新 [\#1254](https://github.com/sakura-editor/sakura/pull/1254) ([beru](https://github.com/beru)) +- GrepとGrep置換ダイアログの微調整 [\#1242](https://github.com/sakura-editor/sakura/pull/1242) ([7-rate](https://github.com/7-rate)) +- 折り返しされた際、文字数カウントが合わない不具合を修正 [\#1241](https://github.com/sakura-editor/sakura/pull/1241) ([beru](https://github.com/beru)) +- TCHAR系マクロ \_stprintf の呼び出しがまだ残っている箇所を swprintf 関数の呼び出しに変更 [\#1240](https://github.com/sakura-editor/sakura/pull/1240) ([beru](https://github.com/beru)) +- \_wcsdup\(\)ではfree\(\)を使うべきなはずなのでそうする [\#1239](https://github.com/sakura-editor/sakura/pull/1239) ([beru](https://github.com/beru)) +- SJISエンコードのキーワードヘルプ辞書を設定するとき表示化けする問題への対処 [\#1238](https://github.com/sakura-editor/sakura/pull/1238) ([beru](https://github.com/beru)) +- wstringをWCHAR\[N\]にコピーする処理でNUL終端が付かない不具合を修正 [\#1235](https://github.com/sakura-editor/sakura/pull/1235) ([berryzplus](https://github.com/berryzplus)) +- 開発バージョンを ver 2.4.1 に変更 [\#1231](https://github.com/sakura-editor/sakura/pull/1231) ([m-tmatma](https://github.com/m-tmatma)) +- CNativeテストケースの期待値を修正する [\#1230](https://github.com/sakura-editor/sakura/pull/1230) ([berryzplus](https://github.com/berryzplus)) +- UNICODE一本化対応で見落としていたA版専用処理を削りたい [\#1229](https://github.com/sakura-editor/sakura/pull/1229) ([berryzplus](https://github.com/berryzplus)) +- コピー代入のメソッド名を書き間違っているのを訂正 [\#1228](https://github.com/sakura-editor/sakura/pull/1228) ([berryzplus](https://github.com/berryzplus)) +- googletestのビルドをバッチスクリプトで行うように変更したい [\#1227](https://github.com/sakura-editor/sakura/pull/1227) ([berryzplus](https://github.com/berryzplus)) +- Release/v2.4.0 [\#1226](https://github.com/sakura-editor/sakura/pull/1226) ([KENCHjp](https://github.com/KENCHjp)) +- Grep置換ダイアログの「置換後」の実装を置換ダイアログと合わせる [\#1224](https://github.com/sakura-editor/sakura/pull/1224) ([berryzplus](https://github.com/berryzplus)) + ## [v2.4.0](https://github.com/sakura-editor/sakura/tree/v2.4.0) (2020-04-18) [Full Changelog](https://github.com/sakura-editor/sakura/compare/v2.4.0-beta5...v2.4.0) @@ -399,4 +451,4 @@ -\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* \ No newline at end of file +\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* From be72b58388076b9259a8d0ece881634e342424ff Mon Sep 17 00:00:00 2001 From: Katsuhisa Yuasa Date: Mon, 25 May 2020 23:11:49 +0900 Subject: [PATCH 0009/1024] This reverts commits e3ac9efbc59dcb48b065866034baf5bc2ef9deda and 54124f2773d84002ab831bda86ed1d5447f9c676. --- sakura_core/apiwrap/CommonControl.h | 2 -- sakura_core/window/CMainToolBar.cpp | 33 ++++++++++++----------------- 2 files changed, 14 insertions(+), 21 deletions(-) diff --git a/sakura_core/apiwrap/CommonControl.h b/sakura_core/apiwrap/CommonControl.h index 6439f2cd64..fab589a0f6 100644 --- a/sakura_core/apiwrap/CommonControl.h +++ b/sakura_core/apiwrap/CommonControl.h @@ -86,8 +86,6 @@ namespace ApiWrap inline int Toolbar_SetButtonInfo(HWND hwndCtl, int index, TBBUTTONINFO* info) { return (int)(DWORD)::SendMessage(hwndCtl, TB_SETBUTTONINFO, (WPARAM)index, (LPARAM)info); } inline BOOL Toolbar_SetButtonSize(HWND hwndCtl, int width, int height) { return (BOOL)(DWORD)::SendMessage(hwndCtl, TB_SETBUTTONSIZE, 0L, MAKELONG(width, height)); } inline DWORD Toolbar_SetExtendedStyle(HWND hwndCtl, DWORD styles) { return (DWORD)::SendMessage(hwndCtl, TB_SETEXTENDEDSTYLE, 0L, (LPARAM)styles); } - inline int Toolbar_GetState(HWND hwndCtl, int index) { return (int)::SendMessage(hwndCtl, TB_GETSTATE, (WPARAM)index, 0L); } - inline BOOL Toolbar_SetState(HWND hwndCtl, int index, WORD state) { return (BOOL)::SendMessage(hwndCtl, TB_SETSTATE, (WPARAM)index, state); } // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // Tooltip コントロール // diff --git a/sakura_core/window/CMainToolBar.cpp b/sakura_core/window/CMainToolBar.cpp index 43a8b7d3a1..b1344db36e 100644 --- a/sakura_core/window/CMainToolBar.cpp +++ b/sakura_core/window/CMainToolBar.cpp @@ -535,25 +535,20 @@ void CMainToolBar::UpdateToolbar( void ) TBBUTTON tbb = m_pOwner->GetMenuDrawer().getButton( GetDllShareData().m_Common.m_sToolBar.m_nToolBarButtonIdxArr[i] ); - int state = Toolbar_GetState( m_hwndToolBar, tbb.idCommand ); - if( state != -1 ) - { - WORD stateToSet = 0; - // 機能が利用可能か調べる - if( IsFuncEnable( m_pOwner->GetDocument(), &GetDllShareData(), (EFunctionCode)tbb.idCommand ) ) - { - stateToSet |= TBSTATE_ENABLED; - } - // 機能がチェック状態か調べる - if( IsFuncChecked( m_pOwner->GetDocument(), &GetDllShareData(), (EFunctionCode)tbb.idCommand ) ) - { - stateToSet |= TBSTATE_CHECKED; - } - if( state != stateToSet ) - { - Toolbar_SetState( m_hwndToolBar, tbb.idCommand, stateToSet ); - } - } + + // 機能が利用可能か調べる + Toolbar_EnableButton( + m_hwndToolBar, + tbb.idCommand, + IsFuncEnable( m_pOwner->GetDocument(), &GetDllShareData(), (EFunctionCode)tbb.idCommand ) + ); + + // 機能がチェック状態か調べる + Toolbar_CheckButton( + m_hwndToolBar, + tbb.idCommand, + IsFuncChecked( m_pOwner->GetDocument(), &GetDllShareData(), (EFunctionCode)tbb.idCommand ) + ); } } } From 0c429b32cf2cc09a91ed7d0ffdc69a06ba732254 Mon Sep 17 00:00:00 2001 From: Masaru Tsuchiyama Date: Sat, 9 May 2020 08:49:34 +0900 Subject: [PATCH 0010/1024] =?UTF-8?q?=E5=88=A5=E3=80=85=E3=81=AE=20ZIP=20?= =?UTF-8?q?=E3=81=A8=E3=81=97=E3=81=A6=20upload=20=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build-sakura.yml | 42 +++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-sakura.yml b/.github/workflows/build-sakura.yml index 931236d651..f60263d3eb 100644 --- a/.github/workflows/build-sakura.yml +++ b/.github/workflows/build-sakura.yml @@ -75,8 +75,44 @@ jobs: shell: cmd ## see https://github.com/actions/upload-artifact - - name: Upload + - name: Upload Installer uses: actions/upload-artifact@v2 with: - name: exe ${{ matrix.platform }} ${{ matrix.config }} - path: '*.zip' + name: Installer ${{ matrix.platform }} ${{ matrix.config }} + path: 'sakura-*-Installer.zip' + + - name: Upload Installer MD5 + uses: actions/upload-artifact@v2 + with: + name: Installer MD5 ${{ matrix.platform }} ${{ matrix.config }} + path: 'sakura-*-Installer.zip.md5' + + - name: Upload Exe + uses: actions/upload-artifact@v2 + with: + name: Exe ${{ matrix.platform }} ${{ matrix.config }} + path: 'sakura-*-Exe.zip' + + - name: Upload Exe md5 + uses: actions/upload-artifact@v2 + with: + name: Exe md5 ${{ matrix.platform }} ${{ matrix.config }} + path: 'sakura-*-Exe.zip.md5' + + - name: Upload Log + uses: actions/upload-artifact@v2 + with: + name: Log ${{ matrix.platform }} ${{ matrix.config }} + path: 'sakura-*-Log.zip' + + - name: Upload Asm + uses: actions/upload-artifact@v2 + with: + name: Asm ${{ matrix.platform }} ${{ matrix.config }} + path: 'sakura-*-Asm.zip' + + - name: Upload Dev + uses: actions/upload-artifact@v2 + with: + name: Dev ${{ matrix.platform }} ${{ matrix.config }} + path: 'sakura-*-Dev.zip' From d03e744de5ddbd43ef9103470d8680204e75d9c5 Mon Sep 17 00:00:00 2001 From: Masaru Tsuchiyama Date: Wed, 27 May 2020 07:28:07 +0900 Subject: [PATCH 0011/1024] =?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=80=81=E5=90=8D=E5=89=8D=E3=82=92=E4=BF=AE=E6=AD=A3=20(?= =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC=E5=AF=BE=E5=BF=9C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build-sakura.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-sakura.yml b/.github/workflows/build-sakura.yml index f60263d3eb..57a671850a 100644 --- a/.github/workflows/build-sakura.yml +++ b/.github/workflows/build-sakura.yml @@ -93,10 +93,10 @@ jobs: name: Exe ${{ matrix.platform }} ${{ matrix.config }} path: 'sakura-*-Exe.zip' - - name: Upload Exe md5 + - name: Upload Exe MD5 uses: actions/upload-artifact@v2 with: - name: Exe md5 ${{ matrix.platform }} ${{ matrix.config }} + name: Exe MD5 ${{ matrix.platform }} ${{ matrix.config }} path: 'sakura-*-Exe.zip.md5' - name: Upload Log From 5479e2a0730dac18295e3b459603ffbb6b97ba53 Mon Sep 17 00:00:00 2001 From: Masaru Tsuchiyama Date: Sat, 30 May 2020 19:17:36 +0900 Subject: [PATCH 0012/1024] =?UTF-8?q?ver=202.4.1=20=E3=82=92=E3=83=AA?= =?UTF-8?q?=E3=83=AA=E3=83=BC=E3=82=B9=E3=81=97=E3=81=9F=E3=81=AE=E3=81=A7?= =?UTF-8?q?=20ver=202.4.2=20=E3=81=AB=E4=B8=8A=E3=81=92=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- help/sakura/res/HLP000001.html | 4 ++-- sakura_core/version.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/help/sakura/res/HLP000001.html b/help/sakura/res/HLP000001.html index b90b88c5d6..fc7d8ea8f5 100644 --- a/help/sakura/res/HLP000001.html +++ b/help/sakura/res/HLP000001.html @@ -15,8 +15,8 @@ -->

-
サクラエディタ Ver 2.4.1 (開発版)
-
ヘルプファイル最終更新日 2020/04/19
+
サクラエディタ Ver 2.4.2 (開発版)
+
ヘルプファイル最終更新日 2020/05/30
https://sakura-editor.github.io/

サクラエディタ(旧称:テキストエディタ)は、「たけ(竹パンダ)」さんのテキストエディタSAKURAの公開ソース(2000/02/21付)を元に不具合修正および機能拡張を行ったものです。
diff --git a/sakura_core/version.h b/sakura_core/version.h index 281d5dfd54..0b5f133590 100644 --- a/sakura_core/version.h +++ b/sakura_core/version.h @@ -13,7 +13,7 @@ // d => 0 #define VER_A 2 // a of ver a.b.c.d #define VER_B 4 // b of ver a.b.c.d -#define VER_C 1 // c of ver a.b.c.d +#define VER_C 2 // c of ver a.b.c.d #ifdef CI_BUILD_NUMBER_INT #define VER_D CI_BUILD_NUMBER_INT // d of ver a.b.c.d #else From 038e8f4ecd29bd99a418688687f7ee24f8342394 Mon Sep 17 00:00:00 2001 From: KENCH <39618965+KENCHjp@users.noreply.github.com> Date: Sun, 31 May 2020 06:48:39 +0900 Subject: [PATCH 0013/1024] =?UTF-8?q?v2.4.1=E3=83=AA=E3=83=AA=E3=83=BC?= =?UTF-8?q?=E3=82=B9=E3=81=AB=E4=BC=B4=E3=81=86CHANGELOG=E5=8F=8D=E6=98=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 78ac0d15ee..a789a3d1a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,22 @@ # Change Log +## [Unreleased](https://github.com/sakura-editor/sakura/tree/HEAD) + +[Full Changelog](https://github.com/sakura-editor/sakura/compare/v2.4.1...HEAD) + +### その他変更 + +- ver 2.4.1 をリリースしたので ver 2.4.2 に上げる [\#1317](https://github.com/sakura-editor/sakura/pull/1317) ([m-tmatma](https://github.com/m-tmatma)) +- Release/v2.4.1 [\#1316](https://github.com/sakura-editor/sakura/pull/1316) ([KENCHjp](https://github.com/KENCHjp)) + +## [v2.4.1](https://github.com/sakura-editor/sakura/tree/v2.4.1) (2020-05-30) + +[Full Changelog](https://github.com/sakura-editor/sakura/compare/v2.4.1-beta3...v2.4.1) + +### その他変更 + +- GitHub Actions の成果物を別々の ZIP として upload する [\#1285](https://github.com/sakura-editor/sakura/pull/1285) ([m-tmatma](https://github.com/m-tmatma)) + ## [v2.4.1-beta3](https://github.com/sakura-editor/sakura/tree/v2.4.1-beta3) (2020-05-20) [Full Changelog](https://github.com/sakura-editor/sakura/compare/v2.4.1-beta2...v2.4.1-beta3) @@ -17,6 +34,9 @@ [Full Changelog](https://github.com/sakura-editor/sakura/compare/v2.4.0...v2.4.1-beta2) +### 仕様変更 + + ### バグ修正 - CImpExpRegex::Import の実装を見直し [\#1273](https://github.com/sakura-editor/sakura/pull/1273) ([beru](https://github.com/beru)) @@ -34,7 +54,6 @@ - CodeFactor の警告を修正 [\#1272](https://github.com/sakura-editor/sakura/pull/1272) ([m-tmatma](https://github.com/m-tmatma)) - GitHub Actions の yml のCodeFactor の警告 [\#1270](https://github.com/sakura-editor/sakura/pull/1270) ([m-tmatma](https://github.com/m-tmatma)) - azure pipeline の表示名のタイポ修正 [\#1258](https://github.com/sakura-editor/sakura/pull/1258) ([m-tmatma](https://github.com/m-tmatma)) -- PR1254 のヘルプの修正を 2.4.1 beta1 にマージする [\#1257](https://github.com/sakura-editor/sakura/pull/1257) ([m-tmatma](https://github.com/m-tmatma)) - googletest を無視リストに追加 [\#1256](https://github.com/sakura-editor/sakura/pull/1256) ([m-tmatma](https://github.com/m-tmatma)) - 履歴コンボの履歴削除機能の発動条件を変更したい [\#1255](https://github.com/sakura-editor/sakura/pull/1255) ([berryzplus](https://github.com/berryzplus)) - ヘルプの動作環境OSの記述を更新 [\#1254](https://github.com/sakura-editor/sakura/pull/1254) ([beru](https://github.com/beru)) @@ -49,7 +68,6 @@ - UNICODE一本化対応で見落としていたA版専用処理を削りたい [\#1229](https://github.com/sakura-editor/sakura/pull/1229) ([berryzplus](https://github.com/berryzplus)) - コピー代入のメソッド名を書き間違っているのを訂正 [\#1228](https://github.com/sakura-editor/sakura/pull/1228) ([berryzplus](https://github.com/berryzplus)) - googletestのビルドをバッチスクリプトで行うように変更したい [\#1227](https://github.com/sakura-editor/sakura/pull/1227) ([berryzplus](https://github.com/berryzplus)) -- Release/v2.4.0 [\#1226](https://github.com/sakura-editor/sakura/pull/1226) ([KENCHjp](https://github.com/KENCHjp)) - Grep置換ダイアログの「置換後」の実装を置換ダイアログと合わせる [\#1224](https://github.com/sakura-editor/sakura/pull/1224) ([berryzplus](https://github.com/berryzplus)) ## [v2.4.0](https://github.com/sakura-editor/sakura/tree/v2.4.0) (2020-04-18) @@ -451,4 +469,4 @@ -\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* +\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* \ No newline at end of file From 5ad814f603f43df60dcf6319f63291c5af446ce3 Mon Sep 17 00:00:00 2001 From: Katsuhisa Yuasa Date: Sun, 31 May 2020 20:34:42 +0900 Subject: [PATCH 0014/1024] =?UTF-8?q?=E3=83=84=E3=83=BC=E3=83=AB=E3=83=90?= =?UTF-8?q?=E3=83=BC=E3=81=AE=E7=8A=B6=E6=85=8B=E6=9B=B4=E6=96=B0=E3=82=92?= =?UTF-8?q?=E5=BF=85=E8=A6=81=E3=81=AA=E5=A0=B4=E5=90=88=E3=81=AB=E3=81=AE?= =?UTF-8?q?=E3=81=BF=E8=A1=8C=E3=81=86=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89?= =?UTF-8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/apiwrap/CommonControl.h | 2 ++ sakura_core/window/CMainToolBar.cpp | 33 +++++++++++++++++------------ 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/sakura_core/apiwrap/CommonControl.h b/sakura_core/apiwrap/CommonControl.h index fab589a0f6..6439f2cd64 100644 --- a/sakura_core/apiwrap/CommonControl.h +++ b/sakura_core/apiwrap/CommonControl.h @@ -86,6 +86,8 @@ namespace ApiWrap inline int Toolbar_SetButtonInfo(HWND hwndCtl, int index, TBBUTTONINFO* info) { return (int)(DWORD)::SendMessage(hwndCtl, TB_SETBUTTONINFO, (WPARAM)index, (LPARAM)info); } inline BOOL Toolbar_SetButtonSize(HWND hwndCtl, int width, int height) { return (BOOL)(DWORD)::SendMessage(hwndCtl, TB_SETBUTTONSIZE, 0L, MAKELONG(width, height)); } inline DWORD Toolbar_SetExtendedStyle(HWND hwndCtl, DWORD styles) { return (DWORD)::SendMessage(hwndCtl, TB_SETEXTENDEDSTYLE, 0L, (LPARAM)styles); } + inline int Toolbar_GetState(HWND hwndCtl, int index) { return (int)::SendMessage(hwndCtl, TB_GETSTATE, (WPARAM)index, 0L); } + inline BOOL Toolbar_SetState(HWND hwndCtl, int index, WORD state) { return (BOOL)::SendMessage(hwndCtl, TB_SETSTATE, (WPARAM)index, state); } // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // Tooltip コントロール // diff --git a/sakura_core/window/CMainToolBar.cpp b/sakura_core/window/CMainToolBar.cpp index b1344db36e..bde9c7bb55 100644 --- a/sakura_core/window/CMainToolBar.cpp +++ b/sakura_core/window/CMainToolBar.cpp @@ -535,20 +535,25 @@ void CMainToolBar::UpdateToolbar( void ) TBBUTTON tbb = m_pOwner->GetMenuDrawer().getButton( GetDllShareData().m_Common.m_sToolBar.m_nToolBarButtonIdxArr[i] ); - - // 機能が利用可能か調べる - Toolbar_EnableButton( - m_hwndToolBar, - tbb.idCommand, - IsFuncEnable( m_pOwner->GetDocument(), &GetDllShareData(), (EFunctionCode)tbb.idCommand ) - ); - - // 機能がチェック状態か調べる - Toolbar_CheckButton( - m_hwndToolBar, - tbb.idCommand, - IsFuncChecked( m_pOwner->GetDocument(), &GetDllShareData(), (EFunctionCode)tbb.idCommand ) - ); + int state = Toolbar_GetState( m_hwndToolBar, tbb.idCommand ); + if( state != -1 ) + { + WORD stateToSet = state & ~(TBSTATE_ENABLED | TBSTATE_CHECKED); + // 機能が利用可能か調べる + if( IsFuncEnable( m_pOwner->GetDocument(), &GetDllShareData(), (EFunctionCode)tbb.idCommand ) ) + { + stateToSet |= TBSTATE_ENABLED; + } + // 機能がチェック状態か調べる + if( IsFuncChecked( m_pOwner->GetDocument(), &GetDllShareData(), (EFunctionCode)tbb.idCommand ) ) + { + stateToSet |= TBSTATE_CHECKED; + } + if( state != stateToSet ) + { + Toolbar_SetState( m_hwndToolBar, tbb.idCommand, stateToSet ); + } + } } } } From 7b01eb529b890078417d8cf3194d014fd3a0a7ab Mon Sep 17 00:00:00 2001 From: Katsuhisa Yuasa Date: Sat, 13 Jun 2020 23:01:10 +0900 Subject: [PATCH 0015/1024] =?UTF-8?q?=E3=83=95=E3=82=A9=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=81=AE=E6=8B=A1=E5=A4=A7=E7=B8=AE=E5=B0=8F=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E6=99=82=E3=81=AB=E3=83=95=E3=82=A9=E3=83=B3=E3=83=88=E3=82=B5?= =?UTF-8?q?=E3=82=A4=E3=82=BA=E3=81=8C=E5=A4=89=E3=82=8F=E3=82=89=E3=81=AA?= =?UTF-8?q?=E3=81=84=E5=A0=B4=E5=90=88=E3=81=AF=E5=87=A6=E7=90=86=E3=82=92?= =?UTF-8?q?=E8=A1=8C=E3=82=8F=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=E5=88=A4=E5=AE=9A=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ctrl キーを押しながらマウスホイールを回し続けると画面の見た目が変わらないのにCPU使用率が上がる事への対策 --- sakura_core/cmd/CViewCommander_Settings.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/sakura_core/cmd/CViewCommander_Settings.cpp b/sakura_core/cmd/CViewCommander_Settings.cpp index 8a16e1468a..e985c07880 100644 --- a/sakura_core/cmd/CViewCommander_Settings.cpp +++ b/sakura_core/cmd/CViewCommander_Settings.cpp @@ -286,7 +286,12 @@ void CViewCommander::Command_SETFONTSIZE( int fontSize, int shift, int mode ) for( i = 0; i < _countof(sizeTable); i++) { if( nPointSize <= sizeTable[i] ){ int index = t_max(0, t_min((int)_countof(sizeTable) - 1, (int)(i + shift))); - nPointSize = sizeTable[index]; + int nNewPointSize = sizeTable[index]; + // フォントサイズが変わらないので終了 + if (nPointSize == nNewPointSize) { + return; + } + nPointSize = nNewPointSize; break; } } From 8ddcb889193cfff7a0a4835fa238d6c03a1f8745 Mon Sep 17 00:00:00 2001 From: Katsuhisa Yuasa Date: Sun, 28 Jun 2020 10:15:56 +0900 Subject: [PATCH 0016/1024] =?UTF-8?q?=E3=80=8CWindows=2010=20=E3=81=A7?= =?UTF-8?q?=E3=81=AE=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E6=8B=A1=E5=BC=B5?= =?UTF-8?q?=E5=AD=90=E9=96=A2=E9=80=A3=E4=BB=98=E3=81=91=E3=80=8D=E3=80=8C?= =?UTF-8?q?Grep=E3=80=8D=E3=80=8CGrep=E7=BD=AE=E6=8F=9B=E3=80=8D=E3=81=AE?= =?UTF-8?q?=E7=94=BB=E5=83=8F=E3=81=8C=E3=82=84=E3=81=9F=E3=82=89=E5=A4=A7?= =?UTF-8?q?=E3=81=8D=E3=81=8F=E3=81=A6=E8=A6=8B=E3=81=A5=E3=82=89=E3=81=84?= =?UTF-8?q?=E5=95=8F=E9=A1=8C=E3=81=AB=E5=AF=BE=E5=87=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- help/sakura/res/HLP000067.html | 2 +- help/sakura/res/HLP000362.html | 2 +- help/sakura/res/HLP000374.html | 18 +++++++++--------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/help/sakura/res/HLP000067.html b/help/sakura/res/HLP000067.html index 0c2d3fa486..59c340e06e 100644 --- a/help/sakura/res/HLP000067.html +++ b/help/sakura/res/HLP000067.html @@ -12,7 +12,7 @@

Grep

-
+
ディスクにある複数のファイルから、指定した文字列を検索することができます。
指定したフォルダの下層のフォルダを全て検索することもできます。
diff --git a/help/sakura/res/HLP000362.html b/help/sakura/res/HLP000362.html index c9fd2ca94c..217d2e24b5 100644 --- a/help/sakura/res/HLP000362.html +++ b/help/sakura/res/HLP000362.html @@ -12,7 +12,7 @@

Grep置換

-
+
ディスクにある複数のファイルから、指定した文字列を検索・置換することができます。(sakura:2.2.0.0以降)
指定したフォルダの下層のフォルダを全て置換することもできます。
diff --git a/help/sakura/res/HLP000374.html b/help/sakura/res/HLP000374.html index 97ae488694..5055fdb311 100644 --- a/help/sakura/res/HLP000374.html +++ b/help/sakura/res/HLP000374.html @@ -25,31 +25,31 @@

関連付け作業

1. スタートボタンをクリック または Windowsキーを押す
2. 設定ボタンをクリック
-

+

3. アプリをクリック
-

+

4. 規定のアプリをクリック
-

+

5. 以下の画面で下までスクロールする
-

+

6. ファイルの種類ごとに既定のアプリを選ぶをクリック
-

+

7. 以下の画面で下までスクロールする
-

+

8. .txt の右のメモ帳をクリック
-

+

9. サクラエディタをクリック
-

+

10. 以下の画面になり、関連付けが完了
-

+

From 63b22f8081d652de31ff07595eb2f428b61bc9c4 Mon Sep 17 00:00:00 2001 From: Katsuhisa Yuasa Date: Mon, 29 Jun 2020 03:07:08 +0900 Subject: [PATCH 0017/1024] =?UTF-8?q?=E3=80=8CWindows=2010=20=E3=81=A7?= =?UTF-8?q?=E3=81=AE=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E6=8B=A1=E5=BC=B5?= =?UTF-8?q?=E5=AD=90=E9=96=A2=E9=80=A3=E4=BB=98=E3=81=91=E3=80=8D=E3=83=9A?= =?UTF-8?q?=E3=83=BC=E3=82=B8=E3=81=AE=E7=94=BB=E5=83=8F=E3=81=8C=E5=A4=A7?= =?UTF-8?q?=E3=81=8D=E3=81=8F=E8=A1=A8=E7=A4=BA=E3=81=95=E3=82=8C=E3=82=8B?= =?UTF-8?q?=E5=95=8F=E9=A1=8C=E3=81=AB=E5=AF=BE=E5=87=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 表示スケール100%のキャプチャ画像を使うように変更 srcset属性を使うように記述変更 --- help/sakura/res/HLP000374.html | 18 +++++++++--------- .../images/FileAssoc-1-StartMenu_100pct.png | Bin 0 -> 9153 bytes ...u.png => FileAssoc-1-StartMenu_150pct.png} | Bin .../res/images/FileAssoc-2-Setting_100pct.png | Bin 0 -> 34752 bytes ...ing.png => FileAssoc-2-Setting_150pct.png} | Bin .../images/FileAssoc-3-Application_100pct.png | Bin 0 -> 144479 bytes ...png => FileAssoc-3-Application_150pct.png} | Bin .../images/FileAssoc-4-DefaultApp_100pct.png | Bin 0 -> 143034 bytes ....png => FileAssoc-4-DefaultApp_150pct.png} | Bin .../FileAssoc-5-ChooseDefaultApp_100pct.png | Bin 0 -> 124946 bytes ...> FileAssoc-5-ChooseDefaultApp_150pct.png} | Bin .../FileAssoc-6-ChooseDefaultApp_100pct.png | Bin 0 -> 36907 bytes ...> FileAssoc-6-ChooseDefaultApp_150pct.png} | Bin ...FileAssoc-7-ChooseDefaultAppTxt_100pct.png | Bin 0 -> 35161 bytes ...ileAssoc-7-ChooseDefaultAppTxt_150pct.png} | Bin ...FileAssoc-8-ChooseDefaultAppTxt_100pct.png | Bin 0 -> 45524 bytes ...ileAssoc-8-ChooseDefaultAppTxt_150pct.png} | Bin .../FileAssoc-9-ChooseTxt-Sakura_100pct.png | Bin 0 -> 33416 bytes ...> FileAssoc-9-ChooseTxt-Sakura_150pct.png} | Bin 19 files changed, 9 insertions(+), 9 deletions(-) create mode 100644 help/sakura/res/images/FileAssoc-1-StartMenu_100pct.png rename help/sakura/res/images/{FileAssoc-1-StartMenu.png => FileAssoc-1-StartMenu_150pct.png} (100%) create mode 100644 help/sakura/res/images/FileAssoc-2-Setting_100pct.png rename help/sakura/res/images/{FileAssoc-2-Setting.png => FileAssoc-2-Setting_150pct.png} (100%) create mode 100644 help/sakura/res/images/FileAssoc-3-Application_100pct.png rename help/sakura/res/images/{FileAssoc-3-Application.png => FileAssoc-3-Application_150pct.png} (100%) create mode 100644 help/sakura/res/images/FileAssoc-4-DefaultApp_100pct.png rename help/sakura/res/images/{FileAssoc-4-DefaultApp.png => FileAssoc-4-DefaultApp_150pct.png} (100%) create mode 100644 help/sakura/res/images/FileAssoc-5-ChooseDefaultApp_100pct.png rename help/sakura/res/images/{FileAssoc-5-ChooseDefaultApp.png => FileAssoc-5-ChooseDefaultApp_150pct.png} (100%) create mode 100644 help/sakura/res/images/FileAssoc-6-ChooseDefaultApp_100pct.png rename help/sakura/res/images/{FileAssoc-6-ChooseDefaultApp.png => FileAssoc-6-ChooseDefaultApp_150pct.png} (100%) create mode 100644 help/sakura/res/images/FileAssoc-7-ChooseDefaultAppTxt_100pct.png rename help/sakura/res/images/{FileAssoc-7-ChooseDefaultAppTxt.png => FileAssoc-7-ChooseDefaultAppTxt_150pct.png} (100%) create mode 100644 help/sakura/res/images/FileAssoc-8-ChooseDefaultAppTxt_100pct.png rename help/sakura/res/images/{FileAssoc-8-ChooseDefaultAppTxt.png => FileAssoc-8-ChooseDefaultAppTxt_150pct.png} (100%) create mode 100644 help/sakura/res/images/FileAssoc-9-ChooseTxt-Sakura_100pct.png rename help/sakura/res/images/{FileAssoc-9-ChooseTxt-Sakura.png => FileAssoc-9-ChooseTxt-Sakura_150pct.png} (100%) diff --git a/help/sakura/res/HLP000374.html b/help/sakura/res/HLP000374.html index 5055fdb311..a3143ff055 100644 --- a/help/sakura/res/HLP000374.html +++ b/help/sakura/res/HLP000374.html @@ -25,31 +25,31 @@

関連付け作業

1. スタートボタンをクリック または Windowsキーを押す
2. 設定ボタンをクリック
-

+

3. アプリをクリック
-

+

4. 規定のアプリをクリック
-

+

5. 以下の画面で下までスクロールする
-

+

6. ファイルの種類ごとに既定のアプリを選ぶをクリック
-

+

7. 以下の画面で下までスクロールする
-

+

8. .txt の右のメモ帳をクリック
-

+

9. サクラエディタをクリック
-

+

10. 以下の画面になり、関連付けが完了
-

+

diff --git a/help/sakura/res/images/FileAssoc-1-StartMenu_100pct.png b/help/sakura/res/images/FileAssoc-1-StartMenu_100pct.png new file mode 100644 index 0000000000000000000000000000000000000000..398182f6e582ae4c07a74fd4f0d32d9c33f154a0 GIT binary patch literal 9153 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 literal 0 HcmV?d00001 diff --git a/help/sakura/res/images/FileAssoc-2-Setting.png b/help/sakura/res/images/FileAssoc-2-Setting_150pct.png similarity index 100% rename from help/sakura/res/images/FileAssoc-2-Setting.png rename to help/sakura/res/images/FileAssoc-2-Setting_150pct.png diff --git a/help/sakura/res/images/FileAssoc-3-Application_100pct.png b/help/sakura/res/images/FileAssoc-3-Application_100pct.png new file mode 100644 index 0000000000000000000000000000000000000000..27df6f8cb7e9f5f32e3b58219fd132479c8ab759 GIT binary patch literal 144479 zcmY(qbySpH`#p{{!_XkzT@nMxAl==aLx(6xNh2K!3@L*&N=pk;(j7x6p^^dv2oggL z`JMOoK0fc~_t(AFtTk($`<(0AXJ32oJ5gU(jR-&oz`(#D(ok16#K6FA!N9;|!pB7a z!uyUa1OroyOG8<~IM8-KAFtEK`P0EmU2Z?tQ!RGvYR#t$p zwtxc8%UEI8-YX}%`DnWD#PM9~R>&|DhsmXf*&1Nbregz0>~RbT+T9pQ-f>a^`;ocW zbNp)<^uVg--h18Z`qy$DqEIRyE@yPGg(`1da(VZ0hUou$xBtB2Z^oDKo>+-xSAL%qc9QcYk9^^BN%h zpc~sZ793B70)*d5eCuR8?@f3x-oUjH*i5uJhxCXWp;)7D&_aQNbjeL~-NBQf{8G~S zF~=QgFP2*+1Wl|*L3-@^XM2@5G`g7My9-FT{H@>J0c1k*-!lMt-D;7DX1>79Bqb1S zC+MRd7#b_aGZsGJN3!iCE%)Q;qxQ3wv1c(K%O9SkQ}$7w;->#Xk(7eiCa^Uz+-ao) zg)g+eXRPEZvNN4>a8p_LB%#Ry_^twUgGL$}y56RtF?c!;Dq-iK0=HgL>;#kfoNty-K zo#gGxd5VsEA#5)LB=5h%R*-yS{kvO#H;7KVCdom4KIOdWz^DZ2Q@l6 zQHt$fu>$9LYI>qwuN_Hk(zY+9PBS=_$J)rB4|BbFugYIdy2$u$_aMBj*foF`D#H{V z?=dIL7HN-0GFX500_>KWEW7B2$HcLK$!1UMc?M(nqip=w$lDcnS zY0|RA()G0gG?a+);Csp|XQdA4 z^9LVZhx0s!z+k(N{05u!u{5b=NI5cciwPJv?jNe2{&J~IM!6P`k|yY!=K(pbXXwQ_ z$1Glx&^zuNeMA<4)1nuS6?M)*`p;FJOuvX4mC$jn$WZ_oJ+8p-WC_e!Ru_CB+0$rD zNuNS6pPt-+low0}{^BKyjX2hKKq!PmWMtnZXh@g@{W4Z zWr`qelqA;H^7OR_Vs}`40{RYOPoE8Q$J&k!0xcy$)1nj$^$d+!{r{8x}XsX#|NiL-0sUnN)g2yEpTe& zVA^8OJ7+e%UXc?ASW_#>sn*Er4=D%(*%kLPTG6SAWB;!lp=#Se*yzKm(B~A#6+L`4 zqO>Sjv<{V;^0}b*ds1PE#g09}IgsiYziNEg3oPz|fVUo){>G7mmiFBR5me_FC@(+8 zzxRx0aAeXq(LbE{0P^f?61kfr;wSs{qg?MMWG;U0fC|E9V)*T~ilj_)K=tt>Y!(=s zTtFS9fZ&PSh)ZD*YA42z<_$@uHrutdm?y_m{g?}2-UH`KCBOOXF{*tLtyo*b=q%Jn z{HNv9)3Ypdb%Vc40wz745z{0@#Rcjx z{B!Q#eXLBVrv@JJ03SZz0ktbQlgs_|U$9v)cT6S;UBj}CJCPzWe!z%}*9OI59e@GH zfT3~k4q8{k-6*&VLmL6DKc064ZNr9{XvZ^RGIXVOzdx;Wj+}@YtC<3Ea=|%dUK4U< zPB2$ta3YuK@V78|8)c4nMf!M7m_=l$2+xy;;?U;% zsuZr5BE-nSQT#H21umS*7$whgRHw2uHfY*=OchJZ6>&fF^8jf^OtHNz2?RNI9 zy3)?uwYaxP+AH@M671`f`Ig}3)`_LUZ?c6E4+qw-_e8qEg@>V&<1Ce zc3Fa%jsLf@ch9SS1Ndv!P{mZ|Z9kZl$rrUq$BLL0)x+*~N>l0NZtgC+^@^cc6_6d8 z3f(Eu`2B46Vpq!6mEdaZe*6A7B3e=9$5mVeWVj(F6!Z5vB968}TU0i7;V5St6?T6{ znc&ms9S1Hl89mE*7RNxMZ7g;oK-Pn^R8!pZX$tc1xP94AHhw|qFPyeBlwz|R7Aj%(g0T5ZqG}mtSU&f%u8&p>1RVT8 z!6_HUn?Q)0CitP^-$NV#CUcf>?%~cZzN8YF#xiCZAabfbx?b7W+KLFA5EtvqqRL}sKTEgQy`29`li@2sK zsi&JGY4*oezH>T{|5LlC)1s>obId%v+O6N46YTKU*yh%P^uxzprM}Ax#JnZ4EqMvE^VqOaehw-Tgy?;~+b&YxD+J!XX8{0-gAGg&h zxhHxz?`rcRmj45v)od95z`!86jzk_=I6iJo$o}%%Kc6I>upVK9fVNg60`#8sz37!s zw_OY~g$Ssnj0S{3vG0B5;!lBF^Xn}?oP3^)+B6?xomqtWf9! z$L>4>jLiyR?^jS~S?|<()d~oUBA8IILmFTlZQR2NA>6T%U_+hy(7c;2ejL2{OzV0v z@31$n)FhC~nkbD3L{avmX8d@BPqE(<6Hu`|IGY#IO@d$sjBRJQ%+)yr!@H-)k?<0i zeE<0&ZRLM>5Q+^~Y3|Zv8}nHIF=&cp;mMx@g@RW>6q0||F<6PmQX_7D*#s;(mnKW3 zQiQVgksDOF+M#WZ%$_kh?X>LQ0B&v;PZK_iP=uZ zW5=4cMjA;z-*fJG3))47ZO9rG|D@%kqw8!eVrShQ>YNXX67^n))o8uZX4mg1ug<6c zFsK9z<~%IIFflQrzF3UdR|bpU2t~C7KYd+tEflnxQz8a$cC6mky3!d-G~(Heu8Tyo zGt}@JF?Ns)sNSMqlvz!M(k4@Umw-F3NJ@=4tl0%WKZAW^jK9vaEO^ze52!;TxrR}8 zK>alTSNCv9W{7?&%v{vBTYj@rp0aognvpkN5H6|#5hz6E>uuj2cM5N9JrNXC&t+_U z71*J(Q*AP058jPegDTa>sY@Hzhn4;)I(0#QtvPv70yR-$+;*(H^1eF|w7M|Ok8nAA zuJqqCN+LCqSKO~Hb|>+}!OU(##p;Vqk2q&rs0tX&=9#lK6B)YR=pUsx9X+fd-h*9W z6K1}mwA+@qkG6c7#=~8 z__u>dk{`zHh=-|?aKtkNM;^SYVcd1u{qR;6k>@)=-hKK(C}R9K%%^AN30d*Tbf&whhK%ejY>D@ihJ%_`_xIJjLdh_UCex&2 zp(b{HHU3+U@WrZV9DyXx8c}8DNiqdrB*R-b)v4}Rv`1Dxcl_2m|FqAsl2dM45c64J!?A97h~NEl>8FRy;rMf`j*{1FY;has!iYfOTJtv#HUak!JlL@C%^ zy$r{l$f*p-Wid(E4hm8D)-!M;k^2q}`GsNUORYbBvzQvAbTi?kk}u%*c5)eR4I2K*f~M5HGE4rLv|t zHMa6nzY-Fl#oxUbdL$_Ug-atDNO0xXD|qV>#gET@(Qozd5bi?QnGsYa!~Rm9 zzJ`P1Ry^iVZ$}q}C5E+l`8S?(Tvrkq=y7kHMbFqT)&Tot&BFTbOh|Bse40H`UNlTc zhd|faumvtaQV$bN2@>Z+lQ4f|1WmfOTYrC5gKvu@DKOKj6hxd10WP`qNnTv9{ z+savPzKCB!5hyJK%^=oB!t{qq$`s6P97xi_WSKzL?HwW0$vLd5tsXFT)-ly*H76w% zr_9deoj@)QmqJy&_=yjK^%jNJ%2b_V0I-v?6n7P$OZI7hHm)geObr!&XH806P%H9b zgWUPZW0l`Xdv({F8{hmiWGdfcJaRSAtmGdM>10D{Pm>3I8-7py_Mq#1s{zn`IJPJz z=Bsb>#>|RC7~U{xRM{pG*Gw;s6a|JJUsNiy@vv&^JM9VxHF~y&GpK_EQ3K1Scv9VZNs9zMVRI!qsc4J8vOPfcbQ; z*90qTplQDChYxjc8REpawSWXF?ICym2mL7Ovfno#1X>wLzWz)1>~S+}wI#%s-3Ns0 z7QIzwqGZXWLDNkEl`K2+^oOzdJdsj9%#!5qrxpg(Q`=&RZ*P3P$#P@VdJ;96u>k@p#!vyUId>!LL8eIU(z!Ty$%u&Y8#30yZ7_1Te{Tnd zw0}_#@cg6l&L6~u6GGK2ua)6u+ z*4yz;HatlJA3)Z6QsjvO?q`<;*$DxqB;ZRRK*@n{l|)Qk(( z#z|#fWY$IV)s-0NG#f7*8R*nfV-~6(hYWaEzcdY=5Z)giac*rt2D?xt5hKafrqPiwm_`&0V$)v?s22 zw@}T-{XQ;)r&cuTcp$U+KAGw=OEgASefiP(K|uO_6@u&O%U;PjUpYAuwzn<^ZxeBz zEK2iS%Zsyp-d>awY$EHML@$c<94O^G)ySp(rApqeVDX^LHyw(*<(tUTRyh2qTYijnkA zzWVA~^?5)xJ<^oEpN(lw*%Zl6aXk`|$Rjr*tX+UL8=*C{5PH+IQ+P<)GiEMH8N~%2 zW!j3Y>UFWF1QT#LHgx^G=2)%q6a(h<$ zP_D9b()WC@G$cGYB;qdC`>vyg?cqOXo5c2~bLhe~ zxV)7LxJg9C86#m&ImWvwn~9hDMR>HwvQ6#Pm`~mrlyUU)XaFfYd41^WhQ z8oUs83$W0;vmAKD0D*?<2C#5B5r>u_VdPQ3uu^nlv-N^eW3de#qlJc zlFAy5`Oi<|k7yX+QRZXqQF}a_l46T#jjEp&OvP_QbEpW{3k-6aBDQFCALd&E-q^N{ zjd=v%JH@e7f5I;omQjU|SwZ}kMnLt9QUsfF*T02oxSp4LC`>0HbnsS_gY1vH`E!ljes z*7zoU;)srZ^E8k11Q5q}>ZI(2u_y!1?D!==3R!vIZKXKi@5tvcj6^XW?i){13HL4T z?cIk*E_uI(lA{ZX6J|{y4%$@MD^p2sTMJWrHPUn7AJ1%ffmZ8V&vUOGf1=B7W#u~( zPLPP`?)cjm#WKFZo1X^-~`x5Wh(v^AzKkmtr5@4{qoeFyS7qNXKnrJky3S<(%V zudst6kCcAK6;ajQlk(^QCQM}X?aJJ@AC93AUml}R*8A>ye7gBB z%#rCRF{pd3pc&+r*zuC-T*&kml#g{+G2uCYmaruuK&9n`F>0R?uNYwK(d=Bb){&E8 z(qqsBatg>mCQ@{+sfzE#2on9wy1Gk?t6q@` z#bLSNC#o*81<)6Xi26ZOd^z5+5a4#quM|eqdKDs9ZxhP?UJWG)yT;-w1kATZid=!=qw9iZV&(yH`KJ%e?4Q_U9t66Nc+ocE<2J1ajCn|w2u|ia zXe`jXSRF^!nJvrQQ=$>>rJ0JrUsO}^a}v^!a^u2GN=C>jq>r6Wpw$=q=GZENr3VwL z<*d1e_!jOZ){rWD(}_G(>qJma{-5bDZk&)~{E!)j=}gOZqy@JaiDo8*s;JKMb?Q67 zeWZpZW4D(itEruwLX<{DM7$?j|HF!)rLzBNT8q zivTfPqLc z>T0?MBP3n?(Ke~|38`6euEMiun08aEa6j}NtMZ{I!gg_%>?=qE-W3Ey3G-e=71z;n zL2dA0Bd zKMJng)y?xS_8KCTaHVh8G%;w9!HQ~%iDTix#`u2t=4?*_Z4#cOH&JfhRc{PPmtx;wwcHtBF!#lldSkT>B)oVoe|5+4UE}(!k zIJws5OH3X)Bi)d=H){;bDt2woGfLj$Qao_lI*ZSA@pKz&J)P>YFL9}pk`V^=7S$w7 zyC_IZL<6uF>!}Wh&B}jcDM@gwspV{<>dU0Ttj$qs!~Y5#z;!}&?SCDMFB6Rocj!Ti z={k0JGKc?Uc$ul_lEV*gM%F!DfJZ$3-%Y^daIOLb(8RKy1rfK>%ue>I`pkCssQB8R z8>~r3g zi&#erxr)w5B&hbc>%(bYx7bcZKKy>;TcW=6AWbEZ3UijlQBZ(hd2cAmNQg{8Rh$tN`#Z!m>kiWUDfZ5o>iq99jC{E!nsAbPfVu);H zU=PPGvp%aI@mij}s5U+JhmpBuC^2iz%#$+_L^kSz7ibXSgP3+H+azNUXqp)Du8Dd_ zszVtwgLLJj)YsA-mx-U-BjrpmxmZOlgtbn|<<}>LYXlqoB^h?gBw~+*nEgk7L%Lh+ z-6~>D*`CPQSY@!`n`8QWTGs&9<$7Nb3M*9uZ!u0uWbiBTX*1vTP|0MB1|byG3)NKz z_~R1hjiq{cWWub*ofPYS)fqgYAi6=-NT6x) z9c{-)&I)fA>}n=S|5wjOB}!KGvN(nH7vSBhyZ6Y|u)mEkHtqMh+{z+?5R4V&g#C=L zjZN`kWZsYEw=or2Kaul;mb-5cxVZ6UMl;C&xn7kC1!`LrS-s&xH`~PDDaqAHx1`HU^e{|> z^&^=S9|8`I@B%rVaB;|@QVf|E8M_|1;B>qquQveShwn%Wn+$CvwW})yyNo*ZlsA&N zvN_!kO{74#_nAh=`|G0IrOMpyhm?|Due^su|^RLrFKDDM)^=(@^#Txlq#UgdNoMc zCqjkSx?~SaR%7y9gk6IvPwb=RjB=tcoFb%&-^gqqfxddSMJm38ch}y&xa*&Qg}z1p zJD~7cPwKMA1rd{uWG%?lQ+d8Mkse+Lez9sUam5GnUPe(BzWmXordPYez)~aP>h=tx z10<^G|9K+=j4`vYF8QH7dz0zopz0?q0gYP<5gfihbxf-&<|O6odRYDxDsSP5@dRQM zlqiaLU2es9`Hf7Gi~B8}0`~T0gX32qULxbv2selC4BAU6E}ZKAgG3$r{LkhxP&OWb zA{kjOv4`8_-8+SyITgqW3d}rGOzfdK^6GVJNP&%A*~b%}V-#`;6${f9v^R5sTCJv- zlla%!qfCyU2-^}hX*b2~Knd~Em@ZlVeDKCK&jMFmil2FJRu1J&o4sEGVLLGCk3};3 zd|UQY(s4R#xgk?!gRDPTf%C814|kBO{{P1&m-M=#9vBlShJ6oE2`syV1AN>Bjm3NkV_6G~*BxxBmliuKIg*gf=#C863fhc_8 zdWAZa{g=cV@7>tj3KMLyD(7%G#OnbNFk3E9*&H>kECIYEj-dRs49E`{l1zNew?JaYJ-u zbrf}z){KUn&!S~zene7Si5<6JoWgBqga?lB^BuitF>A3)=qGM`z_KCWF1#*+0z3bN z#4+2geLBCs&tN)D-E#Xn#T8<8^(ix2QF)hPtsIUFr{H}LiK+=OP^piA&*?x!|C4?^ zGJ{i+54&IY&(ecmqf48CxroB`J`}af6sp_>9jN)=#H5)o6v(!IM!HNIic_n|8fDl5 zf6vca->Z%9u4VRf(>TPi-{-khoRLyhCG_V`g78vAdTrE3rn^Q;%G{$7oibYRuh``u zLxv+x-uKbp6(rOH;Fw(#G~^(s3ornc3)aG(BbMnmSqssYH|utcOuBX}3DW#JN|wH6 zDM2c;BTHY?C`dCG?4^;%7cJ-}1n(wA%h_l_E%&9={h`E^tQOZ^F?bxQx6--rn44$ zV~WOKzBe=RsC`F z7cO3`Nl>;F=tcAUp9lj=bFP}4+KO!)+ghhLYd;K<6?Mx56&4s$Ot!+F+_!&0D<8k| z03w52&+Pqx$ze6Fq56m6@QE3d6%^&0ee(0LBrN5=Ye8B2^E|+8PJ=;G_ zQbj=Zp6dcLi!2Qi=cc@bB7KB-CX2<7Z`#a`=aXF7Lz9^!(n(~jK`FN z?kPM!u90$I2!7uj_}s0!2cC>_GoyV#udv@%{qZDro(+S#lIz$F14BPB z(#1$*PN$`#cn%difTu|SykJq8KgqH-?gH^Hkj}?Rf8YmWW>8m(g z_DI=7yYZSA8+;S6@HGrS@&U0p7XBg)RqvMUUX>_XC$7k#II#u;2&1u!zcGc+qd?Mq zv*OV3R@O*QUZYRq+h5bZPRz*eQan_TuA8ekm$;Qs(`tbFNPXs7wLi#LXyCXs1HNPxrastSiv!250V`5{~SDz+2nImdn|u_2(cNO9z> z?iopOu=!`#tlkb$Jm*h7Yhb>X4&cFo`x0}o8})3Q3HJ7=!lVX%AnpGFNHEwt3QyOCKRvhaW zwwb0jpyFCzJ*OuZmdKgC=$c$=uFB469}Ch68@Mb*nV>|?(FoV7htw& z!GZEEy#C2w*QtmA(f?P8N@7dL{y8VuK~nYteB!Fk9_h>_rJce=Koaw!m(AymTFvEW z1XVK{X4i(PJ`9@h`uZI|Ej1m?X=)q@$mlW$W3(jW5h z#0{ZHSe4pv$HvSvkGeuL>GaN7R+gpjZ4`wn>7ECcBvgNFq2pw}?7<6G60Pg_BV|y8 zPHPYX7HkC25Y{exI;{kn?Pl9a@CZjdSv8PnEDhLu=>8&Ee16eyPRBmg@P@;tcZT7B0x1P|c%9tm-Ky{cHGVwZpDaLS8FK!}*f_c2E;^D4!tOMpwelK+T{ z2tCA!01HqxnQ{dhsue1TvvuL|QAiJfJ_JaVDA)jNQq4NgPI6c8r8O5hJ4s=_YX~TF zZDvdtps}9Xc-^!3aoNG|rghN$4Ix^o12MNQ2fVBOUDqwk=^$?R2WNt``JSat&au9$ zCSuMw;acYQbS^-sSKp)HtDN8%c0WAg4ryvPwlbr}Ecl2!XgYTlomG1Gti@t{N>3K$ zv2!F`1a)=A z)922jJ?E;3PIw=Cs(x(I_udC(Lk^XU)Z2=@ zHLSR`&m*L#`zR8K|B6%QRM;0H=G?&u_Of293bM(i+8Y9M8~mFLUv6BSH)lSv4L`^w z!7IV@$e{T?TKw3WaihwfTg&Z+iOr8zh{DO;(7UDfKY91zSi!lfqXv)lo*al7g%!h1NZ=|k*|dyHU|W6jtRGs$^aoIU9&LKY7f7Y=nnR(b~=)AX74+S z$z@p;-oprap!iuihRk_ef7%dC6AIS^jhNp~efDWzNKC@WBTNswE^L=0 zHYf_~)o3fn5{!T9iD;=DIX$e-x&l`-+mCX-r92)F8_PA8Hj4XfNX-d+)HuTCkiMr} z$>RLdxB{7)UIv9gRY5THcK9<=}OEj%>N=qPihA+~$AhL9yX)Q|% z3H*ItG5bb1cSXj#+8OC3Vl4w6SnkHRupIqB$3~j1O{I+B_Y<)iuIZ!%+hChO)Ye=7 zg9UkkaiQ+cV{<)X6~w@jm{bsP({fGJ&ZT6@(CsDz&(KKTZa{f{z^sXwA*VN(!&F2m zET6yjvm)F3iKpMPr0lLLt_>)7=`2| zJ92<9y4YWW!0D(Ua*4#}Pby-UKBa~bt%u-i)1(YDpv9?-J$7uR+-+2R|4Z5X)1T)z zaO-_^D{YG|JkE_r*hahp#-B5XYO&aF>c>7_2`rVg(sGoQZ>(%g!g3(EiRpFV|zK{}c4vf$aE$$9NuAMfR|eD2mcf@rPSvOoY27 zxV(9nanj32#;x>IYg@HBOZ#QhM_#SC_?TAN0=~j0>ameBSDg5y-`C)Ya1O8AUdWv( zW)Pv($RCz&OsaNkElO(HK3z|&lvp4$8y+bmO2xoPDctPwpfGUJt6^HH#a7Hg0 zuLhIu?s=s?ITQNwa<8&{3~<_1cq_13uk^;~Sj5Eilo1v!Y7#`Bo46YVxk^~CH^yGD1h_j zS+GVJStsI_-X<|?N>B=(=6*vbKabFq!O$aGThE`w9-sDT2k)dGn;4xkLm?qSJlQ-M zf`hs7I5SjvEzUoUMa*H@&pMBXb|AJH#}|qfrPuQA=v1IPsqTOVsNnP~{+YnYJKN_a za8GFs-@b~S6|08yQX$tn$VptilsXw<{K!m_&$f$>r+yi=M5Lmg&@%#Ul0F8vR1=AM zY^e)nx~Sn&2z?Y^Lan+kVGnE@p+OfO# zpKhH0@Zu)+=r*))40CWx;?G#})YU1@DRFQv3H9K=JHJ7~Uo%v-^(FI#R|1l;Jx~BS zM`;VMGmk72Q-ffjh>S1qL?xF-+wTU%y*KVHhYSBTuRYvHJdxbWrM5aZ5YhGaNDk?g3JDf|x*FuY8S_^-Css)_xMz!Gop|$H z8OK@IE9k(4Ex}yVKy0Sb%b|#J5KXnajwSxN+(gADE$)guFmP|8z~dy z^Mzv#$a6eH1JJff%Ueh5LmDm~&s%iHQ{Yd0$J_d|c`L01XnO@9iH^iBN;t4sPx>4k zf-Ma{S^_$2aUB-976hrr*{fnr@O+KOB7)J2IvVJ_{)o97WgL?mxz?)^&9n&Hg9s)b z#a`rFxNmP#z`lxz{Eo!`pbft^+0M&Quq7NwOozP5{Z)DuF74}hP|z|%@VFq)NZs=t zlr25hF`?Qg82^f?>+J5vv6#-(b3t@Gg=M>~Uq*)UqA7X#NaC%Ac%yYL@p}(U$S`#%&I?Aqqlj+qTDQ zqvOS9cJP-fUFL%?*W;N(k9xhFbN>;*sAj|#J=mP_3v4bia&9V0^fR?v%;)L1(82kN zuE})DNu{q89citpi#8BS`e)5)eQ@=>_m=v|&b4ziNGhCt;QvlKOXCa*KHQDM+OVbYI$v-tUnQcv*%xbEx_gVn`U?B2c0qVTlaxI5?6n22P;M|x#~G3v zX4v?vO2G+<4BFr$0WJAh$2bgBip+7y>)=X70bTor0(I9^1zgdm|0$wK^OM2dn7XBF zB%Gsii28km-i&J$lt-0g_FGo1Qv+{)w^AdX1onLw1|bzYZ)$qauz;De*CnfyHtN`! zbe)hnXfy5XJ7k#grPwY>==G1)?EI+b+FcW05-d~VF%dCRl0HiBoq4LO6}u%?{>Izw z1{l790>|u~@O^Z_*86KJeoXj=Q?0ethnmJl#`?L%Le1Wl8+oGgADD~Mk1C+Am~VH~ z$mV0vQBS2YbuKSexmInhB0Mhgt5*9Ha3qtAlS3R&CRWDgVpV~Q5%;htQ2|t+x4S{% zH=$S}xjKGs0qp4pkU-7hK!9i|xwKE4WhLBAkJ$eEDOZaGTDM4n@->%QNyPB|`sudi zDb(^wp?(X5Lfsj6Wf(W>RevrHkz5^kKSz^SL12-38L($c@)wXdo;%+!JxXt<^)03P;LOa; zM>>0Vha525I8bk2@TLEtcR@@GJ49AKM0tmHtG$yvi{Wov^kGHOgg z?}1$$jM(;Lal}a!Umsn+!f{mOt3QGQ*woWD8(!I#n4$ol2Bz&%!WH~7PQ`F~5!`;= z2js*GCkA3cDy@PPJN+TIy?dm8RnkNv=-jZ*m8ws;*2+v*+w6#n6 z-v06an8;egW5jCeYepf&>N__2t9P6ZG42FguKElaqFfY4uvb&+a>L9Koz}EeFRG&9 zo2R1ugsOXB`yHe0(pfo^VTV~7!mQ(uI8$lEMf2Yx-zL!@-X|2NyfMrAY^Qy8jQ(o} zwEw^RLRG7ZPtK-s!$T16Ov+?X2Pvclux9ior4}eT$al9I@^Sfwb5+=XpHvPeog{#~@)^S%(zW{$9rdS*6m}%gL-X z`>vv4N7?&EYv)nMDY<5u$j27pg3mn+shnZ8f?>| zNXVN4Zh2GMZQ+CuSF^>r~EA7}pF(mOG1@tjBr%P-i835CPV1h4nq9W7N ztCu?hy=rO1N`Xv)jPFyXWI7e`jfgamO3ndU=}_X841VZR8S5L})=0r7(iD-{P&@TH z0Q%0hM~nY9fMb`gsPFHP@K4LAi?3pZ_jl7Ia`!0s_$NJUe9d`0In~7YJ>||n&2zf! z-(6R4XgG%xU8@SGUMLK5h_64VT^b{sar=1UI-(%^uKb_?+kBVFB(NcUCh+Vz8s~2j@7YvSD#`Lr?s&IF=(1D9EI~p&%T;jnx-& zup*dQ&5aQ2dwK&^ky+jv008%M4ydtFTC!vr0j zG3hdH$~p|_!%W9m_U1E-%RE9$I^)!AC;2%vOIgC3YFvTK!qHSbtX<`_z2~-3k86Sh zyDAbNwO!1Cuvv?1fbtx~g%pNHX}EwN<%svGM!jOl6HE;4|3<0X&iTzLg|I4jdf7Wr z(jeUJs`V3ofp=qaaX-sELG#!Tbq(43#rgAL6yp8l4(gC;`gdon(_v(ei<1U<9*^m& zHjhewrrtN8n##=-`qQ5kx9CP<{aKZzPf5!k(Gs}R;&6k0an-;rWs66y7KMf>gBcgR z=8YKNO;*X*kyFa8Bedl8P5PRlw#>OLYQwE6x%D4WZ){p@SPQ$p)YAyDgcEEzJqA1_ z&;dj-brN=qj@Y;Go@ukd!EQ$2UJMT5I!3n4M1^|l57iKN7=Z>fOu8#(Lb&9ZN6N_$ zm&h0@UuGdy3Qcr=H=Ea*?;qqfQIB9PcQB<~l3Db+4Dd9NXu^I&40qLnDb-t0Ey@o( z<~Y7-gRO|6Kb0E%PwEIQ`@U)`tH{5!FFa7(+Nf?Oy*_BQTODEL-TgqTIh3ivP0L$G zFljLr$>#I;r+4&opQ&K>JWEH{Tm2jT$8uLQsr$$1;o3BQ&-59UF>WK@p(ajKS~!ov zaRPhFbd|4HFJan9wfslrCy3{L8LA>qK}H!$J}&=!ieTTQtbG|L6kMkz+KAf4hs7jz0r79$eQm#T=K1gDk^L7 z#Hgzu2W>(GY$kU+kvk_NvyJS`j#qM4++TDeWRhv+A8hIOm13(lDB$p(>BenzIZREvcxCdl zdE8}Ra&8j`8S5Nt&nPa{%=U{6GqB4FDDDK+h-s@>IS;`8xdCI(QaW4#DyOI~SYU!j zhD*eA@k`3FgkaW2S|)9lH~7nqK5iOMuExy0wMOJ2O$ua_VSTQcoXE-O7A0RkJS>BU zIZcV!EBMS15?@{XJrJ$asON>cnP;F&(-CQvh>5Db`~3W2kgep|5{xu3qtb;@$hF!v zbDCq$Ai^?g)zMbq^bJv=JHl>f19d3%uP05Z!ti;z>>3?eBrTMjsx9DKbc9gWQ+`&{ zlA!SvS4c5fnyrF@u?GbzBJM==MDbrl74m6KH4B&L<7?2pV&?Q4EP9jPUoCv#sXta^ zafS4%WcWHWo!zi6yJM+68(&@Ax*x9L+^hBfxH=2JsQN8lE8X2abV_#*DczxTH%Li$ ziF6O$Eg&G$NDtjeNl8n0bGPR`=iGDeKfq^Z*!vf2J>O^5))9)UzQFhPJyyCUC6Q62 zRUo{}{T^qDaBjO!(^)jp<$fZ|{~v0XG28o(F}-G=p>7s`9lf2Non$RE@%=jzvd zDk2znmKCDz{I~O)dss#(zfDo#cr7ug%F<0LqXez)%PAIK-(%uJUvsof6!#}fO{(bQ z2w9_|(WgMLw^vAmnc!Q&7k=$NrW&rqMCyXUT2!mD!A41xQ_a*zDP{KI8XR) z4x&KRy?B9Es?pWpT^1+jo}bG!=eW>}V%P({rcj;zRgJ2aK%Wb$93st}T^!9_p zJP5ZQfRm~20yX&m=|~qwx?k%LH{YaDm&qOgEih;ccy3etFN-0A ztz0O%`MIl1TRv!#jJ*$47?jT#7VF>)GaL1gz(NfN)2*PEpAGUt>jqalT60fjGxTaQ zWk?C{5M<79e?|c(-~9Q__Qp{ui|uMtd!6r43aigXQ6=#Qvn|pXDl%zrjZffN{R=-=(h8--F&Bjfcq$T1@}NxVP>8Vg~-$*)zw&OB!` z1AUy41E%AGeROn31}OW8xA#WJs7$jRX2ig@RJ{lJ&^vC;t)(EsJvu7{7f})dvTqXP zaG>c{Wj}#!7)Hnofbs4P#UNX?GUNW!JGZTcZlUfUrSX8 z8*K&)4Cl94jxk4B8K4Iz_^ORt^$<7L+lk;43klSHjdrL+QFqv=Y^Y7z6Z2vol~qq*4_rAUSyiGjBk-9(Z9Y4Nk~#%<+bvBG zCWgfip0X!Wr+b@ycM{WlJ3Ar9KG|{x0H8QWkJui-7!5A`sT7o79b z%3I&akhv$pvsnq*qA~c7D;cT0U#n`flV9%$l%Ix?Ez)VS%ML+q+*}m9?1F_xgY`;b zayWcc5(ix+CNW{>&Xjwql;)_GQ@CTP?l}YPb{uZ+@XnZb!`5GU6=v*bJEni*>Ky!z zx|L>s{R1tNySIZIpk@Cr!<%G;HsXEZjxMAzLW?5!)^J239kd}WOfXoq`wF}Rt|Kwd zwRQ9akHlHCvW?ETO=0oPG-wLEbx|CtfN5x;jtdvOdkq`Djfl_FRcKw0+Or9xEro-( zgl%FBRQfLJ{1)g%w*T!pnd~KCGQpa6a!harb%>S=} zg02Hvf!aW^tw{oh0Pi1C`K{spx5BPiHJ$SYX)xIi3aF%+lm|xaM;I~nsNkM>t~S>O zneTvR?IfSv*qH^6>*u`plkyE_Ly<^_pPL3mq>g8{Tn!}mM zbb{$Zv;A^dGEC>yF~I;%{4H1c4&&_o$P{a6wcK~pCjE3=@Egg#H{zV)3iQ1I#RO8MI+#q*JW7l=kv|bxj{py)2A2JE+lXGVf zzVdPLnFEol06fnpHGovxz!?@V2q~fUF$dKt&pXBI=b=prt6%5i<_>uEBz%)RUvH4$ zOZHw`PWUEH+gYZaP^YFA>>q_uX)8bb8q-3Wj7gOJybS(b?j32{1_J_jnIO_=vcr`Z zsHa?z=-KU7<}TOQ?b-JBTI416_&nwa;}DeUx3!?lMwq)>K-f%c^rN znmyX5TeobYwD??EQ^g*Hkg5WP#uRJu4zfu)EOW1li7ZOKSQS^20gl2oy2^rC&ey@d zox&HzyB{zAzsJmSZsRmk;(E#Q0I(fE)dC)2QW9P;vA57Ub=emV75 zmFB4@_SBayfaApfJUQ=hlKU4*K{0Hap4q2?_hDdDg>uYdTC`m-*sUhx;Hcwfl{_q8 zBCOs7ACG&2fD1PtYz=y|YluV(5^nI`N+|10O~CK3v+#MvW6_~6Xwkb^s77R!tId8t zL2aGOmUE*~)Jw;n+}gwhhg%K_?>r@!QpQqn^_I=mh#+<{5=bUC1n51p<9i zSA*q#VQtfUS%0~I`obpxH*Lnx=jpMB+ zcOYEjRa&jVi%7W#eWpReKgU3<&+K9qOUnUN1xCU1TxwYJ=kuJ1Ka95NEc|O5xQLOO zM4SFVdV(+jVHT@vJ+h!b9sk$6n18-rNHgRUV(!&GCt(f1>;a~v^Pip9-vF@^;rjwo z=XUiiWqzv5Ao&D*=*773$q++cqpuLMNy-2KS};;4iXRSWvPMN36qp!;o5U}}si4aG z%gD-6*KhMAcZcYs*qDe94CqDlzt7T;Wl-#8Cq1^chmyWupmw&%(#N8Uk>5VekbK|R zM>fyPio&9a(lV6m1u+Z9Swp5l*a~=OXQQur?ZEdj>x)YR4c%ItodefHnz#=XGGu)) zb~kZDj@N}DmhFw}DoxpW8s2p+O>+d~ zG@ai`otifQUeUgNObyUGX|>B4M2*_Ui^WlAGvgw_h6l%34kXR2>_)U8D%6u&Ko=8! zA9K8*K6etbY~r?y zJ_$vjlhQMw5byFl)BOAEbOU&u6~9@$q)ZBV#f|#qYD^MV*UQt1bJx@L^)*mu)@`Ac zW=iHsykb%=jNAhJHykFv%uhNk;$=EU;Z>0!g9QYCi$>1ubLo+Q?BsG z@F-8IdgSflP>;Q?l2`bxh4^iWOobmOM%)>jv$rE0tgN}A?Ik?BiAiZGtSMWAG5MFC zNI1AXL-kwZ0Ut#?Gw}0%FwpNy2sd2OBcV%PFI2c*vS)v& zJ`DOu*S2WR5saPA#Y%1m4E`WFW~Jn2@NUnfY2Jlwcuji;%dBYDY!i2PNwN#BpE0-L;VHAy z^yK%8JcwWZeM;C@0lq`zNCNU(M|k2K+E)#1U9zhhQZG(lvW@&^BR0ePmkW&fy)g#iBJmH`DMOxs%98u+6+9fb zIX|a6cY0)0>ZaP3s66KW$(*WnbqC(u{M%3GN6o+ETBqiUWl|%BBE-t0HnUm2G$tJf zvpTs*7Y{8Xd}XOy^zF^~sYzi)R+Md~YNCtl>;@Hvn3Oo)5fEWlsZRB7uPUIB{-kC@AL zs;)+E?>DBc%;rHfg{XAE<^_no>UQ@XX!`s(p4C}{SK~_-#Q-jFLj0xunc=Y&Fq{33 z6CQ{ouL?f|klcH@wE;A#9P>)NQ-DJ;%4I8X0jRR;c>CH8KFL#&4}}w0SnPp`e;4f9 z_VZ{y%`c5#0i{m7C0g~5S!O(l^CdE1)EVSoFbTc-X>2^T>gc3Yltbw{AaXH^+hzXB z@QM_;?{@c0m>k(k$`v>kVBk$H=Of4@-fwh`23}Pe=eQ0tNvrl-;iD0A6`$!8sS)8- zUo~fjlP)f}!XRry>D^8VHZtvN?v9)T?VahWm&N%`0FhS#9G8{3Bn=>VgVMwaP&0%? zYTbTVK3o3VIwk4nPx*RF;d{slu!Gal$i5fvDmm5YwR9RnW$02ObT-&Vqa*YU&>v}Q zXPv>NeKEODXn-X#!*c?mdtqa zbmv?_uw#kB7tL!i?x`xM?58qPBm74-IfAY8c2i3X_*viS%)HzZKViwnlFaSlB2fWV z?yAqzKUOZqv)On>Z;>BZi}IDQ8)7`CWC)2#XNzql#IPkon{;^?y=O~oxsKO-wK=wZ?u*KE$LaS=S%9cqN3Khb`(!EL1ibaiU&Zv6czTl0+*e#HJ`RT#569P#gjk#9*mt;(%kfyqQ>N)=A&3g$vbV z4`Jsz1kemQmS7a10Lg=-0IpU4n_q!14{O$dmZ&7{ox)N-qWG=k#Cuv)FN}O+5x{qL zN^G5dR>JPjlpqv~kCZD=sf?h)5|FjcWX$kBEW-bfgtJ%b90et zT6#N}3+vki@fg9tLqf^v;JI+vPrzMpa?|t5MW9=KpKytOz)7706oJ(Rgm3~D_+>O38*SMw5kzhof{Mu6$ zPeoe&JiQ46Hn+wkS(#7Yr5nEF=NRu#gG{#N=MBt2qJRbOq?~@e+6PM(9n1M7*`<-# z!tcaeD)+Tx5*PKEt-zlC`DDMVTn4p&n$A`1X2lKVE7eY(HOrG`u~RTSfl0(D8?;3T z9B{`a-?Wh%aBo}XFt>^W9O_{FRIRY@%Xo;Beypis3%_?fjoO6azJ%ag&Vb~e3Zx<_ z0CH76O01h+XlcasTDf_(7A~ycKUj5 z2(k@?4>tb3>C}-VTFjA|QF>t5+4*F~#aDjM7kQY}?$zGS@eo%2-I;%?y`kWV;0Lz(hGzhC2a$hP>qguWlMG2Doz%g-Y(#^g3?`0LxI5BH(}Jwpe8k zU_`0Ra#$|>V_TL}D*1KkZ_5rX1Q9`;MZ>^rehQQyNMK53$bt1_fA-hs$nxiB1YRmx zJni7nW#3^e|Eijnw)Yg2`LG+2QtMMdV3rxvZ^i~={K4cf8zt>6Hz3;c(o6YlQmuN% zF#BZ_7G%a@1>M619gFg`r z3=Pu|4z3sOv=*i-rX?gWCZh`q%YU8J8xZ;1iZyZ_qB~H|Q8agG-v(|Q zNXy6+2J~*&M&ikcnJ)M-Zqd)(ZPL>gNX+)rp_pO|&E0Fy*Zhh6XKxzRa7OR7UZz(x z-k+Z3&=M(#7yy52ZVuQ-32{Nnn^-bNP2gpt)O(9~=k|s_mzSkMHQdZJ}oUI8RSo_@a)xiv2PVvMRD&{s& z?}LUI0*Znh(}*10*hxoEu}i5iJHZU}UQ3_1rUbqaZKO|lr3zJ#C3;ZzoIpbl2il}R zJoVJ(pIoa@SyKi%9K|^CH_gRick;hcDx$cZLuee#5-qbyV+@s5=@=D8$uo;nR8PjQdgUOYp$=_lhW`N#$Dp(wbae z?t5oQ`jiY?@C3UCJmU|*L$78Qdgp+O5)y43gjB%Kga3r}eXqVdP5T1q z=v48h`rxp|eI@{FV1O&H1rQ}!P0Zj!~M)i5`z3}&J ztbz)_!gSmmD!h7DN=Df5xEd%xCf~VibpeCYTs$hk`aF( z05sKM5pa@S ziO-pL8Nw#4Gq<#xv-L3ThW(GT2U*47sAmNish|;=F{{D(O(Tp%^0tcD_>%-_Q2e6# z1VQeJXx-I;=8L=UO~B*z;DOY8Q0!{`pdEzm8ux@t#>$C$BK}*WwtyVSw#_(%j1<;W zT?SAw-9ZwgU84}Ax#jDUBpAM`AZ#V=U#@{PsvcMBm8?J5ShP@?=gJ0dRyT~}5EBsA zdk^<(p_Orq&%TrXB=d1j2TeKAq>(Ju-Xlk<0A&gHDCn0pj};N7$Y~IdRBfA`;AR-P zjx-L33i}J)p_FP>*aO;!0OC)KB#`5Nb+)05JI*ARYR-S{YT;l&1s$Fr{lhPeDt?_3 zzG_yP3T*a4W1?g8>t5k!1w}1pw$zNGL?Xk}{!D`R znWpti5O6eXrKa-8o{cSgBU=fMO9(1+%^jX@^sI2PkF{pA48y2q@XE#6h`$`<(J|ZjoM}QDt-6Hv$8iY2voSXhQCu1oLdKDL38x)${q!idq;}!=zb4TW@spUnuLcjTsT4F)5fn||9TL-MG*J~w z6${aByk9KsJODvybhzExs0+(%qF{|!U#s$DuhPGRBa(vN9pNdB?u3H*;#%ERaggPV zTnVGTc>hCl*RDjQ{IxgKk<=co>M92&VhkM^fyR>W@_y-6qA{{GN}qu&4Wii#jfPUy zOACAeQ2A#K5Sz;ky@W%*>3VtSnpd+b50Gw4$FuDs9CMvJPR(0a4ZO$YE62f?aRMQq zh5?b~GPN?=$skq`3a=JVnjYDO&>$18%-%Volbkn{>goc99!{iBLA{vb24AC!+Y|`rUa+t#yG16>Onxq{ zaS2!btMtrl5KCnU!_NB~*~;J`^n}y~h8UU+XT=Co!C)KKH9d$d6b9~)Uz1S$Jq3i+ zHBjbuv5or@GF5T%vcF}1g!tF8TAJB9Ve>{6ZhCM~JECo|1lt`CJgXy4Iqm%)^?S5GG0_^_ zT;oPP>m3#}SdcWwgmM!s?S_Mm6$9W*I~L!vpGe7fVMkaAOe;z}YbW8WFIaKxjkVDR z+yY4yrRVP`&|7t2C9G(d1@X4lh|7OTW!I{~Tc#eY&1S z2t#25!zZOI8_n2_R!mta;q#6$OO=!HgL(L>x|%R`{yQW!av+K0nBw5hi#RUfd16r_ z`(pvJDuI)SfUewVG-lUYud+Kk;VIw9KyP?|ApxbFDYOi+7mJRC{L?NRCY-_|D|CtE zp6j{&(fr|eJ{IIr4Qy(XG`%N%D&6~hRT~K3JCfzxxoFllLKNS0JLT;rrY^AWyBVy( zhR4{0vOQlO<2KFAh8WRY{%$CHXjLIDVXkV$kaiy!2!f~##hYgg6T$39pyP{1jK&=f zA05Ey)tc2*9@VhiY7cLQr@qvent1I8+9uDw(Q_3}ijcF3bm4-0j`+dA2C=Xq?aV=3 zdlUFnhY~T)J&IldIYB=H_alkiyVK;pK1i);M~4;*jTAHPZZul=*gl?e=iSBJ7Ld!I z5#VAr6fxC}6Qhc2xGOSaRmlGgIIo{^C}XkABg%2mG_~mnHVfubnB?e3mkyR@@DWFp ziPm&34A0H71r=I65xyvkzOUB36H&Z6r`C%w%c<&o#MCx+SMQscefO&h*QRc#T8>ky zUtZ55QKk`JgK8r(+KC~6ag!Ef$Sl;J@;Jw|GWut~c|?zoEq!OFyff7X3106nr3_`O zpE@=@t**7(3oMOeX_3<1YnBe1;(1HM2;Vp_{t*eOOM9X6Ki-FFS@%?U{b3Rjy3{1z{A26M`D-FDjhO1MG!4~k>T zwZ-8GmN8ZQ^XPE3=QqB6SChO|1YJNW1OlEx+=6*)$6c)5Qb2v5g-Uy3K0QaCYey7FB2?1DM~~ z?5G9bVK4BeHA=oO)eZVUb-AVmE{Q0mH3!a%ghTxEmB`Qzrs-2yi0k%G# z>}=}$QGE^t-qd%lJ+nJDl{vrEJPx)J_EGU^-;PXek#b}I69M;uk=jdO6h{>njFYEI z=Hk)5MAD}mI(<8Ito`PJ+A;|{Fxff|PaInYTO@U)Qo&CZO?ke+%rc31JCQoETTVh0 z@DXUwYz~)G4h3z7`DkfLw2&MFHA4b*1apzcz2Y|tvTBh#PvxXC5ZwS&Z1HFB_hcG} z>Lliq;le+XIlw6B?A4(63{I8L8Fp#bA#{Q;KpBi-IE{WL9x_ z$mN|Fvc0az5$cJ^l{FUinq2ek`y5#bX zORi*Mh1Pw+Fk0ROpOd(+(6;r3DKHd`b^DEgvPPtQ`8ZpmEJe79u9&I`;*KqzV#*Gn z)s}NbJ4i#oQN;7z7iUv%m*;<{<%RD@s63s5z-TQGnR+Mnd5bKJmoaUa*X=7SIkPry z>a@?cm93wu4{ustpVCjlf-v{d;x7|F>NE{MZQBVHwUJ~h>wN00ua{Y-pJ^D-VCks$ zEz!W6n9Y?+m0`mFsmrgS{2s@{)f|e3Uo&#vALc=2D}ehCrS~sT)Bnr~6|pl|RZBk9 zDZC5FCTqPhFFQm+1ljH?6M8g|#o^FWF9}i_THkO8A-f?tGL5Qy2&TXl>x)2bPgH+2 zH*zi&YG&7982JdPQ9G`JKYF7nz^s<^Fp3t*n7??~0IS|eBrm8bBWx_E;QI7qP3S?% zHL1ngmRy5r2Uc*be_A9E$k#_+INJ>YJ6vMu8B&25MbD0%Fins=G<|e)OyXK7S;~?h zpE6;SVHs*fkCWn-W0NEw?h5BC%4`iY%VR+#2-LPTj~g0i3g~*FiQonsre}Jb%^^Ju z7rTA*Gnwoi3}}Glp*$J;&C0mx36Sn%z^s2abS-I?ey4C z7fD=MD!&9&W*lQOCzze+naBCZ-lTWdYm5Wu*vPaMV>+&N{+G8`uS%>hEJ-ReQP4_# z{kh;zY#Y0QqEO}Jq$~Pl{&lK{wu-#69zV+C@3#Ttgy4hzfPecX|Di}7b~zAK^Fyej z%W)Q`;JL7%dJzoxGqfBVoOn%DCqoj5^VZHxhxt_cZdMcvTy!xwX~cYy?c}CNT`w&G zMh+%1cnDjr^l2x;{3qG_xhkb^uY|uBas-kvTgXZNXztY3SrtK^sEPNkjMx_nKH?*5 z6nRM-R0SLrsAzc8vp6 z+1c3J4QL|GzGG&#P9|;Y(-Ip;eKU(gCI9>vK=M*1ki<&0&iC{>qX8-P>jzf{o4fP$ z`8_qYoV5@x!Qn|ju4{*d3oxz4x3}S3m(f1D$ynD zulA`UVbVB_B7)k}l4aURoaSF*A))^|8AVg~NS*pjf6ED?4^`!+EaXT=U$QFUOb=39 zcvxG}SHHw#xj@Nuw~`BHQ=@34N|@8Fg<5_}{c;WBhcp?wDg8WT-EAvL&GS62{MBJ> zWvx9%TitGWM~~`m3c7RHqDise8Eo$$hmxi)d!V{96x7|=*{xqg+$-v}r0tqSv<@je zf5yJ~r=JRZAiNJ)m}yAr^Fbi;_Fu5tP&2B-!iF3Q=nB_+EsZZy+u3&=bf{PEBQtf? zOy3jbH+|rw)R#1~_6ixA(!()?0UxH82&S zI^ngf(?s%_m{zzLp9<&*;o%7E1iy-Oh#XbR?hMl&Pt1iJE_(bs4~vH)D#&LwKWGw9 zKWpKL_~v!}DGVKI@f&W$mxZLcuqoj-3=Ot2`bahG&eZM5YS>_U%V@gBhK(&wi$+{m zG7_f@Sdk`jRcI?6KZK1tIjDW($h~PaPrb2zK@k_2N72YVyxnOT&@(zA<&6a3zO<8y zrE35k6mb69#8=ccsDw<0uU3>{m_Ka%6XHluTg-nr4|VBg%6ElRV50QZI7;zVJQ=$k zI3NA7-=&780r&!>bX0B`X?%GtT%*Ir+#Qz+*vY|)TLm40_Vlkdrhc@Bs1P~1?z-a) z42RaYDi!Z1sI32(MTTxCP_n8(?5uYO9@Q7zbO<};ol@!4qWDLgiG!H}ZN#LXQ929O zCJdCrgIYdFxuGoI*^%U@Y<;~Hm4p4|^v^uCp66ZhuVWRMfjjB(qN4YC+|%(s%}@J3 zNltk1P}s5;!9GsZon9TN2uXB(*;3;6_G-1B-L$+y=;H)wO1pE5q95-yGhZ!uE{`l!Ft+D11-&2ysw{4>riU2r&bJ2^-v?RwSf+l zFD7!e(S%g1^cHcsjkp>USV_`5kV}huvZL6n;Klpy1|z+^e$VQlEReizQiJ+Ja2&7$>RlM3%q=^xsq>G4bLe-`<3+ zVkewcDB+eltMdQz4JBHa&N{qziQ118dY9+!PHx8NNrsA==kuQL46XHk>pY@JtPow#u_r34&F zFAp2gW}h5FeU0u00o#6T)|AvY<`cmE2sYl1k@1j=+YetkeM_&lk zO@IH2QOL==&~Qn{C1vDHpQH8n6Ru1ik`P9bdmE7T$xJ0C*YVUZ+-Qf}h6!Yx+~9N$Is}xYBfUo>dw=NyH$KmM}jS(X#o@;N85!jMX!a*KuJAO&+aauM>ms z)E2`e7PM2hTK6vTHY+H;sQUGBP4wc91CfC7THvRF8*l4Bn$~E3qo$L3YIzZg=Z$br z0}nCgD7mMd+%Dqo&<{DDig;)fD_33lZaI<+x?)_{!%t~{Oj?9avP0wV7O2_QNSIQC zysyb$K3{yWpqe1zf;rbBwHH!yjOZrl92_)HgDP}i`Z3#>LR+})8Q)4c7f0|?TXiz zf%L7(qLuQC55EWY5mx6Qnw)84%qitn4)6!5WTbQ)!9OJQ9A3?ovbg;o4WWn^w3kWH z7PjER^JAeoYI6)p)7b{f*V3%!0eCM$O)-7ZSv;xW$N;cHBd)N8(u z#$i{m9?1CC4U~v3(|IjwO$&zs8@BaZ%{oo#r<$y+e{y0$&-+3hFiSEwvCj)Ay&&gJ zllR%@lb0C&KO1U46?l}_P1fm`AX+&EkDSSX3g<5>3?V@TJQYR_3})(>h&Vh zK=y6B=OOpzcAf=;P`r2}M9SLR?oymi#Hr=c<*RgqoVN4mOBsI$)OFR7F#-Ne*^fpu z1uGQ}jE^R8hJvcU4&MxS$>lCnmH*l&4L;mvKZGc$U%xj$-qMF&;?A{sisOhX8Nq_y zWK2pZ`jDFF7GH^oP*~MzsI}C%~Xa&hG7P{qq#w zbk_4Xe>BA*+b2CDj8=KvX|H#?)nK}S4!$a2Izy8vF7!tSFb}SZZC8AYcmLmu2~@1% zCUtD)J+M4=tM6uv_j5+EUEIoE=shq7&O_w3 zrwkbOMXDI-w}15^_9J&R^?h^7Bo1sCoR8Gogw#GVo6pmmi{Yi+f(g#ryVDc>Ylkq9bsR- zg&vB_Y+=0o;s#vZ{#Uh50h`*18pxrW!6@G^ZUR+P*h_43-FuR2UK*S%3hwuem4jnC z6H5b!`89?aRN{enK=42tet7OFDM>CY?%w(j`Y<#U5rjmPgFRe%HMx98FZl4&6bXrC zWba*n6ybdtu}VaDym$RLHZ0}%SN)V)xvBgJV^jLBOUOzRU#h6UJ@u}K1PJIAG+=Qo zLmS#TJ@eC1S_8JAA#QK92sar2Oo>YDHYz?BqWQf=D(5es@;FeDccs@tE^PCLTFrL6 zpLL)#_n?M)c+aQD2I`3#Ae90X)Bf4T>$g&F=O6BM#Y8-3N+L6fkdD2N(ZjiqR!%8@ z)4$<6@%7S5AhPxE`=Z{gZe;pc(UVG$VLoe}7D0J$J0ZMF^$GHajq|$*&h~q+y&cr! zZ{v@JpSdW1d4IbZW>VkIC5Uc5h_B&kP2H=cKk@w72ekLc>;*|6ACC2joYuLii?J=|>>b zOH`Cyd`3)R^}Fvzhv8DwD}n4$mcZj7H+$kOo)dTv!T#sG6%_I7;gNKD&u49`n4ADp z%s1^GW|~Ms2aQ!7J^uNMvQ8ltc#{&YU@^$9w!l)>PjknL-Yqx^OyAV_g}+=I*+$gc z&*jldLUM<_v~N&Kio~5ynAc>g=moKD6Ib!>c7EkfePyJ!iaw>A-jmWoz@$JE5BA-o zsPFUN(N(Ku^|ugKD%ZjQ<065=K@EaAaGk(B586>gQ}ib+jZDKgNAzy9>!F0ypVeS` zO}RoAFwzPa?Go*&81@Xk)DciJ$=N}php(O<$S$knT+?>mqUz?o?WrA6Y}1L$FAD~L zcM!`<#ZgHI3G9Pt>yu$p7w1k@VR;VAE>w9teZ_NLWYhn-*lvXVF-qv58~x%;t65-w zisOJt*Q@vOtVOC7b%Ob3Z9Vj0FsoqrPHoA=KGWw3l{#{OjqcU(JMF+yL z_a3$1c7K`+<0sleRkWL`qy2~J+ZEOEI63mNMaf_$x!SF*lqZRZ^1o6Ee8O^X$iMKC zL@wNXqUfll37X=3uR358Qesx4iaUV?M`9&L!{ME|{2pA8|M;p)cBvlr(E65)ryC7t z*!qTC4CNB`mmU(QApA~puT>9i1!Z#$lP`z1Dh7mhMA}m`8Ec8hzAnL(sDd2!fSVux z9gnVI$0PK4VQ%CDFwFQ1{hSNg(LFGRlIWkMBLDf zcR#awmt*kLe@{Vk(d4jk@U!p~AO%$Xxl{VZkeqQpEkBRB@SP;4!=LQ_vIWW&3EI-3 zIOb4_tARw8b)36n8FguAVj=+wr5~SF)V@jls9tdrsihH$vSvy_T7AYvkCbce&*NZW zaMAUV$PMZDwvC#CFjP}P{RI&|89QLj!@!~mQusicdv10jp{R1Wp{GbnsbRMR-7a5> zK|6`ib})va)OSI>Do#hryX5a6NhEH}X-1_iu@9kPg<0@Sj*A+Uh67c#qg}t8A{&0L z?dG+>%PxgqtkM1R>|<$aJWI&r>}UBz)aE;F!DXyPphXj`Mnn{rZd&=!VXFq3edM~r zi`DW(AsL=XcnJEjw-w0fsMf9?teu`2*i=R7uYalGG3#cHuRb1);;Dc!FwjPpdP$8- zbkdz_tAWvWqRHz8LQupT&Px#_8&`|YJ5-pKgKd$Vp;9HaNPNH(E zr-u}ZdKn&i+}pQEoeFsnZ7xckB`#QBE4h@&Y~SF?bKCmmf)|3(`5=Pf{H;8-Pw|qO zpE!3xaJW4XwJ}q%L%RjyOKXxIlf^feQeIS)A=teiEK?w!&l}N(A}@PG{{QrE;Lq1b zVl?kyKTRbe7gsn+T$g)F5lAuxo0+*PAFc;7K4_rh;hY5?C6$#thzcvlm*>a~W4Cc{ zmX()9XH@DBiE6Z<_k+G0+6t_2y|S}5b;d*8ZOlrQeW9FY=;zClbT^u~GJe>FJAUg^ zP|^9C#{Xwwl2QJ$7rm7Y@in*ga-^pETKWZ2+o>{?gmBaIoj0FT*rw}3rFfLZm`NL)E$#(stMlGU&Qvr`lgDd>V}-Ztmvx(drkKAu~ zvXY2JUgove{(1c+;SN(spX>LhrLbnWTsHo!cbC)Rmif6N*GgFJ&?7W2PD>^32T@Np z+S85SJuU=h{o3y)WzQ$O(V+5&Unq@#Uj+Wpu71;5ypzP!f1kpn&R3Gf%1e96-lDPL zouaIMSz4 zw>zV?FR0@>!q^6TFnK5#+Z>W7=l(}cUEi93Sgf`r#1fS6KOh(WG}5>@l9UYIj@ zw-H=i7*`&mN)`{^`$FeGsXnlI@PLT|vgfauWU;-Ja2d%q@1S!;!q$O=T4z+h2}E^% z8Op7Dtm_C6_uj@;w;19fm94ka=}W!qH9FlyeOiYdstB5epGVKC7Xm$X9Q<}f0!gRQ znoG-T5jFc@Ap>J`sG1B%n)HPj{qi?M zHoU46+%WgzseJ*z6%k29hNvlQ_$2r8X35lg`=Be5Y4l~JCUrvyk~#*1H7xR_nIXLL z978Ykam>DwEEgCi(oh%E2MmT2A7O3aX$}6*XWSTl|H1|No0eoW3;&Lcb~nhq7Rt5l z4g;aQPl%a>-6MX7o;~IS!?uyB&1?MH!dzVTMmD#aQ*-eLartjz^{ByQ^LNv8Zreee@V9^sM=J(hlUmsi|n{0JDDY5Q`KDa{Tib;HW-*#lon| z6R8HuwWx%+&A|K0*eD^vCcEKy)hxV0h;de-_i_EhX^k*^9d@@X<_2B;U|OlKGHQDx zx{G#k^N9sKmha+YKb@dNsWA-0Jw~rlZj3=ifKB7`jbpdM{6Koy{_mH4e@NiPx+`* z9AR#F^(NC?f?@G##NbekO(p|96+X&vK{&H~oG5hscYx>gG8mb?@$!w4AeWK5gY zWd%wU>J+SH+{nG#1vj#GlP1>3u5u*x`%Gt4kgvqd1_r!m1W_@&U7&l6;Vp50Pe2Jj z$%yr^KEIpDsuzOZSxkaj_iQs6%e|_WIxt)+mvj=dK5-_^P} z&?%LI;DvkTvT~O-2X%0~6`E3(uTWi<$m^-NF#meA;yW-Raxo7Nj7WZR5Y*+qd)zev z>jxh`{X3TQ--$$8eIP-+NW$iN<|K69eUJ-CL0*(lUdH9Vz6R!X5M=%Bp1qX}W0bGh z3L`o^7Kgb-eN z*s~H3#|2u;6BQiH;Va?prsGqrj>LdJ(h_qrnlu;ho=h#SzE%pYBfH{7;1O@XSZ|S`YQG-=1}qhx0SI zj%JUNT;mPgS;9kt*Ce;-frSt5^k;5#(kS2BE6z7p9c0p$;w-^9X?bqLz1P&iBNuUd=||`WjOU7Mofd@DqUD@^rT$toYKyQTzZi(ap)Ibeitp#V_xu0U~&T3WFTZPl+Tek_R}N4^wF#WDp$I+Ij_OLU{LF3G)pI7{5AI8 zPW5>NLSegs+iL(2PG*jIHnjRUSyq3K$8Y0~nOQa&8DXlv;$BmGcjH}6m!?X!oPf?Kf;IpN-g*(Z{q)x*oXIvb0;lm_bZqEmL*js?{NnYO$-f3} zKp}kkXRuhy}jWFtCM=ikc<|L`_3? zN%@@&Jc%vmqP}aLqOIiD?nCr$sdFvvzesU}5xzblC#exb!wd+LJlTG@zPbDUFurS? zzmnH6zS|}K++l29Kpt-F>JvWP=ezF#bAx<+ZFySqWULlC8;ap>;u zE@=>?Q@XoDNeStWb@M*Y`qumX@vqx9!(8`$o#%1vyWXS#uqT@{sNoj@S|w zT-UV1+e+N&pV+RNR4Ye|KuDtl=u_R{eh0q4>nMl&1p5e_X0u6*4S)wuz<+>%IE&;G>hE1pE`QAu)xg<4 zw@@su&Z3~{hf}Sqm^4NYdYA8&zrm~Al8Hk`&ZAMtM8;+cdKJ=nEX4yoOlTPiU^P8^ zt8N&DyuV0X`15VWyHuV$NOMoLjgZ zir1naCb%(c=@JLYGCqels4I4T2Hk)Cn8+^Gy|!lD~lb zO~p0sDOqSO59jD4OK{}`M!^RH<$272Gl2kTb*U&sodKPoS*9Y|nEWvV-@BcX8_{g<^C7bmL4^OD zXbgjIK_-z{`FR!*!=qX?)g#1PSBDxRYsw-|mz)!V8Zq|($Yd|;1|Sr7KRXY`g6@C* z=4O!~A{T~5NAhM3JV7%f-1XLrJa^aCRF0^kdU*FutT_z`u`~8ke*E5ag z`Cvmm+yL=rsms&j3dY`rN}fn5Yr-mp73S)0?-(AJtEE z05E*;p)8`nRv@k{d`3U-4WQ9qjmZ-&)VW|YkMsAgf zTtHAy7^mOv10=(v)NG!O?}l{%*E?2uS@V118!UK3=P~X$o4Q7VNGZC7ik3g+#W@Wt z?Enk2bqY1ND--A#P$#!QA9?JCkldFRMCYrnirUM6LnU{UdP-NLMK0dV`$cW z1Su4Iq;2+-0?C*iRL?y3*5k$*5x7qVLJco~*8 zGY`TPd8{GwpHs_g|NiZn!MPxcXBn_-f7$T)GMLe&RIJYyQt`}AIVuBhOkqK%G3u|I zQY5%d{#Tq}6;*CtW-k(TKP250%*sjBn*Y!}Q|F4+C;gsfCcxqR*rgif1pvsl+tS_V z{Vc?utYGv1DatFL7_1nHrlbQx4(SqydjXr2%tEq*BFViuLVXqyRWjd!R!@2S&V)1l zI&@S6mOM~;WiYXgk5L?Qy<5ip3ckgf&|xz@p3h)PGT|S$O|c!!YN-cf zy>88=0w3U21oy?huD_P3MSg|SxO^wA0g}AsTR;$_I@t5EpSQzQ=Ud|dh1dS^YemR; z21s0uxA-I9LeZu%b?Z_g7si=9OZz(M#j+~C=V|+3b~pzt z;HN=Rk`N3xJ}8?sPr7&1y}V(q0o1}splGL#a4J`I#P@??MKH#dH+z)pD^i0{=d&6r zSDvAG89>3fHLDH;!!)O$F`eWTN6ik6t1DSr7&+vo7Gs7~N0tC8WrCu-8zbT)m zS6$OST~(m#+pgVo$E;!(cmN+6N0V)ph>>ExTSBfdq6tAeT#In9aXnRFHp zmFFqMgTehOV~H~ok1j0w&ARgv7pYt?8Ra^;rbv~lKD-b-(&P)1WghQ~Q89=MLRA2w zbwbD+gg=vpu^1-!0zygBt>*`D9?`Hb1A%kEE$o7T<2zj4z*4|>vncyhfnGjiI7%aO+ktcG8@~l@(LW zihXczaC1`bipB%zX?6=Z%|pa!?Cz*n_!(+~Y=`5Qr9C>-a7MGaB?4(M`C2|8a>Yhs zUPUPqoaBCy$bDqqjZv`jrDwqI#ui#I>* zKLgL&N=3bGi5Na{4BW1;pznGZ2tVe2d24Mp2s2B;9?+rTsr+oIi7=3EIm zIp+4nfoXL2^8J@})BeCU4IL#Sy$lh<2RMKdM)^ei&+?Ku9eO6%LfG_|#no~ppe_{p zEfHbR3F^L3#w;}^J4qxz!zf*GqP3q@df2CxQ|M0ux@xh#z>>1cwFZHg*@-+235 z%$E~!yO_s7rK|XFDg;@RaLanI>5uToVu9N!MXRH;s`7EQ@34{GrvP|5k=aZJ;;f5U zpNhR$n=-Za_0=E2+GGXQLbB2zirz#M>?Hs?=R}R80=y5Esud`<+aLvTVf7kHzBspp*fPi)%PX)IkzeTxc?lP{4+j@_NMLwhkItTb@MtR; zS~c+@=BU1UIY`C?@6Jfe%xROZD2(U}I0BvTM;CHgH=_b~VjOWI|S(FH8&9#hehlh)m0)t`tRTM;TD`&+SY6p$@X~nPeE2 z(DqRQ<)&wUQ=Qp7AXr1NZpNYtu?<t~C>g)m zM49+jchH~6Z4SZmV`R`qmdb|XjULGuT2u^9v<$r~;0A#NSws&j{hjE1izd$EwSMxr zqUmf$kWZXPpuBPSm*>u!hj;A`yBL7m~kL6y{kPeG3W=RB)JQY|NiDXd!6J=XF;7ffr_f z+{45~8gj;tvVtw8)SB`;{8Ym5QSlPK)@F{QNa-NArw*n;v6~}3Hmuu%rQqZ?9mVH& z2#MiE1Fq%XfZ0o~uQk|^OnpELk*2TwfUHo4Np4Vc3*XAGtsWXIi0=2(8^b}e5l<{z zWnSU4`pP${gU6AZ_?~sLK{Ty(s|*KPo?+Y!_wm=TFJ3J~9U2jeZ=re5WFC%&@l0YU z>@?Q?9RuQ%R7MSbhlgrD+z*3XBY>x+dRY4$B)DzEqDVnO&dVH`hZ4wR&b)U|m|-Et%8qCEU@{Ur zUifdhiKZ^8cwDtqI_-y960@T_RJ%JOzu-AbDZ>zh?vVRfN-adu3v347-_srBvKUGG z4Q`@dEX6`WE3aw>HOU5YNn{EkzmYrvA96bS7J%(x`Si;H-ZZ->h|q}9oFOewd@lD* zs@Skq|559x4+e&)5*oSlFtno{30LjWzLZXL4izOkSB#kGh1_W#N}Cx3WI_*ncZtJg z`feVTv=Ah2oI5OL7?=T%@N2JE^m2FYxB?te*TcGl>>KPm^p(EbF43#Xw@9pIdpJd0 zkjtHJrfYIP^WC}90wBBm^c>I-{nJVKWgU(;@Dvn|=~#03$a{}S5TfBtA1cmwn}<`3 z?K1ljifPc|m`SOBKMGmQ?%TZ+BFB;#Sw8~*?PfqxeVIX!c*rSpzFc`3Ke#zCm{Wwy z_9L~sbd}AthZz{`sHM@qWv~#xZlZy*H9AdDWwuqqQ&*C`m{J;Cz-ix)?o!(Bt4>kGi|B+LX~u|lO$GN66CkviJ9x%d~ADeUu_(O5*3RQ@dxudv39vQJ$b8_cha=TLMrc!Ok#J3Lwypuyq<}eH_5KD}e}7 z`cLj&(8noN;M);WDV+n?rTHjUh=eFPd}QqftD2^M;258`iVU8gn%`m}RFfduYkK>< zIE*bqK}E+Nq<~AEp=F+dvt_9g5xP7AJEYUkuQNJ-vNOS?@u{-uwM=1Y6HZ0oZ|!Nw zSW+?*1)mxF(sC0s+^xASQSG;`9mx^Y07@=S4bER1Tr)TkB_Qg5UQ$O;1HCD_*+lt6 zcZUNfDG1slE|KHOLXQ|e6W<@M=NN^-K6JPI$^ci(B_o7xkZ5bs9+w9a1gPEXFa_ok zHbJuZ!USV^DK#5xIc&)#9!s3DuIyL}7*hsm;DjNGubVu`?5M`Ewl#2}W`GNm0?>&D zXHAHN%# z3(qVUDE#4iw!qMk)Rs9I8_6Ej>=b%QPG zH66>#u7;_Ug3=DciI0T}4Qu_xz@b9=mBWozHVB8>~5VllxU3 zacA7U%-j3XTZ|Nz7S;!(vJk2(?rkuhTn*@4)75|*JuEHJOBO~egr9-h%BuFDq*5n8 zWl_^wXj0khRH>-ahT#bNSOFo{pWNz;_L3g%?XB?wTa&5~Wwu0jVXrW`8kh zJ38JwjYs9-uq&oMw&DV3`#-#){TWo#85^AjdKZvr-fLT9x1bI#VGdnh6RD3Hr_}D8 z>Sbxdm%f0zAZvRAcc3>?)zLD9CZ7>B<%~Q?#1#oCmFBaHdHGJRDIj4I#^)t`Ivyp6 zvkQkIYC_60^B{!4Ly;;iTbu*?p2L$WQ<})e(p3{lq!6YfI+oH(9JA1;L{0&FBEog` z0UpOZIT)>b4@uvlE}PY)(qo>K&&&HG2|_K#ZJslXr;#gQm`a%FEV(=$7a{$b%?Zs? zh`3RBv*&lcWbN37u8K8;y~NohicEteV%ZRehTk(MTZe^-?V*7~rMDvnsv~0#e<)M& z8NNv%PD~9bB$f4dd{Yo9>goi;A7_M3Arf+QQ&c1u6Hg+|y%EM3#T;nDm-c2Ena~{a zzDD{OcAL$mN|%+xK}zH5I`BLtU@oFfjNA*BAKQl`yX(uWF9)%T6K#WCHEkCAOUK>D zu#z$&)n9x`Svwvyu*KSBC;k4Stm^l%+4f@EFOn~YmrD5JtGYR0xa{gKL7?Uk^WJvj z_J`9m-iR44zxj9iPr;eH*29!6o$)6FAs63b2j%#f^n3KAtQI;`bv^cAhx{xeqxPs4 zU!T&te}8xZNM?m=T|8;XSF0GYBNXv)YK!D>eyC; z-;%GZ8Z13MSl1q)*tDa-`FY5Vz9~He=Nl}sx)bR{;)ArwmY(+{p{3Bp!%nGwZ>+0( zQY_U*GlL|6@>!MWtzy=MAN}4DJ|&~QZRzh190t$4Fn~dAuQTGmwurS1M7Nd$g3uvc z`+Y#SlC^-9y#)xTl1n2-)C^OH;9y!tQ^SJvQU`|ymJ!aB#HhA?XbMe?)4K#RCxlWEKdDRT>~^U`1In=aCoh1nM+?sFxQgi{=FG$IhzPD|+;NFe zT>K)AoDO!hMKw1ijhl@eK@Md8?$vqcGEVD!FX?%`v;HHo67^Re!y@PdJmiyj8+BdT!*Ay9@lfmC%c=zG#a)S$N#t=wgb+9r0BP-0{FB)Mt~(G^hn9%}om5g72@4E) z7?JL;s?w~~Ax==DQfH51yw0QS1DL+2uxYLP2zMP#|RJGAuZIzRrUA;iE(XmILFr^w|EaB)1HmvDjw%4bxWWzXg;o=p% zJ{X>cVO|GvQqiu&v_C}E#J7hse^duRY-BCtl1d*RvYV`y_FIeSv$}|3kkK*_bk!D( zIz!M1ds@1%*qUdR#u>WjgBl+A#3*MOZR(LKv(tBX*iba^UGosd!#E7yffFs{3F0N# zAQkNQ5chdWyPVf(#Q)JA(Ucgzg$hIwk!VJc1!H$$ zml77j*!3w5zEJeBSAjffV@m17YW$6Y;lAjJk8bnGa21gNq(ra)Zx6pyO{Qop5xdPt zIBj$wd#Lv2DVS6XRa{TuSDY$-uj!4Aa*nAd zS>vShv)w3zWTGW72K%P`cS3{{nFXc!s>I`23!LMZv)GH0h7)m||9@Ov{LdUxkA30J z5~NO<{mEj+xryDo;7|%s7tOORRz@sE7pJrx!WV9cQ|nD)SiESmldNLPm_-sjpt*9w zN{k$4|rMkq=R_x~br08MWZ}TbW}wztiKn z#3<^R-R&78pgqj(ed!&*bEtnd>_^D#RWkFK$M>RG23U{JMVs|FZt__8v90zWZ~o2m zv;`Rlg_jllhL^V zS&<6N6HXnv>FLfzzS$=lN!!snd{&n2;v0%EUt0*(Q~-Bk2*VK3akic5^C&H<0m3fs zWfhsstTWhHq$CARCiGh)c^JOuQCWuw!|Db09f9uSZWkxtloWkG8X*_3DHKVKoURlR zTw>&PY^}ZT0Dfl-Zm<@~zhxO+iI#?b9AqM`>+GLYBwkkZ>YJu#l_HL@RjA$Fm+-la z$E3`7JXBBad2~eC_`S|uUpJ#R0;iOU{H8Yatvjn|g1`E9ln&6cq2NT`V3SfF!t?kS zCiD)8k~%%&IQk;vihkr+np7~Vn+!eAkVq$`URKr%3SrLQ% z1mi=1GC#;z0YfEvHb@`HD12Pu5EZHpQFanl<8R1Vm8?e>92lt?jV0|&2rar6Yd;D` zi1>KK@U{L!G}++<{)o&5#tg>D7Ph#o=^kJxxqCz;-ITt`Wt~%uudQl3m;Y!I<5Q4@ z#W_{(hJTJV0&XI^;sho>EkOkD8S!=lf49V+80hUfL;+7mH6vl=BK!N{O)AYT>F&?i^+VJ@0$ z4;d{T*)0`>U|VAx6z)zn3+FC{ge%|E6$sE=J7cSQ54}uTt!(-xUM5Q%WI3?}PXZqW zgac2Jvp82?aceC-{;674%NBWkM04pTFSbvJG^TztCt66Me^A>sEKR14f(Zp-9meUi zW=meEp5WbPoj_C{veO*mQ3H>!Fk&I=&hb9v$wwEzAI6R@fY1r$c&E_rg(I>o=^6r> zOa(n&IE&HepZH*=8NkId_AT<2T?)_xNxAK20Wj-gT~A&J#r&FD&^8E((W(~yR7l}`<5#YwuT`LmG6V0%lHrIcjcXDq%1t~9sktHo(dDt+a4l>N8=sM>AX)%AHX4sUWa2b%|Z8#I8R<~-)OHu@vK)N z5sx%A)+@5WsDO8kTd%XGftWHvh#uCg@X4OX_cmJ4M{_3l4fk@^_CGy83=yhr{{dDm zycvpd)RCN0MfdX;de&L4fEuP3v!3V{5T1u3_H+pHthvmrd~8+9dR;l@M`YO7Ay@Lp zu+TG2sSj_Jm1Hyf-U8&T=hp=_Nim*6r3)a2T6Jhzt1C={g#IZ3BdaykpXCJp6PPQa zes;T&G70Mz#v&1I_Jhws_Lwt$XYnsw}2hy|{6HuR(~icV3DdHfFo;BF6_x6A-Oz;N90FNZJLi`T$GXUB-PD z@`k@kGQ)1CaJ4Abp=z*D8XVqkAGmvs>jhPuaH8{Li|e!N@z~wplG(fI!{^66krD5P ztl(hcJslv+P-{K_cqD(}>`=vmG$R8A&T4_90N=?=8PC0EAMcwt+RUzt8njh)$LdVI_T5sGKmc)b9>NTO8+AIkx}rV_j2HmJo=F?h_5Sv%xrg_09bw$^fGSNxKy!o|Vi(Et?J? z!JQTSFisQEGZVuvY!1p|L!m)9?6WUQb2evdC&S><{kHrEMrg#u%$2?^qTOd|?+h^sBwGw-8M7aae(&xYMdi zL%tWy{o%Wk-gQ8J4VV|gEb*r_S^-GuUtrtV5t=hB^;lP25)Tj-l^#`jN?%vZT1p?I zNbPGNp$W@8o`~2rf4%nvoHX!W0xA8wmN+m(9zUH`0o&?_I2nq&BWn=>D$s-lz%NXE z$bZ`mEDMV)c5C0XU#jc1hr>ot=+jc9jht(H{p5Z6h-(CesPFJSiB=o`H8dbw;K=^Z ziLN<~`clA$1qFgT9V9_rFc1gP2I3rU)QfrH2^Ne@(Hsb-{@Ky#K1sCgBJ)2pRqn%_ zF-h5vwTq=(#ej_(Eu(tMRZP9=@wbr;Lni^Gl=EWKWt=Z2XM@v=yn;7%jYHA3qK)Yk zHa$s5yoz(JVF(2pDn-jd$$8dR_&iZhmpc%thjBj08vjcVTDBk3sY}+&bA-+Pqy(m3 zAU->PD|TPdGBAYT+%qbmOL;9@p}3#VJ?t^4o}E<7rVJ=>8whRFy$Mzfc* zbF=k$lMrr`oScBucO#gz?De<(XI+JFe^WYEOnh50|0jme%x7G!DWi*^lAvuF;*_3W z9Fv^-PCDPw!_a^3_mM_z4$0zwXA{jYZKKTdr}n-4T_j~Fg&|ex5S-s#XOm=A)sJjHzd{jwIyN^vi7^RikAlY}b8 zBg}Kjd=qvpFwjuhx7FG-%w#RQSEbN&T_CyX9SnX0RDE>rQu!>hBU zS(p5yGMsp5^v?B>3r1dG)jqUHk)|ap(ppJA##iR%@nA_Z&B64^PB-IHy(KG|2SYH0 z#Z-Ax4_IrUQJJU8Y@zWH3c1j;Na%6rtzTIbkg;m6ds}2mzm)q=pOO5MS|Y#B}QRNgSh8|N%_>aiN3`*4zLb< ze0+LzfJMZ*s=O-~to3djO70O>p>LiSYcTUr{4|L#VaD}&&J7UsRgZEUAdcSNIbM>E zx~d+@-l0i(^^pSP%s@AgY4p2aNbZ`!)El9Q@;Hg1)|%G9(adW{7-}i)=spEtLLmYt zKMGO~&{GWE^veA6i^D%JS4EqxylPP!z3%h@j&L?0TtdEk1^1y8uCaVA=lJ_Oq7+A8 z*vZT-V>Gy0ej%@rOPdPlFE4@Ny%+X4q(E!O3+(n*~_+RJ6pD|S97laj+UiJ$p; zWV%mW?&_?7@@dd0tl0OmfHKLa46GVnv>d+C$W``z^tolKDL3T#UuTuPCwm&TQOm+F zBn_jd(=&zu2Mc<8Ht31ONeL5pu0r2rXlOb?gnJ8}{Lf}&sSc<@Yv;XF`X(-*pHe2= zr?|$Dr8>vsTZ_T&!9es5-{=oGiFDB7@fV%eVHG*F*D^;to3<)y zfHl2L^w)3Cf`Ktoe7Lzyu^R09`6$4L6qM%uyj1&U_rJo^|B=agI~9T4^@A!f(|7{k zk@1C5#_+urS2h1pE~p?Rwu@q>UN9I3>yUnVd9?%UJ7B+^w691tt2h2M# zGeU)43yg0-PRMi>{49{!yqs87$mfg4&*h_V^wvITIbUN2bxb@}xur2_dC0OW+SHc=}phG^fVeg5B}5{mWueF_sE_H?{YKg>j)GULEG76l9gG8%29 z)DBiqkR4l8*Vy^Kr1a1=WOUda-VxT=|ANhrxdzJ*-Kt1C1ZSIxAlpHsSVk^|#@eY!aeDxnGd^WYOqM ze`G#G$VV`|+IH|I`A0$T7Cxg>JJ1JulLN{achhl5aicGGD4 z-OEe|m^?C%=k75ytDpLqD(-bsHh|uqN}Pjb_cwftU_L_&WZR;WV{hXEPsmyA?cA@n zlmx{FjiH{Z;Aj2axzkp{A7ocTotE*Y$cgT|FUdK6>(^V48EotL|NAY5Q(wbPg)y>% zn32y>@qc)J2iK6;GnJ*4g{It2&Oe$fGZQ7gvEVlDBfvnIPLHF&~qA9cxjSg0xR%{ftiW8l*6C}m46u@z3y`6MO_x^y`RmX?=K zwdCcb?U%64XKz;e{^vl)KTO)X;*0&P?Klcn{S%$c!1O@^^#M@bh5Yk61sq=kBTC(d z%(}Kc6_cOpyrJXRZXbQSrQZy?U}^s5)H5>IUJ9K;)u!e9+5pGEYZN5tPD`YU$@f>V zZSbVtEpW1Ly2lgf-5`m9_*!ix`BIt9u?M&_lI{V!?sTxZEodk&33ib4TYwF`I0c>p zv-9uDpa3kCwl@P)b@haS#-Ix2!RSOc%j(+-KDF?_v1)a4l^eV{>%G-nlMAe$IUW8Q z3H;vcoce!+6=v6t3Gj(6S{-uV1TR6!bdvUxk1{@+WS~_k+rHKIYSZv1qIYuFYLaER zZEhAjz8ripf|4w!kW6h5Yed?D1gb28n4*vQ2ZTc*W*S2#x4bW-i2poqc=k&jx7< zZe2~84}vC-(nGiR!z8f^D#YD51HOFzT}fw31H`w8#K}<6F5}mb*g02xr~N)E;*2Q3SJ)KXM#m(^cCJVffPpPZ$@B4tAnKOCV0VZs{p@g*po^+%d%RK$}X{tfT0La zWS9&0b?N=fC>+1V4Id_j#CG7rr(k=TbeivVT=zpA(J(h+bR$z@7jx+~BEmM-SgWai zxek-Gjf|0pzrB}*O7aZ_wel?Y3u34GzIh+11B2i6i)|4F z;?ji0F$j(Ef8ON{_ab}eT#n|*dzhi>pJzXa1D!D(9l=8&Fu@z7Wu=Fi{PWu;gRScK zOrO3(_igvhqy^9uBDy{tCt3iH}A>Pp|ig7!G-V+Qt&SQnkvOkl0Z|m!BM14_uOZv z7V07s$KWp}{9{q_wmfJXj?c@eQ3*cMEKvI#L+GoC&_2A%t|)onKn-WNG&`V_A3;-$ z!S;YRu@Nrm#3pJa0Vc?7H&>{piR-t=r_B zmrsj8PNh+r_Y)xh88^WM0Kk9SZ$7rYqIQ6xQClyDfa1&6n(xCgp}swPTrcXIAEGZA z?!X|?4+v)3x3!;L?)&)y?b#RhkH6IaW;~_FfTxp$QC~%{C5T24(?a;Xp**p=DMRJq zJ(@Z=?S!FhQ6hBb5;F%Q#9pR2*OQb{vMRy(z7}kxjFzO9 zxd~$Jb2P7kTs~%c@uaPLvm7GMBMK^6Dg-bSafn(_53j6d+JUH)R4?`ucC$-oXeYF9 zmg3%uOfzE%O8b#!`yI|qEU|oBb$%xG`KK#ZL>W#QO~U;L*h<&k=E=W)Ihw)=-}@Yt zeQv*X`n>0DSsvs1e5g?k7CaJqW%ejk$6V~B2yt1}QwlF;P-q@sml%Jzxn6C3ZUi7b zO%LYrFCG9getL1vjLk|8E+_=(&ESa34sF5{mKIps7}ZeoFgcp4Zc)6ETwtEU^#T}w>IRi$It`;OXQfws+3_8@$^+YjFZ%00K77-Z^h&H7 zV0pQ%#Sb-yzLPY$`NMt41i4j)lq^aBt`$*Gfz%2y-%HfNKRRD{BC2z$&mS}y z&rX4nuilq6SI3rv;>yNlc{*lepk47$K}X?tj2eHno8?>+$!Yq5n8o{3^ueENfS{A= zlT1NDDeR3;df3lkG}QN2W8m?2<8MY(Ft9&CR~drI8}`@&!$Z`VSPt^;3gu=$FRf@g zpme*SS>V`_a#2}BMmpEhh%Rb}_Wv~FCQhd#@r|P0hz~|=dK6s6@LT^%y zE@q|s-ZoG8oB$n+B-;PjbZ!70K$BKg(=^Tl&m=$`TL1ENQ~iD4p!NCDkM7C!rzft& z3|5!4IeF`Gesi&Pe7hR`7GA@6&oFw^OW#_*==xdeTFO%0ib;N2q1<>E3|MggnGFuQX`U(I=OD0Xv|=-iCXKB&IO60t z2>({24lh|fCH(wTD!8+Rz1Q7pR0Qx)r7(7tH4~Z{mrqrDTO2);dYeR8hE$$si7-Ff z65!XXeGAQ5rgraP5E1@mxRs^5AEq~D>Z63)kDPBE6D`mFZ`pnXB3FDJ=DNI$%%$f#3!4ql4%6M^ zBMm^{ZDY0TPT5pOAR=!VNXW1FqNlUUN%n!uf>hzJeyH~!odFj8ci!(NU6T<$6yY*j zzQboWjRGltkhNs0X)jj+WhN9^-l#!7Hk-wuh)BMl)pYJa`Qi?&IUlmN(_?tUh}U?J zQUCdP7%`&Elz@PQ&tlenlgQnWitueWrZ}O8Kzr=co|OV-kPrBsOEPYi7f9#fp);yY z>IfL|Pb27esBaS2D@on7-rVud8+xCNTpMbWsgP`X4s19UL{OIZtQqU+;p9Kb*^&tl zY`)@|E|7E7%?rO@#1_R!<{(1XfpX#%d|IB|Z%5~lkl{wkymF;CnrZT+|bQ7JdT_!Fx9Gy7jqaE4ncN0lF*1nKs+>*c3uG%-7 zv-W6KT2>{=A+cp_Oj_~`s(MLd4BrpnqW)Xg#EUsNR299gu9xUaB71>DdgWHFKBt1y@r+Q0_X zMON*T4Q|vI;@3agPk@k$sre_40xPh*2QmA~UkKh-r!cY|E(GL_?7IyM(u!;blgZYFiEsDq$(H$wQ)H%i%(~hxS|Ou_!KFo#4kUHQ`zwsdFZ5Ha=?X;r zL}hVhq}DUC(V2|Q0!mSawtC~imF!BPdb^N8f}S*lp=g^xo!hMw}Ph#d?^WS$zW1Hp8^ zZ=Zih@%Bu({xvoPHlx}Y+kf-8G|W6-bIHu!H?12_^GzN2FAJBvokMt2)5M3Ap0CnC zmcC3K0}r$UW8jI23T{xPZ~C)$x0hq=I;ZuM#{>9R$LF?}5`#v%@s9F8_v3BPYDK5lBoL<(Jrq|y;c1rC`+405+7ED80&%Fnl@*~C+DON3%CCdPh$dj|hqidoFj zG}x5mla!Gd6FM7uOa2O0C!A_LZhFXR3B(VM(*DJ01BeT@1oNl$-SX^w3m@1a1FU!(^_o&L06x*>%!jh zc3UCHlVPz9ViSkXmtrM^#96m5c5ERyD&l)_GkSlFF-FNWq zWAm}3@de8e!Wx)B;LrD8^>B`@$2>|Vx2IbuW*;4r2uBF=*DvK2aTf5f_z7dUr7p?; z!&h8&8Uf$$Nj(J=pX;ZtmBCDR;k3t|CRKY|dU6`&9$BJKHne8sc;kn=-u0Tt!cE=x zbxW>r9OH?2Usk`|?#d93uRR}MeO{^LdP}q0v{LcTptuA}mhlj{(i|TNJik4aQxdhR zJx+Ez?MHpQEbf%`wSSb!XZ%IN@cj2ZgGklkvWR=np{$;z|DW4F7g@$}xX=C{O}{|2 zL5$6%NxzSU)=0jbTND^Fm?GV8|Je}}@#C%=HkdQ6nS)EM$BBb~;hjJ>HD33O-K{A* zDztX2H}-5A?8P6o9W_Vss;$nR<|?l;Vyw3n<3| z7e75L3LkC_@*?Qvl{L4OV_3>tC?%jKPud_>D@>fY3jsW$sA@{B3o6jx)fJsRW9gYR zs9jlJ5-^HO@>B9dQNFI``vfG{}YIkbuSXr&blEUuMed` z-fopJOIidqi zEd7W!)@({LsW8jQDOZI1qtvknqrS>MeZ;#bm(ktrZw!~h;mKV|liS_~Pafu;h|MPF z5*1>RGA^6A4V|a~iy*MeTBZPmx((>G8hxXM&9C=to}4IKh%zm+@H$*fzTbQjHeXn5 z2$@r;;}1z(9+uuQ-i@}cVA9|mBp`4w1YFK5d}rla-?^KW%aFU`;jbSs%63q&oAniE zd?XpJmF@r}XN9y}&(1)MeG&(L?V{7TPG%0>+X(^MlxB2PhgV*U~VF zl%&E)RCJ*F=USTdK+h-3bd@Gz-i?VITVUj%4Z*Al$6BCeke+Z#0M#e5N&KmS^Hb3; zP8sl*-Dcy-F4yZK+NBAMN$O0w>W>=Bvs~^KB)e#!2W{kHy`!*dZ_cdF>12%R35m~$>P~FPVKl50Rm9mEzqbNbvNr?U#bw60?b^46D7XMv0y|R zg<*x01^cxov4l1=$%`b8?E$^TFF;^uh&CxJMBNA|d@6vyC$jpvZ~{SNeNciRzPs|HH|7Qs`#>9pE3Uzk- zJ51^SV5iWAi!?Zlkiu5nf5FL#s%x-m$OVhd4Grz%%}OeHH$_ABWge-D*#s~U83`4< zuts|0cv^?kekPR7{G(ZxF6t|2qT@mUY%*1-ry}IZS zU>u}_6u^vs^xibJq6afhOVUE96ArFR6z>TJR>Z=V&-=q5$3$*sY0Z#0Pr;Zm?%T2T z9KY*k-aX?W$c08Fz$QAI2gPIui3LIDlE9claUCsmK7UW$0`^;XgETR+nRp-YJ#Y~@ z&k<^8@g3Mi$3RZ)csHYalfnB?Qvn7)fIsckPrc|ba(J~=IE;WyVgg4&gcT3vkY~!h zDNoe{8ycGl{3Qs>{$0o@05))*sAO3cRT_*e;Wc@Ec1Dnb4Z4h>N2qDw zVoP4g_3zcEnkIjQ^%yDGWcVMh-hr{Mb#23KW81dvq_J(MF&i{aW81cEqe+7%jcqh( zoXptf8Qp8I{hf3EK``e#-tj#5eO)8DYG4H>lex}NO;aqa+i4b!;&}wQC_NmY=H}ol z`A^SEo}-{oW!&H1MEKvqYOWqF!LJ{uo`u7>O1g922gf0Mb;W1c+^Gz}AxsAV{P|h}!wrf>`Tcx+;BXBlA;T!6y>M8p(}(^ZT+KitsHE z5$fltqFvW#`V82CSfgH*L>t6WMV}i7kpJT|?+$0xX>Uh6^7T&Q7R@&BIc;eNWy-}3 z;*{-eyj#cO9m$`pQ+Rur3X#&t=|ugqxZMgPegmd9Om~$IA%O5XrzIrV$gol`xoYz} zkJa?%{()!q=dZK`edq3lO)v%!rabzz0Wcm;O1h%R4~JofD-Y=V_Z_>Rw7<)5jy z)-F4jittvi-fvQ+PW7-9fqGb*{P*1eUk1HW@|DauV1%5#F~jBqY_F|1LN_0Uv}{Eu zC=ptt-%KP6;8-j1FPT_J+!}V08v_w9S@cmqHl@Y8(9+K-r&kz_2}8n#747ZRJ>-SW zqJ?aS{b!kq*+6PxFp9kcRY-gRRp0yccFEO4;`7CVR*Iga)@z`8#F++7 zAd5z|%|WOz{vCAGup>_(#E|JG1=hZ}&}R2d33ComM2X}##uUePMc!Hi&@GC5hZK2~ z+dx`H2&iF0ArY9t#Z#{PcO87Y;O@ReEP@8)wm;aaD%${W)0`)##dtcp5&s1-F-Sb7wG7opvjc(^_}Z&H-1B^7RGIK z77q50?Cx)XRHV@R={^m(dm3yR=la~~nA0X>mQ#p3io*KCNm@6q$CHXxzX8p6OEsi` z6Gcpy69$duzxhjp0uj16;t#rfYKf>+gyvIda*IS<*<=L87y@A65Zz z$C{Ixa}_NYVjmqQ7x^XpIF0)*iDSkp2w+%9t5EjeP~hyhMKN_80C`LX%o%4!^-tyV zfJ-O_@^3zjd(EK;{-DrFymACVja?-o8D*tD2M8qsY=uCaIt=hv?=|#X?{Ck5ZdZc0p}etz26&sl=LKaK9gHMuD*MLQFB4e71}M3YA#6d-Bk*#uA^tLC zDi7>cVTag<-7?@G5xD|xxQrF4NQvfDz$}$|+o(rb@9QaMYaHq8u&f{V$&8=^jJkxt?zp ze}GzGEYYigP8p5lx5sXRl$-J{M>bEcx_Cl!l9Hg#i!+eeXyeC{RVMXOov~t(FNuKi zIcXT0uNmGlR-l214KJ4k4qe{Yxx~sZn3=6~+9-Hmf)ZITZ81*O2?*8T%~9x865g~7 zeO%w@kA)B*CA!kgWq0&r{-+NOCCW%kHEjA!>>_?5^2>4lg;4wn^e*D{}?h;{QxFDlA zF-2r_3ma(F{f+SfyMcTnzl$JZX+n)XfxBg~*}{bcPuf7>JbKd@zW~Br`#@687gJU} zxw#PlSVS6_gbgAEzaXACY*HA{q1vNe%B7EQ0%o{zqmACN$9g8Nk$GSWawShMJGp|Un#~NSKMSU(0Y8%F;?ESit0RS z*~mafkSZw~k>8XOdP>j+u1*gHlaD271|4rt$M~else(?s(wX6*wCkqOP&9jn?;=ek zCDoJkzE4Wq0Dq`ZxnyvI13Hgc#qn!$x$J`l5V4J16>BeD6VN z@+gex*drkHbq7i)7n*O8jquYw^oKRrbP;h+#35i(|75S&I0kH;;G$53Jb&OnPu5HuJ7aQO7xIdwlW!+VftPS95dAwWn?Nwm&G zcqWZTp*NQ>R>9eWGVC?t8W-l}LWAbKF%o!IIM{n^Yh#@9;}W<9ZDjVe;D$+zo7FSo z+g^$hI!!2i4IZVjk{P6&7J-rIqL_098>kY`sIeA%wSv1;JZOUVLijU+{)gd*mF}s00xP8llCJ$4$ z-hV>>f4#G&{ffO9qGg5=?*+0V*ta;~wg zsvWmai4Q~>jL8ANev4*I^Db1#s*@Zw&q(5LI1ZfxWTzJCobPJ@vtYiO>k#m&rzz7i zWAJJU00L+0?~{DT*+9ZZ6=%K&Dp99`pkb0{2jNdt4j!fH9M`J%b&?{#3Rn~(U6MNP z&?pyX&nNA$gzWJT&TQYfItkffsY)SMgFlA;EDqp-Ou+=ev#jYYCouOw4)h}^#EE!2j%B2o`YT#K;sQJ}bhML|XVrqLNP+IBl^fk?e<(tHB7tp+vxh}IKiBuP{Ne5-- zk;Jmx^(2v%R2ia~5#>eMq?Gu&@nW1Sz~dN{Zi*xm?#xv{w$lCzBxak2Fg3MBB8Pzg zRW_}xks1m0tZ+}Eph7vWRU(SJx+0?e@$F~2kI=iVolf;TyWTsxzg`WLssn|hcEF8ZcvndVO z5h8Kf5l)!&c0CuRTH-gzZ07j^)3=!8E9!({eA^uVdrT~7qfRTq%WmNW=lVqI-?R!H zGZ|X8(vKklRP*tLX-E=NXINP(c3$nn2DfSHA$;O4!B#o4jl^ zp_eV>F$I+XZVK?w4^M7Ie878eGGBuLD)r66Zd&;<9DQwhTccD83~g)0NPWC*!ZKSk z6?fpsS8sA+V$QIV0BH#OpA6VLIpt3@zP-|H!I$D1MMwf-@EMjQwFP)}52ekcW>d)6 z^5ISGwB&4E(OYCT zNU~4|l8#Ug*nW>9(P=b|l`PL$jqoX4Tk@=Fy(*!SQd_B%elViG8wfvgJ>`K6p7Tz_ zodBvL?XEgN4u$fqGqNEK z7L~l@j7q!Zq^NdDX2Lo9TG7=%{A=J0c$q_TefaZ zwrqN&By4ne$4T^X5quA@w783k=IsLI4WWGdmI(xG{Qj*oCNmcT=@w)N{DHJAWee{r zaB#<5^;vDGBiUJRwVLr`Wv;^A32aKWf>+Y{{I9e*`Bv$0&b#t~!gOfSTVI3&=F)7T-r-nDiuJd-f+4O>Z#3$KpEZJ6^G+;n^kZywSF>n8dV+#@u zb|Jt6D3QL1eh$wRbda7jL!m(R4Dxd#XUQJtDS18xWPKb63O6*b$^@#c7CGOg+&irtlc1=L!eL`io2vx$eBy7=F#YYnG_fD+AVDe*rNO5jaEOs&ugqO2t!TSfvy zuDQ=`Bt#|uuyEPkT$n;)tyO#&YD}4gqtNa9VWB{0mX|=u!ZqdyXa=#AT@<;6p6vf5&Flmph zRGfi3chAeAlHV+t2Cin2iYvF1NPms#MdyeDbo^(?UG1->P2K;ZWh0s4|fTiw$f z_9={uMp(Vmkc_Ypah9SO4uhX?6qW_-J-8WyYEYeBKY-1nO~%%o{c&VQ3OCu#7?vRt zpSk;^0j$pJ^$0c3U6;^1n9UY^BaI<2F(GEcI}Sp*EPwy+g+m!wQ_;#&eSneO4hv^b zoXm&lb!9B8yXe48R6)@*aNi061_xSO!hfULze67=;n2t@7pt4H^NKT4@QB^_4=r2Q zpG@(;HqX@gUH?U^t%?r>s8xhCYQDUHdX~-8^chYIL~hOjI1rb|NT`}_)ZfWD(E6%V zHDqWUCM(PJJUXhXdjo11rvRd}u!4KtJ&7AKS@HWMaF^#d35Mfdao@>t`z;f}XZynp zuBy}8fd0BQpY(=u7X_8M*uekTvvey9CcY})3bG`M`OHHGti#bXrc~4B*aKrVV(%1+_R}7oe}Z zWB+6H`Y%F(==ENPf5UOpFDw{ZaPHe?yn*6n+#-dQIgDDb8!L=W^s1`%^8Q@yLC+O0{US>bp`wd@@D2v!uX!vJs+-2>^r3KM_vkq!z5*}Og_xSK% zcC*cpC1v^MbbByA|4L@7;r#lAxC9wwIAQtrXerS&!L_;?OaK%I0RHHYOC+fR<#-rU zToMdAu#iACj&(>HjKxo9xzeciuiIz=*}@n>THkgW;l=8cFDpTn<|ywzf|oq^1f^H^ne7;zqr8u^F%{|0$ZOX{V>^e zY=7T#F}U$AU_2oKT6bJ{LF-r-ms@1*MFI&kU?AOU! zMLQr61*J=B1zVUeWQ;Xn1~fSQ@`dsh4deZ6`NKNE8%{?)r~{%%?FH6(Hk`$;N*KMF zt+IEmFHwg|9-j&OGwW%6g8@|G6cEUx^N^bqDssX8=U4Fs(rPFzZ>Q09Z+Bl_SGugW z6qGvYd}*GR3Pu3unnR5Q$kXklr_?5S>gB3I($H~5%=Bhxr-Hl7{iTKZ;c@Nl#-?Bd zFwYfO$FyP66@HnUovkfo!ula0ZsmVA0Ixo*C-8eCnMw^cn1S@crI#CK9(HKQvMnAq z^y|TDQVdkFi)yqF8NFInz6rgSW$w9x?}C_mI#CeXbJ)+^#k+~^b@gq_#N;xjbWg=S z#*BRxpI~m5ZaWelF~=3y zG0T#77g!&0+2bX?eo>-?O3WXFQr99ikF7ycQ9Zge2c< z;_wt(5y7RiLhD11^dhwJIqI4cqDvc`|5}A1^GYJF;jZA9WJnp9xiwPDg!y9wg+v&h zwIZGc-XGyX6;i2R=~7tZj>s-`d(+HVW?0512Ew81_QldVVNyQ;3KA%zS=#;#Kzwd8UBfo=V+wPw!?@@5qB^x7Vx(v@2lgY}mJ{n|- z{Dliy8T3V5JQ<99zHlEfP#eFD;|nkipTUjt-z`_7)?VRpk!I?RSky#7^%ZS{V$|KS zmIyfHJS;3~QN}in7q3+JN@GO^`w(}lgTi?* za!D7aXj~LXOpfRimOKZphM2b+H(a!-l_sGDv2Zex{%KdPmwJVxhu12|=hJ&9AmS;L z0WL|n|1>=ycfvM-!JoQC3()CS!YccV_*EB;ZNm*a3}c~*v)8{|1J0dGA7{ifbFHc9 z$1-;keaN+^c^ic0e(xrI?+vRzzmNqMvh62(HM;>TWL?_>|2*&MKKA>wPm_N0J=;2m z%Zx=>YkUlxt3Hu7t{;HJ6f|>Od4Fsrg#=&meu5OJZ!^9>v6=PQ3|=hg zO=B+%9NB)``2O#(TCr>+nd)0_Na!2avw)3o)dl_2uoOGSNP`MvX(G>pf zS==BR$cEvloTa=j9N>4&fmHeO#ujRO~tQI66o4;W4;OgkKdcJa;-3;XD${ zI;l+5L2+)o+S&fWQel1(P6TEQ)_WSGN`hBiYWfqLz{q994&?7j6!R(S%U`RE(5elZd}Zf^>Nok?t263DM9(J!Zx7lh@E~pi@)WnVjNyOLDT~?^vw--{R}# z4;u8vn56RPH%ik$DEf#%vw_<6{RRGX@*Uy7eo<<{OW61CD;8OYzm;AtE_+^03yhmA zd}##T=2LMD?%=Y#KzZ{|-_}#oNB^s3P+4cpwPk6sscP3tOkTynekNH@V-AH%W|% zjmI|OvKDxbeV+@z1MF>NsgVb+Db*M5iF0h~P-t)hALt<7>1!R3*_&?6XsOZa6VnL_ zSz+;2_#h@S!B5w(Rd;v_!v$}msugw87O)&q&`Cd%?~XcBydoOO_BJP4yJWS~_!LSd z2ya+^p|*y9WucL01NE2Tc^$M=I~1ujl1WY3=HvynWtCWFT0SOgTZ!wfc@A6zSW~Lv(0|%BKrdbhSd0P5A%L&|r$6ThF5{hK z*0zr3yaWCH+#`;@{{YB6S`pL=}mgde#^oi!xM{@7YQix{cnF2?v zA`%P;aKGWT3=a;86ZrX?0t1xKP9MDMW%C3DdHReYqzUnfVHr3C4rHao!_2%jea~F2yCUd&dERXSsCDP1M z59_NBH1Ow7`W~_Qa{VL^+5a=ex0|3J)yWjU+Qr64|G5JwLpXelqvlC$q@_ z0<|J}=T5bG#gaxI2eEaojPc1Rg5g^nZP5*^uWgcZdzD>1VsDYIz$TiyKco%o}A@7;iG6>UemPF+Xp>d6=eydKSy-@czxvBl44( zVpaJFkkVg3Uoyyjmo)tE!37WlsNV~QfVCI>-Es=)rcv3St3px#%;04||5hKX5mMgH zm}~^S{Vio#1X{1;U}e4|yLUvvO-!L0Q5~jvWk09lV7<|HmAi61CZV;lP&WupkVB_ zYo0r0s1a4#f{nIeD1TZfOga~1ogWRZ=944dpbBOMlkL{Exq)XjO@D?~xO})8uMZfY z9S@VovuOcY}p21Ul2R|uP+37BF7G_(^qg0apzkdG$43*lzNr2dJenpwvc%-!8LI=O`}CY$qP!mQT>I`TO(-mV)2TwCT)`k7qyh7; z{w6jf=gL(3@B>=%9mo*U2$)KvR?vK^V&JemGhDeA1M`u$e8&IBns+YLRD1~m#z?l~ zeuXkSfvZ;}V_~C-<{m`~Lo2xEx0#WWNg})$4z#m6pS9%k{Pl0>i8>(zHb^&Qe zQ<(OS@*@Y#?{OUWLUCq&g}RIsY&Vt@lNIh+U=XSci5oCmw)-&>N7`U)025L`HAfB7Y%R{sHoh(+nqwv z-wb*R3j)>)oRz~FY96vkCSl$}>G?%E#|>ut&0E9y5Q2x4gyD)g9UVnra(QWw)pcuf z)kAJzf!KM~y|4JS(GB~!wLw1O;wW_<%FEk9YRqkaP&t1mA_gRjooBwTcAaZDT$&7C zVL3MJCjuho_|OrC(nwYpMz3 zjMROl3Em?7>7(2(s^0f}f7VD4!aVFDbfAH_*b7Vvgr}t0%k=NQ%olCMhvNKuRyWFd z^GdiS2GopVJSW3?G>+OWobzPS9n@0{Y2uV%*x=41`B@7B_mFpC<1kv*U8SEOc=7NG zQHkCW}-Jm4A^2BamT7u9HNpl;=qv0v2y>ClOcvVs4Q>U|&SzdW-MN9t0)GwlvpH zWpUbFJgH|zKq0?+{dN*Vu{X0}9fh2u*jbq#`)oGKi0k@bCB5#VxmpQo0J&gxbR}kb zx~a~H_DBo$gppJ|KqZWaPe<0Ar0~3XT&R~*O>_3%%M+Uko3q*E%k~sS9J~F^_9w}jaCNR{RVfN zZNQ^2O5V=I53LAR57?f9fObq_@9k`Y<5^>nZ=ov$RmFx=AlUO0c1vo zz!D=v<~_%+o1}h-sVe-R`Qcwy;E(D%0~~1*d=a=JQHNKs#2?|1nPNOpEB$I10Z%%p zg|vm}ghvr5%=7SvS8U9b3tL%9h)97lc+bJq^2QNrdm{F9GAQcj@(0cco=KBGSL$UE z8A3)(Rgdd*2H={56XPK%=_u5HcrH)8INl ze|m9s2iFL-dsQB}e233WlNIwL?s7(ZiaZ|5@YYXTxi4`UDw~|tKjG6!|LmWj8dQ@r zl>L4TzCCHmw@*l`=39&(`BhC)_%oC|g>1F<_Ni7oziWHU!c;#1$&R<#L_%{|u(_!Q zk(h7=MG#9+eC#HO&25h-A==AdKmVG68L;?X#Be}{ihJUaei&6EV2wUtBfQr z(~>>rH3}pn*p>>=;lw1n<-w!jMSkTI2orfPBF_kVBd>g(ezLydSUN7xiDTW-F^@YP z|GB?LC4bh=tFN8G;!nhn=)Y1)Ee&5~^d8hwrq5U_?$H6ENBZFPCo?RW?>0;K+FhkHM#FmME5JsqNAXIE14Q??@U*KIdZORXn zlkpdg`v0}Ya*$`%vLSSTgifm6&+xZoGZ4LuoBqJcvMjOB8_>6>Oiwz{nW;*Y5jW_F zm1xEWGgbgWwJ1GlnrPQYP#qYu%c>z|U4>W|TN5a2t~*9!EHP;0r8?@GRoPMk%U@YB z5VIt&6U&MEoa4!kqIvQdD&^1_+zW-TC|Rt#NwEeo5O_U2{&JX8S%i%w=6soFNa-EnPN`~?Ewl@q0b8cej5=KV!&}oIsEu{&~}F6<`hu6 zZx-QAL|l6@oK3{+y*gtts+quvf8I@fv9A~5;nnBSc_huC zP)aR>XtI;^hrBz(juA6G*YfLHGdyvn%0qPqWumtbbz>P`)h4E7yZpG)&rc|!K@i{I zI+zT5Ydg(j`q2a3tn~p{u$}#+keJKX3%uQ=kZn`czlSA8X?b`Il)ODzGHmE3297)m zqRLp{HH|pNV$z&^ET1wkRJF7c4DDG_&TAp0YZ z(7vtZlc4dIqvoZAqEOd;+|LY%G|k6XRWL)1gRAb!@f^v|^;P@W!pLEKnwu?l1ZH#V zHG2uX{OXuLM-FZw>9DgNXe`f*e;&X&j2xA5BDsm@Ks?c$8^OLo?JDhe5 zrfUhC1nJ}so6?fFFVLeiEH;br-AY;yAI!k5x3EK~wX&9h+gEFZ>Rp>G4OTxvQ*LGsCe0x3R1VAik$3a5gKfeCoBfn(Q@U=?~GlfY1 zWNN5kp1e4Muk$v5!{q96KQG*$jxM>_+6L#)v?G$>pmZg!Ql4okhE98eRt9OyD^?&j zk4MD5OL#u0!TbtZO)CH-y%s!NF|QeBf@Q`%E=#M0+L!NIi=TuG>8y!S)xVD(X_dZv z5Ntl?8~oC=z+;ljo27H@@%X^NXc{BL=n*Wj!b#qWB~_U>EvtGJr-Tcu0FSeu*-?+Zi0Bg0s;yj<@mSj5p`l`kl=)bZQ&welQ5W{s$q zl^PpOc`Xy`?feu0_t9GMXP@JeeJR@DC<>XDe*fd+Q#ZUPI;Y>InwBEWMXb5=`YP%s z{;``IpzkWC`OD&xh2Zr8ol40t<%xRxKcC){W*_g}%6xd=JCr!sa^7qI-MK1vhkvT$ zV-BWxq2na^46!8W8Q`TXm1dN0MTQ4stU@z&h;_rSlak3HGBAzsRkVMy{Dp%M0P~C+ zA|9!|jDuZFgZoBra}*XW_Ui_pAfaczMeei6a5jJw5C+Y2(JExMR56&K7;BJ}}RD=(-mJ1@s3-+&hQc8(IH>1KRroWv!s!_-)`@ZJ*an=6-ZBznZZGA=0|J^&q)R@cS zX+PQsdvR!w@H6j79jrHj5iX~yX^oe!v_-%a)WZ14ZLd0q5EpVo+c8(&$4 z{ymn8i!|=O@O4v#lv5%fcbc?L$wY1R>M-w7EU$dWoZB>4-3Zg5Wo|7!NMYd<*^@gz zX=+8UpQp(ni-2iyr-{olHn)RlmQuY`No+-h!D|-KBgD2B+#Ua8 z0~yC#;(=!kSHtfAT-7r46T_G>qn{aY>*~4seSAbM^|c?HUVB=Ey7iC6F@R7D^{xGW zRXM@E%JB_pc?G zF#h=H+N|<&rUMI)Ob|U0EaOD=?DmF8k-CcjVqOiqM)uZ{?uFTOSvLRoN)t(D5}PP>1=e&*hAQL~7nudVO&TeI4U0b=iDa|oQnW6V7-*FXrY zntjsysDk>|4QRK%0fET28LBMplMJAQuyq_pylxd#Rom?eAVt>z%1dq6e&&l?7hqp? zX&Ct1c2G!xYjLdbaG$jQ*H?E*J%+RV`d#Mx#4uc7h6#CTfFu zln)1$m}HOefLO`$0O#c7j!<#kgj%8B1^czW9Wk)D%uMsF>{JgDjK2#cBu~p@=NYxO z2JgpbZ7ZHODx4m$k>vc> zqO&{yl9>%FM`R8 zDI~J}f|4i+XZtHuN&X9w(|2s*AZn0xnW<GK)qnqgbD)uG6}xK6@TUU^Whn9!nDf z9fAJGaN;_cfE`Y;at!LVjy;QxNg-+gyd(ru{P;4r#%&Cid-^Sh_`euR3^=Cx?zs@} zH}I2te%Eo_aoTao2p0KTG9wn~S`$7&it+k_YlI9hrdOFd_B6rci$VN179fkPFfqYX z!uuj(&U1w;rIta?D*#RCp8v2F0392=0LT#Bdfp};$)$*R+)lIw=mu%U&w|kvQSzE6 z&%f{7p^{4?5b|Nb^~)|ua@+wCybPcwYNs?GA^VcMn=iPo$Be>7kMZ3y1Byn9YbLlu zxjev@#}j_PqPLdKjBpnrzL>Ol#j2tJR;Pal(~Q$B8U_?efVL=R%O z{ZH=kKt&D_J7+XVX*r}xk&d4Ip9-<_%NH==wv(D>D z1@1rU5F++5W_S6X3f9>!+Yx}26Q(@GyU7l1Qc+6x~j)7%h!bNMQn*e!UkbF+hrEUd(EjmP>M;gG33 zC>E5ZoB=1eN>SJ6-8YQ@vV`#}OUXl{51B`O|NG$xaMRJMe=gx3451U7JZ#GP-z8Uq z!VruB(%@qheB#)$mI1m-GY05a=r|$YAJeHWq)#swLCAO>YnRmNCz90b@MC(fj<*m{ zo^Dq%)IP5lzizCSJoYn-aDVL|wJhmap0+IEx^4}4@*C|2a9y9a{kfAf6g0bCSRzrL z2*K93O^~kZxElR)zdU!)PhZ#F0btg}5G13u_Y!~u#_nDA` zo<8hxSW=xp*`mC|5D*(r{FxcfVosc6a!vzyfJWS zKTJFvFpsO($C<-G!6|wYpv8t+YGzaRb0}h9ibhWxY2ohw57T~HM`@cWaE_baKz##=k(NqzZ#sH4t+s$<@prd8i z_O?v??mnfaB*=MG7$s4AqbX3K)j(@W#H$iwg3?iFrW=p^=TW%AiF57UAAI3Gq=?D= z?Ge=T{rzKal>*$Z>{y+{3}qTa^K_qxX#x?=XsH*X&pGk=>nv%Qc2yX$r`2AHRwyPz z=SAOkP^^o>Rv6HzIY0*)Y8nbnVv?q;9xR8&2S;K#r<4RHw-bX-AZ8K21BwOvMWTNdX9 z9d$;&@jAC>DZMq62aA0O%J9Wau3raOyhEvi5U(29#NndS)TEG&SpY*A)yD2i_e&F?`_=Q!Af(`0vv+#!Fzh*o;+QAw zNAIHy5C@j?^B&MN@fbWrupAes$}9A{qWJ7GGhmC6*KsJX9EYW2#WyUD*so7!Jz=~_1S+tvSF7ZCrT^}?^F8!g&xUlLhL%CY z>?l2R>jRKc&WEgS-@Y2t(s9)&AK1^bW4q68k~_*Cx_VAB@N;^XHT)WEb!1a{8JOaj(!<)eS_{T962bT=Dn~v)~+Jv~dWVB>Fu z(5mcovIo;-;_pQ-z;b_D+HJL6)(!vPiJ)u_v2P&xRetb8K9z+HU8)s@$Y<93D!AVM z$@>q~umRfHNd{t2B|U%)K&rZN)Fg_@tq*o6&vo$7GVi*|_*ZB|eT5?X>#GhqGM}`M z;LF9YvOKrUM)GyfF-Du}b}BQdbGF6rKv6Eod2+?e$Ksqg@2cn(ndhfPNi7n;kzdJ@ zRy}UkuLsy2Lyx_bI)bY`ATDmZej;w zStu6>MZBc`ID=3aUOQYN+&mt&&5F>gcij6dPd4pAJPiD?pl&WY%ERKBfW62lcLbmeZ{-6vT>I|+f6&PvlZ?> z$;Ie$>_&E{1HC0<^6m)<2gqoZ&RfvO0{C1h<>i*M*BVM}ObR8nO_)&^sn9R|9~l&< z{;c7fVaL6n7ydxJ+nS{U48hdsmjToI?k19$bY>_lxF1FgkGG6K=4M;ClF|60%1~gp zI`7?ND+IeiCH84QVTkbAXQj@-b7hY#hC0W+ud1%|>DJ!+SNWs_wt@TMIa2}@4Yw#( z$>e-WxY?|8aSseex2S^@)&7TRzkCjGMI0Bx{;dw4{ z1Db?Tce)HC-bY7GIVu}y zG(hEb&PfMx-=5tO|JDSPv111ndbmXC9wxl}CH~L&q*^^b7yIr91On!ZT7poHY;CUK z+I3A(Ucu{)ld{@A|9{{O0e|OXe@`jnuAQ?Cc~rl)d%pq;GfbE_aBkuJAZqP9(X-Rh zqB2~`-Eq39c-lhyteicL#1!g0ZiR(W!gq?mD9QyEFBLxfMQqpRw-`^6>w_?_KO$i_ z;?#?uKMRj=W)diAu`3YNiKgbs#J03}k%y^MVbN0r4@ou>w!o1F@pp-2)FZV>DPf#u z{y`E*DxlDFbuu#Y8H~b75X24N*MYO#cpI0XHl)w4%5us#B#ufjamC{m{Ww&yK+Ar5HXK^l+;;I<-Op*7%$gBT~9G zO%^1W2aXzg_YOwTRZ)DXqe;t~hn3#hFiV($qqT z{^)V)D-dU~_!gesaD?!dE28h~N>YnhUA2GIKxaegPdcz&tk3$GncJb(;MuZLi6Cg| zuYW*zU+zJ5qw~!HD#hmG%`c4^b#*m6b=cQ=_+muHFn3b zDC7|ME1OEic_}C?X%P~PyxVwbi6I83_}5rW!i{$#n3^LaP}`Fgo$42jptGPSaRKSR8qg&4xMRBPpHb8*AXm?Aeo&H;dGNks_C79Q2eAQGb4mt zfe;)aFPlw6r0R0$P+6TS_7XnOV*J{iH_WTyjrgjlb|uO%nZmq{WqFM`c>}P``kOm_m5wU z(bd&eYpwTr<~;g@?1#=P$9;kbAe$NaEoUzFW3&s7pvO zLOjgrgV&jUgYCtW08}0_JGAqO<cJT65I} zI3lHQRsTF8^TJdQpxDDwvR`gVO+&&@ok~dB%jxje^V?Nwml~pClxTTCh)7;TVF^}?HS*He3 zB16t4+;-elfs@Q9)%T}Ck|texn*^MQTlxl=S`FyX2~0@PsjD^7jNCR5qa3h4jB!hQ zh#21Tc5;J8JySEV((s$*0W?9P^Wf};j)2lVIGF9ktMU3|!VNAKJm%uxlPzPRS0wK2 zwp+C)V94vk=XzS|&fCjDqYVvrVBgBU>HuCt1lXkERLM2nfBUit-&<4Q)`1XQmVh$Z z@0nf*1V#g%VM(V&!_bcNZUpYu;YtUfWi?gdjdAn_fC;b(W;?>juYO$)GyDY{A6Zau zM@PHC{Ide~+{BvvWng1zBZJDI8qO%&(Qkw~9#+`wudWncE8azk%|?VE#P9nIm9&^m z96fbt#q(JIxDA0V*#9V+hxyjv6`e<){87mz5r^thER@spitJFPTWHb|{Csk>9#?om z`!g`2m)q2<`xYfpgPe=5Zx09bDPKa;pKp+y2RlT5d%xl>cs8yfciA`vqkaz);UeU# zehGOz??lBPXk&a-ZlxZ$frtk*+kcKKfJQL@#m)Ry{x?H8MFT8S={xKhxGf0JfNknq zFO4t|rPS5p3yz1Ez~RcCJP$x%UIcdh^LlQ29Xfv*c*Y*V)Ik4U_J|4bO7EZ7vIJV+ z%chsUAe_Hs6k%Gx{*Yo^coY@>R*>&`Og`Q@$f971vI;g}Um?wmMon@Xl>NV-p^ zX+qt3-hsSN!liZK{<_owAc7IggVGT zqpUArd;5N5L3x#89P`bmR5FOL?B{xx<1ihtiY&G;*;)H{DPv~wDhin!*uPFnAk?Kc zG0D-A#&;7w5H@nC{Pvk~JW}B{Y#^tKn(tC(Id`~2-z1nCB*SWR-Al?$uU6#=k>QRZ z&QiUlYY`=;xe@N&)T{rZ7X4n-O#Dyp2WPCAku8Q?o|HZARQZGs&IK+}p=(4=$B$sM zgYf86?_1Y)q@hjwYAsSUH!XKoMca11ut=e44lyd-0eS;2zIqbEBq9Vd+d82#7L;JJ z3ySM_Z8%1H-IBe7d{GW4GZuITGno^DY;;3b8p_e4GPRzHS-&EO62}sC=)BczKReQ% z*Jo8+prjys4-_*q5IP9m2FXHgYPz6ro3|qv8p}NZgW-Ya%gusnF^U$z*mCg!;3(`o zJ&x**g&;VVj_Y_#5M1Ermm^KC$HiJ>U@J+yW&=Fyj?4kP%io=!R%Dsb%k>O^vwqk@ z@%u|B2fz$OWi0z(=@>IN&v|Y0a5foVn|6eMW-w~Ko$#d4;;N%?D3g8;lmx6bQr8NI zsL^PVyc|e#a}|=g7{ajhVjK4Wg$DF7sAo=QR4MbA9$B(sB1d(qQXU&35DEsNPK%X1 z9NSn@P3d?th0)JDK?~hZ>S{8(41b}UW6b`WAbJ8m-{ee`!JM?Dz>z9PbEn7chkyg~ zxw=3?bXrJ{c<4h35`>NK8oa1`lxJb~jM=Xo73@OymYqxQ!1c7mR}1!s!?@y&6<7qV z4zH@delp%4CLr;?Rra6E^Vf#B(~$Ev@xQG}-9jhA7a#xaOGg$t4E_X=$X}O^|wWrQbR=;%d+t;+gm*VcegLyJ6+D%Rs8&2q6BKK zeGYOEJHz4mIfPKmim~sT>_m)C?otLeaK60?AVZ8>hpPTs+T`k*%bkpaYdOxK!or#1 z+`k92+(X+Hg6#>6Iz9X3bThTHJB2W=BA8)@IvHkxyr&h97DXCO84yeuTFKDOeqD;N z%X}l{>t5NKTXnyMO)`Zz;TCE`ncaK71Bs8CB+%uLt)qgR#52AO%1*+jH)jkUNdenV zL9#9+o>kHnO+6R;vV0x7h|<2kZweM&HfrV*LU)*BJ#NY|G35TA?ZjrM=Ba2Tm%gJf zB>srZRC%rX4|5#I3>^@=lFSy!F`<6n3}uabKW0&K{Z+n{jTSa`3RD{4fC7>1$u(Ns z^4*6{kb7XLA&d*3XT)M#;1TRgb^=q55yiZ`+-KNPNsUF_JWd9RgVAj}0<+XFT zjgoFL>Khn5Iq9uNP!K+W;Z~@o*;%(-q#&?e|}@jOxyUkCg0a^}a>%%=c zuWSF8;`EoH1hC*915t!alz7tq0Dsf#l#p`LC%SF-;e4*}@*oa@70N*Uuq)2lyJ6KX@XrwnE37iZu^u#pf>CoAROmaS0$SRS(cwrt?%0L>!&}LFoj9;20tl^f zZ)2#Qbun#`%y#IH?34W5E~g@;(tT)ziA?+w>Ko@#kBRpQ^$EbP`^%+`|6&F2XSdvB zf1!)dR1^L1A=3=w6E@)Xds#=JwC_xAcLpenm@_lYaug!pWVzxJ`{lWp#2bqu1n}ug zV7}>2ef%~Az@vEn(xq=#?6aSS{2l(D)BKhVI`~=s&-Fp|oALTZcj`klvV}ZS*Cg6h zn*#`nYTt1OW&7*#3YW^Tu?eZxeJvM*e_q@%C+_y`^m8CUux<#~CROE7QAg6V`R#wM zlw$h^E0`}Lu&zIqVxHsB{72a~PqjSEuKQYy7C(q(+CB)CT@KfG5P1eTn1G{>;p>$x zV&*f=eoV~xD6g|LKEs+|Lhmj$U~nmesQ6f*^n}+tH!3k^Hb#)lZk7q~gr>o_^I)MrHMzN%*e z^?XZ_0MoDF`?6*4T8M{LEFFo|_a8x$K_qk?L^!@&- ze6gIu1jt;|k32J)t-<$}uk<+SLC&S->UW7>sr5}b7*<4vqATxWC_cS zGsDS<#VQ;te6*+mDX!8m%#Vj7#^nxDezxk0wn^9-jF@ zL#%d6pM<0Xr-Ie5XCCg}+tc197?Rq`R>e6TaHx~nI4+Q}2&;U$Ca#;9y#Y)er=~A} zfi_xM@GjvRCUunbOK@UOvROI1$d6TAfIJ;@BH@ys!gHynw&hHh3ZGLp8#bIu_F4Rc zfNgvFKR+1qGzE5JX$o=dcal`}O;T@CN3aQ9C$UzpC`~F-+a#)Wgq$vXNsAp-uJ$~6 zA8w1KFv=JQgz=zkHMrvdj(Q%Fo%^8bxq5R|kr{T41KjayQ06965g#tYBo+jB4V;x# zzlFfOk{CIfHKx_v5r=dlt)kfIsCqrO9cui^9pb^1S_L&$1<6i7-!0rBVYK98^ig=) z!BiCST;Zz?!igkgXJ^=PkBstkj>sn`M+7Yf!Bk&wQ?e*>_qoIlqz*U-GySeiUR=2$ z3~po;p7r_fk4l~>TI3xc`j0&rRc`_)8OETiZEU*j-paj+DRP3^!HY^K?C zdR2GK-ZBN>q*?%hD-YoFwQNi>Hbl;L0;YVj4{Gt?K58s7%xcw|88C{F+Is~>fj^v- z1LGk@C!GM%AmpXa`V*fPZ{};qE)?-7AHn>k=u597Gpgb` z>26p?moPVL>t-bkF6Zb{qM^EPC?J{w(`TGW6lUEB*F?L|#`--Qr>5k+%3~PWIa1j0 z4NvBRpUeo$k-0E1-Z44Ebf*p@DDz!Nh?{bi72ZrwCeA*b47D-4`2Od#5?&KhDDVl6 z-5etM+u30o{sd>)Os|W6 z=nKvXu3@_*3tHW?+-_)Uy2!idXcC`iC@OkF7$@VNFKxY@@qCNwJy%;=bkCtep?2Ci zIP!^A6=a`3G5wi>IWI_X(D6Qf$~o*Rr_0SG-$_)Q>LCnzh_%g2=arR!;I2#gKvq`IyHY@Vzn*E zC9-`MSN^0KyC+@3iHoD>temf?)T3+HQh32E`kzmp7shA)^&J=tbCogNbh!o2(I?{v zW$u1VdR<2~N?>ndg+dCX#NrY2DU{UI;bUW!NQ#1Htp#}AU3L%>wS>4z8j8lK z`HmJ!-&6{>C!>r=l@4aqRy4(yYearrFndo%C5ONFQ2RzqHkZ6VNxY;q5o&qB;Sr=> zvxR7q^pNwF+F5K&DOKB4Y%oGldn{EvVJ^1SDDyr{+ULraHeg>qDvv71L z!EtD!uqGi7VH9R?F{XKk9>oGz{wC36xJ5M3aziYXe$<>LA_al(&11&9kHmca&hS#4 z5W5}f7DysZQCf0sg^6d2dElj~NOm>0W2U)j)J!7Rm-c^o#hp;An3Pg`s=fhA(;4-f z-!-ASo1A)tea+&?BwiA23CRGb7z&chpCis|7>k8Fg|D!|t1CDYxL@CF9@v-Q)*1paCmaPeh-OS)yBc8J|pzvvVV6a4pTAZpz$ zwz0gNu)}I(mG8!d`-9@f(@RoX9LIl(gfFNEC>P!w(!~Ms^UbtHN}|s$+V6F}W<+nj zQxb@AT2+(2uoHHQsHX2Sp11xGi)=ii$mgcMF)%#fo*byP`8EjfGlU${;~bT$E3a&} z7r}^glv=g^Kd}PHR*=K%thhaX@{%Cq_Xr^%zC4NF@(l>hMpoU|ok-R+P`-t7Do)5Q zWgE0gH)-ud=g+%cKV<*^d3MB47BfDsIxausn1l!bi4WssJ&PJeT2tgIEZh0qW=1MQ zNbf-$13`>J-il#-pSK;@IIs+o6kV5b#0{pRe45eS7Mrv%4a4{d}l++h- zV3(*ZlG!83-oNYv^O1jsgjMurByNKgL3qb@Pi-n0D+(4ao8LiAVb*D0U@Z#bcRlPa z*`H#vH!E>#_9Nu^4h2em=5rGKDv@oK^{oFq27O~ zX+vFWY`Wz;p)OTaqQO@%9;zeyLAQ=#5r3tG9EC(vwc2($QE6ZUlI2f#8mZS{i10m) zP~=*GOAp)#Jw<^bMqlmw~qE>DOq| zFYc%Q?;s9n$~m1G41N!y`fHdr@fW4ZKatWP87ya&8w8`G6jnGm;13{q@Y_zd9!FO1gxcpuh${;VZpTGr82krcOlnzjPIXU%A*Ll9Y zt7i%lz$0TD_OHyT@)WnVUUy%I;6tn>2|R(`&rNbm4ixZc6K8y^i%7DJRsT9at@Oz* zzObN}X?E&Jq;R#vgy1+sQ}mOHlSUBVaY2Yv#LOI;4hwN!;MV(t%LU!HxNJHD%hC4{ z*0DP2Nf6f)6=fGKUQk#2vz^>!kOBsJ7Y_k5IU>IaqtrTu;)iQUV@V-kP&#YQPgFjF zG8I2==8?(8h{#imfYaL5_kWFq6#YAo&kHLF6AmR7IfsjJQo$WuKAS z5Tm&c>u0EqjvP1uHyF1VXsky!9Xz|G{x`N9L4G=25Oz+hh$EDG@l~#S-r$4Gk1S&e zolL@gigSLDT^Mq=P(BP2jf|qG_GKLwW;YW4!%+GsyrFcI3*62ewpp5`i2=np6bgMS zeG=;!0%PClVwVpsfyws+Cso`v<~h5=am^@)>?eExDx^#0JdeTP_@GPkeCaK~kn&F3 z(gYIBm(3{PVV267z6@{C$Ty96j708$Gw~Lb3RpfB(f$WK4%`-nwy5SeXxuYlE{ zhKE7TzS1y+!Gwxz|A9r1{LuqLYDIxtupi=w#vy{$yA&)+$}r!_*bG)wd!7m7zz*7A z{i*`w;M`DDza)7Bi7h7>^pu^KATro#jDC2^`bZ#5x|j8K`oEO}WpSzw*p@*j86Lnj zp8n9_&f1YBzUa-0q9_)CDsGCO#-@+VkNycYP@Sv>2KrJZwh7Y8_dg7y5_;W>aEZUG{Lp$%?`?108ecG>mMGXe+DwaNbPmo6h=vnMfX zrRxg0gT{=8tB`}r=kJC3(;X@`Ax=%GW?n>`F0|o56yp+0t7um2hELR_bZEx=8SBuu zS)*GT;>zD*O6lf$IUofZ=Z9R-?EIdj6Zbq)F4Z}lSlonU8zL%sN1|7nxxIQB0SQ^i z!!BOqvsMY+A;dYSl zTbyjiN-W+b(%!c@F|-Q3!j_FjC>OFpOzy6^X{`p3mOyM4Q=1^zH!(3_^|8?w)>=+c zTsbR_%nn`%b&vDjsV?+{605uWkVy)1m=6)$4M%VCXG-D}hGeZT2Zp*Ovv|Mv1^GEq3lIB7Yd9ceY7HFHrPae^{YO*w123vX=@e!Qt8QiP9ydK3_%*aOu~bAQOtSB2dW-Mto3f~u_up|F9!)AyZK)lU*~_4` zn%8<0wMi*7aP;Ia1)J^9xjjFe5&tuQf)6H+dJG#FL~*_+P>EkSmW(A9ItsW#;dgjL zkkVsyJy}Fmm#}AP-}E+yozG~3SVgCfQ>VV422z~-CgV%(0@_OFIYrLLg-iqlwd3h_ z5iH?Tc;DU6{b3r{Jj;PYIk;Cd2ns00q3a>n!HlJ73y*_EGevfGpmW0%-|F5h^mvfZ zP}Q()&+@RwF(J(1+b!;i?17UKXe@QRK)%XweEAzy@I7(ld#3a23EWct^XzbpZp}b= z_6DTgD_Z=Nr2F(Fm_T)sf#7obP$vnlMpz^aqtu?-vUVW$-1e0nqaqSu0?yR*JlHz} z?$Q6Ow7YZSx(FdbVH%|Ft@_SeB^#d~1=xCQn^xBEw}{((WbR1T9LtlWqMG+l+x}GQ z*mnGJohS4Ca=-_XF9OPeqP`bF57^pZ;@P;~lIO8&=w`5go_S35y4BWg_jw^f+;f8x!#S% z$+)(1+DD5^3OU8#>C%4f577oBvcVcgpW(I?2DQlrTi{hv^d6wd?u1UlUJFx1KUBiq z8DgFWyYle`xF3XG6-VZ7ts_QY6D5aCA20Ofv;t6PB9>Z}?Fo=sp}vx-a&*;yNB#fA zg(jvC(6?ypHS*M)viQseUZU!`SKSkUyxHOF9M3D=*!kmeRmZj4cU=3`Z3>dPl|Jmp z%@oZI)~TL~9iTjEWQriy&u;WEI-^+K@XXHg>lK9okH_wls|1E!$M3yrqRZcJEr-|> zsDf|3jqH^4iR$}6POoJ+Og$EKL7CnUL^_{`V(otcIpMd10g$%mp=nVFh=`QCxf24x zuIc60D!9vlly%hhyN^Kf$GXN7|mm33^D6XDSqPZ?*#Jz`oF)hzoy!OQ?Uv^F`pm@{M~`4 zdm6XIQ3>5rTcZ&3*Jm4{EZ@C}8x1N%NS{k8GP>;8x0XKxjfucPT#MOv^pf)XTzb_2 z5A)61rVZDXnysE2TI8XOjswoArB^fv@m-B)hsBz$&jQcKi|+xTJO7=~c?~hBeTf>_ zR^_zdSULLLXTNy>#}11~Sfw1*#a&uio|i+Qb*G7e#&w+l5{`CYM)niX1yBzI_u>T% zu|wykXy7I*Mp^=A@Hueh=X6LLC^MXAE%RPa_Qry82TUY`%cqbOLiQv}np&Iq@A1k$ zDJ%TR+M6GCmhC`_iM*CZ!8ZKhHJ;%MIh_@)CnS0qybjGpQ-1!t1p>^{qL34!G<;*KezBtzaTsEC3?Tle36Le&|l zRx18@mEFO=UWh7#&=?r+W>po_A`YAg9t~pm_;`T`uvX@u#`Vi(>ncl1!skLTGH9D% zz7pE!-2cgK$x_P2w@-Z`CA_p1tz}wQc{S4asZHo^@lPPhr_Ks43F_*Wy(1PP$FN%Y z^o&{l77lX#QpJ@*AhKs!J#o@8NFI6g+66=W{J0hR0#t-vt%s=YmW^YpNxlRfEuzY_ zy_qFwGRbVOliCggvKd<+eAI9FOxFxg0abMg*ko9UyOz)mFac0K7rvfZvxRC%X;>Zd zk^-uVdM}gh@U2D`>8hh%Yl`O@lYDTwxtWO(57yZezhZBOuTP%K9f1pH|9hXJLHKR$ zKel1up+=jBw;7%*+9Wn8Ue!4wT!se@;Y2Vs#a|3wgCPKAmkSNJw_D790EZx33UVzG zsxdNCM&7+__?>kyR5Zk+MIkV^Le+Hz-Q8bTIgN4faP9a^<2)lgwDj~fm3CKpsmSdAJ-FS@>uOi1a|yN!LIx(o1NhX zGOr9IWCAYBV=i!+D76pB9Se}&a~Khiv1p8_RP2UrY3AD8YCB}Pm&0VMJ+M+lg6-ulB3MPcN7 z&@8`@M>6vp_0q4{U9rh)<@;R`Y{UgMpOZ(T;;F~xOGZzdG_KjTY3h4O$cy9uJyqgR z!}K2aq)Px=H-CWf>u>2yk!e^29jhAjX^yzZ0NjEKhL46_5lNSF_*29_jD+$lXMV(e z2uX=OZE+aNGGw4nbh%gwhF}BhxY4+#$*Vb~Y&!X~hr1KBwMA84tYvSr^XC<$kZRir zKezw32eHudf|G-NgX4GjOG$x6$Bq(bnS1Z?0t8_h=eaLfTZW`PZ;9sk(ut#%PCje?bg=`!|m4!GoKN#vD|0#5f`B;LOtV@OtmJq-|bL^KYLLPH&?`0iP* zd8D}Tz!RJcn-628FUjEo${!VBqI(2)yt{TpLyJV==l2Z`X_d{9r`(=0f>+GkH+f(BAFWwR7 z1{VkN?@2t*-&6et-SObiZb!-_+I=G)lzvC0B)@jnK2n^*QHI%(>Aw2qGykr2g|$fR zBW?lP;k;4MV_(@3&}BAFYJIZHUIt1PXN@bwl2pN2?;$J4f%y8IjP}iqSXF#+=9fL7 z*w_vP{uf1#RNy$Es+HE>Iw3=eJP%$!uaYo*1nzvr>x-{1cbb}?1vlUQ=mE#$7Nv1j zK)P;m$c0pfROa$3cfT4`9vxDd5Zs_kQo55x3a5h4T?!PC*&=+yoGmvQLNO zGRU%sf*L-M$$tbM+8Rd>OxC$h)gr)yX(nPy0O+?a{O?b0s%_Eq2P(D5!*(QN$@4wQ z!$I;L=sv8D^z}4;gSmAR=63mIW`6hUHyA&weIl2)Lp@jigON~oq@XI&pmY8znX3CK z6no#33!18y`Q>>TX*!2(^pb~ZS(a$Q&B$p2KlfopO!|IaEmm#sgDx0Q-9wSr$xSNP z{HGa#UwFCd??Z~LjM(uR4=zWTKl^q3_-*bEw7bNNqZDN<>*)@)`EzBi8PgY|xz~4f zrAWr+!xtZh1OfX<+eyO=o_QvftY)x6Ca)nmr!<;s67)`*b@fXh%eY2yS{TlcAUd&x zh-SBlPuzRgP!ux-B6Li`H16FPhab=bz&+^=?`K=*xBd5VF3~$MB(*t-)%ebmv)iFx z`4eHdsmDIwLmo-kaamj_)uR9#x-1Ca5NyOLy0Vf9k$2!0D2+(Rvz^o~&=C zT>?9ni}%`Z?xr*xAN7hfE{s7^HvA$(};1|(QjqYJ2BPvZo~K;%2xlnO-t%b^mRQdHP3#D-1zL8< z>OY_w**k6gyaQvwkWc%IsN48B)0tPi6NG0M#q_KvQ5H9@z@PJMG%dM<(YS<>3eH3kX8{2pTfHj*Kz&B;+dq>+nqA06ih5MibJJg zqj1fQpjJ|3bmSIP44bD`Fx50F>sf=3e&3N%I-z)Ab|n9P+RDEdO`i)0zzG(YZ8-43 zvCNV^;7+es5i|V-|I<=-?pudZ!qCeg?Tp)N@a=wf@TB>#thXie?2aj<|9+rjBDV>X zi2J7rW(?o&UVHD@V9|utxQaiACYh#fF+9CXIS9%rOeI&%6NV!`i012@>CUk1V}ON* zyU2a77D!Nn>HE>%Q|&`iO7C928#@UmM@i&2A@v{6c&WcEbEE@wEU#>xZ;S~lY467&*z@p6$eJpvKm5{e}}m-LawF2 zT#aLuH;>(t$R7uFV>z6Qg{RC(_GL3iREfHg?e~u}IOZ@>_>uQwWC z#=FNR!j=XV6+9}q>>|w==ywU|=^U}6{?$>OGQ5PxtSnYQg;%Kk$A0#Vu>1LDziz|` zG5*!>$n4hL*C~Kxy`U30w&p(Y@9y1UuhQ?Z%Va8{ko1Q4ShORv0OC+t^lNull!Bv; zWHsHx9=Y^-^q3|BcbetKC>>F`a3ceo902ST}57HaN9k3KX$x`I0nJU>T@qj z5_-@2_GC%N6r`Q|sNg=BW_8eAJwYohHSfK3e^Fb`S|lF6Y=d=d+EoXs<`}5UPPd4k zQY!D)a&?D+{rHqkp zVLT>T9A-4tu=<1VcU1dJ>$reeF_|2y&NN4hbNmIWi|Je#KSo{aO7!>7?^L&yg)9kg ztdzkw`yLfl7+iH9Bj_R;BT50G7M*)iyeOBZ%Obmf)^P7vayIL3Y`de>KI5r-ef({P z5;)8%!{_1VI6C_={n71Nc&3jLm9u#x_k*0Cg~-l7q=sDzdjnR_=PxCZ@j10B)vCOX zdp$Y)<^6P^9tfiDe=nxra>ItK8?%0lk-WW^E1Qh5TSCQ#g;D;-rzMSyJ*?#o`;+mu z+)$WRz4O31@;gOuEWh)hCE5YsN>O)5AQgSbgD*bEhq!*zm{x)3m)qB=;?;8;wuZv} zY$9Z8JG$k0p2xe?&%)G23%TQ;&hU7j7$IGpo@T0F_OgE2woRY^Mfb;k0fJyb$NE}Z zflfhtn!@a^$5^4Vf7JFppI44|u8SMF6&X1HeI$5_9XU~ci#uPdB4?2F^bT-5K*D4W zvK41>oQ~!wJiegYq`v?B0CA~?%bW+sh|Y;lr}*0_ids(F=L$L_V^WNae=K1V zkFf69hR{N7NUP+ukhaX)eyuFxk%A~Yxd>!!E%-?$kx7!plhx0*A6DImqQpilma5eP z`v{<&zz>h}AQPe8p2A5Rv|LwPac30mn)3JZth_f+%O;Gs@NuSP_2cAsWhtq%8YJY6 zSW3cNV<)6<)^3a~#F&^Q)#E&Tc_=Obh)R|-F0WwtUg3ls7=rnAh6NUIE-I5T;p8#c)rFS0d`l3jJY9$r43uS2mW7?V?AVC- zyeSW)-J9FLn?KJwIAcJFLA&vWV6+&gnt6nO+lAt?{|S)7&bR{PZk6o3Ema^d2Bre{ z@}Mo1Z79YaA(^tuBt+(bsHlSq<+Z$mwe!?G`{b^YZoaWVR_s&;*WSC_MdpAwE;fuy zLLbaKu?;27?BAcM__F9l+|5V4vmVH^(wDS|#zBDmc0bE1M%hj9 zO~-5Csyg~;?!n#&u!LJX!^K0bbUdEjjk!*(k2H8wk=d2rjWOS*_+a|EUPW#jL?Zg3 zaQ&(~46tTo|9+pkc~i!Cy7Ut+ppNK7YB|fJ8dg+tuO-0*Y7clpgPHku1twh4Vil9HlKQ=q0^4 zB{@oegAz>YcO7g`ib>%)2f^a(<*2+NIOnYh2Gs21Q?dk>X4xwiH1T2Z$_2n;DUGTie>j|f{^ym`*lf9=ZE0iD&X7tIU#vR zDjnywWO(X(`_{e659W;W`o=jFD^Pi>Un}tPfc$p704%$zx+Eu}a<>#|y_AXjPJ1uJ zACgo3TtDV75ARG-)5*@754;`^za*<>(|_|X59C8+~Ogc7`CBf`!f4_E^`oUN{Hbre%M#G<;7CfA0N3}Lm6uw+OeaD7Imn^5a4OgWG0!TSqlPfz z&!qbS8v>ya^%3b%oeXg)+i#DMQ)Hs4V|XB}ot>5EHYnb8Kl|w%tz`mmnSpo#Wdsf( zfBBNFYk$4*tLg4o&F{;ezPnqYvo9CS?m0`YRSlhlv=N!PR#|EK?q>%}(03=zM~TY% z0Qs1j+SmO&SaD2XpOg<<7^oE;ORg%;Do+Ae4t`k}AzJ*NBgFx_KfYVPq2H?m<6QHXuuBpz~r>lum7v8rD zpVo0d(C^wf@aA}V$6bT2eukNRU$}oeT2kYY%?#YV{MXSAKuui~Sm};3nh8SX=omv=^}V5E5%XBGUKk4`|lFL6%A%^3Bq9184Gh&D@r zn45|zDs*RJ&LJc=(d(!zTpWUnXJY)#?mbea;qJ`dWTM)ks*}j40I$UYCMyM1qRe+( zbxW)k3P1N3Vq8jS93j*1g8Ya01UEIwR@%s(2H806QqQTXBm+O->eZ}ZZf1npT*sOJ zCU_LbpEU=8F%(IcIwm75>vsWPct#{>cV%!tJ6e99B)Sz)s(*HvzVXAR@_G}jm#g1P zLW$KIa3rJlQh0etVQZC{58NxIyeD@J`$C_q5|V%GzLu@8Z@bl!1*j$p_elsdXsUg$ zO*81R#9@F#$hNm&9%n3xhVY@oivl8S`>+4Z(elE?a-i-TB}{vQ5=*%YTRqdKr7;BS z*?9yyQo4l>P)}j*lr+sg%j6&{BG=28YUibinx)jEas0?LoIH*j34;Nf;vCJ)^2zFh zL}q4OjyOFl(Dcx3Bs1BunnYBqX7w4a+4R&3vT79wDX}oqRa{c8+GpI(ufa<*a|br8 z3#0FqEykB~t1B2N*>f|lI+HZwY-z1!b(L}kY|QZR9d~fL2?NH;3DG{lnQEfW2Ye#b<9zZ%57T*issiaX1UeA=pB^~#U})% z)}E$S&eH#MB7r^{{_{J`4HcmLenKF*4iO%>9a=_lT3lW$Zp=9SPNLL+!px2yAF8|- zwMf*)pHK`$D#+^tx5reIz;$;o|Zd^tK>53w#+$~9-Et~oN2>(wzg7f%xNy+L4Tc09yKw*wJA zYfWS*-%q)9=-AME^@LPaSGl_F48Y z-=O^d6^bm%k?8`GytE}PhN?v5)Qe7J`Vy_8?a(y8b9c(%{0#IjQQikE_TE?d2(lo=q<^v`K>k7N zr^}_tfimmbsMhLNe@N)95E?Bgd``l)>_riDPIwc4U222pQhIrfubE}=a5K{d64>$1 zIc2GXMalgzjDOmSQ9V(rYkZ^DugyM#f(Q;5FSp7SOF^=6=PmcE?hBd;~09nNB8^7@_A zh_BBlq)~YOfpxJJr7x+VFG_rGt38N+oEbK}Fywc;jH^BL2^GiveFk$`URWFE60eKx;EeOz!(=k6!-_lsV7!N5 z*302reBS-@q90hMKH>m;7^YrTH<@APrt{DF+Q9{A7%9)&Ov=hz@eX3#EFsMh#8yS| zmRpvZCqb(8BjktH3S;mRQijwR&6d!?iCCa9v8}wO8eW-fpviT=^lXbUj(c#h*7yF! z13iSTqzitEIu#lDe2y@`qX}x`p~ssOzcCI5#ca9eEAk@x&g*8)foN*B`T8FpV85W! z9BasC?aue*km(7$h{)ou*==ejt8@!@Xg5s5&4|Pp+jn$Sq0|Ks(9Cs5q@ZI3V3>_C zacS-Q3xAOa58ma7Bi?zihd7KM$Y_JWj##wTw7T>M0GyU1VKcmM*MdD?Z|DduVs_%y zML!^`cTN|65{~*LWmRyWa-R!u`9W$Zv|g>--#_a9=D-9Y+By|vFp%Ie_|i_7a1zw< zs`n!#fu6TFlBnLQt6v0o$VAE&J;~;3xBflarO#6q_QGaCQ$mA5A}(MpAdk>6A{3#b z*9>nVRj6r_A3~;cjNsc=`!@VSeh2q>9)u}HWbyJfPJzhoBb4%(6w1*63|DTFzI(Pv z3M3ENMr+}MH7>}~lTYUs_6O&>DFJ3+j#W7D=D;{yDykshn4&BR?_iCvWJGg!H5swQ z*75m>(_br}Vp>`?U%0$%KAljhlHSv}(!_zGfnjOe+FI6Y=Xox19gYoyR99Ha6XjlP zC#F~wxn6{G^xI`N1afx#BaWz@152;%#M9n~AE-JbJcT+3N}2**QMk*?w4>SgRaS#x z&_q~8y}D+&K))x`FHt(pnfFZ&PUbMo+AXISMd@c}ub`z`yAoUNxSUG(85OI-{9Pjl zNjK~zxhE-N#Ql&j*FA>W>ivEBll}SoIW%A~J>#?B_e)NnYvr%!0`WXikr_=R7ZFcp zC->n2iC!KFw9`VnYY=RVyeg0iWTCN;tprXR&RubqD<`BAEsnp0!PNumm+9AF9t zG|LzlFc?#m8FHd`$Wq)t5a4kRlhNl15{n2XCY{DR7~NZm>zgqvN=fPR2NEU1;Klt7>% zj*|GKeovGiqbaIwki|U)oWf#-Tun3+jr-l2jqdx!@ah>I1<8a88zkApn z1{XVgEoF~P2~Q2*Zk^u|vrdyNj^q?z=5>FZ59Fh z>So4lM+y8JA@gGkeYOn4WNkCc|MS69n_f*L`tZ?7wh63o$*A(fbJ#kmSyRCpDn0&V zzTv%L-T6P8HIokT7Dwr~5?Xf1@J3-hu2WHhM9@cBzb;IQ62+dCUhbHjxjDWWlyVa(fOF({`O><-c#K0+9ojFDR70}2g(7sl|vI8gT5W*gAv{8rTuq1XOK6$^=C>%e}*z&%K0RU~{et@wK@Ui|krDTHj<@?+o zSo5Miaxtm~HU$ea0KJQ_Nsh0#2_AUW;a4MTzpXo}*HpF7)5M1yV4e_z1<_4_RWTD8 z{^imMdv*gR5&odKtVNQ6yjl^OplofD4o&|mp@1#(l2-Im6u(^{P3|(}GbC6B^7*33 zteCZDwyTwY8dtSrMHjVK`i3Kn^7S#%{jOBus-FWa7ohz^a@Lp|n=2?5Vhx~<^*HV^ z-ip#A@?=QjUvkrSrV>KHKRLY8Gzz?lwf#^3Ozi1upg%6*<8(h7Nor+Z$El z@tkk`deO#8T?1%n7qA`_lf$FmCy4R-J_g^bV5^*GCd7ZIB7JVF3(uE!EVIrxxRJ_+ z6-W+^Ltl)9AA{pC>8z*2U6K`5<-{(fc5t&X+sCP3P>gu?Bv76In0u;4`miyyST$Yb zK@a7^Zrl(DLN7lrH1YhTZlntTO*T9*jp(Yqq)@qThUk&N8!ivGp)HQ2`)-F1%SFu8 z3?Yy_GH2l>g}d@Zd6O-JeEIhES<%Yr6~bld+QRp%I9*S3J`Hc4aKHX5_BZKtu(*lcXuw%It1Z8S+^+i9G2XYW0GpL74_ z$&X~svBn(u-uJ_2&-&F|H^!E!piHQ32wth3hNtH})Li0=5>`33LY&!xA>YMmtv8@d zrdrnl6DQd7S;5xOnxBz3C%TuN8GT&*y;e>Ldx@5Yq-q(`#;tIzQ%HWl#6e z76Fe@00ds@@NT(i8u4#qL`3U6?X73=r+tQ?^-%ab=+TJT)jrq^_TdL?hk&1KhB=-? zTf7Xa>7ya-{=BjT0V5@HgcLIs+|@L&)2d6`mZhFSBoGH%5*qRGT~)Gw%4!($%%#z0 zHHwdz9>nmbFb62>FnkxmT++aGD!%Ntv^Uzb7KNEWqX;T*cwvHza0KOVOD@6GcFu{h zx6d8TDKCDIKTX3E`hu51Cq)d#x`)n;R>g@zND^T$*0Z;D54A0dYbxrR%s7JKJBZBf zI(3%~@_wCvDy1A=&V^`4sN7QH0)1B)s`&#Y_K%z{DS}HMdg^#rP}oM8pmv(ee`F^~ z9@$NBv$2kW1Qo_)==ECE*WgQ3O()!E|E78uZDDK9JaM()7Opa%yAUdd*lgR>+|{_Ee#L97#Cs?L4iuKlBEQnkEf(S_ zIqQByoK#X>wJ|nS%e)9H`6hoOB%O(yS`+7(cxglL67$1+#QpeJK_v>g1(Sw4ie`F- zeZdjF5vHTAN#HcHQPQZ1#-jI#%Y5>!!W;fkbN^GR89&G(hg%l0s=K56-(+h+SmG_| z`vt2Eseate?@%3xSvy$B{S4VGWIWQbM$G_CY?s&FRjBJX<8so>1XD{x>w1ojV>u?6Do z!j)m;(zjWQ$i301(G>{}yF;J)WPOSRdJbVvaj_90i_ho`aGi_OMbaGwcpF^DM#Cfx zCE-Wt1X8$2GAR4zLUJ&afH?#82(3KW4E6GM%cF>z0G7gv5^-jW z{z2$_FvOi?>wVO_PbI5E)bXeX3R#&Yp5;>7li{9xgSd?(I7(#NV52ZgUG${)OF`pt z>w1gyKcnhf4b;kX_}C;!vWupb%OqYgT_`Rr0wIzC3joJ(cHWo5d4xs7b6hNtnDUj} z{`4e#gd(o1NU&1;?Eif-)}Y-g6M9DkeZi;1VAa zp()aBQ)c;{A}6ej-%jh$ZLghVO#3OSoR@5>{(FUm19U~$&EHOP#dsjen^6~;6DyZJ z-NU4CD=O;l8hS#g`?0tvTh6nnxEaxyJuK4)Q$f=*#|lwVA43{F9mpPuTOz}EeI7tR z+t8DOQZbd=$a-?F=Z8V4ptE5$nTv!)by+B~Oq7}|`FN5y`kRaWEb3&uC9%pgB}4!F z*eZwIc|KL7&F*3k9NKD?5X{Q!u98Xbje1TC@`XN*EV|A zj_(H^&y*YrH6zZl;ZIK5GX{o%`9TL34#+a-@mwQfBPzL`oIG1aNdl zI1q26=jSkNDd>y)hK|P z_yb8!5{%~sM+ZIRKBAvq18)-&R+MY-n-dKWB0yAqWPO8xXb)^+AVO)*IDTij_tI-LG^4@7;#P&h$b2bt$WmL){@jKd0SE0 zUP}Zy`Vp<7%Uz6@0~pk7CVa96K~OS+GZ>Z;<$32ln95D%c(?Zq6(y44Q1=2}iR1Jl zEi1%Zkk`kI)O%%GFU*rJsB#=}6Y~HEnwRN`6`UD;kAIm7;2*_jo^a|Rh7vlDGd-)H zjXDhX&l-(7FtmUnXGtZSfUl(Dq0$a$(?3U_%(kysPZs{yqrHU>_ zh$3(B$Jy#wH0de`*!gbriFh88g$&rcSva?GqZqig)000v#fx2YP$}K<%`^D4oVEZ; z{Y~BJ{WOfu+3yCYoGJB=8}bJ~V;s_e?FbY@QdupqhQ zm0);T=798ljmGEb9745{jEcj)C**|z@?NuWwLg$qLdyelYTw9pGdK&Q1G0-;HLM** z$=MaoH}-x2=ZD1^CWXYPamc+gt<+^d`GXFXkhyv8(CNx_#N%2aNpWwcpyFrdSt$?7 z(IMO|ylIBcSJ5_yD7%ZWv{z432kp~j+rn43~B*RpplTg!} zbp8#hP*#TJYQOm~;fzGN<-yKc->u%PMmh)y54d_?KtM9_gep<&;8nycTwYM+h30%z zlo^w{Ca&!nrHHvdX2}0ql`y#p5AtL~$fP3Csbf>~*TiajJXgr$94Gg$3p6j>$Xl1& zR+=Pc(~jo>M7)@=LG}@N()}F7L)>ocHtJu~@4NX=~Fg?5Y(h6H=aL<~s0ZS%4Q{15bK_)bvPx z-eC$1{C233!_b;@{gh!yPIkltyE94@o4l$MAFe4|0vAj~ai!I^bl|-Fzle*`U`;ij=vE8 zbQEZDN}CUeffM^L4>xux5GWUEc-j3j$GPYC=;PCytfNduGMEv*k^*}Bf#NI*o@Qd` z!e0XI$f3w0YgTwTL+vIHiMVHVKE33Cf7vh5S3bo0&x8{}ns67OoQ9eN4$G#*qAQYQ zowxkGiDlfx0tYM;MKOGWo1!p~PhOe_l|Y!$GlO@ew5^|Pye0z6s+_W_Wz@3-&FaJa zP5_P`B`>MQ&>Yhrk(_|qRfr}tO@v8*@n3zj*pnJF?&a*WI_&IbMmM?7P0(c|!-2%z zWBkkZ*!T_LIlH4wiP zY`(D1JtWH5uis5XoQ2`nF$JaGzczV!yf^0HJnE$p#-2|J1oHy1f08dE;V$d|-Othf zF9xYJpisqTLK}RrdDhV61;kxd{ueZTY` zGLR{uSio4+jAiE6v&<d35-EWW1y0lPKX?$B`H|nzV{QLCY>boI=h|`K`IxnISA%Y(j0q|Ws+@S zZe_%^M=xS{yPa)>BZ80`aWHL=mJRULz11))q~6=mnG5L*Xz_kF2{{u?>->||HVcZ% z@+&zPaNq(>9kl&d`wm&lI2mZ^Ov4pOB{^L+yZyg?S#ua-$n!s$=(M#+4k*tPu$oOw17J!c zP(TUvuFhpfb8fij0xhF}L@63F*S-%%!u#zsnxplkq7u;0MFSbT3m{@XYA0})kHpY^ zQ~;>K;}k@N8lv%W7H?(gN%&v}-eQj!>$rIGrzhGcjZ`MtA=bDwH7bM;RC{%q?8Ru! z=ct3ew||vNFw9q#TmQt~Mus#-W$H^}HLiL07a8T>wP>A4QU6Gf^1+V{((!TG#74uMYV zTl1o-J~!B8&+I|0et|ndy(~65>9*#YC@L+kQWJSZk@A4F;zNNw60bcd1?VYu7$)i& zrOYH{s3@$1*+@`?tnZ$gQ16;Bm7VWo$#uUO1yFU*hxLb6fJ*o)Y8>?h0{PDq=KM}; z4#PgLyF?nHf5{ksD8jUAA|gN$?gBI$09HuF@Qf>e5~iK#+?TaOjujKMpsK7up^*#w zGrZW|vqV_lgEK7O0ese!{M$U$t01O09a(X{Sy*Lrv(mMP?blO&G~T7myJ@{_zf<*a zG&KPGcT+G`H2eKu6E0sJ^v8Q~Xm0p?b9*LXdb4R}I9FQx*eoN??rs#;dNPY?ZR=W} zHWQ3C!k6tZKSUW> zPF2*Fa;YP~g%QpS42U4|SnL6a)gQnq>QFI#XkrC;2M?v5y^f1hZTuEe^(-C~c#ezC zTh^Dv+jjr_)*xgy+5jS;TWn70}ohD65F*-@9^d6YCzuuV9pn>z!IEIui~ z;h;FB4C0$D{q&emMl{UyuysYkgI|L;tOE@D2eJu2dLt8FrVfcxPD{sH6fM}b;$KL0 z{|AZLx`q0AH)9^BwFTp^8%4)r2!@t0lopIQ=>4HaiSgJ++z}hV^f-YY ziBuxbE&rSn-6PW;&|6K1uXNT`PRC_~72rd?g~YQlXl87;UkFQ9$LBC1)U9oMwmRJu z9Rw)Jy2paZu$OO*_roRxJU@jpwt>1GcC$0O!r{)Uj2p3qw`C1V(6PhBIOC~V5967+ zgY{i$cp2xlh}_v#Em1x)UyH7NU1^TD=`$O_1ZLSLdO0r5Jv(B}$87K6*_9=<+~bi8>3oiqVM z?e*(Zj(_%I#iXPT5Ge4d0p&R~WI4KF?B9CMTd?%FtUA86U}}hRpj!ky7LuMSU5hN1 zCm&CP`Dzrq zs5OOH9^Y>Fy@a`ph1tp~r5tor7&9l>aakWashiS>`R<(OB>%FF{4oYkbX@xR%nrmqx4a0XQHlz!v%A%@zF315&9k(PD->>ezl!b?aseq6$yb~v3)t;ChQG82WAn)?S}Esa7x!J+pOs@ zQj`X^494|8V-!z_InXi$R|2J(KO(|-C!jKFv7#j@U`qbb>NT!+K0@LSbpm4AO2Ny_ z>gNwx>V^X8FqsCC1r6(U)T>6TCs>Fo|J#7n2LW-}V2b^L+yXn@dBAS(Bh=YLFyqnt z?aTSYiq9VbTMm^siEO0WAJrrG&{T6f7Cj(ubK9+DO)|5%7RAI;=%g5Dka4+;1IrD?6t`HaB( zb?n^HLjH=K_NuVDq3`#dXk+nM7$J4ruKOhf&gHFcpt|GF>M6&HvkJ98JNo8gB8R;5 z#p-D-XxHbV(tTLLcW3vDjUNaciGv>dSan0H4?cMr!HH?jZL`a|x;dqoTh%HeSzUXS z78;JejyRb?qK9YZP}3w{jMB@D|Lty6;L(3WzUd6~xxOPfs15L$ajsgBWp)bf3;nvG z#avua*GOFO*2Jw$ImWl+23IHiGg*`Kt2f5+OwlhlaRe_Q18Q8jP^5MoqBZp}*CQb| z{xx)g>du-Mq|*EJu$JJp$sjWC(V@lO9{Ha{gm7?Wy2VGP$LckD6tcRept+Yj$#xO# zv7#x6e&bjHz4pxo&1scyC4keO|R;A;Qtq5Q;u11YY{LU@`?XWP%gu?ZM}+ zkceWl8z)73O8ku-M{GB}G*{0eKNwTjBwh*YE0YI5=EWfIUB={yWIl4azQvsTx_Lr~ zuW3cnbV{#x*_Md2nV011^VBC=r&=psNGiTelkr!yI(j?UaRk;0L-})N^92LqXVLvY z8L0CG^F1VPr4jYH&yuLgT3BY4XPN6kT$Lp1w83^zynN5O`W<`6eo>jN3om8@2gZ?X z8^{0bw=rh-(8%Eeq49?NX>y8cnS3`4`zGQgSEoJ%pUk9>nrEx;yWb3yJ^gmP69DLTGIhf3{qlKvf!+Cza}M@{3bDv^ z^Z;+%-*qNW0ZCl|mtg$OGE=VQZOv(VtU+}unvstGxRQnK&1`<=ZlBqB_=MKCOgpBL zy>J!Y;;Y-bOJ!99?LM%WD=d#JI@ZWPp>LdEN&5o3b~w|DVoOj~ynsg?RR zmA3+QK*0tW1s7dI)6c})C#qW$E)aaFk|tJgmdU~E(#}$;o{syn*XLEQbRg_!PBD(} z^3dk?77hD5>-kE<@5Q;};3XF{aQ&-$#v`oovtJ5f`;;Af7Z6T2j>Q#=?Odd7N*U@v z_Q8!K9T0mHuM(^|iIIZi#d^XAeV*9`V}({fUeh%NSJo<#W4 zR;(C8R&k946G{Ipzjq|+O9Pcf6GSwZdY5v|q;n{$+`IKl-)V{cYaUcs@`GRwTge>( z95lST=8nsDuh@0BOUtsVQT)0ZXOq0rr@wSD@a-Tg7}n7BD26x1(sn0#p$2{!wG$8Q zUN)O(%7ZKD%wj3&9Trc$NW?nw5Fb{pYgH8Z)UpfTnGMTUi&OR5fzlP_BLI?B1`)(B z1Q0^!ve}v?!hF;XASfSoNJ@;G+1edof-T4@E$<9Y%ZJd0aT>RL*2(e1L^KT1gfy3w zcHDpy6nKCAA)9?kmq*%=;#(X{a5UrBW5*FMs6<)c{Oa1$%NP58f2oY}!aHX9qw|Oe z(3oRf3~ttV?(G}@&|O$Q$bElC(o<@?eMJIY34f{K(I3~?Y~N|?0eS6Ujw7Cqy*E`h zjw*}DuNqztefjvG>*v5N|Dh84ViHlMef8M85bO~ImzCS%7#wb;Bzf3Il3X?sGxRG$XJ_tjrlIcg0%rkBrW4;_GBeJ69sOV>hn^!-){qGG5S9D>`U5S3^1k=1Ri_S z@&fCg9S^a7yr&ba$zQLJOLJD7V%J+%Tz`vUYAvIaxfEx{IS4tQ0t6aEs_>x7z3^97 zdW3qOY-Q21(U5_$kYb|+B2^)=)!x$F6!s$(8OE-rp>Jj3#$+WZ$GsWS7|$bsb+=Og z&FW#@4RoyFN1LpW%pSpVOsCRA-ffzq>pHh!2|6$C@j18FR|^?1>F2fgp2Q44tkh|~h785v9 z4DeX=GRL&`v>&5C%MO+F<}sPKv;XwvD@5y?SzBIINO-pO?BW3lMTs@RE1S5rk$$B! zE@dUkwwvm0N0|+<_9#EE`u$EDu<*lQzUz4KQ^*vU6db(_*sj<^^!te!Tvh$ZS5NrD zJzErTF|AVW;_26$`oC%1(l4K9liw^g%)53kQ^!`_q5hLVQxbI$@a=oXE*&Dw6yhp6 zVdIVW0`{^+*6ue3^hz3Pc$~hkTUwCgTWHMERVu*yVGEKZLtu2wFyG9K#>zZfvs)B} zJ3X@x!9=~H*KPGWaVMHIG57hdG`)yx5pKGN$z}w3oi1TAKa|jHKYfmRa|^-mv42*A zh{A6$H|Lqv#iGG#DOeO(!f$}h4^3S2s=Yu7JZ^u?C_3Hie!0-`xnFcK&%AoJuBFk< zXIGM()3NPR!)*E6no}z9W{E)y)BTuA>~6Z25vczzg}P_X?`}&-M>E(p_>}3R&a@e{b=vZ|C&26{bGS&Hl>( zNNw#s)q~K*1~_5dh_oFgJ2D=6u7=JUEiilrR0=_(K9sot4Wa(Loyhp6;(THLg>mJG zaACX9?=5uXkhFhu-tXlvOA+mByv7qbz5YLs$Z)L{Xf^dAj;0i1Qa*Ghf7_&734{qU zAPI!b{8rI;k-60h`2f}hsYV=UIMYNV_rwPLN{p6$|WZPDEQ0f*T6w?XQ6ZzKv5 z-~CE`H5XcI`h6-k&p+3(eqUn?KX)SAdH}*^B0xshB1Y;i@Vt#Qh*3=E`OtO?KbQ)zkItPd<~Xen?YA#|HWs+jJQ^uu55Hd|Ui#2#{d#Q`X}T<) z?qzaU`~s06=;m$qR=hy{;1Yc0H2|eyzcB8*np;VT)3G(9B?snn_#f!;iIihjR*ia! zW9E%Ko9TXbFI(t@5 zXJ>3Bjd+~uXK&k7TOki0BZ^V@HTq%0-p!U ziW+&t_U)8cb%I|fcQ_Gda=Z36XVNSvjI4@Vqf*?CaiJMjuG(wnqP;H6(_3$zCT_x=_4mHMQ<-+MZ5 zL4UL!-Uv>3Sr2mOO(i`ZG}M=pmrDyG>AdX`3juC{TL?tyX0Uu_hTA*2#VOix1RO``etS=Xymwj$& z%(*SI{?_GE;UyE9FREqDEzF={4P!P z#-9^X3(06GtBc5Zsw!-x}c)xxby;; zihBS9TG0|t!l#P)^2ZsnJNh5;5T(KU7vunwz7%j5ZYnX}@2OwzOJLo++|{+lS} z2|$0AU5njt|H&cH7FZhbOOum`7(F+K+eLuwG^Ts;mrT)fL!@8JVcy;(y-g4l35UBN z?7}0+B0C8ps{AZTdbB5-!49-g3$!#QIWFb%rL9#(LZj!Qrs0VqC(Avt3Z`YP3Ck>S zp{PfZQ8l&DsF7quIF??J?rNS034jcC_V@;yLq8BF(Dzt={DMzcr(66ZZ&1lU$%k6k z`P4Z2=Dv%etTd_jC`sY+r7447g47wY+bWhjmRHX^>}R)p9r`^RJAEz#I|SYWF$T*T z+q6J%6=^OAnXdWv2?^~Khm1QP8Cl~zuWebJOewGlT<4S6400Y69hQYLRXB`MqS6pWB-aJrxC1LLhdu*lsLbW>ggWIi_x^qvdhA6sR$sZk ze+w|3(@LTj zc1C#+KSLIsR2nAU+wt-$t$5}o)^U`QUPwL2l(f}qQcl)ABMoH+qSZDO=}x=jeU|Z= z)6n6GSDL~RQo;PcNIXUT4*D7+?kkL*vh_&CM6nS<@26$HtFyOuH&gL7x-tHVVV4E= z1r3pQ(ZDmOy51ENJ7qrg*3JM5NbaB3KOAmKl#Bv=4N~iMxQ2i(VIVxTRhB-i~H;*a$>p2P0CvDe&Pb6GC)YsfA}PY>6A^J>jh1s36o z?2!{<$a*A4*_5AEbbc$klndaA$}GsS_C*T?qg^j96kb$+)C+qKd`0d@!;{SVFeqY^ z@P~GWoC{l@=_rfDm0GoqV*JKmA>Rt#DmV)4(#XOfI6r9Z8U7G_RB@9?W`rDX@#QvG z1*K0o9o~|cC)Y1o_VVeMPsi;h5s7T^%Q@Mn+Cu$Yis;7!39Jj7I2z+|xm3c{7`~Hp z4Gvw!bgDnx4-N}`KVSw@=2MGhr^tVXk*es24#6Yh zlCn23@lqKkIQaC_svk!=oF5P|3&SBWBCU3mNvc1wiBHI>u=dLc&k~b{_sA{o$coOj zL&neanebXi&S!^*&K;&DIJ%eNQM~<<8?mbqzWrfhp2b#rAqGeFQ!+f4TS?<^+6+#p zMVU3_m}9Ms%u0vsNRkAS@`4tA+dmj!Y<9+|ak!y?b)C=_W}GaqC?e1a5fY2km^ z2+o}(!w+M_2%mLcoV6I-zw-2YSjVS&(f{;o7f?(Lja6P?iUmDp+pn8Eoo+?{HiIM2 ze(Q8XyqVLd3@ufAZX6`B*Wtw zv>VS)*$C(v{oJFPmp%M6@7-!ViJ8q&F`9b3}nYtApx!NSBrz z1|EO}@%^hGTc}P(t$}=bsfO};ksgX0MDIYwjui%(A98On|8`{}q#_}NY-T5ttaSd< zrx5k13m@EQsEU|1Y&Ba9QMlw|B@N5i1G{psvLv0CBLA`W_XEw;#}`Z0X($8slQ9+k z9!;krwgSl-4^92BoE;b#J0DaJXeoQ>1q9hljhW=1+`+`SIwV~}h@-<6t7Zn7kVlxY z{yh$6d3S_Dk%2_oxvpYbrb+;`DKiB)IQT(vekFT7FF!ee5;RrG@KRubNF3rAKqPVlw8$$H-BfFmP_bKOKVjF~b|4@s47y`i!S z_fi_JQwq&?`PTKb_nj2U!}$O+p(UXze@Z_X-!u$SM)mgt(fm@pcl($DhTU?|JWt!~iv?ZNJ$gVVdPSKSwgy`qM;uAO zfiX9X$0sRdfu^s)1;OooY_cbJYk_$8m5z_GTb3bvOtpr}8@phOChf&ITfYv&MHSn5 zQDAje6VN^A)W=wFCzdj|LsK`pVm6`zMN8kScjP|FDr1=bmoBej&5sO3JOJU-;I7R;?q?LZ!BARI__OhSs zcR%fOatyVsFa}VYp~nr=`t5KvNS5J~enRvU!zYC3HIT>F(En-%lQ(Gec-nwg1F6p1xpQ! z^GSsC=9QHodGMCAJ>dJk=wTZXVLG-GLKfP%a%Nj`-;c07(unrsbe^ZRp241a4N@Zj zkJ%H7ngy5<%LP7;dMkoS^-@ws?jXC~qM5-cC5_(Ax!>L#!uCpb6X~}QA!>M`@JZ7= zqc&r-->VKh)Khk=6w@~vk`9lZiM6+1O>Q-+gQvnjBxwl!5mwj$t3F?UBAOY$wcCFK z^3;|825zLq{^qHJz-HC1cn8KQg|=bXw}la84{%jRKJd-(f-aC=gIZ~p$VLtVdc7u5 zK2+veE>okyn9~|cy7214pvyNYex0Qx9v0)%#udSU#1qE&eL@URI~%07*;=FRz7l$O zG}|x>wpqMX`m74VG=ijJ#~bmk7fkl z0WOq)V7H=NxVH8(ddSae3IC_2&h{%2PG6%+d&c!GV_oGs7l;_B4)|ZyZh4qUV;8O*WiR2JUS{B4d^K*h;a858egQQ-DWj<; zlTW4J_(6aobNa4b_J2cpUp=VlgRNz5IW7W83Q`p%eF;ZCd@B!pHRWs%w1KWe9FLkd zJ}Qk5h!+-%B9itK5nCwS*dhws+h4!RU{)r(H%b@ma_?8Q#w*I9`IV%?k2;m*xjkt_ z(8P3RPK@DE*|>V}Qsg_;a(L-uR|RL4G;g4oe$IZ*Hk>o+&m$MT7s;d(k|$NyHW*!J z3Nc%E=xsgL;rkv8)Fwv*f|i>#g@^x%+yTX-h!T?iogOKYQZwRt5b+8eagCJy5+2(q zMv1Iw!at5Y5+cuW2$rj$fM>dGHGnkv%w~^d11)tw%VY&hF=Jw5KCv+4tfV9F)OW&5 zp7F3S4sBIO3lEEj5U8TB-qhy`GgG~FnM%RfKrn~2u<#6%@*}6>Q?8U=`I_w+Zdr`J zc3l@dZLU9|CK#tyT+p#crK>J>2Dy>t{(lJ&tbfoK7PkAF z$gNQl6B?ynLPsR!-b9=e5sm=NRQ9qnL@YD>XYzaDKk}j+3x(_0@zyB=dmn`e7g!oB z3#eoCgaq8#z-Y4PQ=*6nz_brYt~h(dL9}6J3-BpTUmKMy5WkP=P{OE2hMPL(KnUrGTgzH z6mjzxQBG-h9u<9|C1cR$-mS-kPAjp^f@nXoejb*6nz%|hpM+H==FS1Cq(gq>hsrKD z?2?9(Sm*G^!4u|d(HWzk1aWJI7QyFBz3(W_xXO$~(S@o`B4+vUfD-$j>?G)cz*o8+ zKj_TKVwrK<>Yv-%WUTnF&};4qXpXfVSr8=R#f3O2^k7rFB7vT`uRcgc>eL>+d zru(flK(J6&*`8;b%PHzk7M@60eednf#Iqc^#3tZE=U^r=NHUg-5i%j~zO2nw`v&2_ z=GV_&Xh`rMh9Zu_uk=&}`5sMoF|3-?RZ~CVSBT&#T};t=3`y9EFa|3<+;O0q({%5=AAP!k3F5&S7{j z9ohoBoY{uU5=Rp{OWT0M$v!}7*k>gL0}(z(LIZ}N1?Ef_7L@MH>|sOSI7ntZo5g)K z=7kjUik5T!l0MH}4WDGfssUP3p{(^&&M~fBm2NYe!?0j|z*lm|@>)#2otC|MDt)@k z15o`r+IF12uHv+YmB6xFGfHX-L0WK7(30CZ0;n* zCI~_eVGM%xy4MU$Z6sb>Sm287W>AG;fWUOqhQ)u%15%9r4^y4Av?^4s3|>a|-aM0t zB&A)oRGK}POjRTy^o`W-tq)S{AW1aBZ~lPZ?@8Qas&f+9VO_u8(hgq29QM5Y``#=e z?~3bOQtelyl_eagsQxH-gPXxvgdZ^LZ3;t@!7C9Mj{TDvxN;TeR;_k92_Sr;(>`p< zh7Rl#P)trd)xND>Y)oHXgtU78aw47`$!6reV&R&+JMhzyA-y}}D0X|{+X4nkaHsas z8Amn0+=$yWom!x-iIYmm6tmKCqONe0$-vnX^cPgHVw8q2q@+5;9Nl#Kp%eFp#fFN~ zN94c9l)3FW1dJ|*AI#9M5zyDpiZpR7Z5DzW$$C=?qEicEZG#8_+Gl zHS~`ae^z&2v!N;1kJD7ZnVkne2<*!Y<9}NUSlAE}f=M3lxf7OlgJY_WpSGA)6BUoy zsck*K!sGF7MlrHiC5oz|&ki(+@?4XPI+8Rt*C_s`Y_lBiL!K*mwj#=idq5H&$Pr|6 zr_-bglUV|HO%r$X*Dq{FxXGvy4|cM_OQUK>OTco1vl(NBb)4^?w-7^eKQi^i7dP~Z zCbH51Kkl1K$sV3tEVY{8zR|I|DtX z6Q5yU3!gXfGZPIa#0jHILWLo-H&PT)agc2DSKAPBR}1t*C{f#Y=55Kb77}+`sm>&u zU`y&6>^7ey& z(1fBt59$chI()n~n}$&t6RC;XG{df}<0S;=p~y1&%z}rRZL7rG8eN&tr{H#z_zDUI zI5rp;=8kQpqfet*;7n9_CfqsrM$_finze`R=`y#lOBwU~jaJ}tABd=R+J{6z#Nm}2 zyg*PvAhiElLm>2X4rr)p3IyB^&;2hak$eY6OC7Y#x(3xRPhEfv0c^=>9x%WVMg-=| zW3Sj1y!#F`23&4!|52!rywVsjaW10M1^ zx%)5^sUcUESed08PL9sS-oU!Dt^VxHCkI8OAIu`r!G;s1!OyoK_G6hBVq<;L$?6eZXI+0~G6fcA<&xrF@M?ExFwWuzGAh$ymZL=Hn?oY19&8%UY5 z>!i(%c8g#bl0N&1Bj-soP3K^Ueu=Yb7=J%lVtQ^xfqVw>P@mI>3zRf)%jkUn`jGlR zY#emMS8zJ$PWeIq&SG*qz59SySs0NFzWIRH1cnRj@l%;G4H5>WAN(?+S39iR@)!Wh zylZo3*6hL_t)vkdXjK@)IXIoDN!m~$e`|)!klW;lR`uew!@jASq2f z!MLE$<_&{sF$UPJAO2q_P$f`Y`Y!4D53WuvGC#8Kt@n|hByf=wde7hLU?tVB5U=+7 z-lr@fj*u^ttDybo$GyeU$l7!?@Po4}P2IUVsGGzzaC}+lrZM#++0R`G+=>d|P*Oq} z$a`G1pD5nOcuCcwVScn&7JXy7pXg5FHZ*W`m{{QXy%Lhc$9^9{A$K&KsKYq_q%cE5 zh=jL~H;0iN7$ODpR(Goxb6R?fRK?W>(~L!=1?>fQwq1N~VR z6gi4V$5{-#JugK0yS8jF`y)=2 z60@wnR!FQbtGR?dv&>wJQ~a4p8**j9mYZIfgdYmM8a4ZZ=a#pARB@4RC4ZDUDlQpJ zWC2rM!lHnI3&&1UBjj}R_;MDIG8QnIZ%)lQFkJ%{3-M{PP0IWCPk7cq(~ zK^VP>JUu~K-np~oXjyOCA#h_ILWj`dHo=ZCjznSY7afl8YIA=Nc=$nopTDy0GU@aYuBCv20vc7%AAAWaH?)vu$LA3K%V>q8I~SR1fS)hvUq0;E&c=d}z zaRfjUrMFMhEP496e?CI;9IF1AH4^*PK~z)n&q~Y#C2*23c0)RD0)m?|qRGfh3L{0N_H0uWS6f+r+4$4Bff1 z_0_@{4avBRLwlHw%kp|M_gr!!{y>%OJO}i?dM+qQRQJ3;HlJ>n`AjX(;2 zH}&Y87AH7F$e&Gd7*3)$kwFpqbQoS@mci0UKIe*a>?6VRY~x3BY-SZ{W4Lr{E$)dK zKVow(9^?pul&GP>)&9@<`zN^V`zViZhZQYVeOrg4Nled^5}&guuyqknPjH$yw?F6j zxrPMSiQ{zOc7=Mo@`EPkS64?h=+<{@mw~*T@V3|HOOE`)hS%jA&}-rTXT|)|6ZE$s z(XIP7JCx8T)fJN8W~| zKn4fj|HZBf$pEPlPL7A5ZWKTV9y*c1emV*CfF!i+#(epkpXYwsOS}Yn-*AhP%%HKI zfJ^h*j*Irou9pk*TpzPBNq>Fn79f$|dB3DH|LG)2Y6UBMDxDQd=G~|{4__%m)&z(~ zsu-;_?6W2NXgnNFaN8Wuab86{7%-V1^~sl3Itc{gk}ld)(@c^J>?_A?uqj6pR+I0T z&?3)HLrR_rdW9GdAx>gaj9t%$!v-S6B_Tg5i8M@Z4YMlBP&j?dKX3AAn1N%79-Y6b zN(+$#6ab~qVk$l3X?`oDhbZN^EqsR_!#elgUw>G-n+`QgS>pKFMgYPGmwe2t1 zE2qky&l9ZEZ0UjUEF;8$uT%K(QVCxN7JCa!%F^2Pb9=T`XHp>|AQRb#kN0W?O=~-E zU@6R}bL8IdfxP32X)61A>uF8Lg>KUkka2y96?k_CI$Zi_f5ea$hM9p!O$&ftL-1_f zfd>mjf^>coPK%r8cu+DDf7&DT*h9fF_Ue893eo`1O zRyL4lMBI$zj@P&8hefU&QZC_trF!swa1U2d(-lFF%O@z9{lU!N>}WiQ+cEfLS-P$U z#bX@AkyOR_RB^kgk4KNRtebA>IsaV+!^ei-mHj#U@m1mTHP#decU+=$HdSiuZw`9u z%OzVJOcOXhP&iYGt84+Joi4?VfB}8(ahP4oHf`9s+XGAnY7am(#v91iNNTJA&*dX6 z9M)&&NZwcf&tLOiv|dXxZMD0-xdl=9EKM55rliOyyrZtRLy11?w%>(QX`PYt6s326m3m%_tRD)&NauRv)he z&MyYUtSH{stNx};$V=dJmd)?>d`s*Ncn50KXSQJDvclrIA$z9)R12T{S$28kySq4Zt1;?CKzaXh`pSC_|9{B(i(U-1w2^K!Z3QA7(70Asw^+FeK0+j%xg|YlRPN+01FydHXRNCob zdoj03F8K0v^^n$y*rKLr{FGnoE1kHqBo8KKE+=G-qSn%itb-L0`cnulm*@3iN~6Iu zFN4rvs9@II8P_Y@+Y&|5Y|TqzVgEZr;M6kYm%(<7>XU%kafS*942-wbsfowABdLNQ%lar7jkxnVYlYX6VZsoBdx&bg<6?zchHuy0cUci@ zon^ZrJ3UAolQ<#QmsB_PH*#d?s^|H56@#1`?n$=hq>;jbPZ!-Uw%=C(E=^>0Q3WqA zCPdO+T050Xtn3CT6nB*7SBSXs;=NU}+aI%2TgO#*Bo`BVeahB zO)GVNuNCA}>Y1yC1CPXtXVP^1|6%GIxFdnKHDf0o+qP}nwr#s(+qP}nPRB-v9UC2I zs_&coW`01eRaNJltq;2;PJV(Y^JYOcE_Nm|~4oeR)cLDbB7CH{QI7_D}ojw*r)LL&!B_4!G)iPNN_6 zFMqdPT2eYB2~`}5o3jhLQRF#=*nz01NKnCCmu>Vw<++W)WHw(d1(CUO+*Y-YDCN*# zVB?ga+^sWj@R~)IE+pUtLFD^D!5p4b+BqP(eyO=rggc(f(38 z72~DirI#@IXH)>S06BpC7z%l;lUfcsNj$T$7{2}L2 zfZz&)l_W{4ksoQrlnSfk-T`9Q)W#mwX3udz86YvV5T&XX)3-Ir&P>*AFbcKWHj7GZ zt;jf>QHWD#;(|VGSoo=g-)dzkEx@r7sIc75mvKW{TxpPEHnACErqhj zrQ(w8`?8t}AGoVzr*v>9y>gplP>*IkS`F7f|MG9utlW$W+{uaTtI23harBBVbSR~{ zx_aCQw)hri7`MU0GdN`b%TNfCKiCD8n`-gb5^Bjc^?u&(-4}2tRX@d#g(!l zO=G}II)SO0E!sCd}&8> z^COCCL!9| zLcTI_M16w`f3SA{9uyD|XYsAZt2v)}8_b)GWfA?0hCoRE>FsG4h02LcRzwzc13>mrM=tP#2qsR(99xph zVVC#9!I&C33FSfR+#2NvIh_?dh7u~4TB8v%6_rolNx~;?*AjMC1ta!xmszOX6eC^d z-!RuzJzQo%dG*WFVpnD<)R9px`W%w%u`M_ZmtTN_y&~@DV~%y4``d*hF7EaBWr@Jj zYyA3V<0=ZTlG)Vm`#4kPQTZ z8%x$WFi?C$NNh+{BX9=bD63y)K*)~wQ3aaAQKq^o#9qkoG_U|E+RtpeHmv=!ZTdj{ zGPuBr$^kSX`-Vb@GolPgB5_8}2Q-oVhRG<;L3;l^tgigg^}=u{9e@mT59Z@WML3L7 zm_&|sEJL*G^LfjuQogbpZNUVJpTe5eiS~kQyri^0%6F zTKa+NrBMVj^u#N!!x)x`g&>HS%FtIk3Re5pqaj!Z-}B1yj0*cu=*b3Ti->;gfRMg< zDnO+yY;e@#eR!Kz&JkmGzVARhrN+VFRfS@I6$DE^!B_zqSw6g6kuOlr)~e(Dxz??8yk=uGD%>>n~iY1<=?f3>VNu*!N@Er2GrkA|2Qr z5#*;4q9rI`7!r*U#`zWCC~6q$T>Fk}5wBg?P^Qvpa7v1q*j{4gfBqI=QN04*Kg}tu z`;>5L;S=gfSduYPazdh-@i(KgZYdPEkxXi%tG~Up+pF9ks=|1~yurZjO~-+S&lBza@_sju5s`ap+T+Q&m3-FNR>U`8U{1m(u!Bn z(WUH*D5gk*4#qw+hmo?1AWlOUr=;Hepe&aJLzPfzQ*M%}{UX&Zre;X3T?|wR`KzHK zlvqAy81R#fBi`1o=v~`LIAI@mnxZ;t&=qIcO$0M?v7^Ls1Y72)=!rrOZ~7CBeuMk; zm&X=(5E0}}Cw7s%>ZR%T*e1*ch?O(?y(H%yuC#2Ixv#R>XPn>Hr2v#wtHpY|@N+~@ zxqHzt%@1y}fWOx!%%|Lmt{AP5Q=LOE9?PcSKZ!6Jipq$dSc@>O0UOsk;XYge~3Kz$blBShD2E3((r(r+we~rLlUE2em+sot5YFJM3!tMoN>X zm^X+t`L99}_zIp{KXV3sVb9smfJ83B< zCw62uegLYtg*(`HNn4epZTW_;K!XUz6B<-Sgl%B$@d!^RG;*IFl7qC9w0%3XB&G(L zzIeXacCuAUMwK{5ANc^nfm;3X9adEWpNLJ^V&Cl#Xv%_68W8D`q~Yxgue~O&5ssoI zvTAN^K;O@i0y(8Ys-(M+%J)%Tm^8+%7^|^o4Ja+cw8XYN-5ffP(L4AT)z+nv-muln zJv0QvAljGk{`O|Kmx#G%SXKz=D09pdz$lG(&7S7MrM`u!$(zShZEhpI*(3#3%K<&x z_h#f+Ae$LBd%G9~w87P4XI!-mU8r)ZaUrfIuC;FONHrV^UMp(sE10qja*h&3OlfFm z%lZ~Dm{0{JvJAzDxuN^eqlnDErE^Jh(B<2 zIqtMWg*|IYz(Ar5U}}r~xQ$Umex%V8XQxLQBF1rp#ETf*I&0izlrOO`vT0(=P24FI zz$-dT)f^X(J+iL0=#68rc)4OTWO0_KajsQ&=ky|w5*&gHoJ$YNMaHR5RdH3!OOtz4 zs+qmmi522#bsn=3BI=;zD=VGF%_DA!g;FwAr{*_|#hL6d35Ty-2d39AcUYzCDY}$y z$z3J3yQpf!Ev1XN29T8=vA32}K*JY~UjaU5B@`0SJ0ocIr)lAu% zmjB2;2;4Xkhxdo9d=qQWPe?@}a6ukY6=1OeZBa`shKK5DB%T>TontcN=1adoP*xrz zbR>h)1eHnnxSIM0^b;UMj|~u-p*irKzs7Biqkdz<9a$tt6uE4`Y#!IT$cWPO%`2Js zP*5TrHOJHG6w~4OGbl?>G96}c!TsP6o+&<~%kXZ1nTTLHx1{hkR3_+M^mlc8t9Fc< zJ9(Kn(j#ME4VSEboZilYpbPx)q_m{=9rKVr)=%bbz#NA5WV*F4b)%TL#$4I!ajmC_ zCTNyXfetXSYAHV4P8|W6$SZRsU{X6}hG%1m;>krzAaa?DGT(b~^ExrjS6-vMTs*A^>q$hLIYA#J0@n zm)4~w=q&n+Xy;N$Ba-ceM&$zY;;$+-wEqOR-$G2q9Xlo#&vGrH@duRMxx3yX9BBzL zxaNJ`lI~wi^o3lrpT&7_lIt?4IHOyWG{nsMw#i?W3jkxX!;UI03`utx<@9qiCV0!( zQmdpYi1kOZ@@D%selh~h*SVTSRR_*4atbPb138Bh1#3kWwM=Gx%d3=hD)txy=_^|l z=+&z-uh?&wn%uMb`ZLIADhae~!e~ooQBwS6Y5EWn_)4?Q5Rw{@anWUXtfK1FgJR=x z^SfT=Vg9G)h(E07#ACLs03XbFRwEPcb*}L-)$t2yYSc}=PFsKnP6Vy`^^=L33;iZ; zyclYG*cVeBHk3iBtgn!I3}(SC(Et5 ztvvRPZDb2Wl2ebnf0(mHO#<#+%8ng7&U&;OVzap?#ksEy;;Ey0viNGdpFQF^!Ix+C z?-hZ~d3y8&_!-P=oc_~m-1lGRDnzSopp6=+@%dDhK8r2~N)9Cc$&aYm6Xb~yA*!T@ zMi^N8P(@POBCsh| zH9fLyQ79!{*^pJVaT^kBkVq+%6(|`OP34H<>(g}!o77!^hhx&m;|Z5{L$+5 zg!TNkN-=-?xM>~~*f#Pj>WGkg3AVU(8uUvgB!xr;6DtP3;Y0C7-fju3>FuW7c!bC2 z5+%$Sq13S~A=v|c7&z_llyC=E!dZpi$lp}?vQ?U@A12h#wSNos8jZoxf$-2^yZvti znS(BCbUT|k;QqVs0;c=>Hoh_Ty}a*Z(zArGx!cT>Uq{BryNJGP$O73a5JynBfG<)4 zo|h{a1XI=)CP-RXG0ZdY>V<24!WWhDO;&_5pP5R0rKe+<{-BN3wJZ>?w2<$GVXLVy zzOzmW@hC_>fC7lE^EbiL%90%46Du<}c{+JoL^bCO34ib)R~#6{Vnf^e)V$!7%O2RP zs;LFzX-j0X4TYp7b4UVVWGeY$bhzpu>b&XFSIb?!E63GMoWJmpd&8vT0EAmCy;3Xu zfm%r%J}QW;OPJ5F;D0wQ+>ZBu+hh@cdB2}XbwPtfAQutqqpzccE{r1|Rv3O69$>U} z$S&s8I~ir5B%0i+5?d*OxezZ*>@^UqjUTZP9CIXa2|`OI7dR#XlPFnDg0?0EY(t3e ze^N_m$3>O1hiW-Lh6pTpK0;axNeEGEOEtI+l+fduL$wQm#13O~`La@`&Ww=fB|?FR zvKD0xv77kex|-@>uT-@rd`kvb(qG9*Gqm2t<49G-pZxnGHIUSTe$|zIs1rOgWVsHlg37k`7v>!n&Xwx$OKH`(0DIc;UTwaim zVGgqtFw5qZY?5^5L=p#-)27`5o!YuKv2CQ5&_D$lvWyQtn&iq}u6YSC^&G*2j*j2A zK7wY%v`_vz?6L|?0%n02FrG5Mf=p! zqD1OCV-kzXmn1&oYgn@yzYdtMxD^wJRH=+<>R_shhLO;ll=Bv9b+DRcd6GA9^{3o9z8hM3J#{(@_W1<~rKoW>GbB%Sgy*uM|IzZA{;p&JSv7 zMb!moe$+m#n2tox)Bo^5c z3CoJyRnUUSM)Min{Bj^4Pg^Nn{w#JMaB$=+D&v|R$Z~f8U@SEd{TbOY2(gTkF4hd$ zF4tEIll3;hx``{El3ORFV0m>nL3j$<0;^*D8H(b~MJBS>2Xo9t$v~gV`nd8Qh|@w& zH+{xw?WCBr3so((b=xBG`U(@>=Cj+p{LBZ6!Z$wvY`)Je6nk{x1STszrl-%RELBNz zD@h1mE@#$#`1>JXKiugLV=G}v_&^(B5ANM>8bG9S>?uchTxtyA=DkgJmbEZBSfq&i zN7suPf|P_i()cA6T_BzdY8CUqg=1`GI2B(4?N`!kJc~|9%?Ozn4e?PnJEcwmtRV3UCrEj{KsP|8AJMzuBnKBO3`Qnd3t@>-UakswijX=%A%rRsw4k0 z9!pvQVu$>1yX8JD%|&*{8JqR@SoEIufhS<=oN67f&pObu@Gv z|AN$Jb@f^MdC*1@;>@5il+xlk@$0;5`?7t9|28@9;i}q2@WZt+gVE!>H?JagafTFR zRfJ9EnJ?rK$f1AA3q^0m%gyJ_!2Y2(0bZS4@8S90Q#?z-aMKf~L_0%SQT%sWRp_hy z+p5<=&eV=mN)O-K37HUIfLbgMG)M-9!ky@$_jCJpMk#bj(CDk$YXY z4fxPgMqBgwu64n9TF_dT^Yl!NUhgOA6NsCQ=98z3wYw9KWcjwftHfXUB+IyKfPNkZ5%-NbIt;pmTYT)wgqQ{-OBAu}VnfrjAZ z^3oAzV5RbQ62U=9qo70*s;!HWhAfAw5i(!4kY;n4S7VHz-9gEWwj;&C4^=1xr<4U- zr@X-8*jeXFY*N9A+9IC6Y+6+pgdKna!@% zX{Yv|&0^bXclfq!%I)eh1G!q*FDO15jmB^TdRwX1IKk;ISID>D?r3b+-NW@_8!Ru4 zrmA$P*X?9xViI~l%Xf{YtV0f4q@Vxl4c-N+D|Oqu-svuv&pmh^42A@JboDlI>1#j0 z`xw->`!F3@hp8c8NVzOez`xIII&C+|>HF(5FtE{TsjOHcK9ASSd96;5iMm5gqn*Fo zAyN?h8}Jno@VH6qy}y6_hj%GJH!pk~;4=ck2)5f+OBSV5q1a6ThisIhvdQvy-e0p_ zymv+tZcf|#E$=+wr^;$Ys)z%*)en*Gj4x~oacn7p5cz>LF$hNzOV>o47)iBe($T6R zO*T;v^|y!Tyxotb&)Y$LGWaQImc@yV_0>^YRr60YUu0#N{-_*+_sXsg0Bvm~<`<}` zb%-nuzQzz=np7O}H6>LeW(v5HTjvp^5+{*^D|TXlmV2>XJ7}y6+f|_rhEI;wPzw?z zKxd3WYLX>iP3jL0B?Al|XQ!&Ji$EFW8@k-7KL}y$C-e?qRmE4^o-$&}6 zsPV)aP!#VxTPT(=ZiqTr<>(5{LyA@1jxrq^+F9>(vEU)*u-~3n8zd`u# z)mA$_9GZtu=L%Z>=kK9R7K@xt>y@hT9|Y7yMHQ==QphHvxmTXLFQMid#SSu2|6=du z8-vdYdXdMW`m`CVb?s45BC_GNQl*JfR|PErvoevo}O#a%iNq zR4L*#Get$B6mkgZALf$!dGZpqhj)Ya0?!8iF@JPz?tWf6IQV7^&y8xj#Qp=1<3KO^ z$8&6auj0SA3rQs6cmd>^?{%UV#+K=lL>k{y01h3233r7k9KSR{f}Q`#x1>DL7k`uB zT|%wcog!`;M`&4mFX^1BAn{s7!CuaA6GR<&#KH_9xVMOjFN~Eb+2+;aw@3sKJ5f59WeIyo zPUv!rW#`neMioeFbZi&MpMIQDfWZl5gQz>eK~04HPpXIVeUc2l)uuzoKEzR=&Mn&< zBL{I3j7&)|u9F@}fiM;ZA8ZoBGKaleNk;OJO!8361v(yP{9QzxDH4I_9`0gu-DZjslu(P?LNKSEgSCd&;D0PB2*^cFl=M8pv^NeW zg+XOsE;?YU#Bu;voOr+(+WMr>Q#>k;7DyMda50S#CtsQ)3^|pO$xCL{k{9=wJLPuU zr!(p4&ZU>JoA=ch&ptWkj(;N(B30$nB;(SCv6Z40GrEDNdc;~fR6$j(HoaR%o7|G_ z229eP=j~F)U$_RbNF%5dWRaFq#Yw(7+faY?y5IH3iY)eFenU$Cy=2{$mL#nH>itrL zr$TL_2cY?#S`oH>ESc&LN~V&s-BOc*q*sVt0Qi_(D7~ruYXyzG=XWZxn~Upn{HXwA6~VDHS(VUfBYB&tRtdt7IVsn&K%XczgrF=vm9 z3k75ri)fR9rV-MaqdO_jxdALb0X8AVAL$+yMaD6v;+`=zRLRn5t&=zxi$5obvr@By zz04mb?tu*>Sle~-0aTscUt||)YX<5er1BL~yeDhAl|J_?rW2*5x9 zA)tqYpU~ytl{_@LI@gkj8S$IYVUGP{qV>3)W%KiP5ORZOwkPKKgcBZ{6>#Wn6^5T_ z;yV$i`!wK$g?hnnV0u4m-Rp@w;5MtYRp@iS@fWAc@${c0%rf{aLc@>#2XF&#hsLQh3e7i(m`xT z_HIm?@cU_>Vk)*i$0U~6f)DTe1A~BFOl39V+pfF^^V@IFg86Izn-A;z&7VQh__Jpm zU|1u)TFuo2#ZUUwetRaY1U$k%4X_BdKp=3&oWnTyvy*#eU4RhxV0T_pBv^;P4Kga{ z=k|{W$a$QiVq5|_7Bc`aIOI?`kz5{km+(Yp5Dc1u1!%nvN;l}rh(&6v2t|1 ztJMdK0`!S9BOyEYZ~wtp30tLP0RAU(F$z~g>{C3sEz^?&yl6TIE);1CdKwPcM1MWF zW!H71+Al1KKUfayF<7sv%6y*_)D(Ha6dNPi+k~1*b_KK1^j(xat}nMn?kmWcpBjlx zjT>7Kk|)1&zcw8HbJoB}6ey7ihGWEMtvT&#H^hevBid#N%0xd#(Bf9oYaRBCX=^Oy za)!xFpsCQN3;Dq=OEOgN1CEJ@3T%x-olBYG%{XNpJlL zb!{P_soao!?}LV7qK-fl&RwfSRFeWjWYKV8baR6|mF*G)e>v3MqO=TG(_KY`dJtKf zqPJM4R_M33t{W!T1ZT~(u|rZev7QyRRVYU;Ssf6p1^p;LBq)`+Bj9Vn%ZTyMApaua z#rn=%b^gfK+=WHP1WI@T3E%j!i}z}J0AL}yjbT~P{%wV2i14j6Rt|{Qe5s>-t&@^K zCeLx4YMR>=y` z5Hj{)QQp@M!GF$P zXbX)WT8|p!l1A`_5-+(L2^|CkWTi?offW4Dxm_RLqN;g1D>O`f8{@u@WagG2C{15EUsD9os{yUgYuzh2R$=`U%UVAaoPp(=`t{N@P^qp--6Hp_ zssnj|cKzUKvmlv;&7#~qFnmC&L3@v~H-Q(CRsWM9aDp-7*Fv?Le}J)@Nw5{&h=ZG- zi5f5-no%mvY7I|GG&|b26Nm;%x!s3|-G{>s|5y8S(gYN6!nT<=fUNZ3HGE0z^SB_P zvEX<&ib25Zsn{}Kf+&?9NRwt$DI^J@*lFYRTKo-C73KDN@C!gZUYr&H&<^k6Jty?1 zxL`FzCwwpR9ehAwrDT$(L~t?!*9_XuoG;pXC)Q#sxx6q@_sfM8_+O7gBRN#eha2(* zDk%{#_w2>jf@B#8u~Z?doJM`_bx8Q^c*}dQ(^QSz9lmvqAQ&G2PTl8p&@SrZPI}Ru zfk&S)(z>LQ5J!7;l&&IH59txjbNoJD;C`YCvxK=Jr zmb32jxZtR-P%X0Qh0x+L)Kk*E@E*chU6)e4!KS~kR?(D<+DcaSx|QmRM@Wqe#id4Z zI;*N67nP9%bb)#Pm<;lkjd~8aNcs;^d`HI6;P5HJH<%aV>B&|vouguFjw+(vLw`_r zsjFcc8=~BO=XaFG`)g}NeS=ny3+!+xWt7LBKiNX0gkL#w%{w4~4><5f!fr%{M;NXLW1rIw<@?_e^>nCon z#*b-Kqg z(&PUx$qIoIm+9usOMdKq@hRmfY#F=iccT{~P>J4UFb>T6{Zy6_rC@j5<_=+_@GXg* zyrncq1hV^}&5I+2-&UOnS3SqN50?02AQ)}IA{AwohaDFICtNfmH@BMX^rtRs&+dQ-nxf zphQ^SKnAR5qsAuKh_H5OA^DKfo{LsNSWC?TA~%VQ&>iEitu3$|ft<`R{vG&q;BVsq zMLJCJ!X?zM3u@R&N(c^Q-*r|-9%^YP2m~FFj3ES3WTwJnG6}1N^sCbl+Ob_7I{xoO zSHgiv0RswTiLR4qL!HCi09T6^dOTj9>~FjV$tE{+St#R4a(%*<3LQ^~VKjcqU$W#_ zT5vW7v#aRm9!<+&2bwv9f2q20YVAp%glG;0wE8zAu%q+}$~SUitN9sQtNjZ5 z3YUauDj@}a+GvHq{-7Zb2x?&B^oH|!`pc(s9LbPlr~-*3r>BGSO*NNebNUPEdJ;8H z$vk|dv}vbTh_kh4!sYRy+9%Q0eBPxH-oK+(dK@waP2&r=sn%r$Y2^enErjhF6ph$K z-M(iO$Qml(=~Z1!X@yGOM6*g)UJ{m)6Hdsdvx;#fN5=9$g$gFjd2qXCoETUdxoONr zkSyhoV53+>=2I$$ll?OdzpSb_!3O#;O_>x5-=myl)D$Fax14{wo+iG=)MDZSm8&pV zA_l)*Rp_qNZ%tzBkVNTN`Pl z0Y+7=dxY_W)BXk}x6;3-H60ck^dUG_3Tv&gLuI{>O}g;gK5Hf+0L42{O02={!P~deboLY=o{W zML*&xD|K#z(KpoDdxQT(xn*?EFLV7j)NZtw<(~QjDHx`bFH~~l&?AZgy-dLaT_n=) zA}su-4+sUfwK8E3U~Xo)ipFN>Xds?$2po-XT?zAV=#-c)vT8O~kLMnCX4lqoDM64J386S~U7+)#B0qq-j0t*`Av=^Tl%KI_+$we)gYB~*Evp9{sSs6M zVMSHP0Kt(faYKX0qGN781RE6Y?Ju;#;19v5n}{3I^|+|=4-z_PO~e`sJAnWZI@}5; zwh|Ke4qy(T1;j?kAY;EupLCG>yMrQO;qhtXJ5sJ*5fL9UYbBt;si3zzM#n%X{35HL zhIwJ1qk~u%%TVGuAO=IcU`kC{vm{j;RjbAhFE&Vj9wA`~Y&F*tDAsOBv>AYV(-<+F z(!8z@jF2Bc(*SE4WHirGnlP=l*n2-C$;=o@YGt24hzjkBh{Z4TqpTiN!-*My*rn+5 zRwi#SI6Ogb$6y(1zIMSoOQkNT(>}B_H{vngW{!S*x*<$PWJ*Mwkz#1(4lCD{`Evx9uk#x@^ zlqW&iA`(L+Kvk@UM)VQ>D&(;lR~W(^+aVK`g{VPT>(|Yi9`YQl;=-L53y${nLIWTs z7E`S82|3kr4q+$}%$amjoAcKQiResH!R^V&s{8a(w1Go44ttN(TB4-yS{#^aM;kw| zbGr*WV1M8Q4vDSF_wYr!IF^~$WQ&Q?Nt3fNs9tdphF;6@GIWeWwVNos3B0{`;_RPh zf_)HM=#>PJ5^Csd$}!4clbmXV#EAxZCuv`@u}W#M*(UreM=S+LzFYs2&!?#!x8BZ#K!Su7$ip$6_i6ILiT54Dua1c zXb>U_5Rn8^6-5abA6Snm3=mxAtnvBvdh+>a_rdQ(=kIE-S{^cO|LgUZN$x*&S8c1n z@9N2qEbQ;UQ^_7Cjw$uydp4`%);m?n`%Q(Em$4q?9v}}h@$e-B$);3dLa9CD)%VaW<`C{)JTTiF3vqHO1$$t=w#Q)NApki^i2D-77 z;{6^wCV3(sF@BVV7;bYuX_(FT4KE^iax-Q5vY}u4s+M|pKyUqqm^M+zuQPReAMX{r z?5|3*`leB@sVEB+B~FwiMUE6b*lYj2ck-x*UECW?3#Akc42eP25(>&gI0^Ac+llZ2@4iVYINfCB z`YN;N@Q0-Tecse2UD5qm*h(LycM_1 z=ikfM1I3>|R3VZt8uAtvpA8s{zl#@`ul%Fw+W!CF_{rhxA4mLk_r()BoE7YDn_JkQ`qsgCtR6lRHH8hHvVQ*%P@ z8Wdls917}_{-Qv2X^9~}RSit1-%aC2w3FnDr8@G3p0&fMFvF<^@FC1ep{_8$UAt|b zA*_NA%N)i~)oDW|{3<(-xFpiH`OE5;76Yphqe>=zwRRKdtK6n^Z@LkT-nswGF!6QQ z<<&R4LT~r|RP-EQXSVsBLS_7aPm7r90QPwU7_TY{zXv5S;evp*(m94~F~%uH%U6tt zq4n(iqDQJ9W^{f*(V~K#9%RpqX^BfhJD8KSeiakcRupnG=(9?n*h+`$B2{$sLf~sE z%s)|8>nS<{f_ulorB9-J6)?U;wUnZyEGnkyb&;u5fv?n5jvuC&mq6TPKs^v$ASV`vlV7jf&&!Pap$ zHSrN-GfJcWM>*H@Z&1rev0Ek)vLvh&SvygUUg4whc%?wU8@manpT&4_VV0JyM`G}M znwj}IA!&yqTtfA(=V=pfG6O?1tBa5hqEad^)AKWGSw2Zs>p~YM zUUhIlt>xY;$;5T2kw>A9TYln6GRtJt*KTSKy+uxdu%UH;;;zM;*K7##43$5^n zbciTIBMS>l>F+WKu-@rp@m!sPL^CfBJhzF7BCAim9pps%Q8ha*#lLlY{h=?YP^?;M zCJK3bTHRJow5JF8zjRsIZeQcd;%2xne~3rRyS%Y(HMfV1unX0jV-%6uWTml$RS;lf zZ%r52IobKV6HI+wlwS7RS$$fHzC()TWLB0%{5N7KkDS~z|1^ObAq=UD-1HJBLIBc3 zP?e;e5YV3@!6mUqrOcs74k+i=r+%zTM?X_hX~MItQs==|x=3bS^T~N04q{fX%RkQ{ zfb%?yfkG}SVVuQcPKSV&Syp{BQdBGjOH1?%bO4KFhzQ(_@Q=QRpg%9w&I9$H;%$kp z90^z}9i=Shy!_A}KFg%B3Kg(RHW8g@mFx#c7S1ds&u{S0ap@g=78r80FIOl+F(&zG zyWb#iF2s{Cz*)z>_+?Qh@&DbzlPLX<2dQ|pY-*IpW{QZw(luj3pwjaq;OJ0KFKqO& zkb6*V3#t7UULQ{Nvy2l@J-@6t$|Qm&3wO)w2%^Vd_{)C7#`6T{1PRPfG+61C(!S3! zWCNxIY5ejxrRSSUf7s?xs3%z33R6RdN}Bheo- zWYwgP+{hHijms+h6?41F$pl4#?8hT+7v@|dni*?AprKIk4D{gnnl>us)<3WK&85KA zfIN^5gmqAw_9H#UeGAmt7HU}=pl(Hw#nh`zb$%;-DE=1SgWE@m0dmxybiJlJH}rGN zj83&r(^o}h1uY+S3ix%VV=3V`B-!Q5ueMV~LyH*>WGIaEQZNXJb1NA*3|9mkAsy7L zceOUD9g6GL)61g6Vwb-!jX*E^v+)1#D?^SPnr1m__vUCPkgUzEsYx<_~3ts*pVNMO7!i@3W%_vR+TI?Mcgp zGBE9}p^tP=z0vo&k_kfTI!+7%l^tVNR@D^UFVtrP91T*v5pT!iK$nvi zTU_ipyR82t=>LQlRFs4O@m;hd^0~wyd`#jW8&FBGbtz#$bC_Oa6hb_tS5R^8LWZh& zIDKMEVa%sRzFpe8>46dOJ|iq5gC4cBDhTe@Yl~uHrHt_;+9EhqLNjN!E4X}u#aA4Q zvhvlv@ADGGV65j`frxM2fd`8QDTjlMN5)l|B0za<^=$$VZq3aF+#PN1`nw#;qLMn6 zSCV3|pLaCS0J(S|t)YexU z6p0PGiYUa0s!R4>HMt5sCct?6&vOMjk!}n&Dam3yWfZ~5mTD==VR5(#4Cd!(>c$Xc z^{Z@m}ZnceU);(oH z>^L^xD-at3Ve#)painu3=TXEVgI`kE7g-t`->6Q2*`Y>1CUWG+Bt^ci9sYj~v?}5p z>UdPq7_YG-0YueF_oGty!50xqnvk%a&tK*;#ZHb!9-O}P*b7oMHQPj# z_(+uXjY|yHKu*E3}xc0TCh&a4Oo(6RvvuQ-(O+1N4ngzB0p6rP%{VeS-`4a&vZen>~ zQ3`hsB1#2UDQUKI#S}d#Rt8X7L_d7H|8~xf<-5frl>)-}2l?89|S!hdfm z+%n9UXKWyRBSvB`K($|{4RPK3m%kBK$jKnkCu9gNuuNJ3R+g~BPW4-rJ-}_e6{sIW zcbrt%?dl;*{V9TEbP7NjEW{9Fe_9sbh0}#*qoGf#DXpBOeB0ym$#f+`o4<(bjc-?F z#xxM=XQq%+T0#VhOofwBT`%e?MS1S2-cG^aAA4WInbY3PF5Jm=JF`GVl@OB6ONOaE zT75w;Whdk8|GpM#U1IvhGsTW(K2)LTEvi6Q@ThK1z21mNB~Z<&`IqQTVSW`Jn{yQW zN}z#rr3lKwje1FHlqt=VkiE^pi|5c1p0d{TS!YLoh=l#JZz=h+-s;Uu#Ea`Ee@S*64 z>5z(saYR*R{gu?ryWn;tmn0|Fg=swb0f7)#8n@YZcZ;o_!dGyQlY-Jmph#Sl6|IBEsrb!PgTr6+Pz^e1I&+dK-9ulu zVQoz4vuLY3Fiz<>H@#*);eYu2<3smNBh(-ku>^)nc1BdIxOZiiN=omam}_% z@v5Z~AJ%B$SWON0$rI5lTLS)5ML7+;Z2$YxtHY+Zm(j2%J%4jzr5{FF40>e&;3mGm6q-9T-|rBU2h%J0s5 z_NxeuVveRC6};qszXB#Eook!Z^)ELLza#x%Vy+AYy)P|p`5WohZU}p$SCBZF=iAx_ z-@*$~OSZ8`Nx8y~5?ptd4BOrdVwqG>*dsnKPcwFw)9U6W!MP3I)8S;s}kJBM! z_$@^Lw{WV8;ODHOZ6x%QEZdJ%*V5J-CXIP%0zMEfJn)@>l?HF3c3jn}=YEfM7*WyQ z1uT#Qi0s<|+cvkXXa0Gi)PH-|MilKTYvg9A{H2`wE%j*AzGE)d3YB*kV^O2koc5v8 zZBASCvI1D->3CWgt`4qVr|Y%jwubLKLFAoAF|3sVhE{EK=lTQw?L=gnmtMWunrC@m$bc{y>1adJ6u?4c?KUmgnXtG6^l0b<9)gQ@1G-~ zG9P?x-8GA;(U$24YRArtrAWM#1ey{;BPQX3rwMisAEh{}FwWm<=#6*F;-=EL3_t`k*S&Zv3k=z2S!OM*W@2ki8^xL&cS z;dXh-^wbS@=sPR>eE#i!c^W%{OBX&>=KN-v z2V^6tX5d;LL_-=eqoLzCH8*hUPaP;`;B-C*_nFWw5-)Ccjbp$ z>ywaRZCW89jOkl@t#u8c01#s{g$!#JH+OMp9m_dyE1S8pV)jI*$``b1wf-;*`6cn_ z8Q;R;7yF0iwrUriV`XgY8VJ6ls4a+HLU|IZ4uR=a2fZxEb>egHvyz9Q`@B^C%Tie- z3MA>Mh61YJAknrnSbft#;yjF_<9{r$b0b9daUFRBic6!KgzLQyXVv^J^j~LVVI-L@ zjm~#-*M}60%jhj4m#GdMv)8m!KUE-54=(6;<{oZ+mT87%>jOVenO@LqFRPX7;IT;J z3eij;Rp7_+=1jo0%jicxnIP2rY{1q0$sUyqap0O+2_ZWtBLT6`l3JB^&45F>b;~hU zzW2TyZTH?qlh>MQq%TL&ZCl`ZTW!zFnRx==L;c|I-^FAHlV2Vhx$Rd&?}Z+J&c1^~ zo{-s(GYr1+UHQx+QD1bZpAPcTE~l#SNg1HGd#ONxa~mWb$?JK?i}PU5%QB;$7n>&f za^Yv=6~a?ns6|agAI?^ILGUEqk*uc#UwPkt-L8$r(RBM8B_BBokSKvh{v_;iRk7;A-z@)wu*7Y_g2bI?th69m~23 zB|IeROzr2s;9Byb=WMX1QpSAG1qKDe)>tFB!ukJBmLb)1gdcnK+^{W!`4jlMxf3{mmAAW!%<&BV$KNm#y~9W`fbVBI zy@aH_hbapFqhLPSw%uQG@dy|2ezqtCA(Z6fI{{5yDbvVsphUc9##zlzk zny35dB2U${wlGpR=ulvAUzOO8uR5=U&#O6S1^!%u0a{eg5M&f=QEzT}A$PU_g2mzd zxE3s#fv!sv2%{5~FT$hMJ+Iw=_II)iu$}~V`=CT#RP6aSO(RJ@hFQ0K7our{ffOF` z>90gW&*Lg!Gjjnpr;J{D>F|WGHk{d=M&73n&#TRCn$?vCshq8w8mB_*Oe4>LQw0_B z`(=QN?*e50(;@8~I1hD^{nj7?3eB5Clle+Y>XXa+omPJ6K=fmM)8T9$MA}8Td9kt2 z4Dgv7^->!%-&`IEw+KB1!O6vzbF;zxH3QQV`KA(S&fcyuErIg@@p>`Un4pSCAC*)Q z1sD1hP2^|BUQ&lKZR1U6;@gA~jBIUu>XK(m<`QMMJ{uYi4^?5Jx!F)@A(r=W+jPK^ zn;$Cbr@D*$4T^|Y^Cb#R?=bRvYEX5DVQHoKc$)Z=o7J|e@DR`wmjA54(HkB= z;#zuLi?jBUd6|_UG2p^nDzac8U>AxE0zvSk0LTU5y9i5t-C55tfriX*Tpb)2an+nVo05r zKj*v6fDaA{QvaihvM+AaEqCJ0n4szQO!mUpz4c{quG@)>h_v7Y{Ggyl$`VcE8Hd_R zJF)j}h&^kspyUJ?oQDS{){#YrP#X1_qAMlvesTzNi6DDj!x<%Zi=)18NCQY1n6gIp z95FljoFdRBskq0DJ>l3x?1M~NEa<~*Wl%C@8^$JD+R`nRE#F9E2hg%Z=>4)#T#cBO zXTZ>wXqh?K&cXD)^K0#Uwqv_#G@-_PbFTJqj4z{R6bE~fwb`Cl!TG;vwAPtn-O^w; zZ$h^_^6NIutYH88d{&^hrEDvjZc@&5Q%jbhQ5XMCdr+xo0{K*0Z=qk^ARu85-@&ym zV5DfEn>r+|Atv(xlW7gY(%fLK0=5QVT- z@U|lLSW;67IMe7pyd75wyj61Y#abhm?5b(qKukdbc+Itfi=~?;VJ6y5+ds8gk){hU zcJj3Jedo=pRu%%1thcf51^zP4#LkP6n&dk==PN>^jE`A*WX+jm*$ z@z;BdP7cG4h$W{Mto-zB>ts>Io~A}O9hbDjf?I-Mj3uUgnck_U@z47euoUR^Zc&F| z?~Gwahliqm0uZHTofERS+`t9I1?rKI1>vMC94|)Y-%TOUgxREivc10O&>MzKnN0S7 z>1xcG8%1GQjP?v$JvB0^F1QTHR#hG_sIE^$AQJpSwCtoc6|g|0?ZJ92tEhKK%sNla zP(GX_UkJo<<9PwN38Zc4(kJtIbBojh)P&*aiCST<&v1>)*biu*Je^J6OpmkTb6T5& z`e-GOe3wK)up6K(dQ|~~qJR!V8MApYAFE`=96UHd@~4r{J&+#Zg7U!%q+Gc59KNmt zj^E!^f?gIWn6-(*!7j=oa*r|Cv%E4o#%!#(Z(YzDu`5B9-u~GL~+-%@OQ_!PV(5irh=bhZ0`Y&_%46)D!&GsUrHtr8; zoNazHAP3%+IJ=|>+>iK98#jQjRb)Z@`P`uL-8GtHf?C57mhr$j!~ZlJBA>l1(hc*JcavvN#l7#jlYkE@aK2{z%&U3WLLHGfu% z?=R8`T85uZg7ie(p8Eo^IjE&Q8gGL9vC**y%qcvL$4^|QY2KGx6Pd=pCII@92(0uU zs}Q76x@vhyv&V~G`c#Oe3(l=fkkJJra%8AL7ywz?zxOwm@#J zSk`n{h5d~DB@h*NFj^$u`r>p+CXKE~@`e0pn1R2z z`>T)-nEym_YvFzu%+F<*g$wn3z z?qdWmxlTRkK(P4HJHwUK+}OU&ss?h`gx%uiP!((!Cos%mEr=Rt^r6Za?Pd%1Tz?R; zN>xRWbg^}^LTg=k2Is#&?zL5*IuGnT#qXF95$;Me^6k3HdTVU^J`Iw6bgXuxZWr71 zzHa@2#eu##pdx#ji@Y8?HwO7e1@6YcTS}Ji9gsfqLQCK36)!-hhf{`iUI&*1!h300 z?3)tZsoY}7QVlM!q0vCHNBAOq!>|Knw&@{8Bj~dBxSpihbwB^x^XT1uQk<0mgdRjA zr-kp11B}jQ5QEHoiwOvcKbRReMlxe^yg&KOOW|F$JZ|e4yIo@CT}$?4vecH%EO(a& zx&P@dXl@HUVs!Fd%itW>7pRYMlR4+3a3Pv`@c9uCvkTzt_K>AaCvX>|oNAetQn*$^4r0q$#IRC|P7fp=CK_ z`C){-SM!XlrYxtkCc89-z7`n*H@+PFGh85iRqB%!WF&XGNP6Y5Z@G6Wu9-&2)k^o@ zN?uZwxO>iF9UKc;s4oj2-FM8&BT#!(Cyvt_UGHvepks~{1QfoVq6Zc8RQJT`g^%Y{ zcTA!E^kpEXiT(8<_T+|5@Wx(D&d3pSvdYOf6Ck>Ok^`)eY$+m|`dIMewjXQQ&_8G6 zSXoSgqz%vzE!QO304eT9!T1G}pN>>sYN&-F*uQd=EJ$z!D723lpNu3ylQ*5h12AEB z<|@%<3WO(k)|>U!ZqfU%XAP<3Rpm=Y`>vzVfzP0`J%czoO=8By8?P#1QzvWkhd2{!mhNrtvNN^BWUTr~$}dlFv;;p%XLLO!TMm$qOo^KVV+g9NE- zFlSM%SFJ(5XPNn9*f)L-a1K9@GRXZLfZE_8$JdVgKcJ64Ccd#hQyMd*pNqgmTHI$T ziXHX`CtylJC|RD*?{7Ig5SGX%E{My?T?rp0-XuirzVrz9Jf!BL2h^-S2t(57u!l-8 zHN!aG4^8<-j-IlCQG(KAZb*NDX2?*%K=vN)+U4H~|4xpFI?cZIB;_T?WN>_DIE`}k zNSddQQM?19kfqVRsAU8{US&TatWP99qGJtK$?9J>yVrjWmq?27@zFrCF(?&xJmQLK zF%UV-)w?T<|LDi%ET$BPVo~$>2cTy_2o_pNy_`|!-L4lWpA$ios^{ft4>Vz!iT+s zpB4G1?)LY#WmdfFO(r*Qx^*h}<O%!dQCl!hDz@@wghfGdxIaY8B$E}j?Dj11=Q!XK z0Ej5=5e$U>xEeRdhP`6@-veQl8^3PxvqVTeas_)aKh)vk!yo^k{O&3089AyINJ5O~ zr&_C^$k-ERb%dYxn=4_8w+S|=94*S;k^K8_w7Nt{SA!$5n>60RxrB&ZL9Vxk8q>3e zwGl|tJzzGZW2M2=YbZ}Dnkl?*T3VDVUad`PhwMG2U_P9#1F-G-OBYEHgI!33Qz{(8 za!qq%ex1Q6+626!CE_I?j&3U6&9#O>UrQ>AkP+JOT?xT$^^+YT1;~BrqD{m->2lNi zby{Y{9HcDr$9s3KN4P2g0=tTUo?)b19Qw$deUMsA2#Y1u z5RgXJtv^6+e8^c)WC&MIg)Q!#RGAUsuFQmh5OZ`dH^p*BBW4f}`7e!~-rrRS8`a?`B~+YoS)h<5BG<&ER%33F2B#q8?w!hNF5?x3tA%oq&D6>9U35e zbhVkeLz`lD)zfHyGlXbueA?@jU>tU;N4*{U?rc(5fK)|CI;|*$Ip6d$UV>db!$@F?fLbEpP-((%_?>o#?73X6nJ4_1e;%Jy0erT zQPbpb&KDJx=s%dFmR=m;NG-e3?nj@}j(-07T@2maV2a@>7j~xFz_OJn+}%z$^Qc58 z_wRK1Wb z!@>1)=$4(b$H%~f@n2Cg^%z0u)1;{)nZeFi!P`z4w1Q+z&*K~7XA0AnXP)Nk|Qfl)6f{3-| z)<-89i2k1~NVWpl;SAGHQWR|+yecq!!ezd>5~jOb!&4HFW(c)yBuAUj=$Tc-f$ZRz zzs`rZ)ELC@Z#y}MUhdlEQbHAdZoTQS&Ju()BvdXR`o6D|_x)5V097$M6@S~t%jRGs zm%`e4807?F{r=I*N0n!rJdf{Ntu*JFE!qo~4MeiUtU1CgDHL~#FS7EdoG`EDqSf4OGWp2P9W7CjFd=7f7SGVaM+eZ4xv*++>n2ua zId6C`!8RUom@5&lOxnFQR#p}b%6tzThRWzkTIMdw#vi-ZBvh=?a+xIlVcD1;mgEvZ zNPHU_)73B~bS`Fgu$$oDDNe_Z_fS_Anyf z2Olx2Slyu2p-Ci{E3g)d25`f2G&aSMY1A`GGfs}(0A z2sl1T0=TI{uh0tWmg9?edv;F94_N1m&zu2tc)uQuC9ya-u`;--BW%2OU{ZN-LVz3z zQ8lex^D`eemth1ISH~@im`_ z=hD6OKh-I?Y8~4!xQydzq4`TZGe{tK_>`{@+X{ugUGa0PtE+Ps`r6|Ajj4C^$*Rc! z3706KWR>Y4Y;$+3<{cYPH+qCAI--+u!?*NJPmW{VwTnlyj4zTcfP+5rh{ueBAWd%e zs2IC*`uuMZ$92ji$uyam_=q^J5J>S{?}F+~-04AhbvdEh`}9@iga$TG2+vk;H)TO2 zf9q5cwR<0w50bI@lJ8|`ba9Svb@n7Q_xPD6= zf?)hWUdqg!Yz@Lx9-lu7a_OVAEb_&0toK_({q_fbN&f)&ZjY}b_b_WHAcs*FCrSCA z$UB9y$GJDs2SKWt86Gb%&g+jw5c-fm6Xi1yPf_u~RB<(HFY0aFHL9{lSI@h6f-{tr zF7aec3H7%L;+ih{;>k$VgUt>8PEF*H?ND~Ss*|k1PqX&QB02i%OkYVuB9*GRL$2<) z@nknYHC}2H9lsUNDeEmj5n_C-j-*H}Njk%%m2S`|7o7ph1|({dSHM?A7i466rD-l7 z+`$nhrHX;OZP=lX^$NSE5WQ23TNv~d(z)x?xvIy{5=Y_wAh>#QK_u-AqokH(hc*NMIcp`US)CQ4(MfbSKYqb zL_ePYI({waD0+?W2}n2;ay=4@+2J4gY8>ZJG;KC8EdPKJ^M)OA!&3UiTQfnsC)ZtE zfzp3#n2m48KsqoZA(P@2b*;s#>`p-I&>G!UNgV|8U#0=#p-wEy=#-2n+r6o`m zddR_mJyA$HSM-P`%?juj>Pcgyh&4eG@Cl4ztRyATro*WFc6V%%msy$EkVZHHTkysx zY)m&yr#$i(r;yzA_g+;T+=ryHp_$4=gs4~L8~T?GGcz2j5-mMeij(f(P+0*C6#~Oc zLcthdTs0)Sa8mBuouCMPpj){v(_HNucZZ*4wPVgGjpgTA@0P`lEK_6GMGTWbjPQt; zmgkp`+qe=Ev-(fiQoNRzabb7pL5mLp=D3cvPdY6b`4RNa3N*H6Kip(%)3nML8nDAz z-uU|F-D3!pK9fdEn*CM#@0l>{4|YuOm1tLx5Wo|_ zY`tBSk*@Bl+SaRxE*zCFefh1Gy{*Ir9}th@n$&vmIo!Zso?*p?chaY@ z^w*p2EkR5izU|yB@GX!`_v^3xdVhK;d7PDUb_Qu<^rw?7eZK3AT3=|la*gJR?@4Rz zI@(X*=>d(GHTgLcUQORp2YF;Yk0R;e#~uTm*$ zMnAgQRn~%93f|ik)_SXjHi9mvf*JOg{#QqdbK^Z}bC$a$F(e44X?qtrdL>nf+aoT2sF* zghxinqiQ&60;I4N&g=R|Khc^-Fh>4x=<20i$=1-<5B`2gww9UZVz2X8$`fy-Cu&Ck zEgTjTnMks)rX_;|53YY%ef8ol85thQvK2vanV`f|YJs(f*lz_QjxN>Px`9jYxO7JO zb)Jz1q?a%QLx7Z#6yPCJkURkJv1{bFgAMtFWaqCQs8n=d>XW;kb3V6frjY$Y1 z^DZ0bg(hzR-mndye`is@qqpf4CgP`zHkmyS@iR<8tZU8&Y7wFvVC}TFl(TE!rpw={ zQ-tO*?U@RNAN=MYgOJgVZn!!zjLo;We~=~(KaDBHAH^istyzfQFd-=1P}mgVaWwg! z9CmV`Lr}CPM{=2ev9T@!q>W6$WS*SQf{%6^@wHNSD1M*|$xbNMkoc!R{-;l&-*@r5 z68$ZiSNfJzeN&TPa zc7oZY18^0s%kvQqPVN!Sho;7|88J&Q?30kVpW>N}^dTHEAN7^hcj{NemGD(uVVKShXx_jUPOGlKRZPb=(w?Y@tW~D@svi3hsTQr8aNVL|&!r z#;9*}ZV6)8fQQ@5T8X8=_NQyFcmRB|t}xZ_3d~r*mkHaj&+BHs+P3u0!)wEr23QCU zfI#wUDZ)~D4F)$ftGNSh9(X51S&kjTf9kT{3blOm*Dg9aY{o571LicE zXSFNhx_IaUhn)}s zUrRzMs*vwVkMk&zE-lyOUh8Ns$*?>LnH)7Mscg$*zBHQOx+Usyg;(12#np}3R{6AHDc}#&A5RKzAoF~Doa~MSITeB zM*Q4DU2B6mexu@Vf1n8~Rc4}-bH3fCp+Y+50B=oiSz0*c>uAE_-9Lmy*)7=b^R?nd z&!i=E+Ev0vKd^#b3PWbes2Dn(L&UymOuKy}9~4yo9uxRe;)e=V;HNIxQ`7sX*@VSb zx3)WJ+d@nPmvmbfr1q#UFJ}+o?~6g)8zQ!(d4SDjJ_X_j>)P(N!_B2;l$j3$!cT60 zeUU6aG%)pr_b+=rm4_G0qWtV?Gf&lD4N5|ZbTL}US^ zLq)H#t_rr+pFl;q#04xlY&}bZ@4b}9g|M~12%{UCd8fwTSZ)b%HVbmXJ6r9g1?|q` zbzF>|D8l7Ideqs=xz|SsKh@#ZeVuWbkv)_c`u(K%Tk1tRDh-J6_{@Md?lV|Y^y5Pe zS_3vuqomnX&?OqW46nl)FjRmyV4n!vNh(;~}NVz@8pF{?i-tV!-YHm+dP5P?03o1R6y6aiMb##xLbhM%~OLA6m+SQdz z3HP_E$m0fnmJaP0_FFFJ{>^qaTS-9zb-n3d^SvGOZ@914;~sW0UoYud;$))o@_aoh z95pj|8@xKT`hzSz5fIF&ZDW{R0C`x(>V+c936Hc)h=eJ~r_3K2OFSerrAI9!&DoCI zYDJd z-zy=U9#{}m9ch-5UT%#H9Qll5vi>Wj$+9>u`MF~#MQPTm=3+Dj==2Y8wr%uW0}8y{B~ys6|(xsn!4pa0h+j>@(@auY9ACJ)`U@n|h=M5Jwn6I#1!dtEn$YB0 zW;LmNMts{MjGv}e4HBv|TS0d8uVho3L5u1SL!&z;ucM~=y$+k(T0Z}OlcJz!-K9b1 z><_e(A6?S))fyw!LUoDHQJtdA6Zt(gRqb#ZiBaK*JtN%_jI(x0h|4t2I`$eRe#r3m z@55e2rJ8C{F?;}+<(T7_?x;h1iUbs5N9)N~UwY5aDtn>lG*UVW6CBz>`F1UqWsTo` zhgFK_E9E)DnR>CMEB6?;fXmK-cLJlDi>S{r^UksplY=_Qq}D5&-=@=p1dp|6I)sN4 zDkew}F1Dh_jl@*rrFaTY%#y+(Nq)HN#Xm~wuX}l*dHJgIj{>JZM%@)WlnZNm{MsOv z;XNwrnn201V~+B#nPIhz=_VsV3m@};Kyy1hjX^{g7i5dd`TsQz|4x{DOm=d`KdC3j zvnZkprS?Zk#FinJyrKJRF(d_&vbHB<$@?;J3z0#eta5&HOBApEu_&7rv!B@AKSm0tmyF~~_}AM(6VL{X zN~0y8k^wW^->k@$@gMkZ`$`TV!I7G>@3l1l@690@`^HE6PMrDxp~4e_gw-RH5_uiVyID|qSVliK*IXHoL-ZlCn8QYHn__i% zEMwksH>}ki!JnZG|EbAyPiJ7<5j)5g38i2IpSMQUI+Xj&V?vWij_vKI9z*WcvV%E9 z2oDtweb2K;Ml7ui&hn7qwT)#K*=ivgJ8r*Kr7q%6#ll$972OVDfTp_zcGnb z!Dzpc-p3%r9U7W?WkEa%_8^j;YEMHyTLk&eI{QkRvsOX=cT6tb`MmuZv!D9RLB8kd zY~{&aael9LpTE7U82_(B*Mf<%A`L)Z2O2Y2a6?WB!|;J0^~y`qj_HfAWk|Sd2<_1q z0=clh!>JD9iM#it#noYX#PK;`|2m2#oBP&8tBJC@sO0oD@WiwTw|j{!R9A_hy`1u1 z{1?bU2SbXE;PN$#Pn6?aZOy`^>Uc34L*3!u39Z3C zWjl98A52LR;Tg?lK~IGE_WrG9SW8&S=n_-siv37Ko((bLMOq{r4tJc`LCw6bmiRNo z4T253)5Qt3i)7(naN(ZYKP#VhI_(qMbFVbxzdjgi#9|PSwzmCs5C}}*F)k~Zi0RMB zGnIa=Gh%bJ1rb+A$)uC2`B&VYeiicgKeaDek=3I9P)le*2;TE$1NdZKGKB84w#EHK zz~*hm)|U>bX zrxFNw)@Rt2zyf;1*f{IGtLqR%gZ#I7{Kcs-YhW)aiQ=6|LxBzjY?~`YRi?2z%v)cCtlK5gbw%61#}BZ!UF!V;1tD~&YBHED=RBW*C!jjY;i{H z>s^5HC$s0Cz69v24V|P%9~Um+h@^^Q$v-yyl5{_QI8w$02DSpNe`GpK0oJ0ZsSicZ zmDLSdm=e#ZhgD`>eGFN?*%>wk#p3>!(WffFoHia0B!1z z-N`GM4RU_T_4y+qN2?la;UE{EgFJ3@@h z`lp)Ctq5r3$#h___Vtc@_e>OLp4UgH+#ykp(uW?Sp-9l~R=WvoGwej_t+u`&8Bzr4>(>H-8wh-rGSQZul=US9-kY$k5G*!|b#M z^X$haxK+-p2g%xZze9z;!_oYy(UI>_j^cE{{J(b>)tnlha?WBwHD<)q7}ut|rTKIH zYzob`g9Cr5C`@CXghP>osF2)z(7S(?$6Q?DKD;a$;*@Skq&>G+htqN^ZHXDI?ah!J*kIF^zI*6 z>Fd^uA5^?w(IngIgYHxWaM}OAvfSS72_F~EHMJ<-0&F4{fXc^^Kwk7^mdat{t;@ic zZLV|_)sOJ~;V#mUChD>Fd7!yF3(M7(1CE~2I_WwXn6zY@^*~De37A^8VVF)fBhbo- zeEtcZdSY)I8jI#{vmwo)mVc%+hd!F4tsJqO?bl*Ok)qfOcd}0+_nMbOjMEk2=|k$B z4>C2EnG{i!4*Ny^LwMnjsLgqEXC=DvhuXQV1<4m}KUx)Q+zwvDgkM{J`m|q?_2zi8~pH)B5{Eul4=B`WLRVeV17kJzn?!T(yd0+Edry$02RP3@KeK zaUl6`pSyDLr4bTRTxdi~2#L^3iO<4P_nbN~nuO(}Xsj+hSV9s;Tw>{#XP z@z`@Km=Se+W?l7R3sSnKRPPc7 zmM;)ol{b=HX&d_{7i#?x6T?d3Z>eGpH}T{%5QU~Xa&+-^+JDLzv`D7WOjs+^XECqM z%}IQVJ%@1+GB%n*!{T-S6p)A_QMTPBB>4WQW0MQ(uA+@{vYT7Pgg+hxqL`J=hR`o) zk#?442f~VS<;$Ir?+=f8Y|veUBU;pL`vv3Y00uvOX54Pi8x!E6Wa^Dj<2D?9ypiw z##Q7at>JMTxmZOM5zSHqgUJo3okLs=G$58xfZ9c9$pJV0PZTLqPYQyHAnpg4!14u> z0y%HM+oH%=Kp;vd(R3Bp(3!bvBP`0($xA{e>nkx2h$~p4DfTDtt@&fH5 z@JjP4xX%Q+_C`Se8;aeM{?DRYe|F4|(}H57b3vhgB)?VDmsEtkAVbe@;@UbvT@bVu z*wl-cLz?AO8=$q$Ch1q5=Rm=+zisRr;TQRD-wbGa?_ezKIEPQG{la^ut!T z7l@seGm4(cIt%(`XK*<&HG*C3nQef-;J8C24{YkOEUR!q;wJ(rHksqTX+rzR3)X#z zFOs*F*|oPsX->2_L^u$Kh&bp`5sdX$yp_>{d7nMQZ(kVB0J0VsA(7Ce=L$$8X2GyR z=RdW5mYc-#vGoQ*Y}jVO2TSWlhxOO1PMstJBlz;uTIr9`lQvjY`b`G35b4m0CykHs z6N?$Gqo4N*!}G~jjQw%`;6+n))lRPUa8pxLULMTLS-3o_n4iRLeyN~;QSpAvnx^%0 zEiM(#jcl35y2y+h+pe8AM+~plQGjnpDow>rQK&F& z@i9V5`WkLLQ!Y+8Il35E(Yft)AvM*4*@S*<3hq0<6xBP2Kh+R!B`vRFgz2F&Kbeqj zrxSE&T$RWdf%uS~Qs2OytK)6urE7|WkEzMDvKMsM8=U4qq(1wb?~KQQBSC7RzwdAD zrW$r`8w($UYE@k2dCSZJtgPc^&iJ@f>3`<%T?ZmG9HZX*)3%$kJI@EYX&SvM*MQ98i<3UAnxw4b z>J{^aIzcCD>yOEHQur0u6W=R`QbkOl>vRzbE$QJ~5v0xcW7=FUn{Jl@r)ORp^il!O zfn00jMsEGvo2u`X-V~17+g%5$0beGHmDRZ)N2!k7?_21;)keIh$jKzUU{VKwRTN)# ze>QLMxLKPtb_R?P%|2`|YcMD!o zbgXB}rhGjP$;^t^BDufwGEYsz`meI zib&$yr%@47C!Yz8JawUhf8V_NkWV-OuzhV98}n`d3jPN^w&;k%K@5-HzK!4z&L>2| z6|_e75fx;K!LQuG%aQnMMR!aJXL@pIY53AytZ(s#nxs0l>PH#dKVqx@Zf7yG;X4Q3 zz};~^p~oIAT{jK$KWow_RFJ9cJ^a#m*t9CYtfQzK0d$#(bIq-9AQXj=665N9;@A5K zIk*|^_pfgVY@P>tnkyWI1+vv~UIv@9(SE=xO_nP&&2{>!-`;*r6>ON0MJ061*M*_@ z(NkPVY}NqbdFCB(3hxO09g!@+P}RMb!KU&ps>tVBIK2aZM8VzCpK4HEZ0RPI=FnUz z01ei?*>JD18AP{vmS&bmq}6Kji$+Pu{sHMX)zHgDKJD*#vB>&U7qD150Bmto8wDeh z?=#xEEPh0bq%D4>(x;I%r0P^2}ul9(QqW}ny!DldGi16jsgyNpBu(Aew(rucB5)# z`Y}L>$5~0@^$UZ>3-tbYz`P6<|L<^%kX?cdp4LS%7qL!UpgjV&C%G>vwLpw^BoB5< zWu~*6^<+$1A63zuMhu>EX*^*eel9au2gf@fpb=Mo#M`MLF5W1X>$r7sF_s%W3w>~Y ziq$dPR!$y<`#W^PY#X~p%t#-(zFmNrz4ik6SwCQ0^4GF_IWJ5DQeTdP3EMcP5Z|TK z2^B2WdLJP5*+?#D4Lx&FLkvBYI!XpoKTq2C+f06?j^+A~*1+4;Xv^Uw@lBe1(@%hb z^JQN;v|0K3Otz<-SYOMe2`Geo3v35MP-*U>2J!3$oWBHI6h!pjH6FxHj_ zMx!SW%0Fy*8J{>E#;C4?Eo7rbVg*J-A9pICX4gJ%e0-o8EZ?D~&&IixWOW{MVZObmzAJ@*;3ScTlaF%bNDVm@1L6r!EW> zX=dqmwV>w0o$3=4j&79}{{=i5C1&Va@JSz>+m!`Jy*)DGy)tVQhnZaoKUToHA8bh< zvX_rQGgjT>Hvj&H#xp4?Y+2$LKmW4@Y%jsQb+_8{}yaTEr|l6a&S zZ}oWmEsW@QUTfx}iBLlzeztNGFelUT>+sPt?Bqz9G|0GB~@) zDwrEc!;DRV$MUgGcuk-Vqk#{5FUgP8^anC7|CHyDCM=~|&GNodWgV(+co4KPIAe_$ z)_aN3_;~^*^8JujS^Z+85yE3Et{=&;Q1V8-njRpK3`Ru-iC-uaiu4!aEq z>OPUqfZ2ylr^Ml4^cbVA-`sT-83V@e%f{U=%XQkLbu3PTptrv_MiX_OrzM#^yD+S4 zwq?0@A*7G(qa=Y(duizNb0(}b#?JjPV7J2eH|s61S~(B=eSIa~6nxqRN?5~pqPP+h z=D!`%QuKtVcHh@Hfh|?WuZf_iM5n;N-?1Bcn;*Mttsq z6td27fsNWX2HhLmBg-9V3JYz2lFLE*l8FA2lG%0mbdXp_YV+^PYH@i=ZK#D-Fo6r$ zHBgp-Y=IVve2P_9nA4qy=x;tiU5BvuC7CNhW>=hZEWg6E1BrH|m4uhX3ZOmCs7IMc z(hNm2GH+rGflf5EJPAC)cTjyRqaH_qOpPPGKoheLMPYcg*Rv6egBM7dWf+B~DV15$ z{)xc?A##J5j-?4p$TKI$5zQWlCMiQ+o)>y%lx?ix(r+;wW^A!80@ADLgBnMUykU9u z2tFyK+rUl^6Fx>STh9Jz!Z9eSYW{=DN@7+4iuU4?jFvAe*GR@K8^1N}9c>i6zCFBI z_<&+QHjw8W#0X)xv*#bL(2%@=j`BMvYXT$RQ!nIr!j#45(bA~u`&|cgy3e$du$Bvz z$Aou_x^SGqhGU^U1Qp!`4Khih_aBCF7|>QRAn4W3>zEQa!Gc|%9{7MvMC zUbUJT>K<2zPG{zgNR}O@ij8fZFk^=Zf5)^v5ZeDJirRl7TYFtNPxnkA{KCCz2<$hF zsH*G9P7KEF0rOIV$><%d+O|Aj!G~HxYs8l8B=euZ$4*OeqG`0k?mE3D=}Gt`CLgep z_uvw(y@C4QRioKK!1frT_>HL8P&BZ+7PB%k);S}ZC4i1lR^=E85tS;w%2Df3nA16JU5ca^9kd#t)5#fP;UksuzI7?-F$Z6YKW zugu0+bXe!?xS3y?q-821VaUM&F?gf9ZPX3LCKxMppn}Z23m-<<6YQZ6;R$yA<+Gf7ze_mJjc5%vzVaDVd8S<%A&%@}2gkP$jl^Cht$>!F623Sn3@C;gjM z1?ETql-}x>>g*zS9pT5Zp(>+JL}l@0DC)71%SoZve9vp}EPTlqX!HF!p7(AMj#qmg zxZx+yLd@cxGY8Sc1PZs_DZ}1aLAR{4{O3$;>eV?t{riy=J=iZ4bY#(bSz>k+nn(Xs zUJI_>{I~IZ(MK=}MBFg^#-z32X&DK!XU_7CqSztl+Vw4CZ|uc{t@Ym%G+TWd-d~Q3 zMwNtnsO7GDB=b^KQf@noNz%Wdk?_SPX%pGn`t*-XEj*?yy}D$q>Q>N~(fhZYDZ4>r z_W!40 z*E#R`_Fu5~b*=rZwVvm`f4AvpUs!s7rAlfc&9j6CP4G}OMtR2pq*ZI+ z!~#8b)`BGZ(LYXHHRX#m`wywU?ELFcr%a4LMIostnEB`xHfT#PCRSz$yg)LC^1{$$ z9ztTdhc_NgHT<}zNJZFdx8O*!v((_wAjElI?E+pqwg-ti{v9zgyM*32;MjkS`3qrL zjJ2GC#aSf}PSUF<+=OJ@N$(<4DV@NCnawu!RXlZE?O8Rw8Rp(2v6dI0fYSk`(6h9{ z)vo(*UH3nZ@97=a8{N>f12)NQ;)3|gzeDdAp{LT%gAra5s{5@dz1S_^UWz~Dfpag4 z*?T_vblqQ7rlW2VDKazozEFRx%X<9{OJR;-KMHtHI&|{QQ{{8mQ>*btEc)3;L@(O@ z>U1xZf5a|;#~KWxGAXcQfU=8EaSM!C|JJy#B<@DWWL8k!962@GJNu?L7A>(pH~2_e zno>vM-L_Y*SaEOiH^pW~E6rs}*Hz{kv|7X`vhPz-Cyo>Si=6xjGchqSW>4jw%hxHK zMf0_{gSJ;k{-{~oA*2Ri`i|<`K3)_x%MC1$V#pjEMsD_UC2El~y(86Xpn;D(VPg3k| z6A*g|#87OtMtTCQ4Onx?h9?kE-;Z@9z1)SktYvQJFD_w4hG%s#JX{aCp)&#rq-a#g zS*&s-M3{b}d-Y<4GVjp)|0+24Q3L!06@ELg^(vc+Ny7ihi)Oct+#);#a7f%qE2M85 zrHgFMQPq1Ft)^ZlWxtkY3-c?hX ztalU*_t5$IAkd?KM56UQ&tp>&4vH}tjvJ>U_|qROX-hZrWoh3v!oN%Z6IziDsqVz8 zDaJs<%OF;a+6s+H=O?;u{eV5)=t}L>3e9&nSVBhHs7;Bk#5*V0a^-}hufU&5X#CWo z^W3magE@qvxu6GQ9n`~%`{6!ktkS1Vnv#ezN2;aP&RStDsFrlDbStKIA~_dzA%{FE zBUEj(#da|y$lvNlICc ze_vf9h}HZuv;R<{18ZNd3_G%4EX|4Pc?m<2(T;TCLeT^xbRoS`cuZyAkXD(X$6J6MJ@^r_AMT{Jzm&U(0InjaFgLKYbkVom)anT2*VcpV%f zA>+0|eJZbs_g3~gKh(>nVkbr36H~>|laTzLZ0e~yg+N0;R(5e%uttvPM4mG40mh`+ zR68dY|PF^+4)O!H-}6NiAy8e z=(bVZ>8&UU))1E3(((lJVjK`(P~VyM#MQfHyo_fFd@WNjx7|(-c5<0UK#! zSdAQhiBJptg3H@gevq^!!)(r`vuSk|Y}q!9CxRAyb2Exw>HMth;<@f&{#t`F*+RI` zJS~KIQ2Igi9o?q{jn88yxT8ZJ>Y}vJ6huift3Qt4RAHWEkyq_ryzms_(0*CE25{G@6y zAb}Tu4zP;$cPXQ9;>SLeoiYOLko}$z(QC`zqs);QRBMW1eYNjIoker^b{_dX^N})1 z;U~e0r|;wZDM`{8?$)uIo3U1x9uJ&JFjc4ZJIZ#z-=|KpomLuym6lAmU3Q=zWk;Ov zcYW^=#B*snCnyBxCppz_?S*8~gT~A*)G{VBp=biLYI8&fI1?xc@@?@Zw2=+%`QIsD zte3b=+nIW4Vr;@Aw=C*s!l1E{`(vt;0mUFViDTT}HKf(F-N$*^OVFFl{gy{ao ztf(=0+%MR6xYYM%D`mg+^{CDg@=kS*Ndi~+`t4w2`GE~s$ucqF2HEy3dv;9)giqe? zzmIv9{m1w>4U<22_HSRntw%<~0}@C+d3bh|_x3s6y2u}xvP9u8A`=-k6;TD;*{RR1 zG1Sa!K{vB`axv)h=xDNSv=N-V>C*lEgyAYjsly^!kscaKiZrG^NWISWJAf0Xd=g@aN3Ql$$x|YnPVm`;5_$M`BP=)Yg!g3h`W)lk zg|6p;K`zmJ0NyixIb2Q2N@MOZe$*Vd`JtpF17lHun9@Qqhr31Q7DM;CJhRV>jFnV$ z`NrTr>vwjN%?X`bDHg18$zoT5TUu#_qfuHpB!^um+Iy;i8ph&6x{GkiK)aEGh*J^C=?{Ie^z*;H4pVRw36-Pv_Lh3|Awd zp0r526O>_1&&;NKMCOupU1bhTfJ`0;{o)WSRJ1pHJ?&@v85`a240!5F7$;X0!D~pM ziw1Ni@cTqM*n`0NKpB+mp?u5!jNpo|sPH?J`>}N_K)=H8mdfCT{?!`gm6f|~s&@+R z4iDLxG6C3j1SpRUN^w`q32(xvT_mU;L(s}|0vkv?kxi#4dOM8*^3MS(cz)e@Oud1p zNFzVMm4Y`&mS5CDmQ z+LB=oyrC(Fs~Gfsx8XbXTl~@uEKoW)=Ycls@Fh8@vULQ!-8-KUCz`YsusQwD{Y>Cw zU!dC^Ik0BoO;S{$Jl6{RZgGg!yY z+#_R&!k4p+dsijQ$DgA91$J1vc_>kgzE?#z8VpfF{HNUar1Y9l> zNZ=qo94Tg#M8;NzGh=1qA@2ypT(9zsm#9Id@pX?(yWn@`tkZh|IvC>}}o7h&E)B#ufe zo9M-ogfSNz?gCYrpO>$9UcWz<&C1CSl)PP@jQoYxV%R}WqnWX#KzkvxQ^5)6K8sa( zkE$DT3|gg|Hn~5L8Bj!~CJHJ<+3EvR=YKvD2Hx-px6T`x^-O2Ty;NZdBZsfY0d+YZ zJo{{EG;Mr5i50Es2Rh;+eVOe%`32@=W&h%u^qyksKHH8C$${N<0Q+0Jf3KUwI6uFT zy=mQydkkpI4b)-!*YNgnz=0^sK*a9?H|2UxClg4vdgo^w8R2m0Z4*F01?L;DVDE0H zU`IUOs!HBj3C!Iw#;+Pi=XomCs`euuarcaI)@<7VcE)`_6i^iCysaG%)Z)meIL*`x5<#YlODI{cLV)sTv-@D-TY6zoapnr2?WT=7s*N zI)8F^Ww!E>NPOoykikeVNk*DHj&dpggRylmQ#Lf8)y4PP>A9**F1u4PX;dTxR*25a zBDXhe_p~Rdvdw*^;&*8>JJ``$+7Tse=FY|UtjNL%li>|@LvLhj&!voZ+8V}@AXt05 zOknSb)@q@n_`EEGK|Ugyu_vN|VS`tkqJTG;&eSVvvq1;`OL2QsptGJ_?=@?48~r$pPKW`pjyRw+%j%kM03gF7ptwi&^0 zxWavtCp9OOgDW8{d(?_*eP?pC+4((~S|BY&&=JF&1@uzzd+6nw4v!uFU_bp^slLB0yvi=`r|Haj+B}IpPr@}FiMxksWl2b|zl2_VL1;}4k zNiXay-fIArIG&));Z~})^sP6RJ@egFLK&a&NQ4w|QjjF;HT>+f+-4^#ETQUQgu)xE zQs_krK5-_am0NgAbm8+2MIVGC7jLBh9^8CzvNKz;wUx>ugl@($iM>z(&{ z-uNMKQ$6GAAE42iS6pS_0adzAHxd5l9xBLpy~JFGBFO>?LAtkjo&V^bl=XE{oy}zl zag!kSHCc&FN}>{9yFbrt>DHDWb1;@Fc%l>pO&rVr>iyE6FVro7`_7tFm&a~F)BN5U z)|swhh&N?e?^z7ks2Y9!Oss8SPkA2-6cQ7#3Dw3BO_Bu3S@VYeyl_Bq>XEgc!>OAs znmfI_&Yu$I32%yDR^#gX>}6WQPoP(k!h7$fn5NCeoiKOa5myJLNw{i}x{WdrN3M=T zoZDLARYaM_|6~;;tnJ!ZGU-Mpa8WOUnGPp zbkwhVZ;mKHlLKOlW)J>szmk2}zWgQ~wDqc)qgU03cFX_vkD~dC{gU+TAW~hIgZzaj zV}>Fs{hU0wv3lF3d^yD+8j}AAd+K3(C#=1aMEDc_A*9z!qCe|4wE1pRNvz~J;vtc2 zG07y!2wH!Is`(7@joRKav((JEDy%l`yl40go4tHICs{~jK3{au ziVBq->zi6nPrMy*BG2&Ae;R~=<|A<=Id`OE{se+b zmxf6eZS@Vt;H~u@A6*-d8E;0ro(?LqGuWZ{m!7Urs*rwng4OrN@5b~<@TkjV3;}p+ zR0Lmo@HDwPuKC9sW3%sawF=-l1&E6IWtP7Wi}CUUf#a2RX_J)<&`NS0bh}RL&auR$N=e zL3UutlY7j)Kt#5jTX?^yU;j`_2SK*1YW3s)TQiGeI0T7}Gkrgnqx!4uYOI1;$>Bm- zQ7x!}-~t@=Ubap4mqpy%mW;SK>g75lHp(j=$PffGSv4e~XXj;-11o~~gN-NFyeJlQ zTF}wCymW6;8XYU<$91Eg{O;g{cNv1Bu*d$BVaRmcik7(3ba$pcqJo{N%!o%ud_K0H zNEx&1TBb=Tc#8L8pB1fvE~TF~X#VJbLpOMfoQE^^ECeDNP{JJj3g|Jv*_?nrCedPG z8e(4a732blkg`eUQE15^iK> z)%@m_HjPPM5H7Mcw1_DC@QTu&H?WtI%td3kKGk6&Vb*hW2a)FCs!H9D{jwR2 zlc7_``Z_hm&zFIbPAw#J#FZG8D5!A0H;UOuh_-?MqdK>YXVBDDez~XwlTU}w5YEoO zq=$YEG}nms{=&AIRH&PrGBpKETQw|^osu!8gU64_uf^XzRVfX!k?mqtTcE;j+}+m5 z-Bz`xnOD6Fz2ZBlEGxBs823Jc9{xWGst<{}!w%iEug10Onp7RfIRRx84KD%FiCyU< z;4ot>^h-Bm{-$+4TJV0x&b0cc$N^6ThoW%vbr?~ier6AUmoyih!+M+j_kg&?J2|*r zdhJw=puDx&`lKG+R}T^=GuSd3JGm}CIfUusO7nwpPtF|`cNn-?HsO-|>0Bl{ zouR`?>^JDQrkCSg61PKcv;QnZyXn}Dw{ps`WH61^K3iFF?2Mg6-*)wSAUkUJ84U2P4UlKJ+w=_E4e3qkJJSUhJo>L&tDfrw*h}!iC}; zl{>bn(+CP04W3;Q`I?ZD6;loxM7?3CI_;hQy?*_KKTkv>akzUcs&e3n=8?em;cm1^K8dYAMvnS%>}~^m}ZA literal 0 HcmV?d00001 diff --git a/help/sakura/res/images/FileAssoc-3-Application.png b/help/sakura/res/images/FileAssoc-3-Application_150pct.png similarity index 100% rename from help/sakura/res/images/FileAssoc-3-Application.png rename to help/sakura/res/images/FileAssoc-3-Application_150pct.png diff --git a/help/sakura/res/images/FileAssoc-4-DefaultApp_100pct.png b/help/sakura/res/images/FileAssoc-4-DefaultApp_100pct.png new file mode 100644 index 0000000000000000000000000000000000000000..6df73aea2eddbaaf41fe1a16b0c1bcb6e770df75 GIT binary patch literal 143034 zcmYhiWmpti`#nr|=g=_J0MgRkDIqN#f`mvn4BaUxptRD`(m8YvE#2MSF)!zRj_3dT zFc;U%7xvzFu63_FN<&Qn8-pAJ4h{}mNm2GK92`;|92|l@8p6vjE^cw?a0nbhO0rVg zUM7c`HdEz#I<@N3;Ag=56d@gGs`#P8yVi) ztj$y|on$L_qbINvSOB;WmklKZV#Wo)`sYvO!*R3mHbL`I?w<%6kC7#hg(EQR2JE@w ze{%wcp&DsoOFbcEPLFYs`zXixJX(-8>p%U<5)W4@Nj7);Bbru}1-r|JY1-t5b0>V) zMttp+Aa-qrqM;H4*`Fe&0MLKP;t9_;rw|EI5|^1<#Mb&Q;DR}|G*4)3&-`BINC~Sz zYxU^TjJa@)&Ya(JW<$> zC$Q%e@&XU`KN3cM_7ck?cXy`C>0&pFu6@>j@5Lo}+0D!8(bJXCwj=e>C9rC?jtE7{ z80ffZKsH!sKFqtw$Z^8*Ag7g7NeikMYz9estxB{}`j}a$!SrJmI^fa*Yj_;PMyh}` z9WkLiwH1;6Ad3!{ef%oZtoKJyfncFf_*mz!{S;)|84SAnGq+BezbDbJj+hxhzfaW1 zgqAzGKn97bVEpeJg zGVUx-BX{9=e#P?;)YpbfCGt)x4e&mxDsSE0eGmum{ZItHD7b|YNWObsfjxkKbH{SO zf+uIX&2saPO5%fSdb^tRHZHgha^pv1wCo0CH_K|H?UqN>XIcMV6n4x5cOmSG*)t($ z+!{7IZ(w0?&?`b?`H5~#RYwe<`}9h}i>C&XDLu2rHua@>dbV~HR$%e3r*Pc{MFXh) zp(vPZM18ko)%!NJPaKvx`e(e>m`lCy1w4BX;^Qk9xhS%`Dn}sc&1O%RHX(pxMZFz|9nRi7ianRJggR)-A`tmk-SBW&`Bq9tR{kL{kX&7 zu{+5IDGS0ND=BKTC}}i>QqiXj_};uuwVy&BIUV$`;dJlJc0|+2Rlk@okCq*qp)>9- zObgI`Aold{s`6NK?!A=`COLPnOx%E|nCCv_2ji}?SVy`}M}4SIzq3p>crH2ZG`@fQ z#3M)f|3}cvapWGSDPU>#A{-iS${m1Xd2N$IdC1#U*4Mhl-Wnn_tBqD^W5vd@G03Aq zc1_qIYrqDY5Ogvz^m~yyMQ;ccuoskks(2Tp{0=McprqiYIT4w7t&r^<^?E-CyuN9i zRTc-`#AxkrjYWf`DX$U~q-IOrrIS6udA5 z%Q|BdF-qSsFkC;>!6i6!Yh%-6;WFvc0!9n>aWXRN#y2GVC!7SY(y!1Bn2$%R$ znlupR81>`&9_~Dl`@~OLE(DDcSl?S=uy@zpVE3`py?E1q)~kxV5x#Z7`)u|e zIWz|C2=h}{Co5`?4ieTn5-_z`#YE=t>7t1poG6n~q!nehL3|Jj4_`e*;1yGpuU38KFAjB5U;098J?iga>*rI*y#1ey9G0+~x z=a?tBssIqgxZ#L7`f)Qk*n9IT30bRI$HwIvv%WFDE)tgkeM&kD%QSZp=FTb7Ry`Iu zIgIpo>Uu2a6gof13Av&&qmgEh{l#8Y>K7@_{JNNV71Ez*!cA;3T$91!E-#dv`S@r* z+j+OLnMe9JIXl007m|CY<%I~;ZFsx$gikojN7j%>-Z4wm4nQ)2WEFlmAMZ<($iOYdjkR*oe9w@85G0f|D6QI-x z+b9DPlA!CIVFVAxvL)f_hO}QWe->SL4_S5_2B*sBL;7X3q=CJNy6jUCtN5!ZPFM1z z5Pg+yjB^htv1_lw$$JJL6g_LFEL|}xxb-=%A9_Qxt9PD*^-nwCzU#kv_jDs>)>=jU zZb1Dyz}>O?vsmzyw>3@$GkyjVxzqKW4UPMh<^*o`^JO7D5F!lNewr>Pl^fO(0-bwt zD&Z!FR=3@ae9}!|i&%L&_EZ-+`aP*GLG_t-`8MmOMZr^~+-JH}8R2SR$h$fXW%JL_ z;zj`30R~K_E`@j;_XkK2yb-5qRJHom3#@*#F60HYs~QW_sv~dPnZZ;=KUj%`o+fUx zFyV46O~3m0D!cxcCS-W0&g)+`Vlndsxz5~76Yk;O8dR&+ zu16Vt0wmw(xM5_WiATUqb?h04-8&FRuY&P2+ULVNp%B0g>#68+&HR|8rgt~ zrNI33t`+*idP~&+m-kJ}*0g@x@x{rv9gl3VFj$}a-^<|fx_w2H*xb2i$(uwBZd;{G zO2f~hJ$v(*K-Ok7S196e8=_fm$5ig_nAn3KIep;*9RQb2M@WovNa_4b>8(m zWrZeJ>Km8FVH-nS+cqWU@UA0>3ZxuF6+lxQvx<1%i|CY?i65u-Hf%k|ITd+g-goM! zTKJHYea)FLH<7`I( zhGo^YanL!+JKH}BdmPPng$fPTfY&fh12r!#2sjStzS9D)QnGleZ-$~Smrere=TH1k zeA~~zR4iVVd-m8=kPxR!!1nz_56y99Y+}54@fP{)b``$dtx{L@rj_v$f<;yLhog(l zLPU32$*wLfh>d^C4iYvTyfyKPM)7w^g@S|tx#4J8;;;B~Q%N?N?PF1!F+pZ&Dh;jA z&%#g%A|e~@L5F)*{BD7Ly=)-fy^k{`H*4ovCK<3&(9j$L}QnpH^gG4AzNSkse^DpDgJ=SE^~* z5x;4?XR>6}y_!lF4KfoZN-CKE@%>n2cx~?)Mnq=#mz8t7w^W(n8nYc68tvlxfe(emcN)_KDS&zCr8y@`ASk%IUO>nOAR$%zq=lu zR6;l@p`Ncahz!Nl;#l!U?ujgBLt40bd`*dK6D2h&eR25Clrx6Ljv3uLG*PEZ%>B#Y zPRhg#^<2XKA7LnX>HR_7&Z8yq4ozvm?7xj2Pd8Q~p1{nwn`eVAK2}QHX}-2PB&4|9 zd&EAPF*=vZ_poY=U(xtXhK?X#md|^Nw=h)-{e$3L@twNRRti{xrlcwN`NcHHHd)>U zDA~@vWCE>wZ>k=kjQ6CE_2G1GHY&*f_bWTHs8 z!=U}uKm3ZELCk&lNqtr`(unvNfZsoW zCe&DTu*L);v`EQ~k+^lE@Ev}j4!myB&jgb^K0c&<6oH9`nI7N;{tLX;BJ#qz8B1RB z9sXw->{c@o+UhhS&Bk87a_92_<`_otb^L@#w^T*$q@tSTU}Q}ou8J43x;FuSXoJYo zo|=S@}+5mJ5~G;D!@ejoExuZ~FG%efq<{cM|*$aLqtcF@r!n zNul51n?ckKD*+EI?r}f@T#>^{nujWy4M)mED!WkImgy|M0XDlu14cJrtRfI4Vfqat}erVwz9mP z2YHV&PODkCC{Ce%hO-xGaZg4YcZK*AdHml_`Ln^sj77(@9Dn$a@{{e8+c7l7snn>Pg+^m4G-`xq|#|@4sNuEsRP(fM8pCjyEN-kX_a14loXkI~tObQu|39!mB<@P4NRs<)#FG(=p=IXsu_0sg9 zBdXyJ-{nJ@@-pp5xXQ~e4E6~3+c_Y}!vh--H(C|BnPS(0_~Yg>hI!ix>5h5`e&qBE zL)&|eHg~dNz+ADvb;+S}S8o5Edq_ta=v`oB=+wp`P!Pr3Wq2bNxpNE>sy6H6e~o5# zvG1p59E$OTpf;-iN#A7k>kFt&H9R0-B?%2HkNF+R??IN{JA#pab#w0nZB-O`t$NoiP8qNQCR$&|9BqBrf)A0 z$CMOhI-Dc8Xk@kOZEK#e5JfuDibQs!&uapnRo+lblh*(gn}fE@TzDUUH0xa!nY2PJ zG*c!OGg1DIw@qTN*nRSrOTJ2QNOWsmNzLv2knw~CX z+wTL|3l9reFeOjQK%$iYX&M>OhUirDMhNDHvEcnIU_$Qv7sS&V$AQ+zZ`#JUglk+B zMl|@Ra6SnOT6uQ+Z49Xq@MQMPVh*cA+iX8_nB@?=c#O<(Qe-Ie>S+pOd|tKIYE23*q0d zk)Z4Z?SzVxb!L`YT?*bst)q^$pW<(|wmDUxSC#ZrKZ%*D@MUOTcAn8~x#LW#Fg5w0 zSfcZUz#AhI=kYF=_6S2CoR*)C4bXPNwaJH{QYmE*JXs}8O^`g)|j-gXCBxgf?=TJ$OJ*lVqi^OT@;;Ue} zt~}m);vo;*xJO*EN_BUSmX8G)us4N~|Ics_SLDvGrH7q$QIvAQUvo#-eKyxr7zx3O0(h^3xwh9vs+OnhP4ct;=x> z$=~xB$T9Q2maL=?)kveZ_S|9z7<-;$)omnq$6tB1tmb(&@pN3RwfP22aCBan&cwZ( z=I8%84UT5TS>dQX|qX~zTQLc`8Jj3|O+j`Iss&l&Ku0Pf$1lIj6I ze;~3u8Q^McLfdZ1y9mm1m3!1kS0&YOFj<(U6lft2Ye!Sl;_p1 zGQ`u?T;-wv6tc3KsQDfh zLwL!P*q=ucjmh1c5HSNcg7kxa&owcGI$?_4)dgz3S{ zY3}UoMPY`Y$KC$sBchiWx|e5Ih}4ct0@IWb^58o#_rq{JGEi)TRuY2>FL zbhfTOT>j>665iWivw7xCQ!3JdrkHiM9UVKfA}wGgad{zllHpDUYC-&hd5|&VaL08Z zIVL|>uu5~p95f9&HgM)3DZt zxlUZ4mlaAVZKI4Aa+-8OU4)#eI(;!Bi-1dg$o&p0^4xz|^@{{>#mpzn46}7inoBZ+ zo&E>YC#05so70bwG#=bGA_Uu%v&hUnWxW|a5y%B&pK*C@dA~Bo$Kz~TEHsm7GR+m9 z5;O}ZQ2JA1H}elv3b^Vl(%!{^QHg}hi}pL#^}j`KVp`JL>{XI7cQi&PSo-t6XbD~r zIB6QOgvn`$cMMHbv9U$bz#z|vYq}C+s4DvzWV6ym?#)?B3y-C}^8zGFf3u0l$}hQC z6DSiQ=2Rdw8I39KCazXR(j8QFNNosU{&jE&u6B37uC&NLw=57_eVxGEy~Ab~LzPnq zaF2dEA82C8`TK<}AJTwIYNQAE5;3D!$o=Hy6PCblQn4W-2vzK84oDXjY2lrj#PWJ8%v%WI{jrnxilmWum!T%$4#8s$23?z6!Aq zBW3e^Vs#rS6X;%}-(UmUf&WzCS@QXq`&b|J(c+-nr!sP^8;9w??q^QBIvNy=gq2=RcC8=X7c`|YhD5Omtu{=&a$3Fny z3`c!}aW)>umWVPvFlHCu1M7vBC#c>8HN&o2F}4ZqY?R(+2_RqO{K#FDp3a~^{jxvI zf1c9BC@5L2ih}BoVS(s#YBH)d7;$|0rDlc@;qI%2cg6Mi%E5OfW)cr$$5e6HcU64U ze?3PAKS6lR0v}ncqlH&F`^GIskuq!I$GjM)B3I%nR&1=alhkHjo{#7R)m_t+K~7u7 z1yZ4n365sheW?srsJ&(w4K-jNIC*W8>3Nlr(I(k@S&GN)@N*MAU@N>zP8B&SF7Bv# z&}RR;mcEm#9L3?fQ-eWu5vUBGuJ~6^0>}3F^5TWMF9j5~P1^dm@Tk=cGAB7C84_Cq>V)Ff_MJv0O^zth_lX-By-7!#(h%8SJ(%NY z%G2!kXS|~H35ktLl5+D8TI{s`D%mB+KSSMB$ld1tQRE?qTX}H5ngR1fmEs|nqv}q7 z`anKBnAExKHOP@{8b^p4GG~zr$LapvT$j9scqbdTb!!K#^%p4sQhw}h;c;YO=wguY z0k2tzc)N?Tmb>n#t zpT_sd_{5T#rQgf`2@7G|XvSp2wy8_v565c*kq?N6qV-}`h0fwhAeOtGEg8Qv`ho$?bqKE&sD*a(RKs5(K-tLo!5I#GS<@jF6T`QFWr2 z{9{%R*2!kES{KPgA`j2!nBEL0{vAyz_TbL4lHfqbw)#`$@IfLv7Yb>?R1<;k*`;*Vj=+ox->sA7vp-E1(^T=Yfz z-v4uNB4@A-er}!I`~XPx#M~C5@8jQI{yeT;SgN#z0dO&z0f&yI82MrH_h`2gg{tEK z1IOm#4HsNzUsdXsJF22N`#X`U(W6@XF?m)Tr6ioW$^Xd~7y3PCgIHb`HoP0-u9Ga! z&<~#rydG6%xx?K2{aYx5FZ`91-_4N_Y`Sr82b|3EU*KEdQ++VvpkbeK2URE<(=!)p zC{rQjT*#2qqM@9W6^kxlSW@cihcqkqKB_$$@dZ2GFDz->@U$L_qKytzXX`ab>pwM3 zoFsE4T!cQ;1)fMqgv9q+q(^j%9=bB;we7EZT?x_*%{731{wTgS%Pu)+<@+*JxrJOp zCg|R=WFYdyr1nLgP*#aywrX-RmU5)p= z)~7s*#*10M0!&h|WX3iIB5I5_J%A>GI^0S@0jXro0%oDeO)&)&oR^_rXSLKD9f*hE zLDp90?o3Q>&gy6*tRU`#=uPgx>|bo>KP-fPRr^RAS_YCzbZ_4Zm&(?0i5EF!l*a5o zDvb1AWy0R*{^vwLfWis;25jc!Vo{1?==cBzoKVLYpbfEpCw-aoa&f) zn5NdlV-@P9y&BS-1tumm(XSOo7dzt&&<>W9SXjMc{Vgumz?%(=?27Gt`epC>H{jA@ z3mziw;en|eC5M@nvV0l7w1IHjd#u=#^6zkVY%>RiZG(i67*F5&QklzJnX}-H=*LP& z3K@KIAorY0hcY)S?+wK&wzM^c^^2K|IE3{-4#43~xJE2^;s5-W-4HA7E}eh)g*q%? zc6HS4dQ%JKG6I^5$I2p1)eJ> zZ0GoZM{P=V<<$@iNY2w3dO z?;m>t4#ihMg(STa5z>@w_%sh_Mu!m!?lV;7wmNwDTwJ8lkpCbbnLqoq>~uQU8&XH5 zwcc7m!go-2S|*|nkyS8L?YZN}x-bYQ1dsgTJN7X6 zObp2p_I2jtGa>(`qsr(uK_Q;3c_v}9|F9a;mCujiRe4Rz>?ExgjQ0sws#eP_J5jw? zRLboE+WmZcpz-PfHMm;d87({F<6f~_)8Jr;IM(%n9R82}C;kjr+1vke#Ks3@V_7tl zo8TYf@Diuba-ckg3RWC>498q@wP(ZJ(kxY?p%crnLbQP!#GUaegyN2 zWK+RB15mD5{$DHw7}v9?4OvR`<>cZJQ^Tfx?bTZY#cDI+Vfk~_TFWaNh{m(c%CD9_pWQ}U8d*~kW z4U{}a%rygPne{{ygm|omrbH!_++R(mOKzT;xiGUk0>0TKh+=Jz^#}-rkmb-oD`w?w zFvYPhZplPL|;fEKB_Er!w_ujlE#5(q& zr57354P#r~d{5B=WW|XGmBRx8;bm|Ija;=^G6WRZ$e23E|rAyK{GN|SvTX?thGR1eDAVE01RTq zP^$G^1_whr+h2o9ec8haf8jMz8pR8Q6I$Qe01dD3nxXuepTiCtqvy|-&1g@tO=&%P zOMSbr1I@#wx10;%f;SJtTDPW6oU3dga!K3M8N#2(w84VEe41#>^OwSe=T)@KOy(vh zt4hE%P_Tvtj$hnnd54tT?-SP23je#uli4Wl+f`HvuVL=KmUZHau~gxg@lU`SX~5cn zDeNBVc=^9D%Z;o=5Y!pt1-;P}5B-sdl!+z#`HM@&4{Y{O-q1rP*+{D4L>u2zIwNTE zM-(=vd?-bEp*gEH(#*admL;3;s&Upm&sV%|`Vx^#JxhifX_wgP=u7+sr zbZQA$XerU`9}d~XM6VY(^JLU8*Pw39MxwlE}dijGXSV~naFcsMGCnu*;lmg z&Rr!vc+Z+gjN^M9*_*Njol%{5p^C*9iXGV|1YG`5f0;d6q%B1J?*(M=%>~u&GG0#< z=msPS$Vw<;daennLLE*q8Z7vN$EPdzA^koqQIuDNjv>D%v^Hd$QWSRy5U4KYFC?oz z+&Xr==4zwfQ+hMI&@Y04>hxuJFP~6tM{yagJO&Q1PnjY!b2?OZ(o-XS^BgxTRA06| z#c(W0K8--XUolg^s~O*#DE1X;=xF*Ckn(rTSFG9R3w8C)+o)f4SY6if9B%l}Em2-w z6w9>lq$7Sb4CY2qH;Hy>W#3O(CWw8-xzovd8GH{V`0ZoL1sIDPi%pS77`2p9#5V+eM~`2h+dZ39gFo-*$a(Jl7@ve!g-+Ngrb=C)ODNk18n zV{>%ZIBOgIxG-J^o#)Pd#KPR3BV0RV-J!A1Tr=H&n>ufFeA#x>I_l0ID+`V0cCK&! z+{rqFUFL64?EB9kxmTb~6Y22#%42~Khwt3bV7}JnVQRo$>Q6tD9G${UkNJ7*F`u5T zyN9bd^(a1-}dfu~gLcm0US=|T0L zkjjot2Yj*3$54e_R|`>ZQ-2hcE}BjoK1DqZs`)fy{6HxC2ArD`?{7hmkY_IpEfM>P z+Ji&~D$D!h>3+fFTy0)l!}`(;@VtMQXSi4AIj6BeAL4;oS|63?VsiGQ6`yPej>O~X zOzW{buHPzRh2Iuiw)b{Au2%;l^}}pm+x>J!_)Oy~?_94`>&dHqy>?--o5oRp$AF9P zrBztYqDeZtm(YZN8AfxsNs z<8IF?s)nh$oX@+A3=V{oRSN01B2>%zVp}uhmUPOi?^wIk8JsK(VbekI$peH4XI8q~ z%^z_5!uZZmTzs*QykjWPTo}>QvbvKA|JBY3TER30*>Lk<$*uY4DV$!T^=Fc|i8V;!e3oZRygnN4=JB2ujO=@yUdC zTkk)U>%MY$5f8b4Jvtf?8mCRx&vG2CG$3w=o`W;seDJFV8XZ|}7H*;}4r~an3EL() z92Wxo3hZgBl6|@w2CnUq_AFXrl?LuNyqgYVDx&?`tOK$Poc3lVWjf(IPS5_d znSn=6c;+r<%c|nRWboTY=crqwBM&E(&?US|zr`kVwB{><2#xdyjpEe+HBVd5^E!i_ z>@SW7cd%Tf@+|Pv4A}o=T1^9fJo8HanuTsp{7G~-CnR3KT7S+HpYDe3P(e;@o&S*hV7^Tdd_G&8vpNdQI5e?YSYq66vYBS)%MWlVsU zXh`CcV~Mf9J$!|P>LRdCVQhY(M)yZe5x~Q5d{|5t9 z_xu{*Q#k!-WwL-@EU**3yheSOwKh-rD!k*!vmZB^eS-wIBlyvh?j>Gx*dXK-Me^b` zAn|tzgz`cKW%huVXy|H2H5i`VW@Xx|co~p;m6)%mXq%`Pvxf4W@n*XDem+g)Fg$6_ zGtwy>R$_S+;-3*u&YyHA z8PFygt}k$pPIj_ux$f$+U?btT%QqAxz1c6oYUn+Cic|i4gb4r?ozT}DQ+&L9oxDe>CY#qXWNg`=Lq}0^02?fiN3pBk1rAfLynqO zlVF$Vkv_mH^T23lex}W%N;WDQdQYpZ+QaT;yh*$FM6 z+oGh?n>K}AnVJIXjD}^7aYa1X|HdyG)j1Yr)3vlW2q4NB0Fu^!tP~8?&kOka6|hbX zu`Z1UNup$(#oF{YY9rTfITYCUP#M4ck3XYL7PojWq zW5y(yLFnFG=XOo&q~EN@06+UdUb8Xh-t4#KcI$8U=X5PPv%2{PRVGG_O%#y*)>#es zR1WeVTN(T-ill}aJTo0+GSVPnd~L6q<3>zcxZA8F>p8kyq)$mqZthH>{TPfM;BCGv zaJP=`JR#Lwc0mjv`{~f8!mEePu@L?r&57JX;?<&@N4Ed9flf}g;$DZe@q@_nS^T+_ z*MN$N^sfzasW}-7dQalNb$Q%)<8dDWUl>bNia|qLqk65j+?}0SE?Q3XrLkjRe?Fsu zRn7AmGHmYZY#Yt^%yv;y+~#!wR27ke9BSB{@dn_Ml@k z*#v%n(CM6f(FPCW=~eyIdVlNs^AX=C&eupkMv?vo+4QQWzQjXRW!nJMq@Y3&POgIy zbuG(QaJ}I(3NF};x;R0|`7{+K45L(Q`$7KRBLg-Ph6cz-^Zg>R-}8{Btb^R7W1^-p zjX6MBgOl;n-FbZy7QaXz-DTwr-^ImgjAZyq^R%llV@_8wsaB%65pRt1KQcZXC@tYs z7fRYVwZWp3g7Ewz4^2f9K9hM(GiyA;@}z;tz}vR>=F?k7`-B@yKuR@RI;-3D%g)Qq zdrn`naf>UH{OrbwFXca>^znkyi1(kfZeOt5i(-^L>(mB(ZPQ2Tilz1;+RoPc6f zXeVPiiiTzSh|{J2OiJ%bV*Z|5;hKTS)$m_N5M)tt9s$c8a@4>_epJk99@Ht9PLM_w zOQ4BWeAI}IH-zBr?;{aYT*7Y7$rfJLdNiAm#yjgsAxj2|fIu@mXfFNi=-=rgTPZ-WBT7^!-8v`4{FN z=n6>{jBX7?t^++oGs2u5A(Qw$v(`{ zJ_M~exON=_S0aJkUoQT9tctBQQld|L>ZxM&tw$dP@??%@J^tpJcq0@IB$A~<5Trss#n%~X1bQsj5C0^^|w(_zu|Nl|CeR7V36pc^OAfda2pXR31~xoaZu zdrM>#iPA#RxnIrV>oJ@4+f(E1UUb057csJu3sQ^GTy|fT;-wHsuFesz7>ehuJ{{Xp zFpsot-;aX5GQ!29%pvYFB=P2e0WLZW=JP5*-Sp#WA^5&fMT@x#K(U`oP&ck zmcIWwjN~tEtE*uLN=;hvZkpG4AZ7K7*`Z8c-U~GCcZ9?#*1NXsY{n&mJHE>o)PlHU zOSi>b{UVENIB534fC7RHWkt6IQR@mgv7B$f@UXLED*(bfX6s`Xy05K6m77uvIOBMz#cr6ek_R#=Q6|g1BhxokJ(}cLrv~4u zEGatVD4;?9B=`M#c*JyQPF1}WGhMl}QJ?kLc_c$_`hu6KwV1Qm%ee@^&>ch34dX+Rrnu;p^lM?UfwsoHAI?Q$wmr?480+kF2VY}@_R}9Ej{ol z1a-2e?BArz3RH`7Y6RVy=#8rFS!nNCs(k|TMrgIEy^9pkO3am&U@Qqjku*B-U3n0H zkyyG0D=gS1c;zS-yv`+@5EwLcZGTu&$Jk^uy;Gh$5jM=%4x*=HygLuk!DvHF z5@!ItcV@l~JSo&7Pkl>gD^9EY`{5j&gk7-tRF7ADS8L>#e_%IHteN(zG$UINn0QKk z_Ej@!$tz8dtjYWfHn$-`Z4*CAsT5|r!$H(S8!=uWT*hLq`Z(70W zs1mo3@e1m@AQe=?xL5{mOp{_Cq=A>khF)!DoM62d<|of;&{#ELBSlLs=z;xveG<~o z;U5@c7M|zra-7Df+GPo z>4G8GcTrjYj|`Q7Kt|)Ogw?P9&lBu+X&5dUKKsSr42(2`BHLjP?XX;2e?@~sJ6qd;Qn8B` z^E$|vL#(FK2{>ELzAw8Jx`P&U^+_ElW^cWIlK?k9aMD9i-`(6LESXV5+l6O5pAVd& zV0EV7*st)}4{X(azeNkQ9J^Os#PZ~M@8ffq;ym5G!`#7FO7`rqd`Waya&t)^v>h~Z z`>AF0O$s!4B8I;fM>}90&tzKn9HdBlhdgQw8$_x81K&P!VQ6BM-LfV-2>jc}8+Rva zfYue%yT3?zl|;AlCho?*C3Ir9j_(Yd_Ua_eT1}aNow2XqoTs)g?zmmBrp5}lpN4U2 zv$U9e(x6jnDrG2z=)MKHc$^{`Y55M{~D33VfqPwR9 zzjvyRH(4J2;{w|meuQ+Ik*D`TA$EfHw*lIdGr{a@(qp3>R||QA{?pqlNPi{A?wRY- zj)by5*Klf0+r`Pjm4l>Tvmne6zK5o5U#Ehg@$Fo=K>OXu3#agHU#Cbp0C~Q6Fbn~W zer}t`lYn zehLvAk-N?0ka!d_-OBtFC6E))YDO8tY+jEBSb)g^;8ZC=}Quju}R!7nN>6(XN$ z!GNZHf?^gKiJ;j~MdTgyFy`O%FAd~ow4g9`pGZ=@YfoiXRZaP0x72S(2mz+xq;z>` zmP`2OZwBqtDh8FBl@)eo6e7c` zpnbgYaJW2bKISGyx(N)d@Yfb7EB<;CFcE$%R?6dc*mIuAy30g`Y^$vMs`2@n_Rs8I zA_=1+f6i7-$FJNqMmpKB$DPR^eOvGx7|eMfnsJH8E(y`&hK(!_aoJf}9;&yPav8v= z_;cbRPwi1w81}E>#`1!BO07Pj5Gl ze7gKTA~gDnAz3U5J+sxSksR^_#I}x9al!>?+VCw;9&p^k34}LD&HoJA;}d;c2s5NV zbkhNnh-;-Ba)xOIj)$!jto~Yva@3#poWQib46S-r#OpVa<-Sg4Jel7CU*rsfzJwCK z1IQ}I7fc+;!kS3m3lR}PMK4r!Ub_c?;+YXhf`Z=?>HLv?A^0ZM^`?Er^0nW3#i3j- zQzt3v#8ztU{o154{6gGAO&4HnNksN%*y8iSh0lBS-=BPv>f-r0fFl}!pIGI5(E&r2 zU)7zG%>OsS6#RDW7u7MRJw|OqIvp=rn`Ml6Od3qx64SubZ+^q#&J;Le?u5s_W1HB~ z=D{pIe8}z6dK^4ia?CjEubgQjZM_)tMfk+2&dXNzp3YoOo~m;68HdBG!R#7ghG6-XShC*zG!127P1mBH@Wh{*10gIla=Kk zb7eGRzEo{zxI)Jj8;#C?;UO6B20gV>412ya`KCbSuAMf2z((!V0q;^^Tz|~Gv*4aA zL(A{gOJ>tgur>Kv%{M8z>tC*J2}fuxw*ILXo~~2UwyCa{3wJpr?otU5n3u<2+aH2? z1zt~Xv?9)wOl1otWYLnFCqM!XGudeE`dX4Ds057mWxvYr1tX|NndK!ZV?Mzar5= z{!xXsTCYOen?n68P!Ab7KdNSwP6G{7q=s0b0G+K5F}47osHMFVtQzu_JI&wB7I28g zj?^2;;$DD#KV!~oEPzv+Xb(Z3?H!fS{djS=lGPO1`E9e$nC7qkEynol^hZJqL>#G1 zhyGlqx4k`+-%CR`*XH76@U5aDzF!YT$onu05{HOvb1O9aupFnvuO@Q{&yq5cbJA@G z%i&VlK0d_5$2j@=3;7c5L#rAJ8wSfdM`N{I6O+?|_;JMmEdTchr$ar^+hE7EiY8JP z^k`xtF|Pmzs-Z(9YOSylVc2kE=8kF8P5em5-$Cv_+wRH#NWF!0drz}V;<6wc95+{Y0X~Z{_3LB$yJg8mbVe<(IQk_{O%czWwF$Q_WOtm!Ahk~T zAmrU?q(FnPM5vCgx&{v?A3nE>F~enIB_7rizqOepGF$IwOZWGP62AN2%D2tY_aqI( zIg)ZyguQp;a>8;iF^n?~Ss62DNd_tG0FQmOoYxsd1~I$ zmfaV{c#;};P24|Qh4tm7g$52w51Wk0AGPfVk&hqO0*x-BHaVbkv~n$sUPQbi#(U{{ zWQW>=#fr0kh8((wxv~*Ti=@LiBJn4}=OB}4YM36H^fD*wt~nmpZ{s+;P>$AEXg2;o zs?IVhuVv}hxD#9x+}#2McY+0X4IbRxHMnbnySux4aCdoe3GQ+iXYX_F`1%L@gE4xo z)zww=sael4=x=L=No(OYpyxk7r;3-3=F%Z+Z7aHqvSk*#o+rm`myPUAjkR1}Q=LaA z-uC|Y7!S?Q+$O!vxsbzG^QuD5LL}sni}1aaD_kT?)DZi8rg;$C5861jk&L{N9Deid z#hBVzL%rslhhetdnLOtWE}2=%y0DZJ`o3J`P-mZo8RH~uVzt1qAnGId<4bCrbs_Q8 zo7|~-w$57ekf4nAwsoNB>n_Rh1P4K^4wGa#9FGgoC+J^b8NeGo+Lf=|vE_Jj>iuu; zBElquKNN{wAY7nQ2WAB_R+I_~xT-$KkSE2KWr|lG69+zNQ!6vpvjl@r5od>d#A_Bb zZ(kJ5_ADqFpRDl@JwzjMY@RGrSGyN6@L9G0f`Ph;q^;r9&v%)>$ce3GxXo}b$L-g+tKRsT;&b|bOaq_3m{Z~X|o`ZY; z#+>iWMUL!GE%SZsf||*M@(UJOGY4YCw6$>2cO@_x*>y?|MF}=%Ozt!;CWV7&SLc!eIZite7<%ffqQB^ z&JG}n(udq3NlO!?Cc;F#4ye{t5GAMPOJTR$jtW=cmsTA-*tcKw~}FUo0D>85sg zA!)u8oG}aWz4+Z3B$6-H7lJV5{OmVT?)Z{uHMXwUo)XsvQ{aB#>I5??*6g1hl&+JS z=b!1oTvHO9r5SP{`e>-8Gv{a)+uBjBP8c{}i(qG;M$F?>A5aOclbd0RADYjD=O%UgmF(9@;3NiTaQ>SZhi4ux5L@6vE&6x>8J_J zNNj>c0iwZy{a_0ho5J*XZjs0?jG(Jlm;>Qdfn6a->q5EX*rW;>)fG1#7g`f4FMIpj z>&nn>b*$Q;^jC?c;ly%>xUs;Ka-Yg^HE8^6L-qTp>BWZ$0YeTh?Em4>hvv#SEcbFR zC#kY6IYFNnqz9%B^Vie3oz-L(zfZ>faBLAK|H#M3CG{h8e57qE0IZtfK3f;zYdI9h znl}uyR+(2ede#g~Qw6O0ZBA4frhwc53qr|Nqdc+BF(OO6q$`1qk)P-8=FxbN@XYa) zdv}8C8m&&0*MYe%xl(@#p<1&v;HZ%QKVmF9BuuQW%%L+TAj?^|b{)gUk#P|BQD^j0 z|MP+9=22hqf@_HB@a1-iG7DVhC`~eYA{Sc4*cG*>E*B&bC+_)DG_IdSLT+o`gHC+bHUf2tW>@JB`o_rbt|5) zc+K5FFT(!^Y^y_N(L>svvwIyYh1J3BG$4M#vt=!)jHxiujMw2}l=*_|tXzblwJkIU zvQ@~EyVD3Dk>OUVq4kZUGn0v<6@*pop#%!$(gDi4r|K z3$Ys;E`fL8#Aa#-gosmSqr$&D8Ke}V?AoD@VZbLag;;$;di&Hto%uk@^_Kl;eGWi3 z+W(dzktne*);U`~$xx=C=X_E|9RWwQ$A?sa?=P?*W@d5ecZB3NJG?}k@Yi+x;4{it zAJi2R3!VALqQE6n#<`bbFzXW|)ni8xE8d5nLPb?29&D`oIKuD-NOuZ8WYUQGwKHt^ zb=4z0PcBGGUPPP2yayKgwmyja^Ed~;$}NCgQ6pF4)j7lGllF^i+0L_#4*mZ?;7{M~ zgeGm5!72|3dj;xN;IO#xKshtmc+w&5Y`|z{2n)%Xd4wt z+{>D~978wY5qqcZeIgL4tJK}Bo!0{Y5Y>Juh2`a-?rQnv>T2$Jv_g^0D`Q>cpn#2T z8m{{70^wdatsQ962FwpW&)dDS&r#0*FKPof9uZ`wWE?DLp5vLDd?qg%`k=xVFbG5h z{4TjJ(1Ff*=4Q^81Rm`-n?NelMby&c8g;iKdl!9X7O!=_3r_oMTNu9 zan4_&Zk?QZdwgZLQU-AdOTHKR=;Qk9yMP;$TxWH|K%Q9Qk;G=4ajrNG{eX2jt%d$* z#DQam)1&clHo8w#g{32g)N$H+NGgFNeY0OFJm2t-HJwauj*9F=I505kEfixh8-s_}T6kQ}__;+`l#WfkHw zpw@_e%&@(l`uermKMO%;@5mn)8I>F9l$h-r?9p(HmF7lY=R}h|PQ0u%`OtLmKwI^L zA#BR|kt$AWTj3qq+^umU)RShhZmLjE_WDYx;mm||cLvv{{8Fkihc;N%0vh+JR2 z+u;Cy7kotvxq!Mg&fG4tV-ei544h2YB^-(WV*0RH+@1U{ z+?5W9YHpSWgy;rp#Av)8VEWXN*Jay9)kU~_Nq4N#FV9b^*H;tesQF%6mau{_ySEs> zeLNe`|M|qT9GJWQRtCGqqId&TB_kze`QJY_-nAhI8*eWgM6R2Do#%+1=b>_*IWQr= zF3WbrnB1p?UK0Vc@dNH5Pk%O^zb!GnGc%6>IYkop0N5U+ zvrPEBUQO`bXlR8_sRWWFuMCsrKtdW?+K5kIZ=wxd_I-q&Der9{D>T;ul;{B`HZx!I=KCe1t8g|?e>ojx(2Jcn zcHJL{*mz5)qC4gzdHIFNf2ttU7o@6ifIvf}aaU)cch|Phr*{#iCXw}Y+t^u7IK@R{ zAMG|~$i0SOIt4H^FWX6oB|3i^oL|mq=&AXw$wP18ck<~cX|&aMORui$Qm>GlGd5^6qdzDtT17LL~bhDZl(`;oj%ZdB-^!V@6NsCx_z}lZW)Vv@)FLH4KdB-i|w8 zk4f`~T)H;sT;!3psxb-*cqlE! znz4UH4jyz@ASs(M{Fy^PuAc`F0wmSAS;n*HyO2FRBW}&X*>Mpm@U%4X0sQ?01;6mq zk&YP}U{4DG19vshoABIYD`hx68&T_EHAoi*Pc#XR&E|XOa^j<4^H1()3;Cg4P7g55 zxk&Aw+j_7nQNZ_FfdzMk@QV#3CR4*>%A0a^f1p)V)c@P-z-nVJ`x<34aDFHi$!gXo2QCj;XV?RV=Qh4rUA8xP~aL2+eY9vc(#CL_1pAf$&+ zs`!Eb{`=I_5YFIOi@Rx~5Z|wECE{7j^hebg!q4ihxum`M5xD%uQ8!=G*raFOsv_(-~(j z{Mud|m)c2;`kUM)TC-HX9!5)otY&q^T)oJ2vxz$*xI>%8Lzde^vEe@W?+b;()1@R4Rtv|ufo zW_tZ#3P=%`bRIPXjgflESw?cgFw0mM$$4MKFYNP^)ePdR3Bh10X%4_QP4s3{urA!dH{lu*u!g&FOf7BHk=l-R0R+^M-`4=8uCB%alL{ zMKzUOnyc8xrwoK?!u?JgwDUXXpNiC8LReS&DTH<{Sb!*4kdaib81GisVqLtI!Qof| z{XAjJG?G_^3=KPfl$TQc*%qhIXqc5YoijjA2mIx(YB5)r>hktowLe~D{E}fVDfyGW zc5YHm(k*?Bra{yq;rK)KYhDB*mO^m(g9pVwz=F<_F>miaV0sg=@zlPdl)Lk8u9cXQ z5Jeci7@E4hE?pzicyjUcaYE^uZ?lWpPSYe{w)yEe)ifh??BKq%^O0`CKY$h&8vWsS zNbstBY2-%P5A(#4Nfnl`5;TAM;`)P@QA1_X5ac+teyYAnVNyh|Q0n4}xV0lsQTFrq z*s6HS9*t1@#q9mcaaF+CPU9Mqk{6Ea(lV3&nIt;ou>G$6Z=&rRVCi+InB0=ET1)}= z43c}z8`V~k#iZ`7#C%R}KQW$07Je;p;R?%z2)$fXif2-@a5Sb_#}W`?>g+(3$6@R9 zwe}U*g>l5_y9fd%jio>k+q->g`=iFWWb(4Q`(cphm z57Jg;q~k79Yne_2;n@Sw$~YA{3WG*CbG?z<^?)s+Y4GXbK>OGGOil0g9l|?QCUh&M z51b0c?^MWpICyu)qx+#t$e!WATVxh}ncPs2upL|0CbFC1Xnc7iM6UXlNLNxYiN@Y1 zu}hiv?6lDNdb4Yzc z{R|pof}n(!`79auEpnfCpUW$6aVnSars%9;o^2%LQ;Eqy=JRmo7nT`NOAz%>!;p{- z|Bk`h5ehQXDdURLU)UubLwZXf@jvJiSihFZJxZyB zUiTI1W9{OxcOD5!AuLyy8d8&9cX@$GnGh>NV;kAR|N4oy^ufQItwB{5l}SDQ?G!+= zRe5n#iBrI*xQ{~@p@F*xybJ?Yhspgn0Q<6c5%c-PRNx7a>5J4!qg(f`4gq~1(8g27 z>vT&3O23NITSUsMRw9wT)Mfxpn5(%c2cnu!;vqVskdNfgMtNT0q8qp0Y51&v(63@kzs$v{L~}&{^@%7@{$UtI^!U-%#_k1%-nCjdjQo zIe`~Pf(D|8SR#d=uW$!{;qBn7b9K2hDXz>F#Z>}=Y@B!pSi!Y6bz)MXtu-dl3nqM4 z!=wR+C87l#$(Njv_ebn>{7%U`N_)!H=Vc{;Bik~4dtf?nkN>?262@%PWXi)1>&C{y zbifcRQyhIP*7{25X4H(-uh%{)kfo_2WhQSeeG)n==5=-^uUTSf*4CF}3H5$qeauc% z6)p9CNcMR^c{@j;pbC+aOm?XMrb2hbMCs;_xiGyU-+jQn5cf*CG4${!viB--u?H^wNE;&X^Y!XJKPO!9mvyH~ z4;>=ZYquq*QsU8+k5JhtI~dm8a$*#}21_oe z42RNKjx<$$tiYKl!eDjycjc_lE%6vMk0CEP)d-k4E+GHZMsEhePlT&Bl*x%6-*7Ls4%wVwgn? zD?{|Dh|#NBb59dYKE3C2h;+7HcG_Qg0+$wOR200lsIkS^S&jwA>(sCIDo%!Z!arw) zn;C|5Ai@sh3mg2IiW-!=0aj;_|>L{JAfb;9>h!hYD&xFYEEn+T_Dl_W(Zm&EkwVlL)eHV#^LsVbSuVXDxsvcn0wi%*VvX9orTBzT_m2>Rk(?=wh>n<-;#R8_)@EG zt-#$hy&I153|xClzoc+WwrMHqUbOfIOHy}%!3U4zRr(TrqZrN+mDt+%KHCSCKfc>x z8$`StMS?;f1F3k0yg}$FyLAPUy!8RkOPF4c0UuWdS8H@hU;r4Q;{v!$DJg>0!RmFN zF)bTUoVnr|9{A0jv!$#Hi>HlakZzdFUilV0ZmOI(`aQsvUUzjcycB&$da9z${tzC? zP~t2Hv(hPD#{IE)elOSsR+*|7alf-cM~&cj=3{YY%XK~z@*929Jy0ka7O+r1CTTLK zpOx>9I1Q{xVjy1*9>dJ~JensfD(wiTNaX`=$LlhV84zbP#wr$QWxf)cgLJJH53(YN zxr-%CRymQm_gR0ZGdAL-{X;6&DYjE#xyiuMbc|YnW(|k|=be?lkfc|80(yOtJlp%I-l4Q4hm-g3c;2!!u8%%BLodJT!u5+0M1fQL=>AV# z=Znd5{re?fliG_$a)&3Eu50hKv2cbddXG`nTu54 z@Gcy3vpelCv@PpYBB_?y&0T#y9|G|aFA2tiYs@Q`(Ot(d>2hUx3S^Yxq#g}+MS0X* z1Ux2r(RJM=IP&Tmw&VYpr%7vvIQ`sdrlVZ`_2qY!IHbEPA%u>jvwvfXGtW1j4T&U5 z2zvSn+vf-MhE%81Fx-=~%MZ(92eRh(45kr586^rafuuBYs1)(uMYL(tlXTt1+)jzh z#0*oR@r1=Pg^1Y46{5J3A#qbrO*aG9 zj$#!S5wXpf*d`f#q&;PH505bGsUw81ev(TH^}T&dS%6C-l@_KNx{%dm6GNr7X(={GO;Er2CcY z=Zqp-*G{d~thTYpC|b1LK@fR?oR3Tl(_^$JOse(2|6Y`7siYp(3KQsgddN)9E#{`< zP{gbo%IFC+@XHCeFH}uSv6kGA#V1y&HNwcQyX=^T_6I#TPe($*8~IK&6Vp1c*^?Mc z9f=`q#_tmLRP@^x=MC3T@&@ zodqcim`{MmDW0sP5pf$SPXd_gLJ?EjiM>X?2a_d5FKrc?XlX)+#rG z`Te1|=G~XMKdpZP3yyZh$a%Qj*33=^O#*5z@?Xs!vmG^0+SMGRel9?Zfa?xNYWSy= zk`sMiri2@+c}fir?ZzhH>>%m%1y{n&d~F-M(YFXS9JgB&ppv|&O+`VNRv{;3EJBTa z@QIhojAbR>BvS=_pLF`wBvmw(Xr?^>Fv-ncI?Owf^W5-STFYrz!&o3VMDs751cGb?a znJ)lu89UWk#kgLx*+Bb>O(ExwJUoOQ?qg%)z%2SE)m(lp;Q1j|ys6Gv21?NklDP3> z|39T^pu%;~&w`F76H%QK?7HJ$hvhGW<0;zJxBUwA9PbFcT?sS?Q6&ygw????ECgwv zqXj7u$GB!)V$(|6IgMONVeNxB3Nr0kR60_R%38O7PD6@mV0|N}5wUtm50jZ6BQ4$b zvsYI^O%RpcO{0grMlj|})W3=DRAJSOW=8rY+DZ5Gy9%XTC*mS(X7j|nmj?7QV&cU^ z^AC|Dd!+D2#L;@roY_7DB%{}pm0js$ZFdq^Chqh+JBt1Tpbm5)vTI74EKMLmz}$r4 zQ{#%djdSRU8)1D&ag#l$<>xTLr)C{5l^rZasU}{Wm7NC-^d?wCpoumjz1YozDpC{% z7No%{FNqT+mlqKeA?l_b=1=t$zVa=Oq_dQWUh&u60UCXI4X>Nb zJ4N!o8S)Pa=%mA9VkXK(^8A+gx!xy-V^W8oJ_{0BAXw0ciuWnX+T}!vp-G$3hpDq2 zoZ4S0;Z9V(ELRTW$(Rfk&uJuWV;M&qi5&9Q{FLltF#i1sT8yA~H_n2JHv1%~XjhC9 z9)#$+wsZU4%K3v%74?^~lI1+MlkXOlJOB zdZ0}G82MlBM83}mu3g?6;TycTd%>XnXDmD=N_ei&;>C7%AKiY2B}!T*z!qb|_nEdkma^M7;+rrxKD#1%A!#KvM6a-v-gN@wkYX(tz(b*{&n4>FgR3YN2o;MLJg# z5fgcu@8^BlZcl{u3DzeM@EMrllj`u%2jQUctj9|NotOyAG#&m^d`(`&?Im6PIMhkp z+O81@p`)Z>^NsvVCI;^ixAeZ8usbW$@mC3%CJoHkU(E& zx}N>xQBK;*?$63;9Q?^|Irhny^IiG5x&kN_kpF71|CtkH)4nm+Cai;k6!4^CY77Aq zs3Oos`Od{FbBZc+04s!>bUft*T^#O;sJ(#IpmKu(p5#)>-FdV+u@7bW1VMwa7R~X3 zgcwxLlmxy$vyUV^eF{?58(%(V@wYx@^*J`!sTrjn)LM8|Zsbidk2nz|(uIo-9J#$B z*3FiMUrWLK`s;#_L_5`k^FuYx;rXKtW-JR_+~rJ2m;5viW%0T2ZenbPUNJknqGO1n z^tLc9Dt)!=s+?k8!sj_+WJu6BgRZE0I&Hd?%nZ584_&^?j|)g*9$BUl$rwVrzo*vf zV|q6p(l^kauwpSNL=bhxQLp?^JhPIBA3h(jB*^Kau!@A0(mq*i)S*mcjjpJQCj3$; zQ>ZmFq9C5jvG#dd3HM{8B;JS1-U-OIXH$5)lQuuA<$!_$nHN@1vPp=Of>DrCQYTz7icD0Wt_s? z-3hO3M^3^|1k_YHAq6-FffGMDj9XGAEhHM+YjI0QocdF{@AvH0o{QC9<;(Ydw;Mg1 zv7YNOv3`6=KF+F$3m!`E?NLi70uO6CjKQTSmcqx^{s2RYrfUg%NhwTmbn|PWZGcPi zf+A8)WF$pBUXBsP9~DMqn*OU);_Ut@$>4CcgOC7HyFwrR08=hP{3p9UG*(}+atehK z-Z|q$YKl?^{$cFHLf-Sl`>z)h%VQ~DJ+xA7K#nC#F%)x5Efq#O%X84yWv$cI`N=g- zIR9(t>i|3%Y{$Ve{j8y3<9n$Rvsz2$yLl05BR7tsD;4MwY9*hG#~2I+e9 zLKU*1M{MUu#nTHRi0 zgeJl;3yrV-ZI56ETH*VVpqu>e92zmXs$+xN=+pae5RlV(ZWNItv~4Z483j-^6me%n zPPmOv$w=%GcNf$sGH9}%?*Y4j`)BjJh30hmAR)BRE`|!i7h|8WG?mL=4PH^As`6I+VxQ8`^asRoBP8#bd_ z@yiN?+=1mFXBZx7N>#kpdaGbh>(TC2z%JgST$h2za-Qx3b6GwzbLC&E@KbE((3QiN zo(EXIZbh6x9*47_OGFl~vJ9KX(0@PyK)_*qAKk@&)a8{c>%y+xa`A?)niGMAeoyZVUJ>o2C%?H#n#>D-W(d?}r{fsj-{9HiF*XpWujpGSjCDfi z)G>RiL7c|Is#q2LG71}z*{5%>>K9C3g*aBKj1t<@Z0adZ_?&2(QDyaD?W_d`RfmdWD5yu;ktl<&D|#X zyEI?!kkU@lA$2)@;iO+7J4ZsH*|yW2W7J?fFRJ@VS@A_@;fUIPMpXhpGtbyih1);h+o1>d8R-tjGNToP!gi2G!3E7jik`hZX<_|u^imFoVT@z81N)xlv=Ze-^ zyZtSvAF=5{F^Xn3r2q6K73nsbBbM7$(F*YGb4`SfM*$N$z8-dayiNHFEp?W@rSBWM zjmOJ!9|HanmxLOM`Gwe7;3exagZL!9J+o0kUX#o93R6qjR;G)~$lqs@rd$Z)v7Oa- zE1fODEZ%-y5U}$Tu6mzrJ#g@~noNcsUGyMHNp>c!W|)i25rd^?ixmv+!Y6~LY8d&B z*3(^DuO9XOxLex3P?t_H9V%CcN|k;rF%%wyTliMrN;m|5@VUT;KBL^CD0!4iVj*TA zNqjxb`A#a*R`gNBiT8t3^dD1uT{LZ%=9--7Ln7+HM|;w8|DV>h!UhYpoWhv@Bx27# zx8r=O3pw07t*2996fn)uleY0n7@rmV49T|yWfP8xR%MX5tP~*kCncIfis9vDFk_U3 zvSIQYphOJVMTKM#l+odWLYAjLYkq@E3|A$V7h`}%Kiw@XeK9sJzk9m0y4|ZnN!^d; zy!yjaYhv<8dU3*Se$3x6W}-nUL|e#zBj5u!HGX{AL0-Hp=}v+bb<8U;if$rESJ&YW zyAf{GfPY^bP>p{xlBK){BhZI1I%Ak=df5A&YkO2&NC==K4_LF%HD3`{wIykF6jc&Q z+!gcRryV#JQb40a6S;w6uUZqhn9smrKfO=ub1@(zv)|j^4re;En7|TpVP8QbJPTl~ z`3=aEN$yn%h0f-&XcN*!$a3e<8*Mx9t=Fy7Sd$)L+%#}(kC|mO+yosOVGnr4kb&B zl&~o~WV88@dYfmMn5u4D#_C=e?nU?HHZ-na*zPqdn0#VM6V`~hQ(r*eiCUNfNu5B? zgnaN*l4=40j8WA3SBJAA)$#{(fz1#HYmrEwCisWze*N$NSzz3-I`Byl4}MRQ9J;Ps zLBb6FPdYv?H$rL$)M`Ssf%wBHJQHpE86Mob7)zQzzBU|6Z89{j3fFA(*aAJ`3u``a zFZszcPk`k}=Zq{*KSV&?mpNlU-rn(AvI69hgPPXiP%INh676AY|L-R;4x9?|k}Z23 zp8HjUz>{d+&j5P5;QBmX9&b?19=7cLVgX`D|0y>_(OH_)XX{2X>J>Y1nMipqi%bLIc*fRSJ7}d~P4mM6@!F@|-%BK&S)+0q%d+{ji+3e?vh@ zuqGU53OPwtvaDGas%e^CFp|;;Y;HjFQvMa}k7*@2zMwGmYtE5$dLdDGU*4yaS{}nC zkH78Jl%4H|1-~1t*YH0pBC-(mu_QOcIWHOG6yW5x9tm3m%+k5`j;5osX^(6~%ETyB z=X1>{fH}ZCQ=$aUKl@2F1I>QI5l(y)){ng_`?CnJAB^(fkqWp>l!$hYH z%={Ee;!S)!KD^Z4g;=T<3n|L*LB$T<^W@F#GwNbA+Rl(Mmx_d!NoNP`Z-|klDdsPd zdJM;~oU?QN3D+gB7nW3VU#CJG$D>l+H7X5hAiwr0TWY9X)x|8;pB)V{i7kSP>kiz7 zKC5rt$+=N%2n1nyztIhL{j&hZ${m=ANh64+wb<;Z5PKe$h2d9}$3rkWJfLOM?sT>H zXC9OISSX&udi94W9X{Cv_4nq$^1Y|#_=BWtqxfzaa?8cQM|kA)`hfRH^b{_zwQo5Y zN|o`&Z8AZ9#>R8!<9(P(c;*&JTuy#@4mIhg8jj@{H zo~W{Up@pbeN3HG?YZ|Y%BsEnvJr%8&cy>rqg-$S7+HWsYnhI4ZFkjFN2NyqcpE!@X zz=R%-*tY^a<4epF_4{DDqc97%IV?4Tl$ncTK`Nx0w{k~*S$;Ns$pm2o0b#QZ*CZ4X zgH;MqPKuER78&l@W?=t#^&0;AK>zb%;>!QNG-dMmgtjagLxq)ogZ3xngIhnAS{pD? zDK{TPCA*EMhyQEturRY@wM#7cgE#eQDtTI3AJ6OkjtXc5zCDDUA}mgNc1x@<&3?o_ zdQRW7d!Q)fyDa2{3aK}G>(l$8Ycyi{x8uoLSU-_FIiGY}e|4Odsr`ETi?b`h3m$(y z{M@@G$J<4%17Mz*iZ1{h5u$)o_x!I6F7mCHW$dF~Fmz9?%h zrR8Mthr$@sB7(bxwZquD+K^NmV;9B|ohpq64#{eR=pyZ@yUN{NpSSP38=VSxOf)e6 zteCivqCjM92(vHLJ(xx?wA4$!c=mK-z_2=SNyK?SXgoymysWgScqOM%c^YM@9TKYg zrmsX^%9mW3R=Qp{bNiV-9jrV4F73Lu-O#l*HE1(~G&+@+4$;VZ0t9rYwGQG>yTGFa z#CL(Uab4M`NyP6vDMkFBy|F5e1N9Uw+m155MbO@yM}=O$=|ycp&&B3D-cn4(Wt$Z) zm?|z{EJ@eZnFUx!tes#Ggs5e);5CgR9}aopNO)R%qh44}U8Q(HD}>jYdM zhpI{w_{^a@eauylpElg~)00(w{r*|6jZgk}1)k>tL ze#_^s5+WrzR7VnaqLvvjG62^{y%Ri@`< zjgb}ku`t>NSa)wo?@9z|Mf_iJSW0uM098h)^H80C!O<)4A zd?Te;=#mNPtc|IY_QxUg@M6X+x9jT3V0!W+SenejwVcX`Qc;G-*`aOWoHK|I3{=GR3D3=&1(g+(k3!@!a7RNM2zHipUlOEo` z?;aAx=~y1y@I!XVkP_NHJe9(#NDbMlV~07;J}&&XKqC8u5ALZbcm}9Zf$S-T%9Bwp zt9G!r<(NT~e7B2+Xx1a(Tq7~4VkKg-=3*i5zU4}jlLdF_b>T1DMs|2w6v(uA5y z{Y?d76427I`-{4lx&B7fhKK8N9YKUY?n$9DluK$8%g`0zBU1Ay5xkfX*ytg0?x5qOXkch5Xa3y5r0yIaEtnsMMuQ}_atT)_pyj#M3K9*hAV)u)vWX|?;zB*3%l0u^ z+p;{@VC;P0(y}T0G{_|rjM#v5<0LPH@RS?HU2@TDmP5xvw<4+;b>3!eDsRM@Fo%oZ zu&4FOx;cPHBD-=NwpMTf{GMc(gyu^sKasHi1-W?65-=?gYD-TO3~FS%y2gBwvgLX- z=33ZZ1-&ES)98X3;1bf+5p;|BD-U8GV+OGtyj}=E$HI@$txUuwAZEU&7(sx5pd8ou zt*Pg?Y$6^FYWR@SOZh59$tKKaM1L&x^RqvKawSu4n$8L0pCs(Jv!(coKOf;E8qO*N z#clPTOpMJSO){Y8@8+BZ57yWp^NO7$a6B1j2VLRdXBKCjU+pymm*~=ekHKux3~2Ns z8X?~p6f+UKl8XhNxWO>(^dK^k<6=35fDk5luaIIh zg=m2*GfFl#Y8-&IwmBk^!b&R}1*~PW_X`r>`k634XdvU_po>9PNigS~h&ff*k{e0p z@JTO==TO+8A!t>6r3p$zBf!5_{GcIjXr>{e#O+=1yfVjXaI(=K^9UKxgYE8gkt2q3xe$(K3o&Ilbz+0Mpt@N_EEd^;*e(!px7$3Wye950 z2%gY)(cTf0)T3UrnM8)JBJ8O+!S z-Z4Lx=zVy-;1KdV(iCP<+T|IQ)+##R5}^uEkp8o-!{r_sXkJM161(JGF>yn2f^K%( zLS|jDKRC9)y=^ru10~|1@6cQiW2XEVg_}q&W0Uq0DvqIc!<(>Iesr=KFn#n!iK&xW zr3DQnj`NIHOo!c3Y$rJT#6fNp#msgBM(Tx2K_iSuH8Mq%GAI@ZaSEZ*iGuCF9nnM; zkzLJ*#&t~Mf=65QyhdwUeoWF^FHj-&AlFyU9N>{Pu0<9!TIqBiiI$2E4&T+R$DL9) zCkWM>4JJqZaBHiA)$jRb@Z&dL7mb>-dsxH+39Zz}2E3`9XL~e;KkoNcwMsu@emK>N zH6t%B%>3Rh&9V$0?#V^Cns|-acYb+skk>c+C+mCvnMl3;_taxd!^ic&TJ^?*Ct{Ee zd2ipU)}s*iL1mAvvH zzP2h_`(rV0tK)c*j@r;Lh(xe`R<6nE>rG%}zXU}!@`F3>>Eb$xc0tgz;8XfmYrvA) z+7;Jk0{{V_grD9$`2d4y+w1WEy|Mzonzml4-ft=gRcjRFtbU|z)Z$nrCejQECP8^i z12yD-q-dn}AUkMd)8fLWr`1v&6Tf$Q7KY!XAGC;L5X$TYH7Y(*sf9*yOZ_z3;k)Ui zO9x>wmQX3%Vx?dGV37YIS2*AAm!&@MB!*uv&4Rm5jh>?+61Ll;hUhfg-fWk&Y^k@J zUvPwNxv(MNeltyL@V`Bi?-N+B@=&k`0dr3kxi?19Bjxa-hGt9aVmbGyzui=iQE;2q zdQb`H{NM?`5@QU@$$sE4Ws0cr*H0y3Pvyjqrj;9FJkk$~vJTLYWS6qkSKHSXUXVSV zV~UO?{0P58SOX3Y&ibw zlSs4uZ>rSQl@;-zLN!t5%v3GS zd1c+2M6gk?S}y$-wlUG6-DGOj2P)gFZBmOcsRANOXvM*Lo8}8eil2L~Iec3r0V1~>s>CISr1HJO`((%mY`KU$;%13Kb>XaBY zt=p7|=s@!@nzpHYLBWYRgW~=@rrN&(oJm-Clma?x2JGz=DjhGmo5$Ezm@YEi%Dla& zb<>eXub-DtbeE+OA0Thda40%>udJS5T&V88FEHY2CY{3u>57GYVgB!;-tIe14_XY& z6VHD*7L*j~rgQTb{)#3tGR%i|Iy!?ZKwK;cH=VW6n}YRSH7+>rS+I7GD<%-M@*^RG z_t6;Dj6)W3-I;6LZq5_);98}EJ`6iZJ9m#pixFz2%=eMaxx~~Lm^FKLg3-F~*0OWv z)ENYQ9rWdjHEm_8*6~O7hM2Omol;a&`glsm0Ufu0-cr zlvTjLK>>VPAPy_W)JLV}M@+N+<(#hu^#bKuWl>YRq0@mRQ2(u~SjV#tM7h+HG`hO5rw zr8|?$dfVJ?TiA^^xOCR!)+7s>I-;*}xr`Zc??1AW} z7EsnFbcI`m|2d11y4?5yw>KubL{hhN_i;Y9zcXE#czKFx#_^5Pqd&byJ-LUL8@0#x za_s*Ak+7;3$TTm_Rg(nZKtOFyuwmc2-ExR5Rfa`C|B)!!?mN<|?&H zZ~WQsbBF`bx3J0cw{52JyBUMN&M++X7&tEUVN6+>snhY-LXdR!EI5P2x^RdRo&)8q z={kk9T~8{4_)bxs_?{rwDC-d~U%E(aBEs()kI;%b7^C1~&=6?nw5;q}6DHm7+IA#^ zeoBWKa8WY~b)Tq7;sGBe->3RWg z+i@NQ37?NIFvdlGIjskG@3PjtHw5Hg0<}mQx0SmUo6dLFpjb&CZ08j#&YEh0x92Nh z2)mqQuFdw-E~zT_pqPz2FvoHDJzGWdN8>6Lvjyrb1c1MLdq-1C)4_YjS!>sFkQ2^0 z!k*Xp?%+l<20MHl&@<)wZX#V{ERB~w_S(Ks=64RG1$MvQ!_~$Olv5T+#Xh&O5rOT{ z_zZCoT9QFdrD=~V`4e9g#TqJnFePw}zR*QV-7bkYa7Rj9$n4NA~{9UoP^5PrddD=@E1)1}dw^E{*D$ z`>9k(TyZx+Af85H?eYnhI_|G7yHcUm*0JJ8MC~}#>jz`CKW5YO<@QQvb-L0bA28C( z4mls2NVSeKYm#>VJ=U`jU4Y`T9HuPb>;CSF-UHMmM=?_2oY7A8y%hN|$q}RkHRH!T z_jxw_g1ZN^_(&@MP-SY`LQIbzc>iHv5M%)T^dBL5J^yK6XzdUUBv}A00o0JuW;<_= z7v77>m%Y3GyF|{5`cpbMP9{%4GHSWr*4(*loUF4qv)TE|z)hn4X?&zeR#`8Z;T6U?cUCwY}?-HQ8>O>?YUb`tQy;&-;77^r;W+?!DK& z*0nAOx=l4r3jj!8_xE|7Fn5e!xB#94GXDf5{EnglR;fK(yWlCs0!DbaD-Xak-Z1D# z5!7l|=Dt7pD_Minvg3X6G-p$?$uW?V-tEuY$nZBWq}1J&_FY)XbDju)(u$5f%P5!3 zu2?9T)U(5$6>pc96S6#kw%p0lU)V$LGH6o%Ysr*i%^dD|tw?Yi+sNjmWH_XII{rP3 zqYx$F^-Ue*>uO`$$X|P+R7_8dP@z131EY;BRudfd3o@5HQ%T$31Lk1%2^O!Hc2JbI zz3)F#9&R>GuKvDE)35z>6{OpzmwYsf3=MR9JWQ_f2L9#<8Y?Cujx}o2r8C%(Q4iSMRbDgh~CbKC+lcmLbo!G z1@W#pYA(4fT2J4vr#@`*fpRZk3VwWLZDa5;?rBYf%m%Gvc7D+(!bT0dh)mTX{`(|fmHxty%d9i zPeMkEVU36aE2E0ouS_Hq2Dj__J`*m0p7jez@Q#aUZT2D7-0<9u4GFVfX)tc=3xp;d z5z47BW2HYFL{rS+(~zv8IRwwdo8(4mUFUI3KyAMUplDN`S4X4ppbbOH0!tNZ@g>xc zD2W+`L+C6CN#V&HvP5*H09Z`GADQ|OpwEpF-EwQ*wsZ*oK1k;(6_A&sXhaHCbeBr4 z7Z%O^3-th(XfK~~l{GZ~EB3u(%ai+~P5|H6Bj zBpm-5&!}^PV>OW=od%hq+wK|N3QqE%%&=iixb?{66k+j zmO8U7-560ANiwSRDEOm=cN#@)E2%2Z)DnoREP5Rnz;Lov{be4-@6pvpNxj?<^P=MF2W$;_NmZb$j{_6;^^}2)9 z2miU;L7T}I+L4PB8q~JY$F6k^Dj(%&HT9K>qIGhz)a}v!?()d)l@x%uo4*Fs?ztDKY;p!f;I6RzZ< z{eG^t!~d*hbZu{_Y~BK8aoh^}XNEHELb7p5ZIFVx2puMc6<={l)5@4x0%fwI8UG8l znZ!L{C!P$}>35K6sq(NgEC40H-$+&oBe4l7Eqg)+GD^U=3lb697-Z0kwoCqHdQ1P!v#Irv;7p0$*?zfnPF;+6InvM)48$r;}q@}NW`IR%ceC~U6S;Td(7L5h`Jv<_2 zwg``uzJo>V(RSwpt(2RRd~qm_KGtZLb<@b4qmF~L2R)Mr$|}LAasG==am4A^B+dbI zge5G^?UY>0nsfnj(OmZdM}4MGr_-(k*r5O*EX^t=h34f|>Mk6d5#BtIL)yQVyE(r3 z)4nzyS`=sB2ci?sc>G631d+;cj)(U!&yiH81KAK%_h13*hDwgTKKj~uIfsRGF7{#m za>OS&D!RzXw|#N`{2V5fkG+A=)@xi3<%kDiU|YxWD5pgQNld=yNWDIcfC2l9ty%pY zPpHLv=58Iq5KsDEn)|Wl_n>w9XR16MPU+Fc?)Oslp$`+4*ZZpgh+(>19KI{=Qfg(^UtwNKMGw zASg#1i}sP~pm$pBRw`bMPW23@6!7|yY7d?uCME^{xrg{3JL+^w(o^$9%9#vd#|c6V%t;az@i z1y}YuE=@nUao{8R`iCXxI}iZj(X>yf^vA#KuzdAzu`dreC0#Opnh!V+tk@xm^LUa~ zADP({Ioyz7;CgT72*jTi2T`}!&@gE{J0nTUQ?>n&vOa1EjJ7nnJD2Q!^;^e0Eq5L5 z=rsKnT{Qh>?WDK;xTd9w$&q-{*ZCksq!l{F0gI*H%-`J#!C#nG(FjX&UfyIoL}JZ! z47yj6;6j7;A$vZKLwDmEGl&SVn`ryU>KJ(@tn=LecX0~>g{qBQ0GAUKjGrdBLsRT= z#p%HkXpH{DcL4%}(k~!cNXic|QBJ%8=|}s-9hcF*ies4rdLaZOXQIC`+bVwYr+EC2F(Gh`NX(7IAARd88a=78GjuaPSs?^ z?0;cv9-FYD{ld&gf9t+McC8{-htfuRpD2SxQeh{_PNoQTm;9nMyy1KQJLj_-Ovk`a zx4RG3DPRq5k_d0~wJHYD{Snwq22<5zL`5K^-i*j1QDfCg>xe)}-~6D--ns((98`1I z5d093Vt%rY0=s;osEnpAON?))b{aa#JgH!6vx7p?s4%RR^AU2r&9P+?FuUS#;KCfG za;y?QBTY5^&V`Bm+2RN#5H|I4tQ^1ziF{9->-^i8Dm0fN9ZlHubMgfR zH$Ux~HS5PW0>lSSi%uP8Yn2AEx99_B%hSrtiBlP&V?gV-O`U9Mt#MER&)5bsE^7<* zZ%40!^{`DpX`}M@nASvE4LS2E&*yrSm>h6Y2LBlhk5VGqOkhC~*bqeQ{L+(@mNf>8 zF+*|;sU4f`HsY{7M4J*ho1M>+U#^XuNRf$s!{QGPPx1+z+-ARZJrTha^W7L1K(5{C z^;mQI=0xCgizRk`DdCdnGk>vAAdQkPibipc?UhHiFizdODu<6D5Fq*_#T3}W6LPj@ zTW`(^VkmvVb`^Go>WfRBzG&p1Tz>dDJM^}|Jn{f5QeWAh^y36aM%kQS`Ws8Q zMAY?JUyw1NtA2=-eF8OgORlf$IH8qD;T9&MWYPDIyQm#p+EgFwD9`%Ya=YG3Q;u!56+LglD?8=!WoejV^(TO>$-_* z-Q&%xs<-uojTOJr!h-ud!pchf{@z_3d*_HXmcvR-_=OCses?NATXzjTEr%{`?XsO> z1qiQxyf8cwomjJ{dWT5gstir+17veNE*q8{ zq38R0S+-*aX_H2s?uiTkyDPw7BnSqxt~zkd_i^0Npd=dAB)*OKDBv=qg@y$2pMO0u zBg!$9pfcf~f;_V5&hw7y7?fU8Pbl>6iWJ49LP8N#FlDnJ0pEIg6@V?@gbFcdPNL}b zN&9d4;^|E32~r6ZPHA}oVaX16PcjJ$6v7OIISS}Q3l1Zhbuo}g5#Cb=(G}Ogx%M9r z6%IM4*=B2P=_|8!Dt}`G_)Hmg6f7bAQDfkeQ(U)o-2|=N5e>xW#P$aq9>VoN%oqd9 zEL!Clwd)&GYpS_s{J#I}&*afd6fTVJ`-PEa9J6*jkq{Wvaia(#Wp7FGqs9{DJ-v$! zbg8*&>TdIQ`LPAzei3o7kem=13I%LX2?A&dswqMiqGM#K#E+s1ZnZ+n{!bBTC?tJ} z1qKaD{bp4{YRC{G=*n^tA<+dDDBl<>0mY-W)_=Cft`uolwKYvS2a;SFrxwr?YQnm4ymLsPE}_1 zG{uq0P!Oni7^X|29uyAISO#YThO)E-nK62UI&-Tc@hfuo zs8TQB#{G!cmd9w?Nc&as4zy zV37@Wnn#smV`XYJsuyiQ!TST6rg)?0eT_&cvjseGRG+G3LWq0Bz{fh_spo{n2#k_b zOI*C8{>p`A)G&l%MR|oGr{v*TQYJe>V)Rz3x;TTWzVo5zjf%%je|DREs-eZIg?iY~o20CAB+I;P>}rPetRhB!YFk)3&z&J35q8;Jc# zi#sB#Yv~#dL5~vMRX?F8UAz+X^B~0Ptm2dKrY7Ka)iG8XN6JAX8k5{-CLfj`suLv? zBV*i$T1GJE=sJ1W43OvzPN{=xl<6(r4PApVFH2Mg0Sn~HQ$7HQWq!X;4a#Y;c;OHn zjy3^j&qfpKCw4g1s+Ip=Bwj)%%r)1uSm-qK_KA#Io`C>?n0b~YnM5}sN*x?otFUXqVEr5 zU*0s}BI0^P_d1iBw#^UX8N2Ck_~-H-@D5nE20v!Ly3ZGdx1|XZ!LTD^&Eaw|Xof+7 z^z0uZ@o>^o24y}$z_IVTTatMxwVRsn7qM&6`RB+8d=Bm{d6#)I$(JE(WMDb_*S<(+iHNuL!nG+uj#8$IVI@=)GHF(G z?DI5<^|31c8=LuANDrh zE0LAir@~2IVTllXG`|r6mdfZ1jif{2&Sd2%MBo2?suqhg@0Bab9>>pi6w`ahiC;$u zs-)B^f>U_|aWy1{u1f4pfClC(j1{fnzd+RbE7l4^^|3V1F zFVp#rO(;2S%n$(A)aFxFkb>X9Do4sAJItLo2lWhgRuga%6<7?)-ndEzdSy0Uz5x z2k7=Td6O?PxQn=gQY59E!l4?GKci}4U|xx`O!JH0gQrj&#}`8cov13izrKqZBnBmt z5#6+Q7M+tJPfiF-8N}26POZ$@ND5Ye?$(Cn*>$YWTU)LhOm{MFSHqYh3b#K?E84h= zVlVjfV}qGSh;eAuz=2mVK1^4LL{v|$)t!1b6H*QaW=bM@AllXz|T?o+=pku(1?l`c7RG~XO^5*c=kRXZY_(wP zGOmGrsRih?#LjcDv~IHY#-Bci5amSJfK6omn%BiATjdv+N2|6R$yi4`?KgVCS3p@D zGZkP?^^iTF4Q`0#ODwiuj4#arS2dx2i%}%hznL`h)bQDn7+%u}*a(+zReN6W*Vz0v zHka)C{=294qNm4bAUgM9Dr9Nvby!^Q>whJpWlh|Nw)i;JVI9xNQAGwN`xq^xH?jyt zX&X#5vUdbGHQfqs%NVR>3v?MVEz;umADK3-Tx!N7@d1{0Z+ql2us~E3iUYB3(#;ig zP+cSyZ`UFZ@I&knP;G(FP}2_?cQ4s^wakYJ`<^_0a0#ADR#jHhGU3EH%m>-|o^AG( z^=qxOUD`go$Iox7wN~Dh|GfH`i!Y2_w<@U+YOhcy26mn;yu~yYq01~(Ak&ot!J9cj z3Eg4^hv)O5J#qwBFTW1RAgee{EmT-_yV zhot6iA9&i_VfN?*yslpQVLu_{onO2goh|(Hh05+P}l-c`NG`i^nM;;LzwYjx;bhA8B? z+2}Pl?}Cyd=20s-lPg~*t9qnaY)vR)GkIRl|MzI8z}`Vs-PIwncG!)Ur5?foh)!y? zSEg{q@De<0o)_v|+dM6azBR-4{>-uI0jxIKBZ6TgvYu%t>uZRrYhmi0Uq0+MXtanz zM)O6tVsQ>oAA2lpv)c8R`G+--)qQg;^cHEk|y;#d!i1`kflWCLUu~gxZJab6M z2M~T|n_#$Jg5nGkl$)uD&-!qa55Z~p8M#ex{!}JEyxt#|ej9a2Y`kcojtB}(b{*Dc zSxg_UlIgMN8i$R&dd0HL8-=T;9uFnTLwMWH`UP0=z)6>8FBdB|V?K|{B6rvSfICDXp$i+1Pi3{h65y=U3r>re}08}Rq8_y!5-;|r9@n9HWoE8|KzeH-$7Cux8J+<00n7wcsCTJaJ>|}m4 zE8-PL;zVqb2mqbPG)wgi4#5gw?<|ENjAUQQ z2O>fOc3t@S#Sw|JZ9@I3Rt4GG85nU-?o!26?Z+~Ts_mbi`1zH(3{%SfFdAx#tBVi1 zKC2gCI*5|0;vQxi&mUfT}Z)H5ER;*v%>U00CVfp~Qd90V| ztI`Y9*$CC%v@|SlPz#W)OY}jQC#pZp_1Jg>j8{B@2Ea1M?x+!CuBwY(yPwa$0^vhX zfM=iLFu`Km0OIGtl-qI;)Gf3Ahl*qjB#g4gKurU$QZhqQvlqEO+Ugb0g)z6o0!U~! zL`fdM8OCM!_YKpq<`hZkvG`d;ay4VWThRp$^=dcjEG_aONPKLKuR4N(b#@l%GJ z;bc^5)~xiP%UpDUZ(RlGou3B2zI@pk$l`JD=y?z3Q2*zqWgs|I9V|1EbgSiiaZ*#X z&sZ5%Jm2OzSt#nI^p2X}S=dCb47THU(m7-1t8i;euXq|zl-2kcw1KX^*lUa+SJ40M zBdgPGDF2!vcoo8JM}o(*!&8SGlM~60e*sroLCVd@W{{X)dh3`laR8%CwMDp1A&#hZ zxnaT^yM|Oro_5#rBxyOF5S_pVpZFF-T0VJyUv>aV4qIEX5fp?k)EkNg4Mqvc+#g?A z2~ODT+cCSvlYUZ@rpx0)Jtkl_ZNuMl*lshYsPQUSkZyZjhUz+|+gGe=j~A{oEwS61 z$>_ss@1U^z|6cd-3kde(6;oIJ2`%PLt2vhr%i4-2f|;xZVtWx&ar5J{BJYNV55*03*ZTw(ROG1S|&Mv z0nBQC6E-)z{;x8g-~#gGvXg-MSYu@}67(jF}MV3lt{Bhae zhOGWm99Khwo6bmJH*wMw zF^Wt216ko_UbO`ww{}0JugRl0 ztu7LQQzE_I{e4v}-0Dvy;))x>@;9Geo%2l>$Zu>7ILPo6V9Dzv=d)B@?>^ZZ?>fC~ zT>yE`NdDj6RQ3{c12-&hH~G-Jki|Nh;k)NvqGS~hj^+DDIw)e83`?D72HI?G>jv!s zdfCp}5Fp%-AUruP)l-E;tphmKpGPg7lebRBq(-k~wcxoZqho;WQ2-|f8^X8by9t9L zffvQReyg=@o!kDQ1J6*@L!x0qNxk@zPdPWF4^u@Xt^7D>HP@QU`JcNs-)U6-Ef}fw zN`6?vDX6XZE)y(^5TfTj$0LTZ1gW!JiOkEV^*si5X=`4j#b>}?*NNc(9eM0)ic1B4 zVb&osycz;dUZE5#<0S?-BrtC$r^nNBsVE}UMMneXzmiAXeZh%$LI>;ZF6t;DP|M?n zZ_egNv-o@dCp5va+OZKW*IyZ$6gtr&^1EgGLJ}m#SfgTh-EsJn<)INDMM1?ShjkKi z=~EI=e`cZ8i)z-wWmrv8B~Xi03D;uF$EoN2g_^3oUZ;%&sdhS4j{atI09zzP#?gw9ezTA;c51O*Wt8U_2zN{LiaDVUL;QsH3 zBHkVWtj9Ha$(j(oai%;0GV+DO=d+YGhwjIN*Za+PYf%Y7An$Sn+!ePbN{**;x?JFn zCU9q7C*_1}4PEYprmv%8Cch(r3wvNJ8GQ=nt|~zNyU1sd=TBUm?cFce<7A17DM-qD zRcV<|(RRBDB>{Ta(tA}%*L^J30>Ph3mgHi{W~e~}Achv<4n|e07}&u`?3cXUF`+@I zIbGKbUjbqQ3XveEJj1N?48JUM&TEQmkn5{E`QFd;6 zuHT#Qedzyou4yXcdQL+aen!5^<8@y57 zJo%A!WFO7m<~+~rE^htamlgi4uR;RC(Fq4z!AO2XbOt0Ls_bRRvgqXYPF!*eZzDi4)Bvj@ZA|){B;kkhQHf)Nti?t5y6#@+^vW zFaaPol-pB;d#DV~L>tAf>?u|uPsDJjfcA6TlC0a;FNxkig9k%^<|VHnYslLRA#}|q zFe^-@F{L!7-xZnJk@|1wPyxu z1qk!Gc`2K9s;*J6&3UO9Q!mJ~xTT1vDJAzpBS_OF* z024;sM05(;CTF4i+Bj!^7iIB8O{nJNi)XO~wH`W}jZdK_b|IV>1!#PB0__3{dxfXM z(Ade={)goXSJ$yTM{a!BT;X6wt$?}p*h-8`Sifd|p^2^A$R(iXoNIZwY}<{4-&C1b zQo!9(g{c0ui1XdmnjN&nf+CtjVujddlKaTC)xhn=p%)7AtAbOT3ZWXT^ivmU(a}Uc zsI@&Ni`1m4w4x4bSgESdM&E0POs(sdZg)^_29g?hR{%xc>kueqAyz&!>a#Z6*aPl- zjm;XKA=nM*^o#p_V^B?oT3kQrE6cPJ55V zk$qX*FIEd?`abo;VqN>o20`9bln>SE)B^Dw`sb4${8NnP9_-&JqD>HAj@5BUsuy|P z=I>q)Cl1vr{sVRvdEXBn6-jp9eXbA*D>Gh_Q*g-(5gCYOXt9L-!;?c&9OD2VNe5(v zW1$^1i53H|prVse$NB-SPqwbf4QX0tqHR)B1{8}O(;V-XRS^kqHK|v>;mtEiNOjOu z=9)15Zo!?;6(a<&JE&NH)%oH~7^B2TaD?Y&8 zkN+3h4qGq7NME0HkXDinF7#eV=I%6liR_s~rDDr5hwrd$8l^*tOkxm>LHebk#y zp`vR8W{!J&Q2+#Lt8Zy>f^P9-uSg=lEWg)Z3`F4d_?L=HzQ(mHrvhkNjOwWud2o6j zhm5;U&%5dc>HpA1Togd{B$D&xq>{~{oT^edM;bM-#8Q2}J`J$T{!5V0;a`Rp1g_`^ zxk+gdEn_;Q7QtI9o^^2XzF_-v^qpe`8JB;T3mPx*e}I@`d&CDg z%LI3kaPSkdOjTw?Tk(`avU-i|R@#d@vTc_+qe+QY1mumv2n4;F4C0;HLVkEh)^Shj zX4v_5YLpkALPF z<~RVCFS#Nn(Kal@Oe^%26qMl>G_4mzg18|W#mD3vl+t06sepT!%5zb;x)IG${Gr;R zdm3}C#6Ol^-VM?i51P=2E&frgm#rGS88v}wIB9f2uZG*yj>ZH+PTv@{2a@g@^mMl^ zw|@QWLIBM;ylnOd`eXCI3S}df@-mXC`sq7t?=Dw#NcVgMOk@l6f>cis;y}hZXTE&1Qr3s?#Ub%1Z*y_f;7cW|D%Cy)={Jzs@>m3X@MqxNdinp7IU!bf=$#w7} zO3QkCYhS!=p`-Mvj|=>z;{@2<>r?IiS3ul4vP=z|MT6j|NjbnA&g~X#0-G25Q3>Ua zJRYxlZmk%92&Sdq*OX=6e3|5y$-}U}>c4j_=4arWqz$AvCvvuzpvcMmB}f;tv!TN$lQXh}&8ol*H9&*XuhVI{BSc<_d2vZplC zXr0$79X9#k1J_Et;VQw z^88aDVvSYjq==ZmAt#2zGT9dX&{+jTDz^|#okI*c67uhObfXU(b(Ezq!HsDS!5h_& zoS%~uVQyFaMJAHFIhw54oy)3Q-P8*2Qg-AXjro~ zGGjG8-R5`yx$3;u^NtrP0bN{uJ8h(Y!cp(_fgU^_aP?>}8$OO{0y4&iKHh&vOW+nJ zjX*sd>&+Nr;~1MYg)fZLK|&_K0X@cX{yHqGLZICqm#pt7Ra@m#56F4g1>=^1_ zFtb*^bX#ryq#YrOk__!9(j9yElGpUn~lo_B15& z3_?lNSu6yGr*?%NhjmX>9uyM$$MZlI$z?0rxWX>TK2Nq?t`0J|>LeHcSo zP*gT4Xor@H!`u?9TD2`{R!&JI#;Ee=F!+L6c9`sxQuKSigE{EFW_`a0CA(K2@qNM( z!1eH!_;SAatk#&vPwKV%6v*T0bKHy$OG+Npt+@W0)oy}56#{7aUDV3$(jRIVV?J6J{&j{Sv=+0=q(DflI57jsX zmVo66zevS7%j}Nawemo&NFZ;=sjyJzZEDyo$#rYP2H%Ove<_5wB}d{DDdYexBq$!Y z^B++YSdVv9Fv#}>WSPAKbx5_a{lZ&>Ad_e-GasorlrGW)$unp8nuu2|lx7PaXJ(7M zf_k(&piAPa@M?2jniFqI=VNu*Z|pl7!zrfAe?mWE)NURPGMv!4J~CPya}$e%|4H6l zth~-0C3jhP3(!#O zv=h&2n>8I0ap`h%@RPBU0jSc#j(#BEdl3CK*dcw%LA1(nj-`l_MKUxf`fFxuffY}> z%v_tsKjj(*`vfJi(h}C27QL(Dg4TC1iA)~5k$*$72f5EiOl!m+mIkM6gtIe0v_1{8 zetgGJiR=CQ(UNI=thTGWJ3^DXZ6l%G80_|qR&SK>7uoH%EG>#&JcD0afBywm5@>6Q zT^4N($hO|uAHJG^tp^n5|JtMR9JnUo9MBUQdIVBWViqCiSQV6>EY79_51e|+&n4k! zX^a^dA>bONIAJHZQrDRZ`;RO=`{U`+ zRx9Ho)786J|8!oO%BenvnH>twg#>8)>GajkCxPaY=^wV z25{)oV(AT-8$GvU_GKYMo-7-j#q|(0YG(vZu^Q3RPpx)x0Bhu?Elb|YiY`34(7GSj zV@SS7qCmvep)2DR05>ic4t_mvw)~fj*0VxGl|GkdWq`U#3sCyO& zr3lo8xIeY^=`R(7=z6K>iw9|Aa`c$+$?fZ@`lR@arg05m>>5-qc2~Aqc8#-Fn=H$V z?F)7M5_TRCb_5CsMesX(VB;9=z#2%LWE-mUFk(lUYs3-Jl1ofI9kb$*gW2N9*rVq- zDt;maswNT8VAtUwXYV(7n&?Z8E$05wmbt}%p>e+Tx9G@tef+%p)bSa-_XZngOSynFFTpz}4JWsC3=?h@f8j$Dnl z&98npwUz6$`&0zEY%FhlWHb}4=)a+uTAB`6*S)0cmeV=NM+z1A&qqA%lI9CUX8d4-E2*&n{ zHin_^+Gw>?fHaOOC{)==S|U}3wD~!*Q6^!ZzF+QT5>Dew2c8`k`5#~WBws{?ya%+Z zkgOy;SU%HXr|nQi+B<1$N2+SL4eM`qWIvhC;wD={cKyTe{kyD|{$&2T=sGnDmsjwd zN)o;Q<#N8>ZhC&st%#(C4?Z{~n`ZD7{IyQ&`&mEEFMjXgq`oK)V=?h$17OEQ+Hr|A z3!zAIvH>ucA#m3LxdXs93V>(&k%0NXUO21e)OeWax#%pHpV^p?d@eCe)xTwjXeJ2^ zCD%+vp64`wsFlzy6CvMQ?-M6>y#&!|)$Ys)Im%@)ekQ&~SEzeA_ufzCH3c>h${$zvQ(n<`A^LAJ=@b6l}j;&8}N_J|8J_v6#-}XZ<@(|8AL_ zm`T=uHk%sHsP8>rq`v&6{a52z{x{F#t;FZ_xHwa?Jm(`sJxvS zd?x-jJ^%J<7(a(jggx=tA5=TlZM#_8qt#|LTLhSMpuVF?Edidt#qk@LTRSfP9J@sr zpZT~=1@>!>A~psTX-F9(meAM};6c zJj_Rs;vXL{&`}aJ;IqmL`o{7>O3=z2irG|16*s8`jxQ7k`-^l3I~(V8Hsc9op>St2 zB6U;?MWCEAoD`9WrjL2Wh)dt`X)cp6sTfcE9g7E*rsjTB$0%BIg|r*pWDWr1!*XZZ zREFDbvaav#VYdHW9u=Vhb-5$Wb3v=qYNL6Nk7wVzm*ee^pU~*O*ttLM&7x$&VIQJxe7#7cU9kzY@P{{!Yq#iG{0S3 zuOY$vN*n1{-0`uq8FX7q2xK~Q-cmsebTr33(>G7mzF1^&QZ8K8d{=}<%n&14(Ck4uf|iebDp=p zTW((MA)V_!%=C-PmYRXnXzv~Q0@PSQ zMuD&O@7T?b{WRT_&#z7SuYUk{zvy>?h$C+3i3K(MNDS%rQ3jtVym_m;3hZW(1q!N9 zjzK{xG(A!Lab6SUlyx=x$2r!&LtTQS;nS45I4FOzXD}y#gN8L27Jyl|Xq_TUb=Jor zLikhKKrSNRn7w$%%s8zbs@lHF+KG(KXlMlUv{&1v~@D{EAMT${qTL0qV>gOyB3Mhy$`&4O7}|eJg;Sc<(XZH zsBb%JznCsP`sXsw%)fINYDI+Bi=yv`{|*MV#Q377VQrPN>jRLpgpCEL&Uiw0Q4Kcy zp3k0SxWX2Sj43D(h*a#O9H^-6`8G;~+ayHK%`;C`xi)=n0KcgROaH%?fXDkg&gYuU z8Im;S%1ItSupN|B5wZ-!&nACsbDACsO59#suXg)^9&@0kBEuO0ez-esE(>Cf#O z$2}!Oi-N%ON+iO+K1R>VGx|9$eS+7p>psh&`o8AlYPO`c*;mD_-XSAZ>3@4@wEORO zDir$G^yct(-~g2A^e72HJkmu=6)Nuv*i+@WuUQA*(Gk7^_Ceki`On407zW_fiw~3r4+XD5F@wM|PV5Fyc7x0`k^EJit56kpe`M z@+K4>>%$hUBcWNdFYOnwAT~;>3b?;c@5wn-sfA0KOKQ37yy(_tL-GF7aa_jadn_wl z9}h4RteXK_c;Af%KzIzdF;`^YwheWr;`7`Hq%Q%{O@x;|fR1F2hvu)K0XA-KbN*F~ zr4>UktP~kOpm7^Gb^G#Agf#_wspu>#ga|{s*b=-B0>w+Eq^5%QduIR)q=oXUyf!RT zWof_qq;YaD0^g-Q0?fj+e3GnFFM?61qy5KabOy1ltqh&KkZ#Q z743f9mebT>^xuA}Z26OE2}YtZ>2Ub#9Ntv`Uxh1apol~8i*NBmjdAlo7(bJB99zCf zcgBFKYNVzFgRG?Gi|f#zz8Cdu{%+T5f`gceJQ`Lt|2|{low09<%KH-kg0y>8SNVS+ zEIY97cUV4ghI|B_b!~rgh$y#}Y5nc~%kcfq5b4+-(6dFEX)ObD4cN1~?=Ie^()*x8 zz4v1EplLR+mjiUjR5nq0fbU{BuPuINY|$VP(kb~7mox#ZM}aJp1N8#3-N^NR6#r($ zYz*2eaP6o#=RXfne@}roK%;d3V=7{s^~>|v@G5FqF{st43I<4{=NE71nbSUHbzXYj za1}gaMpXhWZm=1vk8O4II$!Htuuxn{h9cO6sx}*jFm(qf;|1T^JV81up&Y%tI(4!G z;YUsX<}h4E*sx+3p%sT(4_hjw3G5cF*)P(8V^qyTuv{xq8d^i(O@7{jQ~4wqQlEO1 zcx5|CvICMaoqubLYh>L~=+YZe)!@bnoJy_Vrg4ps0 zoC4@v%x*dL<1y9q+p~rP0swmX(ikDZJEaO}9_vhkzoMMQGiZI^i^Rxw;Qu<$U}5WY z(j)V#abl8M$3^=uwKm#B${GIsR`Fd;No@CH$8D$dY($3aO1q)kXg2Bzjku2{@vsBP zE#iivv51^UNWux+GxS;jIk9icg3|=c@KMi+xJ;iX(BV_r9Z!FfK`=qzuD*{Ky?6IA`wwJ{AR*ZKLZTsiE+!^1Laq{kDIM>;<0x4Adjto;ZQ^ zS4{r^R)SvPa05Djj7+iw{ROJA&oMPNGumsZuu#xl`CPJ!Iz)X+mlf297Kls$g>x~b zM}Fg(a-8DmqC7F(}5+Te9F|GT`qMH6k(G?piX*k3V+W^g_K2qT{JlbXb1H zvRhc`nExvtaAi`cs=Wx%Ij+|Dc^^_usCkTZ7sG^@Fjc2z?6Xuw7}vRl=Av*j@jFV3 zIIVK?JY%pZr-DC(BM>J$vvJKaEnd@ma>HM1L0@1i$Bkvt?dh$aNeCSZ(EhiQjf+UCRQ|c;R~=YQzgq~eu$tTF92W6)AG1C zT>c3_Xn6wgB&?AtPw`kBB*@G`3|zjqL4H&34}=ETPkICvjVOK3pq7%zL{|3qdp$MO zl;t*>Dah&lxHz!|)njT>Pe?7C0pXiB^rUu<^xh#v>Cl+-%j@R*tIfockg9_}KxmB_^9)!Mdi4n|obyAZq@;Mjv%AHuB=JE6(Gy}) zD=sT{oFzj5Ws4ZMhE9fiYygp~WyxShqU@vkagb%Zag%qC4+O{p)?vRwBTk5y(n;#> znFtG|fXlY%U6;a2tQCND-n(+{6@7Nl5Y7YB0bbVrN6h61opz>`H{`?Gadhns@YuNt zW%AkH4kudbQFE?X#IgU#UuRHF?{4r~U6xR{d+58%fgP`` zEIO%uGmiW}9W!d((GQ}CiU(2SVD2cyNNI=!svO6lqyFT$5ofhxVsdUJMnIC+ApZ_p zDR`G!Hw}=rK31MK%UvJ%)c^?J%>-NOA95iDw%L5%`-&?_9xxGK4cqb3yvE&r>R*5r z=)f(S#0iKob|eUG($~L0%&xMb^^1%~pW0LWHV`1!E~4=z6nByI$Lz#oTBhfTnp2IG zF$|I4iE6$I^qm?)?O*Mwyf~S%V|B0vs%Cs-#vur!XB&N1(ZqH_h>|m4t$K^1bJ}ww zJb1znwTGmgD3GfkE;~KFPy$Ku7cO-02#T}QT^S?d!ym#vPtv+3K92vY4iD2nD z_5qf<7G2%nFzl4UXdfo&h=N=Yt#9QxIFAm}a6kX4BmT496CDqARvzpELg-$h7+{ZB z!2yn(%fC#0kt9l{L84qtADE`(?Y5eqZbw!IfxpR%)N|tFX4}qVbd3lMtxF}PpWU7sb-JILh|X#6;j$pC_D!e9@FQ( zb8|7+k<7NBGHwIbN!i3dpNW|z85^}+Ju z#BT@zH|9ezTCYA@YEwYP8X?^=B6mJU84RM7QWYSqn_sdfnFE-flBTIr#*N$cG95R~ zzQo4g<7PJR3Q#IQSg();0{V^-$I?S%6~Sn^^A~*ZVi1y!(S%ZWB8tnQjB|RPs(Vl& z;OI96%2H;pK5&2{@n{8}ee`?~=PVPm*B*Mn+nCEsY=^GyPOmH1+c)?jGzd)m&L2p0 zt%gvYl>~Xr0n!&Wd!AC6uNPDmV|Unyo>zulOCI9iAL8#An20`a-Qfjfj*(l>3&lmD zO(lfb^O`y`m0>c27ZunL0A3+2tPJ!zpLnV8HO8Ejx@)CfkMh6MnFQySp5h&ijIkC9 zQ}R{bZ~nff@qcfRuH?-^Mf?(X|1@8Yu?QjlK+M9XTiX#S`Ev9AV~#8^yvR*++10J{!XSkp+@f0pm6wQ&&lnq-u*oYe;*JeD@!WIp)AS-baz>@zB*D@FIECaF_(N zWooe5j~f_o=3O^@U4`AMJV~Tt()PdGe&5x=NW|ExHVAXTD76qe!S3*Mg(L<+;7k){ zso+MNdBwnWE1>7GnTQ(84=)rJQpE_%l1jh+B(bB4DyG=ds@}|_DE0C1u^74kG$VSH8lXd18kV?2S{TXO=nL2}t4Fo^X%a}6lHCSy$ryJfw%uXb z`pdj5H^agm+l5siQeg8TQwt~~{pYVS(_*EIM&%UAOHn5Qiv+Qb6#~%{5XEp4YTU)V z;_1|#xpbY0VX8rFT2d+eY9V)CSOh5RFXP|1YJcnGGHTxsEba=xQ4N~QdAdNJ?WlE4 z*WINTe)1+n^#mzm*hKx|8$1>sS;KIHQ+SD zl?7;dIQAY9qE~S;PcxFcBOS^F1uD~8kEzDwN;1NbE~PsOHebU787&YfLFh_Mi^RY_ zcN`m5ni_MV!`p^uU?&a0ut_a?$=2bAE}7W^~d@lL+- z?gG~KQ5=+s^0kXl(W0!8UfH!VBwsY!G(oNjjDHPAsD%BZg~T-0{%MM_!>@6Tp%$2# zISv%GlU$@(RNL?*#)KMxRtB$?hof8aMp4tx>%zX05mDA8&jwt7X<{y643yZeImTA& z0{kL3oEy>0)yLsu>BRULidbsciI_R$9-X}nI#Nporx~Av6?>B(*Xk?)lNkthY*9-7 zBax!XRGm|FX(4daqmz{9msc~s-9O^`Wh-YrWBSL_p#tCqG@<$U6D9};Q5&9U38$7T zbA9~jC@|*^+a!X$iylp%PxKrYUxUf`|Y1dKcm z1!~!YF{YEPc~mGVSbM#=N(}{9-57-ltM_E$M~c$hMifT-sBx0c*iL%R8+^0+KfNMI zkqBhS$V;)5PG#s~WK2Q`*?vGG0(C}k0ji$lPdpympBis_pF;3OJc{IzN8=T}*^x%# zNF!AgtU1XmV5Qio_2>W%1VyXS4MYPBk##q29`xBf{W`M7XP`pQwPp)h-O_#f=th4! z;iPB8(jnJR(p(&1R-#_@>h%8M5LTkim!dp1xNX&dfzFw-4Gnpx!1|wCfnf4k1(|k| zLK%UPHqfmG#&CY+{T)E}NM_|;6343WG{gR1u{=fy3;hx8Cdjtsnl>N2!?hU zP$+rcLd+jQVnE7!qmF28C zGVy6E&{a!ZW?LX2IGj3Kd@D>wQW2J{4w%vEQ%cZCO+x~a!of=TePnf(hjK=nHm~+^ zd3aemt7wt6{ah50-PHzFA8iY!65~L+SIzhR-u~meIT%LETk+&iKsL!4#xx!699n@0 z{^87b(msdRCU896vhpDSe+5y*yhu;_H_p$SMJxmItPBxfs%Gt?c$zi8*teA9>2?(| z-qJ%0LBd+Ar~hQU)Uj){E8Q2Y&><1i6slR=HZ5~b0hZ(BW4!T^+1L-(mmXX$s6IHz zv&PNd+BDEwO9|!#xAi);?*?5Nu>gu+40uM!9dnL;s<|AXG_Pluuu2|LI_%{-yPp=M z4bD{au%ks39^4?DA`R6`RKV~GS;PE1K4GXjLN*T{z61$9f@2nk+XFibA8HB31>7vW zHl`giVTFb^Pm{a|5hnT+&bnPc_lfD}m86?NrdaVgk|#+e)-HhrSLfn->3}>AXLE-4 z$-90P8&*n&Xq6yQ5#0-e6Wr&s%VvzRQV}5>CIAkwd+?jxTP*g6hsSrOFNmi zt3|&*#Dm1kN2}f<7c3#%OB1FJI`f@FNm$YJh-})gO!fRS^}Q zsMCAqqjQr?*%vnJ;P|enQ`jU+m?Mb_<3rn#z1kMV)Tx;}6DYQa1I#X<)qC{rdhos? z-g*S;GhTpk3YjB8Ux2xtA0+r1oyD;F{P8h${tfrK>bW0lh~w>7>6+aVhzna29%~p@F!kVjQYcgJd)!w+4=oZ@$n_=ID_?ZoT=M#UWQ<=vbfNy!N>;Dr z2nm<+8p&EQ*ly8oh#(|N!V!3GNkijG3{?WtzzII&Cd4if3MNKF4=n~!I!!yQLjMsd zpK4P@J=elg{6OxYx^xVVJz|If(Tj{WB8#y~JN6AmSU@yk;~Eq2Y79Uvf4nq!-!o8k zN>+p5k(JpkOfbwgsa{Mjt?bE>!F?K$Or&;gj@uS^0=)n>lJ)tOUg2di$S{dswJ0A(Zd zdGs9DX;VTUJ^&m#6dpU+4Xs^z3$+}heud+R%yh8kJMNW4C*lAu4!~oWq9^-)?vk^Dt{3h1g%de|M9}kPJhQ^y;imB zb5ex&Rt&Klt||dkgKDhVL_Pb|o4tImF13Ng+UQ?~w*W6W80dK%;&sOBfxa959$C znh^x`Nwq!k1=;^m3}8h!R}-81=VDf`YldN_&7u~lciJu5hD+2Pa_}xV3?VFSu@1?h zO~>g4WwsVC=9Aqd`c3S;m-3dyehJkYazx?)1LLAYe`P@{uZg^)rVE;puD@xctMORA zBI#)Cr;y77VWHM4u6?ep_n7{JCqnU(N!^G!7-}&X zNND0C3bk@SjnwA+fqZfw?0Q{v;z|L#pwMFvvJ03R|6qr(XjAw(#sRLcPokfn!hU`% zOyps3W`#9QaJLNRE6s4S05x6WQF)_gtX4?KpUe?uqk@VGCLzVm=QdzyDKF#;FgZO< zRAivGqLHdhty5)BM6GbLt|IP`y+I>F%HT2(yBqTgcA;oKt($~WpSA@ z{lL7AMlKreFZ^|xi=W>QOk)1~Ym+V55lv#qGm!N3kN8-Me$l*B5o}9952{A$$qnL7 zRS#wkX$Cga_zt5~#W*3Yu@cx6^HOS#agdRlOkm3cV++QN0!BofKrSKpX}+o$3*JJ9 z9hY-rDXSDMwwJ7Zvz55-aYv|fjjCnLdhe_kF6^Qbl(xr>ZSKVMDWOrT%3i$iFRirt zmyz|^QDV-%)6Ae9hD&0$hiyD2Qwlu{B2-!m#ki>->UX}xGtZZwb7=HRG4u+i$AZd{ z{HjsMFWz$H2J^F!5qd_dgqbK@D~frB3{+Bv7S}i{q(l=>b5A`F)q#~s(dgQ6iTw^Y zze-)dE5wa`V)|8G^M^v~e!kX&@s~HTfcv@cshoIsd8bvNJ=lv@5J}UE4}5zcFiygK z5JJGMnmSm-;^{KNNcNdx%JoOZV!tfHVD9f&-(*ol-})nReZ2f@h9ArVM3M7V2x?lf z)n)zLdDJ`XSFqrVF4;S-vX?Y!Y%#^406WzZegRhtLwUO%xw1z9DOe=ok#-T;g+Dj8MxCf;#n zi>7m~a4Rh5rob{3F{~r}n+l^$Zp1IeTj*{>*oTe7i^BR2xvE7Wxo#*csbk?p1-~c| zb55RfuNf~Po55faaeQ#vA-Pbp)C%NNpl(!*Q{3#q#>{mWh)L+* z9eptA0o|xB?uDRF460DH7Ln{$J=Re%)_$BX4P|Ce`a$zR3@4OtMC%31WTuWldA8A){njlJjJ1}{Fe z|ADYmZ#2JPl$|y&=_iaEM4$z2iwoYa0p-vN{8!?$kCLBGIj|IT*~(NpeR17Kms)^~ zm3E*B5J6Q4J9K>p7GJ{Ww)f|go_3&{V%9yrU5nB0c2Aedhgtt)RsXz}-$3vSiDwt( zY((7OaXvi!i>O23UU;#4;YsofE~A}ZbiM_FpE7FQzcg3RC*l$M*{K&~0IO~pU_KCpZU zZD7aPOfmNasP95_+N>;kx;eN2(y?Nx4;OXpLsm)@3q%BNfd-U{F+XIPI#d9=VTgkf97{ecE)dT+;=uD+kseTl2h|o3T|A}Vs zz)_OWlYE%#%AlPCOproRZs36+gS;KXJ@Pd=*F^5xjTp2&4~O8=u*}O38HCt4{z&a4 z^p}+prl3)nFfX~f3!_X^-`U8s>||W2R5=p%h_<`PiS;V3i=4-1d;dH)<_ys#tS#Ve?PRPI{$|MrE@s=Yz`#SWDjcGeQ--_)VdqJn2J>CD96nybX8gf5t zW~51ZnBG|3AyJLG;}a@dXrpHuB9wNal9%07x?w1WVSE_O??o;xzDJf4{6?r)K_N}S zFiu15$v25P@>SGJxQI>!HTH`xf)34KbKU3bhx966!_1xdzBtVRt;)sK8SY-%JXWD* zd4QBudA;>nOHX>Yf=R6yJZtgyun}+<-USo5IDw%Bkue1X-j1oKjgNmBULkwUt|#h; zkYQiCNeHHayfrE+s@h+Hjt354R&5;)TfM+l*k;md*aP-tPXCP#A(hF1@b^9tTLv@J zqf*FO`~C&r_J|5OY`_$X&;4AL0hc>zmg6h+PG1;u(lRdF3f3ojawaY)-Bt+;)Q)S! zIJu~6oE_@e_d%T>Z9OU6Bzx#T=@Mh@TQ9a|A;LzqLny{kl+1di1YM)cCrE;Ugl<^A z1hC`9=G!Qtw7~@-m+vmGvgIkU%4H2@9<#mxj_C)+v#aRy;iD1`NFdD4ewOd8W!0@$ zL3WUkecNO{wfb3rw!*ifbkQc}H3KHXA|z2 z*-nm+3-h&n8H)YH=X$J~tx{hRDL?Sh_AA2u2hh+`PpjT|;A&^6w6rupf|yg$4Y*VZ zL5BOE`X5Ztkv{P@d0ZLCBXl|9^f5zaaB^@!3I!Pv@R3hes8v3a<^yAUzMGCD&Xp=C z=;9-~y!K{@)6Cq;Y%TWy^LLWh+!NMk4RddKBaG z=#_g}RGXK_Rota%m)UH7SEJS5@lfGGhn+P|j*wr!yCzMIh3M522nlj*Cgo7E-MONx zea=zEu5{8y&~2twxbDf?I+D`*B%0#1r_%9hSHybnTe7My-zlA~H33-ipkd9&JJsMn zGr=I_#x1E4+X%gB#C#0*5$znIi{JouR(EX;Vi;koRt7swVdaJ+?nvo=wh9p5q}AnS zmEV$6)+bB0h|l41h6+ut#s;sk3`G09_s+7Yq4-(YHSiNw&5>H?m4rBS%4%rOl{A*( zgepcI51!{lVsZ$Mk0x^O0{1(Oev*f@kr`&mw?%c(#H?b)uf^uiXUcLl8cdTH=hLJ` zjuzuuq~|)g4T6DW>eb2UsAV>ZhZ<#+Wm5Js%{rkBOzz?Xkw>+5)m)X>w2#ts3Je6Z z)?^rHC8Sf|G4)5kr(jg);A1!fcJVhKgjhoVsSbMZ=`?EAI=s2quXFv#N?&Sz^?t4C z*R}&ucWU#vDnO#Bn1XmJ)6b;1QiB8}YE+)38lNxM2N9#t;8t{RInZc;*{wFwB+8Ds zo1t7we#_3@n{!0_JmP2uT~X`({`yquvlA1pe?6l_%LB+HriNQ~RuBtTZ0nP{-&(VA#CMTJsyE}aOjY2cVKy}iZUxtimb^Xex+=^ zL=rUr#Kz&FsD^*Rri8p&T%_*5YuX>tc}veLOB0VYrb@R}h^I33jX+5hHg&dMtO#bC zJ&mY$9pscg0A&vyjdFP?J~pYQzitiZaILii?+QB z4Si}h{@0W>VHwG0JkTNgv(@J4A#5t-qndiNu~e@iTJ9Ku{QlTga!S<5wHe3A2gB3` z@Z)`=mpC&SG1;?^aC==56ss~WCQ@FN5$yzVcpvhq2_`SB0!@l~^`8Y5BnisYMbaxl zG6bJvAey1xMTuS2{N%?EPVyg9N#WW0Vew89vc;6WeUqObp9CLEBMT{DF@1zO-a7op z%0nH;r9WM+dm~t_jJssru&bhK`)X;Y*TBRy0breuVdX6Df)%88cgRo8L{&yB_sJ{_ zj~c|Q;Us*P^ge%)AJs|`x74?w<_XR$F{8Sa*XTcRe4lI6h0~o=q0aPU&dKEK{AY=P zDrK#yWT(*b?#vnWCKSR^lFKg}phklGfhcQ!xh-C9bH7MYCIuynm`4=G48j!vGm|C5 zcJUGMwOOnR7?mJ*z;f8`hb7!<*i)Fw=HtrZ)9%{F_ONLQWHI+%sx_!R=4Nj){U8y* zVt&RCJIgm1pWU4LhJhMl@w-CAzhkx}&FD7C^*pQypIe4RDM^v!)3%c+ivKYg2lBkD zkOL0(ClUw`pG@8vGOF2tpV`kpxkZF2%%$?J(M2C%F-367Q~0L1@s1*e3wR4iJ4Tz3 zFf$F}c8k60P^;f@&;+bk?w0d+jJN47%9Pgm<4%W&-^O$Bi|&LVo5<~%$~DRd)?m6m zuKr<=!tdrmz)Ke;7w7NGP>3PTK<)r-$B~%M0V?BKO_r#kYQ4zgEO0+|l^60IC%$pTy)?XU)jUHZ5r7;F{y-53ODYL>G%&PX-j1>^ z*o{^GOjX507^ya}R8D|?#=>8`NOpOOC+Vu*iG~kji_TBoWK90Xzp06&Y24ia?qgQO zb$-0~^jlCL92FqNd;~&FFP#mgy4v6P!e2b+OastDA{52@tQaACfHH(rO_eQy4pIb{ zOMO?1jaGziKuwaA6vwMJFA=`FtlcFZtXQw!U#z$d?W!6VpuX3ng1i~RaAZG9xA7>c z9sSK@0s1D5bl=giW-@<6e!5Z-9MX_{NJz5nSp)yuZ;fYx@w<(W$MApdSPk|8uU?~H z?Vip8p=n5~pABY(V?IZE_Sy!-E~~tvbMElxn2Savv@FNYJzR&SmMZJ?3d2)+7? zVqmzw*=2a0L}jEADj|E>D}5y(RBmg{)z+0>Lz9t+OnXttI{I3A(Q9H_7AcK^ zQcUU5ycAfPFXLwu5HM8b6Hd^VWrQZoYoJy;LR78J^4Z4uhfFm2P=$COcZXNkLCy!zo5_G_3CXYBXeB`SxMhB3 zDj;R_HRtBtES4(xW@ zDEDdfciUBcIh5izv$()|=;y*F9GS9j(HNOk`!{4Y>VjPW=XHcom+dzZFDck ztrl<0omG_`sAirjA%ZIaa6ep5OT?WE{{ILkzuq+yBk zb2OQK9uXpN)+m*ZAz#!ajKZ7D_>jP+bsh3C%#Ud5QL~`NR=bc9UP;kb(Y?e>LQGu z??->8592|SIN=;kh9*%v^Fr6>s0y-n?a|Egp)`##`uv($x&(UakY~Q%a z^1$TG)*5sn;wj8)G4p2zA>oZYW;c0%jR-M!n!z5;rSj{R&X25OuK&$XGLtcivnGrS z%dl}qq{lHQSJq9e{!U;t>wwj`Ts(Wra$p?sX#Tl~8obt{_?*7qs?GVQ@=mQ>gvi`rnZ*-!QArDf9_4xW{Bm%7;eop0IDQurvCH&K{%zE5En8^MUexe@Lv1Y zb;`AQVT357z|+)e6R=c4PT$er556W`o%akJlgY^vz^8)~As&TGPl8@JV9p6ptgoM( zOGAa5H0hum5>yLV8(GnFQ%8VGCA?&tCq4XfXeEsZ;11#3b;97u7F=a(48+vNw2iY5=3+Wk@;-pVfOFw>}U37tfTL>stb=f3G?Ij6VD7BzKzhC z?p2-SqV<{1L%A-+^YFIcnYh-9=(8E@zM1)&>k1qVVQ3}Ie;2iF>v$pnf6C;y+V|0? zlZ7!3qI&pJYGayU&0yqjM**vr!X%}no1zb39?jWHM_w()h^xEizMQk;!2ZnN5ZM>?)7ucC4^qfmX@cv(LE^FP#781C~8UZ_TM4ijXT6R*u{E zd0P3;$yA?j_3uRGBYYl_5JmHZVWo!HlI;(@6LC$TF<(pwTrk@NZ+J5yagarBNECp5 za`Ec3K*BnfRl`;QWtuH`B(g1xSes!q{dCJV@|>vcHTiss4{Yea-UbTgaK}}~+7{;H zfT{KmCauf*6n?43v-Hepg&dg8-eZmuv@wq$~uwB{(+#nh743K)W&bHocXffDJKD+eiAvqLxy45`mkpb2Z8hDC_eXhW$gj7?uP3s z{G4~4b;00xqjlR=bDBP}d{Z%B-Wbd=IJ>BZZ zGB8203kUT=J4TtyvuD#>*VaD>Ur4e3T^pm=S2L}MTbtNb7)}7w6= z%W-;^N>A%ewosU2M!EPK;RKGB(tLd#uC59fnRv$JrGR2RQ?b z=&*6nZ)H^~PP7yW({XeTr>)Kh$8MlC`#b=u-ueUZ zv~<{AXY>{PG~nR=E)R^v$d-R+sF^Ju-zwZ-*g4LNyE4ojFGVrHq| zzBrQB**GdU_}*f)b_&;G;=CNkc`gmyC++9Vas@cM-ExIg25;YPNB0l!vj6@^89+3~ z6~nJ;(SpPqXl@awY8v**Nt4Mri727+hz1f%sj4(^@4QWpd{DI(IX~5-S>xs8xl&st zT=gW9h2Mi! z7Q%*2A}LXykH}X%3n`t9t2%$`Ro%K!${!7_zZnEdGyOex%q-!mX*9vFsd_R;KFMXW zN2K&nG25_iNA^KksEErOqbjR|5Yi+gsvglfn#&ppej!hioA}n33n8XX!RgQlG`!t- znsnEHzfQXVI_hz)yQnNzEuP*7bcVERHKWFjmeXXJha*AyqIn~4u#jt`_$uS4tq=1r z2)9i;Dn&2gwWy9Z`q>4Lg?z1lhxJI;Cd9R321V@56QSSp3KXbV%?sef$Jl{v|Iogf z+kNNq3j4d=NRE+}nVn9>{a=8x(Ew8A?|5W++dywZ+LtN%tAzH}XfocbKOzxHq347_ zktblY){&5Z*rngD?ab}CytD==ZXlrTFPmRvRT}5u@y#UylSJqGBY3}m1JY`NEp7o| zwlde6Ltm1D;8P@B4L2~OY-RsI=;H}UGVqi?P(4B-^lP;;_rM|)~#gz}cbpeg% zU__3LPVk6_b{Zr|8))VuB9E?OsLKcgalJ0TXRNido*}$junOmO!V(fl;HA0|ahXsu z?dYDpQ=L_))7JBuEk(nU$ch z-k4-?=I(;vD-Hx)AZbMH5d7SzXqt>uzK1{^Y6p|EgW!CD)eS$ z9*6&>DM8~DNJidx`Tfw;4Ag;q+|DU{0JS(iK(YVj88EadkO~&0Y#qo$_$7s+<@<+Q z6{*oKim+IJ_Wc)-fB*Bs@1d>LChj|)WkgQaJpReJ9wl1BC8{cVm9^B>2b(b^YnUGYxTtA@c)HgHG+sL~`0#>>`y-E; z-n{HX_6ItJ@2SS%w_Xk6|M=}?GaOU~y5#~c|GmHNj~o}Mc{zyh&|6KLqlR( zR)ZTU6H)Y(eH$EXvhmS9n>PKX;eJs7$^GksN9ez=0quOz_FguuaC#m!_WGS%35z){EioUemR^o><-qv-PP&n1WXl=fU zDy5_ND76?LWK>Eh zR(fIYnal*0VjfBUX4-qcDE80)-myuLnYXLMWL2 zk9|aj7^8bV@tB=aUC#@(d7x0=DX&2?u7G>C%Q+`+HDNKbs9YFnr(RR{bp$S_WEvaR zMgCTSL~ea++IPXFXa#>-tvpMN6()r}@%En9VrGgbpH6S(Z7NQxR`d~9L48YaUK5f3 zSCRhS-Q#?wUH*BO!8L`;2jJpPoqQw2GG@j5Z;=~G$~%N!J4_#oNa*)ygaRnxhGv2b zA^-~G3{|F21c9*|a=C&6EmIM@Eep9hSzOd?rCCm+EJFlAGJ?3o&=u=I*Rrj5=tc!q zQJmdT)S7*P3s2-|QOvSXMCPRsZ2d=|`XIq&8;G!h05DjVf$$kn>#^|%SgLU3{G*ru zgcR?6){L#OHy$?D35-=zgmO2N6bV*z0LbDav@Yp65q$f)x5-8A?5Wi=w-qKHPKY_E zaxWXDLXoeBZZ})bbZCRsk!Fh{WwqJIX!(NID`4d7a6H!vi9}G7OT@8h`XYVN6;2Aw zkl?8`7ugHx_@FLe)f9Db@32hWObrq>FNkX1YL6rQ%x;xP+TW!a^Hnktj zHEb%iInZTsKtOebm}olyLKiWPdmF|j3~*@hevOS25@~L!A6zEV*u1Dc#*r#)1&p)V z_$tt_G{Lpe{ zB0`8DDZ-6=U#Q>xQkxG!wWZe~fqnm8nDOBB8>jiCRG{#+m9;i!< zx%&I%*8mI!XIOZl^{(?7Bx3S?m*4aRUWfVdC`ukfe7}1{Fa77{Vo1b%!Tt~zKQ{bCuy$swC^AV8MX&RmwdBYkMxsKpKF!=*fIn;6m6hYgqqzT= z15=$&$CJELZ33}~2*?Q`qv&0F(4&@!GH9JqUT&kQjit*Hllp<9PK{UlX++*tC<3lmM-Yo03s4l;SbC!%z?^cMlU|6GA~H=fRt6b3&}emEp?&g zLJiJ74img3VM!We>Usq*c_kcDk=3h) zE4Q}e4zA#DiP0HK(Uo(Pwfe)*&Jb8Qo$>nQ6!lio$jrDE5h*-B3wmg6jq^*MXxJez z{1WmFr#yaQ1EZK@n1DU;wGr8HrV{gojLV!$dYMWIuPHP)y6E~o$f!TfdG`K*uqr$F zbdcKxbVQ0>|Kzr+=een_^QHN>*NF(gHk$A6wg=qmBGnAW)5c>m(~t_Fi4i({hZa(0 z!bz{E-%%({TWLc6vL<=nTpZko{55yTa*g zvRDRRHuy|?M?RdkxGGFi6>+@2VM1$Y^JmEsObZqJV+}A1#krc1}Ixczcjyy(^#x7)5 z?IyJZE@U6L$FL+AESMaq+i%1((OjR&N9_UO+?mp@IimJFfi{zjZy`Q$KX()*T22bHZO;UmQvc`#AQn-@`#mxvnN5*d6ZUWO6+0L4TVR{?@1#OKGF)7aKV39$x~ z=ZI`KGU}};29iQ>SU@51sFe9*>W_9vFya=X*X(IR-xM8EaUIZX@GXeaftzk{WK()X z@x=@dn?;SzYfN^^creGdv+rVf2o7DgTBBeE``r_0JeYsfhJjz)ngK;TbRIN|$N^?R zkvGCD7IWq`C01rD#EElfWR>s8a^gIxKO`#2**Z4SJhMVK&ixooKXUeTY-$VIG+o0d zp{#bt#TWgoh&^#UYkKUtcm<)Nl3iA;-So3CP7PWK!XKn82H|?KpBzFIR^Z#=AHK=md3qIH8Hz*u6an#xHs)Q zdRXYa+ama-IE~^Z+@|PNPeq-3YLQWmmk}0o6mR|*my_8dSUhz@3tj>PW(g<@6{&>r zw&=odF^OI`p`~4c;$`}D7f~DtuDO!w$6Eh48}$qnBFq&egN=Y;+PRZHs1z2}0D@Yy zWVC*?UNUXt%Pjr4mtN(11cdidjZQRcQ~A&N&Z((5;VR~2$2lp~ix54dVveKUpAoaH zxI18hHG1Q&$F~5Z=gvo39Yd&<7`Ge{c-{gB%YYro-zk0Z`=&sbe<=L*(${wzYXf~G zYrOY|OnuOgy^==hT+7;#F39glEBA060DF|4d>4DN$m!ZB{V4O z_wnxx^}12%{mLeVYLq|)Q5cVpc~e!7fwN1es%0Qm>5uPZin~yeUA@kftIrbJ#qcB{ zX(O8tM+#XF8HZlUYM>h#IijA|{BpgSPi#l_{piy=uhL@v>k-|p3sNV%1#87f?k^^U zv0Xq9p_p%+rZcEz-I+eWbEf}dQ&`nE#n9!Xt;Gl*Kue~{(;=%$F$RuuHqD+sb2LUBv)_Bk zgItFd*i;jtY4ToL@#RHD--SuUN0w(F=p=?>jT~Z*a^)uYsUSMIf^@QnZV<>WOP@mv zr>VeuDP~CO(k`f@^ME1=>;lH<@B8e2{J%dW6hPBN4=+)WdywOJkIUkGPfd2iAo$V# zl>0!{13Dy%kQePakh)eFa}RtxqKZV|??C^({O>dQKD{2Ug*r@gvXQ$(kYb=Q54+7E zUd~6=m_6eLQ%)gsT`f-lm1Tv9{2a)$Pwy!Oav+klzb7zQ#k3*bImWOz!?cG`0 zv`Wa{g>wW*##Gak|CWXU_Hv|{1#JbDzpO3c!eu6e7-k*uYmtTJRZZsk81*1=Dpb6M zW~ELtaAdB&z?#w^r|g`+Cym~t*wnOAN(dh21#LFN6Rlrj&3x9-GQ*6BgeLM~wj>Y2 zIZ!OS>X}ghP?Ys)R*5uSR)=uw?%Zz6#pQZ~SagYSd+2dlgb;x=+(&^BL9c z;C3XV(L8y?Y{`C0Ax$7#w6d1hJhP%twZov)HsoZDNu{M5gst^j;5l(#GmNM6TnL?q z(+e>;I|K5ct5fT`XW+vVOus+cg;)P?5rT0w@vG)kTjjnQP8XmB zp__TL3*A#Q3k!lzomX6G`ba~G!b-PG&6GL0K#QH$ORS&76YY$D5G*erID2@vTE1Lj ze!IXsGa<aoYNoltT zL%ZGiJN<4&&Sf~a$c^b|w^jo8huj$NSVXQh6ySOLcAq4g4*pBmb1y||FA*R*PewNg z40FwKv@+BFw+TA}?BeWl*ynN(QKZ2;Wkku#YwL<% z8@-hdj@ZC^>7}9rgn;e}Sya31Q$=H~;#e)>e!BIlZaoAb5dV zfrQiIy}ZQyIT!?)g#x9e@Jv1>BgetSjZ&KBuJ1i^rN=Ss(e)8S0aYS4{uT82Pdp3o zb+4UZyPMepJdea&UxBLH@ULYtj(-t=(I}5A68vBU?-dTDO`*jg(0q#wcsS*K)f!(^ z9xHLm)MK3fA1GI>MLsZr3JweKFAF8C8CQ=iS_`lQa`RDoYlRA8uCClbPoMJ9hcZ!4 zf<0Yp1dnk{gCaI-jVZ9kYbgB;HqhtNt0vOciDeowekj}J>-GnWt*q4_L zo&Sw&;9W;ZESV-LCeIaw(SL7{u$IEb-FF1Q>^csWHAzZ7A^qL>&9bTg4r`+3k}v}n zf^?K-Ubgm?N&~>{?RYoqDOKa>&XF5C43Toz^Te#uIo*wD8FWrnbCRj{T^I1;&^v3} z2yMcxoHpF6yV8bs2|S*poMp394paF8_y0k<{!cTUR(Ar3EYoQAhrD|5d^3fP~7M+DWFi~D0Z}a55-*sJFKa%}Y6cGZGBoD%_bg%D>M2R_;7W_O;6dv#2>-=U` zauB$Hv&QjD^O*dm{FodZb|$f*y&RI8=)NPk{7I(J%tkrPUxjE<1FgjHTOP8k$vi9T z!(@VOFD!J@4iLTZCYovb@3xo`GqVuf(2I~))jOu*%Gu} z;bN*&{6Hxz4h>IwLV$q%PqGPkwiTT~*Ol6g$o%!?#HS9;G*7z>PnzIGu3I zmV`=sSa&{#Aw{Rx0was_u@kI$Cn-SAm!)t(U5Nr->j-YW4UK=p$)l3$VUMaX$)(kn zU5Wih8B5e}EFQr84eXam94Jl(V&gP2*DUNDXy z@l>9``%}vt{hQ~?0od!M?-wt+P|n{M{)O)UMG5xH!%4KIrKE@nF~NZO2Wd4*?|m>L z0V9+4f*dD}7TC}TpaAE0sI>g704Xy#_RuVHO$HfWF_If}24cRrdi`$;Q-*QJR67!N z$BBK~Uimgs_{0Yq@!Ut&-;%oPCCQuy!);?vqQ=id^gfAXOY=S~Dtw{3^i1vhYBW(` z6#U~MoNwp({XtOo^ZyJDK|a;ojM)RIVe z87oot4EDOld8-!kWsIwMs{P&Qs`tA`M&p|Thq{0UHFIBHeVU{S7r$@lY}_If;?(G4 zSt&i9nG#6>W}DhQk!tpDu%;6X*y;DvOzGnDHNJW`E+q3^Rc9_$H+v9euVb!3bgGcxe%%`5T{Mks9IPZfo?4U;On zna{zH;D@C(LZy77UkSyZ(SUIYH{_uo{}rAT+&2$(ch@LYWN$AP&JpXzW z^q3xu#M~&t?;3TTaygZ)f!}%I(fQF)`d_qL8CB!n5?3AstX2h|v{W1$bBoP6zXsK; zAG0yWczO*;h_MJIbs~fqu%bfMj4{9B2-9lFFVFKeyZRjE$S~Zdn7F-lpqOF1nOK5u zcrX|sV`g4?_L#^HdD8ruWAb(+A|^ij!6{4G_fXD2FXxWstx4b|q-$YnyuNSA9WK+g z_0Rs7{y#K@My3KfLw#K3+yjTG8jf=PXo{E3C*lCMGBYU%>~P)5vU5F<4bf%8)Vtxu zCeBg|R(107F_p%SBv4enk*@{Rzcu^zJ15(m@`=WxT{6TJg|A#~Z*o!mCc?Qb$Vwrjw zCoTAOf*J!imrKI4>03}uhA|GTu6kFq1`laGI&9bmdS5lC$jDFIYBub4xWt6semYqy?K@$tZu$S?woMI6xh+I&?a-{0P{p~_Q8A|2 z+)Gu%Xeq)|PhYQl$1$~`2OKI3anEq0=f=y$_1_Irdki<0ne6@D<1->=#ThiYtCg(cZzDlboG+H5 z4t3+Kg-N_zqjv)PEZG?cQx&S$dOXzzP;ppdVaf+he@>?K|00;9*fS(CV|#@x*SyR= zQ94f7BY01zX3C}z^rBzbnZm9u>8y9A;a0dSP4PA&a=ja@lrh0HTqu)nCgDkZ3s_0_ zZQt!^MysEQ@rFD_-%$c{yZl0vmbfU`W5I3?v)EAY^q^yh&Yv|W2lXr$2=@?iLPw+5 z*Et5PtRSLLT}~j*=zfJm38|fX5daA}g@5ms^ioo&7}8Q!cWq2^GUUXgb@1Ym*7Xib z@oH5q`;OxFyDTM3mX-L~k#u-&(P7+Wj-bFIT13&Z-)4g~p!|BmCbDVQS=y%i~C$R&vyA)^k#m9kR#wgMn>rHz}^p)Oi@D#)c z>p$$5|8a4YQL`oY%2Im#reMF$!O9pVa{oW3&VsF~cJ10qcb9Z`cQ?`v64EW8ba!`2 z3DO|lUDDkh(jeWv$n{O0XYc)fKfps4i#hN6y2cpifYK5tR17MH*h+*EsgG}7g>^RB z3pzOT?h+b@Xd9i$_(bKpK`EI8MxI^fe}pD5ByJ z57HY~*L6KL)v2*7!}vQxY7Y+KLy{ZiQc3Hf#X*mlbE%}&2X5?oVQ0eg`_5^b|K8!` zr1bcTNdm3nv_HiQh#R!UcN##1Z`#HT@hu23h84oq(?{86iIb{8@SKcYnE$0^40gg8 z-!--F^tCe9F5)*WOPbIQq%l}u!^`qY*Ud*KYYD_}PRt@$4ULd2y~X_P45zO-l5vPW zlsf)U*J>uPg$AL48(J5K<2$etcFb0J4&MIzAH$nHpfA1^XjOTw9ls&0ya70M`^()5 z&yrEl;cOAltEMU~b`9TkpAECHS7}V2a}^f|=gf zGxj2ZW7LV9MC>&4vQ#+Ah!3+Bk+&mSMWrg^ID_Kg>yUWv^>BUsZaK>|9N_c%oeS(X zk9F9*I|HZ>B{(ta-+W%Ma*4~ScW1ZHoE;@9DCDfmZCTy<%3Qvl!sSj(aoPgF5C3;K zksvDg-!;s}>s=FoEna#n(E&(q`>n^7h^?SCKn(>H(&x)Tl1?BB#+kL={B^+;{PMCw zoGEZ~VyW>*$VMY|NN>Ijlq=27R@=J%@&;2S|&Qln;{KZuz7h?+|JZb|7zZaC%rG%$k*N6^ipqMdo z!g0#pkXi+q{)FSdzrG6)-6M1}9$#m`d;h&M9@c`nNUn%bY2ev%GdnL`EO%z1=izU7 ziE#cWJSb5bTOI7ApuE=Nc#&*tc6jGYZp4ZQiQ+bVSp0K2i%pHRd^x2ta+;qp8&4Zf zkxPP)djskLTXEm&lPv$ymyJWPKQ%udm1VvLdwoKOjk0y4|Ba$d>-Ad` zeG=5a!MPVYs9(3~m`yFTuSgI&BCgs;8=g=cp2q8fK7Wbzm$6PKN0cu}JXSufA19fr zBLqJ+Nc`T2XDHCAVEW4VT^5#b=g9jnps_U6)q1r-=wK#+)LCBJkHrQ$m`?PugtJ_n zD6r)8WpO_+`#0obbw^o8UHuHwNJsjP#)^5?ovkA35dKR!P4;B)JI zJrYMoWSFJH)GY;_dNp-z1h8oDZe+8inG5%$_EX-%N=^F(vgL{8PT>Y)sfzKKBR#

N4++wNkl_A(O1j; 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

qv#QCVwV9LQUxi!h5 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�X`{0 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 literal 0 HcmV?d00001 diff --git a/help/sakura/res/images/FileAssoc-5-ChooseDefaultApp.png b/help/sakura/res/images/FileAssoc-5-ChooseDefaultApp_150pct.png similarity index 100% rename from help/sakura/res/images/FileAssoc-5-ChooseDefaultApp.png rename to help/sakura/res/images/FileAssoc-5-ChooseDefaultApp_150pct.png diff --git a/help/sakura/res/images/FileAssoc-6-ChooseDefaultApp_100pct.png b/help/sakura/res/images/FileAssoc-6-ChooseDefaultApp_100pct.png new file mode 100644 index 0000000000000000000000000000000000000000..f91d88430f06940098d00f0cea5db71e698df082 GIT binary patch literal 36907 zcmc$`XIN8FwC4?WQ9u-=i71Lf=t`3+z4wF?nsf+FI?^pb=+b+y2_;fOFA9iCk(ST{ z0@6Z<(A%7N?>sXf=9y>Sdq2Ei5=hQDd!K#wUVE+I`mcm(swQ9h>GI! zrC^;8RywwZ!$xF^8Xm>*6T3a{;)FO>$9>Du2O_i-ODAFD2EOYaEe=y{yUq43Eor)S zCdb9yn}Mb`#c6=fk^DiH`s|%|m`G7o4$YGiKcS{XkvS6oAX%P(-yps}Vjy* zC1GJ9z6Sl@zVaq44-V!lTpW+KQQ+(nhS|n!ILO{UzjmWI}Gga+#BTOKkhm^Xtciv9JV6 znyVJdkw*jaNhK_vOMWG6!cJ55mcnbp#TtH1ZcFMd$TzmkSLegSbDRDR1ZxLaxyFxf zMsN|okxp5NK(MEt)jEv7aQ&-DPT0Wte*19M|72hM?Vlij%+%EBm_$loQ*2#0nE$?5GHXOP;N0G&P6Q&6`F>=oG6*Igg@Doht{HQ%g?{HYw4>HvT;3 zvxVZIc9_^F3aux&&EM%ls3DJM>KSwe<>4iDZi~H@+Yz)pwS0@csW10q<)1O8>5^Rr zP7GSDXyRVYSNA&HGAq|Zx#Vbnm@|un<6f}(CqISfCBC63Mr=oMN2$0D z=Q(-Mc5${cTpYtJDUm>&fkBKf52r0p5SUzJF=+dwHF(GAz?y^!Y*j?5CUelDLf-7_O0!4AeBDhho22{D=;_ z_dHANUDXg%nQ2=9rbO#_!5E>IU0YMbY0`X{8~U(2OS@(h`UYmHLJG_xB*tQ)I}w`9 zCHCpf^=6x)+~vu-O&Y%|A-Cz{rkd`2Fb-W;*Q+-MC%3(FTO2FG|NL}^z*T~w1a5bG z3qKJ1_Hb*K{-yP&o@rWBze>l++EEkV^{EE8-HiaL7kLphwy{Ikhfj`8w6lULyzQk%`;5H{?|`lc=EY{+i2tSFl*OZ!AXrCa=v}&B4?;GeQj-M9L%?AZE!R=#Y{b z%MwD#9B_X6PV`*wsfrX@>}0Ll$GFzPfS0x6y}0lGvIyn($cN&`h~g}t!`V;^gbuAG zwiK#ohef^a(sdlKvch8!X}DG$;{B)z;S!obSpmm(tTs*Oi4Lak7HG&nRR9yWgr!|? z68yU7JfhX=v1HLOCOi1{y{#o#Ene-&)l~E6{IX zHK4aVISUS@&8JeXfz**UFm6Z7LM=}MGTbozo2m2!I%xt-R%_5rYuB@B9cyf#Q(qjR zdtIt{NZkka@~Q8WTLGf3{Y`C=XYcodo%$=@uSE^6)mDS3?B@>mFoR!Ia1v2mv>;$s zf~oe_!ZlO&+wwOlv|FU>RM?><+L%{`$hv8tQZyPO7nia@eX-GYajrkU1$NS2k&$a7 zy?iYacnJ4dM{1RrrtOA{XvUMDXZ!7l&KyP4@W%yrd#sK?$}jv*w|_LOut2=Gsl6cC z&3hw;9uLYsAMTBs7K7|QULzkWRrd7Aj77B`E2A!7r?}0^_OLfwa%MA@=58XXJGw-~ za=25&-nbBS1Pum#v__RG8lJnRy>ct^d`w-0L{~*Ao00nkht^a|8ahnWu)7BxO#5n> zshW~E{n!K+L9u$Ki1$`b?UC=yiHVp_EJZ}c-=@vhlihwvFV>l=XLVuDHK{`=sES7k-y9f0i|#|FWpiTaY>9 zV+B`R{<>@2E8-&}AQG82nk_&Z!kGJU1S8*98y}T)usOrb9Z2*8N~m*-G#NCpc``bA zAl|D_@&xnm?d0Ma8y_R@g@=NSY+v`?T0h7eaZ>0ofm}{~VHIAa_3c}+tVS$KmlQd2 zSPu*Hk}oW30CpqrXC+)#aY+$rqE%NU{k@1N{spcuA7-w<#jT*F!+{7!nh^ZZqr!Mm~!G?Kros#9G;tSdbi{ZCsnv&U(p~R zm^HAV$J^jIRlj|9FjHq{FK^gl$s~!l1D+Mt;EwjGnIn7UNv$TfMPqytHIOIfu-Bpf zGZdP+&;dSGxt~MbK|nn7{qz1h;Y;f09~0ub;>rz@FvqH?SZM19pDNq@Yk3WAS!b8U z5-72+veJbkVCH+e(1bV6ZD;$Rb2!bg1p^I@^9z<-*8ZY~XmfOJY;Nh%-IAR)PzJ1h z;tVbRJr<8;{0&lu+9mxt*Lf`Z_L2Bx*qK;1iVMJoi`$bMI^pef(ki2 zu{KiajmpVnc~=>aL)zEe>oylKW22ghuUY%ARq&(l)fU%=P~=B^gGPl6l|kG%Gb9eC z+<>`NMUm4=4O1zLnIqNea5%da&v@#-P%2dh%gUVuZix_K+rLXq4yGTL1G`kc9eS@VaC=3yO&H{V!eK1_dUZQ5eI?*vL=$hZsAm%2TPWYOlG41ZFCM2RyYO{F*VZ zugl3Un26GfFeI(6WkmX)X!5mnmPE6m!=KGy4TQr!Z_$hJ;&bA z6`}`q*iKd%is4gPGyODj1jxu)-DejPaHtk>?fO~k3^K+0(;^>QPhfgwzMOlVqlGHT zpzkZ@y75p^itRO99*kCiYveP

4uh!tzGn=bQzULG?50`x>9JcBvb$1Dn3g@TrK| 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 $N}Chz4vU|mbDjl(`u$S) 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 sJ76@B0So!}{~fz45 Date: Mon, 29 Jun 2020 03:43:06 +0900 Subject: [PATCH 0018/1024] =?UTF-8?q?HTML=E3=83=98=E3=83=AB=E3=83=97?= =?UTF-8?q?=E3=81=AE=E7=9B=AE=E6=AC=A1=E3=81=AB=E3=80=8CWindows=2010=20?= =?UTF-8?q?=E3=81=A7=E3=81=AE=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E6=8B=A1?= =?UTF-8?q?=E5=BC=B5=E5=AD=90=E9=96=A2=E9=80=A3=E4=BB=98=E3=81=91=E3=80=8D?= =?UTF-8?q?=E3=83=9A=E3=83=BC=E3=82=B8=E3=81=8C=E8=BF=BD=E5=8A=A0=E3=81=95?= =?UTF-8?q?=E3=82=8C=E3=81=A6=E3=81=84=E3=81=AA=E3=81=84=E3=81=AE=E3=81=A7?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- help/sakura/sakura.hhc | 5 +++++ help/sakura/sakura.hhk | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/help/sakura/sakura.hhc b/help/sakura/sakura.hhc index e8cdb5010c..89516ba3b6 100644 --- a/help/sakura/sakura.hhc +++ b/help/sakura/sakura.hhc @@ -66,6 +66,11 @@ +

  • + + + +
  • diff --git a/help/sakura/sakura.hhk b/help/sakura/sakura.hhk index 6f5655725f..162d152541 100644 --- a/help/sakura/sakura.hhk +++ b/help/sakura/sakura.hhk @@ -49,6 +49,10 @@
  • + + + +
  • From 5432a98e91479165159996f1f723229d9c8aecf9 Mon Sep 17 00:00:00 2001 From: Katsuhisa Yuasa Date: Sat, 4 Jul 2020 00:08:39 +0900 Subject: [PATCH 0019/1024] =?UTF-8?q?=E3=83=98=E3=83=AB=E3=83=97=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 「Grep」と「Grep置換」ページに表示するスクリーンショット画像をディスプレイ設定の表示スケール100%でキャプチャしたものに差し替え 「Windows 10 でのファイル拡張子関連付け」ページに表示するスクリーンショット画像の上下に余白を確保 strong タグで囲まれた文字の下に2重線が表示されるので、それと画像が重なって表示されてしまわないようにする為 --- help/sakura/res/HLP000067.html | 2 +- help/sakura/res/HLP000362.html | 2 +- help/sakura/res/HLP000374.html | 24 +++++++++++------- ...GrepReplace.png => GrepReplace_200pct.png} | Bin .../res/images/{Grep.png => Grep_200pct.png} | Bin 5 files changed, 17 insertions(+), 11 deletions(-) rename help/sakura/res/images/{GrepReplace.png => GrepReplace_200pct.png} (100%) rename help/sakura/res/images/{Grep.png => Grep_200pct.png} (100%) diff --git a/help/sakura/res/HLP000067.html b/help/sakura/res/HLP000067.html index 59c340e06e..f1b25030c5 100644 --- a/help/sakura/res/HLP000067.html +++ b/help/sakura/res/HLP000067.html @@ -12,7 +12,7 @@

    Grep

    -
    +
    ディスクにある複数のファイルから、指定した文字列を検索することができます。
    指定したフォルダの下層のフォルダを全て検索することもできます。
    diff --git a/help/sakura/res/HLP000362.html b/help/sakura/res/HLP000362.html index 217d2e24b5..3e854c4da8 100644 --- a/help/sakura/res/HLP000362.html +++ b/help/sakura/res/HLP000362.html @@ -12,7 +12,7 @@

    Grep置換

    -
    +
    ディスクにある複数のファイルから、指定した文字列を検索・置換することができます。(sakura:2.2.0.0以降)
    指定したフォルダの下層のフォルダを全て置換することもできます。
    diff --git a/help/sakura/res/HLP000374.html b/help/sakura/res/HLP000374.html index a3143ff055..92aa933fe6 100644 --- a/help/sakura/res/HLP000374.html +++ b/help/sakura/res/HLP000374.html @@ -6,6 +6,12 @@ Windows 10 でのファイル拡張子関連付け + @@ -25,31 +31,31 @@

    関連付け作業

    1. スタートボタンをクリック または Windowsキーを押す
    2. 設定ボタンをクリック
    -

    +

    3. アプリをクリック
    -

    +

    4. 規定のアプリをクリック
    -

    +

    5. 以下の画面で下までスクロールする
    -

    +

    6. ファイルの種類ごとに既定のアプリを選ぶをクリック
    -

    +

    7. 以下の画面で下までスクロールする
    -

    +

    8. .txt の右のメモ帳をクリック
    -

    +

    9. サクラエディタをクリック
    -

    +

    10. 以下の画面になり、関連付けが完了
    -

    +

    diff --git a/help/sakura/res/images/GrepReplace.png b/help/sakura/res/images/GrepReplace_200pct.png similarity index 100% rename from help/sakura/res/images/GrepReplace.png rename to help/sakura/res/images/GrepReplace_200pct.png diff --git a/help/sakura/res/images/Grep.png b/help/sakura/res/images/Grep_200pct.png similarity index 100% rename from help/sakura/res/images/Grep.png rename to help/sakura/res/images/Grep_200pct.png From 5540d26aa1604a143d3516cbf813491a91e322e2 Mon Sep 17 00:00:00 2001 From: Masaru Tsuchiyama Date: Sat, 4 Jul 2020 09:56:15 +0900 Subject: [PATCH 0020/1024] =?UTF-8?q?colors.YELLOW=20=E3=81=8A=E3=82=88?= =?UTF-8?q?=E3=81=B3=20colors.BLUE=20=E3=82=92=E4=BD=BF=E3=82=8F=E3=81=AA?= =?UTF-8?q?=E3=81=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- parse-buildlog.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/parse-buildlog.py b/parse-buildlog.py index ba26d2b216..3d918a4486 100644 --- a/parse-buildlog.py +++ b/parse-buildlog.py @@ -41,6 +41,9 @@ 'lineNumber', ] +colors_YELLOW = "FFFF00" +colors_BLUE = "0000FF" + # infile: msbuild のビルドログ・ファイル名 # 戻り値: ログの解析結果が入ったハッシュの配列 def parse_buildlog(infile): @@ -173,7 +176,7 @@ def converterPython2(value): for x, item in enumerate(excelKeys): cell = ws.cell(row=y+1, column=x+1) cell.value = item - cell.fill = PatternFill(patternType='solid', start_color=colors.YELLOW, end_color=colors.YELLOW) + cell.fill = PatternFill(patternType='solid', start_color=colors_YELLOW, end_color=colors_YELLOW) maxWidths.append(len(cell.value) + 1) y = y + 1 @@ -211,7 +214,7 @@ def converterPython2(value): if key == "relpath": val = entry['relpath'] + " line: " + entry['lineNumber'] cell.hyperlink = entry['blobURL'] - cell.font = Font(u='single', color=colors.BLUE) + cell.font = Font(u='single', color=colors_BLUE) else: entryKey = entry[key] val = converter(entry[key]) @@ -284,7 +287,7 @@ def converterPython2(value): for x, key in enumerate(outputKeys): cell = wsError.cell(row=y+1, column=x+1) cell.value = key - cell.fill = PatternFill(patternType='solid', start_color=colors.YELLOW, end_color=colors.YELLOW) + cell.fill = PatternFill(patternType='solid', start_color=colors_YELLOW, end_color=colors_YELLOW) maxWidths.append(len(cell.value) + 1) y = y + 1 @@ -294,7 +297,7 @@ def converterPython2(value): cell = wsError.cell(row=y+1, column=x+1) if key == "blobURL": cell.hyperlink = entry[key] - cell.font = Font(u='single', color=colors.BLUE) + cell.font = Font(u='single', color=colors_BLUE) val = converter(entry[key]) if val.isdigit(): cell.value = int(val) From af16b9e95b0031ba22827794e0c40e21e247bb76 Mon Sep 17 00:00:00 2001 From: Katsuhisa Yuasa Date: Sat, 4 Jul 2020 18:38:44 +0900 Subject: [PATCH 0021/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- help/sakura/res/HLP000067.html | 2 +- help/sakura/res/HLP000362.html | 2 +- help/sakura/res/HLP000374.html | 18 +++++++++--------- ...u_100pct.png => FileAssoc-1-StartMenu.png} | Bin .../images/FileAssoc-1-StartMenu_150pct.png | Bin 20545 -> 0 bytes ...ing_100pct.png => FileAssoc-2-Setting.png} | Bin .../res/images/FileAssoc-2-Setting_150pct.png | Bin 35734 -> 0 bytes ...100pct.png => FileAssoc-3-Application.png} | Bin .../images/FileAssoc-3-Application_150pct.png | Bin 381063 -> 0 bytes ..._100pct.png => FileAssoc-4-DefaultApp.png} | Bin .../images/FileAssoc-4-DefaultApp_150pct.png | Bin 367797 -> 0 bytes ...t.png => FileAssoc-5-ChooseDefaultApp.png} | Bin .../FileAssoc-5-ChooseDefaultApp_150pct.png | Bin 335842 -> 0 bytes ...t.png => FileAssoc-6-ChooseDefaultApp.png} | Bin .../FileAssoc-6-ChooseDefaultApp_150pct.png | Bin 29485 -> 0 bytes ...ng => FileAssoc-7-ChooseDefaultAppTxt.png} | Bin ...FileAssoc-7-ChooseDefaultAppTxt_150pct.png | Bin 61293 -> 0 bytes ...ng => FileAssoc-8-ChooseDefaultAppTxt.png} | Bin ...FileAssoc-8-ChooseDefaultAppTxt_150pct.png | Bin 80753 -> 0 bytes ...t.png => FileAssoc-9-ChooseTxt-Sakura.png} | Bin .../FileAssoc-9-ChooseTxt-Sakura_150pct.png | Bin 58564 -> 0 bytes help/sakura/res/images/Grep.png | Bin 0 -> 15672 bytes help/sakura/res/images/GrepReplace.png | Bin 0 -> 16026 bytes help/sakura/res/images/GrepReplace_200pct.png | Bin 54835 -> 0 bytes help/sakura/res/images/Grep_200pct.png | Bin 50368 -> 0 bytes 25 files changed, 11 insertions(+), 11 deletions(-) rename help/sakura/res/images/{FileAssoc-1-StartMenu_100pct.png => FileAssoc-1-StartMenu.png} (100%) delete mode 100644 help/sakura/res/images/FileAssoc-1-StartMenu_150pct.png rename help/sakura/res/images/{FileAssoc-2-Setting_100pct.png => FileAssoc-2-Setting.png} (100%) delete mode 100644 help/sakura/res/images/FileAssoc-2-Setting_150pct.png rename help/sakura/res/images/{FileAssoc-3-Application_100pct.png => FileAssoc-3-Application.png} (100%) delete mode 100644 help/sakura/res/images/FileAssoc-3-Application_150pct.png rename help/sakura/res/images/{FileAssoc-4-DefaultApp_100pct.png => FileAssoc-4-DefaultApp.png} (100%) delete mode 100644 help/sakura/res/images/FileAssoc-4-DefaultApp_150pct.png rename help/sakura/res/images/{FileAssoc-5-ChooseDefaultApp_100pct.png => FileAssoc-5-ChooseDefaultApp.png} (100%) delete mode 100644 help/sakura/res/images/FileAssoc-5-ChooseDefaultApp_150pct.png rename help/sakura/res/images/{FileAssoc-6-ChooseDefaultApp_100pct.png => FileAssoc-6-ChooseDefaultApp.png} (100%) delete mode 100644 help/sakura/res/images/FileAssoc-6-ChooseDefaultApp_150pct.png rename help/sakura/res/images/{FileAssoc-7-ChooseDefaultAppTxt_100pct.png => FileAssoc-7-ChooseDefaultAppTxt.png} (100%) delete mode 100644 help/sakura/res/images/FileAssoc-7-ChooseDefaultAppTxt_150pct.png rename help/sakura/res/images/{FileAssoc-8-ChooseDefaultAppTxt_100pct.png => FileAssoc-8-ChooseDefaultAppTxt.png} (100%) delete mode 100644 help/sakura/res/images/FileAssoc-8-ChooseDefaultAppTxt_150pct.png rename help/sakura/res/images/{FileAssoc-9-ChooseTxt-Sakura_100pct.png => FileAssoc-9-ChooseTxt-Sakura.png} (100%) delete mode 100644 help/sakura/res/images/FileAssoc-9-ChooseTxt-Sakura_150pct.png create mode 100644 help/sakura/res/images/Grep.png create mode 100644 help/sakura/res/images/GrepReplace.png delete mode 100644 help/sakura/res/images/GrepReplace_200pct.png delete mode 100644 help/sakura/res/images/Grep_200pct.png diff --git a/help/sakura/res/HLP000067.html b/help/sakura/res/HLP000067.html index f1b25030c5..0c2d3fa486 100644 --- a/help/sakura/res/HLP000067.html +++ b/help/sakura/res/HLP000067.html @@ -12,7 +12,7 @@

    Grep

    -
    +
    ディスクにある複数のファイルから、指定した文字列を検索することができます。
    指定したフォルダの下層のフォルダを全て検索することもできます。
    diff --git a/help/sakura/res/HLP000362.html b/help/sakura/res/HLP000362.html index 3e854c4da8..c9fd2ca94c 100644 --- a/help/sakura/res/HLP000362.html +++ b/help/sakura/res/HLP000362.html @@ -12,7 +12,7 @@

    Grep置換

    -
    +
    ディスクにある複数のファイルから、指定した文字列を検索・置換することができます。(sakura:2.2.0.0以降)
    指定したフォルダの下層のフォルダを全て置換することもできます。
    diff --git a/help/sakura/res/HLP000374.html b/help/sakura/res/HLP000374.html index 92aa933fe6..264a0ba38b 100644 --- a/help/sakura/res/HLP000374.html +++ b/help/sakura/res/HLP000374.html @@ -31,31 +31,31 @@

    関連付け作業

    1. スタートボタンをクリック または Windowsキーを押す
    2. 設定ボタンをクリック
    -

    +

    3. アプリをクリック
    -

    +

    4. 規定のアプリをクリック
    -

    +

    5. 以下の画面で下までスクロールする
    -

    +

    6. ファイルの種類ごとに既定のアプリを選ぶをクリック
    -

    +

    7. 以下の画面で下までスクロールする
    -

    +

    8. .txt の右のメモ帳をクリック
    -

    +

    9. サクラエディタをクリック
    -

    +

    10. 以下の画面になり、関連付けが完了
    -

    +

    diff --git a/help/sakura/res/images/FileAssoc-1-StartMenu_100pct.png b/help/sakura/res/images/FileAssoc-1-StartMenu.png similarity index 100% rename from help/sakura/res/images/FileAssoc-1-StartMenu_100pct.png rename to help/sakura/res/images/FileAssoc-1-StartMenu.png diff --git a/help/sakura/res/images/FileAssoc-1-StartMenu_150pct.png b/help/sakura/res/images/FileAssoc-1-StartMenu_150pct.png deleted file mode 100644 index a4be5e20137761cb5b39025ee1ad0b5185392348..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20545 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�^M?t<7dYv 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%0A>mymiC+@-&helohwJ`{OSI)6Lf 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 Y=xJK0bD_W9*{xX%_Y^zp*nifKDQ@4GPX2cj_ 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

    cGS8D_Wmb}}6!XKW&gHpsY=2CJB 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

    YAZ; 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

    oLaX6Gb`9S93Cc@LWqChp7pi2Y`)8bopS%v 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‹q&Sz=GButq2>ExG`%Pnn~E`0Qmr=(|gHh0`dws|NJtX_VV zrwYNfoKt@R*G}+InFPoieK?YwS;{`mA{Ba-W$$Oc9mqgpE}I1z=S1&8SdH8c z7Sht8{DUF-Ev2Kpb6DykE^tly*;tGE@N2SxIn?TbF0Y6Iny!FD4{cA10CEEw-$_Wo zlh0=V^CSjh5D)f>zffEazAwd#*Ge{ET(-yO(EuSVB%?{3^*YY8v8r132tx~%Ezlw6 z%x608y95hY&Lvv*0ah`tV&>k1QaaGaac`U6kT;b+;ESobB~4>FwfP5bPjDPfNdc28 zBb69G)rWOs{^&f#b(dxKKkH4)Htf!{c>K7!Ub4pJcO@Fvxr(y9yP!ZyIECm(vEz0t z%Xc$S>vBiQ|9=#$;bpVd>(nzZq#rLq!6P6Xy8{!nbH9CoRJZ0~netp75%=WbaUB4& zDOG#$2M9L`<-D10HXG(CVH-$r^^zZ@1V`Y|r6QDMQO!VM`TKiTlLdUb$sEz^%%=+B zU||6Q|6A>Hg=Ef?{GLU8z8{9`sfF)87+?ELy=lt zW$W2u0KVS(>k>)xwnBEio!-p+gm1YriE8P_KgxF?xy@m-`^8m-s;XkDC7jq9dyETT z=c$2Zv5WLaBg?lLRf@7JR8Q6T?ia^x0xh9gp=>SZUF_4s zf*#z)T9MB3;MycRI7*fie!3!HRbc)$CL9%+y2<1cl^^ z{3cjQLu6P2c7UnS6SCYafW{U2*I2EG3=Ro;s(Xebd9H+RFJZ}CW_NRRf>sSd^k|E=ji9g#O#!Bqk zo2Lb;HS4-hOfb&PB~jhp;{g z?m&_++Ep6=SXV!A_&<-f*b&2>>)7S;5%1~LK5q~CK!+B2csQG?P9G<0%7$gd`rtHZ z_IRJ^uJ=5~k#xauISPvxxy?sFB;C5Y%-DffKZCY|O&uBN9n{3g;4V|-tF&MF13Y{l zt1x~oSN^}N9{jAy4g{_c<#X#2^)k9|ihRiK>PGm^cxS{Io<;5DjaO5{pko0l#dbfW z+V*08&$#MXm913?-nk5Jmjtt1P`GrAS;Tas3RHa86HERs^3xDCr?tUCnK&Y9qmnK+`+A+jAQ)Ur5U+}w?zY9Sc_@YgpfIF7 z+nkLww_modcNWsj2&u}T2%=E=w`#HeFb7;WfeRSLx=)9ojHL0ibx2vyvbS*UDvz7` zHvu#MNsXca(_8-VkgZ>0L(qgk@@~J|i6i3`_iri%PJDkY$G8h4Y-hDu>hgKfF-kbB z6%9>i%Nbhpb0A8~_Fi_VC>U$A_QM*PDv|TCc{)G&Lx`}P*S8eeJmk!I%%fxsQ3G;@ z2(|NRGo~X|m5L|(g|4E>gCapKvfYT716OFnU9F#INu0sO#)g&I$tq^AbEF>-pw#OC z6y~RuUSU!efOqNWgF)eU{$Sv(xAGJ&54VZ~ml6dzXZDtV_e(sqA|0`n!YUz}R1LPw zwb}bSVM$my672S5#p8Et9y>c}2&P{6-yR2w7m#0OYNgw0danUyE@S=>;<-iay^7ay zX9dVVIRDq{SYPBYApSt%C6d9{-4w=(Z!G7m5lMWZ%GcBtr5>YdytrY~<@u5rnj(Xr z3Tx}1#+sDJxeg3C*kWY3vRO4N)4$t=Qk2gz}>|apH9FHrRRm-k|%WgZKP|0tg!|W1$%q=zlc0CsF58}f;n-wb^ z8+0)t6R#BwS3%7QZ^3Z<8atf@y;{wH{2pro$wsTeQW&@&H+=k?pT3z|XF4FYLuxkn zGf7#yOb;4O;zH=)Zx+gjJNyf=K1<=S*}x;LtI!BF)N2pnd*o3oJ+m;19%Kv%`_Y0& z6PQ~_v?!Iz12IlSZ+xGlj3>HF%hX|BQuHSG!+E>x<6jvKAx=H3bH4bDY`I*ryRrX^H zS#kc1BqfWqP$WDo;zRuPS6+hrIz+W4i*fJzrQO7*e|lp@nP~|kNlkH;lL1+ z|F|OI_hJ>*Zq{pzqj9&sk5rQmkqr&5xugki%*CAsCOr;~354$m6FD!y5cwBO+;4XDS3S>Kxjm?!-}I5Wf?}vm z^9ka7Y0H;KcJ(#8CyaSrh#(w|s3N5_%i7+;Qt~7(X@A z!ROx#WF`lIWI~v!jndY^PR^u3N38h!J0jfUW2M(tQ+l*tO<8wy{(E?V82Ftp_F815E2v#1%K_wFsV{4}@BZ@D&a~(+Y{2ZhNe-}zzK`pMm`z5zu7^!WG zJwDlEFp$_w(V6O*G0<36<=U%b$Yvg?7F^WYoY9IUk%(Zrt)uf zu8LG!nT8Y$34VL*{U(XqY%mq9$3=A|A;m+e)JgXtW$wvNqG!)0%X8Vzh=V2?hiHAT zdMNa*pqn0^#N)k4nMn!VII^ygktZ1IEN7F{3t&}h)-X@&Xo1Ob)0kKIw92S#N%#V@ ze*lY3^jq9nxe?=qOj}8=Lryc?a?i3R6j-@J&`)T4+5qrQHB|~0A^&Xpjyg+a&$8(ZErDyo9IC29n_ z-N)ierIKTXFJ5y~b!qZ_jcuxF4`aeFdJOXD;@)-sLz`m%%Y%GYMbjFgnYl~tNiXWn z!dbLM*q~H`mpgG9pU(yK-*VzVKf$Uiq|i-IEFjn*y4c{EaTJcB;+sM__MFf5mRske z+`1uoMh^aPQT3^=saz@UMI*eH74SjBX7a_Q;j5}%g_cLh9U9cJ{K|632yKgYL=Ov%v{8fEN)pHyuPv_$B{^roPuS8tp z$D2)h6{fmUAfk>4Kr<~zF%aXtQwU?I!zVmD55P{O`emlej~POTBkXCkQ~Dok&j0C5 zp*j+a^fH?x%{@H00}V*wl2}?N%&TEM&p(Cfm6=tX`h5$VMVb?GQko1MVvSNDr5xoh zC@P^*TcWxDXw;aPWGE%LrPkRz@b`68BiKq>m)`k*?KM zb-kw=iHxZn>-mhz7SXZ{#&;6~O-vARghCDBlc^WOXOt`1E6?8|hdcM)%<8{+)5x1g zI3Lmc0rvsR`Akx(Y{l(*Q1w1^?T=4o{Tk1%L@cT2c02B$AhS@eR zAeP`D)Imx_t1ZA|c@A)<=+l7Nt93iz%P1fH2OF)_@1z)=uIQ4jHV1|M{$8|Kv3Pw7 z_un6T7AjYQMuO+tEys%kM_XbbG%usq9riZcg;c_YChYWmuM*cW zYq{(b;^Fy5+Hplo$JFrr_mq^)(+<*i^EY`7h7F9NB7DL{+1IX-&NZ$pGsWB|1~BC$ z?#7VgY$h+Ihav+HI$0&_A}gO69c7jc2fKG=#WtN;`Cgg7nXN-obmI?)x}^&2v2~U& zN?_%4oqz=i;Qz8Fm6>*LN+VgqOLj+?xx%6`H65s}BDy@|90>9Gbs(mHFPM!QiK%$E z4qEe-`v41EAT&@(Fj5P9dVj8LmeD`){wx8IVe^t&`gGyVjRxW}V6I}-Jg<3QDWc$E z+d5o;G@Dm!E+oI#e}w&HI#5NzWIuIHcxL&Z&(vSPTT~(Fiv7OGoioP2urX}+B1heh zlS7Fh)<=mxbTlYRnyaLEw?bCA7Iie&aqttvXP1|zxp7b8vu_F+CTDp}J~NUMY@1ix z9P2Qmzj1nbR5qrz?9$7tzpr>wNZ0#ImelDryF|DaMfM={JN40*R`!9<4Z5Yxt~+6V8?4oqL(uWYK~J>mGZwx%>`5*GwyebDosu!x#<-wP%AUspJG z<`cxi+BZAuCkeV(|647$B`j~z;WL(9&bvt-_E=9sbZdUa>Ay$I^4Ls!6Uao_ji*eeS52S^? zSo}Ya%Ws*NFyg-s4-Y9HPhUNiS=?wBSryszi@w8+oUtz`=I$U2Q9G=reeAinZ7#`- zL(MqhS$z0F9YqmGKULLJ?wapF@GH9LdqK~h)p|zgqm)#mce)dQQZQh%3M+3SbKZgo z?zAWOLBNuAJ56>IB?e}T2A_8x1Gq-qWA|+vEGA(QB(A-%aw5B;dDUYzTJ3w%cU zvBvd?u&vPPu;gNi;LRl=k^u2|R#9}aC=-Vs>^x%GOuhITL6DeYJ z(pL)K+B9m^625c(;x{N9480_q_Rz+tZ!TC0`Vf0lt~g9Z^rgGu^BVJ8@v3n30qn}! ziQfu6rUWtge=En-(-kt$vPdH}{dl9yw|Eu98rR!h)G-Z_6OEINVq{6kannUO>6J-$ z7wmPbSq#+YSW!hWWOK*AzHyq}E0mMmHSw|F1K3=wr{3;zS+b-#9MgaEG(6#(jj*su z$x=PidApB2qJaI|`Su~l3s-C(Q6^+Tf9U?@ihLN_{cMFapJ%W4T1bT~oj{LDE91^r z_Fk2UXTamN2`-QtUewT;0+fBFPUr$c3WXwpR%(y2OUU3?B~^KWM=WjN14uiQwhD@; zkQjrIH$o+4leN-~2-84+0=Q0ap=P{Yp-Ey1o{mqx9{_EoZY;Z|gbq)A|o zs;o>zFQUw*)+A|t;2qiKv}oXHOr|-t5k)a?u40JoLCYnNHg%25CMnAJTBS39Gcs5| z)FONvk1xu~tHcya0L7?csKIW$I%JbkRmLB4+`nzmTyOriOA$A&wKnG<3t9p80 zSW9#gwHUGIm)uT^VX1nRe*_D%bii^y#^)-BL}HMl`chXWgBSRm)B`SKUULbkm<@f` z+dZ9fycJCK=xux?y$4;Szy7vXY{kJ`)opA3!d#E`gi#)b0Iq#VB=Alc_`k?{%c!W^ zu}$LAoTRySr0Tx|FVgng1T&z1Dv2=iS%h11uI_ zhAWTrIDf}lFwj|LAQUCU@KB?q=}jR>Z;mJM2=8k33#@J*yXw08b@=XC9trWo+`t>K z;wNr3jJQyu+GqT_K>~chaxN%1qWC)}5B7SG^IbUr*H#*mYdo$bbTkqGO{2#CUAG$a^r$jvS{FjWLTDQ{9J#+89 zKjaCt7Z$bCG?6?NRt7s!4w7A8{jVYTsxtHZVmctnh14cMm0^f4cXwcS%H37zjU0ZN zKw6{@6{AtQ>Sv3;6Mk=Htl9{EGMDhY4dJZH3c9kOx3~%OzQJOiU!x9fh}6|^9Q;%z zJb)=wcs?~bi-^HEsUJ?tWvmxzynSHVQCQbYkWQZAT-VHLILmP!f3U7RW0ZS{t4AzX z>OqTPQZr)Oa!PdlOFb^g0Z^XkbRf@Tvk{LLGzhZNdSxAWAaK5~=ZyU@NA&SG(qkjs zR%Q0}OYBHPZsAlg;d~veOz0gHkM^6U3lm*TG$dXN_-z7BlQuDFZ-tq=HXSr)skqF6 z+j_Wl?63NjN_N?vx?*A8*FwKuE`f)3<_)c&=w8CHum&cdCGf98|J&*8g_G`wP+g$E z?$nseLp@*WW1dXRempL&$)JwF5jZm?Edc9v6-c_*DsBY}*9_NUZFcyW(pOvQ^^njW;0U-Cyy^ z*)TiBBnIyd)ukm-hp~>sdWNo_0ey`5F;fp21sMxzzb_Q&)0PrhqKtsL} zBE@|G>?(m4T_E}L*NGTa85p&O+H?tLCOmURpFYMtd=aS42Y$?gLDerhX2II%&ZgU& zuOWF+t6w%ZwN5m{kCk(wH=wi|V=p^`J2|lY9)KjJx#HR}qd8dP&m{Wi%jtaOg?hw` zXAO6oo0{pKpCWu@zTW?9 ziB;6~vcVrAH;ib6KW-5bJ+NNyPi=D@TgwOX0v-NCiPRIBz17Rms>KXRwD1fGL3?D4 z3jNNY^=YMijs$wX?x?fk2@7kk_RJ=mzFvHT^fE`wne_J{JwgWh{xGaQK^N)oYrikr#0#@u@ zU8A5xo8LsCKP^#&6ESkSjOy7}$;zKUB19tAe;(1M)EVH4NMAp`as`R3e#Y0z_uy60 z##KdK%8nOZmapWmDz@L(C@960jOq016}GQ1U>|~UcV0-zd%b}6TJ6jwv_>*&T7}}E zySFb?j`SAhSDKSd-qd!`qrAMmtG4x#qC{us=7?>sAWrwJv5zK0^Nu2lZ$o0@@roO^ zK<%>_a@B`sRRAd9O8PHCP|swqaR{h+9$X6nIgej>6al$nV%xonMZb%p+;am;bg{6E zZs$sjGj9=+&J%CM9B07RysIZ-l53YEkmaxDiAl3yFbWiTy8__u$)U>kx})&ycT`k&h~>j<7-xtwu*4B zM3GCg?`fwAg4tPr)qE@c4rVj0MeR^^Vj+03uy!pVdqnj%&n(zwY7zf-%N;(= z|J=rZ!7$ovthg~%mi3H+5uIpe3q-cOQ8gj~PY~+yQ|Xz+nuPn`OoP)ADE{xI{yk-; zpZ`dlikd-+jE#$P^5#$SamKIY(vLyOf&8=C94AR7X&|<~nRgnl6t+3?O0kP_9JTKT zOZwREFhqJTNc64^(>Zy%gx&WtQm@VQ$=le{hyI8sttO$@9!mTX?lfF`9?u|O*HS}t z{Zpm&bGC~jXOuEy<3h%-6Afj4&}>YF`&rvFOO^7v3nBRRNfwh5y!VSWmIH#>r%&kG z2c3KZ$)E+B9$bc?bIe;$QZQi6>J|U#b38J4B;Q)_rLsXvnT_GZ3!Y3#!?T^3D0SFq zVIkjboODwB_radOz6Djovi6UcgEs};Slys$3Gp!ol`!;!al=X=EQ##|Bv7OU?DoX8 zXC3De3vA3t+-~_zxJg5kMq(?WDiFMV#dhxBa+|nZ>kn)fZ&X7(`wZn7kVf}IIC>A#A!a}uWt${HeNQtHt97#5U_p2|(pCbq&jr-d>Vwb_S; z7}c8WbSG4l=Gf{j{i-_C%N z&Z({iF=6jWoLG7rl8XtdTv$rgxWdGrTzOsZ7II@iq|!*_EL?K)&M*GX-}C&Cz})B{ z%`Sg|ZXBjy>WX)j&lTKfGs3Qa_rQGd0+Np$JJk0=Evw+pkv8>9n-COh8H2^fOawVL z!K{TsEiAC3X{s@Hk%)qai#pP;=0wb~0C>bo zyWQe>tVKT+)9~a)_Fq?|`tVZ~2)2p7_ppP;M?=!^wMX~2s5g*E(g2(ZV$pdq*vhIT zuz?7P$A<8M#eFv`|JQ6>W;EnXpqsbA4~}He#|)`cK>uP~RevJfZ~Bgf;P8w#JoT>N zk3SU_gQ=|ki4N{D&Z$DaWT=b1*^80ytd$i_EnNf(1B|X?Z-=uoQ9f<3LlXm-zm6fd zhFL@VM5r35*+f)(4T>bxd^n~}`F1-+fXw1A`n6WmB z0(t+|E6B6QVm|c92krk%s47HULY*aW)i%MYHI!IoMHfnpx?>oYocd;5>1xvar=;2N z6=1*p!uBst*!FoLSYXrxl1KDY7oMyI%TV`RI|8MN%>yk(V6@39AmO?8G+8W5lt$0A zgkr6j`dbF9-BBJo919s{&#|(bxSh@#y5AW8U*lAxN|4kq_nAKr54SLNr$CrMgnY}D zUNke*MJXX7h6~Gd*@5S&986hHGwp@jITP{G}gr-rY_<#UKnCjc)hpkvg#EG=LEpOmELo88Qj?JS)e0j+ z2v^$04Mu>&f#UItU!Q!xH}_i<(V$8ukx7oIcK3Xmu(&KCD|>^vF_DugDbqKg_-NSISulzBFz=C={Q`IteWeJ{QTc3RosW2|2MwN(Zua5B>v<@`kRp)<6!optnZ!yIKp z>n%_|f!;B40b6HjyKj5R^@dlt9l?hxcD_J@%gmIWS4|kN1tznID-Sqi#vD}27{7_1 zv5c7HuU-}?I$HAE(JkO?j3p2;W1{4fLx&laB&3i_xL(4H7QhVNIcuk4TfL5A&}o5^ zO;P(NZj_o3oP{T&3r;ii3x!2+P;J)DRw(@UvcX@ulkGnNf!iYR532}VQU77mnxJ0+ z*rmR$VMYOmi)cwS9Q+6j`dbS8eF*`*zBT3zzm3N?eOScJy+7Ii?{JUO4n|UEf8>7i zu}dk*t#24dxQ#!>Dav1qw4`iGvzdX#hPkXJuRJpmUzFkf;uWfb-G^M zsGd-&C2?&gv$2y+M*=3Xa{Nq6%#O|{8TmItnHuB=lN+dbi-xh2$sDnc+o3Km5x2&0 z?rxq>eTEnFD=zC5T)lHz{Qam|vcw&=n!LlzDhICkuiPDjt?QJ>kgsuJ7fA?F8>a0d^FgC+F5I)$wAi6?Q)RM7rc z8OApZl#WoCkXvc$4T$ep?5*7&4qPi+twLZ4+g{BKnbrOW7;f<(T!kM`2<0OfRxRBsqgK;y$-@rc*37 zU7DR}*jTOyU%5MVF3%d=o)OElE@D-T#pGky^bxvFOk7H5YLQ`Kq7X8KCe=)>khju_ z5izumoQ2e7-YCZ*@+h-SvE_ZpWI~P-WEofR)y8Tv!h4qKVCw&7i|qm8x?*ZxGU(&5m0j?an9TGkZydAZS@{IA09Y`uyp>mH(=g6rbn zaxL{GVQoXrGa|35Il4K4w&}ZDR^BDFlSL|f4BJ!c0boCTm|Df)+rak8COVH6(;Xnf;gSS>S66t zM_bP$T<9JDYbYJt%BW_{3fiCRQDB(A!|wh4O3wt*&A2GQS%L8V#?Fm;q@6qL%&Xpw0hp+EdrPj|@dhW!rJ6|IeSL+WCmiUcHu z3SN?m&?|V$WqQS_*lgIYqsHVhZK$J+zLTD~7!?`Z?dd$Emc`QeR_2lvv{Gjkc2e@^ z@81lbe9d()-`{+DIXEaANRJe=xq0l~I7i8OG;|03iC8IxJU30`K4mI+Ul_k&^Tkz% zUJ-6Qt~YJPHDb{L%T*Sl;bSdX5@TPSg$qRpEvhJHOkDcMD`3%UdSK@>$YDgF3;^k- z;Wdhx1(J&j@GBX~gQVUrKr77725bf-?Pe6Vp`K=fU^e{~d5PCWRsg}}i z9QhHt*B}_p1I-I!(xE-N-qgxs*wTA^M_}p~CK7-=-;_G85y_^a zoJ|}Il%#9K?jI!+kXsWe^n1}nE`$t@QKaV08+lKEiANx{Vgv>8rxK}0PKbLK^_FB< z@f0H}!1J?f3iJ4R`Zy>DKaq$yNz&hDN7ZKZX}7$-j_@{r9C&m$Jj2{r+mPBhX{;5^ zY(X|DdGw=qb8~m%TwowV{c2yIqv8aL7Y-)&a{N0L4N8LDe}nO?nfgyaK!*_JW)r6u zBU!h3R56U6x?NV#=+dA1bAWR#Y%-kTI$gUEco|m)7kF>8`ZTbA2PVB;5MV zjhEOMspVzaX=~#TyrY6tF4HlA=g5rE*q@pL<~1I4R^FyV$9t!^FQn&eG!SqVMmU-A z+;P>oYCiMwjV7d7SqP`g8~Y6P^3fUw*6~%C@;(MHqeZRKewJ$&)93vOzr-6l=Ng~eee0s|#M*O9o9 zdUSj1usfpc-alo#%U({8NYv-`xlzqtTf8Trn3iJm@I|;E3_3S=MauIA5xygcu+Zu zLWLc?vzgFQc2adS>9X{4qHCrYt7G6* zYjfCO{dR{6QczY`fIaRH`5veaL|_36}WLHy;+R z2yuEfX#Ud{CY65L4Wn^RJ?(;kGK{(EL_%QgmQY%lSs`p!1}f#1ZL)SE#tSK>K>pc6 zmOMJ+Q3$jCd+_@L67L2*Oh1+Zo|$!lmFo$_|26w+)H}!ml7~4{IHUu*T*y*66uE}1 zshl$o{-7lJW6m?1Q}*h+Bl#Ymv9YxdWu%+h&>8$R*8|J(mwzjfj@EKZvt!5}Y!o}( zDA#CI`)pybLtt{8LK!=b%3K4V?Oxim0 z*MEdR%_IC3*BbtMoA>ducB-{7d>)K_?sZ=UGhYN|PP$zVDj0mo;;ed9CuPzhJc#p#T=OrJok-T!yKhPjs7T7GfGEi6|Mjx3}BH4cKyud}^Ht(V(IE^7XU) z@}FS1c62tI{6dI+4Z`s@$`mvNDz=sh(QC4r#wSNz7*t%ck`dd%0J!d4-pZbPf*iD24@2n9{N0mAZ44pa=vv8%H9OWX%FeQLgx-GS9GJ}z4vp;^0k8$6wK@mn}-3hQZ zPgqD}(3dW39HrqP#Xefrn%KzY1@)Up|DyacoA*J$+u`(ulEQ2RlE8;sXEL;Ulq;Qz z88VzYd+GK}uG-u~lks(%j?V@Q;42}!vp^q{`&mFI!G%Gk{@-C@jOS-~mZA7=E!}X< zm;44KWJu*JKe=Ige|k9s_6&rzLvN;uNq&W_iX&p{OdIJ*hn61mSvJ6~Hz)|Iw8yzt z=tg|=H*^-j*0)=fMgYEcXBF7>d}?tVEGPvS84aU4=1!!}!2=aq|C#L1J-eSo4h5#Y z;hhw&G1mWJBJ5ocJ9%(K)BV%m|C!A0;o4j$Ihfd49TO|0Tr-ULu?hMOizk{otnMiH zerPRZi@oW_#mS{OH0=C^%s<*9_SENN$NjqyY*B6Zf`o+!{C@u8jMLyr$mG^U9>f`u z3TE2Ge_0WoQ@~M&%0Tfql7|JdJ(ip+k_3u+^*#}07;{i`^kAj~({x}j@60)-vsdbw zCzN`xa-11dkH@V-$d_8Rr>+!69zy(jg3q>zU55JDdqvDfMu5{BCDv>l?uVKgiVrKs zb&Mn1{&4}l$s2N5G{?%czcFTe8C1jt9Y%%L_z-I8BN+cJS^l!jc$2L5^-;+kehwp- z>p^Qi0y)2*;F@_A@Ye)N?~#2UV&TUC^}LC0Nb@M%QU*9fCEv#7o&AtA)a6auj(nB` zo-+pOVZ&O0CAmIyjm}|C?2wh^1k^r|{cHSmrLqf0-adTeUnNqI}vonPf z(SGyLMzSQWM}5n|@pZN`mexoP%a3v9f?$1fK_8q#gjj@bBA^8cB#KY zaD42MZMXF7;>AML)JzmT+3)NX(=J(C|DOG|g=|_uhYL@-SzMD~PpcU3EtcOwm900|HYgdUG(TXp zyJS8Q$G~p0WoH3r`~M?h(8rTP!E{jn`Mdxb@GnE(ZneR;^Z`5c1FxAV?!p6(!s9x7!B3E`^CwYnb?R<6^uM&A$B}T6Gt+;x^g#&I zsqhdVB*pmg)gwe?>sll}bMck7!Ea#y@IUK>hB@e)#fR((f76NB#odGgTW=YV04 zZ;Zi8tRC4j}`%h*{UEPNIxnF|71 zhCkU?@&OlkP!Og50=QWffbv3|-lLE~(T}=ei0}7faUkwrVWq-HRX~Un-!a%91L{eB zBSw)0%j!YATX4$^`UJBizbe-$-P-M_@j06B`dePpwXNIja;XVwc|Zj_&t8KMzk~ea zg&)EWw=TB9&;vIR5ZplZaMaQ^PuZm*;r@>`aqeE@8#FVzi!Qv4X#7d>6p0UfXAQoi zJogGeIte3peA&fFqES_{1^crV(8s3UQtIUt`aGuH+ZEOWyHN&iiqnjk@GNq+9%8q= z_B`=3pW%IeFgUHQwV>JZyxAvk-s=rylE{~sJU2Fl zD8ZI2Y4$lTMitfi^+rj5h`p;qQJbP-HXUv4px?yY-CDynZh2a^Nzc%lRhh;qy2UzL zAJPC?y?O~bopg!^3lTh>#yDFu^RMu$KfvA2$9D;q{N%665*4(fVa)&_CC$?BV zE{d-(UH3ZoW45C_B$R}A>j|=oRx>Mz$0ftrZKm0>5mYk3r8DGQ7alSOLp~J)OV`=n zi1{1NHda;vsj_@%doJsYkn^-#C&Ikjh8Lu`CC}W(=L!IYi?0pTbGQUZeY5NNntZTN z^n-tmVYl0zRPIgw_?B0119-QC9=agH=CyA47n%>dX}=Tl90EN5dQ7+H_+DxoUqSD| zzrYV+An3-E=zeDV`eC1t#m`_Mq%BI~3jW_wru%%8siy4JN4S^quR+T=5q!xU4u!+A zA+q2bS=YsX0Uwdx#*sqskO|Q@BpOZHwKdz?u;YIK0Ra=xaGmMTt3NxvHQtkUe_i5z z4cr$s4_M|_NL*a~3qJ4QvRYUtXgJxV)hPMa>Anj5 zA_)0(9?>Pgp-@k7D9>DjbfLCo_og|&o{L{fpfyERG#S^(OQbc>G%Pz;1kBW8^*bh(|m$me<4D`4-BS6EGyg4vE9g zeN06+zAS++-szpso)T3Te+(u67EK$@eFznUldD1A|I$D-885>(;b7>0u@znQ0Jiv9 zvFqY}$DzpM=+>IbFf$E2kJY}WMFo6C51xDexVayM=l4doKDgP)|8~)};bFVE>$V!+ z1^rlk^~VXgbLxh}xYE1N;WR#@M;|!u4()$#j_fsrI{4hukI9esVx=G?^o8TSqd+AN zNul{g(ow}>tNfW83vEbY=#)xou>{^AqFy2m={)2y#*1<$#GC+hjKe`t)>nAw@`@z) ztBkW_39dZVCob*b+5;7qPIoVVdFynwpd{BqPCw_`+d3z6d4vz~?yiS@2G+3;=%!_N-;iGz8${&$S5T&nfMq zeyMs*!`{|X24w!Vjm_vsgzzl~2Pr)rbzd3}|G5G2o@|A%>qFDr>S30*r;V{!^inLZ zuUKIQQgIiykB*xcL-xI7mH%Gv!7z~JKpJm9ue^kF#5vZw zXTlR-lt_qG4@y3%_*l8=b!@n7rOG-mjAHR$2^{*;yw(n?JsAB5J8+eS_bKo~wXP7~ zB5Hw*zs!EPD)bio11FO9Z~X%#zM4Pf%Ds$vB!f4FzI%j3$O`uXXxL zTOr2j+VM1`r^Ev$nMj6LF5KGC(03`=gLNn9!Cr#8B6?GwJ8R^+BXK%_EoDcpk&K)@ zNxwIE`p&d`FuECy4Tbot>g>xE4zvVW9B+0E77psnIM#4eJksx|l6oY!xZGhmIC~`) zzfhBvxyHWFnNFcqClc+qrN2Y|{<**1P)y=bCCM)fQTJDB?nYt}053H*|9Q5W5W?7T4& z&Fl&HLtn86(RiP!M`c(Bd}pWjQcE~>0D-qy!56919fv>j+F<*653!Y^uqI|Pm@#;7 z*9nU6eK86I+?E1|-N2bI_;Lxa8y@ep17Lg~w9E^*Ti!g*r4R0`kWi~i-f`VH@S=|I z0|9%=Fln500_}?UAj`am0eTuXtpKJOXC+K{fMr_ey1Ix$sp050BgMt@p_p-Q9@px> zOs=bEc-MA-DBh-$5`(;;Gjy$8%SorgeBD8}_AJui3??;Uft#M7{>G_Qh(Ix)9bb#t zxTgKDAjLC05kS6c%$`k{w)dy4PfpU8a?h^o9M`@<(0~1H8(n9wMvDR!qc{-AzDNt9 z+ntya@_z&jUK7=`ISRdFEV%9E%p0Rz-S-NnJuOGfnNeHz*;-)zXiuD&=E9q1C7nQH zx{pW_XI+2Fb;QF=s+qrOYfx-nrQ84de%s@x@*<2iD^B<(QgNVeU80Ox7kjy7uGKK}KJ}Y( zgH0*=ZcpW43u_ZdOJ;TPX^^n2X$~$b8FP34z$U+2>_$7Qhh^;XLX4MP+_G-PY#AhA zzXrB>DWURkyVe|7xDAFl19x!H;f1(5-Oa*HboK>6r^RgS!^E3B+D%ai2>zhb;(~hq zd*GjfO`z95rntD3`r6jK@k9=1r`wnL44c}nGai>sJD)=1pZ}I_-Bu`fULT6OLx1M^ z0$^AlJe@tw>2YOi17f}74t-jKNmBX2ca;rD!KvtVE|478dcf}J)v04Ph~|3=0-BY9 zcx}H++HN-_Ef_pNK(`CF5)WM|FrxE6W%pejNBRB9?3mO#yFlTZGu}JqjTk1|!{pYp zBBiYVd zF&($TdykYlTf>0IeQHbWqvkE>#+E}$yf2y{H+>O!$heu!`FSjcN49jbB(|cbv)|kC$p+fnUDv+i76^|X)^7g89ps~;T z$9K|w;+;G4fx<=Yu155DWM*%I{k{rB7*zZ8bB71LE2!ad<*v7`-ZSMLt+0Aekea-f zy~Zi~!cnOQ7w)o`zrzllFh*JJfzO$9Y-{8`^(+cd?8^*>@G@!eQ29*wgEG{@{@w z;JoKMboIlB33@y=6=(EQhD`yvrU(RH^sENEHNez0dhM;C!LX+ZhS*zoxa{=%#_4%B z?4knp+siW2ai+TyRR-Aj4zGjV)NuW@V7xNvlmO_;3Xa4`-3gmyhFmT5|o-*#AQdt}my?{yRg{uo~m%YtN1w!tQ{5>wtSP*lpexH|{B6trscetudV6_)V(wWS_q8jl7&O%QA#_k)rT=U`_m2DjH|q{$8(uGCp)!1) z)nS>Oa75N`jSP_FI!+#Z=67xU9_NjumLYS7au@x<^?g`pry-TTQy}GYygdnbS9ge+ z_Vw-~ow(ES9#6n*prp>@OZLjiDIYY&>k#~UW~n&I$oM@QrKG;kR$~o3>@JNsgtOw4 zR@0A)h|Ac6+!ZrTMykeqy6nB{^D1atb`uPQwht8Am6VN2HIag*e(Gt>HZRihIzkE! zAMM=|CW%|9mh25fhSe`KHbo7bI#bQUEj(>?Y%i^rv~J-9DT0KbW2)p&r(!Y4hPyrA zm-PAvzIzu&Fc5c#kI*M|PwZ2f@?!xF$pf)#iO!zUaP$5}83WceZH1Jn-U z#v;|cV+BPnsZr;UB&dy3lt*rEqk|5^)eQKBIu^n{Y(E2F{gWcLCU3jVpx4%D^sVQb z-_ia;S*Q7TpTiM50xk>r{LYqPe^|i}S}v_oRZU`xwNLxqj}zhD7r-X#kClV-(j1{2 zmo3>Z(5XLl0o0zR2m9HyAHKfJ%f;G?%2Mko(@|0UQf{K_t){YlyKG!j`f8gYWI^XW zsvMKE2H_7DnW`LD$tm;%QJ+Vqvv1RdTi*kohrtG2C%&wyRkB(P=WGL7I@L#Vs%H(k zw^fC=+wz-zg-r}PTD@xSV@vGNIra=fTa*y{%vRd^wX2TJP$$@d)9WKYxPo$Wd38G{ z&pwzaX}CXuHK2Ih6-noDS^A%+lu@&gZ_bQ(CigS|1NBHG(vZYTi&@Kj zD=uUw=dgX65mBlVP}yuG)z9lW{pfN0JVAn64JdJ3=6()8f6^@SQome0Y2t?KwQlTt zrZ-zoO8_@d={+73SA7yQushtGUm!-F$WujwC0{{7_hD?#tzFuZ*ERqA4?@IGTfEM)?lZ%{SX zi(BEomoMHd(Zczk?2h2#D6{5?Ht0pT7>hAH?p0E_Q05o%Y5h1`R-S{XrToefT-n0c zn`drPjbOs47q<=_e4oPH*kt+0XzucZujBWN-xrSr|NVy#$95{oRC7N@jeaEilS`?; z`uOSDMY67%Iy$RL;G*sqUi*xBAI>8;q7fIz7=~q0)7FSz(bR!$@9RM9gp9av(>kT` zbi;1MO9F8ZI1T{&uR29%dYu$UOhVJ29iN>g+I~P>w@K(&7fV`j4x3npY^^MpQGuBaPjxJ*-Sd=J5GL$rqZHO2oUag1f#W86AcV{8;abg-mBv@oCfj zO1tHYM2w+bU8(egU$5qKviZFh!Q2q*bJndIxM><*j$<%wmjPVRy1ajAXU4vM(184; zhn~txz$?TGtu(HgK@nW-mhoi(cP#5n6@V8?_B!`l^lAG9YDLTC0vOLd zU~o*T2aaxku8#A4uY8s06Ie7b_D@H)3rPPaUFU%`D3>N;hR$8A;ZV&V z|Ga>(1A6WSbr_zvs2O%C=-$ybm$A~C{mVs-TGPJs3+OmtB60fx(b>m!bPH%5{8sm- z$A>WEzdnezja55dYy9V(Ufl`fgq{|;-ZC8N6|CV6C~5u|#F;2g*)tlnsgR{}G~QwM zPd7z~GJ}juqz$HK;yzR#-r9+OYWmCDirzp4?zfDhtK-5jU`Bt!kI#Guv0%n6=kIi~QKpnR0CZ=;s%kOGwZzU=U~-U{M}nRgkD%=jG#qGZ)fPr30*wgU#gehVmkEv0hjf*y)2 z7io`Oyck7j&x0Lryf{#2Z<<>{gqr{7)&E@_7()2<4k^R{Gw}tJFOX z7rl^4e$c5RH?QB=ow9Fv_$dYa`r?XM1AjSxZxK|?T@~1^gw2|RZ(8(?U#?(iGgK>a_}*3;{{edct5k>AX+!w{Cej<%g+f6X)-_U8Y;t)8dM(&FDUzk2 zv$mlj*qYZodQP-z;r$Ed8mbkxFB2U$>naZ0ISe|~#I{V_Qj6G#nD$f_foebKLU`8_ zw>&*P(-O518Df!%F<9!7%X8LoezNa2Y}4TQ{Hm`Vy0AI8zWB&66pc!~NGkCzj*vFy z8)GfkZ_J=8=F)zQ>kLFK`+$kRdVNyQ1Pewk1-8q6lseqp2+2=Xs}JQuqZ1-dR;_|X zgcf}%UBjPNY(|OYo1OOXuWh&vbI`9Tj|wq4}=zRnd@h+$8|=65dF0400N~^NUM|`%@vZT$abV_H-o+?f!qnW{2M! zoE~^~L%alx=(gcS383AL>YBDR=aI+oYcuUIR@F$Oc z$>TIwOK$U|v)+E#MAA*c8J~N*#MgPOsNW^$q3|x(;n;jIf-A}OKjou+cga;|ek1^a zwxE%cgd$v|w$85PBP*_t+6^YsdxTEZwQ&6g79r=@pPcSY-@e}RBBU@mz+Ln>dGjEvB*TjB3RGFUm zv^;)@jp-oG^2GK#cE3H3OU5DI&qQPL5R;pdssoe%vu4TWHLl$@g6~IsT{|@-oSTXB zk4=g^I49RgMxGWc{sqNSk00MmxSBkg={80~oSYPA0TnNsxr$$g_se2;0}QOJEa7-Z z+HT$4@t!`fP$@}HPtl;BtTt5qok8GT-eXXf@Uoa03X+)=?+M)dMQ%F*Q<+RjsOeX| z-MXhwggt$L4p-mA3kvwx1WR`x2jo?pv-&~8E$ID~J5Y`m0(ErmNs7SkQoqL&$E~6ev_eND%DzA((-q9mO1zgV?TB3 zVek^6)?3{_~oUZRdYHkdDN6wmz<;pL%A)Y(CV+ zP*FZe=d7@3wS00!kukH9qzoc`Asm(x86#({g|_;ZOo%8(Km4)wL)<6XAX);%a>DGp zmg_Y33I}G~fJ2JpPn&(CL^J-n zng9C6|I`{8Lc*^=-uaY@llgMdoil+-2?))t+~C;&pf?}}$eW1++0oO*znOcD2OSX# z^gl~Qmp)mZs4T_5j)Jv+y#aCb+QZw$o{sWpBZc1gHACP%3&s?Isl(+d4$JMl_Jx2r z+UDD0I%vG?lGyYVmZ?0n=6)WiO@Uo9k=QF&2wo$m$&m$$!Ybpt&zs^qJ%QhPu7Ky% z!wE3GnIXQas_F2wUXYZ4IbtG-_K}Flf&=p#2Syoa2jP84h%p9=PH-70N&)MmvjDyr zKIZnz4C???$%oW85g1rVH19sX6-OaO!juYpYw_k-=-DX;?gejFTCDEc`23LNbvM?w zP_5rzuHIgGeAxB00hKx9Fgg2i*}gE?%oKyF*O)?r4h?)S0Eqy0f9nZQ$K2>SFrAC zf@@lX^<*N0>k`XxfDh$1u4<&9$epNV09F*(6q&pK} zcJDSNfDWtuiuR%pqaDYT@2#`i1zeg~MWd=B8FFaexQjM^{yyk0@x$eJi}A__l)*>+ zU}NNtrhw;{)RG|>_%zZH|Gx1;Uu90h4?;RYHYo!&6QHCPctic9f&GyP@sKvw{`eO2 zM)?gQwcyo={1o{@Lhc-*=`KsL@JbpH=w91BUHkVifN`p6)bjCSC z@~VQKoZg9vc3gCSAK9i52F;MgKF3q0b{w~Qal9)}->tl3AaD2P^)aHGWSe(5+TAGh zeLIxJQ=(0?Gmm)G^PRbRxkLYR%HW4wtlezxeIgov%_^(+*SAHTL9a(EHedwLsms%9Rz`5{JgfVRKXMgzbGysd)7|gUtTZ= z7(941X0tv7v*rNB9nYn>CX-irPBzorzLZU;aD%mOyV+p(U&H%@o$S~($cs(C@af)a z_p`k`N3K6}cvLO|FbDsKnjs43salb^Q!(3Yk5fsOEb#SdJe2+QFYQhkBzQ{{yyj`# zu^V2Q#v<;^wQ4dlwXx2O$#MlJ(IVs`9|@n;_J`q+(%j=?dtnb?>N2-E?SuCI#XqSq za)1UZUZx^FntCSc!^5A%7AE7wU|uuI&Qkfx{G(=E39>gMNM3^^9p+SUQt=S)cArE? z{F~ncaul-4;fUsqk6%MBUJLC=kEgP>!(p~}@Q|n&6&WO0M zN>3z*MmEti@z-IF+yKbucjJ_QVekwCBu}gsUUcs0?;h(dE-S8gXRC-EVgKJ0!@&P8 zTdV!!+^W9kO&DgxdzRPU<+w@~J_t1*WR2wNc1!*BohU*qztBV}sJ$%=Pr3aO!zYTQ zl0qKVBD|!l!N9yIKWk_*`SvtUQA>L(^=R(7B9~j5&jd!L0R| zh{FUYL~Qa__EZJQ$nEw|zxsR{dOPZO^xhupyEEl?#u)k1Uu`WmNr9Q(E<|ZD0!b&@ zB9x$cqtrdON#>ws3!6P~L86HdiZ&%knO!+&3JgzxUVSt^l7?|LIOYO$IsHu5;LhFW z8o~Hu_=G#y7lRyE8v}8004Q{09K5LjLK30(aT0AikAMfU{HcuA>gMk@a&T&LsZneu z5j-wSe9Gpv8HV~giOO}F_2@r2)`^h(9Z~jo+g|cz3aHlH47e>|7B@_TJs!%RcREkb zfwh*{jJqy8Z^wLA5q5Mx+O$)4BTWa*BgP;V1pGqVepgGWg``#C><(w?4#^^;;d}%k z)~h$R^%<%0-RW4- zdBXz7l1heVI$=a7DrED!AeWNeVW*pB=oq*&J602jccyd35Sk-=nd*0pOm?Hv#;Im*Y~63S1I0ogm@2{`ddJ$T1+t=-rpm% z-@VQAu}c=KM@jimjAycb>yE zA@G$6k@OWVd0Mo(bc`)HP;$*%<;IwN!F%ZMAKzByYw*~ayle`2T+Py z-a1v5i}J!D98xjTf1n;1I9t8O>0W2EjHd2B47lLri$n#;VecDZWZ~XKgT)UebIO}e zfBpYT58Q1wR!&q2Rsg25sl7Fg7;Azdyo`0NbFVbVW>9=7(gp6i{tgh&7{-oEN&V0^ z@{RgKJ>{oQ3sAyDYX9n|g zJaC#aH#TweEYmDAv6SL`jP6;B1=rvSSXvtM2lV5o!@+=Mr>wF#yQd1<1V&qm{m~HV$u!u>L}9Rm_^h&g=Pwq~ z*EM4+I_XtbT19_&@i1a`7&t5yf`6Ds9QTcyO=NJC4lG|i2}1Ioe{mHxa@`NpH-tK3 z?=L4=D3GgNY5i#ay8LqPZ?NHw;JEjgs^CmF?M@9W&m8fUV9)f5bs74T7FGH2kz#Lh z*bQ<1@o^m391k?+2bQ0Hs1BC1u9dNm`gUDApOzeH7%Jyy8A6XQT7tGA3yI_jAeW-K z_mcZ|v=cq>P_yLdb$b88zik;{2tuM;Y@Rt+^CJ{m9GQ%yfM0KW--sep+t!%_z&UW= z{L!*sL^OfKS7qhrsad( zhuRP$4{8DQ&wSQ#h4SCkF|EaT)&gw~rNq|r3TDd@8|Tc4Clp5>n|Awd!|IU|2Wq&c zB?!r;of?(wYj#Z4v&{}%SBeE2$!ty*k2!-!bIHT<6o&EM>q(UE*ff~u3K~@diVVNm z{51Tp9$lXQ(xlB7;%Tz6#tcH-GssewZBP?Hn&+*rt?^{Qm53D!y(fXEE`XrT~*Tf#uqxK!q@Tl<>_2 z;N#S>Z&Id9=f|){ZbKpRz3xQfC7p{4c^tWAqlRSuMD*Qu$;KiXozr&Qhpa_2%RT?C z)0O@X=B(+B8d|N&wvXj!cuKmp$`!xc&ik|3IY&v7Aw;)L(`6U6xAgE@3ic3-BJJav z)9;r?{QvjJqV@F`{XC(A4IC2%v*UzNBaVD&w-obSJ4r(?v?jUx_ z#2!?|IB4+S=Tf>7>q%vhB3KA+KGo5DR<`#ql-C-u>7JZ`B<9&kbrMmWSR@(aVh7lj zDZX{&mMuphOG+Y@;t$y@L@WM57_1@@OJu%-*wIh|E@doGaOTbHLg|VLvrg-146(1s zu-w?3v_xzWC|je4N@AYk=(qCMu`l0m3w*O=r1|%ltx;A+*=sv1&K0XM$FksL7=G;* zX;YRS)6Nsh>JK{~ddU;K8vH2y+Un3+KrK8A?Rl~R-WWtV$D(uy@rs@03jhV+YJdn= z%hKn#%AV)W;mX(vot>~Yej!gwuVBMZo-#7&q3KPIbBIH8y5G~Tq>t7v(zO0cRK z+{I>xdxJ0N@4XaR^$lh%E13+#b=`mP(pl`mHBw75tM~oQ0FoE^^i8s@;`H5JuGf5U zq`gi%I9JWsk^?hEtz7`BnWV z(QHgdwUcprVQ@dM0)F+s?h<4-$J8_HAbMJ|I39Fh(fL5F2p@!2U@`y4-n_L8M;+>D z8H^iY+xS&lI1)eF3AoNLXBK|%9e-G6`^sWGwx)AG3jE6eP7FG5A~WIrB`2GmM^HPr zyiVQ;TTkPyY7^VPOw*>dutV5Z6VYwD0*?RU+WKj1DkhR0N8GK`FEL=T3`rp8;%tO8 zh6e(BXz2BI8ie<0Ah^Nnj~eztn{_JR`t-DB?}MzK-g26|D+atA?Yq(f zHlLR}>i+Owa(k^y$*#O8HNs0vGJUKe|Gx_+TyO1pRr}uKG6)9sBRL70i2a&W9rD29 zFB9)X1Um?D?7I4{<#+Y#!9!QY>Lm;SvUTn`5B!lysW?0l;ZBTZM`#e~8O*XD!X@y9 zwd3CnLeELV6sO{W9cUNW*JjbfROt?;s^S3lM{%{vm+p;hr+qz7r4iXV=qUNX%_gjH5S$_Mt!1etTrE3l6a)j#b~x$&&mwKnPaFVj0Y%5$lvxj@rIBdu0eWw7-3c z|9HCySUgQ`w|iu})ODRyEWf)15>8+-xAAjp+dxfD%>HDp7$Q&1D4&NP>W-E7M8gBY z+a4ev!#08QObF5#bUi&|Q+47pl=x_3C>oNx?%C;rqd+wYui+d((p8BDW^9qf6XHY% zqBn}gNbj}yTTR`Af^8?KSVKB+>LN)~OdO@kgPAP9ft9baicS2f(z5QZyQiLvqc-@1 z!S0!2%GbuHu&F=?V5wpy2EhLOh!L%_*x=-?Q0Y9l>rPDot_)S~epIth`+o8TlJ}$o zX@6TEbdz^DA8%RmB9(Cgs*Zhg13!*!p*?c08Xs?nPV3yeOPi`2`FR$dZM$xk98t*G zZEQGE|EE}x{PxK~qulwX^!Ie`PLiP$gHV4LpDF+ZBzAtD9hDsp&ae1O=Qbt$A7yZL1X_&-k(7&`nMdEZX*Ip4kTaHh9`Ad<8} zA^i>}q5nbI0tcP866d%BKaclK%WFnNsP>NE3-V2zC_!%@DEgPpY=-EfZkWJR4=3_R z8fMvs0tY4e`&xt{)xKagNyaIrY^H>kvRjFEYqHk#NDr7?A%p`@ogDzEk=?a`TdsNl!oq&+e@CM(0#uWD~;FWitr6&6BPTu>Ia` zJ`)=)ZkfA)<@5fZ%l%2!3g{b&vLq-3$0Y@nVPdPsve{zKj{2M_W;0i*qo02t{HB}~ ze}=ej1y<)xBQa`{J|-1F)s?;FeyDZIR{8D^K?@8$Rw8U z+^%AWog~enGGPvZnWFJ{Yih%O-e0U9^eHMhz_g99Y!kOwwxLpHvevkfc-YG4PMXogc&ZmTDON59)oO zY}gh>swI`dj`USqmVDSQ6z@Bg-3MrAB+u$dur86m?p29Ilx9AH^?S*S@PWbbJZhfi zx#@w-e?Qdvp+;TuCZR<>?{0H6Rg~>fJ102S?#fP67LVyAl;)CVB=2I;yAFWyWDihn zQ%}bzzSo6G&IWFXOpF6H#?S&XoCf)suexgND^+W@B>H+p;5u^^VV%DRzhR#Ln#>XT+R-w}zMezIIw{o* z;<&s}8bEd!{7mS9um^Edbq9e5g!&#r)v0< zR>_>qxz3@E)7gt1qd@xZ6B}NK!MT$jgS=_z%E&4W0!)-+Ph{!uMt#wpS3Qfuny^1% zhw@d>Dw|0fo{u9EjV*hrY0(&i`})jcns;U!;CI9!c@c>P4Y> zFWX(Uy1jzvctNV><{UmBZnE&${;D)41NU&%0u3N}W=q!hO|hfT3u>x(7~l2#QVbpk zU({cWgwdOz<&rN{nhG9Hr3$^uDHjtd58+Rsv88csE%SY9ygIwbMO9r81A1A@5$SL0 zqhKPJeLvx#{+N@Ip4&*@*teLB4BIaEslPwfvJwy{2%5UD+Ro`)b_B&Xx}D#e)eK5q zf2)zHwu^EIs_FOMAO*-Z=#)F6cw}M;)k*97t|g4+n@?al1JpGvN75FI!bFr6#&+1a zftDb-1FK~@nYGkWN{%R}^zhJ^HxszAT&{VyeNQQ;UeZYlU74wB3OVhvbWgJLxOD(p za{gAKuhZ~{Baj1J{mBXrO3>A1b=7O_6{OV-&7MBUbVvN2-OL3h_qyccKTc)zFlWfK zXc&O%!)qhH4%ueOzz?Gn|0c*rXC^YbM9-vmM6)J!hDk5&w09$~23wD&L2$OKTB5NBTl^8S&4)p}+J zP%wtQKqmr+D!AbwHv|$nfn#I#nuxy|L_|X@MkBEeo`Kl-T$no&w_N6PWQcW-?=Lbh zof2Lk`q-f5nux%=rF}IWq7X;Vx=Q$`K8BsBXdG#Q@LEvzUQ~9c$L3IL5zb^>M-}%d zm$8}5evz^a8(MRH?Pb$?Uq23lLrJE~T3Bm_15*orKiUxp_Ob)YLhqc9=Dsw84mVJ8UpMIyg?hg}Hwq#_oGS@5)z|J`ArrGm4d@_@zfg!>|}|A#bT*E$n{Td?5M<15FZ)72Tb#ost&=f<@+ z=D=g&DM$4%zA1lXM)2nq;$oK@K#%vSF#uBq8fO0XF``QPpng(CN6OYB zjji~v+??T?4n^YTl&om;4JLE`h(>HA^{a^d$t$*7(*k8OHpeUF)P=3%mWyhNON>gK zm^;SB4EdFH;;R|+*d^>bnB%}oP}`UrW5O$#Dy4O(E7USHIThRlxA(cG`C0HQxV?;~ ztP%3NKP*Ad(6z={_yxnj(6r8BwU6e=ch_IdoQ-<;w0P%_+0I%O2zm-}dWh2SBCFvP zGFA=V3@K`GM~$Vo>Cj1%##FvXd^-|eO8OKp{REX$SPed*gmvh_o>WWwy#;r?m@EM! zMDMDV8o>}=^Jb~&vT1Oe{13S(RMxY7*3e8L2MJOUZerqank7FUcB&eP6X)q}{Q|Kt zWAq9g^hz1Ch3o75Az{B2Z}v;z_Wa|}u=1dPBX8euS-0+Kqy(3fG159FcY!`6xVHWgxthA#w5Q`oPYKcpK0i^vv3pwl81*n50pA#!kqX6g!T2WxNhac62o_noK zoD=C41GWdgopC@N7D_BV3lFECKy+C|-lD)rw8j`;taAeQ<6*H$X$Yt4bh5M9ahA~{ z*s|Bdk7th!dq6#9YM2Y?ayLHV%k2kJ5sT|Z3q1uZd`_8OnJXH;temS%vX@tBHag7m zS|;;tjWMP0a+xkh+)H;-8DH^x2>v>1UF))0W%=)o@{iM>wFl5-a%P9IcM0qM*Fe?5 zx}j2IM~KL;P70vOk_cVaCVHJM!PzfOe+*o{XFtCIp1Y@QiP@lM2Ece;$)XXpEBmx? z$@+U+9giV8_Pz#1jY;^|&m^3gNG8+XBClUK{44YNUm5jkG_+v?lOsBQ2y6 z5*p8z$hdQ9u4B9JgZ)ZADtDB8G)$%}*o;ltmJ>wD-O6bDmpNw+Y-au|o6Ms}f?SM6CZrch z%s5}&2D*|RSgT}VfAv>*V3+U7WswMZ7vgY3TsZ=12y!_J+dRJ&GowDxx+)uLUTFZ9 z^K8+eI)=vP4g9r{FH|wofl(N9OZw@+AE!RC6F?7U;OF-fA|SrP!(H~Q4k_@`ebrY8 zIduXUFWS}~3pBSO$P~lK=@X%AV_y)7BqS2X#iW-Gkyvy8bidVTHV2F&!oe)!(cR5W ze3(|RZ+ujHzUq!m00kvque)NXo&=uWmg-SPv7H7TuD1e*6W@_6>h!%Q#}RbhZ|WMW zo&6+qfx{cBgl% z!Y5zO*n#@LOGKc}m~607FG?#Qm25;J@qV1D zhvo);c&-7#n#(TvABSoMJ6u&86732!e-vmer}_}+@6jw2O;uL?ArMTDL(h4=8%mf3 zQ2K7j68Nd3KLWONs$LYH^vgu7_~AqT^fI>Ru-F@{1||!Vvwe!%1n;tj5lrbze@z@m zh#;2c9TAgBg*r5#XS@h&(oMf&O&(ah&Sg&gQI|JQzDPS zz%LI*uXl%Tm?-LAL0D>0-wGW_Tef4s#TVwxahg% z#bTK2t0QuYN8J)O3H+@-07ntFabUx3xyhfFt|AJ4m1VALRrfWF4T;UH;O37q5FPA< z5x6RpY^w|E#C3dBJF@|Q&X)x0q8L;+KC!vD4N8Z2=_TZ@v#x)YfuPCmx-M*=*1R9f zli~-rx;Z1|pzXX)IZy63lA0g?-txFL*u+<-rQYuKIM<^i^gqrCBd8o=r95gh=v~3p zmbcik?4i8yq`J=r8cS0lGrdsSuWnVib{IirC5$FoeYimF6t8gA z4cZQ4O9Vq+eYO=Ec5nGKJU9P9*CtW*KhH3pQLC`#br^Puf17A7pT{sJsC5v+{b!2I zuQoJM-7@j$CToEZC5sk=^)ZoZLWO4wf1G9c;ZCnWx0R;=YVSIu%Dl|;`46M|LtD&q% zVT~iS%8~$e#Zv8>xs!R8FOPaO^9tm51a=QnESNsGg2Xhyh{^+BHog=uBqG&gCcaFC zqESSwMNPl^?0HQ$CuX2@%DwKY6BiKavHQ;AULEc46ma57XY!7Jl9i@vQ)M=t%`&sA z%wG7mOi`73xTRandU)mQ8h7S$Ktvdb_;el^p=UM`$#|lHF z#^L2*#8uKE-}QPMFqxYMXL6`|dgFNl$O{;3_v!E$-IvfSKVR;6Js<>l?}tfVr8Qnn zVmofYto^f^yiW@n(%9xFYb`$huhKk$YEMI!*HitHud^i~7T5KWMr-_@_tP7jMD&O% z*Z6{2%Gl^sbd#54G5^&}V$ z1T~tR_K6nz{ig=-sBbC({(ZeUxFiE`zhvesYk$wJhx3;Ih0sA-E0cr=GJ$CkS*nuT zaSvYoe|a#$j)8;QOt(&m$>Ja@@WgA@La4p1Q8gyqK;x^dd)P^Q zvS3*GrcW^z5e?#=E$cW=vMq}+{3);QWcLA?e9y{_d#l6?7TCEnjD*V9L5z!%G{P4B4mXg(DzF-It9M~7&&ZE!!+gNN#v~kN=C~qX)TJ3t# zbr`WqMRwV;Shkn2wz_1?IN@ud12(5{6<3tR22Z`rQnCvdkVaX)dk=Hmps1H1Co9xX zoXd@wZK;>zE<1h|Ie&!~h(LGP4MM&&)<$o!-|?3YJa85f`>H+J>1jebQ_q}BA14uP z-z)!tE`YGEtl?k*-QW52PF2h=uy@fcoMS=T==|B~2FStis%w=Dd`!N}4&9vJd-UDd zv$1jCfqlAQIe`3$7uZ~-`#NSBqXk?@nkV?o);^m4>*pJj`CMyy{I_l|?Y-Q#J1O5y z7?FUZwGt@D^j&~9i6MrQ#x@h=MzBI(LlCf4-QoX& zRLvK9%E_G@y8#w?o_cUuCZE3u*?EIlOBZ$HqG@yvp)^a$67rD9i+(Ciz8DW~23M#0 zzp14L7$knvXpN|&(R(6iF|3+5H-`S*{#Vqe7)1C!n^sLlG z*DOCC6l|@OYWgB9+-Ai$P9ibsZr;0K4_F3~pE{9VI76Hoc}zkI2y!sG^{x~K2};l0 zGNyc8j{j6GZ^dam6iP~W%iZ2(i&EM^W{;8DsisN3TDX`7r)=T}0|BMu}DP7HKoy-?|gZe}{H*L|^&So;MUE*QQ>cC{( zyJ*8yz-#Lm*z}ZC+;@HPpFZc$24oHSkIooD&5le?dxLLDQ>je-toFK>R$|Lk{!ZUf zZ3{)Alg~yOqpW=nnG9~xd&t4?%MvQYoO;m*!JAgy3WimquaqGmVI-A3;H+`|7<5=T zx^DUqYMF-anXu<_5Urs0SSA?ZXgj`Zmc|V?fFVhG)?z`j!c<^MLCQf>Yq+tq2WG|Q ze4$Eio4lUO6 zZI17V+l|UREMgAvg}p8CA0NaR=Xfa@>r!SnX57Vv7RY z#;~bgh^_w6oHs_$x1B)XskO|&VEG*F9kc&VuEv-~;%jOh$cG95YT9;U77wME6#sRA zmtz>GaAv&glm-Gm?JM09zq@YOhl~w5%kTkiW2V#DB#)q`zMw9KQ}uQ}Z$-!s$7Jh? znVs5mbmqQLOVO(oH!D=S?T-ezrUgwcMv9L1e3!0d#|&%J4xcEPE8bbN>)#x`h@(ON z<-ko^J(KlXQ74&DQDI7+FFNB?br4<dYCxnsq;BxZ7N>+X(Nm<6l5)8)~@BWl!A zfzy=DS|h_-vTrME7xV#)k5Nn8HrDmN%G$BB0LQP|!DB|BYD&64QX(wGXdGe194c~fx5L_@0Ho5DshHCYh~LEy{ShUDMss^PF4p;pzU>QF8+c7l4Ni(jB#2hIF-2S>rh52@VS zX_Q{9XyG}UpyglGx8PRGC8k^U(K&)m^LhjLgdru=aF$9^mGb!q3H?3<1~?>W z_#^^8wqdoTuEnI(_;<2rRMjSO@9a6{1EjwP7K?|}J@mOfuv`G=|!9`9!Ir9{tzd(z-8K&8=KD3B|J%M$yHa> zbarlPOKK@iX_qD5GWE}mIf?d@%BV}g!>sZo$_{^&N4(nJQy7dfvkVG;!>UL7m4C2( z7&AQCIIbcIvXW8)@vrC0<%(xVaEZd6I#}+MPrjF_(#C9a7BXh5E>_1see1H@(oW>; z4Bu!J#Hu~;)}kW2?}!5$saXEKNVK(tRBKlsoA%{XqPXu)O#xp0{`orH9C+U?I#_m0 zs16v=-rHXDoTn4-Q2UxKmW3>j=?Di>jRT=LmKRVUT`Y zLzolsE48gZseEos?e0aIC|Dy@#!y26L(}RLSfgK-Pzd6$B*q`VEI#a^w2GDw!jF-R zK_}Z(9VzCi;D95q6U2k?Rmj;PHo^W30=y~bv(n;#Ik71>WSH+8^^$K+_IlC)7#vJ= z>l16H<9G_4Ai^7vk>Idt6W*+Y{vO_7hDR*BUbt3gt7ENS6n>1 zy0qaBV%hMRv&U%kP%qy?-Sfnkev!(_BAsKMI>RAApE_03#k9n3aKb7Nsy&65c|=)v zt~H>x+mDyADFD8SI1e?8RFW424+e0+Omng=RcYL4$Vwn|_W3r&T{eAGFW!^qamjl{ zmHA9g0%0(o4oVh(yy{Ml`Nq_;n>i!APV;Yq93eWWlXtqiCR{*-r>9YAsbhYjX-?q! zdYZ@40e=iNKT!Q`?e)X9BuSqtBM#VD^r|bCj>s5yZ7y%Ei-54qR!tk<{3&|Hy0@=; z&f!pO(_0Nz9q7WNcM~M!`AA4&slw+79DmmRdyR*Az4y@cc*d>`9OWLTuHgL_45TF1frWe0hWB+lm$rh>P>aj+F z)5AJ=^zDHvPfl4}62^ zA4mfIs})$-5w90mnvtly5uNEq>Q$;iG)oELbUd$k^<<@d(e0fn;Tl#5Hy)s_pxAwv zet*cWXZ#=otqWYm6&ret3RYwzmbKFN^10ZyS_+LegrGV><%HFUFP1YK2r; zdY=NYjo0!I6=rEpOj=7|PnFC|O7qTnb4In38X6OSfK8X_abFq~h|1BKF8-2wDiuS} z?hHnn1eQ$#9lqcG4Rl#y@PT*5?RdgvbUFs!cWK9*)xVml z*Pj(aO9Gwboj1#F*17(3YY8Q09-VNJf)KbxQ_E=989R38O=h9FJ>1#CCALg@T#=++ zn$N&3pG@p0=~+%!-X5RrkhTAL8fR!s11qIV+XHu!<)DcyU}^`pg`*~S{+vrO7`?aN zIcf0`6@66$?M#s!z7bCdRh_73Bq`HqU(dUyPXSy z(qXT&%tJW-9gvYuqcE9m3=JozWJhw*tBhRffoMWWi{TLy3~A@9!exRCmpe#a8U{E0 z>-}`2-#@UW<`(faxsDuvqi7=_CVmX;R>i_u{Yt}$K3ggvRb3BUSLLtMocLTWif-;m zqksS?iTi{our(px5$4bH;EU|fM~o6A%1oQn~ zYV`(#4l5%NxP(qKy)yf__q0P^k>yUzvm>%yYh0#BKjAG}13Q>SYqT4Hefzd=52w1X zXQ~T5s%Q#@oqZ3|>^)KQh_`3+oj=2PNXE!Rq>Eb9{8o@DkrlOx`&*p4N$v3{*DX!u z*(GUt85V3tdsv|uOC{=iWuUob0{ism#Q<~<`*HiT_y9-fI z<`UEiFZ6soSmC9fVX%BnaHY%eb$ma2K{y7_r-*!c2_vfMgh9SuW17{n9H5XT;3@^z zQDx9>dB{??)YZoLUHzZto}d$Hu8qj^z`=rHVjnBo9?Z<1dW~V|Z?}aK`Pfpy`8KOn zW;j9nJd>$fjHzqMHx9HmEZWZ*dZAk;>wWry zi;LB6C7Sat@As)xd-g7x8k{`Z!affdI$xVqEY2^~^<>6`6{b=nFkh^|vjnT*hu&7F zy^*(xn4-b;gYJ6{Q*`O4sG?n2Y1wY!z{=U4G^;zG*D{j45qXi6W$$6el6VA;ic07u z^lywajfQkoj&Z=h^(Z15-tG;~!#H38T;m;AwG^`u5W?kQ11B8Pam?@jC6AHqVy{{9(SU zK|4e@Rkj%qlsOo0E>#EI<6qP^LH-#_=h)?`u>wdZHPRSKgN(TXja*N$_o0y)i06Jw zD2q$BH#fY|p1?!|*lRaG4J5D*`qzEgZ4ZF00quVk%-?^aXa{7$(w9^c%f9W@>v3nU zky99fy-uXSPQ+X2Dat}dAPK}`ZWb-h=j9`jD$ec} z)aJId3w#lo3y!(5*jEdxAxa%e5pRn;0;x^S8KXyzSzH*!UdS{sH0jxlYINkABI6@` zZ(XkFn*RwAGvPw4^x>-c_!H%eKA&&;yh~d4gP6=;cl1`#YVLy2WqO(k%@Ts2v{1LO zC6W4v4RS}m@>{zVLWO%qQw=DIt)+4)s5``Q*S88sVC_Z_rNZn84kQd_QU0<>Jh{!S z0oVFlES&)psO`iPv<{YFPjJ@ZeqXfSqxoP2(812 zR`?efi;@0B=TZm)XVb#XuyH#|I1Il%cuNrHe0z><^}(A&_CBfsQg3c$X*%WlkU z>!JVxz9x_`Zjo^Tk1(mlOhTNmlF zSv?!RTi0f?E;BD#=#6e3cRp_PKWdPFWc|l|`+se?*PAcC7nw*6^rp(&*=g>w5U(fX zU%rSFk$nkhhG%AG?HrT~M_6HW#QJGI;mdw%kciMl{$Y`uaWu(qipE60uoB zy#aG=ibU6Art2ov50~ER;w%qp+VC|UZ4S2ebGt>foCZ4&5~}!H^uLjJ$mpnFhM*Mg zMSY!4o4wbe{~cpMpFP`9)VpKOXN+e=UP!*!z}5SZM)x*>|24rh(|HMW?7s_F?Fjgc z@rRj5NZmuT1yyU1h?D zL(jnV5CQ6?8-7CmNs)ZCRT+FI^iKMD*J?*R z5Z)DR#=`bdYi;6w${sdHKTdN@Sxxn-Kc+ly-p--Wzu*H zuLsP}Ua@VuKB6VJ8-1$-RsWNJ214~|>+&|DO_Z?&cpQ{Xl>b1+Butz}WaetuUFEOZ zTq^Q!E;bPc6BH9GpVgPRQGGffDOr`9DE2tu!A&sW@Tc%&Y#6}FxKVeT&)ELh1Z6lA zf^uWY_HoHD9NSoRSOzF9{p-I1!y(}hJ5E4W$@{==cTnP%ovR~j5t5cjl$)R8sHW;o zVomI^!%%rS6l}Kl(<-xzlPah|4Q(ldR&?ozXFWU*BAl(ZCI498qzf2zzR7?F8z-gKJlOqifMeM2o$!Cs?J5Cq!okH^B#NMfw6RKwS6gxIJlAHXWQ^2`C2j`q zI#aHWXN3v-L(r_95fv<%NX$UEYFAGCkrG6_9_`{_*X-}`7_|<6g3#Y}%t{}I&OZ5@ zDuFkgjnN*VRdQD9mN{ZriN3>I5Gc@d7zF4a@%~u~^dSG_FtJ%I0K{FjX#xK-S}M2> zgR)7wKrsNxB2Yi&9>5>A2eQq`JCcw@rygbZr??=kw8R4jzl6lUJBIa&D8Q!nlTYhE*{Gmb=cDpMcy99X{^hi+gI^&hg~oiOf%%&-=xXXF z{q2vv>|ddaaAsqRLg}2U(573inM4Qb#_-=vBlNhsAfv{1f9UQ?)~8mDe90jG$+1dF zty@u9NxnyQQKX;6tjBiurflBB<@uFug6TjpL`sd~V>_XrQsI?$T5PV-=35ICh?= zL<@X>jAxua>n6b5H*`YKuTriNii+w9laetAJSR|CLOZmEYyd~1m8`It!9&Jz&vga; zExDU5ct+tVG;)ATXZ#gqzKtz1r`?$gzP|>1&)>3bbAT4mpVMCh2tof`^38atJ_WyJ z>sb5+ys8ZVNYf8A01O9uU#@IrfRkl!$Jra357*-B7u}a*8T=n1ntXRfu(lrs1*j8* zo@x~playRUfLk*ie!$7cEQ62x_T{tA=PVxIO&jRl+9=z%z`t!C|D7|+n`V(i=U2)5 zyF{X&lu;B;>Q}MDV=T#|x@%E4iH32%ALaqD2*eivP3eVgM=;Q*c@vE&|j zj)D3eF7H5sOzBlh0JERip>)8~mpN>hZc-o4q(XEPgvQmUyD~nc7}n#G<6lQB-E_(cYEu}F^_Ql;Pb`IGS@OX(FS6wBKV9ly zD15~vgpI&X9!o*@cZ;e}dx**C@AD2Dw0nTMdUwm|z(-2aqnXZ`e%M|k1DB!3dB`^8 zUaSdI%UlAESd6{ds?G!5NR}ktY$31K*dKM50|6OYz>5R?bKL|I)~e+ZH-A6|z%_1* z6QcS~F`u7v#Ag%ybJ|4^csTSnjQi-?M{ii|(JB2oIQ=iBJ-l-euT1)_;VqiVjYZtsgBHoy@rlWBYi^7kKY?KhPt$pHsU?0EHS?5FYF;; z19@B{AFH(~ZdFuE0&y4pD;GCmumc5qoKfrw|AegAlzQ`wQO@!+<3ea)gaI8BULfqb zt}s#aj!7+y*_x(FEu{29)!D;gqcY2wK%HH-NU(1X!0o?Y^I*pW(lH{Q6lg)FkezWxLJ%=_*d; zO(alNt76?{9jT@*4!k7! z+P6}hD?66=sW%A2*4;hk6kqnzIHPmGe0^MM8u?ykWNU;>E}O)fXtHDcMJ2%4Nzuau zbAE^!Kl~OeGfxlOXoPzM30A+nG@6gYv3AeWLjztkHx0WQ)l_N>qR@g_2yql(B7$-{ z#bk_Et&$>ts91bcp>ejd^2e15%}|lCBTd->HZV5N^IP>Xv1CUf@w1BTld&R%-`}dE zlSTJ40n>{=9PABnY%(ebp@-_47hevS+&V&#Vse7S-r4q(xRx)y3V;?jwGJV+1j`xc zy1w5i9Xb9KLhwxYExz^G=Y7_cSC9w*?x%P5EpUsc|#HVhUpt1uFWDl4y==qKaOellqk zEkQX0RT;H=yG~8koFYQ$GObcLN`Yh~Xp};@j`Fh<{RW}~(}p|s(e3KzGf`*<6({O_ zVaV;5YQlW}%Vr$O(a?gRHgt6C``B8>5 z7JSkBNgkf)midc9AFr*g-z*k)ZChO1S&uEs-;RqD2W_>1r)4SU+0cwwA^*Rxh`!9f zvrho~j_Jxjy)g~nFYtk7Yu_$5MkZdOuRUUIjRA%r&vHW4D>lobj#w4O|&*Dc8q)V`wV!O|YF2 zX`FV|05(`fE>fc+6Q%H7+eqX>H9=M@Q^nY2IpYM=(av>`Hg6^aGNK-*Q~19e{;wyl zqr*l15l(;!90xoBnqb*b5c6k++_rj>@`$%SaauUC^W5+GHEUgK&7bb->Z-kW*QWe4&@dor5p;5(i_F0v zHcT$LaWF;^g= z-`&PPs#TnTDM>^nt>|tyiyFrC7TSxBg8p!v7Y8}Q+aCnaTL`xx+ z5aaF*=X5{auR0Xd(AS1aj_u3r`<^==Ch9qrn(ere8FtLW&Q5ZF76)ll81gpRhy4_r zhaE5e-=O3Zu&x2XlpqIL)SDMA%{U(JlzvLh{MA$kjYfkEiN+sp8Xte5ncG?Xn>FzZ z`Uqv22ek)5E6z?p4`-+8i2ojxYG~Nru?<}C+NVA+)aBS0<*(~pIDAxJlwty|H{J20 z4eGSMeHjcHD99|~=Ii>EZXmywAyqGM@{X4Xf0MjCejvuE^d~oB7+gM_AmTopg*?T* zupXLubo7uu+3J&%$0wglWK7RJl!8Fn#5qovZW?TQ%NPzR``;ueaT>|A;RJWh#17Lt zUzYXA!x<=3sw|{pq`^4ko6;4NIjcbwtw+y4l?^jRpnFn01FLJtFn)_Zyzl<&|PZ zpWJ{&&Mz5{Jl;UU6@dZ5n<>IEeV{?<5NwSNYjldBV`vcG%W&x{lLNFx2_c0WY=N~B z?wuNnmXKw;e5iZS0xaXh!fWr<)6kE=V2BaJziTkonsvRtGUvDe3`CqGktDd+yjzQK z5ylk-k^}R>+APzu`VR% zJ&WurjOQm-$MYL&*l)!Itx<~n28}s+1VROgEJ14Q9mKeU$3eT)$~&)I z_an6c@9&3UPrOi7eAl}7PbdfL^-%G_cHc1MC+%{B-^^*hMTwn-4|CV*8Egx(2So7) za^tvuIF3EB^3H+m<63ng*V){-eJbXiTXYUf?o`mJ)_-4ui{hh(6MS9{(L5Th$=zY9 zIO~UyD)WkdyLTA4A0L>6bY3wb+M!+`2+^FkF)vZc&uPZb;zimHhTwA6bSo`ISjdP~PaDH#YgA{Mk7hR@7);V?Bk=Q)!?X55oda*4| zOk%Z-oCRe_LthEaUMCVS>(zz59$*p)UEUnkHouu#b82|996L6J z@R~suPYVo`0PaX{*C(Qp5#7aa5QRJ2wI$f`Zt#PI?>!x4-*^8%9--@o%i~!~O{{h% zls#J6-629;D!Jlv@_V(B!-s6-X)MSClVa4~Z>PFjM?yWXV!(_%e$%}LXC?&WVsJU=dxUTEz zS>M$reoijL`z@HT7I` zK0mee`i}OVWs>Wl3jH#VKEN7sK!Te2TlAA?9kex-N~YW4-bTL+u#kpeKVmQ*=i+$$ z_#F|BUYQAt&%IA&pw^LDY^_Dmubxr%D64O0bPj>tlxz@e(8Njx)LGqc;s15$_HegO zGNFLzUrUj2@fs6W73v0=WZZ~oix6J@xQVptzT+} zMa(lWJ^s$(J;s)G);ALVh-`wneTLjMgz-Enqr4>|g5;WkT_I9FD+wV)rH`Dfvz?}% z9~Sz~cH5@x5WYT{1--wd?Q9)?aO)7-B;v{9xafs%#npqypR(F+)p1crj$nJkJhw&COpvQKCYz3u4SGK1{ z<_hY=uk0oS{ow-YG3q0{YTh`hIW8TnA%gpN&7vCkH^v{4NaUm}bUb92WM@UwZJfuP zWZ6QU6r-C=g;)&6g&(f{C6CvqCtoBpwmK`>j^Zgn!_VnS)8R=f_| z+h7BW5$x5E*0EHbG&~3ycyZdsL}9c-Nm)ZE`D2;hn6(5^ayUPTq~E~DsePh0rom`H zcw9*O8I$9$f+;Uac(RIn zflxw__35v)vq|!4DIF}tlOugpLG!%zMw@xRr0>b;}VmEGIJ471lVW zs^z#9%0-(B)?Q(VaPSsX%9j``l>h;^Fv~;k@e%#y?1H};Yq6o;kG1Dj(p2uIb{Ag1X7&dvM6hsKa3xQ#tF}LuoZh4V^9~#YCAHS4tvbqk+Mn z>@P;_%HcgB0*udj8bRo!R!bCMVpGFqr`NA$z)ag{d}10R;^<^=yY{{LoFO(~%#z&2 zkdVO|y)DXbY~4zcgZA0p1CO zCnR|d{+MObfyO8f?R=0TIhV8Bh}qj=7?zuLNF_1;OPYB|dRKTRmHj|#E^$$G5NjlEiz z1M6AFcPh}PSU?KzV^6e*j);hHt} zX_(Ssdbil*wf-q-&R7hFmw5_ueg@@C8ShA)ED^^UEA2Blb&|Y|NI##q>vj_QitdH= z+)XRLVeTNrTQTsIOnUP59m!h*g@s>}Lx1e#Jp}6+62NS;=?@!9y|jtn^G@cr(DjFz z29QJ6O8FhCQ!`2x`glwMT?G?VHq6nUy;z!om{+|u)~wd#HBPgV5X;f2wP24z64 zK5&M01QwWna-_XgvF>0zrm``?Sf}75{l4e)ZF8*Z2z&&oEdng+pnVIsRF*ww5zq-% z^ZU;K0-jZ}LcA|t2wLyfoX)9WR=CXukuo`V9j@_0kD<@dee5`|JM=rDgRF3eF5dx3 zzkS35^b(=Vtmfo!O8_<|_myPz_K2Guu4}72O(*!K8SDj}u){^bcq(O5k z1=^oJv48{LJ3YISHzkT8wqEe@sI8kHbADY*jL&-AA>=Qs_9KWGj=*1uiaq^;1fSho zel2JPsS17g6}{RRTd1+c`|D)$~Ns$<+=z}p{IjfUzKWUqm6p$HF za#Dy%(nbnZXO|M2{LFI+tcK;Gv&6#;_~j`$F1l>D{u$D?@s|7&7i{~MBv40lbXPi0!9sE{eqbHA`WCe zjg3_2QF6%4W<;9by;TajtGO zIXh&T6FZ8R@I!06P56>Jy5ju))@yVQEgXZ1k3cy`;N!5!5oCmRQTV4^)>%+z6jbjw z2*il5PkAI-3ni-nGJwyuvVeOv;86!9`=;;ebF%m3m`AwVaqSd9KGf~l}$4#a@ z)h=Sz{l6-Zup;;XyC_R7uS3K|1DA2#&39?)I=jxSFR4B`*H>pur?Ar_B_evVM#a7Q zt|DP*G0y90S7ex@=-%iGUd+1Y@rctAdf}-gv1Hlt;InJB?a$4!vID+U3eR>b(U0)= zfkE&_4&UAw)h>lx25~~?&siS5zDWFn_09pEE)^UoB4KN9Q)(BdI~2=k=y5q&U@ySr z^_t^EYJN|9lfL5iy4*$2agogKm87JZX#TmCV8+qwHpm5RH@x!XfWmce6Yhuw?~q^z z{;qF~b!FS*Q*=Tgc{34HxxA9`_swawuMQ7&J@#B0uQOU&6TuZy@XctLE8W56z;%y< zep=Ym!zsC^hAI`FD7&LP>q1u2!7z5oOnC@10k4`T1D*5e(W`U@%{fsxr(6-o&mc9o z%$q4>@-DRE%Pw&sNIw~4lIR$O`Uh6wL+$9a2Dxudi@EaC@74qXK%bTLiLz`8@yY znwLil#;mQ|ARhyGJZFC}D;0u}j@9}Hi zkbIf!500r*JNFqS&m%W*t!3d3trA!?UUPN|-oqwWL4CR2Dc;f3nsP!o;Nu@t&~Kpw zD*XEdkJ~K`n-_b2KFGbw4l|K84}p#E=r3|CTZ7vECB*BEpgE*Dw6>P6zj?Fv^lcpVtGnlL30A)<=Smx$}I9=iEG z9RW5gj~SqL^xp3)D4XqID~wHhxUlltDZyCVQf%0g%s8IZ7I#j3W5zw&$-K0Q;;HxP z)yU#9XX-CJVrp+KY@uYQgG=QwHAJtdV5=5zj$`1TNW`Lwuw*mr=N$r?DT?hq=O8*k z@=FhkBzA0Gvkc;Uq_ud}6=D|s`m?0Y!7Q%VX4diCv-ahtv`0d*%|SYymX-Ip0h;I$0c<#khIYnTVXAP-pQIhA?{>fW>`>|vLBU0Ds%U5BwJ_`0mB z2M(c_H&k?<153+_Kzgo$@@K72z@7wzQ}>_0YC;wnk8&M(pP&AP%{J*vVDlo?G#kDU z@^R(Xs^7i-RUV;5CG^;MPIzoXh=zE2d;Yu+t2w^(@{?SNb~t_I3pQ^@KE??slE9Qea~yD)614u%0i10mDS> z>Dafco~tHwLPm#Yu+6K33%ANo9!f36ycjZjzH95~^nmx_&Yla)ha(K2_%7MRwjs>( z;p)cqSM?O0VUG|M-zNq&_Upg!a3)QH#NWlWFKapDoOdtx0^81=oi18#WYIVa#qEqW zb=&CqL3+n?Jc0qj7>~mgoSu|E(F!|d@Fjm<2!#ru;&F5Rv3*aE;uOa7oAuvxcz9(v zqk>xNH^aYkLlIeRCVt1F&Izx3?v)D0S)sRxk2t0seK0uh#`KoLYumZi7h6dWuN|4~Qq?9s~$P}e3O=ZUW zOwjEmsi;a2Lt?~PxqGMhv70^5d6;pE(wVS>YEJF!h?5Q;|6afAv3zzk=_D_9%E<1~ zLV3+7_S>pa7c#_dir`>rJNx8_T?_5|1zpv=*_<};9&-_1ZPLO`TT2Bsa zwZ)e^bRQ(;!2@bKMF?7T0JM@1L8+}p%{D+s!wzW(Gbe`UG%RiVVuKEMB$ zUhKm|55LgFKl||JR5F;f&noC~x8?4;$~oGc(zv30On{J71a^eBOAhUm6Fk$qKWhH$ zin)t7ij9&5XQ=`(L{&C2$23PDyR9c8g`MU;jdO#$hP@Igb%c^vA9Xgx{}SzlIIDEE zh5kL>`ZOZTXI7(a=hN1c%=U`lMI}$y*`ed zS&Z-&o{nNqjw^$mjzuO$NxwJ-fw$jJrf*91`U#2Nx;gqaJmqSl)@gQC&b%h)Xt#$n z6Y3{G8y@D|q`#RbhB@cmitc{lVmtyj=ax_#97|K2fcvGT5l=ZFmZIF&ZQ3EVHh!`5 zU-3R`QV~rznW%RUw|fQM#xGuMO8?8yq)9(s)J^*y_@;qhEHO@;Tn6vn@fX!AIiYZ5 zjv+EGdF1oXhHtgZ-!Ar;5(A2FHw}B&PzE=~X$`Du9j(er1V*YZh>f2-W^GIw4XS29 zeN1--SLZQYb)WJ$Q?pUWEhrj4#Rxd`YYtPRJ^fMIr6U45Imev0euhpgN(AA%i{ zh&@WnWS&$&S@gWqpw_Pt#24n@;HEiPKO9dw^yH}Z8`R(p(N+U&8U7l#LT|%(^rk^C zW3R@yQ1@ib8`Q8XS$r!2)1h0Hp7!XQDRA}>1Jb|B#>^^_c`lFXOgy%4Cj*;|T$~@s z801w;9t3z_(zu#Ob;>QXp9?uQG>u1bXi9@F&8Aq*A^U6hcuDWLjfK?L0%T61BB#ir>@uSnN*Zbg>qswTn*GLGd^)uBMYxy-Ui&aIy?PDf_PCqMh)yvdiv7a_xgk(02cnSk+%zm4L@N;{FS^fMx?G z0}S83PJ`afjNLkJYyjDRTE+Lh;L35Ih3W!g*t zty>w5k`L=OVqAL@HyYvL=!dDW@jRPshYSfEtH~Atli9t`7|C#cv@`0PR#d^HxYVz= zE$GP{li-7Bf8pv_{=OJiRPyttefW)Zo}q;Gc=~h1hq`@rJ&3C|I=8A!Erav*(j8f% zC<@0w>WC+bXCevyhUvFsB_ke#hz?uj-8Rpdk42e7h}#|Hfuknb0;zJ&uGywsflThd zk`g!!D97~n3RuQmGM`G>bz!;=7?tyQIxQ+GtYf4-10sfj#c}}VkO(<3MEg<&8FS!) zWg295yNPj1+#x7kd8m?7?F++4Qf@?Z9SwnHD~?IB%m4DOD-w}^KC3Imk9THWP zJyf3z7}y#XIv6D~x0fNgqC*LBm})#puY%zz)rje$9Em{-bbVf_kgS`Jg)LJPIq zBt^S;=D?(L|1_`;JewS)?5XHLbP20wz> z9g(#vmVUkah0^{m{`$4I86V|Od@YTDc6UhPl=JEnHscA{NK@(1$>+(j^u~zgx2WUi z+`(EM;0zDKi+)>!)C73^fCkTlEyM{RBDNB4g+}9Md^Nt*i_At;IuN?VQ#=UShqM1c zvU@O{KClu`HVg~(Z3$**RlgXDbiE1wHf4=8| z6bsg%7pAR9(_D9%HzOmBjUxAMJk2y$`#=A)KXUzs)^-AIeuBruU-0>?26>$$Ou|H? z{6~HHqjq)!_an#5MYyMFO86tC2~QbMhw`RQOg;;hB|eP*qo4(N^**!;{NV zW@&7qm4nHF7l}*S5^kN9Jon(V?4+{~2Cw{GKGR=QjO)Jk){#OPpaiY)QN@DNJ?CTG zWae1ov}D9+3L~A6(iy)d;Y=j-<#{v_W;DkBc-K*9^*!D(SH{#3arF`_U~gUt)&VrD0oq02mtQ-{ z38*Upswd9?BlIU=(!$yGq$!st8+G911pRh%;OZTGo)u{Y=+DR}fLM|D5S#%MzsW&3 z39&V12>*58F{b<~j$WM;8^oV_T6OfjUobZ=6@(4*P*B`F23;Wknr=JvS!uuXVLBWu7#%Z{V*7Z z;rf37FO~u@UMRIQJ?rxnyRO-*Op=sf|0nRURD!o6%Y%09Ax%&(FAyX&j#D0;*8mFdy+~7 zb@DO3#2_k>2WiKV4TgWvi2BBb7(H!Ue(Lr7kNHf7>TRzk~Z^7ec z%Dbf#dV+bA+f-Kv1C4J)sVEqi$p*?_yd!X^hh=u>7B%Ken;rR6be0t@U=lXZV&*25^aAGOP!mW=sE~SXk7Oy2aGK6U_Y>bqN47q5 zFmv4PZkHK(O6sUafyBS6==V~1zj+NTVb0|FTCyK)op#;=Wriz z7$%(fJ@IjejI16Fu}OqlqX zbhkw0+s+T0m;a*oxZR%$0(;j4%-x2c>wzAi-!06A_YM>PK{`mJ7#}n#lYZ*g+v!eS zagU7=B4Z6}RJ+!!_Zy;o|Dl78y-HH6tw=qsCUiPnC@vhR=Z1K@yDd(6QT2<+e#XM- zJHq?Kh7q`kP1C`v4<2hy2?3XI9Alj6$vX-fHB>_)S5jVyiUJl~r|&She8P96FumFP zA_Ce1(#LT;`~_2n4E|X7Oz06Wg?2D!sKE5mis9|P?IK2&EhBo&j6Yz`Nyr`kYuV(2 zQ6FtCSWk&*9sW4fdp8Vu*th4b)tITUw-BejwO8J)8hw`XF@q#xl-yEjSBxN{gu^ts z$6!8~epdO!$d$SrRtBaVfzuYi`qeL(v=CYXFi>*Ks`o1pS^*;gx%peh|3i_E*{Y$z z&q-;+*PONpwRE49iqb}CFcn7=TSY+isq+)k-;#UJ*nWuDlsn`!dXyZ)ZRk?(VH|Xg zJ!v5_pntww-h>36Z1}`gI!(Dw_PqYum4bvitbt%Ybkh_~)bhYQVP>T6=JUeaB{x2R zS1M>dFb}s@)3qfkyhFy~GVl!|S+xD{3^M4~wB$vaj4uI+$L!T{p1j!`_fX&;8g zzPcAF5cT1LK=Awq_wKM~uXIjvJ?QeXr)cn3=n*m5hrqVp;jdvkY5j7A#gB;(Scpny5~XyQKNo%KFTGD27-O z;1K^eGC%gS!i%{$-4EEP2>Ft8xvxT=wWYb>J!Ryt+Qs*$*wGLw?>-Q9>%NxB8vn9R z=f8Umdb+lip=>8-N9TM)%v_TcsNE}>8lcU5g!K8>kX!h*= z-QundlXOqFfi8~OB~ah2WF`|{RW~{7Xaq~#0$)clNEILdY+{&+JZj>bVjk^8ex8En zC`2)uYI4{(8sadBjwTR>68Ot)*pHY-ww`V>#;5n&jWZ_y{7wo1B5B!};N1XkOqqnu z{eBq|<%$SXBYB5^UWgT^B}#730x?Yp`#rgTlyJ}cm;#FiZaaoM_;8L##25`{$>dRP zB(XZ`X_KZ3im!i>TKBjH>ehQy90dbewAz zL3aaFb{PGw+#roTG*EfM9;t}tws=w*sxhUsJ!E=u_f;agBlUEg28VsW5!LwmD0Q40 z+T&pKulz``*J(%C0<|(l4q*yR1UULAi9e z-Twtwx|$Ai_kUne>j%CWt!+8IKk4vO}h-Kor?~p zHF?_Plf<7MW5&_NPTXo0rQt%Eqr3|9=@dhkAmM#BwI%R|`)`H*Wal!E_}dOfXWnwA zyq=?W2q3T&2_g^mEf-YhPR~Rd%~r$@FYkFyIZb){)hwKXn7$od(!3H;;hiMoT2h(- zcMIysFRMGwFE6h--^Dm<<_Re^t=&<>%``{5UlG&m;6AV7PULq?VVuia@A-DcVWQnM z!>^mHq3));e z(5za>Jk`Luri$RX1U^f~V^Nj4*x5!WNj;n;0xF?H(bGKWQ4|asY=&ja|DsD;Omeu% zue|fCEg@TbSGOe_jFc*Mt}rUZ@_7vBv}H8kJoIhmn1UhCtCDaEpyR!=e}3)UKh()y zgg2~E!xv$!S=;wwXYU@xrKPSR*Mh6dlE_VVL|%VgEDY3A8*MaemzwRRIt{8# z0ko~ZVDQFm!nJ%vPl2x9RnpjoZF3Su5tcj$zh)S9((mv%!Cj^pT=U^RdJ;&Qv+&N* zpSK*{(E$W@OXT?KoUc&gIq6z#1Ek z1mht?!2vbX=1N#v({A){DO>bc3EW39*ZVw*`PGCpB3xyAB8f4q-!hz&{l#+RyI;@L zM7}Cm2zFnI;|s>9z0Q&uKZ4&5`Yiat1u<`4Of9oxUmxf@%9y_qb&`9mX_#zkXr!0} z!Qh|xPGmd^%3%J{?x87wmE|$l~D6F{b+T$RbzCRs286-eLZz_Me+MxwRCDN#X_B!$KVtm)0=9{AC~&zt98Om*hMwJLVo4fn$QpV z89rHw#obZR z88(q1Pf;l@`11AkGjIEPZ7g74uQECHtKA=}&;t41 z6583@`VyaNw-Q#s^BRiX4_xFuOzGHfy6}->h4=k&;v@! z1+iQad}#(=X0`RkTGZa%y0YVsa7OyBhoRw9(BLxAJh(|V?okrDqDG9m!I%v(0XEoaI{I^!TeqGEyw8;L)#1er3WGWE!%vauF#(45C^@8 zT(ar4@+bC2I+S<5N#1rHoR0BwH6OuY)NikD?V#afk5ey6pFO^sAG$t>cAlraU>{si z5pJ2iP)WE30FqBXll=o?^u1Ggjp8mrAJ>1Ek~o5uL_b;7u=AP*0_$gwM$5lfC$Bc` zl05DC|NljWt*!GsJ#7uUh`vfmLt5|e;A7-8hQYa7>t_>fiYbbnkjfaRx^}dZO70(7 z^Go$E8MAbrLS~b%V5#z=@Mpus1HQ90i)E`Hj?I~n*)xH$^=Pjjt0+~+-FlfLIhxLft+o!kO%SkOO; zIvj}lgh+qt10BYfK8VV`k#8Rb44x4E_$#kLLc@T*)&oPmC>w7ATczq2xsx%Mx;LuB8`BAPOALFCiN^vRmxy+G)U3oi&!@T<*HO zs25`I?~E-;$_llQB(3(K(TB1-1t|CXX)z*SK7GsLn$j3dc!?ZzOF5XmmxwHD`T9V9 zQeM|VrsjW^UqA8u$xvugdr!$in)sl<(4;d{<}|e5?e2TMM*Q;$KXUTw_Yl~F>EJuf zkMu^_&p$3Yw1!isg5PQngUW;Z=ujg!nc}PBeoY?j!g$M1vV>zdo){fX-(9JHW3-cR zfpQ(}j}#TcF8Tp~RX_fZK?j#cSeL;5cee0#Er=h+`>~qqRPQzD2jKGC1mGMBK)${# z(pf#!1npZx!-HQov-d&ZNMPMuER{UXDFW#8y8taZw^K~&4(b2rH2$+-Ei6l@()l@V z)L_c{5wYHY>i#(GxuJ?VQ*+dmf|fo5R!jpG9bEK4h|y{C?Bb@ESv>NNY!i+A^4rfh z@1?CBn`PB-VvI)!KFW-~RtqU`7#FhVyyZn zRmLnw9YhXmRUB#3ZE>N(Vf2X87Il+HUeE*&QaWu zNGscH^B)Fk0ezC~zOShNOdaCRJbl#ERb5x=-yb^Cv+w&^XzkL$tF8OS&*oO6-$pSy z51&vxkrO4Qc5Gyph>$t+@0YS*S=kVdyWPE`U3MG7^Bc2VY4){iEL~xB8aco@_p-$32uAXn4Yq8;8(0B6YbrPJ2n_~NH1}y@0f#(m9ec7{oXW> zIB1kG4qofM)65J;&qGLk(VkF?Enfd6?5AqB@1`-+$CuRy{B3$UkGllhV_kxOKByR~ z?E_w9(8Rncm073w>_wDEDy;`9ytD9*3Vn!nnr0~-W!xoI55@IV-@=P8=S%9?gVFI~ z3cxG9s8uy6@UPtTr$yiw6MY)Br-nQh1JY5f6~v;r&-dN3MVaH`b)I)tX{$-v-Uc-) zZ*73|K$I(8C{u{Kfa{}(rE?L3%bUE3dGXhkrKn1KWY*&$#_#NUPC0U4_iYs|o;neq zZ>UoyOTLLIN8Xe5Or{8uE$;8`npWjOVx2c%F3|ff+4)^*tbj5^c>&*9a7m8gmhY#O zu0az48k z)(?oB+i%OYNJ4otA4E%{OGFd=3-c&-ta`qr4dr*AqOFeuwV{AQ?Wsh8Ga}H=4GoWd ziLd$lEAEsFXuPmbv*sU=Qv7uLP)9vODA%aClL7Q)!~B1|;5TUgckYUi?&8AlKP0J% z_RCAIjq5%x!liJd)RlkUsQf<4@iA^zB5j&CgTYSA=enMHj)fWK^fSw(kc9&I%#4<* z!-j3-T2f_`R9j_D)mH6^3mvwKg#7qQ-(_-}I0V%3a2h*IzWo|gVt)1tJvcNadcEE4 zTAinKszf2XCLZDIDym%8cLeXB5>G!`Whi-Su63MQHL$F;$D0%w(D$`p#Zh!?vOP}H zT(MD3UhzJ)aGh|DgQQ%x`cEJ^CH`!f#f3CWHPa7#?EvEgNS$xuFU zb8~#-dE?ufXmHZ>`SK@9wKL_sPb0h>p$S*5s6#dX>-T!{j}j%~BB}y(o9`X5HdvzN z)#;TazR8R5UF>aXC#w?=7+gSIb@7upl!y$r9ppG>QD$a+J3mvu3L<%_RqT-*GLKa$ zBYT}9r%R#6s!OfQk`;-Y(#wK_XgJw{rXazX3UFk^r&nEk^BU028Tr& zD&1QdSTc(>^icCyn!N`a9goFD!cGIqf7yUjii}Zc!d}-P14C6WRJPD~y$4pt7pin% z#{(M9{G#&rHfu_dPC4yU;~VHft{Nxs+!|w>dORS(V$x0ojW2zivh>)j_&>GQ|E!dD ztaN#>#`t){b%cO+x~obY$=)Xqy7X_$W{L5_q9^2b4^+aKCOgQ^wvY6^%j`{J&38&$1@0Fc-q#Sq7nd=A8GL!%O*33v-$yc8 z0IT+da7s0*$|@_R{QfGNyQk2_ns_XDVs-k0S*W}sxwFGrxx(Z8>Y6BT8<@N@y8Zjt znYS10hqQh3;*VXH>4@1^PF^O1B&EMO z%Lqc#w=*-z4smP4NYV#)jcH?AaFajJjaMk`wV-Q=P5BGZGuTg(QCy#Vr=9Py$yjbZ zLa!%vWa6?tv?V19z)%wAZ?;I^LP(maz)t1Gcin60>0OdVpdrKC@w`u>FUKaJ6ka10 z%rkjPR8QRY(%_k|7nwh^z}_G4P|v|1#hK2B4tO%WpK{K;&}w)rsf=lF@Dgp6+PE-M zXkNj8q4H?YeEdRPRg~?Z8rz8-56E?4xL(7!Se-r{F0Zbwnb zq!^nv3UBmYFSZrY3tgIX`JlBDjID8$>X`QN%MxW!nDREzxsBkYoh<&0Mk`jgPk);) z|D6`EU!_F3l)5_s%`djKr%ILS<#N^pCAW^oRP?d+aAlfn9_K_otTY}R7_m5(hH1)n#I$`ZH3=M~UL zacP7B90WB|i?;j60<_{Z8`7x-v8zSM6$paYqE#2vSGlam(t7_ZWCSh1Z%*`S6Mtme zHmU}-nstaYFYJ1Q2u<^kgvwsCwckS0_u=r>PUEWT^(Wr}GY-70s3- z*Jz)xVD;T_3Ap}_7A(xD`cx z(S)se`%|GK(md@dE)ea|`7Kw4G~fI*AGrXBe!WEkRzm>+3Q-}1msEuZY;>CeV4W0b z*MJ?OZ6NDM$0Ue<0<;dvE0E9x2w<^AhyEh=n7lfWPWO2vB;-@P6j0#oV7tp8*)h55 zJ_~tgyPP|Gr%6~<`+?#Fi}O{PvYki8dQimru8=BLMt`iWKfP#PnVKox!H4Nn4DK^a zuLylTBm-9eEaeRzU!$en2j|5zKAaTZba$FHj!&h_%w=drhkkeo%|-0DR%*R^r?Hp6 zWSh5aXxC8Dhf1VGT7Vj4K!G&>Muk9=#ztn zyFS?lf%R2o@w>!l_(H5dIhdT=|}4U0otSgH2nXw zB5@}J?^N=r!k#BW3B>#)g@qWoe%tORo#+}QzOs$7iixij$q7XxN0f`p1TAR}iHLV< z=qp$G+Akn!1_VcaDCT6(rei4~76>E3dB&NSaNrLw>o<_A^i6LnsCOv)3Z`Tfxy;N$ zvMJ*Fg@>lJYItrMP zDw!-T9##|PtPCpm-IFi-8v2ywM(Q^_Bza*fXg>is5dw)1rK?`>G1`rqse_-SaS#RG3-Jw$*fW7;3?vMYw z7+6D^g@-GqsVPV4;+k0F4i{uD=H}T-)?CQ5kA1IkS9`qVt|i9$T2#k~w{N^y@Ka9- zcNyF#qj#g|JgUWc1Aj2f`%a(h@bpp~%?T+pHsCbetnajuujE-Weyjd1>(i0c=B$ga zNR<8h$Ak055=RJS6Nx-`@AxvVQhS*hoT+-O{_rJ%g^#n#WLLkd3bHD^c$WUrr?ZQ` z%9j$fZ-3;=m>%a%GM2>V3ES(3QJEEMyW}4kQTjm1wknq(%Fpq<+}ZL~H6ORbVUtAP zLMwzlWO;T&fpRY!feRBTb{G(C#%s3^GQ^8%8$7QZB7@!^v3AqEW7nX9|35zd36mBZ0)LhWQYLmMF#pO@K9g(?l4bFT>>HfOkZ&8*D&JStyb6p) zGbm7LZp#|K$0RgX?cuFu#qlY;Ir5TA$SPvCcC~|z^k#|7r`Y_-0#`bJy`^W+Os`Qg zieZCZFFs=$vQL$MTl1AmgvbV&0xcJ_30@HY;RR>9PHl;BZQqWPJmnMYIbWsagnE6o zmO7Ej@*9*>*2E1Gk_V zZ*We*gmk5W{2r>tQQ$i0Q`{f1Prg_(#2-Gy1|+Q|!J1`9j@=Xn_~^x{mJOYqM0NB; zj`jJ7x2HiN+24t#oa>fwI@iR6Pj$tLFm$b#6qb~t3~fK~7^0PCOTb&UvgMZUByZVK zgUj}nkZkLVf7!MN&e8k7v#`l=jJ1aQ;noyUFI>xfCofNulsR+5w#{OD*6X87}ef_4&7dvrQg;EL=n*uGrVZ73A zg**%Vwuw;Hoy&)k2J1UjD)wn>`xtfN=WkFNp1$p7hN)^b_6kNZ0&;flSeCDGoHlVR zf>Xb!ruAJf;W@$i_B=mg5(IxBw6+A>o_Pk-0$V#Z4*fCIbKyvv_C3^T&Dyb=h3@M*9r zqGf=%AB>>)5Cc-lb7ialCKG zbQGn-ysIcL_8rOGfn+*pemV%-WhHH6k&8D;nPOHlR?va*}-e z%}-s#xz=j`Q$&UNGASJYnwG(1lMGHby$zB~b%38|e+IbkF4%y`7yvoal{&*5I(^vX z-3!2~S0=z8j{jl-irZklNJai=1{skzV8m`9CzSVo3Jm{%1|a8Q{13d4$KEj+cK-xc z=&pKPa(%~MFjSfjk+A4+>#p<~{Qh&__3_@)?tK8WEe3@eA1BGRv9q(+7f>=;o3=#3 zmwN&~f;nnjf|$8Kc1+2?M)W+fE)`GYOnWd6V?^SQya#mT-40R@oz&5~@){&;$WmW; z1=q7oZKr=3ozhXwEOQzyGWART-owEfbky>4k=w1J@ZwsCMX&7Y>4k=P^7OOWmBF>g}5x$0qz>#lo z8hMg$4ByiWh|~~JTl#B_1Bh(A!Yd;;hE8LhZ~(9)W9UYDas{4}?PBGhiB@V5s;Sb6=yHOabacFWk z{ERJr!5oUU(RH6R$Kpon-oi=B9Ypj5yfCn$g(SOixg)|7372a8f)Y$g?Z1*|*{heB zyvp))s9GWmbm`PS(^koTmGS%Cd;yd9q?})8S5-)z#i$MNm}K4E}63y|Fa<8}0XXNK0*u>&XPhr8&(68kveHXD5a z6cuS_t$Q#-PN2c9Rqb4S5NM3(9UI8HU$znRPfzxxV*)1eKe(*^SM$M(L=LWkni`@K zx;xfEa9pf(!;NiTR=$zPjG>PUQ&0>J<>GjmVHWXeDyNpv0ZSWGi`=DrH2m4?*{9r+ zog<&EtHSI;Y{-(Iz4c+?oYgsdZ9ghdnn0Ua9EM)FL=Ze@CqM3))?{XTU88E2j3B;@s7d5cL7r%A39N0>tGRZ+apKrAq;J_z@z*&<#B} z{s8z*uJb-P+qrfUjFd2vdJEI>5g_HI_KLFsCrWog9=H zShAsoTy0?LYFg+}QZ*fW1@LN7sxmLx`bPK}f>XAvy%?|jVOtEB+H7{jv0FSWff6qo z`3!3c@5K)i#@J1gX`ehNe#Bw4%Pn9pa$hLv8p>J`Fu5TBIvSw)@%>p3e$v2jKQeWE zK{v)|RwtDYF!#1%I9MZiMVJ|lrCTn+ol(HfBpM=dbVu?)X&|O58Tg{ciAaPNO`YxA zZh@W~mL}cFTtY-~;NJfs3`oFsD>CTAYKx)y9CevMui-xbQmI5xZg_~ofhEf=uZXYY zqguWMr$Di|@&{9COwOt=X(_{LvF|*T^jA&#C$CIe9G@|9zkS_sn@lw)_CW~sQyiZ7 z)WkC$5%%8Y=uFSMk1B>v`DBF=tqj6C4#imEjj!i09&;>VNrw>lm051Ykr);T>n zNePVm-ez;w2;?C<1lNP(4jxJ&aj#B2w&T8NwKP<07e zngCk!doRp(yI~uoH?x7WtfrUXrv2mizd=iN)?Vvl;B8v6;0+NBB5pS8yKY#bcHN8P ze_gD|og+R~Cbh%VP$P>tlZJ%X@={+rBLiTD)~WD zZ?zK7G8=WJItLv@VlpO^FQSwC>dRPkpurv(i4X;fX)w?qZBA%@d-D)qB>r10M~^7L zBkVbpm;4f(W=6*asLh`uvl4Ssmk+bV3`?1!Ak_Ju>xQ27E{^ z+x_XXD=VA7P3tla`h$ZNd_74XiKMfJrp~2_=_DeOeEvf#-B02^5(I# zyVXcO{<0@b_B5Vn+DWI})^c`HWAqSR)Kux0N;;&@Svv&S z#siLNaV`!W6L*y#cx$*s*4OEQ74!+f3mb?Xh`5GrTk&=mK{SerP%F@Jt z$$mdBYCCbdTRT-oP_UuZ79)?9+R~_w8T2|A88j3ZShB^^^zDIU>wks_U!z55YRDOc z+00?K)hVB0R<`w656eyZwfX!=QBIf36phyZHdEzCVdFL4e1ay_|Ff7i#!5YWHJ~%N zbHDy`rD12Cqx|k#p%jT!j*w_xtO!C|xItAy+P+|CIA zR`5gcegz6*YH^Ism5c>oJl}6g6SMcuef8N%A8-&N#;`<_@_wy&OttNHzMtzVRwRP{C3zF!O+Wtf6r29{5$$FY9> zC1~)wkkx#Q7WYJ!cw0esTiHHuSs3?L(rjYAzkOeNJltNMdTFA-zG6#GE6H*PZKh0>0`yCM``e?*#Km3*KRpj*ImB$maK+i{*#DiWr=S ziCM1AihsP(z09#Bd)-1n%BivKj0|xs&Vi_i7Pcv2@i^9L3~vlk9vp`!UiqOQM7#&U zgjw659$;Sux?wr358EIDcBFH5fy%l4#gHnv{-s~b&TD&S`(E%v(}3PT8Vs-B#E;(r zH2*^>Xvj`eD}p9G`HDT;Y9eS{SLdvn=*yQh-7L~Qag{)tav?x$5xNgbQCz2E@~59s zG?F>SsVvWF>xKK*u6a_3s1$-HBWf{qNEv9ir$ngY#7DzV2%1Hu1brh9sMS$&a$3k4 z@Qj6EZktb|KOHTxmb%4Q5yPayNX0qVBec12akP!C}!`coZz+2nL!S6l2VTNWSvvN?l02N3f|AZR` z${7YO6JQ(EJCLP{c(`K1DF@Kx!c71ySsPuO<$pr5*WwMTI{F7xK)Fvi3B&d9U4G6u z;Kd1CTFr(pj9(m8)I6~K%aQL8_HK{%sY=>RT*Pw zPQ3t?#?iCgBEVM3$dSmp4wHy!K=JP{C8JO3FS0qsqF$Feg`cq&W%3HWf3}gyMLTkSJs=^N@ z_ObwOPgu^1KMPROK^jvOVMNn{fy^rH;vgcc;KT3y_Iui*%8wz4+kX~99F>6nmYqlZ zOSGeXPSU@|l~ViMC4Jn^Q*udXEaR>q=`)6bL~zC+;{?I`x2sGm15E0-?jL;yf*^`4 zEc;*i_2LB0gQY6uRbR6FHpUU~*e;2NSW6TTzF9^s-2Vc{V6+(c&=g2)6AhWwW=n(Yo;TBN!x$oHc+f);HI!JDI177>rO}u3LrhyA( zJP<<@Kx1&zVsrX>U>_b3E9;wE*_jg5k~AEGekEMb*BdU(QD3TKo$%IfX!UPSAyzah zhjKGI-smmq%7yx^adLYQUT?yp91TyAd>{hf-(?-hJ>SA zd$wM;K>CfYMbaLrj~Z45<$u`;MR) zrK@eo4!z}UUWyrs#}(69qc}Zod_)7gVezPXxs3w{`D*sT2cCiYveZFE{%1>)o$4+j zZpk*%^fmdr1wje8xj%)uY_e)KQ~TU_wdMvq!Z_dPRvT%V+5Ob}@mEKg<@oAqTSkig zw_}FM9@q*7qTK_xr{9p=J(>!drV}hC1Cwp=lFSDqQk#c8@|8Eg^TG$U;pC=rww=G> zk&9zn4M;yZ4f~1+RDj4J4V*Vh>B&N1|Em&0IvmGXld_5cvNaga-+DIM~Cxeq%5lD z-}FHV9sSGgrEtYbP^f99NF?biVuMl2$}C4dI?3&8<+(ur2Irw#`@T z?NSbwr*;jn0ZCYA3*QTU(xDGmgp2{UxxkJELVcH-#UzMlCFbgwM2G+qN3Pae^!CRW z)|-}VkOAUeD}rfP@Kwt`m``t;q_j2(z;&oB4m^GWtROSQDO)R0vp2;o_$M}SeKkY; z;L60fogJi5eE^;Y<Wk5MNMdoR$-&arAZKLMj`3$6p*7pB@=)w#8}_vP z8z0)G;=@CkB9S0okpkA|cCU=+H)w1Kxnj2t`qYUB744}b*oHJyeN0~na@ZuGqSX~$ z>6F){_zJD*Q(T)E5b~Mv7mcU!e_KTLlE{*A#Jk(;4dBuh5~YzpuUCksdcOy8vqOsY zst9ja26fie!MIf~Kbv=fxt<&RmDi9eC@)fOa^3@b=)==+gw^x{lnw`w zGi`H!_8Eax?BJUHrv2=QP(jO}>y*9aKS6W%WWF6F!xm7axq>A}fnryuS*yS=QOSFX ziI(Hac!SSYIV~ac9@A3fDClR8viw?JpN!YpGSVVsk88wQaGLqJR7K-EizXrqjnwYDxKHY4hU0tS@NkUM|g|^H+20az`aDQm?Y$BOIuo9%o#<`~C_u>qYiss{!WMNBNrr zw$8fPA`$h%>#j|i;CvP-?I!a%uT;r`tB(xfUzOQL9egtYN0%JLgrW)-BJ)^YUH$~v24 zkNn5?aQN+lnaD;UpK|4=&K_0XE)tOR-;O+L#fpM!@q3OuRYBY1UL6Tt-xmud zTWL0N-(s2fgb8e5dwzYbI(O(|S};mvBQ;W5s!)+!pB%*~G0Y({8)XQ8<%@5qyQ}Q6 zmP0>5L^K>+KOgOHS3@WGl*(qg!l%*f+SJfpwwWc-@%jfOFVjZaV`uiE%rmHYX8%OL zOQvhA2u_E81#x<{qpOk$ZH7AWOT@7)54;ghr;13#4+hFbBc0&naN$1*(3+`v zn2XFaZPm42?=heUlqF_-rz!U;X#0B3xtcAa{tpZpQ?74VZo>+@Vf}Q7izU1KzsF{P zks_{S3e)_DzW6{hX*mA z8>H!Zkc+X@t9IlNGLmUiV3M$q>Il*3*=;KJ&lQS(mzycx%{>?k7hv8>79>iv<-&jw zq!0dhoFn5s5xy@uF1Esb8(!mBZVcl^#!YHlVYyR`&w*^DewzF}1y^6v8IlAPwC^EF z-nYf<7{EOS@M}n}x_RL4HNPZ zcDH571?`Y7_|L$;hrdwb7R3okTy-y`mBLEma!%XJlg}A@K_@`%8|B~Lp^zKO&D(K?IxedoS(K$l ze8ukZjyWKmWm&6<`YUtHrM*cNyFogKuy>Nc3L2Vnnqv4+%SxxV0Ts`%@;9ylJ3^-! z>bZ8?F`ajlW%X?uvG<0hoNqVWzxLZR$JY&mP-uq4&x_#0H|;z@!Rs$TnlN2(86V9o zvLMJGX_|%9TcFBrbSPvv9Bmx9WCF6k!lxfQ$G{1>&wDMGU#G*Ur?$Y^-cOdg|8hg| zFKPIPAN*fj^X!8?=mC`2#}mCE&x=GboG~ci+S>)j`H*+t$=Z!vE0?%2%M-XmwGrig ze_I0%w34j;7fVd?fDql&2`BN^@(X>27(=EX>v1+LoUzv<%=1 zdfbKv$_M!y9UJFG8u972wDhWs@17;*r7=>{L`HTOL|`iiT~O7dP2$t|7kS)p)iiXu z`3~$J8slVJymHnnkhx-d&$A)$s5dJ|DxN?VK4%08D{q~iJ-as9Rqu^qgzFc0p#Zv0 zIAxxk*PyodxQzv09F zsQ~|(*SGj(r(Mvq%1f#!ZTP_+C8D7x23hVArt9AixTOL+ZU~X4iS}1?(gM&^7cdnl zXqS<$m$NvVGo}H6O@s50aT&CV&Fv_*g2N6c{_m)I5Yg={1v!EIB7VRo3J7tTC{$^V z9duh^_VD25(|xAUT}&ExMsY-DE`x#%kpzI`rYuKMQW9=Z0*NAdEk8@|W8Gw5Sx zJO!@V!ucb;Y#ZSom1&T?5dGhzL8HIPe zy5Zs2u3@%E4V|Kmuv)HfjkmA83GFlWKXZ*k_rQM_a4XVU2@?2i{v=;JHC1rY)Mnti zX&>H3gudiQuNqX#K)0*Ic_2Rz)p$-8@L8i!=cx{5I#@Jh$6U2ab+i(U8sajZUp|TDe*=E&VfA#3pDQC8)um8*Ye1WVqblvbWFJ84 z8M=ALP0kKiEn3vQT#&qe;L;H>ZNzt-KkXU=lo7nm?GtI)0=8dP!={}~m;swqz-b+R zMvZXDJI{kcB*wrqaj3-G$6r=4uC2)MIjzH00a_^puPA(d>pmLdPI!a-524!s}@;Df>f?-40=L_@s?3W zu8rGSPr{G{$7UR+-%t5pl3 z4{QmEn~U}UUg5y3oc>B>l7z@LSX|V8#+444J`rzaMeu^MMl~P*VATAaeeqa`M|1J_ z91Nnp$UP4@Xj(8`30nRW^LM_bo0O(fvp&vD;kll+%{e|8Hg2{(%$gsNYzALL`-A1s ziFi1^+>uzn#QR&{ye)k>Kx{k(c`@~`Vz`6~g-ghNrA0W`KuYsu+GGZcVKOm&TRnAt zAvmYPeL_;`2Q`~>#`PYp7Z-*1_biizCN1BYiJY3tua?Tm9l?0(}f z8&aks z%Znmju3Y|AnRlHtE@zE1Q9tZ(D!mbCIIVoX^NBWcL0@OlX#M-Lp<&OUxb14U+&{{m z*d)OI(jdNC5IDT{-vu3(lV5;-m|;>QGZ;L8U}RAlbi;WIS^R`gLJ=4Td>Q#_A@+U> z_<6$p&}z^Z!563q-JSvKmSkYVWiP>Y@cAB|k1`X|Hew5L&+bAb7;Ty%p3RUS9 zTheA>;Fnwv+*o#uH;l3j5&qILwI3gL)uz-Vdj7(s)(xJCs$6QKWn^G@gA$`$is5 z{D*7k)6MUM3rJTOQ2xjrLo4f^1VVDZ(@gk5gVR2kL*uKPCHVd|bVFE`UC%!Ycntdf zb(bk59)7NZ@V2`E8)CYfz}_Xrd^>o*2lmDU&sNcvb#_`X&2I~g$;jMx0S3UTh zHqk-QUZ-jz^`K18N7qZ_ZcdhF%Fh98_)%OHQ`NzGC(~4A7geGKM&VwH(&|-RxPWEvn*}2d;DFtQ6PvYca zuf&|Y$oIAB)$4Y`w+B@Y$U>@@h;c83`mz)8ITwy0>T2#bBsv8Z& zliZqd!qc%~8^YWxI=+j5D6ryaHdi_yBtD01yFgmDB6NcbPCgDc+=FCk(HkGf@@H-l z0R7Bxmq}inUCpEAn2#v@N3U4A+`%LS;R}g@CsrIXrr{pf3lK!p59(kEF=MU~zr&*R z?_2kH{dWJh&f<`&F^f#Jqlj`} zn_^jyS(z&`uS{*YIbR1xX&ApUba($yEO<~}Ej`Mhc|s9?n(p!L=Z66XlJltw>(pw|VI{wI{7Y2(|bt{ha16Mapnv-uNBpd19c&UgjPgiV5Qe53_%d_KV z6O_Dt_e_GpFuyObsJe;}OZ0}_I#{KdzaBcG^Ba3G^pa~L%ts4_YO*`S^Hp+t!UX^< zJvN&k*I$*pR5js;JbC^!&v$1K-S@+0Nc{%4Pe}o)B?k+slI)-kYU;1jun+zV@3WjQ zl1ozuUUTuA??`>tf02xr&Qc&psT!YdU-Ogg;G`+XKgc0LXkTQZ8<{2dKDUh%|FmeA z-?WhBQ2q1o><--q#ou_?hT2Mn(-}S^!UY?M?AU{}B~xL@!SnTCU>Rh2>FkS@N0UoP z2O02)0&mep*i}iGiNrRuUO{qd@!|KOKgCCM&6Rz+knJK)F?Dl4(Wl9hFCLm(y10Ff zKzDVC$oZZzFI=~7k!cfAg{uwdkcjj>aM8h8_R2S;3RM8(^UMGH$i8-I+Tz!#c+CFr zBjnAXsc05i#=zF-=QOsK|HmQi^DQ|E zliNKHL>Eh?rtI}NJ|z&>X|6Q_%$Idd11Oq=%Z>VWI2|q?puHbTb53)5-A0>k75eJt zuCJ8coJUkdhtJ3e4I3y_;SkQxKv-MJ&+^!>=KDVSOGf}R~G z$k=B;({BA?zNP&lOR~yo`6H3(27F({*sHUdzAEptU!rTxW9z#CWJdbT+AnaSWBpT& zp#5_h0@VNWgbB(!&bZ4bqg%yuILl%ab7Cu~5O-kE12U7nC9Ogu{Kj3)v3!K^V8d

    (fb`8B8J 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 a!SA|a>X{B)6d`*J{HZ9YKQEDc7x+ItnbXMt diff --git a/help/sakura/res/images/FileAssoc-5-ChooseDefaultApp_100pct.png b/help/sakura/res/images/FileAssoc-5-ChooseDefaultApp.png similarity index 100% rename from help/sakura/res/images/FileAssoc-5-ChooseDefaultApp_100pct.png rename to help/sakura/res/images/FileAssoc-5-ChooseDefaultApp.png diff --git a/help/sakura/res/images/FileAssoc-5-ChooseDefaultApp_150pct.png b/help/sakura/res/images/FileAssoc-5-ChooseDefaultApp_150pct.png deleted file mode 100644 index 38545213d944a39232c6fd0131362ef8fc39c593..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 335842 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%0AS)2mQ%e?Krth-gq0RqX;7VXmay=A~{`qh< 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Ĉ_#tDT^$p>2KAfXb}+WalPq~ZCBq^& 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

    ?!`-A@7 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

    W6gR>0jY6+}*xLrnZ48F7%kY$Upc+VnZx%Yi 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 WXrIr(=Y0?Tym_tiszSyj=>Gw)!x7^E diff --git a/help/sakura/res/images/FileAssoc-6-ChooseDefaultApp_100pct.png b/help/sakura/res/images/FileAssoc-6-ChooseDefaultApp.png similarity index 100% rename from help/sakura/res/images/FileAssoc-6-ChooseDefaultApp_100pct.png rename to help/sakura/res/images/FileAssoc-6-ChooseDefaultApp.png diff --git a/help/sakura/res/images/FileAssoc-6-ChooseDefaultApp_150pct.png b/help/sakura/res/images/FileAssoc-6-ChooseDefaultApp_150pct.png deleted file mode 100644 index a6a6a505a00be12efbe6b092a14d4dd7b43e2bbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29485 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 CI1Tjx diff --git a/help/sakura/res/images/FileAssoc-7-ChooseDefaultAppTxt_100pct.png b/help/sakura/res/images/FileAssoc-7-ChooseDefaultAppTxt.png similarity index 100% rename from help/sakura/res/images/FileAssoc-7-ChooseDefaultAppTxt_100pct.png rename to help/sakura/res/images/FileAssoc-7-ChooseDefaultAppTxt.png diff --git a/help/sakura/res/images/FileAssoc-7-ChooseDefaultAppTxt_150pct.png b/help/sakura/res/images/FileAssoc-7-ChooseDefaultAppTxt_150pct.png deleted file mode 100644 index b5ed4f480778b87de17f31f6e608fb0c80b82cda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61293 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

    x_ore^_;3O9^{1 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%0Dpg#V7rhnccE>1tuld#iKdX=uoh+yTN#P% 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 diff --git a/help/sakura/res/images/FileAssoc-9-ChooseTxt-Sakura_100pct.png b/help/sakura/res/images/FileAssoc-9-ChooseTxt-Sakura.png similarity index 100% rename from help/sakura/res/images/FileAssoc-9-ChooseTxt-Sakura_100pct.png rename to help/sakura/res/images/FileAssoc-9-ChooseTxt-Sakura.png diff --git a/help/sakura/res/images/FileAssoc-9-ChooseTxt-Sakura_150pct.png b/help/sakura/res/images/FileAssoc-9-ChooseTxt-Sakura_150pct.png deleted file mode 100644 index 93bcf4ef204d734ba3081ffcfacba8d293fab406..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58564 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≀ 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 O!ew*oU+XTo-~TUFlHExF diff --git a/help/sakura/res/images/Grep.png b/help/sakura/res/images/Grep.png new file mode 100644 index 0000000000000000000000000000000000000000..5963b490c834fb5b82b217df11232cc5404d0a10 GIT binary patch literal 15672 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 literal 0 HcmV?d00001 diff --git a/help/sakura/res/images/GrepReplace.png b/help/sakura/res/images/GrepReplace.png new file mode 100644 index 0000000000000000000000000000000000000000..772ca773b5dda268f3354c29293728124218d50d GIT binary patch literal 16026 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 aWC}@4e^+u7y#!Zx18UE-mC6-fg#91C3U|B! literal 0 HcmV?d00001 diff --git a/help/sakura/res/images/GrepReplace_200pct.png b/help/sakura/res/images/GrepReplace_200pct.png deleted file mode 100644 index 0c7ecbdf205c17b8a4a90e9f20e05b119d128ab3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54835 zcmbrlbzD^4*FHQJC<-cqC?U5fN+UHiC<-Dl3@}4?!%)&4Dj_W~AcHgv%+MtrlF|Z0 zr_w`r!+Qqr@AEvr`s+P^%;(HGyVhQ7UF%wV?-QsX|CW@5ngj#_k-n3DqXYt7wE=;y zbY8y-M!&Zo1%o^ zj7oEqQG~#EMhVp*w<`;z4g4EVTw1M8h-?S7X77IESGav6;x?R4_@nkf-F_keq$?lij2tw%#;;>Sgo*s@*Rg+nUpRwf(w!@sZ7TX|3BObLyi zqt)vkdXd(xhWC)PWX9c13K?6b@vb-=m>MiQuPx-^ovht;G~6EiJ!A29w=}BIQ8=V! z#-eI!%7s0^p?1B7U#yM3N|$54rghVa`@TJhU#zmyY02)i54pNBTz&ahVu-jPuV6i&%n(*2XLDh->=Ou8IhZ9y;4t z(pm)+PSWqYpI7AukUG^>Rqjue)&xuxo}boL&h)kt>xzc zeGwEj29xa2wuUTL)hJaPI3t}+OcTZo?l7T=zZ3q@Y)1KeJ zV+9!Sv#^-lDU#O3I37@}^CD@7*>2(t9lw%zRnN zOOJf1TsQwn9^@ti9>Nhru+h=cOkLj;G@&=_(98=&nYinn779K-VZLi1kk*@cO-+4V z-c%)(KMJVAv?Q+UaaYP}wfNkRD;DJzQAEu*u!QR2NKm0|&D~q18nuN7YpjOV6#|~O zzcNznJmpz7xZgr!BjUERIHc>X9Z`0^HOFaT;jCM8lzYOVKT{w(Z2Myhk(TL%<1vKz zao{C;H}#&zN-9^Og>tjN$gF|3K=g)RdBU;BIR4uf4-qIiHBrnHb-cvII}mhLc`iIqC!xm=*YM%hqoE62d-Ed9Q>J&+fx6d(WhhbX+0tC zV*JB)sGA@k;KlXK4U0bc-$TT=A3aS1HGWbSxco_o7bgnj zGl@iOq3{l)xdJl8QWTOC_hxlELb@u3;QJLj9ie9*Kp=SQ_Cn9wg=FjT@(7O&?TAkb zMG-nSGF`c7d2~wHO)2pblYET){!t42^=^o$vo#kVUp~*Nlm$!mZ)w>}pq%m_OWxVr zF+FS^_ixtPhz zr1|D&=9bq(BRZc@dV7}N;~A1{&SeThf19}sN*3}uTFRXLr292RqjWz}6CxX_R6L0L z)dbJu$;@mYz`c`YpJ29zB`w5Gy?SkWl;KSi_Htc+o*SFGoDTwJeNOT|6J(RQD<3W#oHp@`M{s4Q zLDnjFo5ub#7Qt6w$P&dMd{1#**sM&04zOkgb$w%TWwGwQh~GAuo+tAW*s3fv?5yFmDuGPG&*L9?I=9ELH^^MWw4!n1&J zVP&j&C_l=`C>Nu{-m0W9Y4qn$X_rYsno_O4RS9@!mJ7u1+G#qRPc=n) z?$?O(I^+!8sQ@#~SEVM)8@Cq9cIev{_shIL?>qP&0ukXy)-cYv|r^@HsQ!DM{nsE z>Hy}VnNvq5^-k9L2?q!ykQuF!n2dr#NGr`=yc_U-@$`9C`$SEdo_b�_!19$Xr?NOQWEJ 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%0A1l8F%^oTKHoA^ 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 K=d#Wzp$Py=R&`wf diff --git a/help/sakura/res/images/Grep_200pct.png b/help/sakura/res/images/Grep_200pct.png deleted file mode 100644 index 79bb69c420a8c5c14f4991fbb05feeabae23ee60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50368 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 From 5c90bbac5a1a80eeb9af4fe900bebdc646a8a57d Mon Sep 17 00:00:00 2001 From: berryplus Date: Wed, 8 Jul 2020 05:25:36 +0900 Subject: [PATCH 0022/1024] =?UTF-8?q?MSVC=E3=81=AECMake=E3=81=AB=E3=82=88?= =?UTF-8?q?=E3=82=8B=E5=8D=98=E4=BD=93=E3=83=86=E3=82=B9=E3=83=88=E3=81=AB?= =?UTF-8?q?=E3=83=AA=E3=82=BD=E3=83=BC=E3=82=B9=E3=82=92=E5=9F=8B=E3=82=81?= =?UTF-8?q?=E8=BE=BC=E3=82=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unittests/CMakeLists.txt b/tests/unittests/CMakeLists.txt index 8f9ffa7212..8e5fad17f2 100644 --- a/tests/unittests/CMakeLists.txt +++ b/tests/unittests/CMakeLists.txt @@ -33,7 +33,7 @@ endif (BUILD_SHARED_LIBS) target_compile_definitions(${project_name} PRIVATE WIN32 _WIN32_WINNT=_WIN32_WINNT_WIN7) if (MSVC) target_compile_options (${project_name} PRIVATE $<$:/GL> /MT$<$:d> /GF /FD /EHsc /Zi /TP /source-charset:utf-8 /execution-charset:shift_jis) - target_link_libraries (${project_name} PRIVATE $<$:-LTCG> "${CMAKE_CURRENT_LIST_DIR}/../../sakura/${CMAKE_GENERATOR_PLATFORM}/$/*.obj") + target_link_libraries (${project_name} PRIVATE $<$:-LTCG> "${CMAKE_CURRENT_LIST_DIR}/../../sakura/${CMAKE_GENERATOR_PLATFORM}/$/*.obj" "${CMAKE_CURRENT_LIST_DIR}/../../sakura/${CMAKE_GENERATOR_PLATFORM}/$/*.res") set_target_properties (${project_name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_GENERATOR_PLATFORM}/$" ) From 9c16c10fdb11355658037fd10b1516084d58eaac Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 8 Jul 2020 06:43:50 +0900 Subject: [PATCH 0023/1024] =?UTF-8?q?=E3=83=98=E3=83=AB=E3=83=97=E3=81=AE?= =?UTF-8?q?=E3=83=AA=E3=83=B3=E3=82=AF=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- help/sakura/res/HLP000059.html | 2 +- help/sakura/res/HLP000062.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/help/sakura/res/HLP000059.html b/help/sakura/res/HLP000059.html index af1d01fc32..ad03ac739e 100644 --- a/help/sakura/res/HLP000059.html +++ b/help/sakura/res/HLP000059.html @@ -43,5 +43,5 @@

    検索


    マクロ構文
    ・構文: SearchDialog( );
    -・記録: 実行した[上検索]、[下検索]、[該当行マーク]で記録
    +・記録: 実行した[上検索]、[下検索]、[該当行マーク]で記録
    diff --git a/help/sakura/res/HLP000062.html b/help/sakura/res/HLP000062.html index 7877c7a974..24e2035451 100644 --- a/help/sakura/res/HLP000062.html +++ b/help/sakura/res/HLP000062.html @@ -64,5 +64,5 @@

    置換


    マクロ構文
    ・構文: ReplaceDialog( );
    -・記録: 実行した[上検索]、[下検索]、[置換]、[すべて置換]で記録
    +・記録: 実行した[上検索]、[下検索]、[置換]、[すべて置換]で記録
    From 0a551ad79eb7b7dbaaf02bdd2aec060c9bc3fbef Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 11 Jul 2020 02:18:37 +0900 Subject: [PATCH 0024/1024] =?UTF-8?q?CSelectLang=E3=82=AF=E3=83=A9?= =?UTF-8?q?=E3=82=B9=E3=81=AE=E5=88=9D=E6=9C=9F=E5=8C=96=E3=81=8C=E5=BF=85?= =?UTF-8?q?=E3=81=9A=E8=A1=8C=E3=82=8F=E3=82=8C=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CSelectLang::InitializeLanguageEnvironmentの呼出位置を変更して、初期化漏れによる不具合を修正する。 --- sakura_core/_main/CProcessFactory.cpp | 3 +++ sakura_core/dlg/CDlgProfileMgr.cpp | 2 -- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/sakura_core/_main/CProcessFactory.cpp b/sakura_core/_main/CProcessFactory.cpp index b841c8e2f9..fa39eec716 100644 --- a/sakura_core/_main/CProcessFactory.cpp +++ b/sakura_core/_main/CProcessFactory.cpp @@ -44,6 +44,9 @@ class CProcess; */ CProcess* CProcessFactory::Create( HINSTANCE hInstance, LPCWSTR lpCmdLine ) { + // 言語環境を初期化する + CSelectLang::InitializeLanguageEnvironment(); + if( !ProfileSelect( hInstance, lpCmdLine ) ){ return 0; } diff --git a/sakura_core/dlg/CDlgProfileMgr.cpp b/sakura_core/dlg/CDlgProfileMgr.cpp index 22abeba97c..c339a0be4c 100644 --- a/sakura_core/dlg/CDlgProfileMgr.cpp +++ b/sakura_core/dlg/CDlgProfileMgr.cpp @@ -73,8 +73,6 @@ bool CDlgProfileMgr::TrySelectProfile( CCommandLine* pcCommandLine ) noexcept bDialog = true; } if( bDialog ){ - // プロファイルマネージャを表示する場合、言語環境の初期化を済ませておく - CSelectLang::InitializeLanguageEnvironment(); if( bSettingLoaded ){ // 設定が読めた場合のみ、日本語以外の設定言語を適用する CSelectLang::ChangeLang( settings.m_szDllLanguage ); From ace9de27d31801ac9ce93e8f66fb5c6b8ab64f7a Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 11 Jul 2020 17:46:45 +0900 Subject: [PATCH 0025/1024] =?UTF-8?q?=E3=83=9E=E3=82=AF=E3=83=AD=E5=B0=82?= =?UTF-8?q?=E7=94=A8=E3=81=AE=E6=A4=9C=E7=B4=A2=E3=82=AA=E3=83=97=E3=82=B7?= =?UTF-8?q?=E3=83=A7=E3=83=B3=E3=81=8C=E3=83=98=E3=83=AB=E3=83=97=E3=81=AB?= =?UTF-8?q?=E8=A8=98=E8=BC=89=E3=81=95=E3=82=8C=E3=81=A6=E3=81=84=E3=81=AA?= =?UTF-8?q?=E3=81=84=E3=81=AE=E3=81=A7=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [patchunicode:#694]で追加されたオプションをヘルプに追加する。 --- help/macro/source/reference/find/S_Replace.html | 2 ++ help/macro/source/reference/find/S_ReplaceAll.html | 2 ++ help/macro/source/reference/find/S_SearchNext.html | 2 ++ help/macro/source/reference/find/S_SearchPrev.html | 2 ++ 4 files changed, 8 insertions(+) diff --git a/help/macro/source/reference/find/S_Replace.html b/help/macro/source/reference/find/S_Replace.html index 82a4952e36..a057ad4ba1 100644 --- a/help/macro/source/reference/find/S_Replace.html +++ b/help/macro/source/reference/find/S_Replace.html @@ -35,6 +35,8 @@

    S_Replace

    6クリップボードから貼り付ける 70=ファイル全体 / 1=選択範囲 9,800=選択文字 / 01=選択始点挿入 / 10=選択終点追加 + 12(マクロ専用)検索キーを履歴に登録しない + 13(マクロ専用)検索オプションを元に戻す
  • 補足
    diff --git a/help/macro/source/reference/find/S_ReplaceAll.html b/help/macro/source/reference/find/S_ReplaceAll.html index a5b30f4f18..0e5f245e95 100644 --- a/help/macro/source/reference/find/S_ReplaceAll.html +++ b/help/macro/source/reference/find/S_ReplaceAll.html @@ -35,6 +35,8 @@

    S_ReplaceAll

    6クリップボードから貼り付ける 70=ファイル全体 / 1=選択範囲 9,800=選択文字 / 01=選択始点挿入 / 10=選択終点追加 + 12(マクロ専用)検索キーを履歴に登録しない + 13(マクロ専用)検索オプションを元に戻す
    補足
    diff --git a/help/macro/source/reference/find/S_SearchNext.html b/help/macro/source/reference/find/S_SearchNext.html index 6f13430bcd..a56793b570 100644 --- a/help/macro/source/reference/find/S_SearchNext.html +++ b/help/macro/source/reference/find/S_SearchNext.html @@ -32,6 +32,8 @@

    S_SearchNext

    3見つからないときにメッセージを表示 4検索ダイアログを自動的に閉じる 5先頭(末尾)から再検索する + 12(マクロ専用)検索キーを履歴に登録しない + 13(マクロ専用)検索オプションを元に戻す
    補足
    diff --git a/help/macro/source/reference/find/S_SearchPrev.html b/help/macro/source/reference/find/S_SearchPrev.html index bb9fa68ce6..56abb26b37 100644 --- a/help/macro/source/reference/find/S_SearchPrev.html +++ b/help/macro/source/reference/find/S_SearchPrev.html @@ -31,6 +31,8 @@

    S_SearchPrev

    3見つからないときにメッセージを表示 4検索ダイアログを自動的に閉じる 5先頭(末尾)から再検索する + 12(マクロ専用)検索キーを履歴に登録しない + 13(マクロ専用)検索オプションを元に戻す
    補足
    From 61c5cf849f2cde638cbe4bd33f452fc798af5f94 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 11 Jul 2020 23:36:04 +0900 Subject: [PATCH 0026/1024] =?UTF-8?q?=E6=A4=9C=E7=B4=A2=E3=83=9C=E3=83=83?= =?UTF-8?q?=E3=82=AF=E3=82=B9=E3=81=AE=E8=A1=A8=E7=A4=BA=E4=BD=8D=E7=BD=AE?= =?UTF-8?q?=E3=82=92=E8=AA=BF=E6=95=B4=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/window/CMainToolBar.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sakura_core/window/CMainToolBar.cpp b/sakura_core/window/CMainToolBar.cpp index bde9c7bb55..eec79d5b93 100644 --- a/sakura_core/window/CMainToolBar.cpp +++ b/sakura_core/window/CMainToolBar.cpp @@ -335,11 +335,11 @@ void CMainToolBar::CreateToolBar( void ) CMyRect rcCombo; ::GetWindowRect( m_hwndSearchBox, &rcCombo ); ::SetWindowPos( m_hwndSearchBox, NULL, - rc.left, //作ったときと同じ値を指定 - (rc.bottom - rc.top - rcCombo.Height()) / 2, //上下中央に配置する - 0, //rcCombo.Width()のまま変えない - 0, //rcCombo.Height()のまま変えない - SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSENDCHANGING ); + rc.left + cxBorder, + rc.top + (rc.bottom - rc.top - rcCombo.Height()) / 2, + rcCombo.Width() - cxBorder * 2, + rcCombo.Height(), + SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSENDCHANGING ); } break; From e6265d1fb3ec15c50c693edb05282368ed148dd9 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 12 Jul 2020 01:23:27 +0900 Subject: [PATCH 0027/1024] =?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=81=AE=E4=BF=AE=E6=AD=A3=E6=BC=8F=E3=82=8C=E3=81=8C=E3=81=82?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E3=81=AE=E3=81=A7=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/window/CMainToolBar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/window/CMainToolBar.cpp b/sakura_core/window/CMainToolBar.cpp index eec79d5b93..8b6fbe202f 100644 --- a/sakura_core/window/CMainToolBar.cpp +++ b/sakura_core/window/CMainToolBar.cpp @@ -331,7 +331,7 @@ void CMainToolBar::CreateToolBar( void ) m_comboDel.pRecent = &m_cRecentSearch; CDialog::SetComboBoxDeleter(m_hwndSearchBox, &m_comboDel); - // コンボボックスの垂直位置を調整する + // コンボボックスの位置と幅を調整する CMyRect rcCombo; ::GetWindowRect( m_hwndSearchBox, &rcCombo ); ::SetWindowPos( m_hwndSearchBox, NULL, From efee259e6dc9979cd5d4e2da2884ae99098af850 Mon Sep 17 00:00:00 2001 From: Katsuhisa Yuasa Date: Sun, 12 Jul 2020 19:02:06 +0900 Subject: [PATCH 0028/1024] =?UTF-8?q?=E6=A8=99=E6=BA=96=E3=82=A6=E3=82=A3?= =?UTF-8?q?=E3=83=B3=E3=83=89=E3=82=A6=E3=82=BA=E3=82=B3=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=83=AD=E3=83=BC=E3=83=AB=E4=BD=9C=E6=88=90=E6=99=82=E3=81=AB?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E3=81=99=E3=82=8B=E3=82=A6=E3=82=A3=E3=83=B3?= =?UTF-8?q?=E3=83=89=E3=82=A6=E3=82=AF=E3=83=A9=E3=82=B9=E5=90=8D=E3=81=AE?= =?UTF-8?q?=E3=83=91=E3=83=A9=E3=83=A1=E3=83=BC=E3=82=BF=E3=81=AB=E6=96=87?= =?UTF-8?q?=E5=AD=97=E5=88=97=E3=83=AA=E3=83=86=E3=83=A9=E3=83=AB=E3=82=92?= =?UTF-8?q?=E3=81=9D=E3=81=AE=E5=A0=B4=E3=81=A7=E6=9B=B8=E3=81=8F=E3=81=AE?= =?UTF-8?q?=E3=81=A7=E3=81=AF=E3=81=AA=E3=81=8F=E3=80=81Windows=20SDK=20?= =?UTF-8?q?=E3=81=AE=E3=83=98=E3=83=83=E3=83=80=E3=83=95=E3=82=A1=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E3=81=AB=20#define=20=E3=81=95=E3=82=8C=E3=81=A6?= =?UTF-8?q?=E3=81=84=E3=82=8B=E3=83=97=E3=83=AA=E3=83=97=E3=83=AD=E3=82=BB?= =?UTF-8?q?=E3=83=83=E3=82=B5=E3=81=AE=E3=82=B7=E3=83=B3=E3=83=9C=E3=83=AB?= =?UTF-8?q?=E3=82=92=E4=BD=BF=E3=81=86=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89?= =?UTF-8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDialog.cpp | 2 +- sakura_core/func/CFuncKeyWnd.cpp | 6 +++--- sakura_core/print/CPrintPreview.cpp | 6 +++--- sakura_core/util/shell.cpp | 2 +- sakura_core/view/CEditView.cpp | 4 ++-- sakura_core/view/CEditView_Mouse.cpp | 2 +- sakura_core/view/CEditView_Scroll.cpp | 4 ++-- sakura_core/window/CMainToolBar.cpp | 2 +- sakura_core/window/CTabWnd.cpp | 2 +- 9 files changed, 15 insertions(+), 15 deletions(-) diff --git a/sakura_core/dlg/CDialog.cpp b/sakura_core/dlg/CDialog.cpp index 4872b3e9df..0d86e96cfa 100644 --- a/sakura_core/dlg/CDialog.cpp +++ b/sakura_core/dlg/CDialog.cpp @@ -372,7 +372,7 @@ void CDialog::CreateSizeBox( void ) /* サイズボックス */ m_hwndSizeBox = ::CreateWindowEx( WS_EX_CONTROLPARENT, /* no extended styles */ - L"SCROLLBAR", /* scroll bar control class */ + WC_SCROLLBAR, /* scroll bar control class */ NULL, /* text for window title bar */ WS_VISIBLE | WS_CHILD | SBS_SIZEBOX | SBS_SIZEGRIP, /* scroll bar styles */ 0, /* horizontal position */ diff --git a/sakura_core/func/CFuncKeyWnd.cpp b/sakura_core/func/CFuncKeyWnd.cpp index 61f6244468..f7c73cb592 100644 --- a/sakura_core/func/CFuncKeyWnd.cpp +++ b/sakura_core/func/CFuncKeyWnd.cpp @@ -145,7 +145,7 @@ HWND CFuncKeyWnd::Open( HINSTANCE hInstance, HWND hwndParent, CEditDoc* pCEditDo if( m_bSizeBox ){ m_hwndSizeBox = ::CreateWindowEx( 0L, /* no extended styles */ - L"SCROLLBAR", /* scroll bar control class */ + WC_SCROLLBAR, /* scroll bar control class */ NULL, /* text for window title bar */ WS_VISIBLE | WS_CHILD | SBS_SIZEBOX | SBS_SIZEGRIP, /* scroll bar styles */ 0, /* horizontal position */ @@ -406,7 +406,7 @@ void CFuncKeyWnd::CreateButtons( void ) for( i = 0; i < _countof( m_hwndButtonArr ); ++i ){ m_hwndButtonArr[i] = ::CreateWindow( - L"BUTTON", // predefined class + WC_BUTTON, // predefined class L"", // button text WS_VISIBLE | WS_CHILD | BS_LEFT, // styles // Size and position values are given explicitly, because @@ -443,7 +443,7 @@ void CFuncKeyWnd::SizeBox_ONOFF( bool bSizeBox ) }else{ m_hwndSizeBox = ::CreateWindowEx( 0L, /* no extended styles */ - L"SCROLLBAR", /* scroll bar control class */ + WC_SCROLLBAR, /* scroll bar control class */ NULL, /* text for window title bar */ WS_VISIBLE | WS_CHILD | SBS_SIZEBOX | SBS_SIZEGRIP, /* scroll bar styles */ 0, /* horizontal position */ diff --git a/sakura_core/print/CPrintPreview.cpp b/sakura_core/print/CPrintPreview.cpp index aea8f52845..826c322f50 100644 --- a/sakura_core/print/CPrintPreview.cpp +++ b/sakura_core/print/CPrintPreview.cpp @@ -1950,7 +1950,7 @@ void CPrintPreview::CreatePrintPreviewControls( void ) /* 縦スクロールバーの作成 */ m_hwndVScrollBar = ::CreateWindowEx( 0L, /* no extended styles */ - L"SCROLLBAR", /* scroll bar control class */ + WC_SCROLLBAR, /* scroll bar control class */ NULL, /* text for window title bar */ WS_VISIBLE | WS_CHILD | SBS_VERT, /* scroll bar styles */ 0, /* horizontal position */ @@ -1976,7 +1976,7 @@ void CPrintPreview::CreatePrintPreviewControls( void ) /* 横スクロールバーの作成 */ m_hwndHScrollBar = ::CreateWindowEx( 0L, /* no extended styles */ - L"SCROLLBAR", /* scroll bar control class */ + WC_SCROLLBAR, /* scroll bar control class */ NULL, /* text for window title bar */ WS_VISIBLE | WS_CHILD | SBS_HORZ, /* scroll bar styles */ 0, /* horizontal position */ @@ -2001,7 +2001,7 @@ void CPrintPreview::CreatePrintPreviewControls( void ) /* サイズボックスの作成 */ m_hwndSizeBox = ::CreateWindowEx( WS_EX_CONTROLPARENT/*0L*/, /* no extended styles */ - L"SCROLLBAR", /* scroll bar control class */ + WC_SCROLLBAR, /* scroll bar control class */ NULL, /* text for window title bar */ WS_VISIBLE | WS_CHILD | SBS_SIZEBOX | SBS_SIZEGRIP, /* scroll bar styles */ 0, /* horizontal position */ diff --git a/sakura_core/util/shell.cpp b/sakura_core/util/shell.cpp index cb75171643..9c093367c8 100644 --- a/sakura_core/util/shell.cpp +++ b/sakura_core/util/shell.cpp @@ -261,7 +261,7 @@ static int CALLBACK PropSheetProc( HWND hwndDlg, UINT uMsg, LPARAM lParam ) if( uMsg == PSCB_INITIALIZED ){ s_pOldPropSheetWndProc = (WNDPROC)::SetWindowLongPtr( hwndDlg, GWLP_WNDPROC, (LONG_PTR)PropSheetWndProc ); HINSTANCE hInstance = (HINSTANCE)::GetModuleHandle( NULL ); - HWND hwndBtn = ::CreateWindowEx( 0, L"BUTTON", LS(STR_SHELL_INIFOLDER), BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 0, 0, 140, 20, hwndDlg, (HMENU)0x02000, hInstance, NULL ); + HWND hwndBtn = ::CreateWindowEx( 0, WC_BUTTON, LS(STR_SHELL_INIFOLDER), BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 0, 0, 140, 20, hwndDlg, (HMENU)0x02000, hInstance, NULL ); ::SendMessage( hwndBtn, WM_SETFONT, (WPARAM)::SendMessage( hwndDlg, WM_GETFONT, 0, 0 ), MAKELPARAM( FALSE, 0 ) ); ::SetWindowPos( hwndBtn, ::GetDlgItem( hwndDlg, IDHELP), 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE ); } diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index fcb6abec94..c998205f04 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -451,7 +451,7 @@ LRESULT CEditView::DispatchEvent( ::SetWindowLongPtr( hwnd, 0, (LONG_PTR) this ); m_hwndSizeBox = ::CreateWindowEx( 0L, /* no extended styles */ - L"SCROLLBAR", /* scroll bar control class */ + WC_SCROLLBAR, /* scroll bar control class */ NULL, /* text for window title bar */ WS_CHILD | SBS_SIZEBOX | SBS_SIZEGRIP, /* scroll bar styles */ 0, /* horizontal position */ @@ -468,7 +468,7 @@ LRESULT CEditView::DispatchEvent( } m_hwndSizeBoxPlaceholder = ::CreateWindowEx( 0L, /* no extended styles */ - L"STATIC", /* scroll bar control class */ + WC_STATIC, /* scroll bar control class */ NULL, /* text for window title bar */ WS_CHILD, /* innocent child */ 0, /* horizontal position */ diff --git a/sakura_core/view/CEditView_Mouse.cpp b/sakura_core/view/CEditView_Mouse.cpp index 8a4a786dc8..a7f1ae3f51 100644 --- a/sakura_core/view/CEditView_Mouse.cpp +++ b/sakura_core/view/CEditView_Mouse.cpp @@ -2087,7 +2087,7 @@ void CEditView::OnMyDropFiles( HDROP hDrop ) if( nTid1 != nTid2 ) ::AttachThreadInput( nTid1, nTid2, TRUE ); // ダミーの STATIC を作ってフォーカスを当てる(エディタが前面に出ないように) - HWND hwnd = ::CreateWindow(L"STATIC", L"", 0, 0, 0, 0, 0, NULL, NULL, G_AppInstance(), NULL ); + HWND hwnd = ::CreateWindow(WC_STATIC, L"", 0, 0, 0, 0, 0, NULL, NULL, G_AppInstance(), NULL ); ::SetFocus(hwnd); // メニューを作成する diff --git a/sakura_core/view/CEditView_Scroll.cpp b/sakura_core/view/CEditView_Scroll.cpp index 3b5cc86932..1123cb3212 100644 --- a/sakura_core/view/CEditView_Scroll.cpp +++ b/sakura_core/view/CEditView_Scroll.cpp @@ -40,7 +40,7 @@ BOOL CEditView::CreateScrollBar() /* スクロールバーの作成 */ m_hwndVScrollBar = ::CreateWindowEx( 0L, /* no extended styles */ - L"SCROLLBAR", /* scroll bar control class */ + WC_SCROLLBAR, /* scroll bar control class */ NULL, /* text for window title bar */ WS_VISIBLE | WS_CHILD | SBS_VERT, /* scroll bar styles */ 0, /* horizontal position */ @@ -67,7 +67,7 @@ BOOL CEditView::CreateScrollBar() if( GetDllShareData().m_Common.m_sWindow.m_bScrollBarHorz && !m_bMiniMap ){ /* 水平スクロールバーを使う */ m_hwndHScrollBar = ::CreateWindowEx( 0L, /* no extended styles */ - L"SCROLLBAR", /* scroll bar control class */ + WC_SCROLLBAR, /* scroll bar control class */ NULL, /* text for window title bar */ WS_VISIBLE | WS_CHILD | SBS_HORZ, /* scroll bar styles */ 0, /* horizontal position */ diff --git a/sakura_core/window/CMainToolBar.cpp b/sakura_core/window/CMainToolBar.cpp index bde9c7bb55..8590a954ad 100644 --- a/sakura_core/window/CMainToolBar.cpp +++ b/sakura_core/window/CMainToolBar.cpp @@ -290,7 +290,7 @@ void CMainToolBar::CreateToolBar( void ) Toolbar_GetItemRect( m_hwndToolBar, count-1, &rc ); //コンボボックスを作る - m_hwndSearchBox = CreateWindow( L"COMBOBOX", L"Combo", + m_hwndSearchBox = CreateWindow( WC_COMBOBOX, L"Combo", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWN /*| CBS_SORT*/ | CBS_AUTOHSCROLL /*| CBS_DISABLENOSCROLL*/, rc.left, rc.top, rc.right - rc.left, (rc.bottom - rc.top) * 10, diff --git a/sakura_core/window/CTabWnd.cpp b/sakura_core/window/CTabWnd.cpp index cdc62a9f7b..f93f7d9dbe 100644 --- a/sakura_core/window/CTabWnd.cpp +++ b/sakura_core/window/CTabWnd.cpp @@ -3266,7 +3266,7 @@ void CTabWnd::SizeBox_ONOFF( bool bSizeBox ) }else{ m_hwndSizeBox = ::CreateWindowEx( 0L, /* no extended styles */ - L"SCROLLBAR", /* scroll bar control class */ + WC_SCROLLBAR, /* scroll bar control class */ NULL, /* text for window title bar */ WS_VISIBLE | WS_CHILD | SBS_SIZEBOX | SBS_SIZEGRIP, /* scroll bar styles */ 0, /* horizontal position */ From 90bfe567be0a5608211d8cf082b9cc27e87c4e76 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 19 Jul 2020 16:35:12 +0900 Subject: [PATCH 0029/1024] =?UTF-8?q?tools/find-tools.bat=E3=81=ABpython?= =?UTF-8?q?=E6=A4=9C=E5=87=BA=E6=A9=9F=E8=83=BD=E3=82=92=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build-chm.bat | 8 +++++++- calc-hash-res.bat | 6 +++--- calc-hash.bat | 6 +++--- parse-buildlog.bat | 8 ++++---- tools/find-tools.bat | 38 ++++++++++++++++++++++++++++++++++++++ tools/find-tools.md | 12 ++++++++++++ 6 files changed, 67 insertions(+), 11 deletions(-) diff --git a/build-chm.bat b/build-chm.bat index 5ce2daba7c..295470d189 100644 --- a/build-chm.bat +++ b/build-chm.bat @@ -4,6 +4,12 @@ if not defined CMD_HHC ( exit /b 1 ) +if not defined CMD_PYTHON call %~dp0tools\find-tools.bat +if not defined CMD_PYTHON ( + @echo py.exe was not found. + exit /b 1 +) + set SRC_HELP=%~dp0help set TMP_HELP=%~dp0temphelp @@ -13,7 +19,7 @@ set HH_INPUT=sakura_core\sakura.hh set HH_OUTPUT=help\sakura\sakura.hh if exist "%HH_OUTPUT%" del /F "%HH_OUTPUT%" -python "%HH_SCRIPT%" "%HH_INPUT%" "%HH_OUTPUT%" || (echo error && exit /b 1) +%CMD_PYTHON% "%HH_SCRIPT%" "%HH_INPUT%" "%HH_OUTPUT%" || (echo error && exit /b 1) if exist "%TMP_HELP%" rmdir /s /q "%TMP_HELP%" xcopy /i /k /s "%SRC_HELP%" "%TMP_HELP%" diff --git a/calc-hash-res.bat b/calc-hash-res.bat index ffbea5d415..1a3a28d83b 100644 --- a/calc-hash-res.bat +++ b/calc-hash-res.bat @@ -17,11 +17,11 @@ if not exist "%SRCDIR%" ( exit /b 1 ) -where python --version 1>nul 2>&1 -if errorlevel 1 ( +if not defined CMD_PYTHON call %~dp0tools\find-tools.bat +if not defined CMD_PYTHON ( @echo NOTE: No python command ) else ( - python calc-hash.py %OUTHASHFILE% %SRCDIR% .res + %CMD_PYTHON% calc-hash.py %OUTHASHFILE% %SRCDIR% .res ) exit /b 0 diff --git a/calc-hash.bat b/calc-hash.bat index 31c43e9833..663b2ce9b7 100644 --- a/calc-hash.bat +++ b/calc-hash.bat @@ -17,11 +17,11 @@ if not exist "%SRCDIR%" ( exit /b 1 ) -where python --version 1>nul 2>&1 -if errorlevel 1 ( +if not defined CMD_PYTHON call %~dp0tools\find-tools.bat +if not defined CMD_PYTHON ( @echo NOTE: No python command ) else ( - python calc-hash.py %OUTHASHFILE% %SRCDIR% + %CMD_PYTHON% calc-hash.py %OUTHASHFILE% %SRCDIR% ) exit /b 0 diff --git a/parse-buildlog.bat b/parse-buildlog.bat index 2e7ee7cdc4..bc37423d0c 100644 --- a/parse-buildlog.bat +++ b/parse-buildlog.bat @@ -15,12 +15,12 @@ if not exist "%LOGFILE%" ( ) set ERROR_RESULT=0 -where python --version 1>nul 2>&1 -if errorlevel 1 ( +if not defined CMD_PYTHON call %~dp0tools\find-tools.bat +if not defined CMD_PYTHON ( @echo NOTE: No python command ) else ( - python appveyor_env.py - python parse-buildlog.py %LOGFILE% || set ERROR_RESULT=1 + %CMD_PYTHON% appveyor_env.py + %CMD_PYTHON% parse-buildlog.py %LOGFILE% || set ERROR_RESULT=1 ) exit /b %ERROR_RESULT% diff --git a/tools/find-tools.bat b/tools/find-tools.bat index 73a49dd816..fd3b0657cb 100644 --- a/tools/find-tools.bat +++ b/tools/find-tools.bat @@ -14,6 +14,7 @@ if "%1" equ "clear" ( set CMD_CMAKE= set CMD_NINJA= set CMD_LEPROC= + set CMD_PYTHON= set NUM_VSVERSION= set CMAKE_G_PARAM= set FIND_TOOLS_CALLED= @@ -39,6 +40,7 @@ if not defined CMD_MSBUILD call :msbuild 2> nul if not defined CMD_CMAKE call :cmake 2> nul if not defined CMD_NINJA call :cmake 2> nul if not defined CMD_LEPROC call :leproc 2> nul +if not defined CMD_PYTHON call :python 2> nul echo ^|- CMD_GIT=%CMD_GIT% echo ^|- CMD_7Z=%CMD_7Z% echo ^|- CMD_HHC=%CMD_HHC% @@ -50,6 +52,7 @@ echo ^|- CMD_MSBUILD=%CMD_MSBUILD% echo ^|- CMD_CMAKE=%CMD_CMAKE% echo ^|- CMD_NINJA=%CMD_NINJA% echo ^|- CMD_LEPROC=%CMD_LEPROC% +echo ^|- CMD_PYTHON=%CMD_PYTHON% echo ^|- CMAKE_G_PARAM=%CMAKE_G_PARAM% endlocal ^ && set "CMD_GIT=%CMD_GIT%" ^ @@ -63,6 +66,7 @@ endlocal ^ && set "CMD_CMAKE=%CMD_CMAKE%" ^ && set "CMD_NINJA=%CMD_NINJA%" ^ && set "CMD_LEPROC=%CMD_LEPROC%" ^ + && set "CMD_PYTHON=%CMD_PYTHON%" ^ && set "NUM_VSVERSION=%NUM_VSVERSION%" ^ && set "CMAKE_G_PARAM=%CMAKE_G_PARAM%" ^ && echo end @@ -270,3 +274,37 @@ for /f "usebackq delims=" %%a in (`where $PATH2:LEProc.exe`) do ( exit /b ) exit /b + +:python +call :find_py +call :check_python_version +if defined CMD_PYTHON ( + exit /b 0 +) + +set PATH2=%PATH% +for /f "usebackq delims=" %%a in (`where $PATH2:python.exe`) do ( + set "CMD_PYTHON=%%a" + call :check_python_version + exit /b 0 +) +call :check_python_version +exit /b 0 + +:find_py +set PATH2=%PATH% +for /f "usebackq delims=" %%a in (`where $PATH2:py.exe`) do ( + set "CMD_PYTHON=%%a" + exit /b 0 +) +exit /b 0 + +:check_python_version +set PYTHON_VERSION= +for /F "usebackq tokens=2*" %%v in (`"%CMD_PYTHON%" --version`) do ( + set PYTHON_VERSION=%%v +) +if not defined PYTHON_VERSION ( + set CMD_PYTHON= +) +exit /b 0 diff --git a/tools/find-tools.md b/tools/find-tools.md index f03b1baa9f..c1f9a222e9 100644 --- a/tools/find-tools.md +++ b/tools/find-tools.md @@ -22,6 +22,7 @@ | vswhere | CMD_VSWHERE | Microsoft Visual Studio\Installer | vswhere.exe | | MSBuild | CMD_MSBUILD | 特殊 | MSBuild.exe | | Locale Emulator | CMD_LEPROC | なし | LEProc.exe | +| python | CMD_PYTHON | なし | py.exe(python.exe) | ## MSBuild以外の探索手順 MSBuild以外の探索手順は同一であり、7-Zipを例に説明する。 @@ -76,6 +77,17 @@ MSBuild以外の探索手順は同一であり、7-Zipを例に説明する。 * https://github.com/Microsoft/vswhere * https://github.com/Microsoft/vswhere/wiki/Find-MSBuild +## python + +ビルドバッチで利用するpythonインタープリターの存在確認をします。 +適切なpythonインタープリターが見つかると、環境変数 `CMD_PYTHON` が定義されます。 +適切なpythonインタープリターが見つからない場合、`CMD_PYTHON` は定義されません。 +pythonインタープリターはビルド要件ではないのでpythonを利用するバッチには `CMD_PYTHON` チェックを挟む必要があります。 + +1. python Launcher(py.exe)が存在していたら、それを使う。 +1. パスが通っているpython.exeで`python.exe --version`してバージョンが取れたら、それを使う。 + + ## zipの処理に7zではなくPowerShellを強制する 事前に環境変数の`FORCE_POWERSHELL_ZIP`を1にセットすることで、7zの検索をスキップできます。 [PowerShellによるzipの処理](zip/readme.md)が正しく行われるかを7zがインストール済みの環境で検証する際に活用できます。[build.md](../build.md#powershell-によるzipファイルの圧縮解凍内容確認の強制)も参照してください。 From dd829c98908c361f74dbbd5d26f9d0d881ed4530 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 19 Jul 2020 20:08:50 +0900 Subject: [PATCH 0030/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build-chm.bat | 2 +- tools/find-tools.bat | 13 ++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/build-chm.bat b/build-chm.bat index 295470d189..a4e770efcc 100644 --- a/build-chm.bat +++ b/build-chm.bat @@ -6,7 +6,7 @@ if not defined CMD_HHC ( if not defined CMD_PYTHON call %~dp0tools\find-tools.bat if not defined CMD_PYTHON ( - @echo py.exe was not found. + @echo python was not found. exit /b 1 ) diff --git a/tools/find-tools.bat b/tools/find-tools.bat index fd3b0657cb..f490f10e5b 100644 --- a/tools/find-tools.bat +++ b/tools/find-tools.bat @@ -282,18 +282,21 @@ if defined CMD_PYTHON ( exit /b 0 ) +call :find_python +call :check_python_version +exit /b 0 + +:find_py set PATH2=%PATH% -for /f "usebackq delims=" %%a in (`where $PATH2:python.exe`) do ( +for /f "usebackq delims=" %%a in (`where $PATH2:py.exe`) do ( set "CMD_PYTHON=%%a" - call :check_python_version exit /b 0 ) -call :check_python_version exit /b 0 -:find_py +:find_python set PATH2=%PATH% -for /f "usebackq delims=" %%a in (`where $PATH2:py.exe`) do ( +for /f "usebackq delims=" %%a in (`where $PATH2:python.exe`) do ( set "CMD_PYTHON=%%a" exit /b 0 ) From 3527e477ea024681c063fdc921fc182dd6fe4526 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 19 Jul 2020 20:20:23 +0900 Subject: [PATCH 0031/1024] Update tools/find-tools.md Co-authored-by: K.Takata --- tools/find-tools.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/find-tools.md b/tools/find-tools.md index c1f9a222e9..bc8990779e 100644 --- a/tools/find-tools.md +++ b/tools/find-tools.md @@ -84,7 +84,7 @@ MSBuild以外の探索手順は同一であり、7-Zipを例に説明する。 適切なpythonインタープリターが見つからない場合、`CMD_PYTHON` は定義されません。 pythonインタープリターはビルド要件ではないのでpythonを利用するバッチには `CMD_PYTHON` チェックを挟む必要があります。 -1. python Launcher(py.exe)が存在していたら、それを使う。 +1. python Launcher(py.exe)が存在し、`py.exe --version`でバージョンが取れたら、それを使う。 1. パスが通っているpython.exeで`python.exe --version`してバージョンが取れたら、それを使う。 From 303a83193aed4ccf2cb944366d19240c601587be Mon Sep 17 00:00:00 2001 From: berryplus Date: Sun, 22 Mar 2020 17:38:16 +0900 Subject: [PATCH 0032/1024] =?UTF-8?q?USE=5FSTRICT=5FINT=E3=81=AE=E5=AE=9A?= =?UTF-8?q?=E7=BE=A9=E3=82=921=E7=AE=87=E6=89=80=E3=81=AB=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/basis/CStrictInteger.cpp | 8 +++----- sakura_core/basis/SakuraBasis.h | 3 ++- sakura_core/basis/primitive.h | 2 ++ tests/unittests/test-clayoutint.cpp | 16 ++++++---------- 4 files changed, 13 insertions(+), 16 deletions(-) diff --git a/sakura_core/basis/CStrictInteger.cpp b/sakura_core/basis/CStrictInteger.cpp index 5185d16a75..8e8d2fd009 100644 --- a/sakura_core/basis/CStrictInteger.cpp +++ b/sakura_core/basis/CStrictInteger.cpp @@ -1,6 +1,8 @@ /*! @file */ /* Copyright (C) 2007, kobake + Copyright (C) 2007-2017 SAKURA Editor Project + Copyright (C) 2018-2020 SAKURA Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -24,8 +26,4 @@ */ #include "StdAfx.h" -#ifdef _MSC_VER -#ifdef _DEBUG -#define USE_STRICT_INT //←これをコメントアウトすると厳格なintが無効になります。リリースビルドでは常に無効。 -#endif -#endif +#include "basis/CStrictInteger.h" diff --git a/sakura_core/basis/SakuraBasis.h b/sakura_core/basis/SakuraBasis.h index 73ac36c753..b4d17ec02d 100644 --- a/sakura_core/basis/SakuraBasis.h +++ b/sakura_core/basis/SakuraBasis.h @@ -26,6 +26,8 @@ #include //POINT,LONG +#include "basis/primitive.h" // for Int + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 1次元型の定義 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // @@ -57,7 +59,6 @@ #else // -- -- 通常のintで単位型を定義 - #include "primitive.h" // for Int //ロジック単位 typedef int CLogicInt; diff --git a/sakura_core/basis/primitive.h b/sakura_core/basis/primitive.h index eebfabb397..a6d2b8f55e 100644 --- a/sakura_core/basis/primitive.h +++ b/sakura_core/basis/primitive.h @@ -24,6 +24,8 @@ */ #pragma once +#include "config/build_config.h" + // -- -- -- -- 文字 -- -- -- -- // //char,wchar_t の変わりに、別名の ACHAR,WCHAR を使うと、ソース整形がしやすいケースがある。 diff --git a/tests/unittests/test-clayoutint.cpp b/tests/unittests/test-clayoutint.cpp index b4c3b9453f..7f007331e1 100644 --- a/tests/unittests/test-clayoutint.cpp +++ b/tests/unittests/test-clayoutint.cpp @@ -31,10 +31,6 @@ #include #include -#ifndef USE_STRICT_INT -#define USE_STRICT_INT -#endif /* #ifndef USE_STRICT_INT */ - #include "basis/SakuraBasis.h" /*! @@ -193,7 +189,7 @@ TEST( CLayoutInt, OperatorAssignment ) */ TEST( CLayoutInt, OperatorCompareGreaterThan ) { - CLayoutInt a; + CLayoutInt a( 0 ); EXPECT_TRUE( a > -1 ); EXPECT_FALSE( a > 0 ); @@ -209,7 +205,7 @@ TEST( CLayoutInt, OperatorCompareGreaterThan ) */ TEST( CLayoutInt, OperatorCompareGreaterOrEqual ) { - CLayoutInt a; + CLayoutInt a( 0 ); EXPECT_TRUE( a >= 0 ); EXPECT_FALSE( a >= 1 ); @@ -225,7 +221,7 @@ TEST( CLayoutInt, OperatorCompareGreaterOrEqual ) */ TEST( CLayoutInt, OperatorCompareLessThan ) { - CLayoutInt a; + CLayoutInt a( 0 ); EXPECT_TRUE( a < 1 ); EXPECT_FALSE( a < 0 ); @@ -241,7 +237,7 @@ TEST( CLayoutInt, OperatorCompareLessThan ) */ TEST( CLayoutInt, OperatorCompareLessOrEqual ) { - CLayoutInt a; + CLayoutInt a( 0 ); EXPECT_FALSE( a <= -1 ); EXPECT_TRUE( a <= 0 ); @@ -258,9 +254,9 @@ TEST( CLayoutInt, OperatorCompareLessOrEqual ) TEST( CLayoutInt, OperatorCastToCLaxInteger ) { CLayoutInt a( 1 ); - CLaxInteger la( 0 ); + Int la( 0 ); - //CLayoutInt ⇒ CLaxIntegerはキャストなしで変換できる + //CLayoutInt ⇒ Intはキャストなしで変換できる la = a; EXPECT_TRUE( la == 1 ); From dbbb016b83ba5f603f8faccd435ee745fa250061 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 19 Jul 2020 22:02:19 +0900 Subject: [PATCH 0033/1024] =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=B3?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=81=AE=E3=83=93=E3=83=AB=E3=83=89=E3=82=A8?= =?UTF-8?q?=E3=83=A9=E3=83=BC=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CLayoutIntがデバッグビルドで常に有効になった影響。 Int型へのキャストを追加して対応する。 --- tests/unittests/test-ccommandline.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/unittests/test-ccommandline.cpp b/tests/unittests/test-ccommandline.cpp index ce785ea994..a61b304735 100644 --- a/tests/unittests/test-ccommandline.cpp +++ b/tests/unittests/test-ccommandline.cpp @@ -295,9 +295,9 @@ TEST(CCommandLine, ParseViewLeftCol) { CCommandLineWrapper cCommandLine; cCommandLine.ParseCommandLine(L"", false); - ASSERT_EQ(-1, cCommandLine.GetViewLocation().x); + ASSERT_EQ(-1, (Int)cCommandLine.GetViewLocation().x); cCommandLine.ParseCommandLine(L"-VX=123", false); - ASSERT_EQ(122, cCommandLine.GetViewLocation().x); + ASSERT_EQ(122, (Int)cCommandLine.GetViewLocation().x); } /*! @@ -309,9 +309,9 @@ TEST(CCommandLine, ParseViewTopLine) { CCommandLineWrapper cCommandLine; cCommandLine.ParseCommandLine(L"", false); - ASSERT_EQ(-1, cCommandLine.GetViewLocation().y); + ASSERT_EQ(-1, (Int)cCommandLine.GetViewLocation().y); cCommandLine.ParseCommandLine(L"-VY=123", false); - ASSERT_EQ(122, cCommandLine.GetViewLocation().y); + ASSERT_EQ(122, (Int)cCommandLine.GetViewLocation().y); } /*! From f10f5e291eba196c314e32a3efc5fbdd074224db Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 20 Jul 2020 00:24:39 +0900 Subject: [PATCH 0034/1024] =?UTF-8?q?=E8=8B=B1=E8=AA=9EOS=E3=81=A7?= =?UTF-8?q?=E3=81=AE=E5=88=9D=E5=9B=9E=E8=B5=B7=E5=8B=95=E6=99=82=E3=81=AB?= =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E5=80=A4=E3=82=92=E5=A4=89=E6=8F=9B=E3=81=99?= =?UTF-8?q?=E3=82=8B=E5=87=A6=E7=90=86=E3=82=92=E6=8C=BF=E5=85=A5=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/env/CShareData_IO.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/sakura_core/env/CShareData_IO.cpp b/sakura_core/env/CShareData_IO.cpp index 081e238110..38e4686578 100644 --- a/sakura_core/env/CShareData_IO.cpp +++ b/sakura_core/env/CShareData_IO.cpp @@ -101,7 +101,15 @@ bool CShareData_IO::ShareData_IO_2( bool bRead ) DLLSHAREDATA* pShareData = &GetDllShareData(); wcscpy(pShareData->m_Common.m_sWindow.m_szLanguageDll, L"sakura_lang_en_US.dll"); cProfile.IOProfileData( L"Common", L"szLanguageDll", MakeStringBufferW( pShareData->m_Common.m_sWindow.m_szLanguageDll ) ); + constexpr bool bChangeLang = true; + std::vector values; + if( bChangeLang ){ + pcShare->ConvertLangValues( values, true ); + } CSelectLang::ChangeLang( pShareData->m_Common.m_sWindow.m_szLanguageDll ); + if( bChangeLang ){ + pcShare->ConvertLangValues( values, false ); + } pcShare->RefreshString(); } return false; From ceb478f3f719d02659c2bce16f5f3f9f1e9f9390 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 25 Jul 2020 19:06:30 +0900 Subject: [PATCH 0035/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/env/CShareData_IO.cpp | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/sakura_core/env/CShareData_IO.cpp b/sakura_core/env/CShareData_IO.cpp index 38e4686578..0de2d3c336 100644 --- a/sakura_core/env/CShareData_IO.cpp +++ b/sakura_core/env/CShareData_IO.cpp @@ -101,15 +101,10 @@ bool CShareData_IO::ShareData_IO_2( bool bRead ) DLLSHAREDATA* pShareData = &GetDllShareData(); wcscpy(pShareData->m_Common.m_sWindow.m_szLanguageDll, L"sakura_lang_en_US.dll"); cProfile.IOProfileData( L"Common", L"szLanguageDll", MakeStringBufferW( pShareData->m_Common.m_sWindow.m_szLanguageDll ) ); - constexpr bool bChangeLang = true; std::vector values; - if( bChangeLang ){ - pcShare->ConvertLangValues( values, true ); - } + pcShare->ConvertLangValues( values, true ); CSelectLang::ChangeLang( pShareData->m_Common.m_sWindow.m_szLanguageDll ); - if( bChangeLang ){ - pcShare->ConvertLangValues( values, false ); - } + pcShare->ConvertLangValues( values, false ); pcShare->RefreshString(); } return false; From 934b2d48429ef91bd70c6655fda2c66cce906bcc Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 26 Jul 2020 16:37:30 +0900 Subject: [PATCH 0036/1024] =?UTF-8?q?azure=20pipeline=E3=81=AEmsys2?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=82=B9=E3=83=88=E3=83=BC=E3=83=AB=E3=82=92?= =?UTF-8?q?=E3=82=84=E3=82=81=E3=82=8B=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit msys2とmingw-w64が標準でプリインストールされるようになったため廃止する。 --- .../template.steps.install-mingw-w64-gcc.yml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/ci/azure-pipelines/template.steps.install-mingw-w64-gcc.yml b/ci/azure-pipelines/template.steps.install-mingw-w64-gcc.yml index 93e7764a0a..07f0075568 100644 --- a/ci/azure-pipelines/template.steps.install-mingw-w64-gcc.yml +++ b/ci/azure-pipelines/template.steps.install-mingw-w64-gcc.yml @@ -5,14 +5,5 @@ # なし ############################################################################################################# steps: - - script: cinst msys2 --params "/InstallDir=C:/msys64" --no-progress - displayName: install msys2 - - - script: C:\msys64\usr\bin\bash --login -c "pacman -S --noconfirm mingw-w64-x86_64-gcc mingw-w64-x86_64-gcc-libs" - displayName: install MinGW-w64-gcc - - - script: C:\msys64\usr\bin\bash --login -c "pacman -S --noconfirm mingw-w64-x86_64-make" - displayName: install MinGW-w64-make - - script: C:\msys64\usr\bin\bash --login -c "pacman -S --noconfirm mingw-w64-x86_64-gtest" displayName: install MinGW-w64-gtest From dd420cbfad089b2012eb8b45e4590cfa142bcda7 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Thu, 30 Jul 2020 22:54:57 +0900 Subject: [PATCH 0037/1024] =?UTF-8?q?=E4=B8=8D=E8=A6=81=E3=81=AAinline?= =?UTF-8?q?=E3=82=92=E5=A4=96=E3=81=99=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgOpenFile.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sakura_core/dlg/CDlgOpenFile.h b/sakura_core/dlg/CDlgOpenFile.h index eeb6890e1d..549cd04f7a 100644 --- a/sakura_core/dlg/CDlgOpenFile.h +++ b/sakura_core/dlg/CDlgOpenFile.h @@ -99,12 +99,12 @@ class CDlgOpenFile final : public IDlgOpenFile ) override; //操作 - inline bool DoModal_GetOpenFileName(WCHAR* pszPath, EFilter eAddFileter = EFITER_TEXT) override; - inline bool DoModal_GetSaveFileName(WCHAR* pszPath) override; - inline bool DoModalOpenDlg(SLoadInfo* pLoadInfo, + bool DoModal_GetOpenFileName(WCHAR* pszPath, EFilter eAddFileter = EFITER_TEXT) override; + bool DoModal_GetSaveFileName(WCHAR* pszPath) override; + bool DoModalOpenDlg(SLoadInfo* pLoadInfo, std::vector* pFilenames, bool bOptions = true) override; - inline bool DoModalSaveDlg(SSaveInfo* pSaveInfo, bool bSimpleMode) override; + bool DoModalSaveDlg(SSaveInfo* pSaveInfo, bool bSimpleMode) override; // 設定フォルダ相対ファイル選択(共有データ,ini位置依存) static BOOL SelectFile(HWND parent, HWND hwndCtl, const WCHAR* filter, From 4461b59365163ebfb9d3a588f5de6712312b8156 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 31 Jul 2020 00:11:18 +0900 Subject: [PATCH 0038/1024] =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=B1?= =?UTF-8?q?=E3=83=BC=E3=82=B9=E4=B8=80=E8=A6=A7=E3=81=AE=E5=87=BA=E5=8A=9B?= =?UTF-8?q?=E3=81=8C=E9=87=8D=E8=A4=87=E3=81=97=E3=81=A6=E3=81=84=E3=82=8B?= =?UTF-8?q?=E3=81=AE=E3=81=A7=E5=89=8A=E3=82=8B=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/run-tests.bat | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/run-tests.bat b/tests/run-tests.bat index d31614f3d9..8ef953a00d 100644 --- a/tests/run-tests.bat +++ b/tests/run-tests.bat @@ -15,9 +15,6 @@ pushd %BINARY_DIR% for /r %%i in (tests*.exe) do ( set TEST_LAUNCHED=1 - @echo %%i --gtest_list_tests - %%i --gtest_list_tests || set ERROR_RESULT=1 - call :RunTest %%i %%i-googletest-%platform%-%configuration%.xml || set ERROR_RESULT=1 ) popd From c999d0bb4de0e9424a432461eabebd62ba6dad56 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 31 Jul 2020 23:35:54 +0900 Subject: [PATCH 0039/1024] =?UTF-8?q?=E7=A9=BA=E8=A1=8C=E6=8F=8F=E7=94=BB?= =?UTF-8?q?=E3=81=AE=E3=82=AA=E3=83=97=E3=82=B7=E3=83=A7=E3=83=B3=E3=81=8C?= =?UTF-8?q?=E8=AA=A4=E3=81=A3=E3=81=A6=E3=81=84=E3=82=8B=E3=81=AE=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/window/CTipWnd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/window/CTipWnd.cpp b/sakura_core/window/CTipWnd.cpp index 91b5e30159..f173396ba3 100644 --- a/sakura_core/window/CTipWnd.cpp +++ b/sakura_core/window/CTipWnd.cpp @@ -257,7 +257,7 @@ void CTipWnd::DrawTipText( ); }else{ // ダミー文字列の高さを取得する - nHeight = ::DrawText( hdc, szDummy, _countof(szDummy) - 1, &rc, DT_CALCRECT ); + nHeight = ::DrawText( hdc, szDummy, _countof(szDummy) - 1, &rc, DT_EXTERNALLEADING ); } // 描画領域の上端を1行分ずらす From 4981d6fdbb16c51a8383fe76087c2a2021f1fe1f Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 2 Aug 2020 14:12:10 +0900 Subject: [PATCH 0040/1024] =?UTF-8?q?=E7=A9=BA=E8=A1=8C=E3=81=AE=E9=AB=98?= =?UTF-8?q?=E3=81=95=E3=82=92=E8=A8=88=E6=B8=AC=E3=81=99=E3=82=8BDrawText?= =?UTF-8?q?=E3=81=AE=E3=82=AA=E3=83=97=E3=82=B7=E3=83=A7=E3=83=B3=E3=81=8C?= =?UTF-8?q?=E8=B6=B3=E3=82=8A=E3=81=AA=E3=81=84=E3=81=AE=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit レビュー指摘対応。 --- sakura_core/window/CTipWnd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/window/CTipWnd.cpp b/sakura_core/window/CTipWnd.cpp index f173396ba3..4281ead03a 100644 --- a/sakura_core/window/CTipWnd.cpp +++ b/sakura_core/window/CTipWnd.cpp @@ -185,7 +185,7 @@ void CTipWnd::ComputeWindowSize( } }else{ // ダミー文字列を計測して必要な高さを取得する - ::DrawText( hdc, szDummy, _countof( szDummy ) - 1, &rc, DT_CALCRECT ); + ::DrawText( hdc, szDummy, _countof( szDummy ) - 1, &rc, DT_CALCRECT | DT_EXTERNALLEADING ); } // 計測した高さを加算する From c36c7c153f55bc0eb29fea85c8b324eb86bb38b5 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 9 Aug 2020 17:50:43 +0900 Subject: [PATCH 0041/1024] =?UTF-8?q?=E3=82=B3=E3=83=B3=E3=82=BD=E3=83=BC?= =?UTF-8?q?=E3=83=AB=E3=83=A2=E3=83=BC=E3=83=89=E3=81=A7=E3=81=AF=E3=83=A1?= =?UTF-8?q?=E3=83=83=E3=82=BB=E3=83=BC=E3=82=B8=E3=83=9C=E3=83=83=E3=82=AF?= =?UTF-8?q?=E3=82=B9=E3=82=92=E8=A1=A8=E7=A4=BA=E3=81=97=E3=81=AA=E3=81=84?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/debug/Debug1.h | 11 +++++++++++ sakura_core/debug/Debug2.cpp | 33 ++------------------------------ sakura_core/debug/Debug2.h | 19 ++++++++++-------- sakura_core/util/MessageBoxF.cpp | 14 ++++++++++++++ 4 files changed, 38 insertions(+), 39 deletions(-) diff --git a/sakura_core/debug/Debug1.h b/sakura_core/debug/Debug1.h index dbaeea3a68..57f733bea4 100644 --- a/sakura_core/debug/Debug1.h +++ b/sakura_core/debug/Debug1.h @@ -14,6 +14,10 @@ #pragma once +#include + +#include + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // メッセージ出力:実装 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // @@ -47,3 +51,10 @@ void DebugOutW( LPCWSTR lpFmt, ...); #else #define RELPRINT Do_not_define_USE_RELPRINT #endif // USE_RELPRINT + +//トレース出力(トレース箇所のファイルパスと行番号を出力してエラー解析を容易にする目的) +#ifdef _DEBUG + #define TRACE( format, ... ) DEBUG_TRACE( _T("%hs(%d): ") _T(format) _T("\n"), __FILE__, __LINE__, __VA_ARGS__ ) +#else + #define TRACE( ... ) +#endif diff --git a/sakura_core/debug/Debug2.cpp b/sakura_core/debug/Debug2.cpp index e6ef8a95f3..6eb7d8f879 100644 --- a/sakura_core/debug/Debug2.cpp +++ b/sakura_core/debug/Debug2.cpp @@ -2,41 +2,12 @@ #include "StdAfx.h" #include "debug/Debug2.h" -//2007.08.30 kobake 追加 - -#ifdef _DEBUG -//!デバッグメッセージ出力 -void debug_output(const char* str, ...) -{ - char buf[_MAX_PATH+150]; - va_list mark; - va_start(mark,str); - // FILE名, LINE 式 分必要 - tchar_vsnprintf_s(buf,_countof(buf),str,mark); - va_end(mark); - - //デバッガに出力 - OutputDebugStringA(buf); -} - -//!強制終了 void debug_exit() { - MessageBox(NULL,L"assertとかに引っ掛かったぽいです",GSTR_APPNAME,MB_OK); - exit(1); -} - -void debug_exit2(const char* file, int line, const char* exp) -{ - char szBuffer[1024]; - wsprintfA(szBuffer, "assert\n%s(%d):\n%s", file, line, exp); - MessageBoxA(NULL, szBuffer , "sakura", MB_OK); - exit(1); + ::exit( 1 ); } void warning_point() { - int n; - n=0; //※←ここにブレークポイントを設けておくと、任意ワーニングでブレークできる + ::DebugBreak(); } -#endif // _DEBUG diff --git a/sakura_core/debug/Debug2.h b/sakura_core/debug/Debug2.h index e09fd2ceb0..99f3e12902 100644 --- a/sakura_core/debug/Debug2.h +++ b/sakura_core/debug/Debug2.h @@ -27,29 +27,32 @@ */ #pragma once -//2007.08.30 kobake 追加 -#ifdef assert +#include + +#include "debug/Debug1.h" +#include "util/MessageBoxF.h" + +// C Runtime の定義をundefして独自定義に差し替える #undef assert -#endif #ifdef _DEBUG - void debug_output(const char* str, ...); + void debug_exit(); - void debug_exit2(const char* file, int line, const char* exp); void warning_point(); #define assert(exp) \ { \ if(!(exp)){ \ - debug_output("!assert: %hs(%d): %hs\n", __FILE__, __LINE__, #exp); \ - debug_exit2(__FILE__, __LINE__, #exp); \ + TRACE( "!assert: " #exp, NULL ); \ + ErrorMessage( NULL, L"!assert\n%hs(%d):\n%hs", __FILE__, __LINE__, #exp ); \ + debug_exit(); \ } \ } #define assert_warning(exp) \ { \ if(!(exp)){ \ - debug_output("!warning: %hs(%d): %hs\n", __FILE__, __LINE__, #exp); \ + TRACE( "!warning: " #exp, NULL ); \ warning_point(); \ } \ } diff --git a/sakura_core/util/MessageBoxF.cpp b/sakura_core/util/MessageBoxF.cpp index 99a836e0f5..0aae0bd7ba 100644 --- a/sakura_core/util/MessageBoxF.cpp +++ b/sakura_core/util/MessageBoxF.cpp @@ -45,6 +45,20 @@ int Wrap_MessageBox(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType) // 選択中の言語IDを取得する LANGID wLangId = CSelectLang::getDefaultLangId(); + // 標準エラー出力を取得する + HANDLE hStdErr = ::GetStdHandle( STD_ERROR_HANDLE ); + if( hStdErr ){ + // lpTextの文字列長を求める + DWORD dwTextLen = lpText ? ::wcslen( lpText ) : 0; + + // lpText を標準エラー出力に書き出す + DWORD dwWritten = 0; + ::WriteConsoleW( hStdErr, lpText, dwTextLen, &dwWritten, NULL ); + + // いい加減な戻り値を返す。(返り値0は未定義なので本来返らない値を返している) + return 0; + } + // lpText, lpCaption をローカルバッファにコピーして MessageBox API を呼び出す // ※ 使い回しのバッファが使用されていてそれが裏で書き換えられた場合でも // メッセージボックス上の Ctrl+C が文字化けしないように From 4480e4682f8dac0c82dde16de7af8df56a2bcfa4 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 10 Aug 2020 12:37:11 +0900 Subject: [PATCH 0042/1024] Update sakura_core/debug/Debug1.h --- sakura_core/debug/Debug1.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/debug/Debug1.h b/sakura_core/debug/Debug1.h index 57f733bea4..d18faad5c6 100644 --- a/sakura_core/debug/Debug1.h +++ b/sakura_core/debug/Debug1.h @@ -14,7 +14,7 @@ #pragma once -#include +#include #include From 7cb43a3268503f15cf40ae130dfff741d6e25f92 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 14 Aug 2020 01:59:10 +0900 Subject: [PATCH 0043/1024] =?UTF-8?q?MSVC=E3=83=93=E3=83=AB=E3=83=89?= =?UTF-8?q?=E3=81=AE=E3=83=93=E3=83=AB=E3=83=89=E9=A0=86=E5=BA=8F=E3=82=92?= =?UTF-8?q?=E5=AE=9A=E7=BE=A9=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit プロジェクトに依存関係を設定することにより、ビルド順序を設定する。 この修正により、同じターゲットのビルドが同時に走ることがなくなり、またビルドログが順序通り出力されるようになる。 --- sakura_lang_en_US/sakura_lang_en_US.vcxproj | 5 +++++ tests/unittests/tests1.vcxproj | 3 +++ 2 files changed, 8 insertions(+) diff --git a/sakura_lang_en_US/sakura_lang_en_US.vcxproj b/sakura_lang_en_US/sakura_lang_en_US.vcxproj index 5dcbf54f8e..765ef087e5 100644 --- a/sakura_lang_en_US/sakura_lang_en_US.vcxproj +++ b/sakura_lang_en_US/sakura_lang_en_US.vcxproj @@ -129,6 +129,11 @@ + + + {af03508c-515e-4a0e-87be-67ed1e254bd0} + + diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index 295ca08889..7e680f027b 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -132,6 +132,9 @@ {af03508c-515e-4a0e-87be-67ed1e254bd0} + + {7a6d0f29-e560-4985-835b-5f92a08eb242} + \ No newline at end of file From ddd4d67bf22493a0cf8e79949f81c07011e52d50 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 14 Aug 2020 14:43:05 +0900 Subject: [PATCH 0044/1024] =?UTF-8?q?=E3=82=AB=E3=82=B9=E3=82=BF=E3=83=A0?= =?UTF-8?q?=E3=82=BF=E3=83=BC=E3=82=B2=E3=83=83=E3=83=88=E3=81=AE=E3=83=93?= =?UTF-8?q?=E3=83=AB=E3=83=89=E4=BE=9D=E5=AD=98=E9=96=A2=E4=BF=82=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura/funccode.targets | 69 +++++++++++++++++++++++++++++++++++++---- sakura/githash.targets | 24 +++++--------- 2 files changed, 71 insertions(+), 22 deletions(-) diff --git a/sakura/funccode.targets b/sakura/funccode.targets index 4423a6a548..1da83e8d6c 100644 --- a/sakura/funccode.targets +++ b/sakura/funccode.targets @@ -10,15 +10,72 @@ false - + + + <_FuncCodeDefineReadTlog Include="^$([MSBuild]::NormalizePath('$(MSBuildProjectDirectory)', '$(FuncCodeDefine)'));%(FuncCodeRes.FullPath)" + Condition="'%(FuncCodeRes.ExcludedFromBuild)' != 'true' and '$(FuncCodeDefine)' != ''"/> + <_FuncCodeDefineWriteTlog Include="^%(FuncCodeRes.FullPath);$([MSBuild]::NormalizePath('$(MSBuildProjectDirectory)', '$(FuncCodeDefine)'))" + Condition="'%(FuncCodeRes.ExcludedFromBuild)' != 'true' and '$(FuncCodeDefine)' != ''"/> + + + + + <_FuncCodeDefineReadTlog Remove="@(_FuncCodeDefineReadTlog)" /> + <_FuncCodeDefineWriteTlog Remove="@(_FuncCodeDefineWriteTlog)" /> + + + - + + <_FuncCodeEnumReadTlog Include="^$([MSBuild]::NormalizePath('$(MSBuildProjectDirectory)', '$(FuncCodeEnum)'));%(FuncCodeRes.FullPath)" + Condition="'%(FuncCodeRes.ExcludedFromBuild)' != 'true' and '$(FuncCodeEnum)' != ''"/> + <_FuncCodeEnumWriteTlog Include="^%(FuncCodeRes.FullPath);$([MSBuild]::NormalizePath('$(MSBuildProjectDirectory)', '$(FuncCodeEnum)'))" + Condition="'%(FuncCodeRes.ExcludedFromBuild)' != 'true' and '$(FuncCodeEnum)' != ''"/> + + + + + <_FuncCodeEnumReadTlog Remove="@(_FuncCodeEnumReadTlog)" /> + <_FuncCodeEnumWriteTlog Remove="@(_FuncCodeEnumWriteTlog)" /> + + + + DependsOnTargets="_WriteFuncCodeEnumClTlogs;_SelectedFiles" + AfterTargets="SelectClCompile;GenerateGitHash" + BeforeTargets="ClCompile"> \ No newline at end of file diff --git a/sakura/githash.targets b/sakura/githash.targets index 13690f3dcf..c08156e2bd 100644 --- a/sakura/githash.targets +++ b/sakura/githash.targets @@ -1,20 +1,12 @@ - - ..\sakura_core\githash.h + + ..\sakura_core\githash.h - - - - - - - - - - + + \ No newline at end of file From 4f03436b7a9627da807a48b6ec6110d41a15125f Mon Sep 17 00:00:00 2001 From: Masaru Tsuchiyama Date: Sun, 16 Aug 2020 08:51:34 +0900 Subject: [PATCH 0045/1024] =?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E6=84=9F=E3=81=8C=E3=82=82=E3=81=86=E5=B0=91=E3=81=97=E3=82=8F?= =?UTF-8?q?=E3=81=8B=E3=82=8A=E3=82=84=E3=81=99=E3=81=84=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- installer/sakura-common.iss | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/installer/sakura-common.iss b/installer/sakura-common.iss index a4b0a8adeb..9c400f1bdb 100644 --- a/installer/sakura-common.iss +++ b/installer/sakura-common.iss @@ -369,8 +369,10 @@ begin IsVistaOrLater and ( MultiUserPage.Values[0] = False ) then begin +{ + Program Files等のシステムフォルダへインストールする場合はUACを無効にしないと設定が保存できません。 +} selected := MsgBox( -{ 'Program Files等のシステムフォルダへインストールする場合はUACを無効にしないと設定が保存できませんがよろしいですか?',} CustomMessage('MultiUser'), mbConfirmation, ( MB_OKCANCEL )); From ae73aa76bd40ad16d277fb70cc10fea778ab3f91 Mon Sep 17 00:00:00 2001 From: Masaru Tsuchiyama Date: Sun, 16 Aug 2020 18:27:05 +0900 Subject: [PATCH 0046/1024] =?UTF-8?q?VS2019=2016.7.1=20=E3=81=A7=E3=81=AE?= =?UTF-8?q?=E3=82=B3=E3=83=B3=E3=83=91=E3=82=A4=E3=83=AB=E3=82=A8=E3=83=A9?= =?UTF-8?q?=E3=83=BC=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CGrepAgent.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/sakura_core/CGrepAgent.cpp b/sakura_core/CGrepAgent.cpp index bdeb982a84..9b1e7cddd5 100644 --- a/sakura_core/CGrepAgent.cpp +++ b/sakura_core/CGrepAgent.cpp @@ -20,6 +20,7 @@ #include "util/module.h" #include "util/string_ex2.h" #include "debug/CRunningTimer.h" +#include #include #include #include "sakura_rc.h" From e19fb7e5a125f5b53b10d8bb91645c56c36c80d1 Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Sun, 16 Aug 2020 13:11:04 +0900 Subject: [PATCH 0047/1024] MinGW: Fix makefile Make it work when sh.exe is available in the $PATH and a unix-like shell is used. No need to remove git from PATH now. --- build-gnu.bat | 5 ----- sakura_core/Makefile | 4 ++-- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/build-gnu.bat b/build-gnu.bat index 665cd7bd1d..edd47ae935 100644 --- a/build-gnu.bat +++ b/build-gnu.bat @@ -24,11 +24,6 @@ if "%configuration%" == "Release" ( exit /b 1 ) -@rem remove sh.exe in the PATH(for azure pipelines). -PATH=%PATH:C:\Program Files\Git\cmd;=% -PATH=%PATH:C:\Program Files\Git\usr\bin;=% -PATH=%PATH:C:\Program Files\Git\bin;=% - @rem https://www.appveyor.com/docs/environment-variables/ @rem path=C:\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev1\mingw64\bin;%path% path=C:\msys64\mingw64\bin;%path% diff --git a/sakura_core/Makefile b/sakura_core/Makefile index a2a250e456..963fd55469 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -20,7 +20,7 @@ endif CC= $(PREFIX)gcc CXX= $(PREFIX)g++ RC= $(RCPREFIX)windres -RM= "$(CURDIR)/../sakura/mingw32-del.bat" +RM= cmd /c ..\sakura\mingw32-del.bat DEFINES= \ -DWIN32 \ @@ -451,7 +451,7 @@ Funccode_enum.h: $(HEADERMAKE) Funccode_x.hsrc $(HEADERMAKE) -in=../sakura_core/Funccode_x.hsrc -out=../sakura_core/Funccode_enum.h -mode=enum -enum=EFunctionCode githash.h: - "$(CURDIR)/../sakura/githash.bat" ../sakura_core + cmd /c ..\sakura\githash.bat ../sakura_core .cpp.o: githash.h Funccode_enum.h $(CXX) $(CXXFLAGS) -o $@ -c $< From 518e5b17b9a790f9e8b1dd721b1a51a0bac540a3 Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Sun, 16 Aug 2020 16:12:11 +0900 Subject: [PATCH 0048/1024] MinGW: Fix dependencies Fix that HeaderMake is not automatically executed. --- build-gnu.bat | 6 ------ build.md | 1 - sakura_core/Makefile | 4 +++- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/build-gnu.bat b/build-gnu.bat index edd47ae935..5ca914952b 100644 --- a/build-gnu.bat +++ b/build-gnu.bat @@ -29,12 +29,6 @@ if "%configuration%" == "Release" ( path=C:\msys64\mingw64\bin;%path% @echo mingw32-make -C sakura_core MYDEFINES="%MYDEFINES%" MYCFLAGS="%MYCFLAGS%" MYLIBS="%MYLIBS%" -mingw32-make -C sakura_core MYDEFINES="%MYDEFINES%" MYCFLAGS="%MYCFLAGS%" MYLIBS="%MYLIBS%" githash.h Funccode_enum.h Funccode_define.h -if errorlevel 1 ( - echo error 1 errorlevel %errorlevel% - exit /b 1 -) - mingw32-make -C sakura_core MYDEFINES="%MYDEFINES%" MYCFLAGS="%MYCFLAGS%" MYLIBS="%MYLIBS%" -j4 if errorlevel 1 ( echo error 2 errorlevel %errorlevel% diff --git a/build.md b/build.md index dbf8dcfc42..ab7195e1c8 100644 --- a/build.md +++ b/build.md @@ -195,6 +195,5 @@ x86_64 | posix | sjlj | pthreadのDLLが必要 ``` path=C:\msys64\mingw64\bin;%path% -mingw32-make -C sakura_core githash.h Funccode_enum.h Funccode_define.h mingw32-make -C sakura_core -j4 ``` diff --git a/sakura_core/Makefile b/sakura_core/Makefile index 963fd55469..deda996a41 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -453,9 +453,11 @@ Funccode_enum.h: $(HEADERMAKE) Funccode_x.hsrc githash.h: cmd /c ..\sakura\githash.bat ../sakura_core -.cpp.o: githash.h Funccode_enum.h +.cpp.o: $(CXX) $(CXXFLAGS) -o $@ -c $< +$(OBJS): githash.h Funccode_enum.h + $(HEADERMAKE): $(HEADERMAKETOOLDIR)/HeaderMake.cpp $(CXX) $(CXXFLAGS) $(HEADERMAKETOOLDIR)/HeaderMake.cpp -o $@ -static-libgcc From c8a1ab3918258e2730dee34f8743eb1a42e7ab65 Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Mon, 17 Aug 2020 14:45:52 +0900 Subject: [PATCH 0049/1024] MinGW: Generate dependencies automatically Use -MMD option. --- sakura_core/Makefile | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/sakura_core/Makefile b/sakura_core/Makefile index deda996a41..8f99aa9b2c 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -31,6 +31,7 @@ DEFINES= \ CFLAGS= \ -finput-charset=utf-8 \ -fexec-charset=cp932 \ + -MMD \ -I. \ $(DEFINES) $(MYCFLAGS) CXXFLAGS= $(CFLAGS) \ @@ -431,6 +432,8 @@ _os/CClipboard.o \ _os/CDropTarget.o \ sakura_rc.o \ +DEPS= $(OBJS:%.o=%.d) + GENERATED_FILES= \ Funccode_define.h \ Funccode_enum.h \ @@ -459,18 +462,16 @@ githash.h: $(OBJS): githash.h Funccode_enum.h $(HEADERMAKE): $(HEADERMAKETOOLDIR)/HeaderMake.cpp - $(CXX) $(CXXFLAGS) $(HEADERMAKETOOLDIR)/HeaderMake.cpp -o $@ -static-libgcc + $(CXX) $(CXXFLAGS:-MMD=) $(HEADERMAKETOOLDIR)/HeaderMake.cpp -o $@ -static-libgcc sakura_rc.o: githash.h Funccode_define.h sakura_rc.rc $(RC) -c utf-8 --language=0411 $(DEFINES) sakura_rc.rc -o $@ clean: - $(RM) $(exe) $(OBJS) $(HEADERMAKE) StdAfx.h.gch $(GENERATED_FILES) depend.mak - -depend: githash.h Funccode_enum.h - $(CXX) -E -MM -w $(DEFINES) $(CXXFLAGS) *.cpp > depend.mak + $(RM) $(exe) $(OBJS) $(HEADERMAKE) StdAfx.h.gch $(GENERATED_FILES) + $(RM) $(DEPS) .SUFFIXES: .cpp .o .rc -.PHONY: all clean depend +.PHONY: all clean --include depend.mak +-include $(DEPS) From 8c48b2e0f834647eecd3b0c112f532a03960ab4e Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Mon, 17 Aug 2020 15:43:06 +0900 Subject: [PATCH 0050/1024] git: Ignore MinGW files --- HeaderMake/.gitignore | 3 +++ sakura_core/.gitignore | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/HeaderMake/.gitignore b/HeaderMake/.gitignore index e99ed7c99f..e3241c5b7e 100644 --- a/HeaderMake/.gitignore +++ b/HeaderMake/.gitignore @@ -2,3 +2,6 @@ /*.user # /*.vcxproj /Win32 + +# MinGW files +/HeaderMake.exe diff --git a/sakura_core/.gitignore b/sakura_core/.gitignore index 4470709a8e..ddb6796514 100644 --- a/sakura_core/.gitignore +++ b/sakura_core/.gitignore @@ -2,3 +2,8 @@ /githash.h.tmp /Funccode_define.h /Funccode_enum.h + +# MinGW files +/sakura.exe +*.d +*.o From 5c82e7f73534f25560f43ca4a4da9bd01568b848 Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Sun, 16 Aug 2020 13:09:58 +0900 Subject: [PATCH 0051/1024] Remove trailing whitespaces Based on the EditorConfig setting. --- sakura_core/cmd/CViewCommander_TagJump.cpp | 14 +-- sakura_core/doc/layout/CLayout.h | 4 +- .../doc/layout/CLayoutMgr_DoLayout.cpp | 8 +- sakura_core/doc/logic/CDocLine.h | 2 +- sakura_core/print/CPrintPreview.h | 6 +- sakura_core/view/CEditView.cpp | 42 ++++---- sakura_core/view/CEditView_Paint.cpp | 28 ++--- sakura_core/window/CEditWnd.cpp | 100 +++++++++--------- 8 files changed, 102 insertions(+), 102 deletions(-) diff --git a/sakura_core/cmd/CViewCommander_TagJump.cpp b/sakura_core/cmd/CViewCommander_TagJump.cpp index 5ee50bf003..3a60c84592 100644 --- a/sakura_core/cmd/CViewCommander_TagJump.cpp +++ b/sakura_core/cmd/CViewCommander_TagJump.cpp @@ -316,7 +316,7 @@ bool CViewCommander::Command_TAGJUMP( bool bClose ) ; if( p >= p_end ) break; - + // Check Path if( IsFilePath( p, &nBgn, &nPathLen ) ){ wmemcpy( szJumpToFile, &p[nBgn], nPathLen ); @@ -330,7 +330,7 @@ bool CViewCommander::Command_TAGJUMP( bool bClose ) ; } } - + // 2011.11.29 Grep形式で失敗した後もTagsを検索する if( szJumpToFile[0] == L'\0' ){ if( Command_TagJumpByTagsFile(bClose) ){ //@@@ 2003.04.13 @@ -602,7 +602,7 @@ bool CViewCommander::Command_TagJumpByTagsFileMsg( bool bMsg ) @author MIK @date 2003.04.13 新規作成 @date 2003.05.12 フォルダ階層も考慮して探す - @date + @date */ bool CViewCommander::Command_TagJumpByTagsFile( bool bClose ) { @@ -611,13 +611,13 @@ bool CViewCommander::Command_TagJumpByTagsFile( bool bClose ) if( 0 == cmemKeyW.GetStringLength() ){ return false; } - + WCHAR szDirFile[1024]; if( false == Sub_PreProcTagJumpByTagsFile( szDirFile, _countof(szDirFile) ) ){ return false; } CDlgTagJumpList cDlgTagJumpList(true); //タグジャンプリスト - + cDlgTagJumpList.SetFileName( szDirFile ); cDlgTagJumpList.SetKeyword(cmemKeyW.GetStringPtr()); @@ -667,7 +667,7 @@ bool CViewCommander::Command_TagJumpByTagsFileKeyword( const wchar_t* keyword ) cDlgTagJumpList.SetFileName( szCurrentPath ); cDlgTagJumpList.SetKeyword( keyword ); - if( ! cDlgTagJumpList.DoModal( G_AppInstance(), m_pCommanderView->GetHwnd(), 0 ) ) + if( ! cDlgTagJumpList.DoModal( G_AppInstance(), m_pCommanderView->GetHwnd(), 0 ) ) { return true; //キャンセル } @@ -698,7 +698,7 @@ bool CViewCommander::Sub_PreProcTagJumpByTagsFile( WCHAR* szCurrentPath, int cou return false; } } - + // 基準ファイル名の設定 if( GetDocument()->m_cDocFile.GetFilePathClass().IsValidPath() ){ wcscpy( szCurrentPath, GetDocument()->m_cDocFile.GetFilePath() ); diff --git a/sakura_core/doc/layout/CLayout.h b/sakura_core/doc/layout/CLayout.h index cc200f5f08..f0ad799c59 100644 --- a/sakura_core/doc/layout/CLayout.h +++ b/sakura_core/doc/layout/CLayout.h @@ -57,7 +57,7 @@ class CLayout } ~CLayout(); void DUMP( void ); - + // m_ptLogicPos.xで補正したあとの文字列を得る const wchar_t* GetPtr() const { return m_pCDocLine->GetPtr() + m_ptLogicPos.x; } CLogicInt GetLengthWithEOL() const { return m_nLength; } // ただしEOLは常に1文字とカウント?? @@ -115,7 +115,7 @@ class CLayout const CDocLine* m_pCDocLine; //!< 実データへの参照 CLogicPoint m_ptLogicPos; //!< 対応するロジック参照位置 CLogicInt m_nLength; //!< このレイアウト行の長さ。文字単位。 - + //その他属性 EColorIndexType m_nTypePrev; //!< タイプ 0=通常 1=行コメント 2=ブロックコメント 3=シングルクォーテーション文字列 4=ダブルクォーテーション文字列 CLayoutInt m_nIndent; //!< このレイアウト行のインデント数 @@@ 2002.09.23 YAZAKI diff --git a/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp b/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp index e4e66d08aa..1613022906 100644 --- a/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp +++ b/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp @@ -171,7 +171,7 @@ void CLayoutMgr::_DoGyomatsuKinsoku(SLayoutWork* pWork, PF_OnLine pfOnLine) pWork->nWordBgn = pWork->nPos; pWork->nWordLen = 1; pWork->eKinsokuType = KINSOKU_TYPE_KINSOKU_TAIL; - + (this->*pfOnLine)(pWork); } } @@ -311,7 +311,7 @@ void CLayoutMgr::_DoLayout(bool bBlockingHook) _Empty(); Init(); - + // Nov. 16, 2002 genta // 折り返し幅 <= TAB幅のとき無限ループするのを避けるため, // TABが折り返し幅以上の時はTAB=4としてしまう @@ -353,7 +353,7 @@ void CLayoutMgr::_DoLayout(bool bBlockingHook) // 次の行へ pWork->nCurLine++; pWork->pcDocLine = pWork->pcDocLine->GetNextLine(); - + // 処理中のユーザー操作を可能にする if( nListenerCount !=0 && 0 < nAllLineNum) { DWORD currTime = GetTickCount(); @@ -417,7 +417,7 @@ void CLayoutMgr::_OnLine2(SLayoutWork* pWork) /*! 指定レイアウト行に対応する論理行の次の論理行から指定論理行数だけ再レイアウトする - + @date 2002.10.07 YAZAKI rename from "DoLayout3_New" @date 2004.04.03 Moca TABが使われると折り返し位置がずれるのを防ぐため, pWork->nPosXがインデントを含む幅を保持するように変更.m_nMaxLineKetasは diff --git a/sakura_core/doc/logic/CDocLine.h b/sakura_core/doc/logic/CDocLine.h index 5e7dad1229..1205b99413 100644 --- a/sakura_core/doc/logic/CDocLine.h +++ b/sakura_core/doc/logic/CDocLine.h @@ -93,7 +93,7 @@ class CDocLine{ const CDocLine* GetNextLine() const { return m_pNext; } void _SetPrevLine(CDocLine* pcDocLine){ m_pPrev = pcDocLine; } void _SetNextLine(CDocLine* pcDocLine){ m_pNext = pcDocLine; } - + private: //#### CDocLine* m_pPrev; //!< 一つ前の要素 CDocLine* m_pNext; //!< 一つ後の要素 diff --git a/sakura_core/print/CPrintPreview.h b/sakura_core/print/CPrintPreview.h index e28751c5c0..043794054a 100644 --- a/sakura_core/print/CPrintPreview.h +++ b/sakura_core/print/CPrintPreview.h @@ -51,7 +51,7 @@ class CPrintPreview { */ CPrintPreview( class CEditWnd* pParentWnd ); ~CPrintPreview(); - + /* || イベント */ @@ -80,7 +80,7 @@ class CPrintPreview { */ // スクロールバー void InitPreviewScrollBar( void ); - + // PrintPreviewバー(画面上部のコントロール) void CreatePrintPreviewControls( void ); void DestroyPrintPreviewControls( void ); @@ -259,7 +259,7 @@ class CPrintPreview { protected: STypeConfig m_typePrint; - // プレビューから出ても現在のプリンタ情報を記憶しておけるようにstaticにする 2003.05.02 かろと + // プレビューから出ても現在のプリンタ情報を記憶しておけるようにstaticにする 2003.05.02 かろと static CPrint m_cPrint; //!< 現在のプリンタ情報 bool m_bLockSetting; // 設定のロック diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index c998205f04..31a2ec049b 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -201,7 +201,7 @@ BOOL CEditView::Create( m_ptSrchStartPos_PHY.Set(CLogicInt(-1), CLogicInt(-1)); //検索/置換開始時のカーソル位置 (改行単位行先頭からのバイト数(0開始), 改行単位行の行番号(0開始)) m_bSearch = FALSE; // 検索/置換開始位置を登録するか */ // 02/06/26 ai - + m_ptBracketPairPos_PHY.Set(CLogicInt(-1), CLogicInt(-1)); // 対括弧の位置 (改行単位行先頭からのバイト数(0開始), 改行単位行の行番号(0開始)) m_ptBracketCaretPos_PHY.Set(CLogicInt(-1), CLogicInt(-1)); @@ -210,7 +210,7 @@ BOOL CEditView::Create( m_crBack = -1; /* テキストの背景色 */ // 2006.12.16 ryoji m_crBack2 = -1; - + m_szComposition[0] = L'\0'; /* ルーラー表示 */ @@ -223,7 +223,7 @@ BOOL CEditView::Create( m_nCompatBMPWidth = -1; m_nCompatBMPHeight = -1; // To Here 2007.09.09 Moca - + m_nOldUnderLineY = -1; m_nOldCursorLineX = -1; m_nOldCursorVLineWidth = 1; @@ -404,7 +404,7 @@ void CEditView::Close() delete m_cRegexKeyword; //@@@ 2001.11.17 add MIK m_cRegexKeyword = NULL; - + delete m_pcTextArea; m_pcTextArea = NULL; delete m_pcCaret; @@ -624,7 +624,7 @@ LRESULT CEditView::DispatchEvent( /* アクティブなペインを設定 */ m_pcEditWnd->SetActivePane( m_nMyIndex ); // カーソルをクリック位置へ移動する - OnLBUTTONDOWN( wParam, (short)LOWORD( lParam ), (short)HIWORD( lParam ) ); + OnLBUTTONDOWN( wParam, (short)LOWORD( lParam ), (short)HIWORD( lParam ) ); // 2007.10.02 nasukoji m_bActivateByMouse = FALSE; // マウスによるアクティベートを示すフラグをOFF } @@ -806,25 +806,25 @@ LRESULT CEditView::DispatchEvent( return 0L; case WM_IME_REQUEST: /* 再変換 by minfu 2002.03.27 */ // 20020331 aroka - - // 2002.04.09 switch case に変更 minfu + + // 2002.04.09 switch case に変更 minfu switch ( wParam ){ case IMR_RECONVERTSTRING: return SetReconvertStruct((PRECONVERTSTRING)lParam, UNICODE_BOOL); - + case IMR_CONFIRMRECONVERTSTRING: return SetSelectionFromReonvert((PRECONVERTSTRING)lParam, UNICODE_BOOL); - + // 2010.03.16 MS-IME 2002 だと「カーソル位置の前後の内容を参照して変換を行う」の機能 case IMR_DOCUMENTFEED: return SetReconvertStruct((PRECONVERTSTRING)lParam, UNICODE_BOOL, true); - + default: break; } // 2010.03.16 0LではなくTSFが何かするかもしれないのでDefにまかせる return ::DefWindowProc( hwnd, uMsg, wParam, lParam ); - + case MYWM_DROPFILES: // 独自のドロップファイル通知 // 2008.06.20 ryoji OnMyDropFiles( (HDROP)wParam ); return 0L; @@ -906,7 +906,7 @@ void CEditView::OnMove( int x, int y, int nWidth, int nHeight ) /* ウィンドウサイズの変更処理 */ void CEditView::OnSize( int cx, int cy ) { - if( NULL == GetHwnd() + if( NULL == GetHwnd() || ( cx == 0 && cy == 0 ) ){ // From Here 2007.09.09 Moca 互換BMPによる画面バッファ // ウィンドウ無効時にも互換BMPを破棄する @@ -1168,8 +1168,8 @@ void CEditView::MoveCursorSelecting( GetCaret().GetAdjustCursorPos(&ptWk_CaretPos); if( bSelect ){ /* 現在のカーソル位置によって選択範囲を変更. - - 2004.04.02 Moca + + 2004.04.02 Moca キャレット位置が不正だった場合にMoveCursorの移動結果が 引数で与えた座標とは異なることがあるため, nPosX, nPosYの代わりに実際の移動結果を使うように. @@ -1403,7 +1403,7 @@ void CEditView::ConvSelectedArea( EFunctionCode nFuncCode ) nDelLen, &cmemBuf ); - + { /* 機能種別によるバッファの変換 */ int nStartColumn = (Int)sPos.GetX2() / (Int)GetTextMetrics().GetLayoutXDefault(); @@ -2272,7 +2272,7 @@ bool CEditView::MyGetClipboardData( CNativeW& cmemBuf, bool* pbColumnSelect, boo if(!CClipboard::HasValidData()) return false; - + CClipboard cClipboard(GetHwnd()); if(!cClipboard) return false; @@ -2327,7 +2327,7 @@ void CEditView::CaretUnderLineON( bool bDraw, bool bDrawPaint, bool DisalbeUnder // m_nOldUnderLineY = -1; // 2011.12.06 Moca IsTextSelected → IsTextSelecting に変更。ロック中も下線を表示しない int bCursorLineBgDraw = false; - + // カーソル行の描画 if( bDraw && bCursorLineBg @@ -2356,7 +2356,7 @@ void CEditView::CaretUnderLineON( bool bDraw, bool bDrawPaint, bool DisalbeUnder GetCaret().m_cUnderLine.UnLock(); } } - + int nCursorVLineX = -1; // From Here 2007.09.09 Moca 互換BMPによる画面バッファ if( bCursorVLine ){ @@ -2394,7 +2394,7 @@ void CEditView::CaretUnderLineON( bool bDraw, bool bDrawPaint, bool DisalbeUnder } // ReleaseDC の前に gr デストラクト ::ReleaseDC( GetHwnd(), hdc ); } - + int nUnderLineY = -1; if( bUnderLine ){ nUnderLineY = GetTextArea().GetAreaTop() + (Int)(GetCaret().GetCaretLayoutPos().GetY2() - GetTextArea().GetViewTopLine()) @@ -2493,7 +2493,7 @@ void CEditView::CaretUnderLineOFF( bool bDraw, bool bDrawPaint, bool bResetFlag, // 選択情報を復元 GetCaret().m_cUnderLine.UnLock(); - + if( bDrawPaint ){ m_nOldUnderLineYBg = -1; } @@ -2677,7 +2677,7 @@ bool CEditView::ShowKeywordHelp( POINT po, LPCWSTR pszHelp, LPRECT prcHokanWin) @param[in] ptTo 指定範囲終了 @param[in] bSelect 範囲指定 @param[in] bBoxSelect 矩形選択 - + @retval true 指定位置または指定範囲内にテキストが存在しない false 指定位置または指定範囲内にテキストが存在する diff --git a/sakura_core/view/CEditView_Paint.cpp b/sakura_core/view/CEditView_Paint.cpp index 37d9a1c2c5..9d56f6968f 100644 --- a/sakura_core/view/CEditView_Paint.cpp +++ b/sakura_core/view/CEditView_Paint.cpp @@ -96,7 +96,7 @@ void CEditView::RedrawAll() if( NULL == GetHwnd() ){ return; } - + if( GetDrawSwitch() ){ // ウィンドウ全体を再描画 PAINTSTRUCT ps; @@ -270,7 +270,7 @@ void CEditView::DrawBackImage(HDC hdc, RECT& rcPaint, HDC hdcBgImg) } } rcImagePos.SetSize(doc.m_nBackImgWidth, doc.m_nBackImgHeight); - + RECT rc = rcPaint; // rc.left = t_max((int)rc.left, area.GetAreaLeft()); rc.top = t_max((int)rc.top, area.GetRulerHeight()); // ルーラーを除外 @@ -576,7 +576,7 @@ void CEditView::OnPaint( HDC _hdc, PAINTSTRUCT *pPs, BOOL bDrawFromComptibleBmp } } -/*! 通常の描画処理 new +/*! 通常の描画処理 new @param pPs pPs.rcPaint は正しい必要がある @param bDrawFromComptibleBmp TRUE 画面バッファからhdcに作画する(コピーするだけ)。 TRUEの場合、pPs.rcPaint領域外は作画されないが、FALSEの場合は作画される事がある。 @@ -604,7 +604,7 @@ void CEditView::OnPaint2( HDC _hdc, PAINTSTRUCT *pPs, BOOL bDrawFromComptibleBmp bDrawFromComptibleBmp ); #endif - + // From Here 2007.09.09 Moca 互換BMPによる画面バッファ // 互換BMPからの転送のみによる作画 if( bDrawFromComptibleBmp @@ -1195,16 +1195,16 @@ bool CEditView::DrawLayoutLine(SColorStrategyInfo* pInfo) /* テキスト反転 - @param hdc - @param nLineNum - @param x - @param y - @param nX + @param hdc + @param nLineNum + @param x + @param y + @param nX @note CCEditView::DrawLogicLine() での作画(WM_PAINT)時に、1レイアウト行をまとめて反転処理するための関数。 範囲選択の随時更新は、CEditView::DrawSelectArea() が選択・反転解除を行う。 - + */ void CEditView::DispTextSelected( HDC hdc, //!< 作画対象ビットマップを含むデバイス @@ -1274,12 +1274,12 @@ void CEditView::DispTextSelected( if( rcClip.right > GetTextArea().GetAreaRight() ){ rcClip.right = GetTextArea().GetAreaRight(); } - + // 選択色表示なら反転しない if( !bOMatch && CTypeSupport(this, COLORIDX_SELECT).IsDisp() ){ return; } - + HBRUSH hBrush = ::CreateSolidBrush( SELECTEDAREA_RGB ); int nROP_Old = ::SetROP2( hdc, SELECTEDAREA_ROP2 ); @@ -1303,7 +1303,7 @@ void CEditView::DispTextSelected( /*! 画面の互換ビットマップを作成または更新する。 必要の無いときは何もしない。 - + @param cx ウィンドウの高さ @param cy ウィンドウの幅 @return true: ビットマップを利用可能 / false: ビットマップの作成・更新に失敗 @@ -1373,7 +1373,7 @@ bool CEditView::CreateOrUpdateCompatibleBitmap( int cx, int cy ) @note 分割ビューが非表示になった場合と 親ウィンドウが非表示・最小化された場合に削除される。 - @date 2007.09.09 Moca 新規作成 + @date 2007.09.09 Moca 新規作成 */ void CEditView::DeleteCompatibleBitmap() { diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index 56b1a77dc4..023aca11a0 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -455,7 +455,7 @@ void CEditWnd::_AdjustInMonitor(const STabGroupInfo& sTabGroupInfo) rcOrg.left -= rcOrg.right - rcDesktop.right; rcOrg.right = rcDesktop.right; //@@@ 2002.01.08 } - + if( rcOrg.top < rcDesktop.top ){ rcOrg.bottom += rcDesktop.top - rcOrg.top; rcOrg.top = rcDesktop.top; @@ -837,7 +837,7 @@ void CEditWnd::LayoutMainMenu() // ラベル未設定かつFunctionコードがありならストリングテーブルから取得 2012/10/18 syat 各国語対応 pszName = ( cMainMenu->m_sName[0] == L'\0' && cMainMenu->m_nFunc != F_NODE ) ? LS( cMainMenu->m_nFunc ) : cMainMenu->m_sName; - ::AppendMenu( hMenu, MF_POPUP | MF_STRING | (nCount<=1 ? MF_GRAYED : 0), (UINT_PTR)CreatePopupMenu(), + ::AppendMenu( hMenu, MF_POPUP | MF_STRING | (nCount<=1 ? MF_GRAYED : 0), (UINT_PTR)CreatePopupMenu(), CKeyBind::MakeMenuLabel( pszName, cMainMenu->m_sKey ) ); break; case T_LEAF: @@ -913,7 +913,7 @@ void CEditWnd::LayoutMainMenu() } break; } - ::AppendMenu( hMenu, MF_POPUP | MF_STRING | (nCount<=0 ? MF_GRAYED : 0), (UINT_PTR)CreatePopupMenu(), + ::AppendMenu( hMenu, MF_POPUP | MF_STRING | (nCount<=0 ? MF_GRAYED : 0), (UINT_PTR)CreatePopupMenu(), CKeyBind::MakeMenuLabel( LS(cMainMenu->m_nFunc), cMainMenu->m_sKey ) ); break; } @@ -1207,7 +1207,7 @@ LRESULT CEditWnd::DispatchEvent( } ::SetTextColor( lpdis->hDC, ::GetSysColor( nColor ) ); ::SetBkMode( lpdis->hDC, TRANSPARENT ); - + // 2003.08.26 Moca 上下中央位置に作画 TEXTMETRIC tm; ::GetTextMetrics( lpdis->hDC, &tm ); @@ -1411,7 +1411,7 @@ LRESULT CEditWnd::DispatchEvent( case WM_NOTIFY: pnmh = (LPNMHDR) lParam; - // From Here Feb. 15, 2004 genta + // From Here Feb. 15, 2004 genta // ステータスバーのダブルクリックでモード切替ができるようにする if( m_cStatusBar.GetStatusHwnd() && pnmh->hwndFrom == m_cStatusBar.GetStatusHwnd() ){ if( pnmh->code == NM_DBLCLK ){ @@ -1442,7 +1442,7 @@ LRESULT CEditWnd::DispatchEvent( }; m_cMenuDrawer.ResetContents(); HMENU hMenuPopUp = ::CreatePopupMenu(); - m_cMenuDrawer.MyAppendMenu( hMenuPopUp, MF_BYPOSITION | MF_STRING, F_CHGMOD_EOL_CRLF, + m_cMenuDrawer.MyAppendMenu( hMenuPopUp, MF_BYPOSITION | MF_STRING, F_CHGMOD_EOL_CRLF, LS( F_CHGMOD_EOL_CRLF ), L"C" ); // 入力改行コード指定(CRLF) m_cMenuDrawer.MyAppendMenu( hMenuPopUp, MF_BYPOSITION | MF_STRING, F_CHGMOD_EOL_LF, LS( F_CHGMOD_EOL_LF ), L"L" ); // 入力改行コード指定(LF) @@ -1457,7 +1457,7 @@ LRESULT CEditWnd::DispatchEvent( m_cMenuDrawer.MyAppendMenu( hMenuPopUp, MF_BYPOSITION | MF_STRING, F_CHGMOD_EOL_PS, LS(STR_EDITWND_MENU_PS), L"", TRUE, -2 ); // 入力改行コード指定(PS) } - + // mp->ptはステータスバー内部の座標なので,スクリーン座標への変換が必要 POINT po = mp->pt; ::ClientToScreen( m_cStatusBar.GetStatusHwnd(), &po ); @@ -1493,7 +1493,7 @@ LRESULT CEditWnd::DispatchEvent( } return 0L; } - // To Here Feb. 15, 2004 genta + // To Here Feb. 15, 2004 genta switch( pnmh->code ){ // 2007.09.08 kobake TTN_NEEDTEXTの処理をA版とW版に分けて明示的に処理するようにしました。 @@ -1837,7 +1837,7 @@ LRESULT CEditWnd::DispatchEvent( SelectCharWidthCache( CWM_FONT_PRINT, CWM_CACHE_LOCAL ); } } - return 0L; + return 0L; case MYWM_SETACTIVEPANE: if( -1 == (int)wParam ){ if( 0 == lParam ){ @@ -1861,7 +1861,7 @@ LRESULT CEditWnd::DispatchEvent( // 現在の状態をKEEP bSelect = GetActiveView().GetSelectionInfo().m_bSelectingLock; } - + // 2006.07.09 genta 強制解除しない /* カーソル位置変換 @@ -2262,7 +2262,7 @@ void CEditWnd::OnCommand( WORD wNotifyCode, WORD wID , HWND hwndCtl ) // キーワード:メニューバー順序 // Sept.14, 2000 Jepro note: メニューバーの項目のキャプションや順番設定などは以下で行っているらしい // Sept.16, 2000 Jepro note: アイコンとの関連付けはCShareData_new2.cppファイルで行っている -// 2010/5/16 Uchi 動的に作成する様に変更 +// 2010/5/16 Uchi 動的に作成する様に変更 void CEditWnd::InitMenu( HMENU hMenu, UINT uPos, BOOL fSystemMenu ) { int cMenuItems; @@ -2323,7 +2323,7 @@ void CEditWnd::InitMenu( HMENU hMenu, UINT uPos, BOOL fSystemMenu ) }else{ pMenuName = cMainMenu->m_sName; } - m_cMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING | MF_POPUP, (UINT_PTR)hMenuPopUp , + m_cMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING | MF_POPUP, (UINT_PTR)hMenuPopUp , pMenuName, cMainMenu->m_sKey ); if (hSubMenu.size() > (size_t)nLv) { hSubMenu[nLv] = hMenuPopUp; @@ -2345,10 +2345,10 @@ void CEditWnd::InitMenu( HMENU hMenu, UINT uPos, BOOL fSystemMenu ) if (!bInList) { //分割線に囲まれ、かつリストなし ならば 次の分割線をスキップ if ((i == nIdxStr + 1 - || (pcMenu->m_cMainMenuTbl[i-1].m_nType == T_SEPARATOR + || (pcMenu->m_cMainMenuTbl[i-1].m_nType == T_SEPARATOR && pcMenu->m_cMainMenuTbl[i-1].m_nLevel == cMainMenu->m_nLevel)) && i + 1 < nIdxEnd - && pcMenu->m_cMainMenuTbl[i+1].m_nType == T_SEPARATOR + && pcMenu->m_cMainMenuTbl[i+1].m_nType == T_SEPARATOR && pcMenu->m_cMainMenuTbl[i+1].m_nLevel == cMainMenu->m_nLevel) { i++; // スキップ } @@ -2451,56 +2451,56 @@ void CEditWnd::InitMenu_Function(HMENU hMenu, EFunctionCode eFunc, const wchar_t case F_SAVEKEYMACRO: case F_LOADKEYMACRO: case F_EXECKEYMACRO: - SetMenuFuncSel( hMenu, eFunc, pszKey, + SetMenuFuncSel( hMenu, eFunc, pszKey, !m_pShareData->m_sFlags.m_bRecordingKeyMacro); break; - case F_SPLIT_V: - SetMenuFuncSel( hMenu, eFunc, pszKey, + case F_SPLIT_V: + SetMenuFuncSel( hMenu, eFunc, pszKey, m_cSplitterWnd.GetAllSplitRows() == 1 ); break; case F_SPLIT_H: - SetMenuFuncSel( hMenu, eFunc, pszKey, + SetMenuFuncSel( hMenu, eFunc, pszKey, m_cSplitterWnd.GetAllSplitCols() == 1 ); break; case F_SPLIT_VH: - SetMenuFuncSel( hMenu, eFunc, pszKey, + SetMenuFuncSel( hMenu, eFunc, pszKey, m_cSplitterWnd.GetAllSplitRows() == 1 || m_cSplitterWnd.GetAllSplitCols() == 1 ); break; case F_TAB_CLOSEOTHER: - SetMenuFuncSel( hMenu, eFunc, pszKey, + SetMenuFuncSel( hMenu, eFunc, pszKey, m_pShareData->m_Common.m_sTabBar.m_bDispTabWnd != 0 ); break; case F_TOPMOST: - SetMenuFuncSel( hMenu, eFunc, pszKey, + SetMenuFuncSel( hMenu, eFunc, pszKey, ((DWORD)::GetWindowLongPtr( GetHwnd(), GWL_EXSTYLE ) & WS_EX_TOPMOST) == 0 ); break; case F_BIND_WINDOW: - SetMenuFuncSel( hMenu, eFunc, pszKey, - (!m_pShareData->m_Common.m_sTabBar.m_bDispTabWnd + SetMenuFuncSel( hMenu, eFunc, pszKey, + (!m_pShareData->m_Common.m_sTabBar.m_bDispTabWnd || m_pShareData->m_Common.m_sTabBar.m_bDispTabWndMultiWin) ); break; case F_SHOWTOOLBAR: - SetMenuFuncSel( hMenu, eFunc, pszKey, + SetMenuFuncSel( hMenu, eFunc, pszKey, !m_pShareData->m_Common.m_sWindow.m_bMenuIcon | !m_cToolbar.GetToolbarHwnd() ); break; case F_SHOWFUNCKEY: - SetMenuFuncSel( hMenu, eFunc, pszKey, + SetMenuFuncSel( hMenu, eFunc, pszKey, !m_pShareData->m_Common.m_sWindow.m_bMenuIcon | !m_cFuncKeyWnd.GetHwnd() ); break; case F_SHOWTAB: - SetMenuFuncSel( hMenu, eFunc, pszKey, + SetMenuFuncSel( hMenu, eFunc, pszKey, !m_pShareData->m_Common.m_sWindow.m_bMenuIcon | !m_cTabWnd.GetHwnd() ); break; case F_SHOWSTATUSBAR: - SetMenuFuncSel( hMenu, eFunc, pszKey, + SetMenuFuncSel( hMenu, eFunc, pszKey, !m_pShareData->m_Common.m_sWindow.m_bMenuIcon | !m_cStatusBar.GetStatusHwnd() ); break; case F_SHOWMINIMAP: - SetMenuFuncSel( hMenu, eFunc, pszKey, + SetMenuFuncSel( hMenu, eFunc, pszKey, !m_pShareData->m_Common.m_sWindow.m_bMenuIcon | !GetMiniMap().GetHwnd() ); break; case F_TOGGLE_KEY_SEARCH: - SetMenuFuncSel( hMenu, eFunc, pszKey, + SetMenuFuncSel( hMenu, eFunc, pszKey, !m_pShareData->m_Common.m_sWindow.m_bMenuIcon | !IsFuncChecked( GetDocument(), m_pShareData, F_TOGGLE_KEY_SEARCH ) ); break; case F_WRAPWINDOWWIDTH: @@ -2542,7 +2542,7 @@ void CEditWnd::InitMenu_Function(HMENU hMenu, EFunctionCode eFunc, const wchar_t } break; default: - m_cMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, eFunc, + m_cMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, eFunc, pszName, pszKey ); break; } @@ -2822,7 +2822,7 @@ void CEditWnd::OnDropFiles( HDROP hDrop ) return; } -/*! WM_TIMER 処理 +/*! WM_TIMER 処理 @date 2007.04.03 ryoji 新規 @date 2008.04.19 ryoji IDT_FIRST_IDLE での MYWM_FIRST_IDLE ポスト処理を追加 @date 2013.06.09 novice コントロールプロセスへの MYWM_FIRST_IDLE ポスト処理を追加 @@ -3283,7 +3283,7 @@ LRESULT CEditWnd::OnSize2( WPARAM wParam, LPARAM lParam, bool bUpdateStatus ) int nMiniMapWidth = 0; if( GetMiniMap().GetHwnd() ){ nMiniMapWidth = GetDllShareData().m_Common.m_sWindow.m_nMiniMapWidth; - ::MoveWindow( m_pcEditViewMiniMap->GetHwnd(), + ::MoveWindow( m_pcEditViewMiniMap->GetHwnd(), (eDockSideFL == DOCKSIDE_RIGHT)? cx - nFuncListWidth - nMiniMapWidth: cx - nMiniMapWidth, (eDockSideFL == DOCKSIDE_TOP)? nTop + nFuncListHeight: nTop, nMiniMapWidth, @@ -3761,7 +3761,7 @@ int CEditWnd::CreateFileDropDownMenu( HWND hwnd ) // アクティブ m_cMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING | MF_POPUP, (UINT_PTR)hMenuPopUp, LS(F_FOLDER_USED_RECENTLY), L"" ); } - else + else { // 非アクティブ m_cMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING | MF_POPUP | MF_GRAYED, (UINT_PTR)hMenuPopUp, LS(F_FOLDER_USED_RECENTLY), L"" ); @@ -3833,16 +3833,16 @@ void CEditWnd::GetDefaultIcon( HICON* hIconBig, HICON* hIconSmall ) const /*! アイコンの取得 - + 指定されたファイル名に対応するアイコン(大・小)を取得して返す. - + @param szFile [in] ファイル名 @param hIconBig [out] 大きいアイコンのハンドル @param hIconSmall [out] 小さいアイコンのハンドル - + @retval true 関連づけられたアイコンが見つかった @retval false 関連づけられたアイコンが見つからなかった - + @author genta @date 2002.09.10 */ @@ -3854,7 +3854,7 @@ bool CEditWnd::GetRelatedIcon(const WCHAR* szFile, HICON* hIconBig, HICON* hIcon // (.で始まる)拡張子の取得 _wsplitpath( szFile, NULL, NULL, NULL, szExt ); - + if( ReadRegistry(HKEY_CLASSES_ROOT, szExt, NULL, FileType, _countof(FileType) - 13)){ wcscat( FileType, L"\\DefaultIcon" ); if( ReadRegistry(HKEY_CLASSES_ROOT, FileType, NULL, NULL, 0)){ @@ -3876,9 +3876,9 @@ bool CEditWnd::GetRelatedIcon(const WCHAR* szFile, HICON* hIconBig, HICON* hIcon /* @brief メニューバー表示用フォントの初期化 - + メニューバー表示用フォントの初期化を行う. - + @date 2002.12.04 CEditViewのコンストラクタから移動 */ void CEditWnd::InitMenubarMessageFont(void) @@ -3917,10 +3917,10 @@ void CEditWnd::InitMenubarMessageFont(void) /* @brief メニューバーにメッセージを表示する - + 事前にメニューバー表示用フォントが初期化されていなくてはならない. 指定できる文字数は最大30文字.それ以上の場合はうち切って表示する. - + @author genta @date 2002.12.04 */ @@ -3984,10 +3984,10 @@ void CEditWnd::PrintMenubarMessage( const WCHAR* msg ) /*! @brief メッセージの表示 - + 指定されたメッセージをステータスバーに表示する. ステータスバーが非表示の場合はメニューバーの右端に表示する. - + @param msg [in] 表示するメッセージ @date 2002.01.26 hor 新規作成 @date 2002.12.04 genta CEditViewより移動 @@ -4133,7 +4133,7 @@ LRESULT CEditWnd::PopupWinList( bool bMousePos ) // ポップアップ位置をアクティブビューの上辺に設定 RECT rc; - + if( bMousePos ){ ::GetCursorPos( &pt ); // マウスカーソル位置に変更 } @@ -4170,7 +4170,7 @@ LRESULT CEditWnd::PopupWinList( bool bMousePos ) return 0L; } -/*! @brief 現在開いている編集窓のリストをメニューにする +/*! @brief 現在開いている編集窓のリストをメニューにする @date 2006.03.23 fon CEditWnd::InitMenuから移動。////が元からあるコメント。//>は追加コメントアウト。 @date 2009.06.02 ryoji アイテム数が多いときはアクセスキーを 1-9,A-Z の範囲で再使用する(従来は36個未満を仮定) */ @@ -4249,9 +4249,9 @@ void CEditWnd::OnEditTimer( void ) IncrementTimerCount(6); // 2006.01.28 aroka ツールバー更新関連は OnToolbarTimerに移動した。 - + // Aug. 29, 2003 wmlhq, ryoji - if( m_nTimerCount == 0 && GetCapture() == NULL ){ + if( m_nTimerCount == 0 && GetCapture() == NULL ){ // ファイルのタイムスタンプのチェック処理 GetDocument()->m_cAutoReloadAgent.CheckFileTimeStamp(); @@ -4630,9 +4630,9 @@ CLogicPointEx* CEditWnd::SavePhysPosOfAllView() { const int NUM_OF_VIEW = GetAllViewCount(); const int NUM_OF_POS = 6; - + CLogicPointEx* pptPosArray = new CLogicPointEx[NUM_OF_VIEW * NUM_OF_POS]; - + for( int i = 0; i < NUM_OF_VIEW; ++i ){ CLayoutPoint tmp = CLayoutPoint(CLayoutInt(0), GetView(i).m_pcTextArea->GetViewTopLine()); const CLayout* layoutLine = GetDocument()->m_cLayoutMgr.SearchLineByLayoutY(tmp.GetY2()); From ff72f06af88fef43fb889eb557f5ec1e49e7e1e8 Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Sun, 16 Aug 2020 15:21:46 +0900 Subject: [PATCH 0052/1024] MinGW: Avoid undefined behavior Stop calling member functions with this==NULL. This causes undefined behavior on C++. This may work on VC++ but causes SEGV on MinGW. Related: #601 --- sakura_core/cmd/CViewCommander_TagJump.cpp | 2 +- sakura_core/doc/layout/CLayout.h | 9 ++++-- .../doc/layout/CLayoutMgr_DoLayout.cpp | 20 ++++++------- sakura_core/doc/logic/CDocLine.h | 21 +++++++++---- sakura_core/env/CAppNodeManager.h | 30 +++++++++++++++---- sakura_core/mfclike/CMyWnd.h | 2 +- sakura_core/print/CPrintPreview.h | 10 +++++-- sakura_core/view/CEditView.cpp | 2 +- sakura_core/view/CEditView_Paint.cpp | 6 ++-- sakura_core/view/colors/CColorStrategy.cpp | 4 +-- sakura_core/view/colors/CColorStrategy.h | 20 +++++++++---- sakura_core/window/CEditWnd.cpp | 6 ++-- 12 files changed, 89 insertions(+), 43 deletions(-) diff --git a/sakura_core/cmd/CViewCommander_TagJump.cpp b/sakura_core/cmd/CViewCommander_TagJump.cpp index 3a60c84592..df482dbf5d 100644 --- a/sakura_core/cmd/CViewCommander_TagJump.cpp +++ b/sakura_core/cmd/CViewCommander_TagJump.cpp @@ -102,7 +102,7 @@ bool CViewCommander::Command_TAGJUMP( bool bClose ) /* 現在行のデータを取得 */ CLogicInt nLineLen; - const wchar_t* pLine = GetDocument()->m_cDocLineMgr.GetLine(ptXY.GetY2())->GetDocLineStrWithEOL(&nLineLen); + const wchar_t* pLine = CDocLine::GetDocLineStrWithEOL_Safe(GetDocument()->m_cDocLineMgr.GetLine(ptXY.GetY2()), &nLineLen); if( NULL == pLine ){ goto can_not_tagjump; } diff --git a/sakura_core/doc/layout/CLayout.h b/sakura_core/doc/layout/CLayout.h index f0ad799c59..4a1dc8d3fa 100644 --- a/sakura_core/doc/layout/CLayout.h +++ b/sakura_core/doc/layout/CLayout.h @@ -66,7 +66,12 @@ class CLayout CLayoutInt GetIndent() const { return m_nIndent; } //!< このレイアウト行のインデントサイズを取得。単位は半角文字。 CMemoryIterator用 //取得インターフェース - CLogicInt GetLogicLineNo() const{ if(this)return m_ptLogicPos.GetY2(); else return CLogicInt(-1); } //$$$高速化 + CLogicInt GetLogicLineNo() const{ return m_ptLogicPos.GetY2(); } + static CLogicInt GetLogicLineNo_Safe(const CLayout* layout) { + if (layout) + return layout->m_ptLogicPos.GetY2(); + return CLogicInt(-1); + } CLogicInt GetLogicOffset() const{ return m_ptLogicPos.GetX2(); } CLogicPoint GetLogicPos() const{ return m_ptLogicPos; } EColorIndexType GetColorTypePrev() const{ return m_nTypePrev; } //#########汚っ @@ -98,7 +103,7 @@ class CLayout void _SetNextLayout(CLayout* pcLayout){ m_pNext = pcLayout; } //実データ参照 - const CDocLine* GetDocLineRef() const{ if(this)return m_pCDocLine; else return NULL; } //$$note:高速化 + const CDocLine* GetDocLineRef() const{ return m_pCDocLine; } //その他属性参照 const CEol& GetLayoutEol() const{ return m_cEol; } diff --git a/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp b/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp index 1613022906..5cfdd810a2 100644 --- a/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp +++ b/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp @@ -277,8 +277,8 @@ void CLayoutMgr::_OnLine1(SLayoutWork* pWork) { AddLineBottom( pWork->_CreateLayout(this) ); pWork->pLayout = m_pLayoutBot; - pWork->colorPrev = pWork->pcColorStrategy->GetStrategyColorSafe(); - pWork->exInfoPrev.SetColorInfo(pWork->pcColorStrategy->GetStrategyColorInfoSafe()); + pWork->colorPrev = CColorStrategy::GetStrategyColorSafe(pWork->pcColorStrategy); + pWork->exInfoPrev.SetColorInfo(CColorStrategy::GetStrategyColorInfoSafe(pWork->pcColorStrategy)); pWork->nBgn = pWork->nPos; // 2004.03.28 Moca pWork->nPosXはインデント幅を含むように変更(TAB位置調整のため) pWork->nPosX = pWork->nIndent = (this->*m_getIndentOffset)( pWork->pLayout ); @@ -346,8 +346,8 @@ void CLayoutMgr::_DoLayout(bool bBlockingHook) if( pWork->nPos - pWork->nBgn > 0 ){ // 2002/03/13 novice AddLineBottom( pWork->_CreateLayout(this) ); - pWork->colorPrev = pWork->pcColorStrategy->GetStrategyColorSafe(); - pWork->exInfoPrev.SetColorInfo(pWork->pcColorStrategy->GetStrategyColorInfoSafe()); + pWork->colorPrev = CColorStrategy::GetStrategyColorSafe(pWork->pcColorStrategy); + pWork->exInfoPrev.SetColorInfo(CColorStrategy::GetStrategyColorInfoSafe(pWork->pcColorStrategy)); } // 次の行へ @@ -371,8 +371,8 @@ void CLayoutMgr::_DoLayout(bool bBlockingHook) } // 2011.12.31 Botの色分け情報は最後に設定 - m_nLineTypeBot = pWork->pcColorStrategy->GetStrategyColorSafe(); - m_cLayoutExInfoBot.SetColorInfo(pWork->pcColorStrategy->GetStrategyColorInfoSafe()); + m_nLineTypeBot = CColorStrategy::GetStrategyColorSafe(pWork->pcColorStrategy); + m_cLayoutExInfoBot.SetColorInfo(CColorStrategy::GetStrategyColorInfoSafe(pWork->pcColorStrategy)); m_nPrevReferLine = CLayoutInt(0); m_pLayoutPrevRefer = NULL; @@ -402,8 +402,8 @@ void CLayoutMgr::_OnLine2(SLayoutWork* pWork) else { pWork->pLayout = InsertLineNext( pWork->pLayout, pWork->_CreateLayout(this) ); } - pWork->colorPrev = pWork->pcColorStrategy->GetStrategyColorSafe(); - pWork->exInfoPrev.SetColorInfo(pWork->pcColorStrategy->GetStrategyColorInfoSafe()); + pWork->colorPrev = CColorStrategy::GetStrategyColorSafe(pWork->pcColorStrategy); + pWork->exInfoPrev.SetColorInfo(CColorStrategy::GetStrategyColorInfoSafe(pWork->pcColorStrategy)); pWork->nBgn = pWork->nPos; // 2004.03.28 Moca pWork->nPosXはインデント幅を含むように変更(TAB位置調整のため) @@ -519,8 +519,8 @@ CLayoutInt CLayoutMgr::DoLayout_Range( // 2004.03.28 Moca EOFだけの論理行の直前の行の色分けが確認・更新された if( pWork->nCurLine == m_pcDocLineMgr->GetLineCount() ){ - m_nLineTypeBot = pWork->pcColorStrategy->GetStrategyColorSafe(); - m_cLayoutExInfoBot.SetColorInfo(pWork->pcColorStrategy->GetStrategyColorInfoSafe()); + m_nLineTypeBot = CColorStrategy::GetStrategyColorSafe(pWork->pcColorStrategy); + m_cLayoutExInfoBot.SetColorInfo(CColorStrategy::GetStrategyColorInfoSafe(pWork->pcColorStrategy)); } // 2009.08.28 nasukoji テキストが編集されたら最大幅を算出する diff --git a/sakura_core/doc/logic/CDocLine.h b/sakura_core/doc/logic/CDocLine.h index 1205b99413..389102fe8e 100644 --- a/sakura_core/doc/logic/CDocLine.h +++ b/sakura_core/doc/logic/CDocLine.h @@ -56,10 +56,15 @@ class CDocLine{ return p; } #endif - const wchar_t* GetDocLineStrWithEOL(CLogicInt* pnLen) const //###仮の名前、仮の対処 + const wchar_t* GetDocLineStrWithEOL(CLogicInt* pnLen) const //###仮の名前、仮の対処 { - if(this){ - *pnLen = GetLengthWithEOL(); return GetPtr(); + *pnLen = GetLengthWithEOL(); + return GetPtr(); + } + static const wchar_t* GetDocLineStrWithEOL_Safe(const CDocLine* docline, CLogicInt* pnLen) //###仮の名前、仮の対処 + { + if(docline){ + return docline->GetDocLineStrWithEOL(pnLen); } else{ *pnLen = 0; return NULL; @@ -67,11 +72,15 @@ class CDocLine{ } CStringRef GetStringRefWithEOL() const //###仮の名前、仮の対処 { - if(this){ - return CStringRef(GetPtr(),GetLengthWithEOL()); + return CStringRef(GetPtr(), GetLengthWithEOL()); + } + static CStringRef GetStringRefWithEOL_Safe(const CDocLine* docline) //###仮の名前、仮の対処 + { + if(docline){ + return CStringRef(docline->GetPtr(), docline->GetLengthWithEOL()); } else{ - return CStringRef(NULL,0); + return CStringRef(NULL, 0); } } const CEol& GetEol() const{ return m_cEol; } diff --git a/sakura_core/env/CAppNodeManager.h b/sakura_core/env/CAppNodeManager.h index f85c45d16d..27d0d6062c 100644 --- a/sakura_core/env/CAppNodeManager.h +++ b/sakura_core/env/CAppNodeManager.h @@ -41,12 +41,14 @@ struct EditNode { UINT m_showCmdRestore; //!< 元のサイズに戻すときのサイズ種別 //@@@ 2007.06.20 ryoji BOOL m_bClosing; //!< 終了中か(「最後のファイルを閉じても(無題)を残す」用) //@@@ 2007.06.20 ryoji - HWND GetHwnd() const{ return GetSafeHwnd(); } - HWND GetSafeHwnd() const{ if(this)return m_hWnd; else return NULL; } - int GetId() const{ return GetSafeId(); } - int GetSafeId() const{ if(this)return m_nId; else return 0; } + HWND GetHwnd() const{ return m_hWnd; } + //static HWND GetSafeHwnd(const EditNode* node) { return node ? node->m_hWnd : NULL; } + int GetId() const{ return m_nId; } + //static int GetSafeId(const EditNode* node) { return node ? node->m_nId : 0; } CAppNodeGroupHandle GetGroup() const; + //static CAppNodeGroupHandle GetGroup_Safe(const EditNode* node); bool IsTopInGroup() const; + //static bool IsTopInGroup_Safe(const EditNode* node); }; //! 拡張構造体 @@ -129,9 +131,25 @@ class CAppNodeManager : public TSingleton{ HWND GetNextTab(HWND hWndCur); // Close した時の次のWindowを取得する(タブまとめ表示の場合) 2013/4/10 Uchi }; -inline CAppNodeGroupHandle EditNode::GetGroup() const{ if(this)return m_nGroup; else return 0; } +inline CAppNodeGroupHandle EditNode::GetGroup() const{ return m_nGroup; } +#if 0 +inline CAppNodeGroupHandle EditNode::GetGroup_Safe(const EditNode* node) +{ + if (node) + return node->m_nGroup; + return 0; +} +#endif -inline bool EditNode::IsTopInGroup() const{ return this && (CAppNodeGroupHandle(m_nGroup).GetEditNodeAt(0) == this); } +inline bool EditNode::IsTopInGroup() const{ return (CAppNodeGroupHandle(m_nGroup).GetEditNodeAt(0) == this); } +#if 0 +inline bool EditNode::IsTopInGroup_Safe(const EditNode* node) +{ + if (node) + return node->IsTopInGroup(); + return false; +} +#endif inline CAppNodeHandle::CAppNodeHandle(HWND hwnd) { diff --git a/sakura_core/mfclike/CMyWnd.h b/sakura_core/mfclike/CMyWnd.h index 7a4e434ba0..c4a64f7c02 100644 --- a/sakura_core/mfclike/CMyWnd.h +++ b/sakura_core/mfclike/CMyWnd.h @@ -36,7 +36,7 @@ class CMyWnd{ void SetHwnd(HWND hwnd){ m_hWnd = hwnd; } HWND GetHwnd() const{ return m_hWnd; } - HWND GetSafeHwnd() const{ return this?m_hWnd:NULL; } + //static HWND GetSafeHwnd(const CMyWnd* wnd) { return wnd ? wnd->m_hWnd : NULL; } void InvalidateRect(LPCRECT lpRect, BOOL bErase = TRUE){ ::InvalidateRect(m_hWnd, lpRect, bErase); } int ScrollWindowEx(int dx, int dy, const RECT* prcScroll, const RECT* prcClip, HRGN hrgnUpdate, RECT* prcUpdate, UINT uFlags) { diff --git a/sakura_core/print/CPrintPreview.h b/sakura_core/print/CPrintPreview.h index 043794054a..0eaea84062 100644 --- a/sakura_core/print/CPrintPreview.h +++ b/sakura_core/print/CPrintPreview.h @@ -86,9 +86,13 @@ class CPrintPreview { void DestroyPrintPreviewControls( void ); void SetFocusToPrintPreviewBar( void ); - HWND GetPrintPreviewBarHANDLE( void ){ return m_hwndPrintPreviewBar; } - HWND GetPrintPreviewBarHANDLE_Safe() const{ if(!this)return NULL; else return m_hwndPrintPreviewBar; } //!< thisがNULLでも実行できる版。2007.10.29 kobake - + HWND GetPrintPreviewBarHANDLE( void ){ return m_hwndPrintPreviewBar; } + static HWND GetPrintPreviewBarHANDLE_Safe(const CPrintPreview *preview) { + if (preview) + return preview->m_hwndPrintPreviewBar; + return NULL; + } + // PrintPreviewバーのメッセージ処理。 // まずPrintPreviewBar_DlgProcにメッセージが届き、DispatchEvent_PPBに転送する仕組み static INT_PTR CALLBACK PrintPreviewBar_DlgProc( diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index 31a2ec049b..f335fc79ea 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -1236,7 +1236,7 @@ bool CEditView::IsCurrentPositionURL( &ptXY ); CLogicInt nLineLen; - const wchar_t* pLine = m_pcEditDoc->m_cDocLineMgr.GetLine(ptXY.GetY2())->GetDocLineStrWithEOL(&nLineLen); //2007.10.09 kobake レイアウト・ロジック混在バグ修正 + const wchar_t* pLine = CDocLine::GetDocLineStrWithEOL_Safe(m_pcEditDoc->m_cDocLineMgr.GetLine(ptXY.GetY2()), &nLineLen); //2007.10.09 kobake レイアウト・ロジック混在バグ修正 bool bMatch; int nMatchColor; diff --git a/sakura_core/view/CEditView_Paint.cpp b/sakura_core/view/CEditView_Paint.cpp index 9d56f6968f..f50030af5c 100644 --- a/sakura_core/view/CEditView_Paint.cpp +++ b/sakura_core/view/CEditView_Paint.cpp @@ -940,12 +940,12 @@ bool CEditView::DrawLogicLine( bDispEOF = DrawLayoutLine(pInfo); //行を進める - CLogicInt nOldLogicLineNo = pInfo->m_pDispPos->GetLayoutRef()->GetLogicLineNo(); + CLogicInt nOldLogicLineNo = CLayout::GetLogicLineNo_Safe(pInfo->m_pDispPos->GetLayoutRef()); pInfo->m_pDispPos->ForwardDrawLine(1); //描画Y座標++ pInfo->m_pDispPos->ForwardLayoutLineRef(1); //レイアウト行++ // ロジック行を描画し終わったら抜ける - if(pInfo->m_pDispPos->GetLayoutRef()->GetLogicLineNo()!=nOldLogicLineNo){ + if(CLayout::GetLogicLineNo_Safe(pInfo->m_pDispPos->GetLayoutRef()) != nOldLogicLineNo){ break; } @@ -979,7 +979,7 @@ bool CEditView::DrawLayoutLine(SColorStrategyInfo* pInfo) //文字列参照 const CDocLine* pcDocLine = pInfo->GetDocLine(); - CStringRef cLineStr = pcDocLine->GetStringRefWithEOL(); + CStringRef cLineStr = CDocLine::GetStringRefWithEOL_Safe(pcDocLine); // 描画範囲外の場合は色切替だけで抜ける if(pInfo->m_pDispPos->GetDrawPos().y < GetTextArea().GetAreaTop()){ diff --git a/sakura_core/view/colors/CColorStrategy.cpp b/sakura_core/view/colors/CColorStrategy.cpp index 3e5e4805e0..a03b660e09 100644 --- a/sakura_core/view/colors/CColorStrategy.cpp +++ b/sakura_core/view/colors/CColorStrategy.cpp @@ -171,13 +171,13 @@ void SColorStrategyInfo::DoChangeColor(CColor3Setting *pcColor) }else if(m_pStrategyFound){ m_cIndex.eColorIndex = m_pStrategyFound->GetStrategyColor(); }else{ - m_cIndex.eColorIndex = m_pStrategy->GetStrategyColorSafe(); + m_cIndex.eColorIndex = CColorStrategy::GetStrategyColorSafe(m_pStrategy); } if(m_pStrategyFound){ m_cIndex.eColorIndex2 = m_pStrategyFound->GetStrategyColor(); }else{ - m_cIndex.eColorIndex2 = m_pStrategy->GetStrategyColorSafe(); + m_cIndex.eColorIndex2 = CColorStrategy::GetStrategyColorSafe(m_pStrategy); } m_cIndex.eColorIndexBg = m_colorIdxBackLine; diff --git a/sakura_core/view/colors/CColorStrategy.h b/sakura_core/view/colors/CColorStrategy.h index 5e32e64dd7..5e838f2100 100644 --- a/sakura_core/view/colors/CColorStrategy.h +++ b/sakura_core/view/colors/CColorStrategy.h @@ -124,7 +124,12 @@ struct SColorStrategyInfo{ } const CDocLine* GetDocLine() const { - return m_pDispPos->GetLayoutRef()->GetDocLineRef(); + const CLayout* layout = m_pDispPos->GetLayoutRef(); + + if (layout) { + return layout->GetDocLineRef(); + } + return NULL; } const CLayout* GetLayout() const { @@ -157,10 +162,15 @@ class CColorStrategy{ } //#######ラップ - EColorIndexType GetStrategyColorSafe() const{ if(this)return GetStrategyColor(); else return COLORIDX_TEXT; } - CLayoutColorInfo* GetStrategyColorInfoSafe() const{ - if(this){ - return GetStrategyColorInfo(); + static EColorIndexType GetStrategyColorSafe(const CColorStrategy *strategy) { + if (strategy) { + return strategy->GetStrategyColor(); + } + return COLORIDX_TEXT; + } + static CLayoutColorInfo* GetStrategyColorInfoSafe(const CColorStrategy *strategy) { + if (strategy) { + return strategy->GetStrategyColorInfo(); } return NULL; } diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index 023aca11a0..86f7eb0a07 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -1077,7 +1077,7 @@ void CEditWnd::MessageLoop( void ) if(ret==-1)break; //GetMessage失敗 //ダイアログメッセージ - if( MyIsDialogMessage( m_pPrintPreview->GetPrintPreviewBarHANDLE_Safe(), &msg ) ){} //!< 印刷プレビュー 操作バー + if( MyIsDialogMessage( CPrintPreview::GetPrintPreviewBarHANDLE_Safe(m_pPrintPreview), &msg ) ){} //!< 印刷プレビュー 操作バー else if( MyIsDialogMessage( m_cDlgFind.GetHwnd(), &msg ) ){} //!<「検索」ダイアログ else if( MyIsDialogMessage( m_cDlgFuncList.GetHwnd(), &msg ) ){} //!<「アウトライン」ダイアログ else if( MyIsDialogMessage( m_cDlgReplace.GetHwnd(), &msg ) ){} //!<「置換」ダイアログ @@ -4575,8 +4575,8 @@ BOOL CEditWnd::UpdateTextWrap( void ) void CEditWnd::ChangeLayoutParam( bool bShowProgress, CKetaXInt nTabSize, int nTsvMode, CKetaXInt nMaxLineKetas ) { HWND hwndProgress = NULL; - if( bShowProgress && NULL != this ){ - hwndProgress = this->m_cStatusBar.GetProgressHwnd(); + if( bShowProgress ){ + hwndProgress = m_cStatusBar.GetProgressHwnd(); // Status Barが表示されていないときはm_hwndProgressBar == NULL } From 1a3e380374d02675f47dd55ed204abbc1635e502 Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Mon, 17 Aug 2020 10:07:27 +0900 Subject: [PATCH 0053/1024] Restore "this" check Restore "this" check for safety on VC++. Add TODO comments for the future work. --- sakura_core/doc/layout/CLayout.h | 4 ++-- sakura_core/doc/logic/CDocLine.h | 19 ++++++++++++++----- sakura_core/env/CAppNodeManager.h | 20 ++++++++------------ sakura_core/mfclike/CMyWnd.h | 2 +- sakura_core/window/CEditWnd.cpp | 2 +- 5 files changed, 26 insertions(+), 21 deletions(-) diff --git a/sakura_core/doc/layout/CLayout.h b/sakura_core/doc/layout/CLayout.h index 4a1dc8d3fa..8a6c166042 100644 --- a/sakura_core/doc/layout/CLayout.h +++ b/sakura_core/doc/layout/CLayout.h @@ -66,7 +66,7 @@ class CLayout CLayoutInt GetIndent() const { return m_nIndent; } //!< このレイアウト行のインデントサイズを取得。単位は半角文字。 CMemoryIterator用 //取得インターフェース - CLogicInt GetLogicLineNo() const{ return m_ptLogicPos.GetY2(); } + CLogicInt GetLogicLineNo() const{ if(this)return m_ptLogicPos.GetY2(); else return CLogicInt(-1); } //$$$高速化 // TODO: Remove "this" check static CLogicInt GetLogicLineNo_Safe(const CLayout* layout) { if (layout) return layout->m_ptLogicPos.GetY2(); @@ -103,7 +103,7 @@ class CLayout void _SetNextLayout(CLayout* pcLayout){ m_pNext = pcLayout; } //実データ参照 - const CDocLine* GetDocLineRef() const{ return m_pCDocLine; } + const CDocLine* GetDocLineRef() const{ if(this)return m_pCDocLine; else return NULL; } //$$note:高速化 // TODO: Remove "this" check //その他属性参照 const CEol& GetLayoutEol() const{ return m_cEol; } diff --git a/sakura_core/doc/logic/CDocLine.h b/sakura_core/doc/logic/CDocLine.h index 389102fe8e..54b96572df 100644 --- a/sakura_core/doc/logic/CDocLine.h +++ b/sakura_core/doc/logic/CDocLine.h @@ -56,10 +56,14 @@ class CDocLine{ return p; } #endif - const wchar_t* GetDocLineStrWithEOL(CLogicInt* pnLen) const //###仮の名前、仮の対処 + const wchar_t* GetDocLineStrWithEOL(CLogicInt* pnLen) const //###仮の名前、仮の対処 { - *pnLen = GetLengthWithEOL(); - return GetPtr(); + if(this){ // TODO: Remove "this" check + *pnLen = GetLengthWithEOL(); return GetPtr(); + } + else{ + *pnLen = 0; return NULL; + } } static const wchar_t* GetDocLineStrWithEOL_Safe(const CDocLine* docline, CLogicInt* pnLen) //###仮の名前、仮の対処 { @@ -72,12 +76,17 @@ class CDocLine{ } CStringRef GetStringRefWithEOL() const //###仮の名前、仮の対処 { - return CStringRef(GetPtr(), GetLengthWithEOL()); + if(this){ // TODO: Remove "this" check + return CStringRef(GetPtr(),GetLengthWithEOL()); + } + else{ + return CStringRef(NULL,0); + } } static CStringRef GetStringRefWithEOL_Safe(const CDocLine* docline) //###仮の名前、仮の対処 { if(docline){ - return CStringRef(docline->GetPtr(), docline->GetLengthWithEOL()); + return docline->GetStringRefWithEOL(); } else{ return CStringRef(NULL, 0); diff --git a/sakura_core/env/CAppNodeManager.h b/sakura_core/env/CAppNodeManager.h index 27d0d6062c..87dcc0c478 100644 --- a/sakura_core/env/CAppNodeManager.h +++ b/sakura_core/env/CAppNodeManager.h @@ -41,14 +41,14 @@ struct EditNode { UINT m_showCmdRestore; //!< 元のサイズに戻すときのサイズ種別 //@@@ 2007.06.20 ryoji BOOL m_bClosing; //!< 終了中か(「最後のファイルを閉じても(無題)を残す」用) //@@@ 2007.06.20 ryoji - HWND GetHwnd() const{ return m_hWnd; } - //static HWND GetSafeHwnd(const EditNode* node) { return node ? node->m_hWnd : NULL; } - int GetId() const{ return m_nId; } - //static int GetSafeId(const EditNode* node) { return node ? node->m_nId : 0; } + HWND GetHwnd() const{ if(this)return m_hWnd; else return NULL; } // TODO: Remove "this" check + static HWND GetSafeHwnd(const EditNode* node) { return node ? node->m_hWnd : NULL; } + int GetId() const{ if(this)return m_nId; else return 0; } // TODO: Remove "this" check + static int GetSafeId(const EditNode* node) { return node ? node->m_nId : 0; } CAppNodeGroupHandle GetGroup() const; - //static CAppNodeGroupHandle GetGroup_Safe(const EditNode* node); + static CAppNodeGroupHandle GetGroup_Safe(const EditNode* node); bool IsTopInGroup() const; - //static bool IsTopInGroup_Safe(const EditNode* node); + static bool IsTopInGroup_Safe(const EditNode* node); }; //! 拡張構造体 @@ -131,25 +131,21 @@ class CAppNodeManager : public TSingleton{ HWND GetNextTab(HWND hWndCur); // Close した時の次のWindowを取得する(タブまとめ表示の場合) 2013/4/10 Uchi }; -inline CAppNodeGroupHandle EditNode::GetGroup() const{ return m_nGroup; } -#if 0 +inline CAppNodeGroupHandle EditNode::GetGroup() const{ if(this)return m_nGroup; else return 0; } // TODO: Remove "this" check inline CAppNodeGroupHandle EditNode::GetGroup_Safe(const EditNode* node) { if (node) return node->m_nGroup; return 0; } -#endif -inline bool EditNode::IsTopInGroup() const{ return (CAppNodeGroupHandle(m_nGroup).GetEditNodeAt(0) == this); } -#if 0 +inline bool EditNode::IsTopInGroup() const{ return this && (CAppNodeGroupHandle(m_nGroup).GetEditNodeAt(0) == this); } // TODO: Remove "this" check inline bool EditNode::IsTopInGroup_Safe(const EditNode* node) { if (node) return node->IsTopInGroup(); return false; } -#endif inline CAppNodeHandle::CAppNodeHandle(HWND hwnd) { diff --git a/sakura_core/mfclike/CMyWnd.h b/sakura_core/mfclike/CMyWnd.h index c4a64f7c02..18d39e1f84 100644 --- a/sakura_core/mfclike/CMyWnd.h +++ b/sakura_core/mfclike/CMyWnd.h @@ -36,7 +36,7 @@ class CMyWnd{ void SetHwnd(HWND hwnd){ m_hWnd = hwnd; } HWND GetHwnd() const{ return m_hWnd; } - //static HWND GetSafeHwnd(const CMyWnd* wnd) { return wnd ? wnd->m_hWnd : NULL; } + static HWND GetSafeHwnd(const CMyWnd* wnd) { return wnd ? wnd->m_hWnd : NULL; } void InvalidateRect(LPCRECT lpRect, BOOL bErase = TRUE){ ::InvalidateRect(m_hWnd, lpRect, bErase); } int ScrollWindowEx(int dx, int dy, const RECT* prcScroll, const RECT* prcClip, HRGN hrgnUpdate, RECT* prcUpdate, UINT uFlags) { diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index 86f7eb0a07..ec62dbe04f 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -4575,7 +4575,7 @@ BOOL CEditWnd::UpdateTextWrap( void ) void CEditWnd::ChangeLayoutParam( bool bShowProgress, CKetaXInt nTabSize, int nTsvMode, CKetaXInt nMaxLineKetas ) { HWND hwndProgress = NULL; - if( bShowProgress ){ + if( bShowProgress && NULL != this ){ // TODO: Remove "this" check hwndProgress = m_cStatusBar.GetProgressHwnd(); // Status Barが表示されていないときはm_hwndProgressBar == NULL } From 4fa4d4bcf13a3ce5b1f1d3ad0c694075f0d8b0a0 Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Tue, 18 Aug 2020 11:59:10 +0900 Subject: [PATCH 0054/1024] Use English LangID for English resource Use 0x409 (English US) instead of 0x411 (Japanese). --- sakura_lang_en_US/sakura_lang_en_US.vcxproj | 2 +- sakura_lang_en_US/sakura_lang_rc.rc | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sakura_lang_en_US/sakura_lang_en_US.vcxproj b/sakura_lang_en_US/sakura_lang_en_US.vcxproj index 765ef087e5..b0767188e0 100644 --- a/sakura_lang_en_US/sakura_lang_en_US.vcxproj +++ b/sakura_lang_en_US/sakura_lang_en_US.vcxproj @@ -81,7 +81,7 @@ ..\sakura_core;$(OutDir);%(AdditionalIncludeDirectories) - 0x0411 + 0x0409 /c 65001 diff --git a/sakura_lang_en_US/sakura_lang_rc.rc b/sakura_lang_en_US/sakura_lang_rc.rc index 72178c04ff..51aa90e89b 100644 --- a/sakura_lang_en_US/sakura_lang_rc.rc +++ b/sakura_lang_en_US/sakura_lang_rc.rc @@ -2149,7 +2149,7 @@ VS_VERSION_INFO VERSIONINFO BEGIN BLOCK "StringFileInfo" BEGIN - BLOCK "041104b0" + BLOCK "040904b0" BEGIN VALUE "Comments", "This is free software\0" VALUE "CompanyName", "Project: Sakura-Editor\0" @@ -2165,7 +2165,7 @@ BEGIN END BLOCK "VarFileInfo" BEGIN - VALUE "Translation", 0x411, 1200 + VALUE "Translation", 0x409, 1200 END END From 016c28d2f417ddc7f5b4acc558777b2101022602 Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Wed, 19 Aug 2020 11:15:25 +0900 Subject: [PATCH 0055/1024] Use AFX_TARG_ENU instead of AFX_TARG_JPN --- sakura_lang_en_US/sakura_lang_rc.rc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_lang_en_US/sakura_lang_rc.rc b/sakura_lang_en_US/sakura_lang_rc.rc index 51aa90e89b..ada6816e7a 100644 --- a/sakura_lang_en_US/sakura_lang_rc.rc +++ b/sakura_lang_en_US/sakura_lang_rc.rc @@ -29,7 +29,7 @@ /* LMP (Lucien Murray-Pitts) : 2011-02-26 Added Basic English Translation Resources */ -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN) +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) #ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT #endif //_WIN32 From 7a9c6cc63d01eb7ff890d0403330e70c007330f3 Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Wed, 19 Aug 2020 13:28:58 +0900 Subject: [PATCH 0056/1024] Fix sublang ID --- sakura_lang_en_US/sakura_lang_rc.rc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_lang_en_US/sakura_lang_rc.rc b/sakura_lang_en_US/sakura_lang_rc.rc index ada6816e7a..88abdab1fe 100644 --- a/sakura_lang_en_US/sakura_lang_rc.rc +++ b/sakura_lang_en_US/sakura_lang_rc.rc @@ -31,7 +31,7 @@ #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) #ifdef _WIN32 -LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US #endif //_WIN32 #define S_COPYRIGHT "Copyright (C) 1998-2020 by Norio Nakatani & Collaborators" From 8b76981d633560b7748d5fe8cef7d5b1cb876723 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Thu, 20 Aug 2020 10:08:45 +0900 Subject: [PATCH 0057/1024] =?UTF-8?q?GCC=E3=81=AEPCH=E3=82=92=E5=BE=A9?= =?UTF-8?q?=E6=B4=BB=E3=81=95=E3=81=9B=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/Makefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sakura_core/Makefile b/sakura_core/Makefile index 8f99aa9b2c..53c059d704 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -456,10 +456,13 @@ Funccode_enum.h: $(HEADERMAKE) Funccode_x.hsrc githash.h: cmd /c ..\sakura\githash.bat ../sakura_core +StdAfx.h.gch: githash.h Funccode_enum.h + $(CXX) $(CXXFLAGS) -c StdAfx.h + .cpp.o: $(CXX) $(CXXFLAGS) -o $@ -c $< -$(OBJS): githash.h Funccode_enum.h +$(OBJS): StdAfx.h.gch $(HEADERMAKE): $(HEADERMAKETOOLDIR)/HeaderMake.cpp $(CXX) $(CXXFLAGS:-MMD=) $(HEADERMAKETOOLDIR)/HeaderMake.cpp -o $@ -static-libgcc From f4079f1d5875aecfaa3d639559aa0c49c0c67e9e Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 21 Aug 2020 11:39:46 +0900 Subject: [PATCH 0058/1024] =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=82=AF=E3=83=AB?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=82=AC=E3=83=BC=E3=83=89ps1=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 過去のjsマクロをps1化したもの。 https://sakura-editor.github.io/bbslog/sf/unicode/985.html --- tools/includeGuard/includeGuard.bat | 1 + tools/includeGuard/includeGuard.ps1 | 42 +++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 tools/includeGuard/includeGuard.bat create mode 100644 tools/includeGuard/includeGuard.ps1 diff --git a/tools/includeGuard/includeGuard.bat b/tools/includeGuard/includeGuard.bat new file mode 100644 index 0000000000..d8adbc143d --- /dev/null +++ b/tools/includeGuard/includeGuard.bat @@ -0,0 +1 @@ +powershell -ExecutionPolicy RemoteSigned -File %~dp0includeGuard.ps1 diff --git a/tools/includeGuard/includeGuard.ps1 b/tools/includeGuard/includeGuard.ps1 new file mode 100644 index 0000000000..e1f0e865fc --- /dev/null +++ b/tools/includeGuard/includeGuard.ps1 @@ -0,0 +1,42 @@ +<# +.SYNOPSIS +インクルードガード付加マクロ(powershell版) + +.DESCRIPTION +ヘッダーファイルを検索してインクルードガードを付加します。 + +過去のjsマクロをps1化したpowershellスクリプトです。 +https://sakura-editor.github.io/bbslog/sf/unicode/985.html + +このマクロに引数はありません。 +ファイル内の #pragma once を検索して見つかった位置にインクルードガードを挿入します。 + +.EXAMPLE +PS C:\work\sakura-editor\sakura\sakura_core> ..\tools\includeGuard\includeGuard.ps1 + +カレントディレクトリ配下のヘッダーファイルを検索してインクルードガードを付加します。 +検索対象は 拡張子.h のファイルで、StdAfx.h,sakura_rc.h,String_define.hは除外されます。 + +.LINK +https://github.com/sakura-editor/sakura/pull/1378 +https://sakura-editor.github.io/bbslog/sf/unicode/985.html +#> +$headers = Get-ChildItem -File -Recurse -Include *.h -Exclude StdAfx.h,sakura_rc.h,String_define.h +foreach($header in $headers){ + $lines = Get-Content -Path $header + $filepart = [System.IO.Path]::GetFileNameWithoutExtension($header.Name).ToUpper() -replace "-","_" + $guardPattern = $lines | Select-String -Pattern "SAKURA_${filepart}_\w+_H_" + $match = $lines | Select-String -Pattern "#pragma +once" + if (($match -ne $null) -And ($guardPattern -eq $null)) { + $guidpart = (New-Guid).Guid.ToUpper() -replace "-","_" + $guardkey = "SAKURA_${filepart}_${guidpart}_H_" + $pragmaOnce = $match.LineNumber - 1 + $lines[0..($pragmaOnce - 1)] | Out-File $header -Encoding UTF8 + "#ifndef ${guardkey}" | Out-File $header -Encoding UTF8 -Append + "#define ${guardkey}" | Out-File $header -Encoding UTF8 -Append + $lines[$pragmaOnce..($lines.Length - 1)] | Out-File $header -Encoding UTF8 -Append + "#endif /* ${guardkey} */" | Out-File $header -Encoding UTF8 -Append + } elseif ($guardPattern -eq $null) { + Write-Output $header.FullName + } +} From 14826b42b6743aa774a85e0df47f9bead28f9a25 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 21 Aug 2020 11:39:59 +0900 Subject: [PATCH 0059/1024] =?UTF-8?q?gcc=E3=81=A7PCH=E3=82=92=E5=88=A9?= =?UTF-8?q?=E7=94=A8=E3=81=99=E3=82=8B=E3=81=9F=E3=82=81=E3=81=AB=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E3=82=AF=E3=83=AB=E3=83=BC=E3=83=89=E3=82=AC=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=82=92=E5=BE=A9=E6=B4=BB=E3=81=95=E3=81=9B=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CAutoReloadAgent.h | 3 +++ sakura_core/CAutoSaveAgent.h | 3 +++ sakura_core/CBackupAgent.h | 3 +++ sakura_core/CCodeChecker.h | 3 +++ sakura_core/CDataProfile.h | 3 +++ sakura_core/CDicMgr.h | 3 +++ sakura_core/CEditApp.h | 3 +++ sakura_core/CEol.h | 3 +++ sakura_core/CFileExt.h | 3 +++ sakura_core/CGrepAgent.h | 3 +++ sakura_core/CGrepEnumFileBase.h | 3 +++ sakura_core/CGrepEnumFiles.h | 3 +++ sakura_core/CGrepEnumFilterFiles.h | 3 +++ sakura_core/CGrepEnumFilterFolders.h | 3 +++ sakura_core/CGrepEnumFolders.h | 3 +++ sakura_core/CGrepEnumKeys.h | 3 +++ sakura_core/CHokanMgr.h | 3 +++ sakura_core/CKeyWordSetMgr.h | 3 +++ sakura_core/CLoadAgent.h | 3 +++ sakura_core/CMarkMgr.h | 3 +++ sakura_core/COpe.h | 3 +++ sakura_core/COpeBlk.h | 3 +++ sakura_core/COpeBuf.h | 3 +++ sakura_core/CProfile.h | 3 +++ sakura_core/CPropertyManager.h | 3 +++ sakura_core/CReadManager.h | 3 +++ sakura_core/CRegexKeyword.h | 3 +++ sakura_core/CSaveAgent.h | 3 +++ sakura_core/CSearchAgent.h | 3 +++ sakura_core/CSelectLang.h | 3 +++ sakura_core/CSortedTagJumpList.h | 3 +++ sakura_core/CWriteManager.h | 3 +++ sakura_core/EditInfo.h | 3 +++ sakura_core/GrepInfo.h | 3 +++ sakura_core/_main/CAppMode.h | 3 +++ sakura_core/_main/CCommandLine.h | 3 +++ sakura_core/_main/CControlProcess.h | 3 +++ sakura_core/_main/CControlTray.h | 3 +++ sakura_core/_main/CMutex.h | 3 +++ sakura_core/_main/CNormalProcess.h | 3 +++ sakura_core/_main/CProcess.h | 3 +++ sakura_core/_main/CProcessFactory.h | 3 +++ sakura_core/_main/global.h | 3 +++ sakura_core/_os/CClipboard.h | 3 +++ sakura_core/_os/CDropTarget.h | 3 +++ sakura_core/_os/OleTypes.h | 3 +++ sakura_core/apiwrap/CommonControl.h | 3 +++ sakura_core/apiwrap/StdApi.h | 3 +++ sakura_core/apiwrap/StdControl.h | 3 +++ sakura_core/basis/CLaxInteger.h | 3 +++ sakura_core/basis/CMyPoint.h | 3 +++ sakura_core/basis/CMyRect.h | 3 +++ sakura_core/basis/CMySize.h | 3 +++ sakura_core/basis/CMyString.h | 3 +++ sakura_core/basis/CStrictInteger.h | 3 +++ sakura_core/basis/CStrictPoint.h | 3 +++ sakura_core/basis/CStrictRange.h | 3 +++ sakura_core/basis/CStrictRect.h | 3 +++ sakura_core/basis/SakuraBasis.h | 3 +++ sakura_core/basis/primitive.h | 3 +++ sakura_core/charset/CCesu8.h | 3 +++ sakura_core/charset/CCodeBase.h | 3 +++ sakura_core/charset/CCodeFactory.h | 3 +++ sakura_core/charset/CCodeMediator.h | 3 +++ sakura_core/charset/CCodePage.h | 3 +++ sakura_core/charset/CESI.h | 3 +++ sakura_core/charset/CEuc.h | 3 +++ sakura_core/charset/CJis.h | 3 +++ sakura_core/charset/CLatin1.h | 3 +++ sakura_core/charset/CShiftJis.h | 3 +++ sakura_core/charset/CUnicode.h | 3 +++ sakura_core/charset/CUnicodeBe.h | 3 +++ sakura_core/charset/CUtf7.h | 3 +++ sakura_core/charset/CUtf8.h | 3 +++ sakura_core/charset/CharPointer.h | 3 +++ sakura_core/charset/charcode.h | 3 +++ sakura_core/charset/charset.h | 3 +++ sakura_core/charset/codechecker.h | 3 +++ sakura_core/charset/codeutil.h | 3 +++ sakura_core/charset/icu4c/CharsetDetector.h | 3 +++ sakura_core/cmd/CViewCommander.h | 3 +++ sakura_core/cmd/CViewCommander_inline.h | 3 +++ sakura_core/config/app_constants.h | 3 +++ sakura_core/config/build_config.h | 3 +++ sakura_core/config/maxdata.h | 3 +++ sakura_core/config/system_constants.h | 3 +++ sakura_core/convert/CConvert.h | 3 +++ sakura_core/convert/CConvert_HaneisuToZeneisu.h | 3 +++ sakura_core/convert/CConvert_HankataToZenhira.h | 3 +++ sakura_core/convert/CConvert_HankataToZenkata.h | 3 +++ sakura_core/convert/CConvert_SpaceToTab.h | 3 +++ sakura_core/convert/CConvert_TabToSpace.h | 3 +++ sakura_core/convert/CConvert_ToHankaku.h | 3 +++ sakura_core/convert/CConvert_ToLower.h | 3 +++ sakura_core/convert/CConvert_ToUpper.h | 3 +++ sakura_core/convert/CConvert_ToZenhira.h | 3 +++ sakura_core/convert/CConvert_ToZenkata.h | 3 +++ sakura_core/convert/CConvert_Trim.h | 3 +++ sakura_core/convert/CConvert_ZeneisuToHaneisu.h | 3 +++ sakura_core/convert/CConvert_ZenkataToHankata.h | 3 +++ sakura_core/convert/CDecode.h | 3 +++ sakura_core/convert/CDecode_Base64Decode.h | 3 +++ sakura_core/convert/CDecode_UuDecode.h | 3 +++ sakura_core/convert/convert_util.h | 3 +++ sakura_core/convert/convert_util2.h | 3 +++ sakura_core/debug/CRunningTimer.h | 3 +++ sakura_core/debug/Debug1.h | 3 +++ sakura_core/debug/Debug2.h | 3 +++ sakura_core/debug/Debug3.h | 3 +++ sakura_core/dlg/CDialog.h | 3 +++ sakura_core/dlg/CDlgAbout.h | 3 +++ sakura_core/dlg/CDlgCancel.h | 3 +++ sakura_core/dlg/CDlgCompare.h | 3 +++ sakura_core/dlg/CDlgCtrlCode.h | 3 +++ sakura_core/dlg/CDlgDiff.h | 3 +++ sakura_core/dlg/CDlgExec.h | 3 +++ sakura_core/dlg/CDlgFavorite.h | 3 +++ sakura_core/dlg/CDlgFileUpdateQuery.h | 3 +++ sakura_core/dlg/CDlgFind.h | 3 +++ sakura_core/dlg/CDlgGrep.h | 3 +++ sakura_core/dlg/CDlgGrepReplace.h | 3 +++ sakura_core/dlg/CDlgInput1.h | 3 +++ sakura_core/dlg/CDlgJump.h | 3 +++ sakura_core/dlg/CDlgOpenFile.h | 3 +++ sakura_core/dlg/CDlgPluginOption.h | 3 +++ sakura_core/dlg/CDlgPrintSetting.h | 3 +++ sakura_core/dlg/CDlgProfileMgr.h | 3 +++ sakura_core/dlg/CDlgProperty.h | 3 +++ sakura_core/dlg/CDlgReplace.h | 3 +++ sakura_core/dlg/CDlgSetCharSet.h | 3 +++ sakura_core/dlg/CDlgTagJumpList.h | 3 +++ sakura_core/dlg/CDlgTagsMake.h | 3 +++ sakura_core/dlg/CDlgWinSize.h | 3 +++ sakura_core/dlg/CDlgWindowList.h | 3 +++ sakura_core/doc/CBlockComment.h | 3 +++ sakura_core/doc/CDocEditor.h | 3 +++ sakura_core/doc/CDocFile.h | 3 +++ sakura_core/doc/CDocFileOperation.h | 3 +++ sakura_core/doc/CDocListener.h | 3 +++ sakura_core/doc/CDocLocker.h | 3 +++ sakura_core/doc/CDocOutline.h | 3 +++ sakura_core/doc/CDocReader.h | 3 +++ sakura_core/doc/CDocType.h | 3 +++ sakura_core/doc/CDocTypeSetting.h | 3 +++ sakura_core/doc/CDocVisitor.h | 3 +++ sakura_core/doc/CEditDoc.h | 3 +++ sakura_core/doc/CLineComment.h | 3 +++ sakura_core/doc/layout/CLayout.h | 3 +++ sakura_core/doc/layout/CLayoutExInfo.h | 3 +++ sakura_core/doc/layout/CLayoutMgr.h | 3 +++ sakura_core/doc/layout/CTsvModeInfo.h | 3 +++ sakura_core/doc/logic/CDocLine.h | 3 +++ sakura_core/doc/logic/CDocLineMgr.h | 3 +++ sakura_core/docplus/CBookmarkManager.h | 3 +++ sakura_core/docplus/CDiffManager.h | 3 +++ sakura_core/docplus/CFuncListManager.h | 3 +++ sakura_core/docplus/CModifyManager.h | 3 +++ sakura_core/env/CAppNodeManager.h | 3 +++ sakura_core/env/CDocTypeManager.h | 3 +++ sakura_core/env/CFileNameManager.h | 3 +++ sakura_core/env/CFormatManager.h | 3 +++ sakura_core/env/CHelpManager.h | 3 +++ sakura_core/env/CSakuraEnvironment.h | 3 +++ sakura_core/env/CSearchKeywordManager.h | 3 +++ sakura_core/env/CShareData.h | 3 +++ sakura_core/env/CShareData_IO.h | 3 +++ sakura_core/env/CTagJumpManager.h | 3 +++ sakura_core/env/CommonSetting.h | 3 +++ sakura_core/env/DLLSHAREDATA.h | 3 +++ sakura_core/extmodule/CBregexp.h | 3 +++ sakura_core/extmodule/CBregexpDll2.h | 3 +++ sakura_core/extmodule/CDllHandler.h | 3 +++ sakura_core/extmodule/CHtmlHelp.h | 3 +++ sakura_core/extmodule/CIcu4cI18n.h | 3 +++ sakura_core/extmodule/CMigemo.h | 3 +++ sakura_core/extmodule/CUxTheme.h | 3 +++ sakura_core/func/CFuncKeyWnd.h | 3 +++ sakura_core/func/CFuncLookup.h | 3 +++ sakura_core/func/CKeyBind.h | 3 +++ sakura_core/func/Funccode.h | 3 +++ sakura_core/io/CBinaryStream.h | 3 +++ sakura_core/io/CFile.h | 3 +++ sakura_core/io/CFileLoad.h | 3 +++ sakura_core/io/CIoBridge.h | 3 +++ sakura_core/io/CStream.h | 3 +++ sakura_core/io/CTextStream.h | 3 +++ sakura_core/io/CZipFile.h | 3 +++ sakura_core/macro/CCookieManager.h | 3 +++ sakura_core/macro/CEditorIfObj.h | 3 +++ sakura_core/macro/CIfObj.h | 3 +++ sakura_core/macro/CKeyMacroMgr.h | 3 +++ sakura_core/macro/CMacro.h | 3 +++ sakura_core/macro/CMacroFactory.h | 3 +++ sakura_core/macro/CMacroManagerBase.h | 3 +++ sakura_core/macro/CPPA.h | 3 +++ sakura_core/macro/CPPAMacroMgr.h | 3 +++ sakura_core/macro/CSMacroMgr.h | 3 +++ sakura_core/macro/CWSH.h | 3 +++ sakura_core/macro/CWSHIfObj.h | 3 +++ sakura_core/macro/CWSHManager.h | 3 +++ sakura_core/mem/CMemory.h | 3 +++ sakura_core/mem/CMemoryIterator.h | 3 +++ sakura_core/mem/CNative.h | 3 +++ sakura_core/mem/CNativeA.h | 3 +++ sakura_core/mem/CNativeW.h | 3 +++ sakura_core/mem/CPoolResource.h | 3 +++ sakura_core/mem/CRecycledBuffer.h | 3 +++ sakura_core/mfclike/CMyWnd.h | 3 +++ sakura_core/outline/CDlgFileTree.h | 3 +++ sakura_core/outline/CDlgFuncList.h | 3 +++ sakura_core/outline/CFuncInfo.h | 3 +++ sakura_core/outline/CFuncInfoArr.h | 3 +++ sakura_core/parse/CWordParse.h | 3 +++ sakura_core/plugin/CComplementIfObj.h | 3 +++ sakura_core/plugin/CDllPlugin.h | 3 +++ sakura_core/plugin/CJackManager.h | 3 +++ sakura_core/plugin/COutlineIfObj.h | 3 +++ sakura_core/plugin/CPlugin.h | 3 +++ sakura_core/plugin/CPluginIfObj.h | 3 +++ sakura_core/plugin/CPluginManager.h | 3 +++ sakura_core/plugin/CSmartIndentIfObj.h | 3 +++ sakura_core/plugin/CWSHPlugin.h | 3 +++ sakura_core/print/CPrint.h | 3 +++ sakura_core/print/CPrintPreview.h | 3 +++ sakura_core/prop/CPropCommon.h | 3 +++ sakura_core/recent/CMRUFile.h | 3 +++ sakura_core/recent/CMRUFolder.h | 3 +++ sakura_core/recent/CMruListener.h | 3 +++ sakura_core/recent/CRecent.h | 3 +++ sakura_core/recent/CRecentCmd.h | 3 +++ sakura_core/recent/CRecentCurDir.h | 3 +++ sakura_core/recent/CRecentEditNode.h | 3 +++ sakura_core/recent/CRecentExceptMru.h | 3 +++ sakura_core/recent/CRecentExcludeFile.h | 3 +++ sakura_core/recent/CRecentExcludeFolder.h | 3 +++ sakura_core/recent/CRecentFile.h | 3 +++ sakura_core/recent/CRecentFolder.h | 3 +++ sakura_core/recent/CRecentGrepFile.h | 3 +++ sakura_core/recent/CRecentGrepFolder.h | 3 +++ sakura_core/recent/CRecentImp.h | 3 +++ sakura_core/recent/CRecentReplace.h | 3 +++ sakura_core/recent/CRecentSearch.h | 3 +++ sakura_core/recent/CRecentTagjumpKeyword.h | 3 +++ sakura_core/typeprop/CDlgKeywordSelect.h | 3 +++ sakura_core/typeprop/CDlgSameColor.h | 3 +++ sakura_core/typeprop/CDlgTypeAscertain.h | 3 +++ sakura_core/typeprop/CDlgTypeList.h | 3 +++ sakura_core/typeprop/CImpExpManager.h | 3 +++ sakura_core/typeprop/CPropTypes.h | 3 +++ sakura_core/types/CType.h | 3 +++ sakura_core/types/CTypeSupport.h | 3 +++ sakura_core/uiparts/CGraphics.h | 3 +++ sakura_core/uiparts/CImageListMgr.h | 3 +++ sakura_core/uiparts/CMenuDrawer.h | 3 +++ sakura_core/uiparts/CSoundSet.h | 3 +++ sakura_core/uiparts/CVisualProgress.h | 3 +++ sakura_core/uiparts/CWaitCursor.h | 3 +++ sakura_core/uiparts/HandCursor.h | 3 +++ sakura_core/util/MessageBoxF.h | 3 +++ sakura_core/util/RegKey.h | 3 +++ sakura_core/util/StaticType.h | 3 +++ sakura_core/util/container.h | 3 +++ sakura_core/util/design_template.h | 3 +++ sakura_core/util/file.h | 3 +++ sakura_core/util/format.h | 3 +++ sakura_core/util/input.h | 3 +++ sakura_core/util/module.h | 3 +++ sakura_core/util/ole_convert.h | 3 +++ sakura_core/util/os.h | 3 +++ sakura_core/util/relation_tool.h | 3 +++ sakura_core/util/shell.h | 3 +++ sakura_core/util/std_macro.h | 3 +++ sakura_core/util/string_ex.h | 3 +++ sakura_core/util/string_ex2.h | 3 +++ sakura_core/util/tchar_convert.h | 3 +++ sakura_core/util/tchar_printf.h | 3 +++ sakura_core/util/window.h | 3 +++ sakura_core/version.h | 3 +++ sakura_core/view/CCaret.h | 3 +++ sakura_core/view/CEditView.h | 3 +++ sakura_core/view/CEditView_Paint.h | 3 +++ sakura_core/view/CRuler.h | 3 +++ sakura_core/view/CTextArea.h | 3 +++ sakura_core/view/CTextDrawer.h | 3 +++ sakura_core/view/CTextMetrics.h | 3 +++ sakura_core/view/CViewCalc.h | 3 +++ sakura_core/view/CViewFont.h | 3 +++ sakura_core/view/CViewParser.h | 3 +++ sakura_core/view/CViewSelect.h | 3 +++ sakura_core/view/DispPos.h | 3 +++ sakura_core/view/colors/CColorStrategy.h | 3 +++ sakura_core/view/colors/CColor_Comment.h | 3 +++ sakura_core/view/colors/CColor_Found.h | 3 +++ sakura_core/view/colors/CColor_Heredoc.h | 3 +++ sakura_core/view/colors/CColor_KeywordSet.h | 3 +++ sakura_core/view/colors/CColor_Numeric.h | 3 +++ sakura_core/view/colors/CColor_Quote.h | 3 +++ sakura_core/view/colors/CColor_RegexKeyword.h | 3 +++ sakura_core/view/colors/CColor_Url.h | 3 +++ sakura_core/view/colors/EColorIndexType.h | 3 +++ sakura_core/view/figures/CFigureManager.h | 3 +++ sakura_core/view/figures/CFigureStrategy.h | 3 +++ sakura_core/view/figures/CFigure_Comma.h | 3 +++ sakura_core/view/figures/CFigure_CtrlCode.h | 3 +++ sakura_core/view/figures/CFigure_Eol.h | 3 +++ sakura_core/view/figures/CFigure_HanSpace.h | 3 +++ sakura_core/view/figures/CFigure_Tab.h | 3 +++ sakura_core/view/figures/CFigure_ZenSpace.h | 3 +++ sakura_core/window/CAutoScrollWnd.h | 3 +++ sakura_core/window/CEditWnd.h | 3 +++ sakura_core/window/CMainStatusBar.h | 3 +++ sakura_core/window/CMainToolBar.h | 3 +++ sakura_core/window/CSplitBoxWnd.h | 3 +++ sakura_core/window/CSplitterWnd.h | 3 +++ sakura_core/window/CTabWnd.h | 3 +++ sakura_core/window/CTipWnd.h | 3 +++ sakura_core/window/CWnd.h | 3 +++ 317 files changed, 951 insertions(+) diff --git a/sakura_core/CAutoReloadAgent.h b/sakura_core/CAutoReloadAgent.h index 4f5d90f5aa..b9d951a9f8 100644 --- a/sakura_core/CAutoReloadAgent.h +++ b/sakura_core/CAutoReloadAgent.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CAUTORELOADAGENT_6340340B_4677_4748_8240_689427F4AE3D_H_ +#define SAKURA_CAUTORELOADAGENT_6340340B_4677_4748_8240_689427F4AE3D_H_ #pragma once #include "doc/CDocListener.h" @@ -62,3 +64,4 @@ class CAutoReloadAgent : public CDocListenerEx{ int m_nPauseCount; //これが1以上の場合は監視をしない int m_nDelayCount; //未編集で再ロード時の遅延カウンタ }; +#endif /* SAKURA_CAUTORELOADAGENT_6340340B_4677_4748_8240_689427F4AE3D_H_ */ diff --git a/sakura_core/CAutoSaveAgent.h b/sakura_core/CAutoSaveAgent.h index 3d61d15603..2b545cd8f8 100644 --- a/sakura_core/CAutoSaveAgent.h +++ b/sakura_core/CAutoSaveAgent.h @@ -27,6 +27,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CAUTOSAVEAGENT_AB1DD112_42B8_4A93_8E04_C2889F16DC53_H_ +#define SAKURA_CAUTOSAVEAGENT_AB1DD112_42B8_4A93_8E04_C2889F16DC53_H_ #pragma once #include @@ -76,3 +78,4 @@ class CAutoSaveAgent : public CDocListenerEx{ private: CPassiveTimer m_cPassiveTimer; }; +#endif /* SAKURA_CAUTOSAVEAGENT_AB1DD112_42B8_4A93_8E04_C2889F16DC53_H_ */ diff --git a/sakura_core/CBackupAgent.h b/sakura_core/CBackupAgent.h index 6c3257fbef..f186bae50e 100644 --- a/sakura_core/CBackupAgent.h +++ b/sakura_core/CBackupAgent.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CBACKUPAGENT_26C06E20_DC8E_4AAD_BA63_F1872A2D7FFA_H_ +#define SAKURA_CBACKUPAGENT_26C06E20_DC8E_4AAD_BA63_F1872A2D7FFA_H_ #pragma once #include "doc/CDocListener.h" @@ -34,3 +36,4 @@ class CBackupAgent : public CDocListenerEx{ int MakeBackUp( const WCHAR* target_file ); //!< バックアップの作成 bool FormatBackUpPath( WCHAR*, size_t, const WCHAR* ); //!< バックアップパスの作成 2005.11.21 aroka }; +#endif /* SAKURA_CBACKUPAGENT_26C06E20_DC8E_4AAD_BA63_F1872A2D7FFA_H_ */ diff --git a/sakura_core/CCodeChecker.h b/sakura_core/CCodeChecker.h index d227b16135..21b91f8080 100644 --- a/sakura_core/CCodeChecker.h +++ b/sakura_core/CCodeChecker.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCODECHECKER_44D0ED68_9D9D_4B3E_88F5_185934F5FF0E_H_ +#define SAKURA_CCODECHECKER_44D0ED68_9D9D_4B3E_88F5_185934F5FF0E_H_ #pragma once #include "doc/CDocListener.h" @@ -39,3 +41,4 @@ class CCodeChecker : public CDocListenerEx, public TSingleton{ //ロード時チェック void OnFinalLoad(ELoadResult eLoadResult) override; }; +#endif /* SAKURA_CCODECHECKER_44D0ED68_9D9D_4B3E_88F5_185934F5FF0E_H_ */ diff --git a/sakura_core/CDataProfile.h b/sakura_core/CDataProfile.h index 336997fc09..fd8a2fd5f2 100644 --- a/sakura_core/CDataProfile.h +++ b/sakura_core/CDataProfile.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CDATAPROFILE_401640FD_5B27_454A_B0DE_098E1C4FAEAD_H_ +#define SAKURA_CDATAPROFILE_401640FD_5B27_454A_B0DE_098E1C4FAEAD_H_ #pragma once #include "util/StaticType.h" @@ -221,3 +223,4 @@ bool CDataProfile::IOProfileData( } return ret; } +#endif /* SAKURA_CDATAPROFILE_401640FD_5B27_454A_B0DE_098E1C4FAEAD_H_ */ diff --git a/sakura_core/CDicMgr.h b/sakura_core/CDicMgr.h index 6b1ffc7c43..a24f18bcc2 100644 --- a/sakura_core/CDicMgr.h +++ b/sakura_core/CDicMgr.h @@ -11,6 +11,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CDICMGR_70378DC4_733D_4F64_8D2A_E23C548E19EB_H_ +#define SAKURA_CDICMGR_70378DC4_733D_4F64_8D2A_E23C548E19EB_H_ #pragma once #include @@ -46,3 +48,4 @@ class CDicMgr || 実装ヘルパ関数 */ }; +#endif /* SAKURA_CDICMGR_70378DC4_733D_4F64_8D2A_E23C548E19EB_H_ */ diff --git a/sakura_core/CEditApp.h b/sakura_core/CEditApp.h index 9cfc6e4c4a..392ac023de 100644 --- a/sakura_core/CEditApp.h +++ b/sakura_core/CEditApp.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CEDITAPP_421797BC_DD8E_4209_AAF7_6BDC4D1CAAE9_H_ +#define SAKURA_CEDITAPP_421797BC_DD8E_4209_AAF7_6BDC4D1CAAE9_H_ #pragma once //2007.10.23 kobake 作成 @@ -93,3 +95,4 @@ class CAppExitException : public std::exception{ public: const char* what() const throw(){ return "CAppExitException"; } }; +#endif /* SAKURA_CEDITAPP_421797BC_DD8E_4209_AAF7_6BDC4D1CAAE9_H_ */ diff --git a/sakura_core/CEol.h b/sakura_core/CEol.h index edf3aaf081..336a673117 100644 --- a/sakura_core/CEol.h +++ b/sakura_core/CEol.h @@ -29,6 +29,8 @@ distribution. */ +#ifndef SAKURA_CEOL_036E1E16_7462_46A4_8F59_51D8E171E657_H_ +#define SAKURA_CEOL_036E1E16_7462_46A4_8F59_51D8E171E657_H_ #pragma once #include "_main/global.h" @@ -113,3 +115,4 @@ class CEol{ private: EEolType m_eEolType; //!< 改行コードの種類 }; +#endif /* SAKURA_CEOL_036E1E16_7462_46A4_8F59_51D8E171E657_H_ */ diff --git a/sakura_core/CFileExt.h b/sakura_core/CFileExt.h index ad27a200d0..841c51623f 100644 --- a/sakura_core/CFileExt.h +++ b/sakura_core/CFileExt.h @@ -28,6 +28,8 @@ distribution. */ +#ifndef SAKURA_CFILEEXT_DEFC4B1D_6DA5_4C83_AA7E_198C3E0BC50F_H_ +#define SAKURA_CFILEEXT_DEFC4B1D_6DA5_4C83_AA7E_198C3E0BC50F_H_ #pragma once #include "_main/global.h" @@ -68,3 +70,4 @@ class CFileExt DISALLOW_COPY_AND_ASSIGN(CFileExt); }; +#endif /* SAKURA_CFILEEXT_DEFC4B1D_6DA5_4C83_AA7E_198C3E0BC50F_H_ */ diff --git a/sakura_core/CGrepAgent.h b/sakura_core/CGrepAgent.h index 7ea716a271..f760710e15 100644 --- a/sakura_core/CGrepAgent.h +++ b/sakura_core/CGrepAgent.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CGREPAGENT_97F2B632_71C8_4E4A_AC42_13A6098B248F_H_ +#define SAKURA_CGREPAGENT_97F2B632_71C8_4E4A_AC42_13A6098B248F_H_ #pragma once #include "doc/CDocListener.h" @@ -192,3 +194,4 @@ class CGrepAgent : public CDocListenerEx{ bool m_bGrepMode; //!< Grepモードか bool m_bGrepRunning; //!< Grep処理中 }; +#endif /* SAKURA_CGREPAGENT_97F2B632_71C8_4E4A_AC42_13A6098B248F_H_ */ diff --git a/sakura_core/CGrepEnumFileBase.h b/sakura_core/CGrepEnumFileBase.h index ebfb3b3431..2de8a41384 100644 --- a/sakura_core/CGrepEnumFileBase.h +++ b/sakura_core/CGrepEnumFileBase.h @@ -28,6 +28,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CGREPENUMFILEBASE_6B85547E_13E4_4183_AE06_B4D6395ABC88_H_ +#define SAKURA_CGREPENUMFILEBASE_6B85547E_13E4_4183_AE06_B4D6395ABC88_H_ #pragma once #include @@ -177,3 +179,4 @@ class CGrepEnumFileBase { return found; } }; +#endif /* SAKURA_CGREPENUMFILEBASE_6B85547E_13E4_4183_AE06_B4D6395ABC88_H_ */ diff --git a/sakura_core/CGrepEnumFiles.h b/sakura_core/CGrepEnumFiles.h index eafe83dcc9..58788cbcce 100644 --- a/sakura_core/CGrepEnumFiles.h +++ b/sakura_core/CGrepEnumFiles.h @@ -28,6 +28,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CGREPENUMFILES_0C041F0A_3D17_475F_BA25_26D30E055E9D_H_ +#define SAKURA_CGREPENUMFILES_0C041F0A_3D17_475F_BA25_26D30E055E9D_H_ #pragma once #include "CGrepEnumFileBase.h" @@ -51,3 +53,4 @@ class CGrepEnumFiles : public CGrepEnumFileBase { return FALSE; } }; +#endif /* SAKURA_CGREPENUMFILES_0C041F0A_3D17_475F_BA25_26D30E055E9D_H_ */ diff --git a/sakura_core/CGrepEnumFilterFiles.h b/sakura_core/CGrepEnumFilterFiles.h index 9d1d374fd5..f497e0ca39 100644 --- a/sakura_core/CGrepEnumFilterFiles.h +++ b/sakura_core/CGrepEnumFilterFiles.h @@ -28,6 +28,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CGREPENUMFILTERFILES_48762BD9_D3E4_4D32_8C3A_502A7A6AE85A_H_ +#define SAKURA_CGREPENUMFILTERFILES_48762BD9_D3E4_4D32_8C3A_502A7A6AE85A_H_ #pragma once #include "CGrepEnumFiles.h" @@ -59,3 +61,4 @@ class CGrepEnumFilterFiles final : public CGrepEnumFiles { return CGrepEnumFiles::Enumerates( lpBaseFolder, cGrepEnumKeys.m_vecSearchFileKeys, option, &pExcept ); } }; +#endif /* SAKURA_CGREPENUMFILTERFILES_48762BD9_D3E4_4D32_8C3A_502A7A6AE85A_H_ */ diff --git a/sakura_core/CGrepEnumFilterFolders.h b/sakura_core/CGrepEnumFilterFolders.h index 9ef3181aeb..c3e493b0c0 100644 --- a/sakura_core/CGrepEnumFilterFolders.h +++ b/sakura_core/CGrepEnumFilterFolders.h @@ -28,6 +28,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CGREPENUMFILTERFOLDERS_4EF27C6D_F01D_495F_94A0_E78CC756B09E_H_ +#define SAKURA_CGREPENUMFILTERFOLDERS_4EF27C6D_F01D_495F_94A0_E78CC756B09E_H_ #pragma once #include "CGrepEnumFolders.h" @@ -59,3 +61,4 @@ class CGrepEnumFilterFolders final : public CGrepEnumFolders { return CGrepEnumFolders::Enumerates( lpBaseFolder, cGrepEnumKeys.m_vecSearchFolderKeys, option, &except ); } }; +#endif /* SAKURA_CGREPENUMFILTERFOLDERS_4EF27C6D_F01D_495F_94A0_E78CC756B09E_H_ */ diff --git a/sakura_core/CGrepEnumFolders.h b/sakura_core/CGrepEnumFolders.h index bc10be9cb9..c0b01ae14b 100644 --- a/sakura_core/CGrepEnumFolders.h +++ b/sakura_core/CGrepEnumFolders.h @@ -28,6 +28,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CGREPENUMFOLDERS_78931E72_6F22_4576_B760_34E2F6C87786_H_ +#define SAKURA_CGREPENUMFOLDERS_78931E72_6F22_4576_B760_34E2F6C87786_H_ #pragma once #include "CGrepEnumFileBase.h" @@ -53,3 +55,4 @@ class CGrepEnumFolders : public CGrepEnumFileBase { return FALSE; } }; +#endif /* SAKURA_CGREPENUMFOLDERS_78931E72_6F22_4576_B760_34E2F6C87786_H_ */ diff --git a/sakura_core/CGrepEnumKeys.h b/sakura_core/CGrepEnumKeys.h index 878f4d4b53..1ade4a2546 100644 --- a/sakura_core/CGrepEnumKeys.h +++ b/sakura_core/CGrepEnumKeys.h @@ -29,6 +29,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CGREPENUMKEYS_FCE5732F_FA0C_4CB2_90D9_D1D440841D5C_H_ +#define SAKURA_CGREPENUMKEYS_FCE5732F_FA0C_4CB2_90D9_D1D440841D5C_H_ #pragma once #include @@ -277,3 +279,4 @@ class CGrepEnumKeys { return 0; } }; +#endif /* SAKURA_CGREPENUMKEYS_FCE5732F_FA0C_4CB2_90D9_D1D440841D5C_H_ */ diff --git a/sakura_core/CHokanMgr.h b/sakura_core/CHokanMgr.h index ce1ab0884f..45307a8e2b 100644 --- a/sakura_core/CHokanMgr.h +++ b/sakura_core/CHokanMgr.h @@ -12,6 +12,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CHOKANMGR_0CB0AF1A_1F22_482E_9221_B9FAE4F0D8A0_H_ +#define SAKURA_CHOKANMGR_0CB0AF1A_1F22_482E_9221_B9FAE4F0D8A0_H_ #pragma once #include @@ -85,3 +87,4 @@ class CHokanMgr final : public CDialog */ LPVOID GetHelpIdTable(void) override; //@@@ 2002.01.18 add }; +#endif /* SAKURA_CHOKANMGR_0CB0AF1A_1F22_482E_9221_B9FAE4F0D8A0_H_ */ diff --git a/sakura_core/CKeyWordSetMgr.h b/sakura_core/CKeyWordSetMgr.h index 3eb5b29f01..180c4a0efa 100644 --- a/sakura_core/CKeyWordSetMgr.h +++ b/sakura_core/CKeyWordSetMgr.h @@ -34,6 +34,8 @@ distribution. */ +#ifndef SAKURA_CKEYWORDSETMGR_2DE7B72E_8DAF_433A_B91F_A807FAD06FB8_H_ +#define SAKURA_CKEYWORDSETMGR_2DE7B72E_8DAF_433A_B91F_A807FAD06FB8_H_ #pragma once #include @@ -161,3 +163,4 @@ class CKeyWordSetMgr bool KeyWordReAlloc(int nIdx, int nSize); void KeywordMaxLen(int nIdx); }; +#endif /* SAKURA_CKEYWORDSETMGR_2DE7B72E_8DAF_433A_B91F_A807FAD06FB8_H_ */ diff --git a/sakura_core/CLoadAgent.h b/sakura_core/CLoadAgent.h index 183e598311..2e9d4c8e3a 100644 --- a/sakura_core/CLoadAgent.h +++ b/sakura_core/CLoadAgent.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CLOADAGENT_369F511F_4F3E_41A2_84AB_EDE3BB368568_H_ +#define SAKURA_CLOADAGENT_369F511F_4F3E_41A2_84AB_EDE3BB368568_H_ #pragma once #include "doc/CDocListener.h" @@ -34,3 +36,4 @@ class CLoadAgent : public CDocListenerEx{ void OnAfterLoad(const SLoadInfo& sLoadInfo) override; void OnFinalLoad(ELoadResult eLoadResult) override; }; +#endif /* SAKURA_CLOADAGENT_369F511F_4F3E_41A2_84AB_EDE3BB368568_H_ */ diff --git a/sakura_core/CMarkMgr.h b/sakura_core/CMarkMgr.h index 23c11c0f05..5da002345e 100644 --- a/sakura_core/CMarkMgr.h +++ b/sakura_core/CMarkMgr.h @@ -29,6 +29,8 @@ distribution. */ +#ifndef SAKURA_CMARKMGR_7A2BB103_5584_4393_A8E9_7639E3C7D787_H_ +#define SAKURA_CMARKMGR_7A2BB103_5584_4393_A8E9_7639E3C7D787_H_ #pragma once #include @@ -134,3 +136,4 @@ class CAutoMarkMgr final : public CMarkMgr{ void Add(const CMark& m) override; //!< 要素の追加 void Expire(void) override; //!< 要素数の調整 }; +#endif /* SAKURA_CMARKMGR_7A2BB103_5584_4393_A8E9_7639E3C7D787_H_ */ diff --git a/sakura_core/COpe.h b/sakura_core/COpe.h index 6182258a90..56f43ef019 100644 --- a/sakura_core/COpe.h +++ b/sakura_core/COpe.h @@ -11,6 +11,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_COPE_45A75845_2C52_4602_9236_743A423DF1DB_H_ +#define SAKURA_COPE_45A75845_2C52_4602_9236_743A423DF1DB_H_ #pragma once #include @@ -132,3 +134,4 @@ class CMoveCaretOpe final : public COpe{ m_ptCaretPos_PHY_After = ptCaretPos; } }; +#endif /* SAKURA_COPE_45A75845_2C52_4602_9236_743A423DF1DB_H_ */ diff --git a/sakura_core/COpeBlk.h b/sakura_core/COpeBlk.h index 8c34da0272..f30ac2e961 100644 --- a/sakura_core/COpeBlk.h +++ b/sakura_core/COpeBlk.h @@ -11,6 +11,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_COPEBLK_2A5AF589_5860_4512_9E59_51CC2ECC37C1_H_ +#define SAKURA_COPEBLK_2A5AF589_5860_4512_9E59_51CC2ECC37C1_H_ #pragma once class COpeBlk; @@ -57,3 +59,4 @@ class COpeBlk { }; //////////////////////////////////////////////////////////////////////12 +#endif /* SAKURA_COPEBLK_2A5AF589_5860_4512_9E59_51CC2ECC37C1_H_ */ diff --git a/sakura_core/COpeBuf.h b/sakura_core/COpeBuf.h index a71ed775c9..77fc673760 100644 --- a/sakura_core/COpeBuf.h +++ b/sakura_core/COpeBuf.h @@ -11,6 +11,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_COPEBUF_6320338E_171D_4A96_B110_6A9E8407492A_H_ +#define SAKURA_COPEBUF_6320338E_171D_4A96_B110_6A9E8407492A_H_ #pragma once class COpeBuf; @@ -55,3 +57,4 @@ class COpeBuf { int m_nCurrentPointer; //!< 現在位置 int m_nNoModifiedIndex; //!< 無変更な状態になった位置 }; +#endif /* SAKURA_COPEBUF_6320338E_171D_4A96_B110_6A9E8407492A_H_ */ diff --git a/sakura_core/CProfile.h b/sakura_core/CProfile.h index bf4e7028fd..d1e2d412a9 100644 --- a/sakura_core/CProfile.h +++ b/sakura_core/CProfile.h @@ -31,6 +31,8 @@ distribution. */ +#ifndef SAKURA_CPROFILE_1871E9A6_3FD3_45B5_A67D_6CC42F60363E_H_ +#define SAKURA_CPROFILE_1871E9A6_3FD3_45B5_A67D_6CC42F60363E_H_ #pragma once #include @@ -87,3 +89,4 @@ class CProfile }; #define _INI_T LTEXT +#endif /* SAKURA_CPROFILE_1871E9A6_3FD3_45B5_A67D_6CC42F60363E_H_ */ diff --git a/sakura_core/CPropertyManager.h b/sakura_core/CPropertyManager.h index 90a2b66f35..549ef2cd23 100644 --- a/sakura_core/CPropertyManager.h +++ b/sakura_core/CPropertyManager.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CPROPERTYMANAGER_E2156683_CAC9_4255_82A2_749A0D1D383A_H_ +#define SAKURA_CPROPERTYMANAGER_E2156683_CAC9_4255_82A2_749A0D1D383A_H_ #pragma once #include "prop/CPropCommon.h" @@ -48,3 +50,4 @@ class CPropertyManager{ int m_nPropComPageNum; int m_nPropTypePageNum; }; +#endif /* SAKURA_CPROPERTYMANAGER_E2156683_CAC9_4255_82A2_749A0D1D383A_H_ */ diff --git a/sakura_core/CReadManager.h b/sakura_core/CReadManager.h index 1ceea51b42..33f93b06e0 100644 --- a/sakura_core/CReadManager.h +++ b/sakura_core/CReadManager.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CREADMANAGER_BF5A195D_BEA1_4508_8BC7_DB5316B5B66E_H_ +#define SAKURA_CREADMANAGER_BF5A195D_BEA1_4508_8BC7_DB5316B5B66E_H_ #pragma once #include "doc/CDocListener.h" // CProgressSubject @@ -40,3 +42,4 @@ class CReadManager : public CProgressSubject{ SFileInfo* pFileInfo ); }; +#endif /* SAKURA_CREADMANAGER_BF5A195D_BEA1_4508_8BC7_DB5316B5B66E_H_ */ diff --git a/sakura_core/CRegexKeyword.h b/sakura_core/CRegexKeyword.h index 2b4fb10cde..43b060636e 100644 --- a/sakura_core/CRegexKeyword.h +++ b/sakura_core/CRegexKeyword.h @@ -16,6 +16,8 @@ //@@@ 2001.11.17 add start MIK +#ifndef SAKURA_CREGEXKEYWORD_84205099_71D3_4F2B_A6E5_821DA1C8D201_H_ +#define SAKURA_CREGEXKEYWORD_84205099_71D3_4F2B_A6E5_821DA1C8D201_H_ #pragma once #include "_main/global.h" @@ -82,3 +84,4 @@ class CRegexKeyword : public CBregexp { }; //@@@ 2001.11.17 add end MIK +#endif /* SAKURA_CREGEXKEYWORD_84205099_71D3_4F2B_A6E5_821DA1C8D201_H_ */ diff --git a/sakura_core/CSaveAgent.h b/sakura_core/CSaveAgent.h index 40867801aa..e9813dbcaf 100644 --- a/sakura_core/CSaveAgent.h +++ b/sakura_core/CSaveAgent.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CSAVEAGENT_9EDD4D3A_82B2_4651_82E5_AE471A54812B_H_ +#define SAKURA_CSAVEAGENT_9EDD4D3A_82B2_4651_82E5_AE471A54812B_H_ #pragma once #include "doc/CDocListener.h" @@ -37,3 +39,4 @@ class CSaveAgent : public CDocListenerEx{ private: SSaveInfo m_sSaveInfoForRollback; }; +#endif /* SAKURA_CSAVEAGENT_9EDD4D3A_82B2_4651_82E5_AE471A54812B_H_ */ diff --git a/sakura_core/CSearchAgent.h b/sakura_core/CSearchAgent.h index 7f98a6070a..a624e80f1e 100644 --- a/sakura_core/CSearchAgent.h +++ b/sakura_core/CSearchAgent.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CSEARCHAGENT_9FAD6EE9_3D33_4D9F_9E9D_CAA9BE284140_H_ +#define SAKURA_CSEARCHAGENT_9FAD6EE9_3D33_4D9F_9E9D_CAA9BE284140_H_ #pragma once #include "_main/global.h" @@ -129,3 +131,4 @@ class CSearchAgent{ private: CDocLineMgr* m_pcDocLineMgr; }; +#endif /* SAKURA_CSEARCHAGENT_9FAD6EE9_3D33_4D9F_9E9D_CAA9BE284140_H_ */ diff --git a/sakura_core/CSelectLang.h b/sakura_core/CSelectLang.h index 74360c3073..23fb10f28c 100644 --- a/sakura_core/CSelectLang.h +++ b/sakura_core/CSelectLang.h @@ -11,6 +11,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CSELECTLANG_657416B2_2B3D_455C_AC28_8B86244F5F83_H_ +#define SAKURA_CSELECTLANG_657416B2_2B3D_455C_AC28_8B86244F5F83_H_ #pragma once #include @@ -143,3 +145,4 @@ class CLoadString // 文字列ロード簡易化マクロ #define LS( id ) ( CLoadString::LoadStringSt( id ) ) +#endif /* SAKURA_CSELECTLANG_657416B2_2B3D_455C_AC28_8B86244F5F83_H_ */ diff --git a/sakura_core/CSortedTagJumpList.h b/sakura_core/CSortedTagJumpList.h index c472e014af..08e99ad0cf 100644 --- a/sakura_core/CSortedTagJumpList.h +++ b/sakura_core/CSortedTagJumpList.h @@ -28,6 +28,8 @@ distribution. */ +#ifndef SAKURA_CSORTEDTAGJUMPLIST_54B68DB2_20F2_4F62_BB2C_47629293620F_H_ +#define SAKURA_CSORTEDTAGJUMPLIST_54B68DB2_20F2_4F62_BB2C_47629293620F_H_ #pragma once #include "util/design_template.h" @@ -81,3 +83,4 @@ class CSortedTagJumpList { DISALLOW_COPY_AND_ASSIGN(CSortedTagJumpList); }; +#endif /* SAKURA_CSORTEDTAGJUMPLIST_54B68DB2_20F2_4F62_BB2C_47629293620F_H_ */ diff --git a/sakura_core/CWriteManager.h b/sakura_core/CWriteManager.h index d10c9d5bc1..cfe646438c 100644 --- a/sakura_core/CWriteManager.h +++ b/sakura_core/CWriteManager.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CWRITEMANAGER_1FC8A485_C76D_40D7_8505_5EECFCD98155_H_ +#define SAKURA_CWRITEMANAGER_1FC8A485_C76D_40D7_8505_5EECFCD98155_H_ #pragma once #include "doc/CDocListener.h" @@ -39,3 +41,4 @@ class CWriteManager : public CProgressSubject{ const SSaveInfo& sSaveInfo //!< [in] ); }; +#endif /* SAKURA_CWRITEMANAGER_1FC8A485_C76D_40D7_8505_5EECFCD98155_H_ */ diff --git a/sakura_core/EditInfo.h b/sakura_core/EditInfo.h index a375af6725..cb9332b99d 100644 --- a/sakura_core/EditInfo.h +++ b/sakura_core/EditInfo.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_EDITINFO_27D29614_33E6_4D60_B4B1_05115049CD16_H_ +#define SAKURA_EDITINFO_27D29614_33E6_4D60_B4B1_05115049CD16_H_ #pragma once #include "basis/SakuraBasis.h" @@ -76,3 +78,4 @@ struct EditInfo { // コンストラクタ EditInfo() noexcept; }; +#endif /* SAKURA_EDITINFO_27D29614_33E6_4D60_B4B1_05115049CD16_H_ */ diff --git a/sakura_core/GrepInfo.h b/sakura_core/GrepInfo.h index 0f163ca971..abf796c06d 100644 --- a/sakura_core/GrepInfo.h +++ b/sakura_core/GrepInfo.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_GREPINFO_9A59ABAF_04F9_4D29_B216_0B0784DD2290_H_ +#define SAKURA_GREPINFO_9A59ABAF_04F9_4D29_B216_0B0784DD2290_H_ #pragma once #include "_main/global.h" //SSearchOption @@ -59,3 +61,4 @@ struct GrepInfo { // コンストラクタ GrepInfo() noexcept; }; +#endif /* SAKURA_GREPINFO_9A59ABAF_04F9_4D29_B216_0B0784DD2290_H_ */ diff --git a/sakura_core/_main/CAppMode.h b/sakura_core/_main/CAppMode.h index 970fa48ad8..443bc81274 100644 --- a/sakura_core/_main/CAppMode.h +++ b/sakura_core/_main/CAppMode.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CAPPMODE_797AE845_5323_4D8A_A263_C534249DBB1C_H_ +#define SAKURA_CAPPMODE_797AE845_5323_4D8A_A263_C534249DBB1C_H_ #pragma once #include "util/design_template.h" @@ -56,3 +58,4 @@ class CAppMode : public TSingleton, public CDocListenerEx{ //###仮 public: wchar_t m_szGrepKey[1024]; //!< Grepモードの場合、その検索キー }; +#endif /* SAKURA_CAPPMODE_797AE845_5323_4D8A_A263_C534249DBB1C_H_ */ diff --git a/sakura_core/_main/CCommandLine.h b/sakura_core/_main/CCommandLine.h index 405a09cfa4..afed870118 100644 --- a/sakura_core/_main/CCommandLine.h +++ b/sakura_core/_main/CCommandLine.h @@ -16,6 +16,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CCOMMANDLINE_DF7E2E03_76E1_458C_82AC_7C485EECF677_H_ +#define SAKURA_CCOMMANDLINE_DF7E2E03_76E1_458C_82AC_7C485EECF677_H_ #pragma once #include @@ -108,3 +110,4 @@ class CCommandLine : public TSingleton { CNativeW m_cmProfile; //! プロファイル名 std::vector m_vFiles; //!< ファイル名(複数) }; +#endif /* SAKURA_CCOMMANDLINE_DF7E2E03_76E1_458C_82AC_7C485EECF677_H_ */ diff --git a/sakura_core/_main/CControlProcess.h b/sakura_core/_main/CControlProcess.h index 672172ba8c..433a7ea1a5 100644 --- a/sakura_core/_main/CControlProcess.h +++ b/sakura_core/_main/CControlProcess.h @@ -12,6 +12,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CCONTROLPROCESS_AFB90808_4287_4A11_B7FB_9CD21CF8BFD6_H_ +#define SAKURA_CCONTROLPROCESS_AFB90808_4287_4A11_B7FB_9CD21CF8BFD6_H_ #pragma once #include "global.h" @@ -53,3 +55,4 @@ class CControlProcess final : public CProcess { HANDLE m_hEventCPInitialized; //!< コントロールプロセス初期化完了イベント 2006.04.10 ryoji CControlTray* m_pcTray; }; +#endif /* SAKURA_CCONTROLPROCESS_AFB90808_4287_4A11_B7FB_9CD21CF8BFD6_H_ */ diff --git a/sakura_core/_main/CControlTray.h b/sakura_core/_main/CControlTray.h index 4174bc879d..abdb1a10cc 100644 --- a/sakura_core/_main/CControlTray.h +++ b/sakura_core/_main/CControlTray.h @@ -22,6 +22,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CCONTROLTRAY_E9E24D69_3511_4EC1_A29A_1D119F68004A_H_ +#define SAKURA_CCONTROLTRAY_E9E24D69_3511_4EC1_A29A_1D119F68004A_H_ #pragma once #include @@ -128,3 +130,4 @@ class CControlTray WCHAR m_szLanguageDll[MAX_PATH]; }; +#endif /* SAKURA_CCONTROLTRAY_E9E24D69_3511_4EC1_A29A_1D119F68004A_H_ */ diff --git a/sakura_core/_main/CMutex.h b/sakura_core/_main/CMutex.h index 5714eabbc6..aed8bddf84 100644 --- a/sakura_core/_main/CMutex.h +++ b/sakura_core/_main/CMutex.h @@ -28,6 +28,8 @@ distribution. */ +#ifndef SAKURA_CMUTEX_51EDDE78_F635_419A_9E10_159485D0F710_H_ +#define SAKURA_CMUTEX_51EDDE78_F635_419A_9E10_159485D0F710_H_ #pragma once #include @@ -103,3 +105,4 @@ class LockGuard { o_.Unlock(); } }; +#endif /* SAKURA_CMUTEX_51EDDE78_F635_419A_9E10_159485D0F710_H_ */ diff --git a/sakura_core/_main/CNormalProcess.h b/sakura_core/_main/CNormalProcess.h index a8f6d7bf11..37d80e0e1a 100644 --- a/sakura_core/_main/CNormalProcess.h +++ b/sakura_core/_main/CNormalProcess.h @@ -11,6 +11,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CNORMALPROCESS_F2808B31_61DC_4BE0_8661_9626478AC7F9_H_ +#define SAKURA_CNORMALPROCESS_F2808B31_61DC_4BE0_8661_9626478AC7F9_H_ #pragma once #include "global.h" @@ -48,3 +50,4 @@ class CNormalProcess final : public CProcess { private: CEditApp* m_pcEditApp; //2007.10.23 kobake }; +#endif /* SAKURA_CNORMALPROCESS_F2808B31_61DC_4BE0_8661_9626478AC7F9_H_ */ diff --git a/sakura_core/_main/CProcess.h b/sakura_core/_main/CProcess.h index 6a23ddbb97..41b474a6e9 100644 --- a/sakura_core/_main/CProcess.h +++ b/sakura_core/_main/CProcess.h @@ -12,6 +12,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CPROCESS_FECC5450_9096_4EAD_A6DA_C8B12C3A31B5_H_ +#define SAKURA_CPROCESS_FECC5450_9096_4EAD_A6DA_C8B12C3A31B5_H_ #pragma once #include "global.h" @@ -68,3 +70,4 @@ class CProcess : public TSingleInstance { private: }; +#endif /* SAKURA_CPROCESS_FECC5450_9096_4EAD_A6DA_C8B12C3A31B5_H_ */ diff --git a/sakura_core/_main/CProcessFactory.h b/sakura_core/_main/CProcessFactory.h index 2a68316d2a..6515f38d7c 100644 --- a/sakura_core/_main/CProcessFactory.h +++ b/sakura_core/_main/CProcessFactory.h @@ -12,6 +12,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CPROCESSFACTORY_5006562F_7795_40FF_AA4C_FFB94842F7C5_H_ +#define SAKURA_CPROCESSFACTORY_5006562F_7795_40FF_AA4C_FFB94842F7C5_H_ #pragma once #include "global.h" @@ -43,3 +45,4 @@ class CProcessFactory { bool WaitForInitializedControlProcess(); // 2006.04.10 ryoji コントロールプロセスの初期化完了イベントを待つ bool TestWriteQuit(); // 2007.09.04 ryoji 「設定を保存して終了する」オプション処理(sakuext連携用) }; +#endif /* SAKURA_CPROCESSFACTORY_5006562F_7795_40FF_AA4C_FFB94842F7C5_H_ */ diff --git a/sakura_core/_main/global.h b/sakura_core/_main/global.h index d43a668617..0b8e460e09 100644 --- a/sakura_core/_main/global.h +++ b/sakura_core/_main/global.h @@ -18,6 +18,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_GLOBAL_BD124BE7_A850_41F3_9F5D_8A4F0E45A4C9_H_ +#define SAKURA_GLOBAL_BD124BE7_A850_41F3_9F5D_8A4F0E45A4C9_H_ #pragma once #ifndef STRICT @@ -175,3 +177,4 @@ class CEditWnd; extern CEditWnd* g_pcEditWnd; HINSTANCE G_AppInstance(); +#endif /* SAKURA_GLOBAL_BD124BE7_A850_41F3_9F5D_8A4F0E45A4C9_H_ */ diff --git a/sakura_core/_os/CClipboard.h b/sakura_core/_os/CClipboard.h index 0ecaf64e40..67a6241fe4 100644 --- a/sakura_core/_os/CClipboard.h +++ b/sakura_core/_os/CClipboard.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCLIPBOARD_4E783022_214C_4E51_A2E0_54EC343500F6_H_ +#define SAKURA_CCLIPBOARD_4E783022_214C_4E51_A2E0_54EC343500F6_H_ #pragma once class CEol; @@ -56,3 +58,4 @@ class CClipboard{ static CLIPFORMAT GetSakuraFormat(); //!< サクラエディタ独自のクリップボードデータ形式 static int GetDataType(); //!< クリップボードデータ形式(CF_UNICODETEXT等)の取得 }; +#endif /* SAKURA_CCLIPBOARD_4E783022_214C_4E51_A2E0_54EC343500F6_H_ */ diff --git a/sakura_core/_os/CDropTarget.h b/sakura_core/_os/CDropTarget.h index cac06eabbe..c555a57528 100644 --- a/sakura_core/_os/CDropTarget.h +++ b/sakura_core/_os/CDropTarget.h @@ -13,6 +13,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CDROPTARGET_365C215D_E844_49BD_8E96_549970AE0A50_H_ +#define SAKURA_CDROPTARGET_365C215D_E844_49BD_8E96_549970AE0A50_H_ #pragma once #include @@ -166,3 +168,4 @@ class CEnumFORMATETC : public CYbInterfaceImpl { STDMETHOD( Reset )(void); STDMETHOD( Clone )(IEnumFORMATETC** ppenum); }; +#endif /* SAKURA_CDROPTARGET_365C215D_E844_49BD_8E96_549970AE0A50_H_ */ diff --git a/sakura_core/_os/OleTypes.h b/sakura_core/_os/OleTypes.h index aff47290e9..27f1d86761 100644 --- a/sakura_core/_os/OleTypes.h +++ b/sakura_core/_os/OleTypes.h @@ -10,6 +10,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_OLETYPES_035185FF_696C_4427_A550_9EA1EDF22BD4_H_ +#define SAKURA_OLETYPES_035185FF_696C_4427_A550_9EA1EDF22BD4_H_ #pragma once #include @@ -118,3 +120,4 @@ inline SysString* Wrap(BSTR *Value) { return reinterpret_cast(Value); } +#endif /* SAKURA_OLETYPES_035185FF_696C_4427_A550_9EA1EDF22BD4_H_ */ diff --git a/sakura_core/apiwrap/CommonControl.h b/sakura_core/apiwrap/CommonControl.h index 6439f2cd64..00d88d8073 100644 --- a/sakura_core/apiwrap/CommonControl.h +++ b/sakura_core/apiwrap/CommonControl.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_COMMONCONTROL_27CF9891_7D70_469F_8AC4_155FA493D7CC_H_ +#define SAKURA_COMMONCONTROL_27CF9891_7D70_469F_8AC4_155FA493D7CC_H_ #pragma once #include // コモンコントロール @@ -99,3 +101,4 @@ namespace ApiWrap } using namespace ApiWrap; +#endif /* SAKURA_COMMONCONTROL_27CF9891_7D70_469F_8AC4_155FA493D7CC_H_ */ diff --git a/sakura_core/apiwrap/StdApi.h b/sakura_core/apiwrap/StdApi.h index f94741f0ab..8d357cc7ae 100644 --- a/sakura_core/apiwrap/StdApi.h +++ b/sakura_core/apiwrap/StdApi.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_STDAPI_29C8A971_234C_46ED_96DB_A2D479992ABE_H_ +#define SAKURA_STDAPI_29C8A971_234C_46ED_96DB_A2D479992ABE_H_ #pragma once //ランタイム情報ライブラリにアクセスするWindowsヘッダを参照する @@ -103,3 +105,4 @@ namespace ApiWrap #define PostMessageCmd PostMessage } using namespace ApiWrap; +#endif /* SAKURA_STDAPI_29C8A971_234C_46ED_96DB_A2D479992ABE_H_ */ diff --git a/sakura_core/apiwrap/StdControl.h b/sakura_core/apiwrap/StdControl.h index b9689df6fa..a171f7d292 100644 --- a/sakura_core/apiwrap/StdControl.h +++ b/sakura_core/apiwrap/StdControl.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_STDCONTROL_57A7282D_B9F0_4642_ABFF_48B6D715CCA7_H_ +#define SAKURA_STDCONTROL_57A7282D_B9F0_4642_ABFF_48B6D715CCA7_H_ #pragma once /* @@ -298,3 +300,4 @@ namespace ApiWrap{ void TreeView_ExpandAll( HWND, bool, int nMaxDepth = 100 ); } using namespace ApiWrap; +#endif /* SAKURA_STDCONTROL_57A7282D_B9F0_4642_ABFF_48B6D715CCA7_H_ */ diff --git a/sakura_core/basis/CLaxInteger.h b/sakura_core/basis/CLaxInteger.h index b7f24edb95..7f97961638 100644 --- a/sakura_core/basis/CLaxInteger.h +++ b/sakura_core/basis/CLaxInteger.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CLAXINTEGER_B3F68913_E6AE_472E_AC4F_E8985190BD7E_H_ +#define SAKURA_CLAXINTEGER_B3F68913_E6AE_472E_AC4F_E8985190BD7E_H_ #pragma once //!型チェックの緩い整数型 @@ -42,3 +44,4 @@ class CLaxInteger{ private: int m_value; }; +#endif /* SAKURA_CLAXINTEGER_B3F68913_E6AE_472E_AC4F_E8985190BD7E_H_ */ diff --git a/sakura_core/basis/CMyPoint.h b/sakura_core/basis/CMyPoint.h index 4633ec0b24..09a9d61aa3 100644 --- a/sakura_core/basis/CMyPoint.h +++ b/sakura_core/basis/CMyPoint.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CMYPOINT_267964EB_3FB3_4AC3_AA75_58B756396229_H_ +#define SAKURA_CMYPOINT_267964EB_3FB3_4AC3_AA75_58B756396229_H_ #pragma once #include //POINT @@ -116,3 +118,4 @@ inline void TwoPointToRect( prcRect->right = (Int)pt1.x; } } +#endif /* SAKURA_CMYPOINT_267964EB_3FB3_4AC3_AA75_58B756396229_H_ */ diff --git a/sakura_core/basis/CMyRect.h b/sakura_core/basis/CMyRect.h index 48d96d82e6..1965d6fc3b 100644 --- a/sakura_core/basis/CMyRect.h +++ b/sakura_core/basis/CMyRect.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CMYRECT_81DBCEE2_C3DC_4D81_862E_0E984105F371_H_ +#define SAKURA_CMYRECT_81DBCEE2_C3DC_4D81_862E_0E984105F371_H_ #pragma once #include //RECT @@ -98,3 +100,4 @@ class CMyRect : public RECT{ //!CRect合成。rc1,rc2を含む最小の矩形を生成する。 CMyRect MergeRect(const CMyRect& rc1, const CMyRect& rc2); +#endif /* SAKURA_CMYRECT_81DBCEE2_C3DC_4D81_862E_0E984105F371_H_ */ diff --git a/sakura_core/basis/CMySize.h b/sakura_core/basis/CMySize.h index 420a5dec11..9b52f46215 100644 --- a/sakura_core/basis/CMySize.h +++ b/sakura_core/basis/CMySize.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CMYSIZE_E407E800_A14E_408D_966A_E626DE7ECA01_H_ +#define SAKURA_CMYSIZE_E407E800_A14E_408D_966A_E626DE7ECA01_H_ #pragma once #include //SIZE @@ -40,3 +42,4 @@ class CMySize : public SIZE{ bool operator == (const SIZE& rhs) const{ return cx==rhs.cx && cy==rhs.cy; } bool operator != (const SIZE& rhs) const{ return !operator==(rhs); } }; +#endif /* SAKURA_CMYSIZE_E407E800_A14E_408D_966A_E626DE7ECA01_H_ */ diff --git a/sakura_core/basis/CMyString.h b/sakura_core/basis/CMyString.h index 6a60efc024..2399c67284 100644 --- a/sakura_core/basis/CMyString.h +++ b/sakura_core/basis/CMyString.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CMYSTRING_009A2525_6B06_4C1B_B089_C1B8A424A565_H_ +#define SAKURA_CMYSTRING_009A2525_6B06_4C1B_B089_C1B8A424A565_H_ #pragma once #include @@ -106,3 +108,4 @@ class CCommandLineString{ WCHAR m_szCmdLine[1024]; WCHAR* m_pHead; }; +#endif /* SAKURA_CMYSTRING_009A2525_6B06_4C1B_B089_C1B8A424A565_H_ */ diff --git a/sakura_core/basis/CStrictInteger.h b/sakura_core/basis/CStrictInteger.h index 931213e553..4a2aa01180 100644 --- a/sakura_core/basis/CStrictInteger.h +++ b/sakura_core/basis/CStrictInteger.h @@ -28,6 +28,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CSTRICTINTEGER_5B7614A0_282F_48F6_9420_CE672061CF3E_H_ +#define SAKURA_CSTRICTINTEGER_5B7614A0_282F_48F6_9420_CE672061CF3E_H_ #pragma once #include "primitive.h" // for Int @@ -224,3 +226,4 @@ STRICTINT_LEFT_INT_CMP(int) STRICTINT_LEFT_INT_CMP(short) STRICTINT_LEFT_INT_CMP(size_t) STRICTINT_LEFT_INT_CMP(LONG) +#endif /* SAKURA_CSTRICTINTEGER_5B7614A0_282F_48F6_9420_CE672061CF3E_H_ */ diff --git a/sakura_core/basis/CStrictPoint.h b/sakura_core/basis/CStrictPoint.h index 6216c9068d..d2ce402540 100644 --- a/sakura_core/basis/CStrictPoint.h +++ b/sakura_core/basis/CStrictPoint.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CSTRICTPOINT_61EFDE2B_5ACD_464A_8F49_7FB76A4A34C4_H_ +#define SAKURA_CSTRICTPOINT_61EFDE2B_5ACD_464A_8F49_7FB76A4A34C4_H_ #pragma once //単位が明示的に区別されたポイント型。※POINTは継承しないことにした @@ -111,3 +113,4 @@ template class CS return pt; } }; +#endif /* SAKURA_CSTRICTPOINT_61EFDE2B_5ACD_464A_8F49_7FB76A4A34C4_H_ */ diff --git a/sakura_core/basis/CStrictRange.h b/sakura_core/basis/CStrictRange.h index 1caa97ef93..fd6ff5ae18 100644 --- a/sakura_core/basis/CStrictRange.h +++ b/sakura_core/basis/CStrictRange.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CSTRICTRANGE_270CB3D2_3CD3_4A6F_8319_482FB010C0BB_H_ +#define SAKURA_CSTRICTRANGE_270CB3D2_3CD3_4A6F_8319_482FB010C0BB_H_ #pragma once template @@ -153,3 +155,4 @@ class CRangeBase{ PointType m_ptFrom; PointType m_ptTo; }; +#endif /* SAKURA_CSTRICTRANGE_270CB3D2_3CD3_4A6F_8319_482FB010C0BB_H_ */ diff --git a/sakura_core/basis/CStrictRect.h b/sakura_core/basis/CStrictRect.h index 96f87ee8d4..8aba533061 100644 --- a/sakura_core/basis/CStrictRect.h +++ b/sakura_core/basis/CStrictRect.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CSTRICTRECT_B41F0F96_8886_4ED1_B6FE_1B4EA70F58D8_H_ +#define SAKURA_CSTRICTRECT_B41F0F96_8886_4ED1_B6FE_1B4EA70F58D8_H_ #pragma once template class CStrictRect{ @@ -64,3 +66,4 @@ template class CStrictRect{ return *this; } }; +#endif /* SAKURA_CSTRICTRECT_B41F0F96_8886_4ED1_B6FE_1B4EA70F58D8_H_ */ diff --git a/sakura_core/basis/SakuraBasis.h b/sakura_core/basis/SakuraBasis.h index b4d17ec02d..7c960bec49 100644 --- a/sakura_core/basis/SakuraBasis.h +++ b/sakura_core/basis/SakuraBasis.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_SAKURABASIS_9AF1C7D6_E092_41E8_8BC6_6194067C0CA2_H_ +#define SAKURA_SAKURABASIS_9AF1C7D6_E092_41E8_8BC6_6194067C0CA2_H_ #pragma once #include //POINT,LONG @@ -144,3 +146,4 @@ inline void TwoPointToRect( prcRect->right = pt1.GetX2(); } } +#endif /* SAKURA_SAKURABASIS_9AF1C7D6_E092_41E8_8BC6_6194067C0CA2_H_ */ diff --git a/sakura_core/basis/primitive.h b/sakura_core/basis/primitive.h index a6d2b8f55e..8673cf5b2a 100644 --- a/sakura_core/basis/primitive.h +++ b/sakura_core/basis/primitive.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_PRIMITIVE_C8059DE4_C986_492E_9C09_7F044049C481_H_ +#define SAKURA_PRIMITIVE_C8059DE4_C986_492E_9C09_7F044049C481_H_ #pragma once #include "config/build_config.h" @@ -56,3 +58,4 @@ typedef char KEYCODE; #else typedef int Int; #endif +#endif /* SAKURA_PRIMITIVE_C8059DE4_C986_492E_9C09_7F044049C481_H_ */ diff --git a/sakura_core/charset/CCesu8.h b/sakura_core/charset/CCesu8.h index e5f06056f5..8e099a701d 100644 --- a/sakura_core/charset/CCesu8.h +++ b/sakura_core/charset/CCesu8.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCESU8_25BC6708_E05F_44A8_936C_8C2FE260AA72_H_ +#define SAKURA_CCESU8_25BC6708_E05F_44A8_936C_8C2FE260AA72_H_ #pragma once #include "CCodeBase.h" @@ -43,3 +45,4 @@ class CCesu8 : public CCodeBase { return CUtf8()._UnicodeToHex( cSrc, iSLen, pDst, psStatusbar, true ); } }; +#endif /* SAKURA_CCESU8_25BC6708_E05F_44A8_936C_8C2FE260AA72_H_ */ diff --git a/sakura_core/charset/CCodeBase.h b/sakura_core/charset/CCodeBase.h index 2a2d6208e8..52de913b5c 100644 --- a/sakura_core/charset/CCodeBase.h +++ b/sakura_core/charset/CCodeBase.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCODEBASE_1AB194FB_933C_495E_A3A3_62E117C72644_H_ +#define SAKURA_CCODEBASE_1AB194FB_933C_495E_A3A3_62E117C72644_H_ #pragma once //定数 @@ -95,3 +97,4 @@ inline int CCodeBase::TextToBin( const unsigned short cSrc ) { return static_cast((cSrc - 0xdc00) & 0x00ff); } +#endif /* SAKURA_CCODEBASE_1AB194FB_933C_495E_A3A3_62E117C72644_H_ */ diff --git a/sakura_core/charset/CCodeFactory.h b/sakura_core/charset/CCodeFactory.h index fb1a3560fb..108da62e02 100644 --- a/sakura_core/charset/CCodeFactory.h +++ b/sakura_core/charset/CCodeFactory.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCODEFACTORY_A5C6C204_F9BD_42BA_A5CD_1B086833CCA4_H_ +#define SAKURA_CCODEFACTORY_A5C6C204_F9BD_42BA_A5CD_1B086833CCA4_H_ #pragma once class CCodeBase; @@ -34,3 +36,4 @@ class CCodeFactory{ int nFlag //!< bit 0: MIME Encodeされたヘッダをdecodeするかどうか ); }; +#endif /* SAKURA_CCODEFACTORY_A5C6C204_F9BD_42BA_A5CD_1B086833CCA4_H_ */ diff --git a/sakura_core/charset/CCodeMediator.h b/sakura_core/charset/CCodeMediator.h index b2aa8b6cd1..41f34591ac 100644 --- a/sakura_core/charset/CCodeMediator.h +++ b/sakura_core/charset/CCodeMediator.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCODEMEDIATOR_26846888_8435_4071_81A6_9DB01C8FB718_H_ +#define SAKURA_CCODEMEDIATOR_26846888_8435_4071_81A6_9DB01C8FB718_H_ #pragma once #include "types/CType.h" //SEncodingConfig @@ -46,3 +48,4 @@ class CCodeMediator final { private: const SEncodingConfig& m_sEncodingConfig; }; +#endif /* SAKURA_CCODEMEDIATOR_26846888_8435_4071_81A6_9DB01C8FB718_H_ */ diff --git a/sakura_core/charset/CCodePage.h b/sakura_core/charset/CCodePage.h index 43d058c84c..73e05415d3 100644 --- a/sakura_core/charset/CCodePage.h +++ b/sakura_core/charset/CCodePage.h @@ -26,6 +26,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCODEPAGE_2FB24C14_37A2_4D64_BF97_973E456462CE_H_ +#define SAKURA_CCODEPAGE_2FB24C14_37A2_4D64_BF97_973E456462CE_H_ #pragma once #include "CCodeBase.h" @@ -94,3 +96,4 @@ class CCodePage : public CCodeBase{ static int S_UnicodeToUTF32LE(const wchar_t* pSrc, int nSrcLen, char* pDst, int nDstLen); static int S_UnicodeToUTF32BE(const wchar_t* pSrc, int nSrcLen, char* pDst, int nDstLen); }; +#endif /* SAKURA_CCODEPAGE_2FB24C14_37A2_4D64_BF97_973E456462CE_H_ */ diff --git a/sakura_core/charset/CESI.h b/sakura_core/charset/CESI.h index 5a6bd06dc0..ed6d96a984 100644 --- a/sakura_core/charset/CESI.h +++ b/sakura_core/charset/CESI.h @@ -30,6 +30,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CESI_C5EC4EE4_9EEA_47B9_9D02_236EF1F3222C_H_ +#define SAKURA_CESI_C5EC4EE4_9EEA_47B9_9D02_236EF1F3222C_H_ #pragma once struct SEncodingConfig; @@ -264,3 +266,4 @@ ECodeType CESI::DetectUnicodeBom(const char* buff, size_t size) noexcept return CODE_NONE; } +#endif /* SAKURA_CESI_C5EC4EE4_9EEA_47B9_9D02_236EF1F3222C_H_ */ diff --git a/sakura_core/charset/CEuc.h b/sakura_core/charset/CEuc.h index 5d870ef32b..8538765d2a 100644 --- a/sakura_core/charset/CEuc.h +++ b/sakura_core/charset/CEuc.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CEUC_321D75BD_0B34_4417_BC69_6BF9AAAE794C_H_ +#define SAKURA_CEUC_321D75BD_0B34_4417_BC69_6BF9AAAE794C_H_ #pragma once #include @@ -186,3 +188,4 @@ inline int CEuc::_UniToEucjp_char( const unsigned short* pSrc, unsigned char* pD return nret; } +#endif /* SAKURA_CEUC_321D75BD_0B34_4417_BC69_6BF9AAAE794C_H_ */ diff --git a/sakura_core/charset/CJis.h b/sakura_core/charset/CJis.h index 081539e208..fceceb568b 100644 --- a/sakura_core/charset/CJis.h +++ b/sakura_core/charset/CJis.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CJIS_BD9F2F30_4502_4183_BB00_768B9EDC9002_H_ +#define SAKURA_CJIS_BD9F2F30_4502_4183_BB00_768B9EDC9002_H_ #pragma once #include "CCodeBase.h" @@ -104,3 +106,4 @@ enum EJisESCSeqType { }; #endif +#endif /* SAKURA_CJIS_BD9F2F30_4502_4183_BB00_768B9EDC9002_H_ */ diff --git a/sakura_core/charset/CLatin1.h b/sakura_core/charset/CLatin1.h index ec08dbf4a4..118c39cc91 100644 --- a/sakura_core/charset/CLatin1.h +++ b/sakura_core/charset/CLatin1.h @@ -27,6 +27,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CLATIN1_5A6263F4_6468_4F9A_BFAE_69DC9477C1B5_H_ +#define SAKURA_CLATIN1_5A6263F4_6468_4F9A_BFAE_69DC9477C1B5_H_ #pragma once #include "CCodeBase.h" @@ -98,3 +100,4 @@ inline int CLatin1::_UniToLatin1_char( const unsigned short* pSrc, unsigned char return nret; } +#endif /* SAKURA_CLATIN1_5A6263F4_6468_4F9A_BFAE_69DC9477C1B5_H_ */ diff --git a/sakura_core/charset/CShiftJis.h b/sakura_core/charset/CShiftJis.h index c5978b3d51..c74e4bd40c 100644 --- a/sakura_core/charset/CShiftJis.h +++ b/sakura_core/charset/CShiftJis.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CSHIFTJIS_2D69DAF0_0B19_4527_BDB8_D1C848651C31_H_ +#define SAKURA_CSHIFTJIS_2D69DAF0_0B19_4527_BDB8_D1C848651C31_H_ #pragma once #include "CCodeBase.h" @@ -137,3 +139,4 @@ inline int CShiftJis::_UniToSjis_char( const unsigned short* pSrc, unsigned char return nret; } +#endif /* SAKURA_CSHIFTJIS_2D69DAF0_0B19_4527_BDB8_D1C848651C31_H_ */ diff --git a/sakura_core/charset/CUnicode.h b/sakura_core/charset/CUnicode.h index 79c69a3552..b09063022c 100644 --- a/sakura_core/charset/CUnicode.h +++ b/sakura_core/charset/CUnicode.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CUNICODE_58DBF44E_DCA1_43C3_B825_EAF692A045DC_H_ +#define SAKURA_CUNICODE_58DBF44E_DCA1_43C3_B825_EAF692A045DC_H_ #pragma once // IsUtf16SurrogHi()、IsUtf16SurrogLow() 関数をcharset/codechecker.h に移動 @@ -46,3 +48,4 @@ class CUnicode : public CCodeBase{ inline static EConvertResult UnicodeToUnicode_in(const CMemory& cSrc, CNativeW* pDst){ return _UnicodeToUnicode_in(cSrc, pDst, false); } inline static EConvertResult UnicodeToUnicode_out(const CNativeW& cSrc, CMemory* pDst){ return _UnicodeToUnicode_out(cSrc, pDst, false); } }; +#endif /* SAKURA_CUNICODE_58DBF44E_DCA1_43C3_B825_EAF692A045DC_H_ */ diff --git a/sakura_core/charset/CUnicodeBe.h b/sakura_core/charset/CUnicodeBe.h index acbc9322bd..41fc80cc93 100644 --- a/sakura_core/charset/CUnicodeBe.h +++ b/sakura_core/charset/CUnicodeBe.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CUNICODEBE_26648A4B_A79C_4739_ADD3_DC7833A91E18_H_ +#define SAKURA_CUNICODEBE_26648A4B_A79C_4739_ADD3_DC7833A91E18_H_ #pragma once #include "CCodeBase.h" @@ -43,3 +45,4 @@ class CUnicodeBe : public CCodeBase{ inline static EConvertResult UnicodeToUnicodeBE(const CNativeW& cSrc, CMemory* pDst) { return CUnicode::_UnicodeToUnicode_out(cSrc, pDst, true); } // Unicode → UnicodeBEコード変換 }; +#endif /* SAKURA_CUNICODEBE_26648A4B_A79C_4739_ADD3_DC7833A91E18_H_ */ diff --git a/sakura_core/charset/CUtf7.h b/sakura_core/charset/CUtf7.h index d653d3f922..ee48fdb9fa 100644 --- a/sakura_core/charset/CUtf7.h +++ b/sakura_core/charset/CUtf7.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CUTF7_55498766_1C8A_416B_9F39_88D3D83B8B65_H_ +#define SAKURA_CUTF7_55498766_1C8A_416B_9F39_88D3D83B8B65_H_ #pragma once #include "CCodeBase.h" @@ -51,3 +53,4 @@ class CUtf7 : public CCodeBase{ static int _UniToUtf7SetB_block( const wchar_t* pSrc, const int nSrcLen, char* pDst ); static int UniToUtf7( const wchar_t* pSrc, const int nSrcLen, char* pDst ); }; +#endif /* SAKURA_CUTF7_55498766_1C8A_416B_9F39_88D3D83B8B65_H_ */ diff --git a/sakura_core/charset/CUtf8.h b/sakura_core/charset/CUtf8.h index 8e6166942e..1c983724ce 100644 --- a/sakura_core/charset/CUtf8.h +++ b/sakura_core/charset/CUtf8.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CUTF8_0BA7EBF5_EAEF_4EA0_BC3A_8337CDD524DF_H_ +#define SAKURA_CUTF8_0BA7EBF5_EAEF_4EA0_BC3A_8337CDD524DF_H_ #pragma once #include "CCodeBase.h" @@ -156,3 +158,4 @@ inline int CUtf8::_UniToUtf8_char( const unsigned short* pSrc, const int nSrcLen return nret; } +#endif /* SAKURA_CUTF8_0BA7EBF5_EAEF_4EA0_BC3A_8337CDD524DF_H_ */ diff --git a/sakura_core/charset/CharPointer.h b/sakura_core/charset/CharPointer.h index a512eb86b8..c8f1526ccb 100644 --- a/sakura_core/charset/CharPointer.h +++ b/sakura_core/charset/CharPointer.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CHARPOINTER_B649A129_0BBB_4ABE_BE02_0389CF537319_H_ +#define SAKURA_CHARPOINTER_B649A129_0BBB_4ABE_BE02_0389CF537319_H_ #pragma once #include "charset/charcode.h" @@ -108,3 +110,4 @@ class CharPointerW{ }; typedef CharPointerW CharPointerT; +#endif /* SAKURA_CHARPOINTER_B649A129_0BBB_4ABE_BE02_0389CF537319_H_ */ diff --git a/sakura_core/charset/charcode.h b/sakura_core/charset/charcode.h index 030f1542d8..0c9c65ea18 100644 --- a/sakura_core/charset/charcode.h +++ b/sakura_core/charset/charcode.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CHARCODE_4C34C669_0BAB_441A_9B1D_2B9AC1895380_H_ +#define SAKURA_CHARCODE_4C34C669_0BAB_441A_9B1D_2B9AC1895380_H_ #pragma once //2007.09.13 kobake 作成 @@ -343,3 +345,4 @@ enum ECharWidthCacheMode { void SelectCharWidthCache( ECharWidthFontMode fMode, ECharWidthCacheMode cMode ); //!< モードを変更したいとき void InitCharWidthCache( const LOGFONT &lf, ECharWidthFontMode fMode=CWM_FONT_EDIT ); //!< フォントを変更したとき void InitCharWidthCacheFromDC(const LOGFONT* lfs, ECharWidthFontMode fMode, HDC hdcOrg ); +#endif /* SAKURA_CHARCODE_4C34C669_0BAB_441A_9B1D_2B9AC1895380_H_ */ diff --git a/sakura_core/charset/charset.h b/sakura_core/charset/charset.h index cff5b09e9b..94f39ab933 100644 --- a/sakura_core/charset/charset.h +++ b/sakura_core/charset/charset.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CHARSET_CD85F6F9_5224_44A2_9BC4_5F631B467701_H_ +#define SAKURA_CHARSET_CD85F6F9_5224_44A2_9BC4_5F631B467701_H_ #pragma once // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // @@ -139,3 +141,4 @@ class CCodeTypesForCombobox{ ECodeType GetCode(int nIndex) const; LPCWSTR GetName(int nIndex) const; }; +#endif /* SAKURA_CHARSET_CD85F6F9_5224_44A2_9BC4_5F631B467701_H_ */ diff --git a/sakura_core/charset/codechecker.h b/sakura_core/charset/codechecker.h index f6fc6c685e..c4160d101c 100644 --- a/sakura_core/charset/codechecker.h +++ b/sakura_core/charset/codechecker.h @@ -31,6 +31,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CODECHECKER_62A18A31_2ECD_47B6_AEE1_38EDDAD3FF2B_H_ +#define SAKURA_CODECHECKER_62A18A31_2ECD_47B6_AEE1_38EDDAD3FF2B_H_ #pragma once #include "_main/global.h" @@ -445,3 +447,4 @@ int CheckCesu8Char( const char*, const int, ECharSet*, const int nOption ); // UTF-7 フォーマットチェック int CheckUtf7DPart( const char*, const int, char **ppNextChar, bool *pbError ); int CheckUtf7BPart( const char*, const int, char **ppNextChar, bool *pbError, const int nOption, bool *pbNoAddPoint = NULL ); +#endif /* SAKURA_CODECHECKER_62A18A31_2ECD_47B6_AEE1_38EDDAD3FF2B_H_ */ diff --git a/sakura_core/charset/codeutil.h b/sakura_core/charset/codeutil.h index 1853823f65..110cb0bf5d 100644 --- a/sakura_core/charset/codeutil.h +++ b/sakura_core/charset/codeutil.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CODEUTIL_72398A53_6BF2_4A77_93D9_506C19E55681_H_ +#define SAKURA_CODEUTIL_72398A53_6BF2_4A77_93D9_506C19E55681_H_ #pragma once #include @@ -205,3 +207,4 @@ inline int MyMultiByteToWideChar_JP( const unsigned char* pSrc, const int nSrcLe return nret; } +#endif /* SAKURA_CODEUTIL_72398A53_6BF2_4A77_93D9_506C19E55681_H_ */ diff --git a/sakura_core/charset/icu4c/CharsetDetector.h b/sakura_core/charset/icu4c/CharsetDetector.h index 9dc50946ce..456f45018f 100644 --- a/sakura_core/charset/icu4c/CharsetDetector.h +++ b/sakura_core/charset/icu4c/CharsetDetector.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CHARSETDETECTOR_23D1755A_0001_4BAE_96C1_C3BD492E6BD0_H_ +#define SAKURA_CHARSETDETECTOR_23D1755A_0001_4BAE_96C1_C3BD492E6BD0_H_ #pragma once #include @@ -46,3 +48,4 @@ class CharsetDetector final ECodeType Detect(const std::string_view& bytes); }; +#endif /* SAKURA_CHARSETDETECTOR_23D1755A_0001_4BAE_96C1_C3BD492E6BD0_H_ */ diff --git a/sakura_core/cmd/CViewCommander.h b/sakura_core/cmd/CViewCommander.h index 5712bbde34..b992932d79 100644 --- a/sakura_core/cmd/CViewCommander.h +++ b/sakura_core/cmd/CViewCommander.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CVIEWCOMMANDER_2790DAD1_148B_4DC5_8BCB_A2CE3D595F50_H_ +#define SAKURA_CVIEWCOMMANDER_2790DAD1_148B_4DC5_8BCB_A2CE3D595F50_H_ #pragma once class CEditView; @@ -411,3 +413,4 @@ class CViewCommander{ CLogicInt ConvertEol(const wchar_t* pszText, CLogicInt nTextLen, wchar_t* pszConvertedText); void Sub_BoxSelectLock( int flags ); }; +#endif /* SAKURA_CVIEWCOMMANDER_2790DAD1_148B_4DC5_8BCB_A2CE3D595F50_H_ */ diff --git a/sakura_core/cmd/CViewCommander_inline.h b/sakura_core/cmd/CViewCommander_inline.h index 621033a0fd..aef8d7a651 100644 --- a/sakura_core/cmd/CViewCommander_inline.h +++ b/sakura_core/cmd/CViewCommander_inline.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CVIEWCOMMANDER_INLINE_EF3571A1_FED4_439C_957F_E77B28E2384F_H_ +#define SAKURA_CVIEWCOMMANDER_INLINE_EF3571A1_FED4_439C_957F_E77B28E2384F_H_ #pragma once #include "view/CEditView.h" @@ -59,3 +61,4 @@ inline CCaret& CViewCommander::GetCaret() { return m_pCommanderView->GetCaret(); } +#endif /* SAKURA_CVIEWCOMMANDER_INLINE_EF3571A1_FED4_439C_957F_E77B28E2384F_H_ */ diff --git a/sakura_core/config/app_constants.h b/sakura_core/config/app_constants.h index d4b8fb2e3e..34e5b79774 100644 --- a/sakura_core/config/app_constants.h +++ b/sakura_core/config/app_constants.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_APP_CONSTANTS_30AEF8B3_BD9C_404E_B5CE_CDFE9E8FE451_H_ +#define SAKURA_APP_CONSTANTS_30AEF8B3_BD9C_404E_B5CE_CDFE9E8FE451_H_ #pragma once #include "build_config.h" @@ -55,3 +57,4 @@ const int MINLINEKETAS = 10; //!< 1行の桁数の最小値 // 2014.08.02 定数定義追加 katze const int LINENUMWIDTH_MIN = 2; const int LINENUMWIDTH_MAX = 11; +#endif /* SAKURA_APP_CONSTANTS_30AEF8B3_BD9C_404E_B5CE_CDFE9E8FE451_H_ */ diff --git a/sakura_core/config/build_config.h b/sakura_core/config/build_config.h index 444e2976c5..d2e7d76399 100644 --- a/sakura_core/config/build_config.h +++ b/sakura_core/config/build_config.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_BUILD_CONFIG_DB7D8D47_EA6A_4ABF_A081_A31875D78808_H_ +#define SAKURA_BUILD_CONFIG_DB7D8D47_EA6A_4ABF_A081_A31875D78808_H_ #pragma once //ビルド(コンパイル)設定 @@ -110,3 +112,4 @@ static const bool UNICODE_BOOL=true; #if _WIN64 #define ALPHA_VERSION #endif +#endif /* SAKURA_BUILD_CONFIG_DB7D8D47_EA6A_4ABF_A081_A31875D78808_H_ */ diff --git a/sakura_core/config/maxdata.h b/sakura_core/config/maxdata.h index 2fd4f4e2ba..550ea8079a 100644 --- a/sakura_core/config/maxdata.h +++ b/sakura_core/config/maxdata.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_MAXDATA_1620C8E1_EF36_4EC9_9757_D2598E9E2746_H_ +#define SAKURA_MAXDATA_1620C8E1_EF36_4EC9_9757_D2598E9E2746_H_ #pragma once /*! 最大値定義 @@ -87,3 +89,4 @@ enum maxdata{ MAX_MAINMENU_TOP = 20, // 登録できるメインメニューの数 MAX_MAIN_MENU_NAME_LEN = 40, // メインメニュー名文字列長 }; +#endif /* SAKURA_MAXDATA_1620C8E1_EF36_4EC9_9757_D2598E9E2746_H_ */ diff --git a/sakura_core/config/system_constants.h b/sakura_core/config/system_constants.h index f20bac7383..52a8000db3 100644 --- a/sakura_core/config/system_constants.h +++ b/sakura_core/config/system_constants.h @@ -32,6 +32,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_SYSTEM_CONSTANTS_DACC287C_DAC4_4FC7_8AEC_8DB5BE6BFB8B_H_ +#define SAKURA_SYSTEM_CONSTANTS_DACC287C_DAC4_4FC7_8AEC_8DB5BE6BFB8B_H_ #pragma once // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // @@ -746,3 +748,4 @@ enum e_PM_SETCARETPOS_SELECTSTATE { //! ウィンドウ一覧表示 #define MYWM_DLGWINLIST (WM_APP+225) +#endif /* SAKURA_SYSTEM_CONSTANTS_DACC287C_DAC4_4FC7_8AEC_8DB5BE6BFB8B_H_ */ diff --git a/sakura_core/convert/CConvert.h b/sakura_core/convert/CConvert.h index 9a0e53499c..e2fb94d7e6 100644 --- a/sakura_core/convert/CConvert.h +++ b/sakura_core/convert/CConvert.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCONVERT_781CEC40_5400_4D47_959B_0718AEA82A9B_H_ +#define SAKURA_CCONVERT_781CEC40_5400_4D47_959B_0718AEA82A9B_H_ #pragma once //2007.10.02 kobake CEditViewから分離 @@ -53,3 +55,4 @@ class CConvert{ //実装 virtual bool DoConvert( CNativeW* pcData )=0; }; +#endif /* SAKURA_CCONVERT_781CEC40_5400_4D47_959B_0718AEA82A9B_H_ */ diff --git a/sakura_core/convert/CConvert_HaneisuToZeneisu.h b/sakura_core/convert/CConvert_HaneisuToZeneisu.h index 1c2ae93bb8..34394639d2 100644 --- a/sakura_core/convert/CConvert_HaneisuToZeneisu.h +++ b/sakura_core/convert/CConvert_HaneisuToZeneisu.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCONVERT_HANEISUTOZENEISU_7EDA89FC_8E96_45AA_9612_106430257F7C_H_ +#define SAKURA_CCONVERT_HANEISUTOZENEISU_7EDA89FC_8E96_45AA_9612_106430257F7C_H_ #pragma once #include "CConvert.h" @@ -31,3 +33,4 @@ class CConvert_HaneisuToZeneisu final : public CConvert{ public: bool DoConvert(CNativeW* pcData) override; }; +#endif /* SAKURA_CCONVERT_HANEISUTOZENEISU_7EDA89FC_8E96_45AA_9612_106430257F7C_H_ */ diff --git a/sakura_core/convert/CConvert_HankataToZenhira.h b/sakura_core/convert/CConvert_HankataToZenhira.h index 7c762a5d0f..c3ef8fd1f0 100644 --- a/sakura_core/convert/CConvert_HankataToZenhira.h +++ b/sakura_core/convert/CConvert_HankataToZenhira.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCONVERT_HANKATATOZENHIRA_E5BFC342_4B93_4E34_9380_3E81149A315D_H_ +#define SAKURA_CCONVERT_HANKATATOZENHIRA_E5BFC342_4B93_4E34_9380_3E81149A315D_H_ #pragma once #include "CConvert.h" @@ -31,3 +33,4 @@ class CConvert_HankataToZenhira final : public CConvert{ public: bool DoConvert(CNativeW* pcData) override; }; +#endif /* SAKURA_CCONVERT_HANKATATOZENHIRA_E5BFC342_4B93_4E34_9380_3E81149A315D_H_ */ diff --git a/sakura_core/convert/CConvert_HankataToZenkata.h b/sakura_core/convert/CConvert_HankataToZenkata.h index deca981a7c..11f0289a21 100644 --- a/sakura_core/convert/CConvert_HankataToZenkata.h +++ b/sakura_core/convert/CConvert_HankataToZenkata.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCONVERT_HANKATATOZENKATA_2C7E51E1_CA18_41C1_867C_E0CC9CD2138D_H_ +#define SAKURA_CCONVERT_HANKATATOZENKATA_2C7E51E1_CA18_41C1_867C_E0CC9CD2138D_H_ #pragma once #include "CConvert.h" @@ -31,3 +33,4 @@ class CConvert_HankataToZenkata final : public CConvert{ public: bool DoConvert(CNativeW* pcData) override; }; +#endif /* SAKURA_CCONVERT_HANKATATOZENKATA_2C7E51E1_CA18_41C1_867C_E0CC9CD2138D_H_ */ diff --git a/sakura_core/convert/CConvert_SpaceToTab.h b/sakura_core/convert/CConvert_SpaceToTab.h index 9cc4081d1f..c8a3083f8f 100644 --- a/sakura_core/convert/CConvert_SpaceToTab.h +++ b/sakura_core/convert/CConvert_SpaceToTab.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCONVERT_SPACETOTAB_AA8D9341_7190_4332_AA23_C0D9AA4DC8D0_H_ +#define SAKURA_CCONVERT_SPACETOTAB_AA8D9341_7190_4332_AA23_C0D9AA4DC8D0_H_ #pragma once #include "CConvert.h" @@ -40,3 +42,4 @@ class CConvert_SpaceToTab final : public CConvert{ int m_nStartColumn; bool m_bExtEol; }; +#endif /* SAKURA_CCONVERT_SPACETOTAB_AA8D9341_7190_4332_AA23_C0D9AA4DC8D0_H_ */ diff --git a/sakura_core/convert/CConvert_TabToSpace.h b/sakura_core/convert/CConvert_TabToSpace.h index b794cfe8ea..7dbbe6d155 100644 --- a/sakura_core/convert/CConvert_TabToSpace.h +++ b/sakura_core/convert/CConvert_TabToSpace.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCONVERT_TABTOSPACE_DDBB0EE5_D2FB_4624_9A68_4DD4B81C0744_H_ +#define SAKURA_CCONVERT_TABTOSPACE_DDBB0EE5_D2FB_4624_9A68_4DD4B81C0744_H_ #pragma once #include "CConvert.h" @@ -40,3 +42,4 @@ class CConvert_TabToSpace final : public CConvert{ int m_nStartColumn; bool m_bExtEol; }; +#endif /* SAKURA_CCONVERT_TABTOSPACE_DDBB0EE5_D2FB_4624_9A68_4DD4B81C0744_H_ */ diff --git a/sakura_core/convert/CConvert_ToHankaku.h b/sakura_core/convert/CConvert_ToHankaku.h index 3ee74da8b1..82bbea62bb 100644 --- a/sakura_core/convert/CConvert_ToHankaku.h +++ b/sakura_core/convert/CConvert_ToHankaku.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCONVERT_TOHANKAKU_B22F6D13_783E_4D93_B078_8A42BE57FC7B_H_ +#define SAKURA_CCONVERT_TOHANKAKU_B22F6D13_783E_4D93_B078_8A42BE57FC7B_H_ #pragma once #include "CConvert.h" @@ -37,3 +39,4 @@ enum EToHankakuMode{ TO_HIRAGANA = 0x02, //!< ひらがなに影響アリ TO_EISU = 0x04, //!< 英数字に影響アリ }; +#endif /* SAKURA_CCONVERT_TOHANKAKU_B22F6D13_783E_4D93_B078_8A42BE57FC7B_H_ */ diff --git a/sakura_core/convert/CConvert_ToLower.h b/sakura_core/convert/CConvert_ToLower.h index 021ab80858..91d5bfc90e 100644 --- a/sakura_core/convert/CConvert_ToLower.h +++ b/sakura_core/convert/CConvert_ToLower.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCONVERT_TOLOWER_D748EDC6_6018_49A9_8F5C_0841F1F0AD51_H_ +#define SAKURA_CCONVERT_TOLOWER_D748EDC6_6018_49A9_8F5C_0841F1F0AD51_H_ #pragma once #include "CConvert.h" @@ -30,3 +32,4 @@ class CConvert_ToLower final : public CConvert{ public: bool DoConvert(CNativeW* pcData) override; }; +#endif /* SAKURA_CCONVERT_TOLOWER_D748EDC6_6018_49A9_8F5C_0841F1F0AD51_H_ */ diff --git a/sakura_core/convert/CConvert_ToUpper.h b/sakura_core/convert/CConvert_ToUpper.h index 92d4af8e2c..01022615a6 100644 --- a/sakura_core/convert/CConvert_ToUpper.h +++ b/sakura_core/convert/CConvert_ToUpper.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCONVERT_TOUPPER_B5706A27_CFA5_42C8_8B8A_5FA05967AABC_H_ +#define SAKURA_CCONVERT_TOUPPER_B5706A27_CFA5_42C8_8B8A_5FA05967AABC_H_ #pragma once #include "CConvert.h" @@ -30,3 +32,4 @@ class CConvert_ToUpper final : public CConvert{ public: bool DoConvert(CNativeW* pcData) override; }; +#endif /* SAKURA_CCONVERT_TOUPPER_B5706A27_CFA5_42C8_8B8A_5FA05967AABC_H_ */ diff --git a/sakura_core/convert/CConvert_ToZenhira.h b/sakura_core/convert/CConvert_ToZenhira.h index 7594deb5ce..518c3a2417 100644 --- a/sakura_core/convert/CConvert_ToZenhira.h +++ b/sakura_core/convert/CConvert_ToZenhira.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCONVERT_TOZENHIRA_31D2B3A3_CB3F_43A5_A027_4FEE96D6731C_H_ +#define SAKURA_CCONVERT_TOZENHIRA_31D2B3A3_CB3F_43A5_A027_4FEE96D6731C_H_ #pragma once #include "CConvert.h" @@ -31,3 +33,4 @@ class CConvert_ToZenhira final : public CConvert{ public: bool DoConvert(CNativeW* pcData) override; }; +#endif /* SAKURA_CCONVERT_TOZENHIRA_31D2B3A3_CB3F_43A5_A027_4FEE96D6731C_H_ */ diff --git a/sakura_core/convert/CConvert_ToZenkata.h b/sakura_core/convert/CConvert_ToZenkata.h index 950d00264c..44118eb0a2 100644 --- a/sakura_core/convert/CConvert_ToZenkata.h +++ b/sakura_core/convert/CConvert_ToZenkata.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCONVERT_TOZENKATA_E29B7690_ADDA_4A97_9F09_BBBBBB4C1356_H_ +#define SAKURA_CCONVERT_TOZENKATA_E29B7690_ADDA_4A97_9F09_BBBBBB4C1356_H_ #pragma once #include "CConvert.h" @@ -31,3 +33,4 @@ class CConvert_ToZenkata final : public CConvert{ public: bool DoConvert(CNativeW* pcData) override; }; +#endif /* SAKURA_CCONVERT_TOZENKATA_E29B7690_ADDA_4A97_9F09_BBBBBB4C1356_H_ */ diff --git a/sakura_core/convert/CConvert_Trim.h b/sakura_core/convert/CConvert_Trim.h index c38e8ef887..55d7a72b03 100644 --- a/sakura_core/convert/CConvert_Trim.h +++ b/sakura_core/convert/CConvert_Trim.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCONVERT_TRIM_275C7AD4_8012_4E5E_B753_578F542BC69C_H_ +#define SAKURA_CCONVERT_TRIM_275C7AD4_8012_4E5E_B753_578F542BC69C_H_ #pragma once #include "CConvert.h" @@ -37,3 +39,4 @@ class CConvert_Trim final : public CConvert{ bool m_bLeft; bool m_bExtEol; }; +#endif /* SAKURA_CCONVERT_TRIM_275C7AD4_8012_4E5E_B753_578F542BC69C_H_ */ diff --git a/sakura_core/convert/CConvert_ZeneisuToHaneisu.h b/sakura_core/convert/CConvert_ZeneisuToHaneisu.h index 29c0440294..a82cdb1d15 100644 --- a/sakura_core/convert/CConvert_ZeneisuToHaneisu.h +++ b/sakura_core/convert/CConvert_ZeneisuToHaneisu.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCONVERT_ZENEISUTOHANEISU_D2E876FE_A781_4F64_B2CE_F6CBBF2FC563_H_ +#define SAKURA_CCONVERT_ZENEISUTOHANEISU_D2E876FE_A781_4F64_B2CE_F6CBBF2FC563_H_ #pragma once #include "CConvert.h" @@ -31,3 +33,4 @@ class CConvert_ZeneisuToHaneisu final : public CConvert{ public: bool DoConvert(CNativeW* pcData) override; }; +#endif /* SAKURA_CCONVERT_ZENEISUTOHANEISU_D2E876FE_A781_4F64_B2CE_F6CBBF2FC563_H_ */ diff --git a/sakura_core/convert/CConvert_ZenkataToHankata.h b/sakura_core/convert/CConvert_ZenkataToHankata.h index 61d2055be3..8440391d58 100644 --- a/sakura_core/convert/CConvert_ZenkataToHankata.h +++ b/sakura_core/convert/CConvert_ZenkataToHankata.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCONVERT_ZENKATATOHANKATA_423F8C6C_7FB9_467C_B1DD_2A021A5BAFF8_H_ +#define SAKURA_CCONVERT_ZENKATATOHANKATA_423F8C6C_7FB9_467C_B1DD_2A021A5BAFF8_H_ #pragma once #include "CConvert.h" @@ -31,3 +33,4 @@ class CConvert_ZenkataToHankata final : public CConvert{ public: bool DoConvert(CNativeW* pcData) override; }; +#endif /* SAKURA_CCONVERT_ZENKATATOHANKATA_423F8C6C_7FB9_467C_B1DD_2A021A5BAFF8_H_ */ diff --git a/sakura_core/convert/CDecode.h b/sakura_core/convert/CDecode.h index 51a6b12ec3..327835db09 100644 --- a/sakura_core/convert/CDecode.h +++ b/sakura_core/convert/CDecode.h @@ -26,6 +26,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CDECODE_2E6ED248_B211_48AB_BD69_032199189323_H_ +#define SAKURA_CDECODE_2E6ED248_B211_48AB_BD69_032199189323_H_ #pragma once class CDecode { @@ -47,3 +49,4 @@ class CDecode { //実装 virtual bool DoDecode( const CNativeW& pcData, CMemory* pDest )=0; }; +#endif /* SAKURA_CDECODE_2E6ED248_B211_48AB_BD69_032199189323_H_ */ diff --git a/sakura_core/convert/CDecode_Base64Decode.h b/sakura_core/convert/CDecode_Base64Decode.h index 8f90a3a5d0..cfbab88eb9 100644 --- a/sakura_core/convert/CDecode_Base64Decode.h +++ b/sakura_core/convert/CDecode_Base64Decode.h @@ -27,6 +27,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CDECODE_BASE64DECODE_5AA66699_D761_436E_87F6_C8CA30BD775D_H_ +#define SAKURA_CDECODE_BASE64DECODE_5AA66699_D761_436E_87F6_C8CA30BD775D_H_ #pragma once #include "convert/CDecode.h" @@ -35,3 +37,4 @@ class CDecode_Base64Decode final : public CDecode{ public: bool DoDecode(const CNativeW& cData, CMemory* pcDst) override; }; +#endif /* SAKURA_CDECODE_BASE64DECODE_5AA66699_D761_436E_87F6_C8CA30BD775D_H_ */ diff --git a/sakura_core/convert/CDecode_UuDecode.h b/sakura_core/convert/CDecode_UuDecode.h index cf14e1af45..40daeff4ac 100644 --- a/sakura_core/convert/CDecode_UuDecode.h +++ b/sakura_core/convert/CDecode_UuDecode.h @@ -27,6 +27,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CDECODE_UUDECODE_E299AA83_2825_45E6_866A_A08D73F8F47F_H_ +#define SAKURA_CDECODE_UUDECODE_E299AA83_2825_45E6_866A_A08D73F8F47F_H_ #pragma once #include "convert/CDecode.h" @@ -38,3 +40,4 @@ class CDecode_UuDecode final : public CDecode{ bool DoDecode(const CNativeW& cData, CMemory* pDst) override; void CopyFilename( WCHAR *pcDst ) const { wcscpy( pcDst, m_aFilename ); } }; +#endif /* SAKURA_CDECODE_UUDECODE_E299AA83_2825_45E6_866A_A08D73F8F47F_H_ */ diff --git a/sakura_core/convert/convert_util.h b/sakura_core/convert/convert_util.h index 59289cb5a9..5c0b4b52ba 100644 --- a/sakura_core/convert/convert_util.h +++ b/sakura_core/convert/convert_util.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CONVERT_UTIL_277AEF33_C47A_4760_A892_04C57763274E_H_ +#define SAKURA_CONVERT_UTIL_277AEF33_C47A_4760_A892_04C57763274E_H_ #pragma once //2007.10.18 kobake @@ -65,3 +67,4 @@ void Convert_HankataToZenkata(const wchar_t* pSrc, int nSrcLength, wchar_t* pDst pDstにはあらかじめ十分なメモリを確保しておくこと。 */ void Convert_HankataToZenhira(const wchar_t* pSrc, int nSrcLength, wchar_t* pDst, int* nDstLength); +#endif /* SAKURA_CONVERT_UTIL_277AEF33_C47A_4760_A892_04C57763274E_H_ */ diff --git a/sakura_core/convert/convert_util2.h b/sakura_core/convert/convert_util2.h index 00ed24e67c..a93815038a 100644 --- a/sakura_core/convert/convert_util2.h +++ b/sakura_core/convert/convert_util2.h @@ -27,6 +27,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CONVERT_UTIL2_9F00219B_A2FC_4096_BB26_197A667DFD25_H_ +#define SAKURA_CONVERT_UTIL2_9F00219B_A2FC_4096_BB26_197A667DFD25_H_ #pragma once #include "parse/CWordParse.h" @@ -722,3 +724,4 @@ finish_first_detect:; return nskipped_len; } +#endif /* SAKURA_CONVERT_UTIL2_9F00219B_A2FC_4096_BB26_197A667DFD25_H_ */ diff --git a/sakura_core/debug/CRunningTimer.h b/sakura_core/debug/CRunningTimer.h index 390fad8827..0678b98dc9 100644 --- a/sakura_core/debug/CRunningTimer.h +++ b/sakura_core/debug/CRunningTimer.h @@ -31,6 +31,8 @@ distribution. */ +#ifndef SAKURA_CRUNNINGTIMER_B4A1B7C4_EA83_41F2_9132_21DE3A57470D_H_ +#define SAKURA_CRUNNINGTIMER_B4A1B7C4_EA83_41F2_9132_21DE3A57470D_H_ #pragma once #include @@ -85,3 +87,4 @@ class CRunningTimer #define MY_TRACETIME(c,m) #define MY_RUNNINGTIMER(c,m) #endif +#endif /* SAKURA_CRUNNINGTIMER_B4A1B7C4_EA83_41F2_9132_21DE3A57470D_H_ */ diff --git a/sakura_core/debug/Debug1.h b/sakura_core/debug/Debug1.h index d18faad5c6..d284207fb4 100644 --- a/sakura_core/debug/Debug1.h +++ b/sakura_core/debug/Debug1.h @@ -12,6 +12,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_DEBUG1_382EF8C2_DA86_410F_80D9_7F357A356C80_H_ +#define SAKURA_DEBUG1_382EF8C2_DA86_410F_80D9_7F357A356C80_H_ #pragma once #include @@ -58,3 +60,4 @@ void DebugOutW( LPCWSTR lpFmt, ...); #else #define TRACE( ... ) #endif +#endif /* SAKURA_DEBUG1_382EF8C2_DA86_410F_80D9_7F357A356C80_H_ */ diff --git a/sakura_core/debug/Debug2.h b/sakura_core/debug/Debug2.h index 99f3e12902..cd453cdcf5 100644 --- a/sakura_core/debug/Debug2.h +++ b/sakura_core/debug/Debug2.h @@ -25,6 +25,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_DEBUG2_46C93AD6_37D9_4646_B78C_E09168383A42_H_ +#define SAKURA_DEBUG2_46C93AD6_37D9_4646_B78C_E09168383A42_H_ #pragma once #include @@ -61,3 +63,4 @@ #define assert(exp) #define assert_warning(exp) #endif +#endif /* SAKURA_DEBUG2_46C93AD6_37D9_4646_B78C_E09168383A42_H_ */ diff --git a/sakura_core/debug/Debug3.h b/sakura_core/debug/Debug3.h index a0ea91575e..268ba1bdf5 100644 --- a/sakura_core/debug/Debug3.h +++ b/sakura_core/debug/Debug3.h @@ -25,9 +25,12 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_DEBUG3_8861EC84_D1B0_4285_939E_6FEC4712DB31_H_ +#define SAKURA_DEBUG3_8861EC84_D1B0_4285_939E_6FEC4712DB31_H_ #pragma once #ifdef USE_DEBUGMON int DebugMonitor_Output(const wchar_t* szInstanceId, const wchar_t* szText); LPCWSTR GetWindowsMessageName(UINT msg); #endif +#endif /* SAKURA_DEBUG3_8861EC84_D1B0_4285_939E_6FEC4712DB31_H_ */ diff --git a/sakura_core/dlg/CDialog.h b/sakura_core/dlg/CDialog.h index 0f489dd035..10fdde678a 100644 --- a/sakura_core/dlg/CDialog.h +++ b/sakura_core/dlg/CDialog.h @@ -16,6 +16,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CDIALOG_17C8C15C_881C_4C1F_B953_CB11FCC8B70B_H_ +#define SAKURA_CDIALOG_17C8C15C_881C_4C1F_B953_CB11FCC8B70B_H_ #pragma once class CDialog; @@ -162,3 +164,4 @@ class CDialog // コントロールに画面のフォントを設定 2012/11/27 Uchi HFONT SetMainFont( HWND hTarget ); }; +#endif /* SAKURA_CDIALOG_17C8C15C_881C_4C1F_B953_CB11FCC8B70B_H_ */ diff --git a/sakura_core/dlg/CDlgAbout.h b/sakura_core/dlg/CDlgAbout.h index cdb104a6e9..79c557564b 100644 --- a/sakura_core/dlg/CDlgAbout.h +++ b/sakura_core/dlg/CDlgAbout.h @@ -13,6 +13,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CDLGABOUT_7F887984_7DEB_42C7_AB87_7CE7D9801700_H_ +#define SAKURA_CDLGABOUT_7F887984_7DEB_42C7_AB87_7CE7D9801700_H_ #pragma once #include "dlg/CDialog.h" @@ -62,3 +64,4 @@ class CDlgAbout final : public CDialog CUrlWnd m_UrlGitHubPRWnd; CUrlWnd m_UrlOrgWnd; }; +#endif /* SAKURA_CDLGABOUT_7F887984_7DEB_42C7_AB87_7CE7D9801700_H_ */ diff --git a/sakura_core/dlg/CDlgCancel.h b/sakura_core/dlg/CDlgCancel.h index aaba0b956a..c935661da7 100644 --- a/sakura_core/dlg/CDlgCancel.h +++ b/sakura_core/dlg/CDlgCancel.h @@ -13,6 +13,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CDLGCANCEL_D62561A1_41F6_4904_99B0_18EE33734269_H_ +#define SAKURA_CDLGCANCEL_D62561A1_41F6_4904_99B0_18EE33734269_H_ #pragma once class CDlgCancel; @@ -57,3 +59,4 @@ class CDlgCancel : public CDialog BOOL OnBnClicked(int wID) override; LPVOID GetHelpIdTable(void) override; //@@@ 2002.01.18 add }; +#endif /* SAKURA_CDLGCANCEL_D62561A1_41F6_4904_99B0_18EE33734269_H_ */ diff --git a/sakura_core/dlg/CDlgCompare.h b/sakura_core/dlg/CDlgCompare.h index ebbfa896b4..e4f8f7ebac 100644 --- a/sakura_core/dlg/CDlgCompare.h +++ b/sakura_core/dlg/CDlgCompare.h @@ -11,6 +11,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CDLGCOMPARE_58A610D8_1E87_4096_96E2_724BEAC310F1_H_ +#define SAKURA_CDLGCOMPARE_58A610D8_1E87_4096_96E2_724BEAC310F1_H_ #pragma once class CDlgCompare; @@ -58,3 +60,4 @@ class CDlgCompare final : public CDialog POINT m_ptDefaultSize; RECT m_rcItems[6]; }; +#endif /* SAKURA_CDLGCOMPARE_58A610D8_1E87_4096_96E2_724BEAC310F1_H_ */ diff --git a/sakura_core/dlg/CDlgCtrlCode.h b/sakura_core/dlg/CDlgCtrlCode.h index e2a5562100..a022809e89 100644 --- a/sakura_core/dlg/CDlgCtrlCode.h +++ b/sakura_core/dlg/CDlgCtrlCode.h @@ -28,6 +28,8 @@ distribution. */ +#ifndef SAKURA_CDLGCTRLCODE_84B2AD70_76BB_4CE3_9B09_4D1AF49BF5EE_H_ +#define SAKURA_CDLGCTRLCODE_84B2AD70_76BB_4CE3_9B09_4D1AF49BF5EE_H_ #pragma once class CDlgCtrlCode; @@ -70,3 +72,4 @@ class CDlgCtrlCode final : public CDialog */ wchar_t m_nCode; // コード }; +#endif /* SAKURA_CDLGCTRLCODE_84B2AD70_76BB_4CE3_9B09_4D1AF49BF5EE_H_ */ diff --git a/sakura_core/dlg/CDlgDiff.h b/sakura_core/dlg/CDlgDiff.h index 47addd2418..34eedb5ead 100644 --- a/sakura_core/dlg/CDlgDiff.h +++ b/sakura_core/dlg/CDlgDiff.h @@ -29,6 +29,8 @@ distribution. */ +#ifndef SAKURA_CDLGDIFF_57739DBD_0797_4F83_9DB0_F4D51A54157F_H_ +#define SAKURA_CDLGDIFF_57739DBD_0797_4F83_9DB0_F4D51A54157F_H_ #pragma once class CDlgDiff; @@ -83,3 +85,4 @@ class CDlgDiff final : public CDialog int m_nDiffFlgOpt; // DIFFオプション HWND m_hWnd_Dst; // 相手ウインドウハンドル }; +#endif /* SAKURA_CDLGDIFF_57739DBD_0797_4F83_9DB0_F4D51A54157F_H_ */ diff --git a/sakura_core/dlg/CDlgExec.h b/sakura_core/dlg/CDlgExec.h index 1f4d8056ee..1dbd6459f4 100644 --- a/sakura_core/dlg/CDlgExec.h +++ b/sakura_core/dlg/CDlgExec.h @@ -11,6 +11,8 @@ This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CDLGEXEC_4A4BE162_D6C9_4E28_B1AC_091DFFE7DD72_H_ +#define SAKURA_CDLGEXEC_4A4BE162_D6C9_4E28_B1AC_091DFFE7DD72_H_ #pragma once #include "dlg/CDialog.h" @@ -47,3 +49,4 @@ class CDlgExec final : public CDialog BOOL OnBnClicked(int wID) override; LPVOID GetHelpIdTable(void) override; //@@@ 2002.01.18 add }; +#endif /* SAKURA_CDLGEXEC_4A4BE162_D6C9_4E28_B1AC_091DFFE7DD72_H_ */ diff --git a/sakura_core/dlg/CDlgFavorite.h b/sakura_core/dlg/CDlgFavorite.h index 72f537bb6f..141d92bf54 100644 --- a/sakura_core/dlg/CDlgFavorite.h +++ b/sakura_core/dlg/CDlgFavorite.h @@ -29,6 +29,8 @@ distribution. */ +#ifndef SAKURA_CDLGFAVORITE_D3C5AE69_3DBD_4C29_9918_BCC0D3BE61FE_H_ +#define SAKURA_CDLGFAVORITE_D3C5AE69_3DBD_4C29_9918_BCC0D3BE61FE_H_ #pragma once #include "dlg/CDialog.h" @@ -137,3 +139,4 @@ class CDlgFavorite final : public CDialog static void ListViewSort(ListViewSortInfo& info, const CRecent* pRecent, int column, bool bReverse); }; +#endif /* SAKURA_CDLGFAVORITE_D3C5AE69_3DBD_4C29_9918_BCC0D3BE61FE_H_ */ diff --git a/sakura_core/dlg/CDlgFileUpdateQuery.h b/sakura_core/dlg/CDlgFileUpdateQuery.h index 4980b602a4..e49c0f807d 100644 --- a/sakura_core/dlg/CDlgFileUpdateQuery.h +++ b/sakura_core/dlg/CDlgFileUpdateQuery.h @@ -29,6 +29,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CDLGFILEUPDATEQUERY_1A03B33B_FB78_44D9_BB96_96506DAD0C2E_H_ +#define SAKURA_CDLGFILEUPDATEQUERY_1A03B33B_FB78_44D9_BB96_96506DAD0C2E_H_ #pragma once #include "dlg/CDialog.h" @@ -55,3 +57,4 @@ class CDlgFileUpdateQuery final : public CDialog { const WCHAR* m_pFilename; bool m_bModified; }; +#endif /* SAKURA_CDLGFILEUPDATEQUERY_1A03B33B_FB78_44D9_BB96_96506DAD0C2E_H_ */ diff --git a/sakura_core/dlg/CDlgFind.h b/sakura_core/dlg/CDlgFind.h index dbe7fd2951..fcbb474c7f 100644 --- a/sakura_core/dlg/CDlgFind.h +++ b/sakura_core/dlg/CDlgFind.h @@ -12,6 +12,8 @@ This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CDLGFIND_AF260AA4_6075_4B87_9F03_2CEEDAD64094_H_ +#define SAKURA_CDLGFIND_AF260AA4_6075_4B87_9F03_2CEEDAD64094_H_ #pragma once #include "dlg/CDialog.h" @@ -61,3 +63,4 @@ class CDlgFind final : public CDialog // BOOL OnKeyDown( WPARAM wParam, LPARAM lParam ) override; LPVOID GetHelpIdTable(void) override; //@@@ 2002.01.18 add }; +#endif /* SAKURA_CDLGFIND_AF260AA4_6075_4B87_9F03_2CEEDAD64094_H_ */ diff --git a/sakura_core/dlg/CDlgGrep.h b/sakura_core/dlg/CDlgGrep.h index 044204b38a..b8760fffb4 100644 --- a/sakura_core/dlg/CDlgGrep.h +++ b/sakura_core/dlg/CDlgGrep.h @@ -12,6 +12,8 @@ This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CDLGGREP_01A0D5CB_326B_4C56_A527_C811F84FD8D8_H_ +#define SAKURA_CDLGGREP_01A0D5CB_326B_4C56_A527_C811F84FD8D8_H_ #pragma once class CDlgGrep; @@ -88,3 +90,4 @@ class CDlgGrep : public CDialog int GetData( void ) override; /* ダイアログデータの取得 */ void SetDataFromThisText(bool bChecked); /* 現在編集中ファイルから検索チェックでの設定 */ }; +#endif /* SAKURA_CDLGGREP_01A0D5CB_326B_4C56_A527_C811F84FD8D8_H_ */ diff --git a/sakura_core/dlg/CDlgGrepReplace.h b/sakura_core/dlg/CDlgGrepReplace.h index c1b3b74700..e0b5215a9a 100644 --- a/sakura_core/dlg/CDlgGrepReplace.h +++ b/sakura_core/dlg/CDlgGrepReplace.h @@ -12,6 +12,8 @@ This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CDLGGREPREPLACE_D97F4D2D_9963_40FB_91C1_5A6FF0407E99_H_ +#define SAKURA_CDLGGREPREPLACE_D97F4D2D_9963_40FB_91C1_5A6FF0407E99_H_ #pragma once class CDlgGrep; @@ -54,3 +56,4 @@ class CDlgGrepReplace final : public CDlgGrep void SetData( void ) override; /* ダイアログデータの設定 */ int GetData( void ) override; /* ダイアログデータの取得 */ }; +#endif /* SAKURA_CDLGGREPREPLACE_D97F4D2D_9963_40FB_91C1_5A6FF0407E99_H_ */ diff --git a/sakura_core/dlg/CDlgInput1.h b/sakura_core/dlg/CDlgInput1.h index d8d43eca79..00b6053f5a 100644 --- a/sakura_core/dlg/CDlgInput1.h +++ b/sakura_core/dlg/CDlgInput1.h @@ -10,6 +10,8 @@ This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CDLGINPUT1_43CB765B_D257_4DBC_85E9_D2587B7E9D8E_H_ +#define SAKURA_CDLGINPUT1_43CB765B_D257_4DBC_85E9_D2587B7E9D8E_H_ #pragma once class CDlgInput1; @@ -50,3 +52,4 @@ class CDlgInput1 || 実装ヘルパ関数 */ }; +#endif /* SAKURA_CDLGINPUT1_43CB765B_D257_4DBC_85E9_D2587B7E9D8E_H_ */ diff --git a/sakura_core/dlg/CDlgJump.h b/sakura_core/dlg/CDlgJump.h index 2838185a70..f483bb4800 100644 --- a/sakura_core/dlg/CDlgJump.h +++ b/sakura_core/dlg/CDlgJump.h @@ -13,6 +13,8 @@ This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CDLGJUMP_13AD9DC8_92E0_43AB_81D4_A0FBA28EE2D8_H_ +#define SAKURA_CDLGJUMP_13AD9DC8_92E0_43AB_81D4_A0FBA28EE2D8_H_ #pragma once class CDlgJump; @@ -49,3 +51,4 @@ class CDlgJump final : public CDialog void SetData( void ) override; /* ダイアログデータの設定 */ int GetData( void ) override; /* ダイアログデータの取得 */ }; +#endif /* SAKURA_CDLGJUMP_13AD9DC8_92E0_43AB_81D4_A0FBA28EE2D8_H_ */ diff --git a/sakura_core/dlg/CDlgOpenFile.h b/sakura_core/dlg/CDlgOpenFile.h index 549cd04f7a..aa29da901c 100644 --- a/sakura_core/dlg/CDlgOpenFile.h +++ b/sakura_core/dlg/CDlgOpenFile.h @@ -17,6 +17,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CDLGOPENFILE_8084B9DB_6463_4168_BA59_132EB2596AE7_H_ +#define SAKURA_CDLGOPENFILE_8084B9DB_6463_4168_BA59_132EB2596AE7_H_ #pragma once #include @@ -114,3 +116,4 @@ class CDlgOpenFile final : public IDlgOpenFile private: std::shared_ptr m_pImpl; }; +#endif /* SAKURA_CDLGOPENFILE_8084B9DB_6463_4168_BA59_132EB2596AE7_H_ */ diff --git a/sakura_core/dlg/CDlgPluginOption.h b/sakura_core/dlg/CDlgPluginOption.h index 2b0ebe65a6..3f0343e8fc 100644 --- a/sakura_core/dlg/CDlgPluginOption.h +++ b/sakura_core/dlg/CDlgPluginOption.h @@ -27,6 +27,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CDLGPLUGINOPTION_AF75E03E_99DB_4AEF_93AF_BFF669310DE6_H_ +#define SAKURA_CDLGPLUGINOPTION_AF75E03E_99DB_4AEF_93AF_BFF669310DE6_H_ #pragma once #include "dlg/CDialog.h" @@ -95,3 +97,4 @@ class CDlgPluginOption final : public CDialog int m_Line; // 現在編集中のオプション行番号 std::wstring m_sReadMeName; // ReadMe ファイル名 }; +#endif /* SAKURA_CDLGPLUGINOPTION_AF75E03E_99DB_4AEF_93AF_BFF669310DE6_H_ */ diff --git a/sakura_core/dlg/CDlgPrintSetting.h b/sakura_core/dlg/CDlgPrintSetting.h index 6326c46fbd..c79437e99a 100644 --- a/sakura_core/dlg/CDlgPrintSetting.h +++ b/sakura_core/dlg/CDlgPrintSetting.h @@ -27,6 +27,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CDLGPRINTSETTING_CA277796_0DDF_4D2D_92A6_67ACAC460E10_H_ +#define SAKURA_CDLGPRINTSETTING_CA277796_0DDF_4D2D_92A6_67ACAC460E10_H_ #pragma once #include "dlg/CDialog.h" @@ -82,3 +84,4 @@ class CDlgPrintSetting final : public CDialog void UpdatePrintableLineAndColumn(); /* 行数と桁数の計算要求 */ void SetFontName( int idTxt, int idUse, LOGFONT& lf, int nPointSize ); // フォント名/使用ボタンの設定 }; +#endif /* SAKURA_CDLGPRINTSETTING_CA277796_0DDF_4D2D_92A6_67ACAC460E10_H_ */ diff --git a/sakura_core/dlg/CDlgProfileMgr.h b/sakura_core/dlg/CDlgProfileMgr.h index b302fce149..31f512af14 100644 --- a/sakura_core/dlg/CDlgProfileMgr.h +++ b/sakura_core/dlg/CDlgProfileMgr.h @@ -27,6 +27,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CDLGPROFILEMGR_E77A329C_4D06_436A_84E3_01B4D8F34A9A_H_ +#define SAKURA_CDLGPROFILEMGR_E77A329C_4D06_436A_84E3_01B4D8F34A9A_H_ #pragma once #include "dlg/CDialog.h" @@ -80,3 +82,4 @@ class CDlgProfileMgr final : public CDialog static bool ReadProfSettings(SProfileSettings& settings); static bool WriteProfSettings(SProfileSettings& settings); }; +#endif /* SAKURA_CDLGPROFILEMGR_E77A329C_4D06_436A_84E3_01B4D8F34A9A_H_ */ diff --git a/sakura_core/dlg/CDlgProperty.h b/sakura_core/dlg/CDlgProperty.h index 6939edc87d..0b38e31a30 100644 --- a/sakura_core/dlg/CDlgProperty.h +++ b/sakura_core/dlg/CDlgProperty.h @@ -28,6 +28,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CDLGPROPERTY_FF915918_FBA0_4D89_9A72_5E1409D7F88A_H_ +#define SAKURA_CDLGPROPERTY_FF915918_FBA0_4D89_9A72_5E1409D7F88A_H_ #pragma once class CDlgProperty; @@ -48,3 +50,4 @@ class CDlgProperty final : public CDialog void SetData( void ) override; /* ダイアログデータの設定 */ LPVOID GetHelpIdTable(void) override; //@@@ 2002.01.18 add }; +#endif /* SAKURA_CDLGPROPERTY_FF915918_FBA0_4D89_9A72_5E1409D7F88A_H_ */ diff --git a/sakura_core/dlg/CDlgReplace.h b/sakura_core/dlg/CDlgReplace.h index f04c53cba2..735cd02a97 100644 --- a/sakura_core/dlg/CDlgReplace.h +++ b/sakura_core/dlg/CDlgReplace.h @@ -15,6 +15,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CDLGREPLACE_37D62C07_5DAB_4CAC_A8B2_83C75329F8B7_H_ +#define SAKURA_CDLGREPLACE_37D62C07_5DAB_4CAC_A8B2_83C75329F8B7_H_ #pragma once #include "dlg/CDialog.h" @@ -77,3 +79,4 @@ class CDlgReplace final : public CDialog void SetCombosList( void ); /* 検索文字列/置換後文字列リストの設定 */ int GetData( void ) override; /* ダイアログデータの取得 */ }; +#endif /* SAKURA_CDLGREPLACE_37D62C07_5DAB_4CAC_A8B2_83C75329F8B7_H_ */ diff --git a/sakura_core/dlg/CDlgSetCharSet.h b/sakura_core/dlg/CDlgSetCharSet.h index 725593da3e..08dc178ee0 100644 --- a/sakura_core/dlg/CDlgSetCharSet.h +++ b/sakura_core/dlg/CDlgSetCharSet.h @@ -11,6 +11,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CDLGSETCHARSET_82E8A81C_64D0_45DE_BECC_4721CCC93FEB_H_ +#define SAKURA_CDLGSETCHARSET_82E8A81C_64D0_45DE_BECC_4721CCC93FEB_H_ #pragma once #include "dlg/CDialog.h" @@ -48,3 +50,4 @@ class CDlgSetCharSet final : public CDialog void SetBOM( void ); // BOM の設定 }; +#endif /* SAKURA_CDLGSETCHARSET_82E8A81C_64D0_45DE_BECC_4721CCC93FEB_H_ */ diff --git a/sakura_core/dlg/CDlgTagJumpList.h b/sakura_core/dlg/CDlgTagJumpList.h index 83972cd07b..d540610381 100644 --- a/sakura_core/dlg/CDlgTagJumpList.h +++ b/sakura_core/dlg/CDlgTagJumpList.h @@ -30,6 +30,8 @@ distribution. */ +#ifndef SAKURA_CDLGTAGJUMPLIST_D44C3C98_9BF7_4B99_923B_9005CD54872F_H_ +#define SAKURA_CDLGTAGJUMPLIST_D44C3C98_9BF7_4B99_923B_9005CD54872F_H_ #pragma once #include "dlg/CDialog.h" @@ -171,3 +173,4 @@ class CDlgTagJumpList final : public CDialog DISALLOW_COPY_AND_ASSIGN(CDlgTagJumpList); }; +#endif /* SAKURA_CDLGTAGJUMPLIST_D44C3C98_9BF7_4B99_923B_9005CD54872F_H_ */ diff --git a/sakura_core/dlg/CDlgTagsMake.h b/sakura_core/dlg/CDlgTagsMake.h index f954bd377e..a9c2480836 100644 --- a/sakura_core/dlg/CDlgTagsMake.h +++ b/sakura_core/dlg/CDlgTagsMake.h @@ -28,6 +28,8 @@ distribution. */ +#ifndef SAKURA_CDLGTAGSMAKE_65A013DF_4315_4254_8C64_4E7489E8E5FC_H_ +#define SAKURA_CDLGTAGSMAKE_65A013DF_4315_4254_8C64_4E7489E8E5FC_H_ #pragma once class CDlgTagsMake; @@ -66,3 +68,4 @@ class CDlgTagsMake final : public CDialog private: void SelectFolder( HWND hwndDlg ); }; +#endif /* SAKURA_CDLGTAGSMAKE_65A013DF_4315_4254_8C64_4E7489E8E5FC_H_ */ diff --git a/sakura_core/dlg/CDlgWinSize.h b/sakura_core/dlg/CDlgWinSize.h index 9453514673..edd13ef487 100644 --- a/sakura_core/dlg/CDlgWinSize.h +++ b/sakura_core/dlg/CDlgWinSize.h @@ -28,6 +28,8 @@ distribution. */ +#ifndef SAKURA_CDLGWINSIZE_864AE2FE_C5EB_4CF8_9812_197F16568FFE_H_ +#define SAKURA_CDLGWINSIZE_864AE2FE_C5EB_4CF8_9812_197F16568FFE_H_ #pragma once #include "dlg/CDialog.h" @@ -64,3 +66,4 @@ class CDlgWinSize final : public CDialog int m_nWinSizeType; //!< ウィンドウ表示方法: 0/標準,1/最大化,2/最小化 RECT m_rc; }; +#endif /* SAKURA_CDLGWINSIZE_864AE2FE_C5EB_4CF8_9812_197F16568FFE_H_ */ diff --git a/sakura_core/dlg/CDlgWindowList.h b/sakura_core/dlg/CDlgWindowList.h index a82715c0b9..3586442c72 100644 --- a/sakura_core/dlg/CDlgWindowList.h +++ b/sakura_core/dlg/CDlgWindowList.h @@ -28,6 +28,8 @@ distribution. */ +#ifndef SAKURA_CDLGWINDOWLIST_EBED03A4_1BD8_4EEE_93D0_32E8C3A1F5FD_H_ +#define SAKURA_CDLGWINDOWLIST_EBED03A4_1BD8_4EEE_93D0_32E8C3A1F5FD_H_ #pragma once #include "dlg/CDialog.h" @@ -57,3 +59,4 @@ class CDlgWindowList final : public CDialog POINT m_ptDefaultSize; RECT m_rcItems[5]; }; +#endif /* SAKURA_CDLGWINDOWLIST_EBED03A4_1BD8_4EEE_93D0_32E8C3A1F5FD_H_ */ diff --git a/sakura_core/doc/CBlockComment.h b/sakura_core/doc/CBlockComment.h index 196ec7534e..abd595d798 100644 --- a/sakura_core/doc/CBlockComment.h +++ b/sakura_core/doc/CBlockComment.h @@ -12,6 +12,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CBLOCKCOMMENT_95985D15_B554_4761_9C32_30FE0E1724EC_H_ +#define SAKURA_CBLOCKCOMMENT_95985D15_B554_4761_9C32_30FE0E1724EC_H_ #pragma once // sakura @@ -57,3 +59,4 @@ class CBlockComment{ int m_nBlockFromLen; int m_nBlockToLen; }; +#endif /* SAKURA_CBLOCKCOMMENT_95985D15_B554_4761_9C32_30FE0E1724EC_H_ */ diff --git a/sakura_core/doc/CDocEditor.h b/sakura_core/doc/CDocEditor.h index 2e3efc5521..f10f6fe074 100644 --- a/sakura_core/doc/CDocEditor.h +++ b/sakura_core/doc/CDocEditor.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CDOCEDITOR_87202DA6_D60E_4235_AD2F_02507F4E101A_H_ +#define SAKURA_CDOCEDITOR_87202DA6_D60E_4235_AD2F_02507F4E101A_H_ #pragma once #include "doc/CDocListener.h" @@ -108,3 +110,4 @@ class CDocEditAgent{ private: CDocLineMgr* m_pcDocLineMgr; }; +#endif /* SAKURA_CDOCEDITOR_87202DA6_D60E_4235_AD2F_02507F4E101A_H_ */ diff --git a/sakura_core/doc/CDocFile.h b/sakura_core/doc/CDocFile.h index bfbec22972..748f4c88da 100644 --- a/sakura_core/doc/CDocFile.h +++ b/sakura_core/doc/CDocFile.h @@ -23,6 +23,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CDOCFILE_E6C44A51_14C1_4D5E_BE03_70E617EF0E89_H_ +#define SAKURA_CDOCFILE_E6C44A51_14C1_4D5E_BE03_70E617EF0E89_H_ #pragma once #include "io/CFile.h" @@ -77,3 +79,4 @@ class CDocFile : public CFile{ SFileInfo m_sFileInfo; CFilePath m_szSaveFilePath; /* 保存時のファイルのパス(マクロ用) */ // 2006.09.04 ryoji }; +#endif /* SAKURA_CDOCFILE_E6C44A51_14C1_4D5E_BE03_70E617EF0E89_H_ */ diff --git a/sakura_core/doc/CDocFileOperation.h b/sakura_core/doc/CDocFileOperation.h index d9062a0ea9..597ccccdef 100644 --- a/sakura_core/doc/CDocFileOperation.h +++ b/sakura_core/doc/CDocFileOperation.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CDOCFILEOPERATION_EE1C0546_8985_4FB1_941F_3BCC29BB3997_H_ +#define SAKURA_CDOCFILEOPERATION_EE1C0546_8985_4FB1_941F_3BCC29BB3997_H_ #pragma once #include "doc/CDocListener.h" // SLoadInfo @@ -78,3 +80,4 @@ class CDocFileOperation{ private: CEditDoc* m_pcDocRef; }; +#endif /* SAKURA_CDOCFILEOPERATION_EE1C0546_8985_4FB1_941F_3BCC29BB3997_H_ */ diff --git a/sakura_core/doc/CDocListener.h b/sakura_core/doc/CDocListener.h index 05d6fc8b70..70f5b9c9cc 100644 --- a/sakura_core/doc/CDocListener.h +++ b/sakura_core/doc/CDocListener.h @@ -32,6 +32,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CDOCLISTENER_BEF5B814_A5B8_4D07_9B2F_009A5CB29B2F_H_ +#define SAKURA_CDOCLISTENER_BEF5B814_A5B8_4D07_9B2F_009A5CB29B2F_H_ #pragma once class CDocListener; @@ -211,3 +213,4 @@ class CFlowInterruption : public std::exception{ public: const char* what() const throw(){ return "CFlowInterruption"; } }; +#endif /* SAKURA_CDOCLISTENER_BEF5B814_A5B8_4D07_9B2F_009A5CB29B2F_H_ */ diff --git a/sakura_core/doc/CDocLocker.h b/sakura_core/doc/CDocLocker.h index 44dd329aa4..b1edf30534 100644 --- a/sakura_core/doc/CDocLocker.h +++ b/sakura_core/doc/CDocLocker.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CDOCLOCKER_6B8C1CF4_B0FD_4631_ADB4_E53776A2FAAE_H_ +#define SAKURA_CDOCLOCKER_6B8C1CF4_B0FD_4631_ADB4_E53776A2FAAE_H_ #pragma once #include "doc/CDocListener.h" @@ -49,3 +51,4 @@ class CDocLocker : public CDocListenerEx{ private: bool m_bIsDocWritable; }; +#endif /* SAKURA_CDOCLOCKER_6B8C1CF4_B0FD_4631_ADB4_E53776A2FAAE_H_ */ diff --git a/sakura_core/doc/CDocOutline.h b/sakura_core/doc/CDocOutline.h index c447d2787a..113574c41f 100644 --- a/sakura_core/doc/CDocOutline.h +++ b/sakura_core/doc/CDocOutline.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CDOCOUTLINE_BDF55702_D938_432D_99F2_BF0F98A7C5FE_H_ +#define SAKURA_CDOCOUTLINE_BDF55702_D938_432D_99F2_BF0F98A7C5FE_H_ #pragma once class CEditDoc; @@ -55,3 +57,4 @@ class CDocOutline{ private: CEditDoc* m_pcDocRef; }; +#endif /* SAKURA_CDOCOUTLINE_BDF55702_D938_432D_99F2_BF0F98A7C5FE_H_ */ diff --git a/sakura_core/doc/CDocReader.h b/sakura_core/doc/CDocReader.h index d3cd52c609..d5a2296548 100644 --- a/sakura_core/doc/CDocReader.h +++ b/sakura_core/doc/CDocReader.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CDOCREADER_0183B68F_2942_40E1_B2A4_59FE0C20268F_H_ +#define SAKURA_CDOCREADER_0183B68F_2942_40E1_B2A4_59FE0C20268F_H_ #pragma once class CDocLineMgr; @@ -40,3 +42,4 @@ class CDocReader{ private: const CDocLineMgr* m_pcDocLineMgr; }; +#endif /* SAKURA_CDOCREADER_0183B68F_2942_40E1_B2A4_59FE0C20268F_H_ */ diff --git a/sakura_core/doc/CDocType.h b/sakura_core/doc/CDocType.h index 612607eed1..2cd005d12d 100644 --- a/sakura_core/doc/CDocType.h +++ b/sakura_core/doc/CDocType.h @@ -27,6 +27,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CDOCTYPE_7009DED0_A784_49F3_B8C0_9A2559A9DAFA_H_ +#define SAKURA_CDOCTYPE_7009DED0_A784_49F3_B8C0_9A2559A9DAFA_H_ #pragma once #include "types/CType.h" // CTypeConfig @@ -67,3 +69,4 @@ class CDocType{ STypeConfig m_typeConfig; bool m_nSettingTypeLocked; //!< 文書種別の一時設定状態 }; +#endif /* SAKURA_CDOCTYPE_7009DED0_A784_49F3_B8C0_9A2559A9DAFA_H_ */ diff --git a/sakura_core/doc/CDocTypeSetting.h b/sakura_core/doc/CDocTypeSetting.h index 019ce57c8c..6437efcfbd 100644 --- a/sakura_core/doc/CDocTypeSetting.h +++ b/sakura_core/doc/CDocTypeSetting.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CDOCTYPESETTING_87013082_2E52_4683_8CEE_499218F2D584_H_ +#define SAKURA_CDOCTYPESETTING_87013082_2E52_4683_8CEE_499218F2D584_H_ #pragma once #include "basis/CMyString.h" //SFilePath @@ -71,3 +73,4 @@ struct KeyHelpInfo { SFilePath m_szPath; //!< ファイルパス }; //@@@ 2006.04.10 fon ADD-end +#endif /* SAKURA_CDOCTYPESETTING_87013082_2E52_4683_8CEE_499218F2D584_H_ */ diff --git a/sakura_core/doc/CDocVisitor.h b/sakura_core/doc/CDocVisitor.h index ab01c85788..48b29a7441 100644 --- a/sakura_core/doc/CDocVisitor.h +++ b/sakura_core/doc/CDocVisitor.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CDOCVISITOR_02993457_F17D_4B64_A914_C954D40568B1_H_ +#define SAKURA_CDOCVISITOR_02993457_F17D_4B64_A914_C954D40568B1_H_ #pragma once #include "CEol.h" @@ -36,3 +38,4 @@ class CDocVisitor{ private: CEditDoc* m_pcDocRef; }; +#endif /* SAKURA_CDOCVISITOR_02993457_F17D_4B64_A914_C954D40568B1_H_ */ diff --git a/sakura_core/doc/CEditDoc.h b/sakura_core/doc/CEditDoc.h index e71c878d35..953a247e54 100644 --- a/sakura_core/doc/CEditDoc.h +++ b/sakura_core/doc/CEditDoc.h @@ -37,6 +37,8 @@ distribution. */ +#ifndef SAKURA_CEDITDOC_D845B5F3_FD71_4722_B115_63145B804253_H_ +#define SAKURA_CEDITDOC_D845B5F3_FD71_4722_B115_63145B804253_H_ #pragma once #include "_main/global.h" @@ -164,3 +166,4 @@ class CEditDoc int m_nBackImgWidth; int m_nBackImgHeight; }; +#endif /* SAKURA_CEDITDOC_D845B5F3_FD71_4722_B115_63145B804253_H_ */ diff --git a/sakura_core/doc/CLineComment.h b/sakura_core/doc/CLineComment.h index f16ab44ffa..249f0a7d0a 100644 --- a/sakura_core/doc/CLineComment.h +++ b/sakura_core/doc/CLineComment.h @@ -11,6 +11,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CLINECOMMENT_FAE12DDF_1FAE_45C6_8614_AB0F03F9E888_H_ +#define SAKURA_CLINECOMMENT_FAE12DDF_1FAE_45C6_8614_AB0F03F9E888_H_ #pragma once // sakura @@ -49,3 +51,4 @@ class CLineComment int m_nLineCommentPos[COMMENT_DELIMITER_NUM]; //!< 行コメントの開始位置(負数は指定無し) int m_nLineCommentLen[COMMENT_DELIMITER_NUM]; //!< 行コメント文字列の長さ }; +#endif /* SAKURA_CLINECOMMENT_FAE12DDF_1FAE_45C6_8614_AB0F03F9E888_H_ */ diff --git a/sakura_core/doc/layout/CLayout.h b/sakura_core/doc/layout/CLayout.h index 8a6c166042..540bd461d8 100644 --- a/sakura_core/doc/layout/CLayout.h +++ b/sakura_core/doc/layout/CLayout.h @@ -13,6 +13,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CLAYOUT_7DF189B5_10E6_42A4_8A49_371C848CB38F_H_ +#define SAKURA_CLAYOUT_7DF189B5_10E6_42A4_8A49_371C848CB38F_H_ #pragma once #include "util/design_template.h" @@ -130,3 +132,4 @@ class CLayout DISALLOW_COPY_AND_ASSIGN(CLayout); }; +#endif /* SAKURA_CLAYOUT_7DF189B5_10E6_42A4_8A49_371C848CB38F_H_ */ diff --git a/sakura_core/doc/layout/CLayoutExInfo.h b/sakura_core/doc/layout/CLayoutExInfo.h index c44db09909..d9bfdd1866 100644 --- a/sakura_core/doc/layout/CLayoutExInfo.h +++ b/sakura_core/doc/layout/CLayoutExInfo.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CLAYOUTEXINFO_735DC1F2_72C6_4B21_934B_7D9F8C234154_H_ +#define SAKURA_CLAYOUTEXINFO_735DC1F2_72C6_4B21_934B_7D9F8C234154_H_ #pragma once #include "util/design_template.h" @@ -59,3 +61,4 @@ class CLayoutExInfo DISALLOW_COPY_AND_ASSIGN(CLayoutExInfo); }; +#endif /* SAKURA_CLAYOUTEXINFO_735DC1F2_72C6_4B21_934B_7D9F8C234154_H_ */ diff --git a/sakura_core/doc/layout/CLayoutMgr.h b/sakura_core/doc/layout/CLayoutMgr.h index a99ade78e6..455e36d88c 100644 --- a/sakura_core/doc/layout/CLayoutMgr.h +++ b/sakura_core/doc/layout/CLayoutMgr.h @@ -19,6 +19,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CLAYOUTMGR_5398B1C5_280C_4D86_B7BB_C7B5C8B0403F_H_ +#define SAKURA_CLAYOUTMGR_5398B1C5_280C_4D86_B7BB_C7B5C8B0403F_H_ #pragma once #include // 2002/2/10 aroka @@ -423,3 +425,4 @@ class CLayoutMgr : public CProgressSubject DISALLOW_COPY_AND_ASSIGN(CLayoutMgr); }; +#endif /* SAKURA_CLAYOUTMGR_5398B1C5_280C_4D86_B7BB_C7B5C8B0403F_H_ */ diff --git a/sakura_core/doc/layout/CTsvModeInfo.h b/sakura_core/doc/layout/CTsvModeInfo.h index b3ef15f65c..b28138026d 100644 --- a/sakura_core/doc/layout/CTsvModeInfo.h +++ b/sakura_core/doc/layout/CTsvModeInfo.h @@ -24,6 +24,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CTSVMODEINFO_3AD2F099_5EBE_493E_9DD3_FEBAEDDE9513_H_ +#define SAKURA_CTSVMODEINFO_3AD2F099_5EBE_493E_9DD3_FEBAEDDE9513_H_ #pragma once #include @@ -50,3 +52,4 @@ class CTsvModeInfo { private: std::vector m_tabLength; }; +#endif /* SAKURA_CTSVMODEINFO_3AD2F099_5EBE_493E_9DD3_FEBAEDDE9513_H_ */ diff --git a/sakura_core/doc/logic/CDocLine.h b/sakura_core/doc/logic/CDocLine.h index 54b96572df..2eb3180089 100644 --- a/sakura_core/doc/logic/CDocLine.h +++ b/sakura_core/doc/logic/CDocLine.h @@ -15,6 +15,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CDOCLINE_B592082C_24CC_41A6_A931_774BE9675F42_H_ +#define SAKURA_CDOCLINE_B592082C_24CC_41A6_A931_774BE9675F42_H_ #pragma once #include "util/design_template.h" @@ -133,3 +135,4 @@ class CDocLine{ }; #pragma pack(pop) +#endif /* SAKURA_CDOCLINE_B592082C_24CC_41A6_A931_774BE9675F42_H_ */ diff --git a/sakura_core/doc/logic/CDocLineMgr.h b/sakura_core/doc/logic/CDocLineMgr.h index 9f6d955967..9061863042 100644 --- a/sakura_core/doc/logic/CDocLineMgr.h +++ b/sakura_core/doc/logic/CDocLineMgr.h @@ -17,6 +17,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CDOCLINEMGR_2896A92E_87D2_4BA6_A745_95A5C157E59D_H_ +#define SAKURA_CDOCLINEMGR_2896A92E_87D2_4BA6_A745_95A5C157E59D_H_ #pragma once #include @@ -99,3 +101,4 @@ class CDocLineMgr{ DISALLOW_COPY_AND_ASSIGN(CDocLineMgr); }; +#endif /* SAKURA_CDOCLINEMGR_2896A92E_87D2_4BA6_A745_95A5C157E59D_H_ */ diff --git a/sakura_core/docplus/CBookmarkManager.h b/sakura_core/docplus/CBookmarkManager.h index 2dc3be9d19..aa5b0418af 100644 --- a/sakura_core/docplus/CBookmarkManager.h +++ b/sakura_core/docplus/CBookmarkManager.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CBOOKMARKMANAGER_982C4B01_0D6B_4F6E_9DD8_5CA15DE5EC17_H_ +#define SAKURA_CBOOKMARKMANAGER_982C4B01_0D6B_4F6E_9DD8_5CA15DE5EC17_H_ #pragma once #include "_main/global.h" // ESearchDirection, SSearchOption @@ -74,3 +76,4 @@ class CBookmarkManager{ private: CDocLineMgr* m_pcDocLineMgr; }; +#endif /* SAKURA_CBOOKMARKMANAGER_982C4B01_0D6B_4F6E_9DD8_5CA15DE5EC17_H_ */ diff --git a/sakura_core/docplus/CDiffManager.h b/sakura_core/docplus/CDiffManager.h index c6fe973e0b..ac2065d2df 100644 --- a/sakura_core/docplus/CDiffManager.h +++ b/sakura_core/docplus/CDiffManager.h @@ -24,6 +24,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CDIFFMANAGER_65AC06D5_0F1A_4E27_94E5_53F786F76D9F_H_ +#define SAKURA_CDIFFMANAGER_65AC06D5_0F1A_4E27_94E5_53F786F76D9F_H_ #pragma once #include "view/colors/EColorIndexType.h" @@ -95,3 +97,4 @@ class CDiffLineMgr{ private: CDocLineMgr* m_pcDocLineMgr; }; +#endif /* SAKURA_CDIFFMANAGER_65AC06D5_0F1A_4E27_94E5_53F786F76D9F_H_ */ diff --git a/sakura_core/docplus/CFuncListManager.h b/sakura_core/docplus/CFuncListManager.h index 37d767c63b..c8aac7a77f 100644 --- a/sakura_core/docplus/CFuncListManager.h +++ b/sakura_core/docplus/CFuncListManager.h @@ -23,6 +23,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CFUNCLISTMANAGER_C2C5861D_3B93_4B1F_B241_E3314414A2C1_H_ +#define SAKURA_CFUNCLISTMANAGER_C2C5861D_3B93_4B1F_B241_E3314414A2C1_H_ #pragma once class CDocLine; @@ -55,3 +57,4 @@ class CFuncListManager{ //一括操作 void ResetAllFucListMark(CDocLineMgr* pcDocLineMgr, bool bFlag); // 関数リストマークをすべてリセット }; +#endif /* SAKURA_CFUNCLISTMANAGER_C2C5861D_3B93_4B1F_B241_E3314414A2C1_H_ */ diff --git a/sakura_core/docplus/CModifyManager.h b/sakura_core/docplus/CModifyManager.h index 69c242f3bb..f7343adee2 100644 --- a/sakura_core/docplus/CModifyManager.h +++ b/sakura_core/docplus/CModifyManager.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CMODIFYMANAGER_12000875_531F_42DC_A6B0_231385193CB8_H_ +#define SAKURA_CMODIFYMANAGER_12000875_531F_42DC_A6B0_231385193CB8_H_ #pragma once #include "util/design_template.h" //TSingleton @@ -64,3 +66,4 @@ class CModifyVisitor{ //一括操作 void ResetAllModifyFlag(CDocLineMgr* pcDocLineMgr, int nSeq); // 行変更状態をすべてリセット }; +#endif /* SAKURA_CMODIFYMANAGER_12000875_531F_42DC_A6B0_231385193CB8_H_ */ diff --git a/sakura_core/env/CAppNodeManager.h b/sakura_core/env/CAppNodeManager.h index 87dcc0c478..0bcf2ba5b9 100644 --- a/sakura_core/env/CAppNodeManager.h +++ b/sakura_core/env/CAppNodeManager.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CAPPNODEMANAGER_CAE7A323_DEA3_47E4_91DE_C99A88C32683_H_ +#define SAKURA_CAPPNODEMANAGER_CAE7A323_DEA3_47E4_91DE_C99A88C32683_H_ #pragma once #include "util/design_template.h" @@ -151,3 +153,4 @@ inline CAppNodeHandle::CAppNodeHandle(HWND hwnd) { m_pNodeRef = CAppNodeManager::getInstance()->GetEditNode(hwnd); } +#endif /* SAKURA_CAPPNODEMANAGER_CAE7A323_DEA3_47E4_91DE_C99A88C32683_H_ */ diff --git a/sakura_core/env/CDocTypeManager.h b/sakura_core/env/CDocTypeManager.h index c28db39708..0d878f580f 100644 --- a/sakura_core/env/CDocTypeManager.h +++ b/sakura_core/env/CDocTypeManager.h @@ -25,6 +25,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CDOCTYPEMANAGER_ACE5AE64_5C6A_4A70_BACF_99F9A448360D_H_ +#define SAKURA_CDOCTYPEMANAGER_ACE5AE64_5C6A_4A70_BACF_99F9A448360D_H_ #pragma once #include "DLLSHAREDATA.h" @@ -56,3 +58,4 @@ class CDocTypeManager{ private: DLLSHAREDATA* m_pShareData; }; +#endif /* SAKURA_CDOCTYPEMANAGER_ACE5AE64_5C6A_4A70_BACF_99F9A448360D_H_ */ diff --git a/sakura_core/env/CFileNameManager.h b/sakura_core/env/CFileNameManager.h index 8d74968c05..6e22811368 100644 --- a/sakura_core/env/CFileNameManager.h +++ b/sakura_core/env/CFileNameManager.h @@ -25,6 +25,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CFILENAMEMANAGER_2B89B426_470E_40D6_B62E_5321E383ECD6_H_ +#define SAKURA_CFILENAMEMANAGER_2B89B426_470E_40D6_B62E_5321E383ECD6_H_ #pragma once // 要先行定義 @@ -98,3 +100,4 @@ class CFileNameManager : public TSingleton{ WCHAR m_szTransformFileNameFromExp[MAX_TRANSFORM_FILENAME][_MAX_PATH]; int m_nTransformFileNameOrgId[MAX_TRANSFORM_FILENAME]; }; +#endif /* SAKURA_CFILENAMEMANAGER_2B89B426_470E_40D6_B62E_5321E383ECD6_H_ */ diff --git a/sakura_core/env/CFormatManager.h b/sakura_core/env/CFormatManager.h index 5e64dc4e3c..685a9bc298 100644 --- a/sakura_core/env/CFormatManager.h +++ b/sakura_core/env/CFormatManager.h @@ -25,6 +25,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CFORMATMANAGER_4161FE80_FFA1_4619_BD0A_74FF4F59BDDA_H_ +#define SAKURA_CFORMATMANAGER_4161FE80_FFA1_4619_BD0A_74FF4F59BDDA_H_ #pragma once // 要先行定義 @@ -48,3 +50,4 @@ class CFormatManager{ private: DLLSHAREDATA* m_pShareData; }; +#endif /* SAKURA_CFORMATMANAGER_4161FE80_FFA1_4619_BD0A_74FF4F59BDDA_H_ */ diff --git a/sakura_core/env/CHelpManager.h b/sakura_core/env/CHelpManager.h index 24daf4eaa2..322ecfdf4d 100644 --- a/sakura_core/env/CHelpManager.h +++ b/sakura_core/env/CHelpManager.h @@ -25,6 +25,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CHELPMANAGER_57445D73_99E9_4B85_A905_47685753D1DF_H_ +#define SAKURA_CHELPMANAGER_57445D73_99E9_4B85_A905_47685753D1DF_H_ #pragma once // 要先行定義 @@ -46,3 +48,4 @@ class CHelpManager{ private: DLLSHAREDATA* m_pShareData; }; +#endif /* SAKURA_CHELPMANAGER_57445D73_99E9_4B85_A905_47685753D1DF_H_ */ diff --git a/sakura_core/env/CSakuraEnvironment.h b/sakura_core/env/CSakuraEnvironment.h index 34c7af0c6f..0ce9478f54 100644 --- a/sakura_core/env/CSakuraEnvironment.h +++ b/sakura_core/env/CSakuraEnvironment.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CSAKURAENVIRONMENT_4B226B3A_5208_4C29_9D2E_E42DA8EFD875_H_ +#define SAKURA_CSAKURAENVIRONMENT_4B226B3A_5208_4C29_9D2E_E42DA8EFD875_H_ #pragma once #include @@ -43,3 +45,4 @@ class CSakuraEnvironment{ //ウィンドウ管理 /* 指定ウィンドウが、編集ウィンドウのフレームウィンドウかどうか調べる */ BOOL IsSakuraMainWindow( HWND hWnd ); +#endif /* SAKURA_CSAKURAENVIRONMENT_4B226B3A_5208_4C29_9D2E_E42DA8EFD875_H_ */ diff --git a/sakura_core/env/CSearchKeywordManager.h b/sakura_core/env/CSearchKeywordManager.h index 8a1ce71435..d6a6e3be49 100644 --- a/sakura_core/env/CSearchKeywordManager.h +++ b/sakura_core/env/CSearchKeywordManager.h @@ -25,6 +25,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CSEARCHKEYWORDMANAGER_AFD28203_4738_46B7_9A7F_E758A94DB290_H_ +#define SAKURA_CSEARCHKEYWORDMANAGER_AFD28203_4738_46B7_9A7F_E758A94DB290_H_ #pragma once // 要先行定義 @@ -58,3 +60,4 @@ class CSearchKeywordManager{ private: DLLSHAREDATA* m_pShareData; }; +#endif /* SAKURA_CSEARCHKEYWORDMANAGER_AFD28203_4738_46B7_9A7F_E758A94DB290_H_ */ diff --git a/sakura_core/env/CShareData.h b/sakura_core/env/CShareData.h index 128c8f21e5..c67be76bb7 100644 --- a/sakura_core/env/CShareData.h +++ b/sakura_core/env/CShareData.h @@ -28,6 +28,8 @@ //2007.09.23 kobake m_nTagJumpKeywordArrNum, m_szTagJumpKeywordArr を m_aTagJumpKeywords にまとめました //2007.12.13 kobake DLLSHAREDATAへの簡易アクセサを用意 +#ifndef SAKURA_CSHAREDATA_B25C0FA2_B810_4327_8EC6_0AF46D49593A_H_ +#define SAKURA_CSHAREDATA_B25C0FA2_B810_4327_8EC6_0AF46D49593A_H_ #pragma once #include "CSelectLang.h" // 2011.04.10 nasukoji @@ -115,3 +117,4 @@ class CShareData : public TSingleton std::vector* m_pvTypeSettings; // (コントロールプロセスのみ) HWND m_hwndTraceOutSource; // TraceOutA()起動元ウィンドウ(いちいち起動元を指定しなくてすむように) }; +#endif /* SAKURA_CSHAREDATA_B25C0FA2_B810_4327_8EC6_0AF46D49593A_H_ */ diff --git a/sakura_core/env/CShareData_IO.h b/sakura_core/env/CShareData_IO.h index f16b6012b7..6e6195b346 100644 --- a/sakura_core/env/CShareData_IO.h +++ b/sakura_core/env/CShareData_IO.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CSHAREDATA_IO_B154E0E0_C606_468E_A3B7_767DDA1DE6EE_H_ +#define SAKURA_CSHAREDATA_IO_B154E0E0_C606_468E_A3B7_767DDA1DE6EE_H_ #pragma once class CDataProfile; @@ -81,3 +83,4 @@ class CShareData_IO{ CommonSetting_MainMenu& mainmenu, bool bOutCmdName); static void IO_ColorSet( CDataProfile* pcProfile, const WCHAR* pszSecName, ColorInfo* pColorInfoArr ); /* 色設定 I/O */ // Feb. 12, 2006 D.S.Koba }; +#endif /* SAKURA_CSHAREDATA_IO_B154E0E0_C606_468E_A3B7_767DDA1DE6EE_H_ */ diff --git a/sakura_core/env/CTagJumpManager.h b/sakura_core/env/CTagJumpManager.h index ba66ed1da1..6e898d5a2a 100644 --- a/sakura_core/env/CTagJumpManager.h +++ b/sakura_core/env/CTagJumpManager.h @@ -25,6 +25,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CTAGJUMPMANAGER_487A43FC_EB78_44CF_B1E4_6FD78EF1F35A_H_ +#define SAKURA_CTAGJUMPMANAGER_487A43FC_EB78_44CF_B1E4_6FD78EF1F35A_H_ #pragma once // 要先行定義 @@ -68,3 +70,4 @@ class CTagJumpManager{ private: DLLSHAREDATA* m_pShareData; }; +#endif /* SAKURA_CTAGJUMPMANAGER_487A43FC_EB78_44CF_B1E4_6FD78EF1F35A_H_ */ diff --git a/sakura_core/env/CommonSetting.h b/sakura_core/env/CommonSetting.h index 1a64b92b7a..8ba56191da 100644 --- a/sakura_core/env/CommonSetting.h +++ b/sakura_core/env/CommonSetting.h @@ -23,6 +23,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_COMMONSETTING_2CBDBC26_EA7F_466E_842F_AFB0D93207D2_H_ +#define SAKURA_COMMONSETTING_2CBDBC26_EA7F_466E_842F_AFB0D93207D2_H_ #pragma once #include "CKeyWordSetMgr.h" @@ -744,3 +746,4 @@ struct CommonSetting CommonSetting_Plugin m_sPlugin; //!< プラグイン 2009/11/30 syat CommonSetting_MainMenu m_sMainMenu; //!< メインメニュー // 2010/5/15 Uchi }; +#endif /* SAKURA_COMMONSETTING_2CBDBC26_EA7F_466E_842F_AFB0D93207D2_H_ */ diff --git a/sakura_core/env/DLLSHAREDATA.h b/sakura_core/env/DLLSHAREDATA.h index a011cb9258..1ad4e5cf6c 100644 --- a/sakura_core/env/DLLSHAREDATA.h +++ b/sakura_core/env/DLLSHAREDATA.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_DLLSHAREDATA_13672D62_A18D_4E76_B3E7_A8192BCDC6A1_H_ +#define SAKURA_DLLSHAREDATA_13672D62_A18D_4E76_B3E7_A8192BCDC6A1_H_ #pragma once // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // @@ -186,3 +188,4 @@ class CShareDataLockCounter{ static void WaitLock( HWND hwndParent, CShareDataLockCounter** ppLock = NULL ); private: }; +#endif /* SAKURA_DLLSHAREDATA_13672D62_A18D_4E76_B3E7_A8192BCDC6A1_H_ */ diff --git a/sakura_core/extmodule/CBregexp.h b/sakura_core/extmodule/CBregexp.h index 577e89f4e6..5353556f48 100644 --- a/sakura_core/extmodule/CBregexp.h +++ b/sakura_core/extmodule/CBregexp.h @@ -39,6 +39,8 @@ distribution. */ +#ifndef SAKURA_CBREGEXP_7B193CCD_1EE7_48A7_8004_6E59B0F4F161_H_ +#define SAKURA_CBREGEXP_7B193CCD_1EE7_48A7_8004_6E59B0F4F161_H_ #pragma once #include "CBregexpDll2.h" @@ -225,3 +227,4 @@ class CBregexp : public CBregexpDll2{ bool CheckRegexpVersion( HWND hWnd, int nCmpId, bool bShowMsg = false ); bool CheckRegexpSyntax( const wchar_t* szPattern, HWND hWnd, bool bShowMessage, int nOption = -1, bool bKakomi = false );// 2002/2/1 hor追加 bool InitRegexp( HWND hWnd, CBregexp& rRegexp, bool bShowMessage ); +#endif /* SAKURA_CBREGEXP_7B193CCD_1EE7_48A7_8004_6E59B0F4F161_H_ */ diff --git a/sakura_core/extmodule/CBregexpDll2.h b/sakura_core/extmodule/CBregexpDll2.h index 1328c65a92..a72537333d 100644 --- a/sakura_core/extmodule/CBregexpDll2.h +++ b/sakura_core/extmodule/CBregexpDll2.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CBREGEXPDLL2_033C910A_6B78_47CB_9993_675C48A2AB64_H_ +#define SAKURA_CBREGEXPDLL2_033C910A_6B78_47CB_9993_675C48A2AB64_H_ #pragma once #include "CDllHandler.h" @@ -113,3 +115,4 @@ class CBregexpDll2 : public CDllImp{ BREGEXP_BMatchExW2 m_BMatchEx; BREGEXP_BSubstExW2 m_BSubstEx; }; +#endif /* SAKURA_CBREGEXPDLL2_033C910A_6B78_47CB_9993_675C48A2AB64_H_ */ diff --git a/sakura_core/extmodule/CDllHandler.h b/sakura_core/extmodule/CDllHandler.h index 71a7d8f250..bc215db68d 100644 --- a/sakura_core/extmodule/CDllHandler.h +++ b/sakura_core/extmodule/CDllHandler.h @@ -29,6 +29,8 @@ distribution. */ +#ifndef SAKURA_CDLLHANDLER_B27A5A93_E49F_4618_8958_6883D63BBABB_H_ +#define SAKURA_CDLLHANDLER_B27A5A93_E49F_4618_8958_6883D63BBABB_H_ #pragma once #include @@ -203,3 +205,4 @@ class CDllImp{ HINSTANCE m_hInstance; std::wstring m_strLoadedDllName; }; +#endif /* SAKURA_CDLLHANDLER_B27A5A93_E49F_4618_8958_6883D63BBABB_H_ */ diff --git a/sakura_core/extmodule/CHtmlHelp.h b/sakura_core/extmodule/CHtmlHelp.h index d93790b967..9ce42ebf3b 100644 --- a/sakura_core/extmodule/CHtmlHelp.h +++ b/sakura_core/extmodule/CHtmlHelp.h @@ -30,6 +30,8 @@ distribution. */ +#ifndef SAKURA_CHTMLHELP_7003298B_3900_42FD_9A02_1BCD4E9A8546_H_ +#define SAKURA_CHTMLHELP_7003298B_3900_42FD_9A02_1BCD4E9A8546_H_ #pragma once #include "CDllHandler.h" @@ -65,3 +67,4 @@ class CHtmlHelp : public CDllImp { virtual bool InitDllImp(); virtual LPCWSTR GetDllNameImp(int nIndex); }; +#endif /* SAKURA_CHTMLHELP_7003298B_3900_42FD_9A02_1BCD4E9A8546_H_ */ diff --git a/sakura_core/extmodule/CIcu4cI18n.h b/sakura_core/extmodule/CIcu4cI18n.h index a48d357a14..99d247710d 100644 --- a/sakura_core/extmodule/CIcu4cI18n.h +++ b/sakura_core/extmodule/CIcu4cI18n.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CICU4CI18N_16EE9B14_2791_4C5D_AE1E_E78FBF5CB083_H_ +#define SAKURA_CICU4CI18N_16EE9B14_2791_4C5D_AE1E_E78FBF5CB083_H_ #pragma once #include "CDllHandler.h" @@ -79,3 +81,4 @@ class CIcu4cI18n final : public CDllImp return _ucsdet_close(ucsd); } }; +#endif /* SAKURA_CICU4CI18N_16EE9B14_2791_4C5D_AE1E_E78FBF5CB083_H_ */ diff --git a/sakura_core/extmodule/CMigemo.h b/sakura_core/extmodule/CMigemo.h index ed6a2865f5..26b6d1fdba 100644 --- a/sakura_core/extmodule/CMigemo.h +++ b/sakura_core/extmodule/CMigemo.h @@ -18,6 +18,8 @@ Migemo はローマ字のまま日本語をインクリメンタル検索するためのツールです。 */ +#ifndef SAKURA_CMIGEMO_BEF7C3E9_DC35_4C9D_BC69_8B7F9EBB4463_H_ +#define SAKURA_CMIGEMO_BEF7C3E9_DC35_4C9D_BC69_8B7F9EBB4463_H_ #pragma once #define MIGEMO_VERSION "1.1" @@ -134,3 +136,4 @@ class CMigemo : public TSingleton, public CDllImp { int migemo_is_enable(); int migemo_load_all(); }; +#endif /* SAKURA_CMIGEMO_BEF7C3E9_DC35_4C9D_BC69_8B7F9EBB4463_H_ */ diff --git a/sakura_core/extmodule/CUxTheme.h b/sakura_core/extmodule/CUxTheme.h index f886d62dd3..acb3d22491 100644 --- a/sakura_core/extmodule/CUxTheme.h +++ b/sakura_core/extmodule/CUxTheme.h @@ -30,6 +30,8 @@ distribution. */ +#ifndef SAKURA_CUXTHEME_430C1CAA_3F14_4C30_8EB6_FCC34E9E0FF5_H_ +#define SAKURA_CUXTHEME_430C1CAA_3F14_4C30_8EB6_FCC34E9E0FF5_H_ #pragma once #include @@ -71,3 +73,4 @@ class CUxTheme : public TSingleton, public CDllImp { HRESULT DrawThemeParentBackground( HWND hwnd, HDC hdc, RECT* prc ); BOOL IsThemeBackgroundPartiallyTransparent( HTHEME htheme, int iPartId, int iStateId ); }; +#endif /* SAKURA_CUXTHEME_430C1CAA_3F14_4C30_8EB6_FCC34E9E0FF5_H_ */ diff --git a/sakura_core/func/CFuncKeyWnd.h b/sakura_core/func/CFuncKeyWnd.h index 69b96345fa..66a92e2c35 100644 --- a/sakura_core/func/CFuncKeyWnd.h +++ b/sakura_core/func/CFuncKeyWnd.h @@ -12,6 +12,8 @@ This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CFUNCKEYWND_2EB0FD88_ABBB_4280_BEEA_46E8468E4550_H_ +#define SAKURA_CFUNCKEYWND_2EB0FD88_ABBB_4280_BEEA_46E8468E4550_H_ #pragma once #include "window/CWnd.h" @@ -69,3 +71,4 @@ class CFuncKeyWnd final : public CWnd LRESULT OnSize(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) override;// WM_SIZE処理 LRESULT OnDestroy(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) override;// WM_DESTROY処理 }; +#endif /* SAKURA_CFUNCKEYWND_2EB0FD88_ABBB_4280_BEEA_46E8468E4550_H_ */ diff --git a/sakura_core/func/CFuncLookup.h b/sakura_core/func/CFuncLookup.h index 15847b5edb..3d4efd3dff 100644 --- a/sakura_core/func/CFuncLookup.h +++ b/sakura_core/func/CFuncLookup.h @@ -32,6 +32,8 @@ distribution. */ +#ifndef SAKURA_CFUNCLOOKUP_9470508D_849D_463F_B507_7843D4D85B4A_H_ +#define SAKURA_CFUNCLOOKUP_9470508D_849D_463F_B507_7843D4D85B4A_H_ #pragma once #include @@ -92,3 +94,4 @@ class CFuncLookup { }; /* [EOF] */ +#endif /* SAKURA_CFUNCLOOKUP_9470508D_849D_463F_B507_7843D4D85B4A_H_ */ diff --git a/sakura_core/func/CKeyBind.h b/sakura_core/func/CKeyBind.h index 36fd15b8fc..3e6ded7f6d 100644 --- a/sakura_core/func/CKeyBind.h +++ b/sakura_core/func/CKeyBind.h @@ -12,6 +12,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CKEYBIND_9B930CDD_DCA8_4096_B61C_37CED61C575A_H_ +#define SAKURA_CKEYBIND_9B930CDD_DCA8_4096_B61C_37CED61C575A_H_ #pragma once #include @@ -93,3 +95,4 @@ class CKeyBind static bool GetKeyStrSub(int& nKeyNameArrBegin, int nKeyNameArrEnd, KEYDATA* pKeyNameArr, int nShiftState, CNativeW& cMemList, int nFuncId, BOOL bGetDefFuncCode ); }; +#endif /* SAKURA_CKEYBIND_9B930CDD_DCA8_4096_B61C_37CED61C575A_H_ */ diff --git a/sakura_core/func/Funccode.h b/sakura_core/func/Funccode.h index ce28c790e9..122ba76436 100644 --- a/sakura_core/func/Funccode.h +++ b/sakura_core/func/Funccode.h @@ -35,6 +35,8 @@ distribution. */ +#ifndef SAKURA_FUNCCODE_071442E9_78EF_47B8_ABB5_CBB12C3EC84B_H_ +#define SAKURA_FUNCCODE_071442E9_78EF_47B8_ABB5_CBB12C3EC84B_H_ #pragma once //Oct. 17, 2000 jepro F_FILECLOSE:「ファイルを閉じる」というキャプションを変更 @@ -182,3 +184,4 @@ struct DLLSHAREDATA; //2007.10.30 kobake 機能チェックをCEditWndからここへ移動 bool IsFuncEnable( const CEditDoc* pcEditDoc, const DLLSHAREDATA* pShareData, EFunctionCode nId ); /* 機能が利用可能か調べる */ bool IsFuncChecked( const CEditDoc* pcEditDoc, const DLLSHAREDATA* pShareData, EFunctionCode nId ); /* 機能がチェック状態か調べる */ +#endif /* SAKURA_FUNCCODE_071442E9_78EF_47B8_ABB5_CBB12C3EC84B_H_ */ diff --git a/sakura_core/io/CBinaryStream.h b/sakura_core/io/CBinaryStream.h index 0b1ebb724c..c76d14cadc 100644 --- a/sakura_core/io/CBinaryStream.h +++ b/sakura_core/io/CBinaryStream.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CBINARYSTREAM_856F71C1_27E0_4075_BA32_245D18E142BA_H_ +#define SAKURA_CBINARYSTREAM_856F71C1_27E0_4075_BA32_245D18E142BA_H_ #pragma once #include "CStream.h" @@ -42,3 +44,4 @@ class CBinaryOutputStream final : public COutputStream{ public: CBinaryOutputStream(LPCWSTR pszFilePath, bool bExceptionMode = false); }; +#endif /* SAKURA_CBINARYSTREAM_856F71C1_27E0_4075_BA32_245D18E142BA_H_ */ diff --git a/sakura_core/io/CFile.h b/sakura_core/io/CFile.h index 1b82b74247..609f4c553e 100644 --- a/sakura_core/io/CFile.h +++ b/sakura_core/io/CFile.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CFILE_53DA3C63_95C0_49D0_9ED1_1C0131493912_H_ +#define SAKURA_CFILE_53DA3C63_95C0_49D0_9ED1_1C0131493912_H_ #pragma once #include "basis/CMyString.h" //CFilePath @@ -70,3 +72,4 @@ class CTmpFile{ private: FILE* m_fp; }; +#endif /* SAKURA_CFILE_53DA3C63_95C0_49D0_9ED1_1C0131493912_H_ */ diff --git a/sakura_core/io/CFileLoad.h b/sakura_core/io/CFileLoad.h index 2da6cfe7fc..cdb4ca3241 100644 --- a/sakura_core/io/CFileLoad.h +++ b/sakura_core/io/CFileLoad.h @@ -28,6 +28,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CFILELOAD_B9B7A22E_8C14_4913_8B92_3B5ABA6FC0DB_H_ +#define SAKURA_CFILELOAD_B9B7A22E_8C14_4913_8B92_3B5ABA6FC0DB_H_ #pragma once #include @@ -164,3 +166,4 @@ inline DWORD CFileLoad::FilePointer( DWORD offset, DWORD origin ) throw CError_FileRead(); return fp; } +#endif /* SAKURA_CFILELOAD_B9B7A22E_8C14_4913_8B92_3B5ABA6FC0DB_H_ */ diff --git a/sakura_core/io/CIoBridge.h b/sakura_core/io/CIoBridge.h index 965b2bc540..636fb218ff 100644 --- a/sakura_core/io/CIoBridge.h +++ b/sakura_core/io/CIoBridge.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CIOBRIDGE_5C6D9CA0_13F8_415A_A948_6A6EF323BE02_H_ +#define SAKURA_CIOBRIDGE_5C6D9CA0_13F8_415A_A948_6A6EF323BE02_H_ #pragma once #include "mem/CMemory.h" @@ -44,3 +46,4 @@ class CIoBridge{ CCodeBase* pCodeBase //!< [in] 変換先メモリの文字コードクラス ); }; +#endif /* SAKURA_CIOBRIDGE_5C6D9CA0_13F8_415A_A948_6A6EF323BE02_H_ */ diff --git a/sakura_core/io/CStream.h b/sakura_core/io/CStream.h index fe8d764503..c9ad583e8b 100644 --- a/sakura_core/io/CStream.h +++ b/sakura_core/io/CStream.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CSTREAM_0083EDD7_A671_4315_801D_41FED1A2E3DA_H_ +#define SAKURA_CSTREAM_0083EDD7_A671_4315_801D_41FED1A2E3DA_H_ #pragma once class CFileAttribute; @@ -97,3 +99,4 @@ class COutputStream : public CStream{ return nRet; } }; +#endif /* SAKURA_CSTREAM_0083EDD7_A671_4315_801D_41FED1A2E3DA_H_ */ diff --git a/sakura_core/io/CTextStream.h b/sakura_core/io/CTextStream.h index fdbf52d7fd..3e93c3dc0f 100644 --- a/sakura_core/io/CTextStream.h +++ b/sakura_core/io/CTextStream.h @@ -29,6 +29,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CTEXTSTREAM_CF4FEC73_4575_4B80_98F7_CFCBC0B433CD_H_ +#define SAKURA_CTEXTSTREAM_CF4FEC73_4575_4B80_98F7_CFCBC0B433CD_H_ #pragma once #include @@ -75,3 +77,4 @@ class CTextInputStream_AbsIni final : public CTextInputStream{ public: CTextInputStream_AbsIni(const WCHAR* pszPath, bool bOrExedir = true); }; +#endif /* SAKURA_CTEXTSTREAM_CF4FEC73_4575_4B80_98F7_CFCBC0B433CD_H_ */ diff --git a/sakura_core/io/CZipFile.h b/sakura_core/io/CZipFile.h index 45e5a09b3a..2ddfa2f0d4 100644 --- a/sakura_core/io/CZipFile.h +++ b/sakura_core/io/CZipFile.h @@ -25,6 +25,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CZIPFILE_EA7F9762_A67F_449D_B346_EAB3075A9E2C_H_ +#define SAKURA_CZIPFILE_EA7F9762_A67F_449D_B346_EAB3075A9E2C_H_ #pragma once #include @@ -45,3 +47,4 @@ class CZipFile { bool ChkPluginDef(const std::wstring& sDefFile, std::wstring& sFolderName); // ZIP File 内 フォルダ名取得と定義ファイル検査(Plugin用) bool Unzip(const std::wstring sOutPath); // Zip File 解凍 }; +#endif /* SAKURA_CZIPFILE_EA7F9762_A67F_449D_B346_EAB3075A9E2C_H_ */ diff --git a/sakura_core/macro/CCookieManager.h b/sakura_core/macro/CCookieManager.h index 0db23d8f56..83937f67ae 100644 --- a/sakura_core/macro/CCookieManager.h +++ b/sakura_core/macro/CCookieManager.h @@ -26,6 +26,8 @@ distribution. */ +#ifndef SAKURA_CCOOKIEMANAGER_69A96E71_61BD_417E_BD29_10B3D27AA11D_H_ +#define SAKURA_CCOOKIEMANAGER_69A96E71_61BD_417E_BD29_10B3D27AA11D_H_ #pragma once #include @@ -51,3 +53,4 @@ class CCookieManager std::map m_cookieWindow; std::map m_cookieDocument; }; +#endif /* SAKURA_CCOOKIEMANAGER_69A96E71_61BD_417E_BD29_10B3D27AA11D_H_ */ diff --git a/sakura_core/macro/CEditorIfObj.h b/sakura_core/macro/CEditorIfObj.h index c7f1a38d85..d3ab5fa4da 100644 --- a/sakura_core/macro/CEditorIfObj.h +++ b/sakura_core/macro/CEditorIfObj.h @@ -25,6 +25,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CEDITORIFOBJ_1C8AA37E_D9FB_4C26_AE83_22E62D9B7C3D_H_ +#define SAKURA_CEDITORIFOBJ_1C8AA37E_D9FB_4C26_AE83_22E62D9B7C3D_H_ #pragma once #include "_os/OleTypes.h" @@ -42,3 +44,4 @@ class CEditorIfObj : public CWSHIfObj bool HandleFunction(CEditView* View, EFunctionCode ID, const VARIANT *Arguments, const int ArgSize, VARIANT &Result); //関数を処理する bool HandleCommand(CEditView* View, EFunctionCode ID, const WCHAR* Arguments[], const int ArgLengths[], const int ArgSize); //コマンドを処理する }; +#endif /* SAKURA_CEDITORIFOBJ_1C8AA37E_D9FB_4C26_AE83_22E62D9B7C3D_H_ */ diff --git a/sakura_core/macro/CIfObj.h b/sakura_core/macro/CIfObj.h index 615f5deb3c..ce55316ce6 100644 --- a/sakura_core/macro/CIfObj.h +++ b/sakura_core/macro/CIfObj.h @@ -28,6 +28,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CIFOBJ_12FF5D67_757D_47E3_A7B3_E9896AAA6BB4_H_ +#define SAKURA_CIFOBJ_12FF5D67_757D_47E3_A7B3_E9896AAA6BB4_H_ #pragma once #include @@ -137,3 +139,4 @@ class CIfObj CMethodInfoList m_Methods; //メソッド情報リスト ITypeInfo* m_TypeInfo; }; +#endif /* SAKURA_CIFOBJ_12FF5D67_757D_47E3_A7B3_E9896AAA6BB4_H_ */ diff --git a/sakura_core/macro/CKeyMacroMgr.h b/sakura_core/macro/CKeyMacroMgr.h index fcf1488147..b53405bb51 100644 --- a/sakura_core/macro/CKeyMacroMgr.h +++ b/sakura_core/macro/CKeyMacroMgr.h @@ -12,6 +12,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CKEYMACROMGR_998F55D6_230A_4D86_B17C_A9ED9BCAA39C_H_ +#define SAKURA_CKEYMACROMGR_998F55D6_230A_4D86_B17C_A9ED9BCAA39C_H_ #pragma once #include @@ -61,3 +63,4 @@ class CKeyMacroMgr : public CMacroManagerBase CMacro* m_pTop; // 先頭と終端を保持 CMacro* m_pBot; }; +#endif /* SAKURA_CKEYMACROMGR_998F55D6_230A_4D86_B17C_A9ED9BCAA39C_H_ */ diff --git a/sakura_core/macro/CMacro.h b/sakura_core/macro/CMacro.h index f9fcf22991..edc0ff12ec 100644 --- a/sakura_core/macro/CMacro.h +++ b/sakura_core/macro/CMacro.h @@ -31,6 +31,8 @@ distribution. */ +#ifndef SAKURA_CMACRO_E1ABA5D8_7ACF_417B_A668_A7AD9714118A_H_ +#define SAKURA_CMACRO_E1ABA5D8_7ACF_417B_A668_A7AD9714118A_H_ #pragma once #include @@ -129,3 +131,4 @@ class CMacro CMacroParam* m_pParamBot; CMacro* m_pNext; // 次のマクロへのポインタ }; +#endif /* SAKURA_CMACRO_E1ABA5D8_7ACF_417B_A668_A7AD9714118A_H_ */ diff --git a/sakura_core/macro/CMacroFactory.h b/sakura_core/macro/CMacroFactory.h index 8803656ef0..57b12512f9 100644 --- a/sakura_core/macro/CMacroFactory.h +++ b/sakura_core/macro/CMacroFactory.h @@ -29,6 +29,8 @@ distribution. */ +#ifndef SAKURA_CMACROFACTORY_67B6F8F6_0951_4717_84AD_C67E6D5F68AB_H_ +#define SAKURA_CMACROFACTORY_67B6F8F6_0951_4717_84AD_C67E6D5F68AB_H_ #pragma once #include @@ -84,3 +86,4 @@ class CMacroFactory : public TSingleton { */ MacroEngineRep m_mMacroCreators; }; +#endif /* SAKURA_CMACROFACTORY_67B6F8F6_0951_4717_84AD_C67E6D5F68AB_H_ */ diff --git a/sakura_core/macro/CMacroManagerBase.h b/sakura_core/macro/CMacroManagerBase.h index 2d54aa07a0..92850b510a 100644 --- a/sakura_core/macro/CMacroManagerBase.h +++ b/sakura_core/macro/CMacroManagerBase.h @@ -28,6 +28,8 @@ distribution. */ +#ifndef SAKURA_CMACROMANAGERBASE_40AD4654_61DF_45E5_BC2F_7C702E530B5D_H_ +#define SAKURA_CMACROMANAGERBASE_40AD4654_61DF_45E5_BC2F_7C702E530B5D_H_ #pragma once #include @@ -97,3 +99,4 @@ class CMacroManagerBase : CMacroBeforeAfter { // Constructor CMacroManagerBase(); }; +#endif /* SAKURA_CMACROMANAGERBASE_40AD4654_61DF_45E5_BC2F_7C702E530B5D_H_ */ diff --git a/sakura_core/macro/CPPA.h b/sakura_core/macro/CPPA.h index 27c35ab998..abb47ec6c3 100644 --- a/sakura_core/macro/CPPA.h +++ b/sakura_core/macro/CPPA.h @@ -35,6 +35,8 @@ PPA(Poor-Pascal for Application)はDelphi/C++Builder用のPascalインタプリタコンポーネントです。 */ +#ifndef SAKURA_CPPA_FB41BBAE_DFBC_449D_9342_5D9424CFE086_H_ +#define SAKURA_CPPA_FB41BBAE_DFBC_449D_9342_5D9424CFE086_H_ #pragma once #include // VARIANT等 @@ -291,3 +293,4 @@ class CPPA : public CDllImp { static int m_nFuncNum; // SAKURAエディタ用関数の数 */ }; +#endif /* SAKURA_CPPA_FB41BBAE_DFBC_449D_9342_5D9424CFE086_H_ */ diff --git a/sakura_core/macro/CPPAMacroMgr.h b/sakura_core/macro/CPPAMacroMgr.h index bd96c0f7e3..ea49232caa 100644 --- a/sakura_core/macro/CPPAMacroMgr.h +++ b/sakura_core/macro/CPPAMacroMgr.h @@ -13,6 +13,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CPPAMACROMGR_C2A77DE3_E368_4D65_AC46_7E743718D84A_H_ +#define SAKURA_CPPAMACROMGR_C2A77DE3_E368_4D65_AC46_7E743718D84A_H_ #pragma once #include @@ -48,3 +50,4 @@ class CPPAMacroMgr final : public CMacroManagerBase protected: CNativeW m_cBuffer; }; +#endif /* SAKURA_CPPAMACROMGR_C2A77DE3_E368_4D65_AC46_7E743718D84A_H_ */ diff --git a/sakura_core/macro/CSMacroMgr.h b/sakura_core/macro/CSMacroMgr.h index ff63102954..1d8a559bc2 100644 --- a/sakura_core/macro/CSMacroMgr.h +++ b/sakura_core/macro/CSMacroMgr.h @@ -31,6 +31,8 @@ distribution. */ +#ifndef SAKURA_CSMACROMGR_9F01D007_5F13_4963_887B_B37E861070DA_H_ +#define SAKURA_CSMACROMGR_9F01D007_5F13_4963_887B_B37E861070DA_H_ #pragma once #include @@ -181,3 +183,4 @@ class CSMacroMgr DISALLOW_COPY_AND_ASSIGN(CSMacroMgr); }; +#endif /* SAKURA_CSMACROMGR_9F01D007_5F13_4963_887B_B37E861070DA_H_ */ diff --git a/sakura_core/macro/CWSH.h b/sakura_core/macro/CWSH.h index 0fbade0076..4925072b64 100644 --- a/sakura_core/macro/CWSH.h +++ b/sakura_core/macro/CWSH.h @@ -16,6 +16,8 @@ */ +#ifndef SAKURA_CWSH_B4802BFB_233E_4104_AEA7_AE3721801C27_H_ +#define SAKURA_CWSH_B4802BFB_233E_4104_AEA7_AE3721801C27_H_ #pragma once #include @@ -58,3 +60,4 @@ class CWSHClient final : IWSHClient IActiveScript *m_Engine; List m_IfObjArr; }; +#endif /* SAKURA_CWSH_B4802BFB_233E_4104_AEA7_AE3721801C27_H_ */ diff --git a/sakura_core/macro/CWSHIfObj.h b/sakura_core/macro/CWSHIfObj.h index f301ca4182..32866971c6 100644 --- a/sakura_core/macro/CWSHIfObj.h +++ b/sakura_core/macro/CWSHIfObj.h @@ -28,6 +28,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CWSHIFOBJ_7C4DEA59_C6E2_4814_9209_8818D90096DE_H_ +#define SAKURA_CWSHIFOBJ_7C4DEA59_C6E2_4814_9209_8818D90096DE_H_ #pragma once #include @@ -76,3 +78,4 @@ class CWSHIfObj CEditView* m_pView; }; +#endif /* SAKURA_CWSHIFOBJ_7C4DEA59_C6E2_4814_9209_8818D90096DE_H_ */ diff --git a/sakura_core/macro/CWSHManager.h b/sakura_core/macro/CWSHManager.h index d726a5d3bb..18d05c55e2 100644 --- a/sakura_core/macro/CWSHManager.h +++ b/sakura_core/macro/CWSHManager.h @@ -19,6 +19,8 @@ */ +#ifndef SAKURA_CWSHMANAGER_35D4F066_36AC_4CE5_910E_D705F0D814E2_H_ +#define SAKURA_CWSHMANAGER_35D4F066_36AC_4CE5_910E_D705F0D814E2_H_ #pragma once #include @@ -55,3 +57,4 @@ class CWSHMacroManager final : public CMacroManagerBase //// 2007.07.20 genta : flags追加 //static void ReadyCommands(CIfObj *Object, MacroFuncInfo *Info, int flags); }; +#endif /* SAKURA_CWSHMANAGER_35D4F066_36AC_4CE5_910E_D705F0D814E2_H_ */ diff --git a/sakura_core/mem/CMemory.h b/sakura_core/mem/CMemory.h index c18db33469..af270e9bf4 100644 --- a/sakura_core/mem/CMemory.h +++ b/sakura_core/mem/CMemory.h @@ -31,6 +31,8 @@ distribution. */ +#ifndef SAKURA_CMEMORY_EE37AF3F_6B73_412E_8F0C_8A64F4250AE3_H_ +#define SAKURA_CMEMORY_EE37AF3F_6B73_412E_8F0C_8A64F4250AE3_H_ #pragma once #include "_main/global.h" @@ -120,3 +122,4 @@ class CMemory // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // inline関数の実装 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // +#endif /* SAKURA_CMEMORY_EE37AF3F_6B73_412E_8F0C_8A64F4250AE3_H_ */ diff --git a/sakura_core/mem/CMemoryIterator.h b/sakura_core/mem/CMemoryIterator.h index aef33f5548..abb13fcf09 100644 --- a/sakura_core/mem/CMemoryIterator.h +++ b/sakura_core/mem/CMemoryIterator.h @@ -12,6 +12,8 @@ This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CMEMORYITERATOR_18230378_FC9C_4FF2_B95B_3D51A75E3660_H_ +#define SAKURA_CMEMORYITERATOR_18230378_FC9C_4FF2_B95B_3D51A75E3660_H_ #pragma once // sakura @@ -147,3 +149,4 @@ class CMemoryIterator CLogicInt m_nIndex_Delta; //index増分 CLayoutInt m_nColumn_Delta; //column増分 }; +#endif /* SAKURA_CMEMORYITERATOR_18230378_FC9C_4FF2_B95B_3D51A75E3660_H_ */ diff --git a/sakura_core/mem/CNative.h b/sakura_core/mem/CNative.h index fd8980f5bc..2ad9d404cf 100644 --- a/sakura_core/mem/CNative.h +++ b/sakura_core/mem/CNative.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CNATIVE_D712C69D_7FA3_49CE_B63A_49273441B558_H_ +#define SAKURA_CNATIVE_D712C69D_7FA3_49CE_B63A_49273441B558_H_ #pragma once #include "mem/CMemory.h" @@ -43,3 +45,4 @@ static_assert(sizeof(CNative) == sizeof(CMemory), "size check"); #include "mem/CNativeA.h" #include "mem/CNativeW.h" +#endif /* SAKURA_CNATIVE_D712C69D_7FA3_49CE_B63A_49273441B558_H_ */ diff --git a/sakura_core/mem/CNativeA.h b/sakura_core/mem/CNativeA.h index 0614a2233a..bc5ecc4e35 100644 --- a/sakura_core/mem/CNativeA.h +++ b/sakura_core/mem/CNativeA.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CNATIVEA_03C02187_A42C_4403_9D24_8B4CA20EEA81_H_ +#define SAKURA_CNATIVEA_03C02187_A42C_4403_9D24_8B4CA20EEA81_H_ #pragma once #include "CNative.h" @@ -62,3 +64,4 @@ class CNativeA final : public CNative{ const CNativeA& operator=( char ); const CNativeA& operator+=( char ); }; +#endif /* SAKURA_CNATIVEA_03C02187_A42C_4403_9D24_8B4CA20EEA81_H_ */ diff --git a/sakura_core/mem/CNativeW.h b/sakura_core/mem/CNativeW.h index 6b5b7b5c1c..cd3a49503e 100644 --- a/sakura_core/mem/CNativeW.h +++ b/sakura_core/mem/CNativeW.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CNATIVEW_3B48F63E_5B62_4FAB_9718_0D80114E20C1_H_ +#define SAKURA_CNATIVEW_3B48F63E_5B62_4FAB_9718_0D80114E20C1_H_ #pragma once #include "CNative.h" @@ -178,3 +180,4 @@ class CNativeW final : public CNative{ // 派生クラスでメンバー追加禁止 static_assert(sizeof(CNativeW) == sizeof(CNative), "size check"); +#endif /* SAKURA_CNATIVEW_3B48F63E_5B62_4FAB_9718_0D80114E20C1_H_ */ diff --git a/sakura_core/mem/CPoolResource.h b/sakura_core/mem/CPoolResource.h index 36e154fce4..3e0b6a0759 100644 --- a/sakura_core/mem/CPoolResource.h +++ b/sakura_core/mem/CPoolResource.h @@ -22,6 +22,8 @@ distribution. */ +#ifndef SAKURA_CPOOLRESOURCE_4DEA6BEC_4D80_408F_9AEE_67AAF95BFE90_H_ +#define SAKURA_CPOOLRESOURCE_4DEA6BEC_4D80_408F_9AEE_67AAF95BFE90_H_ #pragma once #include @@ -132,3 +134,4 @@ class CPoolResource : public std::pmr::memory_resource Node* m_currentBlock = nullptr; // 現在のブロック Node* m_currentNode = nullptr; // 要素確保処理時に現在のブロックの中から切り出すNodeを指すポインタ、メモリ確保時に未割当領域が無い場合はここを使う }; +#endif /* SAKURA_CPOOLRESOURCE_4DEA6BEC_4D80_408F_9AEE_67AAF95BFE90_H_ */ diff --git a/sakura_core/mem/CRecycledBuffer.h b/sakura_core/mem/CRecycledBuffer.h index 4f6729b972..7fdcc0caff 100644 --- a/sakura_core/mem/CRecycledBuffer.h +++ b/sakura_core/mem/CRecycledBuffer.h @@ -26,6 +26,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CRECYCLEDBUFFER_874E819F_4E31_4431_B5A6_F4BA89FB963E_H_ +#define SAKURA_CRECYCLEDBUFFER_874E819F_4E31_4431_B5A6_F4BA89FB963E_H_ #pragma once class CRecycledBuffer{ @@ -110,3 +112,4 @@ class CRecycledBufferDynamic{ BYTE* m_buf[CHAIN_COUNT]; int m_current; }; +#endif /* SAKURA_CRECYCLEDBUFFER_874E819F_4E31_4431_B5A6_F4BA89FB963E_H_ */ diff --git a/sakura_core/mfclike/CMyWnd.h b/sakura_core/mfclike/CMyWnd.h index 18d39e1f84..c217f763a8 100644 --- a/sakura_core/mfclike/CMyWnd.h +++ b/sakura_core/mfclike/CMyWnd.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CMYWND_AA99D3B1_9B1C_4DB5_A62C_AEE66BEFBD52_H_ +#define SAKURA_CMYWND_AA99D3B1_9B1C_4DB5_A62C_AEE66BEFBD52_H_ #pragma once /* @@ -78,3 +80,4 @@ class CMyWnd{ private: HWND m_hWnd; }; +#endif /* SAKURA_CMYWND_AA99D3B1_9B1C_4DB5_A62C_AEE66BEFBD52_H_ */ diff --git a/sakura_core/outline/CDlgFileTree.h b/sakura_core/outline/CDlgFileTree.h index 6a050de896..45f79f9498 100644 --- a/sakura_core/outline/CDlgFileTree.h +++ b/sakura_core/outline/CDlgFileTree.h @@ -28,6 +28,8 @@ distribution. */ +#ifndef SAKURA_CDLGFILETREE_58915B5A_6480_4286_AB4F_28A7A6502AEC_H_ +#define SAKURA_CDLGFILETREE_58915B5A_6480_4286_AB4F_28A7A6502AEC_H_ #pragma once #include "dlg/CDialog.h" @@ -68,3 +70,4 @@ class CDlgFileTree final : public CDialog int m_bInMove; }; +#endif /* SAKURA_CDLGFILETREE_58915B5A_6480_4286_AB4F_28A7A6502AEC_H_ */ diff --git a/sakura_core/outline/CDlgFuncList.h b/sakura_core/outline/CDlgFuncList.h index bc997b3c84..03c6012ea6 100644 --- a/sakura_core/outline/CDlgFuncList.h +++ b/sakura_core/outline/CDlgFuncList.h @@ -18,6 +18,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CDLGFUNCLIST_B22A3877_572A_49B7_B683_50ECA451A6F8_H_ +#define SAKURA_CDLGFUNCLIST_B22A3877_572A_49B7_B683_50ECA451A6F8_H_ #pragma once #include @@ -221,3 +223,4 @@ class CDlgFuncList final : public CDialog POINT m_ptDefaultSizeClient; RECT m_rcItems[12]; }; +#endif /* SAKURA_CDLGFUNCLIST_B22A3877_572A_49B7_B683_50ECA451A6F8_H_ */ diff --git a/sakura_core/outline/CFuncInfo.h b/sakura_core/outline/CFuncInfo.h index 775d3e5893..cd7a7490bb 100644 --- a/sakura_core/outline/CFuncInfo.h +++ b/sakura_core/outline/CFuncInfo.h @@ -13,6 +13,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CFUNCINFO_9A6DFB84_EFEE_4E20_8E60_9F6F4D83B93C_H_ +#define SAKURA_CFUNCINFO_9A6DFB84_EFEE_4E20_8E60_9F6F4D83B93C_H_ #pragma once class CFuncInfo; @@ -50,3 +52,4 @@ class CFuncInfo { int m_nInfo; /*!< 付加情報 */ int m_nDepth; /*!< 深さ */ }; +#endif /* SAKURA_CFUNCINFO_9A6DFB84_EFEE_4E20_8E60_9F6F4D83B93C_H_ */ diff --git a/sakura_core/outline/CFuncInfoArr.h b/sakura_core/outline/CFuncInfoArr.h index 73c6d55aac..4270b0f097 100644 --- a/sakura_core/outline/CFuncInfoArr.h +++ b/sakura_core/outline/CFuncInfoArr.h @@ -12,6 +12,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CFUNCINFOARR_6E07CB18_7314_42F8_BA10_7C20E5ADCB76_H_ +#define SAKURA_CFUNCINFOARR_6E07CB18_7314_42F8_BA10_7C20E5ADCB76_H_ #pragma once class CFuncInfo; @@ -59,3 +61,4 @@ class CFuncInfoArr { DISALLOW_COPY_AND_ASSIGN(CFuncInfoArr); }; +#endif /* SAKURA_CFUNCINFOARR_6E07CB18_7314_42F8_BA10_7C20E5ADCB76_H_ */ diff --git a/sakura_core/parse/CWordParse.h b/sakura_core/parse/CWordParse.h index 04fb161f9d..ceab19d184 100644 --- a/sakura_core/parse/CWordParse.h +++ b/sakura_core/parse/CWordParse.h @@ -23,6 +23,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CWORDPARSE_C025B28F_9FBB_464A_9831_5E9DDAAEAA35_H_ +#define SAKURA_CWORDPARSE_C025B28F_9FBB_464A_9831_5E9DDAAEAA35_H_ #pragma once #include "basis/SakuraBasis.h" @@ -229,3 +231,4 @@ int CWordParse::GetWord( const CHAR_TYPE *pS, const int nLen, const CHAR_TYPE *p } return pr - pS; } +#endif /* SAKURA_CWORDPARSE_C025B28F_9FBB_464A_9831_5E9DDAAEAA35_H_ */ diff --git a/sakura_core/plugin/CComplementIfObj.h b/sakura_core/plugin/CComplementIfObj.h index 8a85ea79f4..52e40018a4 100644 --- a/sakura_core/plugin/CComplementIfObj.h +++ b/sakura_core/plugin/CComplementIfObj.h @@ -26,6 +26,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCOMPLEMENTIFOBJ_674B3C16_A1FD_4FE6_B3F5_054A5D1C71DB_H_ +#define SAKURA_CCOMPLEMENTIFOBJ_674B3C16_A1FD_4FE6_B3F5_054A5D1C71DB_H_ #pragma once #include "macro/CWSHIfObj.h" @@ -131,3 +133,4 @@ MacroFuncInfo CComplementIfObj::m_MacroFuncInfoArr[] = // 終端 {F_INVALID, NULL, {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL} }; +#endif /* SAKURA_CCOMPLEMENTIFOBJ_674B3C16_A1FD_4FE6_B3F5_054A5D1C71DB_H_ */ diff --git a/sakura_core/plugin/CDllPlugin.h b/sakura_core/plugin/CDllPlugin.h index bb3b6c55a8..cf9aedd02b 100644 --- a/sakura_core/plugin/CDllPlugin.h +++ b/sakura_core/plugin/CDllPlugin.h @@ -25,6 +25,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CDLLPLUGIN_7F8E705E_8E61_4B89_BA48_936CD5429E1D_H_ +#define SAKURA_CDLLPLUGIN_7F8E705E_8E61_4B89_BA48_936CD5429E1D_H_ #pragma once #include "CPlugin.h" @@ -82,3 +84,4 @@ class CDllPlugin final private: wstring m_sDllName; }; +#endif /* SAKURA_CDLLPLUGIN_7F8E705E_8E61_4B89_BA48_936CD5429E1D_H_ */ diff --git a/sakura_core/plugin/CJackManager.h b/sakura_core/plugin/CJackManager.h index dd7753e0ee..94992db80d 100644 --- a/sakura_core/plugin/CJackManager.h +++ b/sakura_core/plugin/CJackManager.h @@ -25,6 +25,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CJACKMANAGER_99C6FE17_62C7_45E8_82F2_C36441FF809C_H_ +#define SAKURA_CJACKMANAGER_99C6FE17_62C7_45E8_82F2_C36441FF809C_H_ #pragma once #include "plugin/CPlugin.h" @@ -100,3 +102,4 @@ class CJackManager final : public TSingleton{ DLLSHAREDATA* m_pShareData; std::vector m_Jacks; //ジャック定義の一覧 }; +#endif /* SAKURA_CJACKMANAGER_99C6FE17_62C7_45E8_82F2_C36441FF809C_H_ */ diff --git a/sakura_core/plugin/COutlineIfObj.h b/sakura_core/plugin/COutlineIfObj.h index 0f17dcb8f9..67e0e256ea 100644 --- a/sakura_core/plugin/COutlineIfObj.h +++ b/sakura_core/plugin/COutlineIfObj.h @@ -25,6 +25,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_COUTLINEIFOBJ_F8D635A3_FB5F_4619_95B8_BE6A557A518C_H_ +#define SAKURA_COUTLINEIFOBJ_F8D635A3_FB5F_4619_95B8_BE6A557A518C_H_ #pragma once #include "macro/CWSHIfObj.h" @@ -167,3 +169,4 @@ MacroFuncInfo COutlineIfObj::m_MacroFuncInfoArr[] = // 終端 {F_INVALID, NULL, {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL} }; +#endif /* SAKURA_COUTLINEIFOBJ_F8D635A3_FB5F_4619_95B8_BE6A557A518C_H_ */ diff --git a/sakura_core/plugin/CPlugin.h b/sakura_core/plugin/CPlugin.h index e98c0d0d48..b51dc21c1d 100644 --- a/sakura_core/plugin/CPlugin.h +++ b/sakura_core/plugin/CPlugin.h @@ -25,6 +25,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CPLUGIN_9E2D4124_CD2F_46B4_BEFA_4887FCCB2D0A_H_ +#define SAKURA_CPLUGIN_9E2D4124_CD2F_46B4_BEFA_4887FCCB2D0A_H_ #pragma once #include @@ -300,3 +302,4 @@ class CPlugin virtual bool ReadPluginDef( CDataProfile *cProfile, CDataProfile *cProfileMlang ) =0; //プラグイン定義ファイルを読み込む virtual bool ReadPluginOption( CDataProfile *cProfile ) =0; //オプションファイルを読み込む }; +#endif /* SAKURA_CPLUGIN_9E2D4124_CD2F_46B4_BEFA_4887FCCB2D0A_H_ */ diff --git a/sakura_core/plugin/CPluginIfObj.h b/sakura_core/plugin/CPluginIfObj.h index 6a57338dac..1b86e05d71 100644 --- a/sakura_core/plugin/CPluginIfObj.h +++ b/sakura_core/plugin/CPluginIfObj.h @@ -25,6 +25,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CPLUGINIFOBJ_F083BB50_2D36_44C9_8F2B_6F2D3BA7AAF9_H_ +#define SAKURA_CPLUGINIFOBJ_F083BB50_2D36_44C9_8F2B_6F2D3BA7AAF9_H_ #pragma once #include "macro/CWSHIfObj.h" @@ -210,3 +212,4 @@ MacroFuncInfo CPluginIfObj::m_MacroFuncInfoArr[] = // 終端 {F_INVALID, NULL, {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL} }; +#endif /* SAKURA_CPLUGINIFOBJ_F083BB50_2D36_44C9_8F2B_6F2D3BA7AAF9_H_ */ diff --git a/sakura_core/plugin/CPluginManager.h b/sakura_core/plugin/CPluginManager.h index 78fbcde929..1cc09096e4 100644 --- a/sakura_core/plugin/CPluginManager.h +++ b/sakura_core/plugin/CPluginManager.h @@ -25,6 +25,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CPLUGINMANAGER_CE705DAD_1876_4B21_9052_07A9BFD292DE_H_ +#define SAKURA_CPLUGINMANAGER_CE705DAD_1876_4B21_9052_07A9BFD292DE_H_ #pragma once #include "plugin/CPlugin.h" @@ -70,3 +72,4 @@ class CPluginManager final : public TSingleton{ wstring m_sBaseDir; //pluginsフォルダのパス wstring m_sExePluginDir; //Exeフォルダ配下pluginsフォルダのパス }; +#endif /* SAKURA_CPLUGINMANAGER_CE705DAD_1876_4B21_9052_07A9BFD292DE_H_ */ diff --git a/sakura_core/plugin/CSmartIndentIfObj.h b/sakura_core/plugin/CSmartIndentIfObj.h index 515d0f804c..e374327656 100644 --- a/sakura_core/plugin/CSmartIndentIfObj.h +++ b/sakura_core/plugin/CSmartIndentIfObj.h @@ -26,6 +26,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CSMARTINDENTIFOBJ_7F0A25BE_E50A_45C4_B20E_C9683FD04BB8_H_ +#define SAKURA_CSMARTINDENTIFOBJ_7F0A25BE_E50A_45C4_B20E_C9683FD04BB8_H_ #pragma once #include "macro/CWSHIfObj.h" @@ -100,3 +102,4 @@ class CSmartIndentIfObj final : public CWSHIfObj public: wchar_t m_wcChar; }; +#endif /* SAKURA_CSMARTINDENTIFOBJ_7F0A25BE_E50A_45C4_B20E_C9683FD04BB8_H_ */ diff --git a/sakura_core/plugin/CWSHPlugin.h b/sakura_core/plugin/CWSHPlugin.h index 0d327b04b8..46b6a0c7c2 100644 --- a/sakura_core/plugin/CWSHPlugin.h +++ b/sakura_core/plugin/CWSHPlugin.h @@ -25,6 +25,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CWSHPLUGIN_C424AA2D_B0A3_4170_9566_7F316368EDAF_H_ +#define SAKURA_CWSHPLUGIN_C424AA2D_B0A3_4170_9566_7F316368EDAF_H_ #pragma once #include "plugin/CPlugin.h" @@ -84,3 +86,4 @@ class CWSHPlugin final : private: bool m_bUseCache; }; +#endif /* SAKURA_CWSHPLUGIN_C424AA2D_B0A3_4170_9566_7F316368EDAF_H_ */ diff --git a/sakura_core/print/CPrint.h b/sakura_core/print/CPrint.h index 6ba5e8d3a4..505a586699 100644 --- a/sakura_core/print/CPrint.h +++ b/sakura_core/print/CPrint.h @@ -29,6 +29,8 @@ distribution. */ +#ifndef SAKURA_CPRINT_CB147282_3673_4A39_9B0A_C5C323C39C56_H_ +#define SAKURA_CPRINT_CB147282_3673_4A39_9B0A_C5C323C39C56_H_ #pragma once #include @@ -201,3 +203,4 @@ class CPrint HGLOBAL m_hDevMode; //!< 現在プリンタのDEVMODEへのメモリハンドル HGLOBAL m_hDevNames; //!< 現在プリンタのDEVNAMESへのメモリハンドル }; +#endif /* SAKURA_CPRINT_CB147282_3673_4A39_9B0A_C5C323C39C56_H_ */ diff --git a/sakura_core/print/CPrintPreview.h b/sakura_core/print/CPrintPreview.h index 0eaea84062..e97e1fd191 100644 --- a/sakura_core/print/CPrintPreview.h +++ b/sakura_core/print/CPrintPreview.h @@ -29,6 +29,8 @@ distribution. */ +#ifndef SAKURA_CPRINTPREVIEW_71FC07B8_7648_4179_81A7_0FE3299DBA0A_H_ +#define SAKURA_CPRINTPREVIEW_71FC07B8_7648_4179_81A7_0FE3299DBA0A_H_ #pragma once #include // 2002/2/10 aroka @@ -271,3 +273,4 @@ class CPrintPreview { DISALLOW_COPY_AND_ASSIGN(CPrintPreview); }; +#endif /* SAKURA_CPRINTPREVIEW_71FC07B8_7648_4179_81A7_0FE3299DBA0A_H_ */ diff --git a/sakura_core/prop/CPropCommon.h b/sakura_core/prop/CPropCommon.h index e9db7c9b70..02c0969287 100644 --- a/sakura_core/prop/CPropCommon.h +++ b/sakura_core/prop/CPropCommon.h @@ -36,6 +36,8 @@ distribution. */ +#ifndef SAKURA_CPROPCOMMON_82053028_AB71_4E4C_AE50_0E46E173828C_H_ +#define SAKURA_CPROPCOMMON_82053028_AB71_4E4C_AE50_0E46E173828C_H_ #pragma once #include "func/CFuncLookup.h" @@ -541,3 +543,4 @@ class CPropMainMenu final : CPropCommon bool Check_MainMenu(HWND hwndTree, std::wstring& sErrMsg); // メニューの検査 bool Check_MainMenu_Sub(HWND hwndTree, HTREEITEM htiTrg, int nLevel, std::wstring& sErrMsg); // メニューの検査 }; +#endif /* SAKURA_CPROPCOMMON_82053028_AB71_4E4C_AE50_0E46E173828C_H_ */ diff --git a/sakura_core/recent/CMRUFile.h b/sakura_core/recent/CMRUFile.h index e28aaaf891..883b8d4209 100644 --- a/sakura_core/recent/CMRUFile.h +++ b/sakura_core/recent/CMRUFile.h @@ -32,6 +32,8 @@ distribution. */ +#ifndef SAKURA_CMRUFILE_41099ADB_562E_457B_873D_8F81AC958AC2_H_ +#define SAKURA_CMRUFILE_41099ADB_562E_457B_873D_8F81AC958AC2_H_ #pragma once #include /// BOOL,HMENU // 2002/2/10 aroka @@ -71,3 +73,4 @@ class CMRUFile { private: CRecentFile m_cRecentFile; //履歴 //@@@ 2003.04.08 MIK }; +#endif /* SAKURA_CMRUFILE_41099ADB_562E_457B_873D_8F81AC958AC2_H_ */ diff --git a/sakura_core/recent/CMRUFolder.h b/sakura_core/recent/CMRUFolder.h index dde4f87cab..3dc3256b65 100644 --- a/sakura_core/recent/CMRUFolder.h +++ b/sakura_core/recent/CMRUFolder.h @@ -31,6 +31,8 @@ distribution. */ +#ifndef SAKURA_CMRUFOLDER_32D69CDD_037F_4DE1_961E_B730F56F4189_H_ +#define SAKURA_CMRUFOLDER_32D69CDD_037F_4DE1_961E_B730F56F4189_H_ #pragma once #include /// BOOL,HMENU // 2002/2/10 aroka @@ -67,3 +69,4 @@ class CMRUFolder { private: CRecentFolder m_cRecentFolder; //履歴 //@@@ 2003.04.08 MIK }; +#endif /* SAKURA_CMRUFOLDER_32D69CDD_037F_4DE1_961E_B730F56F4189_H_ */ diff --git a/sakura_core/recent/CMruListener.h b/sakura_core/recent/CMruListener.h index da9c268043..c6b0669899 100644 --- a/sakura_core/recent/CMruListener.h +++ b/sakura_core/recent/CMruListener.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CMRULISTENER_8E94E46A_3AEE_4030_B866_12F24E862C49_H_ +#define SAKURA_CMRULISTENER_8E94E46A_3AEE_4030_B866_12F24E862C49_H_ #pragma once #include "doc/CDocListener.h" @@ -43,3 +45,4 @@ class CMruListener : public CDocListenerEx{ //ヘルパ void _HoldBookmarks_And_AddToMRU(); // Mar. 30, 2003 genta }; +#endif /* SAKURA_CMRULISTENER_8E94E46A_3AEE_4030_B866_12F24E862C49_H_ */ diff --git a/sakura_core/recent/CRecent.h b/sakura_core/recent/CRecent.h index fa35594cd0..1d24c18f85 100644 --- a/sakura_core/recent/CRecent.h +++ b/sakura_core/recent/CRecent.h @@ -33,6 +33,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CRECENT_F4D70310_9FAF_4F07_9431_2B011A47142D_H_ +#define SAKURA_CRECENT_F4D70310_9FAF_4F07_9431_2B011A47142D_H_ #pragma once #include "_main/global.h" @@ -81,3 +83,4 @@ class CRecent{ }; #include "CRecentImp.h" +#endif /* SAKURA_CRECENT_F4D70310_9FAF_4F07_9431_2B011A47142D_H_ */ diff --git a/sakura_core/recent/CRecentCmd.h b/sakura_core/recent/CRecentCmd.h index 8d1b23c81f..3cc7846477 100644 --- a/sakura_core/recent/CRecentCmd.h +++ b/sakura_core/recent/CRecentCmd.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CRECENTCMD_4EB34D07_2F92_4BE4_9AB1_767141022C54_H_ +#define SAKURA_CRECENTCMD_4EB34D07_2F92_4BE4_9AB1_767141022C54_H_ #pragma once #include "CRecentImp.h" @@ -45,3 +47,4 @@ class CRecentCmd final : public CRecentImp{ bool ValidateReceiveType( LPCWSTR p ) const override; size_t GetTextMaxLength() const; }; +#endif /* SAKURA_CRECENTCMD_4EB34D07_2F92_4BE4_9AB1_767141022C54_H_ */ diff --git a/sakura_core/recent/CRecentCurDir.h b/sakura_core/recent/CRecentCurDir.h index 48da6e7456..384bb81c17 100644 --- a/sakura_core/recent/CRecentCurDir.h +++ b/sakura_core/recent/CRecentCurDir.h @@ -23,6 +23,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CRECENTCURDIR_A5846FA5_5608_4E6A_9A57_65DE2133E40A_H_ +#define SAKURA_CRECENTCURDIR_A5846FA5_5608_4E6A_9A57_65DE2133E40A_H_ #pragma once #include "CRecentImp.h" @@ -45,3 +47,4 @@ class CRecentCurDir final : public CRecentImp{ bool ValidateReceiveType( LPCWSTR p ) const override; size_t GetTextMaxLength() const; }; +#endif /* SAKURA_CRECENTCURDIR_A5846FA5_5608_4E6A_9A57_65DE2133E40A_H_ */ diff --git a/sakura_core/recent/CRecentEditNode.h b/sakura_core/recent/CRecentEditNode.h index 44340a4442..aeec30a705 100644 --- a/sakura_core/recent/CRecentEditNode.h +++ b/sakura_core/recent/CRecentEditNode.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CRECENTEDITNODE_51FF7E34_DFF5_45BA_AB77_7845F21F7A85_H_ +#define SAKURA_CRECENTEDITNODE_51FF7E34_DFF5_45BA_AB77_7845F21F7A85_H_ #pragma once #include "CRecentImp.h" @@ -45,3 +47,4 @@ class CRecentEditNode final : public CRecentImp{ int FindItemByHwnd(HWND hwnd) const; void DeleteItemByHwnd(HWND hwnd); }; +#endif /* SAKURA_CRECENTEDITNODE_51FF7E34_DFF5_45BA_AB77_7845F21F7A85_H_ */ diff --git a/sakura_core/recent/CRecentExceptMru.h b/sakura_core/recent/CRecentExceptMru.h index ee75c23fc6..185a18588a 100644 --- a/sakura_core/recent/CRecentExceptMru.h +++ b/sakura_core/recent/CRecentExceptMru.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CRECENTEXCEPTMRU_4DF7E5C5_2EC1_4A19_B31C_74EF43DC08AE_H_ +#define SAKURA_CRECENTEXCEPTMRU_4DF7E5C5_2EC1_4A19_B31C_74EF43DC08AE_H_ #pragma once #include "CRecentImp.h" @@ -44,3 +46,4 @@ class CRecentExceptMRU final : public CRecentImp{ bool ValidateReceiveType( LPCWSTR p ) const override; size_t GetTextMaxLength() const; }; +#endif /* SAKURA_CRECENTEXCEPTMRU_4DF7E5C5_2EC1_4A19_B31C_74EF43DC08AE_H_ */ diff --git a/sakura_core/recent/CRecentExcludeFile.h b/sakura_core/recent/CRecentExcludeFile.h index f45e96eb20..7a4b7b0180 100644 --- a/sakura_core/recent/CRecentExcludeFile.h +++ b/sakura_core/recent/CRecentExcludeFile.h @@ -21,6 +21,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CRECENTEXCLUDEFILE_74BD9C61_4E41_4D1D_A8CE_8C78B4DDDEBA_H_ +#define SAKURA_CRECENTEXCLUDEFILE_74BD9C61_4E41_4D1D_A8CE_8C78B4DDDEBA_H_ #pragma once #include "CRecentImp.h" @@ -43,3 +45,4 @@ class CRecentExcludeFile final : public CRecentImp{ bool ValidateReceiveType( LPCWSTR p ) const override; size_t GetTextMaxLength() const; }; +#endif /* SAKURA_CRECENTEXCLUDEFILE_74BD9C61_4E41_4D1D_A8CE_8C78B4DDDEBA_H_ */ diff --git a/sakura_core/recent/CRecentExcludeFolder.h b/sakura_core/recent/CRecentExcludeFolder.h index 7abff5ea53..eacec72e25 100644 --- a/sakura_core/recent/CRecentExcludeFolder.h +++ b/sakura_core/recent/CRecentExcludeFolder.h @@ -21,6 +21,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CRECENTEXCLUDEFOLDER_D933B071_8956_4B13_A01D_A5075CCE2A05_H_ +#define SAKURA_CRECENTEXCLUDEFOLDER_D933B071_8956_4B13_A01D_A5075CCE2A05_H_ #pragma once #include "CRecentImp.h" @@ -43,3 +45,4 @@ class CRecentExcludeFolder final : public CRecentImp{ //固有インターフェース int FindItemByPath(const WCHAR* pszPath) const; }; +#endif /* SAKURA_CRECENTFILE_11698DF0_9914_4163_8A68_8E611163D2E9_H_ */ diff --git a/sakura_core/recent/CRecentFolder.h b/sakura_core/recent/CRecentFolder.h index 7a4ddddd02..c9e9d30c6b 100644 --- a/sakura_core/recent/CRecentFolder.h +++ b/sakura_core/recent/CRecentFolder.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CRECENTFOLDER_E26A46E2_C8DF_4228_A0D6_24A2712392E9_H_ +#define SAKURA_CRECENTFOLDER_E26A46E2_C8DF_4228_A0D6_24A2712392E9_H_ #pragma once #include "CRecentImp.h" @@ -46,3 +48,4 @@ class CRecentFolder final : public CRecentImp{ bool ValidateReceiveType( LPCWSTR p ) const override; size_t GetTextMaxLength() const; }; +#endif /* SAKURA_CRECENTFOLDER_E26A46E2_C8DF_4228_A0D6_24A2712392E9_H_ */ diff --git a/sakura_core/recent/CRecentGrepFile.h b/sakura_core/recent/CRecentGrepFile.h index 666f8ae774..d71dc406f1 100644 --- a/sakura_core/recent/CRecentGrepFile.h +++ b/sakura_core/recent/CRecentGrepFile.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CRECENTGREPFILE_E23BE08A_1B53_492D_85EE_4370AA956BB5_H_ +#define SAKURA_CRECENTGREPFILE_E23BE08A_1B53_492D_85EE_4370AA956BB5_H_ #pragma once #include "CRecentImp.h" @@ -44,3 +46,4 @@ class CRecentGrepFile final : public CRecentImp{ bool ValidateReceiveType( LPCWSTR p ) const override; size_t GetTextMaxLength() const; }; +#endif /* SAKURA_CRECENTGREPFILE_E23BE08A_1B53_492D_85EE_4370AA956BB5_H_ */ diff --git a/sakura_core/recent/CRecentGrepFolder.h b/sakura_core/recent/CRecentGrepFolder.h index 26f566c782..7bd6f0e4a7 100644 --- a/sakura_core/recent/CRecentGrepFolder.h +++ b/sakura_core/recent/CRecentGrepFolder.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CRECENTGREPFOLDER_A0D1E75B_4587_4587_9A33_A5EA13349BAB_H_ +#define SAKURA_CRECENTGREPFOLDER_A0D1E75B_4587_4587_9A33_A5EA13349BAB_H_ #pragma once #include "CRecentImp.h" @@ -44,3 +46,4 @@ class CRecentGrepFolder final : public CRecentImp{ bool ValidateReceiveType( LPCWSTR p ) const override; size_t GetTextMaxLength() const; }; +#endif /* SAKURA_CRECENTGREPFOLDER_A0D1E75B_4587_4587_9A33_A5EA13349BAB_H_ */ diff --git a/sakura_core/recent/CRecentImp.h b/sakura_core/recent/CRecentImp.h index 1dcc71a1a9..5481c05434 100644 --- a/sakura_core/recent/CRecentImp.h +++ b/sakura_core/recent/CRecentImp.h @@ -25,6 +25,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CRECENTIMP_B18E6196_5684_44E4_91E0_ADB1542BF7E1_H_ +#define SAKURA_CRECENTIMP_B18E6196_5684_44E4_91E0_ADB1542BF7E1_H_ #pragma once #include "recent/CRecent.h" @@ -129,3 +131,4 @@ class CRecentImp : public CRecent{ #include "CRecentCurDir.h" #include "CRecentEditNode.h" #include "CRecentTagjumpKeyword.h" +#endif /* SAKURA_CRECENTIMP_B18E6196_5684_44E4_91E0_ADB1542BF7E1_H_ */ diff --git a/sakura_core/recent/CRecentReplace.h b/sakura_core/recent/CRecentReplace.h index ec7704ab0f..678fed3c50 100644 --- a/sakura_core/recent/CRecentReplace.h +++ b/sakura_core/recent/CRecentReplace.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CRECENTREPLACE_F287196B_19A2_4CEA_9225_9E9C681774F7_H_ +#define SAKURA_CRECENTREPLACE_F287196B_19A2_4CEA_9225_9E9C681774F7_H_ #pragma once #include "CRecentImp.h" @@ -44,3 +46,4 @@ class CRecentReplace final : public CRecentImp{ bool ValidateReceiveType( LPCWSTR p ) const override; size_t GetTextMaxLength() const; }; +#endif /* SAKURA_CRECENTREPLACE_F287196B_19A2_4CEA_9225_9E9C681774F7_H_ */ diff --git a/sakura_core/recent/CRecentSearch.h b/sakura_core/recent/CRecentSearch.h index e817d28083..07257e5693 100644 --- a/sakura_core/recent/CRecentSearch.h +++ b/sakura_core/recent/CRecentSearch.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CRECENTSEARCH_52B7DE14_4B4A_49DD_9374_27ED71D22ED7_H_ +#define SAKURA_CRECENTSEARCH_52B7DE14_4B4A_49DD_9374_27ED71D22ED7_H_ #pragma once #include "CRecentImp.h" @@ -44,3 +46,4 @@ class CRecentSearch final : public CRecentImp{ bool ValidateReceiveType( LPCWSTR p ) const override; size_t GetTextMaxLength() const; }; +#endif /* SAKURA_CRECENTSEARCH_52B7DE14_4B4A_49DD_9374_27ED71D22ED7_H_ */ diff --git a/sakura_core/recent/CRecentTagjumpKeyword.h b/sakura_core/recent/CRecentTagjumpKeyword.h index ba7116378e..fa3e502547 100644 --- a/sakura_core/recent/CRecentTagjumpKeyword.h +++ b/sakura_core/recent/CRecentTagjumpKeyword.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CRECENTTAGJUMPKEYWORD_1416AC30_3714_4760_A313_76588D26A0A1_H_ +#define SAKURA_CRECENTTAGJUMPKEYWORD_1416AC30_3714_4760_A313_76588D26A0A1_H_ #pragma once #include "CRecentImp.h" @@ -44,3 +46,4 @@ class CRecentTagjumpKeyword final : public CRecentImp& m_aFileTreeItems; }; +#endif /* SAKURA_CIMPEXPMANAGER_12EC6C8E_1661_485E_8972_A7A9AE419BC8_H_ */ diff --git a/sakura_core/typeprop/CPropTypes.h b/sakura_core/typeprop/CPropTypes.h index a44f2e799a..49128d0bb6 100644 --- a/sakura_core/typeprop/CPropTypes.h +++ b/sakura_core/typeprop/CPropTypes.h @@ -18,6 +18,8 @@ Please contact the copyright holders to use this code for other purpose. */ +#ifndef SAKURA_CPROPTYPES_2A255D3D_78BC_4B7A_85F7_7BA7ABBF3DF2_H_ +#define SAKURA_CPROPTYPES_2A255D3D_78BC_4B7A_85F7_7BA7ABBF3DF2_H_ #pragma once #include "types/CType.h" // STypeConfig @@ -251,3 +253,4 @@ void InitTypeNameId2( std::vector >& vec, TYPE_NAME_ID* arr, vec.push_back( item ); } } +#endif /* SAKURA_CPROPTYPES_2A255D3D_78BC_4B7A_85F7_7BA7ABBF3DF2_H_ */ diff --git a/sakura_core/types/CType.h b/sakura_core/types/CType.h index 2eb40614fa..acfa1e4e06 100644 --- a/sakura_core/types/CType.h +++ b/sakura_core/types/CType.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CTYPE_B057F55F_C082_47DB_9CB4_E8B1BBA5BF77_H_ +#define SAKURA_CTYPE_B057F55F_C082_47DB_9CB4_E8B1BBA5BF77_H_ #pragma once #include "CEol.h" @@ -359,3 +361,4 @@ inline bool C_IsSpace( wchar_t c, bool bExtEol ) //! C/C++のファイル名による判定 EOutlineType GetCLangOutlineType( const wchar_t* pszFileName ); +#endif /* SAKURA_CTYPE_B057F55F_C082_47DB_9CB4_E8B1BBA5BF77_H_ */ diff --git a/sakura_core/types/CTypeSupport.h b/sakura_core/types/CTypeSupport.h index b01f758e6d..c03e883154 100644 --- a/sakura_core/types/CTypeSupport.h +++ b/sakura_core/types/CTypeSupport.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CTYPESUPPORT_D3B23860_9050_4422_B610_1A9E6A053736_H_ +#define SAKURA_CTYPESUPPORT_D3B23860_9050_4422_B610_1A9E6A053736_H_ #pragma once #include "uiparts/CGraphics.h" @@ -145,3 +147,4 @@ class CTypeSupport{ CGraphics* m_gr; //設定を変更したHDC }; +#endif /* SAKURA_CTYPESUPPORT_D3B23860_9050_4422_B610_1A9E6A053736_H_ */ diff --git a/sakura_core/uiparts/CGraphics.h b/sakura_core/uiparts/CGraphics.h index a53c3eeef0..0a31a791e3 100644 --- a/sakura_core/uiparts/CGraphics.h +++ b/sakura_core/uiparts/CGraphics.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CGRAPHICS_B5576115_8D9B_4000_953C_7561307A462C_H_ +#define SAKURA_CGRAPHICS_B5576115_8D9B_4000_953C_7561307A462C_H_ #pragma once /* @@ -327,3 +329,4 @@ class CGraphics{ HBRUSH m_hbrCurrent; bool m_bDynamicBrush; //m_hbrCurrentを動的に作成した場合はtrue }; +#endif /* SAKURA_CGRAPHICS_B5576115_8D9B_4000_953C_7561307A462C_H_ */ diff --git a/sakura_core/uiparts/CImageListMgr.h b/sakura_core/uiparts/CImageListMgr.h index a89e87cf68..21b15e9725 100644 --- a/sakura_core/uiparts/CImageListMgr.h +++ b/sakura_core/uiparts/CImageListMgr.h @@ -29,6 +29,8 @@ distribution. */ +#ifndef SAKURA_CIMAGELISTMGR_4FA1F1E8_0029_42BD_A346_C51BB0A70B0C_H_ +#define SAKURA_CIMAGELISTMGR_4FA1F1E8_0029_42BD_A346_C51BB0A70B0C_H_ #pragma once #include "_main/global.h" @@ -126,3 +128,4 @@ class CImageListMgr { //! ビットマップを一行拡張する void Extend(bool = true); }; +#endif /* SAKURA_CIMAGELISTMGR_4FA1F1E8_0029_42BD_A346_C51BB0A70B0C_H_ */ diff --git a/sakura_core/uiparts/CMenuDrawer.h b/sakura_core/uiparts/CMenuDrawer.h index 45a9a60682..79cfc56410 100644 --- a/sakura_core/uiparts/CMenuDrawer.h +++ b/sakura_core/uiparts/CMenuDrawer.h @@ -15,6 +15,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CMENUDRAWER_F2B94603_89D1_4064_A93E_3634A0A6FAD4_H_ +#define SAKURA_CMENUDRAWER_F2B94603_89D1_4064_A93E_3634A0A6FAD4_H_ #pragma once #include "Funccode_enum.h" @@ -125,3 +127,4 @@ class CMenuDrawer BYTE fsState, BYTE fsStyle, DWORD_PTR dwData, INT_PTR iString ) const; /* TBBUTTON構造体にデータをセット */ }; +#endif /* SAKURA_CMENUDRAWER_F2B94603_89D1_4064_A93E_3634A0A6FAD4_H_ */ diff --git a/sakura_core/uiparts/CSoundSet.h b/sakura_core/uiparts/CSoundSet.h index a6c1509ca5..266e642aa8 100644 --- a/sakura_core/uiparts/CSoundSet.h +++ b/sakura_core/uiparts/CSoundSet.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CSOUNDSET_2EB52973_40E4_438F_A670_6FFA850251E6_H_ +#define SAKURA_CSOUNDSET_2EB52973_40E4_438F_A670_6FFA850251E6_H_ #pragma once class CSoundSet{ @@ -33,3 +35,4 @@ class CSoundSet{ private: int m_nMuteCount; }; +#endif /* SAKURA_CSOUNDSET_2EB52973_40E4_438F_A670_6FFA850251E6_H_ */ diff --git a/sakura_core/uiparts/CVisualProgress.h b/sakura_core/uiparts/CVisualProgress.h index a71a2fc0a3..4f0e43895b 100644 --- a/sakura_core/uiparts/CVisualProgress.h +++ b/sakura_core/uiparts/CVisualProgress.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CVISUALPROGRESS_A9390FAB_E0F3_4EA2_8A6C_1ACB3143DD3F_H_ +#define SAKURA_CVISUALPROGRESS_A9390FAB_E0F3_4EA2_8A6C_1ACB3143DD3F_H_ #pragma once #include "doc/CDocListener.h" @@ -56,3 +58,4 @@ class CVisualProgress final : public CDocListenerEx, public CProgressListener{ DISALLOW_COPY_AND_ASSIGN(CVisualProgress); }; +#endif /* SAKURA_CVISUALPROGRESS_A9390FAB_E0F3_4EA2_8A6C_1ACB3143DD3F_H_ */ diff --git a/sakura_core/uiparts/CWaitCursor.h b/sakura_core/uiparts/CWaitCursor.h index b819575df8..2a74095345 100644 --- a/sakura_core/uiparts/CWaitCursor.h +++ b/sakura_core/uiparts/CWaitCursor.h @@ -11,6 +11,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CWAITCURSOR_6EAC4CB5_4D04_4501_B076_85C8A0395785_H_ +#define SAKURA_CWAITCURSOR_6EAC4CB5_4D04_4501_B076_85C8A0395785_H_ #pragma once #include @@ -38,3 +40,4 @@ class CWaitCursor HCURSOR m_hCursorOld; bool m_bEnable; }; +#endif /* SAKURA_CWAITCURSOR_6EAC4CB5_4D04_4501_B076_85C8A0395785_H_ */ diff --git a/sakura_core/uiparts/HandCursor.h b/sakura_core/uiparts/HandCursor.h index 01f1fa9cf3..f70a73aff6 100644 --- a/sakura_core/uiparts/HandCursor.h +++ b/sakura_core/uiparts/HandCursor.h @@ -28,9 +28,12 @@ distribution. */ +#ifndef SAKURA_HANDCURSOR_096969CA_716E_4F14_9CE4_1C1CAED014EA_H_ +#define SAKURA_HANDCURSOR_096969CA_716E_4F14_9CE4_1C1CAED014EA_H_ #pragma once inline void SetHandCursor () { SetCursor( LoadCursor( NULL, IDC_HAND ) ); } +#endif /* SAKURA_HANDCURSOR_096969CA_716E_4F14_9CE4_1C1CAED014EA_H_ */ diff --git a/sakura_core/util/MessageBoxF.h b/sakura_core/util/MessageBoxF.h index a67896cb95..9422f98ad8 100644 --- a/sakura_core/util/MessageBoxF.h +++ b/sakura_core/util/MessageBoxF.h @@ -29,6 +29,8 @@ distribution. */ +#ifndef SAKURA_MESSAGEBOXF_542C25FF_34EB_4920_AC1A_DA32919E101B_H_ +#define SAKURA_MESSAGEBOXF_542C25FF_34EB_4920_AC1A_DA32919E101B_H_ #pragma once // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // @@ -87,3 +89,4 @@ int TopCustomMessage(HWND hwnd, UINT uType, LPCWSTR format, ...); //(TOPMOST) //作者に教えて欲しいエラー int PleaseReportToAuthor(HWND hwnd, LPCWSTR format, ...); +#endif /* SAKURA_MESSAGEBOXF_542C25FF_34EB_4920_AC1A_DA32919E101B_H_ */ diff --git a/sakura_core/util/RegKey.h b/sakura_core/util/RegKey.h index c4908b8312..98b4ae0909 100644 --- a/sakura_core/util/RegKey.h +++ b/sakura_core/util/RegKey.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_REGKEY_6B5694D7_BDD3_4835_8B34_356D3FC110C7_H_ +#define SAKURA_REGKEY_6B5694D7_BDD3_4835_8B34_356D3FC110C7_H_ #pragma once class CRegKey @@ -187,3 +189,4 @@ class CRegKey return RegDeleteKey(root, path); } }; +#endif /* SAKURA_REGKEY_6B5694D7_BDD3_4835_8B34_356D3FC110C7_H_ */ diff --git a/sakura_core/util/StaticType.h b/sakura_core/util/StaticType.h index 49a1962369..7e4b73d8a1 100644 --- a/sakura_core/util/StaticType.h +++ b/sakura_core/util/StaticType.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_STATICTYPE_54CC2BD5_4C7C_4584_B515_EF8C533B90EA_H_ +#define SAKURA_STATICTYPE_54CC2BD5_4C7C_4584_B515_EF8C533B90EA_H_ #pragma once #include "util/string_ex.h" @@ -124,3 +126,4 @@ class StaticString{ }; #define _countof2(s) s.BUFFER_COUNT +#endif /* SAKURA_STATICTYPE_54CC2BD5_4C7C_4584_B515_EF8C533B90EA_H_ */ diff --git a/sakura_core/util/container.h b/sakura_core/util/container.h index 360ef1ad89..ee341bbc5b 100644 --- a/sakura_core/util/container.h +++ b/sakura_core/util/container.h @@ -27,6 +27,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CONTAINER_30F2CB18_623C_48C4_BC32_ED3563FB2763_H_ +#define SAKURA_CONTAINER_30F2CB18_623C_48C4_BC32_ED3563FB2763_H_ #pragma once #include @@ -58,3 +60,4 @@ class vector_ex : public std::vector{ return false; } }; +#endif /* SAKURA_CONTAINER_30F2CB18_623C_48C4_BC32_ED3563FB2763_H_ */ diff --git a/sakura_core/util/design_template.h b/sakura_core/util/design_template.h index e0dcf07035..06a0243a03 100644 --- a/sakura_core/util/design_template.h +++ b/sakura_core/util/design_template.h @@ -28,6 +28,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_DESIGN_TEMPLATE_BBC57590_CED0_40D0_B719_F5A4522B8A56_H_ +#define SAKURA_DESIGN_TEMPLATE_BBC57590_CED0_40D0_B719_F5A4522B8A56_H_ #pragma once // http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Copy_Constructors @@ -119,3 +121,4 @@ template class TInstanceHolder{ static std::vector gm_table; }; template std::vector TInstanceHolder::gm_table; +#endif /* SAKURA_DESIGN_TEMPLATE_BBC57590_CED0_40D0_B719_F5A4522B8A56_H_ */ diff --git a/sakura_core/util/file.h b/sakura_core/util/file.h index b6fabf8529..d77ff05e7d 100644 --- a/sakura_core/util/file.h +++ b/sakura_core/util/file.h @@ -23,6 +23,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_FILE_FE33056B_6B48_4668_AE95_923EC960A607_H_ +#define SAKURA_FILE_FE33056B_6B48_4668_AE95_923EC960A607_H_ #pragma once bool fexist(LPCWSTR pszPath); //!< ファイルまたはディレクトリが存在すればtrue @@ -106,3 +108,4 @@ int FileMatchScoreSepExt( const WCHAR *file1, const WCHAR *file2 ); void GetStrTrancateWidth( WCHAR* dest, int nSize, const WCHAR* path, HDC hDC, int nPxWidth ); void GetShortViewPath(WCHAR* dest, int nSize, const WCHAR* path, HDC hDC, int nPxWidth, bool bFitMode ); +#endif /* SAKURA_FILE_FE33056B_6B48_4668_AE95_923EC960A607_H_ */ diff --git a/sakura_core/util/format.h b/sakura_core/util/format.h index 5c67d2834e..f158846508 100644 --- a/sakura_core/util/format.h +++ b/sakura_core/util/format.h @@ -23,9 +23,12 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_FORMAT_A006AC9B_ADE2_499D_9CC6_00A649F32B4F_H_ +#define SAKURA_FORMAT_A006AC9B_ADE2_499D_9CC6_00A649F32B4F_H_ #pragma once // 20051121 aroka bool GetDateTimeFormat( WCHAR* szResult, int size, const WCHAR* format, const SYSTEMTIME& systime ); UINT32 ParseVersion( const WCHAR* ver ); //バージョン番号の解析 int CompareVersion( const WCHAR* verA, const WCHAR* verB ); //バージョン番号の比較 +#endif /* SAKURA_FORMAT_A006AC9B_ADE2_499D_9CC6_00A649F32B4F_H_ */ diff --git a/sakura_core/util/input.h b/sakura_core/util/input.h index 647c4728a0..6a15f93e3b 100644 --- a/sakura_core/util/input.h +++ b/sakura_core/util/input.h @@ -22,8 +22,11 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_INPUT_9FE4D4C6_4B13_42AA_97CA_8EBC7C672F52_H_ +#define SAKURA_INPUT_9FE4D4C6_4B13_42AA_97CA_8EBC7C672F52_H_ #pragma once //キー入力 // novice 2004/10/10 int getCtrlKeyState(); +#endif /* SAKURA_INPUT_9FE4D4C6_4B13_42AA_97CA_8EBC7C672F52_H_ */ diff --git a/sakura_core/util/module.h b/sakura_core/util/module.h index 2af1112346..415d3e03dd 100644 --- a/sakura_core/util/module.h +++ b/sakura_core/util/module.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_MODULE_865764F5_F6C8_4B99_B2DB_A29F375539FE_H_ +#define SAKURA_MODULE_865764F5_F6C8_4B99_B2DB_A29F375539FE_H_ #pragma once void GetAppVersionInfo( HINSTANCE hInstance, int nVersionResourceID, @@ -35,3 +37,4 @@ void ChangeCurrentDirectoryToExeDir(); //! カレントディレクトリ移動機能付LoadLibrary HMODULE LoadLibraryExedir( LPCWSTR pszDll); +#endif /* SAKURA_MODULE_865764F5_F6C8_4B99_B2DB_A29F375539FE_H_ */ diff --git a/sakura_core/util/ole_convert.h b/sakura_core/util/ole_convert.h index 2ec4b18865..ef0011157d 100644 --- a/sakura_core/util/ole_convert.h +++ b/sakura_core/util/ole_convert.h @@ -2,6 +2,8 @@ @brief OLE型(VARIANT, BSTRなど)の変換関数 */ +#ifndef SAKURA_OLE_CONVERT_4D549FAC_BEAA_4E5F_ACC1_9EEEA9B8DC6F_H_ +#define SAKURA_OLE_CONVERT_4D549FAC_BEAA_4E5F_ACC1_9EEEA9B8DC6F_H_ #pragma once #include @@ -9,3 +11,4 @@ bool variant_to_wstr( VARIANT v, std::wstring& wstr ); // VARIANT変数をBSTRとみなし、wstringに変換する bool variant_to_int( VARIANT v, int& n ); // VARIANT変数を整数とみなし、intに変換する +#endif /* SAKURA_OLE_CONVERT_4D549FAC_BEAA_4E5F_ACC1_9EEEA9B8DC6F_H_ */ diff --git a/sakura_core/util/os.h b/sakura_core/util/os.h index b6d281eb33..39c4a3abe4 100644 --- a/sakura_core/util/os.h +++ b/sakura_core/util/os.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_OS_0C5BD7E8_67ED_467C_916F_CCDC1F9A26BF_H_ +#define SAKURA_OS_0C5BD7E8_67ED_467C_916F_CCDC1F9A26BF_H_ #pragma once #include // LPDATAOBJECT @@ -108,3 +110,4 @@ BOOL IsPowerShellAvailable(void); @return 手続きが成功したら true 失敗したら false */ BOOL ImeSetOpen(HWND hWnd, BOOL bOpen, BOOL* pBackup); +#endif /* SAKURA_OS_0C5BD7E8_67ED_467C_916F_CCDC1F9A26BF_H_ */ diff --git a/sakura_core/util/relation_tool.h b/sakura_core/util/relation_tool.h index 50380876b3..29672f127a 100644 --- a/sakura_core/util/relation_tool.h +++ b/sakura_core/util/relation_tool.h @@ -25,6 +25,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_RELATION_TOOL_4B723E5C_5042_4F93_8899_EE2077DB8CFE_H_ +#define SAKURA_RELATION_TOOL_4B723E5C_5042_4F93_8899_EE2077DB8CFE_H_ #pragma once #include @@ -84,3 +86,4 @@ template class CListenerT : public CListener{ return static_cast(CListener::GetListeningSubject()); } }; +#endif /* SAKURA_RELATION_TOOL_4B723E5C_5042_4F93_8899_EE2077DB8CFE_H_ */ diff --git a/sakura_core/util/shell.h b/sakura_core/util/shell.h index 3c5f6a9e6d..58e7da9959 100644 --- a/sakura_core/util/shell.h +++ b/sakura_core/util/shell.h @@ -24,6 +24,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_SHELL_0A8B6454_B007_46E5_9606_8D2FD7993B91_H_ +#define SAKURA_SHELL_0A8B6454_B007_46E5_9606_8D2FD7993B91_H_ #pragma once BOOL MyWinHelp(HWND hwndCaller, UINT uCommand, DWORD_PTR dwData); /* WinHelp のかわりに HtmlHelp を呼び出す */ // 2006.07.22 ryoji @@ -44,3 +46,4 @@ INT_PTR MyPropertySheet( LPPROPSHEETHEADER lppsph ); // 独自拡張プロパテ //!フォント選択ダイアログ BOOL MySelectFont( LOGFONT* plf, INT* piPointSize, HWND hwndDlgOwner, bool ); // 2009.10.01 ryoji ポイントサイズ(1/10ポイント単位)引数追加 +#endif /* SAKURA_SHELL_0A8B6454_B007_46E5_9606_8D2FD7993B91_H_ */ diff --git a/sakura_core/util/std_macro.h b/sakura_core/util/std_macro.h index f2a4ce7201..2eba9dd409 100644 --- a/sakura_core/util/std_macro.h +++ b/sakura_core/util/std_macro.h @@ -23,6 +23,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_STD_MACRO_ED0953D9_582D_40D6_8190_3FFA9344819D_H_ +#define SAKURA_STD_MACRO_ED0953D9_582D_40D6_8190_3FFA9344819D_H_ #pragma once #define SAFE_DELETE(p) { delete p; p=0; } @@ -80,3 +82,4 @@ T t_unit(T t) //ビルド種に関係なく、ANSI。 #define ATEXT(A) A +#endif /* SAKURA_STD_MACRO_ED0953D9_582D_40D6_8190_3FFA9344819D_H_ */ diff --git a/sakura_core/util/string_ex.h b/sakura_core/util/string_ex.h index 01feadfc4c..263ea4d460 100644 --- a/sakura_core/util/string_ex.h +++ b/sakura_core/util/string_ex.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_STRING_EX_87282FEB_4B23_4112_9C5A_419F43618705_H_ +#define SAKURA_STRING_EX_87282FEB_4B23_4112_9C5A_419F43618705_H_ #pragma once // 2007.10.19 kobake @@ -257,3 +259,4 @@ int strnicmp_literal(const char* strData1, const char (&literalData2)[Size]) { assert(literalData2[Size - 1] == 0); return ::_strnicmp(strData1, literalData2, Size - 1 ); //※終端ヌルを含めないので、_countofからマイナス1する } +#endif /* SAKURA_STRING_EX_87282FEB_4B23_4112_9C5A_419F43618705_H_ */ diff --git a/sakura_core/util/string_ex2.h b/sakura_core/util/string_ex2.h index fdcfffad69..6338cbf836 100644 --- a/sakura_core/util/string_ex2.h +++ b/sakura_core/util/string_ex2.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_STRING_EX2_9F6CF6F6_33BD_46DF_9492_0EAF6CFBAE22_H_ +#define SAKURA_STRING_EX2_9F6CF6F6_33BD_46DF_9492_0EAF6CFBAE22_H_ #pragma once class CEol; @@ -152,3 +154,4 @@ ptrdiff_t int2dec( return len; } +#endif /* SAKURA_STRING_EX2_9F6CF6F6_33BD_46DF_9492_0EAF6CFBAE22_H_ */ diff --git a/sakura_core/util/tchar_convert.h b/sakura_core/util/tchar_convert.h index 5f7954ca59..10ae17d365 100644 --- a/sakura_core/util/tchar_convert.h +++ b/sakura_core/util/tchar_convert.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_TCHAR_CONVERT_2F41312D_27C8_4366_89F5_046BF7ED3B32_H_ +#define SAKURA_TCHAR_CONVERT_2F41312D_27C8_4366_89F5_046BF7ED3B32_H_ #pragma once //WCHARに変換 @@ -36,3 +38,4 @@ const ACHAR* to_achar(const WCHAR* pSrc, int nSrcLength); //その他 const WCHAR* easy_format(const WCHAR* format, ...); +#endif /* SAKURA_TCHAR_CONVERT_2F41312D_27C8_4366_89F5_046BF7ED3B32_H_ */ diff --git a/sakura_core/util/tchar_printf.h b/sakura_core/util/tchar_printf.h index 84b996c076..573f7f472d 100644 --- a/sakura_core/util/tchar_printf.h +++ b/sakura_core/util/tchar_printf.h @@ -45,6 +45,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_TCHAR_PRINTF_A728AFEF_DAD4_4967_8654_BF6DB52EDCD9_H_ +#define SAKURA_TCHAR_PRINTF_A728AFEF_DAD4_4967_8654_BF6DB52EDCD9_H_ #pragma once // vsprintf_sラップ @@ -70,3 +72,4 @@ int tchar_sprintf(WCHAR* buf, const WCHAR* format, ...); // _snprintf_sラップ int tchar_snprintf_s(ACHAR* buf, size_t count, const ACHAR* format, ...); int tchar_snprintf_s(WCHAR* buf, size_t count, const WCHAR* format, ...); +#endif /* SAKURA_TCHAR_PRINTF_A728AFEF_DAD4_4967_8654_BF6DB52EDCD9_H_ */ diff --git a/sakura_core/util/window.h b/sakura_core/util/window.h index eac73c531c..1be6e2742f 100644 --- a/sakura_core/util/window.h +++ b/sakura_core/util/window.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_WINDOW_A0833476_5E32_46BE_87B6_ECD55F10D34A_H_ +#define SAKURA_WINDOW_A0833476_5E32_46BE_87B6_ECD55F10D34A_H_ #pragma once /*! @@ -189,3 +191,4 @@ class CDCFont HFONT m_hFontOld; HFONT m_hFont; }; +#endif /* SAKURA_WINDOW_A0833476_5E32_46BE_87B6_ECD55F10D34A_H_ */ diff --git a/sakura_core/version.h b/sakura_core/version.h index 0b5f133590..bb95523a0d 100644 --- a/sakura_core/version.h +++ b/sakura_core/version.h @@ -1,4 +1,6 @@ /*! @file */ +#ifndef SAKURA_VERSION_F8EBA970_BB7A_43D9_B89A_04FB0B586A8A_H_ +#define SAKURA_VERSION_F8EBA970_BB7A_43D9_B89A_04FB0B586A8A_H_ #pragma once #include "config/build_config.h" @@ -88,3 +90,4 @@ DEV_VERSION_STR_WITH_SPACE \ SPACE_WHEN_DEBUG \ VER_CONFIG ALPHA_VERSION_STR_WITH_SPACE +#endif /* SAKURA_VERSION_F8EBA970_BB7A_43D9_B89A_04FB0B586A8A_H_ */ diff --git a/sakura_core/view/CCaret.h b/sakura_core/view/CCaret.h index b3fae2db40..e979632bab 100644 --- a/sakura_core/view/CCaret.h +++ b/sakura_core/view/CCaret.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCARET_78A7C1D0_0D47_4FF9_AE73_3421E35ABCB0_H_ +#define SAKURA_CCARET_78A7C1D0_0D47_4FF9_AE73_3421E35ABCB0_H_ #pragma once #define _CARETMARGINRATE 20 @@ -233,3 +235,4 @@ class CCaret{ @date 2004.04.09 genta 説明文追加 */ +#endif /* SAKURA_CCARET_78A7C1D0_0D47_4FF9_AE73_3421E35ABCB0_H_ */ diff --git a/sakura_core/view/CEditView.h b/sakura_core/view/CEditView.h index fac773f356..d2e5ba044a 100644 --- a/sakura_core/view/CEditView.h +++ b/sakura_core/view/CEditView.h @@ -38,6 +38,8 @@ distribution. */ +#ifndef SAKURA_CEDITVIEW_54DE503F_6F97_4A16_8165_27F5F0D232E2_H_ +#define SAKURA_CEDITVIEW_54DE503F_6F97_4A16_8165_27F5F0D232E2_H_ #pragma once #include @@ -777,3 +779,4 @@ class COutputAdapter virtual bool IsEnableRunningDlg(){ return true; } virtual bool IsActiveDebugWindow(){ return true; } }; +#endif /* SAKURA_CEDITVIEW_54DE503F_6F97_4A16_8165_27F5F0D232E2_H_ */ diff --git a/sakura_core/view/CEditView_Paint.h b/sakura_core/view/CEditView_Paint.h index 6b3743f428..1628540b97 100644 --- a/sakura_core/view/CEditView_Paint.h +++ b/sakura_core/view/CEditView_Paint.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CEDITVIEW_PAINT_0202B897_3D47_48DD_9279_45594D80F726_H_ +#define SAKURA_CEDITVIEW_PAINT_0202B897_3D47_48DD_9279_45594D80F726_H_ #pragma once class CEditView; @@ -47,3 +49,4 @@ class CEditView_Paint{ bool bUseMemoryDC //!< メモリDCを使用する ); }; +#endif /* SAKURA_CEDITVIEW_PAINT_0202B897_3D47_48DD_9279_45594D80F726_H_ */ diff --git a/sakura_core/view/CRuler.h b/sakura_core/view/CRuler.h index 963c72deca..f7b903875f 100644 --- a/sakura_core/view/CRuler.h +++ b/sakura_core/view/CRuler.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CRULER_2D5B66C2_E499_4C3D_8113_F26B9C28F940_H_ +#define SAKURA_CRULER_2D5B66C2_E499_4C3D_8113_F26B9C28F940_H_ #pragma once class CTextArea; @@ -72,3 +74,4 @@ class CRuler{ std::vector m_apt; std::vector m_asz; }; +#endif /* SAKURA_CRULER_2D5B66C2_E499_4C3D_8113_F26B9C28F940_H_ */ diff --git a/sakura_core/view/CTextArea.h b/sakura_core/view/CTextArea.h index 9b1f59ec1a..e6b095baca 100644 --- a/sakura_core/view/CTextArea.h +++ b/sakura_core/view/CTextArea.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CTEXTAREA_E3BB290D_608F_4F86_B460_8D84F171CB11_H_ +#define SAKURA_CTEXTAREA_E3BB290D_608F_4F86_B460_8D84F171CB11_H_ #pragma once class CViewFont; @@ -244,3 +246,4 @@ class CTextArea{ //その他 int m_nViewAlignLeftCols; /* 行番号域の桁数 */ }; +#endif /* SAKURA_CTEXTAREA_E3BB290D_608F_4F86_B460_8D84F171CB11_H_ */ diff --git a/sakura_core/view/CTextDrawer.h b/sakura_core/view/CTextDrawer.h index 4b33cc9584..0b53bed6f3 100644 --- a/sakura_core/view/CTextDrawer.h +++ b/sakura_core/view/CTextDrawer.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CTEXTDRAWER_1AC4291D_DBBD_4A04_8974_26BC505B5318_H_ +#define SAKURA_CTEXTDRAWER_1AC4291D_DBBD_4A04_8974_26BC505B5318_H_ #pragma once class CTextMetrics; @@ -69,3 +71,4 @@ class CTextDrawer{ private: const CEditView* m_pEditView; }; +#endif /* SAKURA_CTEXTDRAWER_1AC4291D_DBBD_4A04_8974_26BC505B5318_H_ */ diff --git a/sakura_core/view/CTextMetrics.h b/sakura_core/view/CTextMetrics.h index 872029431b..a986aca376 100644 --- a/sakura_core/view/CTextMetrics.h +++ b/sakura_core/view/CTextMetrics.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CTEXTMETRICS_7972A864_FDFF_4852_9EA5_A91D39657A7F_H_ +#define SAKURA_CTEXTMETRICS_7972A864_FDFF_4852_9EA5_A91D39657A7F_H_ #pragma once //2007.08.25 kobake 追加 @@ -128,3 +130,4 @@ class CTextMetrics{ int m_anZenkakuDx[64]; //!< 全角用文字間隔配列 std::vector m_aFontHeightMargin; }; +#endif /* SAKURA_CTEXTMETRICS_7972A864_FDFF_4852_9EA5_A91D39657A7F_H_ */ diff --git a/sakura_core/view/CViewCalc.h b/sakura_core/view/CViewCalc.h index e91ec3c1c2..c091e02078 100644 --- a/sakura_core/view/CViewCalc.h +++ b/sakura_core/view/CViewCalc.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CVIEWCALC_1441B90A_43D1_4C24_BC92_B887BD104129_H_ +#define SAKURA_CVIEWCALC_1441B90A_43D1_4C24_BC92_B887BD104129_H_ #pragma once #include "doc/layout/CTsvModeInfo.h" @@ -57,3 +59,4 @@ class CViewCalc{ private: const CEditView* m_pOwner; }; +#endif /* SAKURA_CVIEWCALC_1441B90A_43D1_4C24_BC92_B887BD104129_H_ */ diff --git a/sakura_core/view/CViewFont.h b/sakura_core/view/CViewFont.h index 98c4db169a..09765491b2 100644 --- a/sakura_core/view/CViewFont.h +++ b/sakura_core/view/CViewFont.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CVIEWFONT_650DC4AC_DEA2_4652_B47A_6CA998C2F9EF_H_ +#define SAKURA_CVIEWFONT_650DC4AC_DEA2_4652_B47A_6CA998C2F9EF_H_ #pragma once #include "doc/CDocTypeSetting.h" // ColorInfo !! @@ -68,3 +70,4 @@ class CViewFont{ LOGFONT m_LogFont; bool m_bMiniMap; }; +#endif /* SAKURA_CVIEWFONT_650DC4AC_DEA2_4652_B47A_6CA998C2F9EF_H_ */ diff --git a/sakura_core/view/CViewParser.h b/sakura_core/view/CViewParser.h index 1d912f2f35..b9b52d343c 100644 --- a/sakura_core/view/CViewParser.h +++ b/sakura_core/view/CViewParser.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CVIEWPARSER_440F895C_409D_4ACF_906E_1DD7A0C0C2C0_H_ +#define SAKURA_CVIEWPARSER_440F895C_409D_4ACF_906E_1DD7A0C0C2C0_H_ #pragma once class CEditView; @@ -42,3 +44,4 @@ class CViewParser{ private: const CEditView* m_pEditView; }; +#endif /* SAKURA_CVIEWPARSER_440F895C_409D_4ACF_906E_1DD7A0C0C2C0_H_ */ diff --git a/sakura_core/view/CViewSelect.h b/sakura_core/view/CViewSelect.h index f1900c353e..077d3b01ba 100644 --- a/sakura_core/view/CViewSelect.h +++ b/sakura_core/view/CViewSelect.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CVIEWSELECT_08C2314F_EB28_43C0_9719_56EB5A6A95C5_H_ +#define SAKURA_CVIEWSELECT_08C2314F_EB28_43C0_9719_56EB5A6A95C5_H_ #pragma once class CEditView; @@ -186,3 +188,4 @@ m_sSelectOldについて 現在の選択範囲をOldへコピーした上で新しい選択範囲をSelectに設定して DrawSelectArea()を呼びだすことで新しい範囲が描かれる. */ +#endif /* SAKURA_CVIEWSELECT_08C2314F_EB28_43C0_9719_56EB5A6A95C5_H_ */ diff --git a/sakura_core/view/DispPos.h b/sakura_core/view/DispPos.h index 9c51f1ca99..e897d79811 100644 --- a/sakura_core/view/DispPos.h +++ b/sakura_core/view/DispPos.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_DISPPOS_137BC8BB_8876_4183_9777_BE5A451434E1_H_ +#define SAKURA_DISPPOS_137BC8BB_8876_4183_9777_BE5A451434E1_H_ #pragma once #include "doc/CEditDoc.h" @@ -113,3 +115,4 @@ struct DispPos{ //キャッシュ############ const CLayout* m_pcLayoutRef; }; +#endif /* SAKURA_DISPPOS_137BC8BB_8876_4183_9777_BE5A451434E1_H_ */ diff --git a/sakura_core/view/colors/CColorStrategy.h b/sakura_core/view/colors/CColorStrategy.h index 5e838f2100..accfcedab2 100644 --- a/sakura_core/view/colors/CColorStrategy.h +++ b/sakura_core/view/colors/CColorStrategy.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCOLORSTRATEGY_96B6EB56_C928_4B89_8841_166AAAB8D760_H_ +#define SAKURA_CCOLORSTRATEGY_96B6EB56_C928_4B89_8841_166AAAB8D760_H_ #pragma once // 要先行定義 @@ -240,3 +242,4 @@ class CColorStrategyPool : public TSingleton{ bool m_bSkipBeforeLayoutGeneral; bool m_bSkipBeforeLayoutFound; }; +#endif /* SAKURA_CCOLORSTRATEGY_96B6EB56_C928_4B89_8841_166AAAB8D760_H_ */ diff --git a/sakura_core/view/colors/CColor_Comment.h b/sakura_core/view/colors/CColor_Comment.h index 615367402c..8aae147335 100644 --- a/sakura_core/view/colors/CColor_Comment.h +++ b/sakura_core/view/colors/CColor_Comment.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCOLOR_COMMENT_C056FE79_A77B_4451_AA5E_1FA5517C0EC1_H_ +#define SAKURA_CCOLOR_COMMENT_C056FE79_A77B_4451_AA5E_1FA5517C0EC1_H_ #pragma once #include "view/colors/CColorStrategy.h" @@ -78,3 +80,4 @@ class CColor_BlockComment final : public CColorStrategy{ const CBlockComment* m_pcBlockComment; int m_nCOMMENTEND; }; +#endif /* SAKURA_CCOLOR_COMMENT_C056FE79_A77B_4451_AA5E_1FA5517C0EC1_H_ */ diff --git a/sakura_core/view/colors/CColor_Found.h b/sakura_core/view/colors/CColor_Found.h index aed8d49213..091bf5158a 100644 --- a/sakura_core/view/colors/CColor_Found.h +++ b/sakura_core/view/colors/CColor_Found.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCOLOR_FOUND_8094BA64_0ACB_4776_A190_D68729D3FABC_H_ +#define SAKURA_CCOLOR_FOUND_8094BA64_0ACB_4776_A190_D68729D3FABC_H_ #pragma once #include "view/colors/CColorStrategy.h" @@ -66,3 +68,4 @@ class CColor_Found final : public CColorStrategy{ EColorIndexType highlightColors[ COLORIDX_SEARCHTAIL - COLORIDX_SEARCH + 1 ]; ///< チェックが付いている検索文字列色の配列。 unsigned validColorNum; ///< highlightColorsの何番目の要素までが有効か。 }; +#endif /* SAKURA_CCOLOR_FOUND_8094BA64_0ACB_4776_A190_D68729D3FABC_H_ */ diff --git a/sakura_core/view/colors/CColor_Heredoc.h b/sakura_core/view/colors/CColor_Heredoc.h index 045802785e..020f4d3284 100644 --- a/sakura_core/view/colors/CColor_Heredoc.h +++ b/sakura_core/view/colors/CColor_Heredoc.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCOLOR_HEREDOC_88B5007B_1615_411C_AED2_73E7AF92C146_H_ +#define SAKURA_CCOLOR_HEREDOC_88B5007B_1615_411C_AED2_73E7AF92C146_H_ #pragma once #include "view/colors/CColorStrategy.h" @@ -41,3 +43,4 @@ class CColor_Heredoc final : public CColorStrategy{ const wchar_t* m_pszId; int m_nCOMMENTEND; }; +#endif /* SAKURA_CCOLOR_HEREDOC_88B5007B_1615_411C_AED2_73E7AF92C146_H_ */ diff --git a/sakura_core/view/colors/CColor_KeywordSet.h b/sakura_core/view/colors/CColor_KeywordSet.h index 0ea9c81718..e2325922cd 100644 --- a/sakura_core/view/colors/CColor_KeywordSet.h +++ b/sakura_core/view/colors/CColor_KeywordSet.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCOLOR_KEYWORDSET_AAB04E86_EB95_447C_B07B_AB44395B2F7F_H_ +#define SAKURA_CCOLOR_KEYWORDSET_AAB04E86_EB95_447C_B07B_AB44395B2F7F_H_ #pragma once #include "view/colors/CColorStrategy.h" @@ -38,3 +40,4 @@ class CColor_KeywordSet final : public CColorStrategy{ int m_nKeywordIndex; int m_nCOMMENTEND; }; +#endif /* SAKURA_CCOLOR_KEYWORDSET_AAB04E86_EB95_447C_B07B_AB44395B2F7F_H_ */ diff --git a/sakura_core/view/colors/CColor_Numeric.h b/sakura_core/view/colors/CColor_Numeric.h index ec14b33e72..e3d800eeeb 100644 --- a/sakura_core/view/colors/CColor_Numeric.h +++ b/sakura_core/view/colors/CColor_Numeric.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCOLOR_NUMERIC_CC286AA9_0D00_4D7A_AF1A_F91018612171_H_ +#define SAKURA_CCOLOR_NUMERIC_CC286AA9_0D00_4D7A_AF1A_F91018612171_H_ #pragma once #include "view/colors/CColorStrategy.h" @@ -37,3 +39,4 @@ class CColor_Numeric final : public CColorStrategy{ private: int m_nCOMMENTEND; }; +#endif /* SAKURA_CCOLOR_NUMERIC_CC286AA9_0D00_4D7A_AF1A_F91018612171_H_ */ diff --git a/sakura_core/view/colors/CColor_Quote.h b/sakura_core/view/colors/CColor_Quote.h index cc437bed0a..b2b0f014ba 100644 --- a/sakura_core/view/colors/CColor_Quote.h +++ b/sakura_core/view/colors/CColor_Quote.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCOLOR_QUOTE_DA1E69BE_19D1_4B16_BCF0_1516B00565D1_H_ +#define SAKURA_CCOLOR_QUOTE_DA1E69BE_19D1_4B16_BCF0_1516B00565D1_H_ #pragma once #include "view/colors/CColorStrategy.h" @@ -71,3 +73,4 @@ class CColor_DoubleQuote final : public CColor_Quote{ CColor_DoubleQuote() : CColor_Quote(L'"') { } EColorIndexType GetStrategyColor() const override{ return COLORIDX_WSTRING; } }; +#endif /* SAKURA_CCOLOR_QUOTE_DA1E69BE_19D1_4B16_BCF0_1516B00565D1_H_ */ diff --git a/sakura_core/view/colors/CColor_RegexKeyword.h b/sakura_core/view/colors/CColor_RegexKeyword.h index e42cb0152f..2974e9f1ad 100644 --- a/sakura_core/view/colors/CColor_RegexKeyword.h +++ b/sakura_core/view/colors/CColor_RegexKeyword.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCOLOR_REGEXKEYWORD_F30D99F7_D157_46EF_A0BD_3520A477C761_H_ +#define SAKURA_CCOLOR_REGEXKEYWORD_F30D99F7_D157_46EF_A0BD_3520A477C761_H_ #pragma once #include "view/colors/CColorStrategy.h" @@ -39,3 +41,4 @@ class CColor_RegexKeyword final : public CColorStrategy{ int m_nCOMMENTEND; EColorIndexType m_nCOMMENTMODE; }; +#endif /* SAKURA_CCOLOR_REGEXKEYWORD_F30D99F7_D157_46EF_A0BD_3520A477C761_H_ */ diff --git a/sakura_core/view/colors/CColor_Url.h b/sakura_core/view/colors/CColor_Url.h index 7518c8ef8d..daee74125a 100644 --- a/sakura_core/view/colors/CColor_Url.h +++ b/sakura_core/view/colors/CColor_Url.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CCOLOR_URL_E9C938AC_E5C6_468E_925E_A7787635AB82_H_ +#define SAKURA_CCOLOR_URL_E9C938AC_E5C6_468E_925E_A7787635AB82_H_ #pragma once #include "view/colors/CColorStrategy.h" @@ -37,3 +39,4 @@ class CColor_Url final : public CColorStrategy{ private: int m_nCOMMENTEND; }; +#endif /* SAKURA_CCOLOR_URL_E9C938AC_E5C6_468E_925E_A7787635AB82_H_ */ diff --git a/sakura_core/view/colors/EColorIndexType.h b/sakura_core/view/colors/EColorIndexType.h index f2b103a2a7..ec3f9ea147 100644 --- a/sakura_core/view/colors/EColorIndexType.h +++ b/sakura_core/view/colors/EColorIndexType.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_ECOLORINDEXTYPE_A3927D3F_B421_443A_9F59_6BF51074FF24_H_ +#define SAKURA_ECOLORINDEXTYPE_A3927D3F_B421_443A_9F59_6BF51074FF24_H_ #pragma once // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // @@ -112,3 +114,4 @@ enum EColorIndexType { COLORIDX_DEFAULT = COLORIDX_TEXT, //!< デフォルト COLORIDX_SEARCHTAIL = COLORIDX_SEARCH5, }; +#endif /* SAKURA_ECOLORINDEXTYPE_A3927D3F_B421_443A_9F59_6BF51074FF24_H_ */ diff --git a/sakura_core/view/figures/CFigureManager.h b/sakura_core/view/figures/CFigureManager.h index 4daad8d66f..f7eb51ea37 100644 --- a/sakura_core/view/figures/CFigureManager.h +++ b/sakura_core/view/figures/CFigureManager.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CFIGUREMANAGER_34C07527_BAEA_4B91_A3E0_7FCAFCFBAF0C_H_ +#define SAKURA_CFIGUREMANAGER_34C07527_BAEA_4B91_A3E0_7FCAFCFBAF0C_H_ #pragma once #include @@ -46,3 +48,4 @@ class CFigureManager : public TSingleton{ std::vector m_vFigures; std::vector m_vFiguresDisp; //!< 色分け表示対象 }; +#endif /* SAKURA_CFIGUREMANAGER_34C07527_BAEA_4B91_A3E0_7FCAFCFBAF0C_H_ */ diff --git a/sakura_core/view/figures/CFigureStrategy.h b/sakura_core/view/figures/CFigureStrategy.h index 7897050be3..a23a2896e5 100644 --- a/sakura_core/view/figures/CFigureStrategy.h +++ b/sakura_core/view/figures/CFigureStrategy.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CFIGURESTRATEGY_5D122522_91F9_4FC5_A31A_E78FB5DB0D0F_H_ +#define SAKURA_CFIGURESTRATEGY_5D122522_91F9_4FC5_A31A_E78FB5DB0D0F_H_ #pragma once #include @@ -100,3 +102,4 @@ class CFigureSpace : public CFigure{ protected: EColorIndexType m_nDispColorIndex; }; +#endif /* SAKURA_CFIGURESTRATEGY_5D122522_91F9_4FC5_A31A_E78FB5DB0D0F_H_ */ diff --git a/sakura_core/view/figures/CFigure_Comma.h b/sakura_core/view/figures/CFigure_Comma.h index 0a50a7dd5f..9bf6cb46c4 100644 --- a/sakura_core/view/figures/CFigure_Comma.h +++ b/sakura_core/view/figures/CFigure_Comma.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CFIGURE_COMMA_DE8237CD_24C0_4A21_8599_5BE8B04BF7E6_H_ +#define SAKURA_CFIGURE_COMMA_DE8237CD_24C0_4A21_8599_5BE8B04BF7E6_H_ #pragma once #include "view/figures/CFigureStrategy.h" @@ -40,3 +42,4 @@ class CFigure_Comma : public CFigureSpace{ void DispSpace(CGraphics& gr, DispPos* pDispPos, CEditView* pcView, bool bTrans) const; EColorIndexType GetColorIdx(void) const{ return COLORIDX_TAB; } }; +#endif /* SAKURA_CFIGURE_COMMA_DE8237CD_24C0_4A21_8599_5BE8B04BF7E6_H_ */ diff --git a/sakura_core/view/figures/CFigure_CtrlCode.h b/sakura_core/view/figures/CFigure_CtrlCode.h index add839592f..49f41e8d93 100644 --- a/sakura_core/view/figures/CFigure_CtrlCode.h +++ b/sakura_core/view/figures/CFigure_CtrlCode.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CFIGURE_CTRLCODE_53EB409B_17F7_4B7F_9AD2_A00C29CDC792_H_ +#define SAKURA_CFIGURE_CTRLCODE_53EB409B_17F7_4B7F_9AD2_A00C29CDC792_H_ #pragma once #include "view/figures/CFigureStrategy.h" @@ -64,3 +66,4 @@ class CFigure_ZenBinary : public CFigure_CtrlCode{ virtual wchar_t GetAlternateChar() const{ return L'〓'; } EColorIndexType GetColorIdx(void) const{ return COLORIDX_CTRLCODE; } }; +#endif /* SAKURA_CFIGURE_CTRLCODE_53EB409B_17F7_4B7F_9AD2_A00C29CDC792_H_ */ diff --git a/sakura_core/view/figures/CFigure_Eol.h b/sakura_core/view/figures/CFigure_Eol.h index 03ba0e02bd..8f8ac571e4 100644 --- a/sakura_core/view/figures/CFigure_Eol.h +++ b/sakura_core/view/figures/CFigure_Eol.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CFIGURE_EOL_C51A4502_29AE_4D38_8056_5B0CFCC3686B_H_ +#define SAKURA_CFIGURE_EOL_C51A4502_29AE_4D38_8056_5B0CFCC3686B_H_ #pragma once #include "view/figures/CFigureStrategy.h" @@ -41,3 +43,4 @@ class CFigure_Eol : public CFigureSpace{ void DispSpace(CGraphics& gr, DispPos* pDispPos, CEditView* pcView, bool bTrans) const {}; EColorIndexType GetColorIdx(void) const{ return COLORIDX_EOL; } }; +#endif /* SAKURA_CFIGURE_EOL_C51A4502_29AE_4D38_8056_5B0CFCC3686B_H_ */ diff --git a/sakura_core/view/figures/CFigure_HanSpace.h b/sakura_core/view/figures/CFigure_HanSpace.h index a5b7e33d17..396639a9c9 100644 --- a/sakura_core/view/figures/CFigure_HanSpace.h +++ b/sakura_core/view/figures/CFigure_HanSpace.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CFIGURE_HANSPACE_38751BA0_6F58_4929_A24D_1937F2FB3E6A_H_ +#define SAKURA_CFIGURE_HANSPACE_38751BA0_6F58_4929_A24D_1937F2FB3E6A_H_ #pragma once #include "view/figures/CFigureStrategy.h" @@ -36,3 +38,4 @@ class CFigure_HanSpace : public CFigureSpace{ void DispSpace(CGraphics& gr, DispPos* pDispPos, CEditView* pcView, bool trans) const; EColorIndexType GetColorIdx(void) const{ return COLORIDX_SPACE; } }; +#endif /* SAKURA_CFIGURE_HANSPACE_38751BA0_6F58_4929_A24D_1937F2FB3E6A_H_ */ diff --git a/sakura_core/view/figures/CFigure_Tab.h b/sakura_core/view/figures/CFigure_Tab.h index 8bc73c4f6d..24520036f4 100644 --- a/sakura_core/view/figures/CFigure_Tab.h +++ b/sakura_core/view/figures/CFigure_Tab.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CFIGURE_TAB_4401678E_D165_4130_A973_CC40038CDE8E_H_ +#define SAKURA_CFIGURE_TAB_4401678E_D165_4130_A973_CC40038CDE8E_H_ #pragma once #include "view/figures/CFigureStrategy.h" @@ -40,3 +42,4 @@ class CFigure_Tab : public CFigureSpace{ void DispSpace(CGraphics& gr, DispPos* pDispPos, CEditView* pcView, bool bTrans) const; EColorIndexType GetColorIdx(void) const{ return COLORIDX_TAB; } }; +#endif /* SAKURA_CFIGURE_TAB_4401678E_D165_4130_A973_CC40038CDE8E_H_ */ diff --git a/sakura_core/view/figures/CFigure_ZenSpace.h b/sakura_core/view/figures/CFigure_ZenSpace.h index a69623a8ee..89c45d0388 100644 --- a/sakura_core/view/figures/CFigure_ZenSpace.h +++ b/sakura_core/view/figures/CFigure_ZenSpace.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CFIGURE_ZENSPACE_6176BBA4_68C9_41A1_B944_7F6EE0E5E4A4_H_ +#define SAKURA_CFIGURE_ZENSPACE_6176BBA4_68C9_41A1_B944_7F6EE0E5E4A4_H_ #pragma once #include "view/figures/CFigureStrategy.h" @@ -36,3 +38,4 @@ class CFigure_ZenSpace : public CFigureSpace{ void DispSpace(CGraphics& gr, DispPos* pDispPos, CEditView* pcView, bool bTrans) const; EColorIndexType GetColorIdx(void) const{ return COLORIDX_ZENSPACE; } }; +#endif /* SAKURA_CFIGURE_ZENSPACE_6176BBA4_68C9_41A1_B944_7F6EE0E5E4A4_H_ */ diff --git a/sakura_core/window/CAutoScrollWnd.h b/sakura_core/window/CAutoScrollWnd.h index 93eafba891..b8cedd26b8 100644 --- a/sakura_core/window/CAutoScrollWnd.h +++ b/sakura_core/window/CAutoScrollWnd.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CAUTOSCROLLWND_F588E196_7D77_4DFA_AAB0_A2D95FFB8849_H_ +#define SAKURA_CAUTOSCROLLWND_F588E196_7D77_4DFA_AAB0_A2D95FFB8849_H_ #pragma once #include "CWnd.h" @@ -48,3 +50,4 @@ class CAutoScrollWnd final: public CWnd LRESULT OnMButtonDown(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) override; LRESULT OnPaint(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) override; }; +#endif /* SAKURA_CAUTOSCROLLWND_F588E196_7D77_4DFA_AAB0_A2D95FFB8849_H_ */ diff --git a/sakura_core/window/CEditWnd.h b/sakura_core/window/CEditWnd.h index d6e8aa9d68..36ab1dbce2 100644 --- a/sakura_core/window/CEditWnd.h +++ b/sakura_core/window/CEditWnd.h @@ -39,6 +39,8 @@ distribution. */ +#ifndef SAKURA_CEDITWND_6C771A35_3CC8_4932_BF15_823C40487A9F_H_ +#define SAKURA_CEDITWND_6C771A35_3CC8_4932_BF15_823C40487A9F_H_ #pragma once #include // HDROP @@ -418,3 +420,4 @@ class CEditWnd public: ESelectCountMode m_nSelectCountMode; // 選択文字カウント方法 }; +#endif /* SAKURA_CEDITWND_6C771A35_3CC8_4932_BF15_823C40487A9F_H_ */ diff --git a/sakura_core/window/CMainStatusBar.h b/sakura_core/window/CMainStatusBar.h index 143b144f43..0fa24d0c07 100644 --- a/sakura_core/window/CMainStatusBar.h +++ b/sakura_core/window/CMainStatusBar.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CMAINSTATUSBAR_E2FC11D7_4513_4F96_BDCC_E9B278ED0718_H_ +#define SAKURA_CMAINSTATUSBAR_E2FC11D7_4513_4F96_BDCC_E9B278ED0718_H_ #pragma once #include "doc/CDocListener.h" @@ -58,3 +60,4 @@ class CMainStatusBar : public CDocListenerEx{ HWND m_hwndStatusBar; HWND m_hwndProgressBar; }; +#endif /* SAKURA_CMAINSTATUSBAR_E2FC11D7_4513_4F96_BDCC_E9B278ED0718_H_ */ diff --git a/sakura_core/window/CMainToolBar.h b/sakura_core/window/CMainToolBar.h index 6aaece06ac..b27ff43a1b 100644 --- a/sakura_core/window/CMainToolBar.h +++ b/sakura_core/window/CMainToolBar.h @@ -22,6 +22,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#ifndef SAKURA_CMAINTOOLBAR_FEA7E388_DFEC_4E15_94CC_90A7E779797B_H_ +#define SAKURA_CMAINTOOLBAR_FEA7E388_DFEC_4E15_94CC_90A7E779797B_H_ #pragma once #include "recent/CRecent.h" @@ -78,3 +80,4 @@ class CMainToolBar{ CRecentSearch m_cRecentSearch; CImageListMgr* m_pcIcons; }; +#endif /* SAKURA_CMAINTOOLBAR_FEA7E388_DFEC_4E15_94CC_90A7E779797B_H_ */ diff --git a/sakura_core/window/CSplitBoxWnd.h b/sakura_core/window/CSplitBoxWnd.h index 08c9fac945..152dfdff49 100644 --- a/sakura_core/window/CSplitBoxWnd.h +++ b/sakura_core/window/CSplitBoxWnd.h @@ -11,6 +11,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CSPLITBOXWND_D85ABC4D_AF8F_4B42_B1E5_BA066925314E_H_ +#define SAKURA_CSPLITBOXWND_D85ABC4D_AF8F_4B42_B1E5_BA066925314E_H_ #pragma once class CSplitBoxWnd; @@ -52,3 +54,4 @@ class CSplitBoxWnd final : public CWnd LRESULT OnLButtonUp(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) override;//WM_LBUTTONUP LRESULT OnLButtonDblClk(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) override;//WM_LBUTTONDBLCLK }; +#endif /* SAKURA_CSPLITBOXWND_D85ABC4D_AF8F_4B42_B1E5_BA066925314E_H_ */ diff --git a/sakura_core/window/CSplitterWnd.h b/sakura_core/window/CSplitterWnd.h index edccc11896..c5a6457d38 100644 --- a/sakura_core/window/CSplitterWnd.h +++ b/sakura_core/window/CSplitterWnd.h @@ -11,6 +11,8 @@ This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CSPLITTERWND_8F27B39C_B96B_4964_ACD8_E157A146F892_H_ +#define SAKURA_CSPLITTERWND_8F27B39C_B96B_4964_ACD8_E157A146F892_H_ #pragma once #include "CWnd.h" @@ -89,3 +91,4 @@ class CSplitterWnd final : public CWnd int HitTestSplitter(int xPos, int yPos); /* 分割バーへのヒットテスト */ void DrawSplitter(int xPos, int yPos, int bEraseOld); /* 分割トラッカーの表示 */ }; +#endif /* SAKURA_CSPLITTERWND_8F27B39C_B96B_4964_ACD8_E157A146F892_H_ */ diff --git a/sakura_core/window/CTabWnd.h b/sakura_core/window/CTabWnd.h index a67dbae76d..1384d879de 100644 --- a/sakura_core/window/CTabWnd.h +++ b/sakura_core/window/CTabWnd.h @@ -34,6 +34,8 @@ distribution. */ +#ifndef SAKURA_CTABWND_E95D57BD_51E6_467A_9F6D_2C68BF122449_H_ +#define SAKURA_CTABWND_E95D57BD_51E6_467A_9F6D_2C68BF122449_H_ #pragma once #include "CWnd.h" @@ -204,3 +206,4 @@ class CTabWnd final : public CWnd DISALLOW_COPY_AND_ASSIGN(CTabWnd); }; +#endif /* SAKURA_CTABWND_E95D57BD_51E6_467A_9F6D_2C68BF122449_H_ */ diff --git a/sakura_core/window/CTipWnd.h b/sakura_core/window/CTipWnd.h index eec5eafec8..cd6e047328 100644 --- a/sakura_core/window/CTipWnd.h +++ b/sakura_core/window/CTipWnd.h @@ -14,6 +14,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CTIPWND_E3DB6CF2_888C_42F5_953E_D923221F0B16_H_ +#define SAKURA_CTIPWND_E3DB6CF2_888C_42F5_953E_D923221F0B16_H_ #pragma once class CTipWnd; @@ -73,3 +75,4 @@ class CTipWnd final : public CWnd /* 仮想関数 メッセージ処理 詳しくは実装を参照 */ LRESULT OnPaint(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) override;/* 描画処理 */ }; +#endif /* SAKURA_CTIPWND_E3DB6CF2_888C_42F5_953E_D923221F0B16_H_ */ diff --git a/sakura_core/window/CWnd.h b/sakura_core/window/CWnd.h index c52a2a386f..b0650683ce 100644 --- a/sakura_core/window/CWnd.h +++ b/sakura_core/window/CWnd.h @@ -14,6 +14,8 @@ Please contact the copyright holder to use this code for other purpose. */ +#ifndef SAKURA_CWND_86C8E4DA_7921_4D79_A481_E3AB0557D767_H_ +#define SAKURA_CWND_86C8E4DA_7921_4D79_A481_E3AB0557D767_H_ #pragma once #include @@ -129,3 +131,4 @@ class CWnd WCHAR m_szClassInheritances[1024]; #endif }; +#endif /* SAKURA_CWND_86C8E4DA_7921_4D79_A481_E3AB0557D767_H_ */ From 5e8d0865972d8e437e18c50ccf47659f9743b258 Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Fri, 21 Aug 2020 13:52:15 +0900 Subject: [PATCH 0060/1024] MinGW: Fix dependencies of the precompiled header Related #1378 `StdAfx.d` was created when creating `StdAfx.h.gch`, but it was overwritten when creating `StdAfx.o`. Use `StdAfx.h.d` for `StdAfx.h.gch` to avoid conflict. --- sakura_core/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sakura_core/Makefile b/sakura_core/Makefile index 53c059d704..7b6c4bfb63 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -432,7 +432,7 @@ _os/CClipboard.o \ _os/CDropTarget.o \ sakura_rc.o \ -DEPS= $(OBJS:%.o=%.d) +DEPS= $(OBJS:%.o=%.d) StdAfx.h.d GENERATED_FILES= \ Funccode_define.h \ @@ -457,7 +457,7 @@ githash.h: cmd /c ..\sakura\githash.bat ../sakura_core StdAfx.h.gch: githash.h Funccode_enum.h - $(CXX) $(CXXFLAGS) -c StdAfx.h + $(CXX) $(CXXFLAGS) -c StdAfx.h -o $@ .cpp.o: $(CXX) $(CXXFLAGS) -o $@ -c $< From 6a7c8cde46ff8a3076fa22aeca257fa2195dd541 Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Mon, 24 Aug 2020 15:12:05 +0900 Subject: [PATCH 0061/1024] MinGW: Fix SEGV Running the following command in ./sakura_core causes SEGV: ``` sakura.exe StdAfx.h -MTYPE=js -M="Down();Up();Right();Left();ShowFunckey();ShowMiniMap();ShowTab();SelectAll();GoFileEnd();GoFileTop();ShowFunckey();ShowMiniMap();ShowTab();ExitAll();" ``` This fixes it. Related: https://github.com/sakura-editor/sakura/pull/1363#discussion_r475213207, #601, #1372 --- sakura_core/view/CEditView_Paint_Bracket.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/view/CEditView_Paint_Bracket.cpp b/sakura_core/view/CEditView_Paint_Bracket.cpp index 3faeff1cf2..02d3336ff1 100644 --- a/sakura_core/view/CEditView_Paint_Bracket.cpp +++ b/sakura_core/view/CEditView_Paint_Bracket.cpp @@ -321,7 +321,7 @@ bool CEditView::SearchBracket( CLogicPoint ptPos; m_pcEditDoc->m_cLayoutMgr.LayoutToLogic( ptLayout, &ptPos ); - const wchar_t *cline = m_pcEditDoc->m_cDocLineMgr.GetLine(ptPos.GetY2())->GetDocLineStrWithEOL(&len); + const wchar_t *cline = CDocLine::GetDocLineStrWithEOL_Safe(m_pcEditDoc->m_cDocLineMgr.GetLine(ptPos.GetY2()), &len); // Jun. 19, 2000 genta if( cline == NULL ) // 最後の行に本文がない場合 From b5e8e41510f8124c8cff4093fb4b7723f6f5a414 Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Wed, 26 Aug 2020 21:58:23 +0900 Subject: [PATCH 0062/1024] MinGW: Refactor Makefile * Use `$(wildcard)` to list *.cpp files and stop using MakefileMake. * Support shadow builds. E.g. ``` $ cd sakura_core $ mkdir _build $ cd _build $ mingw32-make -f ../Makefile SRCDIR=.. ``` `SRCDIR` should point the source directory. * Use unix-like commands if SHELL is a unix-like shell. This avoids the "too long commandline" error. --- sakura_core/Makefile | 436 +++++-------------------------------------- 1 file changed, 48 insertions(+), 388 deletions(-) diff --git a/sakura_core/Makefile b/sakura_core/Makefile index 7b6c4bfb63..80bd2c4615 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -1,5 +1,29 @@ # Makefile for MinGW32/MinGW-W64 +# Relative path of "sakura_core" directory from the current directory. +# If you build in a shadow directory, you should specify this. +# E.g. +# $ cd sakura_code +# $ mkdir _build +# $ cd _build +# $ mingw32-make -f ../Makefile SRCDIR=.. +SRCDIR = . + +# If SRCDIR is different from the current directory, set it to VPATH. +ifneq ($(SRCDIR),.) +VPATH = $(SRCDIR) +endif + +ifeq ($(SHELL),sh.exe) +# If cmd.exe is used as a shell. +MKDIR = md +RM = cmd /c $(SRCDIR)\..\sakura\mingw32-del.bat +else +# If unix-like shell is used. +MKDIR = mkdir -p +RM = rm -f +endif + ifndef PREFIX PREFIX= RCPREFIX= @@ -20,7 +44,6 @@ endif CC= $(PREFIX)gcc CXX= $(PREFIX)g++ RC= $(RCPREFIX)windres -RM= cmd /c ..\sakura\mingw32-del.bat DEFINES= \ -DWIN32 \ @@ -33,6 +56,7 @@ CFLAGS= \ -fexec-charset=cp932 \ -MMD \ -I. \ + -I$(SRCDIR) \ $(DEFINES) $(MYCFLAGS) CXXFLAGS= $(CFLAGS) \ -std=c++17 \ @@ -57,389 +81,22 @@ LIBS= \ exe= sakura.exe -# ls *.cpp */*.cpp */*/*.cpp | sed -E -e "s/([[:alnum:]_]+)\.[[:alnum:]]+/\1.o \\\\/" -OBJS= \ -CAutoReloadAgent.o \ -CAutoSaveAgent.o \ -CBackupAgent.o \ -CCodeChecker.o \ -CDataProfile.o \ -CDicMgr.o \ -CEditApp.o \ -CEol.o \ -CFileExt.o \ -CGrepAgent.o \ -CHokanMgr.o \ -CKeyWordSetMgr.o \ -CLoadAgent.o \ -CMarkMgr.o \ -COpe.o \ -COpeBlk.o \ -COpeBuf.o \ -CProfile.o \ -CPropertyManager.o \ -CReadManager.o \ -CRegexKeyword.o \ -CSaveAgent.o \ -CSearchAgent.o \ -CSelectLang.o \ -CSortedTagJumpList.o \ -CWriteManager.o \ -EditInfo.o \ -GrepInfo.o \ -StdAfx.o \ -apiwrap/StdApi.o \ -apiwrap/StdControl.o \ -basis/CLaxInteger.o \ -basis/CMyPoint.o \ -basis/CMyRect.o \ -basis/CMySize.o \ -basis/CMyString.o \ -basis/CStrictInteger.o \ -basis/CStrictPoint.o \ -basis/CStrictRange.o \ -basis/CStrictRect.o \ -basis/SakuraBasis.o \ -charset/CCesu8.o \ -charset/CCodeBase.o \ -charset/CCodeFactory.o \ -charset/CCodeMediator.o \ -charset/CCodePage.o \ -charset/CESI.o \ -charset/CEuc.o \ -charset/charcode.o \ -charset/charset.o \ -charset/CJis.o \ -charset/CLatin1.o \ -charset/codechecker.o \ -charset/codeutil.o \ -charset/CShiftJis.o \ -charset/CUnicode.o \ -charset/CUnicodeBe.o \ -charset/CUtf7.o \ -charset/CUtf8.o \ -charset/icu4c/CharsetDetector.o \ -cmd/CViewCommander.o \ -cmd/CViewCommander_Bookmark.o \ -cmd/CViewCommander_Clipboard.o \ -cmd/CViewCommander_Convert.o \ -cmd/CViewCommander_Cursor.o \ -cmd/CViewCommander_CustMenu.o \ -cmd/CViewCommander_Diff.o \ -cmd/CViewCommander_Edit.o \ -cmd/CViewCommander_Edit_advanced.o \ -cmd/CViewCommander_Edit_word_line.o \ -cmd/CViewCommander_File.o \ -cmd/CViewCommander_Grep.o \ -cmd/CViewCommander_Insert.o \ -cmd/CViewCommander_Macro.o \ -cmd/CViewCommander_ModeChange.o \ -cmd/CViewCommander_Outline.o \ -cmd/CViewCommander_Search.o \ -cmd/CViewCommander_Select.o \ -cmd/CViewCommander_Settings.o \ -cmd/CViewCommander_Support.o \ -cmd/CViewCommander_TagJump.o \ -cmd/CViewCommander_Window.o \ -config/build_config.o \ -convert/CConvert.o \ -convert/CConvert_HaneisuToZeneisu.o \ -convert/CConvert_HankataToZenhira.o \ -convert/CConvert_HankataToZenkata.o \ -convert/CConvert_SpaceToTab.o \ -convert/CConvert_TabToSpace.o \ -convert/CConvert_ToHankaku.o \ -convert/CConvert_ToLower.o \ -convert/CConvert_ToUpper.o \ -convert/CConvert_ToZenhira.o \ -convert/CConvert_ToZenkata.o \ -convert/CConvert_Trim.o \ -convert/CConvert_ZeneisuToHaneisu.o \ -convert/CConvert_ZenkataToHankata.o \ -convert/CDecode_Base64Decode.o \ -convert/CDecode_UuDecode.o \ -convert/convert_util.o \ -convert/convert_util2.o \ -debug/CRunningTimer.o \ -debug/Debug1.o \ -debug/Debug2.o \ -debug/Debug3.o \ -dlg/CDialog.o \ -dlg/CDlgAbout.o \ -dlg/CDlgCancel.o \ -dlg/CDlgCompare.o \ -dlg/CDlgCtrlCode.o \ -dlg/CDlgDiff.o \ -dlg/CDlgExec.o \ -dlg/CDlgFavorite.o \ -dlg/CDlgFileUpdateQuery.o \ -dlg/CDlgFind.o \ -dlg/CDlgGrep.o \ -dlg/CDlgGrepReplace.o \ -dlg/CDlgInput1.o \ -dlg/CDlgJump.o \ -dlg/CDlgOpenFile.o \ -dlg/CDlgOpenFile_CommonFileDialog.o \ -dlg/CDlgOpenFile_CommonItemDialog.o \ -dlg/CDlgPluginOption.o \ -dlg/CDlgPrintSetting.o \ -dlg/CDlgProfileMgr.o \ -dlg/CDlgProperty.o \ -dlg/CDlgReplace.o \ -dlg/CDlgSetCharSet.o \ -dlg/CDlgTagJumpList.o \ -dlg/CDlgTagsMake.o \ -dlg/CDlgWindowList.o \ -dlg/CDlgWinSize.o \ -doc/CBlockComment.o \ -doc/CDocEditor.o \ -doc/CDocFile.o \ -doc/CDocFileOperation.o \ -doc/CDocListener.o \ -doc/CDocLocker.o \ -doc/CDocOutline.o \ -doc/CDocReader.o \ -doc/CDocType.o \ -doc/CDocTypeSetting.o \ -doc/CDocVisitor.o \ -doc/CEditDoc.o \ -doc/CLineComment.o \ -doc/layout/CLayout.o \ -doc/layout/CLayoutMgr.o \ -doc/layout/CLayoutMgr_DoLayout.o \ -doc/layout/CLayoutMgr_New.o \ -doc/layout/CLayoutMgr_New2.o \ -doc/layout/CTsvModeInfo.o \ -doc/logic/CDocLine.o \ -doc/logic/CDocLineMgr.o \ -docplus/CBookmarkManager.o \ -docplus/CDiffManager.o \ -docplus/CFuncListManager.o \ -docplus/CModifyManager.o \ -env/CAppNodeManager.o \ -env/CDocTypeManager.o \ -env/CFileNameManager.o \ -env/CFormatManager.o \ -env/CHelpManager.o \ -env/CommonSetting.o \ -env/CSakuraEnvironment.o \ -env/CSearchKeywordManager.o \ -env/CShareData.o \ -env/CShareData_IO.o \ -env/CTagJumpManager.o \ -env/DLLSHAREDATA.o \ -extmodule/CBregexp.o \ -extmodule/CBregexpDll2.o \ -extmodule/CDllHandler.o \ -extmodule/CHtmlHelp.o \ -extmodule/CIcu4cI18n.o \ -extmodule/CMigemo.o \ -extmodule/CUxTheme.o \ -func/CFuncKeyWnd.o \ -func/CFuncLookup.o \ -func/CKeyBind.o \ -func/Funccode.o \ -io/CBinaryStream.o \ -io/CFile.o \ -io/CFileLoad.o \ -io/CIoBridge.o \ -io/CStream.o \ -io/CTextStream.o \ -io/CZipFile.o \ -macro/CCookieManager.o \ -macro/CEditorIfObj.o \ -macro/CIfObj.o \ -macro/CKeyMacroMgr.o \ -macro/CMacro.o \ -macro/CMacroFactory.o \ -macro/CMacroManagerBase.o \ -macro/CPPA.o \ -macro/CPPAMacroMgr.o \ -macro/CSMacroMgr.o \ -macro/CWSH.o \ -macro/CWSHIfObj.o \ -macro/CWSHManager.o \ -mem/CMemory.o \ -mem/CNative.o \ -mem/CNativeA.o \ -mem/CNativeW.o \ -mem/CRecycledBuffer.o \ -mfclike/CMyWnd.o \ -outline/CDlgFileTree.o \ -outline/CDlgFuncList.o \ -outline/CFuncInfo.o \ -outline/CFuncInfoArr.o \ -parse/CWordParse.o \ -plugin/CDllPlugin.o \ -plugin/CJackManager.o \ -plugin/CPlugin.o \ -plugin/CPluginManager.o \ -plugin/CWSHPlugin.o \ -print/CPrint.o \ -print/CPrintPreview.o \ -prop/CPropComBackup.o \ -prop/CPropComCustmenu.o \ -prop/CPropComEdit.o \ -prop/CPropComFile.o \ -prop/CPropComFileName.o \ -prop/CPropComFormat.o \ -prop/CPropComGeneral.o \ -prop/CPropComGrep.o \ -prop/CPropComHelper.o \ -prop/CPropComKeybind.o \ -prop/CPropComKeyword.o \ -prop/CPropComMacro.o \ -prop/CPropComMainMenu.o \ -prop/CPropCommon.o \ -prop/CPropComPlugin.o \ -prop/CPropComStatusbar.o \ -prop/CPropComTab.o \ -prop/CPropComToolbar.o \ -prop/CPropComWin.o \ -recent/CMRUFile.o \ -recent/CMRUFolder.o \ -recent/CMruListener.o \ -recent/CRecent.o \ -recent/CRecentCmd.o \ -recent/CRecentCurDir.o \ -recent/CRecentEditNode.o \ -recent/CRecentExceptMru.o \ -recent/CRecentExcludeFile.o \ -recent/CRecentExcludeFolder.o \ -recent/CRecentFile.o \ -recent/CRecentFolder.o \ -recent/CRecentGrepFile.o \ -recent/CRecentGrepFolder.o \ -recent/CRecentImp.o \ -recent/CRecentReplace.o \ -recent/CRecentSearch.o \ -recent/CRecentTagjumpKeyword.o \ -typeprop/CDlgKeywordSelect.o \ -typeprop/CDlgSameColor.o \ -typeprop/CDlgTypeAscertain.o \ -typeprop/CDlgTypeList.o \ -typeprop/CImpExpManager.o \ -typeprop/CPropTypes.o \ -typeprop/CPropTypesColor.o \ -typeprop/CPropTypesKeyHelp.o \ -typeprop/CPropTypesRegex.o \ -typeprop/CPropTypesScreen.o \ -typeprop/CPropTypesSupport.o \ -typeprop/CPropTypesWindow.o \ -types/CType.o \ -types/CTypeSupport.o \ -types/CType_Asm.o \ -types/CType_Awk.o \ -types/CType_Basis.o \ -types/CType_Cobol.o \ -types/CType_CorbaIdl.o \ -types/CType_Cpp.o \ -types/CType_Dos.o \ -types/CType_Erlang.o \ -types/CType_Html.o \ -types/CType_Ini.o \ -types/CType_Java.o \ -types/CType_Others.o \ -types/CType_Pascal.o \ -types/CType_Perl.o \ -types/CType_Python.o \ -types/CType_Rich.o \ -types/CType_Sql.o \ -types/CType_Tex.o \ -types/CType_Text.o \ -types/CType_Vb.o \ -uiparts/CGraphics.o \ -uiparts/CImageListMgr.o \ -uiparts/CMenuDrawer.o \ -uiparts/CSoundSet.o \ -uiparts/CVisualProgress.o \ -uiparts/CWaitCursor.o \ -util/file.o \ -util/format.o \ -util/input.o \ -util/MessageBoxF.o \ -util/module.o \ -util/ole_convert.o \ -util/os.o \ -util/relation_tool.o \ -util/shell.o \ -util/string_ex.o \ -util/string_ex2.o \ -util/tchar_convert.o \ -util/tchar_printf.o \ -util/tchar_template.o \ -util/window.o \ -view/CCaret.o \ -view/CEditView.o \ -view/CEditView_Cmdgrep.o \ -view/CEditView_CmdHokan.o \ -view/CEditView_Cmdisrch.o \ -view/CEditView_Command.o \ -view/CEditView_Command_New.o \ -view/CEditView_Diff.o \ -view/CEditView_ExecCmd.o \ -view/CEditView_Ime.o \ -view/CEditView_Mouse.o \ -view/CEditView_Paint.o \ -view/CEditView_Paint_Bracket.o \ -view/CEditView_Scroll.o \ -view/CEditView_Search.o \ -view/CRuler.o \ -view/CTextArea.o \ -view/CTextDrawer.o \ -view/CTextMetrics.o \ -view/CViewCalc.o \ -view/CViewFont.o \ -view/CViewParser.o \ -view/CViewSelect.o \ -view/DispPos.o \ -view/colors/CColorStrategy.o \ -view/colors/CColor_Comment.o \ -view/colors/CColor_Found.o \ -view/colors/CColor_Heredoc.o \ -view/colors/CColor_KeywordSet.o \ -view/colors/CColor_Numeric.o \ -view/colors/CColor_Quote.o \ -view/colors/CColor_RegexKeyword.o \ -view/colors/CColor_Url.o \ -view/figures/CFigureManager.o \ -view/figures/CFigureStrategy.o \ -view/figures/CFigure_Comma.o \ -view/figures/CFigure_CtrlCode.o \ -view/figures/CFigure_Eol.o \ -view/figures/CFigure_HanSpace.o \ -view/figures/CFigure_Tab.o \ -view/figures/CFigure_ZenSpace.o \ -window/CAutoScrollWnd.o \ -window/CEditWnd.o \ -window/CMainStatusBar.o \ -window/CMainToolBar.o \ -window/CSplitBoxWnd.o \ -window/CSplitterWnd.o \ -window/CTabWnd.o \ -window/CTipWnd.o \ -window/CWnd.o \ -_main/CAppMode.o \ -_main/CCommandLine.o \ -_main/CControlProcess.o \ -_main/CControlTray.o \ -_main/CNormalProcess.o \ -_main/CProcess.o \ -_main/CProcessFactory.o \ -_main/global.o \ -_main/WinMain.o \ -_os/CClipboard.o \ -_os/CDropTarget.o \ -sakura_rc.o \ +SRCS = $(wildcard $(SRCDIR)/*.cpp) \ + $(wildcard $(SRCDIR)/*/*.cpp) \ + $(wildcard $(SRCDIR)/*/*/*.cpp) +OBJS = $(SRCS:$(SRCDIR)/%.cpp=%.o) sakura_rc.o +_DIRS = $(filter %/, $(wildcard $(SRCDIR)/*/)) \ + $(filter %/, $(wildcard $(SRCDIR)/*/*/)) +DIRS = $(_DIRS:$(SRCDIR)/%/=%) DEPS= $(OBJS:%.o=%.d) StdAfx.h.d GENERATED_FILES= \ -Funccode_define.h \ -Funccode_enum.h \ -githash.h \ + Funccode_define.h \ + Funccode_enum.h \ + githash.h \ -HEADERMAKETOOLDIR= ../HeaderMake +HEADERMAKETOOLDIR= $(SRCDIR)/../HeaderMake HEADERMAKE= $(HEADERMAKETOOLDIR)/HeaderMake.exe all: $(exe) @@ -447,17 +104,20 @@ all: $(exe) $(exe): $(OBJS) $(CXX) -o $@ $(OBJS) $(LIBS) -Funccode_define.h: $(HEADERMAKE) Funccode_x.hsrc - $(HEADERMAKE) -in=../sakura_core/Funccode_x.hsrc -out=../sakura_core/Funccode_define.h -mode=define +Funccode_define.h: Funccode_x.hsrc $(HEADERMAKE) + $(HEADERMAKE) -in=$< -out=$@ -mode=define -Funccode_enum.h: $(HEADERMAKE) Funccode_x.hsrc - $(HEADERMAKE) -in=../sakura_core/Funccode_x.hsrc -out=../sakura_core/Funccode_enum.h -mode=enum -enum=EFunctionCode +Funccode_enum.h: Funccode_x.hsrc $(HEADERMAKE) + $(HEADERMAKE) -in=$< -out=$@ -mode=enum -enum=EFunctionCode githash.h: - cmd /c ..\sakura\githash.bat ../sakura_core + cmd /c $(SRCDIR)\..\sakura\githash.bat . -StdAfx.h.gch: githash.h Funccode_enum.h - $(CXX) $(CXXFLAGS) -c StdAfx.h -o $@ +StdAfx.h.gch: StdAfx.h githash.h Funccode_enum.h +ifneq ($(SRCDIR),.) + $(MKDIR) $(subst /,\\,$(DIRS)) +endif + $(CXX) $(CXXFLAGS) -o $@ -c $< .cpp.o: $(CXX) $(CXXFLAGS) -o $@ -c $< @@ -467,8 +127,8 @@ $(OBJS): StdAfx.h.gch $(HEADERMAKE): $(HEADERMAKETOOLDIR)/HeaderMake.cpp $(CXX) $(CXXFLAGS:-MMD=) $(HEADERMAKETOOLDIR)/HeaderMake.cpp -o $@ -static-libgcc -sakura_rc.o: githash.h Funccode_define.h sakura_rc.rc - $(RC) -c utf-8 --language=0411 $(DEFINES) sakura_rc.rc -o $@ +sakura_rc.o: sakura_rc.rc githash.h Funccode_define.h + $(RC) -c utf-8 --language=0411 $(DEFINES) -I. -I$(SRCDIR) $< -o $@ clean: $(RM) $(exe) $(OBJS) $(HEADERMAKE) StdAfx.h.gch $(GENERATED_FILES) From d0bd825bf6dfa3b13c2c2d220ddf07b005df8f8b Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Wed, 26 Aug 2020 23:14:23 +0900 Subject: [PATCH 0063/1024] MinGW: Fix some errors --- sakura_core/Makefile | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/sakura_core/Makefile b/sakura_core/Makefile index 80bd2c4615..3167e8c0dc 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -17,11 +17,15 @@ endif ifeq ($(SHELL),sh.exe) # If cmd.exe is used as a shell. MKDIR = md -RM = cmd /c $(SRCDIR)\..\sakura\mingw32-del.bat +RM = del +DIRSEP = \\ +DEVNULL = NUL else # If unix-like shell is used. MKDIR = mkdir -p RM = rm -f +DIRSEP = / +DEVNULL = /dev/null endif ifndef PREFIX @@ -115,7 +119,7 @@ githash.h: StdAfx.h.gch: StdAfx.h githash.h Funccode_enum.h ifneq ($(SRCDIR),.) - $(MKDIR) $(subst /,\\,$(DIRS)) + -$(MKDIR) $(subst /,$(DIRSEP),$(DIRS)) > $(DEVNULL) 2>&1 endif $(CXX) $(CXXFLAGS) -o $@ -c $< @@ -131,8 +135,8 @@ sakura_rc.o: sakura_rc.rc githash.h Funccode_define.h $(RC) -c utf-8 --language=0411 $(DEFINES) -I. -I$(SRCDIR) $< -o $@ clean: - $(RM) $(exe) $(OBJS) $(HEADERMAKE) StdAfx.h.gch $(GENERATED_FILES) - $(RM) $(DEPS) + -$(RM) $(exe) $(subst /,$(DIRSEP),$(OBJS) $(HEADERMAKE)) StdAfx.h.gch $(GENERATED_FILES) + -$(RM) $(subst /,$(DIRSEP),$(DEPS)) .SUFFIXES: .cpp .o .rc .PHONY: all clean From 039be25a70d605ccfd16392be59a90c63582411e Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Thu, 27 Aug 2020 00:36:42 +0900 Subject: [PATCH 0064/1024] MinGW: Fix some issues * Automatically detect SRCDIR from the path of Makefile. * Don't create a subdirectory with the same name of the current directory. --- sakura_core/Makefile | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/sakura_core/Makefile b/sakura_core/Makefile index 3167e8c0dc..0a78cca091 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -1,13 +1,13 @@ # Makefile for MinGW32/MinGW-W64 # Relative path of "sakura_core" directory from the current directory. -# If you build in a shadow directory, you should specify this. -# E.g. +# If you build in a shadow directory, you can specify this. E.g. # $ cd sakura_code # $ mkdir _build # $ cd _build # $ mingw32-make -f ../Makefile SRCDIR=.. -SRCDIR = . +# Normally, this is derived from the path of Makefile. +SRCDIR = $(patsubst %/,%,$(dir $(word 1,$(MAKEFILE_LIST)))) # If SRCDIR is different from the current directory, set it to VPATH. ifneq ($(SRCDIR),.) @@ -89,9 +89,12 @@ SRCS = $(wildcard $(SRCDIR)/*.cpp) \ $(wildcard $(SRCDIR)/*/*.cpp) \ $(wildcard $(SRCDIR)/*/*/*.cpp) OBJS = $(SRCS:$(SRCDIR)/%.cpp=%.o) sakura_rc.o + _DIRS = $(filter %/, $(wildcard $(SRCDIR)/*/)) \ $(filter %/, $(wildcard $(SRCDIR)/*/*/)) -DIRS = $(_DIRS:$(SRCDIR)/%/=%) +# Filter out the current directory name. +DIRS = $(patsubst %/,%, \ + $(filter-out $(notdir $(CURDIR))/%,$(_DIRS:$(SRCDIR)/%/=%/))) DEPS= $(OBJS:%.o=%.d) StdAfx.h.d From 9900f011bdcbdaf847b1fe5d285740572e5fc86c Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Thu, 27 Aug 2020 01:07:58 +0900 Subject: [PATCH 0065/1024] MinGW: Revert a part of the previous commit If build in `./build/mingw/debug`, a directory for outputting the objects for `./sakura_core/debug/*.cpp` wasn't created. --- sakura_core/Makefile | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/sakura_core/Makefile b/sakura_core/Makefile index 0a78cca091..a739cb4a90 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -92,9 +92,7 @@ OBJS = $(SRCS:$(SRCDIR)/%.cpp=%.o) sakura_rc.o _DIRS = $(filter %/, $(wildcard $(SRCDIR)/*/)) \ $(filter %/, $(wildcard $(SRCDIR)/*/*/)) -# Filter out the current directory name. -DIRS = $(patsubst %/,%, \ - $(filter-out $(notdir $(CURDIR))/%,$(_DIRS:$(SRCDIR)/%/=%/))) +DIRS = $(_DIRS:$(SRCDIR)/%/=%) DEPS= $(OBJS:%.o=%.d) StdAfx.h.d From ad4c9a47127b0b7bb3d076d89d7f5dd08d9313fc Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Thu, 27 Aug 2020 08:22:00 +0900 Subject: [PATCH 0066/1024] MinGW: Add OUTDIR option It specifies the output directory of the .exe files. If empty, sakura.exe will be output in the current directory, and HeaderMake.exe will be output in the same directory as HeaderMake.cpp. If specified, both .exe files will be output in the specified directory. --- sakura_core/Makefile | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sakura_core/Makefile b/sakura_core/Makefile index a739cb4a90..458f586c23 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -14,6 +14,10 @@ ifneq ($(SRCDIR),.) VPATH = $(SRCDIR) endif +# The directory where the .exe files will be output. +# If empty, they will be output to the default directories. +OUTDIR = + ifeq ($(SHELL),sh.exe) # If cmd.exe is used as a shell. MKDIR = md @@ -83,7 +87,7 @@ LIBS= \ -municode \ $(MYLIBS) -exe= sakura.exe +exe= $(or $(OUTDIR),.)/sakura.exe SRCS = $(wildcard $(SRCDIR)/*.cpp) \ $(wildcard $(SRCDIR)/*/*.cpp) \ @@ -102,7 +106,7 @@ GENERATED_FILES= \ githash.h \ HEADERMAKETOOLDIR= $(SRCDIR)/../HeaderMake -HEADERMAKE= $(HEADERMAKETOOLDIR)/HeaderMake.exe +HEADERMAKE= $(or $(OUTDIR),$(HEADERMAKETOOLDIR))/HeaderMake.exe all: $(exe) From 32f182f39565d8703465e646f5536fff0ae43e61 Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Thu, 27 Aug 2020 17:55:45 +0900 Subject: [PATCH 0067/1024] MinGW: Fix some issues with path handling --- sakura_core/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sakura_core/Makefile b/sakura_core/Makefile index 458f586c23..c388224ddb 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -22,7 +22,7 @@ ifeq ($(SHELL),sh.exe) # If cmd.exe is used as a shell. MKDIR = md RM = del -DIRSEP = \\ +DIRSEP = $(strip \ ) DEVNULL = NUL else # If unix-like shell is used. @@ -120,7 +120,7 @@ Funccode_enum.h: Funccode_x.hsrc $(HEADERMAKE) $(HEADERMAKE) -in=$< -out=$@ -mode=enum -enum=EFunctionCode githash.h: - cmd /c $(SRCDIR)\..\sakura\githash.bat . + cmd /c $(subst /,\,$(SRCDIR))\..\sakura\githash.bat . StdAfx.h.gch: StdAfx.h githash.h Funccode_enum.h ifneq ($(SRCDIR),.) @@ -140,7 +140,7 @@ sakura_rc.o: sakura_rc.rc githash.h Funccode_define.h $(RC) -c utf-8 --language=0411 $(DEFINES) -I. -I$(SRCDIR) $< -o $@ clean: - -$(RM) $(exe) $(subst /,$(DIRSEP),$(OBJS) $(HEADERMAKE)) StdAfx.h.gch $(GENERATED_FILES) + -$(RM) $(subst /,$(DIRSEP),$(exe) $(OBJS) $(HEADERMAKE)) StdAfx.h.gch $(GENERATED_FILES) -$(RM) $(subst /,$(DIRSEP),$(DEPS)) .SUFFIXES: .cpp .o .rc From 1f28dc6374d22843730c1038dc2f8d8f58b2b828 Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Fri, 28 Aug 2020 11:06:31 +0900 Subject: [PATCH 0068/1024] Update sakura_core/Makefile Co-authored-by: berryzplus --- sakura_core/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/Makefile b/sakura_core/Makefile index c388224ddb..f690dacbd7 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -134,7 +134,7 @@ endif $(OBJS): StdAfx.h.gch $(HEADERMAKE): $(HEADERMAKETOOLDIR)/HeaderMake.cpp - $(CXX) $(CXXFLAGS:-MMD=) $(HEADERMAKETOOLDIR)/HeaderMake.cpp -o $@ -static-libgcc + $(CXX) $(CXXFLAGS:-MMD=) $< -o $@ -static-libgcc sakura_rc.o: sakura_rc.rc githash.h Funccode_define.h $(RC) -c utf-8 --language=0411 $(DEFINES) -I. -I$(SRCDIR) $< -o $@ From b4d134dc33f9928461a30a44d95ca6c7881e5db3 Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Fri, 28 Aug 2020 12:48:28 +0900 Subject: [PATCH 0069/1024] MinGW: Avoid deeply nested if directives GNU make supports `else if` from v3.81 released on 2006. --- sakura_core/Makefile | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/sakura_core/Makefile b/sakura_core/Makefile index f690dacbd7..07ab706868 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -35,19 +35,15 @@ endif ifndef PREFIX PREFIX= RCPREFIX= -else -ifeq ($(PREFIX),x86_64-w64-mingw32-) +else ifeq ($(PREFIX),x86_64-w64-mingw32-) RCPREFIX=$(PREFIX) -else -ifeq ($(PREFIX),i686-w64-mingw32-) +else ifeq ($(PREFIX),i686-w64-mingw32-) ifeq ($(OS),Windows_NT) RCPREFIX= else RCPREFIX=$(PREFIX) endif endif -endif -endif CC= $(PREFIX)gcc CXX= $(PREFIX)g++ From 21352170877e6f725ce778aec4dc4071c3116764 Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Fri, 28 Aug 2020 13:27:47 +0900 Subject: [PATCH 0070/1024] MinGW: Fix typo --- sakura_core/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/Makefile b/sakura_core/Makefile index 07ab706868..6cddd3919b 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -2,7 +2,7 @@ # Relative path of "sakura_core" directory from the current directory. # If you build in a shadow directory, you can specify this. E.g. -# $ cd sakura_code +# $ cd sakura_core # $ mkdir _build # $ cd _build # $ mingw32-make -f ../Makefile SRCDIR=.. From 51bd9ebdba4a42f206e59f1c5f89ce1f546508bf Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Fri, 28 Aug 2020 14:31:39 +0900 Subject: [PATCH 0071/1024] MinGW: Update comment --- sakura_core/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/Makefile b/sakura_core/Makefile index 6cddd3919b..c3d7c860cb 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -1,7 +1,7 @@ # Makefile for MinGW32/MinGW-W64 # Relative path of "sakura_core" directory from the current directory. -# If you build in a shadow directory, you can specify this. E.g. +# Useful when doing out-of-source build. E.g. # $ cd sakura_core # $ mkdir _build # $ cd _build From 85288f1f895ec1b29bb084d266f5a8484cf70499 Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Sat, 29 Aug 2020 17:27:38 +0900 Subject: [PATCH 0072/1024] MinGW: Fix VPATH If SRCDIR ended with a backslash, VPATH didn't work as expected. Remove the backslash before set to VPATH. --- sakura_core/Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sakura_core/Makefile b/sakura_core/Makefile index c3d7c860cb..de99644c6b 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -10,8 +10,9 @@ SRCDIR = $(patsubst %/,%,$(dir $(word 1,$(MAKEFILE_LIST)))) # If SRCDIR is different from the current directory, set it to VPATH. +# (If SRCDIR ends with a backslash, remove it before set to VPATH.) ifneq ($(SRCDIR),.) -VPATH = $(SRCDIR) +VPATH = $(patsubst %\,%,$(SRCDIR)) endif # The directory where the .exe files will be output. From 49e2424789e1f41465f230a097179c45629c66f6 Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Sat, 29 Aug 2020 20:24:29 +0900 Subject: [PATCH 0073/1024] MinGW: Fix SRCDIR computation * Replace \ with / when compute SRCDIR. * Add example usages. --- sakura_core/Makefile | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/sakura_core/Makefile b/sakura_core/Makefile index de99644c6b..909a36b84c 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -1,13 +1,17 @@ # Makefile for MinGW32/MinGW-W64 -# Relative path of "sakura_core" directory from the current directory. -# Useful when doing out-of-source build. E.g. -# $ cd sakura_core -# $ mkdir _build -# $ cd _build -# $ mingw32-make -f ../Makefile SRCDIR=.. -# Normally, this is derived from the path of Makefile. -SRCDIR = $(patsubst %/,%,$(dir $(word 1,$(MAKEFILE_LIST)))) +# Example usages: +# Out-of-source build: +# $ mkdir -p build/MinGW/Release +# $ cd build/MinGW/Release +# $ mingw32-make -f ../../../sakura_core/Makefile MYCFLAGS=-O2 OUTDIR=. -j4 +# +# Debug build with coverage: +# $ cd sakura_core +# $ mingw32-make MYCFLAGS="-g --coverage" MYLIBS=--coverage -j4 + +# Path of "sakura_core" directory. Compute it from the path of Makefile. +SRCDIR = $(patsubst %/,%,$(subst \,/,$(dir $(firstword $(MAKEFILE_LIST))))) # If SRCDIR is different from the current directory, set it to VPATH. # (If SRCDIR ends with a backslash, remove it before set to VPATH.) From 535b161f5e937856ced6640f7b32a65afd82d322 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 30 Aug 2020 11:41:37 +0900 Subject: [PATCH 0074/1024] =?UTF-8?q?TrySelectProfile=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=92=E6=94=B9=E5=96=84=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-cdlgprofilemgr.cpp | 62 ++++++++++++++++--------- 1 file changed, 41 insertions(+), 21 deletions(-) diff --git a/tests/unittests/test-cdlgprofilemgr.cpp b/tests/unittests/test-cdlgprofilemgr.cpp index 0e6e5c123e..9ce9e49891 100644 --- a/tests/unittests/test-cdlgprofilemgr.cpp +++ b/tests/unittests/test-cdlgprofilemgr.cpp @@ -36,6 +36,17 @@ #include #include #include +#include +#include +#include + +#include "config/maxdata.h" +#include "basis/primitive.h" +#include "debug/Debug2.h" +#include "basis/CMyString.h" +#include "mem/CNativeW.h" +#include "env/DLLSHAREDATA.h" +#include "util/file.h" /*! * テスト用の極薄ラッパークラス @@ -53,29 +64,38 @@ class CCommandLineWrapper : public CCommandLine * 始動前に設定ファイルを削除するようにしている。 * テスト実行後に設定ファイルを残しておく意味はないので終了後も削除している。 */ -class CDlgProfileMgrIniTest : public ::testing::Test { +class CDlgProfileMgrTest : public ::testing::Test { protected: /*! - * プロファイルマネージャ設定ファイルの名前 - * - * この名前は "%s_prof.ini" に 実行ファイル名 を埋め込んで生成される。 - * 実稼働環境では "sakura_prof.ini" となることに注意。 + * プロファイルマネージャ設定ファイルのパス */ - static constexpr const char szProfileMgrIniName[] = "tests1_prof.ini"; + WCHAR szProfileMgrIniName[_MAX_PATH]; /*! * テストが起動される直前に毎回呼ばれる関数 */ - virtual void SetUp() { - // プロファイル設定を削除する - std::filesystem::remove( szProfileMgrIniName ); + void SetUp() override { + // INIファイルのパスを取得 + WCHAR szPrivateIniFile[_MAX_PATH]; + WCHAR szIniFile[_MAX_PATH]; + CFileNameManager::GetIniFileNameDirect( szPrivateIniFile, szIniFile, L"" ); + + // プロファイルマネージャ設定ファイルのパスを生成 + std::wregex re( L"\\.ini$", std::wregex::icase ); + const auto strProfileMgrIniName = std::regex_replace( szIniFile, re, L"_prof$&" ); + ::wcscpy_s( szProfileMgrIniName, strProfileMgrIniName.data() ); + + if( fexist( szProfileMgrIniName ) ){ + // プロファイルマネージャー設定を削除する + std::filesystem::remove( szProfileMgrIniName ); + } } /*! * テストが実行された直後に毎回呼ばれる関数 */ - virtual void TearDown() { - // プロファイル設定を削除する + void TearDown() override { + // プロファイルマネージャー設定を削除する std::filesystem::remove( szProfileMgrIniName ); } }; @@ -83,7 +103,7 @@ class CDlgProfileMgrIniTest : public ::testing::Test { /*! * @brief TrySelectProfileのテスト */ -TEST(CDlgProfileMgr, TrySelectProfile_001 ) +TEST_F( CDlgProfileMgrTest, TrySelectProfile_001 ) { // プロファイルマネージャ表示オプションが付いてたらプロファイルは確定しない CCommandLineWrapper cCommandLine; @@ -94,7 +114,7 @@ TEST(CDlgProfileMgr, TrySelectProfile_001 ) /*! * @brief TrySelectProfileのテスト */ -TEST( CDlgProfileMgr, TrySelectProfile_002 ) +TEST_F( CDlgProfileMgrTest, TrySelectProfile_002 ) { // プロファイル名が指定されていたらプロファイルは確定する CCommandLineWrapper cCommandLine; @@ -105,9 +125,9 @@ TEST( CDlgProfileMgr, TrySelectProfile_002 ) /*! * @brief TrySelectProfileのテスト */ -TEST_F( CDlgProfileMgrIniTest, TrySelectProfile_003 ) +TEST_F( CDlgProfileMgrTest, TrySelectProfile_003 ) { - // プロファイル設定がなかったらプロファイルは確定する + // プロファイルマネージャー設定がなかったらプロファイルは確定する CCommandLineWrapper cCommandLine; ASSERT_TRUE( CDlgProfileMgr::TrySelectProfile( &cCommandLine ) ); } @@ -115,7 +135,7 @@ TEST_F( CDlgProfileMgrIniTest, TrySelectProfile_003 ) /*! * @brief TrySelectProfileのテスト */ -TEST_F( CDlgProfileMgrIniTest, TrySelectProfile_004 ) +TEST_F( CDlgProfileMgrTest, TrySelectProfile_004 ) { // プロファイル設定を作る SProfileSettings settings; @@ -125,7 +145,7 @@ TEST_F( CDlgProfileMgrIniTest, TrySelectProfile_004 ) settings.m_bDefaultSelect = true; CDlgProfileMgr::WriteProfSettings( settings ); - // プロファイル設定にデフォルト定義があればプロファイルは確定する + // プロファイルマネージャー設定にデフォルト定義があればプロファイルは確定する CCommandLineWrapper cCommandLine; ASSERT_TRUE( CDlgProfileMgr::TrySelectProfile( &cCommandLine ) ); } @@ -133,7 +153,7 @@ TEST_F( CDlgProfileMgrIniTest, TrySelectProfile_004 ) /*! * @brief TrySelectProfileのテスト */ -TEST_F( CDlgProfileMgrIniTest, TrySelectProfile_005 ) +TEST_F( CDlgProfileMgrTest, TrySelectProfile_005 ) { // プロファイル設定を作る SProfileSettings settings; @@ -143,7 +163,7 @@ TEST_F( CDlgProfileMgrIniTest, TrySelectProfile_005 ) settings.m_bDefaultSelect = true; CDlgProfileMgr::WriteProfSettings( settings ); - // プロファイル設定にデフォルト定義がおかしればプロファイルは確定しない + // プロファイルマネージャー設定のデフォルト定義がおかしればプロファイルは確定しない CCommandLineWrapper cCommandLine; ASSERT_FALSE( CDlgProfileMgr::TrySelectProfile( &cCommandLine ) ); } @@ -151,7 +171,7 @@ TEST_F( CDlgProfileMgrIniTest, TrySelectProfile_005 ) /*! * @brief TrySelectProfileのテスト */ -TEST_F( CDlgProfileMgrIniTest, TrySelectProfile_006 ) +TEST_F( CDlgProfileMgrTest, TrySelectProfile_006 ) { // 空のプロファイル設定を作る SProfileSettings settings; @@ -160,7 +180,7 @@ TEST_F( CDlgProfileMgrIniTest, TrySelectProfile_006 ) settings.m_bDefaultSelect = false; CDlgProfileMgr::WriteProfSettings( settings ); - // プロファイル設定が空定義ならプロファイルは確定しない + // プロファイルマネージャー設定が空定義ならプロファイルは確定しない CCommandLineWrapper cCommandLine; ASSERT_FALSE( CDlgProfileMgr::TrySelectProfile( &cCommandLine ) ); } From 9da897d596af01a8870d936655c0a40c9f1ff7a8 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 30 Aug 2020 14:41:08 +0900 Subject: [PATCH 0075/1024] =?UTF-8?q?=E3=82=B5=E3=82=AF=E3=83=A9=E3=82=A8?= =?UTF-8?q?=E3=83=87=E3=82=A3=E3=82=BF=E3=81=AE=E8=B5=B7=E5=8B=95=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. tests1.exeをサクラエディタとして起動できるようにする 2. tests1.exeを使ったテストで影響が出る箇所を修正する 3. WinMainTest - runWithNoWin追加(コントロールプロセスの起動テスト) 4. WinMainTest - runEditorProcess追加(エディタプロセスの起動テスト) --- sakura_core/_main/CProcessFactory.cpp | 33 +- tests/unittests/StartEditorProcessForTest.h | 48 +++ tests/unittests/code-main.cpp | 128 ++++++++ tests/unittests/test-winmain.cpp | 326 ++++++++++++++++++++ tests/unittests/tests1.vcxproj | 5 + tests/unittests/tests1.vcxproj.filters | 11 + 6 files changed, 521 insertions(+), 30 deletions(-) create mode 100644 tests/unittests/StartEditorProcessForTest.h create mode 100644 tests/unittests/code-main.cpp create mode 100644 tests/unittests/test-winmain.cpp diff --git a/sakura_core/_main/CProcessFactory.cpp b/sakura_core/_main/CProcessFactory.cpp index fa39eec716..d6de0b5ea6 100644 --- a/sakura_core/_main/CProcessFactory.cpp +++ b/sakura_core/_main/CProcessFactory.cpp @@ -230,20 +230,6 @@ bool CProcessFactory::StartControlProcess() return false; } - // 起動したプロセスが完全に立ち上がるまでちょっと待つ. - // - // Note: この待ちにより、ここで起動したコントロールプロセスが競争に生き残れなかった場合でも、 - // 唯一生き残ったコントロールプロセスが多重起動防止用ミューテックスを作成しているはず。 - // - int nResult; - nResult = ::WaitForInputIdle( p.hProcess, 10000 ); // 最大10秒間待つ - if( 0 != nResult ){ - ErrorMessage( NULL, L"\'%ls\'\nコントロールプロセスの起動に失敗しました。", szEXE ); - ::CloseHandle( p.hThread ); - ::CloseHandle( p.hProcess ); - return false; - } - ::CloseHandle( p.hThread ); ::CloseHandle( p.hProcess ); @@ -264,27 +250,14 @@ bool CProcessFactory::WaitForInitializedControlProcess() // Note: コントロールプロセス側は多重起動防止用ミューテックスを ::CreateMutex() で // 作成するよりも先に初期化完了イベントを ::CreateEvent() で作成する。 // - if( !IsExistControlProcess() ){ - // コントロールプロセスが多重起動防止用のミューテックス作成前に異常終了した場合など - return false; - } - const auto pszProfileName = CCommandLine::getInstance()->GetProfileName(); std::wstring strInitEvent = GSTR_EVENT_SAKURA_CP_INITIALIZED; strInitEvent += pszProfileName; HANDLE hEvent; - hEvent = ::OpenEvent( EVENT_ALL_ACCESS, FALSE, strInitEvent.c_str() ); + hEvent = ::CreateEventW( NULL, TRUE, FALSE, strInitEvent.c_str() ); if( NULL == hEvent ){ - // 動作中のコントロールプロセスを旧バージョンとみなし、イベントを待たずに処理を進める - // - // Note: Ver1.5.9.91以前のバージョンは初期化完了イベントを作らない。 - // このため、コントロールプロセスが常駐していないときに複数ウィンドウをほぼ - // 同時に起動すると、競争に生き残れなかったコントロールプロセスの親プロセスや、 - // 僅かに出遅れてコントロールプロセスを作成しなかったプロセスでも、 - // コントロールプロセスの初期化処理を追い越してしまい、異常終了したり、 - // 「タブバーが表示されない」のような問題が発生していた。 - // - return true; + TopErrorMessage( NULL, L"エディタまたはシステムがビジー状態です。\nしばらく待って開きなおしてください。" ); + return false; } DWORD dwRet; dwRet = ::WaitForSingleObject( hEvent, 10000 ); // 最大10秒間待つ diff --git a/tests/unittests/StartEditorProcessForTest.h b/tests/unittests/StartEditorProcessForTest.h new file mode 100644 index 0000000000..23d532b5b3 --- /dev/null +++ b/tests/unittests/StartEditorProcessForTest.h @@ -0,0 +1,48 @@ +/*! @file */ +/* + Copyright (C) 2018-2020 Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#pragma once + +#ifndef NOMINMAX +#define NOMINMAX +#endif /* #ifndef NOMINMAX */ + +#include +#include + +#include + +/*! + * テストコード専用wWinMain呼出のラッパー関数 + * + * 単体テストから wWinMain を呼び出すためのラッパー関数です。 + * + * wWinMain は呼出元のグローバル変数を汚してしまうため、 + * ASSERT_EXIT, ASSERT_DEATH などを使って別プロセスで実行するようにしてください。 + * + * この関数をコントロールプロセスの起動に使用しないでください。 + * googletestでは、ASSERT_EXITで起動したプロセスの完全な終了を待機できないようです。 + * コントロールプロセスが終了する前に他のテストが実行されると期待した動作にならない場合があります。 + */ +int StartEditorProcessForTest( const std::wstring_view& strCommandLine ); diff --git a/tests/unittests/code-main.cpp b/tests/unittests/code-main.cpp new file mode 100644 index 0000000000..cf801bdac7 --- /dev/null +++ b/tests/unittests/code-main.cpp @@ -0,0 +1,128 @@ +/*! @file */ +/* + Copyright (C) 2018-2020 Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include + +#ifndef NOMINMAX +#define NOMINMAX +#endif /* #ifndef NOMINMAX */ + +#include +#include + +#include +#include +#include +#include +#include + +#include "debug/Debug2.h" +#include "StartEditorProcessForTest.h" + +/*! + * テストコード専用wWinMain呼出のラッパー関数 + * + * 単体テストから wWinMain を呼び出すためのラッパー関数です。 + * + * コマンドラインでプロファイルが指定されていない場合、空指定を付加します。 + */ +int StartEditorProcessForTest( const std::wstring_view& strCommandLine ) +{ + + // 実行中モジュールのインスタンスハンドルを取得する + HINSTANCE hInstance = ::GetModuleHandle( NULL ); + + // WinMainを起動するためのコマンドラインを組み立てる + std::wstring strCmdBuff( strCommandLine ); + + // コマンドラインに -PROF 指定がない場合は付加する + if( !std::regex_search( strCmdBuff, std::wregex( L"-PROF\\b", std::wregex::icase ) ) ){ + strCmdBuff += L" -PROF=\"\""; + } + + // wWinMainを起動する + return wWinMain( hInstance, NULL, &*strCmdBuff.begin(), SW_SHOWDEFAULT ); +} + +/*! + * 必要な場合にwWinMainを起動して終了する。 + * + * コマンドラインに -PROF 指定がない場合、呼出元に制御を返す。 + * コマンドラインに -PROF 指定がある場合、wWinMainを呼出してプログラムを終了する。 + */ +static void InvokeWinMainIfNeeded( char** ppArgsBegin, char** ppArgsEnd ) +{ + // コマンドライン引数がない場合 + if( ppArgsBegin == ppArgsEnd ){ + return; + } + + // コマンドラインに -PROF 指定がない場合 + if( ppArgsEnd == std::find_if( ppArgsBegin, ppArgsEnd, []( const char* arg ){ return std::regex_search( arg, std::regex( "-PROF\\b", std::regex::icase ) ); } ) ){ + return; + } + + // 最初の引数はプログラム名なので無視する + ppArgsBegin++; + + // wWinMainを起動するためのコマンドラインを組み立てる(バッファ長はざっくり定義。) + wchar_t szCmdBuf[4096]; + std::wstring strCommandLine; + std::for_each( ppArgsBegin, ppArgsEnd, [&strCommandLine, &szCmdBuf]( const auto* arg ){ + ::swprintf_s( szCmdBuf, L"%hs ", arg ); + strCommandLine += szCmdBuf; + } ); + + // 末尾の空白を削る(引数0個はここに来ないのでチェックしない) + strCommandLine.assign( strCommandLine.data(), strCommandLine.length() - 1 ); + + // 実行中モジュールのインスタンスハンドルを取得する + HINSTANCE hInstance = ::GetModuleHandleW( NULL ); + + // ログ出力 + WCHAR *pszCommandLine = &*strCommandLine.begin(); + printf( "%s(%d): launching process [%ls]\n", __FILE__, __LINE__, pszCommandLine ); + + // wWinMainを起動する + int ret = wWinMain( hInstance, NULL, pszCommandLine, SW_SHOWDEFAULT ); + + // ログ出力(途中でexitした場合は出力されない) + printf( "%s(%d): leaving process [%ls] => %d\n", __FILE__, __LINE__, pszCommandLine, ret ); + + // プログラムを終了する(呼出元に制御は返らない) + exit( ret ); +} + +/*! + * テストモジュールのエントリポイント + */ +int main(int argc, char **argv) { + // コマンドラインに -PROF 指定がある場合、wWinMainを起動して終了する。 + InvokeWinMainIfNeeded( argv, argv + argc ); + + // WinMainを起動しない場合、標準のgtest_main同様の処理を実行する + printf("Running main() from %s\n", __FILE__); + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/tests/unittests/test-winmain.cpp b/tests/unittests/test-winmain.cpp new file mode 100644 index 0000000000..b317e3ebf7 --- /dev/null +++ b/tests/unittests/test-winmain.cpp @@ -0,0 +1,326 @@ +/*! @file */ +/* + Copyright (C) 2018-2020 Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include + +#ifndef NOMINMAX +#define NOMINMAX +#endif /* #ifndef NOMINMAX */ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "config/maxdata.h" +#include "basis/primitive.h" +#include "debug/Debug2.h" +#include "basis/CMyString.h" +#include "mem/CNativeW.h" +#include "env/DLLSHAREDATA.h" +#include "util/file.h" +#include "config/system_constants.h" + +#include "StartEditorProcessForTest.h" + +using namespace std::literals::string_literals; + +/*! + * HANDLE型のスマートポインタを実現するためのdeleterクラス + */ +struct handle_closer +{ + void operator()( HANDLE handle ) const + { + ::CloseHandle( handle ); + } +}; + +//! HANDLE型のスマートポインタ +typedef std::unique_ptr::type, handle_closer> handleHolder; + +/*! + * WinMain起動テストのためのフィクスチャクラス + * + * 設定ファイルを使うテストは「設定ファイルがない状態」からの始動を想定しているので + * 始動前に設定ファイルを削除するようにしている。 + * テスト実行後に設定ファイルを残しておく意味はないので終了後も削除している。 + */ +class WinMainTest : public ::testing::Test { +protected: + /*! + * 設定ファイルのパス + * + * CFileNameManager::GetIniFileNameDirectを使ってtests1.iniのパスを取得する。 + */ + WCHAR szIniFile[_MAX_PATH]; + + /*! + * テストが起動される直前に毎回呼ばれる関数 + */ + void SetUp() override { + // INIファイルのパスを取得 + WCHAR szPrivateIniFile[_MAX_PATH]; + CFileNameManager::GetIniFileNameDirect( szPrivateIniFile, szIniFile, L"" ); + + if( fexist( szIniFile ) ){ + // INIファイルを削除する + std::filesystem::remove( szIniFile ); + } + } + + /*! + * テストが実行された直後に毎回呼ばれる関数 + */ + void TearDown() override { + // INIファイルを削除する + std::filesystem::remove( szIniFile ); + } +}; + +/*! + * @brief コントロールプロセスの初期化完了を待つ + * + * CControlProcess::WaitForInitializedとして実装したいコードです。本体を変えたくないので一時定義しました。 + * 既存CProcessFactory::WaitForInitializedControlProcess()と概ね等価です。 + */ +void CControlProcess_WaitForInitialized( LPCWSTR lpszProfileName ) +{ + // 初期化完了イベントを作成する + std::wstring strInitEvent( GSTR_EVENT_SAKURA_CP_INITIALIZED ); + if( lpszProfileName && lpszProfileName[0] ){ + strInitEvent += lpszProfileName; + } + auto hEvent = ::CreateEventW( NULL, TRUE, FALSE, strInitEvent.data() ); + if (!hEvent) { + throw std::runtime_error( "create event failed." ); + } + + // イベントハンドラをスマートポインタに入れる + handleHolder eventHolder( hEvent ); + + // 初期化完了イベントを待つ + DWORD dwRet = ::WaitForSingleObject( hEvent, 10000 ); + if( WAIT_TIMEOUT == dwRet ){ + throw std::runtime_error( "waitEvent is timeout." ); + } +} + +/*! + * @brief コントロールプロセスを起動する + * + * CControlProcess::Startとして実装したいコードです。本体を変えたくないので一時定義しました。 + * 既存CProcessFactory::StartControlProcess()と概ね等価です。 + */ +void CControlProcess_Start( LPCWSTR lpszProfileName ) +{ + // スタートアップ情報 + STARTUPINFO si = { sizeof(STARTUPINFO), 0 }; + si.lpTitle = (LPWSTR)L"sakura control process"; + si.dwFlags = STARTF_USESHOWWINDOW; + si.wShowWindow = SW_SHOWDEFAULT; + + WCHAR szExePath[MAX_PATH]; + ::GetModuleFileNameW( NULL, szExePath, _countof(szExePath) ); + + CNativeW cmemCommandLine; + cmemCommandLine.AppendStringF( L"\"%s\" -NOWIN -PROF=\"%s\"", szExePath, lpszProfileName ); + + LPWSTR pszCommandLine = cmemCommandLine.GetStringPtr(); + DWORD dwCreationFlag = CREATE_DEFAULT_ERROR_MODE; + PROCESS_INFORMATION pi; + + // コントロールプロセスを起動する + BOOL createSuccess = ::CreateProcess( + szExePath, // 実行可能モジュールパス + pszCommandLine, // コマンドラインバッファ + NULL, // プロセスのセキュリティ記述子 + NULL, // スレッドのセキュリティ記述子 + FALSE, // ハンドルの継承オプション(継承させない) + dwCreationFlag, // 作成のフラグ + NULL, // 環境変数(変更しない) + NULL, // カレントディレクトリ(変更しない) + &si, // スタートアップ情報 + &pi // プロセス情報(作成されたプロセス情報を格納する構造体) + ); + if( !createSuccess ){ + throw std::runtime_error( "create process failed." ); + } + + // 開いたハンドルは使わないので閉じておく + ::CloseHandle( pi.hThread ); + ::CloseHandle( pi.hProcess ); + + // コントロールプロセスの初期化完了を待つ + CControlProcess_WaitForInitialized( lpszProfileName ); +} + +/*! + * @brief コントロールプロセスに終了指示を出して終了を待つ + * + * CControlProcess::Terminateとして実装したいコードです。本体を変えたくないので一時定義しました。 + * 既存コードに該当する処理はありません。 + */ +void CControlProcess_Terminate( LPCWSTR lpszProfileName ) +{ + // トレイウインドウを検索する + std::wstring strCEditAppName( GSTR_CEDITAPP ); + if( lpszProfileName && lpszProfileName[0] ){ + strCEditAppName += lpszProfileName; + } + HWND hTrayWnd = ::FindWindow( strCEditAppName.data(), strCEditAppName.data() ); + if( !hTrayWnd ){ + throw std::runtime_error( "tray window is not found." ); + } + + // トレイウインドウからプロセスIDを取得する + DWORD dwControlProcessId = 0; + ::GetWindowThreadProcessId( hTrayWnd, &dwControlProcessId ); + if( !dwControlProcessId ){ + throw std::runtime_error( "dwControlProcessId can't be retrived." ); + } + + // プロセス情報の問い合せを行うためのハンドルを開く + HANDLE hControlProcess = ::OpenProcess( PROCESS_QUERY_INFORMATION | SYNCHRONIZE, FALSE, dwControlProcessId ); + if( !hControlProcess ){ + throw std::runtime_error( "hControlProcess can't be opened." ); + } + + // プロセスハンドルをスマートポインタに入れる + handleHolder processHolder( hControlProcess ); + + // トレイウインドウを閉じる + ::SendMessage( hTrayWnd, WM_CLOSE, 0, 0 ); + + // プロセス終了を待つ + DWORD dwExitCode = 0; + if( ::GetExitCodeProcess( hControlProcess, &dwExitCode ) && dwExitCode == STILL_ACTIVE ){ + DWORD waitProcessResult = ::WaitForSingleObject( hControlProcess, INFINITE ); + if( WAIT_TIMEOUT == waitProcessResult ){ + throw std::runtime_error( "waitProcess is timeout." ); + } + } +} + +/*! + * @brief wWinMainを起動してみるテスト + * プログラムが起動する正常ルートに潜む障害を検出するためのもの。 + * コントロールプロセスを実行する。 + */ +TEST_F( WinMainTest, runWithNoWin ) +{ + // テスト用プロファイル名 + constexpr auto szProfileName = L""; + + // コントロールプロセスを起動する + CControlProcess_Start( szProfileName ); + + // コントロールプロセスに終了指示を出して終了を待つ + CControlProcess_Terminate( szProfileName ); + + // コントロールプロセスが終了すると、INIファイルが作成される + ASSERT_TRUE( fexist( szIniFile ) ); +} + +/*! + * @brief WinMainを起動してみるテスト + * プログラムが起動する正常ルートに潜む障害を検出するためのもの。 + * エディタプロセスを実行する。 + */ +TEST_F( WinMainTest, runEditorProcess ) +{ + // エディタプロセスを起動するため、テスト実行はプロセスごと分離して行う + auto separatedTestProc = [] { + std::mutex mtx; + std::condition_variable cv; + bool initialized = false; + + // エディタプロセスが起動したコントロールプロセスの終了を待機するスレッド + auto waitingThread = std::thread([&mtx, &cv, &initialized] { + // 初期化 + { + std::unique_lock lock( mtx ); + initialized = true; + cv.notify_one(); + } + + // テスト用プロファイル名 + constexpr auto szProfileName = L""; + + // コントロールプロセスの初期化完了を待つ + CControlProcess_WaitForInitialized( szProfileName ); + + // コントロールプロセスに終了指示を出して終了を待つ + CControlProcess_Terminate( szProfileName ); + }); + + // スレッドの初期化完了を待機する + std::unique_lock lock( mtx ); + cv.wait(lock, [&initialized] { return initialized; }); + + // 起動時実行マクロの中身を作る + std::wstring strStartupMacro; + strStartupMacro += L"Down();"; + strStartupMacro += L"Up();"; + strStartupMacro += L"Right();"; + strStartupMacro += L"Left();"; + strStartupMacro += L"ShowFunckey();"; //ShowFunckey 出す + strStartupMacro += L"ShowMiniMap();"; //ShowMiniMap 出す + strStartupMacro += L"ShowTab();"; //ShowTab 出す + strStartupMacro += L"SelectAll();"; + strStartupMacro += L"GoFileEnd();"; + strStartupMacro += L"GoFileTop();"; + strStartupMacro += L"ShowFunckey();"; //ShowFunckey 消す + strStartupMacro += L"ShowMiniMap();"; //ShowMiniMap 消す + strStartupMacro += L"ShowTab();"; //ShowTab 消す + strStartupMacro += L"ExitAll();"; //NOTE: このコマンドにより、エディタプロセスは起動された直後に終了する。 + + // コマンドラインを組み立てる + std::wstring strCommandLine( _T(__FILE__) L" -MTYPE=js" ); + strCommandLine += L" -M=\""s; + strCommandLine += std::regex_replace( strStartupMacro, std::wregex( L"\"" ), L"\"\"" ); + strCommandLine += L"\""s; + + // エディタプロセスを起動する + StartEditorProcessForTest( strCommandLine ); + + // エディタ終了を待機する + if( waitingThread.joinable() ){ + waitingThread.join(); + } + }; + + // テストプログラム内のグローバル変数を汚さないために、別プロセスで起動させる + ASSERT_EXIT({ separatedTestProc(); exit(0); }, ::testing::ExitedWithCode(0), ".*" ); + + // コントロールプロセスが終了すると、INIファイルが作成される + ASSERT_TRUE( fexist( szIniFile ) ); +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index 7e680f027b..e194509e6e 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -105,6 +105,7 @@ + @@ -121,6 +122,7 @@ + @@ -136,5 +138,8 @@ {7a6d0f29-e560-4985-835b-5f92a08eb242} + + + \ No newline at end of file diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index 1c19c8427b..f0d8289042 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -68,5 +68,16 @@ Test Files + + Other Files + + + Test Files + + + + + Other Files + \ No newline at end of file From b182e6284472c0fe7f2ef9febe24742bd87226e7 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 31 Aug 2020 11:10:23 +0900 Subject: [PATCH 0076/1024] MinGW: Refactor Makefile for Language DLL --- sakura_lang_en_US/Makefile | 98 +++++++++++++++++++++++--------------- 1 file changed, 60 insertions(+), 38 deletions(-) diff --git a/sakura_lang_en_US/Makefile b/sakura_lang_en_US/Makefile index 8faebc1b49..664e7a317f 100644 --- a/sakura_lang_en_US/Makefile +++ b/sakura_lang_en_US/Makefile @@ -1,70 +1,92 @@ # Makefile for MinGW32/MinGW-W64 +# Example usages: +# Out-of-source build: +# $ mkdir -p build/MinGW/Release +# $ cd build/MinGW/Release +# $ mingw32-make -f ../../../sakura_core/Makefile MYCFLAGS=-O2 OUTDIR=. -j4 +# +# Debug build with coverage: +# $ cd sakura_core +# $ mingw32-make MYCFLAGS="-g --coverage" MYLIBS=--coverage -j4 + +# Path of "sakura_core" directory. Compute it from the path of Makefile. +SRCDIR = $(patsubst %/,%,$(subst \,/,$(dir $(firstword $(MAKEFILE_LIST))))) + +# If SRCDIR is different from the current directory, set it to VPATH. +# (If SRCDIR ends with a backslash, remove it before set to VPATH.) +ifneq ($(SRCDIR),.) +VPATH = $(patsubst %\,%,$(SRCDIR)) +endif + +# The directory where the .exe files will be output. +# If empty, they will be output to the default directories. +OUTDIR = + +ifeq ($(SHELL),sh.exe) +# If cmd.exe is used as a shell. +MKDIR = md +RM = del +DIRSEP = $(strip \ ) +DEVNULL = NUL +else +# If unix-like shell is used. +MKDIR = mkdir -p +RM = rm -f +DIRSEP = / +DEVNULL = /dev/null +endif + ifndef PREFIX PREFIX= RCPREFIX= -else -ifeq ($(PREFIX),x86_64-w64-mingw32-) +else ifeq ($(PREFIX),x86_64-w64-mingw32-) RCPREFIX=$(PREFIX) -else -ifeq ($(PREFIX),i686-w64-mingw32-) +else ifeq ($(PREFIX),i686-w64-mingw32-) ifeq ($(OS),Windows_NT) RCPREFIX= else RCPREFIX=$(PREFIX) endif endif -endif -endif CC= $(PREFIX)gcc -CXX= $(PREFIX)g++ RC= $(RCPREFIX)windres -RM= cmd /c $(CURDIR)/../sakura/mingw32-del.bat DEFINES= \ -DWIN32 \ -D_WIN32_WINNT=_WIN32_WINNT_WIN7 \ -D_UNICODE \ -DUNICODE \ - -DNDEBUG -CFLAGS= -O2 \ - -finput-charset=utf-8 -fexec-charset=cp932 \ - -I. \ - $(DEFINES) $(MYCFLAGS) -CXXFLAGS= $(CFLAGS) $(MYCXXFLAGS) + $(MYDEFINES) LIBS= \ - -lkernel32 -luser32 -lgdi32 \ - -lwinspool -lcomdlg32 -ladvapi32 \ - -lshell32 -lole32 -loleaut32 \ - -luuid -lcomctl32 -limm32 \ - -lmpr -limagehlp \ - -static-libgcc -static-libstdc++ -mwindows -municode -s + -static \ + -shared \ + -mwindows \ + $(MYLIBS) -exe= sakura_lang_en_US.dll +dll = $(or $(OUTDIR),.)/sakura_lang_en_US.dll +sakura_rc = ../sakura_core/sakura_rc.o -# ls *.cpp */*.cpp */*/*.cpp | sed -E -e "s/([[:alnum:]_]+)\.[[:alnum:]]+/\1.o \\\\/" -OBJS= \ -sakura_lang_rc.o \ +SRCS = $(wildcard $(SRCDIR)/*.rc) +OBJS = $(SRCS:$(SRCDIR)/%.rc=%.o) +DEPS = $(OBJS:%.o=%.d) -all: $(exe) +all: $(dll) -$(exe): sakura_lang.h $(OBJS) - $(CXX) -shared -o $@ $(OBJS) $(LIBS) +$(dll): $(OBJS) + $(CC) $(OBJS) $(LIBS) -o $@ -sakura_rc: - $(MAKE) -C ../sakura_core sakura_rc.o +$(sakura_rc): ../sakura_core/Makefile + $(MAKE) -f $< -C $(patsubst %/,%,$(dir $<)) $(@F) -sakura_lang_rc.o: sakura_rc sakura_lang_rc.rc - $(RC) -c utf-8 --language=0411 $(DEFINES) sakura_lang_rc.rc -o $@ +sakura_lang_rc.o: sakura_lang_rc.rc $(sakura_rc) + $(RC) -c utf-8 --language=0409 $(DEFINES) -I../sakura_core -I$(SRCDIR)/../sakura_core $< -o $@ clean: - $(RM) $(exe) $(OBJS) - -depend: - $(CXX) -E -MM -w $(DEFINES) $(CXXFLAGS) *.cpp */*.cpp */*/*.cpp > depend.mak + -$(RM) $(subst /,$(DIRSEP),$(dll) $(OBJS) $(DEPS)) -.SUFFIXES: .cpp .o .rc -.PHONY: all clean depend +.SUFFIXES: .o .rc +.PHONY: all clean $(sakura_rc) --include depend.mak +-include $(DEPS) From 82dac673433f9c6b7c9997de556b3d86c7eb27d2 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 2 Sep 2020 00:17:47 +0900 Subject: [PATCH 0077/1024] fix comment,delete DEPS,remove sakura_rc from PHONY --- sakura_lang_en_US/Makefile | 41 +++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/sakura_lang_en_US/Makefile b/sakura_lang_en_US/Makefile index 664e7a317f..0949faa36a 100644 --- a/sakura_lang_en_US/Makefile +++ b/sakura_lang_en_US/Makefile @@ -2,15 +2,15 @@ # Example usages: # Out-of-source build: -# $ mkdir -p build/MinGW/Release -# $ cd build/MinGW/Release -# $ mingw32-make -f ../../../sakura_core/Makefile MYCFLAGS=-O2 OUTDIR=. -j4 +# $ mkdir -p build/MinGW/Release/sakura_lang_en_US/ +# $ cd build/MinGW/Release/sakura_lang_en_US +# $ mingw32-make -f ../../../../sakura_lang_en_US/Makefile OUTDIR=. -j4 # -# Debug build with coverage: -# $ cd sakura_core -# $ mingw32-make MYCFLAGS="-g --coverage" MYLIBS=--coverage -j4 +# Debug build: +# $ cd sakura_lang_en_US +# $ mingw32-make MYDEFINES="_DEBUG" -j4 -# Path of "sakura_core" directory. Compute it from the path of Makefile. +# Path of "sakura_lang_en_US" directory. Compute it from the path of Makefile. SRCDIR = $(patsubst %/,%,$(subst \,/,$(dir $(firstword $(MAKEFILE_LIST))))) # If SRCDIR is different from the current directory, set it to VPATH. @@ -19,8 +19,8 @@ ifneq ($(SRCDIR),.) VPATH = $(patsubst %\,%,$(SRCDIR)) endif -# The directory where the .exe files will be output. -# If empty, they will be output to the default directories. +# The directory where the .dll files will be output. +# If empty, it will be output to the default directory. OUTDIR = ifeq ($(SHELL),sh.exe) @@ -53,24 +53,28 @@ endif CC= $(PREFIX)gcc RC= $(RCPREFIX)windres +ifeq (_DEBUG,$(findstring _DEBUG,$(MYDEFINES))) +else ifeq (NDEBUG,$(findstring NDEBUG,$(MYDEFINES))) +else +MYDEFINES += NDEBUG +endif + DEFINES= \ -DWIN32 \ -D_WIN32_WINNT=_WIN32_WINNT_WIN7 \ -D_UNICODE \ -DUNICODE \ - $(MYDEFINES) + $(addprefix -D,$(MYDEFINES)) LIBS= \ -static \ -shared \ - -mwindows \ - $(MYLIBS) + -mwindows dll = $(or $(OUTDIR),.)/sakura_lang_en_US.dll sakura_rc = ../sakura_core/sakura_rc.o SRCS = $(wildcard $(SRCDIR)/*.rc) OBJS = $(SRCS:$(SRCDIR)/%.rc=%.o) -DEPS = $(OBJS:%.o=%.d) all: $(dll) @@ -78,15 +82,16 @@ $(dll): $(OBJS) $(CC) $(OBJS) $(LIBS) -o $@ $(sakura_rc): ../sakura_core/Makefile - $(MAKE) -f $< -C $(patsubst %/,%,$(dir $<)) $(@F) +ifneq ($(SRCDIR),.) + -$(MKDIR) $(subst /,$(DIRSEP),$(@D)) > $(DEVNULL) 2>&1 +endif + $(MAKE) -f $< -C $(@D) $(@F) sakura_lang_rc.o: sakura_lang_rc.rc $(sakura_rc) $(RC) -c utf-8 --language=0409 $(DEFINES) -I../sakura_core -I$(SRCDIR)/../sakura_core $< -o $@ clean: - -$(RM) $(subst /,$(DIRSEP),$(dll) $(OBJS) $(DEPS)) + -$(RM) $(subst /,$(DIRSEP),$(dll) $(OBJS)) .SUFFIXES: .o .rc -.PHONY: all clean $(sakura_rc) - --include $(DEPS) +.PHONY: all clean From d12fdc7f0ca39cf0fbcafa30c502becd638cf956 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 2 Sep 2020 12:26:00 +0900 Subject: [PATCH 0078/1024] add SAKURA_CORE. --- sakura_lang_en_US/Makefile | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/sakura_lang_en_US/Makefile b/sakura_lang_en_US/Makefile index 0949faa36a..c13d158795 100644 --- a/sakura_lang_en_US/Makefile +++ b/sakura_lang_en_US/Makefile @@ -4,7 +4,12 @@ # Out-of-source build: # $ mkdir -p build/MinGW/Release/sakura_lang_en_US/ # $ cd build/MinGW/Release/sakura_lang_en_US -# $ mingw32-make -f ../../../../sakura_lang_en_US/Makefile OUTDIR=. -j4 +# $ mingw32-make -f ../../../../sakura_lang_en_US/Makefile OUTDIR=.. -j4 +# +# Out-of-source build (alternate style): +# $ mkdir -p build/MinGW/Release/ +# $ cd build/MinGW/Release +# $ mingw32-make -f ../../../sakura_lang_en_US/Makefile SAKURA_CORE=. OUTDIR=. -j4 # # Debug build: # $ cd sakura_lang_en_US @@ -19,6 +24,9 @@ ifneq ($(SRCDIR),.) VPATH = $(patsubst %\,%,$(SRCDIR)) endif +# Path of "sakura_core" directory. +SAKURA_CORE = ../sakura_core + # The directory where the .dll files will be output. # If empty, it will be output to the default directory. OUTDIR = @@ -68,10 +76,11 @@ DEFINES= \ LIBS= \ -static \ -shared \ - -mwindows + -mwindows \ + -s dll = $(or $(OUTDIR),.)/sakura_lang_en_US.dll -sakura_rc = ../sakura_core/sakura_rc.o +sakura_rc = $(SAKURA_CORE)/sakura_rc.o SRCS = $(wildcard $(SRCDIR)/*.rc) OBJS = $(SRCS:$(SRCDIR)/%.rc=%.o) @@ -82,13 +91,13 @@ $(dll): $(OBJS) $(CC) $(OBJS) $(LIBS) -o $@ $(sakura_rc): ../sakura_core/Makefile -ifneq ($(SRCDIR),.) +ifneq ($(SAKURA_CORE),.) -$(MKDIR) $(subst /,$(DIRSEP),$(@D)) > $(DEVNULL) 2>&1 endif $(MAKE) -f $< -C $(@D) $(@F) sakura_lang_rc.o: sakura_lang_rc.rc $(sakura_rc) - $(RC) -c utf-8 --language=0409 $(DEFINES) -I../sakura_core -I$(SRCDIR)/../sakura_core $< -o $@ + $(RC) -c utf-8 --language=0409 $(DEFINES) -I$(SAKURA_CORE) -I$(SRCDIR)/../sakura_core $< -o $@ clean: -$(RM) $(subst /,$(DIRSEP),$(dll) $(OBJS)) From 689b5c2b3e3906cec1482a6fbfd8ee568e85d02e Mon Sep 17 00:00:00 2001 From: berryzplus Date: Thu, 3 Sep 2020 23:07:28 +0900 Subject: [PATCH 0079/1024] =?UTF-8?q?MakefileMake=E3=82=92=E5=BB=83?= =?UTF-8?q?=E6=AD=A2=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MakefileMake/.gitignore | 4 - MakefileMake/MakefileMake.cpp | 410 ------------------------------ MakefileMake/MakefileMake.vcxproj | 97 ------- sakura.sln | 10 - sakura/gen-makefile.bat | 14 - sakura/mingw32-del.bat | 21 -- sakura/preBuild.bat | 2 - sakura/sakura.vcxproj | 6 - 8 files changed, 564 deletions(-) delete mode 100644 MakefileMake/.gitignore delete mode 100644 MakefileMake/MakefileMake.cpp delete mode 100644 MakefileMake/MakefileMake.vcxproj delete mode 100644 sakura/gen-makefile.bat delete mode 100644 sakura/mingw32-del.bat diff --git a/MakefileMake/.gitignore b/MakefileMake/.gitignore deleted file mode 100644 index e99ed7c99f..0000000000 --- a/MakefileMake/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# /*.filters -/*.user -# /*.vcxproj -/Win32 diff --git a/MakefileMake/MakefileMake.cpp b/MakefileMake/MakefileMake.cpp deleted file mode 100644 index eb00107ab7..0000000000 --- a/MakefileMake/MakefileMake.cpp +++ /dev/null @@ -1,410 +0,0 @@ -/*! @file - - @author Project Sakura-Editor - @date 2013.04.03 Uchi 作成 -*/ -/* - Copyright (C) 2013, Uchi - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; - you must not claim that you wrote the original software. - If you use this software in a product, an acknowledgment - in the product documentation would be appreciated but is - not required. - - 2. Altered source versions must be plainly marked as such, - and must not be misrepresented as being the original software. - - 3. This notice may not be removed or altered from any source - distribution. -*/ - -/* - ++ 概要 ++ - - MinGW用の makefile を自動生成するためのモノ - - makefile を自動生成する - 其れなりに手抜きなんで漢字のファイル名とかには未対応 - - ++ 使用方法 ++ - - usage() を参照 -*/ - -#ifdef __MINGW32__ -#include <_mingw.h> -#ifdef MINGW_HAS_SECURE_API -#undef MINGW_HAS_SECURE_API -#endif // MINGW_HAS_SECURE_API -#endif // __MINGW32__ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef __MINGW32__ -#include -#ifndef _countof -#define _countof(A) (sizeof(A)/sizeof(A[0])) -#endif -#define sprintf_s(A, B, C, ...) sprintf((A), (C), (__VA_ARGS__)) -#define strncpy_s(A, B, C, D) strncpy((A), (C), (D)) - -int fopen_s( - FILE** pFile, - const char *filename, - const char *mode -) -{ - *pFile = fopen(filename, mode); - return pFile != NULL ? 0 : 1; -} -#endif // __MINGW32__ - -#ifdef _MSC_VER -#if _MSC_VER < 1400 // VC2003 -#ifndef _countof -#define _countof(A) (sizeof(A)/sizeof(A[0])) -#endif -#define sprintf_s(A, B, C, D) sprintf((A), (C), (D)) -#define strncpy_s(A, B, C, D) strncpy((A), (C), (D)) -#define fopen_s(A, B, C) ( *(A) = fopen((B), (C)), 0 ) -#define _splitpath_s(A, B, C, D, E, F, G, H, I) (_splitpath((A), (B), (D), (F), (H)), 0) -#define _makepath_s(A, B, C, D, E, F) (_makepath((A), (C), (D), (E), (F)), 0) -#define _mktemp_s(A, B) (_mktemp((A)), 0) -#endif // VC2003 -#endif // _MSC_VER - -int usage() -{ - // MakefileMake -file= -dir=<トップディレクトリ>\n - // 内ののオブジェクトファイル名を - // トップディレクトリ配下のcppファイル名を - // オブジェクトファイル名にした物に書替えます。\n - - printf( - "Usage: MakefileMake -file= -dir=\n" - "\n" - " MakefileMake replaces .o file lines in the by .cpp file names in the .\n" - "\n" - " NOTICE: will be overwritten by MakefileMake.\n" - ); - - return 1; -} - -enum exp_type { - EXP_SRC, - EXP_DIR, -}; - -struct SExpList { - char* exp; - exp_type type; -} s_exp_list[] = { - {".cpp", EXP_SRC }, - {".c", EXP_SRC }, - {"", EXP_DIR }, - {".rc", EXP_SRC }, -}; - -std::vector file_list; // filename_list - -// ファイルリストを作成する -int makeFileList(std::string top_dir, std::string dir, SExpList sexp) -{ - std::string path; - std::string fl_nm; - HANDLE hFind; - WIN32_FIND_DATAA ffData; - - path = top_dir + "/" + dir; - if (dir != "") { - path += "/"; - } - path = path + "*" + sexp.exp; - - hFind = ::FindFirstFileA(path.c_str(), &ffData); - if (hFind != INVALID_HANDLE_VALUE) { - do { - if (sexp.type == EXP_DIR) { - // search subdirectory - if ((ffData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && - (strcmp(ffData.cFileName, ".") != 0 && strcmp(ffData.cFileName, "..") != 0)) { - - fl_nm = ffData.cFileName; - if (dir != "") { - fl_nm = dir + "/" + fl_nm; - } - - // search subdirectory - int res; - for (int i = 0; i < _countof(s_exp_list); i++) { - if ((res = makeFileList(top_dir, fl_nm, s_exp_list[i])) != 0) { - ::FindClose(hFind); - return res; - } - } - } - } - else { - std::string fl_nm; - - fl_nm = ffData.cFileName; - fl_nm.resize(fl_nm.size() - strlen(sexp.exp)); // 拡張子削除 - if (dir != "") { - fl_nm = dir + "/" + fl_nm; - } - - //add to list - file_list.push_back( fl_nm ); - } - } while(::FindNextFileA(hFind, &ffData)); - ::FindClose(hFind); - } - return 0; -} - -// ファイルリストを作成する(top level) -int makeFileListTop(const char* top_dir) -{ - int res; - - for (int i = 0; i < _countof(s_exp_list); i++) { - if ((res = makeFileList(top_dir, "", s_exp_list[i])) != 0) - return res; - } - return 0; -} - -// ファイルを一つずつ取り出す -// 最後はNULLを返す -const char* getFile() -{ - static int pt; - static std::string r_str; - - if (pt >= (int)file_list.size()) { - return NULL; - } - - r_str = file_list[pt]; - pt++; - - return r_str.c_str(); -} - -// オブジェクト行1行作成 -const char* makeObjLine(char* mkline, size_t bf_sz, const char* fl_nm) -{ - sprintf_s( mkline, bf_sz, "%s.o \\\n", fl_nm); - return mkline; -} - -// main関数 -int main(int argc, char* argv[]) -{ - // 引数解釈 - const char* makefile = NULL; - const char* top_dir = NULL; - - for (int i=1; i < argc; i++) { - char* p = argv[i]; - if (*p == '/' || *p =='-') { - p++; - if (_strnicmp(p,"file",4) == 0) { - p += 4; - if (*p == '\0') { - if (i < argc) { - makefile = argv[++i]; - } - } - else { - if (*p == '=') p++; - makefile = p; - } - } - else if (_strnicmp(p,"dir",3) == 0) { - p += 3; - if (*p == '\0') { - if (i < argc) { - top_dir = argv[++i]; - } - } - else { - if (*p == '=') p++; - top_dir = p; - } - } - else { - // Error: 不明な引数[%s] - printf("Error: Unknown argument[%s]\n", argv[i]); - return usage(); - } - } - else { - // 不明な引数[%s] - printf("Error: Unknown argument[%s]\n", argv[i]); - return usage(); - } - } - if (makefile == NULL && top_dir != NULL) { return usage(); } - if (!makefile) { printf("Error: Specify \n\n"); return usage(); } // makefileを指定してください - if (!top_dir) { printf("Error: Specify \n\n"); return usage(); } // トップディレクトリを指定してください - - // 開始メッセージ - printf("\nSTART MakefileMake.\n"); - printf("CMDLINE: "); - for (int i = 0; i < argc; i++) { - printf("%s ", argv[i]); - } - printf("\n\n"); - - // トップディレクトリのチェック - struct stat st; - int ret = stat( top_dir, &st ); - if (ret != 0 || !(st.st_mode & _S_IFDIR)) { - // Error: トップディレクトリ[%s]が見つかりません - printf("Error: Failed to stat TopDirectory[%s].\n", top_dir); - return 1; - } - - // ファイルオープン - FILE* in = NULL; - if (fopen_s(&in, makefile, "rt") != 0) { - // Error: 出力ファイル[%s]を開けません - printf("Error: Failed to open Makefile[%s] with read mode.\n", makefile); - return 1; - } - - // テンポラリファイルの作成 - char tmp_file[_MAX_PATH]; - char drive[_MAX_DRIVE], dir[_MAX_DIR]; - if (_splitpath_s( makefile, drive, _countof(drive), dir, _countof(dir), NULL, 0, NULL, 0 )) { - // Error: 一時ファイル名を作れません[%s] - printf("Error: Failed to generate temporary file path. [makefile:%s]\n", makefile); - return 1; - } - if (_makepath_s( tmp_file, _countof(tmp_file), drive, dir, "mfXXXXXX", NULL )) { - // Error: 一時ファイル名を作れません[%s, %s] - printf("Error: Failed to generate temporary file path. [drive:%s, dir:%s]\n", drive, dir); - return 1; - } - if (_mktemp_s(tmp_file, _countof(tmp_file))) { - // Error: 一時ファイル名を作れません[%s] - printf("Error: Failed to generate temporary file path. [tmp_file:%s]\n", tmp_file); - return 1; - } - FILE* out = NULL; - if (fopen_s(&out, tmp_file, "wt") != 0) { - // Error: 一時ファイル[%s]を開けません - printf("Error: Failed to open Tmpfile[%s] with write mode.\n", tmp_file); - return 1; - } - - // ファイルリストの作成 - makeFileListTop(top_dir); - - // ファイルの書替え - int mode = 0; // 0:.obj前 1:.obj中 2:.obj後 - bool change = false; // 変更あり - - char line[1024]; - char mkline[1024]; - char* wtline; - const char* fl_nm; - - while (fgets(line, _countof(line), in) != NULL) { - wtline = line; - switch (mode) { - case 0: - if (strstr(line, "OBJS")) { - mode = 1; - } - break; - case 1: - if (line[0] == '\n' || line[0] == '\0') { - // リスト終了? - fl_nm = getFile(); - if (fl_nm != NULL) { - // ファイルが増えた - change = true; - do { - //出力 - fprintf(out, "%s", makeObjLine( mkline, _countof(mkline), fl_nm ) ); - } while ((fl_nm = getFile()) != NULL); - } - mode = 2; - } - else { - fl_nm = getFile(); - if (fl_nm == NULL) { - // ファイルが減った - change = true; - continue; - } - makeObjLine( mkline, _countof(mkline), fl_nm ); - // 変更有りか? - if (!change && strcmp(line, mkline) != 0) - change = true; - wtline = mkline; - } - break; - case 2: - break; - } - //出力 - fprintf(out,"%s", wtline); - } - - // close - fclose(in); - fclose(out); -#ifdef _DEBUG - // %d個のオブジェクトファイル名が出力されました - printf("... Wrote %Id object file lines to tmpfile[%s].\n", file_list.size(), tmp_file); -#endif - - // ファイルの入換え - if (change) { - if (remove(makefile)) { - // Error: makefile[%s]を削除出来ません - printf("Error: Failed to remove Makefile[%s].\n", makefile); - return 1; - } - if (rename( tmp_file, makefile )) { - // Error: 一時ファイル[%s]をmakfile[%s]に出来ません - printf("Error: Failed to rename Tmpfile[%s] to Makefile[%s].\n", tmp_file, makefile); - return 1; - } - } - else { - if (remove(tmp_file)) { - // Warning: 一時ファイル[%s]を削除出来ません - printf("Warning: Failed to remove Tmpfile[%s].\n", tmp_file); - } - - // 出力ファイルは最新です - printf("Makefile needs no change.\n"); - } - - // 終了メッセージ - printf("\nEND MakefileMake.\n\n"); - - return 0; -} diff --git a/MakefileMake/MakefileMake.vcxproj b/MakefileMake/MakefileMake.vcxproj deleted file mode 100644 index 5cd854118e..0000000000 --- a/MakefileMake/MakefileMake.vcxproj +++ /dev/null @@ -1,97 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - {40735439-B12B-40AC-92F7-F1183D8B6862} - MakefileMake - Win32Proj - - - - - Application - Unicode - true - - - Application - Unicode - - - - - - - - - - - - - <_ProjectFileVersion>15.0.27130.2020 - - - $(SolutionDir)$(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - - - $(SolutionDir)$(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_CONSOLE;_DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - - Level3 - EditAndContinue - /source-charset:shift_jis %(AdditionalOptions) - true - - - $(OutDir)$(TargetName)$(TargetExt) - true - Console - MachineX86 - false - - - - - WIN32;_CONSOLE;NDEBUG;%(PreprocessorDefinitions) - MultiThreadedDLL - - Level3 - ProgramDatabase - /source-charset:shift_jis %(AdditionalOptions) - true - - - $(OutDir)$(TargetName)$(TargetExt) - false - Console - true - true - MachineX86 - - - - - - - - - \ No newline at end of file diff --git a/sakura.sln b/sakura.sln index e5bc2f7aeb..30f81c7aa7 100644 --- a/sakura.sln +++ b/sakura.sln @@ -6,8 +6,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sakura", "sakura\sakura.vcx EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HeaderMake", "HeaderMake\HeaderMake.vcxproj", "{0F2918B0-23E3-42E8-A1A8-8739F726A23E}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MakefileMake", "MakefileMake\MakefileMake.vcxproj", "{40735439-B12B-40AC-92F7-F1183D8B6862}" -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sakura_lang_en_US", "sakura_lang_en_US\sakura_lang_en_US.vcxproj", "{7A6D0F29-E560-4985-835B-5F92A08EB242}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tests1", "tests\unittests\tests1.vcxproj", "{701E3407-EC27-49F7-ADC7-520CF2B4B438}" @@ -36,14 +34,6 @@ Global {0F2918B0-23E3-42E8-A1A8-8739F726A23E}.Release|Win32.Build.0 = Release|Win32 {0F2918B0-23E3-42E8-A1A8-8739F726A23E}.Release|x64.ActiveCfg = Release|Win32 {0F2918B0-23E3-42E8-A1A8-8739F726A23E}.Release|x64.Build.0 = Release|Win32 - {40735439-B12B-40AC-92F7-F1183D8B6862}.Debug|Win32.ActiveCfg = Debug|Win32 - {40735439-B12B-40AC-92F7-F1183D8B6862}.Debug|Win32.Build.0 = Debug|Win32 - {40735439-B12B-40AC-92F7-F1183D8B6862}.Debug|x64.ActiveCfg = Debug|Win32 - {40735439-B12B-40AC-92F7-F1183D8B6862}.Debug|x64.Build.0 = Debug|Win32 - {40735439-B12B-40AC-92F7-F1183D8B6862}.Release|Win32.ActiveCfg = Release|Win32 - {40735439-B12B-40AC-92F7-F1183D8B6862}.Release|Win32.Build.0 = Release|Win32 - {40735439-B12B-40AC-92F7-F1183D8B6862}.Release|x64.ActiveCfg = Release|Win32 - {40735439-B12B-40AC-92F7-F1183D8B6862}.Release|x64.Build.0 = Release|Win32 {7A6D0F29-E560-4985-835B-5F92A08EB242}.Debug|Win32.ActiveCfg = Debug|Win32 {7A6D0F29-E560-4985-835B-5F92A08EB242}.Debug|Win32.Build.0 = Debug|Win32 {7A6D0F29-E560-4985-835B-5F92A08EB242}.Debug|x64.ActiveCfg = Debug|x64 diff --git a/sakura/gen-makefile.bat b/sakura/gen-makefile.bat deleted file mode 100644 index 1b0725df31..0000000000 --- a/sakura/gen-makefile.bat +++ /dev/null @@ -1,14 +0,0 @@ -@echo off - -SETLOCAL - -set EXEDIR=%1 -set MAKEFILEDIR=%2 -set TOPDIR=%MAKEFILEDIR% - -set EXE_MAKEFILEMAKE=MakefileMake -set MAKEFILEMAKE=%EXEDIR%\%EXE_MAKEFILEMAKE% - -@echo. -@echo ---- MakefileMake ---- -%MAKEFILEMAKE% -file=%MAKEFILEDIR%\Makefile -dir=%TOPDIR% diff --git a/sakura/mingw32-del.bat b/sakura/mingw32-del.bat deleted file mode 100644 index 47b5c4b20c..0000000000 --- a/sakura/mingw32-del.bat +++ /dev/null @@ -1,21 +0,0 @@ -@echo off - -SETLOCAL - -set OUTFILES=%* -set OUTFILES=%OUTFILES:/=\% - - -:del_file -for /F "tokens=1,*" %%f in ("%OUTFILES%") DO ( - if exist %%f del /F /Q %%f - set OUTFILES=%%g -) - -if "%OUTFILES%" == "" goto :END -goto :del_file - - -:END -ENDLOCAL -exit /b diff --git a/sakura/preBuild.bat b/sakura/preBuild.bat index 1c08cd686a..c72fadec93 100755 --- a/sakura/preBuild.bat +++ b/sakura/preBuild.bat @@ -8,5 +8,3 @@ set SRCDIR=..\sakura_core @echo ======================= @echo preBuild @echo ======================= - -call gen-makefile.bat %EXEDIR% %SRCDIR% diff --git a/sakura/sakura.vcxproj b/sakura/sakura.vcxproj index 4a962cbf47..aea8837789 100644 --- a/sakura/sakura.vcxproj +++ b/sakura/sakura.vcxproj @@ -1006,12 +1006,6 @@ - - - {40735439-b12b-40ac-92f7-f1183d8b6862} - false - - From e0550956d50bac74ef8070ab726c1cbe6f449829 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 4 Sep 2020 00:57:20 +0900 Subject: [PATCH 0080/1024] fix dependency of sakura_rc.o --- sakura_core/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sakura_core/Makefile b/sakura_core/Makefile index 909a36b84c..1f0fc3e19d 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -93,7 +93,7 @@ exe= $(or $(OUTDIR),.)/sakura.exe SRCS = $(wildcard $(SRCDIR)/*.cpp) \ $(wildcard $(SRCDIR)/*/*.cpp) \ $(wildcard $(SRCDIR)/*/*/*.cpp) -OBJS = $(SRCS:$(SRCDIR)/%.cpp=%.o) sakura_rc.o +OBJS = $(SRCS:$(SRCDIR)/%.cpp=%.o) _DIRS = $(filter %/, $(wildcard $(SRCDIR)/*/)) \ $(filter %/, $(wildcard $(SRCDIR)/*/*/)) @@ -111,8 +111,8 @@ HEADERMAKE= $(or $(OUTDIR),$(HEADERMAKETOOLDIR))/HeaderMake.exe all: $(exe) -$(exe): $(OBJS) - $(CXX) -o $@ $(OBJS) $(LIBS) +$(exe): $(OBJS) sakura_rc.o + $(CXX) -o $@ $(OBJS) sakura_rc.o $(LIBS) Funccode_define.h: Funccode_x.hsrc $(HEADERMAKE) $(HEADERMAKE) -in=$< -out=$@ -mode=define From 9a4da81ea24faf056e73ffce2b45e640146b65a0 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 4 Sep 2020 12:11:28 +0900 Subject: [PATCH 0081/1024] swap default SAKURA_CORE --- sakura_lang_en_US/Makefile | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/sakura_lang_en_US/Makefile b/sakura_lang_en_US/Makefile index c13d158795..3f7bdd184f 100644 --- a/sakura_lang_en_US/Makefile +++ b/sakura_lang_en_US/Makefile @@ -2,14 +2,14 @@ # Example usages: # Out-of-source build: -# $ mkdir -p build/MinGW/Release/sakura_lang_en_US/ -# $ cd build/MinGW/Release/sakura_lang_en_US -# $ mingw32-make -f ../../../../sakura_lang_en_US/Makefile OUTDIR=.. -j4 -# -# Out-of-source build (alternate style): # $ mkdir -p build/MinGW/Release/ # $ cd build/MinGW/Release -# $ mingw32-make -f ../../../sakura_lang_en_US/Makefile SAKURA_CORE=. OUTDIR=. -j4 +# $ mingw32-make -f ../../../sakura_lang_en_US/Makefile OUTDIR=. -j4 +# +# Out-of-source build (alternate style): +# $ mkdir -p build/MinGW/Release/sakura_lang_en_US/ +# $ cd build/MinGW/Release/sakura_lang_en_US +# $ mingw32-make -f ../../../../sakura_lang_en_US/Makefile SAKURA_CORE=../sakura_core OUTDIR=.. -j4 # # Debug build: # $ cd sakura_lang_en_US @@ -25,7 +25,7 @@ VPATH = $(patsubst %\,%,$(SRCDIR)) endif # Path of "sakura_core" directory. -SAKURA_CORE = ../sakura_core +SAKURA_CORE = . # The directory where the .dll files will be output. # If empty, it will be output to the default directory. From 6bc2c3116c8947997d64f35cc4d50a71f278c116 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 4 Sep 2020 16:39:38 +0900 Subject: [PATCH 0082/1024] Revert "swap default SAKURA_CORE" This reverts commit 9a4da81ea24faf056e73ffce2b45e640146b65a0. --- sakura_lang_en_US/Makefile | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/sakura_lang_en_US/Makefile b/sakura_lang_en_US/Makefile index 3f7bdd184f..c13d158795 100644 --- a/sakura_lang_en_US/Makefile +++ b/sakura_lang_en_US/Makefile @@ -2,14 +2,14 @@ # Example usages: # Out-of-source build: -# $ mkdir -p build/MinGW/Release/ -# $ cd build/MinGW/Release -# $ mingw32-make -f ../../../sakura_lang_en_US/Makefile OUTDIR=. -j4 -# -# Out-of-source build (alternate style): # $ mkdir -p build/MinGW/Release/sakura_lang_en_US/ # $ cd build/MinGW/Release/sakura_lang_en_US -# $ mingw32-make -f ../../../../sakura_lang_en_US/Makefile SAKURA_CORE=../sakura_core OUTDIR=.. -j4 +# $ mingw32-make -f ../../../../sakura_lang_en_US/Makefile OUTDIR=.. -j4 +# +# Out-of-source build (alternate style): +# $ mkdir -p build/MinGW/Release/ +# $ cd build/MinGW/Release +# $ mingw32-make -f ../../../sakura_lang_en_US/Makefile SAKURA_CORE=. OUTDIR=. -j4 # # Debug build: # $ cd sakura_lang_en_US @@ -25,7 +25,7 @@ VPATH = $(patsubst %\,%,$(SRCDIR)) endif # Path of "sakura_core" directory. -SAKURA_CORE = . +SAKURA_CORE = ../sakura_core # The directory where the .dll files will be output. # If empty, it will be output to the default directory. From deb3c7c9a85be3bb092689dd49b02acfc42b441f Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 4 Sep 2020 16:44:26 +0900 Subject: [PATCH 0083/1024] fix comment --- sakura_lang_en_US/Makefile | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sakura_lang_en_US/Makefile b/sakura_lang_en_US/Makefile index c13d158795..5342a1d2c8 100644 --- a/sakura_lang_en_US/Makefile +++ b/sakura_lang_en_US/Makefile @@ -2,15 +2,15 @@ # Example usages: # Out-of-source build: -# $ mkdir -p build/MinGW/Release/sakura_lang_en_US/ -# $ cd build/MinGW/Release/sakura_lang_en_US -# $ mingw32-make -f ../../../../sakura_lang_en_US/Makefile OUTDIR=.. -j4 -# -# Out-of-source build (alternate style): # $ mkdir -p build/MinGW/Release/ # $ cd build/MinGW/Release # $ mingw32-make -f ../../../sakura_lang_en_US/Makefile SAKURA_CORE=. OUTDIR=. -j4 # +# Out-of-source build (alternate style): +# $ mkdir -p build/MinGW/Release/sakura_lang_en_US/ +# $ cd build/MinGW/Release/sakura_lang_en_US +# $ mingw32-make -f ../../../../sakura_lang_en_US/Makefile OUTDIR=.. -j4 +# # Debug build: # $ cd sakura_lang_en_US # $ mingw32-make MYDEFINES="_DEBUG" -j4 @@ -24,7 +24,7 @@ ifneq ($(SRCDIR),.) VPATH = $(patsubst %\,%,$(SRCDIR)) endif -# Path of "sakura_core" directory. +# The directory where "sakura_core" is built. SAKURA_CORE = ../sakura_core # The directory where the .dll files will be output. From 10fa5946293d03462f54a15867657025156e9fe8 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 4 Sep 2020 18:11:33 +0900 Subject: [PATCH 0084/1024] fix comment --- sakura_lang_en_US/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sakura_lang_en_US/Makefile b/sakura_lang_en_US/Makefile index 5342a1d2c8..0532243ba7 100644 --- a/sakura_lang_en_US/Makefile +++ b/sakura_lang_en_US/Makefile @@ -1,12 +1,12 @@ # Makefile for MinGW32/MinGW-W64 # Example usages: -# Out-of-source build: +# Out-of-source build (build in the same directory as sakura_core): # $ mkdir -p build/MinGW/Release/ # $ cd build/MinGW/Release # $ mingw32-make -f ../../../sakura_lang_en_US/Makefile SAKURA_CORE=. OUTDIR=. -j4 # -# Out-of-source build (alternate style): +# Out-of-source build (create sakura_lang_en_US and sakura_core in a common directory): # $ mkdir -p build/MinGW/Release/sakura_lang_en_US/ # $ cd build/MinGW/Release/sakura_lang_en_US # $ mingw32-make -f ../../../../sakura_lang_en_US/Makefile OUTDIR=.. -j4 From 2274b1a89e09599ba2e9ffe3179cb800d1c19ce0 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 4 Sep 2020 20:05:20 +0900 Subject: [PATCH 0085/1024] rename LIBS to LDFLAGS --- sakura_lang_en_US/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sakura_lang_en_US/Makefile b/sakura_lang_en_US/Makefile index 0532243ba7..a7c321d0d2 100644 --- a/sakura_lang_en_US/Makefile +++ b/sakura_lang_en_US/Makefile @@ -73,7 +73,7 @@ DEFINES= \ -D_UNICODE \ -DUNICODE \ $(addprefix -D,$(MYDEFINES)) -LIBS= \ +LDFLAGS= \ -static \ -shared \ -mwindows \ @@ -88,7 +88,7 @@ OBJS = $(SRCS:$(SRCDIR)/%.rc=%.o) all: $(dll) $(dll): $(OBJS) - $(CC) $(OBJS) $(LIBS) -o $@ + $(CC) $(OBJS) $(LDFLAGS) -o $@ $(sakura_rc): ../sakura_core/Makefile ifneq ($(SAKURA_CORE),.) From e12e4105e4065fff2a1a1148e3d24b6cb883aa86 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 5 Sep 2020 15:02:51 +0900 Subject: [PATCH 0086/1024] =?UTF-8?q?=E8=A8=80=E8=AA=9EDLL=E3=81=AEMakefil?= =?UTF-8?q?e=E3=81=AEMYDEFINES=E3=81=AE=E6=8C=87=E5=AE=9A=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E3=82=92=E3=82=B7=E3=83=B3=E3=83=97=E3=83=AB=E3=81=AB?= =?UTF-8?q?=E6=88=BB=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_lang_en_US/Makefile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sakura_lang_en_US/Makefile b/sakura_lang_en_US/Makefile index a7c321d0d2..3b6788e586 100644 --- a/sakura_lang_en_US/Makefile +++ b/sakura_lang_en_US/Makefile @@ -13,7 +13,7 @@ # # Debug build: # $ cd sakura_lang_en_US -# $ mingw32-make MYDEFINES="_DEBUG" -j4 +# $ mingw32-make MYDEFINES="-D_DEBUG" -j4 # Path of "sakura_lang_en_US" directory. Compute it from the path of Makefile. SRCDIR = $(patsubst %/,%,$(subst \,/,$(dir $(firstword $(MAKEFILE_LIST))))) @@ -61,10 +61,10 @@ endif CC= $(PREFIX)gcc RC= $(RCPREFIX)windres -ifeq (_DEBUG,$(findstring _DEBUG,$(MYDEFINES))) -else ifeq (NDEBUG,$(findstring NDEBUG,$(MYDEFINES))) +ifeq (-D_DEBUG,$(findstring -D_DEBUG,$(MYDEFINES))) +else ifeq (-DNDEBUG,$(findstring -DNDEBUG,$(MYDEFINES))) else -MYDEFINES += NDEBUG +MYDEFINES += -DNDEBUG endif DEFINES= \ @@ -72,7 +72,7 @@ DEFINES= \ -D_WIN32_WINNT=_WIN32_WINNT_WIN7 \ -D_UNICODE \ -DUNICODE \ - $(addprefix -D,$(MYDEFINES)) + $(MYDEFINES) LDFLAGS= \ -static \ -shared \ From 0523902b40d76f41f0c9d7a62f5a6c832d3e5e0e Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 5 Sep 2020 21:15:40 +0900 Subject: [PATCH 0087/1024] =?UTF-8?q?MYDEFINES=E3=81=AB-DNDEBUG=E3=81=8C?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E3=81=95=E3=82=8C=E3=81=A6=E3=81=AA=E3=81=84?= =?UTF-8?q?=E5=AF=BE=E7=AD=96=E3=81=AE=E6=94=B9=E8=89=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/Makefile | 7 +++++++ sakura_lang_en_US/Makefile | 13 +++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/sakura_core/Makefile b/sakura_core/Makefile index 1f0fc3e19d..03a84050ab 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -60,6 +60,13 @@ DEFINES= \ -D_UNICODE \ -DUNICODE \ $(MYDEFINES) + +ifeq (,$(findstring -D_DEBUG,$(DEFINES))) +ifeq (,$(findstring -DNDEBUG,$(DEFINES))) +DEFINES += -DNDEBUG +endif +endif + CFLAGS= \ -finput-charset=utf-8 \ -fexec-charset=cp932 \ diff --git a/sakura_lang_en_US/Makefile b/sakura_lang_en_US/Makefile index 3b6788e586..817a730586 100644 --- a/sakura_lang_en_US/Makefile +++ b/sakura_lang_en_US/Makefile @@ -61,18 +61,19 @@ endif CC= $(PREFIX)gcc RC= $(RCPREFIX)windres -ifeq (-D_DEBUG,$(findstring -D_DEBUG,$(MYDEFINES))) -else ifeq (-DNDEBUG,$(findstring -DNDEBUG,$(MYDEFINES))) -else -MYDEFINES += -DNDEBUG -endif - DEFINES= \ -DWIN32 \ -D_WIN32_WINNT=_WIN32_WINNT_WIN7 \ -D_UNICODE \ -DUNICODE \ $(MYDEFINES) + +ifeq (,$(findstring -D_DEBUG,$(DEFINES))) +ifeq (,$(findstring -DNDEBUG,$(DEFINES))) +DEFINES += -DNDEBUG +endif +endif + LDFLAGS= \ -static \ -shared \ From 685c9e694ae375a58f1756a4034329a3d28fa835 Mon Sep 17 00:00:00 2001 From: Katsuhisa Yuasa Date: Sat, 13 Jun 2020 15:08:36 +0900 Subject: [PATCH 0088/1024] =?UTF-8?q?PageUp,=20PageDown=20=E6=99=82?= =?UTF-8?q?=E3=81=AB=E6=8F=8F=E7=94=BB=E3=81=99=E3=82=8B=E5=BF=85=E8=A6=81?= =?UTF-8?q?=E3=81=8C=E7=84=A1=E3=81=84=E5=A0=B4=E5=90=88=E3=81=AF=E6=8F=8F?= =?UTF-8?q?=E7=94=BB=E3=81=97=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=E3=81=99=E3=82=8B=E5=88=A4=E5=AE=9A=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CViewCommander::Command_1PageUp と CViewCommander::Command_1PageDown で、キャレットの更新前後の位置が変化が無く、スクロール量も 0 の場合は CEditView::RedrawAll の呼び出しを行わないようにする --- sakura_core/cmd/CViewCommander_Cursor.cpp | 26 +++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/sakura_core/cmd/CViewCommander_Cursor.cpp b/sakura_core/cmd/CViewCommander_Cursor.cpp index e52ec2f1dc..92bdbd857b 100644 --- a/sakura_core/cmd/CViewCommander_Cursor.cpp +++ b/sakura_core/cmd/CViewCommander_Cursor.cpp @@ -735,16 +735,23 @@ void CViewCommander::Command_1PageUp( bool bSelect, CLayoutYInt nScrollNum ) // 2001.12.03 hor // メモ帳ライクに、画面に対するカーソル位置はそのままで1ページアップ { - const bool bDrawSwitchOld = m_pCommanderView->SetDrawSwitch(false); CLayoutInt nViewTopLine = m_pCommanderView->GetTextArea().GetViewTopLine(); + const bool bDrawSwitchOld = m_pCommanderView->SetDrawSwitch(false); if( nScrollNum <= 0 ){ nScrollNum = m_pCommanderView->GetTextArea().m_nViewRowNum - 1; } - GetCaret().Cursor_UPDOWN( -nScrollNum, bSelect ); + auto& caret = GetCaret(); + auto prevCaretPos = caret.GetCaretLayoutPos(); + caret.Cursor_UPDOWN( -nScrollNum, bSelect ); + auto currCaretPos = caret.GetCaretLayoutPos(); // Sep. 11, 2004 genta 同期スクロール処理のため // m_pCommanderView->RedrawAllではなくScrollAtを使うように - m_pCommanderView->SyncScrollV( m_pCommanderView->ScrollAtV( nViewTopLine - nScrollNum )); + CLayoutInt nScrolled = m_pCommanderView->ScrollAtV( nViewTopLine - nScrollNum ); + m_pCommanderView->SyncScrollV(nScrolled); m_pCommanderView->SetDrawSwitch(bDrawSwitchOld); + if (prevCaretPos == currCaretPos && nScrolled == 0) { + return; + } m_pCommanderView->RedrawAll(); } return; @@ -764,16 +771,23 @@ void CViewCommander::Command_1PageDown( bool bSelect, CLayoutYInt nScrollNum ) // 2001.12.03 hor // メモ帳ライクに、画面に対するカーソル位置はそのままで1ページダウン { - const bool bDrawSwitchOld = m_pCommanderView->SetDrawSwitch(false); CLayoutInt nViewTopLine = m_pCommanderView->GetTextArea().GetViewTopLine(); + const bool bDrawSwitchOld = m_pCommanderView->SetDrawSwitch(false); if( nScrollNum <= 0 ){ nScrollNum = m_pCommanderView->GetTextArea().m_nViewRowNum - 1; } - GetCaret().Cursor_UPDOWN( nScrollNum, bSelect ); + auto& caret = GetCaret(); + auto prevCaretPos = caret.GetCaretLayoutPos(); + caret.Cursor_UPDOWN( nScrollNum, bSelect ); + auto currCaretPos = caret.GetCaretLayoutPos(); // Sep. 11, 2004 genta 同期スクロール処理のため // m_pCommanderView->RedrawAllではなくScrollAtを使うように - m_pCommanderView->SyncScrollV( m_pCommanderView->ScrollAtV( nViewTopLine + nScrollNum )); + CLayoutInt nScrolled = m_pCommanderView->ScrollAtV( nViewTopLine + nScrollNum ); + m_pCommanderView->SyncScrollV(nScrolled); m_pCommanderView->SetDrawSwitch(bDrawSwitchOld); + if (prevCaretPos == currCaretPos && nScrolled == 0) { + return; + } m_pCommanderView->RedrawAll(); } From 60e290ffb612b3b797aff60b5cb433f98da7b9cc Mon Sep 17 00:00:00 2001 From: Katsuhisa Yuasa Date: Sun, 6 Sep 2020 04:09:31 +0900 Subject: [PATCH 0089/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/cmd/CViewCommander_Cursor.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/sakura_core/cmd/CViewCommander_Cursor.cpp b/sakura_core/cmd/CViewCommander_Cursor.cpp index 92bdbd857b..6f8db321bd 100644 --- a/sakura_core/cmd/CViewCommander_Cursor.cpp +++ b/sakura_core/cmd/CViewCommander_Cursor.cpp @@ -735,8 +735,8 @@ void CViewCommander::Command_1PageUp( bool bSelect, CLayoutYInt nScrollNum ) // 2001.12.03 hor // メモ帳ライクに、画面に対するカーソル位置はそのままで1ページアップ { - CLayoutInt nViewTopLine = m_pCommanderView->GetTextArea().GetViewTopLine(); const bool bDrawSwitchOld = m_pCommanderView->SetDrawSwitch(false); + CLayoutInt nViewTopLine = m_pCommanderView->GetTextArea().GetViewTopLine(); if( nScrollNum <= 0 ){ nScrollNum = m_pCommanderView->GetTextArea().m_nViewRowNum - 1; } @@ -744,11 +744,10 @@ void CViewCommander::Command_1PageUp( bool bSelect, CLayoutYInt nScrollNum ) auto prevCaretPos = caret.GetCaretLayoutPos(); caret.Cursor_UPDOWN( -nScrollNum, bSelect ); auto currCaretPos = caret.GetCaretLayoutPos(); - // Sep. 11, 2004 genta 同期スクロール処理のため - // m_pCommanderView->RedrawAllではなくScrollAtを使うように CLayoutInt nScrolled = m_pCommanderView->ScrollAtV( nViewTopLine - nScrollNum ); m_pCommanderView->SyncScrollV(nScrolled); m_pCommanderView->SetDrawSwitch(bDrawSwitchOld); + // カーソル位置が変化しなかった、かつ、スクロール行数が0だった場合、描画を省く if (prevCaretPos == currCaretPos && nScrolled == 0) { return; } @@ -771,8 +770,8 @@ void CViewCommander::Command_1PageDown( bool bSelect, CLayoutYInt nScrollNum ) // 2001.12.03 hor // メモ帳ライクに、画面に対するカーソル位置はそのままで1ページダウン { - CLayoutInt nViewTopLine = m_pCommanderView->GetTextArea().GetViewTopLine(); const bool bDrawSwitchOld = m_pCommanderView->SetDrawSwitch(false); + CLayoutInt nViewTopLine = m_pCommanderView->GetTextArea().GetViewTopLine(); if( nScrollNum <= 0 ){ nScrollNum = m_pCommanderView->GetTextArea().m_nViewRowNum - 1; } @@ -780,11 +779,10 @@ void CViewCommander::Command_1PageDown( bool bSelect, CLayoutYInt nScrollNum ) auto prevCaretPos = caret.GetCaretLayoutPos(); caret.Cursor_UPDOWN( nScrollNum, bSelect ); auto currCaretPos = caret.GetCaretLayoutPos(); - // Sep. 11, 2004 genta 同期スクロール処理のため - // m_pCommanderView->RedrawAllではなくScrollAtを使うように CLayoutInt nScrolled = m_pCommanderView->ScrollAtV( nViewTopLine + nScrollNum ); m_pCommanderView->SyncScrollV(nScrolled); m_pCommanderView->SetDrawSwitch(bDrawSwitchOld); + // カーソル位置が変化しなかった、かつ、スクロール行数が0だった場合、描画を省く if (prevCaretPos == currCaretPos && nScrolled == 0) { return; } From 7b2b130e64675d107dad28e9d8dc62d3603d6868 Mon Sep 17 00:00:00 2001 From: Katsuhisa Yuasa Date: Mon, 7 Sep 2020 07:09:32 +0900 Subject: [PATCH 0090/1024] =?UTF-8?q?=E7=94=BB=E9=9D=A2=E5=85=88=E9=A0=AD?= =?UTF-8?q?=E8=A1=8C=E3=82=92=E5=8F=96=E5=BE=97=E3=81=99=E3=82=8B=E3=83=9E?= =?UTF-8?q?=E3=82=AF=E3=83=AD=E9=96=A2=E6=95=B0=20GetViewTop=20=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- help/sakura/res/HLP000268.html | 10 +++++++++- sakura_core/Funccode_x.hsrc | 2 +- sakura_core/macro/CMacro.cpp | 6 ++++++ sakura_core/macro/CSMacroMgr.cpp | 1 + 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/help/sakura/res/HLP000268.html b/help/sakura/res/HLP000268.html index 920fe20fe0..7e58dbb427 100644 --- a/help/sakura/res/HLP000268.html +++ b/help/sakura/res/HLP000268.html @@ -75,6 +75,7 @@ + @@ -167,6 +168,7 @@

    マクロ専用関数/変数

    GetViewLines() :Integer
    GetViewColumns() :Integer
    CreateMenu( int1 :Integer, str2 :String ) :Integer
    +・GetViewTop() :Integer

    ■ function GetFilename(): String; []
    @@ -1095,5 +1097,11 @@

    マクロ専用関数/変数

    sakura:2.2.0.0以降

    - +■ function GetViewTop() :Integer; []
    +
    +戻り値
    +画面に表示されている一番上の行のレイアウト行番号(1開始)を取得します。
    +
    +sakura:2.4.2.0以降
    +
    diff --git a/sakura_core/Funccode_x.hsrc b/sakura_core/Funccode_x.hsrc index 0a666a8c7d..43b8d3c440 100644 --- a/sakura_core/Funccode_x.hsrc +++ b/sakura_core/Funccode_x.hsrc @@ -578,7 +578,7 @@ F_ISTEXTSELECTINGLOCK = 40055, // 選択状態のロックを取得 F_GETVIEWLINES = 40056, // ビューの行数取得 F_GETVIEWCOLUMNS = 40057, // ビューの列数取得 F_CREATEMENU = 40058, // メニュー作成 - +F_GETVIEWTOP = 40059, // 画面に表示される一番上の行番号を取得 // = 2005,.01.10 genta ISearch用補助コード // 2007.07.07 genta 16bit以内に収めないと状況コードと衝突するのでコードを変更 diff --git a/sakura_core/macro/CMacro.cpp b/sakura_core/macro/CMacro.cpp index 8ff518726e..2a6c339496 100644 --- a/sakura_core/macro/CMacro.cpp +++ b/sakura_core/macro/CMacro.cpp @@ -2452,6 +2452,12 @@ bool CMacro::HandleFunction(CEditView *View, EFunctionCode ID, const VARIANT *Ar } return false; } + case F_GETVIEWTOP: + { + int nLine = (Int)View->GetTextArea().GetViewTopLine(); + Wrap( &Result )->Receive( nLine + 1 ); + return true; + } default: return false; } diff --git a/sakura_core/macro/CSMacroMgr.cpp b/sakura_core/macro/CSMacroMgr.cpp index 8dc1cc7d76..521b292645 100644 --- a/sakura_core/macro/CSMacroMgr.cpp +++ b/sakura_core/macro/CSMacroMgr.cpp @@ -475,6 +475,7 @@ MacroFuncInfo CSMacroMgr::m_MacroFuncInfoArr[] = {F_GETVIEWLINES, L"GetViewLines", {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_I4, NULL }, //ビューの行数取得 {F_GETVIEWCOLUMNS, L"GetViewColumns", {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_I4, NULL }, //ビューの列数取得 {F_CREATEMENU, L"CreateMenu", {VT_I4, VT_BSTR, VT_EMPTY, VT_EMPTY}, VT_I4, NULL }, //メニュー作成 + {F_GETVIEWTOP, L"GetViewTop", {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_I4, NULL }, //画面に表示される一番上の行番号を取得 // 終端 // Jun. 27, 2002 genta From 5702e4f57cc5d3d89e9bc91e4da6dca113f387dd Mon Sep 17 00:00:00 2001 From: Katsuhisa Yuasa Date: Tue, 8 Sep 2020 04:23:50 +0900 Subject: [PATCH 0091/1024] =?UTF-8?q?CImageListMgr::Create=20=E3=81=AB?= =?UTF-8?q?=E3=81=8A=E3=81=84=E3=81=A6=E8=AA=AD=E3=81=BF=E8=BE=BC=E3=82=93?= =?UTF-8?q?=E3=81=A0=E3=83=93=E3=83=83=E3=83=88=E3=83=9E=E3=83=83=E3=83=97?= =?UTF-8?q?=E3=81=AE=E5=BD=A2=E5=BC=8F=E3=82=92=2032bit=20=E3=81=AB?= =?UTF-8?q?=E5=A4=89=E6=8F=9B=E3=81=99=E3=82=8B=E5=87=A6=E7=90=86=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=20=E3=83=97=E3=83=A9=E3=82=B0=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E3=82=B3=E3=83=9E=E3=83=B3=E3=83=89=E7=94=A8=E3=82=A2?= =?UTF-8?q?=E3=82=A4=E3=82=B3=E3=83=B3=E7=94=BB=E5=83=8F=E3=81=AE=E8=A1=A8?= =?UTF-8?q?=E7=A4=BA=E8=89=B2=E3=81=8C=E3=83=84=E3=83=BC=E3=83=AB=E3=83=90?= =?UTF-8?q?=E3=83=BC=E3=82=A2=E3=82=A4=E3=82=B3=E3=83=B3=E3=81=AE=E3=83=91?= =?UTF-8?q?=E3=83=AC=E3=83=83=E3=83=88=E3=81=AB=E5=BD=B1=E9=9F=BF=E3=81=95?= =?UTF-8?q?=E3=82=8C=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E3=81=AB=E3=81=99?= =?UTF-8?q?=E3=82=8B=E7=82=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/uiparts/CImageListMgr.cpp | 52 +++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/sakura_core/uiparts/CImageListMgr.cpp b/sakura_core/uiparts/CImageListMgr.cpp index 076c7e259b..0664ce8c0e 100644 --- a/sakura_core/uiparts/CImageListMgr.cpp +++ b/sakura_core/uiparts/CImageListMgr.cpp @@ -85,6 +85,53 @@ CImageListMgr::~CImageListMgr() } } +static +HBITMAP ConvertTo32bppBMP(HBITMAP hbmpSrc) +{ + BITMAP bmp; + if (0 == GetObject(hbmpSrc, sizeof(BITMAP), &bmp )) { + return hbmpSrc; + } + if (bmp.bmBitsPixel == 32) { + return hbmpSrc; + } + BITMAPINFO bmi; + bmi.bmiHeader.biSize = sizeof(bmi.bmiHeader); + bmi.bmiHeader.biWidth = bmp.bmWidth; + bmi.bmiHeader.biHeight = bmp.bmHeight; + bmi.bmiHeader.biPlanes = bmp.bmPlanes; + bmi.bmiHeader.biBitCount = 32; + bmi.bmiHeader.biCompression = BI_RGB; + bmi.bmiHeader.biSizeImage = 0; + bmi.bmiHeader.biXPelsPerMeter = 0; + bmi.bmiHeader.biYPelsPerMeter = 0; + bmi.bmiHeader.biClrUsed = 0; + bmi.bmiHeader.biClrImportant = 0; + HBITMAP hdib = CreateDIBSection(NULL, &bmi, DIB_RGB_COLORS, NULL, NULL, 0); + if (hdib == NULL) { + return hbmpSrc; + } + HDC hdcSrc = CreateCompatibleDC(NULL); + if (!hdcSrc) { + DeleteObject(hdib); + return hbmpSrc; + } + HDC hdcDst = CreateCompatibleDC(NULL); + if (!hdcDst) { + DeleteDC(hdcSrc); + DeleteObject(hdib); + return hbmpSrc; + } + SelectObject(hdcSrc, hbmpSrc); + SelectObject(hdcDst, hdib); + BitBlt(hdcDst, 0, 0, bmp.bmWidth, bmp.bmHeight, hdcSrc, 0, 0, SRCCOPY); + DeleteDC(hdcSrc); + DeleteDC(hdcDst); + DeleteObject(hbmpSrc); + return hdib; +} + + /* @brief Image Listの作成 @@ -120,6 +167,9 @@ bool CImageListMgr::Create(HINSTANCE hInstance) return false; } } + + hRscbmp = ConvertTo32bppBMP(hRscbmp); + // To Here 2001.7.1 GAE // 2003.07.21 genta @@ -151,6 +201,8 @@ bool CImageListMgr::Create(HINSTANCE hInstance) return false; } + hRscbmp = ConvertTo32bppBMP(hRscbmp); + // アイコンサイズが異なる場合、拡大縮小する hRscbmp = ResizeToolIcons( hRscbmp, m_cTrans ); if( hRscbmp == NULL ){ From 78fb3ac2c9c41b125a171ab23f3271eb084b233e Mon Sep 17 00:00:00 2001 From: Katsuhisa Yuasa Date: Wed, 9 Sep 2020 02:53:22 +0900 Subject: [PATCH 0092/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/uiparts/CImageListMgr.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sakura_core/uiparts/CImageListMgr.cpp b/sakura_core/uiparts/CImageListMgr.cpp index 0664ce8c0e..642c343987 100644 --- a/sakura_core/uiparts/CImageListMgr.cpp +++ b/sakura_core/uiparts/CImageListMgr.cpp @@ -122,9 +122,11 @@ HBITMAP ConvertTo32bppBMP(HBITMAP hbmpSrc) DeleteObject(hdib); return hbmpSrc; } - SelectObject(hdcSrc, hbmpSrc); - SelectObject(hdcDst, hdib); + HGDIOBJ hbmpSrcOld = SelectObject(hdcSrc, hbmpSrc); + HGDIOBJ hbmpDstOld = SelectObject(hdcDst, hdib); BitBlt(hdcDst, 0, 0, bmp.bmWidth, bmp.bmHeight, hdcSrc, 0, 0, SRCCOPY); + SelectObject(hdcSrc, hbmpSrcOld); + SelectObject(hdcDst, hbmpDstOld); DeleteDC(hdcSrc); DeleteDC(hdcDst); DeleteObject(hbmpSrc); From 803c8d922cd669ab46d074b5e295caad9992c7e2 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 12 Sep 2020 16:49:11 +0900 Subject: [PATCH 0093/1024] =?UTF-8?q?=E3=82=AD=E3=83=BC=E3=83=AF=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=83=98=E3=83=AB=E3=83=97=E3=81=AE=E8=AA=AC=E6=98=8E?= =?UTF-8?q?=E6=96=87=E3=81=AB"\n"=E3=82=92=E8=A1=A8=E7=A4=BA=E3=81=A7?= =?UTF-8?q?=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/window/CTipWnd.cpp | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/sakura_core/window/CTipWnd.cpp b/sakura_core/window/CTipWnd.cpp index 4281ead03a..14b02c4b89 100644 --- a/sakura_core/window/CTipWnd.cpp +++ b/sakura_core/window/CTipWnd.cpp @@ -17,6 +17,10 @@ #include "StdAfx.h" #include "CTipWnd.h" + +#include +#include + #include "env/CShareData.h" #include "env/DLLSHAREDATA.h" #include "util/window.h" @@ -151,6 +155,16 @@ void CTipWnd::ComputeWindowSize( const int cx4 = DpiScaleX( 4 ); const int cy4 = DpiScaleY( 4 ); + std::wregex re1( LR"(([^\\])\\n)" ); + std::wregex re2( LR"((\\)\\)" ); + if( m_cInfo.IsValid() + && ( std::regex_search( m_cInfo.GetStringPtr(), re1 ) || std::regex_search( m_cInfo.GetStringPtr(), re2 ) ) ){ + auto text = std::regex_replace( m_cInfo.GetStringPtr(), re1, L"$1\n" ); + text = std::regex_replace( text, re1, L"$1\n" ); + text = std::regex_replace( text, re2, L"$1" ); + m_cInfo.SetString( text.c_str(), text.length() ); + } + // 計測対象をメンバ変数からローカル変数に取得 const WCHAR* pszText = m_cInfo.GetStringPtr(); const size_t cchText = m_cInfo.GetStringLength(); @@ -166,7 +180,7 @@ void CTipWnd::ComputeWindowSize( const bool isEndOfText = ( pszText[i] == '\0' ); // iの位置にNUL終端、または"\n"がある場合 if ( isEndOfText - || ( i + 1 < cchText && pszText[i] == '\\' && pszText[i + 1] == 'n' ) ) { + || pszText[i] == '\n' ) { // 計測結果を格納する矩形 CMyRect rc; // 計測対象の文字列がブランクでない場合 @@ -197,7 +211,7 @@ void CTipWnd::ComputeWindowSize( } // 次の行の開始位置を設定する - nLineBgn = i + 2; // "\\n" の文字数 + nLineBgn = i + 1; // "\n" の文字数 i = nLineBgn; }else{ // 現在位置の文字がTCHAR単位で何文字に当たるか計算してインデックスを進める @@ -247,7 +261,7 @@ void CTipWnd::DrawTipText( const bool isEndOfText = ( pszText[i] == '\0' ); // iの位置にNUL終端、または"\n"がある場合 if ( isEndOfText - || ( i + 1 < cchText && pszText[i] == '\\' && pszText[i + 1] == 'n' ) ) { + || pszText[i] == '\n' ) { int nHeight; // 計測対象の文字列がブランクでない場合 if ( 0 < i - nLineBgn ) { @@ -269,7 +283,7 @@ void CTipWnd::DrawTipText( } // 次の行の開始位置を設定する - nLineBgn = i + 2; // "\\n" の文字数 + nLineBgn = i + 1; // "\n" の文字数 i = nLineBgn; }else{ // 現在位置の文字がTCHAR単位で何文字に当たるか計算してインデックスを進める From 791bf8b54ad818b22037704e1b5dc29df0b1491a Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 13 Sep 2020 00:18:12 +0900 Subject: [PATCH 0094/1024] =?UTF-8?q?Revert=20"=E3=82=AD=E3=83=BC=E3=83=AF?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=83=98=E3=83=AB=E3=83=97=E3=81=AE=E8=AA=AC?= =?UTF-8?q?=E6=98=8E=E6=96=87=E3=81=AB"\n"=E3=82=92=E8=A1=A8=E7=A4=BA?= =?UTF-8?q?=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=99?= =?UTF-8?q?=E3=82=8B"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 803c8d922cd669ab46d074b5e295caad9992c7e2. --- sakura_core/window/CTipWnd.cpp | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/sakura_core/window/CTipWnd.cpp b/sakura_core/window/CTipWnd.cpp index 14b02c4b89..4281ead03a 100644 --- a/sakura_core/window/CTipWnd.cpp +++ b/sakura_core/window/CTipWnd.cpp @@ -17,10 +17,6 @@ #include "StdAfx.h" #include "CTipWnd.h" - -#include -#include - #include "env/CShareData.h" #include "env/DLLSHAREDATA.h" #include "util/window.h" @@ -155,16 +151,6 @@ void CTipWnd::ComputeWindowSize( const int cx4 = DpiScaleX( 4 ); const int cy4 = DpiScaleY( 4 ); - std::wregex re1( LR"(([^\\])\\n)" ); - std::wregex re2( LR"((\\)\\)" ); - if( m_cInfo.IsValid() - && ( std::regex_search( m_cInfo.GetStringPtr(), re1 ) || std::regex_search( m_cInfo.GetStringPtr(), re2 ) ) ){ - auto text = std::regex_replace( m_cInfo.GetStringPtr(), re1, L"$1\n" ); - text = std::regex_replace( text, re1, L"$1\n" ); - text = std::regex_replace( text, re2, L"$1" ); - m_cInfo.SetString( text.c_str(), text.length() ); - } - // 計測対象をメンバ変数からローカル変数に取得 const WCHAR* pszText = m_cInfo.GetStringPtr(); const size_t cchText = m_cInfo.GetStringLength(); @@ -180,7 +166,7 @@ void CTipWnd::ComputeWindowSize( const bool isEndOfText = ( pszText[i] == '\0' ); // iの位置にNUL終端、または"\n"がある場合 if ( isEndOfText - || pszText[i] == '\n' ) { + || ( i + 1 < cchText && pszText[i] == '\\' && pszText[i + 1] == 'n' ) ) { // 計測結果を格納する矩形 CMyRect rc; // 計測対象の文字列がブランクでない場合 @@ -211,7 +197,7 @@ void CTipWnd::ComputeWindowSize( } // 次の行の開始位置を設定する - nLineBgn = i + 1; // "\n" の文字数 + nLineBgn = i + 2; // "\\n" の文字数 i = nLineBgn; }else{ // 現在位置の文字がTCHAR単位で何文字に当たるか計算してインデックスを進める @@ -261,7 +247,7 @@ void CTipWnd::DrawTipText( const bool isEndOfText = ( pszText[i] == '\0' ); // iの位置にNUL終端、または"\n"がある場合 if ( isEndOfText - || pszText[i] == '\n' ) { + || ( i + 1 < cchText && pszText[i] == '\\' && pszText[i + 1] == 'n' ) ) { int nHeight; // 計測対象の文字列がブランクでない場合 if ( 0 < i - nLineBgn ) { @@ -283,7 +269,7 @@ void CTipWnd::DrawTipText( } // 次の行の開始位置を設定する - nLineBgn = i + 1; // "\n" の文字数 + nLineBgn = i + 2; // "\\n" の文字数 i = nLineBgn; }else{ // 現在位置の文字がTCHAR単位で何文字に当たるか計算してインデックスを進める From 931b07e4a14f456d9b63e1fdeeb054ff8c24f7b8 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 13 Sep 2020 00:33:32 +0900 Subject: [PATCH 0095/1024] =?UTF-8?q?=E3=82=AD=E3=83=BC=E3=83=AF=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=83=98=E3=83=AB=E3=83=97=E3=81=AE=E8=AA=AC=E6=98=8E?= =?UTF-8?q?=E6=96=87=E3=81=AB"\n"=E3=82=92=E8=A1=A8=E7=A4=BA=E3=81=A7?= =?UTF-8?q?=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/cmd/CViewCommander_CustMenu.cpp | 23 +--- sakura_core/view/CEditView_Search.cpp | 118 +++++++++----------- sakura_core/window/CTipWnd.cpp | 17 ++- sakura_core/window/CTipWnd.h | 11 +- 4 files changed, 83 insertions(+), 86 deletions(-) diff --git a/sakura_core/cmd/CViewCommander_CustMenu.cpp b/sakura_core/cmd/CViewCommander_CustMenu.cpp index f55ead6eca..8dad6b9e2d 100644 --- a/sakura_core/cmd/CViewCommander_CustMenu.cpp +++ b/sakura_core/cmd/CViewCommander_CustMenu.cpp @@ -23,33 +23,21 @@ /* 右クリックメニュー */ void CViewCommander::Command_MENU_RBUTTON( void ) { - int nId; - int nLength; -// HGLOBAL hgClip; -// char* pszClip; - int i; /* ポップアップメニュー(右クリック) */ - nId = m_pCommanderView->CreatePopUpMenu_R(); + auto nId = m_pCommanderView->CreatePopUpMenu_R(); if( 0 == nId ){ return; } switch( nId ){ case IDM_COPYDICINFO: { - nLength = m_pCommanderView->m_cTipWnd.m_cInfo.GetStringLength(); - const WCHAR* pszStr = m_pCommanderView->m_cTipWnd.m_cInfo.GetStringPtr(); - WCHAR* pszWork = _wcsdup( pszStr ); + CNativeW cInfo = m_pCommanderView->m_cTipWnd.GetInfoText(); // 見た目と同じように、\n を CR+LFへ変換する - for( i = 0; i < nLength ; ++i){ - if( pszWork[i] == L'\\' && pszWork[i + 1] == L'n'){ - pszWork[i] = WCODE::CR; - pszWork[i + 1] = WCODE::LF; - } - } + cInfo.Replace( L"\n", L"\r\n" ); + /* クリップボードにデータを設定 */ - m_pCommanderView->MySetClipboardData( pszWork, nLength, false ); - free( pszWork ); + m_pCommanderView->MySetClipboardData( cInfo.GetStringPtr(), cInfo.GetStringLength(), false ); break; } @@ -68,7 +56,6 @@ void CViewCommander::Command_MENU_RBUTTON( void ) default: /* コマンドコードによる処理振り分け */ -// HandleCommand( nId, true, 0, 0, 0, 0 ); ::PostMessageCmd( GetMainWindow(), WM_COMMAND, MAKELONG( nId, 0 ), (LPARAM)NULL ); break; } diff --git a/sakura_core/view/CEditView_Search.cpp b/sakura_core/view/CEditView_Search.cpp index 10e27b90ae..d33439fa9d 100644 --- a/sakura_core/view/CEditView_Search.cpp +++ b/sakura_core/view/CEditView_Search.cpp @@ -106,85 +106,77 @@ BOOL CEditView::KeyWordHelpSearchDict( LID_SKH nID, POINT* po, RECT* rc ) */ BOOL CEditView::KeySearchCore( const CNativeW* pcmemCurText ) { - CNativeW* pcmemRefKey; - int nCmpLen = STRNCMP_MAX; // 2006.04.10 fon - int nLine; // 2006.04.10 fon + /* tooltipバッファ初期化 */ + m_cTipWnd.m_cInfo.Clear(); - m_cTipWnd.m_cInfo.SetString( L"" ); /* tooltipバッファ初期化 */ /* 1行目にキーワード表示の場合 */ - if(m_pTypeData->m_bUseKeyHelpKeyDisp){ /* キーワードも表示する */ // 2006.04.10 fon - m_cTipWnd.m_cInfo.AppendString( L"[ " ); - m_cTipWnd.m_cInfo.AppendString( pcmemCurText->GetStringPtr() ); - m_cTipWnd.m_cInfo.AppendString( L" ]" ); + if( m_pTypeData->m_bUseKeyHelpKeyDisp ){ /* キーワードも表示する */ // 2006.04.10 fon + m_cTipWnd.m_cInfo.AppendStringF( L"[ %s ]", pcmemCurText->GetStringPtr() ); } - /* 途中まで一致を使う場合 */ - if(m_pTypeData->m_bUseKeyHelpPrefix) - nCmpLen = wcslen( pcmemCurText->GetStringPtr() ); // 2006.04.10 fon + + // 一致確認する最大文字数、途中まで一致を使う場合は短くする + const int nCmpLen = m_pTypeData->m_bUseKeyHelpPrefix + ? std::min( STRNCMP_MAX, (int)::wcslen( pcmemCurText->GetStringPtr() ) ) + : STRNCMP_MAX; + + // 検索前にヒットフラグをクリアしておく m_cTipWnd.m_KeyWasHit = FALSE; - for(int i =0 ; i < m_pTypeData->m_nKeyHelpNum; i++){ //最大数:MAX_KEYHELP_FILE + + // 辞書ファイルの冊数、最大値は MAX_KEYHELP_FILE 。 + const int nKeyHelpNum = std::min(m_pTypeData->m_nKeyHelpNum, (int)MAX_KEYHELP_FILE); + + for( int i = 0; i < nKeyHelpNum; i++ ){ if( m_pTypeData->m_KeyHelpArr[i].m_bUse ){ - // 2006.04.10 fon (nCmpLen,pcmemRefKey,nSearchLine)引数を追加 - CNativeW* pcmemRefText; - int nSearchResult=m_cDicMgr.CDicMgr::Search( + CNativeW* pcmemRefKey = NULL; + CNativeW* pcmemRefText = NULL; + int nLine; + const auto& szPath = m_pTypeData->m_KeyHelpArr[i].m_szPath; + const int nSearchResult = m_cDicMgr.CDicMgr::Search( pcmemCurText->GetStringPtr(), nCmpLen, &pcmemRefKey, &pcmemRefText, - m_pTypeData->m_KeyHelpArr[i].m_szPath, + szPath, &nLine ); - if(nSearchResult){ - /* 該当するキーがある */ - LPWSTR pszWork = pcmemRefText->GetStringPtr(); + + /* 該当するキーがある */ + if( nSearchResult ){ + // バッファが空でなければseparator挿入 + if( m_cTipWnd.GetInfoText().GetStringLength() != 0 ){ + m_cTipWnd.m_cInfo.AppendString( L"\n--------------------\n" ); + } + /* 有効になっている辞書を全部なめて、ヒットの都度説明の継ぎ増し */ - if(m_pTypeData->m_bUseKeyHelpAllSearch){ /* ヒットした次の辞書も検索 */ // 2006.04.10 fon - /* バッファに前のデータが詰まっていたらseparator挿入 */ - if(m_cTipWnd.m_cInfo.GetStringLength() != 0) - m_cTipWnd.m_cInfo.AppendString( LS(STR_ERR_DLGEDITVW5) ); - else - m_cTipWnd.m_cInfo.AppendString( LS(STR_ERR_DLGEDITVW6) ); /* 先頭の場合 */ - /* 辞書のパス挿入 */ - { - WCHAR szFile[MAX_PATH]; - // 2013.05.08 表示するのはファイル名(拡張子なし)のみにする - _wsplitpath( m_pTypeData->m_KeyHelpArr[i].m_szPath, NULL, NULL, szFile, NULL ); - m_cTipWnd.m_cInfo.AppendString( szFile ); - } - m_cTipWnd.m_cInfo.AppendString( L"\n" ); - /* 前方一致でヒットした単語を挿入 */ - if(m_pTypeData->m_bUseKeyHelpPrefix){ /* 選択範囲で前方一致検索 */ - m_cTipWnd.m_cInfo.AppendString( pcmemRefKey->GetStringPtr() ); - m_cTipWnd.m_cInfo.AppendString( L" >>\n" ); - }/* 調査した「意味」を挿入 */ - m_cTipWnd.m_cInfo.AppendString( pszWork ); - delete pcmemRefText; - delete pcmemRefKey; // 2006.07.02 genta - /* タグジャンプ用の情報を残す */ - if(!m_cTipWnd.m_KeyWasHit){ - m_cTipWnd.m_nSearchDict=i; /* 辞書を開くとき最初にヒットした辞書を開く */ - m_cTipWnd.m_nSearchLine=nLine; - m_cTipWnd.m_KeyWasHit = TRUE; - } + if( m_pTypeData->m_bUseKeyHelpAllSearch ){ /* ヒットした次の辞書も検索 */ + /* 複数辞書をなめるので辞書のパス挿入、表示するのはファイル名(拡張子なし)のみ */ + WCHAR szFile[MAX_PATH]; + _wsplitpath( szPath, NULL, NULL, szFile, NULL ); + m_cTipWnd.m_cInfo.AppendStringF( L"■%s\n", szFile ); + } + + /* 前方一致でヒットした単語を挿入 */ + if( m_pTypeData->m_bUseKeyHelpPrefix ){ /* 選択範囲で前方一致検索 */ + m_cTipWnd.m_cInfo.AppendStringF(L"%s >>\n", pcmemRefKey->GetStringPtr() ); } - else{ /* 最初のヒット項目のみ返す場合 */ - /* キーワードが入っていたらseparator挿入 */ - if(m_cTipWnd.m_cInfo.GetStringLength() != 0) - m_cTipWnd.m_cInfo.AppendString( L"\n--------------------\n" ); - - /* 前方一致でヒットした単語を挿入 */ - if(m_pTypeData->m_bUseKeyHelpPrefix){ /* 選択範囲で前方一致検索 */ - m_cTipWnd.m_cInfo.AppendString( pcmemRefKey->GetStringPtr() ); - m_cTipWnd.m_cInfo.AppendString( L" >>\n" ); - } - /* 調査した「意味」を挿入 */ - m_cTipWnd.m_cInfo.AppendString( pszWork ); - delete pcmemRefText; - delete pcmemRefKey; // 2006.07.02 genta + /* 調査した「意味」を挿入 */ + m_cTipWnd.m_cInfo.AppendString( UnEscapeInfoText( *pcmemRefText ) ); + + /* 最初のヒット項目のみ返す場合、または、初回ヒットの場合 */ + if( !m_pTypeData->m_bUseKeyHelpAllSearch + || !m_cTipWnd.m_KeyWasHit ){ /* タグジャンプ用の情報を残す */ - m_cTipWnd.m_nSearchDict=i; - m_cTipWnd.m_nSearchLine=nLine; + m_cTipWnd.m_nSearchDict = i; + m_cTipWnd.m_nSearchLine = nLine; m_cTipWnd.m_KeyWasHit = TRUE; + } + + delete pcmemRefText; + delete pcmemRefKey; + + /* 最初のヒット項目のみ返す場合 */ + if( !m_pTypeData->m_bUseKeyHelpAllSearch ){ return TRUE; } } diff --git a/sakura_core/window/CTipWnd.cpp b/sakura_core/window/CTipWnd.cpp index 4281ead03a..17aa83f8b7 100644 --- a/sakura_core/window/CTipWnd.cpp +++ b/sakura_core/window/CTipWnd.cpp @@ -24,6 +24,14 @@ // ダミー文字列 static constexpr WCHAR szDummy[] = { L" " }; +/* Tipの内容データを設定するためにエスケープ解除を行う */ +const WCHAR* UnEscapeInfoText( CNativeW& cInfo ) +{ + cInfo.Replace( L"\\n", L"\n" ); + cInfo.Replace( L"\\x53", L"\\" ); + return cInfo.GetStringPtr(); +} + /* CTipWndクラス デストラクタ */ CTipWnd::CTipWnd() : CWnd(L"::CTipWnd") @@ -105,6 +113,7 @@ void CTipWnd::Show( int nX, int nY, const WCHAR* szText, RECT* pRect ) if( NULL != szText ){ m_cInfo.SetString( szText ); + UnEscapeInfoText( m_cInfo ); } hdc = ::GetDC( GetHwnd() ); @@ -166,7 +175,7 @@ void CTipWnd::ComputeWindowSize( const bool isEndOfText = ( pszText[i] == '\0' ); // iの位置にNUL終端、または"\n"がある場合 if ( isEndOfText - || ( i + 1 < cchText && pszText[i] == '\\' && pszText[i + 1] == 'n' ) ) { + || pszText[i] == '\n' ) { // 計測結果を格納する矩形 CMyRect rc; // 計測対象の文字列がブランクでない場合 @@ -197,7 +206,7 @@ void CTipWnd::ComputeWindowSize( } // 次の行の開始位置を設定する - nLineBgn = i + 2; // "\\n" の文字数 + nLineBgn = i + 1; // "\n" の文字数 i = nLineBgn; }else{ // 現在位置の文字がTCHAR単位で何文字に当たるか計算してインデックスを進める @@ -247,7 +256,7 @@ void CTipWnd::DrawTipText( const bool isEndOfText = ( pszText[i] == '\0' ); // iの位置にNUL終端、または"\n"がある場合 if ( isEndOfText - || ( i + 1 < cchText && pszText[i] == '\\' && pszText[i + 1] == 'n' ) ) { + || pszText[i] == '\n' ) { int nHeight; // 計測対象の文字列がブランクでない場合 if ( 0 < i - nLineBgn ) { @@ -269,7 +278,7 @@ void CTipWnd::DrawTipText( } // 次の行の開始位置を設定する - nLineBgn = i + 2; // "\\n" の文字数 + nLineBgn = i + 1; // "\n" の文字数 i = nLineBgn; }else{ // 現在位置の文字がTCHAR単位で何文字に当たるか計算してインデックスを進める diff --git a/sakura_core/window/CTipWnd.h b/sakura_core/window/CTipWnd.h index cd6e047328..8952be7a8c 100644 --- a/sakura_core/window/CTipWnd.h +++ b/sakura_core/window/CTipWnd.h @@ -21,7 +21,8 @@ class CTipWnd; #include "CWnd.h" -#include "mem/CMemory.h" +#include "mem/CNativeW.h" + /*----------------------------------------------------------------------- クラスの宣言 -----------------------------------------------------------------------*/ @@ -74,5 +75,13 @@ class CTipWnd final : public CWnd /* 仮想関数 メッセージ処理 詳しくは実装を参照 */ LRESULT OnPaint(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) override;/* 描画処理 */ + +public: + /* Tipの内容データを取得する */ + const CNativeW& GetInfoText() const { return m_cInfo; } }; + +/* Tipの内容データを設定するためにエスケープ解除を行う */ +const WCHAR* UnEscapeInfoText( CNativeW& cInfo ); + #endif /* SAKURA_CTIPWND_E3DB6CF2_888C_42F5_953E_D923221F0B16_H_ */ From 0fa270f0569fde0645706bedfd5beecf862a3058 Mon Sep 17 00:00:00 2001 From: miwa Date: Sun, 6 Sep 2020 11:51:48 +0900 Subject: [PATCH 0096/1024] =?UTF-8?q?=E3=82=A2=E3=82=A6=E3=83=88=E3=83=A9?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E9=81=B8=E6=8A=9E=E4=BD=8D=E7=BD=AE=E3=81=AE?= =?UTF-8?q?=E8=87=AA=E5=8B=95=E8=BF=BD=E5=BE=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/cmd/CViewCommander_Outline.cpp | 2 +- sakura_core/outline/CDlgFuncList.cpp | 329 +++++++++++---------- sakura_core/outline/CDlgFuncList.h | 7 + sakura_core/view/CCaret.cpp | 4 + 4 files changed, 188 insertions(+), 154 deletions(-) diff --git a/sakura_core/cmd/CViewCommander_Outline.cpp b/sakura_core/cmd/CViewCommander_Outline.cpp index c935c2ecde..2b2758c9df 100644 --- a/sakura_core/cmd/CViewCommander_Outline.cpp +++ b/sakura_core/cmd/CViewCommander_Outline.cpp @@ -70,7 +70,7 @@ BOOL CViewCommander::Command_FUNCLIST( if( NULL != GetEditWindow()->m_cDlgFuncList.GetHwnd() && nAction != SHOW_RELOAD ){ switch(nAction ){ case SHOW_NORMAL: // アクティブにする - // 開いているものと種別が同じならActiveにするだけ.異なれば再解析 + // 開いているものと種別が同じかつ内容が最新ならActiveにするだけ.それ以外なら再解析 GetEditWindow()->m_cDlgFuncList.SyncColor(); if( GetEditWindow()->m_cDlgFuncList.CheckListType( nOutlineType )){ if( bForeground ){ diff --git a/sakura_core/outline/CDlgFuncList.cpp b/sakura_core/outline/CDlgFuncList.cpp index 75542335d9..98c05b0a52 100644 --- a/sakura_core/outline/CDlgFuncList.cpp +++ b/sakura_core/outline/CDlgFuncList.cpp @@ -545,14 +545,6 @@ void CDlgFuncList::SetData() WCHAR szText[2048]; const CFuncInfo* pcFuncInfo; LV_ITEM item; - bool bSelected; - CLayoutInt nFuncLineOld(-1); - CLayoutInt nFuncColOld(-1); - CLayoutInt nFuncLineTop(INT_MAX); - CLayoutInt nFuncColTop(INT_MAX); - int nSelectedLineTop = 0; - int nSelectedLine = 0; - RECT rc; m_cmemClipText.SetString(L""); /* クリップボードコピー用テキスト */ { @@ -567,33 +559,7 @@ void CDlgFuncList::SetData() } ::EnableWindow( GetItemHwnd( IDC_BUTTON_COPY ), TRUE ); - bSelected = false; - for( i = 0; i < m_pcFuncInfoArr->GetNum(); ++i ){ - pcFuncInfo = m_pcFuncInfoArr->GetAt( i ); - if( !bSelected ){ - if( pcFuncInfo->m_nFuncLineLAYOUT < nFuncLineTop - || (pcFuncInfo->m_nFuncLineLAYOUT == nFuncLineTop && pcFuncInfo->m_nFuncColLAYOUT <= nFuncColTop) ){ - nFuncLineTop = pcFuncInfo->m_nFuncLineLAYOUT; - nFuncColTop = pcFuncInfo->m_nFuncColLAYOUT; - nSelectedLineTop = i; - } - } - { - if( (nFuncLineOld < pcFuncInfo->m_nFuncLineLAYOUT - || (nFuncLineOld == pcFuncInfo->m_nFuncColLAYOUT && nFuncColOld <= pcFuncInfo->m_nFuncColLAYOUT)) - && (pcFuncInfo->m_nFuncLineLAYOUT < m_nCurLine - || (pcFuncInfo->m_nFuncLineLAYOUT == m_nCurLine && pcFuncInfo->m_nFuncColLAYOUT <= m_nCurCol)) ){ - nFuncLineOld = pcFuncInfo->m_nFuncLineLAYOUT; - nFuncColOld = pcFuncInfo->m_nFuncColLAYOUT; - bSelected = true; - nSelectedLine = i; - } - } - } - if( 0 < m_pcFuncInfoArr->GetNum() && !bSelected ){ - bSelected = true; - nSelectedLine = nSelectedLineTop; - } + for( i = 0; i < m_pcFuncInfoArr->GetNum(); ++i ){ /* 現在の解析結果要素 */ pcFuncInfo = m_pcFuncInfoArr->GetAt( i ); @@ -698,13 +664,14 @@ void CDlgFuncList::SetData() DWORD dwExStyle = ListView_GetExtendedListViewStyle( hwndList ); dwExStyle |= LVS_EX_FULLROWSELECT; ListView_SetExtendedListViewStyle( hwndList, dwExStyle ); + } - if( bSelected ){ - ListView_GetItemRect( hwndList, 0, &rc, LVIR_BOUNDS ); - ListView_Scroll( hwndList, 0, nSelectedLine * ( rc.bottom - rc.top ) ); - ListView_SetItemState( hwndList, nSelectedLine, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED ); - } + // 選択状態更新 + int nFuncInfoIndex = -1; + if( GetFuncInfoIndex( m_nCurLine, m_nCurCol, &nFuncInfoIndex ) ){ + SetItemSelection( nFuncInfoIndex ); } + /* アウトライン ダイアログを自動的に閉じる */ ::CheckDlgButton( GetHwnd(), IDC_CHECK_bAutoCloseDlgFuncList, m_pShareData->m_Common.m_sOutline.m_bAutoCloseDlgFuncList ); /* アウトライン ブックマーク一覧で空行を無視する */ @@ -913,6 +880,7 @@ int CDlgFuncList::GetData( void ) Java Method Treeの構築: 関数リストを元にTreeControlを初期化する。 @date 2002.01.04 genta C++ツリーを統合 + @date 2020.09.12 選択処理をGetFuncInfoIndex,SetItemSelectionへ移動 */ void CDlgFuncList::SetTreeJava( HWND hwndDlg, BOOL bAddClass ) { @@ -1171,26 +1139,6 @@ void CDlgFuncList::SetTreeJava( HWND hwndDlg, BOOL bAddClass ) m_cmemClipText.AppendString(FL_OBJ_DECLARE == pcFuncInfo->m_nInfo ? m_pcFuncInfoArr->GetAppendText( FL_OBJ_DECLARE ).c_str() : L"" ); // Jan. 04, 2001 genta C++で使用 m_cmemClipText.AppendString(L"\r\n"); - /* 現在カーソル位置のメソッドかどうか調べる */ - if( !bSelected ){ - if( pcFuncInfo->m_nFuncLineLAYOUT < nFuncLineTop - || (pcFuncInfo->m_nFuncLineLAYOUT == nFuncLineTop && pcFuncInfo->m_nFuncColLAYOUT <= nFuncColTop) ){ - nFuncLineTop = pcFuncInfo->m_nFuncLineLAYOUT; - nFuncColTop = pcFuncInfo->m_nFuncColLAYOUT; - htiSelectedTop = htiItem; - } - } - { - if( (nFuncLineOld < pcFuncInfo->m_nFuncLineLAYOUT - || (nFuncLineOld == pcFuncInfo->m_nFuncColLAYOUT && nFuncColOld <= pcFuncInfo->m_nFuncColLAYOUT)) - && (pcFuncInfo->m_nFuncLineLAYOUT < m_nCurLine - || (pcFuncInfo->m_nFuncLineLAYOUT == m_nCurLine && pcFuncInfo->m_nFuncColLAYOUT <= m_nCurCol)) ){ - nFuncLineOld = pcFuncInfo->m_nFuncLineLAYOUT; - nFuncColOld = pcFuncInfo->m_nFuncColLAYOUT; - bSelected = TRUE; - htiSelected = htiItem; - } - } // Jan. 04, 2001 genta // deleteはその都度行うのでここでは不要 } @@ -1202,12 +1150,7 @@ void CDlgFuncList::SetTreeJava( HWND hwndDlg, BOOL bAddClass ) TreeView_Expand( hwndTree, htiClass, TVE_EXPAND ); htiClass = TreeView_GetNextSibling( hwndTree, htiClass ); } - /* 現在カーソル位置のメソッドを選択状態にする */ - if( bSelected ){ - TreeView_SelectItem( hwndTree, htiSelected ); - }else{ - TreeView_SelectItem( hwndTree, htiSelectedTop ); - } + // GetTreeTextNext( hwndTree, NULL, 0 ); m_nTreeItemCount = nlParamCount; return; @@ -1218,6 +1161,7 @@ void CDlgFuncList::SetTreeJava( HWND hwndDlg, BOOL bAddClass ) 長くなったので独立させました。 @date Jul 10, 2003 little YOSHI + @date 2020.09.12 選択処理をGetFuncInfoIndex,SetItemSelectionへ移動 */ void CDlgFuncList::SetListVB (void) { @@ -1227,11 +1171,6 @@ void CDlgFuncList::SetListVB (void) const CFuncInfo* pcFuncInfo; LV_ITEM item; HWND hwndList; - int bSelected; - CLayoutInt nFuncLineOld; - CLayoutInt nFuncColOld; - int nSelectedLine = 0; - RECT rc; ::EnableWindow( GetItemHwnd( IDC_BUTTON_COPY ), TRUE ); @@ -1249,39 +1188,6 @@ void CDlgFuncList::SetListVB (void) m_cmemClipText.AllocStringBuffer( nBuffLen + nBuffLenTag * nNum ); } - nFuncLineOld = CLayoutInt(-1); - nFuncColOld = CLayoutInt(-1); - CLayoutInt nFuncLineTop(INT_MAX); - CLayoutInt nFuncColTop(INT_MAX); - int nSelectedLineTop = 0; - bSelected = FALSE; - for( i = 0; i < m_pcFuncInfoArr->GetNum(); ++i ){ - pcFuncInfo = m_pcFuncInfoArr->GetAt( i ); - if( !bSelected ){ - if( pcFuncInfo->m_nFuncLineLAYOUT < nFuncLineTop - || (pcFuncInfo->m_nFuncLineLAYOUT == nFuncLineTop && pcFuncInfo->m_nFuncColLAYOUT <= nFuncColTop) ){ - nFuncLineTop = pcFuncInfo->m_nFuncLineLAYOUT; - nFuncColTop = pcFuncInfo->m_nFuncColLAYOUT; - nSelectedLineTop = i; - } - } - { - if( (nFuncLineOld < pcFuncInfo->m_nFuncLineLAYOUT - || (nFuncLineOld == pcFuncInfo->m_nFuncColLAYOUT && nFuncColOld <= pcFuncInfo->m_nFuncColLAYOUT)) - && (pcFuncInfo->m_nFuncLineLAYOUT < m_nCurLine - || (pcFuncInfo->m_nFuncLineLAYOUT == m_nCurLine && pcFuncInfo->m_nFuncColLAYOUT <= m_nCurCol)) ){ - nFuncLineOld = pcFuncInfo->m_nFuncLineLAYOUT; - nFuncColOld = pcFuncInfo->m_nFuncColLAYOUT; - bSelected = TRUE; - nSelectedLine = i; - } - } - } - if( 0 < m_pcFuncInfoArr->GetNum() && !bSelected ){ - bSelected = TRUE; - nSelectedLine = nSelectedLineTop; - } - WCHAR szText[2048]; for( i = 0; i < m_pcFuncInfoArr->GetNum(); ++i ){ /* 現在の解析結果要素 */ @@ -1450,11 +1356,6 @@ void CDlgFuncList::SetListVB (void) ListView_SetColumnWidth( hwndList, FL_COL_COL, ListView_GetColumnWidth( hwndList, FL_COL_COL ) + 16 ); ListView_SetColumnWidth( hwndList, FL_COL_NAME, ListView_GetColumnWidth( hwndList, FL_COL_NAME ) + 16 ); ListView_SetColumnWidth( hwndList, FL_COL_REMARK, ListView_GetColumnWidth( hwndList, FL_COL_REMARK ) + 16 ); - if( bSelected ){ - ListView_GetItemRect( hwndList, 0, &rc, LVIR_BOUNDS ); - ListView_Scroll( hwndList, 0, nSelectedLine * ( rc.bottom - rc.top ) ); - ListView_SetItemState( hwndList, nSelectedLine, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED ); - } return; } @@ -1468,11 +1369,10 @@ void CDlgFuncList::SetListVB (void) @date 2007.02.25 genta クリップボード出力をタブジャンプ可能な書式に変更 @date 2007.03.04 genta タブジャンプ可能な書式に変更するかどうかのフラグを追加 @date 2014.06.06 Moca 他ファイルへのタグジャンプ機能を追加 + @date 2020.09.12 選択処理をGetFuncInfoIndex,SetItemSelectionへ移動 */ void CDlgFuncList::SetTree(bool tagjump, bool nolabel) { - HTREEITEM hItemSelected = NULL; - HTREEITEM hItemSelectedTop = NULL; HWND hwndTree = GetItemHwnd( IDC_TREE_FL ); int i; @@ -1482,11 +1382,6 @@ void CDlgFuncList::SetTree(bool tagjump, bool nolabel) HTREEITEM* phParentStack; phParentStack = (HTREEITEM*)malloc( nStackDepth * sizeof( HTREEITEM ) ); phParentStack[ nStackPointer ] = TVI_ROOT; - CLayoutInt nFuncLineOld(-1); - CLayoutInt nFuncColOld(-1); - CLayoutInt nFuncLineTop(INT_MAX); - CLayoutInt nFuncColTop(INT_MAX); - bool bSelected = false; m_cmemClipText.SetString(L""); { @@ -1545,36 +1440,6 @@ void CDlgFuncList::SetTree(bool tagjump, bool nolabel) hItem = TreeView_InsertItem( hwndTree, &cTVInsertStruct ); phParentStack[ nStackPointer+1 ] = hItem; - /* pcFuncInfoに登録されている行数、桁を確認して、選択するアイテムを考える - */ - bool bFileSelect = false; - if( pcFuncInfo->m_cmemFileName.GetStringPtr() && m_pcFuncInfoArr->m_szFilePath[0] ){ - if( 0 == wmemicmp( pcFuncInfo->m_cmemFileName.GetStringPtr(), m_pcFuncInfoArr->m_szFilePath.c_str() ) ){ - bFileSelect = true; - } - }else{ - bFileSelect = true; - } - if( bFileSelect ){ - if( !bSelected ){ - if( pcFuncInfo->m_nFuncLineLAYOUT < nFuncLineTop - || (pcFuncInfo->m_nFuncLineLAYOUT == nFuncLineTop && pcFuncInfo->m_nFuncColLAYOUT <= nFuncColTop) ){ - nFuncLineTop = pcFuncInfo->m_nFuncLineLAYOUT; - nFuncColTop = pcFuncInfo->m_nFuncColLAYOUT; - hItemSelectedTop = hItem; - } - } - if( (nFuncLineOld < pcFuncInfo->m_nFuncLineLAYOUT - || (nFuncLineOld == pcFuncInfo->m_nFuncColLAYOUT && nFuncColOld <= pcFuncInfo->m_nFuncColLAYOUT)) - && (pcFuncInfo->m_nFuncLineLAYOUT < m_nCurLine - || (pcFuncInfo->m_nFuncLineLAYOUT == m_nCurLine && pcFuncInfo->m_nFuncColLAYOUT <= m_nCurCol)) ){ - nFuncLineOld = pcFuncInfo->m_nFuncLineLAYOUT; - nFuncColOld = pcFuncInfo->m_nFuncColLAYOUT; - hItemSelected = hItem; - bSelected = true; - } - } - /* クリップボードコピー用テキストを作成する */ // 2003.06.22 Moca dummy要素はツリーに入れるがTAGJUMPには加えない if( pcFuncInfo->IsAddClipText() ){ @@ -1620,13 +1485,6 @@ end_of_func:; ::EnableWindow( GetItemHwnd( IDC_BUTTON_COPY ), TRUE ); - if( NULL != hItemSelected ){ - /* 現在カーソル位置のメソッドを選択状態にする */ - TreeView_SelectItem( hwndTree, hItemSelected ); - }else if( NULL != hItemSelectedTop ){ - TreeView_SelectItem( hwndTree, hItemSelectedTop ); - } - free( phParentStack ); } @@ -4043,3 +3901,168 @@ void CDlgFuncList::LoadFileTreeSetting( CFileTreeSetting& data, SFilePath& IniDi } } } + +/*! + キャレットの移動を通知 + @param[in] nCurLine 移動後の行 + @param[in] nCurCol 移動後の桁 +*/ +void CDlgFuncList::NotifyCaretMovement( CLayoutInt nCurLine, CLayoutInt nCurCol ) +{ + if( !::IsWindowVisible( this->GetHwnd() ) ){ + return; + } + + m_nCurLine = nCurLine; + m_nCurCol = nCurCol; + + int nFuncInfoIndex = -1; + if( GetFuncInfoIndex( nCurLine, nCurCol, &nFuncInfoIndex ) ){ + SetItemSelection( nFuncInfoIndex ); + } + + return; +} + +/*! + ドキュメントの変更を通知 +*/ +void CDlgFuncList::NotifyDocModification() +{ + // もう最新ではなくなりました + m_bFuncInfoArrIsUpToDate = false; + + return; +} + +/*! + リスト/ツリービュー上のアイテムを選択または選択解除 + @param[in] nFuncInfoIndex 選択対象とする関数情報配列のインデックス(-1の場合は選択解除) +*/ +void CDlgFuncList::SetItemSelection( int nFuncInfoIndex ) +{ + if( m_nViewType == VIEWTYPE_TREE ){ + HWND hwndTree = GetItemHwnd( IDC_TREE_FL ); + SetItemSelectionForTreeView( hwndTree, nFuncInfoIndex ); + }else if( m_nViewType == VIEWTYPE_LIST ){ + HWND hwndList = GetItemHwnd( IDC_LIST_FL ); + SetItemSelectionForListView( hwndList, nFuncInfoIndex ); + }else{ + ; + } + + return; +} + +/*! + ツリービュー上のアイテムを選択または選択解除 + @param[in] hwndTree 対象とするツリービューのハンドル + @param[in] nFuncInfoIndex 選択対象とする関数情報配列のインデックス(-1の場合は選択解除) +*/ +void CDlgFuncList::SetItemSelectionForTreeView( HWND hwndTree, int nFuncInfoIndex ) +{ + // 関数情報のインデックスに該当するアイテム探してを選択状態に + std::vector htiStack; + htiStack.reserve( TreeView_GetCount( hwndTree ) ); + htiStack.push_back( TreeView_GetRoot( hwndTree ) ); + int nStackIndex = 0; + bool bFound = false; + while( !bFound && nStackIndex < htiStack.size() ){ + HTREEITEM htiCurrent = htiStack[nStackIndex]; + for( ; NULL != htiCurrent ; htiCurrent = TreeView_GetNextSibling( hwndTree, htiCurrent ) ){ + TVITEM tvItem = {}; + tvItem.mask = TVIF_HANDLE | TVIF_PARAM; + tvItem.hItem = htiCurrent; + TreeView_GetItem( hwndTree, &tvItem ); + if( nFuncInfoIndex == TreeDummylParamToFuncInfoIndex( m_vecDummylParams, tvItem.lParam ) ){ + // 発見 + TreeView_SelectItem( hwndTree, htiCurrent ); + TreeView_EnsureVisible( hwndTree, htiCurrent ); + bFound = true; + break; + } + + HTREEITEM htiChild = TreeView_GetChild( hwndTree, htiCurrent ); + if( htiChild != NULL ){ + htiStack.push_back( htiChild ); + } + } + ++nStackIndex; + } + + return; +} + +/*! + リストビュー上のアイテムを選択または選択解除 + @param[in] hwndList 対象とするリストビューのハンドル + @param[in] nFuncInfoIndex 選択対象とする関数情報配列のインデックス(-1の場合は選択解除) +*/ +void CDlgFuncList::SetItemSelectionForListView( HWND hwndList, int nFuncInfoIndex ) +{ + ListView_SetItemState( hwndList, nFuncInfoIndex, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED ); + ListView_EnsureVisible( hwndList, nFuncInfoIndex, FALSE ); + + return; +} + +/*! + 指定した位置に該当する関数情報のインデックスを取得 + @param[in] nCurLine 行 + @param[in] nCurCol 桁 + @param[out] pIndexOut 該当する関数情報のインデックスを格納 + @retval true 該当あり + @retval false 該当なし(出力引数には何も設定せず) +*/ +bool CDlgFuncList::GetFuncInfoIndex( CLayoutInt nCurLine, CLayoutInt nCurCol, int* pIndexOut ) +{ + const CFuncInfo* pcFuncInfo = NULL; + CLayoutInt nFuncLineOld(-1); + CLayoutInt nFuncColOld(-1); + CLayoutInt nFuncLineTop(INT_MAX); + CLayoutInt nFuncColTop(INT_MAX); + int nFoundIndex = -1; + int i; + + if( m_pcFuncInfoArr == NULL || pIndexOut == NULL ){ + return false; + } + + // SetTree,SetTreeJava,SetListVB,SetDataにあった処理を持ってきました + + for( i = 0; i < m_pcFuncInfoArr->GetNum(); ++i ){ + pcFuncInfo = m_pcFuncInfoArr->GetAt( i ); + + if( (pcFuncInfo->m_cmemFileName.GetStringPtr() && m_pcFuncInfoArr->m_szFilePath[0]) ){ + if( 0 != wmemicmp( pcFuncInfo->m_cmemFileName.GetStringPtr(), m_pcFuncInfoArr->m_szFilePath.c_str() ) ){ + continue; + } + } + + if( nFoundIndex == -1 ){ + if( pcFuncInfo->m_nFuncLineLAYOUT < nFuncLineTop + || (pcFuncInfo->m_nFuncLineLAYOUT == nFuncLineTop && pcFuncInfo->m_nFuncColLAYOUT <= nFuncColTop) ){ + nFuncLineTop = pcFuncInfo->m_nFuncLineLAYOUT; + nFuncColTop = pcFuncInfo->m_nFuncColLAYOUT; + nFoundIndex = i; + } + }else{ + if( (nFuncLineOld < pcFuncInfo->m_nFuncLineLAYOUT + || (nFuncLineOld == pcFuncInfo->m_nFuncLineLAYOUT && nFuncColOld <= pcFuncInfo->m_nFuncColLAYOUT)) + && (pcFuncInfo->m_nFuncLineLAYOUT < m_nCurLine + || (pcFuncInfo->m_nFuncLineLAYOUT == m_nCurLine && pcFuncInfo->m_nFuncColLAYOUT <= m_nCurCol)) ){ + nFuncLineOld = pcFuncInfo->m_nFuncLineLAYOUT; + nFuncColOld = pcFuncInfo->m_nFuncColLAYOUT; + nFoundIndex = i; + } + } + } + + if( nFoundIndex == -1 ){ + return false; + } + + *pIndexOut = nFoundIndex; + + return true; +} diff --git a/sakura_core/outline/CDlgFuncList.h b/sakura_core/outline/CDlgFuncList.h index 03c6012ea6..ef8e349dde 100644 --- a/sakura_core/outline/CDlgFuncList.h +++ b/sakura_core/outline/CDlgFuncList.h @@ -101,6 +101,9 @@ class CDlgFuncList final : public CDialog void SetWindowText( const WCHAR* szTitle ); //ダイアログタイトルの設定 EFunctionCode GetFuncCodeRedraw(int outlineType); void LoadFileTreeSetting( CFileTreeSetting& data, SFilePath& IniDirPath ); + void NotifyCaretMovement( CLayoutInt nCurLine, CLayoutInt nCurCol ); + void NotifyDocModification(); + bool IsUpToDate() { return m_bFuncInfoArrIsUpToDate; } protected: bool m_bInChangeLayout; @@ -139,6 +142,10 @@ class CDlgFuncList final : public CDialog void SetTreeFile(); // ツリーコントロールの初期化:ファイルツリー void SetListVB( void ); /* リストビューコントロールの初期化:VisualBasic */ // Jul 10, 2003 little YOSHI void SetDocLineFuncList(); + void SetItemSelection( int nSelectItemIndex ); + void SetItemSelectionForTreeView( HWND hwndTree, int nSelectItemIndex ); + void SetItemSelectionForListView( HWND hwndList, int nSelectItemIndex ); + bool GetFuncInfoIndex( CLayoutInt nCurLine, CLayoutInt nCurCol, int* pIndexOut ); void SetTreeFileSub(HTREEITEM hParent, const WCHAR* pszFile); // 2002/11/1 frozen diff --git a/sakura_core/view/CCaret.cpp b/sakura_core/view/CCaret.cpp index bf501ea97b..1b62d7e0e3 100644 --- a/sakura_core/view/CCaret.cpp +++ b/sakura_core/view/CCaret.cpp @@ -376,6 +376,10 @@ CLayoutInt CCaret::MoveCursor( m_pEditView->DrawBracketPair( true ); // 02/09/18 対括弧の強調表示 ai End 03/02/18 ai mod E + // アウトライン表示の選択位置を更新 + CLayoutPoint poCaret = GetCaretLayoutPos(); + m_pEditDoc->m_pcEditWnd->m_cDlgFuncList.NotifyCaretMovement( poCaret.GetY2() + 1, poCaret.GetX2() + 1 ); + return nScrollRowNum; } From b7e43e677d2b0e0be1bac215afc440a7f7f98d5e Mon Sep 17 00:00:00 2001 From: miwa Date: Sun, 6 Sep 2020 21:56:49 +0900 Subject: [PATCH 0097/1024] =?UTF-8?q?=E3=83=86=E3=82=AD=E3=82=B9=E3=83=88?= =?UTF-8?q?=E7=B7=A8=E9=9B=86=E3=81=97=E3=81=9F=E3=82=89=E8=BF=BD=E5=BE=93?= =?UTF-8?q?=E8=A7=A3=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/cmd/CViewCommander_Outline.cpp | 3 ++- sakura_core/doc/CDocEditor.cpp | 2 ++ sakura_core/outline/CDlgFuncList.cpp | 26 ++++++++++++++++++---- sakura_core/outline/CDlgFuncList.h | 2 ++ 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/sakura_core/cmd/CViewCommander_Outline.cpp b/sakura_core/cmd/CViewCommander_Outline.cpp index 2b2758c9df..56ab986b35 100644 --- a/sakura_core/cmd/CViewCommander_Outline.cpp +++ b/sakura_core/cmd/CViewCommander_Outline.cpp @@ -72,7 +72,8 @@ BOOL CViewCommander::Command_FUNCLIST( case SHOW_NORMAL: // アクティブにする // 開いているものと種別が同じかつ内容が最新ならActiveにするだけ.それ以外なら再解析 GetEditWindow()->m_cDlgFuncList.SyncColor(); - if( GetEditWindow()->m_cDlgFuncList.CheckListType( nOutlineType )){ + if( GetEditWindow()->m_cDlgFuncList.CheckListType( nOutlineType ) + && GetEditWindow()->m_cDlgFuncList.IsUpToDate() ){ if( bForeground ){ ::SetFocus( GetEditWindow()->m_cDlgFuncList.GetHwnd() ); } diff --git a/sakura_core/doc/CDocEditor.cpp b/sakura_core/doc/CDocEditor.cpp index 1cb80474f0..53eaf01632 100644 --- a/sakura_core/doc/CDocEditor.cpp +++ b/sakura_core/doc/CDocEditor.cpp @@ -55,6 +55,8 @@ CDocEditor::CDocEditor(CEditDoc* pcDoc) */ void CDocEditor::SetModified( bool flag, bool redraw) { + m_pcDocRef->m_pcEditWnd->m_cDlgFuncList.NotifyDocModification(); + if( m_bIsDocModified == flag ) // 変更がなければ何もしない return; diff --git a/sakura_core/outline/CDlgFuncList.cpp b/sakura_core/outline/CDlgFuncList.cpp index 98c05b0a52..f7e548b9f9 100644 --- a/sakura_core/outline/CDlgFuncList.cpp +++ b/sakura_core/outline/CDlgFuncList.cpp @@ -346,6 +346,7 @@ HWND CDlgFuncList::DoModeless( CEditView* pcEditView=(CEditView*)lParam; if( !pcEditView ) return NULL; m_pcFuncInfoArr = pcFuncInfoArr; /* 関数情報配列 */ + m_bFuncInfoArrIsUpToDate = true; m_nCurLine = nCurLine; /* 現在行 */ m_nCurCol = nCurCol; /* 現在桁 */ m_nOutlineType = nOutlineType; /* アウトライン解析の種別 */ @@ -2553,6 +2554,7 @@ void CDlgFuncList::Redraw( int nOutLineType, int nListType, CFuncInfoArr* pcFunc m_nOutlineType = nOutLineType; m_nListType = nListType; m_pcFuncInfoArr = pcFuncInfoArr; /* 関数情報配列 */ + m_bFuncInfoArrIsUpToDate = true; m_nCurLine = nCurLine; /* 現在行 */ m_nCurCol = nCurCol; /* 現在桁 */ @@ -3913,6 +3915,14 @@ void CDlgFuncList::NotifyCaretMovement( CLayoutInt nCurLine, CLayoutInt nCurCol return; } + if( !m_bFuncInfoArrIsUpToDate ){ + return; + } + + if( m_nCurLine == nCurLine && m_nCurCol == nCurCol ){ + return; + } + m_nCurLine = nCurLine; m_nCurCol = nCurCol; @@ -3961,11 +3971,15 @@ void CDlgFuncList::SetItemSelection( int nFuncInfoIndex ) */ void CDlgFuncList::SetItemSelectionForTreeView( HWND hwndTree, int nFuncInfoIndex ) { - // 関数情報のインデックスに該当するアイテム探してを選択状態に + if( nFuncInfoIndex == -1 ){ + TreeView_SelectItem( hwndTree, NULL ); + return; + } + std::vector htiStack; htiStack.reserve( TreeView_GetCount( hwndTree ) ); htiStack.push_back( TreeView_GetRoot( hwndTree ) ); - int nStackIndex = 0; + size_t nStackIndex = 0; bool bFound = false; while( !bFound && nStackIndex < htiStack.size() ){ HTREEITEM htiCurrent = htiStack[nStackIndex]; @@ -4000,8 +4014,12 @@ void CDlgFuncList::SetItemSelectionForTreeView( HWND hwndTree, int nFuncInfoInde */ void CDlgFuncList::SetItemSelectionForListView( HWND hwndList, int nFuncInfoIndex ) { - ListView_SetItemState( hwndList, nFuncInfoIndex, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED ); - ListView_EnsureVisible( hwndList, nFuncInfoIndex, FALSE ); + if( nFuncInfoIndex != -1 ){ + ListView_SetItemState( hwndList, nFuncInfoIndex, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED ); + ListView_EnsureVisible( hwndList, nFuncInfoIndex, FALSE ); + }else{ + ListView_SetItemState( hwndList, nFuncInfoIndex, 0, LVIS_SELECTED | LVIS_FOCUSED ); + } return; } diff --git a/sakura_core/outline/CDlgFuncList.h b/sakura_core/outline/CDlgFuncList.h index ef8e349dde..9c1ad1bf74 100644 --- a/sakura_core/outline/CDlgFuncList.h +++ b/sakura_core/outline/CDlgFuncList.h @@ -229,5 +229,7 @@ class CDlgFuncList final : public CDialog POINT m_ptDefaultSize; POINT m_ptDefaultSizeClient; RECT m_rcItems[12]; + + bool m_bFuncInfoArrIsUpToDate; }; #endif /* SAKURA_CDLGFUNCLIST_B22A3877_572A_49B7_B683_50ECA451A6F8_H_ */ From 9ee234cdbcc2e23a903ecb34ea053e345fcfe72d Mon Sep 17 00:00:00 2001 From: miwa Date: Sat, 12 Sep 2020 12:03:49 +0900 Subject: [PATCH 0098/1024] =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E6=99=82=E3=81=AB=E8=BF=BD=E5=BE=93=E3=81=8C?= =?UTF-8?q?=E5=A4=96=E3=82=8C=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/doc/CDocEditor.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sakura_core/doc/CDocEditor.cpp b/sakura_core/doc/CDocEditor.cpp index 53eaf01632..8d21c9b712 100644 --- a/sakura_core/doc/CDocEditor.cpp +++ b/sakura_core/doc/CDocEditor.cpp @@ -55,7 +55,9 @@ CDocEditor::CDocEditor(CEditDoc* pcDoc) */ void CDocEditor::SetModified( bool flag, bool redraw) { - m_pcDocRef->m_pcEditWnd->m_cDlgFuncList.NotifyDocModification(); + if( redraw ){ + m_pcDocRef->m_pcEditWnd->m_cDlgFuncList.NotifyDocModification(); + } if( m_bIsDocModified == flag ) // 変更がなければ何もしない return; From cb91dbfa2a1afd4256d3748d13e3bc340e7d0b05 Mon Sep 17 00:00:00 2001 From: miwa Date: Sat, 12 Sep 2020 21:57:23 +0900 Subject: [PATCH 0099/1024] =?UTF-8?q?=E8=BF=BD=E5=BE=93=E6=99=82=E3=81=AB?= =?UTF-8?q?=E3=81=AF=E3=83=84=E3=83=AA=E3=83=BC=E3=81=AE=E5=B1=95=E9=96=8B?= =?UTF-8?q?=E7=8A=B6=E6=85=8B=E3=82=92=E3=82=AD=E3=83=BC=E3=83=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/cmd/CViewCommander_Outline.cpp | 5 +-- sakura_core/outline/CDlgFuncList.cpp | 46 +++++++++++++++------- sakura_core/outline/CDlgFuncList.h | 7 ++-- 3 files changed, 37 insertions(+), 21 deletions(-) diff --git a/sakura_core/cmd/CViewCommander_Outline.cpp b/sakura_core/cmd/CViewCommander_Outline.cpp index 56ab986b35..c935c2ecde 100644 --- a/sakura_core/cmd/CViewCommander_Outline.cpp +++ b/sakura_core/cmd/CViewCommander_Outline.cpp @@ -70,10 +70,9 @@ BOOL CViewCommander::Command_FUNCLIST( if( NULL != GetEditWindow()->m_cDlgFuncList.GetHwnd() && nAction != SHOW_RELOAD ){ switch(nAction ){ case SHOW_NORMAL: // アクティブにする - // 開いているものと種別が同じかつ内容が最新ならActiveにするだけ.それ以外なら再解析 + // 開いているものと種別が同じならActiveにするだけ.異なれば再解析 GetEditWindow()->m_cDlgFuncList.SyncColor(); - if( GetEditWindow()->m_cDlgFuncList.CheckListType( nOutlineType ) - && GetEditWindow()->m_cDlgFuncList.IsUpToDate() ){ + if( GetEditWindow()->m_cDlgFuncList.CheckListType( nOutlineType )){ if( bForeground ){ ::SetFocus( GetEditWindow()->m_cDlgFuncList.GetHwnd() ); } diff --git a/sakura_core/outline/CDlgFuncList.cpp b/sakura_core/outline/CDlgFuncList.cpp index f7e548b9f9..3ca3d5dcbf 100644 --- a/sakura_core/outline/CDlgFuncList.cpp +++ b/sakura_core/outline/CDlgFuncList.cpp @@ -670,7 +670,7 @@ void CDlgFuncList::SetData() // 選択状態更新 int nFuncInfoIndex = -1; if( GetFuncInfoIndex( m_nCurLine, m_nCurCol, &nFuncInfoIndex ) ){ - SetItemSelection( nFuncInfoIndex ); + SetItemSelection( nFuncInfoIndex, true ); } /* アウトライン ダイアログを自動的に閉じる */ @@ -3928,7 +3928,7 @@ void CDlgFuncList::NotifyCaretMovement( CLayoutInt nCurLine, CLayoutInt nCurCol int nFuncInfoIndex = -1; if( GetFuncInfoIndex( nCurLine, nCurCol, &nFuncInfoIndex ) ){ - SetItemSelection( nFuncInfoIndex ); + SetItemSelection( nFuncInfoIndex, false ); } return; @@ -3948,12 +3948,13 @@ void CDlgFuncList::NotifyDocModification() /*! リスト/ツリービュー上のアイテムを選択または選択解除 @param[in] nFuncInfoIndex 選択対象とする関数情報配列のインデックス(-1の場合は選択解除) + @param[in] bAllowExpand 選択対象を含むノードを展開するかどうか(ツリービュー以外では無視) */ -void CDlgFuncList::SetItemSelection( int nFuncInfoIndex ) +void CDlgFuncList::SetItemSelection( int nFuncInfoIndex, bool bAllowExpand ) { if( m_nViewType == VIEWTYPE_TREE ){ HWND hwndTree = GetItemHwnd( IDC_TREE_FL ); - SetItemSelectionForTreeView( hwndTree, nFuncInfoIndex ); + SetItemSelectionForTreeView( hwndTree, nFuncInfoIndex, bAllowExpand ); }else if( m_nViewType == VIEWTYPE_LIST ){ HWND hwndList = GetItemHwnd( IDC_LIST_FL ); SetItemSelectionForListView( hwndList, nFuncInfoIndex ); @@ -3968,8 +3969,9 @@ void CDlgFuncList::SetItemSelection( int nFuncInfoIndex ) ツリービュー上のアイテムを選択または選択解除 @param[in] hwndTree 対象とするツリービューのハンドル @param[in] nFuncInfoIndex 選択対象とする関数情報配列のインデックス(-1の場合は選択解除) + @param[in] bAllowExpand 選択対象を含むノードを展開するかどうか */ -void CDlgFuncList::SetItemSelectionForTreeView( HWND hwndTree, int nFuncInfoIndex ) +void CDlgFuncList::SetItemSelectionForTreeView( HWND hwndTree, int nFuncInfoIndex, bool bAllowExpand ) { if( nFuncInfoIndex == -1 ){ TreeView_SelectItem( hwndTree, NULL ); @@ -3977,11 +3979,11 @@ void CDlgFuncList::SetItemSelectionForTreeView( HWND hwndTree, int nFuncInfoInde } std::vector htiStack; + HTREEITEM htiFound = NULL; htiStack.reserve( TreeView_GetCount( hwndTree ) ); htiStack.push_back( TreeView_GetRoot( hwndTree ) ); size_t nStackIndex = 0; - bool bFound = false; - while( !bFound && nStackIndex < htiStack.size() ){ + while( htiFound == NULL && nStackIndex < htiStack.size() ){ HTREEITEM htiCurrent = htiStack[nStackIndex]; for( ; NULL != htiCurrent ; htiCurrent = TreeView_GetNextSibling( hwndTree, htiCurrent ) ){ TVITEM tvItem = {}; @@ -3990,9 +3992,7 @@ void CDlgFuncList::SetItemSelectionForTreeView( HWND hwndTree, int nFuncInfoInde TreeView_GetItem( hwndTree, &tvItem ); if( nFuncInfoIndex == TreeDummylParamToFuncInfoIndex( m_vecDummylParams, tvItem.lParam ) ){ // 発見 - TreeView_SelectItem( hwndTree, htiCurrent ); - TreeView_EnsureVisible( hwndTree, htiCurrent ); - bFound = true; + htiFound = htiCurrent; break; } @@ -4004,6 +4004,24 @@ void CDlgFuncList::SetItemSelectionForTreeView( HWND hwndTree, int nFuncInfoInde ++nStackIndex; } + if( htiFound != NULL ){ + HTREEITEM htiSelect = htiFound; + if( !bAllowExpand ){ + // 未展開のアイテムは勝手に開けないよう気を付けて選択 + HTREEITEM htiParent = TreeView_GetParent( hwndTree, htiFound ); + while( htiParent != NULL && (TreeView_GetItemState( hwndTree, htiParent, TVIS_EXPANDED ) & TVIS_EXPANDED) == 0 ){ + // [A] 展開 + // +-[B] 未展開 <<< ここを探します + // +-[C] 未展開 + // +-[htiFound] + htiSelect = htiParent; + htiParent = TreeView_GetParent( hwndTree, htiParent ); + } + } + TreeView_SelectItem( hwndTree, htiSelect ); + TreeView_EnsureVisible( hwndTree, htiSelect ); + } + return; } @@ -4028,11 +4046,11 @@ void CDlgFuncList::SetItemSelectionForListView( HWND hwndList, int nFuncInfoInde 指定した位置に該当する関数情報のインデックスを取得 @param[in] nCurLine 行 @param[in] nCurCol 桁 - @param[out] pIndexOut 該当する関数情報のインデックスを格納 + @param[out] pnIndexOut 該当する関数情報のインデックスを格納 @retval true 該当あり @retval false 該当なし(出力引数には何も設定せず) */ -bool CDlgFuncList::GetFuncInfoIndex( CLayoutInt nCurLine, CLayoutInt nCurCol, int* pIndexOut ) +bool CDlgFuncList::GetFuncInfoIndex( CLayoutInt nCurLine, CLayoutInt nCurCol, int* pnIndexOut ) { const CFuncInfo* pcFuncInfo = NULL; CLayoutInt nFuncLineOld(-1); @@ -4042,7 +4060,7 @@ bool CDlgFuncList::GetFuncInfoIndex( CLayoutInt nCurLine, CLayoutInt nCurCol, in int nFoundIndex = -1; int i; - if( m_pcFuncInfoArr == NULL || pIndexOut == NULL ){ + if( m_pcFuncInfoArr == NULL || pnIndexOut == NULL ){ return false; } @@ -4080,7 +4098,7 @@ bool CDlgFuncList::GetFuncInfoIndex( CLayoutInt nCurLine, CLayoutInt nCurCol, in return false; } - *pIndexOut = nFoundIndex; + *pnIndexOut = nFoundIndex; return true; } diff --git a/sakura_core/outline/CDlgFuncList.h b/sakura_core/outline/CDlgFuncList.h index 9c1ad1bf74..502982ede9 100644 --- a/sakura_core/outline/CDlgFuncList.h +++ b/sakura_core/outline/CDlgFuncList.h @@ -103,7 +103,6 @@ class CDlgFuncList final : public CDialog void LoadFileTreeSetting( CFileTreeSetting& data, SFilePath& IniDirPath ); void NotifyCaretMovement( CLayoutInt nCurLine, CLayoutInt nCurCol ); void NotifyDocModification(); - bool IsUpToDate() { return m_bFuncInfoArrIsUpToDate; } protected: bool m_bInChangeLayout; @@ -142,10 +141,10 @@ class CDlgFuncList final : public CDialog void SetTreeFile(); // ツリーコントロールの初期化:ファイルツリー void SetListVB( void ); /* リストビューコントロールの初期化:VisualBasic */ // Jul 10, 2003 little YOSHI void SetDocLineFuncList(); - void SetItemSelection( int nSelectItemIndex ); - void SetItemSelectionForTreeView( HWND hwndTree, int nSelectItemIndex ); + void SetItemSelection( int nSelectItemIndex, bool bAllowExpand ); + void SetItemSelectionForTreeView( HWND hwndTree, int nSelectItemIndex, bool bAllowExpand ); void SetItemSelectionForListView( HWND hwndList, int nSelectItemIndex ); - bool GetFuncInfoIndex( CLayoutInt nCurLine, CLayoutInt nCurCol, int* pIndexOut ); + bool GetFuncInfoIndex( CLayoutInt nCurLine, CLayoutInt nCurCol, int* pnIndexOut ); void SetTreeFileSub(HTREEITEM hParent, const WCHAR* pszFile); // 2002/11/1 frozen From a49240197d94da75e258f8f4326aab3e980afe6c Mon Sep 17 00:00:00 2001 From: Masaru Tsuchiyama Date: Sun, 13 Sep 2020 15:17:06 +0900 Subject: [PATCH 0100/1024] =?UTF-8?q?aps=20=E3=83=95=E3=82=A1=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E3=82=92=E7=84=A1=E8=A6=96=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index bc29c49138..a466343847 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +*.aps *.bak *.iobj *.ipdb From b306886dfef70185f08ba723b569fa923672e22f Mon Sep 17 00:00:00 2001 From: Masaru Tsuchiyama Date: Sun, 13 Sep 2020 15:29:10 +0900 Subject: [PATCH 0101/1024] =?UTF-8?q?appveyor=20=E3=81=AE=20artifact=20?= =?UTF-8?q?=E3=82=92=20Release=20=E7=89=88=E3=81=AB=E9=99=90=E5=AE=9A?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- appveyor.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/appveyor.yml b/appveyor.yml index f523b8e2f4..2fd7645c09 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -69,7 +69,9 @@ for: matrix: only: - platform: Win32 + configuration: Release - platform: x64 + configuration: Release artifacts: - path: 'sakura-*$(platform)-$(configuration)*.zip*' From 03984b98e3f76a611cc6f790a000edf33e43e918 Mon Sep 17 00:00:00 2001 From: Masaru Tsuchiyama Date: Sun, 13 Sep 2020 15:37:33 +0900 Subject: [PATCH 0102/1024] =?UTF-8?q?azure=20pipelines=20=E3=81=A7=20relea?= =?UTF-8?q?se=20=E3=83=93=E3=83=AB=E3=83=89=E3=81=AE=E3=81=BF=20artifacts?= =?UTF-8?q?=20=E3=82=92=E5=85=AC=E9=96=8B=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ci/azure-pipelines/template.job.build-unittest.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/ci/azure-pipelines/template.job.build-unittest.yml b/ci/azure-pipelines/template.job.build-unittest.yml index 12b576be71..b10265d452 100644 --- a/ci/azure-pipelines/template.job.build-unittest.yml +++ b/ci/azure-pipelines/template.job.build-unittest.yml @@ -59,6 +59,7 @@ jobs: # zip files for artifacts - script: zipArtifacts.bat $(BuildPlatform) $(Configuration) + condition: eq(variables['Configuration'], 'Release') displayName: Zip files for artifacts # Unit tests From b01d747dc5afcf0f8efde67993e3547662059650 Mon Sep 17 00:00:00 2001 From: Masaru Tsuchiyama Date: Sun, 13 Sep 2020 15:48:51 +0900 Subject: [PATCH 0103/1024] =?UTF-8?q?github=20actions=20=E3=81=A7=20artifa?= =?UTF-8?q?cts=20=E3=81=AE=E3=82=A2=E3=83=83=E3=83=97=E3=83=AD=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=82=92=20release=20=E3=81=AE=E3=81=BF=E3=81=AB?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build-sakura.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/build-sakura.yml b/.github/workflows/build-sakura.yml index 57a671850a..104cc2340d 100644 --- a/.github/workflows/build-sakura.yml +++ b/.github/workflows/build-sakura.yml @@ -72,47 +72,55 @@ jobs: - name: zipArtifacts run: zipArtifacts.bat ${{ matrix.platform }} ${{ matrix.config }} + if: ${{ matrix.config }} == 'Release' shell: cmd ## see https://github.com/actions/upload-artifact - name: Upload Installer uses: actions/upload-artifact@v2 + if: ${{ matrix.config }} == 'Release' with: name: Installer ${{ matrix.platform }} ${{ matrix.config }} path: 'sakura-*-Installer.zip' - name: Upload Installer MD5 uses: actions/upload-artifact@v2 + if: ${{ matrix.config }} == 'Release' with: name: Installer MD5 ${{ matrix.platform }} ${{ matrix.config }} path: 'sakura-*-Installer.zip.md5' - name: Upload Exe uses: actions/upload-artifact@v2 + if: ${{ matrix.config }} == 'Release' with: name: Exe ${{ matrix.platform }} ${{ matrix.config }} path: 'sakura-*-Exe.zip' - name: Upload Exe MD5 uses: actions/upload-artifact@v2 + if: ${{ matrix.config }} == 'Release' with: name: Exe MD5 ${{ matrix.platform }} ${{ matrix.config }} path: 'sakura-*-Exe.zip.md5' - name: Upload Log uses: actions/upload-artifact@v2 + if: ${{ matrix.config }} == 'Release' with: name: Log ${{ matrix.platform }} ${{ matrix.config }} path: 'sakura-*-Log.zip' - name: Upload Asm uses: actions/upload-artifact@v2 + if: ${{ matrix.config }} == 'Release' with: name: Asm ${{ matrix.platform }} ${{ matrix.config }} path: 'sakura-*-Asm.zip' - name: Upload Dev uses: actions/upload-artifact@v2 + if: ${{ matrix.config }} == 'Release' with: name: Dev ${{ matrix.platform }} ${{ matrix.config }} path: 'sakura-*-Dev.zip' From f8227f0667edc11dd18d45a7503629945b4d8df0 Mon Sep 17 00:00:00 2001 From: miwa Date: Sat, 12 Sep 2020 23:48:14 +0900 Subject: [PATCH 0104/1024] =?UTF-8?q?GREP=E3=83=80=E3=82=A4=E3=82=A2?= =?UTF-8?q?=E3=83=AD=E3=82=B0=E3=81=AE=E3=82=B3=E3=83=B3=E3=83=9C=E3=83=9C?= =?UTF-8?q?=E3=83=83=E3=82=AF=E3=82=B9=E3=82=92=E7=AD=89=E5=B9=85=E3=83=95?= =?UTF-8?q?=E3=82=A9=E3=83=B3=E3=83=88=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgGrep.cpp | 15 +++++++++++---- sakura_core/dlg/CDlgGrep.h | 2 +- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/sakura_core/dlg/CDlgGrep.cpp b/sakura_core/dlg/CDlgGrep.cpp index 0e1ac85b29..d57233b281 100644 --- a/sakura_core/dlg/CDlgGrep.cpp +++ b/sakura_core/dlg/CDlgGrep.cpp @@ -350,9 +350,14 @@ BOOL CDlgGrep::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) SetComboBoxDeleter(GetItemHwnd(IDC_COMBO_EXCLUDE_FOLDER), &m_comboDelExcludeFolder); // フォント設定 2012/11/27 Uchi - HFONT hFontOld = (HFONT)::SendMessageAny( GetItemHwnd( IDC_COMBO_TEXT ), WM_GETFONT, 0, 0 ); - HFONT hFont = SetMainFont( GetItemHwnd( IDC_COMBO_TEXT ) ); - m_cFontText.SetFont( hFontOld, hFont, GetItemHwnd( IDC_COMBO_TEXT ) ); + const int nItemIds[] = { IDC_COMBO_TEXT, IDC_COMBO_FILE, IDC_COMBO_FOLDER, IDC_COMBO_EXCLUDE_FILE, IDC_COMBO_EXCLUDE_FOLDER }; + m_cFontDeleters.resize( sizeof(nItemIds) / sizeof(nItemIds[0]) ); + for( i = 0; i < m_cFontDeleters.size(); ++i ){ + HWND hwndItem = GetItemHwnd( nItemIds[i] ); + HFONT hFontOld = (HFONT)::SendMessageAny( hwndItem, WM_GETFONT, 0, 0 ); + HFONT hFont = SetMainFont( hwndItem ); + m_cFontDeleters[i].SetFont( hFontOld, hFont, hwndItem ); + } /* 基底クラスメンバ */ // CreateSizeBox(); @@ -397,7 +402,9 @@ LRESULT CALLBACK OnFolderProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam) BOOL CDlgGrep::OnDestroy() { - m_cFontText.ReleaseOnDestroy(); + for( int i = 0; i < m_cFontDeleters.size(); ++i ){ + m_cFontDeleters[i].ReleaseOnDestroy(); + } return CDialog::OnDestroy(); } diff --git a/sakura_core/dlg/CDlgGrep.h b/sakura_core/dlg/CDlgGrep.h index b8760fffb4..aef4dfe96e 100644 --- a/sakura_core/dlg/CDlgGrep.h +++ b/sakura_core/dlg/CDlgGrep.h @@ -76,7 +76,7 @@ class CDlgGrep : public CDialog SComboBoxItemDeleter m_comboDelExcludeFolder; CRecentExcludeFolder m_cRecentExcludeFolder; - CFontAutoDeleter m_cFontText; + std::vector m_cFontDeleters; /* || 実装ヘルパ関数 From eae52feee68a4e1a4120a27be8ef0e7fd6f0ddba Mon Sep 17 00:00:00 2001 From: miwa Date: Sun, 13 Sep 2020 16:52:30 +0900 Subject: [PATCH 0105/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgGrep.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sakura_core/dlg/CDlgGrep.cpp b/sakura_core/dlg/CDlgGrep.cpp index d57233b281..9d5eca1122 100644 --- a/sakura_core/dlg/CDlgGrep.cpp +++ b/sakura_core/dlg/CDlgGrep.cpp @@ -351,8 +351,8 @@ BOOL CDlgGrep::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) // フォント設定 2012/11/27 Uchi const int nItemIds[] = { IDC_COMBO_TEXT, IDC_COMBO_FILE, IDC_COMBO_FOLDER, IDC_COMBO_EXCLUDE_FILE, IDC_COMBO_EXCLUDE_FOLDER }; - m_cFontDeleters.resize( sizeof(nItemIds) / sizeof(nItemIds[0]) ); - for( i = 0; i < m_cFontDeleters.size(); ++i ){ + m_cFontDeleters.resize( _countof( nItemIds ) ); + for( size_t i = 0; i < _countof( nItemIds ); ++i ){ HWND hwndItem = GetItemHwnd( nItemIds[i] ); HFONT hFontOld = (HFONT)::SendMessageAny( hwndItem, WM_GETFONT, 0, 0 ); HFONT hFont = SetMainFont( hwndItem ); @@ -402,7 +402,7 @@ LRESULT CALLBACK OnFolderProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam) BOOL CDlgGrep::OnDestroy() { - for( int i = 0; i < m_cFontDeleters.size(); ++i ){ + for( size_t i = 0; i < m_cFontDeleters.size(); ++i ){ m_cFontDeleters[i].ReleaseOnDestroy(); } return CDialog::OnDestroy(); From a7f767c10b4312cdfe3c47b7f4f0f616d66b325e Mon Sep 17 00:00:00 2001 From: Masaru Tsuchiyama Date: Sun, 13 Sep 2020 17:05:50 +0900 Subject: [PATCH 0106/1024] =?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- appveyor.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/appveyor.yml b/appveyor.yml index 2fd7645c09..2ba1a88f5c 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -65,6 +65,7 @@ for: artifacts: - path: 'sakura-*-Chm.zip*' +# run only for Release - matrix: only: From 9c95e44566667df24a2f01fd3be6357f1c227333 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 13 Sep 2020 19:33:31 +0900 Subject: [PATCH 0107/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E3=81=AB=E3=82=88=E3=82=8A=E3=82=B3=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=88=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/cmd/CViewCommander_CustMenu.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/cmd/CViewCommander_CustMenu.cpp b/sakura_core/cmd/CViewCommander_CustMenu.cpp index 8dad6b9e2d..7ca5db467e 100644 --- a/sakura_core/cmd/CViewCommander_CustMenu.cpp +++ b/sakura_core/cmd/CViewCommander_CustMenu.cpp @@ -33,7 +33,7 @@ void CViewCommander::Command_MENU_RBUTTON( void ) { CNativeW cInfo = m_pCommanderView->m_cTipWnd.GetInfoText(); - // 見た目と同じように、\n を CR+LFへ変換する + // 貼り付けで扱いやすいように、改行記号を CR+LF に置換する cInfo.Replace( L"\n", L"\r\n" ); /* クリップボードにデータを設定 */ From ca9351401da708ce0211ba7c63ecf797369f4e98 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 13 Sep 2020 19:49:05 +0900 Subject: [PATCH 0108/1024] =?UTF-8?q?=E7=BD=AE=E6=8F=9B=E4=BB=95=E6=A7=98?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/window/CTipWnd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/window/CTipWnd.cpp b/sakura_core/window/CTipWnd.cpp index 17aa83f8b7..f6ddf1ad79 100644 --- a/sakura_core/window/CTipWnd.cpp +++ b/sakura_core/window/CTipWnd.cpp @@ -28,7 +28,7 @@ static constexpr WCHAR szDummy[] = { L" " }; const WCHAR* UnEscapeInfoText( CNativeW& cInfo ) { cInfo.Replace( L"\\n", L"\n" ); - cInfo.Replace( L"\\x53", L"\\" ); + cInfo.Replace( L"\\\\", L"\\" ); return cInfo.GetStringPtr(); } From b008715e6c10c7835864d227f4c9d8710d57b06b Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 13 Sep 2020 20:11:35 +0900 Subject: [PATCH 0109/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E3=81=AB=E3=82=88=E3=82=8A=E5=88=B6=E5=BE=A1?= =?UTF-8?q?=E6=A7=8B=E9=80=A0=E3=81=AE=E3=83=AA=E3=83=95=E3=82=A1=E3=82=AF?= =?UTF-8?q?=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0=E3=82=92=E5=8F=96=E6=B6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CEditView_Search.cpp | 113 ++++++++++++++------------ 1 file changed, 62 insertions(+), 51 deletions(-) diff --git a/sakura_core/view/CEditView_Search.cpp b/sakura_core/view/CEditView_Search.cpp index d33439fa9d..e628162404 100644 --- a/sakura_core/view/CEditView_Search.cpp +++ b/sakura_core/view/CEditView_Search.cpp @@ -106,77 +106,88 @@ BOOL CEditView::KeyWordHelpSearchDict( LID_SKH nID, POINT* po, RECT* rc ) */ BOOL CEditView::KeySearchCore( const CNativeW* pcmemCurText ) { - /* tooltipバッファ初期化 */ - m_cTipWnd.m_cInfo.Clear(); + CNativeW* pcmemRefKey; + int nCmpLen = STRNCMP_MAX; // 2006.04.10 fon + int nLine; // 2006.04.10 fon + m_cTipWnd.m_cInfo.SetString( L"" ); /* tooltipバッファ初期化 */ /* 1行目にキーワード表示の場合 */ - if( m_pTypeData->m_bUseKeyHelpKeyDisp ){ /* キーワードも表示する */ // 2006.04.10 fon - m_cTipWnd.m_cInfo.AppendStringF( L"[ %s ]", pcmemCurText->GetStringPtr() ); + if(m_pTypeData->m_bUseKeyHelpKeyDisp){ /* キーワードも表示する */ // 2006.04.10 fon + m_cTipWnd.m_cInfo.AppendString( L"[ " ); + m_cTipWnd.m_cInfo.AppendString( pcmemCurText->GetStringPtr() ); + m_cTipWnd.m_cInfo.AppendString( L" ]" ); } - - // 一致確認する最大文字数、途中まで一致を使う場合は短くする - const int nCmpLen = m_pTypeData->m_bUseKeyHelpPrefix - ? std::min( STRNCMP_MAX, (int)::wcslen( pcmemCurText->GetStringPtr() ) ) - : STRNCMP_MAX; - - // 検索前にヒットフラグをクリアしておく + /* 途中まで一致を使う場合 */ + if(m_pTypeData->m_bUseKeyHelpPrefix) + nCmpLen = wcslen( pcmemCurText->GetStringPtr() ); // 2006.04.10 fon m_cTipWnd.m_KeyWasHit = FALSE; - - // 辞書ファイルの冊数、最大値は MAX_KEYHELP_FILE 。 - const int nKeyHelpNum = std::min(m_pTypeData->m_nKeyHelpNum, (int)MAX_KEYHELP_FILE); - - for( int i = 0; i < nKeyHelpNum; i++ ){ + for(int i =0 ; i < m_pTypeData->m_nKeyHelpNum; i++){ //最大数:MAX_KEYHELP_FILE if( m_pTypeData->m_KeyHelpArr[i].m_bUse ){ - CNativeW* pcmemRefKey = NULL; - CNativeW* pcmemRefText = NULL; - int nLine; - const auto& szPath = m_pTypeData->m_KeyHelpArr[i].m_szPath; - const int nSearchResult = m_cDicMgr.CDicMgr::Search( + // 2006.04.10 fon (nCmpLen,pcmemRefKey,nSearchLine)引数を追加 + CNativeW* pcmemRefText; + int nSearchResult=m_cDicMgr.CDicMgr::Search( pcmemCurText->GetStringPtr(), nCmpLen, &pcmemRefKey, &pcmemRefText, - szPath, + m_pTypeData->m_KeyHelpArr[i].m_szPath, &nLine ); - /* 該当するキーがある */ if( nSearchResult ){ - // バッファが空でなければseparator挿入 - if( m_cTipWnd.GetInfoText().GetStringLength() != 0 ){ - m_cTipWnd.m_cInfo.AppendString( L"\n--------------------\n" ); - } - /* 有効になっている辞書を全部なめて、ヒットの都度説明の継ぎ増し */ - if( m_pTypeData->m_bUseKeyHelpAllSearch ){ /* ヒットした次の辞書も検索 */ - /* 複数辞書をなめるので辞書のパス挿入、表示するのはファイル名(拡張子なし)のみ */ - WCHAR szFile[MAX_PATH]; - _wsplitpath( szPath, NULL, NULL, szFile, NULL ); - m_cTipWnd.m_cInfo.AppendStringF( L"■%s\n", szFile ); - } + if(m_pTypeData->m_bUseKeyHelpAllSearch){ /* ヒットした次の辞書も検索 */ // 2006.04.10 fon + /* バッファに前のデータが詰まっていたらseparator挿入 */ + if(m_cTipWnd.m_cInfo.GetStringLength() != 0) + m_cTipWnd.m_cInfo.AppendString( LS(STR_ERR_DLGEDITVW5) ); + else + m_cTipWnd.m_cInfo.AppendString( LS(STR_ERR_DLGEDITVW6) ); /* 先頭の場合 */ + /* 辞書のパス挿入 */ + { + WCHAR szFile[MAX_PATH]; + // 2013.05.08 表示するのはファイル名(拡張子なし)のみにする + _wsplitpath( m_pTypeData->m_KeyHelpArr[i].m_szPath, NULL, NULL, szFile, NULL ); + m_cTipWnd.m_cInfo.AppendString( szFile ); + } + m_cTipWnd.m_cInfo.AppendString( L"\n" ); + /* 前方一致でヒットした単語を挿入 */ + if(m_pTypeData->m_bUseKeyHelpPrefix){ /* 選択範囲で前方一致検索 */ + m_cTipWnd.m_cInfo.AppendString( pcmemRefKey->GetStringPtr() ); + m_cTipWnd.m_cInfo.AppendString( L" >>\n" ); + } + + /* 調査した「意味」を挿入 */ + m_cTipWnd.m_cInfo.AppendString( UnEscapeInfoText( *pcmemRefText ) ); - /* 前方一致でヒットした単語を挿入 */ - if( m_pTypeData->m_bUseKeyHelpPrefix ){ /* 選択範囲で前方一致検索 */ - m_cTipWnd.m_cInfo.AppendStringF(L"%s >>\n", pcmemRefKey->GetStringPtr() ); + delete pcmemRefText; + delete pcmemRefKey; // 2006.07.02 genta + /* タグジャンプ用の情報を残す */ + if(!m_cTipWnd.m_KeyWasHit){ + m_cTipWnd.m_nSearchDict=i; /* 辞書を開くとき最初にヒットした辞書を開く */ + m_cTipWnd.m_nSearchLine=nLine; + m_cTipWnd.m_KeyWasHit = TRUE; + } } + else{ /* 最初のヒット項目のみ返す場合 */ + /* キーワードが入っていたらseparator挿入 */ + if(m_cTipWnd.m_cInfo.GetStringLength() != 0) + m_cTipWnd.m_cInfo.AppendString( L"\n--------------------\n" ); - /* 調査した「意味」を挿入 */ - m_cTipWnd.m_cInfo.AppendString( UnEscapeInfoText( *pcmemRefText ) ); + /* 前方一致でヒットした単語を挿入 */ + if(m_pTypeData->m_bUseKeyHelpPrefix){ /* 選択範囲で前方一致検索 */ + m_cTipWnd.m_cInfo.AppendString( pcmemRefKey->GetStringPtr() ); + m_cTipWnd.m_cInfo.AppendString( L" >>\n" ); + } + + /* 調査した「意味」を挿入 */ + m_cTipWnd.m_cInfo.AppendString( UnEscapeInfoText( *pcmemRefText ) ); - /* 最初のヒット項目のみ返す場合、または、初回ヒットの場合 */ - if( !m_pTypeData->m_bUseKeyHelpAllSearch - || !m_cTipWnd.m_KeyWasHit ){ + delete pcmemRefText; + delete pcmemRefKey; // 2006.07.02 genta /* タグジャンプ用の情報を残す */ - m_cTipWnd.m_nSearchDict = i; - m_cTipWnd.m_nSearchLine = nLine; + m_cTipWnd.m_nSearchDict=i; + m_cTipWnd.m_nSearchLine=nLine; m_cTipWnd.m_KeyWasHit = TRUE; - } - - delete pcmemRefText; - delete pcmemRefKey; - - /* 最初のヒット項目のみ返す場合 */ - if( !m_pTypeData->m_bUseKeyHelpAllSearch ){ return TRUE; } } From 7e3c597eb6270912842247c6db1b0b72a0a78574 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 13 Sep 2020 20:19:54 +0900 Subject: [PATCH 0110/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E3=81=AB=E3=82=88=E3=82=8A=20CTipWnd::Show?= =?UTF-8?q?=20=E3=81=AE=E7=AC=AC3=E5=BC=95=E6=95=B0=E3=82=92=E9=99=A4?= =?UTF-8?q?=E5=8E=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CEditView.cpp | 6 +++--- sakura_core/window/CTipWnd.cpp | 7 +------ sakura_core/window/CTipWnd.h | 2 +- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index f335fc79ea..5e73ac9406 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -1296,7 +1296,7 @@ VOID CEditView::OnTimer( bool bHide; if( MiniMapCursorLineTip( &po, &rc, &bHide ) ){ m_cTipWnd.m_bAlignLeft = true; - m_cTipWnd.Show( po.x, po.y + m_pcEditWnd->GetActiveView().GetTextMetrics().GetHankakuHeight(), NULL ); + m_cTipWnd.Show( po.x, po.y + m_pcEditWnd->GetActiveView().GetTextMetrics().GetHankakuHeight() ); }else{ if( bHide && 0 == m_dwTipTimer ){ m_cTipWnd.Hide(); @@ -1305,7 +1305,7 @@ VOID CEditView::OnTimer( }else{ if( FALSE != KeyWordHelpSearchDict( LID_SKH_ONTIMER, &po, &rc ) ){ // 2006.04.10 fon /* 辞書Tipを表示 */ - m_cTipWnd.Show( po.x, po.y + GetTextMetrics().GetHankakuHeight(), NULL ); + m_cTipWnd.Show( po.x, po.y + GetTextMetrics().GetHankakuHeight() ); } } } @@ -2662,7 +2662,7 @@ bool CEditView::ShowKeywordHelp( POINT po, LPCWSTR pszHelp, LPRECT prcHokanWin) // 2001/06/19 End /* 辞書Tipを表示 */ - m_cTipWnd.Show( po.x, po.y , NULL , &rcTipWin); + m_cTipWnd.Show( po.x, po.y, &rcTipWin ); return true; } } diff --git a/sakura_core/window/CTipWnd.cpp b/sakura_core/window/CTipWnd.cpp index f6ddf1ad79..874c7e4ec1 100644 --- a/sakura_core/window/CTipWnd.cpp +++ b/sakura_core/window/CTipWnd.cpp @@ -106,16 +106,11 @@ void CTipWnd::AfterCreateWindow( void ) } /* Tipを表示 */ -void CTipWnd::Show( int nX, int nY, const WCHAR* szText, RECT* pRect ) +void CTipWnd::Show( int nX, int nY, RECT* pRect ) { HDC hdc; RECT rc; - if( NULL != szText ){ - m_cInfo.SetString( szText ); - UnEscapeInfoText( m_cInfo ); - } - hdc = ::GetDC( GetHwnd() ); // サイズを計算済み 2001/06/19 asa-o diff --git a/sakura_core/window/CTipWnd.h b/sakura_core/window/CTipWnd.h index 8952be7a8c..034bc5ac56 100644 --- a/sakura_core/window/CTipWnd.h +++ b/sakura_core/window/CTipWnd.h @@ -39,7 +39,7 @@ class CTipWnd final : public CWnd /* || Attributes & Operations */ - void Show( int nX, int nY, const WCHAR* szText, RECT* pRect = NULL ); /* Tipを表示 */ + void Show( int nX, int nY, RECT* pRect = NULL ); /* Tipを表示 */ void Hide( void ); /* Tipを消す */ void GetWindowSize(LPRECT pRect); // 2001/06/19 asa-o ウィンドウのサイズを得る From 29ddc5c136b958d28349df90eaef68b6c42415a4 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 13 Sep 2020 20:29:21 +0900 Subject: [PATCH 0111/1024] =?UTF-8?q?=E7=BD=AE=E6=8F=9B=E4=BB=95=E6=A7=98?= =?UTF-8?q?=E3=82=92=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/window/CTipWnd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/window/CTipWnd.cpp b/sakura_core/window/CTipWnd.cpp index 874c7e4ec1..7af4b58136 100644 --- a/sakura_core/window/CTipWnd.cpp +++ b/sakura_core/window/CTipWnd.cpp @@ -28,7 +28,7 @@ static constexpr WCHAR szDummy[] = { L" " }; const WCHAR* UnEscapeInfoText( CNativeW& cInfo ) { cInfo.Replace( L"\\n", L"\n" ); - cInfo.Replace( L"\\\\", L"\\" ); + cInfo.Replace( L"\\x5C", L"\\" ); return cInfo.GetStringPtr(); } From 1004dc44176fffe5d79dee7e35b0a756cccfb09a Mon Sep 17 00:00:00 2001 From: miwa Date: Sun, 13 Sep 2020 20:58:40 +0900 Subject: [PATCH 0112/1024] =?UTF-8?q?ListView=E3=81=AE=E4=B8=A6=E3=81=B3?= =?UTF-8?q?=E9=A0=86=E3=81=8C=E5=A4=89=E6=9B=B4=E3=81=95=E3=82=8C=E3=81=9F?= =?UTF-8?q?=E6=99=82=E3=81=AB=E9=81=B8=E6=8A=9E=E4=BD=8D=E7=BD=AE=E3=81=8C?= =?UTF-8?q?=E4=B8=8D=E6=AD=A3=E3=81=AB=E3=81=AA=E3=82=8B=E5=95=8F=E9=A1=8C?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3(=E3=83=AC=E3=83=93=E3=83=A5?= =?UTF-8?q?=E3=83=BC=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/outline/CDlgFuncList.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/sakura_core/outline/CDlgFuncList.cpp b/sakura_core/outline/CDlgFuncList.cpp index 3ca3d5dcbf..e8043582c8 100644 --- a/sakura_core/outline/CDlgFuncList.cpp +++ b/sakura_core/outline/CDlgFuncList.cpp @@ -4032,11 +4032,23 @@ void CDlgFuncList::SetItemSelectionForTreeView( HWND hwndTree, int nFuncInfoInde */ void CDlgFuncList::SetItemSelectionForListView( HWND hwndList, int nFuncInfoIndex ) { - if( nFuncInfoIndex != -1 ){ - ListView_SetItemState( hwndList, nFuncInfoIndex, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED ); - ListView_EnsureVisible( hwndList, nFuncInfoIndex, FALSE ); - }else{ + if( nFuncInfoIndex == -1 ){ ListView_SetItemState( hwndList, nFuncInfoIndex, 0, LVIS_SELECTED | LVIS_FOCUSED ); + return; + } + + int nCount = ListView_GetItemCount( hwndList ); + for( int i = 0; i < nCount; ++i ){ + LVITEM lvItem = {}; + lvItem.mask = LVIF_PARAM; + lvItem.iItem = i; + lvItem.iSubItem = 0; + ListView_GetItem( hwndList, &lvItem ); + if( lvItem.lParam == nFuncInfoIndex ){ + ListView_SetItemState( hwndList, i, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED ); + ListView_EnsureVisible( hwndList, i, FALSE ); + break; + } } return; From eb0ef5b63c7e12cecd97886740b384208bd33354 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 13 Sep 2020 21:20:18 +0900 Subject: [PATCH 0113/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E3=81=AB=E3=82=88=E3=82=8A=E3=83=98=E3=83=AB?= =?UTF-8?q?=E3=83=97=E3=81=AB=E8=AA=AC=E6=98=8E=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- help/sakura/res/HLP000105.html | 1 + 1 file changed, 1 insertion(+) diff --git a/help/sakura/res/HLP000105.html b/help/sakura/res/HLP000105.html index 2c002c9585..04115e1e7f 100644 --- a/help/sakura/res/HLP000105.html +++ b/help/sakura/res/HLP000105.html @@ -23,6 +23,7 @@

    キーワードヘルプ

    ・キーワードは複数指定可能です(同義語)。半角カンマで区切って下さい
    ・'\n'で訳語に改行を入れられます
    +・'\x5C'で訳語に'\'を入れられます
    ・一つの定義(行)は、10キロバイト程度までです
    ・一桁目が';'ならコメント行とみなします

    From cc957058ec3e94ad3b6c51ebd2530edf4bf0dc6d Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 13 Sep 2020 22:58:22 +0900 Subject: [PATCH 0114/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E3=81=AB=E3=82=88=E3=82=8A=E3=83=98=E3=83=AB?= =?UTF-8?q?=E3=83=97=E3=81=AB=E6=B3=A8=E6=84=8F=E5=96=9A=E8=B5=B7=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- help/sakura/res/HLP000105.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/help/sakura/res/HLP000105.html b/help/sakura/res/HLP000105.html index 04115e1e7f..457ffdea67 100644 --- a/help/sakura/res/HLP000105.html +++ b/help/sakura/res/HLP000105.html @@ -23,7 +23,7 @@

    キーワードヘルプ

    ・キーワードは複数指定可能です(同義語)。半角カンマで区切って下さい
    ・'\n'で訳語に改行を入れられます
    -・'\x5C'で訳語に'\'を入れられます
    +・'\x5C'で訳語に'\'を入れられます。'\x5c'では入れられないので注意して下さい
    ・一つの定義(行)は、10キロバイト程度までです
    ・一桁目が';'ならコメント行とみなします

    From 646fe6356116b5e2f02b294e71d69f70e6790032 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Tue, 15 Sep 2020 23:47:13 +0900 Subject: [PATCH 0115/1024] =?UTF-8?q?Revert=20"=E3=82=B5=E3=82=AF=E3=83=A9?= =?UTF-8?q?=E3=82=A8=E3=83=87=E3=82=A3=E3=82=BF=E3=81=AE=E8=B5=B7=E5=8B=95?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99?= =?UTF-8?q?=E3=82=8B"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 9da897d596af01a8870d936655c0a40c9f1ff7a8. --- installer/sinst_src/keyword/bat.khp | 2 +- sakura_core/_main/CProcessFactory.cpp | 33 +- tests/unittests/StartEditorProcessForTest.h | 48 --- tests/unittests/code-main.cpp | 128 -------- tests/unittests/test-winmain.cpp | 326 -------------------- tests/unittests/tests1.vcxproj | 5 - tests/unittests/tests1.vcxproj.filters | 11 - 7 files changed, 31 insertions(+), 522 deletions(-) delete mode 100644 tests/unittests/StartEditorProcessForTest.h delete mode 100644 tests/unittests/code-main.cpp delete mode 100644 tests/unittests/test-winmain.cpp diff --git a/installer/sinst_src/keyword/bat.khp b/installer/sinst_src/keyword/bat.khp index 11ad23d112..78f51e081a 100644 --- a/installer/sinst_src/keyword/bat.khp +++ b/installer/sinst_src/keyword/bat.khp @@ -27,7 +27,7 @@ FDISK /// MS-DOS で使うためのハードディスクを設定します.\n\nF FIND /// ファイル(複数可)内の文字列を検索します.\n\nFIND [/V] [/C] [/N] [/I] "文字列" [[ドライブ:][パス]ファイル名[ ...]]\n /V 指定した文字列を含まない行をすべて表示します.\n /C 指定した文字列を含む行の数だけを表示します.\n /N 行番号を表示します.\n /I 大文字と小文字の区別をしないで検索します.\n "文字列" 検索する文字列を指定します.\n [ドライブ:][パス]ファイル名\n 検索するファイル(複数可)を指定します.\n\nパス名の指定がなければ, プロンプトで入力された文字列, または別のコマンド\nからパイプ処理で渡された文字列を検索します. FOR,IN,DO /// 指定されたコマンドをファイルセットの各ファイルごとに実行します.\n\nFOR %変数 IN (セット) DO コマンド [コマンド パラメータ]\n\n %変数 置き換え可能なパラメータを指定します.\n (セット) ファイルセットを指定します. ワイルドカードも使えます.\n コマンド 各ファイルごとに実行するコマンドを指定します.\n コマンドパラメータ\n 指定したコマンドのパラメータやスイッチを指定します.\n\nFOR コマンドをバッチファイル中で使うには, %変数の代わりに %%変数を指定して\nください. GOTO /// バッチファイル中でラベルが指定されている行へ Windows の実行を移動します.\n\nGOTO ラベル\n\n ラベル バッチ ファイル中でラベルとして使う文字列を指定します.\n\nラベルは : (コロン)で行を始めてください. -IF,ERRORLEVEL,EXIST /// バッチファイル中で条件処理を実行します.\n\nIF [NOT] ERRORLEVEL 番号 コマンド\nIF [NOT] 文字列1==文字列2 コマンド\nIF [NOT] EXIST ファイル名 コマンド\n\n NOT 条件が偽のときだけコマンドを実行するように指定します.\n ERRORLEVEL 番号 最近実行したプログラムが返した終了コードが指定した番号\n 以上であれば真になるように指定します.\n コマンド  条件が真であれば実行するコマンドを指定します.\n 文字列1==文字列2 文字列が一致すれば真になるように指定します.\n EXIST ファイル名 ファイル名に指定されたファイルが実際に存在すれば真に\n なるように指定します. +IF,ERRORLEVEL,EXIST /// バッチファイル中で条件処理を実行します. \x5Cn ← これはテストです。\n\nこれが既存機能\\nです。\n\nIF [NOT] ERRORLEVEL 番号 コマンド\nIF [NOT] 文字列1==文字列2 コマンド\nIF [NOT] EXIST ファイル名 コマンド\n\n NOT 条件が偽のときだけコマンドを実行するように指定します.\n ERRORLEVEL 番号 最近実行したプログラムが返した終了コードが指定した番号\n 以上であれば真になるように指定します.\n コマンド  条件が真であれば実行するコマンドを指定します.\n 文字列1==文字列2 文字列が一致すれば真になるように指定します.\n EXIST ファイル名 ファイル名に指定されたファイルが実際に存在すれば真に\n なるように指定します. LABEL /// ディスクのボリュームラベルを作成, 変更, または削除します.\n\nLABEL [ドライブ:][ラベル] LOADHIGH /// プログラムを上位メモリ領域に読み込みます.\n\nLOADHIGH [ドライブ:][パス]ファイル名 [パラメータ]\nLOADHIGH [/L:領域1[,最小サイズ1][;領域2[,最小サイズ2]...] [/S]]\n [ドライブ:][パス]ファイル名 [パラメータ]]\n\n /L:領域1[,最小サイズ1][;領域2[,最小サイズ2]]...\n プログラムが読み込まれるメモリの領域を指定します.\n 領域1 には最初のメモリ領域の番号を指定します.\n 最小サイズ1 には領域1 の最小サイズを指定します.\n 領域2 と最小サイズ2 には 2つめの領域の番号と最小サイズを\n 指定します.\n 領域の数は好きなだけ指定できます.\n\n /S プログラムが読み込まれている間, UMB を最小サイズに縮小し\n ます. /S は通常 MemMaker だけに使います.\n\n [ドライブ:][パス]ファイル名\n プログラムの位置と名前を指定します. MKDIR,MDディレクトリを作ります.\n\nMKDIR [ドライブ:]パス\nMD [ドライブ:]パス\n\n関連項目:RMDIR diff --git a/sakura_core/_main/CProcessFactory.cpp b/sakura_core/_main/CProcessFactory.cpp index d6de0b5ea6..fa39eec716 100644 --- a/sakura_core/_main/CProcessFactory.cpp +++ b/sakura_core/_main/CProcessFactory.cpp @@ -230,6 +230,20 @@ bool CProcessFactory::StartControlProcess() return false; } + // 起動したプロセスが完全に立ち上がるまでちょっと待つ. + // + // Note: この待ちにより、ここで起動したコントロールプロセスが競争に生き残れなかった場合でも、 + // 唯一生き残ったコントロールプロセスが多重起動防止用ミューテックスを作成しているはず。 + // + int nResult; + nResult = ::WaitForInputIdle( p.hProcess, 10000 ); // 最大10秒間待つ + if( 0 != nResult ){ + ErrorMessage( NULL, L"\'%ls\'\nコントロールプロセスの起動に失敗しました。", szEXE ); + ::CloseHandle( p.hThread ); + ::CloseHandle( p.hProcess ); + return false; + } + ::CloseHandle( p.hThread ); ::CloseHandle( p.hProcess ); @@ -250,14 +264,27 @@ bool CProcessFactory::WaitForInitializedControlProcess() // Note: コントロールプロセス側は多重起動防止用ミューテックスを ::CreateMutex() で // 作成するよりも先に初期化完了イベントを ::CreateEvent() で作成する。 // + if( !IsExistControlProcess() ){ + // コントロールプロセスが多重起動防止用のミューテックス作成前に異常終了した場合など + return false; + } + const auto pszProfileName = CCommandLine::getInstance()->GetProfileName(); std::wstring strInitEvent = GSTR_EVENT_SAKURA_CP_INITIALIZED; strInitEvent += pszProfileName; HANDLE hEvent; - hEvent = ::CreateEventW( NULL, TRUE, FALSE, strInitEvent.c_str() ); + hEvent = ::OpenEvent( EVENT_ALL_ACCESS, FALSE, strInitEvent.c_str() ); if( NULL == hEvent ){ - TopErrorMessage( NULL, L"エディタまたはシステムがビジー状態です。\nしばらく待って開きなおしてください。" ); - return false; + // 動作中のコントロールプロセスを旧バージョンとみなし、イベントを待たずに処理を進める + // + // Note: Ver1.5.9.91以前のバージョンは初期化完了イベントを作らない。 + // このため、コントロールプロセスが常駐していないときに複数ウィンドウをほぼ + // 同時に起動すると、競争に生き残れなかったコントロールプロセスの親プロセスや、 + // 僅かに出遅れてコントロールプロセスを作成しなかったプロセスでも、 + // コントロールプロセスの初期化処理を追い越してしまい、異常終了したり、 + // 「タブバーが表示されない」のような問題が発生していた。 + // + return true; } DWORD dwRet; dwRet = ::WaitForSingleObject( hEvent, 10000 ); // 最大10秒間待つ diff --git a/tests/unittests/StartEditorProcessForTest.h b/tests/unittests/StartEditorProcessForTest.h deleted file mode 100644 index 23d532b5b3..0000000000 --- a/tests/unittests/StartEditorProcessForTest.h +++ /dev/null @@ -1,48 +0,0 @@ -/*! @file */ -/* - Copyright (C) 2018-2020 Sakura Editor Organization - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; - you must not claim that you wrote the original software. - If you use this software in a product, an acknowledgment - in the product documentation would be appreciated but is - not required. - - 2. Altered source versions must be plainly marked as such, - and must not be misrepresented as being the original software. - - 3. This notice may not be removed or altered from any source - distribution. -*/ -#pragma once - -#ifndef NOMINMAX -#define NOMINMAX -#endif /* #ifndef NOMINMAX */ - -#include -#include - -#include - -/*! - * テストコード専用wWinMain呼出のラッパー関数 - * - * 単体テストから wWinMain を呼び出すためのラッパー関数です。 - * - * wWinMain は呼出元のグローバル変数を汚してしまうため、 - * ASSERT_EXIT, ASSERT_DEATH などを使って別プロセスで実行するようにしてください。 - * - * この関数をコントロールプロセスの起動に使用しないでください。 - * googletestでは、ASSERT_EXITで起動したプロセスの完全な終了を待機できないようです。 - * コントロールプロセスが終了する前に他のテストが実行されると期待した動作にならない場合があります。 - */ -int StartEditorProcessForTest( const std::wstring_view& strCommandLine ); diff --git a/tests/unittests/code-main.cpp b/tests/unittests/code-main.cpp deleted file mode 100644 index cf801bdac7..0000000000 --- a/tests/unittests/code-main.cpp +++ /dev/null @@ -1,128 +0,0 @@ -/*! @file */ -/* - Copyright (C) 2018-2020 Sakura Editor Organization - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; - you must not claim that you wrote the original software. - If you use this software in a product, an acknowledgment - in the product documentation would be appreciated but is - not required. - - 2. Altered source versions must be plainly marked as such, - and must not be misrepresented as being the original software. - - 3. This notice may not be removed or altered from any source - distribution. -*/ -#include - -#ifndef NOMINMAX -#define NOMINMAX -#endif /* #ifndef NOMINMAX */ - -#include -#include - -#include -#include -#include -#include -#include - -#include "debug/Debug2.h" -#include "StartEditorProcessForTest.h" - -/*! - * テストコード専用wWinMain呼出のラッパー関数 - * - * 単体テストから wWinMain を呼び出すためのラッパー関数です。 - * - * コマンドラインでプロファイルが指定されていない場合、空指定を付加します。 - */ -int StartEditorProcessForTest( const std::wstring_view& strCommandLine ) -{ - - // 実行中モジュールのインスタンスハンドルを取得する - HINSTANCE hInstance = ::GetModuleHandle( NULL ); - - // WinMainを起動するためのコマンドラインを組み立てる - std::wstring strCmdBuff( strCommandLine ); - - // コマンドラインに -PROF 指定がない場合は付加する - if( !std::regex_search( strCmdBuff, std::wregex( L"-PROF\\b", std::wregex::icase ) ) ){ - strCmdBuff += L" -PROF=\"\""; - } - - // wWinMainを起動する - return wWinMain( hInstance, NULL, &*strCmdBuff.begin(), SW_SHOWDEFAULT ); -} - -/*! - * 必要な場合にwWinMainを起動して終了する。 - * - * コマンドラインに -PROF 指定がない場合、呼出元に制御を返す。 - * コマンドラインに -PROF 指定がある場合、wWinMainを呼出してプログラムを終了する。 - */ -static void InvokeWinMainIfNeeded( char** ppArgsBegin, char** ppArgsEnd ) -{ - // コマンドライン引数がない場合 - if( ppArgsBegin == ppArgsEnd ){ - return; - } - - // コマンドラインに -PROF 指定がない場合 - if( ppArgsEnd == std::find_if( ppArgsBegin, ppArgsEnd, []( const char* arg ){ return std::regex_search( arg, std::regex( "-PROF\\b", std::regex::icase ) ); } ) ){ - return; - } - - // 最初の引数はプログラム名なので無視する - ppArgsBegin++; - - // wWinMainを起動するためのコマンドラインを組み立てる(バッファ長はざっくり定義。) - wchar_t szCmdBuf[4096]; - std::wstring strCommandLine; - std::for_each( ppArgsBegin, ppArgsEnd, [&strCommandLine, &szCmdBuf]( const auto* arg ){ - ::swprintf_s( szCmdBuf, L"%hs ", arg ); - strCommandLine += szCmdBuf; - } ); - - // 末尾の空白を削る(引数0個はここに来ないのでチェックしない) - strCommandLine.assign( strCommandLine.data(), strCommandLine.length() - 1 ); - - // 実行中モジュールのインスタンスハンドルを取得する - HINSTANCE hInstance = ::GetModuleHandleW( NULL ); - - // ログ出力 - WCHAR *pszCommandLine = &*strCommandLine.begin(); - printf( "%s(%d): launching process [%ls]\n", __FILE__, __LINE__, pszCommandLine ); - - // wWinMainを起動する - int ret = wWinMain( hInstance, NULL, pszCommandLine, SW_SHOWDEFAULT ); - - // ログ出力(途中でexitした場合は出力されない) - printf( "%s(%d): leaving process [%ls] => %d\n", __FILE__, __LINE__, pszCommandLine, ret ); - - // プログラムを終了する(呼出元に制御は返らない) - exit( ret ); -} - -/*! - * テストモジュールのエントリポイント - */ -int main(int argc, char **argv) { - // コマンドラインに -PROF 指定がある場合、wWinMainを起動して終了する。 - InvokeWinMainIfNeeded( argv, argv + argc ); - - // WinMainを起動しない場合、標準のgtest_main同様の処理を実行する - printf("Running main() from %s\n", __FILE__); - testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/tests/unittests/test-winmain.cpp b/tests/unittests/test-winmain.cpp deleted file mode 100644 index b317e3ebf7..0000000000 --- a/tests/unittests/test-winmain.cpp +++ /dev/null @@ -1,326 +0,0 @@ -/*! @file */ -/* - Copyright (C) 2018-2020 Sakura Editor Organization - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; - you must not claim that you wrote the original software. - If you use this software in a product, an acknowledgment - in the product documentation would be appreciated but is - not required. - - 2. Altered source versions must be plainly marked as such, - and must not be misrepresented as being the original software. - - 3. This notice may not be removed or altered from any source - distribution. -*/ -#include - -#ifndef NOMINMAX -#define NOMINMAX -#endif /* #ifndef NOMINMAX */ - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "config/maxdata.h" -#include "basis/primitive.h" -#include "debug/Debug2.h" -#include "basis/CMyString.h" -#include "mem/CNativeW.h" -#include "env/DLLSHAREDATA.h" -#include "util/file.h" -#include "config/system_constants.h" - -#include "StartEditorProcessForTest.h" - -using namespace std::literals::string_literals; - -/*! - * HANDLE型のスマートポインタを実現するためのdeleterクラス - */ -struct handle_closer -{ - void operator()( HANDLE handle ) const - { - ::CloseHandle( handle ); - } -}; - -//! HANDLE型のスマートポインタ -typedef std::unique_ptr::type, handle_closer> handleHolder; - -/*! - * WinMain起動テストのためのフィクスチャクラス - * - * 設定ファイルを使うテストは「設定ファイルがない状態」からの始動を想定しているので - * 始動前に設定ファイルを削除するようにしている。 - * テスト実行後に設定ファイルを残しておく意味はないので終了後も削除している。 - */ -class WinMainTest : public ::testing::Test { -protected: - /*! - * 設定ファイルのパス - * - * CFileNameManager::GetIniFileNameDirectを使ってtests1.iniのパスを取得する。 - */ - WCHAR szIniFile[_MAX_PATH]; - - /*! - * テストが起動される直前に毎回呼ばれる関数 - */ - void SetUp() override { - // INIファイルのパスを取得 - WCHAR szPrivateIniFile[_MAX_PATH]; - CFileNameManager::GetIniFileNameDirect( szPrivateIniFile, szIniFile, L"" ); - - if( fexist( szIniFile ) ){ - // INIファイルを削除する - std::filesystem::remove( szIniFile ); - } - } - - /*! - * テストが実行された直後に毎回呼ばれる関数 - */ - void TearDown() override { - // INIファイルを削除する - std::filesystem::remove( szIniFile ); - } -}; - -/*! - * @brief コントロールプロセスの初期化完了を待つ - * - * CControlProcess::WaitForInitializedとして実装したいコードです。本体を変えたくないので一時定義しました。 - * 既存CProcessFactory::WaitForInitializedControlProcess()と概ね等価です。 - */ -void CControlProcess_WaitForInitialized( LPCWSTR lpszProfileName ) -{ - // 初期化完了イベントを作成する - std::wstring strInitEvent( GSTR_EVENT_SAKURA_CP_INITIALIZED ); - if( lpszProfileName && lpszProfileName[0] ){ - strInitEvent += lpszProfileName; - } - auto hEvent = ::CreateEventW( NULL, TRUE, FALSE, strInitEvent.data() ); - if (!hEvent) { - throw std::runtime_error( "create event failed." ); - } - - // イベントハンドラをスマートポインタに入れる - handleHolder eventHolder( hEvent ); - - // 初期化完了イベントを待つ - DWORD dwRet = ::WaitForSingleObject( hEvent, 10000 ); - if( WAIT_TIMEOUT == dwRet ){ - throw std::runtime_error( "waitEvent is timeout." ); - } -} - -/*! - * @brief コントロールプロセスを起動する - * - * CControlProcess::Startとして実装したいコードです。本体を変えたくないので一時定義しました。 - * 既存CProcessFactory::StartControlProcess()と概ね等価です。 - */ -void CControlProcess_Start( LPCWSTR lpszProfileName ) -{ - // スタートアップ情報 - STARTUPINFO si = { sizeof(STARTUPINFO), 0 }; - si.lpTitle = (LPWSTR)L"sakura control process"; - si.dwFlags = STARTF_USESHOWWINDOW; - si.wShowWindow = SW_SHOWDEFAULT; - - WCHAR szExePath[MAX_PATH]; - ::GetModuleFileNameW( NULL, szExePath, _countof(szExePath) ); - - CNativeW cmemCommandLine; - cmemCommandLine.AppendStringF( L"\"%s\" -NOWIN -PROF=\"%s\"", szExePath, lpszProfileName ); - - LPWSTR pszCommandLine = cmemCommandLine.GetStringPtr(); - DWORD dwCreationFlag = CREATE_DEFAULT_ERROR_MODE; - PROCESS_INFORMATION pi; - - // コントロールプロセスを起動する - BOOL createSuccess = ::CreateProcess( - szExePath, // 実行可能モジュールパス - pszCommandLine, // コマンドラインバッファ - NULL, // プロセスのセキュリティ記述子 - NULL, // スレッドのセキュリティ記述子 - FALSE, // ハンドルの継承オプション(継承させない) - dwCreationFlag, // 作成のフラグ - NULL, // 環境変数(変更しない) - NULL, // カレントディレクトリ(変更しない) - &si, // スタートアップ情報 - &pi // プロセス情報(作成されたプロセス情報を格納する構造体) - ); - if( !createSuccess ){ - throw std::runtime_error( "create process failed." ); - } - - // 開いたハンドルは使わないので閉じておく - ::CloseHandle( pi.hThread ); - ::CloseHandle( pi.hProcess ); - - // コントロールプロセスの初期化完了を待つ - CControlProcess_WaitForInitialized( lpszProfileName ); -} - -/*! - * @brief コントロールプロセスに終了指示を出して終了を待つ - * - * CControlProcess::Terminateとして実装したいコードです。本体を変えたくないので一時定義しました。 - * 既存コードに該当する処理はありません。 - */ -void CControlProcess_Terminate( LPCWSTR lpszProfileName ) -{ - // トレイウインドウを検索する - std::wstring strCEditAppName( GSTR_CEDITAPP ); - if( lpszProfileName && lpszProfileName[0] ){ - strCEditAppName += lpszProfileName; - } - HWND hTrayWnd = ::FindWindow( strCEditAppName.data(), strCEditAppName.data() ); - if( !hTrayWnd ){ - throw std::runtime_error( "tray window is not found." ); - } - - // トレイウインドウからプロセスIDを取得する - DWORD dwControlProcessId = 0; - ::GetWindowThreadProcessId( hTrayWnd, &dwControlProcessId ); - if( !dwControlProcessId ){ - throw std::runtime_error( "dwControlProcessId can't be retrived." ); - } - - // プロセス情報の問い合せを行うためのハンドルを開く - HANDLE hControlProcess = ::OpenProcess( PROCESS_QUERY_INFORMATION | SYNCHRONIZE, FALSE, dwControlProcessId ); - if( !hControlProcess ){ - throw std::runtime_error( "hControlProcess can't be opened." ); - } - - // プロセスハンドルをスマートポインタに入れる - handleHolder processHolder( hControlProcess ); - - // トレイウインドウを閉じる - ::SendMessage( hTrayWnd, WM_CLOSE, 0, 0 ); - - // プロセス終了を待つ - DWORD dwExitCode = 0; - if( ::GetExitCodeProcess( hControlProcess, &dwExitCode ) && dwExitCode == STILL_ACTIVE ){ - DWORD waitProcessResult = ::WaitForSingleObject( hControlProcess, INFINITE ); - if( WAIT_TIMEOUT == waitProcessResult ){ - throw std::runtime_error( "waitProcess is timeout." ); - } - } -} - -/*! - * @brief wWinMainを起動してみるテスト - * プログラムが起動する正常ルートに潜む障害を検出するためのもの。 - * コントロールプロセスを実行する。 - */ -TEST_F( WinMainTest, runWithNoWin ) -{ - // テスト用プロファイル名 - constexpr auto szProfileName = L""; - - // コントロールプロセスを起動する - CControlProcess_Start( szProfileName ); - - // コントロールプロセスに終了指示を出して終了を待つ - CControlProcess_Terminate( szProfileName ); - - // コントロールプロセスが終了すると、INIファイルが作成される - ASSERT_TRUE( fexist( szIniFile ) ); -} - -/*! - * @brief WinMainを起動してみるテスト - * プログラムが起動する正常ルートに潜む障害を検出するためのもの。 - * エディタプロセスを実行する。 - */ -TEST_F( WinMainTest, runEditorProcess ) -{ - // エディタプロセスを起動するため、テスト実行はプロセスごと分離して行う - auto separatedTestProc = [] { - std::mutex mtx; - std::condition_variable cv; - bool initialized = false; - - // エディタプロセスが起動したコントロールプロセスの終了を待機するスレッド - auto waitingThread = std::thread([&mtx, &cv, &initialized] { - // 初期化 - { - std::unique_lock lock( mtx ); - initialized = true; - cv.notify_one(); - } - - // テスト用プロファイル名 - constexpr auto szProfileName = L""; - - // コントロールプロセスの初期化完了を待つ - CControlProcess_WaitForInitialized( szProfileName ); - - // コントロールプロセスに終了指示を出して終了を待つ - CControlProcess_Terminate( szProfileName ); - }); - - // スレッドの初期化完了を待機する - std::unique_lock lock( mtx ); - cv.wait(lock, [&initialized] { return initialized; }); - - // 起動時実行マクロの中身を作る - std::wstring strStartupMacro; - strStartupMacro += L"Down();"; - strStartupMacro += L"Up();"; - strStartupMacro += L"Right();"; - strStartupMacro += L"Left();"; - strStartupMacro += L"ShowFunckey();"; //ShowFunckey 出す - strStartupMacro += L"ShowMiniMap();"; //ShowMiniMap 出す - strStartupMacro += L"ShowTab();"; //ShowTab 出す - strStartupMacro += L"SelectAll();"; - strStartupMacro += L"GoFileEnd();"; - strStartupMacro += L"GoFileTop();"; - strStartupMacro += L"ShowFunckey();"; //ShowFunckey 消す - strStartupMacro += L"ShowMiniMap();"; //ShowMiniMap 消す - strStartupMacro += L"ShowTab();"; //ShowTab 消す - strStartupMacro += L"ExitAll();"; //NOTE: このコマンドにより、エディタプロセスは起動された直後に終了する。 - - // コマンドラインを組み立てる - std::wstring strCommandLine( _T(__FILE__) L" -MTYPE=js" ); - strCommandLine += L" -M=\""s; - strCommandLine += std::regex_replace( strStartupMacro, std::wregex( L"\"" ), L"\"\"" ); - strCommandLine += L"\""s; - - // エディタプロセスを起動する - StartEditorProcessForTest( strCommandLine ); - - // エディタ終了を待機する - if( waitingThread.joinable() ){ - waitingThread.join(); - } - }; - - // テストプログラム内のグローバル変数を汚さないために、別プロセスで起動させる - ASSERT_EXIT({ separatedTestProc(); exit(0); }, ::testing::ExitedWithCode(0), ".*" ); - - // コントロールプロセスが終了すると、INIファイルが作成される - ASSERT_TRUE( fexist( szIniFile ) ); -} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index e194509e6e..7e680f027b 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -105,7 +105,6 @@ - @@ -122,7 +121,6 @@ - @@ -138,8 +136,5 @@ {7a6d0f29-e560-4985-835b-5f92a08eb242} - - - \ No newline at end of file diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index f0d8289042..1c19c8427b 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -68,16 +68,5 @@ Test Files - - Other Files - - - Test Files - - - - - Other Files - \ No newline at end of file From 977a21069770b7e51202accb1261da331e762249 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 16 Sep 2020 00:29:01 +0900 Subject: [PATCH 0116/1024] =?UTF-8?q?=E3=82=B5=E3=82=AF=E3=83=A9=E3=82=A8?= =?UTF-8?q?=E3=83=87=E3=82=A3=E3=82=BF=E3=81=AE=E8=B5=B7=E5=8B=95=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit wWinMainを呼び出してエディタプロセスを起動するシンプルなテストを実装してみました。 --- tests/unittests/test-winmain.cpp | 43 ++++++++++++++++++++++++++ tests/unittests/tests1.vcxproj | 1 + tests/unittests/tests1.vcxproj.filters | 3 ++ 3 files changed, 47 insertions(+) create mode 100644 tests/unittests/test-winmain.cpp diff --git a/tests/unittests/test-winmain.cpp b/tests/unittests/test-winmain.cpp new file mode 100644 index 0000000000..d6f77c004f --- /dev/null +++ b/tests/unittests/test-winmain.cpp @@ -0,0 +1,43 @@ +/*! @file */ +/* + Copyright (C) 2018-2020 Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include + +#ifndef NOMINMAX +#define NOMINMAX +#endif /* #ifndef NOMINMAX */ + +#include +#include + +/*! + * @brief WinMainを起動してみるテスト + * プログラムが起動する正常ルートに潜む障害を検出するためのもの。 + * エディタプロセスを実行する。 + */ +TEST( WinMainTest, runEditorProcess ) +{ + // エディタプロセスを起動する + ASSERT_EQ( 0, wWinMain( NULL, NULL, _T(__FILE__) L" -MTYPE=js -M=\"ExitAll();\" -PROF=", SW_SHOWDEFAULT ) ); +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index 7e680f027b..106d9a3aa4 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -121,6 +121,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index 1c19c8427b..7546eb9236 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -68,5 +68,8 @@ Test Files + + Test Files + \ No newline at end of file From 6985c782ce39c2bde3a2973800606380660cc715 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 16 Sep 2020 12:37:24 +0900 Subject: [PATCH 0117/1024] =?UTF-8?q?tests1.exe=E3=82=92=E3=82=B5=E3=82=AF?= =?UTF-8?q?=E3=83=A9=E3=82=A8=E3=83=87=E3=82=A3=E3=82=BF=E3=81=A8=E3=81=97?= =?UTF-8?q?=E3=81=A6=E8=B5=B7=E5=8B=95=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/code-main.cpp | 100 +++++++++++++++++++++++++ tests/unittests/tests1.vcxproj | 1 + tests/unittests/tests1.vcxproj.filters | 3 + 3 files changed, 104 insertions(+) create mode 100644 tests/unittests/code-main.cpp diff --git a/tests/unittests/code-main.cpp b/tests/unittests/code-main.cpp new file mode 100644 index 0000000000..276afd1c8c --- /dev/null +++ b/tests/unittests/code-main.cpp @@ -0,0 +1,100 @@ +/*! @file */ +/* + Copyright (C) 2018-2020 Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include + +#ifndef NOMINMAX +#define NOMINMAX +#endif /* #ifndef NOMINMAX */ + +#include +#include + +#include +#include +#include +#include +#include + +/*! + * 必要な場合にwWinMainを起動して終了する。 + * + * コマンドラインに -PROF 指定がない場合、呼出元に制御を返す。 + * コマンドラインに -PROF 指定がある場合、wWinMainを呼出してプログラムを終了する。 + */ +static void InvokeWinMainIfNeeded( char** ppArgsBegin, char** ppArgsEnd ) +{ + // コマンドライン引数がない場合 + if( ppArgsBegin == ppArgsEnd ){ + return; + } + + // コマンドラインに -PROF 指定がない場合 + if( ppArgsEnd == std::find_if( ppArgsBegin, ppArgsEnd, []( const char* arg ){ return std::regex_search( arg, std::regex( "-PROF\\b", std::regex::icase ) ); } ) ){ + return; + } + + // 最初の引数はプログラム名なので無視する + ppArgsBegin++; + + // wWinMainを起動するためのコマンドラインを組み立てる(バッファ長はざっくり定義。) + wchar_t szCmdBuf[4096]; + std::wstring strCommandLine; + std::for_each( ppArgsBegin, ppArgsEnd, [&strCommandLine, &szCmdBuf]( const auto* arg ){ + ::swprintf_s( szCmdBuf, L"%hs ", arg ); + strCommandLine += szCmdBuf; + } ); + + // 末尾の空白を削る(引数0個はここに来ないのでチェックしない) + strCommandLine.assign( strCommandLine.data(), strCommandLine.length() - 1 ); + + // 実行中モジュールのインスタンスハンドルを取得する + HINSTANCE hInstance = ::GetModuleHandleW( NULL ); + + // ログ出力 + WCHAR *pszCommandLine = &*strCommandLine.begin(); + printf( "%s(%d): launching process [%ls]\n", __FILE__, __LINE__, pszCommandLine ); + + // wWinMainを起動する + int ret = wWinMain( hInstance, NULL, pszCommandLine, SW_SHOWDEFAULT ); + + // ログ出力(途中でexitした場合は出力されない) + printf( "%s(%d): leaving process [%ls] => %d\n", __FILE__, __LINE__, pszCommandLine, ret ); + + // プログラムを終了する(呼出元に制御は返らない) + exit( ret ); +} + +/*! + * テストモジュールのエントリポイント + */ +int main(int argc, char **argv) { + // コマンドラインに -PROF 指定がある場合、wWinMainを起動して終了する。 + InvokeWinMainIfNeeded( argv, argv + argc ); + + // WinMainを起動しない場合、標準のgtest_main同様の処理を実行する + printf("Running main() from %s\n", __FILE__); + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index 106d9a3aa4..872b114fb5 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -105,6 +105,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index 7546eb9236..2a7546c359 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -68,6 +68,9 @@ Test Files + + Other Files + Test Files From 0de5be5be6e575d66650eee9ad5b390bc0e96b72 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 16 Sep 2020 17:40:52 +0900 Subject: [PATCH 0118/1024] =?UTF-8?q?=E8=B5=B7=E5=8B=95=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=92=E5=A4=96=E9=83=A8=E3=83=97=E3=83=AD=E3=82=BB?= =?UTF-8?q?=E3=82=B9=E3=81=A7=E5=AE=9F=E8=A1=8C=E3=81=99=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/StartEditorProcessForTest.h | 48 ++++ tests/unittests/code-main.cpp | 28 ++ tests/unittests/test-winmain.cpp | 289 +++++++++++++++++++- tests/unittests/tests1.vcxproj | 3 + tests/unittests/tests1.vcxproj.filters | 5 + 5 files changed, 370 insertions(+), 3 deletions(-) create mode 100644 tests/unittests/StartEditorProcessForTest.h diff --git a/tests/unittests/StartEditorProcessForTest.h b/tests/unittests/StartEditorProcessForTest.h new file mode 100644 index 0000000000..23d532b5b3 --- /dev/null +++ b/tests/unittests/StartEditorProcessForTest.h @@ -0,0 +1,48 @@ +/*! @file */ +/* + Copyright (C) 2018-2020 Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#pragma once + +#ifndef NOMINMAX +#define NOMINMAX +#endif /* #ifndef NOMINMAX */ + +#include +#include + +#include + +/*! + * テストコード専用wWinMain呼出のラッパー関数 + * + * 単体テストから wWinMain を呼び出すためのラッパー関数です。 + * + * wWinMain は呼出元のグローバル変数を汚してしまうため、 + * ASSERT_EXIT, ASSERT_DEATH などを使って別プロセスで実行するようにしてください。 + * + * この関数をコントロールプロセスの起動に使用しないでください。 + * googletestでは、ASSERT_EXITで起動したプロセスの完全な終了を待機できないようです。 + * コントロールプロセスが終了する前に他のテストが実行されると期待した動作にならない場合があります。 + */ +int StartEditorProcessForTest( const std::wstring_view& strCommandLine ); diff --git a/tests/unittests/code-main.cpp b/tests/unittests/code-main.cpp index 276afd1c8c..cf801bdac7 100644 --- a/tests/unittests/code-main.cpp +++ b/tests/unittests/code-main.cpp @@ -37,6 +37,34 @@ #include #include +#include "debug/Debug2.h" +#include "StartEditorProcessForTest.h" + +/*! + * テストコード専用wWinMain呼出のラッパー関数 + * + * 単体テストから wWinMain を呼び出すためのラッパー関数です。 + * + * コマンドラインでプロファイルが指定されていない場合、空指定を付加します。 + */ +int StartEditorProcessForTest( const std::wstring_view& strCommandLine ) +{ + + // 実行中モジュールのインスタンスハンドルを取得する + HINSTANCE hInstance = ::GetModuleHandle( NULL ); + + // WinMainを起動するためのコマンドラインを組み立てる + std::wstring strCmdBuff( strCommandLine ); + + // コマンドラインに -PROF 指定がない場合は付加する + if( !std::regex_search( strCmdBuff, std::wregex( L"-PROF\\b", std::wregex::icase ) ) ){ + strCmdBuff += L" -PROF=\"\""; + } + + // wWinMainを起動する + return wWinMain( hInstance, NULL, &*strCmdBuff.begin(), SW_SHOWDEFAULT ); +} + /*! * 必要な場合にwWinMainを起動して終了する。 * diff --git a/tests/unittests/test-winmain.cpp b/tests/unittests/test-winmain.cpp index d6f77c004f..b317e3ebf7 100644 --- a/tests/unittests/test-winmain.cpp +++ b/tests/unittests/test-winmain.cpp @@ -31,13 +31,296 @@ #include #include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "config/maxdata.h" +#include "basis/primitive.h" +#include "debug/Debug2.h" +#include "basis/CMyString.h" +#include "mem/CNativeW.h" +#include "env/DLLSHAREDATA.h" +#include "util/file.h" +#include "config/system_constants.h" + +#include "StartEditorProcessForTest.h" + +using namespace std::literals::string_literals; + +/*! + * HANDLE型のスマートポインタを実現するためのdeleterクラス + */ +struct handle_closer +{ + void operator()( HANDLE handle ) const + { + ::CloseHandle( handle ); + } +}; + +//! HANDLE型のスマートポインタ +typedef std::unique_ptr::type, handle_closer> handleHolder; + +/*! + * WinMain起動テストのためのフィクスチャクラス + * + * 設定ファイルを使うテストは「設定ファイルがない状態」からの始動を想定しているので + * 始動前に設定ファイルを削除するようにしている。 + * テスト実行後に設定ファイルを残しておく意味はないので終了後も削除している。 + */ +class WinMainTest : public ::testing::Test { +protected: + /*! + * 設定ファイルのパス + * + * CFileNameManager::GetIniFileNameDirectを使ってtests1.iniのパスを取得する。 + */ + WCHAR szIniFile[_MAX_PATH]; + + /*! + * テストが起動される直前に毎回呼ばれる関数 + */ + void SetUp() override { + // INIファイルのパスを取得 + WCHAR szPrivateIniFile[_MAX_PATH]; + CFileNameManager::GetIniFileNameDirect( szPrivateIniFile, szIniFile, L"" ); + + if( fexist( szIniFile ) ){ + // INIファイルを削除する + std::filesystem::remove( szIniFile ); + } + } + + /*! + * テストが実行された直後に毎回呼ばれる関数 + */ + void TearDown() override { + // INIファイルを削除する + std::filesystem::remove( szIniFile ); + } +}; + +/*! + * @brief コントロールプロセスの初期化完了を待つ + * + * CControlProcess::WaitForInitializedとして実装したいコードです。本体を変えたくないので一時定義しました。 + * 既存CProcessFactory::WaitForInitializedControlProcess()と概ね等価です。 + */ +void CControlProcess_WaitForInitialized( LPCWSTR lpszProfileName ) +{ + // 初期化完了イベントを作成する + std::wstring strInitEvent( GSTR_EVENT_SAKURA_CP_INITIALIZED ); + if( lpszProfileName && lpszProfileName[0] ){ + strInitEvent += lpszProfileName; + } + auto hEvent = ::CreateEventW( NULL, TRUE, FALSE, strInitEvent.data() ); + if (!hEvent) { + throw std::runtime_error( "create event failed." ); + } + + // イベントハンドラをスマートポインタに入れる + handleHolder eventHolder( hEvent ); + + // 初期化完了イベントを待つ + DWORD dwRet = ::WaitForSingleObject( hEvent, 10000 ); + if( WAIT_TIMEOUT == dwRet ){ + throw std::runtime_error( "waitEvent is timeout." ); + } +} + +/*! + * @brief コントロールプロセスを起動する + * + * CControlProcess::Startとして実装したいコードです。本体を変えたくないので一時定義しました。 + * 既存CProcessFactory::StartControlProcess()と概ね等価です。 + */ +void CControlProcess_Start( LPCWSTR lpszProfileName ) +{ + // スタートアップ情報 + STARTUPINFO si = { sizeof(STARTUPINFO), 0 }; + si.lpTitle = (LPWSTR)L"sakura control process"; + si.dwFlags = STARTF_USESHOWWINDOW; + si.wShowWindow = SW_SHOWDEFAULT; + + WCHAR szExePath[MAX_PATH]; + ::GetModuleFileNameW( NULL, szExePath, _countof(szExePath) ); + + CNativeW cmemCommandLine; + cmemCommandLine.AppendStringF( L"\"%s\" -NOWIN -PROF=\"%s\"", szExePath, lpszProfileName ); + + LPWSTR pszCommandLine = cmemCommandLine.GetStringPtr(); + DWORD dwCreationFlag = CREATE_DEFAULT_ERROR_MODE; + PROCESS_INFORMATION pi; + + // コントロールプロセスを起動する + BOOL createSuccess = ::CreateProcess( + szExePath, // 実行可能モジュールパス + pszCommandLine, // コマンドラインバッファ + NULL, // プロセスのセキュリティ記述子 + NULL, // スレッドのセキュリティ記述子 + FALSE, // ハンドルの継承オプション(継承させない) + dwCreationFlag, // 作成のフラグ + NULL, // 環境変数(変更しない) + NULL, // カレントディレクトリ(変更しない) + &si, // スタートアップ情報 + &pi // プロセス情報(作成されたプロセス情報を格納する構造体) + ); + if( !createSuccess ){ + throw std::runtime_error( "create process failed." ); + } + + // 開いたハンドルは使わないので閉じておく + ::CloseHandle( pi.hThread ); + ::CloseHandle( pi.hProcess ); + + // コントロールプロセスの初期化完了を待つ + CControlProcess_WaitForInitialized( lpszProfileName ); +} + +/*! + * @brief コントロールプロセスに終了指示を出して終了を待つ + * + * CControlProcess::Terminateとして実装したいコードです。本体を変えたくないので一時定義しました。 + * 既存コードに該当する処理はありません。 + */ +void CControlProcess_Terminate( LPCWSTR lpszProfileName ) +{ + // トレイウインドウを検索する + std::wstring strCEditAppName( GSTR_CEDITAPP ); + if( lpszProfileName && lpszProfileName[0] ){ + strCEditAppName += lpszProfileName; + } + HWND hTrayWnd = ::FindWindow( strCEditAppName.data(), strCEditAppName.data() ); + if( !hTrayWnd ){ + throw std::runtime_error( "tray window is not found." ); + } + + // トレイウインドウからプロセスIDを取得する + DWORD dwControlProcessId = 0; + ::GetWindowThreadProcessId( hTrayWnd, &dwControlProcessId ); + if( !dwControlProcessId ){ + throw std::runtime_error( "dwControlProcessId can't be retrived." ); + } + + // プロセス情報の問い合せを行うためのハンドルを開く + HANDLE hControlProcess = ::OpenProcess( PROCESS_QUERY_INFORMATION | SYNCHRONIZE, FALSE, dwControlProcessId ); + if( !hControlProcess ){ + throw std::runtime_error( "hControlProcess can't be opened." ); + } + + // プロセスハンドルをスマートポインタに入れる + handleHolder processHolder( hControlProcess ); + + // トレイウインドウを閉じる + ::SendMessage( hTrayWnd, WM_CLOSE, 0, 0 ); + + // プロセス終了を待つ + DWORD dwExitCode = 0; + if( ::GetExitCodeProcess( hControlProcess, &dwExitCode ) && dwExitCode == STILL_ACTIVE ){ + DWORD waitProcessResult = ::WaitForSingleObject( hControlProcess, INFINITE ); + if( WAIT_TIMEOUT == waitProcessResult ){ + throw std::runtime_error( "waitProcess is timeout." ); + } + } +} + +/*! + * @brief wWinMainを起動してみるテスト + * プログラムが起動する正常ルートに潜む障害を検出するためのもの。 + * コントロールプロセスを実行する。 + */ +TEST_F( WinMainTest, runWithNoWin ) +{ + // テスト用プロファイル名 + constexpr auto szProfileName = L""; + + // コントロールプロセスを起動する + CControlProcess_Start( szProfileName ); + + // コントロールプロセスに終了指示を出して終了を待つ + CControlProcess_Terminate( szProfileName ); + + // コントロールプロセスが終了すると、INIファイルが作成される + ASSERT_TRUE( fexist( szIniFile ) ); +} + /*! * @brief WinMainを起動してみるテスト * プログラムが起動する正常ルートに潜む障害を検出するためのもの。 * エディタプロセスを実行する。 */ -TEST( WinMainTest, runEditorProcess ) +TEST_F( WinMainTest, runEditorProcess ) { - // エディタプロセスを起動する - ASSERT_EQ( 0, wWinMain( NULL, NULL, _T(__FILE__) L" -MTYPE=js -M=\"ExitAll();\" -PROF=", SW_SHOWDEFAULT ) ); + // エディタプロセスを起動するため、テスト実行はプロセスごと分離して行う + auto separatedTestProc = [] { + std::mutex mtx; + std::condition_variable cv; + bool initialized = false; + + // エディタプロセスが起動したコントロールプロセスの終了を待機するスレッド + auto waitingThread = std::thread([&mtx, &cv, &initialized] { + // 初期化 + { + std::unique_lock lock( mtx ); + initialized = true; + cv.notify_one(); + } + + // テスト用プロファイル名 + constexpr auto szProfileName = L""; + + // コントロールプロセスの初期化完了を待つ + CControlProcess_WaitForInitialized( szProfileName ); + + // コントロールプロセスに終了指示を出して終了を待つ + CControlProcess_Terminate( szProfileName ); + }); + + // スレッドの初期化完了を待機する + std::unique_lock lock( mtx ); + cv.wait(lock, [&initialized] { return initialized; }); + + // 起動時実行マクロの中身を作る + std::wstring strStartupMacro; + strStartupMacro += L"Down();"; + strStartupMacro += L"Up();"; + strStartupMacro += L"Right();"; + strStartupMacro += L"Left();"; + strStartupMacro += L"ShowFunckey();"; //ShowFunckey 出す + strStartupMacro += L"ShowMiniMap();"; //ShowMiniMap 出す + strStartupMacro += L"ShowTab();"; //ShowTab 出す + strStartupMacro += L"SelectAll();"; + strStartupMacro += L"GoFileEnd();"; + strStartupMacro += L"GoFileTop();"; + strStartupMacro += L"ShowFunckey();"; //ShowFunckey 消す + strStartupMacro += L"ShowMiniMap();"; //ShowMiniMap 消す + strStartupMacro += L"ShowTab();"; //ShowTab 消す + strStartupMacro += L"ExitAll();"; //NOTE: このコマンドにより、エディタプロセスは起動された直後に終了する。 + + // コマンドラインを組み立てる + std::wstring strCommandLine( _T(__FILE__) L" -MTYPE=js" ); + strCommandLine += L" -M=\""s; + strCommandLine += std::regex_replace( strStartupMacro, std::wregex( L"\"" ), L"\"\"" ); + strCommandLine += L"\""s; + + // エディタプロセスを起動する + StartEditorProcessForTest( strCommandLine ); + + // エディタ終了を待機する + if( waitingThread.joinable() ){ + waitingThread.join(); + } + }; + + // テストプログラム内のグローバル変数を汚さないために、別プロセスで起動させる + ASSERT_EXIT({ separatedTestProc(); exit(0); }, ::testing::ExitedWithCode(0), ".*" ); + + // コントロールプロセスが終了すると、INIファイルが作成される + ASSERT_TRUE( fexist( szIniFile ) ); } diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index 872b114fb5..e194509e6e 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -138,5 +138,8 @@ {7a6d0f29-e560-4985-835b-5f92a08eb242} + + + \ No newline at end of file diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index 2a7546c359..f0d8289042 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -75,4 +75,9 @@ Test Files + + + Other Files + + \ No newline at end of file From 22dc1db41180b85eb2d97879a5bc9427d8d4e84e Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 16 Sep 2020 17:42:11 +0900 Subject: [PATCH 0119/1024] =?UTF-8?q?=E9=96=A2=E4=BF=82=E3=81=AA=E3=81=84?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AE=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=E3=82=92revert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- installer/sinst_src/keyword/bat.khp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/installer/sinst_src/keyword/bat.khp b/installer/sinst_src/keyword/bat.khp index 78f51e081a..11ad23d112 100644 --- a/installer/sinst_src/keyword/bat.khp +++ b/installer/sinst_src/keyword/bat.khp @@ -27,7 +27,7 @@ FDISK /// MS-DOS で使うためのハードディスクを設定します.\n\nF FIND /// ファイル(複数可)内の文字列を検索します.\n\nFIND [/V] [/C] [/N] [/I] "文字列" [[ドライブ:][パス]ファイル名[ ...]]\n /V 指定した文字列を含まない行をすべて表示します.\n /C 指定した文字列を含む行の数だけを表示します.\n /N 行番号を表示します.\n /I 大文字と小文字の区別をしないで検索します.\n "文字列" 検索する文字列を指定します.\n [ドライブ:][パス]ファイル名\n 検索するファイル(複数可)を指定します.\n\nパス名の指定がなければ, プロンプトで入力された文字列, または別のコマンド\nからパイプ処理で渡された文字列を検索します. FOR,IN,DO /// 指定されたコマンドをファイルセットの各ファイルごとに実行します.\n\nFOR %変数 IN (セット) DO コマンド [コマンド パラメータ]\n\n %変数 置き換え可能なパラメータを指定します.\n (セット) ファイルセットを指定します. ワイルドカードも使えます.\n コマンド 各ファイルごとに実行するコマンドを指定します.\n コマンドパラメータ\n 指定したコマンドのパラメータやスイッチを指定します.\n\nFOR コマンドをバッチファイル中で使うには, %変数の代わりに %%変数を指定して\nください. GOTO /// バッチファイル中でラベルが指定されている行へ Windows の実行を移動します.\n\nGOTO ラベル\n\n ラベル バッチ ファイル中でラベルとして使う文字列を指定します.\n\nラベルは : (コロン)で行を始めてください. -IF,ERRORLEVEL,EXIST /// バッチファイル中で条件処理を実行します. \x5Cn ← これはテストです。\n\nこれが既存機能\\nです。\n\nIF [NOT] ERRORLEVEL 番号 コマンド\nIF [NOT] 文字列1==文字列2 コマンド\nIF [NOT] EXIST ファイル名 コマンド\n\n NOT 条件が偽のときだけコマンドを実行するように指定します.\n ERRORLEVEL 番号 最近実行したプログラムが返した終了コードが指定した番号\n 以上であれば真になるように指定します.\n コマンド  条件が真であれば実行するコマンドを指定します.\n 文字列1==文字列2 文字列が一致すれば真になるように指定します.\n EXIST ファイル名 ファイル名に指定されたファイルが実際に存在すれば真に\n なるように指定します. +IF,ERRORLEVEL,EXIST /// バッチファイル中で条件処理を実行します.\n\nIF [NOT] ERRORLEVEL 番号 コマンド\nIF [NOT] 文字列1==文字列2 コマンド\nIF [NOT] EXIST ファイル名 コマンド\n\n NOT 条件が偽のときだけコマンドを実行するように指定します.\n ERRORLEVEL 番号 最近実行したプログラムが返した終了コードが指定した番号\n 以上であれば真になるように指定します.\n コマンド  条件が真であれば実行するコマンドを指定します.\n 文字列1==文字列2 文字列が一致すれば真になるように指定します.\n EXIST ファイル名 ファイル名に指定されたファイルが実際に存在すれば真に\n なるように指定します. LABEL /// ディスクのボリュームラベルを作成, 変更, または削除します.\n\nLABEL [ドライブ:][ラベル] LOADHIGH /// プログラムを上位メモリ領域に読み込みます.\n\nLOADHIGH [ドライブ:][パス]ファイル名 [パラメータ]\nLOADHIGH [/L:領域1[,最小サイズ1][;領域2[,最小サイズ2]...] [/S]]\n [ドライブ:][パス]ファイル名 [パラメータ]]\n\n /L:領域1[,最小サイズ1][;領域2[,最小サイズ2]]...\n プログラムが読み込まれるメモリの領域を指定します.\n 領域1 には最初のメモリ領域の番号を指定します.\n 最小サイズ1 には領域1 の最小サイズを指定します.\n 領域2 と最小サイズ2 には 2つめの領域の番号と最小サイズを\n 指定します.\n 領域の数は好きなだけ指定できます.\n\n /S プログラムが読み込まれている間, UMB を最小サイズに縮小し\n ます. /S は通常 MemMaker だけに使います.\n\n [ドライブ:][パス]ファイル名\n プログラムの位置と名前を指定します. MKDIR,MDディレクトリを作ります.\n\nMKDIR [ドライブ:]パス\nMD [ドライブ:]パス\n\n関連項目:RMDIR From dba3441e856db413ff9ca26015db8a19a0532b59 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Thu, 17 Sep 2020 18:06:54 +0900 Subject: [PATCH 0120/1024] =?UTF-8?q?=E8=B5=B7=E5=8B=95=E3=81=97=E3=81=9F?= =?UTF-8?q?=E3=82=B3=E3=83=B3=E3=83=88=E3=83=AD=E3=83=BC=E3=83=AB=E3=83=97?= =?UTF-8?q?=E3=83=AD=E3=82=BB=E3=82=B9=E3=82=92=E5=BE=85=E6=A9=9F=E3=81=99?= =?UTF-8?q?=E3=82=8B=E5=87=A6=E7=90=86=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/_main/CProcessFactory.cpp | 33 +++------------------------ 1 file changed, 3 insertions(+), 30 deletions(-) diff --git a/sakura_core/_main/CProcessFactory.cpp b/sakura_core/_main/CProcessFactory.cpp index fa39eec716..d6de0b5ea6 100644 --- a/sakura_core/_main/CProcessFactory.cpp +++ b/sakura_core/_main/CProcessFactory.cpp @@ -230,20 +230,6 @@ bool CProcessFactory::StartControlProcess() return false; } - // 起動したプロセスが完全に立ち上がるまでちょっと待つ. - // - // Note: この待ちにより、ここで起動したコントロールプロセスが競争に生き残れなかった場合でも、 - // 唯一生き残ったコントロールプロセスが多重起動防止用ミューテックスを作成しているはず。 - // - int nResult; - nResult = ::WaitForInputIdle( p.hProcess, 10000 ); // 最大10秒間待つ - if( 0 != nResult ){ - ErrorMessage( NULL, L"\'%ls\'\nコントロールプロセスの起動に失敗しました。", szEXE ); - ::CloseHandle( p.hThread ); - ::CloseHandle( p.hProcess ); - return false; - } - ::CloseHandle( p.hThread ); ::CloseHandle( p.hProcess ); @@ -264,27 +250,14 @@ bool CProcessFactory::WaitForInitializedControlProcess() // Note: コントロールプロセス側は多重起動防止用ミューテックスを ::CreateMutex() で // 作成するよりも先に初期化完了イベントを ::CreateEvent() で作成する。 // - if( !IsExistControlProcess() ){ - // コントロールプロセスが多重起動防止用のミューテックス作成前に異常終了した場合など - return false; - } - const auto pszProfileName = CCommandLine::getInstance()->GetProfileName(); std::wstring strInitEvent = GSTR_EVENT_SAKURA_CP_INITIALIZED; strInitEvent += pszProfileName; HANDLE hEvent; - hEvent = ::OpenEvent( EVENT_ALL_ACCESS, FALSE, strInitEvent.c_str() ); + hEvent = ::CreateEventW( NULL, TRUE, FALSE, strInitEvent.c_str() ); if( NULL == hEvent ){ - // 動作中のコントロールプロセスを旧バージョンとみなし、イベントを待たずに処理を進める - // - // Note: Ver1.5.9.91以前のバージョンは初期化完了イベントを作らない。 - // このため、コントロールプロセスが常駐していないときに複数ウィンドウをほぼ - // 同時に起動すると、競争に生き残れなかったコントロールプロセスの親プロセスや、 - // 僅かに出遅れてコントロールプロセスを作成しなかったプロセスでも、 - // コントロールプロセスの初期化処理を追い越してしまい、異常終了したり、 - // 「タブバーが表示されない」のような問題が発生していた。 - // - return true; + TopErrorMessage( NULL, L"エディタまたはシステムがビジー状態です。\nしばらく待って開きなおしてください。" ); + return false; } DWORD dwRet; dwRet = ::WaitForSingleObject( hEvent, 10000 ); // 最大10秒間待つ From 2d0b2923a3e3c08a9cff86c414176ae748e59803 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Wed, 9 Oct 2019 07:17:26 +0900 Subject: [PATCH 0121/1024] =?UTF-8?q?=E4=B8=80=E5=BA=A6=E3=81=ABExtTextOut?= =?UTF-8?q?=E3=81=A7=E6=8F=8F=E7=94=BB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CEditView_Paint.cpp | 46 +++++++++++++-- sakura_core/view/CTextMetrics.cpp | 4 +- sakura_core/view/figures/CFigureManager.cpp | 3 +- sakura_core/view/figures/CFigureManager.h | 4 ++ sakura_core/view/figures/CFigureStrategy.cpp | 62 +++++++++++++++++++- sakura_core/view/figures/CFigureStrategy.h | 18 ++++++ 6 files changed, 127 insertions(+), 10 deletions(-) diff --git a/sakura_core/view/CEditView_Paint.cpp b/sakura_core/view/CEditView_Paint.cpp index f50030af5c..511f9f2203 100644 --- a/sakura_core/view/CEditView_Paint.cpp +++ b/sakura_core/view/CEditView_Paint.cpp @@ -1071,27 +1071,61 @@ bool CEditView::DrawLayoutLine(SColorStrategyInfo* pInfo) } //行終端または折り返しに達するまでループ if(pcLayout){ + int nPosBgn = pInfo->m_nPosInLogic; // Logic + CLayoutInt nDrawX = pInfo->m_pDispPos->GetDrawCol(); // Layout + const int nDrawBlockLen = 1000; // ExtTextOutの長さ制限にかからない適当な値 int nPosTo = pcLayout->GetLogicOffset() + pcLayout->GetLengthWithEOL(); CFigureManager* pcFigureManager = CFigureManager::getInstance(); + CFigure_Text& cFigureText = pcFigureManager->GetFigureText(); + int prevRenderType = CFigure_Text::RenderType_None; while(pInfo->m_nPosInLogic < nPosTo){ + //1文字情報取得 + CFigure& cFigure = pcFigureManager->GetFigure(&cLineStr.GetPtr()[pInfo->GetPosInLogic()], + cLineStr.GetLength() - pInfo->GetPosInLogic()); + int nextRenderType = CFigure_Text::RenderType_None; + if (cFigure.IsFigureText()) { + nextRenderType = cFigureText.GetRenderType(pInfo); + } + if (CFigure_Text::IsRenderType_Block(prevRenderType) && + (prevRenderType != nextRenderType || (nDrawBlockLen < pInfo->GetPosInLogic() - nPosBgn))) { + if (0 < pInfo->GetPosInLogic() - nPosBgn) { + cFigureText.DrawImpBlock(pInfo, nPosBgn, pInfo->GetPosInLogic() - nPosBgn); + nPosBgn = pInfo->GetPosInLogic(); + } + } + prevRenderType = nextRenderType; + //色切替 if( pInfo->CheckChangeColor(cLineStr) ){ + if (0 < pInfo->GetPosInLogic() - nPosBgn) { + cFigureText.DrawImpBlock(pInfo, nPosBgn, pInfo->GetPosInLogic() - nPosBgn); + nPosBgn = pInfo->GetPosInLogic(); + } CColor3Setting cColor; pInfo->DoChangeColor(&cColor); SetCurrentColor(pInfo->m_gr, cColor.eColorIndex, cColor.eColorIndex2, cColor.eColorIndexBg); } - //1文字情報取得 $$高速化可能 - CFigure& cFigure = pcFigureManager->GetFigure(&cLineStr.GetPtr()[pInfo->GetPosInLogic()], - cLineStr.GetLength() - pInfo->GetPosInLogic()); - //1文字描画 - cFigure.DrawImp(pInfo); - if( bSkipRight && GetTextArea().GetAreaRight() < pInfo->m_pDispPos->GetDrawPos().x ){ + if (cFigure.IsFigureText() && CFigure_Text::IsRenderType_Block(nextRenderType)){ + nDrawX += cFigureText.FowardChars(pInfo); + }else{ + cFigure.DrawImp(pInfo); + nPosBgn = pInfo->GetPosInLogic(); + nDrawX = pInfo->m_pDispPos->GetDrawCol(); + } + if( bSkipRight && GetTextArea().GetAreaRight() < nDrawX ){ + if (0 < pInfo->GetPosInLogic() - nPosBgn) { + cFigureText.DrawImpBlock(pInfo, nPosBgn, pInfo->GetPosInLogic() - nPosBgn); + nPosBgn = pInfo->GetPosInLogic(); + } pInfo->m_nPosInLogic = nPosTo; break; } } + if (0 < pInfo->GetPosInLogic() - nPosBgn) { + cFigureText.DrawImpBlock(pInfo, nPosBgn, pInfo->GetPosInLogic() - nPosBgn); + } } // 必要ならEOF描画 diff --git a/sakura_core/view/CTextMetrics.cpp b/sakura_core/view/CTextMetrics.cpp index 7d153832a3..d96fbb21a7 100644 --- a/sakura_core/view/CTextMetrics.cpp +++ b/sakura_core/view/CTextMetrics.cpp @@ -158,7 +158,9 @@ const int* CTextMetrics::GenerateDxArray( int nCharSpacing //!< [in] 文字隙間 ) { - vResultArray->resize(nLength); + if( (int)vResultArray->size() < nLength ){ + vResultArray->resize(nLength); + } if(!pText || nLength<=0)return NULL; int* p=&(*vResultArray)[0]; diff --git a/sakura_core/view/figures/CFigureManager.cpp b/sakura_core/view/figures/CFigureManager.cpp index 5719b86620..5ed2fa651e 100644 --- a/sakura_core/view/figures/CFigureManager.cpp +++ b/sakura_core/view/figures/CFigureManager.cpp @@ -42,7 +42,8 @@ CFigureManager::CFigureManager() m_vFigures.push_back(new CFigure_CtrlCode()); m_vFigures.push_back(new CFigure_HanBinary()); m_vFigures.push_back(new CFigure_ZenBinary()); - m_vFigures.push_back(new CFigure_Text()); + m_cFigureText = new CFigure_Text(); + m_vFigures.push_back(m_cFigureText); OnChangeSetting(); } diff --git a/sakura_core/view/figures/CFigureManager.h b/sakura_core/view/figures/CFigureManager.h index f7eb51ea37..bb923e4a9c 100644 --- a/sakura_core/view/figures/CFigureManager.h +++ b/sakura_core/view/figures/CFigureManager.h @@ -40,6 +40,9 @@ class CFigureManager : public TSingleton{ // @param pText 対象文字列の先頭 // @param nTextLen pTextから行末までの長さ(ただしCRLF==2) CFigure& GetFigure(const wchar_t* pText, int nTextLen); + CFigure_Text& GetFigureText(){ + return *m_cFigureText; + } // 設定変更 void OnChangeSetting(void); @@ -47,5 +50,6 @@ class CFigureManager : public TSingleton{ private: std::vector m_vFigures; std::vector m_vFiguresDisp; //!< 色分け表示対象 + CFigure_Text* m_cFigureText; }; #endif /* SAKURA_CFIGUREMANAGER_34C07527_BAEA_4B91_A3E0_7FCAFCFBAF0C_H_ */ diff --git a/sakura_core/view/figures/CFigureStrategy.cpp b/sakura_core/view/figures/CFigureStrategy.cpp index 8567353a34..73ca79fbf9 100644 --- a/sakura_core/view/figures/CFigureStrategy.cpp +++ b/sakura_core/view/figures/CFigureStrategy.cpp @@ -31,7 +31,38 @@ #include "charset/charcode.h" #include "types/CTypeSupport.h" -bool CFigure_Text::DrawImp(SColorStrategyInfo* pInfo) +int CFigure_Text::GetRenderType(SColorStrategyInfo* pInfo) +{ + const int nIdx = pInfo->GetPosInLogic(); + const int nLength = CNativeW::GetSizeOfChar( + pInfo->m_pLineOfLogic, + pInfo->GetDocLine()->GetLengthWithoutEOL(), + nIdx + ); + const int fontNo = (nLength == 2 ? WCODE::GetFontNo2(pInfo->m_pLineOfLogic[nIdx], pInfo->m_pLineOfLogic[nIdx+1]): + WCODE::GetFontNo(pInfo->m_pLineOfLogic[nIdx])); + int nType = 0; + if(nLength == 1){ + const wchar_t code = pInfo->m_pLineOfLogic[nIdx]; + // 未合成で一度に描画しても安全そうな文字一覧(その範囲の文字が合成用文字ではないもの) + // 合成は未サポート + if((0x20 <= code && code <= 0x7f) // ASCII + || 0x2E80 <= code && code <= 0x2FDF // 漢字部首 + || 0x3041 <= code && code <= 0x3096 // ひらがな + || 0x30A1 <= code && code <= 0x30FA // カタカナ + || 0x3400 <= code && code <= 0x4DBF // CJK統合漢字拡張A + || 0x4E00 <= code && code <= 0x9FFF // CJK統合漢字 + || 0xF900 <= code && code <= 0xFAFF // CJK互換漢字 + || 0xFF01 <= code && code <= 0xFF5E // 全角ASCII + || 0xFF61 <= code && code <= 0xFF9F // 半角カナ + ){ + nType = 1; + } + } + return (fontNo << 1) | nType; +} + +int CFigure_Text::FowardChars(SColorStrategyInfo* pInfo) { int nIdx = pInfo->GetPosInLogic(); int nLength = CNativeW::GetSizeOfChar( // サロゲートペア対策 2008.10.12 ryoji @@ -39,8 +70,22 @@ bool CFigure_Text::DrawImp(SColorStrategyInfo* pInfo) pInfo->GetDocLine()->GetLengthWithoutEOL(), nIdx ); + pInfo->m_nPosInLogic += nLength; + return pInfo->m_pcView->GetTextMetrics().CalcTextWidth3(pInfo->m_pLineOfLogic + nIdx, nLength); +} + +bool CFigure_Text::DrawImpBlock(SColorStrategyInfo* pInfo, int nPos, int nLength) +{ + int nIdx = nPos; bool bTrans = pInfo->m_pcView->IsBkBitmap() && CTypeSupport(pInfo->m_pcView, COLORIDX_TEXT).GetBackColor() == GetBkColor(pInfo->m_gr); - int fontNo = (nLength == 2 ? WCODE::GetFontNo2(pInfo->m_pLineOfLogic[nIdx], pInfo->m_pLineOfLogic[nIdx+1]): + int nLengthFirst = CNativeW::GetSizeOfChar( + pInfo->m_pLineOfLogic, + pInfo->GetDocLine()->GetLengthWithoutEOL(), + nPos + ); + + // 先頭の文字のフォントを採用する。フォント判別は上位で行う必要がある + int fontNo = (nLengthFirst == 2 ? WCODE::GetFontNo2(pInfo->m_pLineOfLogic[nIdx], pInfo->m_pLineOfLogic[nIdx+1]): WCODE::GetFontNo(pInfo->m_pLineOfLogic[nIdx])); if( fontNo ){ CTypeSupport cCurrentType(pInfo->m_pcView, pInfo->GetCurrentColor()); // 周辺の色(現在の指定色/選択色) @@ -64,6 +109,19 @@ bool CFigure_Text::DrawImp(SColorStrategyInfo* pInfo) if( fontNo ){ pInfo->m_gr.PopMyFont(); } + // pInfo->m_nPosInLogic += nLength; ここでは進めない + return true; +} + +bool CFigure_Text::DrawImp(SColorStrategyInfo* pInfo) +{ + // 1文字前提 + const int nLength = CNativeW::GetSizeOfChar( // 行末以外はここでスキャン位置を1字進める + pInfo->m_pLineOfLogic, + pInfo->GetDocLine()->GetLengthWithoutEOL(), + pInfo->GetPosInLogic() + ); + DrawImpBlock(pInfo, pInfo->m_nPosInLogic, nLength); pInfo->m_nPosInLogic += nLength; return true; } diff --git a/sakura_core/view/figures/CFigureStrategy.h b/sakura_core/view/figures/CFigureStrategy.h index a23a2896e5..ab3ef86287 100644 --- a/sakura_core/view/figures/CFigureStrategy.h +++ b/sakura_core/view/figures/CFigureStrategy.h @@ -45,6 +45,10 @@ class CFigure{ CEditDoc* pCEditDoc = CEditDoc::GetInstance(0); m_pTypeData = &pCEditDoc->m_cDocType.GetDocumentAttribute(); } + virtual bool IsFigureText() const + { + return false; + } protected: const STypeConfig* m_pTypeData; }; @@ -52,6 +56,15 @@ class CFigure{ //! 通常テキスト描画 class CFigure_Text : public CFigure{ public: + // 文字列を進める + int GetRenderType(SColorStrategyInfo* pInfo); + static const int RenderType_None = -1; + static bool IsRenderType_Block(int nRenderType){ + return (nRenderType != RenderType_None) && (nRenderType & 0x1); + } + + int FowardChars(SColorStrategyInfo* pInfo); + bool DrawImpBlock(SColorStrategyInfo* pInfo, int nPos, int nLength); bool DrawImp(SColorStrategyInfo* pInfo); bool Match(const wchar_t* pText, int nTextLen) const { @@ -63,6 +76,11 @@ class CFigure_Text : public CFigure{ { return true; } + + virtual bool IsFigureText() const + { + return true; + } }; //! 各種空白(半角空白/全角空白/タブ/改行)描画用の基本クラス From 0383fec4ab5aec9a4856ec7dbbd590e1db01f1ad Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Thu, 24 Sep 2020 18:22:32 +0900 Subject: [PATCH 0122/1024] =?UTF-8?q?=E8=A1=8C=E6=9C=AB=E7=A9=BA=E7=99=BD?= =?UTF-8?q?=E3=82=92=E5=89=8A=E9=99=A4(git=E3=81=AE=E8=AD=A6=E5=91=8A)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CEditView_Paint.cpp | 2 +- sakura_core/view/figures/CFigureStrategy.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sakura_core/view/CEditView_Paint.cpp b/sakura_core/view/CEditView_Paint.cpp index 511f9f2203..f9438cd0af 100644 --- a/sakura_core/view/CEditView_Paint.cpp +++ b/sakura_core/view/CEditView_Paint.cpp @@ -1086,7 +1086,7 @@ bool CEditView::DrawLayoutLine(SColorStrategyInfo* pInfo) if (cFigure.IsFigureText()) { nextRenderType = cFigureText.GetRenderType(pInfo); } - if (CFigure_Text::IsRenderType_Block(prevRenderType) && + if (CFigure_Text::IsRenderType_Block(prevRenderType) && (prevRenderType != nextRenderType || (nDrawBlockLen < pInfo->GetPosInLogic() - nPosBgn))) { if (0 < pInfo->GetPosInLogic() - nPosBgn) { cFigureText.DrawImpBlock(pInfo, nPosBgn, pInfo->GetPosInLogic() - nPosBgn); diff --git a/sakura_core/view/figures/CFigureStrategy.cpp b/sakura_core/view/figures/CFigureStrategy.cpp index 73ca79fbf9..cbbed29bf8 100644 --- a/sakura_core/view/figures/CFigureStrategy.cpp +++ b/sakura_core/view/figures/CFigureStrategy.cpp @@ -56,7 +56,7 @@ int CFigure_Text::GetRenderType(SColorStrategyInfo* pInfo) || 0xFF01 <= code && code <= 0xFF5E // 全角ASCII || 0xFF61 <= code && code <= 0xFF9F // 半角カナ ){ - nType = 1; + nType = 1; } } return (fontNo << 1) | nType; From 555ed20ffe5d67c4d06e31ed455e919201029de6 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Fri, 25 Sep 2020 22:48:31 +0900 Subject: [PATCH 0123/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E8=A6=B3=E7=82=B9=E3=81=AB=E5=AF=BE=E3=81=99?= =?UTF-8?q?=E3=82=8B=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CEditView_Paint.cpp | 4 ++-- sakura_core/view/figures/CFigureManager.cpp | 5 +++-- sakura_core/view/figures/CFigureManager.h | 4 ++-- sakura_core/view/figures/CFigureStrategy.cpp | 4 ++-- sakura_core/view/figures/CFigureStrategy.h | 9 ++++++--- 5 files changed, 15 insertions(+), 11 deletions(-) diff --git a/sakura_core/view/CEditView_Paint.cpp b/sakura_core/view/CEditView_Paint.cpp index f9438cd0af..5c035e605a 100644 --- a/sakura_core/view/CEditView_Paint.cpp +++ b/sakura_core/view/CEditView_Paint.cpp @@ -1077,12 +1077,12 @@ bool CEditView::DrawLayoutLine(SColorStrategyInfo* pInfo) int nPosTo = pcLayout->GetLogicOffset() + pcLayout->GetLengthWithEOL(); CFigureManager* pcFigureManager = CFigureManager::getInstance(); CFigure_Text& cFigureText = pcFigureManager->GetFigureText(); - int prevRenderType = CFigure_Text::RenderType_None; + FigureRenderType prevRenderType = CFigure_Text::RenderType_None; while(pInfo->m_nPosInLogic < nPosTo){ //1文字情報取得 CFigure& cFigure = pcFigureManager->GetFigure(&cLineStr.GetPtr()[pInfo->GetPosInLogic()], cLineStr.GetLength() - pInfo->GetPosInLogic()); - int nextRenderType = CFigure_Text::RenderType_None; + FigureRenderType nextRenderType = CFigure_Text::RenderType_None; if (cFigure.IsFigureText()) { nextRenderType = cFigureText.GetRenderType(pInfo); } diff --git a/sakura_core/view/figures/CFigureManager.cpp b/sakura_core/view/figures/CFigureManager.cpp index 5ed2fa651e..6664bb0f89 100644 --- a/sakura_core/view/figures/CFigureManager.cpp +++ b/sakura_core/view/figures/CFigureManager.cpp @@ -42,8 +42,8 @@ CFigureManager::CFigureManager() m_vFigures.push_back(new CFigure_CtrlCode()); m_vFigures.push_back(new CFigure_HanBinary()); m_vFigures.push_back(new CFigure_ZenBinary()); - m_cFigureText = new CFigure_Text(); - m_vFigures.push_back(m_cFigureText); + m_pcFigureText = new CFigure_Text(); + m_vFigures.push_back(m_pcFigureText); OnChangeSetting(); } @@ -57,6 +57,7 @@ CFigureManager::~CFigureManager() SAFE_DELETE(m_vFigures[i]); } m_vFigures.clear(); + m_pcFigureText = nullptr; } //$$ 高速化可能 diff --git a/sakura_core/view/figures/CFigureManager.h b/sakura_core/view/figures/CFigureManager.h index bb923e4a9c..71ae31ab7e 100644 --- a/sakura_core/view/figures/CFigureManager.h +++ b/sakura_core/view/figures/CFigureManager.h @@ -41,7 +41,7 @@ class CFigureManager : public TSingleton{ // @param nTextLen pTextから行末までの長さ(ただしCRLF==2) CFigure& GetFigure(const wchar_t* pText, int nTextLen); CFigure_Text& GetFigureText(){ - return *m_cFigureText; + return *m_pcFigureText; } // 設定変更 @@ -50,6 +50,6 @@ class CFigureManager : public TSingleton{ private: std::vector m_vFigures; std::vector m_vFiguresDisp; //!< 色分け表示対象 - CFigure_Text* m_cFigureText; + CFigure_Text* m_pcFigureText; }; #endif /* SAKURA_CFIGUREMANAGER_34C07527_BAEA_4B91_A3E0_7FCAFCFBAF0C_H_ */ diff --git a/sakura_core/view/figures/CFigureStrategy.cpp b/sakura_core/view/figures/CFigureStrategy.cpp index cbbed29bf8..c2a74d17bc 100644 --- a/sakura_core/view/figures/CFigureStrategy.cpp +++ b/sakura_core/view/figures/CFigureStrategy.cpp @@ -31,7 +31,7 @@ #include "charset/charcode.h" #include "types/CTypeSupport.h" -int CFigure_Text::GetRenderType(SColorStrategyInfo* pInfo) +FigureRenderType CFigure_Text::GetRenderType(SColorStrategyInfo* pInfo) { const int nIdx = pInfo->GetPosInLogic(); const int nLength = CNativeW::GetSizeOfChar( @@ -41,7 +41,7 @@ int CFigure_Text::GetRenderType(SColorStrategyInfo* pInfo) ); const int fontNo = (nLength == 2 ? WCODE::GetFontNo2(pInfo->m_pLineOfLogic[nIdx], pInfo->m_pLineOfLogic[nIdx+1]): WCODE::GetFontNo(pInfo->m_pLineOfLogic[nIdx])); - int nType = 0; + FigureRenderType nType = 0; if(nLength == 1){ const wchar_t code = pInfo->m_pLineOfLogic[nIdx]; // 未合成で一度に描画しても安全そうな文字一覧(その範囲の文字が合成用文字ではないもの) diff --git a/sakura_core/view/figures/CFigureStrategy.h b/sakura_core/view/figures/CFigureStrategy.h index ab3ef86287..b6fd41ce54 100644 --- a/sakura_core/view/figures/CFigureStrategy.h +++ b/sakura_core/view/figures/CFigureStrategy.h @@ -53,13 +53,16 @@ class CFigure{ const STypeConfig* m_pTypeData; }; +typedef int FigureRenderType; + //! 通常テキスト描画 class CFigure_Text : public CFigure{ public: // 文字列を進める - int GetRenderType(SColorStrategyInfo* pInfo); - static const int RenderType_None = -1; - static bool IsRenderType_Block(int nRenderType){ + FigureRenderType GetRenderType(SColorStrategyInfo* pInfo); + + static const FigureRenderType RenderType_None = -1; + static bool IsRenderType_Block(FigureRenderType nRenderType){ return (nRenderType != RenderType_None) && (nRenderType & 0x1); } From 11e77a16d5555a725157c5f1615dcaacf25b4889 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sat, 26 Sep 2020 11:02:12 +0900 Subject: [PATCH 0124/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E8=A6=B3=E7=82=B9GetPosInLogic=E3=82=92?= =?UTF-8?q?=E4=B8=80=E6=99=82=E5=A4=89=E6=95=B0=E3=81=B8=20nPosInLogic=20-?= =?UTF-8?q?=20nPosBgn=E3=81=AE=E5=85=B1=E9=80=9A=E5=BC=8F=E3=81=AE?= =?UTF-8?q?=E3=81=8F=E3=81=8F=E3=82=8A=E3=81=A0=E3=81=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CEditView_Paint.cpp | 39 +++++++++++++++++----------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/sakura_core/view/CEditView_Paint.cpp b/sakura_core/view/CEditView_Paint.cpp index 5c035e605a..c4da36a9fd 100644 --- a/sakura_core/view/CEditView_Paint.cpp +++ b/sakura_core/view/CEditView_Paint.cpp @@ -1072,6 +1072,7 @@ bool CEditView::DrawLayoutLine(SColorStrategyInfo* pInfo) //行終端または折り返しに達するまでループ if(pcLayout){ int nPosBgn = pInfo->m_nPosInLogic; // Logic + int nPosLength = 0; CLayoutInt nDrawX = pInfo->m_pDispPos->GetDrawCol(); // Layout const int nDrawBlockLen = 1000; // ExtTextOutの長さ制限にかからない適当な値 int nPosTo = pcLayout->GetLogicOffset() + pcLayout->GetLengthWithEOL(); @@ -1079,27 +1080,31 @@ bool CEditView::DrawLayoutLine(SColorStrategyInfo* pInfo) CFigure_Text& cFigureText = pcFigureManager->GetFigureText(); FigureRenderType prevRenderType = CFigure_Text::RenderType_None; while(pInfo->m_nPosInLogic < nPosTo){ + int nPosInLogic = pInfo->GetPosInLogic(); // FowardChars/DrawImpで更新される + nPosLength = nPosInLogic - nPosBgn; //1文字情報取得 - CFigure& cFigure = pcFigureManager->GetFigure(&cLineStr.GetPtr()[pInfo->GetPosInLogic()], - cLineStr.GetLength() - pInfo->GetPosInLogic()); + CFigure& cFigure = pcFigureManager->GetFigure(&cLineStr.GetPtr()[nPosInLogic], + cLineStr.GetLength() - nPosInLogic); FigureRenderType nextRenderType = CFigure_Text::RenderType_None; if (cFigure.IsFigureText()) { nextRenderType = cFigureText.GetRenderType(pInfo); } if (CFigure_Text::IsRenderType_Block(prevRenderType) && - (prevRenderType != nextRenderType || (nDrawBlockLen < pInfo->GetPosInLogic() - nPosBgn))) { - if (0 < pInfo->GetPosInLogic() - nPosBgn) { - cFigureText.DrawImpBlock(pInfo, nPosBgn, pInfo->GetPosInLogic() - nPosBgn); - nPosBgn = pInfo->GetPosInLogic(); + (prevRenderType != nextRenderType || (nDrawBlockLen < nPosLength))) { + if (0 < nPosLength) { + cFigureText.DrawImpBlock(pInfo, nPosBgn, nPosLength); + nPosBgn = nPosInLogic; + nPosLength = 0; } } prevRenderType = nextRenderType; //色切替 if( pInfo->CheckChangeColor(cLineStr) ){ - if (0 < pInfo->GetPosInLogic() - nPosBgn) { - cFigureText.DrawImpBlock(pInfo, nPosBgn, pInfo->GetPosInLogic() - nPosBgn); - nPosBgn = pInfo->GetPosInLogic(); + if (0 < nPosLength) { + cFigureText.DrawImpBlock(pInfo, nPosBgn, nPosLength); + nPosBgn = nPosInLogic; + nPosLength = 0; } CColor3Setting cColor; pInfo->DoChangeColor(&cColor); @@ -1109,22 +1114,26 @@ bool CEditView::DrawLayoutLine(SColorStrategyInfo* pInfo) //1文字描画 if (cFigure.IsFigureText() && CFigure_Text::IsRenderType_Block(nextRenderType)){ nDrawX += cFigureText.FowardChars(pInfo); + nPosInLogic = pInfo->GetPosInLogic(); + nPosLength = nPosInLogic - nPosBgn; }else{ cFigure.DrawImp(pInfo); - nPosBgn = pInfo->GetPosInLogic(); + nPosBgn = nPosInLogic = pInfo->GetPosInLogic(); + nPosLength = 0; nDrawX = pInfo->m_pDispPos->GetDrawCol(); } if( bSkipRight && GetTextArea().GetAreaRight() < nDrawX ){ - if (0 < pInfo->GetPosInLogic() - nPosBgn) { - cFigureText.DrawImpBlock(pInfo, nPosBgn, pInfo->GetPosInLogic() - nPosBgn); - nPosBgn = pInfo->GetPosInLogic(); + if (0 < nPosLength) { + cFigureText.DrawImpBlock(pInfo, nPosBgn, nPosLength); + nPosBgn = nPosInLogic; } pInfo->m_nPosInLogic = nPosTo; + nPosLength = nPosTo - nPosBgn; break; } } - if (0 < pInfo->GetPosInLogic() - nPosBgn) { - cFigureText.DrawImpBlock(pInfo, nPosBgn, pInfo->GetPosInLogic() - nPosBgn); + if (0 < nPosLength) { + cFigureText.DrawImpBlock(pInfo, nPosBgn, nPosLength); } } From c2a3a9a1038900d4125f578a15e29b38cb19b94a Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sat, 26 Sep 2020 11:15:08 +0900 Subject: [PATCH 0125/1024] =?UTF-8?q?typeid=E3=82=92=E4=BD=BF=E3=81=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CEditView_Paint.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sakura_core/view/CEditView_Paint.cpp b/sakura_core/view/CEditView_Paint.cpp index c4da36a9fd..8f56714a1e 100644 --- a/sakura_core/view/CEditView_Paint.cpp +++ b/sakura_core/view/CEditView_Paint.cpp @@ -1086,7 +1086,8 @@ bool CEditView::DrawLayoutLine(SColorStrategyInfo* pInfo) CFigure& cFigure = pcFigureManager->GetFigure(&cLineStr.GetPtr()[nPosInLogic], cLineStr.GetLength() - nPosInLogic); FigureRenderType nextRenderType = CFigure_Text::RenderType_None; - if (cFigure.IsFigureText()) { + bool is_text = (typeid(cFigure) == typeid(CFigure_Text)); + if (is_text) { nextRenderType = cFigureText.GetRenderType(pInfo); } if (CFigure_Text::IsRenderType_Block(prevRenderType) && @@ -1112,7 +1113,7 @@ bool CEditView::DrawLayoutLine(SColorStrategyInfo* pInfo) } //1文字描画 - if (cFigure.IsFigureText() && CFigure_Text::IsRenderType_Block(nextRenderType)){ + if (is_text && CFigure_Text::IsRenderType_Block(nextRenderType)){ nDrawX += cFigureText.FowardChars(pInfo); nPosInLogic = pInfo->GetPosInLogic(); nPosLength = nPosInLogic - nPosBgn; From 34f452c09d6dd2fca6df2b601bd97465606d8dca Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sat, 26 Sep 2020 11:25:43 +0900 Subject: [PATCH 0126/1024] =?UTF-8?q?CFigure=5FText=E3=82=A4=E3=83=B3?= =?UTF-8?q?=E3=82=B9=E3=82=BF=E3=83=B3=E3=82=B9=E3=82=92=E7=89=B9=E5=88=A5?= =?UTF-8?q?=E3=81=AB=E4=BD=BF=E3=81=86=E3=81=AE=E3=82=92=E6=AD=A2=E3=82=81?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit スタティックメソッド呼び出し記述統一 --- sakura_core/view/CEditView_Paint.cpp | 13 ++++++------- sakura_core/view/figures/CFigureManager.cpp | 4 +--- sakura_core/view/figures/CFigureManager.h | 4 ---- sakura_core/view/figures/CFigureStrategy.h | 15 +++------------ 4 files changed, 10 insertions(+), 26 deletions(-) diff --git a/sakura_core/view/CEditView_Paint.cpp b/sakura_core/view/CEditView_Paint.cpp index 8f56714a1e..71253a6e26 100644 --- a/sakura_core/view/CEditView_Paint.cpp +++ b/sakura_core/view/CEditView_Paint.cpp @@ -1077,7 +1077,6 @@ bool CEditView::DrawLayoutLine(SColorStrategyInfo* pInfo) const int nDrawBlockLen = 1000; // ExtTextOutの長さ制限にかからない適当な値 int nPosTo = pcLayout->GetLogicOffset() + pcLayout->GetLengthWithEOL(); CFigureManager* pcFigureManager = CFigureManager::getInstance(); - CFigure_Text& cFigureText = pcFigureManager->GetFigureText(); FigureRenderType prevRenderType = CFigure_Text::RenderType_None; while(pInfo->m_nPosInLogic < nPosTo){ int nPosInLogic = pInfo->GetPosInLogic(); // FowardChars/DrawImpで更新される @@ -1088,12 +1087,12 @@ bool CEditView::DrawLayoutLine(SColorStrategyInfo* pInfo) FigureRenderType nextRenderType = CFigure_Text::RenderType_None; bool is_text = (typeid(cFigure) == typeid(CFigure_Text)); if (is_text) { - nextRenderType = cFigureText.GetRenderType(pInfo); + nextRenderType = CFigure_Text::GetRenderType(pInfo); } if (CFigure_Text::IsRenderType_Block(prevRenderType) && (prevRenderType != nextRenderType || (nDrawBlockLen < nPosLength))) { if (0 < nPosLength) { - cFigureText.DrawImpBlock(pInfo, nPosBgn, nPosLength); + CFigure_Text::DrawImpBlock(pInfo, nPosBgn, nPosLength); nPosBgn = nPosInLogic; nPosLength = 0; } @@ -1103,7 +1102,7 @@ bool CEditView::DrawLayoutLine(SColorStrategyInfo* pInfo) //色切替 if( pInfo->CheckChangeColor(cLineStr) ){ if (0 < nPosLength) { - cFigureText.DrawImpBlock(pInfo, nPosBgn, nPosLength); + CFigure_Text::DrawImpBlock(pInfo, nPosBgn, nPosLength); nPosBgn = nPosInLogic; nPosLength = 0; } @@ -1114,7 +1113,7 @@ bool CEditView::DrawLayoutLine(SColorStrategyInfo* pInfo) //1文字描画 if (is_text && CFigure_Text::IsRenderType_Block(nextRenderType)){ - nDrawX += cFigureText.FowardChars(pInfo); + nDrawX += CFigure_Text::FowardChars(pInfo); nPosInLogic = pInfo->GetPosInLogic(); nPosLength = nPosInLogic - nPosBgn; }else{ @@ -1125,7 +1124,7 @@ bool CEditView::DrawLayoutLine(SColorStrategyInfo* pInfo) } if( bSkipRight && GetTextArea().GetAreaRight() < nDrawX ){ if (0 < nPosLength) { - cFigureText.DrawImpBlock(pInfo, nPosBgn, nPosLength); + CFigure_Text::DrawImpBlock(pInfo, nPosBgn, nPosLength); nPosBgn = nPosInLogic; } pInfo->m_nPosInLogic = nPosTo; @@ -1134,7 +1133,7 @@ bool CEditView::DrawLayoutLine(SColorStrategyInfo* pInfo) } } if (0 < nPosLength) { - cFigureText.DrawImpBlock(pInfo, nPosBgn, nPosLength); + CFigure_Text::DrawImpBlock(pInfo, nPosBgn, nPosLength); } } diff --git a/sakura_core/view/figures/CFigureManager.cpp b/sakura_core/view/figures/CFigureManager.cpp index 6664bb0f89..5719b86620 100644 --- a/sakura_core/view/figures/CFigureManager.cpp +++ b/sakura_core/view/figures/CFigureManager.cpp @@ -42,8 +42,7 @@ CFigureManager::CFigureManager() m_vFigures.push_back(new CFigure_CtrlCode()); m_vFigures.push_back(new CFigure_HanBinary()); m_vFigures.push_back(new CFigure_ZenBinary()); - m_pcFigureText = new CFigure_Text(); - m_vFigures.push_back(m_pcFigureText); + m_vFigures.push_back(new CFigure_Text()); OnChangeSetting(); } @@ -57,7 +56,6 @@ CFigureManager::~CFigureManager() SAFE_DELETE(m_vFigures[i]); } m_vFigures.clear(); - m_pcFigureText = nullptr; } //$$ 高速化可能 diff --git a/sakura_core/view/figures/CFigureManager.h b/sakura_core/view/figures/CFigureManager.h index 71ae31ab7e..f7eb51ea37 100644 --- a/sakura_core/view/figures/CFigureManager.h +++ b/sakura_core/view/figures/CFigureManager.h @@ -40,9 +40,6 @@ class CFigureManager : public TSingleton{ // @param pText 対象文字列の先頭 // @param nTextLen pTextから行末までの長さ(ただしCRLF==2) CFigure& GetFigure(const wchar_t* pText, int nTextLen); - CFigure_Text& GetFigureText(){ - return *m_pcFigureText; - } // 設定変更 void OnChangeSetting(void); @@ -50,6 +47,5 @@ class CFigureManager : public TSingleton{ private: std::vector m_vFigures; std::vector m_vFiguresDisp; //!< 色分け表示対象 - CFigure_Text* m_pcFigureText; }; #endif /* SAKURA_CFIGUREMANAGER_34C07527_BAEA_4B91_A3E0_7FCAFCFBAF0C_H_ */ diff --git a/sakura_core/view/figures/CFigureStrategy.h b/sakura_core/view/figures/CFigureStrategy.h index b6fd41ce54..1e36cae45e 100644 --- a/sakura_core/view/figures/CFigureStrategy.h +++ b/sakura_core/view/figures/CFigureStrategy.h @@ -45,10 +45,6 @@ class CFigure{ CEditDoc* pCEditDoc = CEditDoc::GetInstance(0); m_pTypeData = &pCEditDoc->m_cDocType.GetDocumentAttribute(); } - virtual bool IsFigureText() const - { - return false; - } protected: const STypeConfig* m_pTypeData; }; @@ -59,15 +55,15 @@ typedef int FigureRenderType; class CFigure_Text : public CFigure{ public: // 文字列を進める - FigureRenderType GetRenderType(SColorStrategyInfo* pInfo); + static FigureRenderType GetRenderType(SColorStrategyInfo* pInfo); static const FigureRenderType RenderType_None = -1; static bool IsRenderType_Block(FigureRenderType nRenderType){ return (nRenderType != RenderType_None) && (nRenderType & 0x1); } + static bool DrawImpBlock(SColorStrategyInfo* pInfo, int nPos, int nLength); + static int FowardChars(SColorStrategyInfo* pInfo); - int FowardChars(SColorStrategyInfo* pInfo); - bool DrawImpBlock(SColorStrategyInfo* pInfo, int nPos, int nLength); bool DrawImp(SColorStrategyInfo* pInfo); bool Match(const wchar_t* pText, int nTextLen) const { @@ -79,11 +75,6 @@ class CFigure_Text : public CFigure{ { return true; } - - virtual bool IsFigureText() const - { - return true; - } }; //! 各種空白(半角空白/全角空白/タブ/改行)描画用の基本クラス From 154fb92c1a12208a3e1d482460b10a64bd89203f Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sat, 26 Sep 2020 11:27:00 +0900 Subject: [PATCH 0127/1024] =?UTF-8?q?=E3=82=AB=E3=83=8A=E7=AF=84=E5=9B=B2?= =?UTF-8?q?=E3=81=AE=E5=90=88=E6=88=90=E6=96=87=E5=AD=97=E3=81=AB=E3=81=A4?= =?UTF-8?q?=E3=81=84=E3=81=A6=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/figures/CFigureStrategy.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/view/figures/CFigureStrategy.cpp b/sakura_core/view/figures/CFigureStrategy.cpp index c2a74d17bc..d81c15731a 100644 --- a/sakura_core/view/figures/CFigureStrategy.cpp +++ b/sakura_core/view/figures/CFigureStrategy.cpp @@ -49,7 +49,7 @@ FigureRenderType CFigure_Text::GetRenderType(SColorStrategyInfo* pInfo) if((0x20 <= code && code <= 0x7f) // ASCII || 0x2E80 <= code && code <= 0x2FDF // 漢字部首 || 0x3041 <= code && code <= 0x3096 // ひらがな - || 0x30A1 <= code && code <= 0x30FA // カタカナ + || 0x30A1 <= code && code <= 0x30FA // カタカナ(合成用濁点などを除く) || 0x3400 <= code && code <= 0x4DBF // CJK統合漢字拡張A || 0x4E00 <= code && code <= 0x9FFF // CJK統合漢字 || 0xF900 <= code && code <= 0xFAFF // CJK互換漢字 From bb416285f6064fe886c868002582a8cd0fc904b3 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sat, 26 Sep 2020 11:35:57 +0900 Subject: [PATCH 0128/1024] =?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CEditView_Paint.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/view/CEditView_Paint.cpp b/sakura_core/view/CEditView_Paint.cpp index 71253a6e26..659b2c4c0b 100644 --- a/sakura_core/view/CEditView_Paint.cpp +++ b/sakura_core/view/CEditView_Paint.cpp @@ -1111,12 +1111,12 @@ bool CEditView::DrawLayoutLine(SColorStrategyInfo* pInfo) SetCurrentColor(pInfo->m_gr, cColor.eColorIndex, cColor.eColorIndex2, cColor.eColorIndexBg); } - //1文字描画 if (is_text && CFigure_Text::IsRenderType_Block(nextRenderType)){ nDrawX += CFigure_Text::FowardChars(pInfo); nPosInLogic = pInfo->GetPosInLogic(); nPosLength = nPosInLogic - nPosBgn; }else{ + //1文字描画 cFigure.DrawImp(pInfo); nPosBgn = nPosInLogic = pInfo->GetPosInLogic(); nPosLength = 0; From e1fbb4465886e116b06ba5c4bfe68c3e8068c53b Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sat, 26 Sep 2020 12:59:22 +0900 Subject: [PATCH 0129/1024] =?UTF-8?q?=E3=83=AC=E3=82=A4=E3=82=A2=E3=82=A6?= =?UTF-8?q?=E3=83=88=E5=BA=A7=E6=A8=99=E3=81=A8=E7=94=BB=E9=9D=A2=E5=BA=A7?= =?UTF-8?q?=E6=A8=99=E3=81=AE=E5=8F=96=E3=82=8A=E9=81=95=E3=81=84=E3=81=AE?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CEditView_Paint.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/view/CEditView_Paint.cpp b/sakura_core/view/CEditView_Paint.cpp index 659b2c4c0b..29b97262a4 100644 --- a/sakura_core/view/CEditView_Paint.cpp +++ b/sakura_core/view/CEditView_Paint.cpp @@ -1122,7 +1122,7 @@ bool CEditView::DrawLayoutLine(SColorStrategyInfo* pInfo) nPosLength = 0; nDrawX = pInfo->m_pDispPos->GetDrawCol(); } - if( bSkipRight && GetTextArea().GetAreaRight() < nDrawX ){ + if( bSkipRight && GetTextArea().GetRightCol() < nDrawX ){ if (0 < nPosLength) { CFigure_Text::DrawImpBlock(pInfo, nPosBgn, nPosLength); nPosBgn = nPosInLogic; From 74f8142342df2ebb1d4840ec4b9a8705ad1353d0 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sat, 26 Sep 2020 18:51:29 +0900 Subject: [PATCH 0130/1024] =?UTF-8?q?DIFF=E5=B7=AE=E5=88=86=E8=A1=A8?= =?UTF-8?q?=E7=A4=BA=E3=81=A7MAX=5FPATH=E3=81=8E=E3=82=8A=E3=81=8E?= =?UTF-8?q?=E3=82=8A=E3=81=AE=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E5=90=8D?= =?UTF-8?q?=E3=82=92=E4=B8=80=E8=A6=A7=E8=A1=A8=E7=A4=BA=E3=81=A7=E8=90=BD?= =?UTF-8?q?=E3=81=A1=E3=82=8B=E4=B8=8D=E5=85=B7=E5=90=88=E3=81=AE=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgDiff.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/dlg/CDlgDiff.cpp b/sakura_core/dlg/CDlgDiff.cpp index a1456a79ce..5f147604c5 100644 --- a/sakura_core/dlg/CDlgDiff.cpp +++ b/sakura_core/dlg/CDlgDiff.cpp @@ -239,7 +239,7 @@ void CDlgDiff::SetData( void ) EditInfo *pFileInfo; int i; int nItem; - WIN_CHAR szName[_MAX_PATH]; + WCHAR szName[512]; int count = 0; int selIndex = 0; ECodeType code; From b864b10938fa18fa27f41b1bdba970fcecd13740 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sat, 26 Sep 2020 23:00:41 +0900 Subject: [PATCH 0131/1024] =?UTF-8?q?=E3=82=A6=E3=82=A3=E3=83=B3=E3=83=89?= =?UTF-8?q?=E3=82=A6=E4=B8=80=E8=A6=A7=E3=83=80=E3=82=A4=E3=82=A2=E3=83=AD?= =?UTF-8?q?=E3=82=B0=E3=81=A7=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E5=90=8D?= =?UTF-8?q?=E3=81=8CMAXPATH=E8=BF=91=E3=81=84=E3=81=A8=E8=90=BD=E3=81=A1?= =?UTF-8?q?=E3=82=8B=E4=B8=8D=E5=85=B7=E5=90=88=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgWindowList.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/dlg/CDlgWindowList.cpp b/sakura_core/dlg/CDlgWindowList.cpp index dfb49cc1b3..56cc60714e 100644 --- a/sakura_core/dlg/CDlgWindowList.cpp +++ b/sakura_core/dlg/CDlgWindowList.cpp @@ -143,7 +143,7 @@ void CDlgWindowList::SetData() ::SendMessageAny(pEditNode[i].GetHwnd(), MYWM_GETFILEINFO, 0, 0); const EditInfo* pEditInfo = &m_pShareData->m_sWorkBuffer.m_EditInfo_MYWM_GETFILEINFO; - WCHAR szName[_MAX_PATH]; + WCHAR szName[512]; CFileNameManager::getInstance()->GetMenuFullLabel_WinListNoEscape(szName, _countof(szName), pEditInfo, pEditNode[i].m_nId, i, calc.GetDC()); LV_ITEM lvi; From c4b7e3a1683468ea057f7c5b8bd323e1c50047c4 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sun, 27 Sep 2020 00:13:28 +0900 Subject: [PATCH 0132/1024] =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB?= =?UTF-8?q?=E5=86=85=E5=AE=B9=E6=AF=94=E8=BC=83=E3=83=80=E3=82=A4=E3=82=A2?= =?UTF-8?q?=E3=83=AD=E3=82=B0=E3=81=AE=E6=9C=AA=E4=BD=BF=E7=94=A8=E5=87=A6?= =?UTF-8?q?=E7=90=86pszCompareLabel=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/cmd/CViewCommander_Diff.cpp | 2 -- sakura_core/dlg/CDlgCompare.cpp | 11 ----------- sakura_core/dlg/CDlgCompare.h | 3 +-- 3 files changed, 1 insertion(+), 15 deletions(-) diff --git a/sakura_core/cmd/CViewCommander_Diff.cpp b/sakura_core/cmd/CViewCommander_Diff.cpp index 6fd7b910c2..80cd3988a9 100644 --- a/sakura_core/cmd/CViewCommander_Diff.cpp +++ b/sakura_core/cmd/CViewCommander_Diff.cpp @@ -108,7 +108,6 @@ static bool Commander_COMPARE_core(CViewCommander& commander, bool& bDifferent, void CViewCommander::Command_COMPARE( void ) { HWND hwndCompareWnd = NULL; - WCHAR szPath[_MAX_PATH + 1]; CDlgCompare cDlgCompare; HWND hwndMsgBox; //@@@ 2003.06.12 MIK @@ -119,7 +118,6 @@ void CViewCommander::Command_COMPARE( void ) m_pCommanderView->GetHwnd(), (LPARAM)GetDocument(), GetDocument()->m_cDocFile.GetFilePath(), - szPath, &hwndCompareWnd ); if( !bDlgCompareResult ){ diff --git a/sakura_core/dlg/CDlgCompare.cpp b/sakura_core/dlg/CDlgCompare.cpp index aa1eb539d4..10c0ec6f24 100644 --- a/sakura_core/dlg/CDlgCompare.cpp +++ b/sakura_core/dlg/CDlgCompare.cpp @@ -66,12 +66,10 @@ int CDlgCompare::DoModal( HWND hwndParent, LPARAM lParam, const WCHAR* pszPath, - WCHAR* pszCompareLabel, HWND* phwndCompareWnd ) { m_pszPath = pszPath; - m_pszCompareLabel = pszCompareLabel; m_phwndCompareWnd = phwndCompareWnd; return CDialog::DoModal( hInstance, hwndParent, IDD_COMPARE, lParam ); } @@ -203,22 +201,13 @@ int CDlgCompare::GetData( void ) { HWND hwndList; int nItem; - EditInfo* pfi; hwndList = GetItemHwnd( IDC_LIST_FILES ); nItem = List_GetCurSel( hwndList ); if( LB_ERR == nItem ){ return FALSE; }else{ *m_phwndCompareWnd = (HWND)List_GetItemData( hwndList, nItem ); - /* トレイからエディタへの編集ファイル名要求通知 */ - ::SendMessageAny( *m_phwndCompareWnd, MYWM_GETFILEINFO, 0, 0 ); - pfi = (EditInfo*)&m_pShareData->m_sWorkBuffer.m_EditInfo_MYWM_GETFILEINFO; - // 2010.07.30 パス名はやめて表示名に変更 - int nId = CAppNodeManager::getInstance()->GetEditNode( *m_phwndCompareWnd )->GetId(); - CTextWidthCalc calc(hwndList); - CFileNameManager::getInstance()->GetMenuFullLabel_WinListNoEscape( m_pszCompareLabel, _MAX_PATH/*長さ不明*/, pfi, nId, -1, calc.GetDC() ); - /* 左右に並べて表示 */ m_bCompareAndTileHorz = ::IsDlgButtonChecked( GetHwnd(), IDC_CHECK_TILE_H ); diff --git a/sakura_core/dlg/CDlgCompare.h b/sakura_core/dlg/CDlgCompare.h index e4f8f7ebac..b7bae37c5a 100644 --- a/sakura_core/dlg/CDlgCompare.h +++ b/sakura_core/dlg/CDlgCompare.h @@ -33,10 +33,9 @@ class CDlgCompare final : public CDialog || Attributes & Operations */ int DoModal( HINSTANCE hInstance, HWND hwndParent, LPARAM lParam, - const WCHAR* pszPath, WCHAR* pszCompareLabel, HWND* phwndCompareWnd ); /* モーダルダイアログの表示 */ + const WCHAR* pszPath, HWND* phwndCompareWnd ); /* モーダルダイアログの表示 */ const WCHAR* m_pszPath; - WCHAR* m_pszCompareLabel; HWND* m_phwndCompareWnd; BOOL m_bCompareAndTileHorz;/* 左右に並べて表示 */ From a504bf202c4183400ad69f94407aa6fe89c61227 Mon Sep 17 00:00:00 2001 From: beru Date: Fri, 16 Aug 2019 22:59:55 +0900 Subject: [PATCH 0133/1024] =?UTF-8?q?CGraphics=20=E3=81=AE=E5=AE=9F?= =?UTF-8?q?=E8=A3=85=E3=81=A7=20SaveDC=20=E3=81=A8=20RestoreDC=20=E3=82=92?= =?UTF-8?q?=E4=BD=BF=E3=81=86=E4=BA=8B=E3=81=A7=E4=BF=9D=E5=AD=98=E5=BE=A9?= =?UTF-8?q?=E5=B8=B0=E5=87=A6=E7=90=86=E3=81=AE=E5=8D=98=E7=B4=94=E5=8C=96?= =?UTF-8?q?=20=E5=BE=93=E6=9D=A5=E5=AE=9F=E8=A3=85=E3=81=AB=E6=AF=94?= =?UTF-8?q?=E3=81=B9=E3=81=A6=E5=85=83=E3=81=AE=E3=82=AF=E3=83=AA=E3=83=83?= =?UTF-8?q?=E3=83=94=E3=83=B3=E3=82=B0=E9=A0=98=E5=9F=9F=E3=81=AE=E5=8F=96?= =?UTF-8?q?=E5=BE=97=E3=82=92=E8=A1=8C=E3=82=8F=E3=81=AA=E3=81=84=E3=81=9F?= =?UTF-8?q?=E3=82=81=E5=87=A6=E7=90=86=E8=B2=A0=E8=8D=B7=E3=81=8C=E8=BB=BD?= =?UTF-8?q?=E6=B8=9B=E3=81=95=E3=82=8C=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/uiparts/CGraphics.cpp | 146 ++++--------------- sakura_core/uiparts/CGraphics.h | 35 +++-- sakura_core/view/CEditView_Paint.cpp | 3 +- sakura_core/view/CEditView_Paint_Bracket.cpp | 3 +- sakura_core/view/colors/CColorStrategy.h | 9 +- 5 files changed, 65 insertions(+), 131 deletions(-) diff --git a/sakura_core/uiparts/CGraphics.cpp b/sakura_core/uiparts/CGraphics.cpp index b548bf50b7..3800517542 100644 --- a/sakura_core/uiparts/CGraphics.cpp +++ b/sakura_core/uiparts/CGraphics.cpp @@ -35,10 +35,6 @@ static CGDIStock s_cGDIStock; // 唯一の CGDIStock オブジェクト void CGraphics::Init(HDC hdc) { m_hdc = hdc; - //ペン - m_hpnOrg = NULL; - //ブラシ - m_hbrOrg = NULL; m_hbrCurrent = NULL; m_bDynamicBrush = false; } @@ -49,32 +45,17 @@ CGraphics::~CGraphics() ClearMyFont(); ClearPen(); ClearBrush(); - RestoreTextColors(); + if (m_hdcOrg && m_dcState) { + ::RestoreDC(m_hdcOrg, m_dcState); + } } // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // クリッピング // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -void CGraphics::_InitClipping() -{ - if(m_vClippingRgns.empty()){ - //元のクリッピング領域を取得 - RECT rcDummy = {0,0,1,1}; - HRGN hrgnOrg = ::CreateRectRgnIndirect(&rcDummy); - int nRet = ::GetClipRgn(m_hdc,hrgnOrg); - if(nRet!=1){ - ::DeleteObject(hrgnOrg); - hrgnOrg = NULL; - } - //保存 - m_vClippingRgns.push_back(hrgnOrg); - } -} - void CGraphics::PushClipping(const RECT& rc) { - _InitClipping(); //新しく作成→HDCに設定→スタックに保存 HRGN hrgnNew = CreateRectRgnIndirect(&rc); ::SelectClipRgn(m_hdc,hrgnNew); @@ -83,24 +64,24 @@ void CGraphics::PushClipping(const RECT& rc) void CGraphics::PopClipping() { - if(m_vClippingRgns.size()>=2){ + if(m_vClippingRgns.size()){ //最後の要素を削除 ::DeleteObject(m_vClippingRgns.back()); m_vClippingRgns.pop_back(); - //この時点の最後の要素をHDCに設定 - ::SelectClipRgn(m_hdc,m_vClippingRgns.back()); + if(m_vClippingRgns.size()){ + //この時点の最後の要素をHDCに設定 + ::SelectClipRgn(m_hdc,m_vClippingRgns.back()); + }else{ + ::SelectClipRgn(m_hdc, NULL); + } } } void CGraphics::ClearClipping() { - //元のクリッピングに戻す - if(!m_vClippingRgns.empty()){ - ::SelectClipRgn(m_hdc,m_vClippingRgns[0]); - } //領域をすべて削除 - int nSize = (int)m_vClippingRgns.size(); - for(int i=0;i=2){ + if(m_vFonts.size()){ m_vFonts.pop_back(); - SelectObject(m_hdc, m_vFonts.back().m_hFont); + if(m_vFonts.size()){ + SelectObject(m_hdc, m_vFonts.back().m_hFont); + } } } void CGraphics::ClearMyFont() { - if(!m_vFonts.empty()){ - SelectObject(m_hdc, m_vFonts[0].m_hFont); - m_vFonts.clear(); - } + m_vFonts.clear(); } // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // @@ -226,47 +188,23 @@ void CGraphics::PushPen(COLORREF color, int nPenWidth, int nStyle) HPEN hpnNew = CreatePen(nStyle,nPenWidth,color); HPEN hpnOld = (HPEN)SelectObject(m_hdc,hpnNew); m_vPens.push_back(hpnNew); - if(!m_hpnOrg){ - m_hpnOrg = hpnOld; - } } void CGraphics::PopPen() { - //選択する候補 - HPEN hpnNew = NULL; - if(m_vPens.size()>=2){ - hpnNew = m_vPens[m_vPens.size()-2]; - } - else{ - hpnNew = m_hpnOrg; - } - - //選択 - if(hpnNew){ - SelectObject(m_hdc,hpnNew); - } - - //削除 - if(!m_vPens.empty()){ + if(m_vPens.size()){ DeleteObject(m_vPens.back()); m_vPens.pop_back(); - } - - //オリジナル - if(m_vPens.empty()){ - m_hpnOrg = NULL; + if(m_vPens.size()){ + SelectObject(m_hdc,m_vPens.back()); + } } } void CGraphics::ClearPen() { - if(m_hpnOrg){ - SelectObject(m_hdc,m_hpnOrg); - m_hpnOrg = NULL; - } - int nSize = (int)m_vPens.size(); - for(int i=0;i=2){ - //最後から2番目の要素をHDCに設定 - ::SelectObject(m_hdc,m_vBrushes[m_vBrushes.size()-2]); + if(m_vBrushes.size()){ //最後の要素を削除 ::DeleteObject(m_vBrushes.back()); m_vBrushes.pop_back(); + if(m_vBrushes.size()){ + ::SelectObject(m_hdc,m_vBrushes.back()); + } } } void CGraphics::ClearBrush() { - //元のブラシに戻す - if(!m_vBrushes.empty()){ - ::SelectObject(m_hdc,m_vBrushes[0]); - } - //ブラシをすべて削除 (0番要素以外) - int nSize = (int)m_vBrushes.size(); - for(int i=1;i COrgColor; typedef TOriginalHolder COrgInt; private: + void Init(HDC hdc); HDC m_hdc; + HDC m_hdcOrg; + int m_dcState; //クリッピング std::vector m_vClippingRgns; @@ -320,12 +333,10 @@ class CGraphics{ COrgInt m_nTextModeOrg; //ペン - HPEN m_hpnOrg; std::vector m_vPens; //ブラシ std::vector m_vBrushes; - HBRUSH m_hbrOrg; HBRUSH m_hbrCurrent; bool m_bDynamicBrush; //m_hbrCurrentを動的に作成した場合はtrue }; diff --git a/sakura_core/view/CEditView_Paint.cpp b/sakura_core/view/CEditView_Paint.cpp index 29b97262a4..c60b5c8a0d 100644 --- a/sakura_core/view/CEditView_Paint.cpp +++ b/sakura_core/view/CEditView_Paint.cpp @@ -878,9 +878,8 @@ bool CEditView::DrawLogicLine( { // MY_RUNNINGTIMER( cRunningTimer, "CEditView::DrawLogicLine" ); bool bDispEOF = false; - SColorStrategyInfo _sInfo; + SColorStrategyInfo _sInfo(_hdc); SColorStrategyInfo* pInfo = &_sInfo; - pInfo->m_gr.Init(_hdc); pInfo->m_pDispPos = _pDispPos; pInfo->m_pcView = this; diff --git a/sakura_core/view/CEditView_Paint_Bracket.cpp b/sakura_core/view/CEditView_Paint_Bracket.cpp index 02d3336ff1..ab85ce4bf0 100644 --- a/sakura_core/view/CEditView_Paint_Bracket.cpp +++ b/sakura_core/view/CEditView_Paint_Bracket.cpp @@ -125,8 +125,7 @@ void CEditView::DrawBracketPair( bool bDraw ) return; } - CGraphics gr; - gr.Init(::GetDC(GetHwnd())); + CGraphics gr(::GetDC(GetHwnd())); bool bCaretChange = false; gr.SetTextBackTransparent(true); diff --git a/sakura_core/view/colors/CColorStrategy.h b/sakura_core/view/colors/CColorStrategy.h index accfcedab2..fee9eeadbf 100644 --- a/sakura_core/view/colors/CColorStrategy.h +++ b/sakura_core/view/colors/CColorStrategy.h @@ -87,7 +87,14 @@ struct CColor3Setting { }; struct SColorStrategyInfo{ - SColorStrategyInfo() : m_sDispPosBegin(0,0), m_pStrategy(NULL), m_pStrategyFound(NULL), m_pStrategySelect(NULL), m_colorIdxBackLine(COLORIDX_TEXT) { + SColorStrategyInfo(HDC hDC = NULL) + : m_sDispPosBegin(0,0) + , m_pStrategy(NULL) + , m_pStrategyFound(NULL) + , m_pStrategySelect(NULL) + , m_colorIdxBackLine(COLORIDX_TEXT) + , m_gr(hDC) + { m_cIndex.eColorIndex = COLORIDX_TEXT; m_cIndex.eColorIndex2 = COLORIDX_TEXT; m_cIndex.eColorIndexBg = COLORIDX_TEXT; From 3f909013af20d5f7e0510ff1415d725adcc67864 Mon Sep 17 00:00:00 2001 From: Katsuhisa Yuasa Date: Sat, 17 Aug 2019 01:22:35 +0900 Subject: [PATCH 0134/1024] =?UTF-8?q?CEditView::DrawLogicLine=20=E3=83=A1?= =?UTF-8?q?=E3=82=BD=E3=83=83=E3=83=89=E5=86=85=E3=81=A7=20SColorStrategyI?= =?UTF-8?q?nfo=20=E5=9E=8B=E3=81=AE=E3=82=A4=E3=83=B3=E3=82=B9=E3=82=BF?= =?UTF-8?q?=E3=83=B3=E3=82=B9=E3=82=92=E7=94=A8=E6=84=8F=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=81=AE=E3=81=A7=E3=81=AF=E3=81=AA=E3=81=8F=20while=20?= =?UTF-8?q?=E3=83=AB=E3=83=BC=E3=83=97=E3=81=AE=E5=A4=96=E5=81=B4=E3=81=A7?= =?UTF-8?q?=E7=A2=BA=E4=BF=9D=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=E5=A4=89=E6=9B=B4=20CGraphics=20=E5=9E=8B=E3=81=AE=E7=94=9F?= =?UTF-8?q?=E6=88=90=E3=81=A8=E7=A0=B4=E6=A3=84=E3=81=AE=E3=82=B3=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=81=8C=E5=A4=A7=E3=81=8D=E3=81=84=E4=BA=8B=E3=81=B8?= =?UTF-8?q?=E3=81=AE=E5=AF=BE=E7=AD=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CEditView.h | 3 +-- sakura_core/view/CEditView_Paint.cpp | 13 +++++-------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/sakura_core/view/CEditView.h b/sakura_core/view/CEditView.h index d2e5ba044a..5c72e411da 100644 --- a/sakura_core/view/CEditView.h +++ b/sakura_core/view/CEditView.h @@ -240,8 +240,7 @@ class CEditView protected: //! ロジック行を1行描画 bool DrawLogicLine( - HDC hdc, //!< [in] 作画対象 - DispPos* pDispPos, //!< [in,out] 描画する箇所、描画元ソース + SColorStrategyInfo* pInfo, //!< [in,out] 作画対象 CLayoutInt nLineTo //!< [in] 作画終了するレイアウト行番号 ); diff --git a/sakura_core/view/CEditView_Paint.cpp b/sakura_core/view/CEditView_Paint.cpp index c60b5c8a0d..25f7de00bc 100644 --- a/sakura_core/view/CEditView_Paint.cpp +++ b/sakura_core/view/CEditView_Paint.cpp @@ -779,6 +779,9 @@ void CEditView::OnPaint2( HDC _hdc, PAINTSTRUCT *pPs, BOOL bDrawFromComptibleBmp sPos.ForwardLayoutLineRef(1); //レイアウト行++ } }else{ + SColorStrategyInfo sInfo(gr); + sInfo.m_pDispPos = &sPos; + sInfo.m_pcView = this; while(sPos.GetLayoutLineRef() <= nLayoutLineTo) { //描画X位置リセット @@ -786,8 +789,7 @@ void CEditView::OnPaint2( HDC _hdc, PAINTSTRUCT *pPs, BOOL bDrawFromComptibleBmp //1行描画 bool bDispResult = DrawLogicLine( - gr, - &sPos, + &sInfo, nLayoutLineTo ); @@ -871,17 +873,12 @@ void CEditView::OnPaint2( HDC _hdc, PAINTSTRUCT *pPs, BOOL bDrawFromComptibleBmp @date 2007.08.31 kobake 引数 bDispBkBitmap を削除 */ bool CEditView::DrawLogicLine( - HDC _hdc, //!< [in] 作画対象 - DispPos* _pDispPos, //!< [in,out] 描画する箇所、描画元ソース + SColorStrategyInfo* pInfo, //!< [in,out] 作画情報 CLayoutInt nLineTo //!< [in] 作画終了するレイアウト行番号 ) { // MY_RUNNINGTIMER( cRunningTimer, "CEditView::DrawLogicLine" ); bool bDispEOF = false; - SColorStrategyInfo _sInfo(_hdc); - SColorStrategyInfo* pInfo = &_sInfo; - pInfo->m_pDispPos = _pDispPos; - pInfo->m_pcView = this; //CColorStrategyPool初期化 CColorStrategyPool* pool = CColorStrategyPool::getInstance(); From 86b548a2eb9495fae1baa78ffe161e0abca985f1 Mon Sep 17 00:00:00 2001 From: Katsuhisa Yuasa Date: Sat, 17 Aug 2019 01:24:13 +0900 Subject: [PATCH 0135/1024] =?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CEditView.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/view/CEditView.h b/sakura_core/view/CEditView.h index 5c72e411da..e237f43adc 100644 --- a/sakura_core/view/CEditView.h +++ b/sakura_core/view/CEditView.h @@ -240,7 +240,7 @@ class CEditView protected: //! ロジック行を1行描画 bool DrawLogicLine( - SColorStrategyInfo* pInfo, //!< [in,out] 作画対象 + SColorStrategyInfo* pInfo, //!< [in,out] 作画情報 CLayoutInt nLineTo //!< [in] 作画終了するレイアウト行番号 ); From 22bc789544bcefb959f4ac983b0131624829d91b Mon Sep 17 00:00:00 2001 From: Katsuhisa Yuasa Date: Sat, 26 Sep 2020 14:57:10 +0900 Subject: [PATCH 0136/1024] =?UTF-8?q?CGraphics::SetPen=20=E3=81=AE?= =?UTF-8?q?=E4=BB=A3=E3=82=8F=E3=82=8A=E3=81=AB=20PushPen,=20PopPen=20?= =?UTF-8?q?=E3=82=92=E4=BD=BF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/figures/CFigure_Eol.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sakura_core/view/figures/CFigure_Eol.cpp b/sakura_core/view/figures/CFigure_Eol.cpp index e2d3ea176e..c160893c67 100644 --- a/sakura_core/view/figures/CFigure_Eol.cpp +++ b/sakura_core/view/figures/CFigure_Eol.cpp @@ -326,7 +326,7 @@ void _DrawEOL( ) { int sx, sy; // 矢印の先頭 - gr.SetPen( pColor ); + gr.PushPen( pColor, 1 ); switch( cEol.GetType() ){ case EOL_CRLF: // 下左矢印 @@ -471,4 +471,6 @@ void _DrawEOL( } break; } + + gr.PopPen(); } From 3a8cb3247ba7e59ec7aa905c73f2ecef305615c1 Mon Sep 17 00:00:00 2001 From: Katsuhisa Yuasa Date: Sat, 26 Sep 2020 19:29:49 +0900 Subject: [PATCH 0137/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/uiparts/CGraphics.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/uiparts/CGraphics.cpp b/sakura_core/uiparts/CGraphics.cpp index 3800517542..d2216dd829 100644 --- a/sakura_core/uiparts/CGraphics.cpp +++ b/sakura_core/uiparts/CGraphics.cpp @@ -249,7 +249,7 @@ void CGraphics::PopBrushColor() void CGraphics::ClearBrush() { //ブラシをすべて削除 - size_t nSize = (int)m_vBrushes.size(); + size_t nSize = m_vBrushes.size(); for(size_t i=0;i Date: Sun, 27 Sep 2020 05:57:04 +0900 Subject: [PATCH 0138/1024] =?UTF-8?q?CGraphics=20=E5=81=B4=E3=81=AE?= =?UTF-8?q?=E6=94=B9=E9=80=A0=E3=81=AF=E5=8F=96=E3=82=8A=E6=AD=A2=E3=82=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/uiparts/CGraphics.cpp | 146 +++++++++++++++++++++++------- sakura_core/uiparts/CGraphics.h | 35 +++---- 2 files changed, 126 insertions(+), 55 deletions(-) diff --git a/sakura_core/uiparts/CGraphics.cpp b/sakura_core/uiparts/CGraphics.cpp index d2216dd829..b548bf50b7 100644 --- a/sakura_core/uiparts/CGraphics.cpp +++ b/sakura_core/uiparts/CGraphics.cpp @@ -35,6 +35,10 @@ static CGDIStock s_cGDIStock; // 唯一の CGDIStock オブジェクト void CGraphics::Init(HDC hdc) { m_hdc = hdc; + //ペン + m_hpnOrg = NULL; + //ブラシ + m_hbrOrg = NULL; m_hbrCurrent = NULL; m_bDynamicBrush = false; } @@ -45,17 +49,32 @@ CGraphics::~CGraphics() ClearMyFont(); ClearPen(); ClearBrush(); - if (m_hdcOrg && m_dcState) { - ::RestoreDC(m_hdcOrg, m_dcState); - } + RestoreTextColors(); } // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // クリッピング // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // +void CGraphics::_InitClipping() +{ + if(m_vClippingRgns.empty()){ + //元のクリッピング領域を取得 + RECT rcDummy = {0,0,1,1}; + HRGN hrgnOrg = ::CreateRectRgnIndirect(&rcDummy); + int nRet = ::GetClipRgn(m_hdc,hrgnOrg); + if(nRet!=1){ + ::DeleteObject(hrgnOrg); + hrgnOrg = NULL; + } + //保存 + m_vClippingRgns.push_back(hrgnOrg); + } +} + void CGraphics::PushClipping(const RECT& rc) { + _InitClipping(); //新しく作成→HDCに設定→スタックに保存 HRGN hrgnNew = CreateRectRgnIndirect(&rc); ::SelectClipRgn(m_hdc,hrgnNew); @@ -64,24 +83,24 @@ void CGraphics::PushClipping(const RECT& rc) void CGraphics::PopClipping() { - if(m_vClippingRgns.size()){ + if(m_vClippingRgns.size()>=2){ //最後の要素を削除 ::DeleteObject(m_vClippingRgns.back()); m_vClippingRgns.pop_back(); - if(m_vClippingRgns.size()){ - //この時点の最後の要素をHDCに設定 - ::SelectClipRgn(m_hdc,m_vClippingRgns.back()); - }else{ - ::SelectClipRgn(m_hdc, NULL); - } + //この時点の最後の要素をHDCに設定 + ::SelectClipRgn(m_hdc,m_vClippingRgns.back()); } } void CGraphics::ClearClipping() { + //元のクリッピングに戻す + if(!m_vClippingRgns.empty()){ + ::SelectClipRgn(m_hdc,m_vClippingRgns[0]); + } //領域をすべて削除 - size_t nSize = m_vClippingRgns.size(); - for(size_t i=0;i=2){ m_vFonts.pop_back(); - if(m_vFonts.size()){ - SelectObject(m_hdc, m_vFonts.back().m_hFont); - } + SelectObject(m_hdc, m_vFonts.back().m_hFont); } } void CGraphics::ClearMyFont() { - m_vFonts.clear(); + if(!m_vFonts.empty()){ + SelectObject(m_hdc, m_vFonts[0].m_hFont); + m_vFonts.clear(); + } } // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // @@ -188,23 +226,47 @@ void CGraphics::PushPen(COLORREF color, int nPenWidth, int nStyle) HPEN hpnNew = CreatePen(nStyle,nPenWidth,color); HPEN hpnOld = (HPEN)SelectObject(m_hdc,hpnNew); m_vPens.push_back(hpnNew); + if(!m_hpnOrg){ + m_hpnOrg = hpnOld; + } } void CGraphics::PopPen() { - if(m_vPens.size()){ + //選択する候補 + HPEN hpnNew = NULL; + if(m_vPens.size()>=2){ + hpnNew = m_vPens[m_vPens.size()-2]; + } + else{ + hpnNew = m_hpnOrg; + } + + //選択 + if(hpnNew){ + SelectObject(m_hdc,hpnNew); + } + + //削除 + if(!m_vPens.empty()){ DeleteObject(m_vPens.back()); m_vPens.pop_back(); - if(m_vPens.size()){ - SelectObject(m_hdc,m_vPens.back()); - } + } + + //オリジナル + if(m_vPens.empty()){ + m_hpnOrg = NULL; } } void CGraphics::ClearPen() { - size_t nSize = m_vPens.size(); - for(size_t i=0;i=2){ + //最後から2番目の要素をHDCに設定 + ::SelectObject(m_hdc,m_vBrushes[m_vBrushes.size()-2]); //最後の要素を削除 ::DeleteObject(m_vBrushes.back()); m_vBrushes.pop_back(); - if(m_vBrushes.size()){ - ::SelectObject(m_hdc,m_vBrushes.back()); - } } } void CGraphics::ClearBrush() { - //ブラシをすべて削除 - size_t nSize = m_vBrushes.size(); - for(size_t i=0;i COrgColor; typedef TOriginalHolder COrgInt; private: - void Init(HDC hdc); HDC m_hdc; - HDC m_hdcOrg; - int m_dcState; //クリッピング std::vector m_vClippingRgns; @@ -333,10 +320,12 @@ class CGraphics{ COrgInt m_nTextModeOrg; //ペン + HPEN m_hpnOrg; std::vector m_vPens; //ブラシ std::vector m_vBrushes; + HBRUSH m_hbrOrg; HBRUSH m_hbrCurrent; bool m_bDynamicBrush; //m_hbrCurrentを動的に作成した場合はtrue }; From ad4537a33b858b4d8955a905eb1841144a88e3ea Mon Sep 17 00:00:00 2001 From: Katsuhisa Yuasa Date: Sun, 27 Sep 2020 06:27:39 +0900 Subject: [PATCH 0139/1024] =?UTF-8?q?EOL=E6=8F=8F=E7=94=BB=E3=80=81?= =?UTF-8?q?=E3=83=9A=E3=83=B3=E3=81=AE=E4=BD=BF=E3=81=84=E3=81=BE=E3=82=8F?= =?UTF-8?q?=E3=81=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/figures/CFigure_Eol.cpp | 25 ++++++++++++++++-------- sakura_core/view/figures/CFigure_Eol.h | 9 +++++++++ 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/sakura_core/view/figures/CFigure_Eol.cpp b/sakura_core/view/figures/CFigure_Eol.cpp index c160893c67..5520de7f47 100644 --- a/sakura_core/view/figures/CFigure_Eol.cpp +++ b/sakura_core/view/figures/CFigure_Eol.cpp @@ -44,7 +44,7 @@ void _DispWrap(CGraphics& gr, DispPos* pDispPos, const CEditView* pcView); //改行記号描画 //2007.08.30 kobake 追加 -void _DispEOL(CGraphics& gr, DispPos* pDispPos, CEol cEol, const CEditView* pcView, bool bTrans); +void _DispEOL(CGraphics& gr, DispPos* pDispPos, CEol cEol, const CEditView* pcView, bool bTrans, HPEN hPen); // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // CFigure_Eol // @@ -113,7 +113,16 @@ bool CFigure_Eol::DrawImp(SColorStrategyInfo* pInfo) pInfo->m_gr.PushMyFont(sFont); DispPos sPos(*pInfo->m_pDispPos); // 現在位置を覚えておく - _DispEOL(pInfo->m_gr, pInfo->m_pDispPos, cEol, pcView, bTrans); + + if (crText != m_clrPen || m_hPen == NULL) { + if (m_hPen != NULL) { + ::DeleteObject(m_hPen); + } + m_hPen = CreatePen(PS_SOLID, 1, crText); + m_clrPen = crText; + } + + _DispEOL(pInfo->m_gr, pInfo->m_pDispPos, cEol, pcView, bTrans, m_hPen); DrawImp_StylePop(pInfo); DrawImp_DrawUnderline(pInfo, sPos); @@ -252,11 +261,11 @@ void _DrawEOL( const CMyRect& rcEol, CEol cEol, bool bBold, - COLORREF pColor + HPEN hPen ); //2007.08.30 kobake 追加 -void _DispEOL(CGraphics& gr, DispPos* pDispPos, CEol cEol, const CEditView* pcView, bool bTrans) +void _DispEOL(CGraphics& gr, DispPos* pDispPos, CEol cEol, const CEditView* pcView, bool bTrans, HPEN hPen) { const CLayoutXInt nCol = CTypeSupport(pcView,COLORIDX_EOL).IsDisp() ? pcView->GetTextMetrics().GetLayoutXDefault(CKetaXInt(1)) + CLayoutXInt(4) // ONのときは1幅+4px @@ -293,7 +302,7 @@ void _DispEOL(CGraphics& gr, DispPos* pDispPos, CEol cEol, const CEditView* pcVi // 文字色や太字かどうかを現在の DC から調べる // 2009.05.29 ryoji // (検索マッチ等の状況に柔軟に対応するため、ここは記号の色指定には決め打ちしない) // 2013.06.21 novice 文字色、太字をCGraphicsから取得 - _DrawEOL(gr, rcEol, cEol, gr.GetCurrentMyFontBold(), gr.GetCurrentTextForeColor()); + _DrawEOL(gr, rcEol, cEol, gr.GetCurrentMyFontBold(), hPen); // リージョン破棄 gr.PopClipping(); @@ -322,11 +331,11 @@ void _DrawEOL( const CMyRect& rcEol, //!< 描画領域 CEol cEol, //!< 行末コード種別 bool bBold, //!< TRUE: 太字 - COLORREF pColor //!< 色 + HPEN hPen //!< ペン ) { int sx, sy; // 矢印の先頭 - gr.PushPen( pColor, 1 ); + HPEN hPenOld = (HPEN)SelectObject(gr, hPen); switch( cEol.GetType() ){ case EOL_CRLF: // 下左矢印 @@ -472,5 +481,5 @@ void _DrawEOL( break; } - gr.PopPen(); + SelectObject(gr, hPenOld); } diff --git a/sakura_core/view/figures/CFigure_Eol.h b/sakura_core/view/figures/CFigure_Eol.h index 8f8ac571e4..3d4a0c886d 100644 --- a/sakura_core/view/figures/CFigure_Eol.h +++ b/sakura_core/view/figures/CFigure_Eol.h @@ -31,6 +31,12 @@ //! 改行描画 class CFigure_Eol : public CFigureSpace{ public: + ~CFigure_Eol() + { + if (m_hPen) { + ::DeleteObject(m_hPen); + } + } //traits bool Match(const wchar_t* pText, int nTextLen) const; bool Disp(void) const @@ -42,5 +48,8 @@ class CFigure_Eol : public CFigureSpace{ bool DrawImp(SColorStrategyInfo* pInfo); void DispSpace(CGraphics& gr, DispPos* pDispPos, CEditView* pcView, bool bTrans) const {}; EColorIndexType GetColorIdx(void) const{ return COLORIDX_EOL; } +private: + HPEN m_hPen = NULL; + COLORREF m_clrPen; }; #endif /* SAKURA_CFIGURE_EOL_C51A4502_29AE_4D38_8056_5B0CFCC3686B_H_ */ From c4a7fa659ed2ddb439d4a1b309fdfe0734def6d8 Mon Sep 17 00:00:00 2001 From: Katsuhisa Yuasa Date: Mon, 28 Sep 2020 03:28:42 +0900 Subject: [PATCH 0140/1024] =?UTF-8?q?=E3=83=86=E3=82=AD=E3=82=B9=E3=83=88?= =?UTF-8?q?=E5=B9=85=E8=A8=88=E7=AE=97=E3=81=AB=E4=BD=BF=E7=94=A8=E3=81=99?= =?UTF-8?q?=E3=82=8B=E6=96=87=E5=AD=97=E9=96=93=E9=9A=94=E9=85=8D=E5=88=97?= =?UTF-8?q?=E3=81=AE=E3=82=B3=E3=83=B3=E3=83=86=E3=83=8A=E3=82=92=E4=BD=BF?= =?UTF-8?q?=E3=81=84=E3=81=BE=E3=82=8F=E3=81=99=E4=BA=8B=E3=81=A7=E8=B2=A0?= =?UTF-8?q?=E8=8D=B7=E3=82=92=E5=89=8A=E6=B8=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/print/CPrintPreview.cpp | 5 +++-- sakura_core/view/CTextMetrics.cpp | 9 ++++----- sakura_core/view/CTextMetrics.h | 4 +++- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/sakura_core/print/CPrintPreview.cpp b/sakura_core/print/CPrintPreview.cpp index 826c322f50..71bacf9585 100644 --- a/sakura_core/print/CPrintPreview.cpp +++ b/sakura_core/print/CPrintPreview.cpp @@ -1347,7 +1347,8 @@ void CPrintPreview::DrawHeaderFooter( HDC hdc, const CMyRect& rect, bool bHeader bHeader ? m_pPrintSetting->m_szHeaderForm[POS_CENTER] : m_pPrintSetting->m_szFooterForm[POS_CENTER], szWork, nWorkLen); nLen = wcslen( szWork ); - nTextWidth = CTextMetrics::CalcTextWidth2(szWork, nLen, nDx, spaceing); //テキスト幅 + std::vector vDxArray; + nTextWidth = CTextMetrics::CalcTextWidth2(szWork, nLen, nDx, spaceing, vDxArray); //テキスト幅 Print_DrawLine( hdc, CMyPoint( @@ -1366,7 +1367,7 @@ void CPrintPreview::DrawHeaderFooter( HDC hdc, const CMyRect& rect, bool bHeader bHeader ? m_pPrintSetting->m_szHeaderForm[POS_RIGHT] : m_pPrintSetting->m_szFooterForm[POS_RIGHT], szWork, nWorkLen); nLen = wcslen( szWork ); - nTextWidth = CTextMetrics::CalcTextWidth2(szWork, nLen, nDx, spaceing); //テキスト幅 + nTextWidth = CTextMetrics::CalcTextWidth2(szWork, nLen, nDx, spaceing, vDxArray); //テキスト幅 Print_DrawLine( hdc, CMyPoint( diff --git a/sakura_core/view/CTextMetrics.cpp b/sakura_core/view/CTextMetrics.cpp index d96fbb21a7..70dec7cb39 100644 --- a/sakura_core/view/CTextMetrics.cpp +++ b/sakura_core/view/CTextMetrics.cpp @@ -237,11 +237,10 @@ int CTextMetrics::CalcTextWidth2( const wchar_t* pText, //!< 文字列 int nLength, //!< 文字列長 int nHankakuDx, //!< 半角文字の文字間隔 - int nCharSpacing //!< 文字の隙間 + int nCharSpacing, //!< 文字の隙間 + std::vector& vDxArray //!< [out] 文字間隔配列 ) { - //文字間隔配列を生成 - vector vDxArray; const int* pDxArray = CTextMetrics::GenerateDxArray( &vDxArray, pText, @@ -258,8 +257,8 @@ int CTextMetrics::CalcTextWidth2( int CTextMetrics::CalcTextWidth3( const wchar_t* pText, //!< 文字列 - int nLength //!< 文字列長 + int nLength //!< 文字列長 ) const { - return CalcTextWidth2(pText, nLength, GetCharPxWidth(), GetCharSpacing()); + return CalcTextWidth2(pText, nLength, GetCharPxWidth(), GetCharSpacing(), m_vDxArray); } diff --git a/sakura_core/view/CTextMetrics.h b/sakura_core/view/CTextMetrics.h index a986aca376..3f9e4386ce 100644 --- a/sakura_core/view/CTextMetrics.h +++ b/sakura_core/view/CTextMetrics.h @@ -112,7 +112,8 @@ class CTextMetrics{ const wchar_t* pText, //!< 文字列 int nLength, //!< 文字列長 int nHankakuDx, //!< 半角文字の文字間隔 - int nCharSpacing + int nCharSpacing, //!< 文字の隙間 + std::vector& vDxArray //!< [out] 文字間隔配列 ); int CalcTextWidth3( @@ -129,5 +130,6 @@ class CTextMetrics{ int m_anHankakuDx[64]; //!< 半角用文字間隔配列 int m_anZenkakuDx[64]; //!< 全角用文字間隔配列 std::vector m_aFontHeightMargin; + mutable std::vector m_vDxArray; //!< 文字間隔配列 }; #endif /* SAKURA_CTEXTMETRICS_7972A864_FDFF_4852_9EA5_A91D39657A7F_H_ */ From 54ad3bff9d2d95db808d5f0cd0720d072b95d401 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 28 Sep 2020 12:15:21 +0900 Subject: [PATCH 0141/1024] =?UTF-8?q?CFigure=E3=81=ABfinal=E3=81=A8overrid?= =?UTF-8?q?e=E4=BF=AE=E9=A3=BE=E5=AD=90=E3=82=92=E4=BB=98=E3=81=91?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/figures/CFigureStrategy.h | 18 ++++++++++------ sakura_core/view/figures/CFigure_Comma.h | 10 ++++----- sakura_core/view/figures/CFigure_CtrlCode.h | 24 ++++++++++----------- sakura_core/view/figures/CFigure_Eol.h | 13 +++++------ sakura_core/view/figures/CFigure_HanSpace.h | 8 +++---- sakura_core/view/figures/CFigure_Tab.h | 10 ++++----- sakura_core/view/figures/CFigure_ZenSpace.h | 8 +++---- 7 files changed, 48 insertions(+), 43 deletions(-) diff --git a/sakura_core/view/figures/CFigureStrategy.h b/sakura_core/view/figures/CFigureStrategy.h index 1e36cae45e..95389715e3 100644 --- a/sakura_core/view/figures/CFigureStrategy.h +++ b/sakura_core/view/figures/CFigureStrategy.h @@ -45,6 +45,7 @@ class CFigure{ CEditDoc* pCEditDoc = CEditDoc::GetInstance(0); m_pTypeData = &pCEditDoc->m_cDocType.GetDocumentAttribute(); } + protected: const STypeConfig* m_pTypeData; }; @@ -52,7 +53,7 @@ class CFigure{ typedef int FigureRenderType; //! 通常テキスト描画 -class CFigure_Text : public CFigure{ +class CFigure_Text final : public CFigure{ public: // 文字列を進める static FigureRenderType GetRenderType(SColorStrategyInfo* pInfo); @@ -64,14 +65,14 @@ class CFigure_Text : public CFigure{ static bool DrawImpBlock(SColorStrategyInfo* pInfo, int nPos, int nLength); static int FowardChars(SColorStrategyInfo* pInfo); - bool DrawImp(SColorStrategyInfo* pInfo); - bool Match(const wchar_t* pText, int nTextLen) const + bool DrawImp(SColorStrategyInfo* pInfo) override; + bool Match(const wchar_t* pText, int nTextLen) const override { return true; } //! 色分け表示対象判定 - virtual bool Disp(void) const + bool Disp(void) const override { return true; } @@ -80,19 +81,21 @@ class CFigure_Text : public CFigure{ //! 各種空白(半角空白/全角空白/タブ/改行)描画用の基本クラス class CFigureSpace : public CFigure{ public: - virtual bool DrawImp(SColorStrategyInfo* pInfo); + bool DrawImp(SColorStrategyInfo* pInfo) override; + protected: virtual void DispSpace(CGraphics& gr, DispPos* pDispPos, CEditView* pcView, bool bTrans) const = 0; virtual EColorIndexType GetColorIdx(void) const = 0; +public: //! 色分け表示対象判定 - virtual bool Disp(void) const + bool Disp(void) const override { EColorIndexType nColorIndex = GetColorIdx(); return m_pTypeData->m_ColorInfoArr[nColorIndex].m_bDisp; } - virtual void Update(void) + void Update(void) override { CFigure::Update(); @@ -104,6 +107,7 @@ class CFigureSpace : public CFigure{ } } +protected: EColorIndexType GetDispColorIdx(void) const{ return m_nDispColorIndex; } // 実装補助 diff --git a/sakura_core/view/figures/CFigure_Comma.h b/sakura_core/view/figures/CFigure_Comma.h index 9bf6cb46c4..4b079e8812 100644 --- a/sakura_core/view/figures/CFigure_Comma.h +++ b/sakura_core/view/figures/CFigure_Comma.h @@ -29,17 +29,17 @@ #include "view/figures/CFigureStrategy.h" //! カンマ描画(CSVモード) -class CFigure_Comma : public CFigureSpace{ +class CFigure_Comma final : public CFigureSpace{ public: //traits - bool Match(const wchar_t* pText, int nTextLen) const; - bool Disp(void) const + bool Match(const wchar_t* pText, int nTextLen) const override; + bool Disp(void) const override { return true; } //action - void DispSpace(CGraphics& gr, DispPos* pDispPos, CEditView* pcView, bool bTrans) const; - EColorIndexType GetColorIdx(void) const{ return COLORIDX_TAB; } + void DispSpace(CGraphics& gr, DispPos* pDispPos, CEditView* pcView, bool bTrans) const override; + EColorIndexType GetColorIdx(void) const override { return COLORIDX_TAB; } }; #endif /* SAKURA_CFIGURE_COMMA_DE8237CD_24C0_4A21_8599_5BE8B04BF7E6_H_ */ diff --git a/sakura_core/view/figures/CFigure_CtrlCode.h b/sakura_core/view/figures/CFigure_CtrlCode.h index 49f41e8d93..2ea1b1f04d 100644 --- a/sakura_core/view/figures/CFigure_CtrlCode.h +++ b/sakura_core/view/figures/CFigure_CtrlCode.h @@ -32,38 +32,38 @@ class CFigure_CtrlCode : public CFigureSpace{ public: //traits - bool Match(const wchar_t* pText, int nTextLen) const; + bool Match(const wchar_t* pText, int nTextLen) const override; //action - bool DrawImp(SColorStrategyInfo* pInfo); + bool DrawImp(SColorStrategyInfo* pInfo) override; virtual void DispSpaceEx(CGraphics& gr, DispPos* pDispPos, CEditView* pcView, bool bTrans, int width) const; virtual wchar_t GetAlternateChar() const{ return L'・'; } - void DispSpace(CGraphics& gr, DispPos* pDispPos, CEditView* pcView, bool bTrans) const + void DispSpace(CGraphics& gr, DispPos* pDispPos, CEditView* pcView, bool bTrans) const override { assert(0); } - EColorIndexType GetColorIdx(void) const{ return COLORIDX_CTRLCODE; } + EColorIndexType GetColorIdx(void) const override { return COLORIDX_CTRLCODE; } }; //! バイナリ半角描画 -class CFigure_HanBinary : public CFigure_CtrlCode{ +class CFigure_HanBinary final: public CFigure_CtrlCode{ public: //traits - bool Match(const wchar_t* pText, int nTextLen) const; + bool Match(const wchar_t* pText, int nTextLen) const override; //action - virtual wchar_t GetAlternateChar() const{ return L'〓'; } - EColorIndexType GetColorIdx(void) const{ return COLORIDX_CTRLCODE; } + wchar_t GetAlternateChar() const override { return L'〓'; } + EColorIndexType GetColorIdx(void) const override { return COLORIDX_CTRLCODE; } }; //! バイナリ全角描画 -class CFigure_ZenBinary : public CFigure_CtrlCode{ +class CFigure_ZenBinary final : public CFigure_CtrlCode{ public: //traits - bool Match(const wchar_t* pText, int nTextLen) const; + bool Match(const wchar_t* pText, int nTextLen) const override; //action - virtual wchar_t GetAlternateChar() const{ return L'〓'; } - EColorIndexType GetColorIdx(void) const{ return COLORIDX_CTRLCODE; } + wchar_t GetAlternateChar() const override { return L'〓'; } + EColorIndexType GetColorIdx(void) const override { return COLORIDX_CTRLCODE; } }; #endif /* SAKURA_CFIGURE_CTRLCODE_53EB409B_17F7_4B7F_9AD2_A00C29CDC792_H_ */ diff --git a/sakura_core/view/figures/CFigure_Eol.h b/sakura_core/view/figures/CFigure_Eol.h index 3d4a0c886d..116408d827 100644 --- a/sakura_core/view/figures/CFigure_Eol.h +++ b/sakura_core/view/figures/CFigure_Eol.h @@ -29,7 +29,7 @@ #include "view/figures/CFigureStrategy.h" //! 改行描画 -class CFigure_Eol : public CFigureSpace{ +class CFigure_Eol final : public CFigureSpace{ public: ~CFigure_Eol() { @@ -38,16 +38,17 @@ class CFigure_Eol : public CFigureSpace{ } } //traits - bool Match(const wchar_t* pText, int nTextLen) const; - bool Disp(void) const + bool Match(const wchar_t* pText, int nTextLen) const override; + bool Disp(void) const override { return true; } //action - bool DrawImp(SColorStrategyInfo* pInfo); - void DispSpace(CGraphics& gr, DispPos* pDispPos, CEditView* pcView, bool bTrans) const {}; - EColorIndexType GetColorIdx(void) const{ return COLORIDX_EOL; } + bool DrawImp(SColorStrategyInfo* pInfo) override; + void DispSpace(CGraphics& gr, DispPos* pDispPos, CEditView* pcView, bool bTrans) const override {}; + EColorIndexType GetColorIdx(void) const override { return COLORIDX_EOL; } + private: HPEN m_hPen = NULL; COLORREF m_clrPen; diff --git a/sakura_core/view/figures/CFigure_HanSpace.h b/sakura_core/view/figures/CFigure_HanSpace.h index 396639a9c9..23459790e0 100644 --- a/sakura_core/view/figures/CFigure_HanSpace.h +++ b/sakura_core/view/figures/CFigure_HanSpace.h @@ -29,13 +29,13 @@ #include "view/figures/CFigureStrategy.h" //! 半角スペース描画 -class CFigure_HanSpace : public CFigureSpace{ +class CFigure_HanSpace final : public CFigureSpace{ public: //traits - bool Match(const wchar_t* pText, int nTextLen) const; + bool Match(const wchar_t* pText, int nTextLen) const override; //action - void DispSpace(CGraphics& gr, DispPos* pDispPos, CEditView* pcView, bool trans) const; - EColorIndexType GetColorIdx(void) const{ return COLORIDX_SPACE; } + void DispSpace(CGraphics& gr, DispPos* pDispPos, CEditView* pcView, bool trans) const override; + EColorIndexType GetColorIdx(void) const override { return COLORIDX_SPACE; } }; #endif /* SAKURA_CFIGURE_HANSPACE_38751BA0_6F58_4929_A24D_1937F2FB3E6A_H_ */ diff --git a/sakura_core/view/figures/CFigure_Tab.h b/sakura_core/view/figures/CFigure_Tab.h index 24520036f4..d4f6c64b1c 100644 --- a/sakura_core/view/figures/CFigure_Tab.h +++ b/sakura_core/view/figures/CFigure_Tab.h @@ -29,17 +29,17 @@ #include "view/figures/CFigureStrategy.h" //! タブ描画 -class CFigure_Tab : public CFigureSpace{ +class CFigure_Tab final : public CFigureSpace{ public: //traits - bool Match(const wchar_t* pText, int nTextLen) const; - bool Disp(void) const + bool Match(const wchar_t* pText, int nTextLen) const override; + bool Disp(void) const override { return true; } //action - void DispSpace(CGraphics& gr, DispPos* pDispPos, CEditView* pcView, bool bTrans) const; - EColorIndexType GetColorIdx(void) const{ return COLORIDX_TAB; } + void DispSpace(CGraphics& gr, DispPos* pDispPos, CEditView* pcView, bool bTrans) const override; + EColorIndexType GetColorIdx(void) const override { return COLORIDX_TAB; } }; #endif /* SAKURA_CFIGURE_TAB_4401678E_D165_4130_A973_CC40038CDE8E_H_ */ diff --git a/sakura_core/view/figures/CFigure_ZenSpace.h b/sakura_core/view/figures/CFigure_ZenSpace.h index 89c45d0388..f15ee10ca2 100644 --- a/sakura_core/view/figures/CFigure_ZenSpace.h +++ b/sakura_core/view/figures/CFigure_ZenSpace.h @@ -29,13 +29,13 @@ #include "view/figures/CFigureStrategy.h" //! 全角スペース描画 -class CFigure_ZenSpace : public CFigureSpace{ +class CFigure_ZenSpace final : public CFigureSpace{ public: //traits - bool Match(const wchar_t* pText, int nTextLen) const; + bool Match(const wchar_t* pText, int nTextLen) const override; //action - void DispSpace(CGraphics& gr, DispPos* pDispPos, CEditView* pcView, bool bTrans) const; - EColorIndexType GetColorIdx(void) const{ return COLORIDX_ZENSPACE; } + void DispSpace(CGraphics& gr, DispPos* pDispPos, CEditView* pcView, bool bTrans) const override; + EColorIndexType GetColorIdx(void) const override { return COLORIDX_ZENSPACE; } }; #endif /* SAKURA_CFIGURE_ZENSPACE_6176BBA4_68C9_41A1_B944_7F6EE0E5E4A4_H_ */ From 6c57489a9f2be74efa7e5d138e063dfc330b208d Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 30 Sep 2020 19:54:34 +0900 Subject: [PATCH 0142/1024] =?UTF-8?q?=E6=9C=AA=E4=BD=BF=E7=94=A8=E3=81=AEC?= =?UTF-8?q?Figure=E3=82=AF=E3=83=A9=E3=82=B9=E3=82=92=E9=99=A4=E5=8E=BB?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/figures/CFigureManager.cpp | 2 -- sakura_core/view/figures/CFigure_CtrlCode.cpp | 18 --------------- sakura_core/view/figures/CFigure_CtrlCode.h | 22 ------------------- 3 files changed, 42 deletions(-) diff --git a/sakura_core/view/figures/CFigureManager.cpp b/sakura_core/view/figures/CFigureManager.cpp index 5719b86620..5239238851 100644 --- a/sakura_core/view/figures/CFigureManager.cpp +++ b/sakura_core/view/figures/CFigureManager.cpp @@ -40,8 +40,6 @@ CFigureManager::CFigureManager() m_vFigures.push_back(new CFigure_ZenSpace()); m_vFigures.push_back(new CFigure_Eol()); m_vFigures.push_back(new CFigure_CtrlCode()); - m_vFigures.push_back(new CFigure_HanBinary()); - m_vFigures.push_back(new CFigure_ZenBinary()); m_vFigures.push_back(new CFigure_Text()); OnChangeSetting(); diff --git a/sakura_core/view/figures/CFigure_CtrlCode.cpp b/sakura_core/view/figures/CFigure_CtrlCode.cpp index 841af393a6..0830075aa9 100644 --- a/sakura_core/view/figures/CFigure_CtrlCode.cpp +++ b/sakura_core/view/figures/CFigure_CtrlCode.cpp @@ -71,21 +71,3 @@ void CFigure_CtrlCode::DispSpaceEx(CGraphics& gr, DispPos* pDispPos, CEditView* } pDispPos->ForwardDrawCol(CLayoutXInt(dx[0])); } - -// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -// CFigure_HanBinary // -// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // - -bool CFigure_HanBinary::Match(const wchar_t* pText, int nTextLen) const -{ - return false; -} - -// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -// CFigure_ZenBinary // -// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // - -bool CFigure_ZenBinary::Match(const wchar_t* pText, int nTextLen) const -{ - return false; -} diff --git a/sakura_core/view/figures/CFigure_CtrlCode.h b/sakura_core/view/figures/CFigure_CtrlCode.h index 2ea1b1f04d..b8f85b8cbc 100644 --- a/sakura_core/view/figures/CFigure_CtrlCode.h +++ b/sakura_core/view/figures/CFigure_CtrlCode.h @@ -44,26 +44,4 @@ class CFigure_CtrlCode : public CFigureSpace{ } EColorIndexType GetColorIdx(void) const override { return COLORIDX_CTRLCODE; } }; - -//! バイナリ半角描画 -class CFigure_HanBinary final: public CFigure_CtrlCode{ -public: - //traits - bool Match(const wchar_t* pText, int nTextLen) const override; - - //action - wchar_t GetAlternateChar() const override { return L'〓'; } - EColorIndexType GetColorIdx(void) const override { return COLORIDX_CTRLCODE; } -}; - -//! バイナリ全角描画 -class CFigure_ZenBinary final : public CFigure_CtrlCode{ -public: - //traits - bool Match(const wchar_t* pText, int nTextLen) const override; - - //action - wchar_t GetAlternateChar() const override { return L'〓'; } - EColorIndexType GetColorIdx(void) const override { return COLORIDX_CTRLCODE; } -}; #endif /* SAKURA_CFIGURE_CTRLCODE_53EB409B_17F7_4B7F_9AD2_A00C29CDC792_H_ */ From 4a7b4aa7e0ec0e482b8b50814b8635a5bfa300ff Mon Sep 17 00:00:00 2001 From: miwa Date: Thu, 1 Oct 2020 01:48:51 +0900 Subject: [PATCH 0143/1024] =?UTF-8?q?=E3=83=80=E3=82=A4=E3=82=A2=E3=83=AD?= =?UTF-8?q?=E3=82=B0=E3=83=9C=E3=83=83=E3=82=AF=E3=82=B9=E3=81=A7=E3=82=B7?= =?UTF-8?q?=E3=82=B9=E3=83=86=E3=83=A0=E3=83=95=E3=82=A9=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=82=92=E4=BD=BF=E3=81=86=E3=82=88=E3=81=86=E3=81=AB=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDialog.cpp | 26 ++++++++++++++++++++++++++ sakura_core/dlg/CDialog.h | 2 ++ 2 files changed, 28 insertions(+) diff --git a/sakura_core/dlg/CDialog.cpp b/sakura_core/dlg/CDialog.cpp index 0d86e96cfa..4cf974ed83 100644 --- a/sakura_core/dlg/CDialog.cpp +++ b/sakura_core/dlg/CDialog.cpp @@ -83,6 +83,7 @@ CDialog::CDialog(bool bSizable, bool bCheckShareData) CDialog::~CDialog() { // MYTRACE( L"CDialog::~CDialog()\n" ); + DeleteObject( m_hFontMessage ); CloseDialog( 0 ); return; } @@ -183,10 +184,35 @@ BOOL CDialog::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) SetDialogPosSize(); + SetDialogFont(); + m_bInited = TRUE; return TRUE; } + +BOOL CALLBACK SetDialogFontProc( HWND hwnd , LPARAM hFont ) +{ + SendMessageAny( hwnd, WM_SETFONT, (WPARAM)hFont, (LPARAM)FALSE ); + return TRUE; +} + +void CDialog::SetDialogFont() +{ + HFONT hFontBase = (HFONT)::SendMessageAny( m_hWnd, WM_GETFONT, 0, (LPARAM)NULL ); + LOGFONT lfBaseFont = {}; + GetObject( hFontBase, sizeof(lfBaseFont), &lfBaseFont ); + + NONCLIENTMETRICS metrics = {}; + metrics.cbSize = sizeof( metrics ); + SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &metrics, 0 ); + LOGFONT lfMessageFont = metrics.lfMessageFont; + lfMessageFont.lfHeight = lfBaseFont.lfHeight; + m_hFontMessage = CreateFontIndirect( &lfMessageFont ); + SendMessageAny( m_hWnd, WM_SETFONT, (WPARAM)m_hFontMessage, (LPARAM)FALSE ); + EnumChildWindows( m_hWnd, SetDialogFontProc, (LPARAM)m_hFontMessage ); +} + void CDialog::SetDialogPosSize() { #if 0 diff --git a/sakura_core/dlg/CDialog.h b/sakura_core/dlg/CDialog.h index 10fdde678a..24cd730c55 100644 --- a/sakura_core/dlg/CDialog.h +++ b/sakura_core/dlg/CDialog.h @@ -90,6 +90,7 @@ class CDialog virtual BOOL OnInitDialog(HWND hwndDlg, WPARAM wParam, LPARAM lParam); virtual void SetDialogPosSize(); + virtual void SetDialogFont(); virtual BOOL OnDestroy( void ); virtual BOOL OnNotify(NMHDR* pNMHDR){return FALSE;} BOOL OnSize(); @@ -140,6 +141,7 @@ class CDialog HWND m_hwndParent; /* オーナーウィンドウのハンドル */ private: HWND m_hWnd; /* このダイアログのハンドル */ + HFONT m_hFontMessage; // ダイアログボックス用フォント public: HWND m_hwndSizeBox; LPARAM m_lParam; From b0e4ee85f8a1597adbb4ac01ade264cd722655aa Mon Sep 17 00:00:00 2001 From: miwa Date: Sat, 3 Oct 2020 14:54:16 +0900 Subject: [PATCH 0144/1024] =?UTF-8?q?=E6=96=87=E5=AD=97=E5=88=87=E3=82=8C?= =?UTF-8?q?=E8=A7=A3=E6=B6=88=E3=81=AE=E3=81=9F=E3=82=81=E3=81=AE=E3=82=B3?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=83=AD=E3=83=BC=E3=83=AB=E9=AB=98=E3=81=95?= =?UTF-8?q?=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/sakura_rc.rc | 232 +++++++++++++++++++-------------------- 1 file changed, 116 insertions(+), 116 deletions(-) diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index 8a5c354a5c..b0272c154f 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -79,7 +79,7 @@ EXSTYLE WS_EX_CONTEXTHELP CAPTION "検索" FONT 9, "MS Pゴシック" BEGIN - LTEXT "条件(&N)", IDC_STATIC, 5, 6, 26, 8 + LTEXT "条件(&N)", IDC_STATIC, 5, 6, 26, 10 COMBOBOX IDC_COMBO_TEXT, 34, 4, 183, 150, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP CONTROL "単語単位で探す(&W)", IDC_CHK_WORD, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 5, 21, 130, 10 CONTROL "英大文字と小文字を区別する(&C)", IDC_CHK_LOHICASE, "Button", BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP, 5, 32, 130, 10 @@ -102,26 +102,26 @@ FONT 9, "MS Pゴシック" BEGIN ICON IDI_ICON_STD, IDC_STATIC_MYICON, 5, 5, 20, 20, SS_NOTIFY EDITTEXT IDC_EDIT_VER, 33, 6, 204, 51, ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP - LTEXT "原作者: たけ(竹パンダ) さん", IDC_STATIC, 33, 61, 125, 8, NOT WS_GROUP - LTEXT S_COPYRIGHT, IDC_STATIC, 33, 75, 205, 8, NOT WS_GROUP | SS_NOPREFIX - LTEXT "Project URL:", IDC_STATIC_URL_CAPTION, 33, 103, 71, 8, NOT WS_GROUP - LTEXT "https://sakura-editor.github.io/", IDC_STATIC_URL_UR, 101, 103, 120, 8, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP + LTEXT "原作者: たけ(竹パンダ) さん", IDC_STATIC, 33, 61, 125, 10, NOT WS_GROUP + LTEXT S_COPYRIGHT, IDC_STATIC, 33, 75, 205, 10, NOT WS_GROUP | SS_NOPREFIX + LTEXT "Project URL:", IDC_STATIC_URL_CAPTION, 33, 103, 71, 10, NOT WS_GROUP + LTEXT "https://sakura-editor.github.io/", IDC_STATIC_URL_UR, 101, 103, 120, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP #ifdef GIT_REMOTE_ORIGIN_URL - LTEXT "Source URL:", IDC_STATIC_GIT_CAPTION, 33, 113, 71, 8, NOT WS_GROUP - LTEXT GIT_REMOTE_ORIGIN_URL, IDC_STATIC_URL_GIT, 101, 113, 120, 8, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP + LTEXT "Source URL:", IDC_STATIC_GIT_CAPTION, 33, 113, 71, 10, NOT WS_GROUP + LTEXT GIT_REMOTE_ORIGIN_URL, IDC_STATIC_URL_GIT, 101, 113, 120, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP #endif #ifdef CI_BUILD_NUMBER_LABEL - LTEXT "Build URL:", IDC_STATIC_URL_CI_BUILD_CAPTION, 33, 123, 71, 8, NOT WS_GROUP - LTEXT CI_BUILD_NUMBER_LABEL, IDC_STATIC_URL_CI_BUILD, 101, 123, 120, 8, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP + LTEXT "Build URL:", IDC_STATIC_URL_CI_BUILD_CAPTION, 33, 123, 71, 10, NOT WS_GROUP + LTEXT CI_BUILD_NUMBER_LABEL, IDC_STATIC_URL_CI_BUILD, 101, 123, 120, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP #endif #if defined( GITHUB_COMMIT_URL ) || defined( GITHUB_PR_HEAD_URL ) - LTEXT "GitHub URL:", IDC_STATIC_URL_GITHUB_CAPTION, 33, 133, 50, 8, NOT WS_GROUP + LTEXT "GitHub URL:", IDC_STATIC_URL_GITHUB_CAPTION, 33, 133, 50, 10, NOT WS_GROUP #endif #if defined( GITHUB_COMMIT_URL ) - LTEXT GIT_SHORT_COMMIT_HASH, IDC_STATIC_URL_GITHUB_COMMIT, 101, 133, 30, 8, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP + LTEXT GIT_SHORT_COMMIT_HASH, IDC_STATIC_URL_GITHUB_COMMIT, 101, 133, 30, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP #endif #if defined( GITHUB_PR_HEAD_URL ) - LTEXT GITHUB_PR_NUMBER_LABEL, IDC_STATIC_URL_GITHUB_PR, 150, 133, 30, 8, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP + LTEXT GITHUB_PR_NUMBER_LABEL, IDC_STATIC_URL_GITHUB_PR, 150, 133, 30, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP #endif EDITTEXT IDC_EDIT_ABOUT, 5, 146, 233, 53, ES_MULTILINE | ES_READONLY | WS_VSCROLL | NOT WS_TABSTOP DEFPUSHBUTTON "&OK", IDOK, 97, 203, 50, 14 @@ -134,17 +134,17 @@ EXSTYLE WS_EX_CONTEXTHELP CAPTION "指定行へジャンプ" FONT 9, "MS Pゴシック" BEGIN - LTEXT "行番号(&N)", IDC_STATIC, 5, 6, 34, 8 + LTEXT "行番号(&N)", IDC_STATIC, 5, 6, 34, 10 EDITTEXT IDC_EDIT_LINENUM, 43, 4, 40, 12 CONTROL "Spin1", IDC_SPIN_LINENUM, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 82, 4, 9, 12 CONTROL "折り返し単位の行番号(&R)", IDC_RADIO_LINENUM_LAYOUT, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 94, 5, 97, 10 CONTROL "改行単位の行番号(&W)", IDC_RADIO_LINENUM_CRLF, "Button", BS_AUTORADIOBUTTON, 94, 20, 87, 10 CONTROL "&PL/SQLコンパイルエラー行を処理する", IDC_CHECK_PLSQL, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 10, 50, 137, 10 - LTEXT "行目をブロックの&1行目とする", IDC_LABEL_PLSQL2, 92, 66, 92, 8, NOT WS_GROUP + LTEXT "行目をブロックの&1行目とする", IDC_LABEL_PLSQL2, 92, 66, 92, 10, NOT WS_GROUP EDITTEXT IDC_EDIT_PLSQL_E1, 47, 64, 40, 12 CONTROL "Spin1", IDC_SPIN_PLSQL_E1, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 87, 64, 9, 12 - LTEXT "テキストの", IDC_LABEL_PLSQL1, 12, 66, 34, 8, NOT WS_GROUP - LTEXT "検出されたPL/SQLパッケージのブロックから選択(&S)", IDC_LABEL_PLSQL3, 12, 81, 166, 8, NOT WS_GROUP + LTEXT "テキストの", IDC_LABEL_PLSQL1, 12, 66, 34, 10, NOT WS_GROUP + LTEXT "検出されたPL/SQLパッケージのブロックから選択(&S)", IDC_LABEL_PLSQL3, 12, 81, 166, 10, NOT WS_GROUP COMBOBOX IDC_COMBO_PLSQLBLOCKS, 15, 94, 168, 100, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP GROUPBOX "PL/SQLコンパイルエラー行", IDC_STATIC, 5, 35, 184, 80, WS_GROUP DEFPUSHBUTTON "ジャンプ(&J)", IDC_BUTTON_JUMP, 197, 5, 50, 14, WS_GROUP @@ -168,7 +168,7 @@ BEGIN CONTROL "自動的に閉じる(&D)", IDC_CHECK_bAutoCloseDlgFuncList, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 271, 75, 10 CONTROL "フォーカスを移す(&F)", IDC_CHECK_bFunclistSetFocusOnJump, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 82, 271, 77, 10 CONTROL "空行を無視する(&B)", IDC_CHECK_bMarkUpBlankLineEnable, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 160, 271, 76, 10 - LTEXT "順序(&S)", IDC_STATIC_nSortType, 3, 6, 28, 8 + LTEXT "順序(&S)", IDC_STATIC_nSortType, 3, 6, 28, 10 PUSHBUTTON "設定(&S)", IDC_BUTTON_SETTING, 3, 3, 35, 14 COMBOBOX IDC_COMBO_nSortType, 34, 3, 94, 65, CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP END @@ -179,17 +179,17 @@ EXSTYLE WS_EX_CONTEXTHELP CAPTION "Grep条件入力" FONT 9, "MS Pゴシック" BEGIN - LTEXT "条件(&N)", IDC_STATIC, 5, 6, 52, 8 + LTEXT "条件(&N)", IDC_STATIC, 5, 6, 52, 10 COMBOBOX IDC_COMBO_TEXT, 64, 6, 273, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - LTEXT "ファイル(&T)", IDC_STATIC, 5, 21, 52, 8, NOT WS_GROUP + LTEXT "ファイル(&T)", IDC_STATIC, 5, 21, 52, 10, NOT WS_GROUP COMBOBOX IDC_COMBO_FILE, 64, 21, 273, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - LTEXT "フォルダ(&O)", IDC_STATIC, 5, 36, 52, 8 + LTEXT "フォルダ(&O)", IDC_STATIC, 5, 36, 52, 10 COMBOBOX IDC_COMBO_FOLDER, 64, 36, 262, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "&...", IDC_BUTTON_FOLDER, 328, 36, 9, 13 - LTEXT "除外ファイル", IDC_STATIC, 5, 51, 52, 8, NOT WS_GROUP + LTEXT "除外ファイル", IDC_STATIC, 5, 51, 52, 10, NOT WS_GROUP COMBOBOX IDC_COMBO_EXCLUDE_FILE, 64, 51, 273, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - LTEXT "除外フォルダ", IDC_STATIC, 5, 66, 52, 8 + LTEXT "除外フォルダ", IDC_STATIC, 5, 66, 52, 10 COMBOBOX IDC_COMBO_EXCLUDE_FOLDER, 64, 66, 273, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP CONTROL "単語単位で探す(&W)", IDC_CHK_WORD, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 5, 81, 73, 10 @@ -199,14 +199,14 @@ BEGIN CONTROL "ファイル毎最初のみ検索(&G)",IDC_CHECK_FILE_ONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 145, 119, 10 CONTROL "フォルダ毎に表示(&Y)", IDC_CHECK_SEP_FOLDER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 161, 83, 10 CONTROL "ベースフォルダ表示(&V)", IDC_CHECK_BASE_PATH, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 177, 83, 10 - LTEXT "文字コードセット(&A)", IDC_STATIC, 18, 193, 62, 8 + LTEXT "文字コードセット(&A)", IDC_STATIC, 18, 193, 62, 10 COMBOBOX IDC_COMBO_CHARSET, 85, 193, 65, 101, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "CP(&2)", IDC_CHECK_CP, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 155, 193, 30, 10 CONTROL "フォルダの初期値をカレントフォルダにする(&D)", IDC_CHK_DEFAULTFOLDER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 209, 164, 10 CONTROL "正規表現(&E)", IDC_CHK_REGULAREXP, "Button", BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP, 5, 225, 55, 10 - LTEXT "JRE Status", IDC_STATIC_JRE32VER, 18, 241, 159, 8 + LTEXT "JRE Status", IDC_STATIC_JRE32VER, 18, 241, 159, 10 GROUPBOX "結果出力", IDC_STATIC, 150, 84, 107, 46, WS_GROUP - CONTROL "該当行(&L)", IDC_RADIO_OUTPUTLINE, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 155, 94, 83, 9 + CONTROL "該当行(&L)", IDC_RADIO_OUTPUTLINE, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 155, 94, 83, 10 CONTROL "該当部分(&P)", IDC_RADIO_OUTPUTMARKED, "Button", BS_AUTORADIOBUTTON, 155, 105, 83, 10 CONTROL "否該当行(&1)", IDC_RADIO_NOHIT, "Button", BS_AUTORADIOBUTTON, 155, 117, 83, 10 GROUPBOX "結果出力形式", IDC_STATIC, 150, 134, 107, 47, WS_GROUP @@ -226,20 +226,20 @@ EXSTYLE WS_EX_CONTEXTHELP CAPTION "Grep置換" FONT 9, "MS Pゴシック" BEGIN - LTEXT "置換前(&N)", IDC_STATIC, 5, 6, 52, 8 + LTEXT "置換前(&N)", IDC_STATIC, 5, 6, 52, 10 COMBOBOX IDC_COMBO_TEXT, 64, 6, 273, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - LTEXT "置換後(&Z)", IDC_STATIC, 5, 21, 52, 8 + LTEXT "置換後(&Z)", IDC_STATIC, 5, 21, 52, 10 COMBOBOX IDC_COMBO_TEXT2, 64, 21, 273, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - LTEXT "ファイル(&T)", IDC_STATIC, 5, 36, 52, 8, NOT WS_GROUP + LTEXT "ファイル(&T)", IDC_STATIC, 5, 36, 52, 10, NOT WS_GROUP COMBOBOX IDC_COMBO_FILE, 64, 36, 273, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - LTEXT "フォルダ(&O)", IDC_STATIC, 5, 51, 52, 8 + LTEXT "フォルダ(&O)", IDC_STATIC, 5, 51, 52, 10 COMBOBOX IDC_COMBO_FOLDER, 64, 51, 262, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "&...", IDC_BUTTON_FOLDER, 328, 51, 9, 13 - LTEXT "除外ファイル", IDC_STATIC, 5, 66, 52, 8, NOT WS_GROUP + LTEXT "除外ファイル", IDC_STATIC, 5, 66, 52, 10, NOT WS_GROUP COMBOBOX IDC_COMBO_EXCLUDE_FILE, 64, 66, 273, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - LTEXT "除外フォルダ", IDC_STATIC, 5, 81, 52, 8 + LTEXT "除外フォルダ", IDC_STATIC, 5, 81, 52, 10 COMBOBOX IDC_COMBO_EXCLUDE_FOLDER, 64, 81, 273, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP CONTROL "単語単位で探す(&W)", IDC_CHK_WORD, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 5, 97, 73, 10 @@ -249,18 +249,18 @@ BEGIN CONTROL "ファイル毎最初のみ検索(&G)",IDC_CHECK_FILE_ONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 161, 119, 10 CONTROL "フォルダ毎に表示(&Y)", IDC_CHECK_SEP_FOLDER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 177, 83, 10 CONTROL "ベースフォルダ表示(&V)", IDC_CHECK_BASE_PATH, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 193, 83, 10 - LTEXT "文字コードセット(&A)", IDC_STATIC, 18, 209, 62, 8 + LTEXT "文字コードセット(&A)", IDC_STATIC, 18, 209, 62, 10 COMBOBOX IDC_COMBO_CHARSET, 85, 209, 65, 101, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "CP(&2)", IDC_CHECK_CP, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 155, 209, 30, 10 CONTROL "フォルダの初期値をカレントフォルダにする(&D)", IDC_CHK_DEFAULTFOLDER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 225, 164, 10 CONTROL "正規表現(&E)", IDC_CHK_REGULAREXP, "Button", BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP, 5, 241, 55, 10 - LTEXT "JRE Status", IDC_STATIC_JRE32VER, 18, 257, 159, 8 + LTEXT "JRE Status", IDC_STATIC_JRE32VER, 18, 257, 159, 10 CONTROL "クリップボードから貼り付ける(&J)", IDC_CHK_PASTE, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 5, 273, 116, 10 CONTROL "バックアップ作成(&K)", IDC_CHK_BACKUP, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 289, 164, 10 GROUPBOX "結果出力", IDC_STATIC, 150, 99, 107, 33, WS_GROUP - CONTROL "該当行(&L)", IDC_RADIO_OUTPUTLINE, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 155, 109, 83, 9 + CONTROL "該当行(&L)", IDC_RADIO_OUTPUTLINE, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 155, 109, 83, 10 CONTROL "該当部分(&P)", IDC_RADIO_OUTPUTMARKED, "Button", BS_AUTORADIOBUTTON, 155, 120, 83, 10 GROUPBOX "結果出力形式", IDC_STATIC, 150, 149, 107, 47, WS_GROUP @@ -279,14 +279,14 @@ STYLE DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Grep実行中" FONT 9, "MS Pゴシック" BEGIN - LTEXT "検索しています・・・", IDC_STATIC, 5, 5, 61, 8, NOT WS_GROUP - LTEXT "ファイル", IDC_STATIC, 5, 21, 26, 8, NOT WS_GROUP + LTEXT "検索しています・・・", IDC_STATIC, 5, 5, 61, 10, NOT WS_GROUP + LTEXT "ファイル", IDC_STATIC, 5, 21, 26, 10, NOT WS_GROUP LTEXT "IDC_STATIC_CURPATH", IDC_STATIC_CURFILE, 36, 20, 252, 10, NOT WS_GROUP - LTEXT "フォルダ", IDC_STATIC, 5, 34, 27, 8, NOT WS_GROUP + LTEXT "フォルダ", IDC_STATIC, 5, 34, 27, 10, NOT WS_GROUP EDITTEXT IDC_STATIC_CURPATH, 36, 35, 252, 20, ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP PUSHBUTTON "キャンセル(&X)", IDCANCEL, 238, 60, 50, 14 - LTEXT "0", IDC_STATIC_HITCOUNT, 76, 5, 44, 8, NOT WS_GROUP, WS_EX_RIGHT - LTEXT "件みつかりました。", IDC_STATIC, 122, 5, 60, 8, NOT WS_GROUP + LTEXT "0", IDC_STATIC_HITCOUNT, 76, 5, 44, 10, NOT WS_GROUP, WS_EX_RIGHT + LTEXT "件みつかりました。", IDC_STATIC, 122, 5, 60, 10, NOT WS_GROUP CONTROL "リアルタイム表示(&V)", IDC_CHECK_REALTIMEVIEW, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 149, 59, 84, 14 END @@ -296,15 +296,15 @@ EXSTYLE WS_EX_CONTEXTHELP CAPTION "置換" FONT 9, "MS Pゴシック" BEGIN - LTEXT "置換前(&N)", IDC_STATIC, 5, 6, 35, 8 + LTEXT "置換前(&N)", IDC_STATIC, 5, 6, 35, 10 COMBOBOX IDC_COMBO_TEXT, 43, 4, 191, 150, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - LTEXT "置換後(&P)", IDC_STATIC, 5, 21, 34, 8, NOT WS_GROUP + LTEXT "置換後(&P)", IDC_STATIC, 5, 21, 34, 10, NOT WS_GROUP COMBOBOX IDC_COMBO_TEXT2, 43, 19, 191, 150, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP CONTROL "クリップボードから貼り付ける(&T)", IDC_CHK_PASTE, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 5, 41, 116, 10 CONTROL "単語単位で探す(&W)", IDC_CHK_WORD, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 5, 52, 78, 10 CONTROL "英大文字と小文字を区別する(&C)", IDC_CHK_LOHICASE, "Button", BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP, 5, 63, 119, 10 CONTROL "正規表現(&E)", IDC_CHK_REGULAREXP, "Button", BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP, 5, 74, 55, 10 - LTEXT "", IDC_STATIC_JRE32VER, 16, 85, 138, 8 + LTEXT "", IDC_STATIC_JRE32VER, 16, 85, 138, 10 CONTROL "「すべて置換」は置換の繰返し(&I)", IDC_CHECK_CONSECUTIVEALL, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 95, 118, 10 CONTROL "見つからないときにメッセージを表示(&M)", IDC_CHECK_NOTIFYNOTFOUND, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 107, 140, 10 CONTROL "置換ダイアログを自動的に閉じる(&L)", IDC_CHECK_bAutoCloseDlgReplace, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 118, 128, 10 @@ -331,11 +331,11 @@ STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "置換中" FONT 9, "MS Pゴシック" BEGIN - LTEXT "置換中です・・・・", IDC_STATIC, 5, 5, 55, 8 + LTEXT "置換中です・・・・", IDC_STATIC, 5, 5, 55, 10 CONTROL "Progress1", IDC_PROGRESS_REPLACE, "msctls_progress32", WS_BORDER, 5, 20, 120, 10 PUSHBUTTON "キャンセル(&X)", IDCANCEL, 135, 16, 50, 14 - RTEXT "9999999999", IDC_STATIC_KENSUU, 64, 5, 37, 8, NOT WS_GROUP - LTEXT "個", IDC_STATIC, 104, 5, 8, 8, NOT WS_GROUP + RTEXT "9999999999", IDC_STATIC_KENSUU, 64, 5, 37, 10, NOT WS_GROUP + LTEXT "個", IDC_STATIC, 104, 5, 8, 10, NOT WS_GROUP END IDD_PROPERTY_FILE DIALOGEX 0, 0, 270, 225 @@ -356,7 +356,7 @@ BEGIN EDITTEXT IDC_EDIT_INPUT1, 5, 15, 175, 12, ES_AUTOHSCROLL DEFPUSHBUTTON "&OK", IDOK, 37, 36, 50, 14 PUSHBUTTON "キャンセル(&X)", IDCANCEL, 98, 35, 50, 14 - LTEXT "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", IDC_STATIC_MSG, 6, 5, 175, 8 + LTEXT "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", IDC_STATIC_MSG, 6, 5, 175, 10 END IDD_COMPARE DIALOGEX 0, 0, 365, 165 @@ -365,7 +365,7 @@ EXSTYLE WS_EX_CONTEXTHELP CAPTION "ファイル内容比較" FONT 9, "MS Pゴシック" BEGIN - LTEXT "比較するファイルを下から選択してください(&C):", IDC_STATIC, 5, 31, 158, 8 + LTEXT "比較するファイルを下から選択してください(&C):", IDC_STATIC, 5, 31, 158, 10 LISTBOX IDC_LIST_FILES, 5, 42, 355, 95, LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP CONTROL "左右に表示(&T)", IDC_CHECK_TILE_H, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 293, 30, 66, 10 DEFPUSHBUTTON "&OK", IDOK, 184, 145, 50, 14 @@ -402,71 +402,71 @@ EXSTYLE WS_EX_CONTEXTHELP CAPTION "印刷ページ設定" FONT 9, "MS Pゴシック" BEGIN - LTEXT "ページ設定(&1)", IDC_STATIC, 7, 9, 45, 8 + LTEXT "ページ設定(&1)", IDC_STATIC, 7, 9, 45, 10 COMBOBOX IDC_COMBO_SETTINGNAME, 56, 7, 163, 170, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "設定名変更(&2)...", IDC_BUTTON_EDITSETTINGNAME, 224, 7, 69, 14 GROUPBOX "設定", IDC_STATIC, 4, 22, 289, 204 - RTEXT "半角フォント(&F)", IDC_STATIC, 7, 37, 45, 8 + RTEXT "半角フォント(&F)", IDC_STATIC, 7, 37, 45, 10 COMBOBOX IDC_COMBO_FONT_HAN, 56, 35, 84, 230, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP - RTEXT "全角フォント(&K)", IDC_STATIC, 7, 52, 45, 8 + RTEXT "全角フォント(&K)", IDC_STATIC, 7, 52, 45, 10 COMBOBOX IDC_COMBO_FONT_ZEN, 56, 50, 84, 230, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP - RTEXT "フォント高(&P)", IDC_STATIC, 7, 71, 45, 8 + RTEXT "フォント高(&P)", IDC_STATIC, 7, 71, 45, 10 EDITTEXT IDC_EDIT_FONTHEIGHT, 56, 69, 30, 12, ES_AUTOHSCROLL CONTROL "Spin1", IDC_SPIN_FONTHEIGHT, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 76, 69, 9, 12 - LTEXT "(1/10mm)", IDC_STATIC, 88, 71, 32, 8 - RTEXT "144.5pt", IDC_STATIC_FONTSIZE, 120, 71, 22, 8 - RTEXT "行送り(&S)", IDC_STATIC, 7, 85, 45, 8 + LTEXT "(1/10mm)", IDC_STATIC, 88, 71, 32, 10 + RTEXT "144.5pt", IDC_STATIC_FONTSIZE, 120, 71, 22, 10 + RTEXT "行送り(&S)", IDC_STATIC, 7, 85, 45, 10 EDITTEXT IDC_EDIT_LINESPACE, 56, 83, 30, 12, ES_AUTOHSCROLL CONTROL "Spin2", IDC_SPIN_LINESPACE, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 76, 83, 9, 12 - LTEXT "(%)", IDC_STATIC, 88, 85, 10, 8 - RTEXT "段数 (&C)", IDC_STATIC, 7, 99, 45, 8 + LTEXT "(%)", IDC_STATIC, 88, 85, 10, 10 + RTEXT "段数 (&C)", IDC_STATIC, 7, 99, 45, 10 EDITTEXT IDC_EDIT_DANSUU, 56, 97, 30, 12, ES_AUTOHSCROLL CONTROL "Spin3", IDC_SPIN_DANSUU, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 76, 97, 9, 12 - RTEXT "段の隙間(&E)", IDC_STATIC, 7, 113, 45, 8 + RTEXT "段の隙間(&E)", IDC_STATIC, 7, 113, 45, 10 EDITTEXT IDC_EDIT_DANSPACE, 56, 111, 30, 12, ES_AUTOHSCROLL CONTROL "Spin4", IDC_SPIN_DANSPACE, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 76, 111, 9, 12 - LTEXT "(mm)", IDC_STATIC, 88, 113, 17, 8 - RTEXT "用紙サイズ(&Z)", IDC_STATIC, 7, 131, 45, 8 + LTEXT "(mm)", IDC_STATIC, 88, 113, 17, 10 + RTEXT "用紙サイズ(&Z)", IDC_STATIC, 7, 131, 45, 10 COMBOBOX IDC_COMBO_PAPER, 56, 129, 169, 145, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - RTEXT "用紙の向き", IDC_STATIC, 7, 146, 45, 8 + RTEXT "用紙の向き", IDC_STATIC, 7, 146, 45, 10 CONTROL "縦(&I)", IDC_RADIO_PORTRAIT, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 58, 145, 40, 10 CONTROL "横(&A)", IDC_RADIO_LANDSCAPE, "Button", BS_AUTORADIOBUTTON, 102, 145, 40, 10 - RTEXT "余白/上(&T)", IDC_STATIC, 7, 163, 45, 8 + RTEXT "余白/上(&T)", IDC_STATIC, 7, 163, 45, 10 EDITTEXT IDC_EDIT_MARGINTY, 56, 161, 30, 12, ES_AUTOHSCROLL CONTROL "Spin5", IDC_SPIN_MARGINTY, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 76, 161, 9, 12 - LTEXT "(mm)", IDC_STATIC, 88, 163, 17, 8 - RTEXT "下(&B)", IDC_STATIC, 7, 177, 45, 8 + LTEXT "(mm)", IDC_STATIC, 88, 163, 17, 10 + RTEXT "下(&B)", IDC_STATIC, 7, 177, 45, 10 EDITTEXT IDC_EDIT_MARGINBY, 56, 175, 30, 12, ES_AUTOHSCROLL CONTROL "Spin6", IDC_SPIN_MARGINBY, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 76, 175, 9, 12 - LTEXT "(mm)", IDC_STATIC, 88, 177, 17, 8 - RTEXT "左(&L)", IDC_STATIC, 7, 191, 45, 8 + LTEXT "(mm)", IDC_STATIC, 88, 177, 17, 10 + RTEXT "左(&L)", IDC_STATIC, 7, 191, 45, 10 EDITTEXT IDC_EDIT_MARGINLX, 56, 189, 30, 12, ES_AUTOHSCROLL CONTROL "Spin7", IDC_SPIN_MARGINLX, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 76, 189, 9, 12 - LTEXT "(mm)", IDC_STATIC, 88, 191, 17, 8 - RTEXT "右(&R)", IDC_STATIC, 7, 205, 45, 8 + LTEXT "(mm)", IDC_STATIC, 88, 191, 17, 10 + RTEXT "右(&R)", IDC_STATIC, 7, 205, 45, 10 EDITTEXT IDC_EDIT_MARGINRX, 56, 202, 30, 12, ES_AUTOHSCROLL CONTROL "Spin8", IDC_SPIN_MARGINRX, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 76, 202, 9, 12 - LTEXT "(mm)", IDC_STATIC, 88, 205, 17, 8 + LTEXT "(mm)", IDC_STATIC, 88, 205, 17, 10 CONTROL "行番号を印刷(&N)", IDC_CHECK_LINENUMBER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 150, 35, 70, 10 CONTROL "英文ワードラップ(&W)", IDC_CHECK_WORDWRAP, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 150, 49, 78, 10 CONTROL "行頭禁則", IDC_CHECK_PS_KINSOKUHEAD, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 150, 63, 46, 10 CONTROL "行末禁則", IDC_CHECK_PS_KINSOKUTAIL, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 150, 77, 46, 10 CONTROL "改行ぶら下げ", IDC_CHECK_PS_KINSOKURET, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 197, 63, 60, 10 CONTROL "句読点ぶら下げ", IDC_CHECK_PS_KINSOKUKUTO, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 197, 77, 67, 10 - LTEXT "行あたりの文字数:", IDC_STATIC, 150, 96, 65, 8 - LTEXT "縦方向の行数:", IDC_STATIC, 150, 110, 65, 8 - RTEXT "0", IDC_STATIC_ENABLECOLUMNS, 215, 96, 20, 8 - RTEXT "0", IDC_STATIC_ENABLELINES, 215, 110, 20, 8 + LTEXT "行あたりの文字数:", IDC_STATIC, 150, 96, 65, 10 + LTEXT "縦方向の行数:", IDC_STATIC, 150, 110, 65, 10 + RTEXT "0", IDC_STATIC_ENABLECOLUMNS, 215, 96, 20, 10 + RTEXT "0", IDC_STATIC_ENABLELINES, 215, 110, 20, 10 GROUPBOX "", IDC_STATIC, 145, 87, 112, 37 CONTROL "カラー印刷(&V)", IDC_CHECK_COLORPRINT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 150, 145, 61, 10 - LTEXT "ヘッダー(&U)", IDC_STATIC, 107, 165, 38, 8 + LTEXT "ヘッダー(&U)", IDC_STATIC, 107, 165, 38, 10 EDITTEXT IDC_EDIT_HEAD1, 107, 175, 50, 12, ES_AUTOHSCROLL EDITTEXT IDC_EDIT_HEAD2, 158, 175, 50, 12, ES_AUTOHSCROLL EDITTEXT IDC_EDIT_HEAD3, 209, 175, 50, 12, ES_AUTOHSCROLL CONTROL "使用", IDC_CHECK_USE_FONT_HEAD, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 260, 164, 30, 10 PUSHBUTTON "フォント", IDC_BUTTON_FONT_HEAD, 260, 174, 30, 14 RTEXT "Font(xxpt/xx.xmm)", IDC_STATIC_FONT_HEAD, 145, 161, 114, 14, SS_CENTERIMAGE - LTEXT "フッター(&D)", IDC_STATIC, 107, 193, 38, 8 + LTEXT "フッター(&D)", IDC_STATIC, 107, 193, 38, 10 EDITTEXT IDC_EDIT_FOOT1, 107, 203, 50, 12, ES_AUTOHSCROLL EDITTEXT IDC_EDIT_FOOT2, 158, 203, 50, 12, ES_AUTOHSCROLL EDITTEXT IDC_EDIT_FOOT3, 209, 203, 50, 12, ES_AUTOHSCROLL @@ -492,7 +492,7 @@ EXSTYLE WS_EX_CONTEXTHELP CAPTION "ファイル名を指定して実行" FONT 9, "MS Pゴシック" BEGIN - LTEXT "名前(&N)", IDC_STATIC, 5, 6, 26, 8 + LTEXT "名前(&N)", IDC_STATIC, 5, 6, 26, 10 COMBOBOX IDC_COMBO_m_szCommand, 34, 4, 254, 240, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_TABSTOP PUSHBUTTON "&...", IDC_BUTTON_REFERENCE, 278, 20, 9, 12, WS_GROUP CONTROL "標準出力を得る(&S)", IDC_CHECK_GETSTDOUT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 32, 76, 10 @@ -508,7 +508,7 @@ BEGIN DEFPUSHBUTTON "実行(&E)", IDOK, 117, 116, 50, 14 PUSHBUTTON "キャンセル(&X)", IDCANCEL, 177, 116, 50, 14 PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 237, 116, 50, 14 - LTEXT "[Note] $Fで編集中ファイル名, $$で$", IDC_STATIC, 140, 21, 134, 8 + LTEXT "[Note] $Fで編集中ファイル名, $$で$", IDC_STATIC, 140, 21, 134, 10 END IDD_EXECRUNNING DIALOG DISCARDABLE 0, 0, 270, 55 @@ -544,8 +544,8 @@ CAPTION "印刷中" FONT 9, "MS Pゴシック" BEGIN PUSHBUTTON "キャンセル(&X)", IDCANCEL, 90, 56, 50, 14 - LTEXT "印刷しています・・・・", IDC_STATIC, 25, 10, 65, 8 - LTEXT "12/123頁", IDC_STATIC_PROGRESS, 25, 43, 100, 8 + LTEXT "印刷しています・・・・", IDC_STATIC, 25, 10, 65, 10 + LTEXT "12/123頁", IDC_STATIC_PROGRESS, 25, 43, 100, 10 LTEXT "CEditView.cpp", IDC_STATIC_JOBNAME, 25, 20, 115, 20 ICON IDI_PRINTER, IDC_STATIC, 10, 8, 11, 9, SS_REALSIZEIMAGE END @@ -554,16 +554,16 @@ IDD_FILEOPEN DIALOG DISCARDABLE 0, 0, 261, 66 STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN FONT 9, "MS Pゴシック" BEGIN - LTEXT "", IDC_STATIC_STC32, 0, 0, 261, 8 - LTEXT "文字コードセット(&C):", IDC_STATIC_CHARCODE, 5, 15, 64, 8 + LTEXT "", IDC_STATIC_STC32, 0, 0, 261, 10 + LTEXT "文字コードセット(&C):", IDC_STATIC_CHARCODE, 5, 15, 64, 10 COMBOBOX IDC_COMBO_CODE, 71, 13, 50, 126, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "C&P", IDC_CHECK_CP, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 122, 14, 25, 10 CONTROL "&BOM", IDC_CHECK_BOM, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 148, 14, 30, 10 - LTEXT "改行コード(&E):", IDC_STATIC_EOL, 181, 15, 45, 8 + LTEXT "改行コード(&E):", IDC_STATIC_EOL, 181, 15, 45, 10 COMBOBOX IDC_COMBO_EOL, 226, 13, 50, 126, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "最近のファイル(&F):", IDC_STATIC, 5, 32, 59, 8 + LTEXT "最近のファイル(&F):", IDC_STATIC, 5, 32, 59, 10 COMBOBOX IDC_COMBO_MRU, 71, 30, 185, 236, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP - LTEXT "最近のフォルダ(&D):", IDC_STATIC, 5, 49, 61, 8 + LTEXT "最近のフォルダ(&D):", IDC_STATIC, 5, 49, 61, 10 COMBOBOX IDC_COMBO_OPENFOLDER, 71, 46, 185, 236, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP END @@ -578,8 +578,8 @@ BEGIN PUSHBUTTON "以後通知メッセージのみ(&M)", IDC_BTN_NOTIFYONLY, 7, 81, 102, 14 PUSHBUTTON "以後更新を監視しない(&N)", IDC_BTN_NOSUPERVISION, 114, 81, 102, 14 EDITTEXT IDC_UPDATEDFILENAME, 7, 7, 209, 25, ES_READONLY | NOT WS_TABSTOP | ES_MULTILINE - LTEXT "このファイルは外部のエディタ等で変更されています。", IDC_FILEUPDATEMSG, 7, 36, 209, 8 - LTEXT "", IDC_QUERYRELOADMSG, 7, 48, 209, 8 + LTEXT "このファイルは外部のエディタ等で変更されています。", IDC_FILEUPDATEMSG, 7, 36, 209, 10 + LTEXT "", IDC_QUERYRELOADMSG, 7, 48, 209, 10 END IDD_FAVORITE DIALOGEX 0, 0, 380, 274 @@ -615,8 +615,8 @@ EXSTYLE WS_EX_CONTEXTHELP CAPTION "ダイレクトタグジャンプ一覧" FONT 9, "MS Pゴシック" BEGIN - LTEXT "DIR", IDC_STATIC_BASEDIR, 4, 151, 276, 8, SS_NOPREFIX - LTEXT "キーワード(&K)", IDC_STATIC_KEYWORD, 4, 162, 100, 8, SS_NOPREFIX + LTEXT "DIR", IDC_STATIC_BASEDIR, 4, 151, 276, 10, SS_NOPREFIX + LTEXT "キーワード(&K)", IDC_STATIC_KEYWORD, 4, 162, 100, 10, SS_NOPREFIX COMBOBOX IDC_KEYWORD, 3, 172, 134, 180, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP CONTROL "List1", IDC_LIST_TAGJUMP, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 3, 4, 403, 143 PUSHBUTTON "前へ(&P)", IDC_BUTTON_PREVTAG, 296, 152, 50, 14 @@ -634,12 +634,12 @@ EXSTYLE WS_EX_CONTEXTHELP CAPTION "タグファイルの作成" FONT 9, "MS Pゴシック" BEGIN - LTEXT "タグ作成フォルダ", IDC_STATIC, 7, 7, 65, 8 + LTEXT "タグ作成フォルダ", IDC_STATIC, 7, 7, 65, 10 EDITTEXT IDC_EDIT_TAG_MAKE_FOLDER, 7, 18, 201, 12, ES_AUTOHSCROLL PUSHBUTTON "...", IDC_BUTTON_TAG_MAKE_REF, 211, 17, 15, 12 PUSHBUTTON "上(&B)", IDC_BUTTON_FOLDER_UP, 186, 31, 25, 14 CONTROL "サブフォルダも対象にする", IDC_CHECK_TAG_MAKE_RECURSE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 34, 107, 10 - LTEXT "コマンドラインオプション", IDC_STATIC, 7, 49, 86, 8 + LTEXT "コマンドラインオプション", IDC_STATIC, 7, 49, 86, 10 EDITTEXT IDC_EDIT_TAG_MAKE_CMDLINE, 96, 47, 130, 12, ES_AUTOHSCROLL DEFPUSHBUTTON "作成(&O)", IDOK, 68, 64, 50, 14 PUSHBUTTON "キャンセル(&X)", IDCANCEL, 122, 64, 50, 14 @@ -651,10 +651,10 @@ STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "処理の実行中" FONT 9, "MS Pゴシック" BEGIN - LTEXT "処理中です・・・・", IDC_STATIC_MSG, 5, 5, 54, 8, NOT WS_GROUP + LTEXT "処理中です・・・・", IDC_STATIC_MSG, 5, 5, 54, 10, NOT WS_GROUP CONTROL "Progress1", IDC_PROGRESS, "msctls_progress32", WS_BORDER, 5, 20, 120, 10 PUSHBUTTON "キャンセル(&X)", IDCANCEL, 135, 16, 50, 14 - RTEXT "", IDC_STATIC_KENSUU, 61, 5, 123, 8, NOT WS_GROUP + RTEXT "", IDC_STATIC_KENSUU, 61, 5, 123, 10, NOT WS_GROUP END IDD_DIFF DIALOGEX 0, 0, 263, 303 @@ -684,7 +684,7 @@ BEGIN DEFPUSHBUTTON "&OK", IDOK, 93, 282, 50, 14 PUSHBUTTON "キャンセル(&X)", IDCANCEL, 147, 282, 50, 14 PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 202, 282, 50, 14 - LTEXT "編集中のファイル", IDC_STATIC, 7, 7, 61, 8 + LTEXT "編集中のファイル", IDC_STATIC, 7, 7, 61, 10 EDITTEXT IDC_STATIC_DIFF_SRC, 7, 18, 249, 23, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL, WS_EX_STATICEDGE END @@ -705,7 +705,7 @@ STYLE DS_CENTER | DS_MODALFRAME | DS_SETFONT | WS_BORDER | WS_CAPTION | WS_DLGFR CAPTION "文字コードの指定" FONT 9, "MS Pゴシック" BEGIN - LTEXT "文字コードセット(&C):", IDC_STATIC, 5, 9, 64, 8 + LTEXT "文字コードセット(&C):", IDC_STATIC, 5, 9, 64, 10 COMBOBOX IDC_COMBO_CHARSET, 71, 7, 50, 126, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "C&P", IDC_CHECK_CP, 71, 26, 25, 10 AUTOCHECKBOX "&BOM", IDC_CHECK_BOM, 96, 26, 30, 10 @@ -719,7 +719,7 @@ EXSTYLE WS_EX_CONTEXTHELP CAPTION "タイプ別設定一覧" FONT 9, "MS Pゴシック" BEGIN - LTEXT "下からタイプを選択してください(&T):", IDC_STATIC, 5, 5, 111, 8 + LTEXT "下からタイプを選択してください(&T):", IDC_STATIC, 5, 5, 111, 10 LISTBOX IDC_LIST_TYPES, 5, 15, 120, 258, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP DEFPUSHBUTTON "設定変更(&S)...", IDOK, 130, 15, 50, 14 PUSHBUTTON "一時適用(&R)", IDC_BUTTON_TEMPCHANGE, 130, 31, 50, 14 @@ -742,14 +742,14 @@ STYLE DS_MODALFRAME | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SY CAPTION "インポート確認" FONT 9, "MS Pゴシック" BEGIN - LTEXT "読込先:", IDC_STATIC, 7, 7, 33, 8 - CONTROL "新規追加(&A)", IDC_RADIO_TYPE_ADD, "Button", BS_AUTORADIOBUTTON, 36, 7, 45, 8 - CONTROL "基本", IDC_RADIO_TYPE_TO, "Button", BS_AUTORADIOBUTTON, 86, 7, 135, 8 - LTEXT "新タイプ名:", IDC_STATIC, 7, 27, 33, 8 + LTEXT "読込先:", IDC_STATIC, 7, 7, 33, 10 + CONTROL "新規追加(&A)", IDC_RADIO_TYPE_ADD, "Button", BS_AUTORADIOBUTTON, 36, 7, 45, 10 + CONTROL "基本", IDC_RADIO_TYPE_TO, "Button", BS_AUTORADIOBUTTON, 86, 7, 135, 10 + LTEXT "新タイプ名:", IDC_STATIC, 7, 27, 33, 10 LTEXT "基本", IDC_STATIC_TYPE_FILE, 45, 27, 135, 16 - LTEXT "色選択(&C)", IDC_STATIC, 7, 47, 35, 8 + LTEXT "色選択(&C)", IDC_STATIC, 7, 47, 35, 10 COMBOBOX IDC_COMBO_COLORS, 44, 45, 100, 250, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "上記条件でインポートします。よろしいですか?", IDC_STATIC_MSG, 26, 64, 154, 8 + LTEXT "上記条件でインポートします。よろしいですか?", IDC_STATIC_MSG, 26, 64, 154, 10 DEFPUSHBUTTON "&OK", IDOK, 26, 79, 50, 14 PUSHBUTTON "キャンセル(&X)", IDCANCEL, 78, 79, 50, 14 PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 130, 79, 50, 14 @@ -1042,7 +1042,7 @@ BEGIN COMBOBOX IDC_COMBO8, 68, 125, 104, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP LTEXT "強調キーワード&9", IDC_STATIC, 7, 143, 54, 13 COMBOBOX IDC_COMBO9, 68, 141, 104, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "強調キーワード1&0", IDC_STATIC, 7, 159, 58, 8 + LTEXT "強調キーワード1&0", IDC_STATIC, 7, 159, 58, 13 COMBOBOX IDC_COMBO10, 68, 157, 104, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END @@ -1052,9 +1052,9 @@ EXSTYLE WS_EX_CONTEXTHELP CAPTION "文字色統一" FONT 9, "MS Pゴシック" BEGIN - LTEXT "統一色", IDC_STATIC, 7, 13, 24, 8 + LTEXT "統一色", IDC_STATIC, 7, 13, 24, 10 LTEXT "Static", IDC_STATIC_COLOR, 35, 10, 86, 14, SS_CENTERIMAGE - LTEXT "変更対象の色(&C)を選んでチェック状態にしてください", IDC_STATIC, 7, 29, 166, 8 + LTEXT "変更対象の色(&C)を選んでチェック状態にしてください", IDC_STATIC, 7, 29, 166, 10 LISTBOX IDC_LIST_COLORS, 7, 41, 114, 90, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "全チェック(&A)", IDC_BUTTON_SELALL, 125, 70, 49, 14 PUSHBUTTON "全解除(&N)", IDC_BUTTON_SELNOTING, 125, 89, 49, 14 @@ -1597,20 +1597,20 @@ BEGIN CONTROL "指定しない(&D)", IDC_RADIO_WINPOS_DEF, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 19, 61, 10 CONTROL "継承する(&I)", IDC_RADIO_WINPOS_SAVE, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 32, 52, 10 CONTROL "直接指定(&S)", IDC_RADIO_WINPOS_SET, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 45, 56, 10 - LTEXT "X座標(&X)", IDC_STATIC, 81, 29, 31, 8, NOT WS_GROUP + LTEXT "X座標(&X)", IDC_STATIC, 81, 29, 31, 10, NOT WS_GROUP EDITTEXT IDC_EDIT_WX, 115, 25, 33, 14, ES_RIGHT | WS_GROUP CONTROL "Spin1", IDC_SPIN_WX, "msctls_updown32", UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS, 148, 25, 10, 14 - LTEXT "Y座標(&Y)", IDC_STATIC, 81, 43, 31, 8, NOT WS_GROUP + LTEXT "Y座標(&Y)", IDC_STATIC, 81, 43, 31, 10, NOT WS_GROUP EDITTEXT IDC_EDIT_WY, 115, 41, 33, 14, ES_RIGHT | WS_GROUP CONTROL "Spin1", IDC_SPIN_WY, "msctls_updown32", UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS, 148, 41, 10, 14 CONTROL "指定しない(&E)", IDC_RADIO_WINSIZE_DEF, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 79, 60, 10 CONTROL "継承する(&N)", IDC_RADIO_WINSIZE_SAVE, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 91, 55, 10 CONTROL "直接指定(&T)", IDC_RADIO_WINSIZE_SET, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 103, 56, 10 COMBOBOX IDC_COMBO_WINTYPE, 84, 74, 64, 52, CBS_DROPDOWNLIST | WS_VSCROLL | WS_GROUP | WS_TABSTOP - LTEXT "幅(&W)", IDC_STATIC, 84, 94, 20, 8 + LTEXT "幅(&W)", IDC_STATIC, 84, 94, 20, 10 EDITTEXT IDC_EDIT_SX, 115, 91, 33, 14, ES_RIGHT | ES_NUMBER CONTROL "Spin1", IDC_SPIN_SX, "msctls_updown32", UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS, 148, 90, 10, 14 - LTEXT "高さ(&G)", IDC_STATIC, 84, 110, 25, 8 + LTEXT "高さ(&G)", IDC_STATIC, 84, 110, 25, 10 EDITTEXT IDC_EDIT_SY, 115, 108, 33, 14, ES_RIGHT | ES_NUMBER CONTROL "Spin1", IDC_SPIN_SY, "msctls_updown32", UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS, 148, 108, 10, 14 DEFPUSHBUTTON "閉じる(&C)", IDOK, 26, 138, 50, 14, WS_GROUP @@ -1625,9 +1625,9 @@ EXSTYLE WS_EX_CONTEXTHELP CAPTION "プラグインの設定" FONT 9, "MS Pゴシック" BEGIN - LTEXT "プラグインのオプションを設定してください", IDC_STATIC_MSG, 11, 7, 119, 8 + LTEXT "プラグインのオプションを設定してください", IDC_STATIC_MSG, 11, 7, 119, 10 CONTROL "List1", IDC_LIST_PLUGIN_OPTIONS, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 22, 257, 186 - LTEXT "値:", IDC_STATIC, 11, 217, 21, 8 + LTEXT "値:", IDC_STATIC, 11, 217, 21, 10 EDITTEXT IDC_EDIT_PLUGIN_OPTION, 36, 214, 228, 14, ES_AUTOHSCROLL EDITTEXT IDC_EDIT_PLUGIN_OPTION_DIR, 36, 214, 205, 14, ES_AUTOHSCROLL PUSHBUTTON "&...", IDC_BUTTON_PLUGIN_OPTION_DIR, 243, 214, 21, 14 @@ -1666,13 +1666,13 @@ FONT 9, "MS Pゴシック" BEGIN LTEXT "設定:共通設定", IDC_STATIC_SETTFING_FROM, 4, 4, 282, 10 CONTROL "各フォルダの設定を読み込む(&I)", IDC_CHECK_LOADINI, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 4, 16, 120, 9 - LTEXT "デフォルト設定ファイル名(&J)", IDC_STATIC, 4, 28, 110, 8 + LTEXT "デフォルト設定ファイル名(&J)", IDC_STATIC, 4, 28, 110, 10 EDITTEXT IDC_EDIT_DEFINI, 13, 39, 124, 13, ES_AUTOHSCROLL PUSHBUTTON "...(&1)", IDC_BUTTON_REF1, 137, 39, 17, 13 PUSHBUTTON "読み込み(&V)", IDC_BUTTON_LOAD, 108, 53, 47, 14 - CONTROL "Grep(&G)", IDC_RADIO_GREP, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 6, 72, 56, 8 - CONTROL "ファイル(&F)", IDC_RADIO_FILE, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 6, 85, 56, 8 - CONTROL "フォルダ(&2)", IDC_RADIO_FOLDER, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 6, 98, 56, 8 + CONTROL "Grep(&G)", IDC_RADIO_GREP, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 6, 72, 56, 10 + CONTROL "ファイル(&F)", IDC_RADIO_FILE, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 6, 85, 56, 10 + CONTROL "フォルダ(&2)", IDC_RADIO_FOLDER, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 6, 98, 56, 10 GROUPBOX "種類", IDC_STATIC, 1, 61, 89, 50, WS_GROUP LTEXT "パス(&T)", IDC_STATIC_PATH, 3, 119, 22, 10 EDITTEXT IDC_EDIT_PATH, 38, 117, 122, 13, ES_AUTOHSCROLL @@ -1682,9 +1682,9 @@ BEGIN EDITTEXT IDC_EDIT_LABEL, 38, 134, 111, 13, ES_AUTOHSCROLL LTEXT "ファイル(&K)", IDC_STATIC_FILE, 3, 154, 32, 10 EDITTEXT IDC_EDIT_FILE, 38, 151, 111, 13, ES_AUTOHSCROLL - CONTROL "隠しファイル(&W)", IDC_CHECK_HIDDEN, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 10, 181, 87, 8 - CONTROL "読み取り専用(&Z)", IDC_CHECK_READONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 10, 193, 87, 8 - CONTROL "システムファイル(&S)", IDC_CHECK_SYSTEM, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 10, 205, 87, 8 + CONTROL "隠しファイル(&W)", IDC_CHECK_HIDDEN, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 10, 181, 87, 10 + CONTROL "読み取り専用(&Z)", IDC_CHECK_READONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 10, 193, 87, 10 + CONTROL "システムファイル(&S)", IDC_CHECK_SYSTEM, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 10, 205, 87, 10 GROUPBOX "非表示属性", IDC_STATIC, 4, 169, 100, 51 PUSHBUTTON "削除(&4)", IDC_BUTTON_DELETE, 156, 17, 36, 14 PUSHBUTTON "上⇒(&Q)", IDC_BUTTON_INSERT, 156, 32, 36, 14 From c0b3ba15585697ab8f25fb4c412d620f90256bb5 Mon Sep 17 00:00:00 2001 From: miwa Date: Sat, 3 Oct 2020 16:48:53 +0900 Subject: [PATCH 0145/1024] =?UTF-8?q?OnInitDialog=E3=81=AE=E5=BE=8C?= =?UTF-8?q?=E3=81=A7SetMainFont=E3=81=99=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgGrep.cpp | 7 ++++--- sakura_core/dlg/CDlgGrepReplace.cpp | 5 ++++- sakura_core/dlg/CDlgReplace.cpp | 6 ++++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/sakura_core/dlg/CDlgGrep.cpp b/sakura_core/dlg/CDlgGrep.cpp index 9d5eca1122..21ec97e74d 100644 --- a/sakura_core/dlg/CDlgGrep.cpp +++ b/sakura_core/dlg/CDlgGrep.cpp @@ -349,6 +349,9 @@ BOOL CDlgGrep::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) m_comboDelExcludeFolder.pRecent = &m_cRecentExcludeFolder; SetComboBoxDeleter(GetItemHwnd(IDC_COMBO_EXCLUDE_FOLDER), &m_comboDelExcludeFolder); + BOOL bRet = CDialog::OnInitDialog( hwndDlg, wParam, lParam ); + if( !bRet ) return bRet; + // フォント設定 2012/11/27 Uchi const int nItemIds[] = { IDC_COMBO_TEXT, IDC_COMBO_FILE, IDC_COMBO_FOLDER, IDC_COMBO_EXCLUDE_FILE, IDC_COMBO_EXCLUDE_FOLDER }; m_cFontDeleters.resize( _countof( nItemIds ) ); @@ -359,9 +362,7 @@ BOOL CDlgGrep::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) m_cFontDeleters[i].SetFont( hFontOld, hFont, hwndItem ); } - /* 基底クラスメンバ */ -// CreateSizeBox(); - return CDialog::OnInitDialog( hwndDlg, wParam, lParam ); + return bRet; } /*! @brief フォルダ指定EditBoxのコールバック関数 diff --git a/sakura_core/dlg/CDlgGrepReplace.cpp b/sakura_core/dlg/CDlgGrepReplace.cpp index c182b9597c..1b29cb6ab8 100644 --- a/sakura_core/dlg/CDlgGrepReplace.cpp +++ b/sakura_core/dlg/CDlgGrepReplace.cpp @@ -133,11 +133,14 @@ BOOL CDlgGrepReplace::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) m_comboDelText2.pRecent = &m_cRecentReplace; SetComboBoxDeleter( GetItemHwnd( IDC_COMBO_TEXT2 ), &m_comboDelText2 ); + BOOL bRet = CDlgGrep::OnInitDialog( hwndDlg, wParam, lParam ); + if( !bRet ) return bRet; + HFONT hFontOld = (HFONT)::SendMessageAny( GetItemHwnd( IDC_COMBO_TEXT2 ), WM_GETFONT, 0, 0 ); HFONT hFont = SetMainFont( GetItemHwnd( IDC_COMBO_TEXT2 ) ); m_cFontText2.SetFont( hFontOld, hFont, GetItemHwnd( IDC_COMBO_TEXT2 ) ); - return CDlgGrep::OnInitDialog( hwndDlg, wParam, lParam ); + return bRet; } BOOL CDlgGrepReplace::OnDestroy() diff --git a/sakura_core/dlg/CDlgReplace.cpp b/sakura_core/dlg/CDlgReplace.cpp index a61e581067..524b0490cd 100644 --- a/sakura_core/dlg/CDlgReplace.cpp +++ b/sakura_core/dlg/CDlgReplace.cpp @@ -359,6 +359,9 @@ BOOL CDlgReplace::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) m_comboDelText2.pRecent = &m_cRecentReplace; SetComboBoxDeleter(GetItemHwnd(IDC_COMBO_TEXT2), &m_comboDelText2); + BOOL bRet = CDialog::OnInitDialog( hwndDlg, wParam, lParam ); + if( !bRet ) return bRet; + // フォント設定 2012/11/27 Uchi HFONT hFontOld = (HFONT)::SendMessageAny( GetItemHwnd( IDC_COMBO_TEXT ), WM_GETFONT, 0, 0 ); HFONT hFont = SetMainFont( GetItemHwnd( IDC_COMBO_TEXT ) ); @@ -368,8 +371,7 @@ BOOL CDlgReplace::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) hFont = SetMainFont( GetItemHwnd( IDC_COMBO_TEXT2 ) ); m_cFontText2.SetFont( hFontOld, hFont, GetItemHwnd( IDC_COMBO_TEXT2 ) ); - /* 基底クラスメンバ */ - return CDialog::OnInitDialog( hwndDlg, wParam, lParam ); + return bRet; } BOOL CDlgReplace::OnDestroy() From e4da55bf3c6a49a84d8ef0fb298f6daaa5879a98 Mon Sep 17 00:00:00 2001 From: miwa Date: Sat, 3 Oct 2020 21:34:04 +0900 Subject: [PATCH 0146/1024] =?UTF-8?q?=E5=85=B1=E9=80=9A=E8=A8=AD=E5=AE=9A?= =?UTF-8?q?=E3=83=80=E3=82=A4=E3=82=A2=E3=83=AD=E3=82=B0=E3=81=AE=E3=82=B7?= =?UTF-8?q?=E3=82=B9=E3=83=86=E3=83=A0=E3=83=95=E3=82=A9=E3=83=B3=E3=83=88?= =?UTF-8?q?=E5=8C=96=E3=81=A8=E9=85=8D=E7=BD=AE=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDialog.cpp | 47 ++-- sakura_core/dlg/CDialog.h | 2 +- sakura_core/prop/CPropCommon.cpp | 26 ++ sakura_core/prop/CPropCommon.h | 3 + sakura_core/sakura_rc.rc | 404 +++++++++++++++---------------- 5 files changed, 255 insertions(+), 227 deletions(-) diff --git a/sakura_core/dlg/CDialog.cpp b/sakura_core/dlg/CDialog.cpp index 4cf974ed83..a0728de7d1 100644 --- a/sakura_core/dlg/CDialog.cpp +++ b/sakura_core/dlg/CDialog.cpp @@ -83,7 +83,7 @@ CDialog::CDialog(bool bSizable, bool bCheckShareData) CDialog::~CDialog() { // MYTRACE( L"CDialog::~CDialog()\n" ); - DeleteObject( m_hFontMessage ); + DeleteObject( m_hFontControl ); CloseDialog( 0 ); return; } @@ -190,29 +190,6 @@ BOOL CDialog::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) return TRUE; } - -BOOL CALLBACK SetDialogFontProc( HWND hwnd , LPARAM hFont ) -{ - SendMessageAny( hwnd, WM_SETFONT, (WPARAM)hFont, (LPARAM)FALSE ); - return TRUE; -} - -void CDialog::SetDialogFont() -{ - HFONT hFontBase = (HFONT)::SendMessageAny( m_hWnd, WM_GETFONT, 0, (LPARAM)NULL ); - LOGFONT lfBaseFont = {}; - GetObject( hFontBase, sizeof(lfBaseFont), &lfBaseFont ); - - NONCLIENTMETRICS metrics = {}; - metrics.cbSize = sizeof( metrics ); - SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &metrics, 0 ); - LOGFONT lfMessageFont = metrics.lfMessageFont; - lfMessageFont.lfHeight = lfBaseFont.lfHeight; - m_hFontMessage = CreateFontIndirect( &lfMessageFont ); - SendMessageAny( m_hWnd, WM_SETFONT, (WPARAM)m_hFontMessage, (LPARAM)FALSE ); - EnumChildWindows( m_hWnd, SetDialogFontProc, (LPARAM)m_hFontMessage ); -} - void CDialog::SetDialogPosSize() { #if 0 @@ -289,6 +266,28 @@ void CDialog::SetDialogPosSize() } } +BOOL CALLBACK SetDialogFontProc( HWND hwnd , LPARAM hFont ) +{ + SendMessageAny( hwnd, WM_SETFONT, (WPARAM)hFont, (LPARAM)FALSE ); + return TRUE; +} + +void CDialog::SetDialogFont() +{ + HFONT hFontBase = (HFONT)::SendMessageAny( m_hWnd, WM_GETFONT, 0, (LPARAM)NULL ); + LOGFONT lfBaseFont = {}; + GetObject( hFontBase, sizeof(lfBaseFont), &lfBaseFont ); + + NONCLIENTMETRICS metrics = {}; + metrics.cbSize = sizeof( metrics ); + SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &metrics, 0 ); + LOGFONT lfMessageFont = metrics.lfMessageFont; + lfMessageFont.lfHeight = lfBaseFont.lfHeight; + m_hFontControl = CreateFontIndirect( &lfMessageFont ); + SendMessageAny( m_hWnd, WM_SETFONT, (WPARAM)m_hFontControl, (LPARAM)FALSE ); + EnumChildWindows( m_hWnd, SetDialogFontProc, (LPARAM)m_hFontControl ); +} + BOOL CDialog::OnDestroy( void ) { /* ウィンドウ位置・サイズを記憶 */ diff --git a/sakura_core/dlg/CDialog.h b/sakura_core/dlg/CDialog.h index 24cd730c55..67bf03f960 100644 --- a/sakura_core/dlg/CDialog.h +++ b/sakura_core/dlg/CDialog.h @@ -141,7 +141,7 @@ class CDialog HWND m_hwndParent; /* オーナーウィンドウのハンドル */ private: HWND m_hWnd; /* このダイアログのハンドル */ - HFONT m_hFontMessage; // ダイアログボックス用フォント + HFONT m_hFontControl; // ダイアログボックス用フォント public: HWND m_hwndSizeBox; LPARAM m_lParam; diff --git a/sakura_core/prop/CPropCommon.cpp b/sakura_core/prop/CPropCommon.cpp index 758f7eb40d..90f8730c83 100644 --- a/sakura_core/prop/CPropCommon.cpp +++ b/sakura_core/prop/CPropCommon.cpp @@ -58,6 +58,29 @@ int CPropCommon::SearchIntArr( int nKey, int* pnArr, int nArrNum ) return -1; } +BOOL CALLBACK SetPropFontProc( HWND hwnd , LPARAM hFont ) +{ + SendMessageAny( hwnd, WM_SETFONT, (WPARAM)hFont, (LPARAM)FALSE ); + return TRUE; +} + +void CPropCommon::SetPropFont( HWND hwnd ) +{ + // 後ほどCDialogの同様処理と共通化 + HFONT hFontBase = (HFONT)::SendMessageAny( hwnd, WM_GETFONT, 0, (LPARAM)NULL ); + LOGFONT lfBaseFont = {}; + GetObject( hFontBase, sizeof(lfBaseFont), &lfBaseFont ); + + NONCLIENTMETRICS metrics = {}; + metrics.cbSize = sizeof( metrics ); + SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &metrics, 0 ); + LOGFONT lfMessageFont = metrics.lfMessageFont; + lfMessageFont.lfHeight = lfBaseFont.lfHeight; + m_hFontControl = CreateFontIndirect( &lfMessageFont ); + SendMessageAny( hwnd, WM_SETFONT, (WPARAM)m_hFontControl, (LPARAM)FALSE ); + EnumChildWindows( hwnd, SetPropFontProc, (LPARAM)m_hFontControl ); +} + /*! プロパティページごとのWindow Procedureを引数に取ることで 処理の共通化を狙った. @@ -80,6 +103,7 @@ INT_PTR CPropCommon::DlgProc( pPsp = (PROPSHEETPAGE*)lParam; pCPropCommon = ( CPropCommon* )(pPsp->lParam); if( NULL != pCPropCommon ){ + pCPropCommon->SetPropFont( hwndDlg ); return (pCPropCommon->*DispatchPage)( hwndDlg, uMsg, wParam, pPsp->lParam ); }else{ return FALSE; @@ -107,6 +131,7 @@ INT_PTR CPropCommon::DlgProc2( case WM_INITDIALOG: pCPropCommon = ( CPropCommon* )(lParam); if( NULL != pCPropCommon ){ + pCPropCommon->SetPropFont( hwndDlg ); return (pCPropCommon->*DispatchPage)( hwndDlg, uMsg, IDOK, lParam ); }else{ return FALSE; @@ -159,6 +184,7 @@ CPropCommon::CPropCommon() CPropCommon::~CPropCommon() { + DeleteObject( m_hFontControl ); } /* 初期化 */ diff --git a/sakura_core/prop/CPropCommon.h b/sakura_core/prop/CPropCommon.h index 02c0969287..9f2394dba8 100644 --- a/sakura_core/prop/CPropCommon.h +++ b/sakura_core/prop/CPropCommon.h @@ -143,6 +143,7 @@ class CPropCommon bool m_bTrayProc; HFONT m_hKeywordHelpFont; //!< キーワードヘルプ フォント ハンドル HFONT m_hTabFont; //!< タブ フォント ハンドル + HFONT m_hFontControl; //!< ダイアログボックス用フォント protected: /* @@ -181,6 +182,8 @@ class CPropCommon HFONT SetCtrlFont( HWND hwndDlg, int idc_static, const LOGFONT& lf ); //!< コントロールにフォント設定する // 2013/4/24 Uchi HFONT SetFontLabel( HWND hwndDlg, int idc_static, const LOGFONT& lf, int nps ); //!< フォントラベルにフォントとフォント名設定する // 2013/4/24 Uchi + + void SetPropFont( HWND hwnd ); }; /*! diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index b0272c154f..acd75eb638 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -760,27 +760,27 @@ STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAP EXSTYLE WS_EX_CONTEXTHELP FONT 9, "MS Pゴシック" BEGIN - LTEXT "設定の名前(&N)", IDC_STATIC, 5, 6, 49, 8 + LTEXT "設定の名前(&N)", IDC_STATIC, 5, 6, 49, 10 EDITTEXT IDC_EDIT_TYPENAME, 55, 4, 59, 12, ES_AUTOHSCROLL - LTEXT "ファイル拡張子(&X)", IDC_STATIC, 124, 6, 58, 8 + LTEXT "ファイル拡張子(&X)", IDC_STATIC, 124, 6, 58, 10 EDITTEXT IDC_EDIT_TYPEEXTS, 184, 4, 113, 12, ES_AUTOHSCROLL - RTEXT "折り返し方法(&<)", IDC_STATIC, 8, 34, 56, 8, NOT WS_GROUP + RTEXT "折り返し方法(&<)", IDC_STATIC, 8, 34, 56, 10, NOT WS_GROUP COMBOBOX IDC_COMBO_WRAPMETHOD, 70, 32, 72, 78, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - RTEXT "折り返し桁数(&R)", IDC_STATIC, 8, 49, 56, 8, NOT WS_GROUP + RTEXT "折り返し桁数(&R)", IDC_STATIC, 8, 49, 56, 10, NOT WS_GROUP EDITTEXT IDC_EDIT_MAXLINELEN, 70, 48, 40, 12 CONTROL "Spin1", IDC_SPIN_MAXLINELEN, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 117, 48, 9, 12, WS_EX_TRANSPARENT - RTEXT "文字の間隔(&C)", IDC_STATIC, 8, 64, 56, 8, NOT WS_GROUP + RTEXT "文字の間隔(&C)", IDC_STATIC, 8, 64, 56, 10, NOT WS_GROUP EDITTEXT IDC_EDIT_CHARSPACE, 70, 63, 40, 12 CONTROL "Spin1", IDC_SPIN_CHARSPACE, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 117, 63, 9, 12, WS_EX_TRANSPARENT - LTEXT "ドット", IDC_STATIC, 114, 64, 18, 8 - RTEXT "行の間隔(&L)", IDC_STATIC, 8, 79, 56, 8, NOT WS_GROUP + LTEXT "ドット", IDC_STATIC, 114, 64, 18, 10 + RTEXT "行の間隔(&L)", IDC_STATIC, 8, 79, 56, 10, NOT WS_GROUP EDITTEXT IDC_EDIT_LINESPACE, 70, 78, 40, 12, ES_AUTOHSCROLL CONTROL "Spin3", IDC_SPIN_LINESPACE, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 117, 78, 9, 12 - LTEXT "ドット", IDC_STATIC, 114, 79, 18, 8 - RTEXT "TAB幅(&T)", IDC_STATIC, 8, 94, 56, 8, NOT WS_GROUP + LTEXT "ドット", IDC_STATIC, 114, 79, 18, 10 + RTEXT "TAB幅(&T)", IDC_STATIC, 8, 94, 56, 10, NOT WS_GROUP EDITTEXT IDC_EDIT_TABSPACE, 70, 93, 40, 12, ES_AUTOHSCROLL CONTROL "Spin3", IDC_SPIN_TABSPACE, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 117, 93, 7, 12 - LTEXT "T&AB表示", IDC_STATIC, 16, 110, 56, 8, NOT WS_GROUP + LTEXT "T&AB表示", IDC_STATIC, 16, 110, 56, 10, NOT WS_GROUP COMBOBOX IDC_CHECK_TAB_ARROW, 48, 108, 46, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP EDITTEXT IDC_EDIT_TABVIEWSTRING, 102, 108, 40, 12, ES_AUTOHSCROLL CONTROL "S&PACEの挿入", IDC_CHECK_INS_SPACE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 70, 123, 57, 10 @@ -788,11 +788,11 @@ BEGIN GROUPBOX "レイアウト", IDC_STATIC, 3, 22, 145, 117 CONTROL "自動インデント(&U)", IDC_CHECK_INDENT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 154, 72, 10 CONTROL "全角空白も(&Z)", IDC_CHECK_INDENT_WSPACE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 83, 154, 61, 10 - LTEXT "スマートインデント(&S)", IDC_STATIC, 8, 169, 68, 8 + LTEXT "スマートインデント(&S)", IDC_STATIC, 8, 169, 68, 10 COMBOBOX IDC_COMBO_SMARTINDENT, 82, 167, 60, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "その他のインデント対象文字(&I)", IDC_STATIC, 8, 183, 120, 8 + LTEXT "その他のインデント対象文字(&I)", IDC_STATIC, 8, 183, 120, 10 EDITTEXT IDC_EDIT_INDENTCHARS, 38, 195, 103, 12, ES_AUTOHSCROLL - LTEXT "折り返し行インデント(&2)", IDC_STATIC, 8, 211, 75, 8 + LTEXT "折り返し行インデント(&2)", IDC_STATIC, 8, 211, 75, 10 COMBOBOX IDC_COMBO_INDENTLAYOUT, 87, 209, 54, 63, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "改行時に末尾の空白を削除(&E)", IDC_CHECK_RTRIM_PREVLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 224, 113, 10 GROUPBOX "インデント", IDC_STATIC, 3, 143, 145, 97 @@ -827,43 +827,43 @@ BEGIN CONTROL "色分け/表示(&D)", IDC_CHECK_DISP, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 6, 165, 65, 10 CONTROL "太字(&B)", IDC_CHECK_BOLD, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 72, 165, 36, 10 CONTROL "下線(&U)", IDC_CHECK_UNDERLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 112, 165, 36, 10 - LTEXT "文字色(C)", IDC_STATIC_MOZI, 16, 181, 34, 8 + LTEXT "文字色(C)", IDC_STATIC_MOZI, 16, 181, 34, 10 CONTROL "&C", IDC_BUTTON_TEXTCOLOR, "Button", BS_OWNERDRAW | WS_TABSTOP, 54, 178, 25, 14 PUSHBUTTON "文字色統一(&<)...", IDC_BUTTON_SAMETEXTCOLOR, 84, 178, 58, 14 - LTEXT "背景色(K)", IDC_STATIC_HAIKEI, 16, 196, 33, 8, NOT WS_GROUP + LTEXT "背景色(K)", IDC_STATIC_HAIKEI, 16, 196, 33, 10, NOT WS_GROUP CONTROL "&K", IDC_BUTTON_BACKCOLOR, "Button", BS_OWNERDRAW | WS_TABSTOP, 54, 193, 25, 14 PUSHBUTTON "背景色統一(&>)...", IDC_BUTTON_SAMEBKCOLOR, 84, 193, 58, 14 PUSHBUTTON "インポート(&I)...", IDC_BUTTON_IMPORT, 25, 215, 60, 14, WS_GROUP PUSHBUTTON "エクスポート(&X)...", IDC_BUTTON_EXPORT, 88, 215, 60, 14 - LTEXT "強調キーワード&1", IDC_STATIC, 162, 18, 54, 8 + LTEXT "強調キーワード&1", IDC_STATIC, 162, 18, 54, 10 COMBOBOX IDC_COMBO_SET, 218, 16, 75, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "&2~10...", IDC_BUTTON_KEYWORD_SELECT, 218, 31, 75, 14 PUSHBUTTON "共通設定(&C)...", IDC_BUTTON_EDITKEYWORD, 218, 47, 75, 14 GROUPBOX "強調キーワード", IDC_STATIC, 156, 6, 142, 60, WS_GROUP - LTEXT "ブロック型(&F)", IDC_STATIC, 164, 80, 42, 8 + LTEXT "ブロック型(&F)", IDC_STATIC, 164, 80, 42, 10 EDITTEXT IDC_EDIT_BLOCKCOMMENT_FROM, 211, 78, 27, 12, ES_AUTOHSCROLL - LTEXT "~(&T)", IDC_STATIC, 245, 80, 18, 8, NOT WS_GROUP + LTEXT "~(&T)", IDC_STATIC, 245, 80, 18, 10, NOT WS_GROUP EDITTEXT IDC_EDIT_BLOCKCOMMENT_TO, 267, 78, 26, 12, ES_AUTOHSCROLL - LTEXT "ブロック型(&A)", IDC_STATIC, 164, 94, 42, 8 + LTEXT "ブロック型(&A)", IDC_STATIC, 164, 94, 42, 10 EDITTEXT IDC_EDIT_BLOCKCOMMENT_FROM2, 211, 92, 27, 12, ES_AUTOHSCROLL - LTEXT "~(&Z)", IDC_STATIC, 245, 94, 18, 8, NOT WS_GROUP + LTEXT "~(&Z)", IDC_STATIC, 245, 94, 18, 10, NOT WS_GROUP EDITTEXT IDC_EDIT_BLOCKCOMMENT_TO2, 267, 92, 26, 12, ES_AUTOHSCROLL - LTEXT "行型(&M)", IDC_STATIC, 164, 110, 27, 8 + LTEXT "行型(&M)", IDC_STATIC, 164, 110, 27, 10 EDITTEXT IDC_EDIT_LINECOMMENT, 195, 108, 24, 12, ES_AUTOHSCROLL CONTROL "桁(&P)", IDC_CHECK_LCPOS, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 223, 109, 33, 10 - RTEXT "&@", IDC_LABEL_LCPOS, 256, 110, 8, 8 + RTEXT "&@", IDC_LABEL_LCPOS, 256, 110, 8, 10 EDITTEXT IDC_EDIT_LINECOMMENTPOS, 267, 108, 26, 12, ES_AUTOHSCROLL CONTROL "", IDC_SPIN_LCColNum, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 295, 108, 6, 12 - LTEXT "行型(&E)", IDC_STATIC, 164, 124, 25, 8 + LTEXT "行型(&E)", IDC_STATIC, 164, 124, 25, 10 EDITTEXT IDC_EDIT_LINECOMMENT2, 195, 122, 24, 12, ES_AUTOHSCROLL CONTROL "桁(&O)", IDC_CHECK_LCPOS2, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 223, 123, 34, 10 - RTEXT "&[", IDC_LABEL_LCPOS2, 256, 124, 8, 8 + RTEXT "&[", IDC_LABEL_LCPOS2, 256, 124, 8, 10 EDITTEXT IDC_EDIT_LINECOMMENTPOS2, 267, 122, 26, 12, ES_AUTOHSCROLL CONTROL "", IDC_SPIN_LCColNum2, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 295, 122, 6, 12 - LTEXT "行型(&G)", IDC_STATIC, 164, 138, 26, 8 + LTEXT "行型(&G)", IDC_STATIC, 164, 138, 26, 10 EDITTEXT IDC_EDIT_LINECOMMENT3, 195, 136, 24, 12, ES_AUTOHSCROLL CONTROL "桁(&J)", IDC_CHECK_LCPOS3, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 223, 137, 33, 10 - RTEXT "&]", IDC_LABEL_LCPOS3, 256, 138, 8, 8 + RTEXT "&]", IDC_LABEL_LCPOS3, 256, 138, 8, 10 EDITTEXT IDC_EDIT_LINECOMMENTPOS3, 267, 136, 26, 12, ES_AUTOHSCROLL CONTROL "", IDC_SPIN_LCColNum3, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 295, 136, 6, 12 GROUPBOX "コメントスタイル", IDC_STATIC, 156, 68, 142, 85, WS_GROUP @@ -871,9 +871,9 @@ BEGIN COMBOBOX IDC_COMBO_STRINGLITERAL, 160, 180, 68, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "行内のみ(&\\)", IDC_CHECK_STRINGLINEONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 233, 180, 64, 10 CONTROL "終了文字がない場合行末まで色分け(&N)", IDC_CHECK_STRINGENDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 160, 194, 136, 10 - LTEXT "縦線桁指定(&3)", IDC_STATIC, 164, 218, 46, 8 + LTEXT "縦線桁指定(&3)", IDC_STATIC, 164, 218, 46, 10 EDITTEXT IDC_EDIT_VERTLINE, 210, 216, 74, 12, ES_AUTOHSCROLL - LTEXT "*桁またはStep(Begin, End)でコンマ区切り", IDC_STATIC, 165, 230, 142, 8 + LTEXT "*桁またはStep(Begin, End)でコンマ区切り", IDC_STATIC, 165, 230, 142, 10 END IDD_PROP_SUPPORT DIALOGEX 0, 0, 302, 244 @@ -881,12 +881,12 @@ STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAP EXSTYLE WS_EX_CONTEXTHELP FONT 9, "MS Pゴシック" BEGIN - LTEXT "単語ファイル(&W)", IDC_STATIC, 8, 17, 53, 8, NOT WS_GROUP + LTEXT "単語ファイル(&W)", IDC_STATIC, 8, 17, 53, 10, NOT WS_GROUP EDITTEXT IDC_EDIT_HOKANFILE, 63, 15, 150, 12, ES_AUTOHSCROLL | WS_GROUP PUSHBUTTON "(&1)...", IDC_BUTTON_HOKANFILE_REF, 215, 14, 19, 14 COMBOBOX IDC_COMBO_HOKAN_TYPE, 236, 15, 58, 57, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "英大文字小文字を同一視(&I)", IDC_CHECK_HOKANLOHICASE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 31, 110, 10 - LTEXT "候補:", IDC_STATIC, 122, 33, 20, 8, NOT WS_GROUP + LTEXT "候補:", IDC_STATIC, 122, 33, 20, 10, NOT WS_GROUP CONTROL "編集中のファイル(&F)", IDC_CHECK_HOKANBYFILE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 142, 31, 75, 10 CONTROL "強調キーワード(&K)", IDC_CHECK_HOKANBYKEYWORD, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 217, 31, 75, 10 GROUPBOX "入力補完機能", IDC_STATIC, 3, 3, 295, 45, WS_GROUP @@ -913,9 +913,9 @@ BEGIN RTEXT "BREGONIG.DLL Version", IDC_LABEL_REGEX_VERSION, 89, 15, 208, 10, NOT WS_GROUP, WS_EX_TRANSPARENT GROUPBOX "正規表現キーワード(&K)", IDC_FRAME_REGEX, 3, 24, 295, 169 CONTROL "List5", IDC_LIST_REGEX, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOLABELWRAP | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 8, 33, 243, 118 - LTEXT "正規表現(&N)", IDC_LABEL_REGEX_KEYWORD, 13, 157, 41, 8, NOT WS_GROUP + LTEXT "正規表現(&N)", IDC_LABEL_REGEX_KEYWORD, 13, 157, 41, 10, NOT WS_GROUP EDITTEXT IDC_EDIT_REGEX, 59, 155, 191, 14, ES_AUTOHSCROLL - LTEXT "色指定(&C)", IDC_LABEL_REGEX_COLOR, 20, 174, 34, 8, NOT WS_GROUP + LTEXT "色指定(&C)", IDC_LABEL_REGEX_COLOR, 20, 174, 34, 10, NOT WS_GROUP COMBOBOX IDC_COMBO_REGEX_COLOR, 59, 172, 128, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "挿入(&S)", IDC_BUTTON_REGEX_INS, 255, 118, 38, 15 PUSHBUTTON "追加(&A)", IDC_BUTTON_REGEX_ADD, 255, 136, 38, 15 @@ -938,12 +938,12 @@ BEGIN CONTROL "キーワードヘルプ機能を使う(&K)", IDC_CHECK_KEYHELP, "Button", BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP, 5, 6, 114, 10 GROUPBOX "辞書ファイル一覧(&L)", IDC_FRAME_KEYHELP, 3, 21, 295, 174 CONTROL "List5", IDC_LIST_KEYHELP, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOLABELWRAP | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 8, 33, 238, 118 - LTEXT "<辞書の説明>", IDC_LABEL_KEYHELP_TITLE, 10, 159, 50, 8, NOT WS_GROUP - LTEXT "辞書ファイルの概要", IDC_LABEL_KEYHELP_ABOUT, 61, 159, 185, 8, NOT WS_GROUP, WS_EX_TRANSPARENT - LTEXT "辞書ファイル", IDC_LABEL_KEYHELP_KEYWORD, 13, 173, 41, 8, NOT WS_GROUP + LTEXT "<辞書の説明>", IDC_LABEL_KEYHELP_TITLE, 10, 159, 50, 10, NOT WS_GROUP + LTEXT "辞書ファイルの概要", IDC_LABEL_KEYHELP_ABOUT, 61, 159, 185, 10, NOT WS_GROUP, WS_EX_TRANSPARENT + LTEXT "辞書ファイル", IDC_LABEL_KEYHELP_KEYWORD, 13, 173, 41, 10, NOT WS_GROUP EDITTEXT IDC_EDIT_KEYHELP, 61, 172, 170, 12, ES_AUTOHSCROLL PUSHBUTTON "...", IDC_BUTTON_KEYHELP_REF, 234, 172, 12, 13, WS_GROUP - LTEXT "↑優先度(高)", IDC_LABEL_KEYHELP_PRIOR, 249, 33, 44, 8, NOT WS_GROUP + LTEXT "↑優先度(高)", IDC_LABEL_KEYHELP_PRIOR, 249, 33, 44, 10, NOT WS_GROUP PUSHBUTTON "挿入(&S)", IDC_BUTTON_KEYHELP_INS, 251, 136, 38, 15 PUSHBUTTON "更新(&E)", IDC_BUTTON_KEYHELP_UPD, 251, 154, 38, 15 PUSHBUTTON "削除(&D)", IDC_BUTTON_KEYHELP_DEL, 251, 172, 38, 15 @@ -956,7 +956,7 @@ BEGIN CONTROL "ヒットした次の辞書も検索(&A)", IDC_CHECK_KEYHELP_ALLSEARCH, "Button", BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP, 7, 200, 105, 10 CONTROL "キーワードも表示する(&W)", IDC_CHECK_KEYHELP_KEYDISP, "Button", BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP, 7, 212, 95, 10 CONTROL "選択範囲で前方一致検索(&P)", IDC_CHECK_KEYHELP_PREFIX, "Button", BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP, 7, 224, 108, 10 - LTEXT "右クリックメニュー(&R)", IDC_STATIC_MENU, 120, 225, 70, 8, NOT WS_GROUP + LTEXT "右クリックメニュー(&R)", IDC_STATIC_MENU, 120, 225, 70, 10, NOT WS_GROUP COMBOBOX IDC_COMBO_MENU, 192, 223, 60, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END @@ -964,52 +964,52 @@ IDD_PROP_WINDOW DIALOGEX 0, 0, 302, 244 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU FONT 9, "MS Pゴシック" BEGIN - LTEXT "入力モード", IDC_STATIC, 5, 6, 40, 8 - LTEXT "改行コード(&E)", IDC_STATIC, 8, 34, 46, 8 + LTEXT "入力モード", IDC_STATIC, 5, 6, 40, 10 + LTEXT "改行コード(&E)", IDC_STATIC, 8, 34, 46, 10 COMBOBOX IDC_COMBO_DEFAULT_EOLTYPE, 57, 32, 52, 57, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "&BOM", IDC_CHECK_DEFAULT_BOM, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 114, 33, 30, 10 - LTEXT "文字コード(&C)", IDC_STATIC, 8, 49, 46, 8 + LTEXT "文字コード(&C)", IDC_STATIC, 8, 49, 46, 10 COMBOBOX IDC_COMBO_DEFAULT_CODETYPE, 57, 47, 52, 57, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "C&P", IDC_CHECK_CP, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 114, 48, 25, 10 CONTROL "自動判別時にCESU-8 を優先する(&U)", IDC_CHECK_PRIOR_CESU8, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 63, 135, 10 GROUPBOX "デフォルトの文字コード", IDC_STATIC, 3, 22, 145, 58 - LTEXT "ON/OFF状態(&M)", IDC_STATIC, 169, 34, 55, 8 + LTEXT "ON/OFF状態(&M)", IDC_STATIC, 169, 34, 55, 10 COMBOBOX IDC_COMBO_IMESWITCH, 232, 32, 61, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "入力モード(&D)", IDC_STATIC, 179, 49, 45, 8 + LTEXT "入力モード(&D)", IDC_STATIC, 179, 49, 45, 10 COMBOBOX IDC_COMBO_IMESTATE, 232, 47, 61, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP GROUPBOX "起動時のIME (日本語入力変換)", IDC_STATIC, 153, 22, 145, 58 CONTROL "", IDC_STATIC, "Static", SS_ETCHEDFRAME, 5, 88, 293, 1 - LTEXT "ウィンドウ", IDC_STATIC, 5, 96, 36, 8 + LTEXT "ウィンドウ", IDC_STATIC, 5, 96, 36, 10 CONTROL "文書アイコンを使う(&O)", IDC_CHECK_DOCICON, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 107, 86, 10 CONTROL "折り返し単位(&R)", IDC_RADIO_LINENUM_LAYOUT, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 8, 134, 60, 10 CONTROL "改行単位(&W)", IDC_RADIO_LINENUM_CRLF, "Button", BS_AUTORADIOBUTTON, 8, 149, 60, 10 - LTEXT "桁数", IDC_STATIC, 18, 165, 16, 8 + LTEXT "桁数", IDC_STATIC, 18, 165, 16, 10 EDITTEXT IDC_EDIT_LINENUMWIDTH, 41, 163, 31, 12, ES_AUTOHSCROLL CONTROL "Spin3", IDC_SPIN_LINENUMWIDTH, "msctls_updown32", UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY, 61, 163, 9, 12 GROUPBOX "行番号の表示", IDC_STATIC, 4, 122, 70, 59, WS_GROUP CONTROL "なし(&N)", IDC_RADIO_LINETERMTYPE0, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 83, 134, 39, 10 CONTROL "縦線(&V)", IDC_RADIO_LINETERMTYPE1, "Button", BS_AUTORADIOBUTTON, 83, 149, 41, 10 CONTROL "任意(&Y)", IDC_RADIO_LINETERMTYPE2, "Button", BS_AUTORADIOBUTTON, 83, 164, 41, 10 - LTEXT "半角(&S)", IDC_LABEL_LINETERMCHAR, 93, 178, 26, 8 + LTEXT "半角(&S)", IDC_LABEL_LINETERMCHAR, 93, 178, 26, 10 EDITTEXT IDC_EDIT_LINETERMCHAR, 124, 177, 15, 12, ES_AUTOHSCROLL GROUPBOX "行番号区切り", IDC_STATIC, 78, 122, 70, 80 EDITTEXT IDC_EDIT_BACKIMG_PATH, 158, 134, 122, 12, ES_AUTOHSCROLL PUSHBUTTON "...", IDC_BUTTON_BACKIMG_PATH_SEL, 282, 134, 12, 12 - LTEXT "表示位置", IDC_STATIC, 158, 150, 40, 8 + LTEXT "表示位置", IDC_STATIC, 158, 150, 40, 10 COMBOBOX IDC_COMBO_BACKIMG_POS, 158, 163, 39, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "X", IDC_STATIC, 200, 165, 8, 8 - LTEXT "Y", IDC_STATIC, 200, 180, 8, 8 - LTEXT "Offset", IDC_STATIC, 210, 150, 25, 8 + LTEXT "X", IDC_STATIC, 200, 165, 8, 10 + LTEXT "Y", IDC_STATIC, 200, 180, 8, 10 + LTEXT "Offset", IDC_STATIC, 210, 150, 25, 10 EDITTEXT IDC_EDIT_BACKIMG_OFFSET_X, 210, 163, 20, 12 EDITTEXT IDC_EDIT_BACKIMG_OFFSET_Y, 210, 178, 20, 12 - LTEXT "Repeat", IDC_STATIC, 235, 150, 26, 8 + LTEXT "Repeat", IDC_STATIC, 235, 150, 26, 10 CONTROL "", IDC_CHECK_BACKIMG_REP_X, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 243, 164, 10, 10 CONTROL "", IDC_CHECK_BACKIMG_REP_Y, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 243, 179, 10, 10 - LTEXT "Scroll", IDC_STATIC, 270, 150, 26, 8 + LTEXT "Scroll", IDC_STATIC, 270, 150, 26, 10 CONTROL "", IDC_CHECK_BACKIMG_SCR_X, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 276, 164, 10, 10 CONTROL "", IDC_CHECK_BACKIMG_SCR_Y, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 276, 179, 10, 10 - LTEXT "透明度", IDC_STATIC, 158, 194, 45, 8 + LTEXT "透明度", IDC_STATIC, 158, 194, 45, 10 CONTROL "",IDC_TRACKBAR_BACKIMG_TRANSPARENCY, "msctls_trackbar32", TBS_BOTH | TBS_NOTICKS | WS_TABSTOP, 205, 193, 60, 12 EDITTEXT IDC_EDIT_BACKIMG_TRANSPARENCY, 265, 193, 28, 12 CONTROL "Spin1", IDC_UPDOWN_BACKIMG_TRANSPARENCY, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 285, 193, 9, 12 @@ -1069,40 +1069,40 @@ STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAP EXSTYLE WS_EX_CONTEXTHELP FONT 9, "MS Pゴシック" BEGIN - GROUPBOX "カーソル", IDC_STATIC, 3, 3, 149, 84 - CONTROL "フリーカーソル(&F)", IDC_CHECK_FREECARET, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 14, 120, 10 - CONTROL "単語単位で移動するときに\n単語の両端に止まる(&B)", IDC_CHECK_STOPS_BOTH_ENDS_WHEN_SEARCH_WORD, "Button", BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP, 8, 26, 120, 19 - CONTROL "段落単位で移動するときに\n段落の両端に止まる(&P)", IDC_CHECK_STOPS_BOTH_ENDS_WHEN_SEARCH_PARAGRAPH, "Button", BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP, 8, 46, 120, 19 - CONTROL "マウスクリックでのアクティブ化では\nカーソルを移動しない(&O)", IDC_CHECK_NOMOVE_ACTIVATE_BY_MOUSE, "Button", BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP, 8, 66, 133, 19 - GROUPBOX "カーソル形状", IDC_STATIC, 3, 89, 149, 24, WS_GROUP - CONTROL "&Windows風", IDC_RADIO_CARETTYPE0, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 8, 99, 61, 10 - CONTROL "MS-&DOS風", IDC_RADIO_CARETTYPE1, "Button", BS_AUTORADIOBUTTON, 69, 99, 61, 10 - GROUPBOX "タスクトレイ", IDC_STATIC, 3, 115, 149, 71, WS_GROUP - CONTROL "タスクトレイを使う(&T)", IDC_CHECK_USETRAYICON, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 127, 81, 10 - CONTROL "タスクトレイに常駐(&R)", IDC_CHECK_STAYTASKTRAY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 141, 104, 10 - LTEXT "左クリックメニューのショートカットキー(&K)", IDC_STATIC, 8, 157, 131, 8 - CONTROL "HotKey1", IDC_HOTKEY_TRAYMENU, "msctls_hotkey32", WS_BORDER | WS_TABSTOP, 8, 167, 95, 12 - CONTROL "同時に複数の編集用ウィンドウを\n閉じるとき確認(&U)", IDC_CHECK_CLOSEALLCONFIRM, "Button", BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 8, 193, 124, 19 - CONTROL "サクラエディタの全終了で編集用\nウィンドウを閉じるとき確認(&V)", IDC_CHECK_EXITCONFIRM, "Button", BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 8, 212, 124, 19 - GROUPBOX "スクロール", IDC_STATIC, 158, 3, 130, 125, WS_GROUP - LTEXT "行数(&N)", IDC_STATIC, 163, 19, 29, 8, NOT WS_GROUP + GROUPBOX "カーソル", IDC_STATIC, 3, 3, 149, 90 + CONTROL "フリーカーソル(&F)", IDC_CHECK_FREECARET, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 16, 120, 10 + CONTROL "単語単位で移動するときに\n単語の両端に止まる(&B)", IDC_CHECK_STOPS_BOTH_ENDS_WHEN_SEARCH_WORD, "Button", BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP, 8, 28, 120, 20 + CONTROL "段落単位で移動するときに\n段落の両端に止まる(&P)", IDC_CHECK_STOPS_BOTH_ENDS_WHEN_SEARCH_PARAGRAPH, "Button", BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP, 8, 48, 120, 20 + CONTROL "マウスクリックでのアクティブ化では\nカーソルを移動しない(&O)", IDC_CHECK_NOMOVE_ACTIVATE_BY_MOUSE, "Button", BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP, 8, 68, 133, 20 + GROUPBOX "カーソル形状", IDC_STATIC, 3, 93, 149, 26, WS_GROUP + CONTROL "&Windows風", IDC_RADIO_CARETTYPE0, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 8, 104, 61, 10 + CONTROL "MS-&DOS風", IDC_RADIO_CARETTYPE1, "Button", BS_AUTORADIOBUTTON, 69, 104, 61, 10 + GROUPBOX "タスクトレイ", IDC_STATIC, 3, 122, 149, 68, WS_GROUP + CONTROL "タスクトレイを使う(&T)", IDC_CHECK_USETRAYICON, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 135, 81, 10 + CONTROL "タスクトレイに常駐(&R)", IDC_CHECK_STAYTASKTRAY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 148, 104, 10 + LTEXT "左クリックメニューのショートカットキー(&K)", IDC_STATIC, 8, 161, 131, 10 + CONTROL "HotKey1", IDC_HOTKEY_TRAYMENU, "msctls_hotkey32", WS_BORDER | WS_TABSTOP, 8, 172, 95, 12 + CONTROL "同時に複数の編集用ウィンドウを\n閉じるとき確認(&U)", IDC_CHECK_CLOSEALLCONFIRM, "Button", BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 8, 194, 124, 20 + CONTROL "サクラエディタの全終了で編集用\nウィンドウを閉じるとき確認(&V)", IDC_CHECK_EXITCONFIRM, "Button", BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 8, 214, 124, 20 + GROUPBOX "スクロール", IDC_STATIC, 158, 3, 130, 135, WS_GROUP + LTEXT "行数(&N)", IDC_STATIC, 163, 19, 29, 10, NOT WS_GROUP EDITTEXT IDC_EDIT_REPEATEDSCROLLLINENUM, 196, 17, 40, 12, ES_AUTOHSCROLL | WS_GROUP CONTROL "Spin3", IDC_SPIN_REPEATEDSCROLLLINENUM, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 236, 17, 9, 12 CONTROL "少し滑らかにする(&S)", IDC_CHECK_REPEATEDSCROLLSMOOTH, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 163, 33, 80, 10 - LTEXT "組み合わせてホイール操作した時\nページスクロールする(&J)", IDC_STATIC, 163, 49, 110, 16, NOT WS_GROUP - COMBOBOX IDC_COMBO_WHEEL_PAGESCROLL, 178, 67, 85, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "組み合わせてホイール操作した時\n横スクロールする(&H)", IDC_STATIC, 163, 88, 111, 16, NOT WS_GROUP - COMBOBOX IDC_COMBO_WHEEL_HSCROLL, 178, 108, 85, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "画面キャッシュを使う(&G)", IDC_CHECK_MEMDC, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 163, 134, 96, 16 - GROUPBOX "履歴", IDC_STATIC, 158, 152, 130, 82, WS_GROUP - LTEXT "ファイルの履歴&MAX", IDC_STATIC, 163, 167, 74, 8, NOT WS_GROUP - EDITTEXT IDC_EDIT_MAX_MRU_FILE, 168, 178, 28, 12, ES_AUTOHSCROLL | WS_GROUP - CONTROL "Spin1", IDC_SPIN_MAX_MRU_FILE, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 196, 178, 9, 12 - PUSHBUTTON "履歴をクリア(&C)...", IDC_BUTTON_CLEAR_MRU_FILE, 208, 177, 61, 14 - LTEXT "フォルダの履歴MA&X", IDC_STATIC, 163, 200, 74, 8 - EDITTEXT IDC_EDIT_MAX_MRU_FOLDER, 168, 211, 28, 12, ES_AUTOHSCROLL | WS_GROUP - CONTROL "Spin1", IDC_SPIN_MAX_MRU_FOLDER, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 196, 211, 9, 12 - PUSHBUTTON "履歴をクリア(&L)...", IDC_BUTTON_CLEAR_MRU_FOLDER, 208, 210, 61, 14 + LTEXT "組み合わせてホイール操作した時\nページスクロールする(&J)", IDC_STATIC, 163, 48, 110, 20, NOT WS_GROUP + COMBOBOX IDC_COMBO_WHEEL_PAGESCROLL, 178, 72, 85, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "組み合わせてホイール操作した時\n横スクロールする(&H)", IDC_STATIC, 163, 90, 111, 20, NOT WS_GROUP + COMBOBOX IDC_COMBO_WHEEL_HSCROLL, 178, 114, 85, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "画面キャッシュを使う(&G)", IDC_CHECK_MEMDC, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 163, 142, 96, 16 + GROUPBOX "履歴", IDC_STATIC, 158, 160, 130, 74, WS_GROUP + LTEXT "ファイルの履歴&MAX", IDC_STATIC, 163, 172, 74, 10, NOT WS_GROUP + EDITTEXT IDC_EDIT_MAX_MRU_FILE, 168, 184, 28, 12, ES_AUTOHSCROLL | WS_GROUP + CONTROL "Spin1", IDC_SPIN_MAX_MRU_FILE, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 196, 184, 9, 12 + PUSHBUTTON "履歴をクリア(&C)...", IDC_BUTTON_CLEAR_MRU_FILE, 208, 184, 61, 14 + LTEXT "フォルダの履歴MA&X", IDC_STATIC, 163, 202, 74, 10 + EDITTEXT IDC_EDIT_MAX_MRU_FOLDER, 168, 214, 28, 12, ES_AUTOHSCROLL | WS_GROUP + CONTROL "Spin1", IDC_SPIN_MAX_MRU_FOLDER, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 196, 214, 9, 12 + PUSHBUTTON "履歴をクリア(&L)...", IDC_BUTTON_CLEAR_MRU_FOLDER, 208, 214, 61, 14 END IDD_PROP_WIN DIALOGEX 0, 0, 293, 240 @@ -1110,44 +1110,44 @@ STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAP EXSTYLE WS_EX_CONTEXTHELP FONT 9, "MS Pゴシック" BEGIN - CONTROL "ツールバー表示(&T)", IDC_CHECK_DispTOOLBAR, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 7, 13, 76, 10 - CONTROL "ファンクションキー表示(&K)", IDC_CHECK_DispFUNCKEYWND, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 25, 96, 10 - CONTROL "ステータスバー表示(&S)", IDC_CHECK_DispSTATUSBAR, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 37, 88, 10 - CONTROL "水平スクロールバー(&R)", IDC_CHECK_bScrollBarHorz, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 104, 13, 89, 10 - CONTROL "アイコン付きメニュー(&I)", IDC_CHECK_bMenuIcon, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 195, 13, 87, 10 - PUSHBUTTON "位置と大きさの設定(&W)...", IDC_BUTTON_WINSIZE, 202, 33, 83, 14 - LTEXT "タブバー表示は\n[タブバー]タブにあります", IDC_STATIC, 111, 30, 83, 17 - GROUPBOX "基本設定", IDC_STATIC, 3, 3, 285, 49, WS_GROUP - LTEXT "ルーラーの高さ(&E)", IDC_STATIC, 7, 68, 58, 8 - EDITTEXT IDC_EDIT_nRulerHeight, 101, 66, 28, 12, ES_AUTOHSCROLL - CONTROL "Spin1", IDC_SPIN_nRulerHeight, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 124, 66, 10, 12 - LTEXT "ドット", IDC_STATIC, 133, 68, 17, 8 - LTEXT "ルーラーとテキストの隙間(&P)", IDC_STATIC, 7, 81, 91, 8 - EDITTEXT IDC_EDIT_nRulerBottomSpace, 101, 80, 28, 12, ES_AUTOHSCROLL - CONTROL "Spin1", IDC_SPIN_nRulerBottomSpace, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 124, 79, 10, 12 - LTEXT "ドット", IDC_STATIC, 133, 81, 17, 8 - LTEXT "行番号とテキストの隙間(&L)", IDC_STATIC, 7, 96, 86, 8 - EDITTEXT IDC_EDIT_nLineNumberRightSpace, 101, 94, 28, 12, ES_AUTOHSCROLL - CONTROL "Spin1", IDC_SPIN_nLineNumberRightSpace, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 124, 94, 10, 12 - LTEXT "ドット", IDC_STATIC, 133, 96, 17, 8 - GROUPBOX "ルーラー / 行番号", IDC_STATIC, 3, 56, 153, 54 - CONTROL "垂直スクロールの同期をとる(&V)", IDC_CHECK_SplitterWndVScroll, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 126, 115, 10 - CONTROL "水平スクロールの同期をとる(&H)", IDC_CHECK_SplitterWndHScroll, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 139, 116, 10 - GROUPBOX "分割ウィンドウ", IDC_STATIC, 3, 114, 153, 39, WS_GROUP - LTEXT "位置", IDC_STATIC, 167, 68, 16, 8 - CONTROL "上(&O)", IDC_RADIO_FUNCKEYWND_PLACE1, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 191, 68, 34, 10 - CONTROL "下(&B)", IDC_RADIO_FUNCKEYWND_PLACE2, "Button", BS_AUTORADIOBUTTON, 227, 68, 34, 10 - LTEXT "グループボタン数(&G)", IDC_STATIC, 167, 81, 67, 10 - EDITTEXT IDC_EDIT_FUNCKEYWND_GROUPNUM, 236, 80, 28, 12, ES_AUTOHSCROLL | ES_NUMBER - CONTROL "Spin1", IDC_SPIN_FUNCKEYWND_GROUPNUM, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 262, 80, 10, 12 - GROUPBOX "ファンクションキー", IDC_STATIC, 162, 56, 126, 40 - LTEXT "アクティブ時(&1)", IDC_STATIC, 7, 171, 59, 8 - EDITTEXT IDC_WINCAPTION_ACTIVE, 67, 168, 216, 14, ES_AUTOHSCROLL - LTEXT "非アクティブ時(&2)", IDC_STATIC, 7, 188, 58, 8 - EDITTEXT IDC_WINCAPTION_INACTIVE, 67, 185, 216, 14, ES_AUTOHSCROLL - GROUPBOX "タイトルバー", IDC_STATIC, 3, 157, 285, 47 - GROUPBOX "言語", IDC_STATIC, 162, 100, 126, 40 - COMBOBOX IDC_COMBO_LANGUAGE, 178, 118, 105, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "ツールバー表示(&T)", IDC_CHECK_DispTOOLBAR, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 7, 17, 76, 10 + CONTROL "ファンクションキー表示(&K)", IDC_CHECK_DispFUNCKEYWND, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 30, 96, 10 + CONTROL "ステータスバー表示(&S)", IDC_CHECK_DispSTATUSBAR, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 43, 88, 10 + CONTROL "水平スクロールバー(&R)", IDC_CHECK_bScrollBarHorz, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 104, 17, 89, 10 + CONTROL "アイコン付きメニュー(&I)", IDC_CHECK_bMenuIcon, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 195, 17, 87, 10 + PUSHBUTTON "位置と大きさの設定(&W)...", IDC_BUTTON_WINSIZE, 202, 35, 83, 14 + LTEXT "タブバー表示は\n[タブバー]タブにあります", IDC_STATIC, 111, 32, 83, 20 + GROUPBOX "基本設定", IDC_STATIC, 3, 3, 285, 57, WS_GROUP + LTEXT "ルーラーの高さ(&E)", IDC_STATIC, 7, 76, 58, 10 + EDITTEXT IDC_EDIT_nRulerHeight, 101, 74, 28, 12, ES_AUTOHSCROLL + CONTROL "Spin1", IDC_SPIN_nRulerHeight, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 124, 74, 10, 12 + LTEXT "ドット", IDC_STATIC, 133, 76, 17, 10 + LTEXT "ルーラーとテキストの隙間(&P)", IDC_STATIC, 7, 89, 91, 10 + EDITTEXT IDC_EDIT_nRulerBottomSpace, 101, 88, 28, 12, ES_AUTOHSCROLL + CONTROL "Spin1", IDC_SPIN_nRulerBottomSpace, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 124, 87, 10, 12 + LTEXT "ドット", IDC_STATIC, 133, 89, 17, 10 + LTEXT "行番号とテキストの隙間(&L)", IDC_STATIC, 7, 104, 86, 10 + EDITTEXT IDC_EDIT_nLineNumberRightSpace, 101, 102, 28, 12, ES_AUTOHSCROLL + CONTROL "Spin1", IDC_SPIN_nLineNumberRightSpace, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 124, 102, 10, 12 + LTEXT "ドット", IDC_STATIC, 133, 104, 17, 10 + GROUPBOX "ルーラー / 行番号", IDC_STATIC, 3, 64, 153, 54 + CONTROL "垂直スクロールの同期をとる(&V)", IDC_CHECK_SplitterWndVScroll, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 134, 115, 10 + CONTROL "水平スクロールの同期をとる(&H)", IDC_CHECK_SplitterWndHScroll, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 147, 116, 10 + GROUPBOX "分割ウィンドウ", IDC_STATIC, 3, 122, 153, 39, WS_GROUP + LTEXT "位置", IDC_STATIC, 167, 76, 16, 10 + CONTROL "上(&O)", IDC_RADIO_FUNCKEYWND_PLACE1, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 191, 76, 34, 10 + CONTROL "下(&B)", IDC_RADIO_FUNCKEYWND_PLACE2, "Button", BS_AUTORADIOBUTTON, 227, 76, 34, 10 + LTEXT "グループボタン数(&G)", IDC_STATIC, 167, 89, 67, 10 + EDITTEXT IDC_EDIT_FUNCKEYWND_GROUPNUM, 236, 88, 28, 12, ES_AUTOHSCROLL | ES_NUMBER + CONTROL "Spin1", IDC_SPIN_FUNCKEYWND_GROUPNUM, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 262, 88, 10, 12 + GROUPBOX "ファンクションキー", IDC_STATIC, 162, 64, 126, 40 + LTEXT "アクティブ時(&1)", IDC_STATIC, 7, 179, 59, 10 + EDITTEXT IDC_WINCAPTION_ACTIVE, 67, 176, 216, 14, ES_AUTOHSCROLL + LTEXT "非アクティブ時(&2)", IDC_STATIC, 7, 196, 58, 10 + EDITTEXT IDC_WINCAPTION_INACTIVE, 67, 193, 216, 14, ES_AUTOHSCROLL + GROUPBOX "タイトルバー", IDC_STATIC, 3, 165, 285, 47 + GROUPBOX "言語", IDC_STATIC, 162, 108, 126, 40 + COMBOBOX IDC_COMBO_LANGUAGE, 178, 126, 105, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END IDD_PROP_TOOLBAR DIALOGEX 0, 0, 293, 240 @@ -1155,12 +1155,12 @@ STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP FONT 9, "MS Pゴシック" BEGIN - RTEXT "種別(&K)", IDC_LABEL_MENUFUNCKIND, 4, 4, 51, 8 + RTEXT "種別(&K)", IDC_LABEL_MENUFUNCKIND, 4, 4, 51, 10 COMBOBOX IDC_COMBO_FUNCKIND, 56, 2, 70, 170, CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - LTEXT "機能(&F)", IDC_LABEL_MENUFUNC, 3, 15, 40, 8 + LTEXT "機能(&F)", IDC_LABEL_MENUFUNC, 3, 15, 40, 10 LISTBOX IDC_LIST_FUNC, 3, 25, 123, 199, LBS_OWNERDRAWFIXED | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP CONTROL "フラットなボタン(&L)", IDC_CHECK_TOOLBARISFLAT, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 202, 2, 73, 10 - LTEXT "ツールバー(&T)", IDC_LABEL_TOOLBAR, 164, 15, 46, 8 + LTEXT "ツールバー(&T)", IDC_LABEL_TOOLBAR, 164, 15, 46, 10 LISTBOX IDC_LIST_RES, 164, 25, 123, 199, LBS_OWNERDRAWFIXED | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP PUSHBUTTON "削除(&D)", IDC_BUTTON_DELETE, 129, 32, 33, 14, WS_GROUP PUSHBUTTON "---(&S)", IDC_BUTTON_INSERTSEPARATOR, 129, 51, 33, 14 @@ -1184,13 +1184,13 @@ BEGIN GROUPBOX "動作モード", IDC_STATIC, 7, 27, 280, 68 CONTROL "アイコン表示(&I)", IDC_CHECK_DispTabIcon, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 15, 115, 63, 10 CONTROL "等幅(&E)", IDC_CHECK_SameTabWidth, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 80, 115, 39, 10 - LTEXT "閉じるボタン(&X)", IDC_TextTabClose, 124, 116, 48, 8 + LTEXT "閉じるボタン(&X)", IDC_TextTabClose, 124, 116, 48, 10 COMBOBOX IDC_CHECK_DispTabClose, 173, 113, 46, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "フォント(&F)...", IDC_BUTTON_TABFONT, 232, 113, 51, 14 RTEXT "Font", IDC_STATIC_TABFONT, 102, 127, 180, 17, SS_RIGHT CONTROL "タブ一覧をソートする(&S)", IDC_CHECK_SortTabList, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 15, 129, 85, 10 CONTROL "多段(&M)", IDC_CHECK_TAB_MULTILINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 15, 141, 60, 10 - RTEXT "表示位置(&P)", IDC_TAB_POSITION, 80, 143, 40, 8 + RTEXT "表示位置(&P)", IDC_TAB_POSITION, 80, 143, 40, 10 COMBOBOX IDC_COMBO_TAB_POSITION, 124, 140, 46, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP LTEXT "タイトル(&T)", IDC_TextTabCaption, 15, 160, 40, 10 EDITTEXT IDC_TABWND_CAPTION, 56, 157, 226, 14, ES_AUTOHSCROLL @@ -1235,9 +1235,9 @@ BEGIN GROUPBOX "上書きモード", IDC_STATIC, 3, 143, 149, 58, WS_GROUP CONTROL "クリックで&URLを選択する", IDC_CHECK_bSelectClickedURL, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 161, 18, 120, 10 GROUPBOX "クリッカブルURL", IDC_STATIC, 156, 3, 131, 35, WS_GROUP - CONTROL "カレントフォルダ(&U)", IDC_RADIO_CURDIR, "Button", BS_AUTORADIOBUTTON, 161, 54, 90, 8 - CONTROL "最近使ったフォルダ(&M)", IDC_RADIO_MRUDIR, "Button", BS_AUTORADIOBUTTON, 161, 69, 90, 8 - CONTROL "指定フォルダ(&F)", IDC_RADIO_SELDIR, "Button", BS_AUTORADIOBUTTON, 161, 84, 90, 8 + CONTROL "カレントフォルダ(&U)", IDC_RADIO_CURDIR, "Button", BS_AUTORADIOBUTTON, 161, 54, 90, 10 + CONTROL "最近使ったフォルダ(&M)", IDC_RADIO_MRUDIR, "Button", BS_AUTORADIOBUTTON, 161, 69, 90, 10 + CONTROL "指定フォルダ(&F)", IDC_RADIO_SELDIR, "Button", BS_AUTORADIOBUTTON, 161, 84, 90, 10 EDITTEXT IDC_EDIT_FILEOPENDIR, 161, 100, 111, 12, ES_AUTOHSCROLL PUSHBUTTON "...", IDC_BUTTON_FILEOPENDIR, 273, 100, 9, 12 GROUPBOX "ファイルダイアログの初期位置", IDC_STATIC, 156, 41, 130, 79, WS_GROUP @@ -1252,30 +1252,30 @@ STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP FONT 9, "MS Pゴシック" BEGIN - LTEXT "排他制御(&H)", IDC_STATIC, 8, 16, 48, 10 - COMBOBOX IDC_COMBO_FILESHAREMODE, 60, 14, 84, 78, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "更新の監視(&W)", IDC_CHECK_bCheckFileTimeStamp, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 31, 60, 10 - LTEXT "自動読込時遅延(&A)", IDC_LABEL_AUTOLOAD_DELAY, 68, 32, 62, 10 - EDITTEXT IDC_EDIT_AUTOLOAD_DELAY, 130, 30, 30, 12 - CONTROL "Spin1", IDC_SPIN_AUTOLOAD_DELAY, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 150, 30, 9, 12 + LTEXT "排他制御(&H)", IDC_STATIC, 8, 18, 48, 10 + COMBOBOX IDC_COMBO_FILESHAREMODE, 60, 16, 84, 78, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "更新の監視(&W)", IDC_CHECK_bCheckFileTimeStamp, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 33, 60, 10 + LTEXT "自動読込時遅延(&A)", IDC_LABEL_AUTOLOAD_DELAY, 68, 33, 62, 10 + EDITTEXT IDC_EDIT_AUTOLOAD_DELAY, 130, 33, 30, 12 + CONTROL "Spin1", IDC_SPIN_AUTOLOAD_DELAY, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 150, 33, 9, 12 CONTROL "上書き禁止検出時は編集禁止にする(&N)", IDC_CHECK_bUneditableIfUnwritable, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 46, 154, 10 GROUPBOX "ファイルの排他制御", IDC_STATIC, 3, 3, 163, 57, WS_GROUP CONTROL "無変更でも上書きする(&S)", IDC_CHECK_ENABLEUNMODIFIEDOVERWRITE, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 175, 16, 111, 10 CONTROL "自動的に保存する(&U)", IDC_CHECK_AUTOSAVE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 175, 31, 84, 10 - LTEXT "間隔は(&I)", IDC_LABEL_AUTOSAVE, 186, 47, 31, 8, NOT WS_GROUP + LTEXT "間隔は(&I)", IDC_LABEL_AUTOSAVE, 186, 47, 31, 10, NOT WS_GROUP EDITTEXT IDC_EDIT_AUTOBACKUP_INTERVAL, 219, 45, 30, 12 CONTROL "Spin1", IDC_SPIN_AUTOBACKUP_INTERVAL, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 266, 45, 9, 12 - LTEXT "分ごと", IDC_LABEL_AUTOSAVE2, 250, 47, 21, 8, NOT WS_GROUP + LTEXT "分ごと", IDC_LABEL_AUTOSAVE2, 250, 47, 21, 10, NOT WS_GROUP GROUPBOX "ファイルの保存", IDC_STATIC, 170, 3, 118, 57, WS_GROUP CONTROL "新規から保存時は全ファイル表示(&O)", IDC_CHECK_NoFilterSaveNew, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 77, 133, 10 CONTROL "新規以外から保存時は全ファイル表示(&F)", IDC_CHECK_NoFilterSaveFile, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 142, 77, 142, 10 GROUPBOX "「名前を付けて保存」でファイルの種類が[ユーザー指定]のときのファイル一覧表示", IDC_STATIC, 3, 65, 285, 28 CONTROL "ファイルのドロップは「閉じて開く」にする(&L)", IDC_CHECK_bDropFileAndClose, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 110, 149, 10 - LTEXT "ファイルのドロップは一度に&MAX", IDC_LABEL_AUTOSAVE3, 18, 126, 101, 8, NOT WS_GROUP + LTEXT "ファイルのドロップは一度に&MAX", IDC_LABEL_AUTOSAVE3, 18, 126, 101, 10, NOT WS_GROUP EDITTEXT IDC_EDIT_nDropFileNumMax, 123, 124, 25, 12, ES_AUTOHSCROLL CONTROL "Spin1", IDC_SPIN_nDropFileNumMax, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 179, 124, 9, 12 - LTEXT "個までとする", IDC_LABEL_AUTOSAVE4, 151, 126, 41, 8, NOT WS_GROUP - LTEXT "←注:ドロップファイルは1つのみ有効", IDC_LANEL_NOTE, 161, 111, 106, 8 + LTEXT "個までとする", IDC_LABEL_AUTOSAVE4, 151, 126, 41, 10, NOT WS_GROUP + LTEXT "←注:ドロップファイルは1つのみ有効", IDC_LANEL_NOTE, 161, 111, 106, 10 CONTROL "ファイルを開いたときにカーソル位置を復元する(&C)", IDC_CHECK_RestoreCurPosition, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 140, 174, 10 CONTROL "ファイルを開いたときにブックマークを復元する(&B)", IDC_CHECK_RestoreBookmarks, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 155, 214, 10 CONTROL "ファイルを開いたときにMIMEエンコードされたヘッダをデコードする(&D)", IDC_CHECK_AutoMIMEDecode, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 169, 231, 10 @@ -1328,7 +1328,7 @@ BEGIN CONTROL "ファイル名の後ろに保存時の日付・時刻を付加したもの(&E)", IDC_RADIO_BACKUP_DATETYPE1, "Button", BS_AUTORADIOBUTTON, 12, 106, 204, 10 CONTROL "ファイル名の後ろに前回の保存時の日付・時刻を付加したもの(&U)", IDC_RADIO_BACKUP_DATETYPE2, "Button", BS_AUTORADIOBUTTON, 12, 120, 230, 10 CONTROL "元の拡張子を保存(&R)", IDC_CHECK_BACKUP_RETAINEXT, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 162, 66, 96, 10 - LTEXT "保存する世代数(1-99 &N)", IDC_LABEL_BACKUP_3, 22, 94, 91, 8 + LTEXT "保存する世代数(1-99 &N)", IDC_LABEL_BACKUP_3, 22, 94, 91, 10 EDITTEXT IDC_EDIT_BACKUP_3, 106, 92, 28, 12 CONTROL "Spin1", IDC_SPIN_BACKUP_GENS, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 154, 92, 9, 12 CONTROL "西暦(&Y)", IDC_CHECK_BACKUP_YEAR, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 22, 132, 35, 10 @@ -1345,7 +1345,7 @@ BEGIN CONTROL "指定フォルダに作成する(&P)", IDC_CHECK_BACKUPFOLDER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 12, 148, 107, 10 AUTOCHECKBOX "リムーバブルメディアのみ(&L)", IDC_CHECK_BACKUP_FOLDER_RM, 120, 148, 133, 10 - LTEXT "フォルダ名(&F)", IDC_LABEL_BACKUP_4, 24, 162, 87, 8 + LTEXT "フォルダ名(&F)", IDC_LABEL_BACKUP_4, 24, 162, 87, 10 EDITTEXT IDC_EDIT_BACKUPFOLDER, 73, 160, 195, 12, ES_AUTOHSCROLL PUSHBUTTON "&...", IDC_BUTTON_BACKUP_FOLDER_REF, 271, 160, 9, 12 CONTROL "バックアップファイルをごみ箱に放り込む(&X)", IDC_CHECK_BACKUP_DUSTBOX, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 12, 176, 150, 10 @@ -1360,17 +1360,17 @@ FONT 9, "MS Pゴシック" BEGIN CONTROL "標準(&S)", IDC_RADIO_DFORM_0, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 8, 18, 41, 10 CONTROL "カスタム(&C)", IDC_RADIO_DFORM_1, "Button", BS_AUTORADIOBUTTON, 51, 18, 52, 10 - LTEXT "&D:", IDC_LABEL_DFORM, 106, 19, 8, 8 + LTEXT "&D:", IDC_LABEL_DFORM, 106, 19, 8, 10 EDITTEXT IDC_EDIT_DFORM, 115, 17, 82, 12, ES_AUTOHSCROLL GROUPBOX "日付書式", IDC_STATIC, 3, 3, 199, 35, WS_GROUP - LTEXT "表示例", IDC_STATIC, 209, 7, 27, 8, NOT WS_GROUP + LTEXT "表示例", IDC_STATIC, 209, 7, 27, 10, NOT WS_GROUP EDITTEXT IDC_EDIT_DFORM_EX, 209, 17, 77, 12, ES_AUTOHSCROLL | ES_READONLY | NOT WS_TABSTOP CONTROL "標準(&N)", IDC_RADIO_TFORM_0, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 8, 58, 41, 10 CONTROL "カスタム(&U)", IDC_RADIO_TFORM_1, "Button", BS_AUTORADIOBUTTON, 51, 58, 52, 10 - LTEXT "&T:", IDC_LABEL_TFORM, 106, 59, 8, 8 + LTEXT "&T:", IDC_LABEL_TFORM, 106, 59, 8, 10 EDITTEXT IDC_EDIT_TFORM, 115, 57, 82, 12, ES_AUTOHSCROLL GROUPBOX "時刻書式", IDC_STATIC, 3, 43, 199, 35, WS_GROUP - LTEXT "表示例", IDC_STATIC, 209, 47, 27, 8, NOT WS_GROUP + LTEXT "表示例", IDC_STATIC, 209, 47, 27, 10, NOT WS_GROUP EDITTEXT IDC_EDIT_TFORM_EX, 209, 57, 77, 12, ES_AUTOHSCROLL | ES_READONLY | NOT WS_TABSTOP GROUPBOX "見出し記号(&R)", IDC_STATIC, 3, 83, 283, 52, WS_GROUP EDITTEXT IDC_EDIT_MIDASHIKIGOU, 8, 95, 272, 31, ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | WS_GROUP @@ -1383,8 +1383,8 @@ STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAP EXSTYLE WS_EX_CONTEXTHELP FONT 9, "MS Pゴシック" BEGIN - CONTROL "カーソル位置の文字列をデフォルトの検索文字列にする(&C)", IDC_CHECK_bCaretTextForSearch, "Button", BS_AUTOCHECKBOX | BS_TOP | WS_GROUP | WS_TABSTOP, 8, 21, 204, 10 - CONTROL "次・前検索で他のビューでの検索条件変更を引き継ぐ(&I)", IDC_CHECK_INHERIT_KEY_OTHER_VIEW, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 35, 209, 10 + CONTROL "カーソル位置の文字列をデフォルトの検索文字列にする(&C)", IDC_CHECK_bCaretTextForSearch, "Button", BS_AUTOCHECKBOX | BS_TOP | WS_GROUP | WS_TABSTOP, 8, 21, 204, 12 + CONTROL "次・前検索で他のビューでの検索条件変更を引き継ぐ(&I)", IDC_CHECK_INHERIT_KEY_OTHER_VIEW, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 33, 209, 12 LTEXT "正規表現ライブラリ指定(&L)", IDC_LABEL_REGEXP, 8, 50, 93, 10 LTEXT "", IDC_LABEL_REGEXP_VER, 8, 62, 275, 14 EDITTEXT IDC_EDIT_REGEXPLIB, 110, 47, 162, 13, ES_AUTOHSCROLL @@ -1396,9 +1396,9 @@ BEGIN CONTROL "ダブルクリックでタグジャンプ(&W)", IDC_CHECK_GTJW_LDBLCLK, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 154, 115, 10 GROUPBOX "Grep結果からのタグジャンプ", IDC_STATIC, 3, 127, 285, 46, WS_GROUP GROUPBOX "タグジャンプ", IDC_STATIC, 3, 178, 285, 52, WS_GROUP - LTEXT "タグファイルの検索(&T):", IDC_STATIC, 8, 192, 112, 8 + LTEXT "タグファイルの検索(&T):", IDC_STATIC, 8, 192, 112, 10 COMBOBOX IDC_COMBO_TAGJUMP, 124, 190, 156, 100, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - LTEXT "キーワード指定のタグファイル検索(&K):", IDC_STATIC, 8, 210, 112, 8 + LTEXT "キーワード指定のタグファイル検索(&K):", IDC_STATIC, 8, 210, 112, 10 COMBOBOX IDC_COMBO_KEYWORD_TAGJUMP, 124, 208, 156, 100, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP END @@ -1407,20 +1407,20 @@ STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP FONT 9, "MS Pゴシック" BEGIN - RTEXT "種別(&K)", IDC_LABEL_MENUFUNCKIND, 4, 4, 51, 8 + RTEXT "種別(&K)", IDC_LABEL_MENUFUNCKIND, 4, 4, 51, 10 COMBOBOX IDC_COMBO_FUNCKIND, 60, 2, 68, 180, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - LTEXT "機能(&F)", IDC_LABEL_MENUFUNC, 3, 18, 41, 8 + LTEXT "機能(&F)", IDC_LABEL_MENUFUNC, 3, 18, 41, 10 LISTBOX IDC_LIST_FUNC, 3, 28, 124, 143, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - LTEXT "機能に割り当てられているキー(&G)", IDC_LABEL_FUNCtoKEY, 6, 175, 113, 8, NOT WS_GROUP + LTEXT "機能に割り当てられているキー(&G)", IDC_LABEL_FUNCtoKEY, 6, 173, 113, 10, NOT WS_GROUP LISTBOX IDC_LIST_ASSIGNEDKEYS, 3, 184, 124, 33, LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_GROUP | WS_TABSTOP PUSHBUTTON "インポート(&I)...", IDC_BUTTON_IMPORT, 171, 2, 58, 14, WS_GROUP PUSHBUTTON "エクスポート(&X)...", IDC_BUTTON_EXPORT, 231, 2, 58, 14 - LTEXT "キー(&Y)", IDC_LABEL_KEYKIND, 164, 18, 25, 8 + LTEXT "キー(&Y)", IDC_LABEL_KEYKIND, 164, 18, 25, 10 LISTBOX IDC_LIST_KEY, 165, 28, 124, 164, LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP CONTROL "&Shift", IDC_CHECK_SHIFT, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 134, 38, 25, 10 CONTROL "&Ctrl", IDC_CHECK_CTRL, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 134, 53, 25, 10 CONTROL "A&Lt", IDC_CHECK_ALT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 134, 68, 25, 10 - LTEXT "キーに割り当てられている機能", IDC_LABEL_KEYtoFUNC, 166, 196, 120, 8 + LTEXT "キーに割り当てられている機能", IDC_LABEL_KEYtoFUNC, 166, 194, 120, 10 EDITTEXT IDC_EDIT_KEYSFUNC, 164, 205, 118, 12, ES_AUTOHSCROLL | ES_READONLY | WS_GROUP | NOT WS_TABSTOP PUSHBUTTON "割付(&B)", IDC_BUTTON_ASSIGN, 129, 190, 34, 14, WS_GROUP PUSHBUTTON "解除(&R)", IDC_BUTTON_RELEASE, 129, 204, 34, 14 @@ -1431,16 +1431,16 @@ STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP FONT 9, "MS Pゴシック" BEGIN - RTEXT "種別(&K)", IDC_LABEL_MENUFUNCKIND, 4, 4, 52, 8 + RTEXT "種別(&K)", IDC_LABEL_MENUFUNCKIND, 4, 4, 52, 10 COMBOBOX IDC_COMBO_FUNCKIND, 60, 2, 68, 180, CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - LTEXT "機能(&F)", IDC_LABEL_MENUFUNC, 3, 16, 40, 8, NOT WS_GROUP + LTEXT "機能(&F)", IDC_LABEL_MENUFUNC, 3, 16, 40, 10, NOT WS_GROUP LISTBOX IDC_LIST_FUNC, 3, 27, 124, 178, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - RTEXT "選択(&C)", IDC_LABEL_MENUCHOICE, 187, 4, 31, 8 + RTEXT "選択(&C)", IDC_LABEL_MENUCHOICE, 187, 4, 31, 10 COMBOBOX IDC_COMBO_MENU, 221, 2, 68, 220, CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - LTEXT "メニュー名(&N)", IDC_LABEL_MENUNAME, 142, 16, 64, 8, NOT WS_GROUP + LTEXT "メニュー名(&N)", IDC_LABEL_MENUNAME, 142, 16, 64, 10, NOT WS_GROUP EDITTEXT IDC_EDIT_MENUNAME, 146, 27, 109, 14, ES_AUTOHSCROLL PUSHBUTTON "設定(&R)", IDC_BUTTON_MENUNAME, 258, 27, 30, 14 - LTEXT "メニュー(&M)", IDC_LABEL_MENU, 142, 44, 37, 8, NOT WS_GROUP + LTEXT "メニュー(&M)", IDC_LABEL_MENU, 142, 44, 37, 10, NOT WS_GROUP LISTBOX IDC_LIST_RES, 164, 54, 123, 151, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP PUSHBUTTON "削除(&D)", IDC_BUTTON_DELETE, 130, 62, 30, 14, WS_GROUP PUSHBUTTON "---(&S)", IDC_BUTTON_INSERTSEPARATOR, 130, 81, 30, 14, BS_MULTILINE @@ -1448,8 +1448,8 @@ BEGIN PUSHBUTTON ">>(&B)", IDC_BUTTON_ADD, 128, 115, 34, 14, BS_MULTILINE PUSHBUTTON "↑(&U)", IDC_BUTTON_UP, 128, 135, 34, 14 PUSHBUTTON "↓(&O)", IDC_BUTTON_DOWN, 128, 149, 34, 14 - LTEXT "↑ダブルクリックでアクセスキー設定可", IDC_LABEL_MENUKEYCHANGE, 174, 208, 114, 8 - CONTROL "サブメニューとして表示(&S)", IDC_CHECK_SUBMENU, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 164, 220, 114, 8 + LTEXT "↑ダブルクリックでアクセスキー設定可", IDC_LABEL_MENUKEYCHANGE, 174, 208, 114, 10 + CONTROL "サブメニューとして表示(&S)", IDC_CHECK_SUBMENU, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 164, 220, 114, 10 PUSHBUTTON "インポート(&I)...", IDC_BUTTON_IMPORT, 3, 208, 58, 14, WS_GROUP PUSHBUTTON "エクスポート(&X)...", IDC_BUTTON_EXPORT, 64, 208, 58, 14 END @@ -1459,20 +1459,20 @@ STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP FONT 9, "MS Pゴシック" BEGIN - LTEXT "セット名(&N)", IDC_STATIC, 3, 6, 37, 8 - COMBOBOX IDC_COMBO_SET, 42, 3, 85, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "セット名(&N)", IDC_STATIC, 3, 6, 37, 10 + COMBOBOX IDC_COMBO_SET, 42, 5, 85, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "セット追加(&M)...", IDC_BUTTON_ADDSET, 181, 5, 53, 14, WS_GROUP PUSHBUTTON "セット削除(&R)...", IDC_BUTTON_DELSET, 236, 5, 52, 14 - GROUPBOX "強調キーワード(&K)", IDC_STATIC, 3, 20, 285, 217, WS_GROUP - CONTROL "List5", IDC_LIST_KEYWORD, "SysListView32", LVS_LIST | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_EDITLABELS | LVS_ALIGNLEFT | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 5, 30, 280, 171 + GROUPBOX "強調キーワード(&K)", IDC_STATIC, 3, 22, 285, 215, WS_GROUP + CONTROL "List5", IDC_LIST_KEYWORD, "SysListView32", LVS_LIST | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_EDITLABELS | LVS_ALIGNLEFT | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 8, 35, 274, 165 PUSHBUTTON "追加(&A)...", IDC_BUTTON_ADDKEYWORD, 8, 203, 40, 14, WS_GROUP PUSHBUTTON "編集(&E)...", IDC_BUTTON_EDITKEYWORD, 50, 203, 40, 14 PUSHBUTTON "削除(&D)", IDC_BUTTON_DELKEYWORD, 92, 203, 40, 14 CONTROL "英大文字小文字区別(&C)", IDC_CHECK_KEYWORDCASE, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 221, 94, 10 PUSHBUTTON "インポート(&I)...", IDC_BUTTON_IMPORT, 166, 220, 58, 14, WS_GROUP PUSHBUTTON "エクスポート(&X)...", IDC_BUTTON_EXPORT, 227, 220, 58, 14 - RTEXT "(最大 100 文字 登録数 9999 / 9999 個)", IDC_STATIC_KEYWORD_COUNT, 135, 205, 142, 8 - PUSHBUTTON "変更(&H)", IDC_BUTTON_KEYSETRENAME, 130, 3, 40, 14 + RTEXT "(最大 100 文字 登録数 9999 / 9999 個)", IDC_STATIC_KEYWORD_COUNT, 135, 205, 142, 10 + PUSHBUTTON "変更(&H)", IDC_BUTTON_KEYSETRENAME, 130, 5, 40, 14 PUSHBUTTON "整理(&O)", IDC_BUTTON_KEYCLEAN, 104, 220, 45, 14 PUSHBUTTON "OK", IDOK, 182, 243, 50, 14 PUSHBUTTON "キャンセル(&X)", IDCANCEL, 237, 243, 50, 14 @@ -1487,7 +1487,7 @@ BEGIN CONTROL "&Tab", IDC_CHECK_m_bHokanKey_TAB, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 93, 15, 28, 10 CONTROL "→(&R)", IDC_CHECK_m_bHokanKey_RIGHT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 122, 15, 53, 10 GROUPBOX "入力補完機能", IDC_STATIC, 3, 3, 285, 30, WS_GROUP - LTEXT "候補決定キー", IDC_STATIC, 7, 17, 45, 8 + LTEXT "候補決定キー", IDC_STATIC, 7, 17, 45, 10 GROUPBOX "外部ヘルプの設定(&L)", IDC_STATIC, 3, 37, 285, 32, WS_GROUP EDITTEXT IDC_EDIT_EXTHELP1, 8, 50, 253, 12, ES_AUTOHSCROLL | WS_GROUP PUSHBUTTON "(&1)...", IDC_BUTTON_OPENHELP1, 264, 49, 19, 14 @@ -1498,10 +1498,10 @@ BEGIN GROUPBOX "キーワードヘルプ", IDC_STATIC, 3, 123, 285, 33, WS_GROUP RTEXT "Font", IDC_STATIC_KEYWORDHELPFONT, 8, 136, 219, 17, SS_RIGHT PUSHBUTTON "フォント(&F)...", IDC_BUTTON_KEYWORDHELPFONT, 232, 136, 51, 14 - LTEXT "DLL(&M)", IDC_STATIC, 7, 172, 26, 8 + LTEXT "DLL(&M)", IDC_STATIC, 7, 172, 26, 10 EDITTEXT IDC_EDIT_MIGEMO_DLL, 36, 170, 224, 12, ES_AUTOHSCROLL | WS_GROUP PUSHBUTTON "(&3)...", IDC_BUTTON_OPENMDLL, 264, 169, 19, 14 - LTEXT "辞書(&I)", IDC_STATIC, 7, 188, 25, 8 + LTEXT "辞書(&I)", IDC_STATIC, 7, 188, 25, 10 EDITTEXT IDC_EDIT_MIGEMO_DICT, 36, 187, 224, 12, ES_AUTOHSCROLL PUSHBUTTON "(&4)...", IDC_BUTTON_OPENMDICT, 264, 187, 19, 14 GROUPBOX "migemo設定", IDC_STATIC, 3, 159, 285, 47, WS_GROUP @@ -1512,23 +1512,23 @@ STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP FONT 9, "MS Pゴシック" BEGIN - LTEXT "マクロ一覧", IDC_STATIC, 4, 9, 36, 8 + LTEXT "マクロ一覧", IDC_STATIC, 4, 9, 36, 10 EDITTEXT IDC_MACRODIR, 46, 5, 199, 14, ES_AUTOHSCROLL PUSHBUTTON "参照(&R)...", IDC_MACRODIRREF, 254, 5, 34, 14 CONTROL "List1", IDC_MACROLIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_AUTOARRANGE | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 3, 21, 285, 148 - LTEXT "名前(&N)", IDC_STATIC, 6, 179, 32, 8 + LTEXT "名前(&N)", IDC_STATIC, 6, 179, 32, 10 EDITTEXT IDC_MACRONAME, 39, 176, 203, 14, ES_AUTOHSCROLL - LTEXT "&File", IDC_STATIC, 6, 194, 12, 8 + LTEXT "&File", IDC_STATIC, 6, 194, 12, 10 COMBOBOX IDC_MACROPATH, 39, 192, 203, 130, CBS_DROPDOWN | CBS_SORT | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP CONTROL "マクロを実行するたびにファイルを読み込みなおす(&L)", IDC_CHECK_RELOADWHENEXECUTE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 6, 211, 178, 10 - LTEXT "キャンセル確認待ち時間", IDC_STATIC, 185, 212, 75, 8 + LTEXT "キャンセル確認待ち時間", IDC_STATIC, 185, 212, 75, 10 EDITTEXT IDC_MACROCANCELTIMER, 260, 209, 18, 14, ES_AUTOHSCROLL - LTEXT "秒", IDC_STATIC, 280, 212, 8, 8 - LTEXT "自動実行:", IDC_STATIC, 6, 225, 34, 8 + LTEXT "秒", IDC_STATIC, 280, 212, 8, 10 + LTEXT "自動実行:", IDC_STATIC, 6, 225, 34, 10 CONTROL "新規/開ファイル後(&O)", IDC_CHECK_MacroOnOpened, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 44, 224, 89, 10 CONTROL "タイプ変更後(&T)", IDC_CHECK_MacroOnTypeChanged, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 135, 224, 72, 10 CONTROL "ファイル保存前(&S)", IDC_CHECK_MacroOnSave, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 212, 224, 69, 10 - LTEXT "Id:", IDC_STATIC, 249, 176, 8, 8 + LTEXT "Id:", IDC_STATIC, 249, 176, 8, 10 COMBOBOX IDC_COMBO_MACROID, 260, 174, 28, 129, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "設定(&A)", IDC_MACRO_REG, 250, 190, 38, 14 END @@ -1542,14 +1542,14 @@ BEGIN PUSHBUTTON "ZIPプラグインを導入(&Z)", IDC_PLUGIN_INST_ZIP, 192, 6, 96, 14 PUSHBUTTON "フォルダを開く(&F)", IDC_PLUGIN_OpenFolder, 120, 20, 70, 14 PUSHBUTTON "新規プラグインを追加(&I)", IDC_PLUGIN_SearchNew, 192, 20, 96, 14 - LTEXT "プラグイン一覧", IDC_STATIC, 4, 28, 50, 8 + LTEXT "プラグイン一覧", IDC_STATIC, 4, 28, 50, 10 CONTROL "List1", IDC_PLUGINLIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_AUTOARRANGE | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 3, 41, 285, 108 - LTEXT "説明", IDC_STATIC, 11, 160, 50, 8 - LTEXT "", IDC_LABEL_PLUGIN_Description, 66, 160, 200, 8 - LTEXT "作者", IDC_STATIC, 11, 175, 50, 8 - LTEXT "", IDC_LABEL_PLUGIN_Author, 66, 175, 200, 8 - LTEXT "バージョン", IDC_STATIC, 11, 190, 50, 8 - LTEXT "", IDC_LABEL_PLUGIN_Version, 66, 190, 100, 8 + LTEXT "説明", IDC_STATIC, 11, 160, 50, 10 + LTEXT "", IDC_LABEL_PLUGIN_Description, 66, 160, 200, 10 + LTEXT "作者", IDC_STATIC, 11, 175, 50, 10 + LTEXT "", IDC_LABEL_PLUGIN_Author, 66, 175, 200, 10 + LTEXT "バージョン", IDC_STATIC, 11, 190, 50, 10 + LTEXT "", IDC_LABEL_PLUGIN_Version, 66, 190, 100, 10 PUSHBUTTON "配布元(&D)", IDC_PLUGIN_URL, 186, 187, 80, 14 PUSHBUTTON "削除(&R)", IDC_PLUGIN_Remove, 6, 205, 80, 14 PUSHBUTTON "設定(&P)", IDC_PLUGIN_OPTION, 96, 205, 80, 14 @@ -1562,25 +1562,25 @@ EXSTYLE WS_EX_CONTEXTHELP CAPTION "メインメニュー" FONT 9, "MS Pゴシック" BEGIN - RTEXT "種別(&K)", IDC_LABEL_MENUFUNCKIND, 10, 6, 45, 8 + RTEXT "種別(&K)", IDC_LABEL_MENUFUNCKIND, 10, 6, 45, 10 COMBOBOX IDC_COMBO_FUNCKIND, 57, 4, 70, 180, CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - LTEXT "機能(&F)", IDC_LABEL_MENUFUNC, 4, 15, 40, 8 - LISTBOX IDC_LIST_FUNC, 4, 25, 123, 192, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + LTEXT "機能(&F)", IDC_LABEL_MENUFUNC, 4, 17, 40, 10 + LISTBOX IDC_LIST_FUNC, 4, 28, 123, 190, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP AUTOCHECKBOX "アクセスキーを必ず( )付で表示(&P)", IDC_CHECK_KEY_PARENTHESES, 176, 4, 113, 10 - LTEXT "メニュー(&M)", IDC_LABEL_MENU, 166, 15, 35, 8 - CONTROL "&Menu", IDC_TREE_RES, "SysTreeView32", WS_TABSTOP | WS_BORDER | TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_EDITLABELS | TVS_SHOWSELALWAYS, 166, 25, 123, 192, WS_EX_ACCEPTFILES - PUSHBUTTON "削除(&D)", IDC_BUTTON_DELETE, 128, 25, 37, 14, WS_GROUP - PUSHBUTTON "+(&N)", IDC_BUTTON_INSERT_NODE, 128, 44, 37, 14 - PUSHBUTTON "---(&S)", IDC_BUTTON_INSERTSEPARATOR, 128, 58, 37, 14 - PUSHBUTTON "上⇒(&Q)", IDC_BUTTON_INSERT, 128, 72, 37, 14 - PUSHBUTTON "下⇒(&A)", IDC_BUTTON_INSERT_A, 128, 86, 37, 14 - PUSHBUTTON ">>(&B)", IDC_BUTTON_ADD, 128, 100, 37, 14 - PUSHBUTTON "↑(&U)", IDC_BUTTON_UP, 128, 118, 37, 14 - PUSHBUTTON "↓(&O)", IDC_BUTTON_DOWN, 128, 132, 37, 14 - PUSHBUTTON "→(&R)", IDC_BUTTON_RIGHT, 128, 146, 37, 14 - PUSHBUTTON "←(&L)", IDC_BUTTON_LEFT, 128, 160, 37, 14 - PUSHBUTTON "全開(&H)", IDC_BUTTON_EXPAND, 128, 186, 37, 14 - PUSHBUTTON "全閉(&Z)", IDC_BUTTON_COLLAPSE, 128, 200, 37, 14 + LTEXT "メニュー(&M)", IDC_LABEL_MENU, 166, 17, 35, 10 + CONTROL "&Menu", IDC_TREE_RES, "SysTreeView32", WS_TABSTOP | WS_BORDER | TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_EDITLABELS | TVS_SHOWSELALWAYS, 166, 28, 123, 190, WS_EX_ACCEPTFILES + PUSHBUTTON "削除(&D)", IDC_BUTTON_DELETE, 128, 28, 37, 14, WS_GROUP + PUSHBUTTON "+(&N)", IDC_BUTTON_INSERT_NODE, 128, 47, 37, 14 + PUSHBUTTON "---(&S)", IDC_BUTTON_INSERTSEPARATOR, 128, 61, 37, 14 + PUSHBUTTON "上⇒(&Q)", IDC_BUTTON_INSERT, 128, 75, 37, 14 + PUSHBUTTON "下⇒(&A)", IDC_BUTTON_INSERT_A, 128, 89, 37, 14 + PUSHBUTTON ">>(&B)", IDC_BUTTON_ADD, 128, 103, 37, 14 + PUSHBUTTON "↑(&U)", IDC_BUTTON_UP, 128, 121, 37, 14 + PUSHBUTTON "↓(&O)", IDC_BUTTON_DOWN, 128, 135, 37, 14 + PUSHBUTTON "→(&R)", IDC_BUTTON_RIGHT, 128, 149, 37, 14 + PUSHBUTTON "←(&L)", IDC_BUTTON_LEFT, 128, 163, 37, 14 + PUSHBUTTON "全開(&H)", IDC_BUTTON_EXPAND, 128, 190, 37, 14 + PUSHBUTTON "全閉(&Z)", IDC_BUTTON_COLLAPSE, 128, 204, 37, 14 PUSHBUTTON "インポート(&I)...", IDC_BUTTON_IMPORT, 4, 222, 58, 14, WS_GROUP PUSHBUTTON "エクスポート(&X)...", IDC_BUTTON_EXPORT, 64, 222, 58, 14 PUSHBUTTON "検査(&T)", IDC_BUTTON_CHECK, 124, 222, 44, 14 From b635eb40803b45ba4631704b6da0695c6f82ac4f Mon Sep 17 00:00:00 2001 From: miwa Date: Sun, 4 Oct 2020 11:44:03 +0900 Subject: [PATCH 0147/1024] =?UTF-8?q?=E3=82=BF=E3=82=A4=E3=83=97=E5=88=A5?= =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E3=83=80=E3=82=A4=E3=82=A2=E3=83=AD=E3=82=B0?= =?UTF-8?q?=E3=81=AE=E3=82=B7=E3=82=B9=E3=83=86=E3=83=A0=E3=83=95=E3=82=A9?= =?UTF-8?q?=E3=83=B3=E3=83=88=E5=8C=96=E3=81=A8=E9=85=8D=E7=BD=AE=E8=AA=BF?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/sakura_rc.rc | 68 ++++++++++++++--------------- sakura_core/typeprop/CPropTypes.cpp | 25 +++++++++++ sakura_core/typeprop/CPropTypes.h | 4 ++ 3 files changed, 63 insertions(+), 34 deletions(-) diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index acd75eb638..e31a8c5f6e 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -769,22 +769,22 @@ BEGIN RTEXT "折り返し桁数(&R)", IDC_STATIC, 8, 49, 56, 10, NOT WS_GROUP EDITTEXT IDC_EDIT_MAXLINELEN, 70, 48, 40, 12 CONTROL "Spin1", IDC_SPIN_MAXLINELEN, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 117, 48, 9, 12, WS_EX_TRANSPARENT - RTEXT "文字の間隔(&C)", IDC_STATIC, 8, 64, 56, 10, NOT WS_GROUP - EDITTEXT IDC_EDIT_CHARSPACE, 70, 63, 40, 12 - CONTROL "Spin1", IDC_SPIN_CHARSPACE, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 117, 63, 9, 12, WS_EX_TRANSPARENT - LTEXT "ドット", IDC_STATIC, 114, 64, 18, 10 - RTEXT "行の間隔(&L)", IDC_STATIC, 8, 79, 56, 10, NOT WS_GROUP - EDITTEXT IDC_EDIT_LINESPACE, 70, 78, 40, 12, ES_AUTOHSCROLL - CONTROL "Spin3", IDC_SPIN_LINESPACE, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 117, 78, 9, 12 - LTEXT "ドット", IDC_STATIC, 114, 79, 18, 10 - RTEXT "TAB幅(&T)", IDC_STATIC, 8, 94, 56, 10, NOT WS_GROUP - EDITTEXT IDC_EDIT_TABSPACE, 70, 93, 40, 12, ES_AUTOHSCROLL - CONTROL "Spin3", IDC_SPIN_TABSPACE, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 117, 93, 7, 12 - LTEXT "T&AB表示", IDC_STATIC, 16, 110, 56, 10, NOT WS_GROUP - COMBOBOX IDC_CHECK_TAB_ARROW, 48, 108, 46, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - EDITTEXT IDC_EDIT_TABVIEWSTRING, 102, 108, 40, 12, ES_AUTOHSCROLL + RTEXT "文字の間隔(&C)", IDC_STATIC, 8, 63, 56, 10, NOT WS_GROUP + EDITTEXT IDC_EDIT_CHARSPACE, 70, 62, 40, 12 + CONTROL "Spin1", IDC_SPIN_CHARSPACE, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 117, 62, 9, 12, WS_EX_TRANSPARENT + LTEXT "ドット", IDC_STATIC, 114, 63, 18, 10 + RTEXT "行の間隔(&L)", IDC_STATIC, 8, 77, 56, 10, NOT WS_GROUP + EDITTEXT IDC_EDIT_LINESPACE, 70, 76, 40, 12, ES_AUTOHSCROLL + CONTROL "Spin3", IDC_SPIN_LINESPACE, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 117, 76, 9, 12 + LTEXT "ドット", IDC_STATIC, 114, 77, 18, 10 + RTEXT "TAB幅(&T)", IDC_STATIC, 8, 91, 56, 10, NOT WS_GROUP + EDITTEXT IDC_EDIT_TABSPACE, 70, 90, 40, 12, ES_AUTOHSCROLL + CONTROL "Spin3", IDC_SPIN_TABSPACE, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 117, 90, 7, 12 + LTEXT "T&AB表示", IDC_STATIC, 16, 104, 56, 10, NOT WS_GROUP + COMBOBOX IDC_CHECK_TAB_ARROW, 48, 104, 46, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + EDITTEXT IDC_EDIT_TABVIEWSTRING, 102, 104, 40, 12, ES_AUTOHSCROLL CONTROL "S&PACEの挿入", IDC_CHECK_INS_SPACE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 70, 123, 57, 10 - COMBOBOX IDC_COMBO_TSV_MODE, 16, 123, 46, 40, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_COMBO_TSV_MODE, 16, 121, 46, 40, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP GROUPBOX "レイアウト", IDC_STATIC, 3, 22, 145, 117 CONTROL "自動インデント(&U)", IDC_CHECK_INDENT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 154, 72, 10 CONTROL "全角空白も(&Z)", IDC_CHECK_INDENT_WSPACE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 83, 154, 61, 10 @@ -837,7 +837,7 @@ BEGIN PUSHBUTTON "エクスポート(&X)...", IDC_BUTTON_EXPORT, 88, 215, 60, 14 LTEXT "強調キーワード&1", IDC_STATIC, 162, 18, 54, 10 COMBOBOX IDC_COMBO_SET, 218, 16, 75, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "&2~10...", IDC_BUTTON_KEYWORD_SELECT, 218, 31, 75, 14 + PUSHBUTTON "&2~10...", IDC_BUTTON_KEYWORD_SELECT, 218, 32, 75, 14 PUSHBUTTON "共通設定(&C)...", IDC_BUTTON_EDITKEYWORD, 218, 47, 75, 14 GROUPBOX "強調キーワード", IDC_STATIC, 156, 6, 142, 60, WS_GROUP LTEXT "ブロック型(&F)", IDC_STATIC, 164, 80, 42, 10 @@ -867,10 +867,10 @@ BEGIN EDITTEXT IDC_EDIT_LINECOMMENTPOS3, 267, 136, 26, 12, ES_AUTOHSCROLL CONTROL "", IDC_SPIN_LCColNum3, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 295, 136, 6, 12 GROUPBOX "コメントスタイル", IDC_STATIC, 156, 68, 142, 85, WS_GROUP - GROUPBOX "文字列エスケープ(&Q)", IDC_STATIC, 156, 168, 142, 42, WS_GROUP - COMBOBOX IDC_COMBO_STRINGLITERAL, 160, 180, 68, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "行内のみ(&\\)", IDC_CHECK_STRINGLINEONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 233, 180, 64, 10 - CONTROL "終了文字がない場合行末まで色分け(&N)", IDC_CHECK_STRINGENDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 160, 194, 136, 10 + GROUPBOX "文字列エスケープ(&Q)", IDC_STATIC, 156, 164, 142, 46, WS_GROUP + COMBOBOX IDC_COMBO_STRINGLITERAL, 160, 178, 68, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "行内のみ(&\\)", IDC_CHECK_STRINGLINEONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 233, 178, 64, 10 + CONTROL "終了文字がない場合行末まで色分け(&N)", IDC_CHECK_STRINGENDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 160, 196, 136, 10 LTEXT "縦線桁指定(&3)", IDC_STATIC, 164, 218, 46, 10 EDITTEXT IDC_EDIT_VERTLINE, 210, 216, 74, 12, ES_AUTOHSCROLL LTEXT "*桁またはStep(Begin, End)でコンマ区切り", IDC_STATIC, 165, 230, 142, 10 @@ -912,22 +912,22 @@ BEGIN CONTROL "正規表現キーワードを使用する(&R)", IDC_CHECK_REGEX, "Button", BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP, 5, 5, 124, 10 RTEXT "BREGONIG.DLL Version", IDC_LABEL_REGEX_VERSION, 89, 15, 208, 10, NOT WS_GROUP, WS_EX_TRANSPARENT GROUPBOX "正規表現キーワード(&K)", IDC_FRAME_REGEX, 3, 24, 295, 169 - CONTROL "List5", IDC_LIST_REGEX, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOLABELWRAP | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 8, 33, 243, 118 + CONTROL "List5", IDC_LIST_REGEX, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOLABELWRAP | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 8, 36, 243, 115 LTEXT "正規表現(&N)", IDC_LABEL_REGEX_KEYWORD, 13, 157, 41, 10, NOT WS_GROUP - EDITTEXT IDC_EDIT_REGEX, 59, 155, 191, 14, ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_REGEX, 59, 155, 192, 14, ES_AUTOHSCROLL LTEXT "色指定(&C)", IDC_LABEL_REGEX_COLOR, 20, 174, 34, 10, NOT WS_GROUP COMBOBOX IDC_COMBO_REGEX_COLOR, 59, 172, 128, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "挿入(&S)", IDC_BUTTON_REGEX_INS, 255, 118, 38, 15 PUSHBUTTON "追加(&A)", IDC_BUTTON_REGEX_ADD, 255, 136, 38, 15 PUSHBUTTON "更新(&E)", IDC_BUTTON_REGEX_UPD, 255, 154, 38, 15 PUSHBUTTON "削除(&D)", IDC_BUTTON_REGEX_DEL, 255, 172, 38, 15 - PUSHBUTTON "先頭(&T)", IDC_BUTTON_REGEX_TOP, 255, 33, 38, 15 - PUSHBUTTON "上へ(&U)", IDC_BUTTON_REGEX_UP, 255, 51, 38, 15 - PUSHBUTTON "下へ(&G)", IDC_BUTTON_REGEX_DOWN, 255, 69, 38, 15 - PUSHBUTTON "最終(&B)", IDC_BUTTON_REGEX_LAST, 255, 87, 38, 15 + PUSHBUTTON "先頭(&T)", IDC_BUTTON_REGEX_TOP, 255, 36, 38, 15 + PUSHBUTTON "上へ(&U)", IDC_BUTTON_REGEX_UP, 255, 54, 38, 15 + PUSHBUTTON "下へ(&G)", IDC_BUTTON_REGEX_DOWN, 255, 72, 38, 15 + PUSHBUTTON "最終(&B)", IDC_BUTTON_REGEX_LAST, 255, 90, 38, 15 PUSHBUTTON "インポート(&I)...", IDC_BUTTON_REGEX_IMPORT, 173, 196, 60, 14, WS_GROUP PUSHBUTTON "エクスポート(&X)...", IDC_BUTTON_REGEX_EXPORT, 236, 196, 60, 14 - LTEXT "[色指定]で「URL」を選択するとマッチ文字列がクリッカブルになります", IDC_STATIC, 14, 195, 138, 18 + LTEXT "[色指定]で「URL」を選択するとマッチ文字列がクリッカブルになります", IDC_STATIC, 14, 195, 138, 20 END IDD_PROP_KEYHELP DIALOGEX 0, 0, 302, 244 @@ -969,15 +969,15 @@ BEGIN COMBOBOX IDC_COMBO_DEFAULT_EOLTYPE, 57, 32, 52, 57, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "&BOM", IDC_CHECK_DEFAULT_BOM, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 114, 33, 30, 10 LTEXT "文字コード(&C)", IDC_STATIC, 8, 49, 46, 10 - COMBOBOX IDC_COMBO_DEFAULT_CODETYPE, 57, 47, 52, 57, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "C&P", IDC_CHECK_CP, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 114, 48, 25, 10 - CONTROL "自動判別時にCESU-8 を優先する(&U)", IDC_CHECK_PRIOR_CESU8, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 63, 135, 10 - GROUPBOX "デフォルトの文字コード", IDC_STATIC, 3, 22, 145, 58 + COMBOBOX IDC_COMBO_DEFAULT_CODETYPE, 57, 48, 52, 57, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "C&P", IDC_CHECK_CP, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 114, 49, 25, 10 + CONTROL "自動判別時にCESU-8 を優先する(&U)", IDC_CHECK_PRIOR_CESU8, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 64, 135, 10 + GROUPBOX "デフォルトの文字コード", IDC_STATIC, 3, 20, 145, 62 LTEXT "ON/OFF状態(&M)", IDC_STATIC, 169, 34, 55, 10 COMBOBOX IDC_COMBO_IMESWITCH, 232, 32, 61, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "入力モード(&D)", IDC_STATIC, 179, 49, 45, 10 - COMBOBOX IDC_COMBO_IMESTATE, 232, 47, 61, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - GROUPBOX "起動時のIME (日本語入力変換)", IDC_STATIC, 153, 22, 145, 58 + LTEXT "入力モード(&D)", IDC_STATIC, 179, 50, 45, 10 + COMBOBOX IDC_COMBO_IMESTATE, 232, 48, 61, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "起動時のIME (日本語入力変換)", IDC_STATIC, 153, 20, 145, 62 CONTROL "", IDC_STATIC, "Static", SS_ETCHEDFRAME, 5, 88, 293, 1 LTEXT "ウィンドウ", IDC_STATIC, 5, 96, 36, 10 CONTROL "文書アイコンを使う(&O)", IDC_CHECK_DOCICON, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 107, 86, 10 diff --git a/sakura_core/typeprop/CPropTypes.cpp b/sakura_core/typeprop/CPropTypes.cpp index f8550d4ae9..230a4cc938 100644 --- a/sakura_core/typeprop/CPropTypes.cpp +++ b/sakura_core/typeprop/CPropTypes.cpp @@ -45,6 +45,7 @@ INT_PTR CALLBACK PropTypesCommonProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPA pPsp = (PROPSHEETPAGE*)lParam; pCPropTypes = reinterpret_cast(pPsp->lParam); if( NULL != pCPropTypes ){ + pCPropTypes->SetPropTypesFont( hwndDlg ); return (pCPropTypes->*pDispatch)( hwndDlg, uMsg, wParam, pPsp->lParam ); }else{ return FALSE; @@ -105,6 +106,7 @@ CPropTypes::CPropTypes() CPropTypes::~CPropTypes() { + DeleteObject( m_hFontControl ); } /* 初期化 */ @@ -296,3 +298,26 @@ HFONT CPropTypes::SetFontLabel( HWND hwndDlg, int idc_static, const LOGFONT& lf, return hFont; } + +BOOL CALLBACK SetPropTypesFontProc( HWND hwnd , LPARAM hFont ) +{ + SendMessageAny( hwnd, WM_SETFONT, (WPARAM)hFont, (LPARAM)FALSE ); + return TRUE; +} + +void CPropTypes::SetPropTypesFont( HWND hwnd ) +{ + // 後ほどCDialogの同様処理と共通化 + HFONT hFontBase = (HFONT)::SendMessageAny( hwnd, WM_GETFONT, 0, (LPARAM)NULL ); + LOGFONT lfBaseFont = {}; + GetObject( hFontBase, sizeof(lfBaseFont), &lfBaseFont ); + + NONCLIENTMETRICS metrics = {}; + metrics.cbSize = sizeof( metrics ); + SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &metrics, 0 ); + LOGFONT lfMessageFont = metrics.lfMessageFont; + lfMessageFont.lfHeight = lfBaseFont.lfHeight; + m_hFontControl = CreateFontIndirect( &lfMessageFont ); + SendMessageAny( hwnd, WM_SETFONT, (WPARAM)m_hFontControl, (LPARAM)FALSE ); + EnumChildWindows( hwnd, SetPropTypesFontProc, (LPARAM)m_hFontControl ); +} diff --git a/sakura_core/typeprop/CPropTypes.h b/sakura_core/typeprop/CPropTypes.h index 49128d0bb6..01e3399969 100644 --- a/sakura_core/typeprop/CPropTypes.h +++ b/sakura_core/typeprop/CPropTypes.h @@ -86,6 +86,8 @@ class CPropTypes{ int GetPageNum(){ return m_nPageNum; } bool GetChangeKeyWordSet() const { return m_bChangeKeyWordSet; } + void SetPropTypesFont( HWND hwnd ); + protected: //イベント void OnHelp(HWND hwndParent, int nPageID); //!< ヘルプ @@ -115,6 +117,8 @@ class CPropTypes{ // フォント表示用データ HFONT m_hTypeFont; //!< タイプ別フォント表示ハンドル + HFONT m_hFontControl; + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 各プロパティページ // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // From 0259d1b37302ec7b747c570bcdb70f98c5372067 Mon Sep 17 00:00:00 2001 From: miwa Date: Sun, 4 Oct 2020 12:26:46 +0900 Subject: [PATCH 0148/1024] =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB?= =?UTF-8?q?=E3=82=92=E9=96=8B=E3=81=8F=E3=83=80=E3=82=A4=E3=82=A2=E3=83=AD?= =?UTF-8?q?=E3=82=B0=E3=81=AE=E3=82=B7=E3=82=B9=E3=83=86=E3=83=A0=E3=83=95?= =?UTF-8?q?=E3=82=A9=E3=83=B3=E3=83=88=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dlg/CDlgOpenFile_CommonFileDialog.cpp | 2 ++ sakura_core/util/window.cpp | 36 +++++++++++++++++++ sakura_core/util/window.h | 2 ++ 3 files changed, 40 insertions(+) diff --git a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp index 3566df0cca..48e6bc2396 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp @@ -262,6 +262,8 @@ UINT_PTR CALLBACK OFNHookProc( } case WM_INITDIALOG: { + SetSystemFont( hdlg ); + // Save off the long pointer to the OPENFILENAME structure. // Modified by KEITA for WIN64 2003.9.6 OPENFILENAME* pOfn = (OPENFILENAME*)lParam; diff --git a/sakura_core/util/window.cpp b/sakura_core/util/window.cpp index b6096dcf94..591304c311 100644 --- a/sakura_core/util/window.cpp +++ b/sakura_core/util/window.cpp @@ -310,3 +310,39 @@ void CFontAutoDeleter::Release() } } #endif + +BOOL CALLBACK SetSystemFontProc( HWND hwnd , LPARAM hFont ) +{ + SendMessageAny( hwnd, WM_SETFONT, (WPARAM)hFont, (LPARAM)FALSE ); + return TRUE; +} + +// 後ほどちゃんとする +void SetSystemFont( HWND hwnd ) +{ + static std::map hFontMap; + + HFONT hFontBase = (HFONT)::SendMessageAny( hwnd, WM_GETFONT, 0, (LPARAM)NULL ); + LOGFONT lfBaseFont = {}; + GetObject( hFontBase, sizeof(lfBaseFont), &lfBaseFont ); + + HFONT hFontControl; + auto found = hFontMap.find( lfBaseFont.lfHeight ); + if( found == hFontMap.end() ) + { + NONCLIENTMETRICS metrics = {}; + metrics.cbSize = sizeof( metrics ); + SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &metrics, 0 ); + LOGFONT lfMessageFont = metrics.lfMessageFont; + lfMessageFont.lfHeight = lfBaseFont.lfHeight; + hFontControl = CreateFontIndirect( &lfMessageFont ); + hFontMap[lfMessageFont.lfHeight] = hFontControl; + } + else + { + hFontControl = found->second; + } + + SendMessageAny( hwnd, WM_SETFONT, (WPARAM)hFontControl, (LPARAM)FALSE ); + EnumChildWindows( hwnd, SetSystemFontProc, (LPARAM)hFontControl ); +} diff --git a/sakura_core/util/window.h b/sakura_core/util/window.h index 1be6e2742f..afff0c7186 100644 --- a/sakura_core/util/window.h +++ b/sakura_core/util/window.h @@ -191,4 +191,6 @@ class CDCFont HFONT m_hFontOld; HFONT m_hFont; }; + +void SetSystemFont( HWND hwnd ); #endif /* SAKURA_WINDOW_A0833476_5E32_46BE_87B6_ECD55F10D34A_H_ */ From 9b5063390323ad97edef20804dbac06fc4711de9 Mon Sep 17 00:00:00 2001 From: miwa Date: Sun, 4 Oct 2020 12:50:17 +0900 Subject: [PATCH 0149/1024] =?UTF-8?q?=E5=8D=B0=E5=88=B7=E3=83=97=E3=83=AC?= =?UTF-8?q?=E3=83=93=E3=83=A5=E3=83=BC=E3=83=80=E3=82=A4=E3=82=A2=E3=83=AD?= =?UTF-8?q?=E3=82=B0=E3=81=AE=E3=82=B7=E3=82=B9=E3=83=86=E3=83=A0=E3=83=95?= =?UTF-8?q?=E3=82=A9=E3=83=B3=E3=83=88=E5=8C=96=E3=81=A8=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/print/CPrintPreview.cpp | 2 ++ sakura_core/sakura_rc.rc | 8 ++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/sakura_core/print/CPrintPreview.cpp b/sakura_core/print/CPrintPreview.cpp index 71bacf9585..6ffdd81ec9 100644 --- a/sakura_core/print/CPrintPreview.cpp +++ b/sakura_core/print/CPrintPreview.cpp @@ -2062,6 +2062,8 @@ INT_PTR CALLBACK CPrintPreview::PrintPreviewBar_DlgProc( CPrintPreview* pCPrintPreview; switch( uMsg ){ case WM_INITDIALOG: + SetSystemFont( hwndDlg ); + // Modified by KEITA for WIN64 2003.9.6 ::SetWindowLongPtr( hwndDlg, DWLP_USER, lParam ); // 2007.02.11 Moca WM_INITもDispatchEvent_PPBを呼ぶように diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index e31a8c5f6e..cef2156432 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -383,17 +383,17 @@ BEGIN PUSHBUTTON "前(&V)", IDC_BUTTON_PREVPAGE, 60, 1, 30, 14 PUSHBUTTON "次(&N)", IDC_BUTTON_NEXTPAGE, 90, 1, 30, 14 PUSHBUTTON "..&.", IDC_BUTTON_DIRECTPAGE, 120, 1, 9, 14 - LTEXT "999/999", IDC_STATIC_PAGENUM, 131, 4, 35, 8 + LTEXT "999/999", IDC_STATIC_PAGENUM, 131, 4, 35, 10 PUSHBUTTON "縮小(&O)", IDC_BUTTON_ZOOMDOWN, 60, 16, 30, 14 PUSHBUTTON "拡大(&I)", IDC_BUTTON_ZOOMUP, 90, 16, 30, 14 - LTEXT "999/999", IDC_STATIC_ZOOM, 131, 19, 35, 8 + LTEXT "999/999", IDC_STATIC_ZOOM, 131, 19, 35, 10 PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 167, 1, 39, 14 CONTROL "滑らか(&A)", IDC_CHECK_ANTIALIAS, "Button", BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP, 207, 3, 43, 10 PUSHBUTTON "戻る(&Q)", IDCANCEL, 167, 16, 39, 14 PUSHBUTTON "プリンタ(&R)", IDC_BUTTON_PRINTERSELECT, 208, 16, 40, 14 ICON IDI_PRINTER, IDC_STATIC, 251, 3, 11, 9, SS_REALSIZEIMAGE - LTEXT "Static", IDC_STATIC_PRNDEV, 263, 4, 137, 8 - LTEXT "Static", IDC_STATIC_PAPER, 251, 19, 149, 8 + LTEXT "Static", IDC_STATIC_PRNDEV, 263, 4, 137, 10 + LTEXT "Static", IDC_STATIC_PAPER, 251, 19, 149, 10 END IDD_PRINTSETTING DIALOGEX 0, 0, 302, 253 From c184a6fcfc669f22e023ce7b3225b95ae577720d Mon Sep 17 00:00:00 2001 From: miwa Date: Sun, 4 Oct 2020 16:19:24 +0900 Subject: [PATCH 0150/1024] =?UTF-8?q?=E3=83=95=E3=82=A9=E3=83=B3=E3=83=88?= =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E5=87=A6=E7=90=86=E3=82=92=E5=85=B1=E9=80=9A?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDialog.cpp | 26 +------- sakura_core/dlg/CDialog.h | 2 - .../dlg/CDlgOpenFile_CommonFileDialog.cpp | 2 +- sakura_core/print/CPrintPreview.cpp | 2 +- sakura_core/prop/CPropCommon.cpp | 28 +------- sakura_core/prop/CPropCommon.h | 3 - sakura_core/typeprop/CPropTypes.cpp | 26 +------- sakura_core/typeprop/CPropTypes.h | 4 -- sakura_core/util/window.cpp | 65 ++++++++++++------- sakura_core/util/window.h | 3 +- 10 files changed, 50 insertions(+), 111 deletions(-) diff --git a/sakura_core/dlg/CDialog.cpp b/sakura_core/dlg/CDialog.cpp index a0728de7d1..0423969782 100644 --- a/sakura_core/dlg/CDialog.cpp +++ b/sakura_core/dlg/CDialog.cpp @@ -27,6 +27,7 @@ #include "util/os.h" #include "util/shell.h" #include "util/module.h" +#include "util/window.h" /* ダイアログプロシージャ */ INT_PTR CALLBACK MyDialogProc( @@ -83,7 +84,6 @@ CDialog::CDialog(bool bSizable, bool bCheckShareData) CDialog::~CDialog() { // MYTRACE( L"CDialog::~CDialog()\n" ); - DeleteObject( m_hFontControl ); CloseDialog( 0 ); return; } @@ -184,7 +184,7 @@ BOOL CDialog::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) SetDialogPosSize(); - SetDialogFont(); + UpdateDialogFont( hwndDlg ); m_bInited = TRUE; return TRUE; @@ -266,28 +266,6 @@ void CDialog::SetDialogPosSize() } } -BOOL CALLBACK SetDialogFontProc( HWND hwnd , LPARAM hFont ) -{ - SendMessageAny( hwnd, WM_SETFONT, (WPARAM)hFont, (LPARAM)FALSE ); - return TRUE; -} - -void CDialog::SetDialogFont() -{ - HFONT hFontBase = (HFONT)::SendMessageAny( m_hWnd, WM_GETFONT, 0, (LPARAM)NULL ); - LOGFONT lfBaseFont = {}; - GetObject( hFontBase, sizeof(lfBaseFont), &lfBaseFont ); - - NONCLIENTMETRICS metrics = {}; - metrics.cbSize = sizeof( metrics ); - SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &metrics, 0 ); - LOGFONT lfMessageFont = metrics.lfMessageFont; - lfMessageFont.lfHeight = lfBaseFont.lfHeight; - m_hFontControl = CreateFontIndirect( &lfMessageFont ); - SendMessageAny( m_hWnd, WM_SETFONT, (WPARAM)m_hFontControl, (LPARAM)FALSE ); - EnumChildWindows( m_hWnd, SetDialogFontProc, (LPARAM)m_hFontControl ); -} - BOOL CDialog::OnDestroy( void ) { /* ウィンドウ位置・サイズを記憶 */ diff --git a/sakura_core/dlg/CDialog.h b/sakura_core/dlg/CDialog.h index 67bf03f960..10fdde678a 100644 --- a/sakura_core/dlg/CDialog.h +++ b/sakura_core/dlg/CDialog.h @@ -90,7 +90,6 @@ class CDialog virtual BOOL OnInitDialog(HWND hwndDlg, WPARAM wParam, LPARAM lParam); virtual void SetDialogPosSize(); - virtual void SetDialogFont(); virtual BOOL OnDestroy( void ); virtual BOOL OnNotify(NMHDR* pNMHDR){return FALSE;} BOOL OnSize(); @@ -141,7 +140,6 @@ class CDialog HWND m_hwndParent; /* オーナーウィンドウのハンドル */ private: HWND m_hWnd; /* このダイアログのハンドル */ - HFONT m_hFontControl; // ダイアログボックス用フォント public: HWND m_hwndSizeBox; LPARAM m_lParam; diff --git a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp index 48e6bc2396..f60f54a878 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp @@ -262,7 +262,7 @@ UINT_PTR CALLBACK OFNHookProc( } case WM_INITDIALOG: { - SetSystemFont( hdlg ); + UpdateDialogFont( hdlg ); // Save off the long pointer to the OPENFILENAME structure. // Modified by KEITA for WIN64 2003.9.6 diff --git a/sakura_core/print/CPrintPreview.cpp b/sakura_core/print/CPrintPreview.cpp index 6ffdd81ec9..fde4cf577e 100644 --- a/sakura_core/print/CPrintPreview.cpp +++ b/sakura_core/print/CPrintPreview.cpp @@ -2062,7 +2062,7 @@ INT_PTR CALLBACK CPrintPreview::PrintPreviewBar_DlgProc( CPrintPreview* pCPrintPreview; switch( uMsg ){ case WM_INITDIALOG: - SetSystemFont( hwndDlg ); + UpdateDialogFont( hwndDlg ); // Modified by KEITA for WIN64 2003.9.6 ::SetWindowLongPtr( hwndDlg, DWLP_USER, lParam ); diff --git a/sakura_core/prop/CPropCommon.cpp b/sakura_core/prop/CPropCommon.cpp index 90f8730c83..49a08744aa 100644 --- a/sakura_core/prop/CPropCommon.cpp +++ b/sakura_core/prop/CPropCommon.cpp @@ -58,29 +58,6 @@ int CPropCommon::SearchIntArr( int nKey, int* pnArr, int nArrNum ) return -1; } -BOOL CALLBACK SetPropFontProc( HWND hwnd , LPARAM hFont ) -{ - SendMessageAny( hwnd, WM_SETFONT, (WPARAM)hFont, (LPARAM)FALSE ); - return TRUE; -} - -void CPropCommon::SetPropFont( HWND hwnd ) -{ - // 後ほどCDialogの同様処理と共通化 - HFONT hFontBase = (HFONT)::SendMessageAny( hwnd, WM_GETFONT, 0, (LPARAM)NULL ); - LOGFONT lfBaseFont = {}; - GetObject( hFontBase, sizeof(lfBaseFont), &lfBaseFont ); - - NONCLIENTMETRICS metrics = {}; - metrics.cbSize = sizeof( metrics ); - SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &metrics, 0 ); - LOGFONT lfMessageFont = metrics.lfMessageFont; - lfMessageFont.lfHeight = lfBaseFont.lfHeight; - m_hFontControl = CreateFontIndirect( &lfMessageFont ); - SendMessageAny( hwnd, WM_SETFONT, (WPARAM)m_hFontControl, (LPARAM)FALSE ); - EnumChildWindows( hwnd, SetPropFontProc, (LPARAM)m_hFontControl ); -} - /*! プロパティページごとのWindow Procedureを引数に取ることで 処理の共通化を狙った. @@ -103,7 +80,7 @@ INT_PTR CPropCommon::DlgProc( pPsp = (PROPSHEETPAGE*)lParam; pCPropCommon = ( CPropCommon* )(pPsp->lParam); if( NULL != pCPropCommon ){ - pCPropCommon->SetPropFont( hwndDlg ); + UpdateDialogFont( hwndDlg ); return (pCPropCommon->*DispatchPage)( hwndDlg, uMsg, wParam, pPsp->lParam ); }else{ return FALSE; @@ -131,7 +108,7 @@ INT_PTR CPropCommon::DlgProc2( case WM_INITDIALOG: pCPropCommon = ( CPropCommon* )(lParam); if( NULL != pCPropCommon ){ - pCPropCommon->SetPropFont( hwndDlg ); + UpdateDialogFont( hwndDlg ); return (pCPropCommon->*DispatchPage)( hwndDlg, uMsg, IDOK, lParam ); }else{ return FALSE; @@ -184,7 +161,6 @@ CPropCommon::CPropCommon() CPropCommon::~CPropCommon() { - DeleteObject( m_hFontControl ); } /* 初期化 */ diff --git a/sakura_core/prop/CPropCommon.h b/sakura_core/prop/CPropCommon.h index 9f2394dba8..02c0969287 100644 --- a/sakura_core/prop/CPropCommon.h +++ b/sakura_core/prop/CPropCommon.h @@ -143,7 +143,6 @@ class CPropCommon bool m_bTrayProc; HFONT m_hKeywordHelpFont; //!< キーワードヘルプ フォント ハンドル HFONT m_hTabFont; //!< タブ フォント ハンドル - HFONT m_hFontControl; //!< ダイアログボックス用フォント protected: /* @@ -182,8 +181,6 @@ class CPropCommon HFONT SetCtrlFont( HWND hwndDlg, int idc_static, const LOGFONT& lf ); //!< コントロールにフォント設定する // 2013/4/24 Uchi HFONT SetFontLabel( HWND hwndDlg, int idc_static, const LOGFONT& lf, int nps ); //!< フォントラベルにフォントとフォント名設定する // 2013/4/24 Uchi - - void SetPropFont( HWND hwnd ); }; /*! diff --git a/sakura_core/typeprop/CPropTypes.cpp b/sakura_core/typeprop/CPropTypes.cpp index 230a4cc938..8aa419645f 100644 --- a/sakura_core/typeprop/CPropTypes.cpp +++ b/sakura_core/typeprop/CPropTypes.cpp @@ -45,7 +45,7 @@ INT_PTR CALLBACK PropTypesCommonProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPA pPsp = (PROPSHEETPAGE*)lParam; pCPropTypes = reinterpret_cast(pPsp->lParam); if( NULL != pCPropTypes ){ - pCPropTypes->SetPropTypesFont( hwndDlg ); + UpdateDialogFont( hwndDlg ); return (pCPropTypes->*pDispatch)( hwndDlg, uMsg, wParam, pPsp->lParam ); }else{ return FALSE; @@ -106,7 +106,6 @@ CPropTypes::CPropTypes() CPropTypes::~CPropTypes() { - DeleteObject( m_hFontControl ); } /* 初期化 */ @@ -298,26 +297,3 @@ HFONT CPropTypes::SetFontLabel( HWND hwndDlg, int idc_static, const LOGFONT& lf, return hFont; } - -BOOL CALLBACK SetPropTypesFontProc( HWND hwnd , LPARAM hFont ) -{ - SendMessageAny( hwnd, WM_SETFONT, (WPARAM)hFont, (LPARAM)FALSE ); - return TRUE; -} - -void CPropTypes::SetPropTypesFont( HWND hwnd ) -{ - // 後ほどCDialogの同様処理と共通化 - HFONT hFontBase = (HFONT)::SendMessageAny( hwnd, WM_GETFONT, 0, (LPARAM)NULL ); - LOGFONT lfBaseFont = {}; - GetObject( hFontBase, sizeof(lfBaseFont), &lfBaseFont ); - - NONCLIENTMETRICS metrics = {}; - metrics.cbSize = sizeof( metrics ); - SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &metrics, 0 ); - LOGFONT lfMessageFont = metrics.lfMessageFont; - lfMessageFont.lfHeight = lfBaseFont.lfHeight; - m_hFontControl = CreateFontIndirect( &lfMessageFont ); - SendMessageAny( hwnd, WM_SETFONT, (WPARAM)m_hFontControl, (LPARAM)FALSE ); - EnumChildWindows( hwnd, SetPropTypesFontProc, (LPARAM)m_hFontControl ); -} diff --git a/sakura_core/typeprop/CPropTypes.h b/sakura_core/typeprop/CPropTypes.h index 01e3399969..49128d0bb6 100644 --- a/sakura_core/typeprop/CPropTypes.h +++ b/sakura_core/typeprop/CPropTypes.h @@ -86,8 +86,6 @@ class CPropTypes{ int GetPageNum(){ return m_nPageNum; } bool GetChangeKeyWordSet() const { return m_bChangeKeyWordSet; } - void SetPropTypesFont( HWND hwnd ); - protected: //イベント void OnHelp(HWND hwndParent, int nPageID); //!< ヘルプ @@ -117,8 +115,6 @@ class CPropTypes{ // フォント表示用データ HFONT m_hTypeFont; //!< タイプ別フォント表示ハンドル - HFONT m_hFontControl; - // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 各プロパティページ // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // diff --git a/sakura_core/util/window.cpp b/sakura_core/util/window.cpp index 591304c311..eef200cc08 100644 --- a/sakura_core/util/window.cpp +++ b/sakura_core/util/window.cpp @@ -311,38 +311,55 @@ void CFontAutoDeleter::Release() } #endif -BOOL CALLBACK SetSystemFontProc( HWND hwnd , LPARAM hFont ) +HFONT GetSystemFont( LONG nHeight ) +{ + // キー:"フォント名/高さ" + static std::map fontStock; + + NONCLIENTMETRICS metrics = {}; + metrics.cbSize = sizeof( metrics ); + if( !SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &metrics, 0 ) ) { + return NULL; + } + LOGFONT lfFont = metrics.lfMessageFont; + + const size_t nKeySize = LF_FACESIZE + 5; + TCHAR key[nKeySize] = {}; + auto_snprintf_s( key, nKeySize, _T("%s/%d"), lfFont.lfFaceName, nHeight ); + auto found = fontStock.find( key ); + if( found != fontStock.end() ) { + return found->second; + } + + lfFont.lfHeight = nHeight; + HFONT hFont = CreateFontIndirect( &lfFont ); + if( hFont != NULL ) { + fontStock[key] = hFont; + } + return hFont; +} + +BOOL CALLBACK SetFontRecursiveProc( HWND hwnd, LPARAM hFont ) { SendMessageAny( hwnd, WM_SETFONT, (WPARAM)hFont, (LPARAM)FALSE ); + EnumChildWindows( hwnd, SetFontRecursiveProc, (LPARAM)hFont ); return TRUE; } -// 後ほどちゃんとする -void SetSystemFont( HWND hwnd ) +void SetFontRecursive( HWND hwnd, HFONT hFont ) { - static std::map hFontMap; + SendMessageAny( hwnd, WM_SETFONT, (WPARAM)hFont, (LPARAM)FALSE ); + EnumChildWindows( hwnd, SetFontRecursiveProc, (LPARAM)hFont ); +} +void UpdateDialogFont( HWND hwnd ) +{ HFONT hFontBase = (HFONT)::SendMessageAny( hwnd, WM_GETFONT, 0, (LPARAM)NULL ); LOGFONT lfBaseFont = {}; - GetObject( hFontBase, sizeof(lfBaseFont), &lfBaseFont ); - - HFONT hFontControl; - auto found = hFontMap.find( lfBaseFont.lfHeight ); - if( found == hFontMap.end() ) - { - NONCLIENTMETRICS metrics = {}; - metrics.cbSize = sizeof( metrics ); - SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &metrics, 0 ); - LOGFONT lfMessageFont = metrics.lfMessageFont; - lfMessageFont.lfHeight = lfBaseFont.lfHeight; - hFontControl = CreateFontIndirect( &lfMessageFont ); - hFontMap[lfMessageFont.lfHeight] = hFontControl; - } - else - { - hFontControl = found->second; + GetObject( hFontBase, sizeof( lfBaseFont ), &lfBaseFont ); + + HFONT hFont = GetSystemFont( lfBaseFont.lfHeight ); + if( hFont != NULL ){ + SetFontRecursive( hwnd, hFont ); } - - SendMessageAny( hwnd, WM_SETFONT, (WPARAM)hFontControl, (LPARAM)FALSE ); - EnumChildWindows( hwnd, SetSystemFontProc, (LPARAM)hFontControl ); } diff --git a/sakura_core/util/window.h b/sakura_core/util/window.h index afff0c7186..acf4c4a34e 100644 --- a/sakura_core/util/window.h +++ b/sakura_core/util/window.h @@ -192,5 +192,6 @@ class CDCFont HFONT m_hFont; }; -void SetSystemFont( HWND hwnd ); +void UpdateDialogFont( HWND hwnd ); + #endif /* SAKURA_WINDOW_A0833476_5E32_46BE_87B6_ECD55F10D34A_H_ */ From fdc661cc724c1075ada40c6ef1fdf8cf7ac2a8d1 Mon Sep 17 00:00:00 2001 From: miwa Date: Sun, 4 Oct 2020 17:39:15 +0900 Subject: [PATCH 0151/1024] =?UTF-8?q?=E6=97=A5=E6=9C=AC=E8=AA=9E=E3=83=AA?= =?UTF-8?q?=E3=82=BD=E3=83=BC=E3=82=B9=E4=BB=A5=E5=A4=96=E3=81=AE=E3=83=95?= =?UTF-8?q?=E3=82=A9=E3=83=B3=E3=83=88=E3=81=AF=E3=81=9D=E3=81=AE=E3=81=BE?= =?UTF-8?q?=E3=81=BE=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/window.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sakura_core/util/window.cpp b/sakura_core/util/window.cpp index eef200cc08..1c7fa841b0 100644 --- a/sakura_core/util/window.cpp +++ b/sakura_core/util/window.cpp @@ -354,6 +354,11 @@ void SetFontRecursive( HWND hwnd, HFONT hFont ) void UpdateDialogFont( HWND hwnd ) { + // 日本語リソース以外の場合はそのまま + if( wcsncmp_literal( CSelectLang::getDefaultLangString(), _T("Japanese" ) ) != 0 ){ + return; + } + HFONT hFontBase = (HFONT)::SendMessageAny( hwnd, WM_GETFONT, 0, (LPARAM)NULL ); LOGFONT lfBaseFont = {}; GetObject( hFontBase, sizeof( lfBaseFont ), &lfBaseFont ); From 68601d680b271e139fba7104d5a1166db4899374 Mon Sep 17 00:00:00 2001 From: miwa Date: Sun, 4 Oct 2020 19:54:52 +0900 Subject: [PATCH 0152/1024] =?UTF-8?q?=E6=B1=8E=E7=94=A8=E5=85=A5=E5=8A=9B?= =?UTF-8?q?=E3=83=80=E3=82=A4=E3=82=A2=E3=83=AD=E3=82=B0=E3=81=AE=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgInput1.cpp | 2 ++ sakura_core/sakura_rc.rc | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/sakura_core/dlg/CDlgInput1.cpp b/sakura_core/dlg/CDlgInput1.cpp index e563d67dde..50ee108bd0 100644 --- a/sakura_core/dlg/CDlgInput1.cpp +++ b/sakura_core/dlg/CDlgInput1.cpp @@ -20,6 +20,7 @@ #include "util/shell.h" #include "sakura_rc.h" #include "sakura.hh" +#include "util/window.h" // 入力 CDlgInput1.cpp //@@@ 2002.01.07 add start MIK static const DWORD p_helpids[] = { //13000 @@ -44,6 +45,7 @@ INT_PTR CALLBACK CDlgInput1Proc( case WM_INITDIALOG: pCDlgInput1 = ( CDlgInput1* )lParam; if( NULL != pCDlgInput1 ){ + UpdateDialogFont( hwndDlg ); return pCDlgInput1->DispatchEvent( hwndDlg, uMsg, wParam, lParam ); }else{ return FALSE; diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index cef2156432..93637df292 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -353,7 +353,7 @@ STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "汎用入力ダイアログ" FONT 9, "MS Pゴシック" BEGIN - EDITTEXT IDC_EDIT_INPUT1, 5, 15, 175, 12, ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_INPUT1, 5, 17, 175, 12, ES_AUTOHSCROLL DEFPUSHBUTTON "&OK", IDOK, 37, 36, 50, 14 PUSHBUTTON "キャンセル(&X)", IDCANCEL, 98, 35, 50, 14 LTEXT "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", IDC_STATIC_MSG, 6, 5, 175, 10 From 1a1408ba6b8e2f60d38d4c34a812ea9462a6b564 Mon Sep 17 00:00:00 2001 From: Katsuhisa Yuasa Date: Mon, 5 Oct 2020 08:27:15 +0900 Subject: [PATCH 0153/1024] =?UTF-8?q?=E3=83=97=E3=83=AD=E3=83=91=E3=83=86?= =?UTF-8?q?=E3=82=A3=E3=82=B7=E3=83=BC=E3=83=88=E3=81=AE=E3=82=B3=E3=83=B3?= =?UTF-8?q?=E3=83=88=E3=83=AD=E3=83=BC=E3=83=AB=E8=A1=A8=E7=A4=BA=E3=81=AE?= =?UTF-8?q?=E3=81=A1=E3=82=89=E3=81=A4=E3=81=8D=E9=98=B2=E6=AD=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/prop/CPropComCustmenu.cpp | 3 +++ sakura_core/prop/CPropComKeybind.cpp | 2 ++ sakura_core/prop/CPropComKeyword.cpp | 11 +++++------ sakura_core/prop/CPropComMainMenu.cpp | 2 ++ sakura_core/prop/CPropComTab.cpp | 4 ++++ sakura_core/prop/CPropComToolbar.cpp | 2 ++ sakura_core/sakura_rc.rc | 8 ++++---- 7 files changed, 22 insertions(+), 10 deletions(-) diff --git a/sakura_core/prop/CPropComCustmenu.cpp b/sakura_core/prop/CPropComCustmenu.cpp index 703f4b798d..9cd3ce1ad7 100644 --- a/sakura_core/prop/CPropComCustmenu.cpp +++ b/sakura_core/prop/CPropComCustmenu.cpp @@ -665,6 +665,7 @@ void CPropCustmenu::SetDataMenuList(HWND hwndDlg, int nIdx) WCHAR szLabel[300]; WCHAR szLabel2[300+4]; + ::SendMessageAny( hwndDlg, WM_SETREDRAW, FALSE, 0 ); /* メニュー項目一覧に文字列をセット(リストボックス)*/ HWND hwndLIST_RES = ::GetDlgItem( hwndDlg, IDC_LIST_RES ); // hwndEDIT_KEY = ::GetDlgItem( hwndDlg, IDC_EDIT_KEY ); @@ -694,6 +695,8 @@ void CPropCustmenu::SetDataMenuList(HWND hwndDlg, int nIdx) ::DlgItem_SetText( hwndDlg, IDC_EDIT_MENUNAME, m_Common.m_sCustomMenu.m_szCustMenuNameArr[nIdx] ); CheckDlgButtonBool( hwndDlg, IDC_CHECK_SUBMENU, m_Common.m_sCustomMenu.m_bCustMenuPopupArr[nIdx] ); + ::SendMessageAny( hwndDlg, WM_SETREDRAW, TRUE, 0 ); + ::InvalidateRect( hwndDlg, NULL, FALSE ); return; } diff --git a/sakura_core/prop/CPropComKeybind.cpp b/sakura_core/prop/CPropComKeybind.cpp index 6f73016573..79753369da 100644 --- a/sakura_core/prop/CPropComKeybind.cpp +++ b/sakura_core/prop/CPropComKeybind.cpp @@ -460,6 +460,7 @@ void CPropKeybind::ChangeKeyList( HWND hwndDlg){ i |= _ALT; wcscat( szKeyState, L"Alt+" ); } + ::SendMessageAny( hwndKeyList, WM_SETREDRAW, FALSE, 0 ); /* キー一覧に文字列をセット(リストボックス)*/ List_ResetContent( hwndKeyList ); for( i = 0; i < m_Common.m_sKeyBind.m_nKeyNameArrNum; ++i ){ @@ -470,6 +471,7 @@ void CPropKeybind::ChangeKeyList( HWND hwndDlg){ List_SetCurSel( hwndKeyList, nIndex ); List_SetTopIndex( hwndKeyList, nIndexTop ); ::SendMessageCmd( hwndDlg, WM_COMMAND, MAKELONG( IDC_LIST_KEY, LBN_SELCHANGE ), (LPARAM)hwndKeyList ); + ::SendMessageAny( hwndKeyList, WM_SETREDRAW, TRUE, 0 ); } /* Keybind:キー割り当て設定をインポートする */ diff --git a/sakura_core/prop/CPropComKeyword.cpp b/sakura_core/prop/CPropComKeyword.cpp index d6dc29134b..73379dc67c 100644 --- a/sakura_core/prop/CPropComKeyword.cpp +++ b/sakura_core/prop/CPropComKeyword.cpp @@ -616,6 +616,8 @@ void CPropKeyword::SetKeyWordSet( HWND hwndDlg, int nIdx ) HWND hwndList; LV_ITEM lvi; + ::SendMessageAny( hwndDlg, WM_SETREDRAW, FALSE, 0 ); + ListView_DeleteAllItems( ::GetDlgItem( hwndDlg, IDC_LIST_KEYWORD ) ); if( 0 <= nIdx ){ ::EnableWindow( ::GetDlgItem( hwndDlg, IDC_BUTTON_DELSET ), TRUE ); @@ -654,9 +656,6 @@ void CPropKeyword::SetKeyWordSet( HWND hwndDlg, int nIdx ) nNum = m_Common.m_sSpecialKeyword.m_CKeyWordSetMgr.GetKeyWordNum( nIdx ); hwndList = ::GetDlgItem( hwndDlg, IDC_LIST_KEYWORD ); - // 2005.01.25 Moca/genta リスト追加中は再描画を抑制してすばやく表示 - ::SendMessageAny( hwndList, WM_SETREDRAW, FALSE, 0 ); - for( i = 0; i < nNum; ++i ){ /* n番目のセットのm番目のキーワードを返す */ const WCHAR* pszKeyWord = m_Common.m_sSpecialKeyword.m_CKeyWordSetMgr.GetKeyWord( nIdx, i ); @@ -670,12 +669,12 @@ void CPropKeyword::SetKeyWordSet( HWND hwndDlg, int nIdx ) } m_Common.m_sSpecialKeyword.m_CKeyWordSetMgr.m_nCurrentKeyWordSetIdx = nIdx; - // 2005.01.25 Moca/genta リスト追加完了のため再描画許可 - ::SendMessageAny( hwndList, WM_SETREDRAW, TRUE, 0 ); - //キーワード数を表示する。 DispKeywordCount( hwndDlg ); + ::SendMessageAny( hwndDlg, WM_SETREDRAW, TRUE, 0 ); + InvalidateRect(hwndDlg, NULL, FALSE); + return; } diff --git a/sakura_core/prop/CPropComMainMenu.cpp b/sakura_core/prop/CPropComMainMenu.cpp index 01ad525c08..960b262941 100644 --- a/sakura_core/prop/CPropComMainMenu.cpp +++ b/sakura_core/prop/CPropComMainMenu.cpp @@ -417,6 +417,7 @@ INT_PTR CPropMainMenu::DispatchEvent( case CBN_SELCHANGE: nIdxFIdx = Combo_GetCurSel( hwndComboFunkKind ); + ::SendMessageAny( hwndListFunk, WM_SETREDRAW, FALSE, 0 ); if (nIdxFIdx == nSpecialFuncsNum) { // 機能一覧に特殊機能をセット List_ResetContent( hwndListFunk ); @@ -428,6 +429,7 @@ INT_PTR CPropMainMenu::DispatchEvent( /* 機能一覧に文字列をセット(リストボックス)*/ m_cLookup.SetListItem( hwndListFunk, nIdxFIdx ); } + ::SendMessageAny( hwndListFunk, WM_SETREDRAW, TRUE, 0 ); return TRUE; } diff --git a/sakura_core/prop/CPropComTab.cpp b/sakura_core/prop/CPropComTab.cpp index e0e3334a60..2ff079b7e6 100644 --- a/sakura_core/prop/CPropComTab.cpp +++ b/sakura_core/prop/CPropComTab.cpp @@ -191,6 +191,8 @@ INT_PTR CPropTab::DispatchEvent( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM /* ダイアログデータの設定 */ void CPropTab::SetData( HWND hwndDlg ) { + ::SendMessage(hwndDlg, WM_SETREDRAW, (WPARAM)FALSE, 0); + // Feb. 11, 2007 genta「ウィンドウ」シートより移動 ::CheckDlgButton( hwndDlg, IDC_CHECK_DispTabWnd, m_Common.m_sTabBar.m_bDispTabWnd ); //@@@ 2003.05.31 MIK ::CheckDlgButton( hwndDlg, IDC_CHECK_SameTabWidth, m_Common.m_sTabBar.m_bSameTabWidth ); //@@@ 2006.01.28 ryoji @@ -233,6 +235,8 @@ void CPropTab::SetData( HWND hwndDlg ) m_hTabFont = SetFontLabel( hwndDlg, IDC_STATIC_TABFONT, m_Common.m_sTabBar.m_lf, m_Common.m_sTabBar.m_nPointSize); EnableTabPropInput(hwndDlg); + + ::SendMessage(hwndDlg, WM_SETREDRAW, (WPARAM)TRUE, 0); } /* ダイアログデータの取得 */ diff --git a/sakura_core/prop/CPropComToolbar.cpp b/sakura_core/prop/CPropComToolbar.cpp index 2d77c4307a..0871f8fdb9 100644 --- a/sakura_core/prop/CPropComToolbar.cpp +++ b/sakura_core/prop/CPropComToolbar.cpp @@ -268,6 +268,7 @@ INT_PTR CPropToolbar::DispatchEvent( case CBN_SELCHANGE: nIndex2 = Combo_GetCurSel( hwndCombo ); + ::SendMessageAny( hwndFuncList, WM_SETREDRAW, FALSE, 0 ); List_ResetContent( hwndFuncList ); /* 機能一覧に文字列をセット (リストボックス) */ @@ -286,6 +287,7 @@ INT_PTR CPropToolbar::DispatchEvent( lResult = List_SetItemHeight( hwndFuncList, lResult, nListItemHeight ); } } + ::SendMessageAny( hwndFuncList, WM_SETREDRAW, TRUE, 0 ); return TRUE; } }else{ diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index 8a5c354a5c..1643b688ec 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -1173,7 +1173,7 @@ END IDD_PROP_TAB DIALOGEX 0, 0, 293, 240 STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP +EXSTYLE WS_EX_CONTEXTHELP | WS_EX_COMPOSITED FONT 9, "MS Pゴシック" BEGIN CONTROL "タブバーを表示する(&D)", IDC_CHECK_DispTabWnd, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 11, 111, 10 @@ -1187,7 +1187,7 @@ BEGIN LTEXT "閉じるボタン(&X)", IDC_TextTabClose, 124, 116, 48, 8 COMBOBOX IDC_CHECK_DispTabClose, 173, 113, 46, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "フォント(&F)...", IDC_BUTTON_TABFONT, 232, 113, 51, 14 - RTEXT "Font", IDC_STATIC_TABFONT, 102, 127, 180, 17, SS_RIGHT + RTEXT "Font", IDC_STATIC_TABFONT, 102, 127, 180, 12, SS_RIGHT CONTROL "タブ一覧をソートする(&S)", IDC_CHECK_SortTabList, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 15, 129, 85, 10 CONTROL "多段(&M)", IDC_CHECK_TAB_MULTILINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 15, 141, 60, 10 RTEXT "表示位置(&P)", IDC_TAB_POSITION, 80, 143, 40, 8 @@ -1404,7 +1404,7 @@ END IDD_PROP_KEYBIND DIALOGEX 0, 0, 293, 240 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP +EXSTYLE WS_EX_CONTEXTHELP | WS_EX_COMPOSITED FONT 9, "MS Pゴシック" BEGIN RTEXT "種別(&K)", IDC_LABEL_MENUFUNCKIND, 4, 4, 51, 8 @@ -1428,7 +1428,7 @@ END IDD_PROP_CUSTMENU DIALOGEX 0, 0, 293, 240 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP +EXSTYLE WS_EX_CONTEXTHELP | WS_EX_COMPOSITED FONT 9, "MS Pゴシック" BEGIN RTEXT "種別(&K)", IDC_LABEL_MENUFUNCKIND, 4, 4, 52, 8 From 079929f9b9ad367e29b69b029d70b82561c3c9fb Mon Sep 17 00:00:00 2001 From: Katsuhisa Yuasa Date: Mon, 5 Oct 2020 14:08:31 +0900 Subject: [PATCH 0154/1024] SendMessage anywayz --- sakura_core/prop/CPropComCustmenu.cpp | 8 ++++---- sakura_core/prop/CPropComKeybind.cpp | 4 ++-- sakura_core/prop/CPropComKeyword.cpp | 4 ++-- sakura_core/prop/CPropComMainMenu.cpp | 4 ++-- sakura_core/prop/CPropComToolbar.cpp | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/sakura_core/prop/CPropComCustmenu.cpp b/sakura_core/prop/CPropComCustmenu.cpp index 9cd3ce1ad7..f1ac7a65d7 100644 --- a/sakura_core/prop/CPropComCustmenu.cpp +++ b/sakura_core/prop/CPropComCustmenu.cpp @@ -198,13 +198,13 @@ INT_PTR CPropCustmenu::DispatchEvent( nIdx3 = Combo_GetCurSel( hwndCOMBO_FUNCKIND ); nIdx4 = List_GetCurSel( hwndLIST_FUNC ); if( nIdx1 != CB_ERR ){ - ::SendMessageAny( hwndDlg, WM_COMMAND, MAKEWPARAM( IDC_COMBO_MENU, CBN_SELCHANGE ), (LPARAM)hwndCOMBO_MENU ); + ::SendMessage( hwndDlg, WM_COMMAND, MAKEWPARAM( IDC_COMBO_MENU, CBN_SELCHANGE ), (LPARAM)hwndCOMBO_MENU ); if( nIdx2 != LB_ERR ){ List_SetCurSel( hwndLIST_RES, nIdx2 ); } } if( nIdx3 != CB_ERR ){ - ::SendMessageAny( hwndDlg, WM_COMMAND, MAKEWPARAM( IDC_COMBO_FUNCKIND, CBN_SELCHANGE ), (LPARAM)hwndCOMBO_FUNCKIND ); + ::SendMessage( hwndDlg, WM_COMMAND, MAKEWPARAM( IDC_COMBO_FUNCKIND, CBN_SELCHANGE ), (LPARAM)hwndCOMBO_FUNCKIND ); if( nIdx4 != LB_ERR ){ List_SetCurSel( hwndLIST_FUNC, nIdx4 ); } @@ -665,7 +665,7 @@ void CPropCustmenu::SetDataMenuList(HWND hwndDlg, int nIdx) WCHAR szLabel[300]; WCHAR szLabel2[300+4]; - ::SendMessageAny( hwndDlg, WM_SETREDRAW, FALSE, 0 ); + ::SendMessage( hwndDlg, WM_SETREDRAW, FALSE, 0 ); /* メニュー項目一覧に文字列をセット(リストボックス)*/ HWND hwndLIST_RES = ::GetDlgItem( hwndDlg, IDC_LIST_RES ); // hwndEDIT_KEY = ::GetDlgItem( hwndDlg, IDC_EDIT_KEY ); @@ -695,7 +695,7 @@ void CPropCustmenu::SetDataMenuList(HWND hwndDlg, int nIdx) ::DlgItem_SetText( hwndDlg, IDC_EDIT_MENUNAME, m_Common.m_sCustomMenu.m_szCustMenuNameArr[nIdx] ); CheckDlgButtonBool( hwndDlg, IDC_CHECK_SUBMENU, m_Common.m_sCustomMenu.m_bCustMenuPopupArr[nIdx] ); - ::SendMessageAny( hwndDlg, WM_SETREDRAW, TRUE, 0 ); + ::SendMessage( hwndDlg, WM_SETREDRAW, TRUE, 0 ); ::InvalidateRect( hwndDlg, NULL, FALSE ); return; } diff --git a/sakura_core/prop/CPropComKeybind.cpp b/sakura_core/prop/CPropComKeybind.cpp index 79753369da..6d191fe8be 100644 --- a/sakura_core/prop/CPropComKeybind.cpp +++ b/sakura_core/prop/CPropComKeybind.cpp @@ -460,7 +460,7 @@ void CPropKeybind::ChangeKeyList( HWND hwndDlg){ i |= _ALT; wcscat( szKeyState, L"Alt+" ); } - ::SendMessageAny( hwndKeyList, WM_SETREDRAW, FALSE, 0 ); + ::SendMessage( hwndKeyList, WM_SETREDRAW, FALSE, 0 ); /* キー一覧に文字列をセット(リストボックス)*/ List_ResetContent( hwndKeyList ); for( i = 0; i < m_Common.m_sKeyBind.m_nKeyNameArrNum; ++i ){ @@ -471,7 +471,7 @@ void CPropKeybind::ChangeKeyList( HWND hwndDlg){ List_SetCurSel( hwndKeyList, nIndex ); List_SetTopIndex( hwndKeyList, nIndexTop ); ::SendMessageCmd( hwndDlg, WM_COMMAND, MAKELONG( IDC_LIST_KEY, LBN_SELCHANGE ), (LPARAM)hwndKeyList ); - ::SendMessageAny( hwndKeyList, WM_SETREDRAW, TRUE, 0 ); + ::SendMessage( hwndKeyList, WM_SETREDRAW, TRUE, 0 ); } /* Keybind:キー割り当て設定をインポートする */ diff --git a/sakura_core/prop/CPropComKeyword.cpp b/sakura_core/prop/CPropComKeyword.cpp index 73379dc67c..fcee37aa07 100644 --- a/sakura_core/prop/CPropComKeyword.cpp +++ b/sakura_core/prop/CPropComKeyword.cpp @@ -616,7 +616,7 @@ void CPropKeyword::SetKeyWordSet( HWND hwndDlg, int nIdx ) HWND hwndList; LV_ITEM lvi; - ::SendMessageAny( hwndDlg, WM_SETREDRAW, FALSE, 0 ); + ::SendMessage( hwndDlg, WM_SETREDRAW, FALSE, 0 ); ListView_DeleteAllItems( ::GetDlgItem( hwndDlg, IDC_LIST_KEYWORD ) ); if( 0 <= nIdx ){ @@ -672,7 +672,7 @@ void CPropKeyword::SetKeyWordSet( HWND hwndDlg, int nIdx ) //キーワード数を表示する。 DispKeywordCount( hwndDlg ); - ::SendMessageAny( hwndDlg, WM_SETREDRAW, TRUE, 0 ); + ::SendMessage( hwndDlg, WM_SETREDRAW, TRUE, 0 ); InvalidateRect(hwndDlg, NULL, FALSE); return; diff --git a/sakura_core/prop/CPropComMainMenu.cpp b/sakura_core/prop/CPropComMainMenu.cpp index 960b262941..7ea884a981 100644 --- a/sakura_core/prop/CPropComMainMenu.cpp +++ b/sakura_core/prop/CPropComMainMenu.cpp @@ -417,7 +417,7 @@ INT_PTR CPropMainMenu::DispatchEvent( case CBN_SELCHANGE: nIdxFIdx = Combo_GetCurSel( hwndComboFunkKind ); - ::SendMessageAny( hwndListFunk, WM_SETREDRAW, FALSE, 0 ); + ::SendMessage( hwndListFunk, WM_SETREDRAW, FALSE, 0 ); if (nIdxFIdx == nSpecialFuncsNum) { // 機能一覧に特殊機能をセット List_ResetContent( hwndListFunk ); @@ -429,7 +429,7 @@ INT_PTR CPropMainMenu::DispatchEvent( /* 機能一覧に文字列をセット(リストボックス)*/ m_cLookup.SetListItem( hwndListFunk, nIdxFIdx ); } - ::SendMessageAny( hwndListFunk, WM_SETREDRAW, TRUE, 0 ); + ::SendMessage( hwndListFunk, WM_SETREDRAW, TRUE, 0 ); return TRUE; } diff --git a/sakura_core/prop/CPropComToolbar.cpp b/sakura_core/prop/CPropComToolbar.cpp index 0871f8fdb9..0cb43c41a7 100644 --- a/sakura_core/prop/CPropComToolbar.cpp +++ b/sakura_core/prop/CPropComToolbar.cpp @@ -268,7 +268,7 @@ INT_PTR CPropToolbar::DispatchEvent( case CBN_SELCHANGE: nIndex2 = Combo_GetCurSel( hwndCombo ); - ::SendMessageAny( hwndFuncList, WM_SETREDRAW, FALSE, 0 ); + ::SendMessage( hwndFuncList, WM_SETREDRAW, FALSE, 0 ); List_ResetContent( hwndFuncList ); /* 機能一覧に文字列をセット (リストボックス) */ @@ -287,7 +287,7 @@ INT_PTR CPropToolbar::DispatchEvent( lResult = List_SetItemHeight( hwndFuncList, lResult, nListItemHeight ); } } - ::SendMessageAny( hwndFuncList, WM_SETREDRAW, TRUE, 0 ); + ::SendMessage( hwndFuncList, WM_SETREDRAW, TRUE, 0 ); return TRUE; } }else{ From 1283afa2ea583d80ad821bb3e75983bda0d15a33 Mon Sep 17 00:00:00 2001 From: miwa Date: Tue, 6 Oct 2020 00:36:06 +0900 Subject: [PATCH 0155/1024] =?UTF-8?q?=E5=8D=B0=E5=88=B7=E3=83=9A=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E8=A8=AD=E5=AE=9A=E3=83=80=E3=82=A4=E3=82=A2=E3=83=AD?= =?UTF-8?q?=E3=82=B0=E3=82=92=E9=96=89=E3=81=98=E3=81=9F=E5=BE=8C=E3=83=95?= =?UTF-8?q?=E3=82=A9=E3=83=B3=E3=83=88=E3=81=8C=E3=81=8A=E3=81=8B=E3=81=97?= =?UTF-8?q?=E3=81=8F=E3=81=AA=E3=82=8B=E5=95=8F=E9=A1=8C=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDialog.cpp | 2 +- sakura_core/dlg/CDialog.h | 3 +++ sakura_core/dlg/CDlgPrintSetting.cpp | 16 +++++++-------- sakura_core/dlg/CDlgPrintSetting.h | 1 - sakura_core/util/window.cpp | 30 ++++++++++++++++++---------- sakura_core/util/window.h | 2 +- 6 files changed, 32 insertions(+), 22 deletions(-) diff --git a/sakura_core/dlg/CDialog.cpp b/sakura_core/dlg/CDialog.cpp index 0423969782..3e607ef88d 100644 --- a/sakura_core/dlg/CDialog.cpp +++ b/sakura_core/dlg/CDialog.cpp @@ -184,7 +184,7 @@ BOOL CDialog::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) SetDialogPosSize(); - UpdateDialogFont( hwndDlg ); + m_hFontDialog = UpdateDialogFont( hwndDlg ); m_bInited = TRUE; return TRUE; diff --git a/sakura_core/dlg/CDialog.h b/sakura_core/dlg/CDialog.h index 10fdde678a..cbbaa79528 100644 --- a/sakura_core/dlg/CDialog.h +++ b/sakura_core/dlg/CDialog.h @@ -140,6 +140,7 @@ class CDialog HWND m_hwndParent; /* オーナーウィンドウのハンドル */ private: HWND m_hWnd; /* このダイアログのハンドル */ + HFONT m_hFontDialog; // ダイアログに設定されているフォント(破棄禁止) public: HWND m_hwndSizeBox; LPARAM m_lParam; @@ -163,5 +164,7 @@ class CDialog // コントロールに画面のフォントを設定 2012/11/27 Uchi HFONT SetMainFont( HWND hTarget ); + // このダイアログに設定されているフォントを取得 + HFONT GetDialogFont() { return m_hFontDialog; } }; #endif /* SAKURA_CDIALOG_17C8C15C_881C_4C1F_B953_CB11FCC8B70B_H_ */ diff --git a/sakura_core/dlg/CDlgPrintSetting.cpp b/sakura_core/dlg/CDlgPrintSetting.cpp index aaa192511f..6424d22115 100644 --- a/sakura_core/dlg/CDlgPrintSetting.cpp +++ b/sakura_core/dlg/CDlgPrintSetting.cpp @@ -155,14 +155,14 @@ BOOL CDlgPrintSetting::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam // ::SetTimer( GetHwnd(), IDT_PRINTSETTING, 500, NULL ); //UpdatePrintableLineAndColumn(); - // ダイアログのフォントの取得 - m_hFontDlg = (HFONT)::SendMessage( GetHwnd(), WM_GETFONT, 0, 0 ); // ダイアログのフォント + BOOL bRet = CDialog::OnInitDialog( GetHwnd(), wParam, lParam ); + + // ダイアログフォントの寸法を得ておく LOGFONT lf; - ::GetObject(m_hFontDlg, sizeof(LOGFONT), &lf); + ::GetObject(GetDialogFont(), sizeof(LOGFONT), &lf); m_nFontHeight = lf.lfHeight; // フォントサイズ - /* 基底クラスメンバ */ - return CDialog::OnInitDialog( GetHwnd(), wParam, lParam ); + return bRet; } BOOL CDlgPrintSetting::OnDestroy( void ) @@ -172,11 +172,11 @@ BOOL CDlgPrintSetting::OnDestroy( void ) // フォントの破棄 HFONT hFontOld; hFontOld = (HFONT)::SendMessage(GetItemHwnd( IDC_STATIC_FONT_HEAD ), WM_GETFONT, 0, 0 ); - if (m_hFontDlg != hFontOld) { + if (GetDialogFont() != hFontOld) { ::DeleteObject( hFontOld ); } hFontOld = (HFONT)::SendMessage(GetItemHwnd( IDC_STATIC_FONT_FOOT ), WM_GETFONT, 0, 0 ); - if (m_hFontDlg != hFontOld) { + if (GetDialogFont() != hFontOld) { ::DeleteObject( hFontOld ); } @@ -913,7 +913,7 @@ void CDlgPrintSetting::SetFontName( int idTxt, int idUse, LOGFONT& lf, int nPoin // フォントの設定 ::SendMessage( GetItemHwnd( idTxt ), WM_SETFONT, (WPARAM)hFont, MAKELPARAM(FALSE, 0) ); } - if (m_hFontDlg != hFontOld) { + if (GetDialogFont() != hFontOld) { // 古いフォントの破棄 ::DeleteObject( hFontOld ); } diff --git a/sakura_core/dlg/CDlgPrintSetting.h b/sakura_core/dlg/CDlgPrintSetting.h index c79437e99a..e111040967 100644 --- a/sakura_core/dlg/CDlgPrintSetting.h +++ b/sakura_core/dlg/CDlgPrintSetting.h @@ -57,7 +57,6 @@ class CDlgPrintSetting final : public CDialog PRINTSETTING m_PrintSettingArr[MAX_PRINTSETTINGARR]; int m_nLineNumberColumns; // 行番号表示する場合の桁数 bool m_bPrintableLinesAndColumnInvalid; - HFONT m_hFontDlg; // ダイアログのフォントハンドル int m_nFontHeight; // ダイアログのフォントのサイズ protected: diff --git a/sakura_core/util/window.cpp b/sakura_core/util/window.cpp index 1c7fa841b0..0a3f4abd3c 100644 --- a/sakura_core/util/window.cpp +++ b/sakura_core/util/window.cpp @@ -352,19 +352,27 @@ void SetFontRecursive( HWND hwnd, HFONT hFont ) EnumChildWindows( hwnd, SetFontRecursiveProc, (LPARAM)hFont ); } -void UpdateDialogFont( HWND hwnd ) +/*! + ダイアログボックス用のフォントを設定(日本語以外では何もしない) + @param[in] hwnd 設定対象ダイアログボックスのウィンドウハンドル + @return ダイアログボックスに設定されたフォントハンドル(破棄禁止) +*/ +HFONT UpdateDialogFont( HWND hwnd ) { - // 日本語リソース以外の場合はそのまま - if( wcsncmp_literal( CSelectLang::getDefaultLangString(), _T("Japanese" ) ) != 0 ){ - return; + HFONT hFontDialog = (HFONT)::SendMessageAny( hwnd, WM_GETFONT, 0, (LPARAM)NULL ); + + if( wcsncmp_literal( CSelectLang::getDefaultLangString(), _T("Japanese") ) != 0 ){ + return hFontDialog; } - HFONT hFontBase = (HFONT)::SendMessageAny( hwnd, WM_GETFONT, 0, (LPARAM)NULL ); - LOGFONT lfBaseFont = {}; - GetObject( hFontBase, sizeof( lfBaseFont ), &lfBaseFont ); - - HFONT hFont = GetSystemFont( lfBaseFont.lfHeight ); - if( hFont != NULL ){ - SetFontRecursive( hwnd, hFont ); + // 現在設定済みフォントと同じ高さのシステムフォントを得て再設定 + LOGFONT lfDialog = {}; + GetObject( hFontDialog, sizeof( lfDialog ), &lfDialog ); + HFONT hFontSystem = GetSystemFont( lfDialog.lfHeight ); + if( hFontSystem != NULL ){ + SetFontRecursive( hwnd, hFontSystem ); + hFontDialog = hFontSystem; } + + return hFontDialog; } diff --git a/sakura_core/util/window.h b/sakura_core/util/window.h index acf4c4a34e..1605141e91 100644 --- a/sakura_core/util/window.h +++ b/sakura_core/util/window.h @@ -192,6 +192,6 @@ class CDCFont HFONT m_hFont; }; -void UpdateDialogFont( HWND hwnd ); +HFONT UpdateDialogFont( HWND hwnd ); #endif /* SAKURA_WINDOW_A0833476_5E32_46BE_87B6_ECD55F10D34A_H_ */ From 9efb280d3cbe532239cee322bce67a7668f0ba77 Mon Sep 17 00:00:00 2001 From: novice123 Date: Sun, 18 Feb 2018 19:29:43 +0900 Subject: [PATCH 0156/1024] =?UTF-8?q?[patchunicode#1050]=20=E3=82=A8?= =?UTF-8?q?=E3=83=B3=E3=82=B3=E3=83=BC=E3=83=87=E3=82=A3=E3=83=B3=E3=82=B0?= =?UTF-8?q?=E5=90=8D=E3=81=AB=E3=82=88=E3=82=8B=E6=96=87=E5=AD=97=E3=82=B3?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=81=AE=E8=A8=AD=E5=AE=9A=E3=81=AE=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://sourceforge.net/p/sakura-editor/patchunicode/1050/ skrw_fix_xml_detect_v0_5.patch ・いくつかのエンコーディング名の別名を追加 MS932やSJIS、ハイフン・アンダーバー考慮 ・xml encoding名が不明な名前だった場合にUTF-8と認識されるバグを修正 例 ・xml宣言がありencoding名がない場合は、UTF-8固定だった(規格どおり)ものを自動認識を優先してそれでも不明ならUTF-8にするように修正 --- sakura_core/charset/CESI.cpp | 97 +++++++++++++++++++++++------------- 1 file changed, 62 insertions(+), 35 deletions(-) diff --git a/sakura_core/charset/CESI.cpp b/sakura_core/charset/CESI.cpp index 79d73c04a7..a2c4ef5ce8 100644 --- a/sakura_core/charset/CESI.cpp +++ b/sakura_core/charset/CESI.cpp @@ -501,11 +501,11 @@ void CESI::GetEncodingInfo_meta( const char* pS, const int nLen ) { // XML宣言は先頭にあるので、最初にチェック ECodeType encoding = AutoDetectByXML( pS, nLen ); - if( encoding == CODE_NONE ){ + if( encoding == CODE_NONE || encoding == CODE_AUTODETECT ){ // スクリプト等Coding中にHTMLがあるのでCodingを優先 encoding = AutoDetectByCoding( pS, nLen ); } - if( encoding == CODE_NONE ){ + if( encoding == CODE_NONE || encoding == CODE_AUTODETECT ){ encoding = AutoDetectByHTML( pS, nLen ); } m_eMetaName = encoding; @@ -745,24 +745,41 @@ void CESI::GuessUtf8OrCesu8( void ) } } +// 2016.04.05 いくつかの互換名を追加 static const struct{ const char* name; int nLen; int nCode; } encodingNameToCode[] = { + { "shift_jis", 9, CODE_SJIS }, { "windows-31j", 11, CODE_SJIS }, { "x-sjis", 6, CODE_SJIS }, - { "shift_jis", 9, CODE_SJIS }, { "cp932", 9, CODE_SJIS }, + { "ms932", 9, CODE_SJIS }, + { "shift-jis", 9, CODE_SJIS }, + { "csWindows31J", 12, CODE_SJIS }, + { "MS_Kanji", 8, CODE_SJIS }, + { "csShiftJIS", 10, CODE_SJIS }, + { "sjis", 4, CODE_SJIS }, { "iso-2022-jp", 11, CODE_JIS }, + { "iso2022jp", 9, CODE_JIS }, + { "csISO2022jp", 11, CODE_JIS }, { "euc-jp", 6, CODE_EUC }, + { "euc_jp", 6, CODE_EUC }, + { "eucjp", 6, CODE_EUC }, // { "utf-7", 5, CODE_UTF7 }, { "utf-8", 5, CODE_UTF8 }, + { "utf_8", 5, CODE_UTF8 }, + { "utf8", 4, CODE_UTF8 }, { "cesu-8", 6, CODE_CESU8 }, { "iso-8859-1", 10, CODE_LATIN1 }, { "latin1", 7, CODE_LATIN1 }, { "latin-1", 8, CODE_LATIN1 }, + { "iso8859_1", 9, CODE_LATIN1 }, + { "iso_8859_1", 10, CODE_LATIN1 }, + { "iso88591", 8, CODE_LATIN1 }, { "windows-1252", 12, CODE_LATIN1 }, + { "cp1252", 6, CODE_LATIN1 }, {"ibm437", 6, 437}, {"asmo-708", 8, 708}, {"dos-720", 7, 720}, @@ -861,7 +878,6 @@ static const struct{ {"x-iscii-ma", 10, 57009}, {"x-iscii-gu", 10, 57010}, {"x-iscii-pa", 10, 57011}, - { NULL, 0, 0} }; static bool IsXMLWhiteSpace( int c ) @@ -876,8 +892,28 @@ static bool IsXMLWhiteSpace( int c ) return false; } +/*! + 文字列からコードを判定する。 + + @param [in] pBuf 判定対象文字列 + @param [in] nSize 文字列サイズ + + @return 文字コード +*/ +static ECodeType MatchEncoding(const char* pBuf, int nSize) +{ + for(int k = 0; k < _countof(encodingNameToCode); k++ ){ + const int nLen = encodingNameToCode[k].nLen; + if( nLen == nSize && 0 == memicmp(encodingNameToCode[k].name, pBuf, nLen) ){ + return static_cast(encodingNameToCode[k].nCode); + } + } + return CODE_NONE; +} + /*! ファイル中のエンコーディング指定を利用した文字コード自動選択 - * @return 決定した文字コード。 未決定は-1を返す + * @return 決定した文字コード。 未決定は-1を返す。 + xml宣言ありでencodingがない場合、CODE_AUTODETECTなので注意 */ ECodeType CESI::AutoDetectByXML( const char* pBuf, int nSize ) { @@ -913,14 +949,9 @@ ECodeType CESI::AutoDetectByXML( const char* pBuf, int nSize ) quoteChar = pBuf[i]; i++; int k; - for( k = 0; encodingNameToCode[k].name != NULL; k++ ){ - const int nLen = encodingNameToCode[k].nLen; - if( i + nLen < nSize - 1 - && pBuf[i + nLen] == quoteChar - && 0 == _memicmp( encodingNameToCode[k].name, pBuf + i, nLen ) ){ - return static_cast(encodingNameToCode[k].nCode); - } - } + for(k = i; pBuf[k] != quoteChar && k < nSize - 1; ++k){} + // 2016.04.05 不明なencoding名の場合にUTF-8になっていたのをNoneに変更 + return MatchEncoding(pBuf + i, k - i); }else{ if( pBuf[i] == '<' || pBuf[i] == '>' ){ break; @@ -937,7 +968,7 @@ ECodeType CESI::AutoDetectByXML( const char* pBuf, int nSize ) } // encoding指定無しでxml宣言が終了した if( pBuf[i] == '?' && pBuf[i + 1] == '>' ){ - return CODE_UTF8; + return CODE_AUTODETECT; // 2016.04.05 特別にAUTODETECTにする。後で考慮 } } }else @@ -1041,29 +1072,20 @@ ECodeType CESI::AutoDetectByHTML( const char* pBuf, int nSize ) if( nEndAttVal <= i ){ i = nNextPos; continue; } int nCharsetBegin = i; while( i < nEndAttVal && !IsXMLWhiteSpace(pBuf[i]) ){ i++; } - int k; - for( k = 0; encodingNameToCode[k].name != NULL; k++ ){ - const int nLen = encodingNameToCode[k].nLen; - if( i - nCharsetBegin == nLen - && 0 == _memicmp( encodingNameToCode[k].name, pBuf + nCharsetBegin, nLen ) ){ - if( bContentType ){ - return static_cast(encodingNameToCode[k].nCode); - }else{ - encoding = static_cast(encodingNameToCode[k].nCode); - break; - } + ECodeType eCode = MatchEncoding(pBuf + nCharsetBegin, i - nCharsetBegin); + if( eCode != CODE_NONE ){ + if( bContentType ){ + return eCode; + }else{ + encoding = eCode; } } } i = nNextPos; }else if( 3 == nAttType ){ - int k; - for( k = 0; encodingNameToCode[k].name != NULL; k++ ){ - const int nLen = encodingNameToCode[k].nLen; - if( nEndAttVal - nBeginAttVal == nLen - && 0 == _memicmp( encodingNameToCode[k].name, pBuf + nBeginAttVal, nLen ) ){ - return static_cast(encodingNameToCode[k].nCode); - } + ECodeType eCode = MatchEncoding(pBuf + nBeginAttVal, nEndAttVal - nBeginAttVal); + if( eCode != CODE_NONE ){ + return eCode; } } }else if( '<' == pBuf[i] ){ @@ -1085,6 +1107,7 @@ static bool IsEncodingNameChar( int c ) { return ('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z') + || ('0' <= c && c <= '9') || '_' == c || '-' == c ; @@ -1111,7 +1134,7 @@ ECodeType CESI::AutoDetectByCoding( const char* pBuf, int nSize ) return CODE_NONE; } int k; - for( k = 0; encodingNameToCode[k].name != NULL; k++ ){ + for( k = 0; k < _countof(encodingNameToCode); k++ ){ const int nLen = encodingNameToCode[k].nLen; if( i - nBegin == nLen && 0 == _memicmp( encodingNameToCode[k].name, pBuf + nBegin, nLen ) ){ @@ -1196,7 +1219,7 @@ static ECodeType DetectUnicode( CESI* pcesi ) return pcesi->m_aWcInfo[ebom_type].eCodeID; } -/* +/*! 日本語コードセット判定 */ ECodeType CESI::CheckKanjiCode(const char* pBuf, size_t nBufLen) noexcept @@ -1215,7 +1238,7 @@ ECodeType CESI::CheckKanjiCode(const char* pBuf, size_t nBufLen) noexcept */ SetInformation(pBuf, nBufLen); - if( GetMetaName() != CODE_NONE ){ + if( GetMetaName() != CODE_NONE && GetMetaName() != CODE_AUTODETECT ){ return GetMetaName(); } auto nret = DetectUnicode( this ); @@ -1226,6 +1249,10 @@ ECodeType CESI::CheckKanjiCode(const char* pBuf, size_t nBufLen) noexcept if( nret != CODE_NONE && GetStatus() != ESI_NODETECTED ){ return nret; } + if( GetMetaName() == CODE_AUTODETECT ){ + // 2016.04.05 MetaがAUTODETECTの場合は、encodingがないxml文書。XML仕様書の通りUTF-8にする + return CODE_UTF8; + } // デフォルト文字コードを返す return m_pEncodingConfig->m_eDefaultCodetype; From c14cd385b1b59cdfe76b6a6acb85b22d3b4d0e94 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Wed, 30 Sep 2020 19:32:11 +0900 Subject: [PATCH 0157/1024] =?UTF-8?q?memicmp=E3=82=92=5Fmemicmp=E3=81=AB?= =?UTF-8?q?=E7=BD=AE=E6=8F=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/CESI.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/charset/CESI.cpp b/sakura_core/charset/CESI.cpp index a2c4ef5ce8..d34db39df4 100644 --- a/sakura_core/charset/CESI.cpp +++ b/sakura_core/charset/CESI.cpp @@ -904,7 +904,7 @@ static ECodeType MatchEncoding(const char* pBuf, int nSize) { for(int k = 0; k < _countof(encodingNameToCode); k++ ){ const int nLen = encodingNameToCode[k].nLen; - if( nLen == nSize && 0 == memicmp(encodingNameToCode[k].name, pBuf, nLen) ){ + if( nLen == nSize && 0 == _memicmp(encodingNameToCode[k].name, pBuf, nLen) ){ return static_cast(encodingNameToCode[k].nCode); } } From 463d262dd2485b0bd57097a60f5db5604a4e2747 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Wed, 30 Sep 2020 20:18:03 +0900 Subject: [PATCH 0158/1024] =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=9F?= =?UTF-8?q?=E3=82=A8=E3=82=A4=E3=83=AA=E3=82=A2=E3=82=B9=E3=82=92=E8=AA=8D?= =?UTF-8?q?=E8=AD=98=E3=81=A7=E3=81=8D=E3=81=A6=E3=81=84=E3=81=AA=E3=81=8B?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E5=95=8F=E9=A1=8C=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/CESI.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sakura_core/charset/CESI.cpp b/sakura_core/charset/CESI.cpp index d34db39df4..914bb25891 100644 --- a/sakura_core/charset/CESI.cpp +++ b/sakura_core/charset/CESI.cpp @@ -754,8 +754,8 @@ static const struct{ { "shift_jis", 9, CODE_SJIS }, { "windows-31j", 11, CODE_SJIS }, { "x-sjis", 6, CODE_SJIS }, - { "cp932", 9, CODE_SJIS }, - { "ms932", 9, CODE_SJIS }, + { "cp932", 5, CODE_SJIS }, + { "ms932", 5, CODE_SJIS }, { "shift-jis", 9, CODE_SJIS }, { "csWindows31J", 12, CODE_SJIS }, { "MS_Kanji", 8, CODE_SJIS }, @@ -766,15 +766,15 @@ static const struct{ { "csISO2022jp", 11, CODE_JIS }, { "euc-jp", 6, CODE_EUC }, { "euc_jp", 6, CODE_EUC }, - { "eucjp", 6, CODE_EUC }, + { "eucjp", 5, CODE_EUC }, // { "utf-7", 5, CODE_UTF7 }, { "utf-8", 5, CODE_UTF8 }, { "utf_8", 5, CODE_UTF8 }, { "utf8", 4, CODE_UTF8 }, { "cesu-8", 6, CODE_CESU8 }, { "iso-8859-1", 10, CODE_LATIN1 }, - { "latin1", 7, CODE_LATIN1 }, - { "latin-1", 8, CODE_LATIN1 }, + { "latin1", 6, CODE_LATIN1 }, + { "latin-1", 7, CODE_LATIN1 }, { "iso8859_1", 9, CODE_LATIN1 }, { "iso_8859_1", 10, CODE_LATIN1 }, { "iso88591", 8, CODE_LATIN1 }, From 8686e07ffd42a3406e5ab570b4183d517456d34f Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Fri, 2 Oct 2020 18:23:31 +0900 Subject: [PATCH 0159/1024] =?UTF-8?q?=E5=A4=89=E6=9B=B4=E6=BC=8F=E3=82=8C?= =?UTF-8?q?=E3=81=A8=E6=80=9D=E3=82=8F=E3=81=97=E3=81=8D=E7=AE=87=E6=89=80?= =?UTF-8?q?=E3=81=AB=E5=AF=BE=E5=BF=9C=E3=82=92=E8=A1=8C=E3=81=A3=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/CESI.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/charset/CESI.cpp b/sakura_core/charset/CESI.cpp index 914bb25891..f7fd93d9b9 100644 --- a/sakura_core/charset/CESI.cpp +++ b/sakura_core/charset/CESI.cpp @@ -958,7 +958,7 @@ ECodeType CESI::AutoDetectByXML( const char* pBuf, int nSize ) } // encoding指定無しでxml宣言が終了した if( pBuf[i] == '?' && pBuf[i + 1] == '>' ){ - return CODE_UTF8; + return CODE_AUTODETECT; } } } From 88ebecc2db9bee4b72d8c685dc3c8b803e0191b9 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Fri, 2 Oct 2020 22:20:09 +0900 Subject: [PATCH 0160/1024] =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=9Fi?= =?UTF-8?q?f=E6=96=87=E3=81=AE=E5=88=A4=E5=AE=9A=E7=B5=90=E6=9E=9C?= =?UTF-8?q?=E3=81=8C=E5=B8=B8=E3=81=AB=E5=81=BD=E3=81=A8=E3=81=AA=E3=82=8B?= =?UTF-8?q?=E5=8F=AF=E8=83=BD=E6=80=A7=E3=82=92=E6=8E=92=E9=99=A4=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/CESI.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/sakura_core/charset/CESI.cpp b/sakura_core/charset/CESI.cpp index f7fd93d9b9..4aadd3e2b2 100644 --- a/sakura_core/charset/CESI.cpp +++ b/sakura_core/charset/CESI.cpp @@ -501,12 +501,21 @@ void CESI::GetEncodingInfo_meta( const char* pS, const int nLen ) { // XML宣言は先頭にあるので、最初にチェック ECodeType encoding = AutoDetectByXML( pS, nLen ); + auto nret = CODE_NONE; if( encoding == CODE_NONE || encoding == CODE_AUTODETECT ){ // スクリプト等Coding中にHTMLがあるのでCodingを優先 - encoding = AutoDetectByCoding( pS, nLen ); + nret = AutoDetectByCoding( pS, nLen ); + if( nret != CODE_NONE ){ + // 判定に成功した場合はencodingを更新する + encoding = nret; + } } if( encoding == CODE_NONE || encoding == CODE_AUTODETECT ){ - encoding = AutoDetectByHTML( pS, nLen ); + nret = AutoDetectByHTML( pS, nLen ); + if( nret != CODE_NONE ){ + // 判定に成功した場合はencodingを更新する + encoding = nret; + } } m_eMetaName = encoding; } From a9524d18a3ebeb1c5d0575373342284955dee20d Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Fri, 2 Oct 2020 22:25:14 +0900 Subject: [PATCH 0161/1024] =?UTF-8?q?=E8=AA=8D=E8=AD=98=E5=8F=AF=E8=83=BD?= =?UTF-8?q?=E3=81=AA=E3=82=A8=E3=82=A4=E3=83=AA=E3=82=A2=E3=82=B9=E3=82=92?= =?UTF-8?q?=E6=8B=A1=E5=85=85=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/CESI.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/sakura_core/charset/CESI.cpp b/sakura_core/charset/CESI.cpp index 4aadd3e2b2..a9fd3a6d16 100644 --- a/sakura_core/charset/CESI.cpp +++ b/sakura_core/charset/CESI.cpp @@ -776,19 +776,39 @@ static const struct{ { "euc-jp", 6, CODE_EUC }, { "euc_jp", 6, CODE_EUC }, { "eucjp", 5, CODE_EUC }, + { "cseucpkdfmtjapanese", 19, CODE_EUC }, + { "extended_unix_code_packed_format_for_japanese", 45, CODE_EUC }, + { "x-euc-jp", 8, CODE_EUC }, // { "utf-7", 5, CODE_UTF7 }, +// { "csutf7", 6, CODE_UTF7 }, { "utf-8", 5, CODE_UTF8 }, { "utf_8", 5, CODE_UTF8 }, { "utf8", 4, CODE_UTF8 }, + { "csutf8", 6, CODE_UTF8 }, + { "unicode-1-1-utf-8", 17, CODE_UTF8 }, + { "unicode11utf8", 13, CODE_UTF8 }, + { "unicode20utf8", 13, CODE_UTF8 }, + { "x-unicode20utf8", 15, CODE_UTF8 }, { "cesu-8", 6, CODE_CESU8 }, + { "cscesu-8", 6, CODE_CESU8 }, + { "cscesu8", 7, CODE_CESU8 }, { "iso-8859-1", 10, CODE_LATIN1 }, { "latin1", 6, CODE_LATIN1 }, { "latin-1", 7, CODE_LATIN1 }, { "iso8859_1", 9, CODE_LATIN1 }, { "iso_8859_1", 10, CODE_LATIN1 }, { "iso88591", 8, CODE_LATIN1 }, + { "cp819", 5, CODE_LATIN1 }, + { "csisolatin1", 11, CODE_LATIN1 }, + { "ibm819", 6, CODE_LATIN1 }, + { "iso-ir-100", 10, CODE_LATIN1 }, + { "iso8859-1", 9, CODE_LATIN1 }, + { "iso_8859-1", 10, CODE_LATIN1 }, + { "l1", 2, CODE_LATIN1 }, { "windows-1252", 12, CODE_LATIN1 }, { "cp1252", 6, CODE_LATIN1 }, + { "cswindows1252", 13, CODE_LATIN1 }, + { "x-cp1252", 8, CODE_LATIN1 }, {"ibm437", 6, 437}, {"asmo-708", 8, 708}, {"dos-720", 7, 720}, From 57bf7ae44e0f887db745ba13eaf10f55e0bb5617 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Fri, 2 Oct 2020 22:27:29 +0900 Subject: [PATCH 0162/1024] =?UTF-8?q?=E6=96=87=E5=AD=97=E3=82=B3=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=81=AE=E5=AE=9A=E7=BE=A9=E3=81=A7=E9=87=8D=E8=A4=87?= =?UTF-8?q?=E3=81=97=E3=81=A6=E3=81=84=E3=82=8B=E3=82=82=E3=81=AE=E3=82=92?= =?UTF-8?q?=E4=B8=80=E3=81=A4=E3=81=AB=E3=81=BE=E3=81=A8=E3=82=81=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Windows-1252に対してCODE_LATIN1と1252の二つが定義されており、 それぞれの変換処理には前者の場合CLatin1::Latin1ToUni関数、後者の場合CCodePage::CPToUni関数が使われている。 Latin1(ISO-8859-1)とWindows-1252で差異のある0x80~0x9fの変換には、 どちらにおいてもMultiByteToWideChar関数にコードページ1252を指定して実行するようになっているため、 Latin1とWindows-1252を区別せずに処理しているように見えることから、後者の指定を除去することとした。 --- sakura_core/charset/CESI.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/sakura_core/charset/CESI.cpp b/sakura_core/charset/CESI.cpp index a9fd3a6d16..25398de784 100644 --- a/sakura_core/charset/CESI.cpp +++ b/sakura_core/charset/CESI.cpp @@ -834,7 +834,6 @@ static const struct{ {"ibm1026", 7, 1026}, {"windows-1250", 12, 1250}, {"windows-1251", 12, 1251}, - {"windows-1252", 12, 1252}, {"windows-1253", 12, 1253}, {"windows-1254", 12, 1254}, {"windows-1255", 12, 1255}, From d4a1777197c52c542e7d14ccc3c0bb60942cce37 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sun, 4 Oct 2020 08:17:35 +0900 Subject: [PATCH 0163/1024] =?UTF-8?q?=E3=82=B3=E3=83=BC=E3=83=89=E4=B8=8A?= =?UTF-8?q?=E3=81=AE=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88=E3=82=92=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/CESI.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sakura_core/charset/CESI.cpp b/sakura_core/charset/CESI.cpp index 25398de784..b270047615 100644 --- a/sakura_core/charset/CESI.cpp +++ b/sakura_core/charset/CESI.cpp @@ -996,7 +996,7 @@ ECodeType CESI::AutoDetectByXML( const char* pBuf, int nSize ) } // encoding指定無しでxml宣言が終了した if( pBuf[i] == '?' && pBuf[i + 1] == '>' ){ - return CODE_AUTODETECT; // 2016.04.05 特別にAUTODETECTにする。後で考慮 + return CODE_AUTODETECT; } } }else @@ -1278,7 +1278,7 @@ ECodeType CESI::CheckKanjiCode(const char* pBuf, size_t nBufLen) noexcept return nret; } if( GetMetaName() == CODE_AUTODETECT ){ - // 2016.04.05 MetaがAUTODETECTの場合は、encodingがないxml文書。XML仕様書の通りUTF-8にする + // MetaがAUTODETECTの場合は、encodingがないxml文書。これまで通りUTF-8とみなす。 return CODE_UTF8; } From 79e730701d27f0de1970f1ced5fdaa5a9a39d143 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sun, 4 Oct 2020 08:20:23 +0900 Subject: [PATCH 0164/1024] =?UTF-8?q?GetEncofing=5Fmeta=E3=81=A7=E3=81=AEi?= =?UTF-8?q?f=E6=96=87=E3=81=AE=E5=88=A4=E5=AE=9A=E5=9B=9E=E6=95=B0?= =?UTF-8?q?=E3=82=92=E6=B8=9B=E3=82=89=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/CESI.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/sakura_core/charset/CESI.cpp b/sakura_core/charset/CESI.cpp index b270047615..2d0f4d7463 100644 --- a/sakura_core/charset/CESI.cpp +++ b/sakura_core/charset/CESI.cpp @@ -508,13 +508,12 @@ void CESI::GetEncodingInfo_meta( const char* pS, const int nLen ) if( nret != CODE_NONE ){ // 判定に成功した場合はencodingを更新する encoding = nret; - } - } - if( encoding == CODE_NONE || encoding == CODE_AUTODETECT ){ - nret = AutoDetectByHTML( pS, nLen ); - if( nret != CODE_NONE ){ - // 判定に成功した場合はencodingを更新する - encoding = nret; + } else { + nret = AutoDetectByHTML( pS, nLen ); + if( nret != CODE_NONE ){ + // 判定に成功した場合はencodingを更新する + encoding = nret; + } } } m_eMetaName = encoding; From 7d0d297d55dae08f75fee83df17e7b21bed15c08 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sun, 4 Oct 2020 11:41:46 +0900 Subject: [PATCH 0165/1024] =?UTF-8?q?=E3=82=A8=E3=83=B3=E3=82=B3=E3=83=BC?= =?UTF-8?q?=E3=83=87=E3=82=A3=E3=83=B3=E3=82=B0=E5=90=8D=E3=81=AE=E5=AE=9A?= =?UTF-8?q?=E7=BE=A9=E3=81=AB=E3=83=9E=E3=82=AF=E3=83=AD=E3=82=92=E5=B0=8E?= =?UTF-8?q?=E5=85=A5=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/CESI.cpp | 300 ++++++++++++++++++----------------- 1 file changed, 154 insertions(+), 146 deletions(-) diff --git a/sakura_core/charset/CESI.cpp b/sakura_core/charset/CESI.cpp index 2d0f4d7463..b77930c814 100644 --- a/sakura_core/charset/CESI.cpp +++ b/sakura_core/charset/CESI.cpp @@ -45,6 +45,14 @@ #include "window/CEditWnd.h" #include "env/CShareData.h" +/*! + encodingNameToCode構造体におけるエンコーディング名の定義 + + name: エンコーディング名 + code: 文字コードセット種別、もしくはコードページ番号 +*/ +#define ENCODING_NAME( name, code ) { name, (int)( _countof( name ) - 1 ), (int)( code ) } + /*! マルチバイト文字コードの優先順位表(既定値) @@ -759,152 +767,152 @@ static const struct{ int nLen; int nCode; } encodingNameToCode[] = { - { "shift_jis", 9, CODE_SJIS }, - { "windows-31j", 11, CODE_SJIS }, - { "x-sjis", 6, CODE_SJIS }, - { "cp932", 5, CODE_SJIS }, - { "ms932", 5, CODE_SJIS }, - { "shift-jis", 9, CODE_SJIS }, - { "csWindows31J", 12, CODE_SJIS }, - { "MS_Kanji", 8, CODE_SJIS }, - { "csShiftJIS", 10, CODE_SJIS }, - { "sjis", 4, CODE_SJIS }, - { "iso-2022-jp", 11, CODE_JIS }, - { "iso2022jp", 9, CODE_JIS }, - { "csISO2022jp", 11, CODE_JIS }, - { "euc-jp", 6, CODE_EUC }, - { "euc_jp", 6, CODE_EUC }, - { "eucjp", 5, CODE_EUC }, - { "cseucpkdfmtjapanese", 19, CODE_EUC }, - { "extended_unix_code_packed_format_for_japanese", 45, CODE_EUC }, - { "x-euc-jp", 8, CODE_EUC }, -// { "utf-7", 5, CODE_UTF7 }, -// { "csutf7", 6, CODE_UTF7 }, - { "utf-8", 5, CODE_UTF8 }, - { "utf_8", 5, CODE_UTF8 }, - { "utf8", 4, CODE_UTF8 }, - { "csutf8", 6, CODE_UTF8 }, - { "unicode-1-1-utf-8", 17, CODE_UTF8 }, - { "unicode11utf8", 13, CODE_UTF8 }, - { "unicode20utf8", 13, CODE_UTF8 }, - { "x-unicode20utf8", 15, CODE_UTF8 }, - { "cesu-8", 6, CODE_CESU8 }, - { "cscesu-8", 6, CODE_CESU8 }, - { "cscesu8", 7, CODE_CESU8 }, - { "iso-8859-1", 10, CODE_LATIN1 }, - { "latin1", 6, CODE_LATIN1 }, - { "latin-1", 7, CODE_LATIN1 }, - { "iso8859_1", 9, CODE_LATIN1 }, - { "iso_8859_1", 10, CODE_LATIN1 }, - { "iso88591", 8, CODE_LATIN1 }, - { "cp819", 5, CODE_LATIN1 }, - { "csisolatin1", 11, CODE_LATIN1 }, - { "ibm819", 6, CODE_LATIN1 }, - { "iso-ir-100", 10, CODE_LATIN1 }, - { "iso8859-1", 9, CODE_LATIN1 }, - { "iso_8859-1", 10, CODE_LATIN1 }, - { "l1", 2, CODE_LATIN1 }, - { "windows-1252", 12, CODE_LATIN1 }, - { "cp1252", 6, CODE_LATIN1 }, - { "cswindows1252", 13, CODE_LATIN1 }, - { "x-cp1252", 8, CODE_LATIN1 }, - {"ibm437", 6, 437}, - {"asmo-708", 8, 708}, - {"dos-720", 7, 720}, - {"ibm737", 6, 737}, - {"ibm775", 6, 775}, - {"ibm850", 6, 850}, - {"ibm852", 6, 852}, - {"ibm855", 6, 855}, - {"ibm857", 6, 857}, - {"ibm00858", 8, 858}, - {"ibm860", 6, 860}, - {"ibm861", 6, 861}, - {"dos-862", 7, 862}, - {"ibm863", 6, 863}, - {"ibm864", 6, 864}, - {"ibm865", 6, 865}, - {"cp866", 5, 866}, - {"ibm869", 6, 869}, - {"windows-874", 11, 874}, - {"gb2312", 6, 936}, - {"ks_c_5601-1987", 14, 949}, - {"big5", 4, 950}, - {"ibm1026", 7, 1026}, - {"windows-1250", 12, 1250}, - {"windows-1251", 12, 1251}, - {"windows-1253", 12, 1253}, - {"windows-1254", 12, 1254}, - {"windows-1255", 12, 1255}, - {"windows-1256", 12, 1256}, - {"windows-1257", 12, 1257}, - {"windows-1258", 12, 1258}, - {"johab", 5, 1361}, - {"macintosh", 9, 10000}, - {"x-mac-japanese", 14, 10001}, - {"x-mac-chinesetrad", 17, 10002}, - {"x-mac-korean", 12, 10003}, - {"x-mac-arabic", 12, 10004}, - {"x-mac-hebrew", 12, 10005}, - {"x-mac-greek", 11, 10006}, - {"x-mac-cyrillic", 14, 10007}, - {"x-mac-chinesesimp", 17, 10008}, - {"x-mac-romanian", 14, 10010}, - {"x-mac-ukrainian", 15, 10017}, - {"x-mac-thai", 10, 10021}, - {"x-mac-ce", 8, 10029}, - {"x-mac-icelandic", 15, 10079}, - {"x-mac-turkish", 13, 10081}, - {"x-mac-croatian", 14, 10082}, - {"x-chinese-cns", 13, 20000}, - {"x-cp20001", 9, 20001}, - {"x-chinese-eten", 14, 20002}, - {"x-cp20003", 9, 20003}, - {"x-cp20004", 9, 20004}, - {"x-cp20005", 9, 20005}, - {"x-ia5", 5, 20105}, - {"x-ia5-german", 12, 20106}, - {"x-ia5-swedish", 13, 20107}, - {"x-ia5-norwegian", 15, 20108}, - {"x-cp20261", 9, 20261}, - {"x-cp20269", 9, 20269}, - {"koi8-r", 6, 20866}, - {"x-cp20936", 9, 20936}, - {"x-cp20949", 9, 20949}, - {"koi8-u", 6, 21866}, - {"iso-8859-2", 10, 28592}, - {"latin2", 6, 28592} , - {"iso-8859-3", 10, 28593}, - {"latin3", 6, 28593}, - {"iso-8859-4", 10, 28594}, - {"latin4", 6, 28594}, - {"iso-8859-5", 10, 28595}, - {"iso-8859-6", 10, 28596}, - {"iso-8859-7", 10, 28597}, - {"iso-8859-8", 10, 28598}, - {"iso-8859-9", 10, 28599}, - {"latin5", 6, 28599}, - {"iso-8859-13", 11, 28603}, - {"iso-8859-15", 11, 28605}, - {"latin-9", 7, 28605}, - {"x-europa", 8, 29001}, - {"iso-8859-8-i", 12, 38598}, - {"iso-2022-kr", 11, 50225}, - {"x-cp50227", 9, 50227}, - {"euc-cn", 6, 51936}, - {"euc-kr", 6, 51949}, - {"hz-gb-2312", 10, 52936}, - {"gb18030", 7, 54936}, - {"x-iscii-de", 10, 57002}, - {"x-iscii-be", 10, 57003}, - {"x-iscii-ta", 10, 57004}, - {"x-iscii-te", 10, 57005}, - {"x-iscii-as", 10, 57006}, - {"x-iscii-or", 10, 57007}, - {"x-iscii-ka", 10, 57008}, - {"x-iscii-ma", 10, 57009}, - {"x-iscii-gu", 10, 57010}, - {"x-iscii-pa", 10, 57011}, + ENCODING_NAME( "shift_jis", CODE_SJIS ), + ENCODING_NAME( "windows-31j", CODE_SJIS ), + ENCODING_NAME( "x-sjis", CODE_SJIS ), + ENCODING_NAME( "cp932", CODE_SJIS ), + ENCODING_NAME( "ms932", CODE_SJIS ), + ENCODING_NAME( "shift-jis", CODE_SJIS ), + ENCODING_NAME( "csWindows31J", CODE_SJIS ), + ENCODING_NAME( "MS_Kanji", CODE_SJIS ), + ENCODING_NAME( "csShiftJIS", CODE_SJIS ), + ENCODING_NAME( "sjis", CODE_SJIS ), + ENCODING_NAME( "iso-2022-jp", CODE_JIS ), + ENCODING_NAME( "iso2022jp", CODE_JIS ), + ENCODING_NAME( "csISO2022jp", CODE_JIS ), + ENCODING_NAME( "euc-jp", CODE_EUC ), + ENCODING_NAME( "euc_jp", CODE_EUC ), + ENCODING_NAME( "eucjp", CODE_EUC ), + ENCODING_NAME( "cseucpkdfmtjapanese", CODE_EUC ), + ENCODING_NAME( "extended_unix_code_packed_format_for_japanese", CODE_EUC ), + ENCODING_NAME( "x-euc-jp", CODE_EUC ), +// ENCODING_NAME( "utf-7", CODE_UTF7 ), +// ENCODING_NAME( "csutf7", CODE_UTF7 ), + ENCODING_NAME( "utf-8", CODE_UTF8 ), + ENCODING_NAME( "utf_8", CODE_UTF8 ), + ENCODING_NAME( "utf8", CODE_UTF8 ), + ENCODING_NAME( "csutf8", CODE_UTF8 ), + ENCODING_NAME( "unicode-1-1-utf-8", CODE_UTF8 ), + ENCODING_NAME( "unicode11utf8", CODE_UTF8 ), + ENCODING_NAME( "unicode20utf8", CODE_UTF8 ), + ENCODING_NAME( "x-unicode20utf8", CODE_UTF8 ), + ENCODING_NAME( "cesu-8", CODE_CESU8 ), + ENCODING_NAME( "cscesu-8", CODE_CESU8 ), + ENCODING_NAME( "cscesu8", CODE_CESU8 ), + ENCODING_NAME( "iso-8859-1", CODE_LATIN1 ), + ENCODING_NAME( "latin1", CODE_LATIN1 ), + ENCODING_NAME( "latin-1", CODE_LATIN1 ), + ENCODING_NAME( "iso8859_1", CODE_LATIN1 ), + ENCODING_NAME( "iso_8859_1", CODE_LATIN1 ), + ENCODING_NAME( "iso88591", CODE_LATIN1 ), + ENCODING_NAME( "cp819", CODE_LATIN1 ), + ENCODING_NAME( "csisolatin1", CODE_LATIN1 ), + ENCODING_NAME( "ibm819", CODE_LATIN1 ), + ENCODING_NAME( "iso-ir-100", CODE_LATIN1 ), + ENCODING_NAME( "iso8859-1", CODE_LATIN1 ), + ENCODING_NAME( "iso_8859-1", CODE_LATIN1 ), + ENCODING_NAME( "l1", CODE_LATIN1 ), + ENCODING_NAME( "windows-1252", CODE_LATIN1 ), + ENCODING_NAME( "cp1252", CODE_LATIN1 ), + ENCODING_NAME( "cswindows1252", CODE_LATIN1 ), + ENCODING_NAME( "x-cp1252", CODE_LATIN1 ), + ENCODING_NAME( "ibm437", 437 ), + ENCODING_NAME( "asmo-708", 708 ), + ENCODING_NAME( "dos-720", 720 ), + ENCODING_NAME( "ibm737", 737 ), + ENCODING_NAME( "ibm775", 775 ), + ENCODING_NAME( "ibm850", 850 ), + ENCODING_NAME( "ibm852", 852 ), + ENCODING_NAME( "ibm855", 855 ), + ENCODING_NAME( "ibm857", 857 ), + ENCODING_NAME( "ibm00858", 858 ), + ENCODING_NAME( "ibm860", 860 ), + ENCODING_NAME( "ibm861", 861 ), + ENCODING_NAME( "dos-862", 862 ), + ENCODING_NAME( "ibm863", 863 ), + ENCODING_NAME( "ibm864", 864 ), + ENCODING_NAME( "ibm865", 865 ), + ENCODING_NAME( "cp866", 866 ), + ENCODING_NAME( "ibm869", 869 ), + ENCODING_NAME( "windows-874", 874 ), + ENCODING_NAME( "gb2312", 936 ), + ENCODING_NAME( "ks_c_5601-1987", 949 ), + ENCODING_NAME( "big5", 950 ), + ENCODING_NAME( "ibm1026", 1026 ), + ENCODING_NAME( "windows-1250", 1250 ), + ENCODING_NAME( "windows-1251", 1251 ), + ENCODING_NAME( "windows-1253", 1253 ), + ENCODING_NAME( "windows-1254", 1254 ), + ENCODING_NAME( "windows-1255", 1255 ), + ENCODING_NAME( "windows-1256", 1256 ), + ENCODING_NAME( "windows-1257", 1257 ), + ENCODING_NAME( "windows-1258", 1258 ), + ENCODING_NAME( "johab", 1361 ), + ENCODING_NAME( "macintosh", 10000 ), + ENCODING_NAME( "x-mac-japanese", 10001 ), + ENCODING_NAME( "x-mac-chinesetrad", 10002 ), + ENCODING_NAME( "x-mac-korean", 10003 ), + ENCODING_NAME( "x-mac-arabic", 10004 ), + ENCODING_NAME( "x-mac-hebrew", 10005 ), + ENCODING_NAME( "x-mac-greek", 10006 ), + ENCODING_NAME( "x-mac-cyrillic", 10007 ), + ENCODING_NAME( "x-mac-chinesesimp", 10008 ), + ENCODING_NAME( "x-mac-romanian", 10010 ), + ENCODING_NAME( "x-mac-ukrainian", 10017 ), + ENCODING_NAME( "x-mac-thai", 10021 ), + ENCODING_NAME( "x-mac-ce", 10029 ), + ENCODING_NAME( "x-mac-icelandic", 10079 ), + ENCODING_NAME( "x-mac-turkish", 10081 ), + ENCODING_NAME( "x-mac-croatian", 10082 ), + ENCODING_NAME( "x-chinese-cns", 20000 ), + ENCODING_NAME( "x-cp20001", 20001 ), + ENCODING_NAME( "x-chinese-eten", 20002 ), + ENCODING_NAME( "x-cp20003", 20003 ), + ENCODING_NAME( "x-cp20004", 20004 ), + ENCODING_NAME( "x-cp20005", 20005 ), + ENCODING_NAME( "x-ia5", 20105 ), + ENCODING_NAME( "x-ia5-german", 20106 ), + ENCODING_NAME( "x-ia5-swedish", 20107 ), + ENCODING_NAME( "x-ia5-norwegian", 20108 ), + ENCODING_NAME( "x-cp20261", 20261 ), + ENCODING_NAME( "x-cp20269", 20269 ), + ENCODING_NAME( "koi8-r", 20866 ), + ENCODING_NAME( "x-cp20936", 20936 ), + ENCODING_NAME( "x-cp20949", 20949 ), + ENCODING_NAME( "koi8-u", 21866 ), + ENCODING_NAME( "iso-8859-2", 28592 ), + ENCODING_NAME( "latin2", 28592 ), + ENCODING_NAME( "iso-8859-3", 28593 ), + ENCODING_NAME( "latin3", 28593 ), + ENCODING_NAME( "iso-8859-4", 28594 ), + ENCODING_NAME( "latin4", 28594 ), + ENCODING_NAME( "iso-8859-5", 28595 ), + ENCODING_NAME( "iso-8859-6", 28596 ), + ENCODING_NAME( "iso-8859-7", 28597 ), + ENCODING_NAME( "iso-8859-8", 28598 ), + ENCODING_NAME( "iso-8859-9", 28599 ), + ENCODING_NAME( "latin5", 28599 ), + ENCODING_NAME( "iso-8859-13", 28603 ), + ENCODING_NAME( "iso-8859-15", 28605 ), + ENCODING_NAME( "latin-9", 28605 ), + ENCODING_NAME( "x-europa", 29001 ), + ENCODING_NAME( "iso-8859-8-i", 38598 ), + ENCODING_NAME( "iso-2022-kr", 50225 ), + ENCODING_NAME( "x-cp50227", 50227 ), + ENCODING_NAME( "euc-cn", 51936 ), + ENCODING_NAME( "euc-kr", 51949 ), + ENCODING_NAME( "hz-gb-2312", 52936 ), + ENCODING_NAME( "gb18030", 54936 ), + ENCODING_NAME( "x-iscii-de", 57002 ), + ENCODING_NAME( "x-iscii-be", 57003 ), + ENCODING_NAME( "x-iscii-ta", 57004 ), + ENCODING_NAME( "x-iscii-te", 57005 ), + ENCODING_NAME( "x-iscii-as", 57006 ), + ENCODING_NAME( "x-iscii-or", 57007 ), + ENCODING_NAME( "x-iscii-ka", 57008 ), + ENCODING_NAME( "x-iscii-ma", 57009 ), + ENCODING_NAME( "x-iscii-gu", 57010 ), + ENCODING_NAME( "x-iscii-pa", 57011 ), }; static bool IsXMLWhiteSpace( int c ) From 64fe1e0eea53eaa0a45abe7acf4b3c5264bb4179 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sun, 4 Oct 2020 11:42:54 +0900 Subject: [PATCH 0166/1024] =?UTF-8?q?=E6=97=A5=E4=BB=98=E3=81=AE=E5=85=A5?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88=E3=81=8C?= =?UTF-8?q?=E6=AE=8B=E3=81=A3=E3=81=A6=E3=81=84=E3=81=9F=E3=81=AE=E3=81=A7?= =?UTF-8?q?=E9=99=A4=E5=8E=BB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/CESI.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/sakura_core/charset/CESI.cpp b/sakura_core/charset/CESI.cpp index b77930c814..939314cc2f 100644 --- a/sakura_core/charset/CESI.cpp +++ b/sakura_core/charset/CESI.cpp @@ -761,7 +761,6 @@ void CESI::GuessUtf8OrCesu8( void ) } } -// 2016.04.05 いくつかの互換名を追加 static const struct{ const char* name; int nLen; @@ -985,7 +984,6 @@ ECodeType CESI::AutoDetectByXML( const char* pBuf, int nSize ) i++; int k; for(k = i; pBuf[k] != quoteChar && k < nSize - 1; ++k){} - // 2016.04.05 不明なencoding名の場合にUTF-8になっていたのをNoneに変更 return MatchEncoding(pBuf + i, k - i); }else{ if( pBuf[i] == '<' || pBuf[i] == '>' ){ From 39159b0d3a3abe196fd77a14e47dda7b0fc7767e Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Tue, 6 Oct 2020 19:23:32 +0900 Subject: [PATCH 0167/1024] =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=9F?= =?UTF-8?q?=E5=A4=89=E6=95=B0=E3=81=8C=E7=8A=B6=E6=B3=81=E6=AC=A1=E7=AC=AC?= =?UTF-8?q?=E3=81=A7=E4=BD=BF=E3=82=8F=E3=82=8C=E3=81=AA=E3=81=84=E5=8F=AF?= =?UTF-8?q?=E8=83=BD=E6=80=A7=E3=81=AB=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/CESI.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sakura_core/charset/CESI.cpp b/sakura_core/charset/CESI.cpp index 939314cc2f..eb7789ae36 100644 --- a/sakura_core/charset/CESI.cpp +++ b/sakura_core/charset/CESI.cpp @@ -509,10 +509,9 @@ void CESI::GetEncodingInfo_meta( const char* pS, const int nLen ) { // XML宣言は先頭にあるので、最初にチェック ECodeType encoding = AutoDetectByXML( pS, nLen ); - auto nret = CODE_NONE; if( encoding == CODE_NONE || encoding == CODE_AUTODETECT ){ // スクリプト等Coding中にHTMLがあるのでCodingを優先 - nret = AutoDetectByCoding( pS, nLen ); + auto nret = AutoDetectByCoding( pS, nLen ); if( nret != CODE_NONE ){ // 判定に成功した場合はencodingを更新する encoding = nret; From e821b7cb70bbce4c69a540dacbbea662220cbeb9 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Tue, 6 Oct 2020 19:25:38 +0900 Subject: [PATCH 0168/1024] =?UTF-8?q?=E6=96=87=E5=AD=97=E6=95=B0=E3=81=AE?= =?UTF-8?q?=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF=E3=81=AB=E3=83=AB=E3=83=BC?= =?UTF-8?q?=E3=83=97=E3=82=92=E4=BD=BF=E3=82=8F=E3=81=AA=E3=81=84=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/CESI.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/sakura_core/charset/CESI.cpp b/sakura_core/charset/CESI.cpp index eb7789ae36..0425055535 100644 --- a/sakura_core/charset/CESI.cpp +++ b/sakura_core/charset/CESI.cpp @@ -981,9 +981,8 @@ ECodeType CESI::AutoDetectByXML( const char* pBuf, int nSize ) } quoteChar = pBuf[i]; i++; - int k; - for(k = i; pBuf[k] != quoteChar && k < nSize - 1; ++k){} - return MatchEncoding(pBuf + i, k - i); + std::string sBuf = pBuf; + return MatchEncoding( pBuf + i, sBuf.find_first_of( quoteChar, i ) - i ); }else{ if( pBuf[i] == '<' || pBuf[i] == '>' ){ break; From d3d8a4d20ca864d7367d225713882b4f75ece71c Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Tue, 6 Oct 2020 19:27:20 +0900 Subject: [PATCH 0169/1024] =?UTF-8?q?AutoDetect=E7=B3=BB=E9=96=A2=E6=95=B0?= =?UTF-8?q?=E3=81=AB=E3=81=8A=E3=81=91=E3=82=8B=E5=88=A4=E5=AE=9A=E5=87=A6?= =?UTF-8?q?=E7=90=86=E3=82=92=E7=B5=B1=E4=B8=80=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/CESI.cpp | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/sakura_core/charset/CESI.cpp b/sakura_core/charset/CESI.cpp index 0425055535..fb916497b7 100644 --- a/sakura_core/charset/CESI.cpp +++ b/sakura_core/charset/CESI.cpp @@ -1164,14 +1164,7 @@ ECodeType CESI::AutoDetectByCoding( const char* pBuf, int nSize ) if( nBegin == i ){ return CODE_NONE; } - int k; - for( k = 0; k < _countof(encodingNameToCode); k++ ){ - const int nLen = encodingNameToCode[k].nLen; - if( i - nBegin == nLen - && 0 == _memicmp( encodingNameToCode[k].name, pBuf + nBegin, nLen ) ){ - return static_cast(encodingNameToCode[k].nCode); - } - } + return MatchEncoding( pBuf + nBegin, i - nBegin ); }else if( '\r' == pBuf[i] || '\n' == pBuf[i] ){ if( '\r' == pBuf[i] && '\n' == pBuf[i+1] ){ i++; From 024704aedab1dfcc5e17c1d897ed7840f90e4342 Mon Sep 17 00:00:00 2001 From: miwa Date: Tue, 6 Oct 2020 00:39:58 +0900 Subject: [PATCH 0170/1024] =?UTF-8?q?=E3=82=A2=E3=82=A6=E3=83=88=E3=83=A9?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E8=A7=A3=E6=9E=90=E3=83=84=E3=83=AA=E3=83=BC?= =?UTF-8?q?=E3=83=98=E3=83=83=E3=83=80=E9=83=A8=E3=81=AE=E3=82=B5=E3=82=A4?= =?UTF-8?q?=E3=82=BA=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/sakura_rc.rc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index 93637df292..fd395e3cf8 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -157,7 +157,7 @@ STYLE DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CLIPCHILD CAPTION "x" FONT 9, "MS Pゴシック" BEGIN - CONTROL "Tree1", IDC_TREE_FL, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 0, 17, 234, 235 + CONTROL "Tree1", IDC_TREE_FL, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 0, 20, 234, 232 CONTROL "List1", IDC_LIST_FL, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP, 0, 0, 234, 252 PUSHBUTTON "▼", IDC_BUTTON_MENU, 1, 255, 10, 14, NOT WS_TABSTOP CONTROL "■", IDC_BUTTON_WINSIZE, "Button", BS_AUTOCHECKBOX | BS_PUSHLIKE, 12, 255, 10, 14 From 54ca5100f0a73e7a95a57712c4169b1a6962f97c Mon Sep 17 00:00:00 2001 From: miwa Date: Thu, 8 Oct 2020 09:41:42 +0900 Subject: [PATCH 0171/1024] =?UTF-8?q?=E9=96=A2=E6=95=B0=E5=90=8D=E3=83=BB?= =?UTF-8?q?=E3=82=AD=E3=83=A3=E3=83=83=E3=82=B7=E3=83=A5=E3=82=AD=E3=83=BC?= =?UTF-8?q?=E8=A6=8B=E7=9B=B4=E3=81=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/window.cpp | 60 +++++++++++++++++++++++++++---------- 1 file changed, 44 insertions(+), 16 deletions(-) diff --git a/sakura_core/util/window.cpp b/sakura_core/util/window.cpp index 0a3f4abd3c..76550b589a 100644 --- a/sakura_core/util/window.cpp +++ b/sakura_core/util/window.cpp @@ -5,6 +5,7 @@ #include "env/CSakuraEnvironment.h" #include #include "window.h" +#include int CDPI::nDpiX = 96; int CDPI::nDpiY = 96; @@ -311,34 +312,56 @@ void CFontAutoDeleter::Release() } #endif -HFONT GetSystemFont( LONG nHeight ) +/*! + システムフォントに準拠したフォントを取得 + @param[in] nLogicalHeight フォント高さ(論理単位) + @return フォントハンドル(破棄禁止) +*/ +HFONT GetSystemBasedFont( LONG nLogicalHeight ) { - // キー:"フォント名/高さ" + // キー:文字列化したLOGFONT static std::map fontStock; - NONCLIENTMETRICS metrics = {}; - metrics.cbSize = sizeof( metrics ); + NONCLIENTMETRICS metrics = { CCSIZEOF_STRUCT( NONCLIENTMETRICS, lfMessageFont ) }; if( !SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &metrics, 0 ) ) { return NULL; } LOGFONT lfFont = metrics.lfMessageFont; - - const size_t nKeySize = LF_FACESIZE + 5; - TCHAR key[nKeySize] = {}; - auto_snprintf_s( key, nKeySize, _T("%s/%d"), lfFont.lfFaceName, nHeight ); - auto found = fontStock.find( key ); + lfFont.lfHeight = nLogicalHeight; + + std::wostringstream key; + key << lfFont.lfHeight << " " + << lfFont.lfWidth << " " + << lfFont.lfEscapement << " " + << lfFont.lfOrientation << " " + << lfFont.lfWeight << " " + << lfFont.lfItalic << " " + << lfFont.lfUnderline << " " + << lfFont.lfStrikeOut << " " + << lfFont.lfCharSet << " " + << lfFont.lfOutPrecision << " " + << lfFont.lfClipPrecision << " " + << lfFont.lfQuality << " " + << lfFont.lfPitchAndFamily << " " + << lfFont.lfFaceName; + auto found = fontStock.find( key.str() ); if( found != fontStock.end() ) { return found->second; } - lfFont.lfHeight = nHeight; HFONT hFont = CreateFontIndirect( &lfFont ); if( hFont != NULL ) { - fontStock[key] = hFont; + fontStock[key.str()] = hFont; } + return hFont; } +/*! + SetFontRecursiveで使用するコールバック関数 + @param[in] hwnd 設定先のウィンドウハンドル + @param[in] hFont フォントハンドル +*/ BOOL CALLBACK SetFontRecursiveProc( HWND hwnd, LPARAM hFont ) { SendMessageAny( hwnd, WM_SETFONT, (WPARAM)hFont, (LPARAM)FALSE ); @@ -346,6 +369,11 @@ BOOL CALLBACK SetFontRecursiveProc( HWND hwnd, LPARAM hFont ) return TRUE; } +/*! + 指定したウィンドウおよびその子孫にフォントを設定 + @param[in] hwnd 設定先のウィンドウハンドル + @param[in] hFont フォントハンドル +*/ void SetFontRecursive( HWND hwnd, HFONT hFont ) { SendMessageAny( hwnd, WM_SETFONT, (WPARAM)hFont, (LPARAM)FALSE ); @@ -365,13 +393,13 @@ HFONT UpdateDialogFont( HWND hwnd ) return hFontDialog; } - // 現在設定済みフォントと同じ高さのシステムフォントを得て再設定 + // 現在設定済みフォントと同じ高さのシステムフォント風フォントを得て再設定 LOGFONT lfDialog = {}; GetObject( hFontDialog, sizeof( lfDialog ), &lfDialog ); - HFONT hFontSystem = GetSystemFont( lfDialog.lfHeight ); - if( hFontSystem != NULL ){ - SetFontRecursive( hwnd, hFontSystem ); - hFontDialog = hFontSystem; + HFONT hFontSystemBased = GetSystemBasedFont( lfDialog.lfHeight ); + if( hFontSystemBased != NULL ){ + SetFontRecursive( hwnd, hFontSystemBased ); + hFontDialog = hFontSystemBased; } return hFontDialog; From 0ea3203919ec15fdc5c23e8ff76050122d7f79a0 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Thu, 8 Oct 2020 20:31:48 +0900 Subject: [PATCH 0172/1024] =?UTF-8?q?encoding=E6=8C=87=E5=AE=9A=E3=81=8C?= =?UTF-8?q?=E5=BC=95=E7=94=A8=E7=AC=A6=E3=81=A7=E7=B5=82=E3=82=8F=E3=81=A3?= =?UTF-8?q?=E3=81=A6=E3=81=84=E3=81=AA=E3=81=84=E5=A0=B4=E5=90=88=E3=81=AB?= =?UTF-8?q?=E5=88=A4=E5=AE=9A=E5=87=A6=E7=90=86=E3=82=92=E8=A1=8C=E3=82=8F?= =?UTF-8?q?=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ::find_first_ofの戻り値がnposだった場合、MatchEncodingの第2引数が負数となってしまうため、 MatchEncodingでの判定処理が成功しなくなってしまう。 もしnposの場合は判定を省略し、指定がなかったものとして扱うようにする。 std::stringを使用していた箇所をstd::string_viewを使用するように変更する。 --- sakura_core/charset/CESI.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sakura_core/charset/CESI.cpp b/sakura_core/charset/CESI.cpp index fb916497b7..cb046b9d88 100644 --- a/sakura_core/charset/CESI.cpp +++ b/sakura_core/charset/CESI.cpp @@ -981,8 +981,12 @@ ECodeType CESI::AutoDetectByXML( const char* pBuf, int nSize ) } quoteChar = pBuf[i]; i++; - std::string sBuf = pBuf; - return MatchEncoding( pBuf + i, sBuf.find_first_of( quoteChar, i ) - i ); + std::string_view sBuf( pBuf, nSize ); + auto nLen = sBuf.find_first_of( quoteChar, i ); + if( nLen == std::string_view::npos ){ + break; + } + return MatchEncoding( pBuf + i, nLen - i ); }else{ if( pBuf[i] == '<' || pBuf[i] == '>' ){ break; From 03657f7d53c0fab722dfc0e4c5fda4cb365dd282 Mon Sep 17 00:00:00 2001 From: miwa Date: Sun, 11 Oct 2020 16:56:46 +0900 Subject: [PATCH 0173/1024] =?UTF-8?q?=E3=83=90=E3=83=BC=E3=82=B8=E3=83=A7?= =?UTF-8?q?=E3=83=B3=E6=83=85=E5=A0=B1=E3=83=80=E3=82=A4=E3=82=A2=E3=83=AD?= =?UTF-8?q?=E3=82=B0=E3=81=AE=E6=96=87=E5=AD=97=E5=88=87=E3=82=8C=E8=A7=A3?= =?UTF-8?q?=E6=B6=88=E3=81=A8URL=E3=81=AE=E4=B8=8B=E7=B7=9A=E6=B6=88?= =?UTF-8?q?=E3=81=88=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgAbout.cpp | 6 +++--- sakura_core/sakura_rc.rc | 30 +++++++++++++++--------------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/sakura_core/dlg/CDlgAbout.cpp b/sakura_core/dlg/CDlgAbout.cpp index 1985ec26a1..a34137af36 100644 --- a/sakura_core/dlg/CDlgAbout.cpp +++ b/sakura_core/dlg/CDlgAbout.cpp @@ -269,6 +269,9 @@ BOOL CDlgAbout::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) } // To Here Dec. 2, 2002 genta + /* 基底クラスメンバ */ + (void)CDialog::OnInitDialog( GetHwnd(), wParam, lParam ); + // URLウィンドウをサブクラス化する m_UrlUrWnd.SetSubclassWindow( GetItemHwnd( IDC_STATIC_URL_UR ) ); #ifdef GIT_REMOTE_ORIGIN_URL @@ -287,9 +290,6 @@ BOOL CDlgAbout::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) // Oct. 22, 2005 genta 原作者ホームページが無くなったので削除 //m_UrlOrgWnd.SubclassWindow( GetItemHwnd(IDC_STATIC_URL_ORG ) ); - /* 基底クラスメンバ */ - (void)CDialog::OnInitDialog( GetHwnd(), wParam, lParam ); - /* デフォルトでは一番最初のタブオーダーの要素になるので明示的に OK ボタンにフォーカスを合わせる */ ::SetFocus(GetItemHwnd(IDOK)); diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index fd395e3cf8..cde4152bc8 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -95,37 +95,37 @@ BEGIN PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 221, 73, 58, 14 END -IDD_ABOUT DIALOG DISCARDABLE 0, 0, 245, 228 +IDD_ABOUT DIALOG DISCARDABLE 0, 0, 260, 228 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "バージョン情報" FONT 9, "MS Pゴシック" BEGIN ICON IDI_ICON_STD, IDC_STATIC_MYICON, 5, 5, 20, 20, SS_NOTIFY - EDITTEXT IDC_EDIT_VER, 33, 6, 204, 51, ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP - LTEXT "原作者: たけ(竹パンダ) さん", IDC_STATIC, 33, 61, 125, 10, NOT WS_GROUP - LTEXT S_COPYRIGHT, IDC_STATIC, 33, 75, 205, 10, NOT WS_GROUP | SS_NOPREFIX + EDITTEXT IDC_EDIT_VER, 33, 5, 219, 70, ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "原作者: たけ(竹パンダ) さん", IDC_STATIC, 33, 75, 125, 10, NOT WS_GROUP + LTEXT S_COPYRIGHT, IDC_STATIC, 33, 85, 220, 11, NOT WS_GROUP | SS_NOPREFIX LTEXT "Project URL:", IDC_STATIC_URL_CAPTION, 33, 103, 71, 10, NOT WS_GROUP - LTEXT "https://sakura-editor.github.io/", IDC_STATIC_URL_UR, 101, 103, 120, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP + LTEXT "https://sakura-editor.github.io/", IDC_STATIC_URL_UR, 91, 103, 120, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP #ifdef GIT_REMOTE_ORIGIN_URL - LTEXT "Source URL:", IDC_STATIC_GIT_CAPTION, 33, 113, 71, 10, NOT WS_GROUP - LTEXT GIT_REMOTE_ORIGIN_URL, IDC_STATIC_URL_GIT, 101, 113, 120, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP + LTEXT "Source URL:", IDC_STATIC_GIT_CAPTION, 33, 114, 71, 10, NOT WS_GROUP + LTEXT GIT_REMOTE_ORIGIN_URL, IDC_STATIC_URL_GIT, 91, 114, 120, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP #endif #ifdef CI_BUILD_NUMBER_LABEL - LTEXT "Build URL:", IDC_STATIC_URL_CI_BUILD_CAPTION, 33, 123, 71, 10, NOT WS_GROUP - LTEXT CI_BUILD_NUMBER_LABEL, IDC_STATIC_URL_CI_BUILD, 101, 123, 120, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP + LTEXT "Build URL:", IDC_STATIC_URL_CI_BUILD_CAPTION, 33, 125, 71, 10, NOT WS_GROUP + LTEXT CI_BUILD_NUMBER_LABEL, IDC_STATIC_URL_CI_BUILD, 91, 125, 120, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP #endif #if defined( GITHUB_COMMIT_URL ) || defined( GITHUB_PR_HEAD_URL ) - LTEXT "GitHub URL:", IDC_STATIC_URL_GITHUB_CAPTION, 33, 133, 50, 10, NOT WS_GROUP + LTEXT "GitHub URL:", IDC_STATIC_URL_GITHUB_CAPTION, 33, 136, 50, 10, NOT WS_GROUP #endif #if defined( GITHUB_COMMIT_URL ) - LTEXT GIT_SHORT_COMMIT_HASH, IDC_STATIC_URL_GITHUB_COMMIT, 101, 133, 30, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP + LTEXT GIT_SHORT_COMMIT_HASH, IDC_STATIC_URL_GITHUB_COMMIT, 91, 136, 30, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP #endif #if defined( GITHUB_PR_HEAD_URL ) - LTEXT GITHUB_PR_NUMBER_LABEL, IDC_STATIC_URL_GITHUB_PR, 150, 133, 30, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP + LTEXT GITHUB_PR_NUMBER_LABEL, IDC_STATIC_URL_GITHUB_PR, 140, 136, 30, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP #endif - EDITTEXT IDC_EDIT_ABOUT, 5, 146, 233, 53, ES_MULTILINE | ES_READONLY | WS_VSCROLL | NOT WS_TABSTOP - DEFPUSHBUTTON "&OK", IDOK, 97, 203, 50, 14 - PUSHBUTTON "情報をコピー(&C)", IDC_BUTTON_COPY, 178, 203, 60, 14 + EDITTEXT IDC_EDIT_ABOUT, 5, 152, 248, 53, ES_MULTILINE | ES_READONLY | WS_VSCROLL | NOT WS_TABSTOP + DEFPUSHBUTTON "&OK", IDOK, 112, 209, 50, 14 + PUSHBUTTON "情報をコピー(&C)", IDC_BUTTON_COPY, 193, 209, 60, 14 END IDD_JUMP DIALOGEX 0, 0, 252, 121 From f4a552969c45dbaa6f1ff28fdb3d214f0d814010 Mon Sep 17 00:00:00 2001 From: miwa Date: Sun, 11 Oct 2020 20:47:17 +0900 Subject: [PATCH 0174/1024] =?UTF-8?q?=E6=96=87=E5=AD=97=E5=88=87=E3=82=8C/?= =?UTF-8?q?=E9=87=8D=E3=81=AA=E3=82=8A=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 履歴とお気に入りの管理のヘルプボタンとサイズ変更グリップとの重なり * 共通設定->支援タブのmigemoとテキストボックスとの重なり * 共通設定->編集タブの「改行コードNEL,PS,LSを有効にする」の右側文字切れ * タイプ別設定->ウィンドウタブの「折り返し単位」の右側文字切れ * タイプ別設定->正規表現キーワードタブのDLL名下部文字切れ * 印刷ページ設定の「ヘッダー」付近のテキストボックス上部切れ --- sakura_core/sakura_rc.rc | 82 ++++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index cde4152bc8..52ffc08927 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -459,14 +459,14 @@ BEGIN RTEXT "0", IDC_STATIC_ENABLELINES, 215, 110, 20, 10 GROUPBOX "", IDC_STATIC, 145, 87, 112, 37 CONTROL "カラー印刷(&V)", IDC_CHECK_COLORPRINT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 150, 145, 61, 10 - LTEXT "ヘッダー(&U)", IDC_STATIC, 107, 165, 38, 10 + LTEXT "ヘッダー(&U)", IDC_STATIC, 107, 163, 38, 10 EDITTEXT IDC_EDIT_HEAD1, 107, 175, 50, 12, ES_AUTOHSCROLL EDITTEXT IDC_EDIT_HEAD2, 158, 175, 50, 12, ES_AUTOHSCROLL EDITTEXT IDC_EDIT_HEAD3, 209, 175, 50, 12, ES_AUTOHSCROLL CONTROL "使用", IDC_CHECK_USE_FONT_HEAD, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 260, 164, 30, 10 PUSHBUTTON "フォント", IDC_BUTTON_FONT_HEAD, 260, 174, 30, 14 - RTEXT "Font(xxpt/xx.xmm)", IDC_STATIC_FONT_HEAD, 145, 161, 114, 14, SS_CENTERIMAGE - LTEXT "フッター(&D)", IDC_STATIC, 107, 193, 38, 10 + RTEXT "Font(xxpt/xx.xmm)", IDC_STATIC_FONT_HEAD, 145, 160, 114, 14, SS_CENTERIMAGE + LTEXT "フッター(&D)", IDC_STATIC, 107, 191, 38, 10 EDITTEXT IDC_EDIT_FOOT1, 107, 203, 50, 12, ES_AUTOHSCROLL EDITTEXT IDC_EDIT_FOOT2, 158, 203, 50, 12, ES_AUTOHSCROLL EDITTEXT IDC_EDIT_FOOT3, 209, 203, 50, 12, ES_AUTOHSCROLL @@ -605,7 +605,7 @@ BEGIN PUSHBUTTON "選択項目(&D)", IDC_BUTTON_DELETE_SELECTED, 315, 237, 58, 14 DEFPUSHBUTTON "閉じる(&C)", IDOK, 260, 255, 50, 14 CONTROL "Tab1", IDC_TAB_FAVORITE, "SysTabControl32", WS_TABSTOP, 3, 4, 374, 15 - PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 320, 255, 50, 14 + PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 315, 255, 50, 14 LTEXT "Message", IDC_STATIC_FAVORITE_MSG, 4, 254, 250, 19 END @@ -624,8 +624,8 @@ BEGIN PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 243, 170, 50, 14 DEFPUSHBUTTON "ジャンプ(&J)", IDOK, 296, 170, 50, 14 PUSHBUTTON "キャンセル(&X)", IDCANCEL, 349, 170, 50, 14 - CONTROL "大文字小文字の同一視(&F)", IDC_CHECK_ICASE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 144, 163, 93, 10 - CONTROL "文字列の途中にマッチ(&A)", IDC_CHECK_ANYWHERE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 144, 175, 93, 10 + CONTROL "大文字小文字の同一視(&F)", IDC_CHECK_ICASE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 144, 163, 95, 10 + CONTROL "文字列の途中にマッチ(&A)", IDC_CHECK_ANYWHERE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 144, 175, 95, 10 END IDD_TAG_MAKE DIALOGEX 0, 0, 233, 85 @@ -910,7 +910,7 @@ EXSTYLE WS_EX_CONTEXTHELP FONT 9, "MS Pゴシック" BEGIN CONTROL "正規表現キーワードを使用する(&R)", IDC_CHECK_REGEX, "Button", BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP, 5, 5, 124, 10 - RTEXT "BREGONIG.DLL Version", IDC_LABEL_REGEX_VERSION, 89, 15, 208, 10, NOT WS_GROUP, WS_EX_TRANSPARENT + RTEXT "BREGONIG.DLL Version", IDC_LABEL_REGEX_VERSION, 89, 15, 208, 11, NOT WS_GROUP, WS_EX_TRANSPARENT GROUPBOX "正規表現キーワード(&K)", IDC_FRAME_REGEX, 3, 24, 295, 169 CONTROL "List5", IDC_LIST_REGEX, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOLABELWRAP | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 8, 36, 243, 115 LTEXT "正規表現(&N)", IDC_LABEL_REGEX_KEYWORD, 13, 157, 41, 10, NOT WS_GROUP @@ -981,8 +981,8 @@ BEGIN CONTROL "", IDC_STATIC, "Static", SS_ETCHEDFRAME, 5, 88, 293, 1 LTEXT "ウィンドウ", IDC_STATIC, 5, 96, 36, 10 CONTROL "文書アイコンを使う(&O)", IDC_CHECK_DOCICON, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 107, 86, 10 - CONTROL "折り返し単位(&R)", IDC_RADIO_LINENUM_LAYOUT, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 8, 134, 60, 10 - CONTROL "改行単位(&W)", IDC_RADIO_LINENUM_CRLF, "Button", BS_AUTORADIOBUTTON, 8, 149, 60, 10 + CONTROL "折り返し単位(&R)", IDC_RADIO_LINENUM_LAYOUT, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 8, 134, 64, 10 + CONTROL "改行単位(&W)", IDC_RADIO_LINENUM_CRLF, "Button", BS_AUTORADIOBUTTON, 8, 149, 64, 10 LTEXT "桁数", IDC_STATIC, 18, 165, 16, 10 EDITTEXT IDC_EDIT_LINENUMWIDTH, 41, 163, 31, 12, ES_AUTOHSCROLL CONTROL "Spin3", IDC_SPIN_LINENUMWIDTH, "msctls_updown32", UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY, 61, 163, 9, 12 @@ -1220,31 +1220,31 @@ STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAP EXSTYLE WS_EX_CONTEXTHELP FONT 9, "MS Pゴシック" BEGIN - CONTROL "折り返し行に改行を付けてコピー(&C)", IDC_CHECK_ADDCRLFWHENCOPY, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 16, 143, 10 - CONTROL "コピーしたら選択解除(&R)", IDC_CHECK_COPYnDISABLESELECTEDAREA, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 29, 143, 10 - CONTROL "選択なしでコピーを可能にする(&E)", IDC_CHECK_bEnableNoSelectCopy, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 42, 143, 10 - CONTROL "ラインモード貼り付けを可能にする(&L)", IDC_CHECK_bEnableLineModePaste, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 55, 143, 10 - CONTROL "改行コードを変換して貼り付ける(&P)", IDC_CHECK_CONVERTEOLPASTE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 68, 143, 10 - GROUPBOX "コピー", IDC_STATIC, 3, 3, 149, 81, WS_GROUP - CONTROL "ドラッグ && ドロップ編集する(&D)", IDC_CHECK_DRAGDROP, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 104, 143, 10 - CONTROL "ドロップ元にする(&S)", IDC_CHECK_DROPSOURCE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 117, 143, 10 - GROUPBOX "ドラッグ && ドロップ", IDC_STATIC, 3, 91, 149, 43, WS_GROUP - CONTROL "改行コードは上書きしない(&N)", IDC_CHECK_bNotOverWriteCRLF, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 156, 143, 10 - CONTROL "文字幅に合わせてスペースを詰める(&F)", IDC_CHECK_bOverWriteFixMode, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 169, 143, 10 - CONTROL "矩形入力で選択範囲を削除する(&G)", IDC_CHECK_bOverWriteBoxDelete, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 182, 143, 10 - GROUPBOX "上書きモード", IDC_STATIC, 3, 143, 149, 58, WS_GROUP - CONTROL "クリックで&URLを選択する", IDC_CHECK_bSelectClickedURL, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 161, 18, 120, 10 - GROUPBOX "クリッカブルURL", IDC_STATIC, 156, 3, 131, 35, WS_GROUP - CONTROL "カレントフォルダ(&U)", IDC_RADIO_CURDIR, "Button", BS_AUTORADIOBUTTON, 161, 54, 90, 10 - CONTROL "最近使ったフォルダ(&M)", IDC_RADIO_MRUDIR, "Button", BS_AUTORADIOBUTTON, 161, 69, 90, 10 - CONTROL "指定フォルダ(&F)", IDC_RADIO_SELDIR, "Button", BS_AUTORADIOBUTTON, 161, 84, 90, 10 - EDITTEXT IDC_EDIT_FILEOPENDIR, 161, 100, 111, 12, ES_AUTOHSCROLL - PUSHBUTTON "...", IDC_BUTTON_FILEOPENDIR, 273, 100, 9, 12 - GROUPBOX "ファイルダイアログの初期位置", IDC_STATIC, 156, 41, 130, 79, WS_GROUP - CONTROL "Vistaスタイルのファイルダイアログ(&I)", IDC_CHECK_VISTA_STYLE_FILEDIALOG, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 161, 128, 125, 10 - CONTROL "改行コードNEL, PS, LSを有効にする(&O)", IDC_CHECK_ENABLEEXTEOL, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 161, 158, 122, 10 - CONTROL "矩形選択移動で選択をロックする(&B)", IDC_CHECK_BOXSELECTLOCK, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 161, 171, 122, 10 - GROUPBOX "その他", IDC_STATIC, 156, 145, 131, 42, WS_GROUP + CONTROL "折り返し行に改行を付けてコピー(&C)", IDC_CHECK_ADDCRLFWHENCOPY, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 16, 131, 10 + CONTROL "コピーしたら選択解除(&R)", IDC_CHECK_COPYnDISABLESELECTEDAREA, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 29, 131, 10 + CONTROL "選択なしでコピーを可能にする(&E)", IDC_CHECK_bEnableNoSelectCopy, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 42, 131, 10 + CONTROL "ラインモード貼り付けを可能にする(&L)", IDC_CHECK_bEnableLineModePaste, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 55, 131, 10 + CONTROL "改行コードを変換して貼り付ける(&P)", IDC_CHECK_CONVERTEOLPASTE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 68, 131, 10 + GROUPBOX "コピー", IDC_STATIC, 3, 3, 137, 81, WS_GROUP + CONTROL "ドラッグ && ドロップ編集する(&D)", IDC_CHECK_DRAGDROP, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 104, 131, 10 + CONTROL "ドロップ元にする(&S)", IDC_CHECK_DROPSOURCE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 117, 131, 10 + GROUPBOX "ドラッグ && ドロップ", IDC_STATIC, 3, 91, 137, 43, WS_GROUP + CONTROL "改行コードは上書きしない(&N)", IDC_CHECK_bNotOverWriteCRLF, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 156, 131, 10 + CONTROL "文字幅に合わせてスペースを詰める(&F)", IDC_CHECK_bOverWriteFixMode, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 169, 131, 10 + CONTROL "矩形入力で選択範囲を削除する(&G)", IDC_CHECK_bOverWriteBoxDelete, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 182, 131, 10 + GROUPBOX "上書きモード", IDC_STATIC, 3, 143, 137, 58, WS_GROUP + CONTROL "クリックで&URLを選択する", IDC_CHECK_bSelectClickedURL, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 149, 18, 120, 10 + GROUPBOX "クリッカブルURL", IDC_STATIC, 144, 3, 142, 35, WS_GROUP + CONTROL "カレントフォルダ(&U)", IDC_RADIO_CURDIR, "Button", BS_AUTORADIOBUTTON, 149, 54, 90, 10 + CONTROL "最近使ったフォルダ(&M)", IDC_RADIO_MRUDIR, "Button", BS_AUTORADIOBUTTON, 149, 69, 90, 10 + CONTROL "指定フォルダ(&F)", IDC_RADIO_SELDIR, "Button", BS_AUTORADIOBUTTON, 149, 84, 90, 10 + EDITTEXT IDC_EDIT_FILEOPENDIR, 149, 100, 111, 12, ES_AUTOHSCROLL + PUSHBUTTON "...", IDC_BUTTON_FILEOPENDIR, 261, 100, 9, 12 + GROUPBOX "ファイルダイアログの初期位置", IDC_STATIC, 144, 41, 142, 79, WS_GROUP + CONTROL "Vistaスタイルのファイルダイアログ(&I)", IDC_CHECK_VISTA_STYLE_FILEDIALOG, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 149, 128, 137, 10 + CONTROL "改行コードNEL, PS, LSを有効にする(&O)", IDC_CHECK_ENABLEEXTEOL, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 149, 158, 134, 10 + CONTROL "矩形選択移動で選択をロックする(&B)", IDC_CHECK_BOXSELECTLOCK, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 149, 171, 134, 10 + GROUPBOX "その他", IDC_STATIC, 144, 145, 142, 42, WS_GROUP END IDD_PROP_FILE DIALOGEX 0, 0, 293, 240 @@ -1498,13 +1498,13 @@ BEGIN GROUPBOX "キーワードヘルプ", IDC_STATIC, 3, 123, 285, 33, WS_GROUP RTEXT "Font", IDC_STATIC_KEYWORDHELPFONT, 8, 136, 219, 17, SS_RIGHT PUSHBUTTON "フォント(&F)...", IDC_BUTTON_KEYWORDHELPFONT, 232, 136, 51, 14 - LTEXT "DLL(&M)", IDC_STATIC, 7, 172, 26, 10 - EDITTEXT IDC_EDIT_MIGEMO_DLL, 36, 170, 224, 12, ES_AUTOHSCROLL | WS_GROUP - PUSHBUTTON "(&3)...", IDC_BUTTON_OPENMDLL, 264, 169, 19, 14 - LTEXT "辞書(&I)", IDC_STATIC, 7, 188, 25, 10 - EDITTEXT IDC_EDIT_MIGEMO_DICT, 36, 187, 224, 12, ES_AUTOHSCROLL - PUSHBUTTON "(&4)...", IDC_BUTTON_OPENMDICT, 264, 187, 19, 14 - GROUPBOX "migemo設定", IDC_STATIC, 3, 159, 285, 47, WS_GROUP + LTEXT "DLL(&M)", IDC_STATIC, 7, 174, 26, 10 + EDITTEXT IDC_EDIT_MIGEMO_DLL, 36, 172, 224, 12, ES_AUTOHSCROLL | WS_GROUP + PUSHBUTTON "(&3)...", IDC_BUTTON_OPENMDLL, 264, 171, 19, 14 + LTEXT "辞書(&I)", IDC_STATIC, 7, 190, 25, 10 + EDITTEXT IDC_EDIT_MIGEMO_DICT, 36, 189, 224, 12, ES_AUTOHSCROLL + PUSHBUTTON "(&4)...", IDC_BUTTON_OPENMDICT, 264, 189, 19, 14 + GROUPBOX "migemo設定", IDC_STATIC, 3, 159, 287, 47, WS_GROUP END IDD_PROP_MACRO DIALOGEX 0, 0, 293, 240 From 04120b3d63600580a843b382ab557f465c456520 Mon Sep 17 00:00:00 2001 From: miwa Date: Sun, 11 Oct 2020 23:42:54 +0900 Subject: [PATCH 0175/1024] =?UTF-8?q?=E3=80=8C=E3=83=89=E3=83=AD=E3=83=83?= =?UTF-8?q?=E3=83=97=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AF1?= =?UTF-8?q?=E3=81=A4=E3=81=AE=E3=81=BF=E6=9C=89=E5=8A=B9=E3=80=8D=E3=81=AE?= =?UTF-8?q?=E6=96=87=E5=AD=97=E5=88=87=E3=82=8C=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/sakura_rc.rc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index 52ffc08927..2197933c8e 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -1275,7 +1275,7 @@ BEGIN EDITTEXT IDC_EDIT_nDropFileNumMax, 123, 124, 25, 12, ES_AUTOHSCROLL CONTROL "Spin1", IDC_SPIN_nDropFileNumMax, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 179, 124, 9, 12 LTEXT "個までとする", IDC_LABEL_AUTOSAVE4, 151, 126, 41, 10, NOT WS_GROUP - LTEXT "←注:ドロップファイルは1つのみ有効", IDC_LANEL_NOTE, 161, 111, 106, 10 + LTEXT "←注:ドロップファイルは1つのみ有効", IDC_LANEL_NOTE, 161, 111, 116, 10 CONTROL "ファイルを開いたときにカーソル位置を復元する(&C)", IDC_CHECK_RestoreCurPosition, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 140, 174, 10 CONTROL "ファイルを開いたときにブックマークを復元する(&B)", IDC_CHECK_RestoreBookmarks, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 155, 214, 10 CONTROL "ファイルを開いたときにMIMEエンコードされたヘッダをデコードする(&D)", IDC_CHECK_AutoMIMEDecode, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 169, 231, 10 From 0d2090fdf497a0ebc0998bb0eeae53d5cddee380 Mon Sep 17 00:00:00 2001 From: miwa Date: Mon, 12 Oct 2020 23:45:51 +0900 Subject: [PATCH 0176/1024] =?UTF-8?q?=E3=83=97=E3=83=AD=E3=83=91=E3=83=86?= =?UTF-8?q?=E3=82=A3=E3=82=B7=E3=83=BC=E3=83=88=E3=81=AB=E5=AF=BE=E3=81=97?= =?UTF-8?q?=E3=81=A6=E3=82=B7=E3=82=B9=E3=83=86=E3=83=A0=E3=83=95=E3=82=A9?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=82=92=E8=A8=AD=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/shell.cpp | 26 +++++++++++++++----------- sakura_core/util/window.cpp | 7 ++++--- sakura_core/util/window.h | 2 +- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/sakura_core/util/shell.cpp b/sakura_core/util/shell.cpp index 9c093367c8..6435f8b832 100644 --- a/sakura_core/util/shell.cpp +++ b/sakura_core/util/shell.cpp @@ -257,13 +257,19 @@ static LRESULT CALLBACK PropSheetWndProc( HWND hwnd, UINT uMsg, WPARAM wParam, L */ static int CALLBACK PropSheetProc( HWND hwndDlg, UINT uMsg, LPARAM lParam ) { - // プロパティシートの初期化時にボタン追加、プロパティシートのサブクラス化を行う + // プロパティシートの初期化時にシステムフォント設定、ボタン追加、プロパティシートのサブクラス化を行う if( uMsg == PSCB_INITIALIZED ){ - s_pOldPropSheetWndProc = (WNDPROC)::SetWindowLongPtr( hwndDlg, GWLP_WNDPROC, (LONG_PTR)PropSheetWndProc ); - HINSTANCE hInstance = (HINSTANCE)::GetModuleHandle( NULL ); - HWND hwndBtn = ::CreateWindowEx( 0, WC_BUTTON, LS(STR_SHELL_INIFOLDER), BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 0, 0, 140, 20, hwndDlg, (HMENU)0x02000, hInstance, NULL ); - ::SendMessage( hwndBtn, WM_SETFONT, (WPARAM)::SendMessage( hwndDlg, WM_GETFONT, 0, 0 ), MAKELPARAM( FALSE, 0 ) ); - ::SetWindowPos( hwndBtn, ::GetDlgItem( hwndDlg, IDHELP), 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE ); + // システムフォント設定は言語設定に関係なく実施(force=TRUE) + HFONT hFont = UpdateDialogFont( hwndDlg, TRUE ); + + if( CShareData::getInstance()->IsPrivateSettings() ){ + // 個人設定フォルダを使用するときは「設定フォルダ」ボタンを追加する + s_pOldPropSheetWndProc = (WNDPROC)::SetWindowLongPtr( hwndDlg, GWLP_WNDPROC, (LONG_PTR)PropSheetWndProc ); + HINSTANCE hInstance = (HINSTANCE)::GetModuleHandle( NULL ); + HWND hwndBtn = ::CreateWindowEx( 0, WC_BUTTON, LS(STR_SHELL_INIFOLDER), BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 0, 0, 140, 20, hwndDlg, (HMENU)0x02000, hInstance, NULL ); + ::SendMessage( hwndBtn, WM_SETFONT, (WPARAM)hFont, MAKELPARAM( FALSE, 0 ) ); + ::SetWindowPos( hwndBtn, ::GetDlgItem( hwndDlg, IDHELP), 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE ); + } } return 0; } @@ -274,11 +280,9 @@ static int CALLBACK PropSheetProc( HWND hwndDlg, UINT uMsg, LPARAM lParam ) */ INT_PTR MyPropertySheet( LPPROPSHEETHEADER lppsph ) { - // 個人設定フォルダを使用するときは「設定フォルダ」ボタンを追加する - if( CShareData::getInstance()->IsPrivateSettings() ){ - lppsph->dwFlags |= PSH_USECALLBACK; - lppsph->pfnCallback = PropSheetProc; - } + lppsph->dwFlags |= PSH_USECALLBACK; + lppsph->pfnCallback = PropSheetProc; + return ::PropertySheet( lppsph ); } diff --git a/sakura_core/util/window.cpp b/sakura_core/util/window.cpp index 76550b589a..5042ad7865 100644 --- a/sakura_core/util/window.cpp +++ b/sakura_core/util/window.cpp @@ -381,15 +381,16 @@ void SetFontRecursive( HWND hwnd, HFONT hFont ) } /*! - ダイアログボックス用のフォントを設定(日本語以外では何もしない) + ダイアログボックス用のフォントを設定 @param[in] hwnd 設定対象ダイアログボックスのウィンドウハンドル + @param[in] force 強制設定有無(TRUE:必ず設定 FALSE:日本語の場合は設定しそれ以外では設定しない) @return ダイアログボックスに設定されたフォントハンドル(破棄禁止) */ -HFONT UpdateDialogFont( HWND hwnd ) +HFONT UpdateDialogFont( HWND hwnd, BOOL force ) { HFONT hFontDialog = (HFONT)::SendMessageAny( hwnd, WM_GETFONT, 0, (LPARAM)NULL ); - if( wcsncmp_literal( CSelectLang::getDefaultLangString(), _T("Japanese") ) != 0 ){ + if( !force && wcsncmp_literal( CSelectLang::getDefaultLangString(), _T("Japanese") ) != 0 ){ return hFontDialog; } diff --git a/sakura_core/util/window.h b/sakura_core/util/window.h index 1605141e91..0e20853a10 100644 --- a/sakura_core/util/window.h +++ b/sakura_core/util/window.h @@ -192,6 +192,6 @@ class CDCFont HFONT m_hFont; }; -HFONT UpdateDialogFont( HWND hwnd ); +HFONT UpdateDialogFont( HWND hwnd, BOOL force = FALSE ); #endif /* SAKURA_WINDOW_A0833476_5E32_46BE_87B6_ECD55F10D34A_H_ */ From 5c19324290871e8364c31e088dcb0fb887acd3bb Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sun, 11 Oct 2020 11:59:33 +0900 Subject: [PATCH 0177/1024] =?UTF-8?q?XML=E6=96=87=E6=9B=B8=E3=81=AB?= =?UTF-8?q?=E3=82=BF=E3=82=A4=E3=83=97=E5=88=A5=E8=A8=AD=E5=AE=9A=E3=81=A7?= =?UTF-8?q?=E9=81=B8=E6=8A=9E=E3=81=95=E3=82=8C=E3=81=9F=E6=96=87=E5=AD=97?= =?UTF-8?q?=E3=82=B3=E3=83=BC=E3=83=89=E3=82=92=E4=BD=BF=E3=81=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit XML向けのタイプ別設定でユーザーが選択した文字コードを使用する。 これまで自動判定失敗時はUTF-8として扱ったが、この動作を変更する。 --- sakura_core/charset/CESI.cpp | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/sakura_core/charset/CESI.cpp b/sakura_core/charset/CESI.cpp index cb046b9d88..794181308f 100644 --- a/sakura_core/charset/CESI.cpp +++ b/sakura_core/charset/CESI.cpp @@ -509,18 +509,11 @@ void CESI::GetEncodingInfo_meta( const char* pS, const int nLen ) { // XML宣言は先頭にあるので、最初にチェック ECodeType encoding = AutoDetectByXML( pS, nLen ); - if( encoding == CODE_NONE || encoding == CODE_AUTODETECT ){ + if( encoding == CODE_NONE ){ // スクリプト等Coding中にHTMLがあるのでCodingを優先 - auto nret = AutoDetectByCoding( pS, nLen ); - if( nret != CODE_NONE ){ - // 判定に成功した場合はencodingを更新する - encoding = nret; - } else { - nret = AutoDetectByHTML( pS, nLen ); - if( nret != CODE_NONE ){ - // 判定に成功した場合はencodingを更新する - encoding = nret; - } + encoding = AutoDetectByCoding( pS, nLen ); + if( encoding == CODE_NONE ){ + encoding = AutoDetectByHTML( pS, nLen ); } } m_eMetaName = encoding; @@ -945,8 +938,7 @@ static ECodeType MatchEncoding(const char* pBuf, int nSize) } /*! ファイル中のエンコーディング指定を利用した文字コード自動選択 - * @return 決定した文字コード。 未決定は-1を返す。 - xml宣言ありでencodingがない場合、CODE_AUTODETECTなので注意 + * @return 決定した文字コード。 未決定は-1を返す */ ECodeType CESI::AutoDetectByXML( const char* pBuf, int nSize ) { @@ -993,7 +985,8 @@ ECodeType CESI::AutoDetectByXML( const char* pBuf, int nSize ) } // encoding指定無しでxml宣言が終了した if( pBuf[i] == '?' && pBuf[i + 1] == '>' ){ - return CODE_AUTODETECT; + // 決定せずに引き続き判定処理を行う + return CODE_NONE; } } } @@ -1003,7 +996,8 @@ ECodeType CESI::AutoDetectByXML( const char* pBuf, int nSize ) } // encoding指定無しでxml宣言が終了した if( pBuf[i] == '?' && pBuf[i + 1] == '>' ){ - return CODE_AUTODETECT; + // 決定せずに引き続き判定処理を行う + return CODE_NONE; } } }else @@ -1266,7 +1260,7 @@ ECodeType CESI::CheckKanjiCode(const char* pBuf, size_t nBufLen) noexcept */ SetInformation(pBuf, nBufLen); - if( GetMetaName() != CODE_NONE && GetMetaName() != CODE_AUTODETECT ){ + if( GetMetaName() != CODE_NONE ){ return GetMetaName(); } auto nret = DetectUnicode( this ); @@ -1277,10 +1271,6 @@ ECodeType CESI::CheckKanjiCode(const char* pBuf, size_t nBufLen) noexcept if( nret != CODE_NONE && GetStatus() != ESI_NODETECTED ){ return nret; } - if( GetMetaName() == CODE_AUTODETECT ){ - // MetaがAUTODETECTの場合は、encodingがないxml文書。これまで通りUTF-8とみなす。 - return CODE_UTF8; - } // デフォルト文字コードを返す return m_pEncodingConfig->m_eDefaultCodetype; From 3434f5f76259bbd51372ef9906192c6ff78fb4c7 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 14 Oct 2020 12:40:12 +0900 Subject: [PATCH 0178/1024] =?UTF-8?q?=E5=BC=95=E6=95=B0=E3=81=AE=E6=96=87?= =?UTF-8?q?=E5=AD=97=E5=88=97=E3=82=B3=E3=83=94=E3=83=BC=E3=81=AB=E6=A4=9C?= =?UTF-8?q?=E5=87=BA=E3=81=97=E3=81=9FnArgLen=E3=82=92=E4=BD=BF=E3=81=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/_main/CCommandLine.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/sakura_core/_main/CCommandLine.cpp b/sakura_core/_main/CCommandLine.cpp index f0eb557375..8cadd705e4 100644 --- a/sakura_core/_main/CCommandLine.cpp +++ b/sakura_core/_main/CCommandLine.cpp @@ -419,22 +419,22 @@ void CCommandLine::ParseCommandLine( LPCWSTR pszCmdLineSrc, bool bResponse ) break; case CMDLINEOPT_GKEY: // GKEY // 前後の""を取り除く - m_gi.cmGrepKey.SetString( arg, lstrlen( arg ) ); + m_gi.cmGrepKey.SetString( arg, nArgLen ); m_gi.cmGrepKey.Replace( L"\"\"", L"\"" ); break; case CMDLINEOPT_GREPR: // GREPR // 前後の""を取り除く - m_gi.cmGrepRep.SetString( arg, lstrlen( arg ) ); + m_gi.cmGrepRep.SetString( arg, nArgLen ); m_gi.cmGrepRep.Replace( L"\"\"", L"\"" ); m_gi.bGrepReplace = true; break; case CMDLINEOPT_GFILE: // GFILE // 前後の""を取り除く - m_gi.cmGrepFile.SetString( arg, lstrlen( arg ) ); + m_gi.cmGrepFile.SetString( arg, nArgLen ); m_gi.cmGrepFile.Replace( L"\"\"", L"\"" ); break; case CMDLINEOPT_GFOLDER: // GFOLDER - m_gi.cmGrepFolder.SetString( arg, lstrlen( arg ) ); + m_gi.cmGrepFolder.SetString( arg, nArgLen ); m_gi.cmGrepFolder.Replace( L"\"\"", L"\"" ); break; case CMDLINEOPT_GOPT: // GOPT @@ -507,14 +507,14 @@ void CCommandLine::ParseCommandLine( LPCWSTR pszCmdLineSrc, bool bResponse ) bParseOptDisabled = true; break; case CMDLINEOPT_M: // 2009.06.14 syat 追加 - m_cmMacro.SetString( arg ); + m_cmMacro.SetString( arg, nArgLen ); m_cmMacro.Replace( L"\"\"", L"\"" ); break; case CMDLINEOPT_MTYPE: // 2009.06.14 syat 追加 - m_cmMacroType.SetString( arg ); + m_cmMacroType.SetString( arg, nArgLen ); break; case CMDLINEOPT_PROF: // 2013.12.20 Moca 追加 - m_cmProfile.SetString( arg ); + m_cmProfile.SetString( arg, nArgLen ); m_bSetProfile = true; break; case CMDLINEOPT_PROFMGR: From 10e0d3086ee7b7de62a7b9019ff249c72d1fc97a Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 16 Oct 2020 23:19:35 +0900 Subject: [PATCH 0179/1024] =?UTF-8?q?=E3=83=91=E3=83=A9=E3=83=A1=E3=83=BC?= =?UTF-8?q?=E3=82=BF=E8=A7=A3=E6=9E=90(-TYPE)=E3=81=AE=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=B1=E3=83=BC=E3=82=B9=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-ccommandline.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/unittests/test-ccommandline.cpp b/tests/unittests/test-ccommandline.cpp index a61b304735..f0125598ee 100644 --- a/tests/unittests/test-ccommandline.cpp +++ b/tests/unittests/test-ccommandline.cpp @@ -375,6 +375,7 @@ TEST(CCommandLine, ParseWindowOriginY) * @remark -TYPEが指定されていなければNULL * @remark -TYPEが指定されていたら指定された文字列 * @remark DocTypeには任意の文字列を指定できる + * @remark DocTypeにMAX_DOCTYPE_LENを超える文字列を指定した場合、切り捨てられる */ TEST(CCommandLine, ParseDocType) { @@ -385,6 +386,10 @@ TEST(CCommandLine, ParseDocType) cCommandLine.ParseCommandLine(L"-TYPE=" TESTLOCAL_DOC_TYPE, false); ASSERT_STREQ(TESTLOCAL_DOC_TYPE, cCommandLine.GetDocType()); #undef TESTLOCAL_DOC_TYPE + + // MAX_DOCTYPE_LENより長いタイプ名は切り捨てられる + cCommandLine.ParseCommandLine(L"-TYPE=TooLongTypeName", false); + ASSERT_STREQ(L"TooLong", cCommandLine.GetDocType()); } /*! From 7902cc529cc0ab2302c812e327216a9f4d2f18a8 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 16 Oct 2020 23:22:05 +0900 Subject: [PATCH 0180/1024] =?UTF-8?q?=E6=96=87=E5=AD=97=E5=88=97=E3=82=B3?= =?UTF-8?q?=E3=83=94=E3=83=BC=E3=81=AE=E8=A8=98=E8=BF=B0=E3=81=8C=E5=86=97?= =?UTF-8?q?=E9=95=B7=E3=81=AA=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/_main/CCommandLine.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/sakura_core/_main/CCommandLine.cpp b/sakura_core/_main/CCommandLine.cpp index 8cadd705e4..d1641b5750 100644 --- a/sakura_core/_main/CCommandLine.cpp +++ b/sakura_core/_main/CCommandLine.cpp @@ -388,12 +388,7 @@ void CCommandLine::ParseCommandLine( LPCWSTR pszCmdLineSrc, bool bResponse ) m_fi.m_nWindowOriginY = AtoiOptionInt( arg ); break; case CMDLINEOPT_TYPE: // TYPE - // Mar. 7, 2002 genta - // ファイルタイプの強制指定 - { - wcsncpy( m_fi.m_szDocType, arg, MAX_DOCTYPE_LEN ); - m_fi.m_szDocType[ nArgLen < MAX_DOCTYPE_LEN ? nArgLen : MAX_DOCTYPE_LEN ] = L'\0'; - } + ::wcsncpy_s( m_fi.m_szDocType, arg, _TRUNCATE ); break; case CMDLINEOPT_CODE: // CODE m_fi.m_nCharCode = (ECodeType)AtoiOptionInt( arg ); From a1bd153240d495db529b19af61f0501a170a5911 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 17 Oct 2020 00:03:45 +0900 Subject: [PATCH 0181/1024] =?UTF-8?q?CFigure=5FComma=E3=83=AA=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=AF=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/figures/CFigure_Comma.cpp | 7 ++++++- sakura_core/view/figures/CFigure_Comma.h | 5 +---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/sakura_core/view/figures/CFigure_Comma.cpp b/sakura_core/view/figures/CFigure_Comma.cpp index 029ba34399..10b4bea57c 100644 --- a/sakura_core/view/figures/CFigure_Comma.cpp +++ b/sakura_core/view/figures/CFigure_Comma.cpp @@ -14,12 +14,17 @@ void _DispTab( CGraphics& gr, DispPos* pDispPos, const CEditView* pcView ); bool CFigure_Comma::Match(const wchar_t* pText, int nTextLen) const { - if ( pText[0] == L',' && m_pTypeData->m_nTsvMode == TSV_MODE_CSV ) { + if ( pText[0] == L',' ) { return true; } return false; } +bool CFigure_Comma::Disp(void) const +{ + return m_pTypeData->m_nTsvMode == TSV_MODE_CSV; +} + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 描画実装 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // diff --git a/sakura_core/view/figures/CFigure_Comma.h b/sakura_core/view/figures/CFigure_Comma.h index 4b079e8812..d8a6b292e7 100644 --- a/sakura_core/view/figures/CFigure_Comma.h +++ b/sakura_core/view/figures/CFigure_Comma.h @@ -33,10 +33,7 @@ class CFigure_Comma final : public CFigureSpace{ public: //traits bool Match(const wchar_t* pText, int nTextLen) const override; - bool Disp(void) const override - { - return true; - } + bool Disp(void) const override; //action void DispSpace(CGraphics& gr, DispPos* pDispPos, CEditView* pcView, bool bTrans) const override; From d4af718bc29a7ad09ebf02790200561e83bda675 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 17 Oct 2020 19:16:26 +0900 Subject: [PATCH 0182/1024] =?UTF-8?q?=E5=88=A9=E7=94=A8=E3=81=A7=E3=81=8D?= =?UTF-8?q?=E3=81=AA=E3=81=84=E3=82=B3=E3=83=9E=E3=83=B3=E3=83=89=E3=83=A9?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=82=AA=E3=83=97=E3=82=B7=E3=83=A7=E3=83=B3?= =?UTF-8?q?=E3=80=8C-WQ(INI=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=82=92?= =?UTF-8?q?=E5=87=BA=E5=8A=9B=E3=81=97=E3=81=A6=E5=8D=B3=E7=B5=82=E4=BA=86?= =?UTF-8?q?)=E3=80=8D=E3=82=92=E5=89=8A=E9=99=A4=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- help/sakura/res/HLP000109.html | 1 - sakura_core/_main/CCommandLine.cpp | 7 ------ sakura_core/_main/CCommandLine.h | 2 -- sakura_core/_main/CControlProcess.cpp | 7 +----- sakura_core/_main/CProcessFactory.cpp | 32 --------------------------- sakura_core/_main/CProcessFactory.h | 1 - sakura_core/env/CFileNameManager.cpp | 2 -- tests/unittests/test-ccommandline.cpp | 20 ----------------- 8 files changed, 1 insertion(+), 71 deletions(-) diff --git a/help/sakura/res/HLP000109.html b/help/sakura/res/HLP000109.html index 945e53e0c2..038c4259ba 100644 --- a/help/sakura/res/HLP000109.html +++ b/help/sakura/res/HLP000109.html @@ -67,7 +67,6 @@

    単独で使用するオプション

    -
    -NOWIN タスクトレイのみ起動。既にサクラエディタが起動している場合は無効
    -DEBUGMODE アウトプット用のウィンドウとして起動
    -WQ 通常は使用しません(SakuExtとの連動専用)

    diff --git a/sakura_core/_main/CCommandLine.cpp b/sakura_core/_main/CCommandLine.cpp index 8cadd705e4..b200f982bb 100644 --- a/sakura_core/_main/CCommandLine.cpp +++ b/sakura_core/_main/CCommandLine.cpp @@ -33,7 +33,6 @@ /* コマンドラインオプション用定数 */ #define CMDLINEOPT_R 1002 //!< ビューモード #define CMDLINEOPT_NOWIN 1003 //!< タスクトレイのみ起動 -#define CMDLINEOPT_WRITEQUIT 1004 //!< SakuExtとの連動専用 #define CMDLINEOPT_GREPMODE 1100 //!< Grep実行モードで起動 #define CMDLINEOPT_GREPDLG 1101 //!< サクラエディタが起動すると同時にGrepダイアログを表示 #define CMDLINEOPT_DEBUGMODE 1999 //!< アウトプット用のウィンドウとして起動 @@ -96,7 +95,6 @@ int CCommandLine::CheckCommandLine( {L"R", 1, CMDLINEOPT_R, false}, {L"-", 1, CMDLINEOPT_NOMOREOPT, false}, {L"NOWIN", 5, CMDLINEOPT_NOWIN, false}, - {L"WQ", 2, CMDLINEOPT_WRITEQUIT, false}, // 2007.05.19 ryoji sakuext用に追加 {L"GREPMODE", 8, CMDLINEOPT_GREPMODE, false}, {L"GREPDLG", 7, CMDLINEOPT_GREPDLG, false}, {L"DEBUGMODE", 9, CMDLINEOPT_DEBUGMODE, false}, @@ -184,7 +182,6 @@ CCommandLine::CCommandLine() noexcept , m_bGrepDlg(false) , m_bDebugMode(false) , m_bNoWindow(false) - , m_bWriteQuit(false) , m_bProfileMgr(false) , m_bSetProfile(false) , m_fi() @@ -404,10 +401,6 @@ void CCommandLine::ParseCommandLine( LPCWSTR pszCmdLineSrc, bool bResponse ) case CMDLINEOPT_NOWIN: // NOWIN m_bNoWindow = true; break; - case CMDLINEOPT_WRITEQUIT: // WRITEQUIT // 2007.05.19 ryoji sakuext用に追加 - m_bWriteQuit = true; - m_bNoWindow = true; // 2007.09.05 ryoji -WQを指定されたら-NOWINも指定されたとして扱う - break; case CMDLINEOPT_GREPMODE: // GREPMODE m_bGrepMode = true; if( L'\0' == m_fi.m_szDocType[0] ){ diff --git a/sakura_core/_main/CCommandLine.h b/sakura_core/_main/CCommandLine.h index afed870118..07aa58f095 100644 --- a/sakura_core/_main/CCommandLine.h +++ b/sakura_core/_main/CCommandLine.h @@ -60,7 +60,6 @@ class CCommandLine : public TSingleton { // member accessor method public: bool IsNoWindow() const noexcept { return m_bNoWindow; } - bool IsWriteQuit() const noexcept { return m_bWriteQuit; } // 2007.05.19 ryoji sakuext用に追加 bool IsGrepMode() const noexcept { return m_bGrepMode; } bool IsGrepDlg() const noexcept { return m_bGrepDlg; } bool IsDebugMode() const noexcept { return m_bDebugMode; } @@ -98,7 +97,6 @@ class CCommandLine : public TSingleton { bool m_bGrepDlg; // Grepダイアログ bool m_bDebugMode; bool m_bNoWindow; //! [out] TRUE: 編集Windowを開かない - bool m_bWriteQuit; //! [out] TRUE: 設定を保存して終了 // 2007.05.19 ryoji sakuext用に追加 bool m_bProfileMgr; bool m_bSetProfile; EditInfo m_fi; //! diff --git a/sakura_core/_main/CControlProcess.cpp b/sakura_core/_main/CControlProcess.cpp index b8fbfdd504..0e96fd3d6f 100644 --- a/sakura_core/_main/CControlProcess.cpp +++ b/sakura_core/_main/CControlProcess.cpp @@ -86,14 +86,9 @@ bool CControlProcess::InitializeProcess() ::SetCurrentDirectory( szDir ); /* 共有データのロード */ - // 2007.05.19 ryoji 「設定を保存して終了する」オプション処理(sakuext連携用)を追加 - - if( !CShareData_IO::LoadShareData() || CCommandLine::getInstance()->IsWriteQuit() ){ + if( !CShareData_IO::LoadShareData() ){ /* レジストリ項目 作成 */ CShareData_IO::SaveShareData(); - if( CCommandLine::getInstance()->IsWriteQuit() ){ - return false; - } } /* 言語を選択する */ diff --git a/sakura_core/_main/CProcessFactory.cpp b/sakura_core/_main/CProcessFactory.cpp index d6de0b5ea6..04541f0b95 100644 --- a/sakura_core/_main/CProcessFactory.cpp +++ b/sakura_core/_main/CProcessFactory.cpp @@ -66,9 +66,6 @@ CProcess* CProcessFactory::Create( HINSTANCE hInstance, LPCWSTR lpCmdLine ) // しかし、そのような場合でもミューテックスを最初に確保したコントロールプロセスが唯一生き残る。 // if( IsStartingControlProcess() ){ - if( TestWriteQuit() ){ // 2007.09.04 ryoji「設定を保存して終了する」オプション処理(sakuext連携用) - return 0; - } if( !IsExistControlProcess() ){ process = new CControlProcess( hInstance, lpCmdLine ); } @@ -269,32 +266,3 @@ bool CProcessFactory::WaitForInitializedControlProcess() ::CloseHandle( hEvent ); return true; } - -/*! - @brief 「設定を保存して終了する」オプション処理(sakuext連携用) - - @author ryoji - @date 2007.09.04 -*/ -bool CProcessFactory::TestWriteQuit() -{ - if( CCommandLine::getInstance()->IsWriteQuit() ){ - WCHAR szIniFileIn[_MAX_PATH]; - WCHAR szIniFileOut[_MAX_PATH]; - CFileNameManager::getInstance()->GetIniFileNameDirect( szIniFileIn, szIniFileOut, L"" ); - if( szIniFileIn[0] != L'\0' ){ // マルチユーザ用設定か - // 既にマルチユーザ用のiniファイルがあればEXE基準のiniファイルに上書き更新して終了 - if( fexist(szIniFileIn) ){ - if( ::CopyFile( szIniFileIn, szIniFileOut, FALSE ) ){ - return true; - } - } - }else{ - // 既にEXE基準のiniファイルがあれば何もせず終了 - if( fexist(szIniFileOut) ){ - return true; - } - } - } - return false; -} diff --git a/sakura_core/_main/CProcessFactory.h b/sakura_core/_main/CProcessFactory.h index 6515f38d7c..888969455e 100644 --- a/sakura_core/_main/CProcessFactory.h +++ b/sakura_core/_main/CProcessFactory.h @@ -43,6 +43,5 @@ class CProcessFactory { bool IsExistControlProcess(); bool StartControlProcess(); bool WaitForInitializedControlProcess(); // 2006.04.10 ryoji コントロールプロセスの初期化完了イベントを待つ - bool TestWriteQuit(); // 2007.09.04 ryoji 「設定を保存して終了する」オプション処理(sakuext連携用) }; #endif /* SAKURA_CPROCESSFACTORY_5006562F_7795_40FF_AA4C_FFB94842F7C5_H_ */ diff --git a/sakura_core/env/CFileNameManager.cpp b/sakura_core/env/CFileNameManager.cpp index 8088655009..6404ffbc15 100644 --- a/sakura_core/env/CFileNameManager.cpp +++ b/sakura_core/env/CFileNameManager.cpp @@ -574,8 +574,6 @@ void CFileNameManager::GetIniFileName( LPWSTR pszIniFileName, LPCWSTR pszProfNam if( m_pShareData->m_sFileNameManagement.m_IniFolder.m_szPrivateIniFile[0] != L'\0' ){ m_pShareData->m_sFileNameManagement.m_IniFolder.m_bReadPrivate = true; m_pShareData->m_sFileNameManagement.m_IniFolder.m_bWritePrivate = true; - if( CCommandLine::getInstance()->IsNoWindow() && CCommandLine::getInstance()->IsWriteQuit() ) - m_pShareData->m_sFileNameManagement.m_IniFolder.m_bWritePrivate = false; // マルチユーザ用のiniフォルダを作成しておく if( m_pShareData->m_sFileNameManagement.m_IniFolder.m_bWritePrivate ){ diff --git a/tests/unittests/test-ccommandline.cpp b/tests/unittests/test-ccommandline.cpp index a61b304735..976b24e201 100644 --- a/tests/unittests/test-ccommandline.cpp +++ b/tests/unittests/test-ccommandline.cpp @@ -59,7 +59,6 @@ TEST(CCommandLine, ConstructWithoutParam) { CCommandLineWrapper cCommandLine; EXPECT_FALSE(cCommandLine.IsNoWindow()); - EXPECT_FALSE(cCommandLine.IsWriteQuit()); EXPECT_FALSE(cCommandLine.IsGrepMode()); EXPECT_FALSE(cCommandLine.IsGrepDlg()); EXPECT_FALSE(cCommandLine.IsDebugMode()); @@ -85,7 +84,6 @@ TEST(CCommandLine, ConstructWithoutParam) * @brief パラメータ解析(-NOWIN)の仕様 * @remark -NOWINが指定されていなければFALSE * @remark -NOWINが指定されていたらTRUE - * @remark -WQが指定された場合、-NOWINがなくてもTRUE */ TEST(CCommandLine, ParseNoWin) { @@ -94,24 +92,6 @@ TEST(CCommandLine, ParseNoWin) EXPECT_FALSE(cCommandLine.IsNoWindow()); cCommandLine.ParseCommandLine(L"-NOWIN", false); ASSERT_TRUE(cCommandLine.IsNoWindow()); - cCommandLine.ParseCommandLine(L"-WQ", false); - ASSERT_TRUE(cCommandLine.IsNoWindow()); -} - -/*! - * @brief パラメータ解析(-WQ)の仕様 - * @remark -WQが指定されていなければFALSE - * @remark -WQが指定されていたらTRUE - * @remark -WQが指定された場合、-NOWINもTRUE - */ -TEST(CCommandLine, ParseWriteQuit) -{ - CCommandLineWrapper cCommandLine; - cCommandLine.ParseCommandLine(L"", false); - EXPECT_FALSE(cCommandLine.IsWriteQuit()); - cCommandLine.ParseCommandLine(L"-WQ", false); - ASSERT_TRUE(cCommandLine.IsWriteQuit()); - ASSERT_TRUE(cCommandLine.IsNoWindow()); } /*! From e7d3000939d0b86091a714f1e21dbe68c18a6935 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 18 Oct 2020 04:04:38 +0900 Subject: [PATCH 0183/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C=20=E7=84=A1=E9=A7=84?= =?UTF-8?q?=E3=81=AA=E5=88=A4=E5=AE=9A=E3=82=92=E5=89=8A=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/env/CFileNameManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/env/CFileNameManager.cpp b/sakura_core/env/CFileNameManager.cpp index 6404ffbc15..ba032b839c 100644 --- a/sakura_core/env/CFileNameManager.cpp +++ b/sakura_core/env/CFileNameManager.cpp @@ -576,7 +576,7 @@ void CFileNameManager::GetIniFileName( LPWSTR pszIniFileName, LPCWSTR pszProfNam m_pShareData->m_sFileNameManagement.m_IniFolder.m_bWritePrivate = true; // マルチユーザ用のiniフォルダを作成しておく - if( m_pShareData->m_sFileNameManagement.m_IniFolder.m_bWritePrivate ){ + { WCHAR szPath[_MAX_PATH]; WCHAR szDrive[_MAX_DRIVE]; WCHAR szDir[_MAX_DIR]; From df5f43d8b38ea5d6bb3b8ed2f8ce948122bac6e7 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 18 Oct 2020 04:13:19 +0900 Subject: [PATCH 0184/1024] =?UTF-8?q?=E9=95=B7=E3=81=84=E5=8F=82=E7=85=A7?= =?UTF-8?q?=E5=A4=89=E6=95=B0=E3=82=92=E7=BD=AE=E6=8F=9B=E3=81=97=E3=81=A6?= =?UTF-8?q?=E8=A6=8B=E9=80=9A=E3=81=97=E3=82=92=E8=89=AF=E3=81=8F=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/env/CFileNameManager.cpp | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/sakura_core/env/CFileNameManager.cpp b/sakura_core/env/CFileNameManager.cpp index ba032b839c..72284cf0a2 100644 --- a/sakura_core/env/CFileNameManager.cpp +++ b/sakura_core/env/CFileNameManager.cpp @@ -565,22 +565,23 @@ void CFileNameManager::GetIniFileNameDirect( LPWSTR pszPrivateIniFile, LPWSTR ps */ void CFileNameManager::GetIniFileName( LPWSTR pszIniFileName, LPCWSTR pszProfName, BOOL bRead/*=FALSE*/ ) { - if( !m_pShareData->m_sFileNameManagement.m_IniFolder.m_bInit ){ - m_pShareData->m_sFileNameManagement.m_IniFolder.m_bInit = true; // 初期化済フラグ - m_pShareData->m_sFileNameManagement.m_IniFolder.m_bReadPrivate = false; // マルチユーザ用iniからの読み出しフラグ - m_pShareData->m_sFileNameManagement.m_IniFolder.m_bWritePrivate = false; // マルチユーザ用iniへの書き込みフラグ + auto &iniFolder = m_pShareData->m_sFileNameManagement.m_IniFolder; + if( !iniFolder.m_bInit ){ + iniFolder.m_bInit = true; // 初期化済フラグ + iniFolder.m_bReadPrivate = false; // マルチユーザ用iniからの読み出しフラグ + iniFolder.m_bWritePrivate = false; // マルチユーザ用iniへの書き込みフラグ - GetIniFileNameDirect( m_pShareData->m_sFileNameManagement.m_IniFolder.m_szPrivateIniFile, m_pShareData->m_sFileNameManagement.m_IniFolder.m_szIniFile, pszProfName ); - if( m_pShareData->m_sFileNameManagement.m_IniFolder.m_szPrivateIniFile[0] != L'\0' ){ - m_pShareData->m_sFileNameManagement.m_IniFolder.m_bReadPrivate = true; - m_pShareData->m_sFileNameManagement.m_IniFolder.m_bWritePrivate = true; + GetIniFileNameDirect( iniFolder.m_szPrivateIniFile, iniFolder.m_szIniFile, pszProfName ); + if( iniFolder.m_szPrivateIniFile[0] != L'\0' ){ + iniFolder.m_bReadPrivate = true; + iniFolder.m_bWritePrivate = true; // マルチユーザ用のiniフォルダを作成しておく { WCHAR szPath[_MAX_PATH]; WCHAR szDrive[_MAX_DRIVE]; WCHAR szDir[_MAX_DIR]; - _wsplitpath( m_pShareData->m_sFileNameManagement.m_IniFolder.m_szPrivateIniFile, szDrive, szDir, NULL, NULL ); + _wsplitpath( iniFolder.m_szPrivateIniFile, szDrive, szDir, NULL, NULL ); auto_snprintf_s( szPath, _MAX_PATH - 1, L"%s\\%s", szDrive, szDir ); MakeSureDirectoryPathExistsW( szPath ); } @@ -589,13 +590,13 @@ void CFileNameManager::GetIniFileName( LPWSTR pszIniFileName, LPCWSTR pszProfNam WCHAR szPath[_MAX_PATH]; WCHAR szDrive[_MAX_DRIVE]; WCHAR szDir[_MAX_DIR]; - _wsplitpath( m_pShareData->m_sFileNameManagement.m_IniFolder.m_szIniFile, szDrive, szDir, NULL, NULL ); + _wsplitpath( iniFolder.m_szIniFile, szDrive, szDir, NULL, NULL ); auto_snprintf_s( szPath, _MAX_PATH - 1, L"%s\\%s", szDrive, szDir ); MakeSureDirectoryPathExistsW( szPath ); } } } - bool bPrivate = bRead? m_pShareData->m_sFileNameManagement.m_IniFolder.m_bReadPrivate: m_pShareData->m_sFileNameManagement.m_IniFolder.m_bWritePrivate; - ::lstrcpy( pszIniFileName, bPrivate? m_pShareData->m_sFileNameManagement.m_IniFolder.m_szPrivateIniFile: m_pShareData->m_sFileNameManagement.m_IniFolder.m_szIniFile ); + bool bPrivate = bRead ? iniFolder.m_bReadPrivate : iniFolder.m_bWritePrivate; + ::lstrcpy( pszIniFileName, bPrivate ? iniFolder.m_szPrivateIniFile : iniFolder.m_szIniFile ); } From 14c8faf8ebf196c745894d132767873c6813795e Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 18 Oct 2020 06:45:33 +0900 Subject: [PATCH 0185/1024] =?UTF-8?q?WriteQuit=E5=BB=83=E6=AD=A2=E3=81=AB?= =?UTF-8?q?=E4=BC=B4=E3=81=86=E3=83=AA=E3=83=95=E3=82=A1=E3=82=AF=E3=82=BF?= =?UTF-8?q?=E3=83=AA=E3=83=B3=E3=82=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit WriteQuit廃止に伴い不要になった引数を削る、IniFolderの初期化位置を共有メモリと一緒にする、不要になったIniFolderのメンバを削る --- sakura_core/config/system_constants.h | 5 ++- sakura_core/env/CFileNameManager.cpp | 47 +++++--------------------- sakura_core/env/CFileNameManager.h | 5 +-- sakura_core/env/CSakuraEnvironment.cpp | 3 +- sakura_core/env/CShareData.cpp | 25 ++++++++++++-- sakura_core/env/CShareData_IO.cpp | 3 +- sakura_core/util/file.cpp | 3 +- 7 files changed, 39 insertions(+), 52 deletions(-) diff --git a/sakura_core/config/system_constants.h b/sakura_core/config/system_constants.h index 52a8000db3..6d06f142c2 100644 --- a/sakura_core/config/system_constants.h +++ b/sakura_core/config/system_constants.h @@ -546,12 +546,15 @@ Version 176: MYDEVMODE の未使用メンバを削除した為、PRINTSETTING や DLLSHAREDATA のメモリレイアウトが変更 + Version 177: + WriteQuit廃止に伴い未使用となった IniFolder のメンバを削除した為、DLLSHAREDATA のメモリレイアウトが変更 + -- 統合されたので元に戻す(1000~1023が使用済み) 2008.11.16 nasukoji -- Version 1000: -- バージョン1000以降を本家統合までの間、使わせてください。かなり頻繁に構成が変更されると思われるので。by kobake 2008.03.02 */ -#define N_SHAREDATA_VERSION 176 +#define N_SHAREDATA_VERSION 177 #define STR_SHAREDATA_VERSION NUM_TO_STR(N_SHAREDATA_VERSION) #define GSTR_SHAREDATA (L"SakuraShareData" _T(CON_SKR_MACHINE_SUFFIX_) _T(_CODE_SUFFIX_) _T(_DEBUG_SUFFIX_) _T(STR_SHAREDATA_VERSION)) diff --git a/sakura_core/env/CFileNameManager.cpp b/sakura_core/env/CFileNameManager.cpp index 72284cf0a2..e7eab64ee5 100644 --- a/sakura_core/env/CFileNameManager.cpp +++ b/sakura_core/env/CFileNameManager.cpp @@ -555,48 +555,17 @@ void CFileNameManager::GetIniFileNameDirect( LPWSTR pszPrivateIniFile, LPWSTR ps iniファイル名の取得 共有データからsakura.iniの格納フォルダを取得し、フルパス名を返す - (共有データ未設定のときは共有データ設定を行う) - - @param[out] pszIniFileName iniファイル名(フルパス) - @param[in] bRead true: 読み込み / false: 書き込み + + @param[out] pszIniFileName iniファイル名(フルパス)。予め_MAX_PATHのバッファを用意しておくこと @author ryoji @date 2007.05.19 ryoji 新規作成 */ -void CFileNameManager::GetIniFileName( LPWSTR pszIniFileName, LPCWSTR pszProfName, BOOL bRead/*=FALSE*/ ) +void CFileNameManager::GetIniFileName( LPWSTR pszIniFileName ) { - auto &iniFolder = m_pShareData->m_sFileNameManagement.m_IniFolder; - if( !iniFolder.m_bInit ){ - iniFolder.m_bInit = true; // 初期化済フラグ - iniFolder.m_bReadPrivate = false; // マルチユーザ用iniからの読み出しフラグ - iniFolder.m_bWritePrivate = false; // マルチユーザ用iniへの書き込みフラグ - - GetIniFileNameDirect( iniFolder.m_szPrivateIniFile, iniFolder.m_szIniFile, pszProfName ); - if( iniFolder.m_szPrivateIniFile[0] != L'\0' ){ - iniFolder.m_bReadPrivate = true; - iniFolder.m_bWritePrivate = true; - - // マルチユーザ用のiniフォルダを作成しておく - { - WCHAR szPath[_MAX_PATH]; - WCHAR szDrive[_MAX_DRIVE]; - WCHAR szDir[_MAX_DIR]; - _wsplitpath( iniFolder.m_szPrivateIniFile, szDrive, szDir, NULL, NULL ); - auto_snprintf_s( szPath, _MAX_PATH - 1, L"%s\\%s", szDrive, szDir ); - MakeSureDirectoryPathExistsW( szPath ); - } - }else{ - if( pszProfName[0] != L'\0' ){ - WCHAR szPath[_MAX_PATH]; - WCHAR szDrive[_MAX_DRIVE]; - WCHAR szDir[_MAX_DIR]; - _wsplitpath( iniFolder.m_szIniFile, szDrive, szDir, NULL, NULL ); - auto_snprintf_s( szPath, _MAX_PATH - 1, L"%s\\%s", szDrive, szDir ); - MakeSureDirectoryPathExistsW( szPath ); - } - } - } - - bool bPrivate = bRead ? iniFolder.m_bReadPrivate : iniFolder.m_bWritePrivate; - ::lstrcpy( pszIniFileName, bPrivate ? iniFolder.m_szPrivateIniFile : iniFolder.m_szIniFile ); + const auto &iniFolder = m_pShareData->m_sFileNameManagement.m_IniFolder; + const bool bPrivate = iniFolder.m_szPrivateIniFile[0] != L'\0'; + const auto& szPrivateIniFile = iniFolder.m_szPrivateIniFile; + const auto& szIniFile = iniFolder.m_szIniFile; + ::wcscpy_s( pszIniFileName, _MAX_PATH, bPrivate ? szPrivateIniFile : szIniFile ); } diff --git a/sakura_core/env/CFileNameManager.h b/sakura_core/env/CFileNameManager.h index 6e22811368..3103e7d5e0 100644 --- a/sakura_core/env/CFileNameManager.h +++ b/sakura_core/env/CFileNameManager.h @@ -39,9 +39,6 @@ struct EditInfo; //! iniフォルダ設定 // 2007.05.31 ryoji struct IniFolder { - bool m_bInit; // 初期化済フラグ - bool m_bReadPrivate; // マルチユーザ用iniからの読み出しフラグ - bool m_bWritePrivate; // マルチユーザ用iniへの書き込みフラグ WCHAR m_szIniFile[_MAX_PATH]; // EXE基準のiniファイルパス WCHAR m_szPrivateIniFile[_MAX_PATH]; // マルチユーザ用のiniファイルパス }; /* iniフォルダ設定 */ @@ -90,7 +87,7 @@ class CFileNameManager : public TSingleton{ static WCHAR GetAccessKeyByIndex(int index, bool bZeroOrigin); static void GetIniFileNameDirect( LPWSTR pszPrivateIniFile, LPWSTR pszIniFile, LPCWSTR pszProfName ); /* 構成設定ファイルからiniファイル名を取得する */ // 2007.09.04 ryoji - void GetIniFileName( LPWSTR pszIniFileName, LPCWSTR pszProfName, BOOL bRead = FALSE ); /* iniファイル名の取得 */ // 2007.05.19 ryoji + void GetIniFileName( LPWSTR pszIniFileName ); //!< iniファイル名の取得 private: DLLSHAREDATA* m_pShareData; diff --git a/sakura_core/env/CSakuraEnvironment.cpp b/sakura_core/env/CSakuraEnvironment.cpp index 08a7384340..26d7e1c8a9 100644 --- a/sakura_core/env/CSakuraEnvironment.cpp +++ b/sakura_core/env/CSakuraEnvironment.cpp @@ -478,8 +478,7 @@ void CSakuraEnvironment::ExpandParameter(const wchar_t* pszSource, wchar_t* pszB // iniファイルのフルパス { WCHAR szPath[_MAX_PATH + 1]; - const auto pszProfileName = CCommandLine::getInstance()->GetProfileName(); - CFileNameManager::getInstance()->GetIniFileName( szPath, pszProfileName ); + CFileNameManager::getInstance()->GetIniFileName( szPath ); q = wcs_pushW( q, q_max - q, szPath ); ++p; } diff --git a/sakura_core/env/CShareData.cpp b/sakura_core/env/CShareData.cpp index 97f5c7e8d5..9d15ced570 100644 --- a/sakura_core/env/CShareData.cpp +++ b/sakura_core/env/CShareData.cpp @@ -25,6 +25,9 @@ #include "StdAfx.h" #include "env/CShareData.h" + +#include + #include "env/DLLSHAREDATA.h" #include "env/CShareData_IO.h" #include "env/CSakuraEnvironment.h" @@ -148,7 +151,25 @@ bool CShareData::InitShareData() // 2007.05.19 ryoji 実行ファイルフォルダ->設定ファイルフォルダに変更 WCHAR szIniFolder[_MAX_PATH]; - m_pShareData->m_sFileNameManagement.m_IniFolder.m_bInit = false; + { + // INI/EXE基準のINIファイルパスを取得する + const auto pszProfileName = CCommandLine::getInstance()->GetProfileName(); + auto& iniFolder = m_pShareData->m_sFileNameManagement.m_IniFolder; + auto& szPrivateIniFile = iniFolder.m_szPrivateIniFile; + auto& szIniFile = iniFolder.m_szIniFile; + CFileNameManager::GetIniFileNameDirect( szPrivateIniFile, szIniFile, pszProfileName ); + + // INIフォルダのパスを取得する + WCHAR szIniDir[_MAX_PATH]{ 0 }; + const auto& pszIniPath = iniFolder.m_szPrivateIniFile[0] != L'\0' ? szPrivateIniFile : szIniFile; + const auto* pszIniFile = ::PathFindFileName( pszIniPath ); + ::_snwprintf_s( szIniDir, pszIniFile - pszIniPath, L"%s", pszIniPath ); + + // iniフォルダが存在しなければ作成しておく + if( !IsDirectory( szIniDir ) ){ + MakeSureDirectoryPathExistsW( szIniDir ); + } + } GetInidir( szIniFolder ); AddLastChar( szIniFolder, _MAX_PATH, L'\\' ); @@ -1087,7 +1108,7 @@ bool CShareData::OpenDebugWindow( HWND hwnd, bool bAllwaysActive ) /* iniファイルの保存先がユーザ別設定フォルダかどうか */ // 2007.05.25 ryoji BOOL CShareData::IsPrivateSettings( void ){ - return m_pShareData->m_sFileNameManagement.m_IniFolder.m_bWritePrivate; + return m_pShareData->m_sFileNameManagement.m_IniFolder.m_szPrivateIniFile[0] != L'\0'; } /* diff --git a/sakura_core/env/CShareData_IO.cpp b/sakura_core/env/CShareData_IO.cpp index 0de2d3c336..6cee38f572 100644 --- a/sakura_core/env/CShareData_IO.cpp +++ b/sakura_core/env/CShareData_IO.cpp @@ -86,9 +86,8 @@ bool CShareData_IO::ShareData_IO_2( bool bRead ) cProfile.SetWritingMode(); } - const auto pszProfileName = CCommandLine::getInstance()->GetProfileName(); WCHAR szIniFileName[_MAX_PATH + 1]; - CFileNameManager::getInstance()->GetIniFileName( szIniFileName, pszProfileName, bRead ); // 2007.05.19 ryoji iniファイル名を取得する + CFileNameManager::getInstance()->GetIniFileName( szIniFileName ); // MYTRACE( L"Iniファイル処理-1 所要時間(ミリ秒) = %d\n", cRunningTimer.Read() ); diff --git a/sakura_core/util/file.cpp b/sakura_core/util/file.cpp index 05e45a1eec..57aa6f262b 100644 --- a/sakura_core/util/file.cpp +++ b/sakura_core/util/file.cpp @@ -487,11 +487,10 @@ void GetInidir( if( pDir == NULL ) return; - const auto pszProfileName = CCommandLine::getInstance()->GetProfileName(); WCHAR szPath[_MAX_PATH]; // sakura.ini のパスを取得 - CFileNameManager::getInstance()->GetIniFileName( szPath, pszProfileName ); + CFileNameManager::getInstance()->GetIniFileName( szPath ); if( szFile == NULL ){ SplitPath_FolderAndFile( szPath, pDir, NULL ); } From 0399263764fbcc10d91e0c4723a6fcd0b8198cef Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 18 Oct 2020 19:36:57 +0900 Subject: [PATCH 0186/1024] =?UTF-8?q?Revert=20"WriteQuit=E5=BB=83=E6=AD=A2?= =?UTF-8?q?=E3=81=AB=E4=BC=B4=E3=81=86=E3=83=AA=E3=83=95=E3=82=A1=E3=82=AF?= =?UTF-8?q?=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 14c8faf8ebf196c745894d132767873c6813795e. --- sakura_core/config/system_constants.h | 5 +-- sakura_core/env/CFileNameManager.cpp | 47 +++++++++++++++++++++----- sakura_core/env/CFileNameManager.h | 5 ++- sakura_core/env/CSakuraEnvironment.cpp | 3 +- sakura_core/env/CShareData.cpp | 25 ++------------ sakura_core/env/CShareData_IO.cpp | 3 +- sakura_core/util/file.cpp | 3 +- 7 files changed, 52 insertions(+), 39 deletions(-) diff --git a/sakura_core/config/system_constants.h b/sakura_core/config/system_constants.h index 6d06f142c2..52a8000db3 100644 --- a/sakura_core/config/system_constants.h +++ b/sakura_core/config/system_constants.h @@ -546,15 +546,12 @@ Version 176: MYDEVMODE の未使用メンバを削除した為、PRINTSETTING や DLLSHAREDATA のメモリレイアウトが変更 - Version 177: - WriteQuit廃止に伴い未使用となった IniFolder のメンバを削除した為、DLLSHAREDATA のメモリレイアウトが変更 - -- 統合されたので元に戻す(1000~1023が使用済み) 2008.11.16 nasukoji -- Version 1000: -- バージョン1000以降を本家統合までの間、使わせてください。かなり頻繁に構成が変更されると思われるので。by kobake 2008.03.02 */ -#define N_SHAREDATA_VERSION 177 +#define N_SHAREDATA_VERSION 176 #define STR_SHAREDATA_VERSION NUM_TO_STR(N_SHAREDATA_VERSION) #define GSTR_SHAREDATA (L"SakuraShareData" _T(CON_SKR_MACHINE_SUFFIX_) _T(_CODE_SUFFIX_) _T(_DEBUG_SUFFIX_) _T(STR_SHAREDATA_VERSION)) diff --git a/sakura_core/env/CFileNameManager.cpp b/sakura_core/env/CFileNameManager.cpp index e7eab64ee5..72284cf0a2 100644 --- a/sakura_core/env/CFileNameManager.cpp +++ b/sakura_core/env/CFileNameManager.cpp @@ -555,17 +555,48 @@ void CFileNameManager::GetIniFileNameDirect( LPWSTR pszPrivateIniFile, LPWSTR ps iniファイル名の取得 共有データからsakura.iniの格納フォルダを取得し、フルパス名を返す - - @param[out] pszIniFileName iniファイル名(フルパス)。予め_MAX_PATHのバッファを用意しておくこと + (共有データ未設定のときは共有データ設定を行う) + + @param[out] pszIniFileName iniファイル名(フルパス) + @param[in] bRead true: 読み込み / false: 書き込み @author ryoji @date 2007.05.19 ryoji 新規作成 */ -void CFileNameManager::GetIniFileName( LPWSTR pszIniFileName ) +void CFileNameManager::GetIniFileName( LPWSTR pszIniFileName, LPCWSTR pszProfName, BOOL bRead/*=FALSE*/ ) { - const auto &iniFolder = m_pShareData->m_sFileNameManagement.m_IniFolder; - const bool bPrivate = iniFolder.m_szPrivateIniFile[0] != L'\0'; - const auto& szPrivateIniFile = iniFolder.m_szPrivateIniFile; - const auto& szIniFile = iniFolder.m_szIniFile; - ::wcscpy_s( pszIniFileName, _MAX_PATH, bPrivate ? szPrivateIniFile : szIniFile ); + auto &iniFolder = m_pShareData->m_sFileNameManagement.m_IniFolder; + if( !iniFolder.m_bInit ){ + iniFolder.m_bInit = true; // 初期化済フラグ + iniFolder.m_bReadPrivate = false; // マルチユーザ用iniからの読み出しフラグ + iniFolder.m_bWritePrivate = false; // マルチユーザ用iniへの書き込みフラグ + + GetIniFileNameDirect( iniFolder.m_szPrivateIniFile, iniFolder.m_szIniFile, pszProfName ); + if( iniFolder.m_szPrivateIniFile[0] != L'\0' ){ + iniFolder.m_bReadPrivate = true; + iniFolder.m_bWritePrivate = true; + + // マルチユーザ用のiniフォルダを作成しておく + { + WCHAR szPath[_MAX_PATH]; + WCHAR szDrive[_MAX_DRIVE]; + WCHAR szDir[_MAX_DIR]; + _wsplitpath( iniFolder.m_szPrivateIniFile, szDrive, szDir, NULL, NULL ); + auto_snprintf_s( szPath, _MAX_PATH - 1, L"%s\\%s", szDrive, szDir ); + MakeSureDirectoryPathExistsW( szPath ); + } + }else{ + if( pszProfName[0] != L'\0' ){ + WCHAR szPath[_MAX_PATH]; + WCHAR szDrive[_MAX_DRIVE]; + WCHAR szDir[_MAX_DIR]; + _wsplitpath( iniFolder.m_szIniFile, szDrive, szDir, NULL, NULL ); + auto_snprintf_s( szPath, _MAX_PATH - 1, L"%s\\%s", szDrive, szDir ); + MakeSureDirectoryPathExistsW( szPath ); + } + } + } + + bool bPrivate = bRead ? iniFolder.m_bReadPrivate : iniFolder.m_bWritePrivate; + ::lstrcpy( pszIniFileName, bPrivate ? iniFolder.m_szPrivateIniFile : iniFolder.m_szIniFile ); } diff --git a/sakura_core/env/CFileNameManager.h b/sakura_core/env/CFileNameManager.h index 3103e7d5e0..6e22811368 100644 --- a/sakura_core/env/CFileNameManager.h +++ b/sakura_core/env/CFileNameManager.h @@ -39,6 +39,9 @@ struct EditInfo; //! iniフォルダ設定 // 2007.05.31 ryoji struct IniFolder { + bool m_bInit; // 初期化済フラグ + bool m_bReadPrivate; // マルチユーザ用iniからの読み出しフラグ + bool m_bWritePrivate; // マルチユーザ用iniへの書き込みフラグ WCHAR m_szIniFile[_MAX_PATH]; // EXE基準のiniファイルパス WCHAR m_szPrivateIniFile[_MAX_PATH]; // マルチユーザ用のiniファイルパス }; /* iniフォルダ設定 */ @@ -87,7 +90,7 @@ class CFileNameManager : public TSingleton{ static WCHAR GetAccessKeyByIndex(int index, bool bZeroOrigin); static void GetIniFileNameDirect( LPWSTR pszPrivateIniFile, LPWSTR pszIniFile, LPCWSTR pszProfName ); /* 構成設定ファイルからiniファイル名を取得する */ // 2007.09.04 ryoji - void GetIniFileName( LPWSTR pszIniFileName ); //!< iniファイル名の取得 + void GetIniFileName( LPWSTR pszIniFileName, LPCWSTR pszProfName, BOOL bRead = FALSE ); /* iniファイル名の取得 */ // 2007.05.19 ryoji private: DLLSHAREDATA* m_pShareData; diff --git a/sakura_core/env/CSakuraEnvironment.cpp b/sakura_core/env/CSakuraEnvironment.cpp index 26d7e1c8a9..08a7384340 100644 --- a/sakura_core/env/CSakuraEnvironment.cpp +++ b/sakura_core/env/CSakuraEnvironment.cpp @@ -478,7 +478,8 @@ void CSakuraEnvironment::ExpandParameter(const wchar_t* pszSource, wchar_t* pszB // iniファイルのフルパス { WCHAR szPath[_MAX_PATH + 1]; - CFileNameManager::getInstance()->GetIniFileName( szPath ); + const auto pszProfileName = CCommandLine::getInstance()->GetProfileName(); + CFileNameManager::getInstance()->GetIniFileName( szPath, pszProfileName ); q = wcs_pushW( q, q_max - q, szPath ); ++p; } diff --git a/sakura_core/env/CShareData.cpp b/sakura_core/env/CShareData.cpp index 9d15ced570..97f5c7e8d5 100644 --- a/sakura_core/env/CShareData.cpp +++ b/sakura_core/env/CShareData.cpp @@ -25,9 +25,6 @@ #include "StdAfx.h" #include "env/CShareData.h" - -#include - #include "env/DLLSHAREDATA.h" #include "env/CShareData_IO.h" #include "env/CSakuraEnvironment.h" @@ -151,25 +148,7 @@ bool CShareData::InitShareData() // 2007.05.19 ryoji 実行ファイルフォルダ->設定ファイルフォルダに変更 WCHAR szIniFolder[_MAX_PATH]; - { - // INI/EXE基準のINIファイルパスを取得する - const auto pszProfileName = CCommandLine::getInstance()->GetProfileName(); - auto& iniFolder = m_pShareData->m_sFileNameManagement.m_IniFolder; - auto& szPrivateIniFile = iniFolder.m_szPrivateIniFile; - auto& szIniFile = iniFolder.m_szIniFile; - CFileNameManager::GetIniFileNameDirect( szPrivateIniFile, szIniFile, pszProfileName ); - - // INIフォルダのパスを取得する - WCHAR szIniDir[_MAX_PATH]{ 0 }; - const auto& pszIniPath = iniFolder.m_szPrivateIniFile[0] != L'\0' ? szPrivateIniFile : szIniFile; - const auto* pszIniFile = ::PathFindFileName( pszIniPath ); - ::_snwprintf_s( szIniDir, pszIniFile - pszIniPath, L"%s", pszIniPath ); - - // iniフォルダが存在しなければ作成しておく - if( !IsDirectory( szIniDir ) ){ - MakeSureDirectoryPathExistsW( szIniDir ); - } - } + m_pShareData->m_sFileNameManagement.m_IniFolder.m_bInit = false; GetInidir( szIniFolder ); AddLastChar( szIniFolder, _MAX_PATH, L'\\' ); @@ -1108,7 +1087,7 @@ bool CShareData::OpenDebugWindow( HWND hwnd, bool bAllwaysActive ) /* iniファイルの保存先がユーザ別設定フォルダかどうか */ // 2007.05.25 ryoji BOOL CShareData::IsPrivateSettings( void ){ - return m_pShareData->m_sFileNameManagement.m_IniFolder.m_szPrivateIniFile[0] != L'\0'; + return m_pShareData->m_sFileNameManagement.m_IniFolder.m_bWritePrivate; } /* diff --git a/sakura_core/env/CShareData_IO.cpp b/sakura_core/env/CShareData_IO.cpp index 6cee38f572..0de2d3c336 100644 --- a/sakura_core/env/CShareData_IO.cpp +++ b/sakura_core/env/CShareData_IO.cpp @@ -86,8 +86,9 @@ bool CShareData_IO::ShareData_IO_2( bool bRead ) cProfile.SetWritingMode(); } + const auto pszProfileName = CCommandLine::getInstance()->GetProfileName(); WCHAR szIniFileName[_MAX_PATH + 1]; - CFileNameManager::getInstance()->GetIniFileName( szIniFileName ); + CFileNameManager::getInstance()->GetIniFileName( szIniFileName, pszProfileName, bRead ); // 2007.05.19 ryoji iniファイル名を取得する // MYTRACE( L"Iniファイル処理-1 所要時間(ミリ秒) = %d\n", cRunningTimer.Read() ); diff --git a/sakura_core/util/file.cpp b/sakura_core/util/file.cpp index 57aa6f262b..05e45a1eec 100644 --- a/sakura_core/util/file.cpp +++ b/sakura_core/util/file.cpp @@ -487,10 +487,11 @@ void GetInidir( if( pDir == NULL ) return; + const auto pszProfileName = CCommandLine::getInstance()->GetProfileName(); WCHAR szPath[_MAX_PATH]; // sakura.ini のパスを取得 - CFileNameManager::getInstance()->GetIniFileName( szPath ); + CFileNameManager::getInstance()->GetIniFileName( szPath, pszProfileName ); if( szFile == NULL ){ SplitPath_FolderAndFile( szPath, pDir, NULL ); } From 3a7aa9ffcf74d2e76418ddaaaa454cdacd085f30 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 19 Oct 2020 12:19:52 +0900 Subject: [PATCH 0187/1024] =?UTF-8?q?INI=E3=83=95=E3=82=A9=E3=83=AB?= =?UTF-8?q?=E3=83=80=E4=BD=9C=E6=88=90=E4=BD=8D=E7=BD=AE=E3=82=92INI?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E4=BD=9C=E6=88=90=E7=9B=B4?= =?UTF-8?q?=E5=89=8D=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/env/CFileNameManager.cpp | 19 ------------------- sakura_core/env/CShareData_IO.cpp | 10 ++++++++++ 2 files changed, 10 insertions(+), 19 deletions(-) diff --git a/sakura_core/env/CFileNameManager.cpp b/sakura_core/env/CFileNameManager.cpp index 72284cf0a2..9dade26bcb 100644 --- a/sakura_core/env/CFileNameManager.cpp +++ b/sakura_core/env/CFileNameManager.cpp @@ -575,25 +575,6 @@ void CFileNameManager::GetIniFileName( LPWSTR pszIniFileName, LPCWSTR pszProfNam if( iniFolder.m_szPrivateIniFile[0] != L'\0' ){ iniFolder.m_bReadPrivate = true; iniFolder.m_bWritePrivate = true; - - // マルチユーザ用のiniフォルダを作成しておく - { - WCHAR szPath[_MAX_PATH]; - WCHAR szDrive[_MAX_DRIVE]; - WCHAR szDir[_MAX_DIR]; - _wsplitpath( iniFolder.m_szPrivateIniFile, szDrive, szDir, NULL, NULL ); - auto_snprintf_s( szPath, _MAX_PATH - 1, L"%s\\%s", szDrive, szDir ); - MakeSureDirectoryPathExistsW( szPath ); - } - }else{ - if( pszProfName[0] != L'\0' ){ - WCHAR szPath[_MAX_PATH]; - WCHAR szDrive[_MAX_DRIVE]; - WCHAR szDir[_MAX_DIR]; - _wsplitpath( iniFolder.m_szIniFile, szDrive, szDir, NULL, NULL ); - auto_snprintf_s( szPath, _MAX_PATH - 1, L"%s\\%s", szDrive, szDir ); - MakeSureDirectoryPathExistsW( szPath ); - } } } diff --git a/sakura_core/env/CShareData_IO.cpp b/sakura_core/env/CShareData_IO.cpp index 0de2d3c336..feb95075c6 100644 --- a/sakura_core/env/CShareData_IO.cpp +++ b/sakura_core/env/CShareData_IO.cpp @@ -166,6 +166,16 @@ bool CShareData_IO::ShareData_IO_2( bool bRead ) if( !bRead ){ // 2014.12.08 sakura.iniの読み取り専用 if( !GetDllShareData().m_Common.m_sOthers.m_bIniReadOnly ){ + // INIフォルダのパスを取得する + WCHAR szIniFolder[_MAX_PATH]{ 0 }; + ::GetInidir( szIniFolder, NULL ); + + // INIフォルダが存在しなければ作成する + if( !IsDirectory( szIniFolder ) ){ + MakeSureDirectoryPathExistsW( szIniFolder ); + } + + // INIファイルを出力する cProfile.WriteProfile( szIniFileName, LTEXT(" sakura.ini テキストエディタ設定ファイル") ); } } From 677742903189f1915c50a47b52f62898868c7b7b Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 19 Oct 2020 12:23:20 +0900 Subject: [PATCH 0188/1024] =?UTF-8?q?IniFolder=E3=81=AE=E5=88=9D=E6=9C=9F?= =?UTF-8?q?=E5=8C=96=E4=BD=8D=E7=BD=AE=E3=82=92=E5=85=B1=E6=9C=89=E3=83=A1?= =?UTF-8?q?=E3=83=A2=E3=83=AA=E3=81=A8=E4=B8=80=E7=B7=92=E3=81=AB=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/env/CFileNameManager.cpp | 17 ++--------------- sakura_core/env/CShareData.cpp | 25 ++++++++++++++++++++----- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/sakura_core/env/CFileNameManager.cpp b/sakura_core/env/CFileNameManager.cpp index 9dade26bcb..581db94b75 100644 --- a/sakura_core/env/CFileNameManager.cpp +++ b/sakura_core/env/CFileNameManager.cpp @@ -555,9 +555,8 @@ void CFileNameManager::GetIniFileNameDirect( LPWSTR pszPrivateIniFile, LPWSTR ps iniファイル名の取得 共有データからsakura.iniの格納フォルダを取得し、フルパス名を返す - (共有データ未設定のときは共有データ設定を行う) - - @param[out] pszIniFileName iniファイル名(フルパス) + + @param[out] pszIniFileName iniファイル名(フルパス)。予め_MAX_PATHのバッファを用意しておくこと @param[in] bRead true: 読み込み / false: 書き込み @author ryoji @@ -566,18 +565,6 @@ void CFileNameManager::GetIniFileNameDirect( LPWSTR pszPrivateIniFile, LPWSTR ps void CFileNameManager::GetIniFileName( LPWSTR pszIniFileName, LPCWSTR pszProfName, BOOL bRead/*=FALSE*/ ) { auto &iniFolder = m_pShareData->m_sFileNameManagement.m_IniFolder; - if( !iniFolder.m_bInit ){ - iniFolder.m_bInit = true; // 初期化済フラグ - iniFolder.m_bReadPrivate = false; // マルチユーザ用iniからの読み出しフラグ - iniFolder.m_bWritePrivate = false; // マルチユーザ用iniへの書き込みフラグ - - GetIniFileNameDirect( iniFolder.m_szPrivateIniFile, iniFolder.m_szIniFile, pszProfName ); - if( iniFolder.m_szPrivateIniFile[0] != L'\0' ){ - iniFolder.m_bReadPrivate = true; - iniFolder.m_bWritePrivate = true; - } - } - bool bPrivate = bRead ? iniFolder.m_bReadPrivate : iniFolder.m_bWritePrivate; ::lstrcpy( pszIniFileName, bPrivate ? iniFolder.m_szPrivateIniFile : iniFolder.m_szIniFile ); } diff --git a/sakura_core/env/CShareData.cpp b/sakura_core/env/CShareData.cpp index 97f5c7e8d5..457b34154b 100644 --- a/sakura_core/env/CShareData.cpp +++ b/sakura_core/env/CShareData.cpp @@ -146,11 +146,26 @@ bool CShareData::InitShareData() CreateTypeSettings(); SetDllShareData( m_pShareData ); + // IniFolder構造体を初期化する + { + const auto pszProfileName = CCommandLine::getInstance()->GetProfileName(); + auto& iniFolder = m_pShareData->m_sFileNameManagement.m_IniFolder; + auto& szPrivateIniFile = iniFolder.m_szPrivateIniFile; + auto& szIniFile = iniFolder.m_szIniFile; + CFileNameManager::GetIniFileNameDirect( szPrivateIniFile, szIniFile, pszProfileName ); + + iniFolder.m_bInit = true; // 初期化済フラグ + iniFolder.m_bReadPrivate = false; // マルチユーザ用iniからの読み出しフラグ + iniFolder.m_bWritePrivate = false; // マルチユーザ用iniへの書き込みフラグ + if( iniFolder.m_szPrivateIniFile[0] != L'\0' ){ + iniFolder.m_bReadPrivate = true; + iniFolder.m_bWritePrivate = true; + } + } + // 2007.05.19 ryoji 実行ファイルフォルダ->設定ファイルフォルダに変更 - WCHAR szIniFolder[_MAX_PATH]; - m_pShareData->m_sFileNameManagement.m_IniFolder.m_bInit = false; - GetInidir( szIniFolder ); - AddLastChar( szIniFolder, _MAX_PATH, L'\\' ); + WCHAR szIniFolder[_MAX_PATH]; + GetInidir( szIniFolder, NULL ); m_pShareData->m_vStructureVersion = uShareDataVersion; m_pShareData->m_nSize = sizeof(*m_pShareData); @@ -1087,7 +1102,7 @@ bool CShareData::OpenDebugWindow( HWND hwnd, bool bAllwaysActive ) /* iniファイルの保存先がユーザ別設定フォルダかどうか */ // 2007.05.25 ryoji BOOL CShareData::IsPrivateSettings( void ){ - return m_pShareData->m_sFileNameManagement.m_IniFolder.m_bWritePrivate; + return m_pShareData->m_sFileNameManagement.m_IniFolder.m_szPrivateIniFile[0] != L'\0'; } /* From 9d3d926ff0e38ab67e572c96460f683e68d0dc8f Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 19 Oct 2020 12:32:54 +0900 Subject: [PATCH 0189/1024] =?UTF-8?q?CFileNameManager::GetIniFileName?= =?UTF-8?q?=E3=81=AE=E4=B8=8D=E8=A6=81=E3=81=AB=E3=81=AA=E3=81=A3=E3=81=9F?= =?UTF-8?q?=E5=BC=95=E6=95=B0=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/env/CFileNameManager.cpp | 11 ++++++----- sakura_core/env/CFileNameManager.h | 2 +- sakura_core/env/CSakuraEnvironment.cpp | 3 +-- sakura_core/env/CShareData_IO.cpp | 3 +-- sakura_core/util/file.cpp | 3 +-- 5 files changed, 10 insertions(+), 12 deletions(-) diff --git a/sakura_core/env/CFileNameManager.cpp b/sakura_core/env/CFileNameManager.cpp index 581db94b75..1ead10e4c7 100644 --- a/sakura_core/env/CFileNameManager.cpp +++ b/sakura_core/env/CFileNameManager.cpp @@ -557,14 +557,15 @@ void CFileNameManager::GetIniFileNameDirect( LPWSTR pszPrivateIniFile, LPWSTR ps 共有データからsakura.iniの格納フォルダを取得し、フルパス名を返す @param[out] pszIniFileName iniファイル名(フルパス)。予め_MAX_PATHのバッファを用意しておくこと - @param[in] bRead true: 読み込み / false: 書き込み @author ryoji @date 2007.05.19 ryoji 新規作成 */ -void CFileNameManager::GetIniFileName( LPWSTR pszIniFileName, LPCWSTR pszProfName, BOOL bRead/*=FALSE*/ ) +void CFileNameManager::GetIniFileName( LPWSTR pszIniFileName ) const { - auto &iniFolder = m_pShareData->m_sFileNameManagement.m_IniFolder; - bool bPrivate = bRead ? iniFolder.m_bReadPrivate : iniFolder.m_bWritePrivate; - ::lstrcpy( pszIniFileName, bPrivate ? iniFolder.m_szPrivateIniFile : iniFolder.m_szIniFile ); + const auto &iniFolder = m_pShareData->m_sFileNameManagement.m_IniFolder; + const bool bPrivate = iniFolder.m_szPrivateIniFile[0] != L'\0'; + const auto& szPrivateIniFile = iniFolder.m_szPrivateIniFile; + const auto& szIniFile = iniFolder.m_szIniFile; + ::wcscpy_s( pszIniFileName, _MAX_PATH, bPrivate ? szPrivateIniFile : szIniFile ); } diff --git a/sakura_core/env/CFileNameManager.h b/sakura_core/env/CFileNameManager.h index 6e22811368..602e4a4ea4 100644 --- a/sakura_core/env/CFileNameManager.h +++ b/sakura_core/env/CFileNameManager.h @@ -90,7 +90,7 @@ class CFileNameManager : public TSingleton{ static WCHAR GetAccessKeyByIndex(int index, bool bZeroOrigin); static void GetIniFileNameDirect( LPWSTR pszPrivateIniFile, LPWSTR pszIniFile, LPCWSTR pszProfName ); /* 構成設定ファイルからiniファイル名を取得する */ // 2007.09.04 ryoji - void GetIniFileName( LPWSTR pszIniFileName, LPCWSTR pszProfName, BOOL bRead = FALSE ); /* iniファイル名の取得 */ // 2007.05.19 ryoji + void GetIniFileName( LPWSTR pszIniFileName ) const; //!< iniファイル名の取得 private: DLLSHAREDATA* m_pShareData; diff --git a/sakura_core/env/CSakuraEnvironment.cpp b/sakura_core/env/CSakuraEnvironment.cpp index 08a7384340..26d7e1c8a9 100644 --- a/sakura_core/env/CSakuraEnvironment.cpp +++ b/sakura_core/env/CSakuraEnvironment.cpp @@ -478,8 +478,7 @@ void CSakuraEnvironment::ExpandParameter(const wchar_t* pszSource, wchar_t* pszB // iniファイルのフルパス { WCHAR szPath[_MAX_PATH + 1]; - const auto pszProfileName = CCommandLine::getInstance()->GetProfileName(); - CFileNameManager::getInstance()->GetIniFileName( szPath, pszProfileName ); + CFileNameManager::getInstance()->GetIniFileName( szPath ); q = wcs_pushW( q, q_max - q, szPath ); ++p; } diff --git a/sakura_core/env/CShareData_IO.cpp b/sakura_core/env/CShareData_IO.cpp index feb95075c6..b9c61bdc94 100644 --- a/sakura_core/env/CShareData_IO.cpp +++ b/sakura_core/env/CShareData_IO.cpp @@ -86,9 +86,8 @@ bool CShareData_IO::ShareData_IO_2( bool bRead ) cProfile.SetWritingMode(); } - const auto pszProfileName = CCommandLine::getInstance()->GetProfileName(); WCHAR szIniFileName[_MAX_PATH + 1]; - CFileNameManager::getInstance()->GetIniFileName( szIniFileName, pszProfileName, bRead ); // 2007.05.19 ryoji iniファイル名を取得する + CFileNameManager::getInstance()->GetIniFileName( szIniFileName ); // MYTRACE( L"Iniファイル処理-1 所要時間(ミリ秒) = %d\n", cRunningTimer.Read() ); diff --git a/sakura_core/util/file.cpp b/sakura_core/util/file.cpp index 05e45a1eec..57aa6f262b 100644 --- a/sakura_core/util/file.cpp +++ b/sakura_core/util/file.cpp @@ -487,11 +487,10 @@ void GetInidir( if( pDir == NULL ) return; - const auto pszProfileName = CCommandLine::getInstance()->GetProfileName(); WCHAR szPath[_MAX_PATH]; // sakura.ini のパスを取得 - CFileNameManager::getInstance()->GetIniFileName( szPath, pszProfileName ); + CFileNameManager::getInstance()->GetIniFileName( szPath ); if( szFile == NULL ){ SplitPath_FolderAndFile( szPath, pDir, NULL ); } From d599793940403c6dc3ca7a4f8fb21e36d6877077 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 18 Oct 2020 12:38:11 +0900 Subject: [PATCH 0190/1024] =?UTF-8?q?CFileNameManager::IsPrivateSettings()?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/env/CFileNameManager.cpp | 10 ++++++++-- sakura_core/env/CFileNameManager.h | 1 + sakura_core/env/CShareData.cpp | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/sakura_core/env/CFileNameManager.cpp b/sakura_core/env/CFileNameManager.cpp index 1ead10e4c7..ab94466641 100644 --- a/sakura_core/env/CFileNameManager.cpp +++ b/sakura_core/env/CFileNameManager.cpp @@ -551,6 +551,13 @@ void CFileNameManager::GetIniFileNameDirect( LPWSTR pszPrivateIniFile, LPWSTR ps } } +/* iniファイルの保存先がユーザ別設定フォルダかどうか */ +bool CFileNameManager::IsPrivateSettings() const +{ + const auto &iniFolder = m_pShareData->m_sFileNameManagement.m_IniFolder; + return iniFolder.m_szPrivateIniFile[0] != L'\0'; +} + /** iniファイル名の取得 @@ -564,8 +571,7 @@ void CFileNameManager::GetIniFileNameDirect( LPWSTR pszPrivateIniFile, LPWSTR ps void CFileNameManager::GetIniFileName( LPWSTR pszIniFileName ) const { const auto &iniFolder = m_pShareData->m_sFileNameManagement.m_IniFolder; - const bool bPrivate = iniFolder.m_szPrivateIniFile[0] != L'\0'; const auto& szPrivateIniFile = iniFolder.m_szPrivateIniFile; const auto& szIniFile = iniFolder.m_szIniFile; - ::wcscpy_s( pszIniFileName, _MAX_PATH, bPrivate ? szPrivateIniFile : szIniFile ); + ::wcscpy_s( pszIniFileName, _MAX_PATH, IsPrivateSettings() ? szPrivateIniFile : szIniFile ); } diff --git a/sakura_core/env/CFileNameManager.h b/sakura_core/env/CFileNameManager.h index 602e4a4ea4..6815cf49d3 100644 --- a/sakura_core/env/CFileNameManager.h +++ b/sakura_core/env/CFileNameManager.h @@ -90,6 +90,7 @@ class CFileNameManager : public TSingleton{ static WCHAR GetAccessKeyByIndex(int index, bool bZeroOrigin); static void GetIniFileNameDirect( LPWSTR pszPrivateIniFile, LPWSTR pszIniFile, LPCWSTR pszProfName ); /* 構成設定ファイルからiniファイル名を取得する */ // 2007.09.04 ryoji + bool IsPrivateSettings() const; void GetIniFileName( LPWSTR pszIniFileName ) const; //!< iniファイル名の取得 private: diff --git a/sakura_core/env/CShareData.cpp b/sakura_core/env/CShareData.cpp index 457b34154b..95f7736ca8 100644 --- a/sakura_core/env/CShareData.cpp +++ b/sakura_core/env/CShareData.cpp @@ -1102,7 +1102,7 @@ bool CShareData::OpenDebugWindow( HWND hwnd, bool bAllwaysActive ) /* iniファイルの保存先がユーザ別設定フォルダかどうか */ // 2007.05.25 ryoji BOOL CShareData::IsPrivateSettings( void ){ - return m_pShareData->m_sFileNameManagement.m_IniFolder.m_szPrivateIniFile[0] != L'\0'; + return CFileNameManager::getInstance()->IsPrivateSettings(); } /* From 673818249f5b77eec2febf517a4eb7c92d2b02a5 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 19 Oct 2020 12:42:04 +0900 Subject: [PATCH 0191/1024] =?UTF-8?q?CShareData::IsPrivateSettings?= =?UTF-8?q?=E5=BB=83=E6=AD=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/env/CShareData.cpp | 5 ----- sakura_core/env/CShareData.h | 2 -- sakura_core/util/file.cpp | 2 +- sakura_core/util/shell.cpp | 2 +- 4 files changed, 2 insertions(+), 9 deletions(-) diff --git a/sakura_core/env/CShareData.cpp b/sakura_core/env/CShareData.cpp index 95f7736ca8..813a563c00 100644 --- a/sakura_core/env/CShareData.cpp +++ b/sakura_core/env/CShareData.cpp @@ -1100,11 +1100,6 @@ bool CShareData::OpenDebugWindow( HWND hwnd, bool bAllwaysActive ) return ret; } -/* iniファイルの保存先がユーザ別設定フォルダかどうか */ // 2007.05.25 ryoji -BOOL CShareData::IsPrivateSettings( void ){ - return CFileNameManager::getInstance()->IsPrivateSettings(); -} - /* CShareData::CheckMRUandOPENFOLDERList MRUとOPENFOLDERリストの存在チェックなど diff --git a/sakura_core/env/CShareData.h b/sakura_core/env/CShareData.h index c67be76bb7..7ceb1e96f0 100644 --- a/sakura_core/env/CShareData.h +++ b/sakura_core/env/CShareData.h @@ -79,8 +79,6 @@ class CShareData : public TSingleton void SetTraceOutSource( HWND hwnd ){ m_hwndTraceOutSource = hwnd; } /* TraceOut起動元ウィンドウの設定 */ bool OpenDebugWindow( HWND hwnd, bool bAllwaysActive ); //!< デバッグウィンドウを開く - BOOL IsPrivateSettings( void ); - //マクロ関連 int GetMacroFilename( int idx, WCHAR* pszPath, int nBufLen ); // idxで指定したマクロファイル名(フルパス)を取得する // Jun. 14, 2003 genta 引数追加.書式変更 bool BeReloadWhenExecuteMacro( int idx ); // idxで指定したマクロは、実行するたびにファイルを読み込む設定か? diff --git a/sakura_core/util/file.cpp b/sakura_core/util/file.cpp index 57aa6f262b..d0f613c6f1 100644 --- a/sakura_core/util/file.cpp +++ b/sakura_core/util/file.cpp @@ -532,7 +532,7 @@ void GetInidirOrExedir( } // EXE基準のフルパスが実在すればそのパスを返す - if( CShareData::getInstance()->IsPrivateSettings() ){ // INIとEXEでパスが異なる場合 + if( CFileNameManager::getInstance()->IsPrivateSettings() ){ // INIとEXEでパスが異なる場合 GetExedir( szExedir, szFile ); if( fexist(szExedir) ){ ::lstrcpy( pDir, szExedir ); diff --git a/sakura_core/util/shell.cpp b/sakura_core/util/shell.cpp index 6435f8b832..ae43c60c78 100644 --- a/sakura_core/util/shell.cpp +++ b/sakura_core/util/shell.cpp @@ -262,7 +262,7 @@ static int CALLBACK PropSheetProc( HWND hwndDlg, UINT uMsg, LPARAM lParam ) // システムフォント設定は言語設定に関係なく実施(force=TRUE) HFONT hFont = UpdateDialogFont( hwndDlg, TRUE ); - if( CShareData::getInstance()->IsPrivateSettings() ){ + if( CFileNameManager::getInstance()->IsPrivateSettings() ){ // 個人設定フォルダを使用するときは「設定フォルダ」ボタンを追加する s_pOldPropSheetWndProc = (WNDPROC)::SetWindowLongPtr( hwndDlg, GWLP_WNDPROC, (LONG_PTR)PropSheetWndProc ); HINSTANCE hInstance = (HINSTANCE)::GetModuleHandle( NULL ); From 3dafd83914cf4b724b52040f38eb62096b1ffd25 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 19 Oct 2020 12:50:34 +0900 Subject: [PATCH 0192/1024] =?UTF-8?q?IniFolder=E3=81=AE=E4=B8=8D=E8=A6=81?= =?UTF-8?q?=E3=81=AB=E3=81=AA=E3=81=A3=E3=81=9F=E3=83=A1=E3=83=B3=E3=83=90?= =?UTF-8?q?=E3=82=92=E5=89=8A=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/config/system_constants.h | 5 ++++- sakura_core/env/CFileNameManager.h | 3 --- sakura_core/env/CShareData.cpp | 8 -------- 3 files changed, 4 insertions(+), 12 deletions(-) diff --git a/sakura_core/config/system_constants.h b/sakura_core/config/system_constants.h index 52a8000db3..6d06f142c2 100644 --- a/sakura_core/config/system_constants.h +++ b/sakura_core/config/system_constants.h @@ -546,12 +546,15 @@ Version 176: MYDEVMODE の未使用メンバを削除した為、PRINTSETTING や DLLSHAREDATA のメモリレイアウトが変更 + Version 177: + WriteQuit廃止に伴い未使用となった IniFolder のメンバを削除した為、DLLSHAREDATA のメモリレイアウトが変更 + -- 統合されたので元に戻す(1000~1023が使用済み) 2008.11.16 nasukoji -- Version 1000: -- バージョン1000以降を本家統合までの間、使わせてください。かなり頻繁に構成が変更されると思われるので。by kobake 2008.03.02 */ -#define N_SHAREDATA_VERSION 176 +#define N_SHAREDATA_VERSION 177 #define STR_SHAREDATA_VERSION NUM_TO_STR(N_SHAREDATA_VERSION) #define GSTR_SHAREDATA (L"SakuraShareData" _T(CON_SKR_MACHINE_SUFFIX_) _T(_CODE_SUFFIX_) _T(_DEBUG_SUFFIX_) _T(STR_SHAREDATA_VERSION)) diff --git a/sakura_core/env/CFileNameManager.h b/sakura_core/env/CFileNameManager.h index 6815cf49d3..46bb612549 100644 --- a/sakura_core/env/CFileNameManager.h +++ b/sakura_core/env/CFileNameManager.h @@ -39,9 +39,6 @@ struct EditInfo; //! iniフォルダ設定 // 2007.05.31 ryoji struct IniFolder { - bool m_bInit; // 初期化済フラグ - bool m_bReadPrivate; // マルチユーザ用iniからの読み出しフラグ - bool m_bWritePrivate; // マルチユーザ用iniへの書き込みフラグ WCHAR m_szIniFile[_MAX_PATH]; // EXE基準のiniファイルパス WCHAR m_szPrivateIniFile[_MAX_PATH]; // マルチユーザ用のiniファイルパス }; /* iniフォルダ設定 */ diff --git a/sakura_core/env/CShareData.cpp b/sakura_core/env/CShareData.cpp index 813a563c00..7f540a43b1 100644 --- a/sakura_core/env/CShareData.cpp +++ b/sakura_core/env/CShareData.cpp @@ -153,14 +153,6 @@ bool CShareData::InitShareData() auto& szPrivateIniFile = iniFolder.m_szPrivateIniFile; auto& szIniFile = iniFolder.m_szIniFile; CFileNameManager::GetIniFileNameDirect( szPrivateIniFile, szIniFile, pszProfileName ); - - iniFolder.m_bInit = true; // 初期化済フラグ - iniFolder.m_bReadPrivate = false; // マルチユーザ用iniからの読み出しフラグ - iniFolder.m_bWritePrivate = false; // マルチユーザ用iniへの書き込みフラグ - if( iniFolder.m_szPrivateIniFile[0] != L'\0' ){ - iniFolder.m_bReadPrivate = true; - iniFolder.m_bWritePrivate = true; - } } // 2007.05.19 ryoji 実行ファイルフォルダ->設定ファイルフォルダに変更 From f7ffba1e121ccfe5c3919439deedcdc29b0343c9 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 18 Oct 2020 10:57:04 +0900 Subject: [PATCH 0193/1024] =?UTF-8?q?googletest=E3=81=A8compiletests?= =?UTF-8?q?=E3=82=922=E5=9B=9E=E7=9B=AE=E3=81=AE=E3=83=93=E3=83=AB?= =?UTF-8?q?=E3=83=89=E3=81=AB=E5=AF=BE=E5=BF=9C=E3=81=95=E3=81=9B=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/compiletests.run.cmd | 4 +--- tests/compiletests.targets | 15 ++++++++++++--- tests/googletest.build.cmd | 4 +--- tests/googletest.targets | 21 +++++++++++++-------- 4 files changed, 27 insertions(+), 17 deletions(-) diff --git a/tests/compiletests.run.cmd b/tests/compiletests.run.cmd index 6a41001144..013df2ee9b 100644 --- a/tests/compiletests.run.cmd +++ b/tests/compiletests.run.cmd @@ -1,5 +1,5 @@ setlocal -set BUILD_BASE_DIR=%~dp1 +set BUILD_DIR=%~dp1 set SOURCE_DIR=%~dp0compiletests :: find generic tools @@ -16,12 +16,10 @@ if not exist "%CMD_NINJA%" ( set GENERATOR="%CMAKE_G_PARAM%" set GENERATOR_OPTS=-A %PLATFORM% "-DCMAKE_CONFIGURATION_TYPES=Debug;Release" set "MAKE_PROGRAM=%CMD_MSBUILD%" - set "BUILD_DIR=%BUILD_BASE_DIR%compiletests\%platform%" ) else ( set GENERATOR=Ninja set GENERATOR_OPTS=-DCMAKE_BUILD_TYPE=%CONFIGURATION% set "MAKE_PROGRAM=%CMD_NINJA%" - set "BUILD_DIR=%BUILD_BASE_DIR%compiletests\%platform%\%configuration%" ) mkdir %BUILD_DIR% > NUL 2>&1 diff --git a/tests/compiletests.targets b/tests/compiletests.targets index 574e530cf6..9bf16c03d8 100644 --- a/tests/compiletests.targets +++ b/tests/compiletests.targets @@ -1,12 +1,21 @@ - - + + $(MSBuildThisFileDirectory)compiletests\ + $(MSBuildThisFileDirectory)build\$(Platform)\$(Configuration)\compiletests\ + + + + + $([System.Text.RegularExpressions.Regex]::Replace('$(VisualStudioVersion)', '^(\d+).*', '$1')) - + + + + \ No newline at end of file diff --git a/tests/googletest.build.cmd b/tests/googletest.build.cmd index e1dd401d2c..13d964e7c0 100644 --- a/tests/googletest.build.cmd +++ b/tests/googletest.build.cmd @@ -1,5 +1,5 @@ setlocal -set BUILD_BASE_DIR=%~dp1 +set BUILD_DIR=%~dp1 set GOOGLETEST_INSTALL_PATH=%~dp2 set SOURCE_DIR=%~dp0googletest @@ -28,12 +28,10 @@ if not exist "%CMD_NINJA%" ( set GENERATOR="%CMAKE_G_PARAM%" set GENERATOR_OPTS=-A %PLATFORM% "-DCMAKE_CONFIGURATION_TYPES=Debug;Release" set "MAKE_PROGRAM=%CMD_MSBUILD%" - set "BUILD_DIR=%BUILD_BASE_DIR%googletest\%platform%" ) else ( set GENERATOR=Ninja set GENERATOR_OPTS=-DCMAKE_BUILD_TYPE=%CONFIGURATION% set "MAKE_PROGRAM=%CMD_NINJA%" - set "BUILD_DIR=%BUILD_BASE_DIR%googletest\%platform%\%configuration%" ) mkdir %BUILD_DIR% > NUL 2>&1 diff --git a/tests/googletest.targets b/tests/googletest.targets index 94ca5cb4c6..c07eb8912b 100644 --- a/tests/googletest.targets +++ b/tests/googletest.targets @@ -1,13 +1,18 @@ $(MSBuildThisFileDirectory)googletest - $(MSBuildThisFileDirectory)build\ - $([MsBuild]::NormalizePath('$(MSBuildThisFileDirectory)..\tools\googletest\')) + $(MSBuildThisFileDirectory)build\$(Platform)\$(Configuration)\gtest_build\ + $([MsBuild]::NormalizePath('$(GoogleTestBuildDir)..\googletest\')) $(GoogleTestInstallDir)include;$(IncludePath) - $(GoogleTestInstallDir)lib;$(LibraryPath) - $(GoogleTestInstallDir)lib64;$(LibraryPath) + $(GoogleTestInstallDir)lib + $(GoogleTestInstallDir)lib64 + $(GoogleTestLibInstallDir);$(LibraryPath) d + gtest$(NameSuffix).lib + gtest_main$(NameSuffix).lib + $(GoogleTestLibInstallDir)\$(GTestLibName) + $(GoogleTestLibInstallDir)\$(GTestMainLibName) @@ -16,8 +21,8 @@ - gtest$(NameSuffix).lib;%(AdditionalDependencies) - gtest_main$(NameSuffix).lib;%(AdditionalDependencies) + $(GTestLibName);%(AdditionalDependencies) + $(GTestMainLibName);%(AdditionalDependencies) @@ -26,7 +31,7 @@ - + $([System.Text.RegularExpressions.Regex]::Replace('$(VisualStudioVersion)', '^(\d+).*', '$1')) @@ -35,7 +40,7 @@ - + From b4dfad3e2ea33c91c2ef16b4cd3ae548dde4f83c Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 23 Oct 2020 12:16:49 +0900 Subject: [PATCH 0194/1024] =?UTF-8?q?WriteProfileMakesSubDirectories?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-cprofile.cpp | 71 ++++++++++++++++++++++++++ tests/unittests/tests1.vcxproj | 1 + tests/unittests/tests1.vcxproj.filters | 3 ++ 3 files changed, 75 insertions(+) create mode 100644 tests/unittests/test-cprofile.cpp diff --git a/tests/unittests/test-cprofile.cpp b/tests/unittests/test-cprofile.cpp new file mode 100644 index 0000000000..20b1dfdb6b --- /dev/null +++ b/tests/unittests/test-cprofile.cpp @@ -0,0 +1,71 @@ +/*! @file */ +/* + Copyright (C) 2018-2020 Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include + +#ifndef NOMINMAX +#define NOMINMAX +#endif /* #ifndef NOMINMAX */ + +#include +#include +#include + +#include "CProfile.h" + +#include +#include + +#include "util/file.h" + +/*! + * @brief WriteProfileは指定されたパスに含まれるサブディレクトリを作成する + */ +TEST( CProfile, WriteProfileMakesSubDirectories ) +{ + // サブディレクトリを含むパスを作成する + WCHAR szIniName[_MAX_PATH]{ 0 }; + ::_wfullpath( szIniName, L"test1\\test2\\test.ini", _countof(szIniName) ); + + // プロファイルを書き出す + CProfile cProfile; + cProfile.WriteProfile( szIniName, L"WriteProfileのテスト" ); + + ASSERT_TRUE( fexist( szIniName ) ); + + WCHAR* p; + + // ファイルを削除 + std::filesystem::remove( szIniName ); + + // フォルダを削除 + p = ::PathFindFileNameW( szIniName ); + p[0] = L'\0'; + std::filesystem::remove( szIniName ); + + // フォルダを削除 + p = ::PathFindFileNameW( szIniName ); + p[0] = L'\0'; + std::filesystem::remove( szIniName ); +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index e194509e6e..2da2e36862 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -111,6 +111,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index f0d8289042..0ffb1ec742 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -74,6 +74,9 @@ Test Files + + Test Files + From 3876aa199c536bdaaa23a71c80f0ceaf113f2709 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 19 Oct 2020 12:19:52 +0900 Subject: [PATCH 0195/1024] =?UTF-8?q?INI=E3=83=95=E3=82=A9=E3=83=AB?= =?UTF-8?q?=E3=83=80=E4=BD=9C=E6=88=90=E4=BD=8D=E7=BD=AE=E3=82=92INI?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E4=BD=9C=E6=88=90=E7=9B=B4?= =?UTF-8?q?=E5=89=8D=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/env/CFileNameManager.cpp | 19 ------------------- sakura_core/env/CShareData_IO.cpp | 10 ++++++++++ 2 files changed, 10 insertions(+), 19 deletions(-) diff --git a/sakura_core/env/CFileNameManager.cpp b/sakura_core/env/CFileNameManager.cpp index 72284cf0a2..9dade26bcb 100644 --- a/sakura_core/env/CFileNameManager.cpp +++ b/sakura_core/env/CFileNameManager.cpp @@ -575,25 +575,6 @@ void CFileNameManager::GetIniFileName( LPWSTR pszIniFileName, LPCWSTR pszProfNam if( iniFolder.m_szPrivateIniFile[0] != L'\0' ){ iniFolder.m_bReadPrivate = true; iniFolder.m_bWritePrivate = true; - - // マルチユーザ用のiniフォルダを作成しておく - { - WCHAR szPath[_MAX_PATH]; - WCHAR szDrive[_MAX_DRIVE]; - WCHAR szDir[_MAX_DIR]; - _wsplitpath( iniFolder.m_szPrivateIniFile, szDrive, szDir, NULL, NULL ); - auto_snprintf_s( szPath, _MAX_PATH - 1, L"%s\\%s", szDrive, szDir ); - MakeSureDirectoryPathExistsW( szPath ); - } - }else{ - if( pszProfName[0] != L'\0' ){ - WCHAR szPath[_MAX_PATH]; - WCHAR szDrive[_MAX_DRIVE]; - WCHAR szDir[_MAX_DIR]; - _wsplitpath( iniFolder.m_szIniFile, szDrive, szDir, NULL, NULL ); - auto_snprintf_s( szPath, _MAX_PATH - 1, L"%s\\%s", szDrive, szDir ); - MakeSureDirectoryPathExistsW( szPath ); - } } } diff --git a/sakura_core/env/CShareData_IO.cpp b/sakura_core/env/CShareData_IO.cpp index 0de2d3c336..feb95075c6 100644 --- a/sakura_core/env/CShareData_IO.cpp +++ b/sakura_core/env/CShareData_IO.cpp @@ -166,6 +166,16 @@ bool CShareData_IO::ShareData_IO_2( bool bRead ) if( !bRead ){ // 2014.12.08 sakura.iniの読み取り専用 if( !GetDllShareData().m_Common.m_sOthers.m_bIniReadOnly ){ + // INIフォルダのパスを取得する + WCHAR szIniFolder[_MAX_PATH]{ 0 }; + ::GetInidir( szIniFolder, NULL ); + + // INIフォルダが存在しなければ作成する + if( !IsDirectory( szIniFolder ) ){ + MakeSureDirectoryPathExistsW( szIniFolder ); + } + + // INIファイルを出力する cProfile.WriteProfile( szIniFileName, LTEXT(" sakura.ini テキストエディタ設定ファイル") ); } } From cf1a26d95e1f966dc690a101341992f8859928c0 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 23 Oct 2020 00:16:23 +0900 Subject: [PATCH 0196/1024] =?UTF-8?q?CProfile::WriteProfile=E3=81=AB?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E3=81=95=E3=82=8C=E3=81=9F=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=A4=E3=83=AB=E5=90=8D=E3=81=AE=E3=83=95=E3=82=A9=E3=83=AB?= =?UTF-8?q?=E3=83=80=E3=81=8C=E5=AD=98=E5=9C=A8=E3=81=97=E3=81=AA=E3=81=84?= =?UTF-8?q?=E5=A0=B4=E5=90=88=E3=81=AB=E3=83=95=E3=82=A9=E3=83=AB=E3=83=80?= =?UTF-8?q?=E3=82=92=E4=BD=9C=E6=88=90=E3=81=99=E3=82=8B=E6=A9=9F=E8=83=BD?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CProfile.cpp | 12 ++++++++++++ sakura_core/env/CShareData_IO.cpp | 10 ---------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/sakura_core/CProfile.cpp b/sakura_core/CProfile.cpp index c89e3b1890..10cac79bda 100644 --- a/sakura_core/CProfile.cpp +++ b/sakura_core/CProfile.cpp @@ -217,6 +217,18 @@ bool CProfile::WriteProfile( { if( pszProfileName!=NULL ) { m_strProfileName = pszProfileName; + + const size_t cchLastYen = m_strProfileName.find_last_of( L'\\' ); + if( cchLastYen != std::wstring::npos && cchLastYen < m_strProfileName.length() && cchLastYen + 1 < _MAX_PATH ){ + // フォルダのパスを取得する + WCHAR szProfileFolder[_MAX_PATH]{ 0 }; + ::wcsncpy_s( szProfileFolder, m_strProfileName.data(), cchLastYen + 1 ); + + // フォルダが存在しなければ作成する + if( !IsDirectory( szProfileFolder ) ){ + MakeSureDirectoryPathExistsW( szProfileFolder ); + } + } } std::vector< wstring > vecLine; diff --git a/sakura_core/env/CShareData_IO.cpp b/sakura_core/env/CShareData_IO.cpp index feb95075c6..0de2d3c336 100644 --- a/sakura_core/env/CShareData_IO.cpp +++ b/sakura_core/env/CShareData_IO.cpp @@ -166,16 +166,6 @@ bool CShareData_IO::ShareData_IO_2( bool bRead ) if( !bRead ){ // 2014.12.08 sakura.iniの読み取り専用 if( !GetDllShareData().m_Common.m_sOthers.m_bIniReadOnly ){ - // INIフォルダのパスを取得する - WCHAR szIniFolder[_MAX_PATH]{ 0 }; - ::GetInidir( szIniFolder, NULL ); - - // INIフォルダが存在しなければ作成する - if( !IsDirectory( szIniFolder ) ){ - MakeSureDirectoryPathExistsW( szIniFolder ); - } - - // INIファイルを出力する cProfile.WriteProfile( szIniFileName, LTEXT(" sakura.ini テキストエディタ設定ファイル") ); } } From 634b3de2d17c0176b22d3d5468bdd50a287cd39c Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 23 Oct 2020 15:43:13 +0900 Subject: [PATCH 0197/1024] =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=9F?= =?UTF-8?q?=E5=87=A6=E7=90=86=E3=82=92=E5=A4=96=E9=83=A8=E5=8C=96=E3=81=97?= =?UTF-8?q?=E3=81=A6=E3=83=A1=E3=82=BD=E3=83=83=E3=83=89=E3=81=AE=E8=A4=87?= =?UTF-8?q?=E9=9B=91=E5=BA=A6=E3=82=92=E4=B8=8B=E3=81=92=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CProfile.cpp | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/sakura_core/CProfile.cpp b/sakura_core/CProfile.cpp index 10cac79bda..09d3bcc2ee 100644 --- a/sakura_core/CProfile.cpp +++ b/sakura_core/CProfile.cpp @@ -40,6 +40,21 @@ #include "CEol.h" #include "util/file.h" +void EnsureDirectoryExist( const std::wstring& strProfileName ) +{ + const size_t cchLastYen = strProfileName.find_last_of( L'\\' ); + if( cchLastYen != std::wstring::npos && cchLastYen < strProfileName.length() && cchLastYen + 1 < _MAX_PATH ){ + // フォルダのパスを取得する + WCHAR szProfileFolder[_MAX_PATH]{ 0 }; + ::wcsncpy_s( szProfileFolder, strProfileName.data(), cchLastYen + 1 ); + + // フォルダが存在しなければ作成する + if( !IsDirectory( szProfileFolder ) ){ + MakeSureDirectoryPathExistsW( szProfileFolder ); + } + } +} + using namespace std; /*! Profileを初期化 @@ -218,17 +233,7 @@ bool CProfile::WriteProfile( if( pszProfileName!=NULL ) { m_strProfileName = pszProfileName; - const size_t cchLastYen = m_strProfileName.find_last_of( L'\\' ); - if( cchLastYen != std::wstring::npos && cchLastYen < m_strProfileName.length() && cchLastYen + 1 < _MAX_PATH ){ - // フォルダのパスを取得する - WCHAR szProfileFolder[_MAX_PATH]{ 0 }; - ::wcsncpy_s( szProfileFolder, m_strProfileName.data(), cchLastYen + 1 ); - - // フォルダが存在しなければ作成する - if( !IsDirectory( szProfileFolder ) ){ - MakeSureDirectoryPathExistsW( szProfileFolder ); - } - } + EnsureDirectoryExist( m_strProfileName ); } std::vector< wstring > vecLine; From 786c44e9555350bb4b5c104c1c4b047f76850400 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sun, 25 Oct 2020 19:47:14 +0900 Subject: [PATCH 0198/1024] =?UTF-8?q?IDD=5FGREP,IDD=5FGREP=5FREPLACE?= =?UTF-8?q?=E3=81=AE=E9=85=8D=E7=BD=AE=E6=94=B9=E5=96=84(=E6=97=A5?= =?UTF-8?q?=E6=9C=AC=E8=AA=9E=E3=83=AA=E3=82=BD=E3=83=BC=E3=82=B9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * フォントを「MS ゴシック」から「Yu Gothic UI」に変更 * 関連する部品同士が集まるよう配置/サイズ変更 * IDD_GREPのキャプションを「Grep条件入力」から「Grep」に変更(メニューアイテムと統一) * ラベル文言を他のダイアログを参考に見直し(Term->Find what等) * ラベルを左寄せから右寄せに変更(見栄え/視認性向上) * ラベル末尾にコロン追加(ガイドライン適用) * アクセラレータキー割り当て見直し * .rc内の変更対象部分をVisualStudioのリソースエディタで保存した時の形式に変更 --- sakura_core/sakura_rc.rc | 187 +++++++++++++++++++-------------------- 1 file changed, 91 insertions(+), 96 deletions(-) diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index 8a4c894af6..1c4f95f814 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -173,105 +173,100 @@ BEGIN COMBOBOX IDC_COMBO_nSortType, 34, 3, 94, 65, CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP END -IDD_GREP DIALOGEX 0, 0, 348, 273 -STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +IDD_GREP DIALOGEX 0, 0, 390, 192 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP -CAPTION "Grep条件入力" -FONT 9, "MS Pゴシック" -BEGIN - LTEXT "条件(&N)", IDC_STATIC, 5, 6, 52, 10 - COMBOBOX IDC_COMBO_TEXT, 64, 6, 273, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - LTEXT "ファイル(&T)", IDC_STATIC, 5, 21, 52, 10, NOT WS_GROUP - COMBOBOX IDC_COMBO_FILE, 64, 21, 273, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - LTEXT "フォルダ(&O)", IDC_STATIC, 5, 36, 52, 10 - COMBOBOX IDC_COMBO_FOLDER, 64, 36, 262, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "&...", IDC_BUTTON_FOLDER, 328, 36, 9, 13 - - LTEXT "除外ファイル", IDC_STATIC, 5, 51, 52, 10, NOT WS_GROUP - COMBOBOX IDC_COMBO_EXCLUDE_FILE, 64, 51, 273, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - LTEXT "除外フォルダ", IDC_STATIC, 5, 66, 52, 10 - COMBOBOX IDC_COMBO_EXCLUDE_FOLDER, 64, 66, 273, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - - CONTROL "単語単位で探す(&W)", IDC_CHK_WORD, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 5, 81, 73, 10 - CONTROL "サブフォルダからも検索する(&S)", IDC_CHK_SUBFOLDER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 97, 113, 10 - CONTROL "現在編集中のファイルから検索(&Q)", IDC_CHK_FROMTHISTEXT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 113, 125, 10 - CONTROL "英大文字と小文字を区別する(&C)", IDC_CHK_LOHICASE, "Button", BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP, 5, 129, 119, 10 - CONTROL "ファイル毎最初のみ検索(&G)",IDC_CHECK_FILE_ONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 145, 119, 10 - CONTROL "フォルダ毎に表示(&Y)", IDC_CHECK_SEP_FOLDER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 161, 83, 10 - CONTROL "ベースフォルダ表示(&V)", IDC_CHECK_BASE_PATH, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 177, 83, 10 - LTEXT "文字コードセット(&A)", IDC_STATIC, 18, 193, 62, 10 - COMBOBOX IDC_COMBO_CHARSET, 85, 193, 65, 101, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "CP(&2)", IDC_CHECK_CP, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 155, 193, 30, 10 - CONTROL "フォルダの初期値をカレントフォルダにする(&D)", IDC_CHK_DEFAULTFOLDER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 209, 164, 10 - CONTROL "正規表現(&E)", IDC_CHK_REGULAREXP, "Button", BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP, 5, 225, 55, 10 - LTEXT "JRE Status", IDC_STATIC_JRE32VER, 18, 241, 159, 10 - GROUPBOX "結果出力", IDC_STATIC, 150, 84, 107, 46, WS_GROUP - CONTROL "該当行(&L)", IDC_RADIO_OUTPUTLINE, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 155, 94, 83, 10 - CONTROL "該当部分(&P)", IDC_RADIO_OUTPUTMARKED, "Button", BS_AUTORADIOBUTTON, 155, 105, 83, 10 - CONTROL "否該当行(&1)", IDC_RADIO_NOHIT, "Button", BS_AUTORADIOBUTTON, 155, 117, 83, 10 - GROUPBOX "結果出力形式", IDC_STATIC, 150, 134, 107, 47, WS_GROUP - CONTROL "ノーマル(&M)", IDC_RADIO_OUTPUTSTYLE1, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 155, 144, 83, 10 - CONTROL "ファイル毎(&I)",IDC_RADIO_OUTPUTSTYLE2, "Button", BS_AUTORADIOBUTTON, 155, 156, 83, 10 - CONTROL "結果のみ(&R)",IDC_RADIO_OUTPUTSTYLE3, "Button", BS_AUTORADIOBUTTON, 155, 168, 83, 10 - PUSHBUTTON "上フォルダ(&B)", IDC_BUTTON_FOLDER_UP, 288, 83, 49, 14 - PUSHBUTTON "現フォルダ(&U)", IDC_BUTTON_CURRENTFOLDER, 288, 105, 49, 14, BS_MULTILINE - DEFPUSHBUTTON "検索(&F)", IDOK, 288, 128, 49, 14, WS_GROUP - PUSHBUTTON "キャンセル(&X)", IDCANCEL, 288, 152, 49, 14 - PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 288, 177, 49,14 -END - -IDD_GREP_REPLACE DIALOGEX 0, 0, 348, 304 -STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Grep" +FONT 9, "Yu Gothic UI", 0, 0, 0x1 +BEGIN + RTEXT "条件(&N):",IDC_STATIC,4,4,52,8 + COMBOBOX IDC_COMBO_TEXT,60,4,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + CONTROL "単語単位(&W)",IDC_CHK_WORD,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,60,18,80,8 + CONTROL "英大小文字区別(&C)",IDC_CHK_LOHICASE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,28,80,8 + CONTROL "正規表現(&E)",IDC_CHK_REGULAREXP,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,38,80,8 + RTEXT "(ここに正規表現ライブラリのバージョン情報が表示されます)",IDC_STATIC_JRE32VER,144,38,188,8 + RTEXT "検索場所(&L):",IDC_STATIC,4,52,52,8 + COMBOBOX IDC_COMBO_FOLDER,60,52,254,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "&...",IDC_BUTTON_FOLDER,316,52,16,10 + CONTROL "編集中のファイルから検索(&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,66,100,8 + CONTROL "サブフォルダも検索(&S)",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,76,100,8 + CONTROL "カレントフォルダが初期値(&D)",IDC_CHK_DEFAULTFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,86,100,8 + PUSHBUTTON "上階層へ(&U)",IDC_BUTTON_FOLDER_UP,230,66,50,14 + PUSHBUTTON "現フォルダ(&G)",IDC_BUTTON_CURRENTFOLDER,282,66,50,14,BS_MULTILINE + RTEXT "対象ファイル(&I):",IDC_STATIC,4,100,52,8,NOT WS_GROUP + COMBOBOX IDC_COMBO_FILE,60,100,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + RTEXT "除外ファイル(&J):",IDC_STATIC,4,114,52,8,NOT WS_GROUP + COMBOBOX IDC_COMBO_EXCLUDE_FILE,60,114,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + RTEXT "除外フォルダ(&K):",IDC_STATIC,4,128,53,8 + COMBOBOX IDC_COMBO_EXCLUDE_FOLDER,60,128,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + GROUPBOX "結果出力",IDC_STATIC,60,144,68,44,WS_GROUP + CONTROL "該当行(&1)",IDC_RADIO_OUTPUTLINE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,68,156,56,8 + CONTROL "該当部分(&2)",IDC_RADIO_OUTPUTMARKED,"Button",BS_AUTORADIOBUTTON,68,166,56,8 + CONTROL "否該当行(&3)",IDC_RADIO_NOHIT,"Button",BS_AUTORADIOBUTTON,68,176,56,8 + GROUPBOX "結果出力形式",IDC_STATIC,132,144,68,44,WS_GROUP + CONTROL "ノーマル(&4)",IDC_RADIO_OUTPUTSTYLE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,140,156,52,8 + CONTROL "ファイル毎(&5)",IDC_RADIO_OUTPUTSTYLE2,"Button",BS_AUTORADIOBUTTON,140,166,52,8 + CONTROL "結果のみ(&6)",IDC_RADIO_OUTPUTSTYLE3,"Button",BS_AUTORADIOBUTTON,140,176,52,8 + GROUPBOX "その他",IDC_STATIC,204,144,180,44,WS_GROUP + CONTROL "ファイル毎最初のみ検索(&7)",IDC_CHECK_FILE_ONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,156,92,8 + CONTROL "フォルダ毎に表示(&8)",IDC_CHECK_SEP_FOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,166,92,8 + CONTROL "ベースフォルダ表示(&9)",IDC_CHECK_BASE_PATH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,176,92,8 + LTEXT "文字コードセット(&A):",IDC_STATIC,312,152,62,8 + COMBOBOX IDC_COMBO_CHARSET,312,162,64,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,312,176,30,8 + DEFPUSHBUTTON "検索(&F)",IDOK,336,4,50,14,WS_GROUP + PUSHBUTTON "キャンセル(&X)",IDCANCEL,336,20,50,14 + PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,336,36,50,14 +END + +IDD_GREP_REPLACE DIALOGEX 0, 0, 390, 204 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP CAPTION "Grep置換" -FONT 9, "MS Pゴシック" -BEGIN - LTEXT "置換前(&N)", IDC_STATIC, 5, 6, 52, 10 - COMBOBOX IDC_COMBO_TEXT, 64, 6, 273, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - LTEXT "置換後(&Z)", IDC_STATIC, 5, 21, 52, 10 - COMBOBOX IDC_COMBO_TEXT2, 64, 21, 273, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - - LTEXT "ファイル(&T)", IDC_STATIC, 5, 36, 52, 10, NOT WS_GROUP - COMBOBOX IDC_COMBO_FILE, 64, 36, 273, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - LTEXT "フォルダ(&O)", IDC_STATIC, 5, 51, 52, 10 - COMBOBOX IDC_COMBO_FOLDER, 64, 51, 262, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "&...", IDC_BUTTON_FOLDER, 328, 51, 9, 13 - - LTEXT "除外ファイル", IDC_STATIC, 5, 66, 52, 10, NOT WS_GROUP - COMBOBOX IDC_COMBO_EXCLUDE_FILE, 64, 66, 273, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - LTEXT "除外フォルダ", IDC_STATIC, 5, 81, 52, 10 - COMBOBOX IDC_COMBO_EXCLUDE_FOLDER, 64, 81, 273, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - - CONTROL "単語単位で探す(&W)", IDC_CHK_WORD, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 5, 97, 73, 10 - CONTROL "サブフォルダからも検索する(&S)", IDC_CHK_SUBFOLDER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 113, 113, 10 - CONTROL "現在編集中のファイルから検索(&Q)", IDC_CHK_FROMTHISTEXT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 129, 125, 10 - CONTROL "英大文字と小文字を区別する(&C)", IDC_CHK_LOHICASE, "Button", BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP, 5, 145, 119, 10 - CONTROL "ファイル毎最初のみ検索(&G)",IDC_CHECK_FILE_ONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 161, 119, 10 - CONTROL "フォルダ毎に表示(&Y)", IDC_CHECK_SEP_FOLDER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 177, 83, 10 - CONTROL "ベースフォルダ表示(&V)", IDC_CHECK_BASE_PATH, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 193, 83, 10 - LTEXT "文字コードセット(&A)", IDC_STATIC, 18, 209, 62, 10 - COMBOBOX IDC_COMBO_CHARSET, 85, 209, 65, 101, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "CP(&2)", IDC_CHECK_CP, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 155, 209, 30, 10 - CONTROL "フォルダの初期値をカレントフォルダにする(&D)", IDC_CHK_DEFAULTFOLDER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 225, 164, 10 - CONTROL "正規表現(&E)", IDC_CHK_REGULAREXP, "Button", BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP, 5, 241, 55, 10 - LTEXT "JRE Status", IDC_STATIC_JRE32VER, 18, 257, 159, 10 - - CONTROL "クリップボードから貼り付ける(&J)", IDC_CHK_PASTE, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 5, 273, 116, 10 - CONTROL "バックアップ作成(&K)", IDC_CHK_BACKUP, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 289, 164, 10 - - GROUPBOX "結果出力", IDC_STATIC, 150, 99, 107, 33, WS_GROUP - CONTROL "該当行(&L)", IDC_RADIO_OUTPUTLINE, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 155, 109, 83, 10 - CONTROL "該当部分(&P)", IDC_RADIO_OUTPUTMARKED, "Button", BS_AUTORADIOBUTTON, 155, 120, 83, 10 - - GROUPBOX "結果出力形式", IDC_STATIC, 150, 149, 107, 47, WS_GROUP - CONTROL "ノーマル(&M)", IDC_RADIO_OUTPUTSTYLE1, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 155, 159, 83, 10 - CONTROL "ファイル毎(&I)",IDC_RADIO_OUTPUTSTYLE2, "Button", BS_AUTORADIOBUTTON, 155, 171, 83, 10 - CONTROL "結果のみ(&R)",IDC_RADIO_OUTPUTSTYLE3, "Button", BS_AUTORADIOBUTTON, 155, 183, 83, 10 - PUSHBUTTON "上フォルダ(&B)", IDC_BUTTON_FOLDER_UP, 288, 98, 49, 14 - PUSHBUTTON "現フォルダ(&U)", IDC_BUTTON_CURRENTFOLDER, 288, 120, 49, 14, BS_MULTILINE - DEFPUSHBUTTON "置換(&R)", IDOK, 288, 143, 49, 14, WS_GROUP - PUSHBUTTON "キャンセル(&X)", IDCANCEL, 288, 167, 49, 14 - PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 288, 192, 49,14 +FONT 9, "Yu Gothic UI", 0, 0, 0x1 +BEGIN + RTEXT "置換前(&N):",IDC_STATIC,4,4,52,10 + COMBOBOX IDC_COMBO_TEXT,60,4,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + RTEXT "置換後(&Z):",IDC_STATIC,4,18,52,10 + COMBOBOX IDC_COMBO_TEXT2,60,18,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + CONTROL "単語単位(&W)",IDC_CHK_WORD,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,60,32,80,8 + CONTROL "英大小文字区別(&C)",IDC_CHK_LOHICASE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,42,80,8 + CONTROL "正規表現(&E)",IDC_CHK_REGULAREXP,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,52,80,8 + CONTROL "クリップボードの内容で置換(&V)",IDC_CHK_PASTE,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,196,32,120,8 + CONTROL "バックアップ作成(&B)",IDC_CHK_BACKUP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,196,42,120,8 + RTEXT "(ここに正規表現ライブラリのバージョン情報が表示されます)",IDC_STATIC_JRE32VER,144,52,188,8 + RTEXT "検索場所(&L):",IDC_STATIC,4,64,52,8 + COMBOBOX IDC_COMBO_FOLDER,60,64,254,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "&...",IDC_BUTTON_FOLDER,316,64,16,10 + CONTROL "編集中のファイルから検索(&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,78,100,8 + CONTROL "サブフォルダも検索(&S)",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,88,100,8 + CONTROL "カレントフォルダが初期値(&D)",IDC_CHK_DEFAULTFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,98,100,8 + PUSHBUTTON "上階層へ(&U)",IDC_BUTTON_FOLDER_UP,230,78,50,14 + PUSHBUTTON "現フォルダ(&G)",IDC_BUTTON_CURRENTFOLDER,282,78,50,14,BS_MULTILINE + RTEXT "対象ファイル(&I):",IDC_STATIC,4,114,52,8,NOT WS_GROUP + COMBOBOX IDC_COMBO_FILE,60,114,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + RTEXT "除外ファイル(&J):",IDC_STATIC,4,128,52,8,NOT WS_GROUP + COMBOBOX IDC_COMBO_EXCLUDE_FILE,60,128,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + RTEXT "除外フォルダ(&K):",IDC_STATIC,4,142,52,8 + COMBOBOX IDC_COMBO_EXCLUDE_FOLDER,60,142,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + GROUPBOX "結果出力",IDC_STATIC,60,156,68,44,WS_GROUP + CONTROL "該当行(&1)",IDC_RADIO_OUTPUTLINE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,68,168,56,8 + CONTROL "該当部分(&2)",IDC_RADIO_OUTPUTMARKED,"Button",BS_AUTORADIOBUTTON,68,178,56,8 + CONTROL "否該当行(&3)",IDC_RADIO_NOHIT,"Button",BS_AUTORADIOBUTTON,68,188,56,8 + GROUPBOX "結果出力形式",IDC_STATIC,132,156,68,44,WS_GROUP + CONTROL "ノーマル(&4)",IDC_RADIO_OUTPUTSTYLE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,140,168,52,8 + CONTROL "ファイル毎(&5)",IDC_RADIO_OUTPUTSTYLE2,"Button",BS_AUTORADIOBUTTON,140,178,52,8 + CONTROL "結果のみ(&6)",IDC_RADIO_OUTPUTSTYLE3,"Button",BS_AUTORADIOBUTTON,140,188,52,8 + GROUPBOX "その他",IDC_STATIC,204,156,180,44,WS_GROUP + CONTROL "ファイル毎最初のみ検索(&7)",IDC_CHECK_FILE_ONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,168,92,8 + CONTROL "フォルダ毎に表示(&8)",IDC_CHECK_SEP_FOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,178,92,8 + CONTROL "ベースフォルダ表示(&9)",IDC_CHECK_BASE_PATH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,188,92,8 + LTEXT "文字コードセット(&A):",IDC_STATIC,312,164,62,8 + COMBOBOX IDC_COMBO_CHARSET,312,174,64,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,312,188,30,8 + DEFPUSHBUTTON "置換(&R)",IDOK,336,4,50,14,WS_GROUP + PUSHBUTTON "キャンセル(&X)",IDCANCEL,336,20,50,14 + PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,336,36,50,14 END IDD_GREPRUNNING DIALOGEX 0, 0, 293, 79 From dd9b851aed7e1f9b3b7be45f22c73c2a055a26cf Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 25 Oct 2020 19:20:00 +0900 Subject: [PATCH 0199/1024] =?UTF-8?q?ApiWrap::Wnd=5FGetText=E3=81=AE?= =?UTF-8?q?=E3=82=AA=E3=83=BC=E3=83=90=E3=83=BC=E3=83=AD=E3=83=BC=E3=83=89?= =?UTF-8?q?=E9=96=A2=E6=95=B0=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit std::make_uniqueを使わないで済むようにラッパー関数を追加する --- sakura_core/apiwrap/StdControl.cpp | 56 ++++++++++++++++++++++++++++++ sakura_core/apiwrap/StdControl.h | 9 +++++ 2 files changed, 65 insertions(+) diff --git a/sakura_core/apiwrap/StdControl.cpp b/sakura_core/apiwrap/StdControl.cpp index b4e2a65017..7452ede587 100644 --- a/sakura_core/apiwrap/StdControl.cpp +++ b/sakura_core/apiwrap/StdControl.cpp @@ -4,6 +4,62 @@ namespace ApiWrap{ + /*! + @brief Window テキストを取得する + @param[in] hWnd ウィンドウハンドル + @param[out] strText ウィンドウテキストを受け取る変数 + @return 成功した場合 true + @return 失敗した場合 false + */ + bool Wnd_GetText( HWND hWnd, std::wstring& strText ) + { + // バッファをクリアしておく + strText.clear(); + + // GetWindowTextLength() はウィンドウテキスト取得に必要なバッファサイズを返す。 + // 条件によっては必要なサイズより大きな値を返すことがある模様 + // https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getwindowtextlengthw + const int cchRequired = ::GetWindowTextLength( hWnd ); + if( cchRequired < 0 ){ + // ドキュメントには失敗した場合、あるいはテキストが空の場合には 0 を返すとある。 + // 0 の場合はエラーかどうか判断できないのでテキストの取得処理を続行する。 + // 仕様上は負の場合はありえないが、念の為エラーチェックしておく。 + return false; + }else if( cchRequired == 0 ){ + // GetWindowTextLength はエラーの場合、またはテキストが空の場合は 0 を返す + if( GetLastError() != 0 ){ + return false; + } + return true; + } + + // ウィンドウテキストを取得するのに必要なバッファを確保する + strText.reserve( cchRequired ); + + // GetWindowText() はコピーした文字数を返す。 + // https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getwindowtextw + const int actualCopied = ::GetWindowText( hWnd, strText.data(), cchRequired ); + if( actualCopied < 0 ){ + // 仕様上は負の場合はありえないが、念の為エラーチェックしておく。 + return false; + } + else if( actualCopied == 0 ){ + // GetWindowText はエラーの場合、またはテキストが空の場合は 0 を返す + if( GetLastError() != 0 ){ + return false; + } + } + else if( (int)strText.capacity() <= actualCopied ){ + // GetWindowText() の仕様上はありえないはず + return false; + } + + // データサイズを反映する + strText.assign( strText.data(), actualCopied ); + + return true; + } + LRESULT List_GetText(HWND hwndList, int nIndex, WCHAR* pszText, size_t cchText) { LRESULT nCount = SendMessage( hwndList, LB_GETTEXTLEN, (WPARAM)nIndex, (LPARAM)0); diff --git a/sakura_core/apiwrap/StdControl.h b/sakura_core/apiwrap/StdControl.h index a171f7d292..8d1c952fb9 100644 --- a/sakura_core/apiwrap/StdControl.h +++ b/sakura_core/apiwrap/StdControl.h @@ -63,6 +63,15 @@ namespace ApiWrap{ return SetWindowText(hwnd, str.GetStringPtr()); } + /*! + @brief Window テキストを取得する + @param[in] hWnd ウィンドウハンドル + @param[out] strText ウィンドウテキストを受け取る変数 + @return 成功した場合 true + @return 失敗した場合 false + */ + bool Wnd_GetText( HWND hWnd, std::wstring& strText ); + /*! @brief Window テキストを取得する @param[in] hwnd ウィンドウハンドル From 2e8452ccdb01ce65d40fe5a73c82c090d6a6c016 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 25 Oct 2020 19:52:59 +0900 Subject: [PATCH 0200/1024] =?UTF-8?q?ApiWrap::DlgItem=5FGetText=E3=81=AE?= =?UTF-8?q?=E3=82=AA=E3=83=BC=E3=83=90=E3=83=BC=E3=83=AD=E3=83=BC=E3=83=89?= =?UTF-8?q?=E9=96=A2=E6=95=B0=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit std::make_uniqueを使わないで済むようにラッパー関数を追加する --- sakura_core/apiwrap/StdControl.cpp | 22 ++++++++++++++++++++++ sakura_core/apiwrap/StdControl.h | 1 + 2 files changed, 23 insertions(+) diff --git a/sakura_core/apiwrap/StdControl.cpp b/sakura_core/apiwrap/StdControl.cpp index 7452ede587..0317e7fbdc 100644 --- a/sakura_core/apiwrap/StdControl.cpp +++ b/sakura_core/apiwrap/StdControl.cpp @@ -70,6 +70,28 @@ namespace ApiWrap{ return SendMessage( hwndList, LB_GETTEXT, (WPARAM)nIndex, LPARAM(pszText) ); } + /*! + @brief ダイアログアイテムのテキストを取得する + @param[in] hDlg ウィンドウハンドル + @param[in] nIDDlgItem ダイアログアイテムのID + @param[out] strText アイテムテキストを受け取る変数 + @return 成功した場合 true + @return 失敗した場合 false + */ + bool DlgItem_GetText( HWND hDlg, int nIDDlgItem, std::wstring& strText ) + { + // バッファをクリアしておく + strText.clear(); + + // アイテムのハンドルを取得する + HWND hWnd = ::GetDlgItem( hDlg, nIDDlgItem ); + if( hWnd == NULL ){ + return false; + } + + return Wnd_GetText( hWnd, strText ); + } + UINT DlgItem_GetText(HWND hwndDlg, int nIDDlgItem, WCHAR* pszText, int nMaxCount) { return GetDlgItemText(hwndDlg, nIDDlgItem, pszText, nMaxCount); diff --git a/sakura_core/apiwrap/StdControl.h b/sakura_core/apiwrap/StdControl.h index 8d1c952fb9..880883f841 100644 --- a/sakura_core/apiwrap/StdControl.h +++ b/sakura_core/apiwrap/StdControl.h @@ -303,6 +303,7 @@ namespace ApiWrap{ return SetDlgItemText(hwndDlg, nIDDlgItem, str); } + bool DlgItem_GetText( HWND hDlg, int nIDDlgItem, std::wstring& strText ); UINT DlgItem_GetText(HWND hwndDlg, int nIDDlgItem, WCHAR* pszText, int nMaxCount); bool TreeView_GetItemTextVector(HWND hwndTree, TVITEM& item, std::vector& vecStr); From ed530f83857b9460ea2ea3b4f4ba51acfbc8ac4e Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 25 Oct 2020 20:10:10 +0900 Subject: [PATCH 0201/1024] =?UTF-8?q?ApiWrap::List=5FGetText=E3=81=AE?= =?UTF-8?q?=E3=82=AA=E3=83=BC=E3=83=90=E3=83=BC=E3=83=AD=E3=83=BC=E3=83=89?= =?UTF-8?q?=E9=96=A2=E6=95=B0=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit std::make_uniqueを使わないで済むようにラッパー関数を追加する --- sakura_core/apiwrap/StdControl.cpp | 43 ++++++++++++++++++++++++++++++ sakura_core/apiwrap/StdControl.h | 1 + 2 files changed, 44 insertions(+) diff --git a/sakura_core/apiwrap/StdControl.cpp b/sakura_core/apiwrap/StdControl.cpp index 0317e7fbdc..3c7d8bc671 100644 --- a/sakura_core/apiwrap/StdControl.cpp +++ b/sakura_core/apiwrap/StdControl.cpp @@ -2,6 +2,8 @@ #include "StdAfx.h" #include "StdControl.h" +#include + namespace ApiWrap{ /*! @@ -60,6 +62,47 @@ namespace ApiWrap{ return true; } + /*! + @brief リストアイテムのテキストを取得する + @param[in] hList リストコントロールのウインドウハンドル + @param[in] nIndex リストアイテムのインデックス + @param[out] strText アイテムテキストを受け取る変数 + @return 成功した場合 true + @return 失敗した場合 false + */ + bool List_GetText( HWND hList, int nIndex, std::wstring& strText ) + { + // バッファをクリアしておく + strText.clear(); + + const int cchRequired = ListBox_GetTextLen( hList, nIndex ); + if( cchRequired < 0 ){ + // LB_ERR(-1)とその他のエラーは区別しない + return false; + }else if( cchRequired == 0 ){ + return true; + } + + // ウィンドウタイトルを設定するのに必要なバッファを確保する + strText.reserve( cchRequired ); + + // ListBox_GetText() はコピーした文字数を返す。 + const int actualCopied = ListBox_GetText( hList, nIndex, strText.data() ); + if( actualCopied < 0 ){ + // LB_ERR(-1)とその他のエラーは区別しない + return false; + } + else if( (int)strText.capacity() <= actualCopied ){ + // ListBox_GetText() の仕様上はありえないはず + return false; + } + + // データサイズを反映する + strText.assign( strText.data(), actualCopied ); + + return true; + } + LRESULT List_GetText(HWND hwndList, int nIndex, WCHAR* pszText, size_t cchText) { LRESULT nCount = SendMessage( hwndList, LB_GETTEXTLEN, (WPARAM)nIndex, (LPARAM)0); diff --git a/sakura_core/apiwrap/StdControl.h b/sakura_core/apiwrap/StdControl.h index 880883f841..074b08441b 100644 --- a/sakura_core/apiwrap/StdControl.h +++ b/sakura_core/apiwrap/StdControl.h @@ -228,6 +228,7 @@ namespace ApiWrap{ // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // リストボックス // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // + bool List_GetText( HWND hList, int nIndex, std::wstring& strText ); LRESULT List_GetText(HWND hwndList, int nIndex, WCHAR* pszText, size_t cchText); template LRESULT List_GetText(HWND hwndList, int nIndex, WCHAR(&pszText)[cchText]) { From c5b4a0fad70999d3e832ab34602ebf23debc6752 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 25 Oct 2020 20:36:12 +0900 Subject: [PATCH 0202/1024] =?UTF-8?q?Wnd=5FGetText=E3=82=92=E9=81=A9?= =?UTF-8?q?=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit std::make_uniqueを使わないように修正 --- sakura_core/dlg/CDlgAbout.cpp | 16 +++++------ sakura_core/dlg/CDlgFind.cpp | 11 ++------ sakura_core/dlg/CDlgGrep.cpp | 7 ++--- sakura_core/dlg/CDlgGrepReplace.cpp | 5 +--- sakura_core/dlg/CDlgReplace.cpp | 23 +++++---------- sakura_core/typeprop/CPropTypesRegex.cpp | 36 ++++++++++++------------ sakura_core/window/CMainToolBar.cpp | 5 +--- 7 files changed, 40 insertions(+), 63 deletions(-) diff --git a/sakura_core/dlg/CDlgAbout.cpp b/sakura_core/dlg/CDlgAbout.cpp index a34137af36..ee499baf10 100644 --- a/sakura_core/dlg/CDlgAbout.cpp +++ b/sakura_core/dlg/CDlgAbout.cpp @@ -390,14 +390,14 @@ BOOL CUrlWnd::SetSubclassWindow( HWND hWnd ) SendMessageAny( hWnd, WM_SETFONT, (WPARAM)m_hFont, (LPARAM)FALSE ); // 設定されているテキストを取得する - const ULONG cchText = ::GetWindowTextLength( hWnd ); - auto textBuf = std::make_unique( cchText + 1 ); - WCHAR* pchText = textBuf.get(); - ::GetWindowText( hWnd, pchText, cchText + 1 ); - - // サイズを調整する - auto retSetText = OnSetText( pchText, cchText ); - return retSetText ? TRUE : FALSE; + std::wstring strText; + if( ApiWrap::Wnd_GetText( hWnd, strText ) ){ + // サイズを調整する + auto retSetText = OnSetText( strText.data(), strText.length() ); + return retSetText ? TRUE : FALSE; + } + + return FALSE; } LRESULT CALLBACK CUrlWnd::UrlWndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) diff --git a/sakura_core/dlg/CDlgFind.cpp b/sakura_core/dlg/CDlgFind.cpp index 3c43e7faab..233b6756be 100644 --- a/sakura_core/dlg/CDlgFind.cpp +++ b/sakura_core/dlg/CDlgFind.cpp @@ -182,10 +182,8 @@ void CDlgFind::SetCombosList( void ) while (Combo_GetCount(hwndCombo) > 0) { Combo_DeleteString( hwndCombo, 0); } - int nBufferSize = ::GetWindowTextLength( GetItemHwnd(IDC_COMBO_TEXT) ) + 1; - auto vText = std::make_unique(nBufferSize); - Combo_GetText( hwndCombo, &vText[0], nBufferSize ); - if (m_strText.compare( &vText[0] ) != 0) { + std::wstring strText; + if( !ApiWrap::DlgItem_GetText( GetHwnd(), IDC_COMBO_TEXT, strText ) || strText != m_strText ) { ::DlgItem_SetText( GetHwnd(), IDC_COMBO_TEXT, m_strText.c_str() ); } } @@ -212,10 +210,7 @@ int CDlgFind::GetData( void ) m_pShareData->m_Common.m_sSearch.m_bNOTIFYNOTFOUND = m_bNOTIFYNOTFOUND; // 検索/置換 見つからないときメッセージを表示 /* 検索文字列 */ - int nBufferSize = ::GetWindowTextLength( GetItemHwnd(IDC_COMBO_TEXT) ) + 1; - auto vText = std::make_unique(nBufferSize); - ::DlgItem_GetText( GetHwnd(), IDC_COMBO_TEXT, &vText[0], nBufferSize); - m_strText = &vText[0]; + ApiWrap::DlgItem_GetText( GetHwnd(), IDC_COMBO_TEXT, m_strText ); /* 検索ダイアログを自動的に閉じる */ m_pShareData->m_Common.m_sSearch.m_bAutoCloseDlgFind = ::IsDlgButtonChecked( GetHwnd(), IDC_CHECK_bAutoCloseDlgFind ); diff --git a/sakura_core/dlg/CDlgGrep.cpp b/sakura_core/dlg/CDlgGrep.cpp index 21ec97e74d..3d4f1ca81d 100644 --- a/sakura_core/dlg/CDlgGrep.cpp +++ b/sakura_core/dlg/CDlgGrep.cpp @@ -791,11 +791,8 @@ int CDlgGrep::GetData( void ) m_bGrepSeparateFolder = IsDlgButtonCheckedBool( GetHwnd(), IDC_CHECK_SEP_FOLDER ); /* 検索文字列 */ - int nBufferSize = ::GetWindowTextLength( GetItemHwnd(IDC_COMBO_TEXT) ) + 1; - auto vText = std::make_unique(nBufferSize); - ::DlgItem_GetText( GetHwnd(), IDC_COMBO_TEXT, &vText[0], nBufferSize); - m_strText = &vText[0]; - m_bSetText = true; + m_bSetText = ApiWrap::DlgItem_GetText( GetHwnd(), IDC_COMBO_TEXT, m_strText );; + /* 検索ファイル */ ::DlgItem_GetText( GetHwnd(), IDC_COMBO_FILE, m_szFile, _countof2(m_szFile) ); /* 検索フォルダ */ diff --git a/sakura_core/dlg/CDlgGrepReplace.cpp b/sakura_core/dlg/CDlgGrepReplace.cpp index 1b29cb6ab8..e83bf7abcc 100644 --- a/sakura_core/dlg/CDlgGrepReplace.cpp +++ b/sakura_core/dlg/CDlgGrepReplace.cpp @@ -199,10 +199,7 @@ int CDlgGrepReplace::GetData( void ) m_bPaste = IsDlgButtonCheckedBool( GetHwnd(), IDC_CHK_PASTE ); /* 置換後 */ - int nBufferSize = ::GetWindowTextLength( GetItemHwnd(IDC_COMBO_TEXT2) ) + 1; - auto vText = std::make_unique(nBufferSize); - ::DlgItem_GetText( GetHwnd(), IDC_COMBO_TEXT2, &vText[0], nBufferSize); - m_strText2 = &vText[0]; + ApiWrap::DlgItem_GetText(GetHwnd(), IDC_COMBO_TEXT2, m_strText2 ); if( 0 == ::GetWindowTextLength( GetItemHwnd(IDC_COMBO_TEXT) ) ){ WarningMessage( GetHwnd(), LS(STR_DLGREPLC_REPSTR) ); diff --git a/sakura_core/dlg/CDlgReplace.cpp b/sakura_core/dlg/CDlgReplace.cpp index 524b0490cd..ff655a56f5 100644 --- a/sakura_core/dlg/CDlgReplace.cpp +++ b/sakura_core/dlg/CDlgReplace.cpp @@ -194,10 +194,8 @@ void CDlgReplace::SetCombosList( void ) while (Combo_GetCount(hwndCombo) > 0) { Combo_DeleteString( hwndCombo, 0); } - int nBufferSize = ::GetWindowTextLength( hwndCombo ) + 1; - auto vText = std::make_unique(nBufferSize); - Combo_GetText( hwndCombo, &vText[0], nBufferSize ); - if (m_strText.compare( &vText[0] ) != 0) { + std::wstring strText; + if( !ApiWrap::DlgItem_GetText( GetHwnd(), IDC_COMBO_TEXT, strText ) || strText != m_strText ) { ::DlgItem_SetText( GetHwnd(), IDC_COMBO_TEXT, m_strText.c_str() ); } @@ -206,10 +204,8 @@ void CDlgReplace::SetCombosList( void ) while (Combo_GetCount(hwndCombo) > 0) { Combo_DeleteString( hwndCombo, 0); } - nBufferSize = ::GetWindowTextLength( hwndCombo ) + 1; - vText = std::make_unique(nBufferSize); - Combo_GetText( hwndCombo, &vText[0], nBufferSize ); - if (m_strText2.compare( &vText[0] ) != 0) { + std::wstring strText2; + if( !ApiWrap::DlgItem_GetText( GetHwnd(), IDC_COMBO_TEXT2, strText2 ) || strText2 != m_strText2 ) { ::DlgItem_SetText( GetHwnd(), IDC_COMBO_TEXT2, m_strText2.c_str() ); } } @@ -240,18 +236,13 @@ int CDlgReplace::GetData( void ) m_pShareData->m_Common.m_sSearch.m_bNOTIFYNOTFOUND = m_bNOTIFYNOTFOUND; // 検索/置換 見つからないときメッセージを表示 /* 検索文字列 */ - int nBufferSize = ::GetWindowTextLength( GetItemHwnd(IDC_COMBO_TEXT) ) + 1; - auto vText = std::make_unique(nBufferSize); - ::DlgItem_GetText( GetHwnd(), IDC_COMBO_TEXT, &vText[0], nBufferSize); - m_strText = &vText[0]; + ApiWrap::DlgItem_GetText( GetHwnd(), IDC_COMBO_TEXT, m_strText ); + /* 置換後文字列 */ if( ::IsDlgButtonChecked( GetHwnd(), IDC_RADIO_LINEDELETE ) ){ m_strText2 = L""; }else{ - nBufferSize = ::GetWindowTextLength( GetItemHwnd(IDC_COMBO_TEXT2) ) + 1; - vText = std::make_unique(nBufferSize); - ::DlgItem_GetText( GetHwnd(), IDC_COMBO_TEXT2, &vText[0], nBufferSize); - m_strText2 = &vText[0]; + ApiWrap::DlgItem_GetText( GetHwnd(), IDC_COMBO_TEXT2, m_strText2 ); } /* 置換 ダイアログを自動的に閉じる */ diff --git a/sakura_core/typeprop/CPropTypesRegex.cpp b/sakura_core/typeprop/CPropTypesRegex.cpp index f5b267aa6a..265874b136 100644 --- a/sakura_core/typeprop/CPropTypesRegex.cpp +++ b/sakura_core/typeprop/CPropTypesRegex.cpp @@ -182,10 +182,10 @@ INT_PTR CPropTypesRegex::DispatchEvent( case IDC_BUTTON_REGEX_INS: /* 挿入 */ { //挿入するキー情報を取得する。 - auto szKeyWord = std::make_unique(nKeyWordSize); - szKeyWord[0] = L'\0'; - ::DlgItem_GetText( hwndDlg, IDC_EDIT_REGEX, &szKeyWord[0], nKeyWordSize ); - if( szKeyWord[0] == L'\0' ) return FALSE; + std::wstring strKeyWord; + if( !ApiWrap::DlgItem_GetText( hwndDlg, IDC_EDIT_REGEX, strKeyWord ) ){ + return FALSE; + } //同じキーがないか調べる。 nIndex2 = ListView_GetItemCount(hwndList); if( nIndex2 >= MAX_REGEX_KEYWORD ) @@ -200,7 +200,7 @@ INT_PTR CPropTypesRegex::DispatchEvent( //選択中でなければ最後にする。 nIndex = nIndex2; } - if( !CheckKeywordList(hwndDlg, &szKeyWord[0], -1) ){ + if( !CheckKeywordList( hwndDlg, strKeyWord.c_str(), -1 ) ){ return FALSE; } @@ -209,7 +209,7 @@ INT_PTR CPropTypesRegex::DispatchEvent( ::DlgItem_GetText( hwndDlg, IDC_COMBO_REGEX_COLOR, szColorIndex, _countof(szColorIndex) ); //キー情報を挿入する。 lvi.mask = LVIF_TEXT | LVIF_PARAM; - lvi.pszText = &szKeyWord[0]; + lvi.pszText = strKeyWord.data(); lvi.iItem = nIndex; lvi.iSubItem = 0; lvi.lParam = 0; @@ -227,20 +227,20 @@ INT_PTR CPropTypesRegex::DispatchEvent( case IDC_BUTTON_REGEX_ADD: /* 追加 */ { - auto szKeyWord = std::make_unique(nKeyWordSize); //最後のキー番号を取得する。 nIndex = ListView_GetItemCount( hwndList ); //追加するキー情報を取得する。 - szKeyWord[0] = L'\0'; - ::DlgItem_GetText( hwndDlg, IDC_EDIT_REGEX, &szKeyWord[0], nKeyWordSize ); - if( szKeyWord[0] == L'\0' ) return FALSE; + std::wstring strKeyWord; + if( !ApiWrap::DlgItem_GetText( hwndDlg, IDC_EDIT_REGEX, strKeyWord ) ){ + return FALSE; + } nIndex2 = ListView_GetItemCount(hwndList); if( nIndex2 >= MAX_REGEX_KEYWORD ) { ErrorMessage( hwndDlg, LS(STR_PROPTYPEREGEX_NOREG)); return FALSE; } - if( !CheckKeywordList(hwndDlg, &szKeyWord[0], -1) ){ + if( !CheckKeywordList( hwndDlg, strKeyWord.c_str(), -1 ) ){ return FALSE; } //追加するキー情報を取得する。 @@ -248,7 +248,7 @@ INT_PTR CPropTypesRegex::DispatchEvent( ::DlgItem_GetText( hwndDlg, IDC_COMBO_REGEX_COLOR, szColorIndex, _countof(szColorIndex) ); //キーを追加する。 lvi.mask = LVIF_TEXT | LVIF_PARAM; - lvi.pszText = &szKeyWord[0]; + lvi.pszText = strKeyWord.data(); lvi.iItem = nIndex; lvi.iSubItem = 0; lvi.lParam = 0; @@ -266,7 +266,6 @@ INT_PTR CPropTypesRegex::DispatchEvent( case IDC_BUTTON_REGEX_UPD: /* 更新 */ { - auto szKeyWord = std::make_unique(nKeyWordSize); //選択中のキーを探す。 nIndex = ListView_GetNextItem( hwndList, -1, LVNI_ALL | LVNI_SELECTED ); if( -1 == nIndex ) @@ -275,10 +274,11 @@ INT_PTR CPropTypesRegex::DispatchEvent( return FALSE; } //更新するキー情報を取得する。 - szKeyWord[0] = L'\0'; - ::DlgItem_GetText( hwndDlg, IDC_EDIT_REGEX, &szKeyWord[0], nKeyWordSize ); - if( szKeyWord[0] == L'\0' ) return FALSE; - if( !CheckKeywordList(hwndDlg, &szKeyWord[0], nIndex) ){ + std::wstring strKeyWord; + if( !ApiWrap::DlgItem_GetText( hwndDlg, IDC_EDIT_REGEX, strKeyWord ) ){ + return FALSE; + } + if( !CheckKeywordList( hwndDlg, strKeyWord.c_str(), nIndex ) ){ return FALSE; } //追加するキー情報を取得する。 @@ -286,7 +286,7 @@ INT_PTR CPropTypesRegex::DispatchEvent( ::DlgItem_GetText( hwndDlg, IDC_COMBO_REGEX_COLOR, szColorIndex, _countof(szColorIndex) ); //キーを更新する。 lvi.mask = LVIF_TEXT | LVIF_PARAM; - lvi.pszText = &szKeyWord[0]; + lvi.pszText = strKeyWord.data(); lvi.iItem = nIndex; lvi.iSubItem = 0; lvi.lParam = 0; diff --git a/sakura_core/window/CMainToolBar.cpp b/sakura_core/window/CMainToolBar.cpp index b93a9163dd..eb6a14c001 100644 --- a/sakura_core/window/CMainToolBar.cpp +++ b/sakura_core/window/CMainToolBar.cpp @@ -596,10 +596,7 @@ void CMainToolBar::AcceptSharedSearchKey() int CMainToolBar::GetSearchKey(std::wstring& strText) { if( m_hwndSearchBox ){ - int nBufferSize = ::GetWindowTextLength( m_hwndSearchBox ) + 1; - auto vText = std::make_unique(nBufferSize); - ::GetWindowText( m_hwndSearchBox, &vText[0], nBufferSize); - strText = &vText[0]; + ApiWrap::Wnd_GetText( m_hwndSearchBox, strText ); }else{ strText = L""; } From 2318efb6ed63dbdafe6c461ea1a84972a44ec769 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 25 Oct 2020 21:02:33 +0900 Subject: [PATCH 0203/1024] =?UTF-8?q?List=5FGetText=E3=82=92=E9=81=A9?= =?UTF-8?q?=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit std::make_uniqueを使わないように修正 --- sakura_core/CHokanMgr.cpp | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/sakura_core/CHokanMgr.cpp b/sakura_core/CHokanMgr.cpp index 0fe4f293d7..8aea93a143 100644 --- a/sakura_core/CHokanMgr.cpp +++ b/sakura_core/CHokanMgr.cpp @@ -539,26 +539,25 @@ BOOL CHokanMgr::DoHokan( int nVKey ) if( VK_TAB == nVKey && !m_pShareData->m_Common.m_sHelper.m_bHokanKey_TAB ) return FALSE;/* VK_TAB 補完決定キーが有効/無効 */ if( VK_RIGHT == nVKey && !m_pShareData->m_Common.m_sHelper.m_bHokanKey_RIGHT ) return FALSE;/* VK_RIGHT 補完決定キーが有効/無効 */ - HWND hwndList; - int nItem; - CEditView* pcEditView; - hwndList = GetItemHwnd( IDC_LIST_WORDS ); - nItem = List_GetCurSel( hwndList ); + HWND hList = GetItemHwnd( IDC_LIST_WORDS ); + const int nItem = List_GetCurSel( hList ); if( LB_ERR == nItem ){ return FALSE; } - int nLabelLen = List_GetTextLen( hwndList, nItem ); - auto pszLabel = std::make_unique(nLabelLen + 1); - List_GetText( hwndList, nItem, &pszLabel[0], nLabelLen + 1 ); + + std::wstring strLabel; + if( !ApiWrap::List_GetText( hList, nItem, strLabel ) ){ + return FALSE; + } /* テキストを貼り付け */ - pcEditView = reinterpret_cast(m_lParam); + CEditView* pcEditView = reinterpret_cast(m_lParam); // Apr. 28, 2000 genta pcEditView->GetCommander().HandleCommand( F_WordDeleteToStart, false, 0, 0, 0, 0 ); - pcEditView->GetCommander().HandleCommand( F_INSTEXT_W, true, (LPARAM)&pszLabel[0], wcslen(&pszLabel[0]), TRUE, 0 ); + pcEditView->GetCommander().HandleCommand( F_INSTEXT_W, true, (LPARAM)strLabel.data(), strLabel.length(), TRUE, 0 ); // Until here -// pcEditView->GetCommander().HandleCommand( F_INSTEXT_W, true, (LPARAM)(pszLabel + m_cmemCurWord.GetLength()), TRUE, 0, 0 ); +// pcEditView->GetCommander().HandleCommand( F_INSTEXT_W, true, (LPARAM)(strLabel.data() + m_cmemCurWord.GetLength()), TRUE, 0, 0 ); Hide(); return TRUE; @@ -658,9 +657,8 @@ void CHokanMgr::ShowTip() nItem = List_GetCurSel( hwndCtrl ); if( LB_ERR == nItem ) return ; - int nLabelLen = List_GetTextLen( hwndCtrl, nItem ); - auto szLabel = std::make_unique(nLabelLen + 1); - List_GetText( hwndCtrl, nItem, &szLabel[0], nLabelLen + 1 ); // 選択中の単語を取得 + std::wstring strLabel; + if( !ApiWrap::List_GetText( hwndCtrl, nItem, strLabel ) ) return; pcEditView = reinterpret_cast(m_lParam); @@ -681,7 +679,7 @@ void CHokanMgr::ShowTip() if( point.y > m_poWin.y && point.y < m_poWin.y + m_nHeight ) { ::SetRect( &rcHokanWin , m_poWin.x, m_poWin.y, m_poWin.x + m_nWidth, m_poWin.y + m_nHeight ); - if( !pcEditView -> ShowKeywordHelp( point, &szLabel[0], &rcHokanWin ) ) + if( !pcEditView -> ShowKeywordHelp( point, strLabel.data(), &rcHokanWin ) ) pcEditView -> m_dwTipTimer = ::GetTickCount(); // 表示するべきキーワードヘルプが無い } } From 74e75f2e79872f164f2da63d2a05eef15e389f94 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 25 Oct 2020 21:25:43 +0900 Subject: [PATCH 0204/1024] =?UTF-8?q?DebugOutW=E3=81=AE=E3=83=AA=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=AF=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit std::make_uniqueを使わないように修正 --- sakura_core/debug/Debug1.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/sakura_core/debug/Debug1.cpp b/sakura_core/debug/Debug1.cpp index 6910533ba7..f53b5b7b2c 100644 --- a/sakura_core/debug/Debug1.cpp +++ b/sakura_core/debug/Debug1.cpp @@ -54,10 +54,15 @@ void DebugOutW( LPCWSTR lpFmt, ...) ::DebugBreak(); - int count = _vscwprintf( lpFmt, argList ); - auto pLargeBuf = std::make_unique( count + 1 ); - if( vswprintf( &pLargeBuf[0], count + 1, lpFmt, argList ) > 0 ) - ::OutputDebugStringW( &pLargeBuf[0] ); + const int count = _vscwprintf( lpFmt, argList ); + + std::wstring strTooLongMessage; + strTooLongMessage.reserve( count ); + + ::_vsnwprintf_s( strTooLongMessage.data(), count + 1, _TRUNCATE, lpFmt, argList ); + strTooLongMessage.assign( strTooLongMessage.data(), count ); + + ::OutputDebugStringW( strTooLongMessage.c_str() ); } va_end(argList); From 085ac88dd0881ff62ab1d2b89aab3152f3271da6 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 25 Oct 2020 21:52:53 +0900 Subject: [PATCH 0205/1024] =?UTF-8?q?CGrepAgent::CreateFolders=E3=83=AA?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=AF=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit std::make_uniqueを使わないように修正 --- sakura_core/CGrepAgent.cpp | 39 +++++++++----------------------------- 1 file changed, 9 insertions(+), 30 deletions(-) diff --git a/sakura_core/CGrepAgent.cpp b/sakura_core/CGrepAgent.cpp index 9b1e7cddd5..0176a69a2a 100644 --- a/sakura_core/CGrepAgent.cpp +++ b/sakura_core/CGrepAgent.cpp @@ -114,43 +114,22 @@ void CGrepAgent::OnAfterSave(const SSaveInfo& sSaveInfo) */ void CGrepAgent::CreateFolders( const WCHAR* pszPath, std::vector& vPaths ) { - const int nPathLen = wcslen( pszPath ); - auto szPath = std::make_unique(nPathLen + 1); - auto szTmp = std::make_unique(nPathLen + 1); - wcscpy( &szPath[0], pszPath ); + std::wstring strPath( pszPath ); + const int nPathLen = static_cast( strPath.length() ); + WCHAR* token; int nPathPos = 0; - while( NULL != (token = my_strtok( &szPath[0], nPathLen, &nPathPos, L";")) ){ - wcscpy( &szTmp[0], token ); - WCHAR* p; - WCHAR* q; - p = q = &szTmp[0]; - while( *p ){ - if( *p != L'"' ){ - if( p != q ){ - *q = *p; - } - q++; - } - p++; + while( NULL != (token = my_strtok( strPath.data(), nPathLen, &nPathPos, L";")) ){ + std::wstring strTemp( token ); + if( strTemp.length() >= 2 && strTemp.front() == L'"' && strTemp.back() == strTemp.front() ){ + strTemp = strTemp.substr( 1, strTemp.length() - 2 ); } - *q = L'\0'; -#if 0 - // 2011.12.25 仕様変更。最後の\\は取り除く - int nFolderLen = q - &szTmp[0]; - if( 0 < nFolderLen ){ - int nCharChars = &szTmp[nFolderLen] - CNativeW::GetCharPrev( &szTmp[0], nFolderLen, &szTmp[nFolderLen] ); - if( 1 == nCharChars && (L'\\' == szTmp[nFolderLen - 1] || L'/' == szTmp[nFolderLen - 1]) ){ - szTmp[nFolderLen - 1] = L'\0'; - } - } -#endif /* ロングファイル名を取得する */ WCHAR szTmp2[_MAX_PATH]; - if( ::GetLongFileName( &szTmp[0], szTmp2 ) ){ + if( ::GetLongFileName( strTemp.c_str(), szTmp2 ) ){ vPaths.push_back( szTmp2 ); }else{ - vPaths.push_back( &szTmp[0] ); + vPaths.emplace_back( strTemp ); } } } From 020f8b761943b2a5244f6e6b6ace845021b801f4 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 25 Oct 2020 22:38:38 +0900 Subject: [PATCH 0206/1024] =?UTF-8?q?CPropTypesRegex=E3=83=AA=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=AF=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit std::make_uniqueを使わないように修正 --- sakura_core/typeprop/CPropTypesRegex.cpp | 55 ++++++++++-------------- 1 file changed, 23 insertions(+), 32 deletions(-) diff --git a/sakura_core/typeprop/CPropTypesRegex.cpp b/sakura_core/typeprop/CPropTypesRegex.cpp index 265874b136..66dccfb7e3 100644 --- a/sakura_core/typeprop/CPropTypesRegex.cpp +++ b/sakura_core/typeprop/CPropTypesRegex.cpp @@ -97,8 +97,6 @@ INT_PTR CPropTypesRegex::DispatchEvent( hwndList = GetDlgItem( hwndDlg, IDC_LIST_REGEX ); - // ANSIビルドではCP932だと2倍程度必要 - const int nKeyWordSize = MAX_REGEX_KEYWORDLEN; WCHAR szColorIndex[256]; switch( uMsg ){ @@ -317,19 +315,18 @@ INT_PTR CPropTypesRegex::DispatchEvent( case IDC_BUTTON_REGEX_TOP: /* 先頭 */ { - auto szKeyWord = std::make_unique(nKeyWordSize); - szKeyWord[0] = L'\0'; + WCHAR szKeyWord[MAX_REGEX_KEYWORDLEN]{ 0 }; //選択中のキーを探す。 nIndex = ListView_GetNextItem( hwndList, -1, LVNI_ALL | LVNI_SELECTED ); if( -1 == nIndex ) return FALSE; if( 0 == nIndex ) return TRUE; //すでに先頭にある。 nIndex2 = 0; - ListView_GetItemText(hwndList, nIndex, 0, &szKeyWord[0], nKeyWordSize); + ListView_GetItemText(hwndList, nIndex, 0, szKeyWord, _countof(szKeyWord)); ListView_GetItemText(hwndList, nIndex, 1, szColorIndex, _countof(szColorIndex)); ListView_DeleteItem(hwndList, nIndex); //古いキーを削除 //キーを追加する。 lvi.mask = LVIF_TEXT | LVIF_PARAM; - lvi.pszText = &szKeyWord[0]; + lvi.pszText = szKeyWord; lvi.iItem = nIndex2; lvi.iSubItem = 0; lvi.lParam = 0; @@ -347,17 +344,16 @@ INT_PTR CPropTypesRegex::DispatchEvent( case IDC_BUTTON_REGEX_LAST: /* 最終 */ { - auto szKeyWord = std::make_unique(nKeyWordSize); - szKeyWord[0] = L'\0'; + WCHAR szKeyWord[MAX_REGEX_KEYWORDLEN]{ 0 }; nIndex = ListView_GetNextItem( hwndList, -1, LVNI_ALL | LVNI_SELECTED ); if( -1 == nIndex ) return FALSE; nIndex2 = ListView_GetItemCount(hwndList); if( nIndex2 - 1 == nIndex ) return TRUE; //すでに最終にある。 - ListView_GetItemText(hwndList, nIndex, 0, &szKeyWord[0], nKeyWordSize); + ListView_GetItemText(hwndList, nIndex, 0, szKeyWord, _countof(szKeyWord)); ListView_GetItemText(hwndList, nIndex, 1, szColorIndex, _countof(szColorIndex)); //キーを追加する。 lvi.mask = LVIF_TEXT | LVIF_PARAM; - lvi.pszText = &szKeyWord[0]; + lvi.pszText = szKeyWord; lvi.iItem = nIndex2; lvi.iSubItem = 0; lvi.lParam = 0; @@ -376,20 +372,19 @@ INT_PTR CPropTypesRegex::DispatchEvent( case IDC_BUTTON_REGEX_UP: /* 上へ */ { - auto szKeyWord = std::make_unique(nKeyWordSize); - szKeyWord[0] = L'\0'; + WCHAR szKeyWord[MAX_REGEX_KEYWORDLEN]{ 0 }; nIndex = ListView_GetNextItem( hwndList, -1, LVNI_ALL | LVNI_SELECTED ); if( -1 == nIndex ) return FALSE; if( 0 == nIndex ) return TRUE; //すでに先頭にある。 nIndex2 = ListView_GetItemCount(hwndList); if( nIndex2 <= 1 ) return TRUE; nIndex2 = nIndex - 1; - ListView_GetItemText(hwndList, nIndex, 0, &szKeyWord[0], nKeyWordSize); + ListView_GetItemText(hwndList, nIndex, 0, szKeyWord, _countof(szKeyWord)); ListView_GetItemText(hwndList, nIndex, 1, szColorIndex, _countof(szColorIndex)); ListView_DeleteItem(hwndList, nIndex); //古いキーを削除 //キーを追加する。 lvi.mask = LVIF_TEXT | LVIF_PARAM; - lvi.pszText = &szKeyWord[0]; + lvi.pszText = szKeyWord; lvi.iItem = nIndex2; lvi.iSubItem = 0; lvi.lParam = 0; @@ -407,19 +402,18 @@ INT_PTR CPropTypesRegex::DispatchEvent( case IDC_BUTTON_REGEX_DOWN: /* 下へ */ { - auto szKeyWord = std::make_unique(nKeyWordSize); - szKeyWord[0] = L'\0'; + WCHAR szKeyWord[MAX_REGEX_KEYWORDLEN]{ 0 }; nIndex = ListView_GetNextItem( hwndList, -1, LVNI_ALL | LVNI_SELECTED ); if( -1 == nIndex ) return FALSE; nIndex2 = ListView_GetItemCount(hwndList); if( nIndex2 - 1 == nIndex ) return TRUE; //すでに最終にある。 if( nIndex2 <= 1 ) return TRUE; nIndex2 = nIndex + 2; - ListView_GetItemText(hwndList, nIndex, 0, &szKeyWord[0], nKeyWordSize); + ListView_GetItemText(hwndList, nIndex, 0, szKeyWord, _countof(szKeyWord)); ListView_GetItemText(hwndList, nIndex, 1, szColorIndex, _countof(szColorIndex)); //キーを追加する。 lvi.mask = LVIF_TEXT | LVIF_PARAM; - lvi.pszText = &szKeyWord[0]; + lvi.pszText = szKeyWord; lvi.iItem = nIndex2; lvi.iSubItem = 0; lvi.lParam = 0; @@ -494,11 +488,10 @@ INT_PTR CPropTypesRegex::DispatchEvent( } if( nPrevIndex != nIndex ) //@@@ 2003.03.26 MIK { //更新時にListViewのSubItemを正しく取得できないので、その対策 - auto szKeyWord = std::make_unique(nKeyWordSize); - szKeyWord[0] = L'\0'; - ListView_GetItemText(hwndList, nIndex, 0, &szKeyWord[0], nKeyWordSize); + WCHAR szKeyWord[MAX_REGEX_KEYWORDLEN]{ 0 }; + ListView_GetItemText(hwndList, nIndex, 0, szKeyWord, _countof(szKeyWord)); ListView_GetItemText(hwndList, nIndex, 1, szColorIndex, _countof(szColorIndex)); - ::DlgItem_SetText( hwndDlg, IDC_EDIT_REGEX, &szKeyWord[0] ); /* 正規表現 */ + ::DlgItem_SetText( hwndDlg, IDC_EDIT_REGEX, szKeyWord ); /* 正規表現 */ hwndCombo = GetDlgItem( hwndDlg, IDC_COMBO_REGEX_COLOR ); for(i = 0, j = 0; i < COLORIDX_LAST; i++) { @@ -616,8 +609,7 @@ int CPropTypesRegex::GetData( HWND hwndDlg ) { HWND hwndList; int nIndex, i, j; - const int szKeyWordSize = _countof(m_Types.m_RegexKeywordList) * 2 + 1; - auto szKeyWord = std::make_unique(szKeyWordSize); + WCHAR szKeyWord[MAX_REGEX_KEYWORDLEN * 2]{ 0 }; WCHAR szColorIndex[256]; //使用する・使用しない @@ -638,10 +630,10 @@ int CPropTypesRegex::GetData( HWND hwndDlg ) { szKeyWord[0] = L'\0'; szColorIndex[0] = L'\0'; - ListView_GetItemText(hwndList, i, 0, &szKeyWord[0], szKeyWordSize ); + ListView_GetItemText(hwndList, i, 0, szKeyWord, _countof(szKeyWord) ); ListView_GetItemText(hwndList, i, 1, szColorIndex, _countof(szColorIndex)); if( pKeyword < pKeywordLast - 1 ){ - wcsncpy_s( pKeyword, pKeywordLast - pKeyword, &szKeyWord[0], _TRUNCATE ); + wcsncpy_s( pKeyword, pKeywordLast - pKeyword, szKeyWord, _TRUNCATE ); } //色指定文字列を番号に変換する m_Types.m_RegexKeywordArr[i].m_nColorIndex = COLORIDX_REGEX1; @@ -704,23 +696,22 @@ bool CPropTypesRegex::CheckKeywordList(HWND hwndDlg, const WCHAR* szNewKeyWord, if( nRet != IDYES ) return false; } // 重複確認・文字列長制限チェック - const int nKeyWordSize = MAX_REGEX_KEYWORDLEN; HWND hwndList = GetDlgItem( hwndDlg, IDC_LIST_REGEX ); int nIndex = ListView_GetItemCount(hwndList); - auto szKeyWord = std::make_unique(nKeyWordSize); + WCHAR szKeyWord[MAX_REGEX_KEYWORDLEN]{ 0 }; int nKeywordLen = 0; for(int i = 0; i < nIndex; i++){ if( i != nUpdateItem ){ szKeyWord[0] = L'\0'; - ListView_GetItemText(hwndList, i, 0, &szKeyWord[0], nKeyWordSize); - if( wcscmp(szNewKeyWord, &szKeyWord[0]) == 0 ) + ListView_GetItemText(hwndList, i, 0, szKeyWord, _countof(szKeyWord)); + if( wcscmp(szNewKeyWord, szKeyWord) == 0 ) { ErrorMessage( hwndDlg, LS(STR_PROPTYPEREGEX_ALREADY)); return false; } // 長さには\0も含む - nKeywordLen += wcsnlen(&szKeyWord[0], nKeyWordSize) + 1; - if( _countof(m_Types.m_RegexKeywordList) - 1 < nKeywordLen ){ + nKeywordLen += wcsnlen(szKeyWord, _countof(szKeyWord)) + 1; + if( _countof(m_Types.m_RegexKeywordList) - 1 < _countof(szKeyWord) ){ ErrorMessage( hwndDlg, LS(STR_PROPTYPEREGEX_FULL) ); return false; } From 336cc8e3ccdf3501120dfe0dbc5dd1afc3710898 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Mon, 26 Oct 2020 12:19:27 +0900 Subject: [PATCH 0207/1024] =?UTF-8?q?=E3=83=87=E3=83=83=E3=83=89=E3=82=B3?= =?UTF-8?q?=E3=83=BC=E3=83=89=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CHokanMgr.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/sakura_core/CHokanMgr.cpp b/sakura_core/CHokanMgr.cpp index 8aea93a143..6c4ea347ec 100644 --- a/sakura_core/CHokanMgr.cpp +++ b/sakura_core/CHokanMgr.cpp @@ -556,8 +556,6 @@ BOOL CHokanMgr::DoHokan( int nVKey ) pcEditView->GetCommander().HandleCommand( F_WordDeleteToStart, false, 0, 0, 0, 0 ); pcEditView->GetCommander().HandleCommand( F_INSTEXT_W, true, (LPARAM)strLabel.data(), strLabel.length(), TRUE, 0 ); - // Until here -// pcEditView->GetCommander().HandleCommand( F_INSTEXT_W, true, (LPARAM)(strLabel.data() + m_cmemCurWord.GetLength()), TRUE, 0, 0 ); Hide(); return TRUE; From 6d9cb045da0433f43ebf3696a9325e207f6c8710 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Mon, 26 Oct 2020 12:21:40 +0900 Subject: [PATCH 0208/1024] =?UTF-8?q?strprintf/vstrprintf=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/debug/Debug1.cpp | 9 ++--- sakura_core/util/string_ex.h | 47 ++++++++++++++++++++++++++ tests/unittests/test-string_ex.cpp | 42 +++++++++++++++++++++++ tests/unittests/tests1.vcxproj | 1 + tests/unittests/tests1.vcxproj.filters | 3 ++ 5 files changed, 96 insertions(+), 6 deletions(-) create mode 100644 tests/unittests/test-string_ex.cpp diff --git a/sakura_core/debug/Debug1.cpp b/sakura_core/debug/Debug1.cpp index f53b5b7b2c..b745d18012 100644 --- a/sakura_core/debug/Debug1.cpp +++ b/sakura_core/debug/Debug1.cpp @@ -21,6 +21,8 @@ #include #include +#include "util/string_ex.h" + #if defined(_DEBUG) || defined(USE_RELPRINT) // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // @@ -54,13 +56,8 @@ void DebugOutW( LPCWSTR lpFmt, ...) ::DebugBreak(); - const int count = _vscwprintf( lpFmt, argList ); - std::wstring strTooLongMessage; - strTooLongMessage.reserve( count ); - - ::_vsnwprintf_s( strTooLongMessage.data(), count + 1, _TRUNCATE, lpFmt, argList ); - strTooLongMessage.assign( strTooLongMessage.data(), count ); + vstrprintf( strTooLongMessage, lpFmt, argList ); ::OutputDebugStringW( strTooLongMessage.c_str() ); } diff --git a/sakura_core/util/string_ex.h b/sakura_core/util/string_ex.h index 263ea4d460..d0c41273b5 100644 --- a/sakura_core/util/string_ex.h +++ b/sakura_core/util/string_ex.h @@ -26,6 +26,8 @@ #define SAKURA_STRING_EX_87282FEB_4B23_4112_9C5A_419F43618705_H_ #pragma once +#include + // 2007.10.19 kobake // string.h で定義されている関数を拡張したようなモノ達 @@ -200,6 +202,51 @@ inline int auto_vsprintf(WCHAR* buf, const WCHAR* format, va_list& v){ return tc inline int auto_vsprintf_s(ACHAR* buf, size_t nBufCount, const ACHAR* format, va_list& v){ return tchar_vsprintf_s(buf, nBufCount, format, v); } inline int auto_vsprintf_s(WCHAR* buf, size_t nBufCount, const WCHAR* format, va_list& v){ return tchar_vsprintf_s(buf, nBufCount, format, v); } +template +inline int vstrprintf( std::basic_string& strOut, const ChType* pszFormat, va_list& argList ) +{ + static_assert( 0, "not implemented" ); + return -1; +} + +template +inline int strprintf( std::basic_string& strOut, const ChType* pszFormat, ... ) +{ + static_assert( 0, "not implemented" ); + return -1; +} + +template<> +inline int vstrprintf( std::wstring& strOut, const WCHAR* pszFormat, va_list& argList ) +{ + strOut.clear(); + + const int cchOut = _vscwprintf( pszFormat, argList ); + if( cchOut > 0 ){ + + strOut.reserve( cchOut ); + + ::vswprintf_s( strOut.data(), strOut.capacity(), pszFormat, argList ); + + strOut.assign( strOut.data(), cchOut ); + } + + return cchOut; +} + +template<> +inline int strprintf( std::wstring& strOut, const WCHAR* pszFormat, ... ) +{ + va_list argList; + va_start( argList, pszFormat ); + + const int nRet = vstrprintf( strOut, pszFormat, argList ); + + va_end( argList ); + + return nRet; +} + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 文字コード変換 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // diff --git a/tests/unittests/test-string_ex.cpp b/tests/unittests/test-string_ex.cpp new file mode 100644 index 0000000000..97d04cb8fe --- /dev/null +++ b/tests/unittests/test-string_ex.cpp @@ -0,0 +1,42 @@ +/*! @file */ +/* + Copyright (C) 2018-2020 Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include + +#ifndef NOMINMAX +#define NOMINMAX +#endif /* #ifndef NOMINMAX */ + +#include +#include + +#include "basis/primitive.h" +#include "util/string_ex.h" + +TEST(string_ex, strprintf) +{ + std::wstring text; + strprintf(text, L"%s-%d", L"test", 101); + ASSERT_STREQ(L"test-101", text.c_str()); +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index 2da2e36862..eaa21c461b 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -123,6 +123,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index 0ffb1ec742..68f0f2697f 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -77,6 +77,9 @@ Test Files + + Test Files + From 6401489808e5ed08931c5c6ac50deef266241abf Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Mon, 26 Oct 2020 12:44:42 +0900 Subject: [PATCH 0209/1024] =?UTF-8?q?=E5=8F=96=E5=BE=97=E5=8F=AF=E8=83=BD?= =?UTF-8?q?=E3=82=B5=E3=82=A4=E3=82=BA=E3=81=AE=E6=8C=87=E5=AE=9A=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/apiwrap/StdControl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/apiwrap/StdControl.cpp b/sakura_core/apiwrap/StdControl.cpp index 3c7d8bc671..1e86b12c68 100644 --- a/sakura_core/apiwrap/StdControl.cpp +++ b/sakura_core/apiwrap/StdControl.cpp @@ -40,7 +40,7 @@ namespace ApiWrap{ // GetWindowText() はコピーした文字数を返す。 // https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getwindowtextw - const int actualCopied = ::GetWindowText( hWnd, strText.data(), cchRequired ); + const int actualCopied = ::GetWindowText( hWnd, strText.data(), (int)strText.capacity() ); if( actualCopied < 0 ){ // 仕様上は負の場合はありえないが、念の為エラーチェックしておく。 return false; From ae0d02bcfd315e1ba5ce85d664a24c919981664b Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sun, 25 Oct 2020 19:47:27 +0900 Subject: [PATCH 0210/1024] =?UTF-8?q?IDD=5FGREP,IDD=5FGREP=5FREPLACE?= =?UTF-8?q?=E3=81=AE=E9=85=8D=E7=BD=AE=E6=94=B9=E5=96=84(=E8=8B=B1?= =?UTF-8?q?=E8=AA=9E=E3=83=AA=E3=82=BD=E3=83=BC=E3=82=B9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * フォントを「Tahoma」から「Segoe UI」に変更 * 他は日本語リソースと同様の変更を適用 --- sakura_lang_en_US/sakura_lang_rc.rc | 193 ++++++++++++++-------------- 1 file changed, 97 insertions(+), 96 deletions(-) diff --git a/sakura_lang_en_US/sakura_lang_rc.rc b/sakura_lang_en_US/sakura_lang_rc.rc index 88abdab1fe..95078a4c06 100644 --- a/sakura_lang_en_US/sakura_lang_rc.rc +++ b/sakura_lang_en_US/sakura_lang_rc.rc @@ -179,105 +179,106 @@ BEGIN COMBOBOX IDC_COMBO_nSortType, 34, 3, 94, 65, CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP END -IDD_GREP DIALOGEX 0, 0, 348, 273 -STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +IDD_GREP DIALOGEX 0, 0, 430, 192 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP -CAPTION "Grep Term Input" -FONT 9, "Tahoma" -BEGIN - LTEXT "Term(&N)", IDC_STATIC, 5, 6, 52, 8 - COMBOBOX IDC_COMBO_TEXT, 64, 6, 273, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - LTEXT "File(&T)", IDC_STATIC, 5, 21, 52, 8, NOT WS_GROUP - COMBOBOX IDC_COMBO_FILE, 64, 21, 273, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - LTEXT "F&older", IDC_STATIC, 5, 36, 52, 8 - COMBOBOX IDC_COMBO_FOLDER, 64, 36, 262, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "&...", IDC_BUTTON_FOLDER, 328, 36, 9, 13 - - LTEXT "Exclude File", IDC_STATIC, 5, 51, 52, 8, NOT WS_GROUP - COMBOBOX IDC_COMBO_EXCLUDE_FILE, 64, 51, 273, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - LTEXT "Exclude Folder", IDC_STATIC, 5, 66, 52, 8 - COMBOBOX IDC_COMBO_EXCLUDE_FOLDER, 64, 66, 273, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - - CONTROL "Match Whole &Word", IDC_CHK_WORD, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 5, 81, 73, 10 - CONTROL "Search &Sub Folders", IDC_CHK_SUBFOLDER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 97, 113, 10 - CONTROL "Search from current file(&Q)", IDC_CHK_FROMTHISTEXT, "Button",BS_AUTOCHECKBOX | WS_TABSTOP, 5, 113, 125, 10 - CONTROL "&Case Sensitive", IDC_CHK_LOHICASE, "Button", BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP, 5, 129, 119, 10 - CONTROL "Match Once Per File(&G)",IDC_CHECK_FILE_ONLY,"Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 145, 119, 10 - CONTROL "Output per director&y", IDC_CHECK_SEP_FOLDER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 161, 83, 10 - CONTROL "Output Relati&ve Path", IDC_CHECK_BASE_PATH, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 177, 83, 10 - LTEXT "Encoding(&A)", IDC_STATIC, 18, 193, 62, 8 - COMBOBOX IDC_COMBO_CHARSET, 85, 193, 65, 101, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "CP(&2)", IDC_CHECK_CP, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 155, 193, 30, 10 - CONTROL "&Default for Folder is 1st Folder", IDC_CHK_DEFAULTFOLDER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 209, 164, 10 - CONTROL "R&egex", IDC_CHK_REGULAREXP, "Button", BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP, 5, 225, 55, 10 - LTEXT "JRE Status",IDC_STATIC_JRE32VER, 18, 241, 159, 8 - GROUPBOX "Result Ouput",IDC_STATIC,150,84,107,46,WS_GROUP - CONTROL "Complete &Line", IDC_RADIO_OUTPUTLINE, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 155, 94, 83, 9 - CONTROL "Matching &Part", IDC_RADIO_OUTPUTMARKED, "Button", BS_AUTORADIOBUTTON, 155, 105, 83, 10 - CONTROL "NoHit Line(&1)", IDC_RADIO_NOHIT, "Button", BS_AUTORADIOBUTTON, 155, 117, 83, 10 - GROUPBOX "Output Format", IDC_STATIC, 150, 134, 107, 47, WS_GROUP - CONTROL "Nor&mal", IDC_RADIO_OUTPUTSTYLE1, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,155,144,83,10 - CONTROL "Per-F&ile", IDC_RADIO_OUTPUTSTYLE2, "Button", BS_AUTORADIOBUTTON, 155, 156, 83, 10 - CONTROL "&Result Only", IDC_RADIO_OUTPUTSTYLE3, "Button", BS_AUTORADIOBUTTON, 155, 168, 83, 10 - PUSHBUTTON "Up(&B)", IDC_BUTTON_FOLDER_UP, 288, 83, 49, 14 - PUSHBUTTON "C&ur Folder", IDC_BUTTON_CURRENTFOLDER, 288, 105, 49, 14, BS_MULTILINE - DEFPUSHBUTTON "&Find", IDOK, 288, 128, 49, 14, WS_GROUP - PUSHBUTTON "Cancel(&X)", IDCANCEL, 288, 152, 49, 14 - PUSHBUTTON "&Help", IDC_BUTTON_HELP, 288, 177, 49, 14 -END - -IDD_GREP_REPLACE DIALOGEX 0, 0, 348, 304 -STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Grep" +FONT 9, "Segoe UI", 0, 0, 0x1 +BEGIN + RTEXT "Find what (&N):",IDC_STATIC,4,4,64,8 + COMBOBOX IDC_COMBO_TEXT,72,4,300,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + CONTROL "Match whole &word",IDC_CHK_WORD,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,72,18,80,8 + CONTROL "&Case sensitive",IDC_CHK_LOHICASE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,72,28,80,8 + CONTROL "Regular &expression",IDC_CHK_REGULAREXP,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,72,38,80,8 + RTEXT "(Regular expression libraly version is displayed here)",IDC_STATIC_JRE32VER,172,38,200,8 + RTEXT "&Look in:",IDC_STATIC,4,52,64,8 + COMBOBOX IDC_COMBO_FOLDER,72,52,282,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "&...",IDC_BUTTON_FOLDER,356,52,16,10 + CONTROL "Current file (&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,66,120,8 + CONTROL "Include &subfolders",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,76,120,8 + CONTROL "Set current folder as &default",IDC_CHK_DEFAULTFOLDER, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,86,120,8 + PUSHBUTTON "Move &Up",IDC_BUTTON_FOLDER_UP,260,66,50,14 + PUSHBUTTON "Curr. Folder (&G)",IDC_BUTTON_CURRENTFOLDER,312,66,60,14,BS_MULTILINE + RTEXT "Filters (&I):",IDC_STATIC,4,100,64,8,NOT WS_GROUP + COMBOBOX IDC_COMBO_FILE,72,100,300,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + RTEXT "Exclude file (&J):",IDC_STATIC,4,114,64,8,NOT WS_GROUP + COMBOBOX IDC_COMBO_EXCLUDE_FILE,72,114,300,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + RTEXT "Exclude folder (&K):",IDC_STATIC,4,128,64,8 + COMBOBOX IDC_COMBO_EXCLUDE_FOLDER,72,128,300,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Result output",IDC_STATIC,72,144,92,44,WS_GROUP + CONTROL "Matched line (&1)",IDC_RADIO_OUTPUTLINE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,80,156,80,8 + CONTROL "Matched part (&2)",IDC_RADIO_OUTPUTMARKED,"Button",BS_AUTORADIOBUTTON,80,166,80,8 + CONTROL "Not matched line (&3)",IDC_RADIO_NOHIT,"Button",BS_AUTORADIOBUTTON,80,176,80,8 + GROUPBOX "Output format",IDC_STATIC,168,144,72,44,WS_GROUP + CONTROL "Normal (&4)",IDC_RADIO_OUTPUTSTYLE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,176,156,60,8 + CONTROL "Each file (&5)",IDC_RADIO_OUTPUTSTYLE2,"Button",BS_AUTORADIOBUTTON,176,166,60,8 + CONTROL "Result only (&6)",IDC_RADIO_OUTPUTSTYLE3,"Button",BS_AUTORADIOBUTTON,176,176,60,8 + GROUPBOX "Other",IDC_STATIC,244,144,180,44,WS_GROUP + CONTROL "Only first match each file (&7)",IDC_CHECK_FILE_ONLY, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,252,156,108,8 + CONTROL "Output each folder (&8)",IDC_CHECK_SEP_FOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,252,166,108,8 + CONTROL "Output with relative path (&9)",IDC_CHECK_BASE_PATH, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,252,176,108,8 + LTEXT "Encoding (&A):",IDC_STATIC,360,152,60,8 + COMBOBOX IDC_COMBO_CHARSET,360,162,60,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,360,176,60,8 + DEFPUSHBUTTON "&Find",IDOK,376,4,50,14,WS_GROUP + PUSHBUTTON "Cancel (&X)",IDCANCEL,376,20,50,14 + PUSHBUTTON "&Help",IDC_BUTTON_HELP,376,36,50,14 +END + +IDD_GREP_REPLACE DIALOGEX 0, 0, 430, 208 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP CAPTION "Grep Replace" -FONT 9, "Tahoma" -BEGIN - LTEXT "Fi&nd", IDC_STATIC, 5, 6, 52, 8 - COMBOBOX IDC_COMBO_TEXT, 64, 6, 273, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - LTEXT "Replace(&Z)", IDC_STATIC, 5, 21, 52, 8 - COMBOBOX IDC_COMBO_TEXT2, 64, 21, 273, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - - LTEXT "File(&T)", IDC_STATIC, 5, 36, 52, 8, NOT WS_GROUP - COMBOBOX IDC_COMBO_FILE, 64, 36, 273, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - LTEXT "F&older", IDC_STATIC, 5, 51, 52, 8 - COMBOBOX IDC_COMBO_FOLDER, 64, 51, 262, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "&...", IDC_BUTTON_FOLDER, 328, 51, 9, 13 - - LTEXT "Exclude File", IDC_STATIC, 5, 66, 52, 8, NOT WS_GROUP - COMBOBOX IDC_COMBO_EXCLUDE_FILE, 64, 65, 271, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - LTEXT "Exclude Folder", IDC_STATIC, 5, 81, 52, 8 - COMBOBOX IDC_COMBO_EXCLUDE_FOLDER, 64, 79, 272, 120, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - - CONTROL "Match Whole &Word", IDC_CHK_WORD, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 5, 97, 73, 10 - CONTROL "Search &Sub Folders", IDC_CHK_SUBFOLDER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 113, 113, 10 - CONTROL "Search from current file(&Q)", IDC_CHK_FROMTHISTEXT, "Button",BS_AUTOCHECKBOX | WS_TABSTOP, 5, 129, 125, 10 - CONTROL "&Case Sensitive", IDC_CHK_LOHICASE, "Button", BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP, 5, 145, 119, 10 - CONTROL "Match Once Per File(&G)",IDC_CHECK_FILE_ONLY,"Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 161, 119, 10 - CONTROL "Output per director&y", IDC_CHECK_SEP_FOLDER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 177, 83, 10 - CONTROL "Output Relati&ve Path", IDC_CHECK_BASE_PATH, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 193, 83, 10 - LTEXT "Encoding(&A)", IDC_STATIC, 18, 209, 62, 8 - COMBOBOX IDC_COMBO_CHARSET, 85, 209, 65, 101, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "CP(&2)", IDC_CHECK_CP, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 155, 209, 30, 10 - CONTROL "&Default for Folder is 1st Folder", IDC_CHK_DEFAULTFOLDER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 225, 164, 10 - CONTROL "R&egex", IDC_CHK_REGULAREXP, "Button", BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP, 5, 241, 55, 10 - LTEXT "JRE Status", IDC_STATIC_JRE32VER, 18, 257, 159, 8 - - CONTROL "Paste from Clipboard(&Z)", IDC_CHK_PASTE, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 5, 273, 116, 10 - CONTROL "Bac&kup", IDC_CHK_BACKUP, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 289, 164, 10 - - GROUPBOX "Result Output", IDC_STATIC, 150, 99, 107, 33, WS_GROUP - CONTROL "Complete &Line", IDC_RADIO_OUTPUTLINE, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 155, 109, 83, 9 - CONTROL "Matching &Part", IDC_RADIO_OUTPUTMARKED, "Button", BS_AUTORADIOBUTTON, 155, 120, 83, 10 - - GROUPBOX "Output Format", IDC_STATIC, 150, 149, 107, 47, WS_GROUP - CONTROL "Nor&mal", IDC_RADIO_OUTPUTSTYLE1, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,155,159,83,10 - CONTROL "Per-F&ile", IDC_RADIO_OUTPUTSTYLE2, "Button", BS_AUTORADIOBUTTON, 155, 171, 83, 10 - CONTROL "&Result Only", IDC_RADIO_OUTPUTSTYLE3, "Button", BS_AUTORADIOBUTTON, 155, 183, 83, 10 - PUSHBUTTON "Up(&B)", IDC_BUTTON_FOLDER_UP, 288, 95, 49, 14 - PUSHBUTTON "C&ur Folder", IDC_BUTTON_CURRENTFOLDER, 288, 117, 49, 14, BS_MULTILINE - DEFPUSHBUTTON "&Replace", IDOK, 288, 140, 49, 14, WS_GROUP - PUSHBUTTON "Cancel(&X)", IDCANCEL, 288, 164, 49, 14 - PUSHBUTTON "&Help", IDC_BUTTON_HELP, 288, 189, 49, 14 +FONT 9, "Segoe UI", 0, 0, 0x1 +BEGIN + RTEXT "Find what (&N):",IDC_STATIC,4,4,64,10 + COMBOBOX IDC_COMBO_TEXT,72,4,300,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + RTEXT "Replace with (&Z):",IDC_STATIC,4,18,64,10 + COMBOBOX IDC_COMBO_TEXT2,72,18,300,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + CONTROL "Match whole &word",IDC_CHK_WORD,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,72,32,80,8 + CONTROL "&Case sensitive",IDC_CHK_LOHICASE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,72,42,80,8 + CONTROL "Regular &expression",IDC_CHK_REGULAREXP,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,72,52,80,8 + CONTROL "Replace from clipboard (&V)",IDC_CHK_PASTE,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,216,32,120,8 + CONTROL "Make &backup",IDC_CHK_BACKUP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,216,42,120,8 + RTEXT "(Regular expression libraly version is displayed here)",IDC_STATIC_JRE32VER,172,52,200,8 + RTEXT "&Look in:",IDC_STATIC,4,64,64,8 + COMBOBOX IDC_COMBO_FOLDER,72,64,282,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "&...",IDC_BUTTON_FOLDER,356,64,16,10 + CONTROL "Current file (&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,78,120,8 + CONTROL "Inlucde &subfolders",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,88,120,8 + CONTROL "Set current folder as &default",IDC_CHK_DEFAULTFOLDER, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,98,120,8 + PUSHBUTTON "Move &Up",IDC_BUTTON_FOLDER_UP,260,78,50,14 + PUSHBUTTON "Curr. Folder (&G)",IDC_BUTTON_CURRENTFOLDER,312,78,60,14,BS_MULTILINE + RTEXT "Filters (&I):",IDC_STATIC,4,114,64,8,NOT WS_GROUP + COMBOBOX IDC_COMBO_FILE,72,114,300,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + RTEXT "Exclude file (&J):",IDC_STATIC,4,128,64,8,NOT WS_GROUP + COMBOBOX IDC_COMBO_EXCLUDE_FILE,72,128,300,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + RTEXT "Exclude folder (&K):",IDC_STATIC,4,142,64,8 + COMBOBOX IDC_COMBO_EXCLUDE_FOLDER,72,142,300,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Result output",IDC_STATIC,72,160,92,44,WS_GROUP + CONTROL "Matched line (&1)",IDC_RADIO_OUTPUTLINE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,80,172,80,8 + CONTROL "Matched part (&2)",IDC_RADIO_OUTPUTMARKED,"Button",BS_AUTORADIOBUTTON,80,182,80,8 + CONTROL "Not matched line (&3)",IDC_RADIO_NOHIT,"Button",BS_AUTORADIOBUTTON,80,192,80,8 + GROUPBOX "Output format",IDC_STATIC,168,160,72,44,WS_GROUP + CONTROL "Normal (&4)",IDC_RADIO_OUTPUTSTYLE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,176,172,60,8 + CONTROL "Each file (&5)",IDC_RADIO_OUTPUTSTYLE2,"Button",BS_AUTORADIOBUTTON,176,182,60,8 + CONTROL "Result only (&6)",IDC_RADIO_OUTPUTSTYLE3,"Button",BS_AUTORADIOBUTTON,176,192,60,8 + GROUPBOX "Other",IDC_STATIC,244,160,180,44,WS_GROUP + CONTROL "Only first match each file (&7)",IDC_CHECK_FILE_ONLY, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,252,172,104,8 + CONTROL "Output each folder (&8)",IDC_CHECK_SEP_FOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,252,182,104,8 + CONTROL "Output with relative path (&9)",IDC_CHECK_BASE_PATH, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,252,192,104,8 + LTEXT "Encoding (&A):",IDC_STATIC,360,168,60,8 + COMBOBOX IDC_COMBO_CHARSET,360,178,60,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,360,192,60,8 + DEFPUSHBUTTON "&Replace",IDOK,376,4,50,14,WS_GROUP + PUSHBUTTON "Cancel (&X)",IDCANCEL,376,20,50,14 + PUSHBUTTON "&Help",IDC_BUTTON_HELP,376,36,50,14 END IDD_GREPRUNNING DIALOGEX 0, 0, 293, 79 From dcb41cbd1fda619b6f155fa2d27dc091ff1395f4 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Tue, 27 Oct 2020 02:00:18 +0900 Subject: [PATCH 0211/1024] =?UTF-8?q?=E3=83=87=E3=83=90=E3=83=83=E3=82=B0?= =?UTF-8?q?=E5=AE=9F=E8=A1=8C=E6=99=82=E3=81=AB=E5=A4=96=E9=83=A8=E3=82=B3?= =?UTF-8?q?=E3=83=9E=E3=83=B3=E3=83=89=E5=AE=9F=E8=A1=8C=E3=83=80=E3=82=A4?= =?UTF-8?q?=E3=82=A2=E3=83=AD=E3=82=B0=E3=82=92=E9=96=8B=E3=81=8F=E3=81=A8?= =?UTF-8?q?warning=5Fpoint=E9=96=A2=E6=95=B0=E3=81=A7=E6=AD=A2=E3=81=BE?= =?UTF-8?q?=E3=82=8B=E5=95=8F=E9=A1=8C=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgExec.cpp | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/sakura_core/dlg/CDlgExec.cpp b/sakura_core/dlg/CDlgExec.cpp index c697dda619..47749836da 100644 --- a/sakura_core/dlg/CDlgExec.cpp +++ b/sakura_core/dlg/CDlgExec.cpp @@ -134,24 +134,29 @@ void CDlgExec::SetData( void ) /***************************** * データ設定 * *****************************/ - wcscpy( m_szCommand, m_pShareData->m_sHistory.m_aCommands[0] ); - hwndCombo = GetItemHwnd( IDC_COMBO_m_szCommand ); - Combo_ResetContent( hwndCombo ); - ::DlgItem_SetText( GetHwnd(), IDC_COMBO_TEXT, m_szCommand ); - int nSize = m_pShareData->m_sHistory.m_aCommands.size(); - for( i = 0; i < nSize; ++i ){ - Combo_AddString( hwndCombo, m_pShareData->m_sHistory.m_aCommands[i] ); + int nCommandsCount = m_pShareData->m_sHistory.m_aCommands.size(); + if( 0 < nCommandsCount ){ + wcscpy( m_szCommand, m_pShareData->m_sHistory.m_aCommands[0] ); + hwndCombo = GetItemHwnd( IDC_COMBO_m_szCommand ); + Combo_ResetContent( hwndCombo ); + ::DlgItem_SetText( GetHwnd(), IDC_COMBO_TEXT, m_szCommand ); + for( i = 0; i < nCommandsCount; ++i ){ + Combo_AddString( hwndCombo, m_pShareData->m_sHistory.m_aCommands[i] ); + } + Combo_SetCurSel( hwndCombo, 0 ); } - Combo_SetCurSel( hwndCombo, 0 ); - wcscpy( m_szCurDir, m_pShareData->m_sHistory.m_aCurDirs[0] ); - hwndCombo = GetItemHwnd( IDC_COMBO_CUR_DIR ); - Combo_ResetContent( hwndCombo ); - ::DlgItem_SetText( GetHwnd(), IDC_COMBO_TEXT, m_szCurDir ); - for( i = 0; i < m_pShareData->m_sHistory.m_aCurDirs.size(); ++i ){ - Combo_AddString( hwndCombo, m_pShareData->m_sHistory.m_aCurDirs[i] ); + int nCurDirsCount = m_pShareData->m_sHistory.m_aCurDirs.size(); + if( 0 < nCurDirsCount ){ + wcscpy( m_szCurDir, m_pShareData->m_sHistory.m_aCurDirs[0] ); + hwndCombo = GetItemHwnd( IDC_COMBO_CUR_DIR ); + Combo_ResetContent( hwndCombo ); + ::DlgItem_SetText( GetHwnd(), IDC_COMBO_TEXT, m_szCurDir ); + for( i = 0; i < nCurDirsCount; ++i ){ + Combo_AddString( hwndCombo, m_pShareData->m_sHistory.m_aCurDirs[i] ); + } + Combo_SetCurSel( hwndCombo, 0 ); } - Combo_SetCurSel( hwndCombo, 0 ); int nOpt; hwndCombo = GetItemHwnd( IDC_COMBO_CODE_GET ); From d722d8cbcef5d82bdbe1175e2e59480d87952cc4 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Mon, 26 Oct 2020 20:45:48 +0900 Subject: [PATCH 0212/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98(=E4=BA=8C=E9=87=8D=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E7=AC=A6=E3=82=92=E5=8F=96=E3=82=8A=E9=99=A4=E3=81=8F=E5=87=A6?= =?UTF-8?q?=E7=90=86=E3=81=8C=E5=A4=89=E3=82=8F=E3=81=A3=E3=81=A6=E3=82=8B?= =?UTF-8?q?)=E3=81=AE=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 前後の '"" を取り除くように実装してたのを パスに含まれる '"' を削除するように修正。 --- sakura_core/CGrepAgent.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/sakura_core/CGrepAgent.cpp b/sakura_core/CGrepAgent.cpp index 0176a69a2a..b036702667 100644 --- a/sakura_core/CGrepAgent.cpp +++ b/sakura_core/CGrepAgent.cpp @@ -121,9 +121,8 @@ void CGrepAgent::CreateFolders( const WCHAR* pszPath, std::vector& int nPathPos = 0; while( NULL != (token = my_strtok( strPath.data(), nPathLen, &nPathPos, L";")) ){ std::wstring strTemp( token ); - if( strTemp.length() >= 2 && strTemp.front() == L'"' && strTemp.back() == strTemp.front() ){ - strTemp = strTemp.substr( 1, strTemp.length() - 2 ); - } + // パスに含まれる '"' を削除する + strTemp.erase( std::remove( strTemp.begin(), strTemp.end(), L'"' ), strTemp.end() ); /* ロングファイル名を取得する */ WCHAR szTmp2[_MAX_PATH]; if( ::GetLongFileName( strTemp.c_str(), szTmp2 ) ){ From 6036009b647eb60c1d53cd6a05dcf9f55199809a Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Mon, 26 Oct 2020 20:55:57 +0900 Subject: [PATCH 0213/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98(reserve=E3=82=88=E3=82=8Aresize=E3=81=AE?= =?UTF-8?q?=E3=81=8C=E8=89=AF=E3=81=95=E3=81=9D=E3=81=86)=E3=81=AE?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit std::wstringのsize()が返すインデックス以降をアクセスした場合の動作は保証されない。 reserveだけだとsizeが変更されないのでresizeに変更しておく。 --- sakura_core/apiwrap/StdControl.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sakura_core/apiwrap/StdControl.cpp b/sakura_core/apiwrap/StdControl.cpp index 1e86b12c68..79701c8ace 100644 --- a/sakura_core/apiwrap/StdControl.cpp +++ b/sakura_core/apiwrap/StdControl.cpp @@ -36,7 +36,7 @@ namespace ApiWrap{ } // ウィンドウテキストを取得するのに必要なバッファを確保する - strText.reserve( cchRequired ); + strText.resize( cchRequired ); // GetWindowText() はコピーした文字数を返す。 // https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getwindowtextw @@ -83,8 +83,8 @@ namespace ApiWrap{ return true; } - // ウィンドウタイトルを設定するのに必要なバッファを確保する - strText.reserve( cchRequired ); + // アイテムテキストを設定するのに必要なバッファを確保する + strText.resize( cchRequired ); // ListBox_GetText() はコピーした文字数を返す。 const int actualCopied = ListBox_GetText( hList, nIndex, strText.data() ); From 943e1d9aff4f3cb230dec1d580b077fcf567ae28 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Mon, 26 Oct 2020 21:21:16 +0900 Subject: [PATCH 0214/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98(strprintf/vstrprintf=E3=81=AF=E3=83=86?= =?UTF-8?q?=E3=83=B3=E3=83=97=E3=83=AC=E3=83=BC=E3=83=88=E3=81=98=E3=82=83?= =?UTF-8?q?=E3=81=AA=E3=81=84=E3=81=BB=E3=81=86=E3=81=8C=E3=81=84=E3=81=84?= =?UTF-8?q?)=E3=81=AE=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/string_ex.cpp | 58 ++++++++++++++++++++++++++++++++++ sakura_core/util/string_ex.h | 47 ++------------------------- 2 files changed, 61 insertions(+), 44 deletions(-) diff --git a/sakura_core/util/string_ex.cpp b/sakura_core/util/string_ex.cpp index aab047c37b..138b0c812d 100644 --- a/sakura_core/util/string_ex.cpp +++ b/sakura_core/util/string_ex.cpp @@ -1,6 +1,9 @@ /*! @file */ #include "StdAfx.h" #include "string_ex.h" + +#include + #include "charset/charcode.h" #include "util/std_macro.h" #include @@ -211,6 +214,61 @@ const char* stristr_j( const char* s1, const char* s2 ) return NULL; } +/*! + @brief C-Styleのフォーマット文字列を使ってデータを文字列化する。 + @param[out] strOut フォーマットされたテキストを受け取る変数 + @param[in] pszFormat フォーマット文字列 + @param[in] argList 引数リスト + @returns 出力された文字数。NUL終端を含まない。 + @retval >= 0 正常終了 + @retval < 0 異常終了 +*/ +int vstrprintf( std::wstring& strOut, const WCHAR* pszFormat, va_list& argList ) +{ + // バッファをクリアしておく + strOut.clear(); + + // _vscwprintf() はフォーマットに必要な文字数を返す。 + const int cchOut = ::_vscwprintf( pszFormat, argList ); + if( cchOut <= 0 ){ + // 出力文字数が0なら後続処理は要らない。また、エラー時は-1が返る。 + return cchOut; + } + + // フォーマットに必要なバッファを確保する + strOut.resize( cchOut ); + + // vswprintf_s() はコピーした文字数を返す。 + const int actualCopied = ::vswprintf_s( strOut.data(), strOut.capacity(), pszFormat, argList ); + if( actualCopied < 0 ){ + // データサイズを反映する + strOut.assign( strOut.data(), cchOut ); + } + + return actualCopied; +} + +/*! + @brief C-Styleのフォーマット文字列を使ってデータを文字列化する。 + @param[out] strOut フォーマットされたテキストを受け取る変数 + @param[in] pszFormat フォーマット文字列 + @param[in] ... 引数リスト + @returns 出力された文字数。NUL終端を含まない。 + @retval >= 0 正常終了 + @retval < 0 異常終了 +*/ +int strprintf( std::wstring& strOut, const WCHAR* pszFormat, ... ) +{ + va_list argList; + va_start( argList, pszFormat ); + + const int nRet = vstrprintf( strOut, pszFormat, argList ); + + va_end( argList ); + + return nRet; +} + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 文字コード変換 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // diff --git a/sakura_core/util/string_ex.h b/sakura_core/util/string_ex.h index d0c41273b5..ddf07e1ccf 100644 --- a/sakura_core/util/string_ex.h +++ b/sakura_core/util/string_ex.h @@ -26,6 +26,7 @@ #define SAKURA_STRING_EX_87282FEB_4B23_4112_9C5A_419F43618705_H_ #pragma once +#include #include // 2007.10.19 kobake @@ -202,50 +203,8 @@ inline int auto_vsprintf(WCHAR* buf, const WCHAR* format, va_list& v){ return tc inline int auto_vsprintf_s(ACHAR* buf, size_t nBufCount, const ACHAR* format, va_list& v){ return tchar_vsprintf_s(buf, nBufCount, format, v); } inline int auto_vsprintf_s(WCHAR* buf, size_t nBufCount, const WCHAR* format, va_list& v){ return tchar_vsprintf_s(buf, nBufCount, format, v); } -template -inline int vstrprintf( std::basic_string& strOut, const ChType* pszFormat, va_list& argList ) -{ - static_assert( 0, "not implemented" ); - return -1; -} - -template -inline int strprintf( std::basic_string& strOut, const ChType* pszFormat, ... ) -{ - static_assert( 0, "not implemented" ); - return -1; -} - -template<> -inline int vstrprintf( std::wstring& strOut, const WCHAR* pszFormat, va_list& argList ) -{ - strOut.clear(); - - const int cchOut = _vscwprintf( pszFormat, argList ); - if( cchOut > 0 ){ - - strOut.reserve( cchOut ); - - ::vswprintf_s( strOut.data(), strOut.capacity(), pszFormat, argList ); - - strOut.assign( strOut.data(), cchOut ); - } - - return cchOut; -} - -template<> -inline int strprintf( std::wstring& strOut, const WCHAR* pszFormat, ... ) -{ - va_list argList; - va_start( argList, pszFormat ); - - const int nRet = vstrprintf( strOut, pszFormat, argList ); - - va_end( argList ); - - return nRet; -} +int vstrprintf( std::wstring& strOut, const WCHAR* pszFormat, va_list& argList ); +int strprintf( std::wstring& strOut, const WCHAR* pszFormat, ... ); // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 文字コード変換 // From 787c2b3aa6619fb4fb6b49477f8325a1e0994a9c Mon Sep 17 00:00:00 2001 From: berryzplus Date: Tue, 27 Oct 2020 23:22:19 +0900 Subject: [PATCH 0215/1024] =?UTF-8?q?CodeFactor=E3=81=AE=E8=AD=A6=E5=91=8A?= =?UTF-8?q?=E5=AF=BE=E7=AD=96=E3=81=A8=E3=81=97=E3=81=A62=E3=81=A4?= =?UTF-8?q?=E4=BB=A5=E4=B8=8A=E3=81=AE=E3=82=AF=E3=83=A9=E3=82=B9=E3=82=92?= =?UTF-8?q?=E5=AE=9A=E7=BE=A9=E3=81=97=E3=81=A6=E3=81=84=E3=82=8Bcs?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=82=92=E5=88=86=E5=89=B2?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CodeFactorの警告(保守性に難アリ)の対応で修正します。 --- .../ChmSourceConverter.csproj | 3 + .../ChmSourceConverterApp.cs | 153 ++++++++++++++++++ .../EncoderEscapingFallback.cs | 100 ------------ .../EncoderEscapingFallbackBuffer.cs | 128 +++++++++++++++ .../ChmSourceConverter/FileContents.cs | 81 ---------- .../ChmSourceConverter/LineEnumerator.cs | 111 +++++++++++++ .../ChmSourceConverter/Program.cs | 127 --------------- 7 files changed, 395 insertions(+), 308 deletions(-) create mode 100644 tools/ChmSourceConverter/ChmSourceConverter/ChmSourceConverterApp.cs create mode 100644 tools/ChmSourceConverter/ChmSourceConverter/EncoderEscapingFallbackBuffer.cs create mode 100644 tools/ChmSourceConverter/ChmSourceConverter/LineEnumerator.cs diff --git a/tools/ChmSourceConverter/ChmSourceConverter/ChmSourceConverter.csproj b/tools/ChmSourceConverter/ChmSourceConverter/ChmSourceConverter.csproj index ae09634f30..77dc98c9c1 100644 --- a/tools/ChmSourceConverter/ChmSourceConverter/ChmSourceConverter.csproj +++ b/tools/ChmSourceConverter/ChmSourceConverter/ChmSourceConverter.csproj @@ -41,8 +41,11 @@ + + + diff --git a/tools/ChmSourceConverter/ChmSourceConverter/ChmSourceConverterApp.cs b/tools/ChmSourceConverter/ChmSourceConverter/ChmSourceConverterApp.cs new file mode 100644 index 0000000000..d69ed08353 --- /dev/null +++ b/tools/ChmSourceConverter/ChmSourceConverter/ChmSourceConverterApp.cs @@ -0,0 +1,153 @@ +/* + Copyright (C) 2018-2020 Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. + */ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace ChmSourceConverter +{ + /// + /// 変換アプリ本体 + /// + internal class ChmSourceConverterApp + { + /// + /// 設定 + /// + private readonly Properties.Settings Settings; + + /// + /// 変換対象の拡張子 + /// + private readonly IEnumerable TargetExtensions; + + /// + /// 入力ファイルのエンコーディング + /// + private readonly Encoding InputEncoding; + + /// + /// HTML中に現れる文字セット定義のパターン(正規表現) + /// + private readonly Regex HtmlCharsetPattern; + + /// + /// コンストラクタ + /// + public ChmSourceConverterApp(Properties.Settings settings) + { + Settings = settings; + + TargetExtensions = Settings.TargetExtensions.Cast().ToList(); + InputEncoding = Encoding.GetEncoding(Settings.InputEncoding); + HtmlCharsetPattern = new Regex(Settings.ReplacePattern, RegexOptions.IgnoreCase); + } + + /// + /// プログラムを開始します + /// + /// + public void Start(string[] args) + { + if (args.Length < 1 && string.IsNullOrEmpty(args.FirstOrDefault())) + throw new ArgumentException("argument missing! Pass the target directory.", "args[0]"); + + string baseDirectory = args.First(); + if (!Directory.Exists(baseDirectory)) + throw new ArgumentException("invalid argument! the target directory does not exist.", "args[0]"); + + var files = Directory.EnumerateFiles(baseDirectory, "*.*", SearchOption.AllDirectories) + .Where(file => TargetExtensions.Any(ext => file.EndsWith(ext))); + + ParallelOptions options = new ParallelOptions() { MaxDegreeOfParallelism = Settings.MaxDegreeOfParallelism }; + Parallel.ForEach(files, options, (file) => DoConvertFile(file)); + } + + /// + /// ファイルを変換する + /// + /// + /// + public void DoConvertFile(string filename) + { + // 作業用ストリームを生成する + using (var memStream = new MemoryStream()) + { + // 作業用ストリームにファイルを読み込む + ReadFileIntoMemory(filename, memStream); + + // 作業用ストリームに蓄積したデータをbyte配列に書き出す + using (var destStream = new FileStream(filename, FileMode.Truncate, FileAccess.Write, FileShare.None)) + memStream.WriteTo(destStream); + } + } + + /// + /// ファイルをメモリに書き込む + /// + /// + /// + private void ReadFileIntoMemory(string filename, Stream stream) + { + // 変換用エンコーディングを生成する + Encoding outputEncoding = Encoding.GetEncoding(Settings.OutputEncoding, + new EncoderEscapingFallback(Settings.EscapingFormat), + new DecoderExceptionFallback()); + + // テキストライターを使ってストリームに読み込む + using (var writer = new StreamWriter(stream, outputEncoding, Settings.OutputBufferSize, true)) + ReadLinesIntoMemory(filename, writer); + } + + /// + /// ファイルから行を読み取ってメモリに書き込む + /// + /// + /// + private void ReadLinesIntoMemory(string filename, TextWriter writer) + { + bool IsHtml = Path.GetExtension(filename) == TargetExtensions.FirstOrDefault(); + + // 入力ファイルから行データを読み取る + using (var contents = new FileContents(filename, InputEncoding)) + { + foreach (var line in contents) + { + // コンテンツフィルターを適用する + if (IsHtml && HtmlCharsetPattern.IsMatch(line)) + { + IsHtml = false; + writer.WriteLine(HtmlCharsetPattern.Replace(line, $"$1{Settings.OutputEncoding}$2")); + continue; + } + writer.WriteLine(line); + } + } + } + } +} diff --git a/tools/ChmSourceConverter/ChmSourceConverter/EncoderEscapingFallback.cs b/tools/ChmSourceConverter/ChmSourceConverter/EncoderEscapingFallback.cs index db24a0740b..a3315371ef 100644 --- a/tools/ChmSourceConverter/ChmSourceConverter/EncoderEscapingFallback.cs +++ b/tools/ChmSourceConverter/ChmSourceConverter/EncoderEscapingFallback.cs @@ -22,8 +22,6 @@ 3. This notice may not be removed or altered from any source distribution. */ using System; -using System.Linq; -using System.Security; using System.Text; using System.Text.RegularExpressions; @@ -71,102 +69,4 @@ public override EncoderFallbackBuffer CreateFallbackBuffer() return new EncoderEscapingFallbackBuffer(this); } } - - /// - /// Represents a substitute input string that is used when the original input character cannot be encoded. - /// This class cannot be inherited. - /// - internal sealed class EncoderEscapingFallbackBuffer : EncoderFallbackBuffer - { - private ArraySegment Buffer; - private EncoderEscapingFallback FallbackRef; - - /// - public override int Remaining => Buffer.Count(); - - /// - /// Initializes a new instance of the EncoderEscapingFallbackBuffer class - /// using the value of a EncoderEscapingFallback object. - /// - /// A EncoderEscapingFallback object. - public EncoderEscapingFallbackBuffer(EncoderEscapingFallback fallback) - { - Buffer = new ArraySegment(Array.Empty()); - FallbackRef = fallback; - } - - /// - /// Prepares the escaping fallback buffer to use the current format string. - /// - /// - /// - private bool Fallback(int charUnknown) - { - var escapedChar = string.Format(FallbackRef.Format, charUnknown); - Buffer = new ArraySegment(escapedChar.ToCharArray()); - return true; - } - - /// - public override bool Fallback(char charUnknown, int index) - { - if (Buffer.Any()) - { - throw new ArgumentException("This method is called again before the GetNextChar method has read all the replacement string characters."); - } - - return Fallback((Int32)charUnknown); - } - - /// - public override bool Fallback(char charUnknownHigh, char charUnknownLow, int index) - { - if (Buffer.Any()) - { - throw new ArgumentException("This method is called again before the GetNextChar method has read all the replacement string characters."); - } - if (charUnknownHigh < 0xD800 || charUnknownHigh > 0xD8FF) - { - throw new ArgumentOutOfRangeException("charUnknownHigh", charUnknownHigh, "The value of charUnknownHigh is out of range"); - } - if (charUnknownLow < 0xDC00 || charUnknownLow > 0xDFFF) - { - throw new ArgumentOutOfRangeException("charUnknownLow", charUnknownLow, "The value of charUnknownLow is out of range"); - } - - int charUnknown = Char.ConvertToUtf32(charUnknownHigh, charUnknownLow); - return Fallback(charUnknown); - } - - /// - public override char GetNextChar() - { - char ch = Buffer.FirstOrDefault(); - if (Buffer.Any()) - { - Buffer = new ArraySegment(Buffer.Array, Buffer.Offset + 1, Buffer.Count - 1); - } - return ch; - } - - /// - public override bool MovePrevious() - { - if (Buffer.Offset == 0) return false; - Buffer = new ArraySegment(Buffer.Array, Buffer.Offset - 1, Buffer.Count + 1); - return true; - } - - /// - /// Initializes all internal state information and data in this instance of System.Text.EncoderReplacementFallbackBuffer. - /// - [SecuritySafeCritical] - public override void Reset() - { - if (Buffer.Any()) - { - Buffer = new ArraySegment(Buffer.Array, 0, Buffer.Array.Length); - } - } - } } diff --git a/tools/ChmSourceConverter/ChmSourceConverter/EncoderEscapingFallbackBuffer.cs b/tools/ChmSourceConverter/ChmSourceConverter/EncoderEscapingFallbackBuffer.cs new file mode 100644 index 0000000000..2a093f253f --- /dev/null +++ b/tools/ChmSourceConverter/ChmSourceConverter/EncoderEscapingFallbackBuffer.cs @@ -0,0 +1,128 @@ +/* + Copyright (C) 2018-2020 Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. + */ +using System; +using System.Linq; +using System.Security; +using System.Text; + +namespace ChmSourceConverter +{ + /// + /// Represents a substitute input string that is used when the original input character cannot be encoded. + /// This class cannot be inherited. + /// + internal sealed class EncoderEscapingFallbackBuffer : EncoderFallbackBuffer + { + private ArraySegment Buffer; + private EncoderEscapingFallback FallbackRef; + + /// + public override int Remaining => Buffer.Count(); + + /// + /// Initializes a new instance of the EncoderEscapingFallbackBuffer class + /// using the value of a EncoderEscapingFallback object. + /// + /// A EncoderEscapingFallback object. + public EncoderEscapingFallbackBuffer(EncoderEscapingFallback fallback) + { + Buffer = new ArraySegment(Array.Empty()); + FallbackRef = fallback; + } + + /// + /// Prepares the escaping fallback buffer to use the current format string. + /// + /// + /// + private bool Fallback(int charUnknown) + { + var escapedChar = string.Format(FallbackRef.Format, charUnknown); + Buffer = new ArraySegment(escapedChar.ToCharArray()); + return true; + } + + /// + public override bool Fallback(char charUnknown, int index) + { + if (Buffer.Any()) + { + throw new ArgumentException("This method is called again before the GetNextChar method has read all the replacement string characters."); + } + + return Fallback((Int32)charUnknown); + } + + /// + public override bool Fallback(char charUnknownHigh, char charUnknownLow, int index) + { + if (Buffer.Any()) + { + throw new ArgumentException("This method is called again before the GetNextChar method has read all the replacement string characters."); + } + if (charUnknownHigh < 0xD800 || charUnknownHigh > 0xD8FF) + { + throw new ArgumentOutOfRangeException("charUnknownHigh", charUnknownHigh, "The value of charUnknownHigh is out of range"); + } + if (charUnknownLow < 0xDC00 || charUnknownLow > 0xDFFF) + { + throw new ArgumentOutOfRangeException("charUnknownLow", charUnknownLow, "The value of charUnknownLow is out of range"); + } + + int charUnknown = Char.ConvertToUtf32(charUnknownHigh, charUnknownLow); + return Fallback(charUnknown); + } + + /// + public override char GetNextChar() + { + char ch = Buffer.FirstOrDefault(); + if (Buffer.Any()) + { + Buffer = new ArraySegment(Buffer.Array, Buffer.Offset + 1, Buffer.Count - 1); + } + return ch; + } + + /// + public override bool MovePrevious() + { + if (Buffer.Offset == 0) return false; + Buffer = new ArraySegment(Buffer.Array, Buffer.Offset - 1, Buffer.Count + 1); + return true; + } + + /// + /// Initializes all internal state information and data in this instance of System.Text.EncoderReplacementFallbackBuffer. + /// + [SecuritySafeCritical] + public override void Reset() + { + if (Buffer.Any()) + { + Buffer = new ArraySegment(Buffer.Array, 0, Buffer.Array.Length); + } + } + } +} diff --git a/tools/ChmSourceConverter/ChmSourceConverter/FileContents.cs b/tools/ChmSourceConverter/ChmSourceConverter/FileContents.cs index cd26d708e1..9b9cb1e989 100644 --- a/tools/ChmSourceConverter/ChmSourceConverter/FileContents.cs +++ b/tools/ChmSourceConverter/ChmSourceConverter/FileContents.cs @@ -24,7 +24,6 @@ 3. This notice may not be removed or altered from any source using System; using System.Collections; using System.Collections.Generic; -using System.IO; using System.Text; namespace ChmSourceConverter @@ -94,84 +93,4 @@ public void Dispose() } #endregion } - - /// - /// 行データを列挙するオブジェクトのクラス - /// - internal class LineEnumerator : IEnumerator - { - /// - /// ストリームリーダー - /// - private StreamReader Reader; - - /// - /// 現在行の行データ - /// - private string CurrentLine; - - /// - public string Current => CurrentLine; - - /// - object IEnumerator.Current => CurrentLine; - - /// - /// コンストラクタ - /// - /// - /// - public LineEnumerator(string filename, Encoding encoding) - { - Reader = new StreamReader(filename, encoding, true); - } - - /// - public bool MoveNext() - { - if (Reader.EndOfStream) return false; - CurrentLine = Reader.ReadLine(); - return true; - } - - /// - public void Reset() - { - CurrentLine = null; - Reader.BaseStream.Seek(0, SeekOrigin.Begin); - } - - #region IDisposable Support - private bool disposedValue = false; // To detect redundant calls - - protected virtual void Dispose(bool disposing) - { - if (!disposedValue) - { - if (disposing) - { - // dispose managed state (managed objects). - Reader.Dispose(); - Reader = null; - } - - disposedValue = true; - } - } - - ~LineEnumerator() - { - // Do not change this code. Put cleanup code in Dispose(bool disposing) above. - Dispose(false); - } - - // This code added to correctly implement the disposable pattern. - public void Dispose() - { - // Do not change this code. Put cleanup code in Dispose(bool disposing) above. - Dispose(true); - GC.SuppressFinalize(this); - } - #endregion - } } diff --git a/tools/ChmSourceConverter/ChmSourceConverter/LineEnumerator.cs b/tools/ChmSourceConverter/ChmSourceConverter/LineEnumerator.cs new file mode 100644 index 0000000000..a6c9125ff1 --- /dev/null +++ b/tools/ChmSourceConverter/ChmSourceConverter/LineEnumerator.cs @@ -0,0 +1,111 @@ +/* + Copyright (C) 2018-2020 Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace ChmSourceConverter +{ + /// + /// 行データを列挙するオブジェクトのクラス + /// + internal class LineEnumerator : IEnumerator + { + /// + /// ストリームリーダー + /// + private StreamReader Reader; + + /// + /// 現在行の行データ + /// + private string CurrentLine; + + /// + public string Current => CurrentLine; + + /// + object IEnumerator.Current => CurrentLine; + + /// + /// コンストラクタ + /// + /// + /// + public LineEnumerator(string filename, Encoding encoding) + { + Reader = new StreamReader(filename, encoding, true); + } + + /// + public bool MoveNext() + { + if (Reader.EndOfStream) return false; + CurrentLine = Reader.ReadLine(); + return true; + } + + /// + public void Reset() + { + CurrentLine = null; + Reader.BaseStream.Seek(0, SeekOrigin.Begin); + } + + #region IDisposable Support + private bool disposedValue = false; // To detect redundant calls + + protected virtual void Dispose(bool disposing) + { + if (!disposedValue) + { + if (disposing) + { + // dispose managed state (managed objects). + Reader.Dispose(); + Reader = null; + } + + disposedValue = true; + } + } + + ~LineEnumerator() + { + // Do not change this code. Put cleanup code in Dispose(bool disposing) above. + Dispose(false); + } + + // This code added to correctly implement the disposable pattern. + public void Dispose() + { + // Do not change this code. Put cleanup code in Dispose(bool disposing) above. + Dispose(true); + GC.SuppressFinalize(this); + } + #endregion + } +} diff --git a/tools/ChmSourceConverter/ChmSourceConverter/Program.cs b/tools/ChmSourceConverter/ChmSourceConverter/Program.cs index 9c7cd972d9..9c74408a48 100644 --- a/tools/ChmSourceConverter/ChmSourceConverter/Program.cs +++ b/tools/ChmSourceConverter/ChmSourceConverter/Program.cs @@ -21,136 +21,9 @@ and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading.Tasks; namespace ChmSourceConverter { - /// - /// 変換アプリ本体 - /// - internal class ChmSourceConverterApp - { - /// - /// 設定 - /// - private readonly Properties.Settings Settings; - - /// - /// 変換対象の拡張子 - /// - private readonly IEnumerable TargetExtensions; - - /// - /// 入力ファイルのエンコーディング - /// - private readonly Encoding InputEncoding; - - /// - /// HTML中に現れる文字セット定義のパターン(正規表現) - /// - private readonly Regex HtmlCharsetPattern; - - /// - /// コンストラクタ - /// - public ChmSourceConverterApp(Properties.Settings settings) - { - Settings = settings; - - TargetExtensions = Settings.TargetExtensions.Cast().ToList(); - InputEncoding = Encoding.GetEncoding(Settings.InputEncoding); - HtmlCharsetPattern = new Regex(Settings.ReplacePattern, RegexOptions.IgnoreCase); - } - - /// - /// プログラムを開始します - /// - /// - public void Start(string[] args) - { - if (args.Length < 1 && string.IsNullOrEmpty(args.FirstOrDefault())) - throw new ArgumentException("argument missing! Pass the target directory.", "args[0]"); - - string baseDirectory = args.First(); - if (!Directory.Exists(baseDirectory)) - throw new ArgumentException("invalid argument! the target directory does not exist.", "args[0]"); - - var files = Directory.EnumerateFiles(baseDirectory, "*.*", SearchOption.AllDirectories) - .Where(file => TargetExtensions.Any(ext => file.EndsWith(ext))); - - ParallelOptions options = new ParallelOptions() { MaxDegreeOfParallelism = Settings.MaxDegreeOfParallelism }; - Parallel.ForEach(files, options, (file) => DoConvertFile(file)); - } - - /// - /// ファイルを変換する - /// - /// - /// - public void DoConvertFile(string filename) - { - // 作業用ストリームを生成する - using (var memStream = new MemoryStream()) - { - // 作業用ストリームにファイルを読み込む - ReadFileIntoMemory(filename, memStream); - - // 作業用ストリームに蓄積したデータをbyte配列に書き出す - using (var destStream = new FileStream(filename, FileMode.Truncate, FileAccess.Write, FileShare.None)) - memStream.WriteTo(destStream); - } - } - - /// - /// ファイルをメモリに書き込む - /// - /// - /// - private void ReadFileIntoMemory(string filename, Stream stream) - { - // 変換用エンコーディングを生成する - Encoding outputEncoding = Encoding.GetEncoding(Settings.OutputEncoding, - new EncoderEscapingFallback(Settings.EscapingFormat), - new DecoderExceptionFallback()); - - // テキストライターを使ってストリームに読み込む - using (var writer = new StreamWriter(stream, outputEncoding, Settings.OutputBufferSize, true)) - ReadLinesIntoMemory(filename, writer); - } - - /// - /// ファイルから行を読み取ってメモリに書き込む - /// - /// - /// - private void ReadLinesIntoMemory(string filename, TextWriter writer) - { - bool IsHtml = Path.GetExtension(filename) == TargetExtensions.FirstOrDefault(); - - // 入力ファイルから行データを読み取る - using (var contents = new FileContents(filename, InputEncoding)) - { - foreach (var line in contents) - { - // コンテンツフィルターを適用する - if (IsHtml && HtmlCharsetPattern.IsMatch(line)) - { - IsHtml = false; - writer.WriteLine(HtmlCharsetPattern.Replace(line, $"$1{Settings.OutputEncoding}$2")); - continue; - } - writer.WriteLine(line); - } - } - } - } - class Program { static void Main(string[] args) From 203f7be0b6c61220cd8bec9224d570ba04730314 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Wed, 28 Oct 2020 01:20:55 +0900 Subject: [PATCH 0216/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgExec.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sakura_core/dlg/CDlgExec.cpp b/sakura_core/dlg/CDlgExec.cpp index 47749836da..54fa35e230 100644 --- a/sakura_core/dlg/CDlgExec.cpp +++ b/sakura_core/dlg/CDlgExec.cpp @@ -134,11 +134,11 @@ void CDlgExec::SetData( void ) /***************************** * データ設定 * *****************************/ - int nCommandsCount = m_pShareData->m_sHistory.m_aCommands.size(); + hwndCombo = GetItemHwnd( IDC_COMBO_m_szCommand ); + Combo_ResetContent( hwndCombo ); + const int nCommandsCount = m_pShareData->m_sHistory.m_aCommands.size(); if( 0 < nCommandsCount ){ wcscpy( m_szCommand, m_pShareData->m_sHistory.m_aCommands[0] ); - hwndCombo = GetItemHwnd( IDC_COMBO_m_szCommand ); - Combo_ResetContent( hwndCombo ); ::DlgItem_SetText( GetHwnd(), IDC_COMBO_TEXT, m_szCommand ); for( i = 0; i < nCommandsCount; ++i ){ Combo_AddString( hwndCombo, m_pShareData->m_sHistory.m_aCommands[i] ); @@ -146,11 +146,11 @@ void CDlgExec::SetData( void ) Combo_SetCurSel( hwndCombo, 0 ); } - int nCurDirsCount = m_pShareData->m_sHistory.m_aCurDirs.size(); + hwndCombo = GetItemHwnd( IDC_COMBO_CUR_DIR ); + Combo_ResetContent( hwndCombo ); + const int nCurDirsCount = m_pShareData->m_sHistory.m_aCurDirs.size(); if( 0 < nCurDirsCount ){ wcscpy( m_szCurDir, m_pShareData->m_sHistory.m_aCurDirs[0] ); - hwndCombo = GetItemHwnd( IDC_COMBO_CUR_DIR ); - Combo_ResetContent( hwndCombo ); ::DlgItem_SetText( GetHwnd(), IDC_COMBO_TEXT, m_szCurDir ); for( i = 0; i < nCurDirsCount; ++i ){ Combo_AddString( hwndCombo, m_pShareData->m_sHistory.m_aCurDirs[i] ); From 4b142236efbad5c076fd50e9e8b90410fada2a67 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 13 Nov 2016 11:07:11 +0900 Subject: [PATCH 0217/1024] =?UTF-8?q?=E3=82=AB=E3=82=B9=E3=82=BF=E3=83=A0?= =?UTF-8?q?=E3=83=A1=E3=83=8B=E3=83=A5=E3=83=BC=E9=96=A2=E4=BF=82=E3=81=AE?= =?UTF-8?q?=E9=85=8D=E5=88=97=E3=81=AB=E5=AF=BE=E3=81=99=E3=82=8B=E7=AF=84?= =?UTF-8?q?=E5=9B=B2=E5=A4=96=E3=82=A2=E3=82=AF=E3=82=BB=E3=82=B9=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/prop/CPropComCustmenu.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/prop/CPropComCustmenu.cpp b/sakura_core/prop/CPropComCustmenu.cpp index f1ac7a65d7..3bb90afcbf 100644 --- a/sakura_core/prop/CPropComCustmenu.cpp +++ b/sakura_core/prop/CPropComCustmenu.cpp @@ -492,7 +492,7 @@ INT_PTR CPropCustmenu::DispatchEvent( } nNum2 = List_GetCount( hwndLIST_RES ); if( LB_ERR == nNum2 ){ - nIdx2 = 0; + nNum2 = 0; } nIdx3 = Combo_GetCurSel( hwndCOMBO_FUNCKIND ); if( CB_ERR == nIdx3 ){ From e717f759e5e27901f729e446b3b374d2a4efb5ec Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 28 Oct 2020 00:18:51 +0900 Subject: [PATCH 0218/1024] =?UTF-8?q?CSS=E3=83=97=E3=83=AD=E3=83=91?= =?UTF-8?q?=E3=83=86=E3=82=A3=E3=81=AE=E6=8C=87=E5=AE=9A=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E3=81=8C=E5=86=97=E9=95=B7=E3=81=AA=E3=81=AE=E3=82=92=E7=9B=B4?= =?UTF-8?q?=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 上 左 下 右 全部 --- help/macro/source/search.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/help/macro/source/search.html b/help/macro/source/search.html index 9f05a67003..72fee0e78b 100644 --- a/help/macro/source/search.html +++ b/help/macro/source/search.html @@ -42,7 +42,7 @@ ul { - margin: 0 0 0 0; + margin: 0; padding: 0; } From 4a923ceb506f7dfec8c4d93125bb954f6374fdf9 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 28 Oct 2020 00:23:11 +0900 Subject: [PATCH 0219/1024] =?UTF-8?q?CSS=E3=83=97=E3=83=AD=E3=83=91?= =?UTF-8?q?=E3=83=86=E3=82=A3=E3=81=AE=E6=8C=87=E5=AE=9A=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E3=81=8C=E5=86=97=E9=95=B7=E3=81=AA=E3=81=AE=E3=82=92=E7=9B=B4?= =?UTF-8?q?=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 上 左 下 右 上 左右 下 --- help/plugin/Text/implementation01.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/help/plugin/Text/implementation01.html b/help/plugin/Text/implementation01.html index 91c1648cf4..90f274f980 100644 --- a/help/plugin/Text/implementation01.html +++ b/help/plugin/Text/implementation01.html @@ -11,7 +11,7 @@ From 4e504e0352fb4259adb6494296fb22ce0d1db8d4 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 28 Oct 2020 00:29:00 +0900 Subject: [PATCH 0220/1024] =?UTF-8?q?CSS=E3=83=97=E3=83=AD=E3=83=91?= =?UTF-8?q?=E3=83=86=E3=82=A3=E3=81=AE=E6=8C=87=E5=AE=9A=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E3=81=8C=E5=86=97=E9=95=B7=E3=81=AA=E3=81=AE=E3=82=92=E7=9B=B4?= =?UTF-8?q?=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 上 左 下 右 上下 左右 --- help/plugin/Text/dsk_sakura.css | 12 ++++++------ help/sakura/res/dsk_sakura.css | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/help/plugin/Text/dsk_sakura.css b/help/plugin/Text/dsk_sakura.css index 6de75c301c..a23bad0a41 100644 --- a/help/plugin/Text/dsk_sakura.css +++ b/help/plugin/Text/dsk_sakura.css @@ -25,28 +25,28 @@ HR { border-color: #666; margin: 1em; border-style: solid; height: 2px; } H1 { - padding: 0.2em 0.5em 0.2em 0.5em; font-weight: bold; font-size: 1.5em; line-height: 1; + padding: 0.2em 0.5em; font-weight: bold; font-size: 1.5em; line-height: 1; border-color: #f28; background-color: #fee; color: #000; } H2 { - padding: 0.2em 0.5em 0.2em 0.5em; font-weight: bold; font-size: 1.2em; line-height: 1; margin-top: 1em; + padding: 0.2em 0.5em; font-weight: bold; font-size: 1.2em; line-height: 1; margin-top: 1em; border-top: 2px solid #f28; border-bottom: 2px solid #f28; background-color: #fee; color: #000; } H3 { - padding: 0.2em 0.5em 0.2em 0.5em; font-weight: bold; font-size: 1em; line-height: 1; margin-top: 1em; + padding: 0.2em 0.5em; font-weight: bold; font-size: 1em; line-height: 1; margin-top: 1em; border-bottom: 2px solid #f28; background-color: #fee; color: #000; } H4 { - padding: 0.2em 0.5em 0.2em 0.5em; font-weight: bold; font-size: 1em; line-height: 1; margin-top: 1em; + padding: 0.2em 0.5em; font-weight: bold; font-size: 1em; line-height: 1; margin-top: 1em; background-color: #fee; color: #000; } DL { padding: 0; border: 1px solid #666; margin-right: 1em; margin-left: 1em; } DT { - PADDING: 0.1em 0.3em 0.1em 0.3em; MARGIN: 0.5em 0 0; BORDER-RIGHT: 1px; BORDER-TOP: 1px solid #666; BORDER-LEFT: 1px; BORDER-BOTTOM: 1px solid #f28; BACKGROUND-COLOR: #fee + PADDING: 0.1em 0.3em; MARGIN: 0.5em 0 0; BORDER-RIGHT: 1px; BORDER-TOP: 1px solid #666; BORDER-LEFT: 1px; BORDER-BOTTOM: 1px solid #f28; BACKGROUND-COLOR: #fee } DD { PADDING-RIGHT: 0.1em; PADDING-LEFT: 0.5em; PADDING-BOTTOM: 0.2em; MARGIN: 0; PADDING-TOP: 0.2em @@ -97,7 +97,7 @@ STRONG { FONT-WEIGHT: bold; TEXT-ALIGN: center } .example { - margin: 0; padding: 0 1em 0 1em; font-weight: bold; border-top-style: none; + margin: 0; padding: 0 1em; font-weight: bold; border-top-style: none; ; border-right-style: none; border-left-style: none; background-color: #e0fce8; text-align: left; border-bottom-style: none } .note { diff --git a/help/sakura/res/dsk_sakura.css b/help/sakura/res/dsk_sakura.css index 37c48e50b3..366e61602b 100644 --- a/help/sakura/res/dsk_sakura.css +++ b/help/sakura/res/dsk_sakura.css @@ -25,28 +25,28 @@ HR { border-color: #666; margin: 1em; border-style: solid; height: 2px; } H1 { - padding: 0.2em 0.5em 0.2em 0.5em; font-weight: bold; font-size: 1.5em; line-height: 1; + padding: 0.2em 0.5em; font-weight: bold; font-size: 1.5em; line-height: 1; border-color: #f28; background-color: #fee; color: #000; } H2 { - padding: 0.2em 0.5em 0.2em 0.5em; font-weight: bold; font-size: 1.2em; line-height: 1; margin-top: 1em; + padding: 0.2em 0.5em; font-weight: bold; font-size: 1.2em; line-height: 1; margin-top: 1em; border-top: 2px solid #f28; border-bottom: 2px solid #f28; background-color: #fee; color: #000; } H3 { - padding: 0.2em 0.5em 0.2em 0.5em; font-weight: bold; font-size: 1em; line-height: 1; margin-top: 1em; + padding: 0.2em 0.5em; font-weight: bold; font-size: 1em; line-height: 1; margin-top: 1em; border-bottom: 2px solid #f28; background-color: #fee; color: #000; } H4 { - padding: 0.2em 0.5em 0.2em 0.5em; font-weight: bold; font-size: 1em; line-height: 1; margin-top: 1em; + padding: 0.2em 0.5em; font-weight: bold; font-size: 1em; line-height: 1; margin-top: 1em; background-color: #fee; color: #000; } DL { padding: 0; border: 1px solid #666; margin-right: 1em; margin-left: 1em; } DT { - PADDING: 0.1em 0.3em 0.1em 0.3em; MARGIN: 0.5em 0 0; BORDER-RIGHT: 1px; BORDER-TOP: 1px solid #666; BORDER-LEFT: 1px; BORDER-BOTTOM: 1px solid #f28; BACKGROUND-COLOR: #fee + PADDING: 0.1em 0.3em; MARGIN: 0.5em 0 0; BORDER-RIGHT: 1px; BORDER-TOP: 1px solid #666; BORDER-LEFT: 1px; BORDER-BOTTOM: 1px solid #f28; BACKGROUND-COLOR: #fee } DD { PADDING-RIGHT: 0.1em; PADDING-LEFT: 0.5em; PADDING-BOTTOM: 0.2em; MARGIN: 0; PADDING-TOP: 0.2em @@ -97,7 +97,7 @@ STRONG { FONT-WEIGHT: bold; TEXT-ALIGN: center } .example { - margin: 0; padding: 0 1em 0 1em; font-weight: bold; border-top-style: none; + margin: 0; padding: 0 1em; font-weight: bold; border-top-style: none; ; border-right-style: none; border-left-style: none; background-color: #e0fce8; text-align: left; border-bottom-style: none } .note { From 6b4fab5697018857f692874a17b47a63c467dc56 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 28 Oct 2020 00:39:24 +0900 Subject: [PATCH 0221/1024] =?UTF-8?q?=E7=A9=BA=E3=81=AECSS=E3=82=BB?= =?UTF-8?q?=E3=83=AC=E3=82=AF=E3=82=BF=E3=82=92=E5=89=8A=E9=99=A4=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- help/plugin/Text/dsk_sakura.css | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/help/plugin/Text/dsk_sakura.css b/help/plugin/Text/dsk_sakura.css index a23bad0a41..ee5f0cc5ef 100644 --- a/help/plugin/Text/dsk_sakura.css +++ b/help/plugin/Text/dsk_sakura.css @@ -176,8 +176,6 @@ td.box { table.er { border:0; } -th.er { -} td.er { border: #666 1px solid; padding-right: 0.5em; @@ -186,14 +184,6 @@ td.er { padding-bottom: 0.1em; } -table.f { - /*border: #666 2px solid;*/ -} -th.f { -} -td.f { -} - pre.code { width:100%; overflow:auto; From d4409b4f4f82a429423cdcde9602e498f6b5c4e1 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 28 Oct 2020 00:49:54 +0900 Subject: [PATCH 0222/1024] =?UTF-8?q?CSS=E3=82=BB=E3=83=AC=E3=82=AF?= =?UTF-8?q?=E3=82=BF=E3=81=AE=E5=AE=9A=E7=BE=A9=E3=81=8C=E5=88=86=E3=81=8B?= =?UTF-8?q?=E3=82=8C=E3=81=A6=E3=81=84=E3=82=8B=E3=81=AE=E3=82=92=E3=81=8F?= =?UTF-8?q?=E3=81=A3=E4=BB=98=E3=81=91=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- help/macro/source/sakura.css | 3 --- help/plugin/Text/dsk_sakura.css | 14 +++----------- help/sakura/res/dsk_sakura.css | 14 +++----------- 3 files changed, 6 insertions(+), 25 deletions(-) diff --git a/help/macro/source/sakura.css b/help/macro/source/sakura.css index 6d9617fb13..67cf3a2649 100644 --- a/help/macro/source/sakura.css +++ b/help/macro/source/sakura.css @@ -2,9 +2,6 @@ { BACKGROUND-COLOR: #fff } -BODY -{ -} P { diff --git a/help/plugin/Text/dsk_sakura.css b/help/plugin/Text/dsk_sakura.css index ee5f0cc5ef..f269533e9c 100644 --- a/help/plugin/Text/dsk_sakura.css +++ b/help/plugin/Text/dsk_sakura.css @@ -44,9 +44,11 @@ H4 { } DL { padding: 0; border: 1px solid #666; margin-right: 1em; margin-left: 1em; + LINE-HEIGHT: 1.4 } DT { PADDING: 0.1em 0.3em; MARGIN: 0.5em 0 0; BORDER-RIGHT: 1px; BORDER-TOP: 1px solid #666; BORDER-LEFT: 1px; BORDER-BOTTOM: 1px solid #f28; BACKGROUND-COLOR: #fee + FONT-WEIGHT: bold } DD { PADDING-RIGHT: 0.1em; PADDING-LEFT: 0.5em; PADDING-BOTTOM: 0.2em; MARGIN: 0; PADDING-TOP: 0.2em @@ -63,28 +65,18 @@ TD { P { LINE-HEIGHT: 1.4 } -DL { - LINE-HEIGHT: 1.4 -} UL { LINE-HEIGHT: 1.4 + LIST-STYLE-TYPE: square } OL { LINE-HEIGHT: 1.4 } -DT { - FONT-WEIGHT: bold -} -UL { - LIST-STYLE-TYPE: square -} EM { COLOR: #909; BACKGROUND-COLOR: transparent } STRONG { COLOR: #909; BACKGROUND-COLOR: transparent -} -STRONG { BORDER-RIGHT: 3px; BORDER-TOP: 3px; BORDER-LEFT: 3px; BORDER-BOTTOM: 3px double } .s { diff --git a/help/sakura/res/dsk_sakura.css b/help/sakura/res/dsk_sakura.css index 366e61602b..044249354d 100644 --- a/help/sakura/res/dsk_sakura.css +++ b/help/sakura/res/dsk_sakura.css @@ -44,9 +44,11 @@ H4 { } DL { padding: 0; border: 1px solid #666; margin-right: 1em; margin-left: 1em; + LINE-HEIGHT: 1.4 } DT { PADDING: 0.1em 0.3em; MARGIN: 0.5em 0 0; BORDER-RIGHT: 1px; BORDER-TOP: 1px solid #666; BORDER-LEFT: 1px; BORDER-BOTTOM: 1px solid #f28; BACKGROUND-COLOR: #fee + FONT-WEIGHT: bold } DD { PADDING-RIGHT: 0.1em; PADDING-LEFT: 0.5em; PADDING-BOTTOM: 0.2em; MARGIN: 0; PADDING-TOP: 0.2em @@ -63,28 +65,18 @@ TD { P { LINE-HEIGHT: 1.4 } -DL { - LINE-HEIGHT: 1.4 -} UL { LINE-HEIGHT: 1.4 + LIST-STYLE-TYPE: square } OL { LINE-HEIGHT: 1.4 } -DT { - FONT-WEIGHT: bold -} -UL { - LIST-STYLE-TYPE: square -} EM { COLOR: #909; BACKGROUND-COLOR: transparent } STRONG { COLOR: #909; BACKGROUND-COLOR: transparent -} -STRONG { BORDER-RIGHT: 3px; BORDER-TOP: 3px; BORDER-LEFT: 3px; BORDER-BOTTOM: 3px double } .s { From ebe508bf57628c4ad1372061df4a0096416113e9 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 28 Oct 2020 12:43:45 +0900 Subject: [PATCH 0223/1024] =?UTF-8?q?=E4=BD=99=E5=88=86=E3=81=AA=E3=82=BB?= =?UTF-8?q?=E3=83=9F=E3=82=B3=E3=83=AD=E3=83=B3=E3=81=8C=E3=81=82=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- help/plugin/Text/dsk_sakura.css | 2 +- help/sakura/res/dsk_sakura.css | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/help/plugin/Text/dsk_sakura.css b/help/plugin/Text/dsk_sakura.css index f269533e9c..5e1bd82998 100644 --- a/help/plugin/Text/dsk_sakura.css +++ b/help/plugin/Text/dsk_sakura.css @@ -90,7 +90,7 @@ STRONG { } .example { margin: 0; padding: 0 1em; font-weight: bold; border-top-style: none; - ; border-right-style: none; border-left-style: none; background-color: #e0fce8; text-align: left; border-bottom-style: none + border-right-style: none; border-left-style: none; background-color: #e0fce8; text-align: left; border-bottom-style: none } .note { PADDING-RIGHT: 1em; PADDING-LEFT: 1em; PADDING-BOTTOM: 0; MARGIN: 0; BORDER-TOP-STYLE: none; PADDING-TOP: 0; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #cdf; TEXT-ALIGN: left; BORDER-BOTTOM-STYLE: none diff --git a/help/sakura/res/dsk_sakura.css b/help/sakura/res/dsk_sakura.css index 044249354d..fa4aa53f7c 100644 --- a/help/sakura/res/dsk_sakura.css +++ b/help/sakura/res/dsk_sakura.css @@ -90,7 +90,7 @@ STRONG { } .example { margin: 0; padding: 0 1em; font-weight: bold; border-top-style: none; - ; border-right-style: none; border-left-style: none; background-color: #e0fce8; text-align: left; border-bottom-style: none + border-right-style: none; border-left-style: none; background-color: #e0fce8; text-align: left; border-bottom-style: none } .note { PADDING-RIGHT: 1em; PADDING-LEFT: 1em; PADDING-BOTTOM: 0; MARGIN: 0; BORDER-TOP-STYLE: none; PADDING-TOP: 0; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #cdf; TEXT-ALIGN: left; BORDER-BOTTOM-STYLE: none From d4e42d743c1719a1194e2361d1ece9d86b2d4f1f Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 28 Oct 2020 18:40:22 +0900 Subject: [PATCH 0224/1024] =?UTF-8?q?CodeFactor=E3=81=AE=E8=AD=A6=E5=91=8A?= =?UTF-8?q?=E5=AF=BE=E7=AD=96=E3=81=A8=E3=81=97=E3=81=A6=E7=A9=BA=E3=81=AE?= =?UTF-8?q?if=E6=96=87=E3=82=92=E9=99=A4=E5=8E=BB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CEditView.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index 5e73ac9406..6dd8ed1916 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -289,8 +289,11 @@ BOOL CEditView::Create( wc.hbrBackground = (HBRUSH)NULL/*(COLOR_WINDOW + 1)*/; wc.lpszMenuName = NULL; wc.lpszClassName = GSTR_VIEWNAME; - if( 0 == ::RegisterClass( &wc ) ){ - } + + // TODO: 実装を改善する余地があります。 + // RegisterClassは既に登録された状態で呼ぶと失敗するため、 + // 単純に成否チェックして抜けたらマズいです。 + ::RegisterClass( &wc ); /* エディタウィンドウの作成 */ SetHwnd( From caa0148334cb9c8b5b699218eb5ac26e3da36c02 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 28 Oct 2020 18:42:08 +0900 Subject: [PATCH 0225/1024] =?UTF-8?q?CodeFactor=E3=81=AE=E8=AD=A6=E5=91=8A?= =?UTF-8?q?=E5=AF=BE=E7=AD=96=E3=81=A8=E3=81=97=E3=81=A6=E7=84=A1=E9=A7=84?= =?UTF-8?q?=E3=81=AAif=E6=96=87=E3=82=92=E9=99=A4=E5=8E=BB=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CEditView_Mouse.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/sakura_core/view/CEditView_Mouse.cpp b/sakura_core/view/CEditView_Mouse.cpp index a7f1ae3f51..374b8b2225 100644 --- a/sakura_core/view/CEditView_Mouse.cpp +++ b/sakura_core/view/CEditView_Mouse.cpp @@ -422,8 +422,6 @@ normal_action:; } } - if( 0 < nWorkRel ){ - } /* 選択領域描画 */ GetSelectionInfo().DrawSelectArea(); } From c1704c5efb2fee663907da82d1f0437533955cbc Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 28 Oct 2020 18:44:32 +0900 Subject: [PATCH 0226/1024] =?UTF-8?q?CodeFactor=E3=81=AE=E8=AD=A6=E5=91=8A?= =?UTF-8?q?=E5=AF=BE=E7=AD=96=E3=81=A8=E3=81=97=E3=81=A6=E7=A9=BA=E3=81=AE?= =?UTF-8?q?if=E6=96=87=E3=82=92=E9=99=A4=E5=8E=BB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/prop/CPropComKeyword.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sakura_core/prop/CPropComKeyword.cpp b/sakura_core/prop/CPropComKeyword.cpp index fcee37aa07..d94a2a4803 100644 --- a/sakura_core/prop/CPropComKeyword.cpp +++ b/sakura_core/prop/CPropComKeyword.cpp @@ -576,8 +576,7 @@ void CPropKeyword::Clean_List_KeyWord( HWND hwndDlg, HWND hwndLIST_KEYWORD ) { if( IDYES == ::MessageBox( hwndDlg, LS(STR_PROPCOMKEYWORD_DEL), GSTR_APPNAME, MB_YESNO | MB_ICONQUESTION ) ){ // 2009.03.26 ryoji MB_ICONSTOP->MB_ICONQUESTION - if( m_Common.m_sSpecialKeyword.m_CKeyWordSetMgr.CleanKeyWords( m_Common.m_sSpecialKeyword.m_CKeyWordSetMgr.m_nCurrentKeyWordSetIdx ) ){ - } + m_Common.m_sSpecialKeyword.m_CKeyWordSetMgr.CleanKeyWords( m_Common.m_sSpecialKeyword.m_CKeyWordSetMgr.m_nCurrentKeyWordSetIdx ); SetKeyWordSet( hwndDlg, m_Common.m_sSpecialKeyword.m_CKeyWordSetMgr.m_nCurrentKeyWordSetIdx ); } } From dca955a93b0d59096ddf0aa59243d357af584fe6 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 28 Oct 2020 18:48:27 +0900 Subject: [PATCH 0227/1024] =?UTF-8?q?CodeFactor=E3=81=AE=E8=AD=A6=E5=91=8A?= =?UTF-8?q?=E5=AF=BE=E7=AD=96=E3=81=A8=E3=81=97=E3=81=A6=E7=A9=BA=E3=81=AE?= =?UTF-8?q?if=E6=96=87=E3=82=92=E9=99=A4=E5=8E=BB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgJump.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/sakura_core/dlg/CDlgJump.cpp b/sakura_core/dlg/CDlgJump.cpp index 330e26b0c3..6dbef20c92 100644 --- a/sakura_core/dlg/CDlgJump.cpp +++ b/sakura_core/dlg/CDlgJump.cpp @@ -249,9 +249,6 @@ void CDlgJump::SetData( void ) nIndex = 0; nPLSQLBlockNum = 0; for( i = 0; i < cFuncInfoArr.GetNum(); ++i ){ - if( 31 == cFuncInfoArr.GetAt( i )->m_nInfo || - 41 == cFuncInfoArr.GetAt( i )->m_nInfo ){ - } if( 31 == cFuncInfoArr.GetAt( i )->m_nInfo ){ if( m_pShareData->m_bLineNumIsCRLF_ForJump ){ /* 行番号の表示 false=折り返し単位/true=改行単位 */ auto_sprintf( szText, LS(STR_DLGJUMP_PSLQL), From 041c75791a7200ad2f1db9d1f52daa400fda0881 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 28 Oct 2020 20:48:12 +0900 Subject: [PATCH 0228/1024] =?UTF-8?q?listzip.ps1=E3=81=A7=E6=A4=9C?= =?UTF-8?q?=E5=87=BA=E3=81=95=E3=82=8C=E3=81=9F=E5=95=8F=E9=A1=8C=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ・Write-Hostは実装されていないプラットフォームがあるので使うべきでないらしいです。 ・catchブロックを書くなら空にすべきではないそうです。 --- tools/zip/listzip.ps1 | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/tools/zip/listzip.ps1 b/tools/zip/listzip.ps1 index fbbbdd13e1..e31ede8b3e 100644 --- a/tools/zip/listzip.ps1 +++ b/tools/zip/listzip.ps1 @@ -1,16 +1,12 @@ Param($Arg1) -try -{ - Add-Type -AssemblyName "System.IO.Compression.FileSystem" - - $sourcezip = [System.IO.Compression.Zipfile]::OpenRead($Arg1) - foreach($file in $sourcezip.Entries){ - Write-Host $file.LastWriteTime $file.Length $file.FullName - } - $sourcezip.Dispose() +Add-Type -AssemblyName "System.IO.Compression.FileSystem" -} -catch +if (Test-Path $Arg1) { + if (-Not(Split-Path -IsAbsolute $Arg1)) + { + $arg1 = Convert-Path $Arg1 + } + [System.IO.Compression.Zipfile]::OpenRead($Arg1).entries | ft -a LastWriteTime,Length,FullName } From 335bea44548b05d3732e917e437cfbe5af491c43 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 30 Oct 2020 22:38:43 +0900 Subject: [PATCH 0229/1024] =?UTF-8?q?swprintf=E3=82=92strprintf=E3=81=AB?= =?UTF-8?q?=E7=BD=AE=E3=81=8D=E6=8F=9B=E3=81=88=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit szPathのサイズチェックをせずにswprintfに渡しているのでバッファが溢れる危険性があるのを対策する。 strprintfは必要なバッファを動的に再確保するため問題は起きない。 --- sakura_core/_main/CCommandLine.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/sakura_core/_main/CCommandLine.cpp b/sakura_core/_main/CCommandLine.cpp index 67ee78fd85..8e6a6e8a4c 100644 --- a/sakura_core/_main/CCommandLine.cpp +++ b/sakura_core/_main/CCommandLine.cpp @@ -318,12 +318,10 @@ void CCommandLine::ParseCommandLine( LPCWSTR pszCmdLineSrc, bool bResponse ) int len = wcslen(szPath); for (int i = 0; i < len ; ) { if ( !TCODE::IsValidFilenameChar(szPath[i]) ){ - WCHAR msg_str[_MAX_PATH + 1]; - swprintf( - msg_str, _countof(msg_str), - LS(STR_CMDLINE_PARSECMD1), - szPath - ); + std::wstring msg; + // "%ls\r\n上記のファイル名は不正です。ファイル名に \\ / : * ? "" < > | の文字は使えません。 " + strprintf( msg, LS(STR_CMDLINE_PARSECMD1), szPath ); + const WCHAR* msg_str = msg.c_str(); MessageBox( NULL, msg_str, L"FileNameError", MB_OK); szPath[0] = L'\0'; break; From 3b53e817a614d4dd5c26a31dd444e0907f4025a3 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sat, 31 Oct 2020 17:17:28 +0900 Subject: [PATCH 0230/1024] =?UTF-8?q?Grep=E7=BD=AE=E6=8F=9B=E3=83=80?= =?UTF-8?q?=E3=82=A4=E3=82=A2=E3=83=AD=E3=82=B0=E3=81=AB=E8=AA=A4=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=E3=81=95=E3=82=8C=E3=81=9F=E3=80=8C=E5=90=A6=E8=A9=B2?= =?UTF-8?q?=E5=BD=93=E8=A1=8C=E3=80=8D=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/sakura_rc.rc | 1 - sakura_lang_en_US/sakura_lang_rc.rc | 1 - 2 files changed, 2 deletions(-) diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index 1c4f95f814..b8d65d90eb 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -252,7 +252,6 @@ BEGIN GROUPBOX "結果出力",IDC_STATIC,60,156,68,44,WS_GROUP CONTROL "該当行(&1)",IDC_RADIO_OUTPUTLINE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,68,168,56,8 CONTROL "該当部分(&2)",IDC_RADIO_OUTPUTMARKED,"Button",BS_AUTORADIOBUTTON,68,178,56,8 - CONTROL "否該当行(&3)",IDC_RADIO_NOHIT,"Button",BS_AUTORADIOBUTTON,68,188,56,8 GROUPBOX "結果出力形式",IDC_STATIC,132,156,68,44,WS_GROUP CONTROL "ノーマル(&4)",IDC_RADIO_OUTPUTSTYLE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,140,168,52,8 CONTROL "ファイル毎(&5)",IDC_RADIO_OUTPUTSTYLE2,"Button",BS_AUTORADIOBUTTON,140,178,52,8 diff --git a/sakura_lang_en_US/sakura_lang_rc.rc b/sakura_lang_en_US/sakura_lang_rc.rc index 95078a4c06..4618577a04 100644 --- a/sakura_lang_en_US/sakura_lang_rc.rc +++ b/sakura_lang_en_US/sakura_lang_rc.rc @@ -262,7 +262,6 @@ BEGIN GROUPBOX "Result output",IDC_STATIC,72,160,92,44,WS_GROUP CONTROL "Matched line (&1)",IDC_RADIO_OUTPUTLINE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,80,172,80,8 CONTROL "Matched part (&2)",IDC_RADIO_OUTPUTMARKED,"Button",BS_AUTORADIOBUTTON,80,182,80,8 - CONTROL "Not matched line (&3)",IDC_RADIO_NOHIT,"Button",BS_AUTORADIOBUTTON,80,192,80,8 GROUPBOX "Output format",IDC_STATIC,168,160,72,44,WS_GROUP CONTROL "Normal (&4)",IDC_RADIO_OUTPUTSTYLE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,176,172,60,8 CONTROL "Each file (&5)",IDC_RADIO_OUTPUTSTYLE2,"Button",BS_AUTORADIOBUTTON,176,182,60,8 From a459e6c4f85bb485a91461128fc9ccb0b9f705d6 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 31 Oct 2020 17:38:16 +0900 Subject: [PATCH 0231/1024] =?UTF-8?q?=E3=83=91=E3=82=B9=E3=81=AB=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=A4=E3=83=AB=E5=90=8D=E3=81=AB=E4=BD=BF=E3=81=88?= =?UTF-8?q?=E3=81=AA=E3=81=84=E6=96=87=E5=AD=97=E3=81=8C=E5=90=AB=E3=81=BE?= =?UTF-8?q?=E3=82=8C=E3=81=A6=E3=81=84=E3=81=AA=E3=81=84=E3=81=8B=E3=83=81?= =?UTF-8?q?=E3=82=A7=E3=83=83=E3=82=AF=E3=81=99=E3=82=8B=E9=96=A2=E6=95=B0?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/_main/CCommandLine.cpp | 9 +--- sakura_core/util/file.cpp | 20 +++++++++ sakura_core/util/file.h | 4 ++ tests/unittests/test-file.cpp | 59 ++++++++++++++++++++++++++ tests/unittests/tests1.vcxproj | 1 + tests/unittests/tests1.vcxproj.filters | 3 ++ 6 files changed, 89 insertions(+), 7 deletions(-) create mode 100644 tests/unittests/test-file.cpp diff --git a/sakura_core/_main/CCommandLine.cpp b/sakura_core/_main/CCommandLine.cpp index 8e6a6e8a4c..a1d86680a7 100644 --- a/sakura_core/_main/CCommandLine.cpp +++ b/sakura_core/_main/CCommandLine.cpp @@ -315,19 +315,14 @@ void CCommandLine::ParseCommandLine( LPCWSTR pszCmdLineSrc, bool bResponse ) if (wcsncmp_literal(szPath, L"file:///")==0) { wcscpy(szPath, &(szPath[8])); } - int len = wcslen(szPath); - for (int i = 0; i < len ; ) { - if ( !TCODE::IsValidFilenameChar(szPath[i]) ){ + + if ( !CheckInvalidFilenameChars( szPath ) ){ std::wstring msg; // "%ls\r\n上記のファイル名は不正です。ファイル名に \\ / : * ? "" < > | の文字は使えません。 " strprintf( msg, LS(STR_CMDLINE_PARSECMD1), szPath ); const WCHAR* msg_str = msg.c_str(); MessageBox( NULL, msg_str, L"FileNameError", MB_OK); szPath[0] = L'\0'; - break; - } - int nChars = t_max(1, int(CNativeW::GetCharNext( szPath, len, szPath + i ) - (szPath + i))); - i += nChars; } if (szPath[0] != L'\0') { diff --git a/sakura_core/util/file.cpp b/sakura_core/util/file.cpp index 05e45a1eec..874a151afb 100644 --- a/sakura_core/util/file.cpp +++ b/sakura_core/util/file.cpp @@ -40,6 +40,26 @@ bool fexist(LPCWSTR pszPath) return _waccess(pszPath,0)!=-1; } + +/*! + * パスがファイル名に使えない文字を含んでいないかチェックする + * @param[in] strPath チェック対象のパス + * @retval true パスはファイル名に使えない文字を含んでいない + * retuval false パスはファイル名に使えない文字を含んでいる + */ +bool CheckInvalidFilenameChars( const std::wstring_view& strPath ) +{ + // ファイル名に使えない文字 + constexpr const wchar_t invalidFilenameChars[] = L":*?\"<>|"; + + // 文字列中の最後のパス区切り位置を検出してファイル名を抽出する + const auto lastPathSep = strPath.find_last_of( L"\\/" ); + const auto strFilename = lastPathSep == std::wstring_view::npos ? strPath : strPath.substr( lastPathSep + 1 ); + + // ファイル名に使えない文字が含まれる場合、エラーにする + return ::wcscspn( strFilename.data(), invalidFilenameChars ) == strFilename.length(); +} + /*! ファイル名の切り出し 指定文字列からファイル名と認識される文字列を取り出し、 diff --git a/sakura_core/util/file.h b/sakura_core/util/file.h index d77ff05e7d..002786bad4 100644 --- a/sakura_core/util/file.h +++ b/sakura_core/util/file.h @@ -27,12 +27,16 @@ #define SAKURA_FILE_FE33056B_6B48_4668_AE95_923EC960A607_H_ #pragma once +#include + bool fexist(LPCWSTR pszPath); //!< ファイルまたはディレクトリが存在すればtrue bool IsFilePath( const wchar_t* pLine, size_t* pnBgn, size_t* pnPathLen, bool bFileOnly = true ); bool IsFileExists(const WCHAR* path, bool bFileOnly = false); bool IsDirectory(LPCWSTR pszPath); // 2009.08.20 ryoji +bool CheckInvalidFilenameChars( const std::wstring_view& strPath ); + // Apr. 30, 2003 genta // ディレクトリの深さを調べる int CalcDirectoryDepth(const WCHAR* path); diff --git a/tests/unittests/test-file.cpp b/tests/unittests/test-file.cpp new file mode 100644 index 0000000000..790613b3ff --- /dev/null +++ b/tests/unittests/test-file.cpp @@ -0,0 +1,59 @@ +/*! @file */ +/* + Copyright (C) 2018-2020 Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include + +#ifndef NOMINMAX +#define NOMINMAX +#endif /* #ifndef NOMINMAX */ + +#include +#include +#include + +#include "util/file.h" + +/*! + * @brief パスがファイル名に使えない文字を含んでいないかチェックする + */ +TEST( file, CheckInvalidFilenameChars ) +{ + // ファイル名に使えない文字 = "\\/:*?\"<>|" + // このうち、\\と/はパス区切りのため実質対象外になる。 + EXPECT_TRUE(CheckInvalidFilenameChars(L"test.txt")); + EXPECT_TRUE(CheckInvalidFilenameChars(L".\\test.txt")); + EXPECT_TRUE(CheckInvalidFilenameChars(L"./test.txt")); + EXPECT_TRUE(CheckInvalidFilenameChars(L"C:\\test.txt")); + EXPECT_TRUE(CheckInvalidFilenameChars(L"C:/test.txt")); + EXPECT_TRUE(CheckInvalidFilenameChars(L"C:\\")); + EXPECT_TRUE(CheckInvalidFilenameChars(L"C:/")); + + EXPECT_FALSE(CheckInvalidFilenameChars(L"localhost:8080")); + EXPECT_FALSE(CheckInvalidFilenameChars(L"test*.txt")); + EXPECT_FALSE(CheckInvalidFilenameChars(L"test?.txt")); + EXPECT_FALSE(CheckInvalidFilenameChars(L"test\".txt")); + EXPECT_FALSE(CheckInvalidFilenameChars(L"test<.txt")); + EXPECT_FALSE(CheckInvalidFilenameChars(L"test>.txt")); + EXPECT_FALSE(CheckInvalidFilenameChars(L"test|.txt")); +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index eaa21c461b..6122107071 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -113,6 +113,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index 68f0f2697f..aa11df76bf 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -80,6 +80,9 @@ Test Files + + Test Files + From 46c755622b27f27a6ee43981379318cc423e3629 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 31 Oct 2020 17:39:10 +0900 Subject: [PATCH 0232/1024] =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=83=87=E3=83=B3?= =?UTF-8?q?=E3=83=88=E8=A8=82=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/_main/CCommandLine.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sakura_core/_main/CCommandLine.cpp b/sakura_core/_main/CCommandLine.cpp index a1d86680a7..6c488e66db 100644 --- a/sakura_core/_main/CCommandLine.cpp +++ b/sakura_core/_main/CCommandLine.cpp @@ -317,12 +317,12 @@ void CCommandLine::ParseCommandLine( LPCWSTR pszCmdLineSrc, bool bResponse ) } if ( !CheckInvalidFilenameChars( szPath ) ){ - std::wstring msg; - // "%ls\r\n上記のファイル名は不正です。ファイル名に \\ / : * ? "" < > | の文字は使えません。 " - strprintf( msg, LS(STR_CMDLINE_PARSECMD1), szPath ); - const WCHAR* msg_str = msg.c_str(); - MessageBox( NULL, msg_str, L"FileNameError", MB_OK); - szPath[0] = L'\0'; + std::wstring msg; + // "%ls\r\n上記のファイル名は不正です。ファイル名に \\ / : * ? "" < > | の文字は使えません。 " + strprintf( msg, LS(STR_CMDLINE_PARSECMD1), szPath ); + const WCHAR* msg_str = msg.c_str(); + MessageBox( NULL, msg_str, L"FileNameError", MB_OK); + szPath[0] = L'\0'; } if (szPath[0] != L'\0') { From a2fb2c012f23507113cb0d0eac2703c64a02e3c8 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 31 Oct 2020 22:44:54 +0900 Subject: [PATCH 0233/1024] =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB?= =?UTF-8?q?=E3=83=91=E3=82=B9=E3=81=AB=E3=80=8C=E3=83=95=E3=82=A1=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E3=81=AB=E4=BD=BF=E3=81=88=E3=81=AA=E3=81=84=E6=96=87?= =?UTF-8?q?=E5=AD=97=E3=80=8D=E3=82=92=E5=90=AB=E3=82=81=E3=81=9F=E5=A0=B4?= =?UTF-8?q?=E5=90=88=E3=81=AE=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-ccommandline.cpp | 28 +++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/tests/unittests/test-ccommandline.cpp b/tests/unittests/test-ccommandline.cpp index 610b7d323d..50bb34ec05 100644 --- a/tests/unittests/test-ccommandline.cpp +++ b/tests/unittests/test-ccommandline.cpp @@ -842,3 +842,31 @@ TEST(CCommandLine, EndOfOptionMark) cCommandLine.ParseCommandLine(L"-- -GROUP=2", false); EXPECT_EQ(-1, cCommandLine.GetGroupId()); } + +/*! + * @brief ファイルパスに「ファイルに使えない文字」を含めた場合の仕様 + * @remark 無視される + */ +TEST(CCommandLine, ParseFileNameIncludesInvalidFilenameChars) +{ + // ファイル名に使えない文字 = "\\/:*?\"<>|" + // このうち、\\と/はパス区切りのため実質対象外になる。 + const std::wstring_view badNames[] = { + L"localhost:8080", + L"test*.txt", + L"test?.txt", + L"test\".txt", + L"test<.txt", + L"test>.txt", + L"test|.txt", + }; + + // ファイル名に使えない文字を含んでいたら、ファイル名としては認識されない。 + CCommandLineWrapper cCommandLine; + for (const auto& badName : badNames) { + cCommandLine.ParseCommandLine( badName.data(), false ); + EXPECT_STREQ(L"", cCommandLine.GetOpenFile()); + EXPECT_EQ(NULL, cCommandLine.GetFileName(0)); + EXPECT_EQ(0, cCommandLine.GetFileNum()); + } +} From 85f29b9f19454513ac5666a5c8dbaa52aec6cd94 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 1 Nov 2020 17:04:14 +0900 Subject: [PATCH 0234/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C(IsInvalidFilenameChars)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CheckXXX → IsXXX --- sakura_core/_main/CCommandLine.cpp | 2 +- sakura_core/util/file.cpp | 12 +++++------ sakura_core/util/file.h | 2 +- tests/unittests/test-file.cpp | 34 +++++++++++++++--------------- 4 files changed, 25 insertions(+), 25 deletions(-) diff --git a/sakura_core/_main/CCommandLine.cpp b/sakura_core/_main/CCommandLine.cpp index 6c488e66db..8f415ebc34 100644 --- a/sakura_core/_main/CCommandLine.cpp +++ b/sakura_core/_main/CCommandLine.cpp @@ -316,7 +316,7 @@ void CCommandLine::ParseCommandLine( LPCWSTR pszCmdLineSrc, bool bResponse ) wcscpy(szPath, &(szPath[8])); } - if ( !CheckInvalidFilenameChars( szPath ) ){ + if ( IsInvalidFilenameChars( szPath ) ){ std::wstring msg; // "%ls\r\n上記のファイル名は不正です。ファイル名に \\ / : * ? "" < > | の文字は使えません。 " strprintf( msg, LS(STR_CMDLINE_PARSECMD1), szPath ); diff --git a/sakura_core/util/file.cpp b/sakura_core/util/file.cpp index 874a151afb..59cbd51653 100644 --- a/sakura_core/util/file.cpp +++ b/sakura_core/util/file.cpp @@ -42,12 +42,12 @@ bool fexist(LPCWSTR pszPath) /*! - * パスがファイル名に使えない文字を含んでいないかチェックする + * パスがファイル名に使えない文字を含んでいるかチェックする * @param[in] strPath チェック対象のパス - * @retval true パスはファイル名に使えない文字を含んでいない - * retuval false パスはファイル名に使えない文字を含んでいる + * @retval true パスはファイル名に使えない文字を含んでいる + * retuval false パスはファイル名に使えない文字を含んでいない */ -bool CheckInvalidFilenameChars( const std::wstring_view& strPath ) +bool IsInvalidFilenameChars( const std::wstring_view& strPath ) { // ファイル名に使えない文字 constexpr const wchar_t invalidFilenameChars[] = L":*?\"<>|"; @@ -56,8 +56,8 @@ bool CheckInvalidFilenameChars( const std::wstring_view& strPath ) const auto lastPathSep = strPath.find_last_of( L"\\/" ); const auto strFilename = lastPathSep == std::wstring_view::npos ? strPath : strPath.substr( lastPathSep + 1 ); - // ファイル名に使えない文字が含まれる場合、エラーにする - return ::wcscspn( strFilename.data(), invalidFilenameChars ) == strFilename.length(); + // ファイル名に使えない文字が含まれる場合、trueを返す + return ::wcscspn( strFilename.data(), invalidFilenameChars ) < strFilename.length(); } /*! ファイル名の切り出し diff --git a/sakura_core/util/file.h b/sakura_core/util/file.h index 002786bad4..afc93c08a0 100644 --- a/sakura_core/util/file.h +++ b/sakura_core/util/file.h @@ -35,7 +35,7 @@ bool IsFilePath( const wchar_t* pLine, size_t* pnBgn, size_t* pnPathLen, bool bF bool IsFileExists(const WCHAR* path, bool bFileOnly = false); bool IsDirectory(LPCWSTR pszPath); // 2009.08.20 ryoji -bool CheckInvalidFilenameChars( const std::wstring_view& strPath ); +bool IsInvalidFilenameChars( const std::wstring_view& strPath ); // Apr. 30, 2003 genta // ディレクトリの深さを調べる diff --git a/tests/unittests/test-file.cpp b/tests/unittests/test-file.cpp index 790613b3ff..7da0f4cf36 100644 --- a/tests/unittests/test-file.cpp +++ b/tests/unittests/test-file.cpp @@ -35,25 +35,25 @@ #include "util/file.h" /*! - * @brief パスがファイル名に使えない文字を含んでいないかチェックする + * @brief パスがファイル名に使えない文字を含んでいるかチェックする */ -TEST( file, CheckInvalidFilenameChars ) +TEST( file, IsInvalidFilenameChars ) { // ファイル名に使えない文字 = "\\/:*?\"<>|" // このうち、\\と/はパス区切りのため実質対象外になる。 - EXPECT_TRUE(CheckInvalidFilenameChars(L"test.txt")); - EXPECT_TRUE(CheckInvalidFilenameChars(L".\\test.txt")); - EXPECT_TRUE(CheckInvalidFilenameChars(L"./test.txt")); - EXPECT_TRUE(CheckInvalidFilenameChars(L"C:\\test.txt")); - EXPECT_TRUE(CheckInvalidFilenameChars(L"C:/test.txt")); - EXPECT_TRUE(CheckInvalidFilenameChars(L"C:\\")); - EXPECT_TRUE(CheckInvalidFilenameChars(L"C:/")); - - EXPECT_FALSE(CheckInvalidFilenameChars(L"localhost:8080")); - EXPECT_FALSE(CheckInvalidFilenameChars(L"test*.txt")); - EXPECT_FALSE(CheckInvalidFilenameChars(L"test?.txt")); - EXPECT_FALSE(CheckInvalidFilenameChars(L"test\".txt")); - EXPECT_FALSE(CheckInvalidFilenameChars(L"test<.txt")); - EXPECT_FALSE(CheckInvalidFilenameChars(L"test>.txt")); - EXPECT_FALSE(CheckInvalidFilenameChars(L"test|.txt")); + EXPECT_FALSE(IsInvalidFilenameChars(L"test.txt")); + EXPECT_FALSE(IsInvalidFilenameChars(L".\\test.txt")); + EXPECT_FALSE(IsInvalidFilenameChars(L"./test.txt")); + EXPECT_FALSE(IsInvalidFilenameChars(L"C:\\test.txt")); + EXPECT_FALSE(IsInvalidFilenameChars(L"C:/test.txt")); + EXPECT_FALSE(IsInvalidFilenameChars(L"C:\\")); + EXPECT_FALSE(IsInvalidFilenameChars(L"C:/")); + + EXPECT_TRUE(IsInvalidFilenameChars(L"localhost:8080")); + EXPECT_TRUE(IsInvalidFilenameChars(L"test*.txt")); + EXPECT_TRUE(IsInvalidFilenameChars(L"test?.txt")); + EXPECT_TRUE(IsInvalidFilenameChars(L"test\".txt")); + EXPECT_TRUE(IsInvalidFilenameChars(L"test<.txt")); + EXPECT_TRUE(IsInvalidFilenameChars(L"test>.txt")); + EXPECT_TRUE(IsInvalidFilenameChars(L"test|.txt")); } From 6ab1024cbf8896547c5bb5494c78f55385f8e7cc Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 1 Nov 2020 21:34:55 +0900 Subject: [PATCH 0235/1024] =?UTF-8?q?=E9=9D=9E=E3=82=AA=E3=83=97=E3=82=B7?= =?UTF-8?q?=E3=83=A7=E3=83=B3=E3=81=AE=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF?= =?UTF-8?q?=E3=82=92=E7=B5=84=E3=81=BF=E7=9B=B4=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ファイルパスの文字数制限の元凶が明確になるように中間変数を除去する。 --- sakura_core/_main/CCommandLine.cpp | 70 ++++++++++++++---------------- 1 file changed, 32 insertions(+), 38 deletions(-) diff --git a/sakura_core/_main/CCommandLine.cpp b/sakura_core/_main/CCommandLine.cpp index 8f415ebc34..724604ce4c 100644 --- a/sakura_core/_main/CCommandLine.cpp +++ b/sakura_core/_main/CCommandLine.cpp @@ -284,57 +284,51 @@ void CCommandLine::ParseCommandLine( LPCWSTR pszCmdLineSrc, bool bResponse ) if( ( bParseOptDisabled || ! (pszToken[0] == '-' || pszToken[0] == '"' && pszToken[1] == '-' ) )){ - if( pszToken[0] == L'\"' ){ - CNativeW cmWork; - // Nov. 3, 2005 genta - // 末尾のクォーテーションが無い場合を考慮して, - // 最後がダブルクォートの場合のみ取り除く - // ファイル名には使えない文字なのでファイル名に含まれている場合は考慮不要 - // またSHIFT-JISの2バイト目の考慮も不要 - // Nov. 27, 2005 genta - // 引数がダブルクォート1つの場合に,その1つを最初と最後の1つずつと - // 見間違えて,インデックス-1にアクセスしてしまうのを防ぐために長さをチェックする - // ファイル名の後ろにあるOptionを解析するため,ループは継続 - int len = lstrlen( pszToken + 1 ); - if( len > 0 ){ - cmWork.SetString( &pszToken[1], len - ( pszToken[len] == L'"' ? 1 : 0 )); - cmWork.Replace( L"\"\"", L"\"" ); - wcscpy_s( szPath, _countof(szPath), cmWork.GetStringPtr() ); /* ファイル名 */ - } - else { - szPath[0] = L'\0'; - } - } - else{ - wcscpy_s( szPath, _countof(szPath), pszToken ); /* ファイル名 */ + // トークンの長さを取得する(あとで調整するのでconstにできない) + size_t cchToken = ::wcsnlen( pszToken, nCmdLineWorkLen - (pszToken - pszCmdLineWork) ); + + // トークンが引用符で囲まれていたら、引用符を外す + if( cchToken > 1 && pszToken[0] == '"' && pszToken[0] == pszToken[cchToken - 1] ){ + pszToken[cchToken - 1] = '\0'; + ++pszToken; + cchToken -= 2; } // Nov. 11, 2005 susu // 不正なファイル名のままだとファイル保存時ダイアログが出なくなるので // 簡単なファイルチェックを行うように修正 - if (wcsncmp_literal(szPath, L"file:///")==0) { - wcscpy(szPath, &(szPath[8])); + constexpr const WCHAR protocolPrefix[] = L"file:///"; + if( 0 == wcsncmp_literal( pszToken, protocolPrefix ) ){ + pszToken += _countof(protocolPrefix) - 1; + cchToken -= _countof(protocolPrefix) - 1; } - if ( IsInvalidFilenameChars( szPath ) ){ - std::wstring msg; + // ファイルパスの問題報告するメッセージ(問題なければempty。) + std::wstring msg; + + if ( IsInvalidFilenameChars( pszToken ) ){ // "%ls\r\n上記のファイル名は不正です。ファイル名に \\ / : * ? "" < > | の文字は使えません。 " - strprintf( msg, LS(STR_CMDLINE_PARSECMD1), szPath ); - const WCHAR* msg_str = msg.c_str(); - MessageBox( NULL, msg_str, L"FileNameError", MB_OK); - szPath[0] = L'\0'; + strprintf( msg, LS(STR_CMDLINE_PARSECMD1), pszToken ); + MessageBox( NULL, msg.c_str(), L"FileNameError", MB_OK); + } + // パスの長さチェック + else if( _countof(m_fi.m_szPath) <= cchToken ){ + // "%ls\nというファイルを開けません。\nファイルのパスが長すぎます。" + strprintf( msg, LS(STR_ERR_FILEPATH_TOO_LONG), pszToken ); + MessageBox( NULL, msg.c_str(), L"FileNameError", MB_OK); } - if (szPath[0] != L'\0') { - CSakuraEnvironment::ResolvePath(szPath); - if (m_fi.m_szPath[0] == L'\0') { - wcscpy(m_fi.m_szPath, szPath ); - } - else { - m_vFiles.push_back( szPath ); + // ファイルパスに問題がない場合 + if( msg.empty() ){ + if( m_fi.m_szPath[0] == L'\0' ){ + wcscpy( m_fi.m_szPath, pszToken ); + CSakuraEnvironment::ResolvePath( m_fi.m_szPath ); + }else{ + m_vFiles.push_back( pszToken ); } } } + // オプションの場合 else{ if( *pszToken == '"' ){ ++pszToken; // 2007.09.09 genta 先頭の"はスキップ From 42c29b0a6547568fd0f9a455f0ab4849388c5489 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 1 Nov 2020 21:35:10 +0900 Subject: [PATCH 0236/1024] =?UTF-8?q?=E6=8C=87=E5=AE=9A=E3=81=95=E3=82=8C?= =?UTF-8?q?=E3=81=9F=E3=83=91=E3=82=B9=E3=81=8C=E9=95=B7=E9=81=8E=E3=81=8E?= =?UTF-8?q?=E3=82=8B=E5=A0=B4=E5=90=88=E3=81=AE=E3=83=86=E3=82=B9=E3=83=88?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-ccommandline.cpp | 36 +++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/tests/unittests/test-ccommandline.cpp b/tests/unittests/test-ccommandline.cpp index 50bb34ec05..89792606fd 100644 --- a/tests/unittests/test-ccommandline.cpp +++ b/tests/unittests/test-ccommandline.cpp @@ -870,3 +870,39 @@ TEST(CCommandLine, ParseFileNameIncludesInvalidFilenameChars) EXPECT_EQ(0, cCommandLine.GetFileNum()); } } + +/*! + * @brief 長過ぎるファイルパスに関する仕様 + * @remark _MAX_PATH - 1を超えるファイル名は利用できない + */ +TEST(CCommandLine, ParseTooLongFilePath) +{ + // 絶対パスへの変換処理の影響を受けないように、事前に絶対パス化しておく + std::wstring strPath(_MAX_PATH, L'a'); + strPath = L".\\" + strPath; + strPath.resize(_MAX_PATH * 2); + auto* p = ::_wfullpath(NULL, strPath.c_str(), strPath.capacity()); + + // _MAX_PATH - 1までのパスは受け付けられる + CCommandLineWrapper cCommandLine1; + std::wstring strCmdLine1; + strPath.assign(p, _MAX_PATH - 1); + strprintf(strCmdLine1, L"%s test.txt", strPath.data()); + cCommandLine1.ParseCommandLine(strCmdLine1.data(), false); + EXPECT_STREQ(strPath.c_str(), cCommandLine1.GetOpenFile()); + EXPECT_STREQ(L"test.txt", cCommandLine1.GetFileName(0)); + EXPECT_EQ(NULL, cCommandLine1.GetFileName(1)); + EXPECT_EQ(1, cCommandLine1.GetFileNum()); + + // _MAX_PATH - 1を超えるパスは無視される + CCommandLineWrapper cCommandLine2; + std::wstring strCmdLine2; + strPath.assign(p, _MAX_PATH); + strprintf(strCmdLine2, L"%s test.txt", strPath.data()); + cCommandLine2.ParseCommandLine(strCmdLine2.data(), false); + EXPECT_STRNE(L"", cCommandLine2.GetOpenFile()); + EXPECT_EQ(NULL, cCommandLine2.GetFileName(0)); + EXPECT_EQ(0, cCommandLine2.GetFileNum()); + + ::free(p); +} From ce0d701ce92825cb1a425fff6a921d6905ea29cd Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 1 Nov 2020 21:35:27 +0900 Subject: [PATCH 0237/1024] =?UTF-8?q?=E6=8C=87=E5=AE=9A=E3=81=95=E3=82=8C?= =?UTF-8?q?=E3=81=9F=E5=BC=95=E6=95=B0=E3=81=8C=E3=83=95=E3=82=A1=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E3=83=97=E3=83=AD=E3=83=88=E3=82=B3=E3=83=AB=E3=81=AE?= =?UTF-8?q?=E3=83=97=E3=83=AD=E3=83=88=E3=82=B3=E3=83=AB=E3=83=98=E3=83=83?= =?UTF-8?q?=E3=83=80=E3=82=92=E5=8F=96=E3=82=8A=E9=99=A4=E3=81=8F=E4=BB=95?= =?UTF-8?q?=E6=A7=98=E3=81=AE=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-ccommandline.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tests/unittests/test-ccommandline.cpp b/tests/unittests/test-ccommandline.cpp index 89792606fd..b9817c5c40 100644 --- a/tests/unittests/test-ccommandline.cpp +++ b/tests/unittests/test-ccommandline.cpp @@ -843,6 +843,28 @@ TEST(CCommandLine, EndOfOptionMark) EXPECT_EQ(-1, cCommandLine.GetGroupId()); } +/*! + * @brief ファイルパスにファイルプロトコルの接頭辞を含めた場合の仕様 + */ +TEST(CCommandLine, StripFileProtocol) +{ + // 絶対パスへの変換処理の影響を受けないように、事前に絶対パス化しておく + std::wstring strPath(_MAX_PATH, L'a'); + strPath = L".\\" + strPath; + strPath.resize(_MAX_PATH * 2); + auto* p = ::_wfullpath(NULL, strPath.c_str(), strPath.capacity()); + + CCommandLineWrapper cCommandLine; + std::wstring strCmdLine; + strPath.assign(p, _MAX_PATH - 1); + strprintf(strCmdLine, L"file:///%s test.txt", strPath.data()); + cCommandLine.ParseCommandLine(strCmdLine.data(), false); + EXPECT_STREQ(strPath.c_str(), cCommandLine.GetOpenFile()); + EXPECT_STREQ(L"test.txt", cCommandLine.GetFileName(0)); + EXPECT_EQ(NULL, cCommandLine.GetFileName(1)); + EXPECT_EQ(1, cCommandLine.GetFileNum()); +} + /*! * @brief ファイルパスに「ファイルに使えない文字」を含めた場合の仕様 * @remark 無視される From 8b5c902cb58469c5e06677736f9b7d0249ff9b58 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 1 Nov 2020 21:35:50 +0900 Subject: [PATCH 0238/1024] =?UTF-8?q?=E3=82=B3=E3=83=9E=E3=83=B3=E3=83=89?= =?UTF-8?q?=E3=83=A9=E3=82=A4=E3=83=B3=E3=81=AB=E3=82=B4=E3=83=9F=E3=81=8C?= =?UTF-8?q?=E5=85=A5=E3=81=A3=E3=81=9F=E5=A0=B4=E5=90=88=E3=81=AE=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit コマンドラインにゴミ(=終端されていない引用符)が混じった場合のテストを追加する。 --- tests/unittests/test-ccommandline.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/unittests/test-ccommandline.cpp b/tests/unittests/test-ccommandline.cpp index b9817c5c40..0be9dc8965 100644 --- a/tests/unittests/test-ccommandline.cpp +++ b/tests/unittests/test-ccommandline.cpp @@ -843,6 +843,18 @@ TEST(CCommandLine, EndOfOptionMark) EXPECT_EQ(-1, cCommandLine.GetGroupId()); } +/*! + * @brief 終端されない二重引用符の仕様 + */ +TEST(CCommandLine, UnterminatedQuotedFilename) +{ + CCommandLineWrapper cCommandLine; + cCommandLine.ParseCommandLine(L"\"", false); + EXPECT_STREQ(L"", cCommandLine.GetOpenFile()); + EXPECT_EQ(NULL, cCommandLine.GetFileName(0)); + EXPECT_EQ(0, cCommandLine.GetFileNum()); +} + /*! * @brief ファイルパスにファイルプロトコルの接頭辞を含めた場合の仕様 */ From 6fa946c4772626c4dd9ae2b8c9cd47a023b3b86c Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Mon, 2 Nov 2020 18:25:04 +0900 Subject: [PATCH 0239/1024] =?UTF-8?q?#1449=E3=82=92=E8=A8=82=E6=AD=A3?= =?UTF-8?q?=E3=81=97=E3=81=A6ADS=E3=82=92=E4=BD=BF=E3=81=88=E3=82=8B?= =?UTF-8?q?=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/file.cpp | 12 +++++++----- tests/unittests/test-ccommandline.cpp | 2 +- tests/unittests/test-file.cpp | 3 ++- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/sakura_core/util/file.cpp b/sakura_core/util/file.cpp index 59cbd51653..4959191334 100644 --- a/sakura_core/util/file.cpp +++ b/sakura_core/util/file.cpp @@ -27,6 +27,9 @@ #include "StdAfx.h" #include #include "file.h" + +#include + #include "charset/CharPointer.h" #include "util/module.h" #include "util/window.h" @@ -49,12 +52,11 @@ bool fexist(LPCWSTR pszPath) */ bool IsInvalidFilenameChars( const std::wstring_view& strPath ) { - // ファイル名に使えない文字 - constexpr const wchar_t invalidFilenameChars[] = L":*?\"<>|"; + // ファイル名に使えない文字(ADSを使えるように':'は除外する) + constexpr const wchar_t invalidFilenameChars[] = L"*?\"<>|"; - // 文字列中の最後のパス区切り位置を検出してファイル名を抽出する - const auto lastPathSep = strPath.find_last_of( L"\\/" ); - const auto strFilename = lastPathSep == std::wstring_view::npos ? strPath : strPath.substr( lastPathSep + 1 ); + // 文字列中のファイル名を抽出する + std::wstring_view strFilename = ::PathFindFileNameW( strPath.data() ); // ファイル名に使えない文字が含まれる場合、trueを返す return ::wcscspn( strFilename.data(), invalidFilenameChars ) < strFilename.length(); diff --git a/tests/unittests/test-ccommandline.cpp b/tests/unittests/test-ccommandline.cpp index 50bb34ec05..380636ca24 100644 --- a/tests/unittests/test-ccommandline.cpp +++ b/tests/unittests/test-ccommandline.cpp @@ -851,8 +851,8 @@ TEST(CCommandLine, ParseFileNameIncludesInvalidFilenameChars) { // ファイル名に使えない文字 = "\\/:*?\"<>|" // このうち、\\と/はパス区切りのため実質対象外になる。 + // このうち、:は代替データストリーム(ADS)の識別記号のため対象外とする。 const std::wstring_view badNames[] = { - L"localhost:8080", L"test*.txt", L"test?.txt", L"test\".txt", diff --git a/tests/unittests/test-file.cpp b/tests/unittests/test-file.cpp index 7da0f4cf36..d5039ebe5e 100644 --- a/tests/unittests/test-file.cpp +++ b/tests/unittests/test-file.cpp @@ -49,7 +49,8 @@ TEST( file, IsInvalidFilenameChars ) EXPECT_FALSE(IsInvalidFilenameChars(L"C:\\")); EXPECT_FALSE(IsInvalidFilenameChars(L"C:/")); - EXPECT_TRUE(IsInvalidFilenameChars(L"localhost:8080")); + EXPECT_FALSE(IsInvalidFilenameChars(L"test:001.txt")); + EXPECT_TRUE(IsInvalidFilenameChars(L"test*.txt")); EXPECT_TRUE(IsInvalidFilenameChars(L"test?.txt")); EXPECT_TRUE(IsInvalidFilenameChars(L"test\".txt")); From cd44e41eb059426f84d43f3aca5a44222f7e5181 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Fri, 6 Nov 2020 21:06:17 +0900 Subject: [PATCH 0240/1024] =?UTF-8?q?=E3=80=8C=E2=86=92=E3=80=8D=E3=81=8A?= =?UTF-8?q?=E3=82=88=E3=81=B3=E3=80=8C>>=E3=80=8D=E6=8A=BC=E4=B8=8B?= =?UTF-8?q?=E5=BE=8C=E3=81=AB=E6=A9=9F=E8=83=BD=E3=83=AA=E3=82=B9=E3=83=88?= =?UTF-8?q?=E3=81=AE=E9=81=B8=E6=8A=9E=E4=B8=AD=E3=82=A2=E3=82=A4=E3=83=86?= =?UTF-8?q?=E3=83=A0=E3=82=92=E4=B8=80=E3=81=A4=E4=B8=8B=E3=81=AE=E3=82=82?= =?UTF-8?q?=E3=81=AE=E3=81=AB=E5=88=87=E3=82=8A=E6=9B=BF=E3=81=88=E3=82=8B?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/prop/CPropComToolbar.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/sakura_core/prop/CPropComToolbar.cpp b/sakura_core/prop/CPropComToolbar.cpp index 0cb43c41a7..2314affef1 100644 --- a/sakura_core/prop/CPropComToolbar.cpp +++ b/sakura_core/prop/CPropComToolbar.cpp @@ -365,6 +365,12 @@ INT_PTR CPropToolbar::DispatchEvent( } // To Here Apr. 13, 2002 genta List_SetCurSel( hwndResList, nIndex1 + 1 ); + + // 機能リストのフォーカスを一つ下にずらす + nNum = List_GetCount( hwndFuncList ); + if( nIndex2 + 1 < nNum ) { + List_SetCurSel( hwndFuncList, nIndex2 + 1 ); + } break; case IDC_BUTTON_ADD: @@ -383,6 +389,12 @@ INT_PTR CPropToolbar::DispatchEvent( } // To Here Apr. 13, 2002 genta List_SetCurSel( hwndResList, nIndex1 ); + + // 機能リストのフォーカスを一つ下にずらす + nNum = List_GetCount( hwndFuncList ); + if( nIndex2 + 1 < nNum ) { + List_SetCurSel( hwndFuncList, nIndex2 + 1 ); + } break; case IDC_BUTTON_UP: From 5c1d174f450385e151471e0ab2334e758a43ff35 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sat, 7 Nov 2020 20:09:28 +0900 Subject: [PATCH 0241/1024] =?UTF-8?q?nNum=20=E3=81=AE=E6=B5=81=E7=94=A8?= =?UTF-8?q?=E3=82=92=E3=82=84=E3=82=81=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/prop/CPropComToolbar.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/sakura_core/prop/CPropComToolbar.cpp b/sakura_core/prop/CPropComToolbar.cpp index 2314affef1..61663388ad 100644 --- a/sakura_core/prop/CPropComToolbar.cpp +++ b/sakura_core/prop/CPropComToolbar.cpp @@ -367,8 +367,7 @@ INT_PTR CPropToolbar::DispatchEvent( List_SetCurSel( hwndResList, nIndex1 + 1 ); // 機能リストのフォーカスを一つ下にずらす - nNum = List_GetCount( hwndFuncList ); - if( nIndex2 + 1 < nNum ) { + if( nIndex2 + 1 < List_GetCount(hwndFuncList) ) { List_SetCurSel( hwndFuncList, nIndex2 + 1 ); } break; @@ -391,8 +390,7 @@ INT_PTR CPropToolbar::DispatchEvent( List_SetCurSel( hwndResList, nIndex1 ); // 機能リストのフォーカスを一つ下にずらす - nNum = List_GetCount( hwndFuncList ); - if( nIndex2 + 1 < nNum ) { + if( nIndex2 + 1 < List_GetCount(hwndFuncList) ) { List_SetCurSel( hwndFuncList, nIndex2 + 1 ); } break; From cdb7d189b842c47574f7f55ee11c51977ca35438 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sun, 8 Nov 2020 14:00:45 +0900 Subject: [PATCH 0242/1024] =?UTF-8?q?=E3=82=AB=E3=82=B9=E3=82=BF=E3=83=A0?= =?UTF-8?q?=E3=83=A1=E3=83=8B=E3=83=A5=E3=83=BC=E7=94=BB=E9=9D=A2=E3=81=A7?= =?UTF-8?q?=E3=82=82=E8=BF=BD=E5=8A=A0=E3=83=BB=E6=8C=BF=E5=85=A5=E5=BE=8C?= =?UTF-8?q?=E3=81=AB=E6=A9=9F=E8=83=BD=E3=83=AA=E3=82=B9=E3=83=88=E3=82=92?= =?UTF-8?q?=E9=80=81=E3=82=8B=E5=87=A6=E7=90=86=E3=82=92=E5=85=A5=E3=82=8C?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/prop/CPropComCustmenu.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sakura_core/prop/CPropComCustmenu.cpp b/sakura_core/prop/CPropComCustmenu.cpp index 3bb90afcbf..14e8c0ba05 100644 --- a/sakura_core/prop/CPropComCustmenu.cpp +++ b/sakura_core/prop/CPropComCustmenu.cpp @@ -474,6 +474,8 @@ INT_PTR CPropCustmenu::DispatchEvent( } List_SetCurSel( hwndLIST_RES, nIdx2 ); + // 機能リストを1つ進める + List_SetCurSel( hwndLIST_FUNC, nIdx4 + 1 ); break; case IDC_BUTTON_ADD: @@ -526,6 +528,8 @@ INT_PTR CPropCustmenu::DispatchEvent( } List_SetCurSel( hwndLIST_RES, nIdx2 ); + // 機能リストを1つ進める + List_SetCurSel( hwndLIST_FUNC, nIdx4 + 1 ); break; case IDC_BUTTON_UP: From 13d92cd70f42e12a784c67d2c0432ca74c44646a Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sun, 8 Nov 2020 14:06:41 +0900 Subject: [PATCH 0243/1024] =?UTF-8?q?=E4=BB=96=E7=94=BB=E9=9D=A2=E3=81=AE?= =?UTF-8?q?=E3=82=B3=E3=83=BC=E3=83=89=E3=81=AB=E5=90=88=E3=82=8F=E3=81=9B?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/prop/CPropComToolbar.cpp | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/sakura_core/prop/CPropComToolbar.cpp b/sakura_core/prop/CPropComToolbar.cpp index 61663388ad..cecaa00a97 100644 --- a/sakura_core/prop/CPropComToolbar.cpp +++ b/sakura_core/prop/CPropComToolbar.cpp @@ -366,10 +366,8 @@ INT_PTR CPropToolbar::DispatchEvent( // To Here Apr. 13, 2002 genta List_SetCurSel( hwndResList, nIndex1 + 1 ); - // 機能リストのフォーカスを一つ下にずらす - if( nIndex2 + 1 < List_GetCount(hwndFuncList) ) { - List_SetCurSel( hwndFuncList, nIndex2 + 1 ); - } + // 機能リストを1つ進める + List_SetCurSel( hwndFuncList, nIndex2 + 1 ); break; case IDC_BUTTON_ADD: @@ -389,10 +387,8 @@ INT_PTR CPropToolbar::DispatchEvent( // To Here Apr. 13, 2002 genta List_SetCurSel( hwndResList, nIndex1 ); - // 機能リストのフォーカスを一つ下にずらす - if( nIndex2 + 1 < List_GetCount(hwndFuncList) ) { - List_SetCurSel( hwndFuncList, nIndex2 + 1 ); - } + // 機能リストを1つ進める + List_SetCurSel( hwndFuncList, nIndex2 + 1 ); break; case IDC_BUTTON_UP: From 482da0f4204e3a73aafca25c714d5e0e5576f22b Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sun, 8 Nov 2020 18:47:19 +0900 Subject: [PATCH 0244/1024] =?UTF-8?q?CPropComCustmenu.cpp=20=E3=81=AE?= =?UTF-8?q?=E5=A4=89=E6=9B=B4=E3=82=92=E5=B7=AE=E3=81=97=E6=88=BB=E3=81=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/prop/CPropComCustmenu.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/sakura_core/prop/CPropComCustmenu.cpp b/sakura_core/prop/CPropComCustmenu.cpp index 14e8c0ba05..3bb90afcbf 100644 --- a/sakura_core/prop/CPropComCustmenu.cpp +++ b/sakura_core/prop/CPropComCustmenu.cpp @@ -474,8 +474,6 @@ INT_PTR CPropCustmenu::DispatchEvent( } List_SetCurSel( hwndLIST_RES, nIdx2 ); - // 機能リストを1つ進める - List_SetCurSel( hwndLIST_FUNC, nIdx4 + 1 ); break; case IDC_BUTTON_ADD: @@ -528,8 +526,6 @@ INT_PTR CPropCustmenu::DispatchEvent( } List_SetCurSel( hwndLIST_RES, nIdx2 ); - // 機能リストを1つ進める - List_SetCurSel( hwndLIST_FUNC, nIdx4 + 1 ); break; case IDC_BUTTON_UP: From bdda5d2b2debdb191720275736d79bb8da7308ba Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sun, 8 Nov 2020 14:00:45 +0900 Subject: [PATCH 0245/1024] =?UTF-8?q?=E3=82=AB=E3=82=B9=E3=82=BF=E3=83=A0?= =?UTF-8?q?=E3=83=A1=E3=83=8B=E3=83=A5=E3=83=BC=E7=94=BB=E9=9D=A2=E3=81=A7?= =?UTF-8?q?=E3=82=82=E8=BF=BD=E5=8A=A0=E3=83=BB=E6=8C=BF=E5=85=A5=E5=BE=8C?= =?UTF-8?q?=E3=81=AB=E6=A9=9F=E8=83=BD=E3=83=AA=E3=82=B9=E3=83=88=E3=82=92?= =?UTF-8?q?=E9=80=81=E3=82=8B=E5=87=A6=E7=90=86=E3=82=92=E5=85=A5=E3=82=8C?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/prop/CPropComCustmenu.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sakura_core/prop/CPropComCustmenu.cpp b/sakura_core/prop/CPropComCustmenu.cpp index 3bb90afcbf..14e8c0ba05 100644 --- a/sakura_core/prop/CPropComCustmenu.cpp +++ b/sakura_core/prop/CPropComCustmenu.cpp @@ -474,6 +474,8 @@ INT_PTR CPropCustmenu::DispatchEvent( } List_SetCurSel( hwndLIST_RES, nIdx2 ); + // 機能リストを1つ進める + List_SetCurSel( hwndLIST_FUNC, nIdx4 + 1 ); break; case IDC_BUTTON_ADD: @@ -526,6 +528,8 @@ INT_PTR CPropCustmenu::DispatchEvent( } List_SetCurSel( hwndLIST_RES, nIdx2 ); + // 機能リストを1つ進める + List_SetCurSel( hwndLIST_FUNC, nIdx4 + 1 ); break; case IDC_BUTTON_UP: From 0c02301f0f82f39ca35db4b508e1a1fd1a1b9fc9 Mon Sep 17 00:00:00 2001 From: beru Date: Tue, 10 Nov 2020 00:45:49 +0900 Subject: [PATCH 0246/1024] =?UTF-8?q?Combo=5FGetEditSel=20=E9=96=A2?= =?UTF-8?q?=E6=95=B0=E3=81=AE=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 引数の型を int& から DWORD* に変更 assert_warning は行わないように変更 --- sakura_core/apiwrap/StdControl.h | 10 ++-------- sakura_core/dlg/CDialog.cpp | 10 +++++----- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/sakura_core/apiwrap/StdControl.h b/sakura_core/apiwrap/StdControl.h index 074b08441b..ed4c38903d 100644 --- a/sakura_core/apiwrap/StdControl.h +++ b/sakura_core/apiwrap/StdControl.h @@ -214,15 +214,9 @@ namespace ApiWrap{ assert(str.GetStringLength() == actualCount); return true; } - inline void Combo_GetEditSel( HWND hwndCombo, int &nSelStart, int &nSelEnd ) + inline void Combo_GetEditSel( HWND hwndCombo, DWORD* pdwSelStart, DWORD* pdwSelEnd ) { - DWORD dwSelStart = 0; - DWORD dwSelEnd = 0; - ::SendMessage( hwndCombo, CB_GETEDITSEL, WPARAM( &dwSelStart ), LPARAM( &dwSelEnd ) ); - assert_warning( 0x7FFFFFFF < dwSelStart ); - assert_warning( 0x7FFFFFFF < dwSelEnd ); - nSelStart = static_cast(dwSelStart); - nSelEnd = static_cast(dwSelEnd); + ::SendMessage( hwndCombo, CB_GETEDITSEL, WPARAM( pdwSelStart ), LPARAM( pdwSelEnd ) ); } // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // diff --git a/sakura_core/dlg/CDialog.cpp b/sakura_core/dlg/CDialog.cpp index 3e607ef88d..53e0091519 100644 --- a/sakura_core/dlg/CDialog.cpp +++ b/sakura_core/dlg/CDialog.cpp @@ -722,14 +722,14 @@ static void DeleteRecentItem( Wnd_GetText( hwndCombo, cEditText ); // コンボボックスのキャレット位置を取得 - int nSelStart = 0; - int nSelEnd = 0; - Combo_GetEditSel( hwndCombo, nSelStart, nSelEnd ); + DWORD dwSelStart = 0; + DWORD dwSelEnd = 0; + Combo_GetEditSel( hwndCombo, &dwSelStart, &dwSelEnd ); // アイテムテキストとエディットテキストが異なる、またはエディットが全選択でなかった場合 if ( cItemText != cEditText - || 0 < nSelStart - || nSelEnd < cEditText.GetStringLength() + || 0 < dwSelStart + || dwSelEnd < (DWORD)cEditText.GetStringLength() ) { // 履歴削除をスキップする From 863468134c2b6fb7de0e54a8471b31bebcde5408 Mon Sep 17 00:00:00 2001 From: beru Date: Wed, 11 Nov 2020 00:00:29 +0900 Subject: [PATCH 0247/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/apiwrap/StdControl.h | 4 ++-- sakura_core/dlg/CDialog.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sakura_core/apiwrap/StdControl.h b/sakura_core/apiwrap/StdControl.h index ed4c38903d..725ed4aeb9 100644 --- a/sakura_core/apiwrap/StdControl.h +++ b/sakura_core/apiwrap/StdControl.h @@ -214,9 +214,9 @@ namespace ApiWrap{ assert(str.GetStringLength() == actualCount); return true; } - inline void Combo_GetEditSel( HWND hwndCombo, DWORD* pdwSelStart, DWORD* pdwSelEnd ) + inline void Combo_GetEditSel( HWND hwndCombo, DWORD& dwSelStart, DWORD& dwSelEnd ) { - ::SendMessage( hwndCombo, CB_GETEDITSEL, WPARAM( pdwSelStart ), LPARAM( pdwSelEnd ) ); + ::SendMessage( hwndCombo, CB_GETEDITSEL, WPARAM( &dwSelStart ), LPARAM( &dwSelEnd ) ); } // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // diff --git a/sakura_core/dlg/CDialog.cpp b/sakura_core/dlg/CDialog.cpp index 53e0091519..9cae984b6f 100644 --- a/sakura_core/dlg/CDialog.cpp +++ b/sakura_core/dlg/CDialog.cpp @@ -724,7 +724,7 @@ static void DeleteRecentItem( // コンボボックスのキャレット位置を取得 DWORD dwSelStart = 0; DWORD dwSelEnd = 0; - Combo_GetEditSel( hwndCombo, &dwSelStart, &dwSelEnd ); + Combo_GetEditSel( hwndCombo, dwSelStart, dwSelEnd ); // アイテムテキストとエディットテキストが異なる、またはエディットが全選択でなかった場合 if ( cItemText != cEditText From e97dcc6181ff1e64eb87b737cc7e7b7051f32638 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Thu, 12 Nov 2020 02:51:37 +0900 Subject: [PATCH 0248/1024] =?UTF-8?q?Revert=20"=E9=9D=9E=E3=82=AA=E3=83=97?= =?UTF-8?q?=E3=82=B7=E3=83=A7=E3=83=B3=E3=81=AE=E3=83=81=E3=82=A7=E3=83=83?= =?UTF-8?q?=E3=82=AF=E3=82=92=E7=B5=84=E3=81=BF=E7=9B=B4=E3=81=99"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 6ab1024cbf8896547c5bb5494c78f55385f8e7cc. --- sakura_core/_main/CCommandLine.cpp | 70 ++++++++++++++++-------------- 1 file changed, 38 insertions(+), 32 deletions(-) diff --git a/sakura_core/_main/CCommandLine.cpp b/sakura_core/_main/CCommandLine.cpp index 724604ce4c..8f415ebc34 100644 --- a/sakura_core/_main/CCommandLine.cpp +++ b/sakura_core/_main/CCommandLine.cpp @@ -284,51 +284,57 @@ void CCommandLine::ParseCommandLine( LPCWSTR pszCmdLineSrc, bool bResponse ) if( ( bParseOptDisabled || ! (pszToken[0] == '-' || pszToken[0] == '"' && pszToken[1] == '-' ) )){ - // トークンの長さを取得する(あとで調整するのでconstにできない) - size_t cchToken = ::wcsnlen( pszToken, nCmdLineWorkLen - (pszToken - pszCmdLineWork) ); - - // トークンが引用符で囲まれていたら、引用符を外す - if( cchToken > 1 && pszToken[0] == '"' && pszToken[0] == pszToken[cchToken - 1] ){ - pszToken[cchToken - 1] = '\0'; - ++pszToken; - cchToken -= 2; + if( pszToken[0] == L'\"' ){ + CNativeW cmWork; + // Nov. 3, 2005 genta + // 末尾のクォーテーションが無い場合を考慮して, + // 最後がダブルクォートの場合のみ取り除く + // ファイル名には使えない文字なのでファイル名に含まれている場合は考慮不要 + // またSHIFT-JISの2バイト目の考慮も不要 + // Nov. 27, 2005 genta + // 引数がダブルクォート1つの場合に,その1つを最初と最後の1つずつと + // 見間違えて,インデックス-1にアクセスしてしまうのを防ぐために長さをチェックする + // ファイル名の後ろにあるOptionを解析するため,ループは継続 + int len = lstrlen( pszToken + 1 ); + if( len > 0 ){ + cmWork.SetString( &pszToken[1], len - ( pszToken[len] == L'"' ? 1 : 0 )); + cmWork.Replace( L"\"\"", L"\"" ); + wcscpy_s( szPath, _countof(szPath), cmWork.GetStringPtr() ); /* ファイル名 */ + } + else { + szPath[0] = L'\0'; + } + } + else{ + wcscpy_s( szPath, _countof(szPath), pszToken ); /* ファイル名 */ } // Nov. 11, 2005 susu // 不正なファイル名のままだとファイル保存時ダイアログが出なくなるので // 簡単なファイルチェックを行うように修正 - constexpr const WCHAR protocolPrefix[] = L"file:///"; - if( 0 == wcsncmp_literal( pszToken, protocolPrefix ) ){ - pszToken += _countof(protocolPrefix) - 1; - cchToken -= _countof(protocolPrefix) - 1; + if (wcsncmp_literal(szPath, L"file:///")==0) { + wcscpy(szPath, &(szPath[8])); } - // ファイルパスの問題報告するメッセージ(問題なければempty。) - std::wstring msg; - - if ( IsInvalidFilenameChars( pszToken ) ){ + if ( IsInvalidFilenameChars( szPath ) ){ + std::wstring msg; // "%ls\r\n上記のファイル名は不正です。ファイル名に \\ / : * ? "" < > | の文字は使えません。 " - strprintf( msg, LS(STR_CMDLINE_PARSECMD1), pszToken ); - MessageBox( NULL, msg.c_str(), L"FileNameError", MB_OK); - } - // パスの長さチェック - else if( _countof(m_fi.m_szPath) <= cchToken ){ - // "%ls\nというファイルを開けません。\nファイルのパスが長すぎます。" - strprintf( msg, LS(STR_ERR_FILEPATH_TOO_LONG), pszToken ); - MessageBox( NULL, msg.c_str(), L"FileNameError", MB_OK); + strprintf( msg, LS(STR_CMDLINE_PARSECMD1), szPath ); + const WCHAR* msg_str = msg.c_str(); + MessageBox( NULL, msg_str, L"FileNameError", MB_OK); + szPath[0] = L'\0'; } - // ファイルパスに問題がない場合 - if( msg.empty() ){ - if( m_fi.m_szPath[0] == L'\0' ){ - wcscpy( m_fi.m_szPath, pszToken ); - CSakuraEnvironment::ResolvePath( m_fi.m_szPath ); - }else{ - m_vFiles.push_back( pszToken ); + if (szPath[0] != L'\0') { + CSakuraEnvironment::ResolvePath(szPath); + if (m_fi.m_szPath[0] == L'\0') { + wcscpy(m_fi.m_szPath, szPath ); + } + else { + m_vFiles.push_back( szPath ); } } } - // オプションの場合 else{ if( *pszToken == '"' ){ ++pszToken; // 2007.09.09 genta 先頭の"はスキップ From ea15cebd3746b7243917c0b0b763582ba106b041 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 14 Nov 2020 18:06:13 +0900 Subject: [PATCH 0249/1024] =?UTF-8?q?=E3=83=91=E3=82=B9=E3=81=AE=E9=95=B7?= =?UTF-8?q?=E3=81=95=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 最低限必要な変更でチェック追加を実装。 --- sakura_core/_main/CCommandLine.cpp | 18 +++- tests/unittests/test-ccommandline.cpp | 123 ++++++++++++++++---------- 2 files changed, 93 insertions(+), 48 deletions(-) diff --git a/sakura_core/_main/CCommandLine.cpp b/sakura_core/_main/CCommandLine.cpp index 8f415ebc34..968a1bf224 100644 --- a/sakura_core/_main/CCommandLine.cpp +++ b/sakura_core/_main/CCommandLine.cpp @@ -299,14 +299,28 @@ void CCommandLine::ParseCommandLine( LPCWSTR pszCmdLineSrc, bool bResponse ) if( len > 0 ){ cmWork.SetString( &pszToken[1], len - ( pszToken[len] == L'"' ? 1 : 0 )); cmWork.Replace( L"\"\"", L"\"" ); - wcscpy_s( szPath, _countof(szPath), cmWork.GetStringPtr() ); /* ファイル名 */ + if( STRUNCATE == ::wcsncpy_s( szPath, cmWork.GetStringPtr(), _TRUNCATE ) ){ + std::wstring msg; + // "%ls\nというファイルを開けません。\nファイルのパスが長すぎます。" + strprintf( msg, LS(STR_ERR_FILEPATH_TOO_LONG), cmWork.GetStringPtr() ); + const WCHAR* msg_str = msg.c_str(); + MessageBox( NULL, msg_str, L"FileNameError", MB_OK ); + szPath[0] = L'\0'; + } } else { szPath[0] = L'\0'; } } else{ - wcscpy_s( szPath, _countof(szPath), pszToken ); /* ファイル名 */ + if( STRUNCATE == ::wcsncpy_s( szPath, pszToken, _TRUNCATE ) ){ + std::wstring msg; + // "%ls\nというファイルを開けません。\nファイルのパスが長すぎます。" + strprintf( msg, LS(STR_ERR_FILEPATH_TOO_LONG), pszToken ); + const WCHAR* msg_str = msg.c_str(); + MessageBox( NULL, msg_str, L"FileNameError", MB_OK ); + szPath[0] = L'\0'; + } } // Nov. 11, 2005 susu diff --git a/tests/unittests/test-ccommandline.cpp b/tests/unittests/test-ccommandline.cpp index 0be9dc8965..14596ea404 100644 --- a/tests/unittests/test-ccommandline.cpp +++ b/tests/unittests/test-ccommandline.cpp @@ -32,6 +32,7 @@ #include #include "_main/CCommandLine.h" +#include "env/CSakuraEnvironment.h" #include #include @@ -42,6 +43,24 @@ bool operator != (const EditInfo& lhs, const EditInfo& rhs) noexcept; bool operator == (const GrepInfo& lhs, const GrepInfo& rhs) noexcept; bool operator != (const GrepInfo& lhs, const GrepInfo& rhs) noexcept; +/*! + * ローカルパスをフルパスに変換する + * + * コマンドラインで指定されたパスは、フルパスに変換して格納される。 + * フルパスに変換するルールが特殊なので、実際に利用する関数を使って変換する。 + */ +std::wstring GetLocalPath(const std::wstring_view& filename) +{ + constexpr size_t cchBufSize = 4096; + auto pathBuf = std::make_unique(cchBufSize); + if (!pathBuf) throw std::bad_alloc(); + + LPWSTR pszResolvedPath = pathBuf.get(); + ::wcscpy_s(pszResolvedPath, cchBufSize, filename.data()); + CSakuraEnvironment::ResolvePath(pszResolvedPath); + return pszResolvedPath; +} + /*! * テスト用の極薄ラッパークラス */ @@ -841,6 +860,32 @@ TEST(CCommandLine, EndOfOptionMark) CCommandLineWrapper cCommandLine; cCommandLine.ParseCommandLine(L"-- -GROUP=2", false); EXPECT_EQ(-1, cCommandLine.GetGroupId()); + EXPECT_STREQ(GetLocalPath(L"-GROUP=2").data(), cCommandLine.GetOpenFile()); + EXPECT_EQ(NULL, cCommandLine.GetFileName(0)); + EXPECT_EQ(0, cCommandLine.GetFileNum()); +} + +/*! + * @brief ファイル名の指定に関する仕様 + * @remark オプションでない引数はファイル名と解釈する + * @remark ファイル名を複数指定した場合、1つ目のファイル名をオープン対象とする + */ +TEST(CCommandLine, ParseOpenFile) +{ + CCommandLineWrapper cCommandLine1; + std::wstring strCmdLine1 = L"test.txt"; + cCommandLine1.ParseCommandLine(strCmdLine1.data(), false); + EXPECT_STREQ(GetLocalPath(L"test.txt").data(), cCommandLine1.GetOpenFile()); + EXPECT_EQ(NULL, cCommandLine1.GetFileName(0)); + EXPECT_EQ(0, cCommandLine1.GetFileNum()); + + CCommandLineWrapper cCommandLine2; + std::wstring strCmdLine2 = L"test1.txt test2.txt"; + cCommandLine2.ParseCommandLine(strCmdLine2.data(), false); + EXPECT_STREQ(GetLocalPath(L"test1.txt").data(), cCommandLine2.GetOpenFile()); + EXPECT_STREQ(GetLocalPath(L"test2.txt").data(), cCommandLine2.GetFileName(0)); + EXPECT_EQ(NULL, cCommandLine1.GetFileName(1)); + EXPECT_EQ(1, cCommandLine2.GetFileNum()); } /*! @@ -855,28 +900,6 @@ TEST(CCommandLine, UnterminatedQuotedFilename) EXPECT_EQ(0, cCommandLine.GetFileNum()); } -/*! - * @brief ファイルパスにファイルプロトコルの接頭辞を含めた場合の仕様 - */ -TEST(CCommandLine, StripFileProtocol) -{ - // 絶対パスへの変換処理の影響を受けないように、事前に絶対パス化しておく - std::wstring strPath(_MAX_PATH, L'a'); - strPath = L".\\" + strPath; - strPath.resize(_MAX_PATH * 2); - auto* p = ::_wfullpath(NULL, strPath.c_str(), strPath.capacity()); - - CCommandLineWrapper cCommandLine; - std::wstring strCmdLine; - strPath.assign(p, _MAX_PATH - 1); - strprintf(strCmdLine, L"file:///%s test.txt", strPath.data()); - cCommandLine.ParseCommandLine(strCmdLine.data(), false); - EXPECT_STREQ(strPath.c_str(), cCommandLine.GetOpenFile()); - EXPECT_STREQ(L"test.txt", cCommandLine.GetFileName(0)); - EXPECT_EQ(NULL, cCommandLine.GetFileName(1)); - EXPECT_EQ(1, cCommandLine.GetFileNum()); -} - /*! * @brief ファイルパスに「ファイルに使えない文字」を含めた場合の仕様 * @remark 無視される @@ -911,32 +934,40 @@ TEST(CCommandLine, ParseFileNameIncludesInvalidFilenameChars) */ TEST(CCommandLine, ParseTooLongFilePath) { - // 絶対パスへの変換処理の影響を受けないように、事前に絶対パス化しておく + // _MAX_PATH - 1を超えるパスは無視される + CCommandLineWrapper cCommandLine; + std::wstring strCmdLine; std::wstring strPath(_MAX_PATH, L'a'); - strPath = L".\\" + strPath; - strPath.resize(_MAX_PATH * 2); - auto* p = ::_wfullpath(NULL, strPath.c_str(), strPath.capacity()); + strprintf(strCmdLine, L"%s test.txt", strPath.c_str()); + cCommandLine.ParseCommandLine(strCmdLine.data(), false); + // 以下のチェックはMinGWで動作しないため、コメントアウトしておく + //EXPECT_STREQ(GetLocalPath(L"test.txt").data(), cCommandLine.GetOpenFile()); + EXPECT_EQ(NULL, cCommandLine.GetFileName(0)); + EXPECT_EQ(0, cCommandLine.GetFileNum()); +} - // _MAX_PATH - 1までのパスは受け付けられる - CCommandLineWrapper cCommandLine1; - std::wstring strCmdLine1; - strPath.assign(p, _MAX_PATH - 1); - strprintf(strCmdLine1, L"%s test.txt", strPath.data()); - cCommandLine1.ParseCommandLine(strCmdLine1.data(), false); - EXPECT_STREQ(strPath.c_str(), cCommandLine1.GetOpenFile()); - EXPECT_STREQ(L"test.txt", cCommandLine1.GetFileName(0)); - EXPECT_EQ(NULL, cCommandLine1.GetFileName(1)); - EXPECT_EQ(1, cCommandLine1.GetFileNum()); +// 以下のチェックはMinGWで動作しないため、コメントアウトしておく +#ifndef __MINGW32__ - // _MAX_PATH - 1を超えるパスは無視される - CCommandLineWrapper cCommandLine2; - std::wstring strCmdLine2; - strPath.assign(p, _MAX_PATH); - strprintf(strCmdLine2, L"%s test.txt", strPath.data()); - cCommandLine2.ParseCommandLine(strCmdLine2.data(), false); - EXPECT_STRNE(L"", cCommandLine2.GetOpenFile()); - EXPECT_EQ(NULL, cCommandLine2.GetFileName(0)); - EXPECT_EQ(0, cCommandLine2.GetFileNum()); +/*! + * @brief ファイルパスに指定できる上限文字列長に関する仕様 + * @remark _MAX_PATH - 1までのパスは利用できる + */ +TEST(CCommandLine, ParseMaxFilePath) +{ + // 絶対パスへの変換処理の影響を受けないように、事前に絶対パス化しておく + std::wstring strPath = GetLocalPath(L"a"); + strPath.resize(_MAX_PATH - 1, L'a'); - ::free(p); + // _MAX_PATH - 1までのパスは受け付けられる + CCommandLineWrapper cCommandLine; + std::wstring strCmdLine; + strprintf(strCmdLine, L"%s test.txt", strPath.c_str()); + cCommandLine.ParseCommandLine(strCmdLine.data(), false); + EXPECT_STREQ(strPath.data(), cCommandLine.GetOpenFile()); + EXPECT_STREQ(GetLocalPath(L"test.txt").data(), cCommandLine.GetFileName(0)); + EXPECT_EQ(NULL, cCommandLine.GetFileName(1)); + EXPECT_EQ(1, cCommandLine.GetFileNum()); } + +#endif //ifndef __MINGW32__ From 296b0dbacc968a2320ed1c8505f3f30662e50c6c Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 14 Nov 2020 18:38:14 +0900 Subject: [PATCH 0250/1024] =?UTF-8?q?MinGW=E3=81=AE=E3=83=97=E3=83=AA?= =?UTF-8?q?=E3=82=B3=E3=83=B3=E3=83=91=E3=82=A4=E3=83=AB=E6=B8=88=E3=81=BF?= =?UTF-8?q?=E3=83=98=E3=83=83=E3=83=80=E3=83=BC=E3=82=92.gitignore?= =?UTF-8?q?=E3=81=AB=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index a466343847..59e397beb6 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ /cppcheck-*.xml /cppcheck-install.log /help/sakura/sakura.hh +/sakura_core/StdAfx.h.gch /tests/build /tests/unittests/Win32 /tests/unittests/x64 From 2218b446d7d1665ed99c878fdb52d4299ee4feec Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 14 Nov 2020 20:00:05 +0900 Subject: [PATCH 0251/1024] =?UTF-8?q?Revert=20"MinGW=E3=81=AE=E3=83=97?= =?UTF-8?q?=E3=83=AA=E3=82=B3=E3=83=B3=E3=83=91=E3=82=A4=E3=83=AB=E6=B8=88?= =?UTF-8?q?=E3=81=BF=E3=83=98=E3=83=83=E3=83=80=E3=83=BC=E3=82=92.gitignor?= =?UTF-8?q?e=E3=81=AB=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 296b0dbacc968a2320ed1c8505f3f30662e50c6c. --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 59e397beb6..a466343847 100644 --- a/.gitignore +++ b/.gitignore @@ -11,7 +11,6 @@ /cppcheck-*.xml /cppcheck-install.log /help/sakura/sakura.hh -/sakura_core/StdAfx.h.gch /tests/build /tests/unittests/Win32 /tests/unittests/x64 From 881fc7c44f8b1aa0e5b54c0139e9ae2ab6b0c8a3 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 14 Nov 2020 20:06:08 +0900 Subject: [PATCH 0252/1024] =?UTF-8?q?MinGW=E3=81=AE=E3=83=97=E3=83=AA?= =?UTF-8?q?=E3=82=B3=E3=83=B3=E3=83=91=E3=82=A4=E3=83=AB=E6=B8=88=E3=81=BF?= =?UTF-8?q?=E3=83=98=E3=83=83=E3=83=80=E3=83=BC=E3=82=92.gitignore?= =?UTF-8?q?=E3=81=AB=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit レビュー指摘により、sakura_core/.gitignoreに追加するようにした。 --- sakura_core/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/sakura_core/.gitignore b/sakura_core/.gitignore index ddb6796514..3e3a1f9139 100644 --- a/sakura_core/.gitignore +++ b/sakura_core/.gitignore @@ -7,3 +7,4 @@ /sakura.exe *.d *.o +/StdAfx.h.gch From 32ea91b3b75158597c63ce4fadfcce7bed7302bb Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sat, 21 Nov 2020 14:42:56 +0900 Subject: [PATCH 0253/1024] =?UTF-8?q?(GHA)=20=E4=BD=BF=E7=94=A8=E3=81=97?= =?UTF-8?q?=E3=81=A6=E3=81=84=E3=82=8B=E3=82=A2=E3=82=AF=E3=82=B7=E3=83=A7?= =?UTF-8?q?=E3=83=B3=E3=81=AE=E3=83=90=E3=83=BC=E3=82=B8=E3=83=A7=E3=83=B3?= =?UTF-8?q?=E3=82=92=E4=B8=8A=E3=81=92=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build-sakura.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-sakura.yml b/.github/workflows/build-sakura.yml index 104cc2340d..e02328d1f2 100644 --- a/.github/workflows/build-sakura.yml +++ b/.github/workflows/build-sakura.yml @@ -52,7 +52,7 @@ jobs: ## see https://github.com/microsoft/setup-msbuild - name: Add msbuild to PATH - uses: microsoft/setup-msbuild@v1.0.0 + uses: microsoft/setup-msbuild@v1.0.2 - name: MSBuild run: build-sln.bat ${{ matrix.platform }} ${{ matrix.config }} From 9b38d3134ab7823ee1ac24318d96991fce9ebfb2 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sat, 21 Nov 2020 16:05:34 +0900 Subject: [PATCH 0254/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E3=81=AB=E5=AF=BE=E5=BF=9C=EF=BC=9A=E3=83=90?= =?UTF-8?q?=E3=83=BC=E3=82=B8=E3=83=A7=E3=83=B3=E3=81=AE=E6=8C=87=E5=AE=9A?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E3=82=92=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build-sakura.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-sakura.yml b/.github/workflows/build-sakura.yml index e02328d1f2..1fd5a389e0 100644 --- a/.github/workflows/build-sakura.yml +++ b/.github/workflows/build-sakura.yml @@ -52,7 +52,7 @@ jobs: ## see https://github.com/microsoft/setup-msbuild - name: Add msbuild to PATH - uses: microsoft/setup-msbuild@v1.0.2 + uses: microsoft/setup-msbuild@v1 - name: MSBuild run: build-sln.bat ${{ matrix.platform }} ${{ matrix.config }} From 81b0f4a3f16fe7bd38bd7db785eae4939ab00ecf Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Sun, 22 Nov 2020 10:33:34 +0800 Subject: [PATCH 0255/1024] Add files via upload --- installer/sakura-common.iss | 98 ++++++++++++++++++++++++++++++++++++- 1 file changed, 96 insertions(+), 2 deletions(-) diff --git a/installer/sakura-common.iss b/installer/sakura-common.iss index 9c400f1bdb..90c9beba30 100644 --- a/installer/sakura-common.iss +++ b/installer/sakura-common.iss @@ -1,4 +1,4 @@ -#if VER < EncodeVer(5,6,1) +#if VER < EncodeVer(5,6,1) #define MySendTo "{sendto}" #else #define MySendTo "{usersendto}" @@ -48,70 +48,164 @@ MinVersion=6.1 [Languages] Name: "ja"; MessagesFile: "compiler:Languages\Japanese.isl" Name: "en"; MessagesFile: "compiler:Default.isl"; InfoBeforeFile: "instmaterials\info_us.txt" +Name: "zh_hans"; MessagesFile: "compiler:Languages\ChineseSimplified.isl"; InfoBeforeFile: "instmaterials\info_zh_hans.txt" +Name: "zh_hant"; MessagesFile: "compiler:Languages\ChineseTraditional.isl"; InfoBeforeFile: "instmaterials\info_zh_hant.txt" [CustomMessages] en.InfoBeforeFile=instmaterials\info_en.txt ja.InfoBeforeFile=instmaterials\info.txt +zh_hans.InfoBeforeFile=instmaterials\info.txt +zh_hant.InfoBeforeFile=instmaterials\info.txt + en.AppName=SAKURA Editor ja.AppName=サクラエディタ +zh_hans.AppName=樱花编辑器 +zh_hant.AppName=櫻花編輯器 + en.AppVerName=SAKURA Editor ja.AppVerName=SAKURA Editor(サクラエディタ) +zh_hans.AppVerName=樱花编辑器 +zh_hant.AppVerName=櫻花編輯器 + en.AppPublisher=SAKURA Editor developers ja.AppPublisher=サクラエディタ開発チーム +zh_hans.AppPublisher=樱花编辑器 开发者 +zh_hant.AppPublisher=櫻花編輯器 開發者 + en.TypesAll=All ja.TypesAll=すべて +zh_hans.TypesAll=全部安装 +zh_hant.TypesAll==全部安裝 + en.TypesEditorWithHelp=Editor with Help ja.TypesEditorWithHelp=本体とヘルプ +zh_hans.TypesEditorWithHelp=本体与帮助文件 +zh_hant.TypesEditorWithHelp=本體與幫助檔 + en.TypesEditorOnly=Editor Only ja.TypesEditorOnly=本体のみ +zh_hans.TypesEditorOnly=仅安装本体 +zh_hant.TypesEditorOnly=僅安裝本體 + en.TypesCustom=Custom ja.TypesCustom=カスタム +zh_hans.TypesCustom=自定义 +zh_hant.TypesCustom=自定義 + en.ComponentsMain=SAKURA Editor itself ja.ComponentsMain=サクラエディタ本体 +zh_hans.ComponentsMain=樱花编辑器 +zh_hant.ComponentsMain=櫻花編輯器本体 + en.ComponentsHelp=help files ja.ComponentsHelp=ヘルプファイル +zh_hans.ComponentsHelp=帮助文件 +zh_hant.ComponentsHelp=幫助檔 + en.ComponentsKeyword=KeyWord files ja.ComponentsKeyword=KeyWordファイル +zh_hans.ComponentsKeyword=语法提示文件 +zh_hant.ComponentsKeyword=語法提示檔案 + en.startmenu=Create &Start Menu ja.startmenu=スタートメニューを作成(&S) +zh_hans.startmenu=添加到开始菜单(&S) +zh_hant.startmenu=添加到開始菜單(&S) + en.proglist=Add &Program List ja.proglist=プログラム一覧に追加(&P) +zh_hans.proglist=添加到程序列表(&P) +zh_hant.proglist=添加到程式清單(&P) + en.fileassoc=Add "Open with SAKURA &Editor" ja.fileassoc=「SAKURA Editorで開く」メニューの追加(&E) +zh_hans.fileassoc=添加"用 樱花编辑器 打开"(&E) +zh_hant.fileassoc=添加“用 櫻花編輯器 打開”(&E) + en.sendto=Add to Send&To Menu ja.sendto=送るに追加(&T) +zh_hans.sendto=添加到"发送到"菜单(&T) +zh_hant.sendto=添加到“發送到”選單(&T) + en.sakuragrep=Add "&Grep with SAKURA Editor" ja.sakuragrep=「SAKURA EditorでGrep」メニューの追加(&G) +zh_hans.sakuragrep=添加到 "Grep with SAKURA Editor"(&G) +zh_hant.sakuragrep=添加到 “Grep with SAKURA Editor”(&G) + en.fileassocMenu=Open with SAKURA &Editor ja.fileassocMenu=SAKURA Editorで開く(&E) +zh_hans.fileassocMenu=用 樱花编辑器 打开(&E) +zh_hant.fileassocMenu=用 櫻花編輯器 打開く(&E) + en.sakuragrepMenu=&Grep with SAKURA Editor ja.sakuragrepMenu=SAKURA EditorでGrep(&G) +zh_hans.sakuragrepMenu=Grep with SAKURA Editor(&G) +zh_hant.sakuragrepMenu=Grep with SAKURA Editor(&G) + en.residentStartup=&Resident at startup ja.residentStartup=起動時に常駐(&R) +zh_hans.residentStartup=开机时启动(&R) +zh_hant.residentStartup=開機時啟動(&R) + en.IconPreferencefolder=Preference folder ja.IconPreferencefolder=設定フォルダ +zh_hans.IconPreferencefolder=文件夹设置 +zh_hant.IconPreferencefolder=資料夾設定 + en.StartNow=Start now ja.StartNow=今すぐサクラエディタを起動 +zh_hans.StartNow=现在启动 +zh_hant.StartNow=現在啟動 + en.MultiUser=Install in compatibility mode. When editing system files and programs with user authority, editing results may not be accessible from other applications. (VirtualStore function) ja.MultiUser=互換モードでインストールします.システムファイルおよびプログラムをユーザ権限で編集すると編集結果が他のアプリケーションから参照できないことがあります.(VirtualStore機能) +zh_hans.MultiUser=软件将会以兼容模式安装。使用非管理员用户编辑配置文件时,文件可能无法被管理员用户访问。(VirtualStore功能) +zh_hant.MultiUser=軟件將會以相容模式安裝。使用非管理員用戶編輯設定檔時,檔案可能無法被管理員用戶訪問。(VirtualStore功能) + en.InitWiz_Title=Selection of Preference preservation method ja.InitWiz_Title=設定保存方法の選択 +zh_hans.InitWiz_Title=配置文件保存位置 +zh_hant.InitWiz_Title=設定檔保存位置 + en.InitWiz_SubTitle=Please choose whether you want to save the settings for each user or to the location of the executable file ja.InitWiz_SubTitle=設定をユーザ毎に保存するか実行ファイルの場所へ保存するかを選択してください -en.InitWiz_Comment=Please do not change if you're unsure about this +zh_hans.InitWiz_SubTitle=选择将Sukura配置文件保存至当前用户或软件目录内 +zh_hant.InitWiz_SubTitle=選擇將Sukura設定檔保存至當前用戶或軟件目錄內 + +en.InitWiz_Comment=Please do not change if you are unsure about this ja.InitWiz_Comment=よくわからない場合は変更しないでください +zh_hans.InitWiz_Comment=若您不清楚此选项,请不要修改 +zh_hant.InitWiz_Comment=若您不清楚此選項,請不要修改 + en.InitWiz_Check=Manage Preference individually for each user ja.InitWiz_Check=設定をユーザ毎に個別に管理する +zh_hans.InitWiz_Check=将每个用户的配置文件单独保存 +zh_hant.InitWiz_Check=將每個用戶的設定檔單獨保存 + en.ReadyMemo_SaveLocation=Preference file etc. save location ja.ReadyMemo_SaveLocation=設定ファイル等格納場所 +zh_hans.ReadyMemo_SaveLocation=设定文件保存位置 +zh_hant.ReadyMemo_SaveLocation=設定檔案保存位置 + en.ReadyMemo_UserProfileDir=User-Profile directory ja.ReadyMemo_UserProfileDir=ユーザ個別ディレクトリ +zh_hans.ReadyMemo_UserProfileDir=用户配置文件目录 +zh_hant.ReadyMemo_UserProfileDir=用戶設定檔目錄 + en.ReadyMemo_VirtualStoreDisable=Disable ja.ReadyMemo_VirtualStoreDisable=無効 +zh_hans.ReadyMemo_VirtualStoreDisable=无效 +zh_hant.ReadyMemo_VirtualStoreDisable=無效 + en.ReadyMemo_ExecProfileDir=Same as the executable file ja.ReadyMemo_ExecProfileDir=実行ファイルと同一ディレクトリ +zh_hans.ReadyMemo_ExecProfileDir=与可执行文件相同 +zh_hant.ReadyMemo_ExecProfileDir=実行ファイルと同一ディレクトリ + en.ReadyMemo_VirtualStoreEnable=Enable ja.ReadyMemo_VirtualStoreEnable=有効 +zh_hans.ReadyMemo_VirtualStoreEnable=生效 +zh_hant.ReadyMemo_VirtualStoreEnable=生效 From 8ce22e35cd31d1a7949ec8582e87fdf99d20cfa4 Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Sun, 22 Nov 2020 11:37:16 +0800 Subject: [PATCH 0256/1024] Update sakura-common.iss --- installer/sakura-common.iss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/installer/sakura-common.iss b/installer/sakura-common.iss index 90c9beba30..91d907c78b 100644 --- a/installer/sakura-common.iss +++ b/installer/sakura-common.iss @@ -200,7 +200,7 @@ zh_hant.ReadyMemo_VirtualStoreDisable=無效 en.ReadyMemo_ExecProfileDir=Same as the executable file ja.ReadyMemo_ExecProfileDir=実行ファイルと同一ディレクトリ zh_hans.ReadyMemo_ExecProfileDir=与可执行文件相同 -zh_hant.ReadyMemo_ExecProfileDir=実行ファイルと同一ディレクトリ +zh_hant.ReadyMemo_ExecProfileDir=與可執行文件相同 en.ReadyMemo_VirtualStoreEnable=Enable ja.ReadyMemo_VirtualStoreEnable=有効 From 181b07c10e087bd719edd39f898ce90319ac2e77 Mon Sep 17 00:00:00 2001 From: "Kengo Ide (kagari)" <36005663+kasumikagari@users.noreply.github.com> Date: Sun, 22 Nov 2020 16:29:16 +0900 Subject: [PATCH 0257/1024] =?UTF-8?q?=E3=82=B3=E3=83=B3=E3=83=9C=E3=83=9C?= =?UTF-8?q?=E3=83=83=E3=82=AF=E3=82=B9=E3=81=AE=E3=82=B5=E3=83=96=E3=82=AF?= =?UTF-8?q?=E3=83=A9=E3=82=B9=E5=8C=96=E5=87=A6=E7=90=86=E3=82=92=E7=B0=A1?= =?UTF-8?q?=E7=B4=A0=E5=8C=96=E3=81=99=E3=82=8B=20(#1463)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * GetComboBoxInfo を使う * SetWindowSubclass を使う * SComboBoxItemDeleter を廃止 コンボボックスに CRecent を SetProp して直に紐づけ、コンボボックスのハンドルをサブクラスプロシージャに付属データとして渡す。 サブクラスプロシージャはコンボボックスのハンドルから GetProp して CRecent を取得する。 * レビュー指摘に対応: C-style キャストを使う * レビュー指摘に対応: リストボックスのサブクラス化をやめる --- sakura_core/dlg/CDialog.cpp | 99 ++----------------- sakura_core/dlg/CDialog.h | 12 +-- sakura_core/dlg/CDlgExec.cpp | 9 +- sakura_core/dlg/CDlgExec.h | 2 - sakura_core/dlg/CDlgFind.cpp | 4 +- sakura_core/dlg/CDlgFind.h | 1 - sakura_core/dlg/CDlgGrep.cpp | 23 ++--- sakura_core/dlg/CDlgGrep.h | 9 -- sakura_core/dlg/CDlgGrepReplace.cpp | 4 +- sakura_core/dlg/CDlgGrepReplace.h | 1 - .../dlg/CDlgOpenFile_CommonFileDialog.cpp | 10 +- sakura_core/dlg/CDlgReplace.cpp | 8 +- sakura_core/dlg/CDlgReplace.h | 2 - sakura_core/dlg/CDlgTagJumpList.cpp | 4 +- sakura_core/dlg/CDlgTagJumpList.h | 1 - sakura_core/window/CMainToolBar.cpp | 4 +- sakura_core/window/CMainToolBar.h | 1 - 17 files changed, 27 insertions(+), 167 deletions(-) diff --git a/sakura_core/dlg/CDialog.cpp b/sakura_core/dlg/CDialog.cpp index 9cae984b6f..9706d412a6 100644 --- a/sakura_core/dlg/CDialog.cpp +++ b/sakura_core/dlg/CDialog.cpp @@ -699,8 +699,6 @@ void CDialog::GetItemClientRect( int wID, RECT& rc ) rc.bottom = po.y; } -static const WCHAR* TSTR_SUBCOMBOBOXDATA = L"SubComboBoxData"; - /*! コンボボックスのリストアイテムを関連付けられた履歴と共に削除する */ static void DeleteRecentItem( @@ -747,109 +745,32 @@ static void DeleteRecentItem( } } -LRESULT CALLBACK SubEditProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +LRESULT CALLBACK SubEditProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, + UINT_PTR uIdSubclass, DWORD_PTR dwRefData) { - SComboBoxItemDeleter* data = (SComboBoxItemDeleter*)::GetProp( hwnd, TSTR_SUBCOMBOBOXDATA ); + HWND hwndCombo = GetParent(hwnd); switch( uMsg ){ case WM_KEYDOWN: { if( wParam == VK_DELETE ){ - HWND hwndCombo = data->hwndCombo; BOOL bShow = Combo_GetDroppedState(hwndCombo); int nIndex = Combo_GetCurSel(hwndCombo); if( bShow && 0 <= nIndex ){ - DeleteRecentItem(hwndCombo, nIndex, data->pRecent); + DeleteRecentItem(hwndCombo, nIndex, (CRecent*)dwRefData); } } break; } - case WM_DESTROY: - { - ::SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)data->pEditWndProc); - ::RemoveProp(hwnd, TSTR_SUBCOMBOBOXDATA); - data->pEditWndProc = NULL; - break; - } - default: - break; } - return CallWindowProc(data->pEditWndProc, hwnd, uMsg, wParam, lParam); + return ::DefSubclassProc(hwnd, uMsg, wParam, lParam); } -LRESULT CALLBACK SubListBoxProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +void CDialog::SetComboBoxDeleter(HWND hwndCtl, CRecent* pRecent) { - SComboBoxItemDeleter* data = (SComboBoxItemDeleter*)::GetProp( hwnd, TSTR_SUBCOMBOBOXDATA ); - switch( uMsg ){ - case WM_KEYDOWN: - { - if( wParam == VK_DELETE ){ - HWND hwndCombo = data->hwndCombo; - int nIndex = Combo_GetCurSel(hwndCombo); - if( 0 <= nIndex ){ - DeleteRecentItem(hwndCombo, nIndex, data->pRecent); - return 0; - } - } - break; - } - case WM_DESTROY: - { - ::SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)data->pListBoxWndProc); - ::RemoveProp(hwnd, TSTR_SUBCOMBOBOXDATA); - data->pListBoxWndProc = NULL; - break; - } - default: - break; - } - return CallWindowProc(data->pListBoxWndProc, hwnd, uMsg, wParam, lParam); -} + assert(pRecent); -LRESULT CALLBACK SubComboBoxProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - SComboBoxItemDeleter* data = (SComboBoxItemDeleter*)::GetProp( hwnd, TSTR_SUBCOMBOBOXDATA ); - switch( uMsg ){ - case WM_CTLCOLOREDIT: - { - if( NULL == data->pEditWndProc ){ - HWND hwndCtl = (HWND)lParam; - data->pEditWndProc = (WNDPROC)::GetWindowLongPtr(hwndCtl, GWLP_WNDPROC); - ::SetProp(hwndCtl, TSTR_SUBCOMBOBOXDATA, data); - ::SetWindowLongPtr(hwndCtl, GWLP_WNDPROC, (LONG_PTR)SubEditProc); - } - break; - } - case WM_CTLCOLORLISTBOX: - { - if( NULL == data->pListBoxWndProc ){ - HWND hwndCtl = (HWND)lParam; - data->pListBoxWndProc = (WNDPROC)::GetWindowLongPtr(hwndCtl, GWLP_WNDPROC); - ::SetProp(hwndCtl, TSTR_SUBCOMBOBOXDATA, data); - ::SetWindowLongPtr(hwndCtl, GWLP_WNDPROC, (LONG_PTR)SubListBoxProc); - } - break; - } - case WM_DESTROY: - { - ::SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)data->pComboBoxWndProc); - ::RemoveProp(hwnd, TSTR_SUBCOMBOBOXDATA); - data->pComboBoxWndProc = NULL; - break; - } - - default: - break; - } - return CallWindowProc(data->pComboBoxWndProc, hwnd, uMsg, wParam, lParam); -} - -void CDialog::SetComboBoxDeleter( HWND hwndCtl, SComboBoxItemDeleter* data ) -{ - if( NULL == data->pRecent ){ + COMBOBOXINFO info = { sizeof(COMBOBOXINFO) }; + if (!::GetComboBoxInfo(hwndCtl, &info)) return; - } - data->hwndCombo = hwndCtl; - data->pComboBoxWndProc = (WNDPROC)::GetWindowLongPtr(hwndCtl, GWLP_WNDPROC); - ::SetProp(hwndCtl, TSTR_SUBCOMBOBOXDATA, data); - ::SetWindowLongPtr(hwndCtl, GWLP_WNDPROC, (LONG_PTR)SubComboBoxProc); + ::SetWindowSubclass(info.hwndItem, SubEditProc, 0, (DWORD_PTR)pRecent); } diff --git a/sakura_core/dlg/CDialog.h b/sakura_core/dlg/CDialog.h index cbbaa79528..54df51a35d 100644 --- a/sakura_core/dlg/CDialog.h +++ b/sakura_core/dlg/CDialog.h @@ -51,16 +51,6 @@ struct SAnchorList EAnchorStyle anchor; }; -struct SComboBoxItemDeleter -{ - CRecent* pRecent; - HWND hwndCombo; - WNDPROC pComboBoxWndProc; - WNDPROC pEditWndProc; - WNDPROC pListBoxWndProc; - SComboBoxItemDeleter(): pRecent(NULL), hwndCombo(NULL), pComboBoxWndProc(NULL), pEditWndProc(NULL), pListBoxWndProc(NULL){} -}; - /*----------------------------------------------------------------------- クラスの宣言 -----------------------------------------------------------------------*/ @@ -125,7 +115,7 @@ class CDialog void ResizeItem( HWND hTarget, const POINT& ptDlgDefalut, const POINT& ptDlgNew, const RECT& rcItemDefault, EAnchorStyle anchor, bool bUpdate = true); void GetItemClientRect( int wID, RECT& rc ); - static void SetComboBoxDeleter( HWND hwndCtl, SComboBoxItemDeleter* data ); + static void SetComboBoxDeleter( HWND hwndCtl, CRecent* pRecent ); public: static bool DirectoryUp(WCHAR* szDir); diff --git a/sakura_core/dlg/CDlgExec.cpp b/sakura_core/dlg/CDlgExec.cpp index 54fa35e230..f77fc310c8 100644 --- a/sakura_core/dlg/CDlgExec.cpp +++ b/sakura_core/dlg/CDlgExec.cpp @@ -81,13 +81,8 @@ BOOL CDlgExec::OnInitDialog( HWND hwnd, WPARAM wParam, LPARAM lParam ) } BOOL bRet = CDialog::OnInitDialog(hwnd, wParam, lParam); - - m_comboDel = SComboBoxItemDeleter(); - m_comboDel.pRecent = &m_cRecentCmd; - SetComboBoxDeleter(GetItemHwnd(IDC_COMBO_m_szCommand), &m_comboDel); - m_comboDelCur = SComboBoxItemDeleter(); - m_comboDelCur.pRecent = &m_cRecentCur; - SetComboBoxDeleter(GetItemHwnd(IDC_COMBO_CUR_DIR), &m_comboDelCur); + SetComboBoxDeleter(GetItemHwnd(IDC_COMBO_m_szCommand), &m_cRecentCmd); + SetComboBoxDeleter(GetItemHwnd(IDC_COMBO_CUR_DIR), &m_cRecentCur); return bRet; } diff --git a/sakura_core/dlg/CDlgExec.h b/sakura_core/dlg/CDlgExec.h index 1dbd6459f4..0da897dcfd 100644 --- a/sakura_core/dlg/CDlgExec.h +++ b/sakura_core/dlg/CDlgExec.h @@ -38,9 +38,7 @@ class CDlgExec final : public CDialog bool m_bEditable; /* 編集ウィンドウへの入力可能 */ // 2009.02.21 ryoji protected: - SComboBoxItemDeleter m_comboDel; CRecentCmd m_cRecentCmd; - SComboBoxItemDeleter m_comboDelCur; CRecentCurDir m_cRecentCur; int GetData( void ) override; /* ダイアログデータの取得 */ diff --git a/sakura_core/dlg/CDlgFind.cpp b/sakura_core/dlg/CDlgFind.cpp index 233b6756be..b3f529f1a2 100644 --- a/sakura_core/dlg/CDlgFind.cpp +++ b/sakura_core/dlg/CDlgFind.cpp @@ -90,9 +90,7 @@ void CDlgFind::ChangeView( LPARAM pcEditView ) BOOL CDlgFind::OnInitDialog( HWND hwnd, WPARAM wParam, LPARAM lParam ) { BOOL bRet = CDialog::OnInitDialog(hwnd, wParam, lParam); - m_comboDel = SComboBoxItemDeleter(); - m_comboDel.pRecent = &m_cRecentSearch; - SetComboBoxDeleter(GetItemHwnd(IDC_COMBO_TEXT), &m_comboDel); + SetComboBoxDeleter(GetItemHwnd(IDC_COMBO_TEXT), &m_cRecentSearch); // フォント設定 2012/11/27 Uchi HFONT hFontOld = (HFONT)::SendMessageAny( GetItemHwnd( IDC_COMBO_TEXT ), WM_GETFONT, 0, 0 ); diff --git a/sakura_core/dlg/CDlgFind.h b/sakura_core/dlg/CDlgFind.h index fcbb474c7f..57adbef024 100644 --- a/sakura_core/dlg/CDlgFind.h +++ b/sakura_core/dlg/CDlgFind.h @@ -45,7 +45,6 @@ class CDlgFind final : public CDialog CLogicPoint m_ptEscCaretPos_PHY; // 検索開始時のカーソル位置退避エリア CRecentSearch m_cRecentSearch; - SComboBoxItemDeleter m_comboDel; CFontAutoDeleter m_cFontText; protected: diff --git a/sakura_core/dlg/CDlgGrep.cpp b/sakura_core/dlg/CDlgGrep.cpp index 3d4f1ca81d..556a6107a9 100644 --- a/sakura_core/dlg/CDlgGrep.cpp +++ b/sakura_core/dlg/CDlgGrep.cpp @@ -331,23 +331,12 @@ BOOL CDlgGrep::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) g_pOnFolderProc = (WNDPROC)GetWindowLongPtr(hFolder, GWLP_WNDPROC); SetWindowLongPtr(hFolder, GWLP_WNDPROC, (LONG_PTR)OnFolderProc); - m_comboDelText = SComboBoxItemDeleter(); - m_comboDelText.pRecent = &m_cRecentSearch; - SetComboBoxDeleter(GetItemHwnd(IDC_COMBO_TEXT), &m_comboDelText); - m_comboDelFile = SComboBoxItemDeleter(); - m_comboDelFile.pRecent = &m_cRecentGrepFile; - SetComboBoxDeleter(GetItemHwnd(IDC_COMBO_FILE), &m_comboDelFile); - m_comboDelFolder = SComboBoxItemDeleter(); - m_comboDelFolder.pRecent = &m_cRecentGrepFolder; - SetComboBoxDeleter(GetItemHwnd(IDC_COMBO_FOLDER), &m_comboDelFolder); - - m_comboDelExcludeFile = SComboBoxItemDeleter(); - m_comboDelExcludeFile.pRecent = &m_cRecentExcludeFile; - SetComboBoxDeleter(GetItemHwnd(IDC_COMBO_EXCLUDE_FILE), &m_comboDelExcludeFile); - - m_comboDelExcludeFolder = SComboBoxItemDeleter(); - m_comboDelExcludeFolder.pRecent = &m_cRecentExcludeFolder; - SetComboBoxDeleter(GetItemHwnd(IDC_COMBO_EXCLUDE_FOLDER), &m_comboDelExcludeFolder); + SetComboBoxDeleter(GetItemHwnd(IDC_COMBO_TEXT), &m_cRecentSearch); + SetComboBoxDeleter(GetItemHwnd(IDC_COMBO_FILE), &m_cRecentGrepFile); + SetComboBoxDeleter(GetItemHwnd(IDC_COMBO_FOLDER), &m_cRecentGrepFolder); + + SetComboBoxDeleter(GetItemHwnd(IDC_COMBO_EXCLUDE_FILE), &m_cRecentExcludeFile); + SetComboBoxDeleter(GetItemHwnd(IDC_COMBO_EXCLUDE_FOLDER), &m_cRecentExcludeFolder); BOOL bRet = CDialog::OnInitDialog( hwndDlg, wParam, lParam ); if( !bRet ) return bRet; diff --git a/sakura_core/dlg/CDlgGrep.h b/sakura_core/dlg/CDlgGrep.h index aef4dfe96e..a05ca54ee7 100644 --- a/sakura_core/dlg/CDlgGrep.h +++ b/sakura_core/dlg/CDlgGrep.h @@ -61,19 +61,10 @@ class CDlgGrep : public CDialog SFilePathLong m_szExcludeFolder; //!< 除外フォルダ SFilePath m_szCurrentFilePath; protected: - SComboBoxItemDeleter m_comboDelText; CRecentSearch m_cRecentSearch; - - SComboBoxItemDeleter m_comboDelFile; CRecentGrepFile m_cRecentGrepFile; - - SComboBoxItemDeleter m_comboDelFolder; CRecentGrepFolder m_cRecentGrepFolder; - - SComboBoxItemDeleter m_comboDelExcludeFile; CRecentExcludeFile m_cRecentExcludeFile; - - SComboBoxItemDeleter m_comboDelExcludeFolder; CRecentExcludeFolder m_cRecentExcludeFolder; std::vector m_cFontDeleters; diff --git a/sakura_core/dlg/CDlgGrepReplace.cpp b/sakura_core/dlg/CDlgGrepReplace.cpp index e83bf7abcc..f073934f4b 100644 --- a/sakura_core/dlg/CDlgGrepReplace.cpp +++ b/sakura_core/dlg/CDlgGrepReplace.cpp @@ -129,9 +129,7 @@ BOOL CDlgGrepReplace::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) /* コンボボックスのユーザー インターフェイスを拡張インターフェースにする */ Combo_SetExtendedUI( GetItemHwnd( IDC_COMBO_TEXT2 ), TRUE ); - m_comboDelText2 = SComboBoxItemDeleter(); - m_comboDelText2.pRecent = &m_cRecentReplace; - SetComboBoxDeleter( GetItemHwnd( IDC_COMBO_TEXT2 ), &m_comboDelText2 ); + SetComboBoxDeleter(GetItemHwnd(IDC_COMBO_TEXT2), &m_cRecentReplace); BOOL bRet = CDlgGrep::OnInitDialog( hwndDlg, wParam, lParam ); if( !bRet ) return bRet; diff --git a/sakura_core/dlg/CDlgGrepReplace.h b/sakura_core/dlg/CDlgGrepReplace.h index e0b5215a9a..dd880b5e62 100644 --- a/sakura_core/dlg/CDlgGrepReplace.h +++ b/sakura_core/dlg/CDlgGrepReplace.h @@ -42,7 +42,6 @@ class CDlgGrepReplace final : public CDlgGrep protected: CRecentReplace m_cRecentReplace; - SComboBoxItemDeleter m_comboDelText2; CFontAutoDeleter m_cFontText2; /* diff --git a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp index f60f54a878..2605579771 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp @@ -118,9 +118,7 @@ class CDlgOpenFileData{ bool m_bInitCodePage; - SComboBoxItemDeleter m_combDelFile; CRecentFile m_cRecentFile; - SComboBoxItemDeleter m_combDelFolder; CRecentFolder m_cRecentFolder; OPENFILENAME* m_pOf; @@ -373,12 +371,8 @@ UINT_PTR CALLBACK OFNHookProc( /* ビューモードの初期値セット */ ::CheckDlgButton( pData->m_hwndOpenDlg, chx1, pData->m_bViewMode ); - pData->m_combDelFile = SComboBoxItemDeleter(); - pData->m_combDelFile.pRecent = &pData->m_cRecentFile; - CDialog::SetComboBoxDeleter(pData->m_hwndComboMRU, &pData->m_combDelFile); - pData->m_combDelFolder = SComboBoxItemDeleter(); - pData->m_combDelFolder.pRecent = &pData->m_cRecentFolder; - CDialog::SetComboBoxDeleter(pData->m_hwndComboOPENFOLDER, &pData->m_combDelFolder); + CDialog::SetComboBoxDeleter(pData->m_hwndComboMRU, &pData->m_cRecentFile); + CDialog::SetComboBoxDeleter(pData->m_hwndComboOPENFOLDER, &pData->m_cRecentFolder); } break; diff --git a/sakura_core/dlg/CDlgReplace.cpp b/sakura_core/dlg/CDlgReplace.cpp index ff655a56f5..aae4967223 100644 --- a/sakura_core/dlg/CDlgReplace.cpp +++ b/sakura_core/dlg/CDlgReplace.cpp @@ -343,12 +343,8 @@ BOOL CDlgReplace::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) ::CheckDlgButton( GetHwnd(), IDC_RADIO_ALLAREA, TRUE ); } - m_comboDelText = SComboBoxItemDeleter(); - m_comboDelText.pRecent = &m_cRecentSearch; - SetComboBoxDeleter(GetItemHwnd(IDC_COMBO_TEXT), &m_comboDelText); - m_comboDelText2 = SComboBoxItemDeleter(); - m_comboDelText2.pRecent = &m_cRecentReplace; - SetComboBoxDeleter(GetItemHwnd(IDC_COMBO_TEXT2), &m_comboDelText2); + SetComboBoxDeleter(GetItemHwnd(IDC_COMBO_TEXT), &m_cRecentSearch); + SetComboBoxDeleter(GetItemHwnd(IDC_COMBO_TEXT2), &m_cRecentReplace); BOOL bRet = CDialog::OnInitDialog( hwndDlg, wParam, lParam ); if( !bRet ) return bRet; diff --git a/sakura_core/dlg/CDlgReplace.h b/sakura_core/dlg/CDlgReplace.h index 735cd02a97..5ad655deb6 100644 --- a/sakura_core/dlg/CDlgReplace.h +++ b/sakura_core/dlg/CDlgReplace.h @@ -59,9 +59,7 @@ class CDlgReplace final : public CDialog protected: CRecentSearch m_cRecentSearch; - SComboBoxItemDeleter m_comboDelText; CRecentReplace m_cRecentReplace; - SComboBoxItemDeleter m_comboDelText2; CFontAutoDeleter m_cFontText; CFontAutoDeleter m_cFontText2; diff --git a/sakura_core/dlg/CDlgTagJumpList.cpp b/sakura_core/dlg/CDlgTagJumpList.cpp index 0f7edae7fe..abb29034bf 100644 --- a/sakura_core/dlg/CDlgTagJumpList.cpp +++ b/sakura_core/dlg/CDlgTagJumpList.cpp @@ -522,9 +522,7 @@ BOOL CDlgTagJumpList::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) bRet = FALSE; //for set focus } - m_comboDel = SComboBoxItemDeleter(); - m_comboDel.pRecent = &m_cRecentKeyword; - SetComboBoxDeleter(hwndKey, &m_comboDel); + SetComboBoxDeleter(hwndKey, &m_cRecentKeyword); /* 基底クラスメンバ */ CDialog::OnInitDialog( GetHwnd(), wParam, lParam ); diff --git a/sakura_core/dlg/CDlgTagJumpList.h b/sakura_core/dlg/CDlgTagJumpList.h index d540610381..7e60ea27d3 100644 --- a/sakura_core/dlg/CDlgTagJumpList.h +++ b/sakura_core/dlg/CDlgTagJumpList.h @@ -165,7 +165,6 @@ class CDlgTagJumpList final : public CDialog BOOL m_bOldTagJumpICase; //!< 前回の大文字小文字を同一視 BOOL m_bOldTagJumpPartialMatch; //!< 前回の文字列の途中にマッチ - SComboBoxItemDeleter m_comboDel; CRecentTagjumpKeyword m_cRecentKeyword; POINT m_ptDefaultSize; diff --git a/sakura_core/window/CMainToolBar.cpp b/sakura_core/window/CMainToolBar.cpp index eb6a14c001..3ae54c4031 100644 --- a/sakura_core/window/CMainToolBar.cpp +++ b/sakura_core/window/CMainToolBar.cpp @@ -327,9 +327,7 @@ void CMainToolBar::CreateToolBar( void ) //検索ボックスを更新 // 関数化 2010/6/6 Uchi AcceptSharedSearchKey(); - m_comboDel = SComboBoxItemDeleter(); // 再表示用の初期化 - m_comboDel.pRecent = &m_cRecentSearch; - CDialog::SetComboBoxDeleter(m_hwndSearchBox, &m_comboDel); + CDialog::SetComboBoxDeleter(m_hwndSearchBox, &m_cRecentSearch); // コンボボックスの位置と幅を調整する CMyRect rcCombo; diff --git a/sakura_core/window/CMainToolBar.h b/sakura_core/window/CMainToolBar.h index b27ff43a1b..287e3744f3 100644 --- a/sakura_core/window/CMainToolBar.h +++ b/sakura_core/window/CMainToolBar.h @@ -76,7 +76,6 @@ class CMainToolBar{ //フォント HFONT m_hFontSearchBox; //!< 検索コンボボックスのフォント - SComboBoxItemDeleter m_comboDel; CRecentSearch m_cRecentSearch; CImageListMgr* m_pcIcons; }; From a76065b13ef9fb3f0f424e279a9ad9a7026270c6 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Wed, 4 Nov 2020 01:56:02 +0900 Subject: [PATCH 0258/1024] =?UTF-8?q?=E3=83=AA=E3=82=BD=E3=83=BC=E3=82=B9?= =?UTF-8?q?=E3=82=A8=E3=83=87=E3=82=A3=E3=82=BF=E3=81=A7=E7=B7=A8=E9=9B=86?= =?UTF-8?q?=E4=B8=8D=E5=8F=AF=E3=81=AE=E3=82=82=E3=81=AE=E3=82=92.rc2?= =?UTF-8?q?=E3=81=AB=E5=88=86=E9=9B=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura/sakura.vcxproj | 1 + sakura/sakura.vcxproj.filters | 3 + sakura_core/sakura_rc.h | 1696 ++++--- sakura_core/sakura_rc.rc | 8273 ++++++++++++++++----------------- sakura_core/sakura_rc.rc2 | 117 + 5 files changed, 5032 insertions(+), 5058 deletions(-) create mode 100644 sakura_core/sakura_rc.rc2 diff --git a/sakura/sakura.vcxproj b/sakura/sakura.vcxproj index aea8837789..0b12175597 100644 --- a/sakura/sakura.vcxproj +++ b/sakura/sakura.vcxproj @@ -600,6 +600,7 @@ + diff --git a/sakura/sakura.vcxproj.filters b/sakura/sakura.vcxproj.filters index 205b9f2b03..bdaa5171d5 100644 --- a/sakura/sakura.vcxproj.filters +++ b/sakura/sakura.vcxproj.filters @@ -1156,6 +1156,9 @@ Resource Files + + Other Files + diff --git a/sakura_core/sakura_rc.h b/sakura_core/sakura_rc.h index 5d6f8d2af8..dfe0a09378 100644 --- a/sakura_core/sakura_rc.h +++ b/sakura_core/sakura_rc.h @@ -1,856 +1,840 @@ -/*! @file */ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by sakura_rc.rc -// -#define ID_RC_TYPE_INI 100 -#define IDR_MENU1 102 -#define IDR_TRAYMENU_L 103 -#define IDD_FIND 110 -#define IDD_ABOUT 111 -#define IDD_JUMP 112 -#define IDD_FUNCLIST 113 -#define IDD_GREP 114 -#define IDD_GREPRUNNING 115 -#define IDD_REPLACE 116 -#define IDD_REPLACERUNNING 117 -#define IDD_PROPERTY_FILE 118 -#define IDD_INPUT1 119 -#define IDD_COMPARE 120 -#define IDD_PRINTPREVIEWBAR 121 -#define IDD_PRINTSETTING 122 -#define IDD_EXITING 123 -//#define IDD_DEBUG 124 -#define IDD_EXEC 125 -#define IDD_EXECRUNNING 126 -#define IDD_HOKAN 127 -#define IDD_PRINTING 128 -//#define IDD_PRINTPAGE 129 -#define IDD_FILEOPEN 130 -#define IDD_FILEUPDATEQUERY 131 -#define IDD_FAVORITE 132 -#define IDD_TAGJUMPLIST 133 -#define IDD_TAG_MAKE 134 -#define IDD_OPERATIONRUNNING 135 -#define IDD_DIFF 136 -#define IDD_CTRLCODE 137 -#define IDD_MACRORUNNING 138 -#define IDD_SETCHARSET 139 -#define IDD_GREP_REPLACE 140 -#define IDD_WINLIST 141 -#define IDB_MYTOOL 200 -#define IDB_SCROLL_CENTER 201 -#define IDB_SCROLL_VERTICAL 202 -#define IDB_SCROLL_HORIZONTAL 203 -#define IDI_ICON_STD 210 -//#define IDI_ICON_DEBUG 211 -#define IDI_ICON_GREP 212 -#define IDI_PRINTER 215 -#define IDC_CURSOR_COPYARROW 220 -//#define IDC_CURSOR_HAND 221 -#define IDC_CURSOR_MOVEARROW 222 -#define IDC_CURSOR_RVARROW 223 -#define IDC_CURSOR_ISEARCH_F 224 -#define IDC_CURSOR_ISEARCH_B 225 -//#define IDC_CURSOR_TAB_LEFT 226 -//#define IDC_CURSOR_TAB_RIGHT 227 -#define IDC_CURSOR_TAB_SEPARATE 228 -#define IDC_CURSOR_TAB_JOIN 229 -#define IDC_CURSOR_AUTOSCROLL_CENTER 230 -#define IDC_CURSOR_AUTOSCROLL_VERTICAL 231 -#define IDC_CURSOR_AUTOSCROLL_HORIZONTAL 232 -#define IDC_CURSOR_AUTOSCROLL_UP 233 -#define IDC_CURSOR_AUTOSCROLL_DOWN 234 -#define IDC_CURSOR_AUTOSCROLL_LEFT 235 -#define IDC_CURSOR_AUTOSCROLL_RIGHT 236 -#define IDC_CURSOR_AUTOSCROLL_UP_LEFT 237 -#define IDC_CURSOR_AUTOSCROLL_UP_RIGHT 238 -#define IDC_CURSOR_AUTOSCROLL_DOWN_LEFT 239 -#define IDC_CURSOR_AUTOSCROLL_DOWN_RIGHT 240 -#define IDC_BUTTON_PRINTERSELECT 1000 -#define IDC_CHK_LOHICASE 1001 -#define IDC_CHECK_INDENT 1002 -#define IDC_CHK_REGULAREXP 1003 -#define IDC_COMBO_INDENTLAYOUT 1004 -#define IDC_CHECK_INDENT_WSPACE 1005 -#define IDC_CHECK_STOPS_BOTH_ENDS_WHEN_SEARCH_WORD 1006 -#define IDC_CHECK_GTJW_RETURN 1007 -#define IDC_CHECK_STOPS_BOTH_ENDS_WHEN_SEARCH_PARAGRAPH 1008 -#define IDC_CHECK_RTRIM_PREVLINE 1009 -#define IDC_CHECK_FREECARET 1010 -#define IDC_BUTTON_CLEAR_MRU_FOLDER 1011 -#define IDC_BUTTON_RELEASE 1012 -#define IDC_COMBO_TEXT 1013 -#define IDC_COMBO_TEXT2 1014 -#define IDC_CHECK_GTJW_LDBLCLK 1015 -#define IDC_EDIT_MAXLINELEN 1016 -#define IDC_EDIT_CHARSPACE 1017 -#define IDC_SPIN_MAXLINELEN 1018 -#define IDC_SPIN_CHARSPACE 1019 -#define IDC_EDIT_LINESPACE 1020 -#define IDC_SPIN_LINESPACE 1021 -#define IDC_SPIN_REPEATEDSCROLLLINENUM 1022 -#define IDC_EDIT_TABVIEWSTRING 1023 -#define IDC_SPIN_TABSPACE 1024 -#define IDC_EDIT_TABSPACE 1025 -#define IDC_BUTTON_TEXTCOLOR 1026 -#define IDC_BUTTON_BACKCOLOR 1027 -#define IDC_STATIC_JRE32VER 1028 -#define IDC_COMBO_FILESHAREMODE 1029 -#define IDC_CHECK_bUneditableIfUnwritable 1030 -#define IDC_CHECK_NOMOVE_ACTIVATE_BY_MOUSE 1032 -#define IDC_EDIT_LINENUM 1033 -#define IDC_CHECK_BACKUP 1034 -#define IDC_CHECK_EXITCONFIRM 1035 -#define IDC_CHECK_PLSQL 1036 -#define IDC_CHECK_SHIFT 1037 -#define IDC_CHK_FROMTHISTEXT 1038 -#define IDC_CHECK_TOOLBARISFLAT 1039 -#define IDC_CHECK_RELOADWHENEXECUTE 1040 -#define IDC_CHECK_DOCICON 1041 -#define IDC_CHECK_LCPOS2 1042 -#define IDC_CHECK_SplitterWndHScroll 1043 -#define IDC_RADIO_BACKUP_TYPE1 1044 -#define IDC_RADIO_BACKUP_TYPE3 1045 -#define IDC_RADIO_OUTPUTMARKED 1046 -#define IDC_RADIO_ALLAREA 1047 -#define IDC_RADIO_CARETTYPE1 1048 -#define IDC_CHECK_LCPOS3 1049 -#define IDC_RADIO_FUNCKEYWND_PLACE2 1050 -#define IDC_CHECK_BACKUP_YEAR 1051 -#define IDC_CHECK_ALT 1052 -#define IDC_CHECK_DispTabIcon 1053 -#define IDC_CHECK_BACKUP_HOUR 1054 -#define IDC_CHECK_BACKUP_MIN 1055 -#define IDC_CHECK_BACKUP_SEC 1056 -#define IDC_CHECK_BACKUPDIALOG 1057 -#define IDC_CHECK_BACKUPFOLDER 1058 -#define IDC_CHECK_UNDERLINE 1059 -#define IDC_EDIT_INPUT1 1060 -#define IDC_EDIT_PROPERTY 1061 -#define IDC_EDIT_BACKUPFOLDER 1062 -#define IDC_EDIT_EXTHELP1 1063 -#define IDC_EDIT_PLSQL_E1 1064 -#define IDC_EDIT_BLOCKCOMMENT_FROM 1065 -#define IDC_EDIT_TYPENAME 1066 -#define IDC_BUTTON_BACKUP_FOLDER_REF 1067 -#define IDC_BUTTON_REPALCE 1068 -#define IDC_BUTTON_DELETE 1069 -#define IDC_BUTTON_DELKEYWORD 1070 -#define IDC_EDIT_EXTHTMLHELP 1071 -#define IDC_EDIT_TFORM 1072 -#define IDC_EDIT_BLOCKCOMMENT_FROM2 1073 -#define IDC_EDIT_FNAME_TO 1074 -#define IDC_CHECK_BACKUP_MONTH 1075 -#define IDC_BUTTON_INSERTSEPARATOR 1076 -#define IDC_BUTTON_ZOOMUP 1077 -#define IDC_EDIT_MIGEMO_DLL 1078 -#define IDC_CHECK_BACKUP_DAY 1079 -#define IDC_BUTTON_INSERTWRAP 1080 -#define IDC_EDIT_MIGEMO_DICT 1081 -#define IDC_CHECK_AUTOSAVE 1082 -#define IDC_CHECK_BACKUP_DUSTBOX 1083 -#define IDC_LIST_FL 1084 -#define IDC_CHECK_DispTOOLBAR 1085 -#define IDC_EDIT_AUTOBACKUP_INTERVAL 1086 -#define IDC_BUTTON_OPENHELP1 1087 -#define IDC_BUTTON_OPENEXTHTMLHELP 1088 -#define IDC_EDIT_REPEATEDSCROLLLINENUM 1089 -#define IDC_BUTTON_KEYWORDHELPFONT 1090 -#define IDC_BUTTON_HELP 1091 -#define IDC_BUTTON_OPENMDLL 1092 -#define IDC_BUTTON_OPENMDICT 1093 -//#define IDC_EDIT_TO 1094 -#define IDC_EDIT_BLOCKCOMMENT_TO 1095 -#define IDC_EDIT_BLOCKCOMMENT_TO2 1096 -#define IDC_EDIT_TYPEEXTS 1097 -#define IDC_EDIT_MARGINTY 1098 -#define IDC_EDIT_nRulerBottomSpace 1099 -#define IDC_EDIT_LINECOMMENT 1100 -#define IDC_EDIT_INDENTCHARS 1101 -#define IDC_EDIT_MAX_MRU_FOLDER 1102 -#define IDC_EDIT_MARGINBY 1103 -#define IDC_EDIT_nLineNumberRightSpace 1104 -#define IDC_EDIT_LINECOMMENT2 1105 -#define IDC_EDIT_MARGINLX 1106 -#define IDC_LIST_FUNC 1107 -#define IDC_EDIT_MARGINRX 1108 -#define IDC_COMBO_FUNCKIND 1109 -#define IDC_EDIT_DANSPACE 1110 -#define IDC_EDIT_LINECOMMENT3 1111 -#define IDC_LIST_KEY 1112 -#define IDC_CHECK_CTRL 1113 -#define IDC_CHECK_ADDCRLFWHENCOPY 1114 -#define IDC_COMBO_FILE 1115 -#define IDC_COMBO_nSortType 1116 -#define IDC_COMBO_FOLDER 1117 -#define IDC_STATIC_STC32 1118 -#define IDC_COMBO_SETTINGNAME 1119 -#define IDC_COMBO_PAPER 1120 -#define IDC_BUTTON_FOLDER 1121 -#define IDC_CHK_SUBFOLDER 1122 -#define IDC_STATIC_CURPATH 1123 -#define IDC_CHK_DEFAULTFOLDER 1124 -#define IDC_STATIC_HITCOUNT 1125 -#define IDC_EDIT_VER 1126 -#define IDC_LIST_ASSIGNEDKEYS 1127 -#define IDC_STATIC_MSG 1128 -#define IDC_RADIO_OUTPUTLINE 1129 -#define IDC_RADIO_SELECTEDAREA 1130 -#define IDC_BUTTON_REPALCEALL 1131 -#define IDC_BUTTON_SEARCHPREV 1132 -#define IDC_CHECK_CONSECUTIVEALL 1133 -#define IDC_BUTTON_SEARCHNEXT 1134 -#define IDC_LIST_RES 1135 -#define IDC_BUTTON_SETMARK 1136 -#define IDC_TREE_FL 1137 -#define IDC_BUTTON_ADD 1138 -#define IDC_BUTTON_INSERT 1139 -#define IDC_BUTTON_REGEX_INS 1140 -#define IDC_BUTTON_UP 1141 -#define IDC_BUTTON_DOWN 1142 -#define IDC_BUTTON_SAMEBKCOLOR 1143 -#define IDC_CHECK_REPEATEDSCROLLSMOOTH 1144 -#define IDC_BUTTON_SAMETEXTCOLOR 1145 -#define IDC_COMBO_CODE 1146 -#define IDC_RADIO_CARETTYPE0 1147 -#define IDC_COMBO_EOL 1148 -#define IDC_BUTTON_COPY 1149 -#define IDC_COMBO_STRINGLITERAL 1150 -#define IDC_CHECK_STRINGLINEONLY 1151 -#define IDC_LIST_TYPES 1152 -#define IDC_RADIO_OUTPUTSTYLE1 1153 -#define IDC_COMBO_PLSQLBLOCKS 1154 -#define IDC_COMBO_MRU 1155 -#define IDC_CHECK_KEYWORDCASE 1156 -#define IDC_COMBO_OPENFOLDER 1157 -#define IDC_BUTTON_ADDKEYWORD 1158 -#define IDC_BUTTON_IMPORT 1159 -#define IDC_BUTTON_EXPORT 1160 -#define IDC_BUTTON_ADDSET 1161 -#define IDC_BUTTON_EDITKEYWORD 1162 -#define IDC_BUTTON_DELSET 1163 -#define IDC_COMBO_SET 1164 -#define IDC_LIST_KEYWORD 1165 -#define IDC_SPIN_MAX_MRU_FILE 1166 -#define IDC_SPIN_MAX_MRU_FOLDER 1167 -#define IDC_SPIN_nDropFileNumMax 1168 -#define IDC_SPIN_nRulerBottomSpace 1169 -#define IDC_EDIT_MAX_MRU_FILE 1170 -#define IDC_SPIN_PLSQL_E1 1171 -#define IDC_SPIN_LCColNum2 1172 -#define IDC_SPIN_nLineNumberRightSpace 1173 -#define IDC_BUTTON_CLEAR_MRU_FILE 1174 -#define IDC_SPIN_LCColNum3 1175 -#define IDC_COMBO_MENU 1176 -#define IDC_RADIO_FUNCKEYWND_PLACE1 1177 -#define IDC_CHECK_DispFUNCKEYWND 1178 -#define IDC_CHECK_NOTIFYNOTFOUND 1179 -#define IDC_EDIT_MIDASHIKIGOU 1180 -#define IDC_EDIT_INYOUKIGOU 1181 -#define IDC_PROGRESS_REPLACE 1182 -#define IDC_STATIC_KENSUU 1183 -#define IDC_STATIC_MYICON 1184 -#define IDC_EDIT_HOKANFILE 1185 -#define IDC_BUTTON_HOKANFILE_REF 1186 -#define IDC_COMBO_HOKAN_TYPE 1187 -#define IDC_LIST_COLORS 1188 -#define IDC_CHECK_DISP 1189 -#define IDC_CHECK_BOLD 1190 -#define IDC_RADIO_LINENUM_LAYOUT 1191 -#define IDC_RADIO_LINENUM_CRLF 1192 -#define IDC_STATIC_HAIKEI 1193 -#define IDC_COMBO_CHARSET 1194 -#define IDC_RADIO_LINETERMTYPE2 1195 -#define IDC_EDIT_LINETERMCHAR 1196 -#define IDC_RADIO_LINETERMTYPE0 1197 -#define IDC_RADIO_LINETERMTYPE1 1198 -#define IDC_LIST_FILES 1199 -#define IDC_STATIC_COMPARESRC 1200 -#define IDC_CHECK_HOKANLOHICASE 1201 -#define IDC_BUTTON_NEXTPAGE 1202 -#define IDC_BUTTON_ZOOMDOWN 1203 -#define IDC_BUTTON_PRINTSETTING 1204 -#define IDC_EDIT_LINECOMMENTPOS 1205 -#define IDC_BUTTON_PREVPAGE 1206 -#define IDC_EDIT_LINECOMMENTPOS2 1207 -#define IDC_SPIN_MARGINTY 1208 -#define IDC_EDIT_LINECOMMENTPOS3 1209 -#define IDC_SPIN_MARGINBY 1210 -#define IDC_SPIN_MARGINLX 1211 -#define IDC_SPIN_MARGINRX 1212 -#define IDC_SPIN_FONTHEIGHT 1213 -#define IDC_SPIN_DANSUU 1214 -#define IDC_EDIT_FOOT1 1215 -#define IDC_COMBO_FONT_HAN 1216 -#define IDC_COMBO_FONT_ZEN 1217 -#define IDC_SPIN_DANSPACE 1218 -#define IDC_EDIT_FONTHEIGHT 1219 -#define IDC_EDIT_DANSUU 1220 -#define IDC_CHECK_WORDWRAP 1221 -#define IDC_CHECK_LINENUMBER 1222 -#define IDC_CHECK_KINSOKUHEAD 1223 -#define IDC_BUTTON_EDITSETTINGNAME 1224 -#define IDC_CHECK_KINSOKUTAIL 1225 -#define IDC_STATIC_PAGENUM 1226 -#define IDC_CHECK_PS_KINSOKUHEAD 1227 -#define IDC_CHECK_KINSOKURET 1228 -#define IDC_STATIC_ZOOM 1229 -#define IDC_CHECK_PS_KINSOKUTAIL 1230 -#define IDC_CHECK_KINSOKUKUTO 1231 -#define IDC_CHECK_PS_KINSOKURET 1232 -#define IDC_CHECK_PS_KINSOKUKUTO 1233 -#define IDC_EDIT_HEAD1 1234 -#define IDC_STATIC_PRNDEV 1235 -#define IDC_STATIC_PAPER 1236 -#define IDC_EDIT_KEYSFUNC 1237 -#define IDC_BUTTON_ASSIGN 1238 -#define IDC_EDIT_HEAD2 1239 -#define IDC_EDIT_HEAD3 1240 -#define IDC_BUTTON_CURRENTFOLDER 1241 -//#define IDC_EDIT_DEBUG 1242 -#define IDC_EDIT_FOOT2 1243 -#define IDC_CHECK_USETRAYICON 1244 -#define IDC_EDIT_FOOT3 1245 -#define IDC_CHECK_STAYTASKTRAY 1246 -#define IDC_CHECK_DispSTATUSBAR 1247 -#define IDC_RADIO_OUTPUTSTYLE2 1248 -#define IDC_CHECK_DispTabWnd 1249 -#define IDC_STATIC_ENABLECOLUMNS 1250 -#define IDC_STATIC_ENABLELINES 1251 -#define IDC_HOTKEY_TRAYMENU 1252 -#define IDC_CHECK_ENABLEUNMODIFIEDOVERWRITE 1253 -#define IDC_CHECK_DRAGDROP 1254 -#define IDC_CHECK_DROPSOURCE 1255 -#define IDC_CHECK_COPYnDISABLESELECTEDAREA 1256 -#define IDC_CHECK_HTMLHELPISSINGLE 1257 -#define IDC_CHECK_bEnableLineModePaste 1258 -#define IDC_CHECK_bSelectClickedURL 1259 -#define IDC_EDIT_nRulerHeight 1260 -#define IDC_CHECK_bEnableNoSelectCopy 1261 -#define IDC_CHECK_bGrepExitConfirm 1262 -#define IDC_CHECK_TILE_H 1263 -#define IDC_CHECK_bDropFileAndClose 1264 -#define IDC_EDIT_nDropFileNumMax 1265 -#define IDC_CHECK_bCheckFileTimeStamp 1266 -#define IDC_CHECK_bNotOverWriteCRLF 1267 -#define IDC_COMBO_OUTLINES 1268 -#define IDC_COMBO_SMARTINDENT 1269 -#define IDC_BUTTON_REFERENCE 1270 -#define IDC_COMBO_IMESTATE 1271 -#define IDC_CHECK_bAutoCloseDlgFind 1272 -#define IDC_COMBO_IMESWITCH 1273 -#define IDC_CHECK_bScrollBarHorz 1274 -#define IDC_CHECK_bAutoCloseDlgFuncList 1275 -#define IDC_CHECK_bAutoCloseDlgReplace 1276 -#define IDC_CHECK_bMarkUpBlankLineEnable 1277 -#define IDC_CHECK_bFunclistSetFocusOnJump 1278 -#define IDC_STATIC_CURFILE 1279 -#define IDC_PROGRESS 1280 -#define IDC_LIST_WORDS 1281 -#define IDC_CHECK_m_bHokanKey_RETURN 1282 -#define IDC_CHECK_m_bHokanKey_TAB 1283 -#define IDC_CHECK_m_bHokanKey_RIGHT 1284 -#define IDC_RADIO_DFORM_0 1285 -#define IDC_RADIO_DFORM_1 1286 -#define IDC_EDIT_DFORM_EX 1287 -#define IDC_RADIO_TFORM_0 1288 -#define IDC_RADIO_TFORM_1 1289 -#define IDC_EDIT_TFORM_EX 1290 -#define IDC_EDIT_DFORM 1291 -//#define IDC_RADIO_ALL 1292 -#define IDC_RADIO_PORTRAIT 1293 -#define IDC_RADIO_BACKUP_DATETYPE1 1294 -#define IDC_RADIO_REPLACE 1295 -#define IDC_RADIO_DIFF_FILE1 1296 -#define IDC_RADIO_DIFF_FILE2 1297 -#define IDC_RADIO_OUTLINEDEFAULT 1298 -//#define IDC_RADIO_FROMTO 1299 -#define IDC_RADIO_LANDSCAPE 1300 -#define IDC_RADIO_BACKUP_DATETYPE2 1301 -#define IDC_RADIO_INSERT 1302 -#define IDC_RADIO_OUTLINERULEFILE 1303 -#define IDC_RADIO_ADD 1304 -#define IDC_RADIO_DIFF_DST1 1305 -#define IDC_RADIO_DIFF_DST2 1306 -#define IDC_EDIT_BACKUP_3 1307 -#define IDC_MACROPATH 1308 -#define IDC_EDIT_TAG_MAKE_CMDLINE 1309 -#define IDC_EDIT_WX 1310 -#define IDC_EDIT_VERTLINE 1311 -#define IDC_COMBO_m_szCommand 1312 -#define IDC_EDIT_WY 1313 -#define IDC_CHECK_GETSTDOUT 1314 -#define IDC_EDIT_SX 1315 -#define IDC_STATIC_CMD 1316 -#define IDC_EDIT_SY 1317 -#define IDC_STATIC_JOBNAME 1318 -#define IDC_STATIC_PROGRESS 1319 -//#define IDC_EDIT_FROM 1320 -//#define IDC_STATIC_ALL 1321 -#define IDC_CHECK_bMenuIcon 1322 -#define IDC_LABEL_BACKUP_3 1323 -#define IDC_LABEL_BACKUP_4 1324 -#define IDC_LABEL_AUTOSAVE 1325 -#define IDC_LABEL_AUTOSAVE2 1326 -#define IDC_LABEL_AUTOSAVE3 1327 -#define IDC_LABEL_AUTOSAVE4 1328 -#define IDC_LABEL_MENUFUNC 1329 -#define IDC_LABEL_MENUFUNCKIND 1330 -#define IDC_LABEL_MENU 1331 -#define IDC_LABEL_MENUCHOICE 1332 -#define IDC_LABEL_MENUKEYCHANGE 1333 -#define IDC_LABEL_TOOLBAR 1334 -#define IDC_LABEL_MENUNAME 1335 -#define IDC_LABEL_KEYKIND 1336 -#define IDC_LABEL_FUNCtoKEY 1337 -#define IDC_LABEL_KEYtoFUNC 1338 -#define IDC_LABEL_LINETERMCHAR 1339 -#define IDC_LABEL_DFORM 1340 -#define IDC_LABEL_TFORM 1341 -//#define IDC_LABEL_FROM 1342 -//#define IDC_LABEL_TO 1343 -#define IDC_LABEL_PLSQL1 1344 -#define IDC_LABEL_PLSQL2 1345 -#define IDC_LABEL_PLSQL3 1346 -#define IDC_SPIN_BACKUP_GENS 1347 -#define IDC_SPIN_AUTOBACKUP_INTERVAL 1348 -#define IDC_SPIN_nRulerHeight 1349 -#define IDC_CHECK_BACKUP_RETAINEXT 1350 -#define IDC_SPIN_LINENUM 1351 -#define IDC_LANEL_NOTE 1352 -#define IDC_CHECK_RestoreCurPosition 1353 -#define IDC_STATIC_URL_CAPTION 1354 -#define IDC_STATIC_URL_UR 1355 -#define IDC_CHECK_AutoMIMEDecode 1356 -#define IDC_EDIT_MENUNAME 1357 -#define IDC_CHECK_RestoreBookmarks 1358 -#define IDC_BUTTON_TEMPCHANGE 1359 -#define IDC_STATIC_EOL 1360 -#define IDC_BUTTON_JUMP 1361 -#define IDC_CHECK_LCPOS 1362 -#define IDC_SPIN_LCColNum 1363 -#define IDC_LABEL_LCPOS 1364 -#define IDC_LABEL_LCPOS2 1365 -#define IDC_LABEL_LCPOS3 1366 -#define IDC_MACRO_REG 1367 -#define IDC_COMBO_MACROID 1368 -#define IDC_BUTTON_REGEX_TOP 1369 -#define IDC_BUTTON_REGEX_LAST 1370 -#define IDC_MACROLIST 1371 -#define IDC_MACRONAME 1372 -#define IDC_EDIT_ABOUT 1373 -#define IDC_CHECK_SplitterWndVScroll 1374 -#define IDC_BUTTON_REGEX_UPD 1375 -#define IDC_CHK_WORD 1376 -#define IDC_BUTTON_REGEX_DEL 1377 -#define IDC_CHECK_SameTabWidth 1378 -#define IDC_MACRODIR 1379 -#define IDC_MACRODIRREF 1380 -#define IDC_BUTTON_MENUNAME 1381 -#define IDC_EDIT_REGEX 1382 -#define IDC_CHECK_REGEX 1383 -#define IDC_LIST_REGEX 1384 -#define IDC_COMBO_REGEX_COLOR 1385 -#define IDC_LABEL_REGEX_COLOR 1386 -#define IDC_LABEL_REGEX_KEYWORD 1387 -#define IDC_BUTTON_REGEX_UP 1388 -#define IDC_BUTTON_REGEX_DOWN 1389 -#define IDC_BUTTON_REGEX_ADD 1390 -#define IDC_BUTTON_REGEX_IMPORT 1391 -#define IDC_BUTTON_REGEX_EXPORT 1392 -#define IDC_FRAME_REGEX 1393 -#define IDC_LABEL_REGEX_VERSION 1394 -#define IDC_CHECK_INS_SPACE 1395 -#define IDC_CHK_PASTE 1396 -#define IDC_CHECK_SEARCHALL 1397 -#define IDC_EDIT_TYPEEXTHELP 1398 -#define IDC_EDIT_TYPEEXTHTMLHELP 1399 -#define IDC_BUTTON_TYPEOPENHELP 1400 -#define IDC_BUTTON_TYPEOPENEXTHTMLHELP 1401 -#define IDC_CHECK_TYPEHTMLHELPISSINGLE 1402 -#define IDC_CHECK_DispTabWndMultiWin 1403 -#define IDC_EDIT_OUTLINERULEFILE 1404 -#define IDC_BUTTON_RULEFILE_REF 1405 -#define IDC_EDIT_KINSOKUHEAD 1406 -#define IDC_STATIC_DIFF_SRC 1407 -#define IDC_EDIT_KINSOKUTAIL 1408 -#define IDC_EDIT_DIFF_DST 1409 -#define IDC_BUTTON_DIFF_DST 1410 -#define IDC_SPIN_FUNCKEYWND_GROUPNUM 1411 -#define IDC_CHECK_DIFF_OPT_CASE 1412 -#define IDC_EDIT_FUNCKEYWND_GROUPNUM 1413 -#define IDC_CHECK_DIFF_OPT_SPACE 1414 -#define IDC_CHECK_DIFF_OPT_SPCCHG 1415 -#define IDC_STATIC_nSortType 1416 -#define IDC_BTN_RELOAD 1417 -#define IDC_CHECK_DIFF_OPT_BLINE 1418 -#define IDC_CHECK_DIFF_OPT_TABSPC 1419 -#define IDC_BTN_NOTIFYONLY 1420 -#define IDC_FRAME_DIFF_FILE12 1421 -#define IDC_LIST_DIFF_FILES 1422 -#define IDC_FILEUPDATEMSG 1423 -#define IDC_FRAME_DIFF_DST 1424 -#define IDC_LIST_CTRLCODE 1425 -#define IDC_BTN_NOSUPERVISION 1426 -#define IDC_BTN_CLOSE 1427 -#define IDC_UPDATEDFILENAME 1428 -#define IDC_QUERYRELOADMSG 1429 -#define IDC_BUTTON_FNAME_TOP 1430 -#define IDC_BUTTON_FNAME_UP 1431 -#define IDC_BUTTON_FNAME_DOWN 1432 -#define IDC_BUTTON_FNAME_LAST 1433 -#define IDC_BUTTON_FNAME_INS 1434 -#define IDC_BUTTON_FNAME_ADD 1435 -#define IDC_BUTTON_FNAME_UPD 1436 -#define IDC_BUTTON_FNAME_DEL 1437 -#define IDC_LIST_FNAME 1438 -#define IDC_EDIT_FNAME_FROM 1439 -#define IDC_CHECK_TAB_ARROW 1440 -#define IDC_TAB_FAVORITE 1441 -#define IDC_LIST_FAVORITE_FILE 1442 -#define IDC_LIST_FAVORITE_FOLDER 1443 -#define IDC_LIST_FAVORITE_GREP_FILE 1444 -#define IDC_LIST_FAVORITE_GREP_FOLDER 1445 -#define IDC_LIST_FAVORITE_REPLACE 1446 -#define IDC_LIST_FAVORITE_SEARCH 1447 -#define IDC_LIST_FAVORITE_CMD 1448 -#define IDC_BUTTON_CLEAR 1449 -#define IDC_LIST_TAGJUMP 1450 -#define IDC_WINCAPTION_ACTIVE 1451 -#define IDC_WINCAPTION_INACTIVE 1452 -#define IDC_CHECK_HOKANBYFILE 1453 -#define IDC_BUTTON_TAG_MAKE_REF 1454 -#define IDC_TABWND_CAPTION 1455 -#define IDC_CHECK_TAG_MAKE_RECURSE 1456 -#define IDC_EDIT_TAG_MAKE_FOLDER 1457 -#define IDC_FRAME_SEARCH_MSG 1458 -#define IDC_CHECK_DIFF_EXEC_STATE 1459 -#define IDC_STATIC_FAVORITE_MSG 1460 -#define IDC_CHECK_REALTIMEVIEW 1461 -#define IDC_CHECK_BOM 1462 -#define IDC_CHECK_GREPREALTIME 1463 -#define IDC_RADIO_WINSIZE_DEF 1464 -#define IDC_RADIO_WINSIZE_SAVE 1465 -#define IDC_RADIO_WINSIZE_SET 1466 -#define IDC_SPIN_WX 1467 -#define IDC_SPIN_WY 1468 -#define IDC_RADIO_WINPOS_DEF 1469 -#define IDC_RADIO_WINPOS_SAVE 1470 -#define IDC_RADIO_WINPOS_SET 1471 -#define IDC_SPIN_SX 1472 -#define IDC_SPIN_SY 1473 -#define IDC_COMBO_WINTYPE 1474 -#define IDC_BUTTON_WINSIZE 1475 -#define IDC_CHECK_QueryIfCodeChange 1476 -#define IDC_CHECK_AlertIfFileNotExist 1477 -#define IDC_COMBO1 1478 -#define IDC_COMBO2 1479 -#define IDC_COMBO3 1480 -#define IDC_COMBO4 1481 -#define IDC_COMBO5 1482 -#define IDC_COMBO6 1483 -#define IDC_COMBO7 1484 -#define IDC_COMBO8 1485 -#define IDC_COMBO9 1486 -#define IDC_COMBO10 1487 -#define IDC_BUTTON_KEYWORD_SELECT 1488 -#define IDC_STATIC_KEYWORD_COUNT 1489 -#define IDC_BUTTON_KEYSETRENAME 1490 -#define IDC_BUTTON_KEYCLEAN 1491 -#define IDC_KEYWORD 1492 -#define IDC_STATIC_KEYWORD 1493 -#define IDC_CHECK_ICASE 1494 -#define IDC_CHECK_ANYWHERE 1495 -#define IDC_EDIT_BACKUPFILE 1496 -#define IDC_CHECK_BACKUP_FOLDER_RM 1497 -#define IDC_CHECK_BACKUP_ADVANCED 1498 -#define IDC_RADIO_BACKUP_DATETYPE1A 1499 -#define IDC_RADIO_BACKUP_DATETYPE2A 1500 -#define IDC_LABEL_BACKUP_HELP2 1501 -#define IDC_CHECK_MEMDC 1502 -#define IDC_STATIC_COLOR 1503 -#define IDC_BUTTON_SELALL 1504 -#define IDC_BUTTON_SELNOTING 1505 -#define IDC_LIST_ITEMINFO 1506 -#define IDC_CHECK_NoFilterSaveNew 1507 -#define IDC_CHECK_NoFilterSaveFile 1508 -#define IDC_CHECK_CLOSEALLCONFIRM 1509 -#define IDC_CHECK_ANTIALIAS 1510 -#define IDC_CHECK_RetainEmptyWindow 1511 -#define IDC_BUTTON_DIRECTPAGE 1512 -#define IDC_CHECK_CloseOneWin 1513 -#define IDC_CHECK_bCaretTextForSearch 1514 -#define IDC_CHECK_ChgWndByWheel 1515 -#define IDC_LABEL_REGEXP 1516 -#define IDC_EDIT_REGEXPLIB 1517 -#define IDC_LABEL_REGEXP_VER 1518 -#define IDC_COMBO_CODE_GET 1519 -#define IDC_COMBO_CODE_SEND 1520 -#define IDC_CHECK_DISP_UNICODE_IN_SJIS 1521 -#define IDC_CHECK_DISP_UNICODE_IN_JIS 1522 -#define IDC_CHECK_DISP_UNICODE_IN_EUC 1523 -#define IDC_CHECK_DISP_UTF8_CODEPOINT 1524 -#define IDC_CHECK_DISP_SP_CODEPOINT 1525 -#define IDC_RADIO_OUTPUT 1526 -#define IDC_RADIO_EDITWINDOW 1527 -#define IDC_CHECK_SENDSTDIN 1528 -#define IDC_CHECK_SortTabList 1529 -#define IDC_COMBO_WRAPMETHOD 1530 -#define IDC_FRAME_KEYHELP 1531 -#define IDC_LIST_KEYHELP 1532 -#define IDC_LABEL_KEYHELP_KEYWORD 1533 -#define IDC_EDIT_KEYHELP 1534 -#define IDC_LABEL_KEYHELP_TITLE 1535 -#define IDC_BUTTON_KEYHELP_INS 1536 -#define IDC_BUTTON_KEYHELP_UPD 1537 -#define IDC_BUTTON_KEYHELP_DEL 1538 -#define IDC_BUTTON_KEYHELP_TOP 1539 -#define IDC_BUTTON_KEYHELP_UP 1540 -#define IDC_BUTTON_KEYHELP_DOWN 1541 -#define IDC_BUTTON_KEYHELP_LAST 1542 -#define IDC_BUTTON_KEYHELP_IMPORT 1543 -#define IDC_BUTTON_KEYHELP_EXPORT 1544 -#define IDC_LABEL_KEYHELP_ABOUT 1545 -#define IDC_CHECK_KEYHELP 1546 -#define IDC_LABEL_KEYHELP_PRIOR 1547 -#define IDC_BUTTON_KEYHELP_REF 1548 -#define IDC_CHECK_KEYHELP_ALLSEARCH 1549 -#define IDC_CHECK_KEYHELP_KEYDISP 1550 -#define IDC_CHECK_KEYHELP_PREFIX 1551 -#define IDC_SPIN_ALERT_FILESIZE 1552 -#define IDC_EDIT_ALERT_FILESIZE 1553 -#define IDC_CHECK_ALERT_IF_LARGEFILE 1554 -#define IDC_COMBO_WHEEL_HSCROLL 1555 -#define IDC_COMBO_WHEEL_PAGESCROLL 1556 -#define IDC_COMBO_DEFAULT_CODETYPE 1557 -#define IDC_CHECK_PRIOR_CESU8 1558 -#define IDC_CHECK_DISP_SELCOUNT_BY_BYTE 1559 -#define IDC_EDIT_KINSOKUKUTO 1560 -//#define IDC_CHECK_ACCELTBL_EACHWIN 1561 -#define IDC_CHECK_MacroOnOpened 1562 -#define IDC_CHECK_MacroOnTypeChanged 1563 -#define IDC_CHECK_MacroOnSave 1564 -#define IDC_PLUGINLIST 1565 -#define IDC_CHECK_PluginEnable 1566 -#define IDC_PLUGIN_SearchNew 1567 -#define IDC_PLUGIN_Remove 1568 -#define IDC_LABEL_PLUGIN_Description 1569 -#define IDC_LABEL_PLUGIN_Author 1570 -#define IDC_LABEL_PLUGIN_Version 1571 -#define IDC_PLUGIN_OPTION 1572 -#define IDC_LIST_PLUGIN_OPTIONS 1573 -#define IDC_EDIT_PLUGIN_OPTION 1574 -#define IDC_EDIT_PLUGIN_OPTION_NUM 1575 -#define IDC_SPIN_PLUGIN_OPTION 1576 -#define IDC_CHECK_PLUGIN_OPTION 1577 -#define IDC_COMBO_PLUGIN_OPTION 1578 -#define IDC_BUTTON_INITIALIZE 1578 -#define IDC_RADIO_TYPE_TO 1579 -#define IDC_STATIC_TYPE_FILE 1580 -#define IDC_COMBO_COLORS 1581 -#define IDC_BUTTON_MENU 1582 -#define IDC_STATIC_BUTTONS 1582 -#define IDC_BUTTON_DELETE_NOFAVORATE 1583 -#define IDC_BUTTON_DELETE_NOTFOUND 1584 -#define IDC_BUTTON_DELETE_SELECTED 1585 -#define IDC_BUTTON_PREVTAG 1586 -#define IDC_BUTTON_NEXTTAG 1587 -#define IDC_STATIC_BASEDIR 1588 -#define IDC_TREE_RES 1589 -#define IDC_BUTTON_INSERT_NODE 1590 -#define IDC_BUTTON_INSERT_A 1591 -#define IDC_BUTTON_RIGHT 1592 -#define IDC_BUTTON_LEFT 1593 -#define IDC_CHECK_KEY_PARENTHESES 1594 -#define IDC_BUTTON_EXPAND 1595 -#define IDC_BUTTON_COLLAPSE 1596 -#define IDC_BUTTON_CHECK 1597 -#define IDC_CHECK_EXT_RMENU 1598 -#define IDC_CHECK_EXT_DBLCLICK 1599 -#define IDC_COMBO_DEFAULT_EOLTYPE 1600 -#define IDC_CHECK_DEFAULT_BOM 1601 -#define IDC_EDIT_BACKIMG_PATH 1602 -#define IDC_BUTTON_BACKIMG_PATH_SEL 1603 -#define IDC_COMBO_BACKIMG_POS 1604 -#define IDC_CHECK_BACKIMG_SCR_X 1605 -#define IDC_CHECK_BACKIMG_SCR_Y 1606 -#define IDC_CHECK_BACKIMG_REP_X 1607 -#define IDC_CHECK_BACKIMG_REP_Y 1608 -#define IDC_EDIT_BACKIMG_OFFSET_X 1609 -#define IDC_EDIT_BACKIMG_OFFSET_Y 1610 -#define IDC_TRACKBAR_BACKIMG_TRANSPARENCY 1734 -#define IDC_EDIT_BACKIMG_TRANSPARENCY 1735 -#define IDC_UPDOWN_BACKIMG_TRANSPARENCY 1736 -#define IDC_CHECK_CONVERTEOLPASTE 1611 -#define IDC_CHECK_OpenNewWin 1612 -#define IDC_BUTTON_TABFONT 1613 -#define IDC_MACROCANCELTIMER 1614 -#define IDC_PLUGIN_OpenFolder 1615 -#define IDC_CHECK_INHERIT_KEY_OTHER_VIEW 1616 -#define IDC_LIST_FAVORITE_EXCEPTMRU 1617 -#define IDC_BUTTON_ADD_FAVORITE 1618 -#define IDC_BTN_AUTOLOAD 1619 -#define IDC_LABEL_AUTOLOAD_DELAY 1620 -#define IDC_EDIT_AUTOLOAD_DELAY 1621 -#define IDC_SPIN_AUTOLOAD_DELAY 1622 -#define IDC_CHECK_KINSOKUHIDE 1623 -#define IDC_PLUGIN_README 1624 -#define IDC_PLUGIN_INST_ZIP 1625 -#define IDC_CHECK_HOKANBYKEYWORD 1626 -#define IDC_RADIO_CURDIR 1627 -#define IDC_RADIO_MRUDIR 1628 -#define IDC_RADIO_SELDIR 1629 -#define IDC_EDIT_FILEOPENDIR 1630 -#define IDC_BUTTON_FILEOPENDIR 1631 -#define IDC_CHECK_bOverWriteFixMode 1632 -#define IDC_STATIC_MOZI 1633 -#define IDC_BUTTON_TYPEFONT 1634 -#define IDC_CHECK_USETYPEFONT 1635 -#define IDC_STATIC_TABFONT 1636 -#define IDC_STATIC_KEYWORDHELPFONT 1637 -#define IDC_STATIC_FONTSIZE 1638 -#define IDC_CHECK_COLORPRINT 1639 -#define IDC_CHECK_USE_FONT_HEAD 1640 -#define IDC_BUTTON_FONT_HEAD 1641 -#define IDC_STATIC_FONT_HEAD 1642 -#define IDC_CHECK_USE_FONT_FOOT 1643 -#define IDC_BUTTON_FONT_FOOT 1644 -#define IDC_STATIC_FONT_FOOT 1645 -#define IDC_CHECK_CUR_DIR 1646 -#define IDC_COMBO_CUR_DIR 1647 -#define IDC_BUTTON_REFERENCE2 1648 -#define IDC_LIST_FAVORITE_CUR_DIR 1649 -#define IDC_EDIT_PLUGIN_OPTION_DIR 1650 -#define IDC_BUTTON_PLUGIN_OPTION_DIR 1651 -#define IDC_CHECK_STRINGENDLINE 1652 -#define IDC_CHECK_DispTabClose 1653 -#define IDC_CHECK_CHKENTERATEND 1654 -#define IDC_RADIO_OUTPUTSTYLE3 1655 -#define IDC_CHECK_FILE_ONLY 1656 -#define IDC_CHECK_BASE_PATH 1657 -#define IDC_CHECK_SEP_FOLDER 1658 -#define IDC_BUTTON_FOLDER_UP 1659 -#define IDC_CHECK_SUBMENU 1660 -#define IDC_COMBO_LANGUAGE 1661 -#define IDC_BUTTON_UP_TYPE 1662 -#define IDC_BUTTON_DOWN_TYPE 1663 -#define IDC_BUTTON_ADD_TYPE 1664 -#define IDC_BUTTON_DEL_TYPE 1665 -#define IDC_BUTTON_COPY_TYPE 1666 -#define IDC_RADIO_TYPE_ADD 1667 -#define IDC_STATIC_TYPEFONT 1668 -#define IDC_TextTabClose 1669 -#define IDC_TextTabCaption 1670 -#define IDC_CHECK_CP 1671 -#define IDC_CHECK_ENABLEEXTEOL 1672 -#define IDC_LIST_PROFILE 1673 -#define IDC_BUTTON_PROF_CREATE 1674 -#define IDC_BUTTON_PROF_RENAME 1675 -#define IDC_BUTTON_PROF_DELETE 1676 -#define IDC_CHECK_PROF_DEFSTART 1677 -#define IDC_BUTTON_PROF_DEFSET 1678 -#define IDC_BUTTON_PROF_DEFCLEAR 1679 -#define IDC_TAB_POSITION 1680 -#define IDC_COMBO_TAB_POSITION 1681 -#define IDC_CHECK_TAB_MULTILINE 1682 -#define IDC_CHECK_bOverWriteBoxDelete 1683 -#define IDC_CHECK_SHORTPATH 1684 -#define IDC_EDIT_SHORTMAXWIDTH 1685 -#define IDC_COMBO_TAGJUMP 1686 -#define IDC_COMBO_KEYWORD_TAGJUMP 1687 -#define IDC_SPIN_LINENUMWIDTH 1688 -#define IDC_EDIT_LINENUMWIDTH 1689 -#define IDC_CHK_BACKUP 1690 -#define IDC_STATIC_SETTFING_FROM 1691 -#define IDC_CHECK_LOADINI 1692 -#define IDC_EDIT_DEFINI 1693 -#define IDC_BUTTON_REF1 1694 -#define IDC_BUTTON_LOAD 1695 -#define IDC_RADIO_GREP 1696 -#define IDC_RADIO_FILE 1697 -#define IDC_RADIO_FOLDER 1698 -#define IDC_STATIC_PATH 1699 -#define IDC_EDIT_PATH 1700 -#define IDC_BUTTON_REF2 1701 -#define IDC_BUTTON_PATH_MENU 1702 -#define IDC_EDIT_LABEL 1703 -#define IDC_STATIC_FILE 1704 -#define IDC_EDIT_FILE 1705 -#define IDC_CHECK_HIDDEN 1706 -#define IDC_CHECK_READONLY 1707 -#define IDC_CHECK_SYSTEM 1708 -#define IDC_BUTTON_UPDATE 1709 -#define IDC_BUTTON_FILEADD 1710 -#define IDC_BUTTON_REPLACE 1711 -#define IDC_BUTTON_SETTING 1712 -#define IDC_STATIC_CHARCODE 1713 -#define IDC_PLUGIN_URL 1714 -#define IDC_RADIO_LINEDELETE 1715 -#define IDC_RADIO_NOHIT 1716 -#define IDC_CHECK_BOXSELECTLOCK 1717 -#define IDC_COMBO_TSV_MODE 1718 -#define IDC_CHECK_INDENTCPPSTR 1719 -#define IDC_CHECK_INDENTCPPCMT 1720 -#define IDC_CHECK_INDENTCPPUNDO 1721 -#define IDC_CHECK_DISP_COL_BY_CHAR 1722 -#define IDC_STATIC_MENU 1723 -#define IDC_LIST_WINDOW 1724 -#define IDC_BUTTON_SAVE 1725 -#define IDC_BUTTON_CLOSE 1726 -#define IDC_STATIC_URL_GIT 1727 -#define IDC_STATIC_GIT_CAPTION 1728 -#define IDC_STATIC_URL_CI_BUILD_CAPTION 1729 -#define IDC_STATIC_URL_CI_BUILD 1730 -#define IDC_STATIC_URL_GITHUB_CAPTION 1731 -#define IDC_STATIC_URL_GITHUB_COMMIT 1732 -#define IDC_STATIC_URL_GITHUB_PR 1733 -#define IDC_COMBO_EXCLUDE_FOLDER 1734 -#define IDC_COMBO_EXCLUDE_FILE 1735 -#define IDC_CHECK_VISTA_STYLE_FILEDIALOG 1737 -#define IDS_AUTHOR_PAGE 4054 -#define IDS_ABOUT_DESCRIPTION 4056 -#define IDD_TYPELIST 5000 -#define IDD_TYPE_ASCERTAIN 5001 -#define IDD_PROP_SCREEN 5100 -#define IDD_PROP_COLOR 5101 -#define IDD_PROP_SUPPORT 5102 -#define IDD_PROP_REGEX 5103 -#define IDD_PROP_KEYHELP 5104 -#define IDD_PROP_WINDOW 5105 -#define IDD_DIALOG_KEYWORD_SELECT 5110 -#define IDD_SAMECOLOR 5111 -#define IDD_PROP_GENERAL 5200 -#define IDD_PROP_WIN 5201 -#define IDD_PROP_TOOLBAR 5202 -#define IDD_PROP_TAB 5203 -#define IDD_PROP_STATUSBAR 5204 -#define IDD_PROP_EDIT 5205 -#define IDD_PROP_FILE 5206 -#define IDD_PROP_FNAME 5207 -#define IDD_PROP_BACKUP 5208 -#define IDD_PROP_FORMAT 5209 -#define IDD_PROP_GREP 5210 -#define IDD_PROP_KEYBIND 5211 -#define IDD_PROP_CUSTMENU 5212 -#define IDD_PROP_KEYWORD 5213 -#define IDD_PROP_HELPER 5214 -#define IDD_PROP_MACRO 5215 -#define IDD_PROP_PLUGIN 5216 -#define IDD_PROP_MAINMENU 5217 -#define IDD_WINPOSSIZE 5220 -#define IDD_PLUGIN_OPTION 5221 -#define IDD_PROFILEMGR 5222 -#define IDD_FILETREE 5223 -#define IDC_STATIC -1 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 230 -#define _APS_NEXT_COMMAND_VALUE 4057 -#define _APS_NEXT_CONTROL_VALUE 1738 -#define _APS_NEXT_SYMED_VALUE 104 -#endif -#endif +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ で生成されたインクルード ファイル。 +// sakura_rc.rc で使用 +// +#define ID_RC_TYPE_INI 100 +#define IDR_MENU1 102 +#define IDR_TRAYMENU_L 103 +#define IDD_FIND 110 +#define IDD_ABOUT 111 +#define IDD_JUMP 112 +#define IDD_FUNCLIST 113 +#define IDD_GREP 114 +#define IDD_GREPRUNNING 115 +#define IDD_REPLACE 116 +#define IDD_REPLACERUNNING 117 +#define IDD_PROPERTY_FILE 118 +#define IDD_INPUT1 119 +#define IDD_COMPARE 120 +#define IDD_PRINTPREVIEWBAR 121 +#define IDD_PRINTSETTING 122 +#define IDD_EXITING 123 +#define IDD_EXEC 125 +#define IDD_EXECRUNNING 126 +#define IDD_HOKAN 127 +#define IDD_PRINTING 128 +#define IDD_FILEOPEN 130 +#define IDD_FILEUPDATEQUERY 131 +#define IDD_FAVORITE 132 +#define IDD_TAGJUMPLIST 133 +#define IDD_TAG_MAKE 134 +#define IDD_OPERATIONRUNNING 135 +#define IDD_DIFF 136 +#define IDD_CTRLCODE 137 +#define IDD_MACRORUNNING 138 +#define IDD_SETCHARSET 139 +#define IDD_GREP_REPLACE 140 +#define IDD_WINLIST 141 +#define IDB_MYTOOL 200 +#define IDB_SCROLL_CENTER 201 +#define IDB_SCROLL_VERTICAL 202 +#define IDB_SCROLL_HORIZONTAL 203 +#define IDI_ICON_STD 210 +#define IDI_ICON_GREP 212 +#define IDI_PRINTER 215 +#define IDC_CURSOR_COPYARROW 220 +#define IDC_CURSOR_MOVEARROW 222 +#define IDC_CURSOR_RVARROW 223 +#define IDC_CURSOR_ISEARCH_F 224 +#define IDC_CURSOR_ISEARCH_B 225 +#define IDC_CURSOR_TAB_SEPARATE 228 +#define IDC_CURSOR_TAB_JOIN 229 +#define IDC_CURSOR_AUTOSCROLL_CENTER 230 +#define IDC_CURSOR_AUTOSCROLL_VERTICAL 231 +#define IDC_CURSOR_AUTOSCROLL_HORIZONTAL 232 +#define IDC_CURSOR_AUTOSCROLL_UP 233 +#define IDC_CURSOR_AUTOSCROLL_DOWN 234 +#define IDC_CURSOR_AUTOSCROLL_LEFT 235 +#define IDC_CURSOR_AUTOSCROLL_RIGHT 236 +#define IDC_CURSOR_AUTOSCROLL_UP_LEFT 237 +#define IDC_CURSOR_AUTOSCROLL_UP_RIGHT 238 +#define IDC_CURSOR_AUTOSCROLL_DOWN_LEFT 239 +#define IDC_CURSOR_AUTOSCROLL_DOWN_RIGHT 240 +#define IDC_BUTTON_PRINTERSELECT 1000 +#define IDC_CHK_LOHICASE 1001 +#define IDC_CHECK_INDENT 1002 +#define IDC_CHK_REGULAREXP 1003 +#define IDC_COMBO_INDENTLAYOUT 1004 +#define IDC_CHECK_INDENT_WSPACE 1005 +#define IDC_CHECK_STOPS_BOTH_ENDS_WHEN_SEARCH_WORD 1006 +#define IDC_CHECK_GTJW_RETURN 1007 +#define IDC_CHECK_STOPS_BOTH_ENDS_WHEN_SEARCH_PARAGRAPH 1008 +#define IDC_CHECK_RTRIM_PREVLINE 1009 +#define IDC_CHECK_FREECARET 1010 +#define IDC_BUTTON_CLEAR_MRU_FOLDER 1011 +#define IDC_BUTTON_RELEASE 1012 +#define IDC_COMBO_TEXT 1013 +#define IDC_COMBO_TEXT2 1014 +#define IDC_CHECK_GTJW_LDBLCLK 1015 +#define IDC_EDIT_MAXLINELEN 1016 +#define IDC_EDIT_CHARSPACE 1017 +#define IDC_SPIN_MAXLINELEN 1018 +#define IDC_SPIN_CHARSPACE 1019 +#define IDC_EDIT_LINESPACE 1020 +#define IDC_SPIN_LINESPACE 1021 +#define IDC_SPIN_REPEATEDSCROLLLINENUM 1022 +#define IDC_EDIT_TABVIEWSTRING 1023 +#define IDC_SPIN_TABSPACE 1024 +#define IDC_EDIT_TABSPACE 1025 +#define IDC_BUTTON_TEXTCOLOR 1026 +#define IDC_BUTTON_BACKCOLOR 1027 +#define IDC_STATIC_JRE32VER 1028 +#define IDC_COMBO_FILESHAREMODE 1029 +#define IDC_CHECK_bUneditableIfUnwritable 1030 +#define IDC_CHECK_NOMOVE_ACTIVATE_BY_MOUSE 1032 +#define IDC_EDIT_LINENUM 1033 +#define IDC_CHECK_BACKUP 1034 +#define IDC_CHECK_EXITCONFIRM 1035 +#define IDC_CHECK_PLSQL 1036 +#define IDC_CHECK_SHIFT 1037 +#define IDC_CHK_FROMTHISTEXT 1038 +#define IDC_CHECK_TOOLBARISFLAT 1039 +#define IDC_CHECK_RELOADWHENEXECUTE 1040 +#define IDC_CHECK_DOCICON 1041 +#define IDC_CHECK_LCPOS2 1042 +#define IDC_CHECK_SplitterWndHScroll 1043 +#define IDC_RADIO_BACKUP_TYPE1 1044 +#define IDC_RADIO_BACKUP_TYPE3 1045 +#define IDC_RADIO_OUTPUTMARKED 1046 +#define IDC_RADIO_ALLAREA 1047 +#define IDC_RADIO_CARETTYPE1 1048 +#define IDC_CHECK_LCPOS3 1049 +#define IDC_RADIO_FUNCKEYWND_PLACE2 1050 +#define IDC_CHECK_BACKUP_YEAR 1051 +#define IDC_CHECK_ALT 1052 +#define IDC_CHECK_DispTabIcon 1053 +#define IDC_CHECK_BACKUP_HOUR 1054 +#define IDC_CHECK_BACKUP_MIN 1055 +#define IDC_CHECK_BACKUP_SEC 1056 +#define IDC_CHECK_BACKUPDIALOG 1057 +#define IDC_CHECK_BACKUPFOLDER 1058 +#define IDC_CHECK_UNDERLINE 1059 +#define IDC_EDIT_INPUT1 1060 +#define IDC_EDIT_PROPERTY 1061 +#define IDC_EDIT_BACKUPFOLDER 1062 +#define IDC_EDIT_EXTHELP1 1063 +#define IDC_EDIT_PLSQL_E1 1064 +#define IDC_EDIT_BLOCKCOMMENT_FROM 1065 +#define IDC_EDIT_TYPENAME 1066 +#define IDC_BUTTON_BACKUP_FOLDER_REF 1067 +#define IDC_BUTTON_REPALCE 1068 +#define IDC_BUTTON_DELETE 1069 +#define IDC_BUTTON_DELKEYWORD 1070 +#define IDC_EDIT_EXTHTMLHELP 1071 +#define IDC_EDIT_TFORM 1072 +#define IDC_EDIT_BLOCKCOMMENT_FROM2 1073 +#define IDC_EDIT_FNAME_TO 1074 +#define IDC_CHECK_BACKUP_MONTH 1075 +#define IDC_BUTTON_INSERTSEPARATOR 1076 +#define IDC_BUTTON_ZOOMUP 1077 +#define IDC_EDIT_MIGEMO_DLL 1078 +#define IDC_CHECK_BACKUP_DAY 1079 +#define IDC_BUTTON_INSERTWRAP 1080 +#define IDC_EDIT_MIGEMO_DICT 1081 +#define IDC_CHECK_AUTOSAVE 1082 +#define IDC_CHECK_BACKUP_DUSTBOX 1083 +#define IDC_LIST_FL 1084 +#define IDC_CHECK_DispTOOLBAR 1085 +#define IDC_EDIT_AUTOBACKUP_INTERVAL 1086 +#define IDC_BUTTON_OPENHELP1 1087 +#define IDC_BUTTON_OPENEXTHTMLHELP 1088 +#define IDC_EDIT_REPEATEDSCROLLLINENUM 1089 +#define IDC_BUTTON_KEYWORDHELPFONT 1090 +#define IDC_BUTTON_HELP 1091 +#define IDC_BUTTON_OPENMDLL 1092 +#define IDC_BUTTON_OPENMDICT 1093 +#define IDC_EDIT_BLOCKCOMMENT_TO 1095 +#define IDC_EDIT_BLOCKCOMMENT_TO2 1096 +#define IDC_EDIT_TYPEEXTS 1097 +#define IDC_EDIT_MARGINTY 1098 +#define IDC_EDIT_nRulerBottomSpace 1099 +#define IDC_EDIT_LINECOMMENT 1100 +#define IDC_EDIT_INDENTCHARS 1101 +#define IDC_EDIT_MAX_MRU_FOLDER 1102 +#define IDC_EDIT_MARGINBY 1103 +#define IDC_EDIT_nLineNumberRightSpace 1104 +#define IDC_EDIT_LINECOMMENT2 1105 +#define IDC_EDIT_MARGINLX 1106 +#define IDC_LIST_FUNC 1107 +#define IDC_EDIT_MARGINRX 1108 +#define IDC_COMBO_FUNCKIND 1109 +#define IDC_EDIT_DANSPACE 1110 +#define IDC_EDIT_LINECOMMENT3 1111 +#define IDC_LIST_KEY 1112 +#define IDC_CHECK_CTRL 1113 +#define IDC_CHECK_ADDCRLFWHENCOPY 1114 +#define IDC_COMBO_FILE 1115 +#define IDC_COMBO_nSortType 1116 +#define IDC_COMBO_FOLDER 1117 +#define IDC_STATIC_STC32 1118 +#define IDC_COMBO_SETTINGNAME 1119 +#define IDC_COMBO_PAPER 1120 +#define IDC_BUTTON_FOLDER 1121 +#define IDC_CHK_SUBFOLDER 1122 +#define IDC_STATIC_CURPATH 1123 +#define IDC_CHK_DEFAULTFOLDER 1124 +#define IDC_STATIC_HITCOUNT 1125 +#define IDC_EDIT_VER 1126 +#define IDC_LIST_ASSIGNEDKEYS 1127 +#define IDC_STATIC_MSG 1128 +#define IDC_RADIO_OUTPUTLINE 1129 +#define IDC_RADIO_SELECTEDAREA 1130 +#define IDC_BUTTON_REPALCEALL 1131 +#define IDC_BUTTON_SEARCHPREV 1132 +#define IDC_CHECK_CONSECUTIVEALL 1133 +#define IDC_BUTTON_SEARCHNEXT 1134 +#define IDC_LIST_RES 1135 +#define IDC_BUTTON_SETMARK 1136 +#define IDC_TREE_FL 1137 +#define IDC_BUTTON_ADD 1138 +#define IDC_BUTTON_INSERT 1139 +#define IDC_BUTTON_REGEX_INS 1140 +#define IDC_BUTTON_UP 1141 +#define IDC_BUTTON_DOWN 1142 +#define IDC_BUTTON_SAMEBKCOLOR 1143 +#define IDC_CHECK_REPEATEDSCROLLSMOOTH 1144 +#define IDC_BUTTON_SAMETEXTCOLOR 1145 +#define IDC_COMBO_CODE 1146 +#define IDC_RADIO_CARETTYPE0 1147 +#define IDC_COMBO_EOL 1148 +#define IDC_BUTTON_COPY 1149 +#define IDC_COMBO_STRINGLITERAL 1150 +#define IDC_CHECK_STRINGLINEONLY 1151 +#define IDC_LIST_TYPES 1152 +#define IDC_RADIO_OUTPUTSTYLE1 1153 +#define IDC_COMBO_PLSQLBLOCKS 1154 +#define IDC_COMBO_MRU 1155 +#define IDC_CHECK_KEYWORDCASE 1156 +#define IDC_COMBO_OPENFOLDER 1157 +#define IDC_BUTTON_ADDKEYWORD 1158 +#define IDC_BUTTON_IMPORT 1159 +#define IDC_BUTTON_EXPORT 1160 +#define IDC_BUTTON_ADDSET 1161 +#define IDC_BUTTON_EDITKEYWORD 1162 +#define IDC_BUTTON_DELSET 1163 +#define IDC_COMBO_SET 1164 +#define IDC_LIST_KEYWORD 1165 +#define IDC_SPIN_MAX_MRU_FILE 1166 +#define IDC_SPIN_MAX_MRU_FOLDER 1167 +#define IDC_SPIN_nDropFileNumMax 1168 +#define IDC_SPIN_nRulerBottomSpace 1169 +#define IDC_EDIT_MAX_MRU_FILE 1170 +#define IDC_SPIN_PLSQL_E1 1171 +#define IDC_SPIN_LCColNum2 1172 +#define IDC_SPIN_nLineNumberRightSpace 1173 +#define IDC_BUTTON_CLEAR_MRU_FILE 1174 +#define IDC_SPIN_LCColNum3 1175 +#define IDC_COMBO_MENU 1176 +#define IDC_RADIO_FUNCKEYWND_PLACE1 1177 +#define IDC_CHECK_DispFUNCKEYWND 1178 +#define IDC_CHECK_NOTIFYNOTFOUND 1179 +#define IDC_EDIT_MIDASHIKIGOU 1180 +#define IDC_EDIT_INYOUKIGOU 1181 +#define IDC_PROGRESS_REPLACE 1182 +#define IDC_STATIC_KENSUU 1183 +#define IDC_STATIC_MYICON 1184 +#define IDC_EDIT_HOKANFILE 1185 +#define IDC_BUTTON_HOKANFILE_REF 1186 +#define IDC_COMBO_HOKAN_TYPE 1187 +#define IDC_LIST_COLORS 1188 +#define IDC_CHECK_DISP 1189 +#define IDC_CHECK_BOLD 1190 +#define IDC_RADIO_LINENUM_LAYOUT 1191 +#define IDC_RADIO_LINENUM_CRLF 1192 +#define IDC_STATIC_HAIKEI 1193 +#define IDC_COMBO_CHARSET 1194 +#define IDC_RADIO_LINETERMTYPE2 1195 +#define IDC_EDIT_LINETERMCHAR 1196 +#define IDC_RADIO_LINETERMTYPE0 1197 +#define IDC_RADIO_LINETERMTYPE1 1198 +#define IDC_LIST_FILES 1199 +#define IDC_STATIC_COMPARESRC 1200 +#define IDC_CHECK_HOKANLOHICASE 1201 +#define IDC_BUTTON_NEXTPAGE 1202 +#define IDC_BUTTON_ZOOMDOWN 1203 +#define IDC_BUTTON_PRINTSETTING 1204 +#define IDC_EDIT_LINECOMMENTPOS 1205 +#define IDC_BUTTON_PREVPAGE 1206 +#define IDC_EDIT_LINECOMMENTPOS2 1207 +#define IDC_SPIN_MARGINTY 1208 +#define IDC_EDIT_LINECOMMENTPOS3 1209 +#define IDC_SPIN_MARGINBY 1210 +#define IDC_SPIN_MARGINLX 1211 +#define IDC_SPIN_MARGINRX 1212 +#define IDC_SPIN_FONTHEIGHT 1213 +#define IDC_SPIN_DANSUU 1214 +#define IDC_EDIT_FOOT1 1215 +#define IDC_COMBO_FONT_HAN 1216 +#define IDC_COMBO_FONT_ZEN 1217 +#define IDC_SPIN_DANSPACE 1218 +#define IDC_EDIT_FONTHEIGHT 1219 +#define IDC_EDIT_DANSUU 1220 +#define IDC_CHECK_WORDWRAP 1221 +#define IDC_CHECK_LINENUMBER 1222 +#define IDC_CHECK_KINSOKUHEAD 1223 +#define IDC_BUTTON_EDITSETTINGNAME 1224 +#define IDC_CHECK_KINSOKUTAIL 1225 +#define IDC_STATIC_PAGENUM 1226 +#define IDC_CHECK_PS_KINSOKUHEAD 1227 +#define IDC_CHECK_KINSOKURET 1228 +#define IDC_STATIC_ZOOM 1229 +#define IDC_CHECK_PS_KINSOKUTAIL 1230 +#define IDC_CHECK_KINSOKUKUTO 1231 +#define IDC_CHECK_PS_KINSOKURET 1232 +#define IDC_CHECK_PS_KINSOKUKUTO 1233 +#define IDC_EDIT_HEAD1 1234 +#define IDC_STATIC_PRNDEV 1235 +#define IDC_STATIC_PAPER 1236 +#define IDC_EDIT_KEYSFUNC 1237 +#define IDC_BUTTON_ASSIGN 1238 +#define IDC_EDIT_HEAD2 1239 +#define IDC_EDIT_HEAD3 1240 +#define IDC_BUTTON_CURRENTFOLDER 1241 +#define IDC_EDIT_FOOT2 1243 +#define IDC_CHECK_USETRAYICON 1244 +#define IDC_EDIT_FOOT3 1245 +#define IDC_CHECK_STAYTASKTRAY 1246 +#define IDC_CHECK_DispSTATUSBAR 1247 +#define IDC_RADIO_OUTPUTSTYLE2 1248 +#define IDC_CHECK_DispTabWnd 1249 +#define IDC_STATIC_ENABLECOLUMNS 1250 +#define IDC_STATIC_ENABLELINES 1251 +#define IDC_HOTKEY_TRAYMENU 1252 +#define IDC_CHECK_ENABLEUNMODIFIEDOVERWRITE 1253 +#define IDC_CHECK_DRAGDROP 1254 +#define IDC_CHECK_DROPSOURCE 1255 +#define IDC_CHECK_COPYnDISABLESELECTEDAREA 1256 +#define IDC_CHECK_HTMLHELPISSINGLE 1257 +#define IDC_CHECK_bEnableLineModePaste 1258 +#define IDC_CHECK_bSelectClickedURL 1259 +#define IDC_EDIT_nRulerHeight 1260 +#define IDC_CHECK_bEnableNoSelectCopy 1261 +#define IDC_CHECK_bGrepExitConfirm 1262 +#define IDC_CHECK_TILE_H 1263 +#define IDC_CHECK_bDropFileAndClose 1264 +#define IDC_EDIT_nDropFileNumMax 1265 +#define IDC_CHECK_bCheckFileTimeStamp 1266 +#define IDC_CHECK_bNotOverWriteCRLF 1267 +#define IDC_COMBO_OUTLINES 1268 +#define IDC_COMBO_SMARTINDENT 1269 +#define IDC_BUTTON_REFERENCE 1270 +#define IDC_COMBO_IMESTATE 1271 +#define IDC_CHECK_bAutoCloseDlgFind 1272 +#define IDC_COMBO_IMESWITCH 1273 +#define IDC_CHECK_bScrollBarHorz 1274 +#define IDC_CHECK_bAutoCloseDlgFuncList 1275 +#define IDC_CHECK_bAutoCloseDlgReplace 1276 +#define IDC_CHECK_bMarkUpBlankLineEnable 1277 +#define IDC_CHECK_bFunclistSetFocusOnJump 1278 +#define IDC_STATIC_CURFILE 1279 +#define IDC_PROGRESS 1280 +#define IDC_LIST_WORDS 1281 +#define IDC_CHECK_m_bHokanKey_RETURN 1282 +#define IDC_CHECK_m_bHokanKey_TAB 1283 +#define IDC_CHECK_m_bHokanKey_RIGHT 1284 +#define IDC_RADIO_DFORM_0 1285 +#define IDC_RADIO_DFORM_1 1286 +#define IDC_EDIT_DFORM_EX 1287 +#define IDC_RADIO_TFORM_0 1288 +#define IDC_RADIO_TFORM_1 1289 +#define IDC_EDIT_TFORM_EX 1290 +#define IDC_EDIT_DFORM 1291 +#define IDC_RADIO_PORTRAIT 1293 +#define IDC_RADIO_BACKUP_DATETYPE1 1294 +#define IDC_RADIO_REPLACE 1295 +#define IDC_RADIO_DIFF_FILE1 1296 +#define IDC_RADIO_DIFF_FILE2 1297 +#define IDC_RADIO_OUTLINEDEFAULT 1298 +#define IDC_RADIO_LANDSCAPE 1300 +#define IDC_RADIO_BACKUP_DATETYPE2 1301 +#define IDC_RADIO_INSERT 1302 +#define IDC_RADIO_OUTLINERULEFILE 1303 +#define IDC_RADIO_ADD 1304 +#define IDC_RADIO_DIFF_DST1 1305 +#define IDC_RADIO_DIFF_DST2 1306 +#define IDC_EDIT_BACKUP_3 1307 +#define IDC_MACROPATH 1308 +#define IDC_EDIT_TAG_MAKE_CMDLINE 1309 +#define IDC_EDIT_WX 1310 +#define IDC_EDIT_VERTLINE 1311 +#define IDC_COMBO_m_szCommand 1312 +#define IDC_EDIT_WY 1313 +#define IDC_CHECK_GETSTDOUT 1314 +#define IDC_EDIT_SX 1315 +#define IDC_STATIC_CMD 1316 +#define IDC_EDIT_SY 1317 +#define IDC_STATIC_JOBNAME 1318 +#define IDC_STATIC_PROGRESS 1319 +#define IDC_CHECK_bMenuIcon 1322 +#define IDC_LABEL_BACKUP_3 1323 +#define IDC_LABEL_BACKUP_4 1324 +#define IDC_LABEL_AUTOSAVE 1325 +#define IDC_LABEL_AUTOSAVE2 1326 +#define IDC_LABEL_AUTOSAVE3 1327 +#define IDC_LABEL_AUTOSAVE4 1328 +#define IDC_LABEL_MENUFUNC 1329 +#define IDC_LABEL_MENUFUNCKIND 1330 +#define IDC_LABEL_MENU 1331 +#define IDC_LABEL_MENUCHOICE 1332 +#define IDC_LABEL_MENUKEYCHANGE 1333 +#define IDC_LABEL_TOOLBAR 1334 +#define IDC_LABEL_MENUNAME 1335 +#define IDC_LABEL_KEYKIND 1336 +#define IDC_LABEL_FUNCtoKEY 1337 +#define IDC_LABEL_KEYtoFUNC 1338 +#define IDC_LABEL_LINETERMCHAR 1339 +#define IDC_LABEL_DFORM 1340 +#define IDC_LABEL_TFORM 1341 +#define IDC_LABEL_PLSQL1 1344 +#define IDC_LABEL_PLSQL2 1345 +#define IDC_LABEL_PLSQL3 1346 +#define IDC_SPIN_BACKUP_GENS 1347 +#define IDC_SPIN_AUTOBACKUP_INTERVAL 1348 +#define IDC_SPIN_nRulerHeight 1349 +#define IDC_CHECK_BACKUP_RETAINEXT 1350 +#define IDC_SPIN_LINENUM 1351 +#define IDC_LANEL_NOTE 1352 +#define IDC_CHECK_RestoreCurPosition 1353 +#define IDC_STATIC_URL_CAPTION 1354 +#define IDC_STATIC_URL_UR 1355 +#define IDC_CHECK_AutoMIMEDecode 1356 +#define IDC_EDIT_MENUNAME 1357 +#define IDC_CHECK_RestoreBookmarks 1358 +#define IDC_BUTTON_TEMPCHANGE 1359 +#define IDC_STATIC_EOL 1360 +#define IDC_BUTTON_JUMP 1361 +#define IDC_CHECK_LCPOS 1362 +#define IDC_SPIN_LCColNum 1363 +#define IDC_LABEL_LCPOS 1364 +#define IDC_LABEL_LCPOS2 1365 +#define IDC_LABEL_LCPOS3 1366 +#define IDC_MACRO_REG 1367 +#define IDC_COMBO_MACROID 1368 +#define IDC_BUTTON_REGEX_TOP 1369 +#define IDC_BUTTON_REGEX_LAST 1370 +#define IDC_MACROLIST 1371 +#define IDC_MACRONAME 1372 +#define IDC_EDIT_ABOUT 1373 +#define IDC_CHECK_SplitterWndVScroll 1374 +#define IDC_BUTTON_REGEX_UPD 1375 +#define IDC_CHK_WORD 1376 +#define IDC_BUTTON_REGEX_DEL 1377 +#define IDC_CHECK_SameTabWidth 1378 +#define IDC_MACRODIR 1379 +#define IDC_MACRODIRREF 1380 +#define IDC_BUTTON_MENUNAME 1381 +#define IDC_EDIT_REGEX 1382 +#define IDC_CHECK_REGEX 1383 +#define IDC_LIST_REGEX 1384 +#define IDC_COMBO_REGEX_COLOR 1385 +#define IDC_LABEL_REGEX_COLOR 1386 +#define IDC_LABEL_REGEX_KEYWORD 1387 +#define IDC_BUTTON_REGEX_UP 1388 +#define IDC_BUTTON_REGEX_DOWN 1389 +#define IDC_BUTTON_REGEX_ADD 1390 +#define IDC_BUTTON_REGEX_IMPORT 1391 +#define IDC_BUTTON_REGEX_EXPORT 1392 +#define IDC_FRAME_REGEX 1393 +#define IDC_LABEL_REGEX_VERSION 1394 +#define IDC_CHECK_INS_SPACE 1395 +#define IDC_CHK_PASTE 1396 +#define IDC_CHECK_SEARCHALL 1397 +#define IDC_EDIT_TYPEEXTHELP 1398 +#define IDC_EDIT_TYPEEXTHTMLHELP 1399 +#define IDC_BUTTON_TYPEOPENHELP 1400 +#define IDC_BUTTON_TYPEOPENEXTHTMLHELP 1401 +#define IDC_CHECK_TYPEHTMLHELPISSINGLE 1402 +#define IDC_CHECK_DispTabWndMultiWin 1403 +#define IDC_EDIT_OUTLINERULEFILE 1404 +#define IDC_BUTTON_RULEFILE_REF 1405 +#define IDC_EDIT_KINSOKUHEAD 1406 +#define IDC_STATIC_DIFF_SRC 1407 +#define IDC_EDIT_KINSOKUTAIL 1408 +#define IDC_EDIT_DIFF_DST 1409 +#define IDC_BUTTON_DIFF_DST 1410 +#define IDC_SPIN_FUNCKEYWND_GROUPNUM 1411 +#define IDC_CHECK_DIFF_OPT_CASE 1412 +#define IDC_EDIT_FUNCKEYWND_GROUPNUM 1413 +#define IDC_CHECK_DIFF_OPT_SPACE 1414 +#define IDC_CHECK_DIFF_OPT_SPCCHG 1415 +#define IDC_STATIC_nSortType 1416 +#define IDC_BTN_RELOAD 1417 +#define IDC_CHECK_DIFF_OPT_BLINE 1418 +#define IDC_CHECK_DIFF_OPT_TABSPC 1419 +#define IDC_BTN_NOTIFYONLY 1420 +#define IDC_FRAME_DIFF_FILE12 1421 +#define IDC_LIST_DIFF_FILES 1422 +#define IDC_FILEUPDATEMSG 1423 +#define IDC_FRAME_DIFF_DST 1424 +#define IDC_LIST_CTRLCODE 1425 +#define IDC_BTN_NOSUPERVISION 1426 +#define IDC_BTN_CLOSE 1427 +#define IDC_UPDATEDFILENAME 1428 +#define IDC_QUERYRELOADMSG 1429 +#define IDC_BUTTON_FNAME_TOP 1430 +#define IDC_BUTTON_FNAME_UP 1431 +#define IDC_BUTTON_FNAME_DOWN 1432 +#define IDC_BUTTON_FNAME_LAST 1433 +#define IDC_BUTTON_FNAME_INS 1434 +#define IDC_BUTTON_FNAME_ADD 1435 +#define IDC_BUTTON_FNAME_UPD 1436 +#define IDC_BUTTON_FNAME_DEL 1437 +#define IDC_LIST_FNAME 1438 +#define IDC_EDIT_FNAME_FROM 1439 +#define IDC_CHECK_TAB_ARROW 1440 +#define IDC_TAB_FAVORITE 1441 +#define IDC_LIST_FAVORITE_FILE 1442 +#define IDC_LIST_FAVORITE_FOLDER 1443 +#define IDC_LIST_FAVORITE_GREP_FILE 1444 +#define IDC_LIST_FAVORITE_GREP_FOLDER 1445 +#define IDC_LIST_FAVORITE_REPLACE 1446 +#define IDC_LIST_FAVORITE_SEARCH 1447 +#define IDC_LIST_FAVORITE_CMD 1448 +#define IDC_BUTTON_CLEAR 1449 +#define IDC_LIST_TAGJUMP 1450 +#define IDC_WINCAPTION_ACTIVE 1451 +#define IDC_WINCAPTION_INACTIVE 1452 +#define IDC_CHECK_HOKANBYFILE 1453 +#define IDC_BUTTON_TAG_MAKE_REF 1454 +#define IDC_TABWND_CAPTION 1455 +#define IDC_CHECK_TAG_MAKE_RECURSE 1456 +#define IDC_EDIT_TAG_MAKE_FOLDER 1457 +#define IDC_FRAME_SEARCH_MSG 1458 +#define IDC_CHECK_DIFF_EXEC_STATE 1459 +#define IDC_STATIC_FAVORITE_MSG 1460 +#define IDC_CHECK_REALTIMEVIEW 1461 +#define IDC_CHECK_BOM 1462 +#define IDC_CHECK_GREPREALTIME 1463 +#define IDC_RADIO_WINSIZE_DEF 1464 +#define IDC_RADIO_WINSIZE_SAVE 1465 +#define IDC_RADIO_WINSIZE_SET 1466 +#define IDC_SPIN_WX 1467 +#define IDC_SPIN_WY 1468 +#define IDC_RADIO_WINPOS_DEF 1469 +#define IDC_RADIO_WINPOS_SAVE 1470 +#define IDC_RADIO_WINPOS_SET 1471 +#define IDC_SPIN_SX 1472 +#define IDC_SPIN_SY 1473 +#define IDC_COMBO_WINTYPE 1474 +#define IDC_BUTTON_WINSIZE 1475 +#define IDC_CHECK_QueryIfCodeChange 1476 +#define IDC_CHECK_AlertIfFileNotExist 1477 +#define IDC_COMBO1 1478 +#define IDC_COMBO2 1479 +#define IDC_COMBO3 1480 +#define IDC_COMBO4 1481 +#define IDC_COMBO5 1482 +#define IDC_COMBO6 1483 +#define IDC_COMBO7 1484 +#define IDC_COMBO8 1485 +#define IDC_COMBO9 1486 +#define IDC_COMBO10 1487 +#define IDC_BUTTON_KEYWORD_SELECT 1488 +#define IDC_STATIC_KEYWORD_COUNT 1489 +#define IDC_BUTTON_KEYSETRENAME 1490 +#define IDC_BUTTON_KEYCLEAN 1491 +#define IDC_KEYWORD 1492 +#define IDC_STATIC_KEYWORD 1493 +#define IDC_CHECK_ICASE 1494 +#define IDC_CHECK_ANYWHERE 1495 +#define IDC_EDIT_BACKUPFILE 1496 +#define IDC_CHECK_BACKUP_FOLDER_RM 1497 +#define IDC_CHECK_BACKUP_ADVANCED 1498 +#define IDC_RADIO_BACKUP_DATETYPE1A 1499 +#define IDC_RADIO_BACKUP_DATETYPE2A 1500 +#define IDC_LABEL_BACKUP_HELP2 1501 +#define IDC_CHECK_MEMDC 1502 +#define IDC_STATIC_COLOR 1503 +#define IDC_BUTTON_SELALL 1504 +#define IDC_BUTTON_SELNOTING 1505 +#define IDC_LIST_ITEMINFO 1506 +#define IDC_CHECK_NoFilterSaveNew 1507 +#define IDC_CHECK_NoFilterSaveFile 1508 +#define IDC_CHECK_CLOSEALLCONFIRM 1509 +#define IDC_CHECK_ANTIALIAS 1510 +#define IDC_CHECK_RetainEmptyWindow 1511 +#define IDC_BUTTON_DIRECTPAGE 1512 +#define IDC_CHECK_CloseOneWin 1513 +#define IDC_CHECK_bCaretTextForSearch 1514 +#define IDC_CHECK_ChgWndByWheel 1515 +#define IDC_LABEL_REGEXP 1516 +#define IDC_EDIT_REGEXPLIB 1517 +#define IDC_LABEL_REGEXP_VER 1518 +#define IDC_COMBO_CODE_GET 1519 +#define IDC_COMBO_CODE_SEND 1520 +#define IDC_CHECK_DISP_UNICODE_IN_SJIS 1521 +#define IDC_CHECK_DISP_UNICODE_IN_JIS 1522 +#define IDC_CHECK_DISP_UNICODE_IN_EUC 1523 +#define IDC_CHECK_DISP_UTF8_CODEPOINT 1524 +#define IDC_CHECK_DISP_SP_CODEPOINT 1525 +#define IDC_RADIO_OUTPUT 1526 +#define IDC_RADIO_EDITWINDOW 1527 +#define IDC_CHECK_SENDSTDIN 1528 +#define IDC_CHECK_SortTabList 1529 +#define IDC_COMBO_WRAPMETHOD 1530 +#define IDC_FRAME_KEYHELP 1531 +#define IDC_LIST_KEYHELP 1532 +#define IDC_LABEL_KEYHELP_KEYWORD 1533 +#define IDC_EDIT_KEYHELP 1534 +#define IDC_LABEL_KEYHELP_TITLE 1535 +#define IDC_BUTTON_KEYHELP_INS 1536 +#define IDC_BUTTON_KEYHELP_UPD 1537 +#define IDC_BUTTON_KEYHELP_DEL 1538 +#define IDC_BUTTON_KEYHELP_TOP 1539 +#define IDC_BUTTON_KEYHELP_UP 1540 +#define IDC_BUTTON_KEYHELP_DOWN 1541 +#define IDC_BUTTON_KEYHELP_LAST 1542 +#define IDC_BUTTON_KEYHELP_IMPORT 1543 +#define IDC_BUTTON_KEYHELP_EXPORT 1544 +#define IDC_LABEL_KEYHELP_ABOUT 1545 +#define IDC_CHECK_KEYHELP 1546 +#define IDC_LABEL_KEYHELP_PRIOR 1547 +#define IDC_BUTTON_KEYHELP_REF 1548 +#define IDC_CHECK_KEYHELP_ALLSEARCH 1549 +#define IDC_CHECK_KEYHELP_KEYDISP 1550 +#define IDC_CHECK_KEYHELP_PREFIX 1551 +#define IDC_SPIN_ALERT_FILESIZE 1552 +#define IDC_EDIT_ALERT_FILESIZE 1553 +#define IDC_CHECK_ALERT_IF_LARGEFILE 1554 +#define IDC_COMBO_WHEEL_HSCROLL 1555 +#define IDC_COMBO_WHEEL_PAGESCROLL 1556 +#define IDC_COMBO_DEFAULT_CODETYPE 1557 +#define IDC_CHECK_PRIOR_CESU8 1558 +#define IDC_CHECK_DISP_SELCOUNT_BY_BYTE 1559 +#define IDC_EDIT_KINSOKUKUTO 1560 +#define IDC_CHECK_MacroOnOpened 1562 +#define IDC_CHECK_MacroOnTypeChanged 1563 +#define IDC_CHECK_MacroOnSave 1564 +#define IDC_PLUGINLIST 1565 +#define IDC_CHECK_PluginEnable 1566 +#define IDC_PLUGIN_SearchNew 1567 +#define IDC_PLUGIN_Remove 1568 +#define IDC_LABEL_PLUGIN_Description 1569 +#define IDC_LABEL_PLUGIN_Author 1570 +#define IDC_LABEL_PLUGIN_Version 1571 +#define IDC_PLUGIN_OPTION 1572 +#define IDC_LIST_PLUGIN_OPTIONS 1573 +#define IDC_EDIT_PLUGIN_OPTION 1574 +#define IDC_EDIT_PLUGIN_OPTION_NUM 1575 +#define IDC_SPIN_PLUGIN_OPTION 1576 +#define IDC_CHECK_PLUGIN_OPTION 1577 +#define IDC_COMBO_PLUGIN_OPTION 1578 +#define IDC_BUTTON_INITIALIZE 1578 +#define IDC_RADIO_TYPE_TO 1579 +#define IDC_STATIC_TYPE_FILE 1580 +#define IDC_COMBO_COLORS 1581 +#define IDC_BUTTON_MENU 1582 +#define IDC_STATIC_BUTTONS 1582 +#define IDC_BUTTON_DELETE_NOFAVORATE 1583 +#define IDC_BUTTON_DELETE_NOTFOUND 1584 +#define IDC_BUTTON_DELETE_SELECTED 1585 +#define IDC_BUTTON_PREVTAG 1586 +#define IDC_BUTTON_NEXTTAG 1587 +#define IDC_STATIC_BASEDIR 1588 +#define IDC_TREE_RES 1589 +#define IDC_BUTTON_INSERT_NODE 1590 +#define IDC_BUTTON_INSERT_A 1591 +#define IDC_BUTTON_RIGHT 1592 +#define IDC_BUTTON_LEFT 1593 +#define IDC_CHECK_KEY_PARENTHESES 1594 +#define IDC_BUTTON_EXPAND 1595 +#define IDC_BUTTON_COLLAPSE 1596 +#define IDC_BUTTON_CHECK 1597 +#define IDC_CHECK_EXT_RMENU 1598 +#define IDC_CHECK_EXT_DBLCLICK 1599 +#define IDC_COMBO_DEFAULT_EOLTYPE 1600 +#define IDC_CHECK_DEFAULT_BOM 1601 +#define IDC_EDIT_BACKIMG_PATH 1602 +#define IDC_BUTTON_BACKIMG_PATH_SEL 1603 +#define IDC_COMBO_BACKIMG_POS 1604 +#define IDC_CHECK_BACKIMG_SCR_X 1605 +#define IDC_CHECK_BACKIMG_SCR_Y 1606 +#define IDC_CHECK_BACKIMG_REP_X 1607 +#define IDC_CHECK_BACKIMG_REP_Y 1608 +#define IDC_EDIT_BACKIMG_OFFSET_X 1609 +#define IDC_EDIT_BACKIMG_OFFSET_Y 1610 +#define IDC_CHECK_CONVERTEOLPASTE 1611 +#define IDC_CHECK_OpenNewWin 1612 +#define IDC_BUTTON_TABFONT 1613 +#define IDC_MACROCANCELTIMER 1614 +#define IDC_PLUGIN_OpenFolder 1615 +#define IDC_CHECK_INHERIT_KEY_OTHER_VIEW 1616 +#define IDC_LIST_FAVORITE_EXCEPTMRU 1617 +#define IDC_BUTTON_ADD_FAVORITE 1618 +#define IDC_BTN_AUTOLOAD 1619 +#define IDC_LABEL_AUTOLOAD_DELAY 1620 +#define IDC_EDIT_AUTOLOAD_DELAY 1621 +#define IDC_SPIN_AUTOLOAD_DELAY 1622 +#define IDC_CHECK_KINSOKUHIDE 1623 +#define IDC_PLUGIN_README 1624 +#define IDC_PLUGIN_INST_ZIP 1625 +#define IDC_CHECK_HOKANBYKEYWORD 1626 +#define IDC_RADIO_CURDIR 1627 +#define IDC_RADIO_MRUDIR 1628 +#define IDC_RADIO_SELDIR 1629 +#define IDC_EDIT_FILEOPENDIR 1630 +#define IDC_BUTTON_FILEOPENDIR 1631 +#define IDC_CHECK_bOverWriteFixMode 1632 +#define IDC_STATIC_MOZI 1633 +#define IDC_BUTTON_TYPEFONT 1634 +#define IDC_CHECK_USETYPEFONT 1635 +#define IDC_STATIC_TABFONT 1636 +#define IDC_STATIC_KEYWORDHELPFONT 1637 +#define IDC_STATIC_FONTSIZE 1638 +#define IDC_CHECK_COLORPRINT 1639 +#define IDC_CHECK_USE_FONT_HEAD 1640 +#define IDC_BUTTON_FONT_HEAD 1641 +#define IDC_STATIC_FONT_HEAD 1642 +#define IDC_CHECK_USE_FONT_FOOT 1643 +#define IDC_BUTTON_FONT_FOOT 1644 +#define IDC_STATIC_FONT_FOOT 1645 +#define IDC_CHECK_CUR_DIR 1646 +#define IDC_COMBO_CUR_DIR 1647 +#define IDC_BUTTON_REFERENCE2 1648 +#define IDC_LIST_FAVORITE_CUR_DIR 1649 +#define IDC_EDIT_PLUGIN_OPTION_DIR 1650 +#define IDC_BUTTON_PLUGIN_OPTION_DIR 1651 +#define IDC_CHECK_STRINGENDLINE 1652 +#define IDC_CHECK_DispTabClose 1653 +#define IDC_CHECK_CHKENTERATEND 1654 +#define IDC_RADIO_OUTPUTSTYLE3 1655 +#define IDC_CHECK_FILE_ONLY 1656 +#define IDC_CHECK_BASE_PATH 1657 +#define IDC_CHECK_SEP_FOLDER 1658 +#define IDC_BUTTON_FOLDER_UP 1659 +#define IDC_CHECK_SUBMENU 1660 +#define IDC_COMBO_LANGUAGE 1661 +#define IDC_BUTTON_UP_TYPE 1662 +#define IDC_BUTTON_DOWN_TYPE 1663 +#define IDC_BUTTON_ADD_TYPE 1664 +#define IDC_BUTTON_DEL_TYPE 1665 +#define IDC_BUTTON_COPY_TYPE 1666 +#define IDC_RADIO_TYPE_ADD 1667 +#define IDC_STATIC_TYPEFONT 1668 +#define IDC_TextTabClose 1669 +#define IDC_TextTabCaption 1670 +#define IDC_CHECK_CP 1671 +#define IDC_CHECK_ENABLEEXTEOL 1672 +#define IDC_LIST_PROFILE 1673 +#define IDC_BUTTON_PROF_CREATE 1674 +#define IDC_BUTTON_PROF_RENAME 1675 +#define IDC_BUTTON_PROF_DELETE 1676 +#define IDC_CHECK_PROF_DEFSTART 1677 +#define IDC_BUTTON_PROF_DEFSET 1678 +#define IDC_BUTTON_PROF_DEFCLEAR 1679 +#define IDC_TAB_POSITION 1680 +#define IDC_COMBO_TAB_POSITION 1681 +#define IDC_CHECK_TAB_MULTILINE 1682 +#define IDC_CHECK_bOverWriteBoxDelete 1683 +#define IDC_CHECK_SHORTPATH 1684 +#define IDC_EDIT_SHORTMAXWIDTH 1685 +#define IDC_COMBO_TAGJUMP 1686 +#define IDC_COMBO_KEYWORD_TAGJUMP 1687 +#define IDC_SPIN_LINENUMWIDTH 1688 +#define IDC_EDIT_LINENUMWIDTH 1689 +#define IDC_CHK_BACKUP 1690 +#define IDC_STATIC_SETTFING_FROM 1691 +#define IDC_CHECK_LOADINI 1692 +#define IDC_EDIT_DEFINI 1693 +#define IDC_BUTTON_REF1 1694 +#define IDC_BUTTON_LOAD 1695 +#define IDC_RADIO_GREP 1696 +#define IDC_RADIO_FILE 1697 +#define IDC_RADIO_FOLDER 1698 +#define IDC_STATIC_PATH 1699 +#define IDC_EDIT_PATH 1700 +#define IDC_BUTTON_REF2 1701 +#define IDC_BUTTON_PATH_MENU 1702 +#define IDC_EDIT_LABEL 1703 +#define IDC_STATIC_FILE 1704 +#define IDC_EDIT_FILE 1705 +#define IDC_CHECK_HIDDEN 1706 +#define IDC_CHECK_READONLY 1707 +#define IDC_CHECK_SYSTEM 1708 +#define IDC_BUTTON_UPDATE 1709 +#define IDC_BUTTON_FILEADD 1710 +#define IDC_BUTTON_REPLACE 1711 +#define IDC_BUTTON_SETTING 1712 +#define IDC_STATIC_CHARCODE 1713 +#define IDC_PLUGIN_URL 1714 +#define IDC_RADIO_LINEDELETE 1715 +#define IDC_RADIO_NOHIT 1716 +#define IDC_CHECK_BOXSELECTLOCK 1717 +#define IDC_COMBO_TSV_MODE 1718 +#define IDC_CHECK_INDENTCPPSTR 1719 +#define IDC_CHECK_INDENTCPPCMT 1720 +#define IDC_CHECK_INDENTCPPUNDO 1721 +#define IDC_CHECK_DISP_COL_BY_CHAR 1722 +#define IDC_STATIC_MENU 1723 +#define IDC_LIST_WINDOW 1724 +#define IDC_BUTTON_SAVE 1725 +#define IDC_BUTTON_CLOSE 1726 +#define IDC_STATIC_URL_GIT 1727 +#define IDC_STATIC_GIT_CAPTION 1728 +#define IDC_STATIC_URL_CI_BUILD_CAPTION 1729 +#define IDC_STATIC_URL_CI_BUILD 1730 +#define IDC_STATIC_URL_GITHUB_CAPTION 1731 +#define IDC_STATIC_URL_GITHUB_COMMIT 1732 +#define IDC_STATIC_URL_GITHUB_PR 1733 +#define IDC_TRACKBAR_BACKIMG_TRANSPARENCY 1734 +#define IDC_COMBO_EXCLUDE_FOLDER 1734 +#define IDC_EDIT_BACKIMG_TRANSPARENCY 1735 +#define IDC_COMBO_EXCLUDE_FILE 1735 +#define IDC_UPDOWN_BACKIMG_TRANSPARENCY 1736 +#define IDC_CHECK_VISTA_STYLE_FILEDIALOG 1737 +#define IDS_AUTHOR_PAGE 4054 +#define IDS_ABOUT_DESCRIPTION 4056 +#define IDD_TYPELIST 5000 +#define IDD_TYPE_ASCERTAIN 5001 +#define IDD_PROP_SCREEN 5100 +#define IDD_PROP_COLOR 5101 +#define IDD_PROP_SUPPORT 5102 +#define IDD_PROP_REGEX 5103 +#define IDD_PROP_KEYHELP 5104 +#define IDD_PROP_WINDOW 5105 +#define IDD_DIALOG_KEYWORD_SELECT 5110 +#define IDD_SAMECOLOR 5111 +#define IDD_PROP_GENERAL 5200 +#define IDD_PROP_WIN 5201 +#define IDD_PROP_TOOLBAR 5202 +#define IDD_PROP_TAB 5203 +#define IDD_PROP_STATUSBAR 5204 +#define IDD_PROP_EDIT 5205 +#define IDD_PROP_FILE 5206 +#define IDD_PROP_FNAME 5207 +#define IDD_PROP_BACKUP 5208 +#define IDD_PROP_FORMAT 5209 +#define IDD_PROP_GREP 5210 +#define IDD_PROP_KEYBIND 5211 +#define IDD_PROP_CUSTMENU 5212 +#define IDD_PROP_KEYWORD 5213 +#define IDD_PROP_HELPER 5214 +#define IDD_PROP_MACRO 5215 +#define IDD_PROP_PLUGIN 5216 +#define IDD_PROP_MAINMENU 5217 +#define IDD_WINPOSSIZE 5220 +#define IDD_PLUGIN_OPTION 5221 +#define IDD_PROFILEMGR 5222 +#define IDD_FILETREE 5223 +#define IDC_STATIC -1 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 230 +#define _APS_NEXT_COMMAND_VALUE 4057 +#define _APS_NEXT_CONTROL_VALUE 1738 +#define _APS_NEXT_SYMED_VALUE 104 +#endif +#endif diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index b8d65d90eb..518e6be18d 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -1,4202 +1,4071 @@ -//Microsoft Developer Studio generated resource script. - -// このファイルのエンコーディングは UTF-8 (BOM無し) です. -// ※ BOM を付けると Visual Studio のリソースエディタで開けなくなってしまう. - -// CodePage: 65001 (UTF-8) -#pragma code_page(65001) - -#include "sakura_rc.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#define APSTUDIO_HIDDEN_SYMBOLS -#include -#undef APSTUDIO_HIDDEN_SYMBOLS - -#include "Funccode_define.h" -#include "String_define.h" -#include "version.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// 日本語 resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN) -#ifdef _WIN32 -LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT -#endif //_WIN32 - -#define S_COPYRIGHT "Copyright (C) 1998-2020 by Norio Nakatani & Collaborators" -#define FL_VER PR_VER -#define FL_VER_STR PR_VER_STR - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "sakura_rc.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" - "#include \r\n" - "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" - "\r\n" - "#include ""Funccode_define.h""\r\n" - "#include ""String_define.h""\r\n" - "#include ""version.h""\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_FIND DIALOGEX 30, 0, 284, 93 -STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "検索" -FONT 9, "MS Pゴシック" -BEGIN - LTEXT "条件(&N)", IDC_STATIC, 5, 6, 26, 10 - COMBOBOX IDC_COMBO_TEXT, 34, 4, 183, 150, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - CONTROL "単語単位で探す(&W)", IDC_CHK_WORD, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 5, 21, 130, 10 - CONTROL "英大文字と小文字を区別する(&C)", IDC_CHK_LOHICASE, "Button", BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP, 5, 32, 130, 10 - CONTROL "正規表現(&E)", IDC_CHK_REGULAREXP, "Button", BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP, 5, 43, 55, 10 - CONTROL "見つからないときにメッセージを表示(&M)", IDC_CHECK_NOTIFYNOTFOUND, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 54, 140, 10 - CONTROL "検索ダイアログを自動的に閉じる(&L)", IDC_CHECK_bAutoCloseDlgFind, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 65, 130, 10 - CONTROL "先頭(末尾)から再検索する(&Z)", IDC_CHECK_SEARCHALL, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 76, 130, 10 - LTEXT "", IDC_STATIC_JRE32VER, 62, 43, 154, 10 - PUSHBUTTON "上検索(&U)", IDC_BUTTON_SEARCHPREV, 221, 4, 58, 14, WS_GROUP - DEFPUSHBUTTON "下検索(&D)", IDC_BUTTON_SEARCHNEXT, 221, 20, 58, 14 - PUSHBUTTON "該当行マーク(&B)", IDC_BUTTON_SETMARK, 221, 38, 58, 14 - PUSHBUTTON "キャンセル(&X)", IDCANCEL, 221, 57, 58, 14, WS_GROUP - PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 221, 73, 58, 14 -END - -IDD_ABOUT DIALOG DISCARDABLE 0, 0, 260, 228 -STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "バージョン情報" -FONT 9, "MS Pゴシック" -BEGIN - ICON IDI_ICON_STD, IDC_STATIC_MYICON, 5, 5, 20, 20, SS_NOTIFY - EDITTEXT IDC_EDIT_VER, 33, 5, 219, 70, ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP - LTEXT "原作者: たけ(竹パンダ) さん", IDC_STATIC, 33, 75, 125, 10, NOT WS_GROUP - LTEXT S_COPYRIGHT, IDC_STATIC, 33, 85, 220, 11, NOT WS_GROUP | SS_NOPREFIX - LTEXT "Project URL:", IDC_STATIC_URL_CAPTION, 33, 103, 71, 10, NOT WS_GROUP - LTEXT "https://sakura-editor.github.io/", IDC_STATIC_URL_UR, 91, 103, 120, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP -#ifdef GIT_REMOTE_ORIGIN_URL - LTEXT "Source URL:", IDC_STATIC_GIT_CAPTION, 33, 114, 71, 10, NOT WS_GROUP - LTEXT GIT_REMOTE_ORIGIN_URL, IDC_STATIC_URL_GIT, 91, 114, 120, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP -#endif -#ifdef CI_BUILD_NUMBER_LABEL - LTEXT "Build URL:", IDC_STATIC_URL_CI_BUILD_CAPTION, 33, 125, 71, 10, NOT WS_GROUP - LTEXT CI_BUILD_NUMBER_LABEL, IDC_STATIC_URL_CI_BUILD, 91, 125, 120, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP -#endif -#if defined( GITHUB_COMMIT_URL ) || defined( GITHUB_PR_HEAD_URL ) - LTEXT "GitHub URL:", IDC_STATIC_URL_GITHUB_CAPTION, 33, 136, 50, 10, NOT WS_GROUP -#endif -#if defined( GITHUB_COMMIT_URL ) - LTEXT GIT_SHORT_COMMIT_HASH, IDC_STATIC_URL_GITHUB_COMMIT, 91, 136, 30, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP -#endif -#if defined( GITHUB_PR_HEAD_URL ) - LTEXT GITHUB_PR_NUMBER_LABEL, IDC_STATIC_URL_GITHUB_PR, 140, 136, 30, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP -#endif - EDITTEXT IDC_EDIT_ABOUT, 5, 152, 248, 53, ES_MULTILINE | ES_READONLY | WS_VSCROLL | NOT WS_TABSTOP - DEFPUSHBUTTON "&OK", IDOK, 112, 209, 50, 14 - PUSHBUTTON "情報をコピー(&C)", IDC_BUTTON_COPY, 193, 209, 60, 14 -END - -IDD_JUMP DIALOGEX 0, 0, 252, 121 -STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_SETFOREGROUND | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "指定行へジャンプ" -FONT 9, "MS Pゴシック" -BEGIN - LTEXT "行番号(&N)", IDC_STATIC, 5, 6, 34, 10 - EDITTEXT IDC_EDIT_LINENUM, 43, 4, 40, 12 - CONTROL "Spin1", IDC_SPIN_LINENUM, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 82, 4, 9, 12 - CONTROL "折り返し単位の行番号(&R)", IDC_RADIO_LINENUM_LAYOUT, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 94, 5, 97, 10 - CONTROL "改行単位の行番号(&W)", IDC_RADIO_LINENUM_CRLF, "Button", BS_AUTORADIOBUTTON, 94, 20, 87, 10 - CONTROL "&PL/SQLコンパイルエラー行を処理する", IDC_CHECK_PLSQL, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 10, 50, 137, 10 - LTEXT "行目をブロックの&1行目とする", IDC_LABEL_PLSQL2, 92, 66, 92, 10, NOT WS_GROUP - EDITTEXT IDC_EDIT_PLSQL_E1, 47, 64, 40, 12 - CONTROL "Spin1", IDC_SPIN_PLSQL_E1, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 87, 64, 9, 12 - LTEXT "テキストの", IDC_LABEL_PLSQL1, 12, 66, 34, 10, NOT WS_GROUP - LTEXT "検出されたPL/SQLパッケージのブロックから選択(&S)", IDC_LABEL_PLSQL3, 12, 81, 166, 10, NOT WS_GROUP - COMBOBOX IDC_COMBO_PLSQLBLOCKS, 15, 94, 168, 100, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - GROUPBOX "PL/SQLコンパイルエラー行", IDC_STATIC, 5, 35, 184, 80, WS_GROUP - DEFPUSHBUTTON "ジャンプ(&J)", IDC_BUTTON_JUMP, 197, 5, 50, 14, WS_GROUP - PUSHBUTTON "キャンセル(&X)", IDCANCEL, 197, 24, 50, 14 - PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 197, 101, 50, 14 -END - -IDD_FUNCLIST DIALOG DISCARDABLE 0, 0, 240, 289 -STYLE DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU -CAPTION "x" -FONT 9, "MS Pゴシック" -BEGIN - CONTROL "Tree1", IDC_TREE_FL, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 0, 20, 234, 232 - CONTROL "List1", IDC_LIST_FL, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP, 0, 0, 234, 252 - PUSHBUTTON "▼", IDC_BUTTON_MENU, 1, 255, 10, 14, NOT WS_TABSTOP - CONTROL "■", IDC_BUTTON_WINSIZE, "Button", BS_AUTOCHECKBOX | BS_PUSHLIKE, 12, 255, 10, 14 - PUSHBUTTON "コピー(&C)", IDC_BUTTON_COPY, 24, 255, 50, 14, WS_DISABLED - DEFPUSHBUTTON "ジャンプ(&J)", IDOK, 76, 255, 50, 14 - PUSHBUTTON "キャンセル(&X)", IDCANCEL, 128, 255, 50, 14 - PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 180, 255, 50, 14 - CONTROL "自動的に閉じる(&D)", IDC_CHECK_bAutoCloseDlgFuncList, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 271, 75, 10 - CONTROL "フォーカスを移す(&F)", IDC_CHECK_bFunclistSetFocusOnJump, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 82, 271, 77, 10 - CONTROL "空行を無視する(&B)", IDC_CHECK_bMarkUpBlankLineEnable, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 160, 271, 76, 10 - LTEXT "順序(&S)", IDC_STATIC_nSortType, 3, 6, 28, 10 - PUSHBUTTON "設定(&S)", IDC_BUTTON_SETTING, 3, 3, 35, 14 - COMBOBOX IDC_COMBO_nSortType, 34, 3, 94, 65, CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP -END - -IDD_GREP DIALOGEX 0, 0, 390, 192 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "Grep" -FONT 9, "Yu Gothic UI", 0, 0, 0x1 -BEGIN - RTEXT "条件(&N):",IDC_STATIC,4,4,52,8 - COMBOBOX IDC_COMBO_TEXT,60,4,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - CONTROL "単語単位(&W)",IDC_CHK_WORD,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,60,18,80,8 - CONTROL "英大小文字区別(&C)",IDC_CHK_LOHICASE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,28,80,8 - CONTROL "正規表現(&E)",IDC_CHK_REGULAREXP,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,38,80,8 - RTEXT "(ここに正規表現ライブラリのバージョン情報が表示されます)",IDC_STATIC_JRE32VER,144,38,188,8 - RTEXT "検索場所(&L):",IDC_STATIC,4,52,52,8 - COMBOBOX IDC_COMBO_FOLDER,60,52,254,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "&...",IDC_BUTTON_FOLDER,316,52,16,10 - CONTROL "編集中のファイルから検索(&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,66,100,8 - CONTROL "サブフォルダも検索(&S)",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,76,100,8 - CONTROL "カレントフォルダが初期値(&D)",IDC_CHK_DEFAULTFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,86,100,8 - PUSHBUTTON "上階層へ(&U)",IDC_BUTTON_FOLDER_UP,230,66,50,14 - PUSHBUTTON "現フォルダ(&G)",IDC_BUTTON_CURRENTFOLDER,282,66,50,14,BS_MULTILINE - RTEXT "対象ファイル(&I):",IDC_STATIC,4,100,52,8,NOT WS_GROUP - COMBOBOX IDC_COMBO_FILE,60,100,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - RTEXT "除外ファイル(&J):",IDC_STATIC,4,114,52,8,NOT WS_GROUP - COMBOBOX IDC_COMBO_EXCLUDE_FILE,60,114,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - RTEXT "除外フォルダ(&K):",IDC_STATIC,4,128,53,8 - COMBOBOX IDC_COMBO_EXCLUDE_FOLDER,60,128,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - GROUPBOX "結果出力",IDC_STATIC,60,144,68,44,WS_GROUP - CONTROL "該当行(&1)",IDC_RADIO_OUTPUTLINE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,68,156,56,8 - CONTROL "該当部分(&2)",IDC_RADIO_OUTPUTMARKED,"Button",BS_AUTORADIOBUTTON,68,166,56,8 - CONTROL "否該当行(&3)",IDC_RADIO_NOHIT,"Button",BS_AUTORADIOBUTTON,68,176,56,8 - GROUPBOX "結果出力形式",IDC_STATIC,132,144,68,44,WS_GROUP - CONTROL "ノーマル(&4)",IDC_RADIO_OUTPUTSTYLE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,140,156,52,8 - CONTROL "ファイル毎(&5)",IDC_RADIO_OUTPUTSTYLE2,"Button",BS_AUTORADIOBUTTON,140,166,52,8 - CONTROL "結果のみ(&6)",IDC_RADIO_OUTPUTSTYLE3,"Button",BS_AUTORADIOBUTTON,140,176,52,8 - GROUPBOX "その他",IDC_STATIC,204,144,180,44,WS_GROUP - CONTROL "ファイル毎最初のみ検索(&7)",IDC_CHECK_FILE_ONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,156,92,8 - CONTROL "フォルダ毎に表示(&8)",IDC_CHECK_SEP_FOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,166,92,8 - CONTROL "ベースフォルダ表示(&9)",IDC_CHECK_BASE_PATH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,176,92,8 - LTEXT "文字コードセット(&A):",IDC_STATIC,312,152,62,8 - COMBOBOX IDC_COMBO_CHARSET,312,162,64,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,312,176,30,8 - DEFPUSHBUTTON "検索(&F)",IDOK,336,4,50,14,WS_GROUP - PUSHBUTTON "キャンセル(&X)",IDCANCEL,336,20,50,14 - PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,336,36,50,14 -END - -IDD_GREP_REPLACE DIALOGEX 0, 0, 390, 204 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "Grep置換" -FONT 9, "Yu Gothic UI", 0, 0, 0x1 -BEGIN - RTEXT "置換前(&N):",IDC_STATIC,4,4,52,10 - COMBOBOX IDC_COMBO_TEXT,60,4,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - RTEXT "置換後(&Z):",IDC_STATIC,4,18,52,10 - COMBOBOX IDC_COMBO_TEXT2,60,18,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - CONTROL "単語単位(&W)",IDC_CHK_WORD,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,60,32,80,8 - CONTROL "英大小文字区別(&C)",IDC_CHK_LOHICASE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,42,80,8 - CONTROL "正規表現(&E)",IDC_CHK_REGULAREXP,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,52,80,8 - CONTROL "クリップボードの内容で置換(&V)",IDC_CHK_PASTE,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,196,32,120,8 - CONTROL "バックアップ作成(&B)",IDC_CHK_BACKUP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,196,42,120,8 - RTEXT "(ここに正規表現ライブラリのバージョン情報が表示されます)",IDC_STATIC_JRE32VER,144,52,188,8 - RTEXT "検索場所(&L):",IDC_STATIC,4,64,52,8 - COMBOBOX IDC_COMBO_FOLDER,60,64,254,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "&...",IDC_BUTTON_FOLDER,316,64,16,10 - CONTROL "編集中のファイルから検索(&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,78,100,8 - CONTROL "サブフォルダも検索(&S)",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,88,100,8 - CONTROL "カレントフォルダが初期値(&D)",IDC_CHK_DEFAULTFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,98,100,8 - PUSHBUTTON "上階層へ(&U)",IDC_BUTTON_FOLDER_UP,230,78,50,14 - PUSHBUTTON "現フォルダ(&G)",IDC_BUTTON_CURRENTFOLDER,282,78,50,14,BS_MULTILINE - RTEXT "対象ファイル(&I):",IDC_STATIC,4,114,52,8,NOT WS_GROUP - COMBOBOX IDC_COMBO_FILE,60,114,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - RTEXT "除外ファイル(&J):",IDC_STATIC,4,128,52,8,NOT WS_GROUP - COMBOBOX IDC_COMBO_EXCLUDE_FILE,60,128,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - RTEXT "除外フォルダ(&K):",IDC_STATIC,4,142,52,8 - COMBOBOX IDC_COMBO_EXCLUDE_FOLDER,60,142,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - GROUPBOX "結果出力",IDC_STATIC,60,156,68,44,WS_GROUP - CONTROL "該当行(&1)",IDC_RADIO_OUTPUTLINE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,68,168,56,8 - CONTROL "該当部分(&2)",IDC_RADIO_OUTPUTMARKED,"Button",BS_AUTORADIOBUTTON,68,178,56,8 - GROUPBOX "結果出力形式",IDC_STATIC,132,156,68,44,WS_GROUP - CONTROL "ノーマル(&4)",IDC_RADIO_OUTPUTSTYLE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,140,168,52,8 - CONTROL "ファイル毎(&5)",IDC_RADIO_OUTPUTSTYLE2,"Button",BS_AUTORADIOBUTTON,140,178,52,8 - CONTROL "結果のみ(&6)",IDC_RADIO_OUTPUTSTYLE3,"Button",BS_AUTORADIOBUTTON,140,188,52,8 - GROUPBOX "その他",IDC_STATIC,204,156,180,44,WS_GROUP - CONTROL "ファイル毎最初のみ検索(&7)",IDC_CHECK_FILE_ONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,168,92,8 - CONTROL "フォルダ毎に表示(&8)",IDC_CHECK_SEP_FOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,178,92,8 - CONTROL "ベースフォルダ表示(&9)",IDC_CHECK_BASE_PATH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,188,92,8 - LTEXT "文字コードセット(&A):",IDC_STATIC,312,164,62,8 - COMBOBOX IDC_COMBO_CHARSET,312,174,64,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,312,188,30,8 - DEFPUSHBUTTON "置換(&R)",IDOK,336,4,50,14,WS_GROUP - PUSHBUTTON "キャンセル(&X)",IDCANCEL,336,20,50,14 - PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,336,36,50,14 -END - -IDD_GREPRUNNING DIALOGEX 0, 0, 293, 79 -STYLE DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Grep実行中" -FONT 9, "MS Pゴシック" -BEGIN - LTEXT "検索しています・・・", IDC_STATIC, 5, 5, 61, 10, NOT WS_GROUP - LTEXT "ファイル", IDC_STATIC, 5, 21, 26, 10, NOT WS_GROUP - LTEXT "IDC_STATIC_CURPATH", IDC_STATIC_CURFILE, 36, 20, 252, 10, NOT WS_GROUP - LTEXT "フォルダ", IDC_STATIC, 5, 34, 27, 10, NOT WS_GROUP - EDITTEXT IDC_STATIC_CURPATH, 36, 35, 252, 20, ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP - PUSHBUTTON "キャンセル(&X)", IDCANCEL, 238, 60, 50, 14 - LTEXT "0", IDC_STATIC_HITCOUNT, 76, 5, 44, 10, NOT WS_GROUP, WS_EX_RIGHT - LTEXT "件みつかりました。", IDC_STATIC, 122, 5, 60, 10, NOT WS_GROUP - CONTROL "リアルタイム表示(&V)", IDC_CHECK_REALTIMEVIEW, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 149, 59, 84, 14 -END - -IDD_REPLACE DIALOGEX 30, 0, 298, 149 -STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "置換" -FONT 9, "MS Pゴシック" -BEGIN - LTEXT "置換前(&N)", IDC_STATIC, 5, 6, 35, 10 - COMBOBOX IDC_COMBO_TEXT, 43, 4, 191, 150, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - LTEXT "置換後(&P)", IDC_STATIC, 5, 21, 34, 10, NOT WS_GROUP - COMBOBOX IDC_COMBO_TEXT2, 43, 19, 191, 150, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - CONTROL "クリップボードから貼り付ける(&T)", IDC_CHK_PASTE, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 5, 41, 116, 10 - CONTROL "単語単位で探す(&W)", IDC_CHK_WORD, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 5, 52, 78, 10 - CONTROL "英大文字と小文字を区別する(&C)", IDC_CHK_LOHICASE, "Button", BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP, 5, 63, 119, 10 - CONTROL "正規表現(&E)", IDC_CHK_REGULAREXP, "Button", BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP, 5, 74, 55, 10 - LTEXT "", IDC_STATIC_JRE32VER, 16, 85, 138, 10 - CONTROL "「すべて置換」は置換の繰返し(&I)", IDC_CHECK_CONSECUTIVEALL, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 95, 118, 10 - CONTROL "見つからないときにメッセージを表示(&M)", IDC_CHECK_NOTIFYNOTFOUND, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 107, 140, 10 - CONTROL "置換ダイアログを自動的に閉じる(&L)", IDC_CHECK_bAutoCloseDlgReplace, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 118, 128, 10 - CONTROL "先頭(末尾)から再検索する(&Z)", IDC_CHECK_SEARCHALL, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 129, 113, 10 - GROUPBOX "置換対象", IDC_STATIC, 156, 37, 78, 62, WS_GROUP - CONTROL "選択文字(&0)", IDC_RADIO_REPLACE, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 159, 50, 59, 10 - CONTROL "選択始点(&1)挿入", IDC_RADIO_INSERT, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 159, 61, 71, 10 - CONTROL "選択終点(&2)追加", IDC_RADIO_ADD, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 159, 72, 71, 10 - CONTROL "行削除(&3)", IDC_RADIO_LINEDELETE, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 159, 83, 71, 10 - GROUPBOX "範囲", IDC_STATIC, 156, 103, 78, 37, WS_GROUP - CONTROL "選択範囲(&S)", IDC_RADIO_SELECTEDAREA, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 159, 115, 57, 10 - CONTROL "ファイル全体(&O)", IDC_RADIO_ALLAREA, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 159, 126, 68, 10 - PUSHBUTTON "上検索(&U)", IDC_BUTTON_SEARCHPREV, 237, 4, 58, 14, WS_GROUP - DEFPUSHBUTTON "下検索(&D)", IDC_BUTTON_SEARCHNEXT, 237, 19, 58, 14 - PUSHBUTTON "該当行マーク(&B)", IDC_BUTTON_SETMARK, 237, 38, 58, 14 - PUSHBUTTON "置換(&R)", IDC_BUTTON_REPALCE, 237, 57, 58, 14 - PUSHBUTTON "すべて置換(&A)", IDC_BUTTON_REPALCEALL, 237, 73, 58, 14 - PUSHBUTTON "キャンセル(&X)", IDCANCEL, 237, 110, 58, 14, WS_GROUP - PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 237, 127, 58, 14 -END - -IDD_REPLACERUNNING DIALOG DISCARDABLE 0, 0, 190, 35 -STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "置換中" -FONT 9, "MS Pゴシック" -BEGIN - LTEXT "置換中です・・・・", IDC_STATIC, 5, 5, 55, 10 - CONTROL "Progress1", IDC_PROGRESS_REPLACE, "msctls_progress32", WS_BORDER, 5, 20, 120, 10 - PUSHBUTTON "キャンセル(&X)", IDCANCEL, 135, 16, 50, 14 - RTEXT "9999999999", IDC_STATIC_KENSUU, 64, 5, 37, 10, NOT WS_GROUP - LTEXT "個", IDC_STATIC, 104, 5, 8, 10, NOT WS_GROUP -END - -IDD_PROPERTY_FILE DIALOGEX 0, 0, 270, 225 -STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "ファイルのプロパティ" -FONT 9, "MS Pゴシック" -BEGIN - DEFPUSHBUTTON "閉じる(&C)", IDOK, 155, 208, 50, 14 - PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 215, 208, 50, 14 - EDITTEXT IDC_EDIT_PROPERTY, 5, 5, 260, 200, ES_MULTILINE | ES_READONLY | WS_VSCROLL | WS_TABSTOP -END - -IDD_INPUT1 DIALOGEX 0, 0, 185, 55 -STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "汎用入力ダイアログ" -FONT 9, "MS Pゴシック" -BEGIN - EDITTEXT IDC_EDIT_INPUT1, 5, 17, 175, 12, ES_AUTOHSCROLL - DEFPUSHBUTTON "&OK", IDOK, 37, 36, 50, 14 - PUSHBUTTON "キャンセル(&X)", IDCANCEL, 98, 35, 50, 14 - LTEXT "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", IDC_STATIC_MSG, 6, 5, 175, 10 -END - -IDD_COMPARE DIALOGEX 0, 0, 365, 165 -STYLE DS_MODALFRAME | WS_POPUP | WS_THICKFRAME | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "ファイル内容比較" -FONT 9, "MS Pゴシック" -BEGIN - LTEXT "比較するファイルを下から選択してください(&C):", IDC_STATIC, 5, 31, 158, 10 - LISTBOX IDC_LIST_FILES, 5, 42, 355, 95, LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - CONTROL "左右に表示(&T)", IDC_CHECK_TILE_H, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 293, 30, 66, 10 - DEFPUSHBUTTON "&OK", IDOK, 184, 145, 50, 14 - PUSHBUTTON "キャンセル(&X)", IDCANCEL, 244, 145, 50, 14 - PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 304, 145, 50, 14 - EDITTEXT IDC_STATIC_COMPARESRC, 7, 7, 355, 20, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL, WS_EX_STATICEDGE -END - -IDD_PRINTPREVIEWBAR DIALOG DISCARDABLE 0, 0, 402, 32 -STYLE WS_CHILD -FONT 9, "MS Pゴシック" -BEGIN - DEFPUSHBUTTON "印刷(&P)...", IDOK, 2, 1, 55, 14 - PUSHBUTTON "ページ設定(&S)...", IDC_BUTTON_PRINTSETTING, 2, 16, 55, 14 - PUSHBUTTON "前(&V)", IDC_BUTTON_PREVPAGE, 60, 1, 30, 14 - PUSHBUTTON "次(&N)", IDC_BUTTON_NEXTPAGE, 90, 1, 30, 14 - PUSHBUTTON "..&.", IDC_BUTTON_DIRECTPAGE, 120, 1, 9, 14 - LTEXT "999/999", IDC_STATIC_PAGENUM, 131, 4, 35, 10 - PUSHBUTTON "縮小(&O)", IDC_BUTTON_ZOOMDOWN, 60, 16, 30, 14 - PUSHBUTTON "拡大(&I)", IDC_BUTTON_ZOOMUP, 90, 16, 30, 14 - LTEXT "999/999", IDC_STATIC_ZOOM, 131, 19, 35, 10 - PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 167, 1, 39, 14 - CONTROL "滑らか(&A)", IDC_CHECK_ANTIALIAS, "Button", BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP, 207, 3, 43, 10 - PUSHBUTTON "戻る(&Q)", IDCANCEL, 167, 16, 39, 14 - PUSHBUTTON "プリンタ(&R)", IDC_BUTTON_PRINTERSELECT, 208, 16, 40, 14 - ICON IDI_PRINTER, IDC_STATIC, 251, 3, 11, 9, SS_REALSIZEIMAGE - LTEXT "Static", IDC_STATIC_PRNDEV, 263, 4, 137, 10 - LTEXT "Static", IDC_STATIC_PAPER, 251, 19, 149, 10 -END - -IDD_PRINTSETTING DIALOGEX 0, 0, 302, 253 -STYLE DS_MODALFRAME | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "印刷ページ設定" -FONT 9, "MS Pゴシック" -BEGIN - LTEXT "ページ設定(&1)", IDC_STATIC, 7, 9, 45, 10 - COMBOBOX IDC_COMBO_SETTINGNAME, 56, 7, 163, 170, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "設定名変更(&2)...", IDC_BUTTON_EDITSETTINGNAME, 224, 7, 69, 14 - GROUPBOX "設定", IDC_STATIC, 4, 22, 289, 204 - RTEXT "半角フォント(&F)", IDC_STATIC, 7, 37, 45, 10 - COMBOBOX IDC_COMBO_FONT_HAN, 56, 35, 84, 230, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP - RTEXT "全角フォント(&K)", IDC_STATIC, 7, 52, 45, 10 - COMBOBOX IDC_COMBO_FONT_ZEN, 56, 50, 84, 230, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP - RTEXT "フォント高(&P)", IDC_STATIC, 7, 71, 45, 10 - EDITTEXT IDC_EDIT_FONTHEIGHT, 56, 69, 30, 12, ES_AUTOHSCROLL - CONTROL "Spin1", IDC_SPIN_FONTHEIGHT, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 76, 69, 9, 12 - LTEXT "(1/10mm)", IDC_STATIC, 88, 71, 32, 10 - RTEXT "144.5pt", IDC_STATIC_FONTSIZE, 120, 71, 22, 10 - RTEXT "行送り(&S)", IDC_STATIC, 7, 85, 45, 10 - EDITTEXT IDC_EDIT_LINESPACE, 56, 83, 30, 12, ES_AUTOHSCROLL - CONTROL "Spin2", IDC_SPIN_LINESPACE, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 76, 83, 9, 12 - LTEXT "(%)", IDC_STATIC, 88, 85, 10, 10 - RTEXT "段数 (&C)", IDC_STATIC, 7, 99, 45, 10 - EDITTEXT IDC_EDIT_DANSUU, 56, 97, 30, 12, ES_AUTOHSCROLL - CONTROL "Spin3", IDC_SPIN_DANSUU, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 76, 97, 9, 12 - RTEXT "段の隙間(&E)", IDC_STATIC, 7, 113, 45, 10 - EDITTEXT IDC_EDIT_DANSPACE, 56, 111, 30, 12, ES_AUTOHSCROLL - CONTROL "Spin4", IDC_SPIN_DANSPACE, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 76, 111, 9, 12 - LTEXT "(mm)", IDC_STATIC, 88, 113, 17, 10 - RTEXT "用紙サイズ(&Z)", IDC_STATIC, 7, 131, 45, 10 - COMBOBOX IDC_COMBO_PAPER, 56, 129, 169, 145, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - RTEXT "用紙の向き", IDC_STATIC, 7, 146, 45, 10 - CONTROL "縦(&I)", IDC_RADIO_PORTRAIT, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 58, 145, 40, 10 - CONTROL "横(&A)", IDC_RADIO_LANDSCAPE, "Button", BS_AUTORADIOBUTTON, 102, 145, 40, 10 - RTEXT "余白/上(&T)", IDC_STATIC, 7, 163, 45, 10 - EDITTEXT IDC_EDIT_MARGINTY, 56, 161, 30, 12, ES_AUTOHSCROLL - CONTROL "Spin5", IDC_SPIN_MARGINTY, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 76, 161, 9, 12 - LTEXT "(mm)", IDC_STATIC, 88, 163, 17, 10 - RTEXT "下(&B)", IDC_STATIC, 7, 177, 45, 10 - EDITTEXT IDC_EDIT_MARGINBY, 56, 175, 30, 12, ES_AUTOHSCROLL - CONTROL "Spin6", IDC_SPIN_MARGINBY, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 76, 175, 9, 12 - LTEXT "(mm)", IDC_STATIC, 88, 177, 17, 10 - RTEXT "左(&L)", IDC_STATIC, 7, 191, 45, 10 - EDITTEXT IDC_EDIT_MARGINLX, 56, 189, 30, 12, ES_AUTOHSCROLL - CONTROL "Spin7", IDC_SPIN_MARGINLX, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 76, 189, 9, 12 - LTEXT "(mm)", IDC_STATIC, 88, 191, 17, 10 - RTEXT "右(&R)", IDC_STATIC, 7, 205, 45, 10 - EDITTEXT IDC_EDIT_MARGINRX, 56, 202, 30, 12, ES_AUTOHSCROLL - CONTROL "Spin8", IDC_SPIN_MARGINRX, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 76, 202, 9, 12 - LTEXT "(mm)", IDC_STATIC, 88, 205, 17, 10 - CONTROL "行番号を印刷(&N)", IDC_CHECK_LINENUMBER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 150, 35, 70, 10 - CONTROL "英文ワードラップ(&W)", IDC_CHECK_WORDWRAP, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 150, 49, 78, 10 - CONTROL "行頭禁則", IDC_CHECK_PS_KINSOKUHEAD, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 150, 63, 46, 10 - CONTROL "行末禁則", IDC_CHECK_PS_KINSOKUTAIL, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 150, 77, 46, 10 - CONTROL "改行ぶら下げ", IDC_CHECK_PS_KINSOKURET, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 197, 63, 60, 10 - CONTROL "句読点ぶら下げ", IDC_CHECK_PS_KINSOKUKUTO, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 197, 77, 67, 10 - LTEXT "行あたりの文字数:", IDC_STATIC, 150, 96, 65, 10 - LTEXT "縦方向の行数:", IDC_STATIC, 150, 110, 65, 10 - RTEXT "0", IDC_STATIC_ENABLECOLUMNS, 215, 96, 20, 10 - RTEXT "0", IDC_STATIC_ENABLELINES, 215, 110, 20, 10 - GROUPBOX "", IDC_STATIC, 145, 87, 112, 37 - CONTROL "カラー印刷(&V)", IDC_CHECK_COLORPRINT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 150, 145, 61, 10 - LTEXT "ヘッダー(&U)", IDC_STATIC, 107, 163, 38, 10 - EDITTEXT IDC_EDIT_HEAD1, 107, 175, 50, 12, ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_HEAD2, 158, 175, 50, 12, ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_HEAD3, 209, 175, 50, 12, ES_AUTOHSCROLL - CONTROL "使用", IDC_CHECK_USE_FONT_HEAD, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 260, 164, 30, 10 - PUSHBUTTON "フォント", IDC_BUTTON_FONT_HEAD, 260, 174, 30, 14 - RTEXT "Font(xxpt/xx.xmm)", IDC_STATIC_FONT_HEAD, 145, 160, 114, 14, SS_CENTERIMAGE - LTEXT "フッター(&D)", IDC_STATIC, 107, 191, 38, 10 - EDITTEXT IDC_EDIT_FOOT1, 107, 203, 50, 12, ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_FOOT2, 158, 203, 50, 12, ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_FOOT3, 209, 203, 50, 12, ES_AUTOHSCROLL - CONTROL "使用", IDC_CHECK_USE_FONT_FOOT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 260, 192, 30, 10 - PUSHBUTTON "フォント", IDC_BUTTON_FONT_FOOT, 260, 202, 30, 14 - RTEXT "Font(xxpt/xx.xmm)", IDC_STATIC_FONT_FOOT, 145, 189, 114, 14, SS_CENTERIMAGE - DEFPUSHBUTTON "&OK", IDOK, 128, 234, 50, 14 - PUSHBUTTON "キャンセル(&X)", IDCANCEL, 183, 234, 50, 14 - PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 238, 234, 50, 14 -END - -IDD_EXITING DIALOG DISCARDABLE 0, 0, 171, 30 -STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_VISIBLE -FONT 9, "MS Pゴシック" -BEGIN - ICON IDI_ICON_STD, IDC_STATIC, 5, 5, 20, 20 - LTEXT "終了しています。 しばらくお待ちください・・・", IDC_STATIC, 30, 10, 137, 8 -END - -IDD_EXEC DIALOGEX 30, 0, 292, 137 -STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "ファイル名を指定して実行" -FONT 9, "MS Pゴシック" -BEGIN - LTEXT "名前(&N)", IDC_STATIC, 5, 6, 26, 10 - COMBOBOX IDC_COMBO_m_szCommand, 34, 4, 254, 240, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_TABSTOP - PUSHBUTTON "&...", IDC_BUTTON_REFERENCE, 278, 20, 9, 12, WS_GROUP - CONTROL "標準出力を得る(&S)", IDC_CHECK_GETSTDOUT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 32, 76, 10 - COMBOBOX IDC_COMBO_CODE_GET, 16, 43, 73, 10, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "標準入力に送る(&I)", IDC_CHECK_SENDSTDIN, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 58, 74, 10 - COMBOBOX IDC_COMBO_CODE_SEND, 16, 72, 73, 10, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "アウトプットウィンドウ(&O)", IDC_RADIO_OUTPUT, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 102, 51, 93, 10 - CONTROL "編集中のウィンドウ(&C)", IDC_RADIO_EDITWINDOW, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 196, 51, 87, 10 - GROUPBOX "標準出力リダイレクト先", IDC_STATIC, 98, 39, 190, 29, WS_GROUP - CONTROL "カレントディレクトリ(&R)", IDC_CHECK_CUR_DIR, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 86, 93, 10 - COMBOBOX IDC_COMBO_CUR_DIR, 16, 100, 263, 240, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_TABSTOP - PUSHBUTTON "...", IDC_BUTTON_REFERENCE2, 279, 100, 9, 12, WS_GROUP - DEFPUSHBUTTON "実行(&E)", IDOK, 117, 116, 50, 14 - PUSHBUTTON "キャンセル(&X)", IDCANCEL, 177, 116, 50, 14 - PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 237, 116, 50, 14 - LTEXT "[Note] $Fで編集中ファイル名, $$で$", IDC_STATIC, 140, 21, 134, 10 -END - -IDD_EXECRUNNING DIALOG DISCARDABLE 0, 0, 270, 55 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "コマンド実行中・・・" -FONT 9, "MS Pゴシック" -BEGIN - PUSHBUTTON "キャンセル(&X)", IDCANCEL, 207, 36, 59, 14 - EDITTEXT IDC_STATIC_CMD, 5, 5, 260, 23, ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP -END - -IDD_MACRORUNNING DIALOG DISCARDABLE 0, 0, 270, 55 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "" -FONT 9, "MS Pゴシック" -BEGIN - PUSHBUTTON "キャンセル(&X)", IDCANCEL, 207, 5, 59, 14 - LTEXT "マクロ実行中・・・", IDC_STATIC, 5, 5, 200, 23 - EDITTEXT IDC_STATIC_CMD, 5, 28, 260, 23, ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP -END - -IDD_HOKAN DIALOGEX 0, 0, 125, 100 -STYLE DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | WS_THICKFRAME -EXSTYLE WS_EX_TOOLWINDOW -FONT 9, "MS Pゴシック" -BEGIN - LISTBOX IDC_LIST_WORDS, 0, 0, 120, 95, LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_WANTKEYBOARDINPUT | WS_VSCROLL | WS_TABSTOP -END - -IDD_PRINTING DIALOG DISCARDABLE 0, 0, 145, 75 -STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "印刷中" -FONT 9, "MS Pゴシック" -BEGIN - PUSHBUTTON "キャンセル(&X)", IDCANCEL, 90, 56, 50, 14 - LTEXT "印刷しています・・・・", IDC_STATIC, 25, 10, 65, 10 - LTEXT "12/123頁", IDC_STATIC_PROGRESS, 25, 43, 100, 10 - LTEXT "CEditView.cpp", IDC_STATIC_JOBNAME, 25, 20, 115, 20 - ICON IDI_PRINTER, IDC_STATIC, 10, 8, 11, 9, SS_REALSIZEIMAGE -END - -IDD_FILEOPEN DIALOG DISCARDABLE 0, 0, 261, 66 -STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN -FONT 9, "MS Pゴシック" -BEGIN - LTEXT "", IDC_STATIC_STC32, 0, 0, 261, 10 - LTEXT "文字コードセット(&C):", IDC_STATIC_CHARCODE, 5, 15, 64, 10 - COMBOBOX IDC_COMBO_CODE, 71, 13, 50, 126, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "C&P", IDC_CHECK_CP, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 122, 14, 25, 10 - CONTROL "&BOM", IDC_CHECK_BOM, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 148, 14, 30, 10 - LTEXT "改行コード(&E):", IDC_STATIC_EOL, 181, 15, 45, 10 - COMBOBOX IDC_COMBO_EOL, 226, 13, 50, 126, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "最近のファイル(&F):", IDC_STATIC, 5, 32, 59, 10 - COMBOBOX IDC_COMBO_MRU, 71, 30, 185, 236, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP - LTEXT "最近のフォルダ(&D):", IDC_STATIC, 5, 49, 61, 10 - COMBOBOX IDC_COMBO_OPENFOLDER, 71, 46, 185, 236, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP -END - -IDD_FILEUPDATEQUERY DIALOG DISCARDABLE 0, 0, 223, 107 -STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION -CAPTION "ファイルが更新されました" -FONT 9, "MS Pゴシック" -BEGIN - PUSHBUTTON "再読込(&R)", IDC_BTN_RELOAD, 7, 63, 50, 14 - DEFPUSHBUTTON "閉じる(&C)", IDC_BTN_CLOSE, 59, 63, 50, 14 - PUSHBUTTON "以後未編集で再読込(&L)", IDC_BTN_AUTOLOAD, 114, 63, 102, 14 - PUSHBUTTON "以後通知メッセージのみ(&M)", IDC_BTN_NOTIFYONLY, 7, 81, 102, 14 - PUSHBUTTON "以後更新を監視しない(&N)", IDC_BTN_NOSUPERVISION, 114, 81, 102, 14 - EDITTEXT IDC_UPDATEDFILENAME, 7, 7, 209, 25, ES_READONLY | NOT WS_TABSTOP | ES_MULTILINE - LTEXT "このファイルは外部のエディタ等で変更されています。", IDC_FILEUPDATEMSG, 7, 36, 209, 10 - LTEXT "", IDC_QUERYRELOADMSG, 7, 48, 209, 10 -END - -IDD_FAVORITE DIALOGEX 0, 0, 380, 274 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_THICKFRAME | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "履歴とお気に入りの管理" -FONT 9, "MS Pゴシック" -BEGIN - CONTROL "List1", IDC_LIST_FAVORITE_FILE, "SysListView32", LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 3, 17, 373, 213 - CONTROL "List1", IDC_LIST_FAVORITE_FOLDER, "SysListView32", LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 25, 39, 243, 79 - CONTROL "List1", IDC_LIST_FAVORITE_EXCEPTMRU, "SysListView32", LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 27, 42, 243, 79 - CONTROL "List1", IDC_LIST_FAVORITE_SEARCH, "SysListView32", LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 18, 54, 243, 79 - CONTROL "List1", IDC_LIST_FAVORITE_REPLACE, "SysListView32", LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 11, 73, 243, 79 - CONTROL "List1", IDC_LIST_FAVORITE_GREP_FILE, "SysListView32", LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 14, 93, 243, 79 - CONTROL "List1", IDC_LIST_FAVORITE_GREP_FOLDER, "SysListView32", LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 18, 115, 243, 79 - CONTROL "List1", IDC_LIST_FAVORITE_CMD, "SysListView32", LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 25, 127, 243, 79 - CONTROL "List1", IDC_LIST_FAVORITE_CUR_DIR, "SysListView32", LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 25, 127, 243, 79 - PUSHBUTTON "追加(&I)", IDC_BUTTON_ADD_FAVORITE, 5, 237, 50, 14 - LTEXT " 履歴の削除:", IDC_STATIC_BUTTONS, 65, 237, 45, 14, SS_CENTERIMAGE - PUSHBUTTON "すべて(&A)...", IDC_BUTTON_CLEAR, 111, 237, 50, 14 - PUSHBUTTON "お気に入り以外(&F)...", IDC_BUTTON_DELETE_NOFAVORATE, 163, 237, 75, 14 - PUSHBUTTON "存在しない項目(&N)...", IDC_BUTTON_DELETE_NOTFOUND, 241, 237, 72, 14 - PUSHBUTTON "選択項目(&D)", IDC_BUTTON_DELETE_SELECTED, 315, 237, 58, 14 - DEFPUSHBUTTON "閉じる(&C)", IDOK, 260, 255, 50, 14 - CONTROL "Tab1", IDC_TAB_FAVORITE, "SysTabControl32", WS_TABSTOP, 3, 4, 374, 15 - PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 315, 255, 50, 14 - LTEXT "Message", IDC_STATIC_FAVORITE_MSG, 4, 254, 250, 19 -END - -IDD_TAGJUMPLIST DIALOGEX 0, 0, 410, 189 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_THICKFRAME | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "ダイレクトタグジャンプ一覧" -FONT 9, "MS Pゴシック" -BEGIN - LTEXT "DIR", IDC_STATIC_BASEDIR, 4, 151, 276, 10, SS_NOPREFIX - LTEXT "キーワード(&K)", IDC_STATIC_KEYWORD, 4, 162, 100, 10, SS_NOPREFIX - COMBOBOX IDC_KEYWORD, 3, 172, 134, 180, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP - CONTROL "List1", IDC_LIST_TAGJUMP, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 3, 4, 403, 143 - PUSHBUTTON "前へ(&P)", IDC_BUTTON_PREVTAG, 296, 152, 50, 14 - PUSHBUTTON "次へ(&N)", IDC_BUTTON_NEXTTAG, 349, 152, 50, 14 - PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 243, 170, 50, 14 - DEFPUSHBUTTON "ジャンプ(&J)", IDOK, 296, 170, 50, 14 - PUSHBUTTON "キャンセル(&X)", IDCANCEL, 349, 170, 50, 14 - CONTROL "大文字小文字の同一視(&F)", IDC_CHECK_ICASE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 144, 163, 95, 10 - CONTROL "文字列の途中にマッチ(&A)", IDC_CHECK_ANYWHERE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 144, 175, 95, 10 -END - -IDD_TAG_MAKE DIALOGEX 0, 0, 233, 85 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "タグファイルの作成" -FONT 9, "MS Pゴシック" -BEGIN - LTEXT "タグ作成フォルダ", IDC_STATIC, 7, 7, 65, 10 - EDITTEXT IDC_EDIT_TAG_MAKE_FOLDER, 7, 18, 201, 12, ES_AUTOHSCROLL - PUSHBUTTON "...", IDC_BUTTON_TAG_MAKE_REF, 211, 17, 15, 12 - PUSHBUTTON "上(&B)", IDC_BUTTON_FOLDER_UP, 186, 31, 25, 14 - CONTROL "サブフォルダも対象にする", IDC_CHECK_TAG_MAKE_RECURSE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 34, 107, 10 - LTEXT "コマンドラインオプション", IDC_STATIC, 7, 49, 86, 10 - EDITTEXT IDC_EDIT_TAG_MAKE_CMDLINE, 96, 47, 130, 12, ES_AUTOHSCROLL - DEFPUSHBUTTON "作成(&O)", IDOK, 68, 64, 50, 14 - PUSHBUTTON "キャンセル(&X)", IDCANCEL, 122, 64, 50, 14 - PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 176, 64, 50, 14 -END - -IDD_OPERATIONRUNNING DIALOG DISCARDABLE 0, 0, 190, 35 -STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "処理の実行中" -FONT 9, "MS Pゴシック" -BEGIN - LTEXT "処理中です・・・・", IDC_STATIC_MSG, 5, 5, 54, 10, NOT WS_GROUP - CONTROL "Progress1", IDC_PROGRESS, "msctls_progress32", WS_BORDER, 5, 20, 120, 10 - PUSHBUTTON "キャンセル(&X)", IDCANCEL, 135, 16, 50, 14 - RTEXT "", IDC_STATIC_KENSUU, 61, 5, 123, 10, NOT WS_GROUP -END - -IDD_DIFF DIALOGEX 0, 0, 263, 303 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_THICKFRAME | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "DIFF差分表示" -FONT 9, "MS Pゴシック" -BEGIN - GROUPBOX "比較するファイル", IDC_FRAME_DIFF_DST, 7, 47, 249, 138, WS_GROUP - EDITTEXT IDC_EDIT_DIFF_DST, 13, 72, 191, 13, ES_AUTOHSCROLL - CONTROL "外部ファイルを指定", IDC_RADIO_DIFF_DST1, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 13, 58, 78, 11 - PUSHBUTTON "参照(&R)...", IDC_BUTTON_DIFF_DST, 208, 72, 42, 14, WS_GROUP - CONTROL "他の編集中のファイル", IDC_RADIO_DIFF_DST2, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 13, 89, 147, 11 - LISTBOX IDC_LIST_DIFF_FILES, 13, 102, 236, 77, LBS_SORT | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - CONTROL "大文字小文字の同一視(&C)", IDC_CHECK_DIFF_OPT_CASE, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 7, 191, 101, 10 - CONTROL "空白無視(&W)", IDC_CHECK_DIFF_OPT_SPACE, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 7, 203, 64, 10 - CONTROL "空白変更無視(&B)", IDC_CHECK_DIFF_OPT_SPCCHG, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 7, 216, 73, 10 - CONTROL "空白行無視(&L)", IDC_CHECK_DIFF_OPT_BLINE, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 7, 229, 74, 10 - CONTROL "タブ空白変換(&T)", IDC_CHECK_DIFF_OPT_TABSPC, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 7, 242, 74, 10 - GROUPBOX "編集中ファイルが...", IDC_FRAME_DIFF_FILE12, 110, 190, 146, 26, WS_GROUP - CONTROL "新ファイル(&N)", IDC_RADIO_DIFF_FILE1, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 119, 201, 59, 10 - CONTROL "旧ファイル(&D)", IDC_RADIO_DIFF_FILE2, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 183, 201, 59, 10 - GROUPBOX "次の差分(前の差分)へ移動時", IDC_FRAME_SEARCH_MSG, 110, 221, 146, 41 - CONTROL "見つからないときにメッセージを表示(&M)", IDC_CHECK_NOTIFYNOTFOUND, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 114, 232, 140, 10 - CONTROL "先頭(末尾)から再検索する(&Z)", IDC_CHECK_SEARCHALL, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 114, 245, 130, 10 - CONTROL "DIFF差分がないときにメッセージを表示", IDC_CHECK_DIFF_EXEC_STATE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 110, 267, 139, 10 - DEFPUSHBUTTON "&OK", IDOK, 93, 282, 50, 14 - PUSHBUTTON "キャンセル(&X)", IDCANCEL, 147, 282, 50, 14 - PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 202, 282, 50, 14 - LTEXT "編集中のファイル", IDC_STATIC, 7, 7, 61, 10 - EDITTEXT IDC_STATIC_DIFF_SRC, 7, 18, 249, 23, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL, WS_EX_STATICEDGE -END - -IDD_CTRLCODE DIALOGEX 0, 0, 179, 185 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "コントロールコード" -FONT 9, "MS Pゴシック" -BEGIN - CONTROL "List1", IDC_LIST_CTRLCODE, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOLABELWRAP | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 2, 2, 175, 162 - DEFPUSHBUTTON "&OK", IDOK, 19, 168, 50, 14 - PUSHBUTTON "キャンセル(&X)", IDCANCEL, 73, 168, 50, 14 - PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 127, 168, 50, 14 -END - -IDD_SETCHARSET DIALOGEX 0, 0, 186, 45 -STYLE DS_CENTER | DS_MODALFRAME | DS_SETFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP -CAPTION "文字コードの指定" -FONT 9, "MS Pゴシック" -BEGIN - LTEXT "文字コードセット(&C):", IDC_STATIC, 5, 9, 64, 10 - COMBOBOX IDC_COMBO_CHARSET, 71, 7, 50, 126, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - AUTOCHECKBOX "C&P", IDC_CHECK_CP, 71, 26, 25, 10 - AUTOCHECKBOX "&BOM", IDC_CHECK_BOM, 96, 26, 30, 10 - DEFPUSHBUTTON "&OK", IDOK, 129, 7, 50, 14 - PUSHBUTTON "キャンセル(&X)", IDCANCEL, 129, 24, 50, 14 -END - -IDD_TYPELIST DIALOGEX 0, 0, 187, 280 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "タイプ別設定一覧" -FONT 9, "MS Pゴシック" -BEGIN - LTEXT "下からタイプを選択してください(&T):", IDC_STATIC, 5, 5, 111, 10 - LISTBOX IDC_LIST_TYPES, 5, 15, 120, 258, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - DEFPUSHBUTTON "設定変更(&S)...", IDOK, 130, 15, 50, 14 - PUSHBUTTON "一時適用(&R)", IDC_BUTTON_TEMPCHANGE, 130, 31, 50, 14 - PUSHBUTTON "キャンセル(&X)", IDCANCEL, 130, 50, 50, 14 - PUSHBUTTON "インポート(&I)", IDC_BUTTON_IMPORT, 130, 79, 50, 14 - PUSHBUTTON "エクスポート(&E)", IDC_BUTTON_EXPORT, 130, 95, 50, 14 - PUSHBUTTON "初期化(&N)", IDC_BUTTON_INITIALIZE, 130, 111, 50, 14 - PUSHBUTTON "複製(&C)", IDC_BUTTON_COPY_TYPE, 130, 127, 50, 14 - PUSHBUTTON "↑(&U)", IDC_BUTTON_UP_TYPE, 130, 143, 50, 14 - PUSHBUTTON "↓(&O)", IDC_BUTTON_DOWN_TYPE, 130, 159, 50, 14 - PUSHBUTTON "追加(&A)", IDC_BUTTON_ADD_TYPE, 130, 175, 50, 14 - PUSHBUTTON "削除(&D)", IDC_BUTTON_DEL_TYPE, 130, 191, 50, 14 - CONTROL "右クリックメニューに追加", IDC_CHECK_EXT_RMENU, "Button", BS_AUTOCHECKBOX | BS_MULTILINE | WS_DISABLED | WS_TABSTOP, 130, 207, 50, 28 - CONTROL "ダブルクリックで開く", IDC_CHECK_EXT_DBLCLICK, "Button", BS_AUTOCHECKBOX | BS_MULTILINE | WS_DISABLED | WS_TABSTOP, 130, 231, 50, 28 - PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 130, 262, 50, 14 -END - -IDD_TYPE_ASCERTAIN DIALOGEX 0, 0, 187, 100 -STYLE DS_MODALFRAME | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "インポート確認" -FONT 9, "MS Pゴシック" -BEGIN - LTEXT "読込先:", IDC_STATIC, 7, 7, 33, 10 - CONTROL "新規追加(&A)", IDC_RADIO_TYPE_ADD, "Button", BS_AUTORADIOBUTTON, 36, 7, 45, 10 - CONTROL "基本", IDC_RADIO_TYPE_TO, "Button", BS_AUTORADIOBUTTON, 86, 7, 135, 10 - LTEXT "新タイプ名:", IDC_STATIC, 7, 27, 33, 10 - LTEXT "基本", IDC_STATIC_TYPE_FILE, 45, 27, 135, 16 - LTEXT "色選択(&C)", IDC_STATIC, 7, 47, 35, 10 - COMBOBOX IDC_COMBO_COLORS, 44, 45, 100, 250, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "上記条件でインポートします。よろしいですか?", IDC_STATIC_MSG, 26, 64, 154, 10 - DEFPUSHBUTTON "&OK", IDOK, 26, 79, 50, 14 - PUSHBUTTON "キャンセル(&X)", IDCANCEL, 78, 79, 50, 14 - PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 130, 79, 50, 14 -END - -IDD_PROP_SCREEN DIALOGEX 0, 0, 302, 244 -STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "MS Pゴシック" -BEGIN - LTEXT "設定の名前(&N)", IDC_STATIC, 5, 6, 49, 10 - EDITTEXT IDC_EDIT_TYPENAME, 55, 4, 59, 12, ES_AUTOHSCROLL - LTEXT "ファイル拡張子(&X)", IDC_STATIC, 124, 6, 58, 10 - EDITTEXT IDC_EDIT_TYPEEXTS, 184, 4, 113, 12, ES_AUTOHSCROLL - RTEXT "折り返し方法(&<)", IDC_STATIC, 8, 34, 56, 10, NOT WS_GROUP - COMBOBOX IDC_COMBO_WRAPMETHOD, 70, 32, 72, 78, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - RTEXT "折り返し桁数(&R)", IDC_STATIC, 8, 49, 56, 10, NOT WS_GROUP - EDITTEXT IDC_EDIT_MAXLINELEN, 70, 48, 40, 12 - CONTROL "Spin1", IDC_SPIN_MAXLINELEN, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 117, 48, 9, 12, WS_EX_TRANSPARENT - RTEXT "文字の間隔(&C)", IDC_STATIC, 8, 63, 56, 10, NOT WS_GROUP - EDITTEXT IDC_EDIT_CHARSPACE, 70, 62, 40, 12 - CONTROL "Spin1", IDC_SPIN_CHARSPACE, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 117, 62, 9, 12, WS_EX_TRANSPARENT - LTEXT "ドット", IDC_STATIC, 114, 63, 18, 10 - RTEXT "行の間隔(&L)", IDC_STATIC, 8, 77, 56, 10, NOT WS_GROUP - EDITTEXT IDC_EDIT_LINESPACE, 70, 76, 40, 12, ES_AUTOHSCROLL - CONTROL "Spin3", IDC_SPIN_LINESPACE, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 117, 76, 9, 12 - LTEXT "ドット", IDC_STATIC, 114, 77, 18, 10 - RTEXT "TAB幅(&T)", IDC_STATIC, 8, 91, 56, 10, NOT WS_GROUP - EDITTEXT IDC_EDIT_TABSPACE, 70, 90, 40, 12, ES_AUTOHSCROLL - CONTROL "Spin3", IDC_SPIN_TABSPACE, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 117, 90, 7, 12 - LTEXT "T&AB表示", IDC_STATIC, 16, 104, 56, 10, NOT WS_GROUP - COMBOBOX IDC_CHECK_TAB_ARROW, 48, 104, 46, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - EDITTEXT IDC_EDIT_TABVIEWSTRING, 102, 104, 40, 12, ES_AUTOHSCROLL - CONTROL "S&PACEの挿入", IDC_CHECK_INS_SPACE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 70, 123, 57, 10 - COMBOBOX IDC_COMBO_TSV_MODE, 16, 121, 46, 40, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - GROUPBOX "レイアウト", IDC_STATIC, 3, 22, 145, 117 - CONTROL "自動インデント(&U)", IDC_CHECK_INDENT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 154, 72, 10 - CONTROL "全角空白も(&Z)", IDC_CHECK_INDENT_WSPACE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 83, 154, 61, 10 - LTEXT "スマートインデント(&S)", IDC_STATIC, 8, 169, 68, 10 - COMBOBOX IDC_COMBO_SMARTINDENT, 82, 167, 60, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "その他のインデント対象文字(&I)", IDC_STATIC, 8, 183, 120, 10 - EDITTEXT IDC_EDIT_INDENTCHARS, 38, 195, 103, 12, ES_AUTOHSCROLL - LTEXT "折り返し行インデント(&2)", IDC_STATIC, 8, 211, 75, 10 - COMBOBOX IDC_COMBO_INDENTLAYOUT, 87, 209, 54, 63, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "改行時に末尾の空白を削除(&E)", IDC_CHECK_RTRIM_PREVLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 224, 113, 10 - GROUPBOX "インデント", IDC_STATIC, 3, 143, 145, 97 - CONTROL "標準ルール(&B)", IDC_RADIO_OUTLINEDEFAULT, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 162, 33, 82, 10 - COMBOBOX IDC_COMBO_OUTLINES, 173, 46, 81, 85, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "ルールファイル(&D)", IDC_RADIO_OUTLINERULEFILE, "Button", BS_AUTORADIOBUTTON, 162, 63, 69, 10 - EDITTEXT IDC_EDIT_OUTLINERULEFILE, 173, 74, 92, 14, ES_AUTOHSCROLL - PUSHBUTTON "(&1)...", IDC_BUTTON_RULEFILE_REF, 268, 74, 20, 14 - GROUPBOX "アウトライン解析方法", IDC_STATIC, 153, 22, 145, 71 - CONTROL "使用する(&G)", IDC_CHECK_USETYPEFONT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 162, 108, 48, 10 - LTEXT "Font(nnpt)", IDC_STATIC_TYPEFONT, 210, 105, 85, 16, SS_CENTERIMAGE - PUSHBUTTON "フォント(&F)...", IDC_BUTTON_TYPEFONT, 173, 121, 80, 14 - GROUPBOX "タイプ別フォント", IDC_STATIC, 153, 97, 145, 42 - CONTROL "英文ワードラップ(&W)", IDC_CHECK_WORDWRAP, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 162, 154, 78, 10 - CONTROL "改行ぶら下げ(&^)", IDC_CHECK_KINSOKURET, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 162, 168, 100, 10 - CONTROL "ぶら下げを隠す(&-)", IDC_CHECK_KINSOKUHIDE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 172, 182, 100, 10 - CONTROL "句読点ぶら下げ(&\\)", IDC_CHECK_KINSOKUKUTO, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 162, 196, 95, 10 - EDITTEXT IDC_EDIT_KINSOKUKUTO, 258, 195, 30, 12, ES_AUTOHSCROLL - CONTROL "行頭禁則(&[)", IDC_CHECK_KINSOKUHEAD, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 162, 210, 54, 10 - EDITTEXT IDC_EDIT_KINSOKUHEAD, 218, 209, 70, 12, ES_AUTOHSCROLL - CONTROL "行末禁則(&])", IDC_CHECK_KINSOKUTAIL, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 162, 224, 54, 10 - EDITTEXT IDC_EDIT_KINSOKUTAIL, 218, 223, 70, 12, ES_AUTOHSCROLL - GROUPBOX "禁則処理", IDC_STATIC, 153, 143, 145, 97 -END - -IDD_PROP_COLOR DIALOGEX DISCARDABLE 0, 0, 302, 244 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -FONT 9, "MS Pゴシック" -BEGIN - GROUPBOX "色指定(&L)", IDC_STATIC, 3, 6, 148, 204, WS_GROUP - LISTBOX IDC_LIST_COLORS, 6, 18, 142, 148, LBS_OWNERDRAWFIXED | WS_VSCROLL | WS_GROUP | WS_TABSTOP - CONTROL "色分け/表示(&D)", IDC_CHECK_DISP, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 6, 165, 65, 10 - CONTROL "太字(&B)", IDC_CHECK_BOLD, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 72, 165, 36, 10 - CONTROL "下線(&U)", IDC_CHECK_UNDERLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 112, 165, 36, 10 - LTEXT "文字色(C)", IDC_STATIC_MOZI, 16, 181, 34, 10 - CONTROL "&C", IDC_BUTTON_TEXTCOLOR, "Button", BS_OWNERDRAW | WS_TABSTOP, 54, 178, 25, 14 - PUSHBUTTON "文字色統一(&<)...", IDC_BUTTON_SAMETEXTCOLOR, 84, 178, 58, 14 - LTEXT "背景色(K)", IDC_STATIC_HAIKEI, 16, 196, 33, 10, NOT WS_GROUP - CONTROL "&K", IDC_BUTTON_BACKCOLOR, "Button", BS_OWNERDRAW | WS_TABSTOP, 54, 193, 25, 14 - PUSHBUTTON "背景色統一(&>)...", IDC_BUTTON_SAMEBKCOLOR, 84, 193, 58, 14 - PUSHBUTTON "インポート(&I)...", IDC_BUTTON_IMPORT, 25, 215, 60, 14, WS_GROUP - PUSHBUTTON "エクスポート(&X)...", IDC_BUTTON_EXPORT, 88, 215, 60, 14 - LTEXT "強調キーワード&1", IDC_STATIC, 162, 18, 54, 10 - COMBOBOX IDC_COMBO_SET, 218, 16, 75, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "&2~10...", IDC_BUTTON_KEYWORD_SELECT, 218, 32, 75, 14 - PUSHBUTTON "共通設定(&C)...", IDC_BUTTON_EDITKEYWORD, 218, 47, 75, 14 - GROUPBOX "強調キーワード", IDC_STATIC, 156, 6, 142, 60, WS_GROUP - LTEXT "ブロック型(&F)", IDC_STATIC, 164, 80, 42, 10 - EDITTEXT IDC_EDIT_BLOCKCOMMENT_FROM, 211, 78, 27, 12, ES_AUTOHSCROLL - LTEXT "~(&T)", IDC_STATIC, 245, 80, 18, 10, NOT WS_GROUP - EDITTEXT IDC_EDIT_BLOCKCOMMENT_TO, 267, 78, 26, 12, ES_AUTOHSCROLL - LTEXT "ブロック型(&A)", IDC_STATIC, 164, 94, 42, 10 - EDITTEXT IDC_EDIT_BLOCKCOMMENT_FROM2, 211, 92, 27, 12, ES_AUTOHSCROLL - LTEXT "~(&Z)", IDC_STATIC, 245, 94, 18, 10, NOT WS_GROUP - EDITTEXT IDC_EDIT_BLOCKCOMMENT_TO2, 267, 92, 26, 12, ES_AUTOHSCROLL - LTEXT "行型(&M)", IDC_STATIC, 164, 110, 27, 10 - EDITTEXT IDC_EDIT_LINECOMMENT, 195, 108, 24, 12, ES_AUTOHSCROLL - CONTROL "桁(&P)", IDC_CHECK_LCPOS, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 223, 109, 33, 10 - RTEXT "&@", IDC_LABEL_LCPOS, 256, 110, 8, 10 - EDITTEXT IDC_EDIT_LINECOMMENTPOS, 267, 108, 26, 12, ES_AUTOHSCROLL - CONTROL "", IDC_SPIN_LCColNum, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 295, 108, 6, 12 - LTEXT "行型(&E)", IDC_STATIC, 164, 124, 25, 10 - EDITTEXT IDC_EDIT_LINECOMMENT2, 195, 122, 24, 12, ES_AUTOHSCROLL - CONTROL "桁(&O)", IDC_CHECK_LCPOS2, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 223, 123, 34, 10 - RTEXT "&[", IDC_LABEL_LCPOS2, 256, 124, 8, 10 - EDITTEXT IDC_EDIT_LINECOMMENTPOS2, 267, 122, 26, 12, ES_AUTOHSCROLL - CONTROL "", IDC_SPIN_LCColNum2, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 295, 122, 6, 12 - LTEXT "行型(&G)", IDC_STATIC, 164, 138, 26, 10 - EDITTEXT IDC_EDIT_LINECOMMENT3, 195, 136, 24, 12, ES_AUTOHSCROLL - CONTROL "桁(&J)", IDC_CHECK_LCPOS3, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 223, 137, 33, 10 - RTEXT "&]", IDC_LABEL_LCPOS3, 256, 138, 8, 10 - EDITTEXT IDC_EDIT_LINECOMMENTPOS3, 267, 136, 26, 12, ES_AUTOHSCROLL - CONTROL "", IDC_SPIN_LCColNum3, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 295, 136, 6, 12 - GROUPBOX "コメントスタイル", IDC_STATIC, 156, 68, 142, 85, WS_GROUP - GROUPBOX "文字列エスケープ(&Q)", IDC_STATIC, 156, 164, 142, 46, WS_GROUP - COMBOBOX IDC_COMBO_STRINGLITERAL, 160, 178, 68, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "行内のみ(&\\)", IDC_CHECK_STRINGLINEONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 233, 178, 64, 10 - CONTROL "終了文字がない場合行末まで色分け(&N)", IDC_CHECK_STRINGENDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 160, 196, 136, 10 - LTEXT "縦線桁指定(&3)", IDC_STATIC, 164, 218, 46, 10 - EDITTEXT IDC_EDIT_VERTLINE, 210, 216, 74, 12, ES_AUTOHSCROLL - LTEXT "*桁またはStep(Begin, End)でコンマ区切り", IDC_STATIC, 165, 230, 142, 10 -END - -IDD_PROP_SUPPORT DIALOGEX 0, 0, 302, 244 -STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "MS Pゴシック" -BEGIN - LTEXT "単語ファイル(&W)", IDC_STATIC, 8, 17, 53, 10, NOT WS_GROUP - EDITTEXT IDC_EDIT_HOKANFILE, 63, 15, 150, 12, ES_AUTOHSCROLL | WS_GROUP - PUSHBUTTON "(&1)...", IDC_BUTTON_HOKANFILE_REF, 215, 14, 19, 14 - COMBOBOX IDC_COMBO_HOKAN_TYPE, 236, 15, 58, 57, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "英大文字小文字を同一視(&I)", IDC_CHECK_HOKANLOHICASE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 31, 110, 10 - LTEXT "候補:", IDC_STATIC, 122, 33, 20, 10, NOT WS_GROUP - CONTROL "編集中のファイル(&F)", IDC_CHECK_HOKANBYFILE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 142, 31, 75, 10 - CONTROL "強調キーワード(&K)", IDC_CHECK_HOKANBYKEYWORD, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 217, 31, 75, 10 - GROUPBOX "入力補完機能", IDC_STATIC, 3, 3, 295, 45, WS_GROUP - GROUPBOX "外部ヘルプの設定(&L)", IDC_STATIC, 3, 55, 295, 32, WS_GROUP - EDITTEXT IDC_EDIT_TYPEEXTHELP, 8, 68, 264, 12, ES_AUTOHSCROLL | WS_GROUP - PUSHBUTTON "(&2)...", IDC_BUTTON_TYPEOPENHELP, 275, 67, 19, 14 - GROUPBOX "外部HTMLヘルプの設定(&P)", IDC_STATIC, 3, 95, 295, 45, WS_GROUP - EDITTEXT IDC_EDIT_TYPEEXTHTMLHELP, 8, 109, 264, 12, ES_AUTOHSCROLL | WS_GROUP - PUSHBUTTON "(&3)...", IDC_BUTTON_TYPEOPENEXTHTMLHELP, 275, 107, 19, 14 - CONTROL "ビューアを複数起動しない(&N)", IDC_CHECK_TYPEHTMLHELPISSINGLE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 125, 109, 10 - CONTROL "保存時に改行コードの混在を警告する(&E)", IDC_CHECK_CHKENTERATEND, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 145, 146, 10 - CONTROL "文字列を無視する(&S)", IDC_CHECK_INDENTCPPSTR, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 171, 146, 10 - CONTROL "コメントを無視する(&C)", IDC_CHECK_INDENTCPPCMT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 158, 171, 130, 10 - CONTROL "Undoバッファを分ける(&U)", IDC_CHECK_INDENTCPPUNDO, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 183, 146, 10 - GROUPBOX "C/C++インデント詳細設定", IDC_STATIC, 3, 159, 295, 40, WS_GROUP -END - -IDD_PROP_REGEX DIALOGEX 0, 0, 302, 244 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "MS Pゴシック" -BEGIN - CONTROL "正規表現キーワードを使用する(&R)", IDC_CHECK_REGEX, "Button", BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP, 5, 5, 124, 10 - RTEXT "BREGONIG.DLL Version", IDC_LABEL_REGEX_VERSION, 89, 15, 208, 11, NOT WS_GROUP, WS_EX_TRANSPARENT - GROUPBOX "正規表現キーワード(&K)", IDC_FRAME_REGEX, 3, 24, 295, 169 - CONTROL "List5", IDC_LIST_REGEX, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOLABELWRAP | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 8, 36, 243, 115 - LTEXT "正規表現(&N)", IDC_LABEL_REGEX_KEYWORD, 13, 157, 41, 10, NOT WS_GROUP - EDITTEXT IDC_EDIT_REGEX, 59, 155, 192, 14, ES_AUTOHSCROLL - LTEXT "色指定(&C)", IDC_LABEL_REGEX_COLOR, 20, 174, 34, 10, NOT WS_GROUP - COMBOBOX IDC_COMBO_REGEX_COLOR, 59, 172, 128, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "挿入(&S)", IDC_BUTTON_REGEX_INS, 255, 118, 38, 15 - PUSHBUTTON "追加(&A)", IDC_BUTTON_REGEX_ADD, 255, 136, 38, 15 - PUSHBUTTON "更新(&E)", IDC_BUTTON_REGEX_UPD, 255, 154, 38, 15 - PUSHBUTTON "削除(&D)", IDC_BUTTON_REGEX_DEL, 255, 172, 38, 15 - PUSHBUTTON "先頭(&T)", IDC_BUTTON_REGEX_TOP, 255, 36, 38, 15 - PUSHBUTTON "上へ(&U)", IDC_BUTTON_REGEX_UP, 255, 54, 38, 15 - PUSHBUTTON "下へ(&G)", IDC_BUTTON_REGEX_DOWN, 255, 72, 38, 15 - PUSHBUTTON "最終(&B)", IDC_BUTTON_REGEX_LAST, 255, 90, 38, 15 - PUSHBUTTON "インポート(&I)...", IDC_BUTTON_REGEX_IMPORT, 173, 196, 60, 14, WS_GROUP - PUSHBUTTON "エクスポート(&X)...", IDC_BUTTON_REGEX_EXPORT, 236, 196, 60, 14 - LTEXT "[色指定]で「URL」を選択するとマッチ文字列がクリッカブルになります", IDC_STATIC, 14, 195, 138, 20 -END - -IDD_PROP_KEYHELP DIALOGEX 0, 0, 302, 244 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "MS Pゴシック" -BEGIN - CONTROL "キーワードヘルプ機能を使う(&K)", IDC_CHECK_KEYHELP, "Button", BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP, 5, 6, 114, 10 - GROUPBOX "辞書ファイル一覧(&L)", IDC_FRAME_KEYHELP, 3, 21, 295, 174 - CONTROL "List5", IDC_LIST_KEYHELP, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOLABELWRAP | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 8, 33, 238, 118 - LTEXT "<辞書の説明>", IDC_LABEL_KEYHELP_TITLE, 10, 159, 50, 10, NOT WS_GROUP - LTEXT "辞書ファイルの概要", IDC_LABEL_KEYHELP_ABOUT, 61, 159, 185, 10, NOT WS_GROUP, WS_EX_TRANSPARENT - LTEXT "辞書ファイル", IDC_LABEL_KEYHELP_KEYWORD, 13, 173, 41, 10, NOT WS_GROUP - EDITTEXT IDC_EDIT_KEYHELP, 61, 172, 170, 12, ES_AUTOHSCROLL - PUSHBUTTON "...", IDC_BUTTON_KEYHELP_REF, 234, 172, 12, 13, WS_GROUP - LTEXT "↑優先度(高)", IDC_LABEL_KEYHELP_PRIOR, 249, 33, 44, 10, NOT WS_GROUP - PUSHBUTTON "挿入(&S)", IDC_BUTTON_KEYHELP_INS, 251, 136, 38, 15 - PUSHBUTTON "更新(&E)", IDC_BUTTON_KEYHELP_UPD, 251, 154, 38, 15 - PUSHBUTTON "削除(&D)", IDC_BUTTON_KEYHELP_DEL, 251, 172, 38, 15 - PUSHBUTTON "先頭(&T)", IDC_BUTTON_KEYHELP_TOP, 251, 44, 38, 15 - PUSHBUTTON "上へ(&U)", IDC_BUTTON_KEYHELP_UP, 251, 62, 38, 15 - PUSHBUTTON "下へ(&G)", IDC_BUTTON_KEYHELP_DOWN, 251, 80, 38, 15 - PUSHBUTTON "最終(&B)", IDC_BUTTON_KEYHELP_LAST, 251, 98, 38, 15 - PUSHBUTTON "インポート(&I)...", IDC_BUTTON_KEYHELP_IMPORT, 173, 199, 60, 14, WS_GROUP - PUSHBUTTON "エクスポート(&X)...", IDC_BUTTON_KEYHELP_EXPORT, 236, 199, 60, 14 - CONTROL "ヒットした次の辞書も検索(&A)", IDC_CHECK_KEYHELP_ALLSEARCH, "Button", BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP, 7, 200, 105, 10 - CONTROL "キーワードも表示する(&W)", IDC_CHECK_KEYHELP_KEYDISP, "Button", BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP, 7, 212, 95, 10 - CONTROL "選択範囲で前方一致検索(&P)", IDC_CHECK_KEYHELP_PREFIX, "Button", BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP, 7, 224, 108, 10 - LTEXT "右クリックメニュー(&R)", IDC_STATIC_MENU, 120, 225, 70, 10, NOT WS_GROUP - COMBOBOX IDC_COMBO_MENU, 192, 223, 60, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP -END - -IDD_PROP_WINDOW DIALOGEX 0, 0, 302, 244 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -FONT 9, "MS Pゴシック" -BEGIN - LTEXT "入力モード", IDC_STATIC, 5, 6, 40, 10 - LTEXT "改行コード(&E)", IDC_STATIC, 8, 34, 46, 10 - COMBOBOX IDC_COMBO_DEFAULT_EOLTYPE, 57, 32, 52, 57, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "&BOM", IDC_CHECK_DEFAULT_BOM, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 114, 33, 30, 10 - LTEXT "文字コード(&C)", IDC_STATIC, 8, 49, 46, 10 - COMBOBOX IDC_COMBO_DEFAULT_CODETYPE, 57, 48, 52, 57, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "C&P", IDC_CHECK_CP, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 114, 49, 25, 10 - CONTROL "自動判別時にCESU-8 を優先する(&U)", IDC_CHECK_PRIOR_CESU8, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 64, 135, 10 - GROUPBOX "デフォルトの文字コード", IDC_STATIC, 3, 20, 145, 62 - LTEXT "ON/OFF状態(&M)", IDC_STATIC, 169, 34, 55, 10 - COMBOBOX IDC_COMBO_IMESWITCH, 232, 32, 61, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "入力モード(&D)", IDC_STATIC, 179, 50, 45, 10 - COMBOBOX IDC_COMBO_IMESTATE, 232, 48, 61, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - GROUPBOX "起動時のIME (日本語入力変換)", IDC_STATIC, 153, 20, 145, 62 - CONTROL "", IDC_STATIC, "Static", SS_ETCHEDFRAME, 5, 88, 293, 1 - LTEXT "ウィンドウ", IDC_STATIC, 5, 96, 36, 10 - CONTROL "文書アイコンを使う(&O)", IDC_CHECK_DOCICON, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 107, 86, 10 - CONTROL "折り返し単位(&R)", IDC_RADIO_LINENUM_LAYOUT, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 8, 134, 64, 10 - CONTROL "改行単位(&W)", IDC_RADIO_LINENUM_CRLF, "Button", BS_AUTORADIOBUTTON, 8, 149, 64, 10 - LTEXT "桁数", IDC_STATIC, 18, 165, 16, 10 - EDITTEXT IDC_EDIT_LINENUMWIDTH, 41, 163, 31, 12, ES_AUTOHSCROLL - CONTROL "Spin3", IDC_SPIN_LINENUMWIDTH, "msctls_updown32", UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY, 61, 163, 9, 12 - GROUPBOX "行番号の表示", IDC_STATIC, 4, 122, 70, 59, WS_GROUP - CONTROL "なし(&N)", IDC_RADIO_LINETERMTYPE0, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 83, 134, 39, 10 - CONTROL "縦線(&V)", IDC_RADIO_LINETERMTYPE1, "Button", BS_AUTORADIOBUTTON, 83, 149, 41, 10 - CONTROL "任意(&Y)", IDC_RADIO_LINETERMTYPE2, "Button", BS_AUTORADIOBUTTON, 83, 164, 41, 10 - LTEXT "半角(&S)", IDC_LABEL_LINETERMCHAR, 93, 178, 26, 10 - EDITTEXT IDC_EDIT_LINETERMCHAR, 124, 177, 15, 12, ES_AUTOHSCROLL - GROUPBOX "行番号区切り", IDC_STATIC, 78, 122, 70, 80 - - EDITTEXT IDC_EDIT_BACKIMG_PATH, 158, 134, 122, 12, ES_AUTOHSCROLL - PUSHBUTTON "...", IDC_BUTTON_BACKIMG_PATH_SEL, 282, 134, 12, 12 - LTEXT "表示位置", IDC_STATIC, 158, 150, 40, 10 - COMBOBOX IDC_COMBO_BACKIMG_POS, 158, 163, 39, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "X", IDC_STATIC, 200, 165, 8, 10 - LTEXT "Y", IDC_STATIC, 200, 180, 8, 10 - LTEXT "Offset", IDC_STATIC, 210, 150, 25, 10 - EDITTEXT IDC_EDIT_BACKIMG_OFFSET_X, 210, 163, 20, 12 - EDITTEXT IDC_EDIT_BACKIMG_OFFSET_Y, 210, 178, 20, 12 - LTEXT "Repeat", IDC_STATIC, 235, 150, 26, 10 - CONTROL "", IDC_CHECK_BACKIMG_REP_X, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 243, 164, 10, 10 - CONTROL "", IDC_CHECK_BACKIMG_REP_Y, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 243, 179, 10, 10 - LTEXT "Scroll", IDC_STATIC, 270, 150, 26, 10 - CONTROL "", IDC_CHECK_BACKIMG_SCR_X, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 276, 164, 10, 10 - CONTROL "", IDC_CHECK_BACKIMG_SCR_Y, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 276, 179, 10, 10 - LTEXT "透明度", IDC_STATIC, 158, 194, 45, 10 - CONTROL "",IDC_TRACKBAR_BACKIMG_TRANSPARENCY, "msctls_trackbar32", TBS_BOTH | TBS_NOTICKS | WS_TABSTOP, 205, 193, 60, 12 - EDITTEXT IDC_EDIT_BACKIMG_TRANSPARENCY, 265, 193, 28, 12 - CONTROL "Spin1", IDC_UPDOWN_BACKIMG_TRANSPARENCY, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 285, 193, 9, 12 - GROUPBOX "背景画像", IDC_STATIC, 153, 122, 145, 90 -END - -IDD_DIALOG_KEYWORD_SELECT DIALOGEX 0, 0, 177, 197 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "強調キーワードの設定" -FONT 9, "MS Pゴシック" -BEGIN - DEFPUSHBUTTON "&OK", IDOK, 31, 176, 50, 14 - PUSHBUTTON "キャンセル(&X)", IDCANCEL, 91, 176, 50, 14 - LTEXT "強調キーワード&1", IDC_STATIC, 7, 15, 54, 13 - COMBOBOX IDC_COMBO1, 68, 13, 104, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "強調キーワード&2", IDC_STATIC, 7, 31, 54, 13 - COMBOBOX IDC_COMBO2, 68, 29, 104, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "強調キーワード&3", IDC_STATIC, 7, 48, 54, 13 - COMBOBOX IDC_COMBO3, 68, 45, 104, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "強調キーワード&4", IDC_STATIC, 7, 63, 54, 13 - COMBOBOX IDC_COMBO4, 68, 61, 104, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "強調キーワード&5", IDC_STATIC, 7, 80, 54, 13 - COMBOBOX IDC_COMBO5, 68, 77, 104, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "強調キーワード&6", IDC_STATIC, 7, 95, 54, 13 - COMBOBOX IDC_COMBO6, 68, 93, 104, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "強調キーワード&7", IDC_STATIC, 7, 111, 54, 13 - COMBOBOX IDC_COMBO7, 68, 109, 104, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "強調キーワード&8", IDC_STATIC, 7, 126, 54, 13 - COMBOBOX IDC_COMBO8, 68, 125, 104, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "強調キーワード&9", IDC_STATIC, 7, 143, 54, 13 - COMBOBOX IDC_COMBO9, 68, 141, 104, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "強調キーワード1&0", IDC_STATIC, 7, 159, 58, 13 - COMBOBOX IDC_COMBO10, 68, 157, 104, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP -END - -IDD_SAMECOLOR DIALOGEX 0, 0, 183, 206 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "文字色統一" -FONT 9, "MS Pゴシック" -BEGIN - LTEXT "統一色", IDC_STATIC, 7, 13, 24, 10 - LTEXT "Static", IDC_STATIC_COLOR, 35, 10, 86, 14, SS_CENTERIMAGE - LTEXT "変更対象の色(&C)を選んでチェック状態にしてください", IDC_STATIC, 7, 29, 166, 10 - LISTBOX IDC_LIST_COLORS, 7, 41, 114, 90, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "全チェック(&A)", IDC_BUTTON_SELALL, 125, 70, 49, 14 - PUSHBUTTON "全解除(&N)", IDC_BUTTON_SELNOTING, 125, 89, 49, 14 - LISTBOX IDC_LIST_ITEMINFO, 7, 143, 114, 35, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL - DEFPUSHBUTTON "&OK", IDOK, 15, 185, 49, 14 - PUSHBUTTON "キャンセル(&X)", IDCANCEL, 67, 185, 49, 14 - PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 119, 185, 49, 14 -END - -IDD_PROP_GENERAL DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "MS Pゴシック" -BEGIN - GROUPBOX "カーソル", IDC_STATIC, 3, 3, 149, 90 - CONTROL "フリーカーソル(&F)", IDC_CHECK_FREECARET, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 16, 120, 10 - CONTROL "単語単位で移動するときに\n単語の両端に止まる(&B)", IDC_CHECK_STOPS_BOTH_ENDS_WHEN_SEARCH_WORD, "Button", BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP, 8, 28, 120, 20 - CONTROL "段落単位で移動するときに\n段落の両端に止まる(&P)", IDC_CHECK_STOPS_BOTH_ENDS_WHEN_SEARCH_PARAGRAPH, "Button", BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP, 8, 48, 120, 20 - CONTROL "マウスクリックでのアクティブ化では\nカーソルを移動しない(&O)", IDC_CHECK_NOMOVE_ACTIVATE_BY_MOUSE, "Button", BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP, 8, 68, 133, 20 - GROUPBOX "カーソル形状", IDC_STATIC, 3, 93, 149, 26, WS_GROUP - CONTROL "&Windows風", IDC_RADIO_CARETTYPE0, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 8, 104, 61, 10 - CONTROL "MS-&DOS風", IDC_RADIO_CARETTYPE1, "Button", BS_AUTORADIOBUTTON, 69, 104, 61, 10 - GROUPBOX "タスクトレイ", IDC_STATIC, 3, 122, 149, 68, WS_GROUP - CONTROL "タスクトレイを使う(&T)", IDC_CHECK_USETRAYICON, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 135, 81, 10 - CONTROL "タスクトレイに常駐(&R)", IDC_CHECK_STAYTASKTRAY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 148, 104, 10 - LTEXT "左クリックメニューのショートカットキー(&K)", IDC_STATIC, 8, 161, 131, 10 - CONTROL "HotKey1", IDC_HOTKEY_TRAYMENU, "msctls_hotkey32", WS_BORDER | WS_TABSTOP, 8, 172, 95, 12 - CONTROL "同時に複数の編集用ウィンドウを\n閉じるとき確認(&U)", IDC_CHECK_CLOSEALLCONFIRM, "Button", BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 8, 194, 124, 20 - CONTROL "サクラエディタの全終了で編集用\nウィンドウを閉じるとき確認(&V)", IDC_CHECK_EXITCONFIRM, "Button", BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 8, 214, 124, 20 - GROUPBOX "スクロール", IDC_STATIC, 158, 3, 130, 135, WS_GROUP - LTEXT "行数(&N)", IDC_STATIC, 163, 19, 29, 10, NOT WS_GROUP - EDITTEXT IDC_EDIT_REPEATEDSCROLLLINENUM, 196, 17, 40, 12, ES_AUTOHSCROLL | WS_GROUP - CONTROL "Spin3", IDC_SPIN_REPEATEDSCROLLLINENUM, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 236, 17, 9, 12 - CONTROL "少し滑らかにする(&S)", IDC_CHECK_REPEATEDSCROLLSMOOTH, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 163, 33, 80, 10 - LTEXT "組み合わせてホイール操作した時\nページスクロールする(&J)", IDC_STATIC, 163, 48, 110, 20, NOT WS_GROUP - COMBOBOX IDC_COMBO_WHEEL_PAGESCROLL, 178, 72, 85, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "組み合わせてホイール操作した時\n横スクロールする(&H)", IDC_STATIC, 163, 90, 111, 20, NOT WS_GROUP - COMBOBOX IDC_COMBO_WHEEL_HSCROLL, 178, 114, 85, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "画面キャッシュを使う(&G)", IDC_CHECK_MEMDC, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 163, 142, 96, 16 - GROUPBOX "履歴", IDC_STATIC, 158, 160, 130, 74, WS_GROUP - LTEXT "ファイルの履歴&MAX", IDC_STATIC, 163, 172, 74, 10, NOT WS_GROUP - EDITTEXT IDC_EDIT_MAX_MRU_FILE, 168, 184, 28, 12, ES_AUTOHSCROLL | WS_GROUP - CONTROL "Spin1", IDC_SPIN_MAX_MRU_FILE, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 196, 184, 9, 12 - PUSHBUTTON "履歴をクリア(&C)...", IDC_BUTTON_CLEAR_MRU_FILE, 208, 184, 61, 14 - LTEXT "フォルダの履歴MA&X", IDC_STATIC, 163, 202, 74, 10 - EDITTEXT IDC_EDIT_MAX_MRU_FOLDER, 168, 214, 28, 12, ES_AUTOHSCROLL | WS_GROUP - CONTROL "Spin1", IDC_SPIN_MAX_MRU_FOLDER, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 196, 214, 9, 12 - PUSHBUTTON "履歴をクリア(&L)...", IDC_BUTTON_CLEAR_MRU_FOLDER, 208, 214, 61, 14 -END - -IDD_PROP_WIN DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "MS Pゴシック" -BEGIN - CONTROL "ツールバー表示(&T)", IDC_CHECK_DispTOOLBAR, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 7, 17, 76, 10 - CONTROL "ファンクションキー表示(&K)", IDC_CHECK_DispFUNCKEYWND, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 30, 96, 10 - CONTROL "ステータスバー表示(&S)", IDC_CHECK_DispSTATUSBAR, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 43, 88, 10 - CONTROL "水平スクロールバー(&R)", IDC_CHECK_bScrollBarHorz, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 104, 17, 89, 10 - CONTROL "アイコン付きメニュー(&I)", IDC_CHECK_bMenuIcon, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 195, 17, 87, 10 - PUSHBUTTON "位置と大きさの設定(&W)...", IDC_BUTTON_WINSIZE, 202, 35, 83, 14 - LTEXT "タブバー表示は\n[タブバー]タブにあります", IDC_STATIC, 111, 32, 83, 20 - GROUPBOX "基本設定", IDC_STATIC, 3, 3, 285, 57, WS_GROUP - LTEXT "ルーラーの高さ(&E)", IDC_STATIC, 7, 76, 58, 10 - EDITTEXT IDC_EDIT_nRulerHeight, 101, 74, 28, 12, ES_AUTOHSCROLL - CONTROL "Spin1", IDC_SPIN_nRulerHeight, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 124, 74, 10, 12 - LTEXT "ドット", IDC_STATIC, 133, 76, 17, 10 - LTEXT "ルーラーとテキストの隙間(&P)", IDC_STATIC, 7, 89, 91, 10 - EDITTEXT IDC_EDIT_nRulerBottomSpace, 101, 88, 28, 12, ES_AUTOHSCROLL - CONTROL "Spin1", IDC_SPIN_nRulerBottomSpace, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 124, 87, 10, 12 - LTEXT "ドット", IDC_STATIC, 133, 89, 17, 10 - LTEXT "行番号とテキストの隙間(&L)", IDC_STATIC, 7, 104, 86, 10 - EDITTEXT IDC_EDIT_nLineNumberRightSpace, 101, 102, 28, 12, ES_AUTOHSCROLL - CONTROL "Spin1", IDC_SPIN_nLineNumberRightSpace, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 124, 102, 10, 12 - LTEXT "ドット", IDC_STATIC, 133, 104, 17, 10 - GROUPBOX "ルーラー / 行番号", IDC_STATIC, 3, 64, 153, 54 - CONTROL "垂直スクロールの同期をとる(&V)", IDC_CHECK_SplitterWndVScroll, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 134, 115, 10 - CONTROL "水平スクロールの同期をとる(&H)", IDC_CHECK_SplitterWndHScroll, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 147, 116, 10 - GROUPBOX "分割ウィンドウ", IDC_STATIC, 3, 122, 153, 39, WS_GROUP - LTEXT "位置", IDC_STATIC, 167, 76, 16, 10 - CONTROL "上(&O)", IDC_RADIO_FUNCKEYWND_PLACE1, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 191, 76, 34, 10 - CONTROL "下(&B)", IDC_RADIO_FUNCKEYWND_PLACE2, "Button", BS_AUTORADIOBUTTON, 227, 76, 34, 10 - LTEXT "グループボタン数(&G)", IDC_STATIC, 167, 89, 67, 10 - EDITTEXT IDC_EDIT_FUNCKEYWND_GROUPNUM, 236, 88, 28, 12, ES_AUTOHSCROLL | ES_NUMBER - CONTROL "Spin1", IDC_SPIN_FUNCKEYWND_GROUPNUM, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 262, 88, 10, 12 - GROUPBOX "ファンクションキー", IDC_STATIC, 162, 64, 126, 40 - LTEXT "アクティブ時(&1)", IDC_STATIC, 7, 179, 59, 10 - EDITTEXT IDC_WINCAPTION_ACTIVE, 67, 176, 216, 14, ES_AUTOHSCROLL - LTEXT "非アクティブ時(&2)", IDC_STATIC, 7, 196, 58, 10 - EDITTEXT IDC_WINCAPTION_INACTIVE, 67, 193, 216, 14, ES_AUTOHSCROLL - GROUPBOX "タイトルバー", IDC_STATIC, 3, 165, 285, 47 - GROUPBOX "言語", IDC_STATIC, 162, 108, 126, 40 - COMBOBOX IDC_COMBO_LANGUAGE, 178, 126, 105, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP -END - -IDD_PROP_TOOLBAR DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "MS Pゴシック" -BEGIN - RTEXT "種別(&K)", IDC_LABEL_MENUFUNCKIND, 4, 4, 51, 10 - COMBOBOX IDC_COMBO_FUNCKIND, 56, 2, 70, 170, CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - LTEXT "機能(&F)", IDC_LABEL_MENUFUNC, 3, 15, 40, 10 - LISTBOX IDC_LIST_FUNC, 3, 25, 123, 199, LBS_OWNERDRAWFIXED | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - CONTROL "フラットなボタン(&L)", IDC_CHECK_TOOLBARISFLAT, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 202, 2, 73, 10 - LTEXT "ツールバー(&T)", IDC_LABEL_TOOLBAR, 164, 15, 46, 10 - LISTBOX IDC_LIST_RES, 164, 25, 123, 199, LBS_OWNERDRAWFIXED | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - PUSHBUTTON "削除(&D)", IDC_BUTTON_DELETE, 129, 32, 33, 14, WS_GROUP - PUSHBUTTON "---(&S)", IDC_BUTTON_INSERTSEPARATOR, 129, 51, 33, 14 - PUSHBUTTON "→(&A)", IDC_BUTTON_INSERT, 129, 71, 33, 14 - PUSHBUTTON ">>(&B)", IDC_BUTTON_ADD, 129, 85, 33, 14 - PUSHBUTTON "↑(&U)", IDC_BUTTON_UP, 129, 105, 33, 14 - PUSHBUTTON "↓(&O)", IDC_BUTTON_DOWN, 129, 119, 33, 14 - PUSHBUTTON "折返(&W)", IDC_BUTTON_INSERTWRAP, 129, 151, 33, 14 -END - -IDD_PROP_TAB DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP | WS_EX_COMPOSITED -FONT 9, "MS Pゴシック" -BEGIN - CONTROL "タブバーを表示する(&D)", IDC_CHECK_DispTabWnd, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 11, 111, 10 - CONTROL "ウィンドウをまとめてグループ化する(&B)", IDC_CHECK_DispTabWndMultiWin, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 15, 40, 239, 10 - CONTROL "最後のファイルを閉じたとき(無題)文書を残す(&R)", IDC_CHECK_RetainEmptyWindow, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 24, 53, 226, 10 - CONTROL "ウィンドウの閉じるボタンは現在のファイルのみ閉じる(&C)", IDC_CHECK_CloseOneWin, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 24, 66, 226, 10 - CONTROL "外部から起動するときは新しいウインドウで開く(&O)", IDC_CHECK_OpenNewWin, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 24, 79, 170, 10 - GROUPBOX "動作モード", IDC_STATIC, 7, 27, 280, 68 - CONTROL "アイコン表示(&I)", IDC_CHECK_DispTabIcon, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 15, 115, 63, 10 - CONTROL "等幅(&E)", IDC_CHECK_SameTabWidth, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 80, 115, 39, 10 - LTEXT "閉じるボタン(&X)", IDC_TextTabClose, 124, 116, 48, 10 - COMBOBOX IDC_CHECK_DispTabClose, 173, 113, 46, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "フォント(&F)...", IDC_BUTTON_TABFONT, 232, 113, 51, 14 - RTEXT "Font", IDC_STATIC_TABFONT, 102, 127, 180, 12, SS_RIGHT - CONTROL "タブ一覧をソートする(&S)", IDC_CHECK_SortTabList, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 15, 129, 85, 10 - CONTROL "多段(&M)", IDC_CHECK_TAB_MULTILINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 15, 141, 60, 10 - RTEXT "表示位置(&P)", IDC_TAB_POSITION, 80, 143, 40, 10 - COMBOBOX IDC_COMBO_TAB_POSITION, 124, 140, 46, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "タイトル(&T)", IDC_TextTabCaption, 15, 160, 40, 10 - EDITTEXT IDC_TABWND_CAPTION, 56, 157, 226, 14, ES_AUTOHSCROLL - GROUPBOX "タブの外観", IDC_STATIC, 7, 102, 280, 76, WS_GROUP - CONTROL "マウスホイールでタブ切替(&W)", IDC_CHECK_ChgWndByWheel, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 15, 196, 127, 10 - GROUPBOX "その他", IDC_STATIC, 7, 184, 280, 28, WS_GROUP -END - -IDD_PROP_STATUSBAR DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "MS Pゴシック" -BEGIN - GROUPBOX "表示文字コードの指定", IDC_STATIC, 3, 3, 285, 92 - CONTROL "SJIS, Latin1等で文字コード値をUnicodeで表示する(&S)", IDC_CHECK_DISP_UNICODE_IN_SJIS, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 16, 205, 10 - CONTROL "JISで文字コード値をUnicodeで表示する(&J)", IDC_CHECK_DISP_UNICODE_IN_JIS, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 32, 205, 10 - CONTROL "EUCで文字コード値をUnicodeで表示する(&E)", IDC_CHECK_DISP_UNICODE_IN_EUC, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 48, 205, 10 - CONTROL "UTF-8およびCESU-8をコードポイントで表示する(&8)", IDC_CHECK_DISP_UTF8_CODEPOINT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 64, 205, 10 - CONTROL "サロゲートペアをコードポイントで表示する(&P)", IDC_CHECK_DISP_SP_CODEPOINT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 80, 205, 10 - GROUPBOX "表示文字数の指定", IDC_STATIC, 3, 98, 285, 47 - CONTROL "選択文字数を文字単位ではなくバイト単位で表示する(&B) ※高負荷のため非推奨", IDC_CHECK_DISP_SELCOUNT_BY_BYTE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 112, 274, 10 - CONTROL "現在桁をルーラー単位ではなく文字単位で表示する(&C)", IDC_CHECK_DISP_COL_BY_CHAR, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 128, 274, 10 -END - -IDD_PROP_EDIT DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "MS Pゴシック" -BEGIN - CONTROL "折り返し行に改行を付けてコピー(&C)", IDC_CHECK_ADDCRLFWHENCOPY, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 16, 131, 10 - CONTROL "コピーしたら選択解除(&R)", IDC_CHECK_COPYnDISABLESELECTEDAREA, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 29, 131, 10 - CONTROL "選択なしでコピーを可能にする(&E)", IDC_CHECK_bEnableNoSelectCopy, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 42, 131, 10 - CONTROL "ラインモード貼り付けを可能にする(&L)", IDC_CHECK_bEnableLineModePaste, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 55, 131, 10 - CONTROL "改行コードを変換して貼り付ける(&P)", IDC_CHECK_CONVERTEOLPASTE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 68, 131, 10 - GROUPBOX "コピー", IDC_STATIC, 3, 3, 137, 81, WS_GROUP - CONTROL "ドラッグ && ドロップ編集する(&D)", IDC_CHECK_DRAGDROP, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 104, 131, 10 - CONTROL "ドロップ元にする(&S)", IDC_CHECK_DROPSOURCE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 117, 131, 10 - GROUPBOX "ドラッグ && ドロップ", IDC_STATIC, 3, 91, 137, 43, WS_GROUP - CONTROL "改行コードは上書きしない(&N)", IDC_CHECK_bNotOverWriteCRLF, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 156, 131, 10 - CONTROL "文字幅に合わせてスペースを詰める(&F)", IDC_CHECK_bOverWriteFixMode, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 169, 131, 10 - CONTROL "矩形入力で選択範囲を削除する(&G)", IDC_CHECK_bOverWriteBoxDelete, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 182, 131, 10 - GROUPBOX "上書きモード", IDC_STATIC, 3, 143, 137, 58, WS_GROUP - CONTROL "クリックで&URLを選択する", IDC_CHECK_bSelectClickedURL, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 149, 18, 120, 10 - GROUPBOX "クリッカブルURL", IDC_STATIC, 144, 3, 142, 35, WS_GROUP - CONTROL "カレントフォルダ(&U)", IDC_RADIO_CURDIR, "Button", BS_AUTORADIOBUTTON, 149, 54, 90, 10 - CONTROL "最近使ったフォルダ(&M)", IDC_RADIO_MRUDIR, "Button", BS_AUTORADIOBUTTON, 149, 69, 90, 10 - CONTROL "指定フォルダ(&F)", IDC_RADIO_SELDIR, "Button", BS_AUTORADIOBUTTON, 149, 84, 90, 10 - EDITTEXT IDC_EDIT_FILEOPENDIR, 149, 100, 111, 12, ES_AUTOHSCROLL - PUSHBUTTON "...", IDC_BUTTON_FILEOPENDIR, 261, 100, 9, 12 - GROUPBOX "ファイルダイアログの初期位置", IDC_STATIC, 144, 41, 142, 79, WS_GROUP - CONTROL "Vistaスタイルのファイルダイアログ(&I)", IDC_CHECK_VISTA_STYLE_FILEDIALOG, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 149, 128, 137, 10 - CONTROL "改行コードNEL, PS, LSを有効にする(&O)", IDC_CHECK_ENABLEEXTEOL, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 149, 158, 134, 10 - CONTROL "矩形選択移動で選択をロックする(&B)", IDC_CHECK_BOXSELECTLOCK, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 149, 171, 134, 10 - GROUPBOX "その他", IDC_STATIC, 144, 145, 142, 42, WS_GROUP -END - -IDD_PROP_FILE DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "MS Pゴシック" -BEGIN - LTEXT "排他制御(&H)", IDC_STATIC, 8, 18, 48, 10 - COMBOBOX IDC_COMBO_FILESHAREMODE, 60, 16, 84, 78, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "更新の監視(&W)", IDC_CHECK_bCheckFileTimeStamp, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 33, 60, 10 - LTEXT "自動読込時遅延(&A)", IDC_LABEL_AUTOLOAD_DELAY, 68, 33, 62, 10 - EDITTEXT IDC_EDIT_AUTOLOAD_DELAY, 130, 33, 30, 12 - CONTROL "Spin1", IDC_SPIN_AUTOLOAD_DELAY, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 150, 33, 9, 12 - CONTROL "上書き禁止検出時は編集禁止にする(&N)", IDC_CHECK_bUneditableIfUnwritable, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 46, 154, 10 - GROUPBOX "ファイルの排他制御", IDC_STATIC, 3, 3, 163, 57, WS_GROUP - CONTROL "無変更でも上書きする(&S)", IDC_CHECK_ENABLEUNMODIFIEDOVERWRITE, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 175, 16, 111, 10 - CONTROL "自動的に保存する(&U)", IDC_CHECK_AUTOSAVE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 175, 31, 84, 10 - LTEXT "間隔は(&I)", IDC_LABEL_AUTOSAVE, 186, 47, 31, 10, NOT WS_GROUP - EDITTEXT IDC_EDIT_AUTOBACKUP_INTERVAL, 219, 45, 30, 12 - CONTROL "Spin1", IDC_SPIN_AUTOBACKUP_INTERVAL, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 266, 45, 9, 12 - LTEXT "分ごと", IDC_LABEL_AUTOSAVE2, 250, 47, 21, 10, NOT WS_GROUP - GROUPBOX "ファイルの保存", IDC_STATIC, 170, 3, 118, 57, WS_GROUP - CONTROL "新規から保存時は全ファイル表示(&O)", IDC_CHECK_NoFilterSaveNew, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 77, 133, 10 - CONTROL "新規以外から保存時は全ファイル表示(&F)", IDC_CHECK_NoFilterSaveFile, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 142, 77, 142, 10 - GROUPBOX "「名前を付けて保存」でファイルの種類が[ユーザー指定]のときのファイル一覧表示", IDC_STATIC, 3, 65, 285, 28 - CONTROL "ファイルのドロップは「閉じて開く」にする(&L)", IDC_CHECK_bDropFileAndClose, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 110, 149, 10 - LTEXT "ファイルのドロップは一度に&MAX", IDC_LABEL_AUTOSAVE3, 18, 126, 101, 10, NOT WS_GROUP - EDITTEXT IDC_EDIT_nDropFileNumMax, 123, 124, 25, 12, ES_AUTOHSCROLL - CONTROL "Spin1", IDC_SPIN_nDropFileNumMax, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 179, 124, 9, 12 - LTEXT "個までとする", IDC_LABEL_AUTOSAVE4, 151, 126, 41, 10, NOT WS_GROUP - LTEXT "←注:ドロップファイルは1つのみ有効", IDC_LANEL_NOTE, 161, 111, 116, 10 - CONTROL "ファイルを開いたときにカーソル位置を復元する(&C)", IDC_CHECK_RestoreCurPosition, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 140, 174, 10 - CONTROL "ファイルを開いたときにブックマークを復元する(&B)", IDC_CHECK_RestoreBookmarks, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 155, 214, 10 - CONTROL "ファイルを開いたときにMIMEエンコードされたヘッダをデコードする(&D)", IDC_CHECK_AutoMIMEDecode, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 169, 231, 10 - CONTROL "前回と異なる文字コードのとき問い合わせを行う(&Q)", IDC_CHECK_QueryIfCodeChange, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 182, 223, 13 - CONTROL "開こうとしたファイルが存在しないとき警告する(&E)", IDC_CHECK_AlertIfFileNotExist, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 198, 223, 10 - CONTROL "開こうとしたファイルが大きい場合に警告する(&T)", IDC_CHECK_ALERT_IF_LARGEFILE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 214, 167, 10 - EDITTEXT IDC_EDIT_ALERT_FILESIZE, 181, 212, 30, 12, ES_AUTOHSCROLL - CONTROL "Spin1", IDC_SPIN_ALERT_FILESIZE, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 240, 211, 9, 14 - LTEXT "MBから", IDC_STATIC, 214, 214, 25, 10 - GROUPBOX "ファイルオープン", IDC_STATIC, 3, 97, 285, 135, WS_GROUP -END - -IDD_PROP_FNAME DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "MS Pゴシック" -BEGIN - CONTROL "長いパスの省略表示(&L)", IDC_CHECK_SHORTPATH, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 6, 3, 100, 10 - LTEXT "文字数(&N)", IDC_STATIC, 109, 4, 45, 10 - EDITTEXT IDC_EDIT_SHORTMAXWIDTH, 155, 3, 30, 13, ES_NUMBER - GROUPBOX "ファイル名の簡易表示(&I)", IDC_STATIC, 6, 20, 282, 180 - CONTROL "List1", IDC_LIST_FNAME, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_AUTOARRANGE | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 12, 35, 230, 117 - LTEXT "置換前(&F)", IDC_STATIC, 13, 161, 37, 10 - EDITTEXT IDC_EDIT_FNAME_FROM, 50, 160, 191, 13, ES_AUTOHSCROLL - LTEXT "置換後(&R)", IDC_STATIC, 13, 180, 37, 10 - EDITTEXT IDC_EDIT_FNAME_TO, 50, 177, 191, 13, ES_AUTOHSCROLL - PUSHBUTTON "挿入(&S)", IDC_BUTTON_FNAME_INS, 245, 123, 38, 15 - PUSHBUTTON "追加(&A)", IDC_BUTTON_FNAME_ADD, 245, 141, 38, 15 - PUSHBUTTON "更新(&E)", IDC_BUTTON_FNAME_UPD, 245, 159, 38, 15 - PUSHBUTTON "削除(&D)", IDC_BUTTON_FNAME_DEL, 245, 177, 38, 15 - PUSHBUTTON "先頭(&T)", IDC_BUTTON_FNAME_TOP, 245, 43, 38, 15 - PUSHBUTTON "上へ(&U)", IDC_BUTTON_FNAME_UP, 245, 61, 38, 15 - PUSHBUTTON "下へ(&G)", IDC_BUTTON_FNAME_DOWN, 245, 79, 38, 15 - PUSHBUTTON "最終(&B)", IDC_BUTTON_FNAME_LAST, 245, 97, 38, 15 -END - -IDD_PROP_BACKUP DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "MS Pゴシック" -BEGIN - GROUPBOX "バックアップの作成", IDC_STATIC, 3, 3, 285, 207, WS_GROUP - CONTROL "保存時にバックアップを作成する(&K)", IDC_CHECK_BACKUP, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 16, 136, 10 - - CONTROL "詳細設定する(&A)", IDC_CHECK_BACKUP_ADVANCED, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 12, 32, 79, 10 - EDITTEXT IDC_EDIT_BACKUPFILE, 24, 44, 255, 13, ES_AUTOHSCROLL - - CONTROL "拡張子を .bakに変更したもの(1世代 &B)", IDC_RADIO_BACKUP_TYPE1, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 12, 66, 142, 10 - CONTROL "拡張子を連番(.b00~b98)に変更したもの(&G)", IDC_RADIO_BACKUP_TYPE3, "Button", BS_AUTORADIOBUTTON, 12, 80, 156, 10 - CONTROL "ファイル名の後ろに保存時の日付・時刻を付加したもの(&E)", IDC_RADIO_BACKUP_DATETYPE1, "Button", BS_AUTORADIOBUTTON, 12, 106, 204, 10 - CONTROL "ファイル名の後ろに前回の保存時の日付・時刻を付加したもの(&U)", IDC_RADIO_BACKUP_DATETYPE2, "Button", BS_AUTORADIOBUTTON, 12, 120, 230, 10 - CONTROL "元の拡張子を保存(&R)", IDC_CHECK_BACKUP_RETAINEXT, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 162, 66, 96, 10 - LTEXT "保存する世代数(1-99 &N)", IDC_LABEL_BACKUP_3, 22, 94, 91, 10 - EDITTEXT IDC_EDIT_BACKUP_3, 106, 92, 28, 12 - CONTROL "Spin1", IDC_SPIN_BACKUP_GENS, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 154, 92, 9, 12 - CONTROL "西暦(&Y)", IDC_CHECK_BACKUP_YEAR, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 22, 132, 35, 10 - CONTROL "月(&M)", IDC_CHECK_BACKUP_MONTH, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 60, 132, 34, 10 - CONTROL "日(&D)", IDC_CHECK_BACKUP_DAY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 97, 132, 34, 10 - CONTROL "時(&H)", IDC_CHECK_BACKUP_HOUR, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 134, 132, 34, 10 - CONTROL "分(&I)", IDC_CHECK_BACKUP_MIN, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 171, 132, 31, 10 - CONTROL "秒(&S)", IDC_CHECK_BACKUP_SEC, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 205, 132, 33, 10 - - LTEXT "", IDC_STATIC, 12, 60, 271, 83, NOT WS_VISIBLE - CONTROL "保存時の日付・時刻を使用", IDC_RADIO_BACKUP_DATETYPE1A, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 12, 104, 111, 10 - CONTROL "前回のファイル更新時の日付・時刻を使用", IDC_RADIO_BACKUP_DATETYPE2A, "Button", BS_AUTORADIOBUTTON, 12, 118, 149, 10 - LTEXT "$x : x個上のフォルダ名(0-9)\r* : 拡張子\r\r%Y/%m/%d : 年月日 %y西暦(2桁) \r%H:%M:%S: 時分秒 \r%% : '%'記号\r", IDC_LABEL_BACKUP_HELP2, 165, 75, 115, 50, SS_SUNKEN - - CONTROL "指定フォルダに作成する(&P)", IDC_CHECK_BACKUPFOLDER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 12, 148, 107, 10 - AUTOCHECKBOX "リムーバブルメディアのみ(&L)", IDC_CHECK_BACKUP_FOLDER_RM, 120, 148, 133, 10 - LTEXT "フォルダ名(&F)", IDC_LABEL_BACKUP_4, 24, 162, 87, 10 - EDITTEXT IDC_EDIT_BACKUPFOLDER, 73, 160, 195, 12, ES_AUTOHSCROLL - PUSHBUTTON "&...", IDC_BUTTON_BACKUP_FOLDER_REF, 271, 160, 9, 12 - CONTROL "バックアップファイルをごみ箱に放り込む(&X)", IDC_CHECK_BACKUP_DUSTBOX, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 12, 176, 150, 10 - - CONTROL "作成前に確認する(&V)", IDC_CHECK_BACKUPDIALOG, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 12, 196, 104, 10 -END - -IDD_PROP_FORMAT DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "MS Pゴシック" -BEGIN - CONTROL "標準(&S)", IDC_RADIO_DFORM_0, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 8, 18, 41, 10 - CONTROL "カスタム(&C)", IDC_RADIO_DFORM_1, "Button", BS_AUTORADIOBUTTON, 51, 18, 52, 10 - LTEXT "&D:", IDC_LABEL_DFORM, 106, 19, 8, 10 - EDITTEXT IDC_EDIT_DFORM, 115, 17, 82, 12, ES_AUTOHSCROLL - GROUPBOX "日付書式", IDC_STATIC, 3, 3, 199, 35, WS_GROUP - LTEXT "表示例", IDC_STATIC, 209, 7, 27, 10, NOT WS_GROUP - EDITTEXT IDC_EDIT_DFORM_EX, 209, 17, 77, 12, ES_AUTOHSCROLL | ES_READONLY | NOT WS_TABSTOP - CONTROL "標準(&N)", IDC_RADIO_TFORM_0, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 8, 58, 41, 10 - CONTROL "カスタム(&U)", IDC_RADIO_TFORM_1, "Button", BS_AUTORADIOBUTTON, 51, 58, 52, 10 - LTEXT "&T:", IDC_LABEL_TFORM, 106, 59, 8, 10 - EDITTEXT IDC_EDIT_TFORM, 115, 57, 82, 12, ES_AUTOHSCROLL - GROUPBOX "時刻書式", IDC_STATIC, 3, 43, 199, 35, WS_GROUP - LTEXT "表示例", IDC_STATIC, 209, 47, 27, 10, NOT WS_GROUP - EDITTEXT IDC_EDIT_TFORM_EX, 209, 57, 77, 12, ES_AUTOHSCROLL | ES_READONLY | NOT WS_TABSTOP - GROUPBOX "見出し記号(&R)", IDC_STATIC, 3, 83, 283, 52, WS_GROUP - EDITTEXT IDC_EDIT_MIDASHIKIGOU, 8, 95, 272, 31, ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | WS_GROUP - GROUPBOX "引用符(&Q)", IDC_STATIC, 3, 140, 283, 32, WS_GROUP - EDITTEXT IDC_EDIT_INYOUKIGOU, 8, 152, 270, 12, ES_AUTOHSCROLL | WS_GROUP -END - -IDD_PROP_GREP DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "MS Pゴシック" -BEGIN - CONTROL "カーソル位置の文字列をデフォルトの検索文字列にする(&C)", IDC_CHECK_bCaretTextForSearch, "Button", BS_AUTOCHECKBOX | BS_TOP | WS_GROUP | WS_TABSTOP, 8, 21, 204, 12 - CONTROL "次・前検索で他のビューでの検索条件変更を引き継ぐ(&I)", IDC_CHECK_INHERIT_KEY_OTHER_VIEW, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 33, 209, 12 - LTEXT "正規表現ライブラリ指定(&L)", IDC_LABEL_REGEXP, 8, 50, 93, 10 - LTEXT "", IDC_LABEL_REGEXP_VER, 8, 62, 275, 14 - EDITTEXT IDC_EDIT_REGEXPLIB, 110, 47, 162, 13, ES_AUTOHSCROLL - GROUPBOX "検索/置換/Grep", IDC_STATIC, 3, 7, 285, 70, WS_GROUP - CONTROL "Grepモードで保存確認する(&V)", IDC_CHECK_bGrepExitConfirm, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 94, 130, 10 - CONTROL "リアルタイムで表示する(&R)", IDC_CHECK_GREPREALTIME, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 106, 111, 10 - GROUPBOX "Grep", IDC_STATIC, 3, 80, 285, 42, WS_GROUP - CONTROL "エンターキーでタグジャンプ(&E)", IDC_CHECK_GTJW_RETURN, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 142, 109, 10 - CONTROL "ダブルクリックでタグジャンプ(&W)", IDC_CHECK_GTJW_LDBLCLK, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 154, 115, 10 - GROUPBOX "Grep結果からのタグジャンプ", IDC_STATIC, 3, 127, 285, 46, WS_GROUP - GROUPBOX "タグジャンプ", IDC_STATIC, 3, 178, 285, 52, WS_GROUP - LTEXT "タグファイルの検索(&T):", IDC_STATIC, 8, 192, 112, 10 - COMBOBOX IDC_COMBO_TAGJUMP, 124, 190, 156, 100, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - LTEXT "キーワード指定のタグファイル検索(&K):", IDC_STATIC, 8, 210, 112, 10 - COMBOBOX IDC_COMBO_KEYWORD_TAGJUMP, 124, 208, 156, 100, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP -END - -IDD_PROP_KEYBIND DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP | WS_EX_COMPOSITED -FONT 9, "MS Pゴシック" -BEGIN - RTEXT "種別(&K)", IDC_LABEL_MENUFUNCKIND, 4, 4, 51, 10 - COMBOBOX IDC_COMBO_FUNCKIND, 60, 2, 68, 180, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - LTEXT "機能(&F)", IDC_LABEL_MENUFUNC, 3, 18, 41, 10 - LISTBOX IDC_LIST_FUNC, 3, 28, 124, 143, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - LTEXT "機能に割り当てられているキー(&G)", IDC_LABEL_FUNCtoKEY, 6, 173, 113, 10, NOT WS_GROUP - LISTBOX IDC_LIST_ASSIGNEDKEYS, 3, 184, 124, 33, LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_GROUP | WS_TABSTOP - PUSHBUTTON "インポート(&I)...", IDC_BUTTON_IMPORT, 171, 2, 58, 14, WS_GROUP - PUSHBUTTON "エクスポート(&X)...", IDC_BUTTON_EXPORT, 231, 2, 58, 14 - LTEXT "キー(&Y)", IDC_LABEL_KEYKIND, 164, 18, 25, 10 - LISTBOX IDC_LIST_KEY, 165, 28, 124, 164, LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP - CONTROL "&Shift", IDC_CHECK_SHIFT, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 134, 38, 25, 10 - CONTROL "&Ctrl", IDC_CHECK_CTRL, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 134, 53, 25, 10 - CONTROL "A&Lt", IDC_CHECK_ALT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 134, 68, 25, 10 - LTEXT "キーに割り当てられている機能", IDC_LABEL_KEYtoFUNC, 166, 194, 120, 10 - EDITTEXT IDC_EDIT_KEYSFUNC, 164, 205, 118, 12, ES_AUTOHSCROLL | ES_READONLY | WS_GROUP | NOT WS_TABSTOP - PUSHBUTTON "割付(&B)", IDC_BUTTON_ASSIGN, 129, 190, 34, 14, WS_GROUP - PUSHBUTTON "解除(&R)", IDC_BUTTON_RELEASE, 129, 204, 34, 14 -END - -IDD_PROP_CUSTMENU DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP | WS_EX_COMPOSITED -FONT 9, "MS Pゴシック" -BEGIN - RTEXT "種別(&K)", IDC_LABEL_MENUFUNCKIND, 4, 4, 52, 10 - COMBOBOX IDC_COMBO_FUNCKIND, 60, 2, 68, 180, CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - LTEXT "機能(&F)", IDC_LABEL_MENUFUNC, 3, 16, 40, 10, NOT WS_GROUP - LISTBOX IDC_LIST_FUNC, 3, 27, 124, 178, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - RTEXT "選択(&C)", IDC_LABEL_MENUCHOICE, 187, 4, 31, 10 - COMBOBOX IDC_COMBO_MENU, 221, 2, 68, 220, CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - LTEXT "メニュー名(&N)", IDC_LABEL_MENUNAME, 142, 16, 64, 10, NOT WS_GROUP - EDITTEXT IDC_EDIT_MENUNAME, 146, 27, 109, 14, ES_AUTOHSCROLL - PUSHBUTTON "設定(&R)", IDC_BUTTON_MENUNAME, 258, 27, 30, 14 - LTEXT "メニュー(&M)", IDC_LABEL_MENU, 142, 44, 37, 10, NOT WS_GROUP - LISTBOX IDC_LIST_RES, 164, 54, 123, 151, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - PUSHBUTTON "削除(&D)", IDC_BUTTON_DELETE, 130, 62, 30, 14, WS_GROUP - PUSHBUTTON "---(&S)", IDC_BUTTON_INSERTSEPARATOR, 130, 81, 30, 14, BS_MULTILINE - PUSHBUTTON "→(&A)", IDC_BUTTON_INSERT, 128, 101, 34, 14 - PUSHBUTTON ">>(&B)", IDC_BUTTON_ADD, 128, 115, 34, 14, BS_MULTILINE - PUSHBUTTON "↑(&U)", IDC_BUTTON_UP, 128, 135, 34, 14 - PUSHBUTTON "↓(&O)", IDC_BUTTON_DOWN, 128, 149, 34, 14 - LTEXT "↑ダブルクリックでアクセスキー設定可", IDC_LABEL_MENUKEYCHANGE, 174, 208, 114, 10 - CONTROL "サブメニューとして表示(&S)", IDC_CHECK_SUBMENU, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 164, 220, 114, 10 - PUSHBUTTON "インポート(&I)...", IDC_BUTTON_IMPORT, 3, 208, 58, 14, WS_GROUP - PUSHBUTTON "エクスポート(&X)...", IDC_BUTTON_EXPORT, 64, 208, 58, 14 -END - -IDD_PROP_KEYWORD DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "MS Pゴシック" -BEGIN - LTEXT "セット名(&N)", IDC_STATIC, 3, 6, 37, 10 - COMBOBOX IDC_COMBO_SET, 42, 5, 85, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "セット追加(&M)...", IDC_BUTTON_ADDSET, 181, 5, 53, 14, WS_GROUP - PUSHBUTTON "セット削除(&R)...", IDC_BUTTON_DELSET, 236, 5, 52, 14 - GROUPBOX "強調キーワード(&K)", IDC_STATIC, 3, 22, 285, 215, WS_GROUP - CONTROL "List5", IDC_LIST_KEYWORD, "SysListView32", LVS_LIST | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_EDITLABELS | LVS_ALIGNLEFT | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 8, 35, 274, 165 - PUSHBUTTON "追加(&A)...", IDC_BUTTON_ADDKEYWORD, 8, 203, 40, 14, WS_GROUP - PUSHBUTTON "編集(&E)...", IDC_BUTTON_EDITKEYWORD, 50, 203, 40, 14 - PUSHBUTTON "削除(&D)", IDC_BUTTON_DELKEYWORD, 92, 203, 40, 14 - CONTROL "英大文字小文字区別(&C)", IDC_CHECK_KEYWORDCASE, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 221, 94, 10 - PUSHBUTTON "インポート(&I)...", IDC_BUTTON_IMPORT, 166, 220, 58, 14, WS_GROUP - PUSHBUTTON "エクスポート(&X)...", IDC_BUTTON_EXPORT, 227, 220, 58, 14 - RTEXT "(最大 100 文字 登録数 9999 / 9999 個)", IDC_STATIC_KEYWORD_COUNT, 135, 205, 142, 10 - PUSHBUTTON "変更(&H)", IDC_BUTTON_KEYSETRENAME, 130, 5, 40, 14 - PUSHBUTTON "整理(&O)", IDC_BUTTON_KEYCLEAN, 104, 220, 45, 14 - PUSHBUTTON "OK", IDOK, 182, 243, 50, 14 - PUSHBUTTON "キャンセル(&X)", IDCANCEL, 237, 243, 50, 14 -END - -IDD_PROP_HELPER DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "MS Pゴシック" -BEGIN - CONTROL "&Enter", IDC_CHECK_m_bHokanKey_RETURN, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 59, 15, 33, 10 - CONTROL "&Tab", IDC_CHECK_m_bHokanKey_TAB, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 93, 15, 28, 10 - CONTROL "→(&R)", IDC_CHECK_m_bHokanKey_RIGHT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 122, 15, 53, 10 - GROUPBOX "入力補完機能", IDC_STATIC, 3, 3, 285, 30, WS_GROUP - LTEXT "候補決定キー", IDC_STATIC, 7, 17, 45, 10 - GROUPBOX "外部ヘルプの設定(&L)", IDC_STATIC, 3, 37, 285, 32, WS_GROUP - EDITTEXT IDC_EDIT_EXTHELP1, 8, 50, 253, 12, ES_AUTOHSCROLL | WS_GROUP - PUSHBUTTON "(&1)...", IDC_BUTTON_OPENHELP1, 264, 49, 19, 14 - GROUPBOX "外部HTMLヘルプの設定(&P)", IDC_STATIC, 3, 73, 285, 45, WS_GROUP - EDITTEXT IDC_EDIT_EXTHTMLHELP, 8, 89, 253, 12, ES_AUTOHSCROLL | WS_GROUP - PUSHBUTTON "(&2)...", IDC_BUTTON_OPENEXTHTMLHELP, 264, 88, 19, 14 - CONTROL "ビューアを複数起動しない(&N)", IDC_CHECK_HTMLHELPISSINGLE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 105, 108, 10 - GROUPBOX "キーワードヘルプ", IDC_STATIC, 3, 123, 285, 33, WS_GROUP - RTEXT "Font", IDC_STATIC_KEYWORDHELPFONT, 8, 136, 219, 17, SS_RIGHT - PUSHBUTTON "フォント(&F)...", IDC_BUTTON_KEYWORDHELPFONT, 232, 136, 51, 14 - LTEXT "DLL(&M)", IDC_STATIC, 7, 174, 26, 10 - EDITTEXT IDC_EDIT_MIGEMO_DLL, 36, 172, 224, 12, ES_AUTOHSCROLL | WS_GROUP - PUSHBUTTON "(&3)...", IDC_BUTTON_OPENMDLL, 264, 171, 19, 14 - LTEXT "辞書(&I)", IDC_STATIC, 7, 190, 25, 10 - EDITTEXT IDC_EDIT_MIGEMO_DICT, 36, 189, 224, 12, ES_AUTOHSCROLL - PUSHBUTTON "(&4)...", IDC_BUTTON_OPENMDICT, 264, 189, 19, 14 - GROUPBOX "migemo設定", IDC_STATIC, 3, 159, 287, 47, WS_GROUP -END - -IDD_PROP_MACRO DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "MS Pゴシック" -BEGIN - LTEXT "マクロ一覧", IDC_STATIC, 4, 9, 36, 10 - EDITTEXT IDC_MACRODIR, 46, 5, 199, 14, ES_AUTOHSCROLL - PUSHBUTTON "参照(&R)...", IDC_MACRODIRREF, 254, 5, 34, 14 - CONTROL "List1", IDC_MACROLIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_AUTOARRANGE | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 3, 21, 285, 148 - LTEXT "名前(&N)", IDC_STATIC, 6, 179, 32, 10 - EDITTEXT IDC_MACRONAME, 39, 176, 203, 14, ES_AUTOHSCROLL - LTEXT "&File", IDC_STATIC, 6, 194, 12, 10 - COMBOBOX IDC_MACROPATH, 39, 192, 203, 130, CBS_DROPDOWN | CBS_SORT | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - CONTROL "マクロを実行するたびにファイルを読み込みなおす(&L)", IDC_CHECK_RELOADWHENEXECUTE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 6, 211, 178, 10 - LTEXT "キャンセル確認待ち時間", IDC_STATIC, 185, 212, 75, 10 - EDITTEXT IDC_MACROCANCELTIMER, 260, 209, 18, 14, ES_AUTOHSCROLL - LTEXT "秒", IDC_STATIC, 280, 212, 8, 10 - LTEXT "自動実行:", IDC_STATIC, 6, 225, 34, 10 - CONTROL "新規/開ファイル後(&O)", IDC_CHECK_MacroOnOpened, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 44, 224, 89, 10 - CONTROL "タイプ変更後(&T)", IDC_CHECK_MacroOnTypeChanged, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 135, 224, 72, 10 - CONTROL "ファイル保存前(&S)", IDC_CHECK_MacroOnSave, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 212, 224, 69, 10 - LTEXT "Id:", IDC_STATIC, 249, 176, 8, 10 - COMBOBOX IDC_COMBO_MACROID, 260, 174, 28, 129, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "設定(&A)", IDC_MACRO_REG, 250, 190, 38, 14 -END - -IDD_PROP_PLUGIN DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "MS Pゴシック" -BEGIN - CONTROL "プラグインを有効にする(&E)", IDC_CHECK_PluginEnable, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 6, 9, 100, 10 - PUSHBUTTON "ZIPプラグインを導入(&Z)", IDC_PLUGIN_INST_ZIP, 192, 6, 96, 14 - PUSHBUTTON "フォルダを開く(&F)", IDC_PLUGIN_OpenFolder, 120, 20, 70, 14 - PUSHBUTTON "新規プラグインを追加(&I)", IDC_PLUGIN_SearchNew, 192, 20, 96, 14 - LTEXT "プラグイン一覧", IDC_STATIC, 4, 28, 50, 10 - CONTROL "List1", IDC_PLUGINLIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_AUTOARRANGE | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 3, 41, 285, 108 - LTEXT "説明", IDC_STATIC, 11, 160, 50, 10 - LTEXT "", IDC_LABEL_PLUGIN_Description, 66, 160, 200, 10 - LTEXT "作者", IDC_STATIC, 11, 175, 50, 10 - LTEXT "", IDC_LABEL_PLUGIN_Author, 66, 175, 200, 10 - LTEXT "バージョン", IDC_STATIC, 11, 190, 50, 10 - LTEXT "", IDC_LABEL_PLUGIN_Version, 66, 190, 100, 10 - PUSHBUTTON "配布元(&D)", IDC_PLUGIN_URL, 186, 187, 80, 14 - PUSHBUTTON "削除(&R)", IDC_PLUGIN_Remove, 6, 205, 80, 14 - PUSHBUTTON "設定(&P)", IDC_PLUGIN_OPTION, 96, 205, 80, 14 - PUSHBUTTON "ReadMe(&M)", IDC_PLUGIN_README, 186, 205, 80, 14 -END - -IDD_PROP_MAINMENU DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "メインメニュー" -FONT 9, "MS Pゴシック" -BEGIN - RTEXT "種別(&K)", IDC_LABEL_MENUFUNCKIND, 10, 6, 45, 10 - COMBOBOX IDC_COMBO_FUNCKIND, 57, 4, 70, 180, CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - LTEXT "機能(&F)", IDC_LABEL_MENUFUNC, 4, 17, 40, 10 - LISTBOX IDC_LIST_FUNC, 4, 28, 123, 190, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - AUTOCHECKBOX "アクセスキーを必ず( )付で表示(&P)", IDC_CHECK_KEY_PARENTHESES, 176, 4, 113, 10 - LTEXT "メニュー(&M)", IDC_LABEL_MENU, 166, 17, 35, 10 - CONTROL "&Menu", IDC_TREE_RES, "SysTreeView32", WS_TABSTOP | WS_BORDER | TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_EDITLABELS | TVS_SHOWSELALWAYS, 166, 28, 123, 190, WS_EX_ACCEPTFILES - PUSHBUTTON "削除(&D)", IDC_BUTTON_DELETE, 128, 28, 37, 14, WS_GROUP - PUSHBUTTON "+(&N)", IDC_BUTTON_INSERT_NODE, 128, 47, 37, 14 - PUSHBUTTON "---(&S)", IDC_BUTTON_INSERTSEPARATOR, 128, 61, 37, 14 - PUSHBUTTON "上⇒(&Q)", IDC_BUTTON_INSERT, 128, 75, 37, 14 - PUSHBUTTON "下⇒(&A)", IDC_BUTTON_INSERT_A, 128, 89, 37, 14 - PUSHBUTTON ">>(&B)", IDC_BUTTON_ADD, 128, 103, 37, 14 - PUSHBUTTON "↑(&U)", IDC_BUTTON_UP, 128, 121, 37, 14 - PUSHBUTTON "↓(&O)", IDC_BUTTON_DOWN, 128, 135, 37, 14 - PUSHBUTTON "→(&R)", IDC_BUTTON_RIGHT, 128, 149, 37, 14 - PUSHBUTTON "←(&L)", IDC_BUTTON_LEFT, 128, 163, 37, 14 - PUSHBUTTON "全開(&H)", IDC_BUTTON_EXPAND, 128, 190, 37, 14 - PUSHBUTTON "全閉(&Z)", IDC_BUTTON_COLLAPSE, 128, 204, 37, 14 - PUSHBUTTON "インポート(&I)...", IDC_BUTTON_IMPORT, 4, 222, 58, 14, WS_GROUP - PUSHBUTTON "エクスポート(&X)...", IDC_BUTTON_EXPORT, 64, 222, 58, 14 - PUSHBUTTON "検査(&T)", IDC_BUTTON_CHECK, 124, 222, 44, 14 - PUSHBUTTON "クリア(&C)", IDC_BUTTON_CLEAR, 196, 222, 44, 14, WS_GROUP - PUSHBUTTON "初期設定(&E)", IDC_BUTTON_INITIALIZE, 245, 222, 44, 14 -END - -IDD_WINPOSSIZE DIALOGEX 0, 0, 177, 159 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "ウィンドウの位置と大きさ" -FONT 9, "MS Pゴシック" -BEGIN - CONTROL "指定しない(&D)", IDC_RADIO_WINPOS_DEF, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 19, 61, 10 - CONTROL "継承する(&I)", IDC_RADIO_WINPOS_SAVE, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 32, 52, 10 - CONTROL "直接指定(&S)", IDC_RADIO_WINPOS_SET, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 45, 56, 10 - LTEXT "X座標(&X)", IDC_STATIC, 81, 29, 31, 10, NOT WS_GROUP - EDITTEXT IDC_EDIT_WX, 115, 25, 33, 14, ES_RIGHT | WS_GROUP - CONTROL "Spin1", IDC_SPIN_WX, "msctls_updown32", UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS, 148, 25, 10, 14 - LTEXT "Y座標(&Y)", IDC_STATIC, 81, 43, 31, 10, NOT WS_GROUP - EDITTEXT IDC_EDIT_WY, 115, 41, 33, 14, ES_RIGHT | WS_GROUP - CONTROL "Spin1", IDC_SPIN_WY, "msctls_updown32", UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS, 148, 41, 10, 14 - CONTROL "指定しない(&E)", IDC_RADIO_WINSIZE_DEF, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 79, 60, 10 - CONTROL "継承する(&N)", IDC_RADIO_WINSIZE_SAVE, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 91, 55, 10 - CONTROL "直接指定(&T)", IDC_RADIO_WINSIZE_SET, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 103, 56, 10 - COMBOBOX IDC_COMBO_WINTYPE, 84, 74, 64, 52, CBS_DROPDOWNLIST | WS_VSCROLL | WS_GROUP | WS_TABSTOP - LTEXT "幅(&W)", IDC_STATIC, 84, 94, 20, 10 - EDITTEXT IDC_EDIT_SX, 115, 91, 33, 14, ES_RIGHT | ES_NUMBER - CONTROL "Spin1", IDC_SPIN_SX, "msctls_updown32", UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS, 148, 90, 10, 14 - LTEXT "高さ(&G)", IDC_STATIC, 84, 110, 25, 10 - EDITTEXT IDC_EDIT_SY, 115, 108, 33, 14, ES_RIGHT | ES_NUMBER - CONTROL "Spin1", IDC_SPIN_SY, "msctls_updown32", UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS, 148, 108, 10, 14 - DEFPUSHBUTTON "閉じる(&C)", IDOK, 26, 138, 50, 14, WS_GROUP - PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 110, 137, 54, 15, WS_GROUP - GROUPBOX "起動時の位置", IDC_STATIC, 7, 7, 163, 52 - GROUPBOX "大きさ", IDC_STATIC, 7, 66, 163, 63 -END - -IDD_PLUGIN_OPTION DIALOGEX 0, 0, 271, 255 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "プラグインの設定" -FONT 9, "MS Pゴシック" -BEGIN - LTEXT "プラグインのオプションを設定してください", IDC_STATIC_MSG, 11, 7, 119, 10 - CONTROL "List1", IDC_LIST_PLUGIN_OPTIONS, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 22, 257, 186 - LTEXT "値:", IDC_STATIC, 11, 217, 21, 10 - EDITTEXT IDC_EDIT_PLUGIN_OPTION, 36, 214, 228, 14, ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_PLUGIN_OPTION_DIR, 36, 214, 205, 14, ES_AUTOHSCROLL - PUSHBUTTON "&...", IDC_BUTTON_PLUGIN_OPTION_DIR, 243, 214, 21, 14 - EDITTEXT IDC_EDIT_PLUGIN_OPTION_NUM, 36, 214, 60, 14, ES_RIGHT - CONTROL "Spin1", IDC_SPIN_PLUGIN_OPTION, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 148, 25, 10, 14, WS_EX_TRANSPARENT - CONTROL "Check", IDC_CHECK_PLUGIN_OPTION, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 36, 216, 200, 10 - COMBOBOX IDC_COMBO_PLUGIN_OPTION, 36, 214, 183, 150, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "ReadMe(&M)", IDC_PLUGIN_README, 49, 234, 50, 14 - DEFPUSHBUTTON "&OK", IDOK, 104, 234, 50, 14 - PUSHBUTTON "キャンセル(&X)", IDCANCEL, 159, 234, 50, 14 - PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 214, 234, 50, 14 -END - -IDD_PROFILEMGR DIALOGEX 0, 0, 191, 184 -STYLE DS_MODALFRAME | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "プロファイルマネージャ" -FONT 9, "MS Pゴシック" -BEGIN - LISTBOX IDC_LIST_PROFILE, 9, 9, 109, 128, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - CONTROL "デフォルト設定にして起動(&E)", IDC_CHECK_PROF_DEFSTART, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 10, 143, 150, 10 - DEFPUSHBUTTON "起動(&S)", IDOK, 8, 161, 56, 14 - PUSHBUTTON "閉じる(&X)", IDCANCEL, 68, 161, 56, 14 - PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 128, 161, 56, 14 - PUSHBUTTON "新規作成(&N)", IDC_BUTTON_PROF_CREATE, 125, 8, 61, 14 - PUSHBUTTON "名前変更(&R)", IDC_BUTTON_PROF_RENAME, 125, 25, 61, 14 - PUSHBUTTON "削除(&D)", IDC_BUTTON_PROF_DELETE, 125, 42, 61, 14 - PUSHBUTTON "デフォルト設定(&F)", IDC_BUTTON_PROF_DEFSET, 125, 62, 61, 14 - PUSHBUTTON "デフォルト解除(&C)", IDC_BUTTON_PROF_DEFCLEAR, 125, 79, 61, 14 -END -IDD_FILETREE DIALOGEX 0, 0, 291, 241 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "ファイルツリー設定" -FONT 9, "MS Pゴシック" -BEGIN - LTEXT "設定:共通設定", IDC_STATIC_SETTFING_FROM, 4, 4, 282, 10 - CONTROL "各フォルダの設定を読み込む(&I)", IDC_CHECK_LOADINI, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 4, 16, 120, 9 - LTEXT "デフォルト設定ファイル名(&J)", IDC_STATIC, 4, 28, 110, 10 - EDITTEXT IDC_EDIT_DEFINI, 13, 39, 124, 13, ES_AUTOHSCROLL - PUSHBUTTON "...(&1)", IDC_BUTTON_REF1, 137, 39, 17, 13 - PUSHBUTTON "読み込み(&V)", IDC_BUTTON_LOAD, 108, 53, 47, 14 - CONTROL "Grep(&G)", IDC_RADIO_GREP, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 6, 72, 56, 10 - CONTROL "ファイル(&F)", IDC_RADIO_FILE, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 6, 85, 56, 10 - CONTROL "フォルダ(&2)", IDC_RADIO_FOLDER, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 6, 98, 56, 10 - GROUPBOX "種類", IDC_STATIC, 1, 61, 89, 50, WS_GROUP - LTEXT "パス(&T)", IDC_STATIC_PATH, 3, 119, 22, 10 - EDITTEXT IDC_EDIT_PATH, 38, 117, 122, 13, ES_AUTOHSCROLL - PUSHBUTTON "&...", IDC_BUTTON_REF2, 161, 117, 10, 13 - PUSHBUTTON "▼(&3)", IDC_BUTTON_PATH_MENU, 171, 117, 21, 14 - LTEXT "ラベル(&E)", IDC_STATIC, 3, 136, 32, 10 - EDITTEXT IDC_EDIT_LABEL, 38, 134, 111, 13, ES_AUTOHSCROLL - LTEXT "ファイル(&K)", IDC_STATIC_FILE, 3, 154, 32, 10 - EDITTEXT IDC_EDIT_FILE, 38, 151, 111, 13, ES_AUTOHSCROLL - CONTROL "隠しファイル(&W)", IDC_CHECK_HIDDEN, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 10, 181, 87, 10 - CONTROL "読み取り専用(&Z)", IDC_CHECK_READONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 10, 193, 87, 10 - CONTROL "システムファイル(&S)", IDC_CHECK_SYSTEM, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 10, 205, 87, 10 - GROUPBOX "非表示属性", IDC_STATIC, 4, 169, 100, 51 - PUSHBUTTON "削除(&4)", IDC_BUTTON_DELETE, 156, 17, 36, 14 - PUSHBUTTON "上⇒(&Q)", IDC_BUTTON_INSERT, 156, 32, 36, 14 - PUSHBUTTON "下⇒(&A)", IDC_BUTTON_INSERT_A, 156, 46, 36, 14 - PUSHBUTTON ">>(&B)", IDC_BUTTON_ADD, 156, 60, 36, 14 - PUSHBUTTON "更新(&P)", IDC_BUTTON_UPDATE, 156, 74, 36, 14 - PUSHBUTTON "ファイル挿入(&C)...", IDC_BUTTON_FILEADD, 133, 88, 59, 14 - PUSHBUTTON "パスの一括置換(&N)...", IDC_BUTTON_REPLACE, 111, 102, 81, 14 - PUSHBUTTON "↑(&U)", IDC_BUTTON_UP, 156, 140, 36, 14 - PUSHBUTTON "↓(&D)", IDC_BUTTON_DOWN, 156, 154, 36, 14 - PUSHBUTTON "→(&R)", IDC_BUTTON_RIGHT, 156, 168, 36, 14 - PUSHBUTTON "←(&L)", IDC_BUTTON_LEFT, 156, 182, 36, 14 - CONTROL "", IDC_TREE_FL, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 193, 17, 94, 202 - PUSHBUTTON "インポート(&M)", IDC_BUTTON_IMPORT, 5, 225, 50, 14 - PUSHBUTTON "エクスポート(&Y)", IDC_BUTTON_EXPORT, 59, 225, 50, 14 - DEFPUSHBUTTON "&OK", IDOK, 128, 225, 50, 14 - PUSHBUTTON "キャンセル(&X)", IDCANCEL, 183, 225, 50, 14 - PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 238, 225, 50, 14 -END - -IDD_WINLIST DIALOGEX 0, 0, 350, 250 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_THICKFRAME | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "ウィンドウ一覧" -FONT 9, "MS Pゴシック" -BEGIN - CONTROL "", IDC_LIST_WINDOW, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 7, 336, 215 - PUSHBUTTON "ウィンドウを閉じる(&C)", IDC_BUTTON_CLOSE, 7, 229, 90, 14 - PUSHBUTTON "上書き保存(&S)", IDC_BUTTON_SAVE, 112, 229, 50, 14 - DEFPUSHBUTTON "&OK", IDOK, 229, 229, 50, 14 - PUSHBUTTON "ヘルプ(&H)", IDC_BUTTON_HELP, 286, 229, 50, 14 -END - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO DISCARDABLE -BEGIN - IDD_PROP_GENERAL, DIALOG - BEGIN - LEFTMARGIN, 3 - RIGHTMARGIN, 286 - TOPMARGIN, 7 - BOTTOMMARGIN, 233 - END - - IDD_FIND, DIALOG - BEGIN - LEFTMARGIN, 5 - RIGHTMARGIN, 279 - BOTTOMMARGIN, 86 - END - - IDD_PROP_FILE, DIALOG - BEGIN - LEFTMARGIN, 1 - RIGHTMARGIN, 293 - TOPMARGIN, 7 - BOTTOMMARGIN, 233 - END - - IDD_ABOUT, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 238 - TOPMARGIN, 7 - BOTTOMMARGIN, 196 - END - - IDD_JUMP, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 245 - TOPMARGIN, 7 - BOTTOMMARGIN, 114 - END - - IDD_FUNCLIST, DIALOG - BEGIN - TOPMARGIN, 7 - BOTTOMMARGIN, 283 - END - - IDD_GREP, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 303 - TOPMARGIN, 7 - BOTTOMMARGIN, 136 - END - - IDD_GREP_REPLACE, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 303 - TOPMARGIN, 7 - BOTTOMMARGIN, 158 - END - - IDD_GREPRUNNING, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 286 - TOPMARGIN, 7 - BOTTOMMARGIN, 72 - END - - IDD_REPLACE, DIALOG - BEGIN - LEFTMARGIN, 4 - RIGHTMARGIN, 293 - BOTTOMMARGIN, 142 - END - - IDD_PROP_TOOLBAR, DIALOG - BEGIN - RIGHTMARGIN, 292 - END - - IDD_TYPELIST, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 180 - TOPMARGIN, 7 - BOTTOMMARGIN, 216 - END - - IDD_PROP_SCREEN, DIALOG - BEGIN - LEFTMARGIN, 3 - RIGHTMARGIN, 299 - TOPMARGIN, 4 - BOTTOMMARGIN, 237 - END - - IDD_PROPERTY_FILE, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 263 - TOPMARGIN, 7 - BOTTOMMARGIN, 220 - END - - IDD_PROP_KEYWORD, DIALOG - BEGIN - BOTTOMMARGIN, 238 - END - - IDD_INPUT1, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 178 - TOPMARGIN, 7 - BOTTOMMARGIN, 48 - END - - IDD_PROP_CUSTMENU, DIALOG - BEGIN - RIGHTMARGIN, 290 - VERTGUIDE, 276 - END - - IDD_PROP_FORMAT, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 285 - TOPMARGIN, 7 - BOTTOMMARGIN, 178 - END - - IDD_REPLACERUNNING, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 183 - TOPMARGIN, 7 - BOTTOMMARGIN, 28 - END - - IDD_PROP_HELPER, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 286 - TOPMARGIN, 7 - BOTTOMMARGIN, 210 - END - - IDD_PROP_COLOR, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 296 - TOPMARGIN, 7 - END - - IDD_COMPARE, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 358 - TOPMARGIN, 7 - BOTTOMMARGIN, 158 - END - - IDD_PRINTPREVIEWBAR, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 395 - TOPMARGIN, 7 - BOTTOMMARGIN, 25 - END - - IDD_PRINTSETTING, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 247 - TOPMARGIN, 7 - BOTTOMMARGIN, 246 - END - - IDD_PROP_KEYBIND, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 286 - TOPMARGIN, 7 - BOTTOMMARGIN, 232 - END - - IDD_EXITING, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 164 - TOPMARGIN, 7 - BOTTOMMARGIN, 23 - END - - IDD_PROP_WIN, DIALOG - BEGIN - LEFTMARGIN, 2 - RIGHTMARGIN, 290 - TOPMARGIN, 2 - BOTTOMMARGIN, 206 - END - - IDD_PROP_EDIT, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 284 - TOPMARGIN, 7 - BOTTOMMARGIN, 204 - END - - IDD_PROP_TAB, DIALOG - BEGIN - LEFTMARGIN, 1 - RIGHTMARGIN, 291 - TOPMARGIN, 2 - BOTTOMMARGIN, 197 - END - - IDD_PROP_GREP, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 286 - TOPMARGIN, 7 - BOTTOMMARGIN, 160 - END - - IDD_PROP_BACKUP, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 284 - TOPMARGIN, 7 - BOTTOMMARGIN, 213 - END - - IDD_EXEC, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 285 - TOPMARGIN, 7 - BOTTOMMARGIN, 132 - END - - IDD_OPERATIONRUNNING, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 183 - TOPMARGIN, 7 - BOTTOMMARGIN, 28 - END - - IDD_HOKAN, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 118 - TOPMARGIN, 7 - BOTTOMMARGIN, 93 - END - - IDD_EXECRUNNING, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 263 - TOPMARGIN, 7 - BOTTOMMARGIN, 48 - END - - IDD_MACRORUNNING, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 263 - TOPMARGIN, 7 - BOTTOMMARGIN, 48 - END - - IDD_PRINTING, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 138 - TOPMARGIN, 7 - BOTTOMMARGIN, 68 - END - - IDD_PROP_MACRO, DIALOG - BEGIN - RIGHTMARGIN, 292 - BOTTOMMARGIN, 237 - END - - IDD_PROP_SUPPORT, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 296 - TOPMARGIN, 7 - BOTTOMMARGIN, 216 - END - - IDD_PROP_REGEX, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 296 - TOPMARGIN, 7 - BOTTOMMARGIN, 213 - END - - IDD_DIFF, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 256 - TOPMARGIN, 7 - BOTTOMMARGIN, 296 - END - - IDD_CTRLCODE, DIALOG - BEGIN - LEFTMARGIN, 2 - RIGHTMARGIN, 177 - TOPMARGIN, 2 - BOTTOMMARGIN, 182 - END - - IDD_FILEUPDATEQUERY, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 216 - TOPMARGIN, 7 - BOTTOMMARGIN, 100 - END - - IDD_PROP_FNAME, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 284 - TOPMARGIN, 7 - BOTTOMMARGIN, 206 - END - - IDD_FAVORITE, DIALOG - BEGIN - LEFTMARGIN, 3 - RIGHTMARGIN, 377 - TOPMARGIN, 4 - BOTTOMMARGIN, 270 - END - - IDD_TAGJUMPLIST, DIALOG - BEGIN - LEFTMARGIN, 3 - RIGHTMARGIN, 387 - TOPMARGIN, 4 - BOTTOMMARGIN, 187 - END - - IDD_TAG_MAKE, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 226 - TOPMARGIN, 7 - BOTTOMMARGIN, 78 - END - - IDD_WINPOSSIZE, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 170 - TOPMARGIN, 7 - BOTTOMMARGIN, 152 - END - - IDD_DIALOG_KEYWORD_SELECT, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 170 - TOPMARGIN, 7 - BOTTOMMARGIN, 190 - END - - IDD_SAMECOLOR, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 176 - TOPMARGIN, 7 - BOTTOMMARGIN, 199 - END - - IDD_PROP_STATUSBAR, DIALOG - BEGIN - LEFTMARGIN, 1 - RIGHTMARGIN, 291 - TOPMARGIN, 7 - BOTTOMMARGIN, 217 - END -END -#endif // APSTUDIO_INVOKED - - -#ifndef _MAC -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -VS_VERSION_INFO VERSIONINFO - FILEVERSION FL_VER - PRODUCTVERSION PR_VER - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x01L -#else - FILEFLAGS 0x00L -#endif - FILEOS 0x40004L - FILETYPE 0x1L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "041104b0" - BEGIN - VALUE "Comments", "このソフトはフリーソフトです。\0" - VALUE "CompanyName", "Project: Sakura-Editor\0" - VALUE "FileDescription", "サクラエディタ\0" - VALUE "FileVersion", FL_VER_STR - VALUE "InternalName", "sakura\0" - VALUE "LegalCopyright", S_COPYRIGHT - VALUE "LegalTrademarks", " \0" - VALUE "OriginalFilename", "sakura.exe\0" - VALUE "ProductName", "サクラエディタ\0" - VALUE "ProductVersion", RESOURCE_VERSION_STRING(PR_VER_STR) // e.g. "2.3.2.0 (4a0de579) UNICODE 64bit DEBUG" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x411, 1200 - END -END - -#endif // !_MAC - -#ifndef SAKURA_LANG_RESOURCE - -///////////////////////////////////////////////////////////////////////////// -// -// Bitmap -// - -IDB_MYTOOL BITMAP DISCARDABLE "../resource/mytool.bmp" -IDB_SCROLL_CENTER BITMAP DISCARDABLE "../resource/auto_scroll_center.bmp" -IDB_SCROLL_VERTICAL BITMAP DISCARDABLE "../resource/auto_scroll_vertical.bmp" -IDB_SCROLL_HORIZONTAL BITMAP DISCARDABLE "../resource/auto_scroll_horizontal.bmp" - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -#ifdef _DEBUG -IDI_ICON_STD ICON DISCARDABLE "../resource/icon_debug.ico" -#else -IDI_ICON_STD ICON DISCARDABLE "../resource/icon_std.ico" -#endif -IDI_ICON_GREP ICON DISCARDABLE "../resource/icon_grep.ico" -IDI_PRINTER ICON DISCARDABLE "../resource/printer.ico" - -///////////////////////////////////////////////////////////////////////////// -// -// Cursor -// - -IDC_CURSOR_COPYARROW CURSOR DISCARDABLE "../resource/cursor_copy.cur" -IDC_CURSOR_MOVEARROW CURSOR DISCARDABLE "../resource/cursor_move.cur" -IDC_CURSOR_RVARROW CURSOR DISCARDABLE "../resource/cursor_rvarrow.cur" -IDC_CURSOR_ISEARCH_F CURSOR DISCARDABLE "../resource/cursor_isf.cur" -IDC_CURSOR_ISEARCH_B CURSOR DISCARDABLE "../resource/cursor_isb.cur" -//IDC_CURSOR_TAB_LEFT CURSOR DISCARDABLE "../resource/cursor_tab_left.cur" -//IDC_CURSOR_TAB_RIGHT CURSOR DISCARDABLE "../resource/cursor_tab_right.cur" -IDC_CURSOR_TAB_SEPARATE CURSOR DISCARDABLE "../resource/cursor_tab_separate.cur" -IDC_CURSOR_TAB_JOIN CURSOR DISCARDABLE "../resource/cursor_tab_join.cur" -IDC_CURSOR_AUTOSCROLL_CENTER CURSOR DISCARDABLE "../resource/auto_scroll_center.cur" -IDC_CURSOR_AUTOSCROLL_HORIZONTAL CURSOR DISCARDABLE "../resource/auto_scroll_horizontal.cur" -IDC_CURSOR_AUTOSCROLL_VERTICAL CURSOR DISCARDABLE "../resource/auto_scroll_vertical.cur" -IDC_CURSOR_AUTOSCROLL_UP CURSOR DISCARDABLE "../resource/auto_scroll_up.cur" -IDC_CURSOR_AUTOSCROLL_DOWN CURSOR DISCARDABLE "../resource/auto_scroll_down.cur" -IDC_CURSOR_AUTOSCROLL_LEFT CURSOR DISCARDABLE "../resource/auto_scroll_left.cur" -IDC_CURSOR_AUTOSCROLL_RIGHT CURSOR DISCARDABLE "../resource/auto_scroll_right.cur" -IDC_CURSOR_AUTOSCROLL_UP_LEFT CURSOR DISCARDABLE "../resource/auto_scroll_up_left.cur" -IDC_CURSOR_AUTOSCROLL_UP_RIGHT CURSOR DISCARDABLE "../resource/auto_scroll_up_right.cur" -IDC_CURSOR_AUTOSCROLL_DOWN_LEFT CURSOR DISCARDABLE "../resource/auto_scroll_down_left.cur" -IDC_CURSOR_AUTOSCROLL_DOWN_RIGHT CURSOR DISCARDABLE "../resource/auto_scroll_down_right.cur" - -#endif // ! SAKURA_LANG_RESOURCE - -///////////////////////////////////////////////////////////////////////////// -// -// String Table -// - -STRINGTABLE DISCARDABLE -BEGIN - F_DISABLE "-- 不明 --" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_FILE_TOPMENU "ファイル" - F_FILENEW "新規作成" - F_FILENEW_NEWWINDOW "新規ウインドウを開く" - F_FILEOPEN "開く..." - F_FILESAVE "上書き保存" - F_FILESAVEAS_DIALOG "名前を付けて保存..." - F_FILECLOSE "閉じて(無題)" - F_FILECLOSE_OPEN "閉じて開く..." - F_FILEOPEN_DROPDOWN "開く(ドロップダウン)..." - F_FILESAVECLOSE "保存して閉じる" - F_FILE_REOPEN_SJIS "SJISで開き直す" - F_FILE_REOPEN_SUBMENU "開き直す" - F_FILE_RCNTFILE_SUBMENU "最近使ったファイル" - F_FILE_RCNTFLDR_SUBMENU "最近使ったフォルダ" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_FILE_REOPEN_JIS "JISで開き直す" - F_FILE_REOPEN_EUC "EUCで開き直す" - F_FILE_REOPEN_UNICODE "UTF-16で開き直す" - F_FILE_REOPEN_UTF8 "UTF-8で開き直す" - F_FILE_REOPEN_UTF7 "UTF-7で開き直す" - F_FILE_REOPEN_UNICODEBE "UTF-16BEで開き直す" - F_FILE_REOPEN_CESU8 "CESU-8で開き直す" - F_FILE_REOPEN_LATIN1 "Latin1で開き直す" - F_FILE_REOPEN "開き直す" - F_FILESAVEALL "すべて上書き保存" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_PRINT "印刷..." - F_PRINT_PREVIEW "印刷プレビュー" - F_PRINT_PAGESETUP "印刷ページ設定..." -END - -STRINGTABLE DISCARDABLE -BEGIN - F_OPEN_HfromtoC "同名のC/C++ヘッダ(ソース)を開く" - F_ACTIVATE_SQLPLUS "SQL*Plusをアクティブ表示" - F_PLSQL_COMPILE_ON_SQLPLUS "SQL*Plusで実行" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_BROWSE "ブラウズ" - F_VIEWMODE "ビューモード" - F_PROPERTY_FILE "ファイルのプロパティ" - F_PROFILEMGR "プロファイルマネージャ" - F_OPEN_FOLDER_IN_EXPLORER "ファイルの場所を開く" - F_OPEN_COMMAND_PROMPT "コマンドプロンプトを開く" - F_OPEN_COMMAND_PROMPT_AS_ADMIN "管理者としてコマンドプロンプトを開く" - F_OPEN_POWERSHELL "PowerShellを開く" - F_OPEN_POWERSHELL_AS_ADMIN "管理者としてPowerShellを開く" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_EXITALLEDITORS "編集の全終了" - F_EXITALL "サクラエディタの全終了" - F_WCHAR "文字入力" - F_IME_CHAR "全角文字入力" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_EDIT_TOPMENU "編集" - F_UNDO "元に戻す" - F_REDO "やり直し" - F_DELETE "削除" - F_DELETE_BACK "カーソル前を削除" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_WordDeleteToStart "単語の左端まで削除" - F_WordDeleteToEnd "単語の右端まで削除" - F_WordCut "単語切り取り" - F_WordDelete "単語削除" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_LineCutToStart "行頭まで切り取り(改行単位)" - F_LineCutToEnd "行末まで切り取り(改行単位)" - F_LineDeleteToStart "行頭まで削除(改行単位)" - F_LineDeleteToEnd "行末まで削除(改行単位)" - F_CUT_LINE "行切り取り(折り返し単位)" - F_DELETE_LINE "行削除(折り返し単位)" - F_DUPLICATELINE "行の二重化(折り返し単位)" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_INDENT_TAB "TABインデント" - F_UNINDENT_TAB "逆TABインデント" - F_INDENT_SPACE "SPACEインデント" - F_UNINDENT_SPACE "逆SPACEインデント" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_LTRIM "左(先頭)の空白を削除" - F_RTRIM "右(末尾)の空白を削除" - F_SORT_ASC "選択行の昇順ソート" - F_SORT_DESC "選択行の降順ソート" - F_MERGE "連続した重複行の削除(uniq)" - F_RECONVERT "再変換" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_UP "カーソル上移動" - F_DOWN "カーソル下移動" - F_LEFT "カーソル左移動" - F_RIGHT "カーソル右移動" - F_UP2 "カーソル上移動(2行ごと)" - F_DOWN2 "カーソル下移動(2行ごと)" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_WORDLEFT "単語の左端に移動" - F_WORDRIGHT "単語の右端に移動" - F_GOLINETOP "行頭に移動(折り返し単位)" - F_GOLINEEND "行末に移動(折り返し単位)" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_HalfPageUp "半ページアップ" - F_HalfPageDown "半ページダウン" - F_1PageUp "1ページアップ" - F_1PageDown "1ページダウン" - F_GOFILETOP "ファイルの先頭に移動" - F_GOFILEEND "ファイルの最後に移動" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_CURLINECENTER "カーソル行をウィンドウ中央へ" - F_CURLINETOP "カーソル行をウィンドウ上部へ" - F_CURLINEBOTTOM "カーソル行をウィンドウ下部へ" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_JUMPHIST_PREV "移動履歴: 前へ" - F_JUMPHIST_NEXT "移動履歴: 次へ" - F_JUMPHIST_SET "現在位置を移動履歴に登録" - F_WndScrollDown "テキストを1行下へスクロール" - F_WndScrollUp "テキストを1行上へスクロール" - F_GONEXTPARAGRAPH "次の段落へ移動" - F_GOPREVPARAGRAPH "前の段落へ移動" - F_AUTOSCROLL "オートスクロール" - F_WHEELUP "ホイールアップ" - F_WHEELDOWN "ホイールダウン" - F_WHEELLEFT "ホイール左" - F_WHEELRIGHT "ホイール右" - F_WHEELPAGEUP "ホイールページアップ" - F_WHEELPAGEDOWN "ホイールページダウン" - F_WHEELPAGELEFT "ホイールページ左" - F_WHEELPAGERIGHT "ホイールページ右" - F_MODIFYLINE_NEXT "次の変更行へ" - F_MODIFYLINE_PREV "前の変更行へ" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_SELECTWORD "現在位置の単語選択" - F_SELECTALL "すべて選択" - F_SELECTLINE "1行選択" - F_BEGIN_SEL "範囲選択開始" - F_UP_SEL "(選択)カーソル上移動" - F_DOWN_SEL "(選択)カーソル下移動" - F_LEFT_SEL "(選択)カーソル左移動" - F_RIGHT_SEL "(選択)カーソル右移動" - F_UP2_SEL "(選択)カーソル上移動(2行ごと)" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_DOWN2_SEL "(選択)カーソル下移動(2行ごと)" - F_WORDLEFT_SEL "(選択)単語の左端に移動" - F_WORDRIGHT_SEL "(選択)単語の右端に移動" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_GOLINETOP_SEL "(選択)行頭に移動(折り返し単位)" - F_GOLINEEND_SEL "(選択)行末に移動(折り返し単位)" - F_HalfPageUp_Sel "(選択)半ページアップ" - F_HalfPageDown_Sel "(選択)半ページダウン" - F_1PageUp_Sel "(選択)1ページアップ" - F_1PageDown_Sel "(選択)1ページダウン" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_GOFILETOP_SEL "(選択)ファイルの先頭に移動" - F_GOFILEEND_SEL "(選択)ファイルの最後に移動" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_GONEXTPARAGRAPH_SEL "(選択)次の段落へ移動" - F_GOPREVPARAGRAPH_SEL "(選択)前の段落へ移動" - F_MODIFYLINE_NEXT_SEL "(選択)次の変更行へ" - F_MODIFYLINE_PREV_SEL "(選択)前の変更行へ" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_BEGIN_BOX "矩形範囲選択開始" - F_UP_BOX "(矩形選択)カーソル上移動" - F_DOWN_BOX "(矩形選択)カーソル下移動" - F_LEFT_BOX "(矩形選択)カーソル左移動" - F_RIGHT_BOX "(矩形選択)カーソル右移動" - F_UP2_BOX "(矩形選択)カーソル上移動(2行ごと)" - F_DOWN2_BOX "(矩形選択)カーソル下移動(2行ごと)" - F_WORDLEFT_BOX "(矩形選択)単語の左端に移動" - F_WORDRIGHT_BOX "(矩形選択)単語の右端に移動" - F_GOLOGICALLINETOP_BOX "(矩形選択)行頭に移動(改行単位)" - F_GOLINETOP_BOX "(矩形選択)行頭に移動(折り返し単位)" - F_GOLINEEND_BOX "(矩形選択)行末に移動(折り返し単位)" - F_HalfPageUp_BOX "(矩形選択)半ページアップ" - F_HalfPageDown_BOX "(矩形選択)半ページダウン" - F_1PageUp_BOX "(矩形選択)1ページアップ" - F_1PageDown_BOX "(矩形選択)1ページダウン" - F_GOFILETOP_BOX "(矩形選択)ファイルの先頭に移動" - F_GOFILEEND_BOX "(矩形選択)ファイルの最後に移動" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_CUT "切り取り" - F_COPY "コピー" - F_COPY_CRLF "CRLF改行でコピー" - F_PASTE "貼り付け" - F_PASTEBOX "矩形貼り付け" - F_INSTEXT_W "テキストを貼り付け" - F_EDIT_INS_SUBMENU "挿入" - F_EDIT_HLV_SUBMENU "高度な操作" - F_EDIT_MOV_SUBMENU "移動" - F_EDIT_SEL_SUBMENU "選択" - F_EDIT_BOX_SEL_SUBMENU "矩形選択" - F_EDIT_COS_SUBMENU "整形" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_COPY_ADDCRLF "折り返し位置に改行をつけてコピー" - F_COPYLINES "選択範囲内全行コピー" - F_COPYLINESASPASSAGE "選択範囲内全行引用符付きコピー" - F_COPYLINESWITHLINENUMBER "選択範囲内全行行番号付きコピー" - F_COPY_COLOR_HTML "選択範囲内色付きHTMLコピー" - F_COPY_COLOR_HTML_LINENUMBER "選択範囲内行番号色付きHTMLコピー" - F_COPYPATH "このファイルのパス名をコピー" - F_COPYTAG "このファイルのパス名とカーソル位置をコピー" - F_COPYFNAME "このファイル名をコピー" - F_COPYDIRPATH "このファイルのフォルダ名をコピー" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_CREATEKEYBINDLIST "キー割り当て一覧をコピー" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_INS_DATE "日付挿入" - F_INS_TIME "時刻挿入" - F_CTRL_CODE_DIALOG "コントロールコード入力..." - F_INS_FILE_USED_RECENTLY "最近使ったファイル挿入" - F_INS_FOLDER_USED_RECENTLY "最近使ったフォルダ挿入" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_CONVERT_TOPMENU "変換" - F_TOLOWER "小文字" - F_TOUPPER "大文字" - F_TOHANKAKU "全角→半角" - F_TOZENKAKUKATA "半角+全ひら→全角・カタカナ" - F_TOZENKAKUHIRA "半角+全カタ→全角・ひらがな" - F_HANKATATOZENKATA "半角カタカナ→全角カタカナ" - F_HANKATATOZENHIRA "半角カタカナ→全角ひらがな" - F_TOZENEI "半角英数→全角英数" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_TOHANEI "全角英数→半角英数" - F_TOHANKATA "全角カタカナ→半角カタカナ" - F_TABTOSPACE "TAB→空白" - F_SPACETOTAB "空白→TAB" - F_CONV_ENCODE_SUBMENU "文字コード変換" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_CODECNV_AUTO2SJIS "自動判別→SJISコード変換" - F_CODECNV_EMAIL "E-Mail(JIS→SJIS)コード変換" - F_CODECNV_EUC2SJIS "EUC→SJISコード変換" - F_CODECNV_UNICODE2SJIS "UTF-16→SJISコード変換" - F_CODECNV_UTF82SJIS "UTF-8→SJISコード変換" - F_CODECNV_UTF72SJIS "UTF-7→SJISコード変換" - F_CODECNV_UNICODEBE2SJIS "UTF-16BE→SJISコード変換" - F_CODECNV_SJIS2JIS "SJIS→JISコード変換" - F_CODECNV_SJIS2EUC "SJIS→EUCコード変換" - F_CODECNV_SJIS2UTF8 "SJIS→UTF-8コード変換" - F_CODECNV_SJIS2UTF7 "SJIS→UTF-7コード変換" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_BASE64DECODE "Base64デコードして保存" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_UUDECODE "uudecodeして保存" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_SEARCH_TOPMENU "検索" - F_SEARCH_DIALOG "検索..." - F_SEARCH_NEXT "次を検索" - F_SEARCH_PREV "前を検索" - F_REPLACE_DIALOG "置換..." - F_SEARCH_CLEARMARK "検索マークの切替え" - F_REPLACE "置換" - F_REPLACE_ALL "すべて置換" - F_SEARCH_BOX "検索 (ボックス)" - F_JUMP_SRCHSTARTPOS "検索開始位置へ戻る" - F_GREP_DIALOG "Grep..." - F_GREP "Grep" - F_GREP_REPLACE_DLG "Grep置換..." - F_GREP_REPLACE "Grep置換" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_JUMP_DIALOG "指定行へジャンプ..." - F_JUMP "指定行へジャンプ" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_OUTLINE "アウトライン解析..." - F_OUTLINE_TOGGLE "アウトライン解析(トグル)..." - F_TAGJUMP "タグジャンプ" - F_TAGJUMPBACK "タグジャンプバック" - F_TAGS_MAKE "タグファイルの作成..." -END - -STRINGTABLE DISCARDABLE -BEGIN - F_DIRECT_TAGJUMP "ダイレクトタグジャンプ" - F_TAGJUMP_CLOSE "閉じてタグジャンプ" - F_TAGJUMP_KEYWORD "キーワードを指定してタグジャンプ..." - F_COMPARE "ファイル内容比較..." -END - -STRINGTABLE DISCARDABLE -BEGIN - F_BRACKETPAIR "対括弧の検索" - F_BOOKMARK_SET "ブックマーク設定・解除" - F_BOOKMARK_NEXT "次のブックマークへ" - F_BOOKMARK_PATTERN "該当行マーク" - F_BOOKMARK_PREV "前のブックマークへ" - F_BOOKMARK_RESET "ブックマークの全解除" - F_BOOKMARK_VIEW "ブックマークの一覧..." - - F_BOOKMARK_SUBMENU "ブックマーク" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_DIFF_DIALOG "DIFF差分表示..." - F_DIFF "DIFF差分表示" - F_DIFF_NEXT "次の差分へ" - F_DIFF_PREV "前の差分へ" - F_DIFF_RESET "差分表示の全解除" - F_ISEARCH_NEXT "前方インクリメンタルサーチ" - F_ISEARCH_PREV "後方インクリメンタルサーチ" - F_ISEARCH_REGEXP_NEXT "正規表現前方インクリメンタルサーチ" - F_ISEARCH_REGEXP_PREV "正規表現後方インクリメンタルサーチ" - F_ISEARCH_MIGEMO_NEXT "MIGEMO前方インクリメンタルサーチ" - F_ISEARCH_MIGEMO_PREV "MIGEMO後方インクリメンタルサーチ" - F_FUNCLIST_NEXT "次の関数リストマーク" - F_FUNCLIST_PREV "前の関数リストマーク" - F_FILETREE "ファイルツリー" - - F_ISEARCH_SUBMENU "インクリメンタルサーチ" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_OPTION_TOPMENU "設定" - F_CHGMOD_INS "挿入/上書きモード切り替え" - F_CHG_CHARSET "文字コードセット指定..." -END - -STRINGTABLE DISCARDABLE -BEGIN - F_CHGMOD_EOL_CRLF "入力改行コード指定(CRLF)" - F_CHGMOD_EOL_LF "入力改行コード指定(LF)" - F_CHGMOD_EOL_CR "入力改行コード指定(CR)" - F_CHGMOD_EOL_SUBMENU "入力改行コード指定" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_CANCEL_MODE "各種モードの取り消し" - F_SHOWTOOLBAR "ツールバーの表示/非表示" - F_SHOWFUNCKEY "ファンクションキーの表示/非表示" - F_SHOWSTATUSBAR "ステータスバーの表示/非表示" - F_SHOWTAB "タブバーの表示/非表示" - F_SHOWMINIMAP "ミニマップの表示/非表示" - - F_SHOWTOOLBAR_ON "ツールバーを表示" - F_SHOWFUNCKEY_ON "ファンクションキーを表示" - F_SHOWTAB_ON "タブバーを表示" - F_SHOWSTATUSBAR_ON "ステータスバーを表示" - F_SHOWMINIMAP_ON "ミニマップを表示" - - F_SHOWTOOLBAR_OFF "表示中のツールバーを隠す" - F_SHOWFUNCKEY_OFF "表示中のファンクションキーを隠す" - F_SHOWTAB_OFF "表示中のタブバーを隠す" - F_SHOWSTATUSBAR_OFF "表示中のステータスバーを隠す" - F_SHOWMINIMAP_OFF "表示中のミニマップを隠す" - -END - -STRINGTABLE DISCARDABLE -BEGIN - F_TYPE_LIST "タイプ別設定一覧..." - F_OPTION_TYPE "タイプ別設定..." - F_OPTION "共通設定..." - F_FAVORITE "履歴の管理..." -END - -STRINGTABLE DISCARDABLE -BEGIN - F_FONT "フォント設定..." - F_SETFONTSIZE "フォントサイズ設定" - F_SETFONTSIZEUP "フォントサイズ拡大" - F_SETFONTSIZEDOWN "フォントサイズ縮小" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_WRAPWINDOWWIDTH "折り返し桁数" - F_TMPWRAPNOWRAP "折り返さない" - F_TMPWRAPSETTING "指定桁で折り返す" - F_TMPWRAPWINDOW "右端で折り返す" - F_SELECT_COUNT_MODE "文字カウント方法" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_TOOL_TOPMENU "ツール" - F_RECKEYMACRO "キーマクロの記録開始/終了" - F_SAVEKEYMACRO "キーマクロの保存" - F_LOADKEYMACRO "キーマクロの読み込み" - F_EXECKEYMACRO "キーマクロの実行" - - F_EXECEXTMACRO "名前を指定してマクロ実行..." - - F_RECKEYMACRO_REC "キーマクロの記録開始" - F_SAVEKEYMACRO_REC "キーマクロの保存" - F_LOADKEYMACRO_REC "キーマクロの読み込み" - F_EXECKEYMACRO_REC "キーマクロの実行" - - F_RECKEYMACRO_APPE "キーマクロの記録終了" - F_SAVEKEYMACRO_APPE "キーマクロの記録終了&&保存" - F_LOADKEYMACRO_APPE "キーマクロの記録終了&&読み込み" - F_EXECKEYMACRO_APPE "キーマクロの記録終了&&実行" - - F_EXECKEYMACRO_REGD "登録済みマクロ" - F_TOOL_CUSTOM_SUBMENU "カスタムメニュー" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_EXECMD_DIALOG "外部コマンド実行..." - F_EXECMD "外部コマンド実行" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_WINDOW_TOPMENU "ウィンドウ" - F_SPLIT_V "上下に分割/分割解除" - F_SPLIT_V_ON "上下に分割" - F_SPLIT_V_OFF "上下分割の解除" - F_SPLIT_H "左右に分割/分割解除" - F_SPLIT_H_ON "左右に分割" - F_SPLIT_H_OFF "左右分割の解除" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_SPLIT_VH "縦横に分割/分割解除" - F_SPLIT_VH_ON "縦横に分割" - F_SPLIT_VH_OFF "縦横分割の解除" - - F_WINCLOSE "閉じる" - F_WIN_CLOSEALL "すべて閉じる" - F_TAB_CLOSEOTHER "このタブ/ウィンドウ以外を閉じる" - F_TAB_CLOSEOTHER_TAB "このタブ以外を閉じる" - F_TAB_CLOSEOTHER_WINDOW "このウィンドウ以外を閉じる" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_CASCADE "重ねて表示" - F_TILE_V "上下に並べて表示" - F_TILE_H "左右に並べて表示" - F_BIND_WINDOW "グループ化" - F_TOPMOST "常に手前に表示" - F_TOPMOST_REL "常に手前を解除" - F_TOPMOST_SET "常に手前に表示" - F_WINLIST "ウィンドウ一覧..." - F_DLGWINLIST "ウィンドウ一覧表示..." - F_NEXTWINDOW "次のウィンドウ" - F_PREVWINDOW "前のウィンドウ" - F_WINDOW_LIST_SUBMENU "ウィンドウ一覧" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_MAXIMIZE_V "縦方向に最大化" - F_MINIMIZE_ALL "すべて最小化" - F_MAXIMIZE_H "横方向に最大化" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_REDRAW "再描画" - F_WIN_OUTPUT "アウトプット" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_GROUPCLOSE "グループを閉じる" - F_NEXTGROUP "次のグループ" - F_PREVGROUP "前のグループ" - F_TAB_MOVERIGHT "タブを右に移動" - F_TAB_MOVELEFT "タブを左に移動" - F_TAB_SEPARATE "新規グループ" - F_TAB_JOINTNEXT "次のグループに移動" - F_TAB_JOINTPREV "前のグループに移動" - F_TAB_MANIP_SUBMENU "タブの操作" - F_TAB_GROUPDEL "グループ化を解除" // LMP -- added - F_TAB_GROUPIZE "グループ化" // LMP -- added - F_TAB_CLOSELEFT "左をすべて閉じる" - F_TAB_CLOSERIGHT "右をすべて閉じる" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_HOKAN "入力補完" - F_TOGGLE_KEY_SEARCH "キーワードヘルプ自動表示" - F_TOGGLE_KEY_SEARCH_ON "キーワードヘルプ自動表示する" - F_TOGGLE_KEY_SEARCH_OFF "キーワードヘルプ自動表示しない" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_HELP_TOPMENU "ヘルプ" - F_HELP_CONTENTS "ヘルプ目次" - F_HELP_SEARCH "ヘルプキーワード検索" - F_MENU_ALLFUNC "コマンド一覧" - F_EXTHELP1 "外部ヘルプ1" - F_EXTHTMLHELP "外部HTMLヘルプ" - F_ABOUT "バージョン情報" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_MENU_RBUTTON "右クリックメニュー" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_CUSTMENU_1 "カスタムメニュー1" - F_CUSTMENU_2 "カスタムメニュー2" - F_CUSTMENU_3 "カスタムメニュー3" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_CUSTMENU_4 "カスタムメニュー4" - F_CUSTMENU_5 "カスタムメニュー5" - F_CUSTMENU_6 "カスタムメニュー6" - F_CUSTMENU_7 "カスタムメニュー7" - F_CUSTMENU_8 "カスタムメニュー8" - F_CUSTMENU_9 "カスタムメニュー9" - F_CUSTMENU_10 "カスタムメニュー10" - F_CUSTMENU_11 "カスタムメニュー11" - F_CUSTMENU_12 "カスタムメニュー12" - F_CUSTMENU_13 "カスタムメニュー13" - F_CUSTMENU_14 "カスタムメニュー14" - F_CUSTMENU_15 "カスタムメニュー15" - F_CUSTMENU_16 "カスタムメニュー16" - F_CUSTMENU_17 "カスタムメニュー17" - F_CUSTMENU_18 "カスタムメニュー18" - F_CUSTMENU_19 "カスタムメニュー19" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_CUSTMENU_20 "カスタムメニュー20" - F_CUSTMENU_21 "カスタムメニュー21" - F_CUSTMENU_22 "カスタムメニュー22" - F_CUSTMENU_23 "カスタムメニュー23" - F_CUSTMENU_24 "タブメニュー" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_MENU_NOT_USED_FIRST "――ツールバー折返――" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_CHGMOD_EOL "入力改行コード指定" - F_TEXTWRAPMETHOD "折り返し方法" -END - -STRINGTABLE DISCARDABLE -BEGIN - F_WINDOW_LIST "ウィンドウリスト" - F_FILE_USED_RECENTLY "最近使ったファイル" - F_FOLDER_USED_RECENTLY "最近使ったフォルダ" - F_CUSTMENU_LIST "カスタムメニューリスト" - F_USERMACRO_LIST "登録済みマクロリスト" - F_PLUGIN_LIST "プラグインコマンドリスト" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_AUTHOR_PAGE "https://sakura-editor.github.io/" - IDS_ABOUT_DESCRIPTION "このソフトウェアは「テキストエディタ(共同開発版)」を改称したものです。\r\n商用・非商用を問わず無償で利用できますが、ソースコードの著作権は各箇所を記述した人が留保しています。\r\nこのソフトウェアは無保証です。\r\n" -END - -STRINGTABLE DISCARDABLE -BEGIN - STR_SQLERR_EXEC_BUT_NOT_RUN "Oracle SQL*Plusで実行します。\n\n\nOracle SQL*Plusが起動されていません。\n" - STR_SQLERR_ACTV_BUT_NOT_RUN "Oracle SQL*Plusをアクティブ表示します。\n\n\nOracle SQL*Plusが起動されていません。\n" - STR_ERR_CMPERR "比較先のファイル\n%s\n%dバイトを超える行があります。\n比較できません。" - - STR_NO_TITLE1 "(無題)" - STR_NO_TITLE2 "無題" - STR_PREVIEW_ONLY "(印刷プレビューでのみ使用できます)" - STR_NOT_SAVED "(保存されていません)" - STR_MAXWINDOW "編集ウィンドウ数の上限は%dです。\nこれ以上は同時に開けません。" - - // CCommandLine.cpp - cant map properly - STR_CMDLINE_PARSECMD1 "%ls\r\n上記のファイル名は不正です。ファイル名に \\ / : * ? "" < > | の文字は使えません。 " - - // CControlProcess.cpp - STR_ERR_CTRLMTX1 "CreateMutex()失敗。\n終了します。" - STR_ERR_CTRLMTX2 "CreateEvent()失敗。\n終了します。" - STR_ERR_CTRLMTX3 "ウィンドウの作成に失敗しました。\n起動できません。" - STR_ERR_CTRLMTX4 "SetEvent()失敗。\n終了します。" - - // CDlgCtrlCode.cpp - STR_DLGCTRLCODE_CODE "コード" - STR_DLGCTRLCODE_SYMBOL "表記" - STR_DLGCTRLCODE_NAME "名前" - STR_DLGCTRLCODE_DESC "説明" - - STR_ERR_DLGCTL5 "空文字" // Codes for p_ctrl_list - STR_ERR_DLGCTL6 "ヘッダ開始" - STR_ERR_DLGCTL7 "テキスト開始" - STR_ERR_DLGCTL8 "テキスト終了" - STR_ERR_DLGCTL9 "転送終了" - STR_ERR_DLGCTL10 "照会" - STR_ERR_DLGCTL11 "受信OK" - STR_ERR_DLGCTL12 "警告(ベル)" - STR_ERR_DLGCTL13 "後退" - STR_ERR_DLGCTL14 "タブ" - STR_ERR_DLGCTL15 "改行" - STR_ERR_DLGCTL16 "垂直タブ" - STR_ERR_DLGCTL17 "改ページ" - STR_ERR_DLGCTL18 "復帰" - STR_ERR_DLGCTL19 "シフトアウト" - STR_ERR_DLGCTL20 "シフトイン" - STR_ERR_DLGCTL21 "データリンクエスケープ" - STR_ERR_DLGCTL22 "装置制御1" - STR_ERR_DLGCTL23 "装置制御2" - STR_ERR_DLGCTL24 "装置制御3" - STR_ERR_DLGCTL25 "装置制御4" - STR_ERR_DLGCTL26 "受信失敗" - STR_ERR_DLGCTL27 "同期" - STR_ERR_DLGCTL28 "転送ブロック終了" - STR_ERR_DLGCTL29 "キャンセル" - STR_ERR_DLGCTL30 "メディア終了" - STR_ERR_DLGCTL31 "置換" - STR_ERR_DLGCTL32 "エスケープ" - STR_ERR_DLGCTL33 "フォーム区切" - STR_ERR_DLGCTL34 "グループ区切" - STR_ERR_DLGCTL35 "レコード区切" - STR_ERR_DLGCTL36 "ユニット区切" - STR_ERR_DLGCTL37 "削除" - - // CDlgFavorite.cpp - STR_DLGFAV_FILE "ファイル" - STR_DLGFAV_FOLDER "フォルダ" - STR_DLGFAV_FF_EXCLUDE "ファイル・フォルダ除外" - STR_DLGFAV_SEARCH "検索" - STR_DLGFAV_REPLACE "置換" - STR_DLGFAV_GREP_FILE "GREPファイル" - STR_DLGFAV_GREP_FOLDER "GREPフォルダ" - STR_DLGFAV_EXT_COMMAND "コマンド" - STR_DLGFAV_CURRENT_DIR "カレントディレクトリ" - STR_DLGFAV_HIDDEN "(非表示)" - STR_DLGFAV_FAVORITE "お気に入り" - STR_DLGFAV_CONF_DEL_FAV "最近使った%sの履歴を削除します。\nよろしいですか?\n" - STR_DLGFAV_CONF_DEL_NOTFAV "最近使った%sの履歴のお気に入り以外を削除します。\nよろしいですか?" - STR_DLGFAV_CONF_DEL_PATH "最近使った%sの存在しないパスを削除します。\nよろしいですか?" - STR_DLGFAV_DELIMITER "、" - STR_DLGFAV_FAV_REFRESH "履歴(%s)が更新されたため編集中情報を破棄し再表示しました。" - STR_DLGFAV_ADD "追加" - STR_DLGFAV_ADD_PROMPT "追加する文字列を入力してください。" - STR_DLGFAV_EDIT "編集" - STR_DLGFAV_EDIT_PROMPT "編集する文字列を入力してください。" - STR_DLGFAV_MENU_EDIT "編集(&E)" - STR_DLGFAV_MENU_ADD "新規追加(&I)" - STR_DLGFAV_MENU_EXCLUDE "除外リストに追加(&L)" - STR_DLGFAV_MENU_DEL_ALL "すべて削除(&A)" - STR_DLGFAV_MENU_DEL_NOTFAV "お気に入り以外削除(&F)" - STR_DLGFAV_MENU_DEL_INVALID "存在しない項目削除(&N)" - STR_DLGFAV_MENU_DEL_SEL "選択項目削除(&D)" - STR_DLGFAV_LIST_LIMIT_OVER "除外リストがいっぱいで追加できませんでした。" - - // CDlgFileUpdateQuery.cpp - STR_ERR_DLGUPQRY1 "再ロードを行うと変更が失われますがよろしいですか?" - STR_ERR_DLGUPQRY2 "再ロードしますか?" - - // CDlgFind.cpp - STR_DLGFIND1 "検索条件を指定してください。" - - // CDlgFuncList.cpp - STR_DLGFNCLST_TITLE_CPP "C++ メソッドツリー" - STR_DLGFNCLST_TITLE_RULE "ルールファイル" - STR_DLGFNCLST_TITLE_WZ "WZ階層付テキスト" - STR_DLGFNCLST_TITLE_TEXT "テキスト トピックツリー" - STR_DLGFNCLST_TITLE_JAVA "Java メソッドツリー" - STR_DLGFNCLST_TITLE_PYTHON "Python メソッドツリー" - STR_DLGFNCLST_TITLE_COBOL "COBOL アウトライン" - STR_DLGFNCLST_TITLE_VB "Visual Basic アウトライン" - STR_DLGFNCLST_TITLE_C "C 関数一覧" - STR_DLGFNCLST_TITLE_PLSQL "PL/SQL 関数一覧" - STR_DLGFNCLST_TITLE_ASM "アセンブラ アウトライン" - STR_DLGFNCLST_TITLE_PERL "Perl 関数一覧" - STR_DLGFNCLST_TITLE_ERLANG "Erlang 関数一覧" - STR_DLGFNCLST_TITLE_BOOK "ブックマーク" - - STR_DLGFNCLST_REMARK01 "宣言" - STR_DLGFNCLST_REMARK02 "関数宣言" - STR_DLGFNCLST_REMARK03 "プロシージャ宣言" - STR_DLGFNCLST_REMARK04 "関数" - STR_DLGFNCLST_REMARK05 "プロシージャ" - STR_DLGFNCLST_REMARK06 "■パッケージ仕様部" - STR_DLGFNCLST_REMARK07 "■パッケージ本体部" - STR_DLGFNCLST_REMARK08 "PROC" - STR_DLGFNCLST_REMARK09 "ラベル" - STR_DLGFNCLST_REMARK10 "ENDP" - - STR_DLGFNCLST_SORTTYPE1 "デフォルト" - STR_DLGFNCLST_SORTTYPE1_2 "デフォルト(降順)" - STR_DLGFNCLST_SORTTYPE2 "アルファベット順" - STR_DLGFNCLST_SORTTYPE2_2 "アルファベット(降順)" - - // NOT complete.... - STR_DLGFNCLST_APND_DECLARE "(宣言)" - STR_DLGFNCLST_APND_CLASS " クラス" - STR_DLGFNCLST_APND_STRUCT " 構造体" - STR_DLGFNCLST_APND_ENUM " 列挙体" - STR_DLGFNCLST_APND_UNION " 共用体" - STR_DLGFNCLST_APND_NAMESPACE " 名前空間" - STR_DLGFNCLST_APND_INTERFACE " インターフェース" - STR_DLGFNCLST_APND_GLOBAL "グローバル" - - STR_DLGFNCLST_VB_STATIC "静的 " - STR_DLGFNCLST_VB_PRIVATE "プライベート" - STR_DLGFNCLST_VB_FRIEND "フレンド" - STR_DLGFNCLST_VB_PUBLIC "パブリック" - STR_DLGFNCLST_VB_FUNCTION "関数" - STR_DLGFNCLST_VB_PROC "プロシージャ" - STR_DLGFNCLST_VB_PROPGET "プロパティ 取得" - STR_DLGFNCLST_VB_PROPLET "プロパティ 設定" - STR_DLGFNCLST_VB_PROPSET "プロパティ 参照" - STR_DLGFNCLST_VB_CONST "定数" - STR_DLGFNCLST_VB_ENUM "列挙型" - STR_DLGFNCLST_VB_TYPE "ユーザ定義型" - STR_DLGFNCLST_VB_EVENT "イベント" - STR_DLGFNCLST_VB_DECL "宣言" - - STR_DLGFNCLST_LIST_TEXT "テキスト" - STR_DLGFNCLST_LIST_TEXT_M "テキスト *" - STR_DLGFNCLST_LIST_FUNC "関数名" - STR_DLGFNCLST_LIST_FUNC_M "関数名 *" - STR_DLGFNCLST_LIST_LINE "行" - STR_DLGFNCLST_LIST_LINE_M "行 *" - STR_DLGFNCLST_LIST_COL "桁" - STR_DLGFNCLST_LIST_COL_M "桁 *" - STR_DLGFNCLST_LIST_M "*" - - STR_DLGFNCLST_TIP_CLOSE "閉じる" - STR_DLGFNCLST_TIP_WIN "ウィンドウの位置" - STR_DLGFNCLST_TIP_UPDATE "更新" - - STR_DLGFNCLST_MENU_UPDATE "更新(&U)" - STR_DLGFNCLST_MENU_COPY "コピー(&C)" - STR_DLGFNCLST_MENU_EXPAND "すべて展開(&E)" - STR_DLGFNCLST_MENU_COLLAPSE "すべて縮小(&O)" - STR_DLGFNCLST_MENU_BOOK_DEL "ブックマーク削除(&D)" - STR_DLGFNCLST_MENU_BOOK_ALL_DEL "ブックマーク全削除(&A)" - STR_DLGFNCLST_MENU_WINPOS "ウィンドウの位置(&W)" - STR_DLGFNCLST_MENU_LEFTDOC "左ドッキング(&L)" - STR_DLGFNCLST_MENU_RIGHTDOC "右ドッキング(&R)" - STR_DLGFNCLST_MENU_TOPDOC "上ドッキング(&T)" - STR_DLGFNCLST_MENU_BOTDOC "下ドッキング(&B)" - STR_DLGFNCLST_MENU_FLOATING "フローティング(&F)" - STR_DLGFNCLST_MENU_NODOCK "ドッキング禁止(&I)" - STR_DLGFNCLST_MENU_SYNC "ドッキング配置を同期(&S)" - STR_DLGFNCLST_MENU_INHERIT "ドッキング配置を共通継承(&C)" - STR_DLGFNCLST_MENU_TYPE "ドッキング配置をタイプ別継承(&Y)" - STR_DLGFNCLST_MENU_UNIFY "継承情報を統一(&U)" - STR_DLGFNCLST_MENU_CLOSE "閉じる(&X)" - - STR_DLGFNCLST_UNIFY "現在の画面のドッキング配置情報をすべての共通設定・タイプ別設定にコピーして統一します。\n(現在開いている他画面の状態も統一します。)\n" - - - // CDlgGrep.cpp - STR_DLGGREP1 "検索するフォルダを選んでください" - STR_DLGGREP2 "ファイル指定のフォルダ部分にはワイルドカードは使えません。" - STR_DLGGREP3 "ファイル指定にはフルパスは使えません" - STR_DLGGREP4 "検索対象フォルダを指定してください。" - STR_DLGGREP5 "検索対象フォルダが正しくありません。" - STR_DLGGREP6 "検索対象フォルダが長すぎます。" - - // CDlgJump.cpp - STR_DLGJUMP1 "正しく行番号を入力してください。" - STR_DLGJUMP_PSLQL "%d 行 %s パッケージ仕様部" - - // CDlgOpenFile.cpp - STR_DLGOPNFL1 "変換なし" // Max 32 bytes. - STR_DLGOPNFL2 " は既に存在します。\r\n上書きしますか?" - STR_DLGOPNFL3 "名前を付けて保存" - STR_DLGOPNFL_EXTNAME1 "ユーザー指定" - STR_DLGOPNFL_EXTNAME2 "テキストファイル" - STR_DLGOPNFL_EXTNAME3 "すべてのファイル" - STR_DLGOPNFL_ERR1 "ダイアログが開けません。\n\nエラー:%s" - - // CDlgPluginOption.cpp - STR_DLGPLUGINOPT_LOAD "プラグインがロードされていません。" - STR_DLGPLUGINOPT_TITLE "%ls プラグインの設定" - STR_DLGPLUGINOPT_INIHEAD " プラグイン設定ファイル" - STR_DLGPLUGINOPT_OPTION "指定できるオプションがありません" - STR_DLGPLUGINOPT_LIST1 "項目" - STR_DLGPLUGINOPT_LIST2 "値" - STR_DLGPLUGINOPT_SELECT "%sの選択" - - // CDlgPrintSetting.cpp - STR_DLGPRNST1 "設定名の変更" - STR_DLGPRNST2 "設定の名称を入力してください。" - - // CDlgProperty.cpp - STR_DLGFLPROP_FILENAME "ファイル名 " - STR_DLGFLPROP_FILETYPE "設定のタイプ " - STR_DLGFLPROP_ENCODING "文字コード " - STR_DLGFLPROP_WITH_BOM " BOM 付" - STR_DLGFLPROP_LINE_COUNT "行数 %d行\r\n" - STR_DLGFLPROP_LAYOUT_LINE "レイアウト行数 %d行\r\n" - STR_DLGFLPROP_VIEW_MODE "ビューモードで開いています。\r\n" - STR_DLGFLPROP_MODIFIED "変更されています。\r\n" - STR_DLGFLPROP_NOT_MODIFIED "変更されていません。\r\n" - STR_DLGFLPROP_CMD_COUNT "\r\nコマンド実行回数 %d回\r\n" - STR_DLGFLPROP_FILE_INFO "--ファイル情報-----------------\r\n" - STR_DLGFLPROP_W_LOCK "あなたはこのファイルを、他プロセスからの上書き禁止モードでロックしています。\r\n" - STR_DLGFLPROP_RW_LOCK "あなたはこのファイルを、他プロセスからの読み書き禁止モードでロックしています。\r\n" - STR_DLGFLPROP_LOCK "あなたはこのファイルをロックしています。\r\n" - STR_DLGFLPROP_NOT_LOCK "あなたはこのファイルをロックしていません。\r\n" - STR_DLGFLPROP_ATTRIBUTES "ファイル属性 " - STR_DLGFLPROP_AT_ARCHIVE "/アーカイブ" - STR_DLGFLPROP_AT_COMPRESS "/圧縮" - STR_DLGFLPROP_AT_FOLDER "/フォルダ" - STR_DLGFLPROP_AT_HIDDEN "/隠し" - STR_DLGFLPROP_AT_NORMAL "/ノーマル" - STR_DLGFLPROP_AT_OFFLINE "/オフライン" - STR_DLGFLPROP_AT_READONLY "/読み取り専用" - STR_DLGFLPROP_AT_SYSTEM "/システム" - STR_DLGFLPROP_AT_TEMP "/テンポラリ" - STR_DLGFLPROP_CREATE_DT "作成日時 " - STR_DLGFLPROP_YMDHMS "%d年%d月%d日 %02d:%02d:%02d" - STR_DLGFLPROP_UPDATE_DT "更新日時 " - STR_DLGFLPROP_ACCESS_DT "アクセス日時 " - STR_DLGFLPROP_DOS_NAME "MS-DOSファイル名 %s\r\n" - STR_DLGFLPROP_FILE_SIZE "ファイルサイズ %d バイト\r\n" - - // CDlgReplace.cpp - STR_DLGREPLC_CLIPBOARD "クリップボードに有効なデータがありません!" - STR_DLGREPLC_STR "文字列を指定してください。" - STR_DLGREPLC_REPLACE "%d箇所を置換しました。" - STR_DLGREPLC_REPSTR "置換条件を指定してください。" - - // CDlgSameColor.cpp - STR_DLGSMCLR_BTN1 "文字色統一" - STR_DLGSMCLR_BTN2 "背景色統一" - - // CDlgTagJumpList.cpp - STR_DLGTAGJMP1 "(通知)" - STR_DLGTAGJMP2 "(候補は見つかりませんでした)" - STR_DLGTAGJMP_LIST1 "キーワード" - STR_DLGTAGJMP_LIST2 "階層" - STR_DLGTAGJMP_LIST3 "行番号" - STR_DLGTAGJMP_LIST4 "種類" - STR_DLGTAGJMP_LIST5 "ファイル名" - STR_DLGTAGJMP_LIST6 "備考" - STR_DLGTAGJMP3 "キーワード 検索中..." - - // CDlgTagsMake.cpp - STR_DLGTAGMAK_SELECTDIR "タグ作成フォルダの選択" - - // CDlgWinSize.cpp - STR_DLGWINSZ_NORMAL "普通" - STR_DLGWINSZ_MAXIMIZE "最大化" - STR_DLGWINSZ_MINIMIZE "(最小化)" - - // CDlgProfileMgr.cpp - STR_DLGPROFILE_ERR_WRITE "プロフィール設定の書き込みに失敗しました。" - STR_DLGPROFILE_NEW_PROF_TITLE "新規プロファイル名" - STR_DLGPROFILE_NEW_PROF_MSG "プロファイル名を入力してください" - STR_DLGPROFILE_ERR_INVALID_CHAR "利用できない文字が含まれています。" - STR_DLGPROFILE_ERR_ALREADY "すでに同じ名前のプロファイルがあります。" - STR_DLGPROFILE_ERR_FILE "同名のファイルがあるため作成できません。" - STR_DLGPROFILE_RENAME_TITLE "プロファイル名の変更" - STR_DLGPROFILE_RENAME_MSG "プロファイル名を入力してください" - STR_DLGPROFILE_ERR_RENAME "名前の変更に失敗しました。\nプロファイルは利用中の可能性があります。" - - // CDocOutline.cpp - STR_DOCOUTLINE_REGEX "正規表現ルール\n%ls\nでエラーが発生しました。\n%s" - - // CDocLineMgr.cpp - STR_ERR_DLGDOCLM1 "%ls\nというファイルを開けません。\nファイルが存在しません。" - STR_ERR_DLGDOCLM2 "'%ls'\nというファイルを開けません。\n読み込みアクセス権がありません。" - STR_ERR_DLGDOCLM3 "'%ls'\nというファイルを開けません。\n他のアプリケーションで使用されている可能性があります。" - STR_ERR_DLGDOCLM4 "'%ls'というファイルの読み込み中にエラーが発生しました。\nファイルの読み込みを中止します。" - STR_ERR_DLGDOCLM5 "'%ls'\nファイルを保存できません。\nパスが存在しないか、他のアプリケーションで使用されている可能性があります。" - STR_ERR_DLGDOCLM6 "CDocLineMgr::GetAllData()\nメモリ確保に失敗しました。\n%dバイト" - STR_ERR_DLGDOCLM_TOOBIG "'%ls'\nというファイルを開けません。\nファイルサイズが大きすぎます。" - - // CDocLineMgr_New.cpp - STR_ERR_DLGDOCLMN1 "sakura: 作者に教えて欲しいエラー" - - // CDropTarget.cpp - STR_ERR_DLGDRPTGT1 "::RegisterDragDrop()\n失敗" - - // CControlTray.cpp - STR_TRAY_CREATE "CControlTray::Create()\nウィンドウクラスを登録できませんでした。" - STR_TRAY_TYPE_NAME "設定%d" - STR_TRAY_EXTHELP1 "外部ヘルプ1が設定されていません。\n今すぐ設定しますか?" - STR_TRAY_RESPONSEFILE "レスポンスファイルの作成に失敗しました。" - STR_TRAY_CREATEPROC1 "'%s'\nプロセスの起動に失敗しました。\n%s" - STR_TRAY_CREATEPROC2 "'%s'\nプロセスの起動に失敗しました。" - STR_TRAY_EXITALL "現在開いている編集用のウィンドウをすべて閉じて終了しますか?" - STR_TRAY_ACCELTABLE "CControlTray::CreateAccelTbl()\nアクセラレータ テーブルが作成できません。\nシステムリソースが不足しています。" - - - // CEditDoc.cpp - STR_LOADAGENT_ERR_OPEN "'%s'\nというファイルを開けません。\n読み込みアクセス権がありません。" - STR_LOADAGENT_BIG_WARNING "'%s'\nファイルサイズが%dMB以上あります。開きますか?" - STR_LOADAGENT_BIG_ERROR "'%s'\nというファイルを開けません。\nファイルサイズが大きすぎます。\n\n指定ファイルのサイズ: %s\nファイルサイズの上限: %s" - STR_SAVEAGENT_VIEW_FILE "ビューモードでは同一ファイルへの保存はできません。" - STR_SAVEAGENT_OTHER "'%s'\nファイルを保存できません。\n他のウィンドウで使用中です。" - STR_ERR_DLGEDITDOC5 "文字コード情報" - STR_ERR_DLGEDITDOC6 "%s\n\nこのファイルを文字コード %s で開こうとしていますが、前回は別の文字コード %s で開かれています。\n前回と同じ文字コードを使いますか?\n\n・[はい(Y)] =%s\n・[いいえ(N)]=%s\n" - STR_NOT_EXSIST_SAVE "%s\nというファイルは存在しません。\n\nファイルを保存したときに、ディスク上にこのファイルが作成されます。" - STR_BACKUP_ERR_TITLE "ファイル保存" - STR_BACKUP_ERR_MSG "バックアップの作成に失敗しました.元ファイルへの上書きを継続して行いますか." - STR_BACKUP_ERR_PATH_CRETE "バックアップ先のパス作成中にエラーになりました。\nパスが長すぎるか不正な書式です。\nバックアップを作成せずに上書き保存してよろしいですか?" - STR_BACKUP_CONFORM_TITLE1 "バックアップ作成の確認" - STR_BACKUP_CONFORM_MSG1 "変更される前に、バックアップファイルを作成します。\nよろしいですか? [いいえ(N)] を選ぶと作成せずに上書き(または名前を付けて)保存になります。\n\n%s\n ↓\n%s\n\n作成したバックアップファイルをごみ箱に放り込みます。\n" - STR_BACKUP_CONFORM_TITLE2 "バックアップ作成の確認" - STR_BACKUP_CONFORM_MSG2 "変更される前に、バックアップファイルを作成します。\nよろしいですか? [いいえ(N)] を選ぶと作成せずに上書き(または名前を付けて)保存になります。\n\n%s\n ↓\n%s\n\n" - STR_BACKUP_ERR_DELETE "削除失敗" - STR_BACKUP_ERR_MOVE "移動失敗" - STR_ERR_DLGEDITDOC21 "%s\nは現在他のプロセスによって書込みが禁止されています。" - - STR_EXCLU_NO_EXCLUSIVE "しない" - STR_EXCLU_DENY_WRITE "上書きを禁止する" - STR_EXCLU_DENY_READWRITE "読み書きを禁止する" - STR_EXCLU_UNDEFINED "未定義のモード(問題があります)" - STR_FILE_LOCK_ERR "%s\nを%sでロックできませんでした。\n現在このファイルに対する排他制御は無効となります。" - - STR_TITLE_GREP "【Grep】%ls%s" - STR_ERR_DLGEDITDOC30 "%s\nは変更されています。 閉じる前に保存しますか?\n\nビューモードで開いているので、名前を付けて保存すればいいと思います。\n" - STR_CHANGE_CHARSET "%s\nはテキストの変更は有りませんが、\n文字コードセットが変更されています。\n閉じる前に保存しますか?" - STR_ERR_DLGEDITDOC31 "%s\nは変更されています。 閉じる前に保存しますか?" - STR_AUTORELOAD_NOFITY "★ファイル更新 %02d:%02d:%02d" - - // CType_Cpp.cpp - STR_OUTLINE_CPP_NONAME "無名" - STR_OUTLINE_CPP_DEFPOS "::定義位置" - - // CType_Python.cpp - STR_OUTLINE_PYTHON_UNDEFINED "名称未定" - STR_OUTLINE_PYTHON_CLASS " クラス" - - // CType_Java.cpp - STR_OUTLINE_JAVA_DEFPOS "定義位置" - - // CType_Erlang.cpp - STR_OUTLINE_ERLANG_SCANARGS "COutlineErlang::ScanArgs 未知の括弧" - - // Caret.cpp - STR_CARET_WITHBOM " BOM付" - - // CEditView.cpp - STR_VIEW_TIMER "CEditView::Create()\nタイマーが起動できません。\nシステムリソースが不足しているのかもしれません。" - STR_ERR_DLGEDITVW2 "大" - STR_ERR_DLGEDITVW5 "\n--------------------\n■" - STR_ERR_DLGEDITVW6 "■" - STR_MENU_KEYWORDINFO "キーワードの説明をクリップボードにコピー" - STR_MENU_OPENKEYWORDDIC "キーワード辞書を開く" - STR_STATUS_ROW_COL "%5d 行 %4d 桁" - STR_INS_MODE_INS "挿入" - STR_INS_MODE_OVR "上書" - STR_GREP_SEARCH_CONDITION "\r\n□検索条件 " - STR_GREP_SEARCH_FILE "「ファイル検索」\r\n" - STR_GREP_SEARCH_TARGET "検索対象 " - STR_GREP_REPLACE_TO "置換後 " - STR_GREP_PASTE_CLIPBOAD "(クリップボードから貼り付け)" - STR_GREP_SEARCH_FOLDER "フォルダ " - STR_GREP_EXCLUDE_FILE "除外ファイル " - STR_GREP_EXCLUDE_FOLDER "除外フォルダ " - STR_GREP_SUBFOLDER_YES " (サブフォルダも検索)\r\n" - STR_GREP_SUBFOLDER_NO " (サブフォルダを検索しない)\r\n" - STR_GREP_COMPLETE_WORD " (単語単位で探す)\r\n" - STR_GREP_CASE_SENSITIVE " (英大文字小文字を区別する)\r\n" - STR_GREP_IGNORE_CASE " (英大文字小文字を区別しない)\r\n" - STR_GREP_REGEX_DLL " (正規表現:" - STR_GREP_CHARSET_AUTODETECT " (文字コードセットの自動判別)\r\n" - STR_GREP_CHARSET " (文字コードセット:" - STR_GREP_SHOW_MATCH_LINE " (一致した行を出力)\r\n" - STR_GREP_SHOW_FIRST_LINE " (一致した行の最初の箇所のみ出力)\r\n" - STR_GREP_SHOW_MATCH_AREA " (一致した箇所のみ出力)\r\n" - STR_GREP_SHOW_MATCH_NOHITLINE " (一致しなかった行を出力)\r\n" - STR_GREP_SHOW_FIRST_MATCH " (ファイル毎最初のみ検索)\r\n" - STR_GREP_SUSPENDED "中断しました。\r\n" - STR_GREP_REPLACE_COUNT "%d 個を置換しました。\r\n" - STR_GREP_MATCH_COUNT "%d 個が検索されました。\r\n" - STR_GREP_RUNNINNG "Grepの処理中です。\n" - STR_GREP_ERR_ENUMKEYS0 "(不明)" - STR_GREP_ERR_ENUMKEYS1 "ファイル指定のフォルダ部分にはワイルドカードは使えません" - STR_GREP_ERR_ENUMKEYS2 "ファイル指定にはフルパスは使えません" - STR_GREP_TIMER "処理時間: %dミリ秒\r\n" - STR_GREP_ERR_FILEOPEN "file open error [%s]\r\n" - STR_GREP_ERR_FILEREAD "ファイルの読み込み中にエラーが発生しました。[%s]\r\n" - STR_GREP_ERR_FILEWRITE "書き込めませんでした。 [%s]\r\n" - STR_GREP_REP_ERR_DELETE "ファイルの削除に失敗しました。" - STR_GREP_REP_ERR_REPLACE "ファイルの置き換えに失敗しました。" - - // CEditView_ExecCmd.cpp - STR_EDITVIEW_EXECCMD_ERR "コマンド実行は失敗しました。" - STR_EDITVIEW_EXECCMD_STOP "\r\n中断しました。\r\n" - STR_EDITVIEW_EXECCMD_RET "\r\n終了コード: %d\r\n" - - // CEditView_CmdHokan.cpp - STR_ERR_DLGEDITVWHOKAN1 "補完候補一覧ファイルが設定されていません。\n今すぐ設定しますか?" - STR_SUPPORT_NOT_COMPLITE "補完対象がありません" - - // CEditView_Cmdisrch.cpp - STR_EDITVWISRCH_REGEX "正規表現ライブラリが使用できません。" - STR_EDITVWISRCH_MIGEGO1 "MIGEMO.DLLが使用できません。" - STR_EDITVWISRCH_MIGEGO2 "MIGEMOは使用できません。" - STR_EDITVWISRCH_NOMATCH " (見つかりません)" - - // CEditView_Command.cpp - STR_ERR_MACRO1 "マクロ %d (%s) の実行に失敗しました。" - STR_ERR_SRPREV1 "▲末尾から再検索しました" - STR_ERR_SRPREV2 "△見つかりませんでした" - STR_ERR_SRPREV3 "後方(↑) に文字列 '%ls' が1つも見つかりません。" - STR_ERR_SRNEXT1 "▼先頭から再検索しました" - STR_ERR_SRNEXT2 "▽見つかりませんでした" - STR_ERR_SRNEXT3 "前方(↓) に文字列 '%ls' が1つも見つかりません。" - STR_ERR_UNINDENT1 "★逆インデントは選択時のみ" - STR_ERR_TAGJMP1 "タグジャンプできません" - STR_ERR_TAGJMPBK1 "タグジャンプバックできません" - STR_ERR_MACROERR1 "マクロの読み込みに失敗しました。\n\n%s" - STR_ERR_CEDITVIEW_CMD01 "外部ヘルプ1が設定されていません。\n今すぐ設定しますか?" - STR_ERR_CEDITVIEW_CMD02 "外部HTMLヘルプが設定されていません。\n今すぐ設定しますか?" - STR_ERR_CEDITVIEW_CMD03 "タグ作成コマンド実行は失敗しました。\n\nCTAGS.EXE が見つかりません。" - STR_ERR_CEDITVIEW_CMD04 "タグ作成コマンド実行は失敗しました。\n\n%s" - STR_ERR_CEDITVIEW_CMD05 "タグファイルを作成中です。" - STR_ERR_CEDITVIEW_CMD06 "タグ作成コマンド実行は失敗しました。\n\n%hs" - STR_ERR_CEDITVIEW_CMD07 "タグファイルの作成が終了しました。" - STR_ERR_CEDITVIEW_CMD08 "C/C++ヘッダファイルのオープンに失敗しました。" - STR_ERR_CEDITVIEW_CMD09 "C/C++ソースファイルのオープンに失敗しました。" - STR_ERR_CEDITVIEW_CMD10 "クリップボードに有効なデータがありません!" - STR_ERR_CEDITVIEW_CMD11 "最後まで置換しました。" - STR_ERR_CEDITVIEW_CMD14 "ファイルの書き込みに失敗しました。\n\n%s" - STR_ERR_CEDITVIEW_CMD16 "ファイルの書き込みに失敗しました。\n\n%s" - STR_ERR_CEDITVIEW_CMD18 "%s\nは変更されています。 Oracle SQL*Plusで実行する前に保存しますか?" - STR_ERR_CEDITVIEW_CMD20 "Oracle SQL*Plusからの反応がありません。\nしばらく待ってから再び実行してください。" - STR_ERR_CEDITVIEW_CMD21 "SQLをファイルに保存しないとOracle SQL*Plusで実行できません。\n" - STR_ERR_CEDITVIEW_CMD22 "異なる箇所は見つかりませんでした。" - STR_ERR_CEDITVIEW_CMD23 "異なる箇所が見つかりました。" - STR_ERR_CEDITVIEW_CMD24 "マクロファイルを作成できませんでした。\nファイル名の取得エラー nRet=%d" - STR_ERR_CEDITVIEW_CMD25 "マクロファイルを作成できませんでした。\n\n%s" - STR_ERR_CEDITVIEW_CMD26 "保存可能なマクロがありません.キーボードマクロ以外は保存できません." - STR_ERR_CEDITVIEW_CMD27 "マクロファイルを作成できませんでした。\n\n%s" - STR_ERR_CEDITVIEW_CMD28 "ファイルを開けませんでした。\n\n%s" - STR_ERR_CEDITVIEW_CMD29 "%s\n\nこのファイルは変更されています。\n再ロードを行うと変更が失われますが、よろしいですか?" - - // FIXME -- possibly some left over text in the form of square blocks in the TAGList - // inside funciton Command_EXTHELP1 - - // CEditView_Command_New.cpp - STR_BOOKMARK_NEXT_NOT_FOUND "前方(↓) にブックマークが見つかりません。" - STR_BOOKMARK_PREV_NOT_FOUND "後方(↑) にブックマークが見つかりません。" - STR_FUCLIST_NEXT_NOT_FOUND "前方(↓) に関数が見つかりません。" - STR_FUCLIST_PREV_NOT_FOUND "後方(↑) に関数が見つかりません。" - STR_ERR_DLGEDITVWCMDNW7 "%d行をマージしました。" - STR_ERR_DLGEDITVWCMDNW8 "マージ可能な行がみつかりませんでした。" - STR_SAVEAGENT_OTHER_APP "'%s'\nファイルを保存できません。\nパスが存在しないか、他のアプリケーションで使用されている可能性があります。" - STR_ERR_DLGEDITVWCMDNW11 "ファイルの書き込み中にエラーが発生しました。" - STR_ERR_DLGEDITVWCMDNW12 "ファイルの読み込み中にエラーが発生しました。" - - // CEditView_Diff.cpp - STR_ERR_DLGEDITVWDIFF1 "差分コマンド実行は失敗しました。\n\n比較するファイルが見つかりません。" - STR_ERR_DLGEDITVWDIFF2 "差分コマンド実行は失敗しました。\n\nDIFF.EXE が見つかりません。" - STR_ERR_DLGEDITVWDIFF3 "差分コマンド実行は失敗しました。\n\n%ls" - STR_ERR_DLGEDITVWDIFF4 "DIFF差分を行おうとしたファイルはバイナリファイルです。" - STR_ERR_DLGEDITVWDIFF5 "DIFF差分は見つかりませんでした。" - STR_DIFF_NEXT_NOT_FOUND "前方(↓) に差分が見つかりません。" - STR_DIFF_PREV_NOT_FOUND "後方(↑) に差分が見つかりません。" - STR_DIFF_FAILED "差分コマンド実行は失敗しました。" - STR_DIFF_FAILED_TEMP "差分コマンド実行は失敗しました。\n\n一時ファイルを作成できません。" - STR_DIFF_FAILED_LONG "差分コマンド実行は失敗しました。\n\n行が長すぎます。" - STR_MODLINE_NEXT_NOT_FOUND "前方(↓) に変更行が見つかりません。" - STR_MODLINE_PREV_NOT_FOUND "後方(↑) に変更行が見つかりません。" - - // CEditView_Mouse.cpp - STR_VIEW_MOUSE_BUG "バグってる" - STR_VIEW_MOUSE_MENU_PATH "パス名貼り付け(&P)" - STR_VIEW_MOUSE_MENU_FILE "ファイル名貼り付け(&F)" - STR_VIEW_MOUSE_MENU_OPEN "ファイルを開く(&O)" - STR_VIEW_MOUSE_MENU_CANCEL "キャンセル" - - // CEditView_New.cpp -- no words, going to ignore for now ( just block [], ... etc ) - - // CEditView_New2.cpp -- no words, going to ignore for now ( just block [], ... etc ) - - // CEditView_New3.cpp -- no words, going to ignore for now ( just block [], ... etc ) - - // CEditWnd.cpp - STR_ERR_DLGEDITWND01 "CEditWnd::CreateAccelTbl()\nアクセラレータ テーブルが作成できません。\nシステムリソースが不足しています。" - STR_ERR_DLGEDITWND02 "エディタ間の対話に失敗しました。\n権限レベルの異なるエディタが既に起動している可能性があります。" - STR_ERR_DLGEDITWND03 "CEditWnd::Create()\nタイマーが起動できません。\nシステムリソースが不足しているのかもしれません。" - STR_ERR_DLGEDITWND04 "Rebar の作成に失敗しました。" - STR_ERR_DLGEDITWND05 "ツールバーの作成に失敗しました。" - STR_EDITWND_MENU_NEL "入力改行コード指定(&NEL)" - STR_EDITWND_MENU_LS "入力改行コード指定(L&S)" - STR_EDITWND_MENU_PS "入力改行コード指定(&PS)" - STR_ERR_DLGEDITWND13 "文字:\t\t%ls (%s)\n\nSJIS:\t\t%s\nJIS:\t\t%s\nEUC:\t\t%s\nLatin1:\t\t%s\nUTF-16:\t\t%s\nUTF-8:\t\t%s\nCESU-8:\t\t%s" - STR_ERR_DLGEDITWND14 "印刷プレビューを実行する前に、プリンタをインストールしてください。\n" - - // const char* pszLabel[7] = { "", "99999 行 9999 列", "CRLF", "0000", "UTF-16", "REC", "上書" }; //Oct. 30, 2000 JEPRO 千万行も要らん - STR_ERR_DLGEDITWND19 "" - STR_ERR_DLGEDITWND20 "99999 L 9999 C" -// STR_ERR_DLGEDITWND20 "99999 行 9999 列" - STR_ERR_DLGEDITWND21 "CFLF" - STR_ERR_DLGEDITWND22 "0000" - STR_ERR_DLGEDITWND23 "UTF-16 BOM付" - STR_ERR_DLGEDITWND24 "REC" - STR_ERR_DLGEDITWND25 "上書" - STR_WRAP_WIDTH_FULL "折り返し桁数: %d 桁(最大)" - STR_WRAP_WIDTH_WINDOW "折り返し桁数: %d 桁(右端)" - STR_WRAP_WIDTH_FIXED "折り返し桁数: %d 桁(指定)" - - // CEol.cpp - - // CESI.cpp - STR_ESI_CHARCODE_DETECT "--文字コード調査結果-----------\r\n" - STR_ESI_RESULT_STATE "判別結果の状態\r\n" - STR_ESI_NO_INFO "\t判別結果を取得できません。\r\n" - STR_ESI_DETECTED "\tおそらく正常に判定されました。\r\n" - STR_ESI_NO_DETECTED "\tコードを検出できませんでした。\r\n" - STR_ESI_DOC_TYPE "文書種別\r\n" - STR_ESI_DEFAULT_CHARCODE "デフォルト文字コード\r\n" - STR_ESI_SAMPLE_LEN "サンプルデータ長\r\n" - STR_ESI_SAMPLE_LEN_FORMAT "\t%d バイト\r\n" - STR_ESI_BYTES_AND_POINTS "固有バイト数とポイント数\r\n" - STR_ESI_UTF16LE_B_AND_P "\t\tUTF16LE 固有バイト数 %d,\tポイント数 %d\r\n" - STR_ESI_UTF16BE_B_AND_P "\t\tUTF16BE 固有バイト数 %d,\tポイント数 %d\r\n" - STR_ESI_BOM "\t\tBOM の推測結果 " - STR_ESI_BOM_UNKNOWN "不明\r\n" - STR_ESI_MBC_OTHER_UNICODE "\tMBC と 上記以外の UNICODE ファミリ\r\n" - STR_ESI_OTHER_B_AND_P "\t\t%d.%s\t固有バイト数 %d\tポイント数 %d\r\n" - STR_ESI_EUC_ZENKAKU "\t\t・EUC全角カナかな/EUC全角\t%6.3f\r\n" - STR_ESI_RESULT "判定結果\r\n" - - // CFileExt.cpp - - // CFileLoad.cpp - - // CFileWrite.cpp - - // CFuncInfo.cpp - - // CFuncInfoArr.cpp - STR_ERR_DLGFUNCKEYWN1 "CFuncKeyWnd::Open()\nタイマーが起動できません。\nシステムリソースが不足しているのかもしれません。" - - // CFuncLookup.cpp - STR_ERR_DLGFUNCLKUP01 "外部マクロ" - STR_ERR_DLGFUNCLKUP02 "カスタムメニュー" - STR_ERR_DLGFUNCLKUP03 "マクロ %d (未登録)" - STR_ERR_DLGFUNCLKUP19 "プラグイン" - - // Related Commands Menu - STR_ERR_DLGFUNCLKUP04 "ファイル操作系" - STR_ERR_DLGFUNCLKUP05 "編集系" - STR_ERR_DLGFUNCLKUP06 "カーソル移動系" - STR_ERR_DLGFUNCLKUP07 "選択系" //Oct. 15, 2000 JEPRO 「カーソル移動系」が多くなったので「選択系」として独立化(サブメニュー化は構造上できないので) - STR_ERR_DLGFUNCLKUP08 "矩形選択系" //Oct. 17, 2000 JEPRO 「選択系」に一緒にすると多くなりすぎるので「矩形選択系」も独立させた - STR_ERR_DLGFUNCLKUP09 "クリップボード系" - STR_ERR_DLGFUNCLKUP10 "挿入系" - STR_ERR_DLGFUNCLKUP11 "変換系" - STR_ERR_DLGFUNCLKUP12 "検索系" - STR_ERR_DLGFUNCLKUP13 "モード切り替え系" - STR_ERR_DLGFUNCLKUP14 "設定系" - STR_ERR_DLGFUNCLKUP15 "マクロ系" - STR_ERR_DLGFUNCLKUP16 "ウィンドウ系" - STR_ERR_DLGFUNCLKUP17 "支援" - STR_ERR_DLGFUNCLKUP18 "その他" - - // charchode.cpp - - // CHokanMgr.cpp - - // CHtmlHelp.cpp - - // CImageListMgr.cpp - - // CKeyBind.cpp - STR_ERR_DLGKEYBIND1 "キー\t機能名\t関数名\t機能番号\tキーマクロ記録可/不可" - STR_ERR_DLGKEYBIND2 "---名前が定義されていない-----" - - // CKeyMacroMgr.cpp - STR_ERR_DLGKEYMACMGR1 "//キーボードマクロのファイル\r\n" - STR_ERR_DLGKEYMACMGR2 "Macro読み込みエラー" - STR_ERR_DLGKEYMACMGR3 "Line %d: Column %d: 引数が多すぎます\n" - STR_ERR_DLGKEYMACMGR4 "Line %d: Column %d\r\n関数%lsの%d番目の引数に文字列は置けません." - STR_ERR_DLGKEYMACMGR5 "Line %d:\r\n関数%lsの%d番目の引数の終わりに%lcがありません." - STR_ERR_DLGKEYMACMGR6 "Line %d: Column %d\r\n関数%lsの%d番目の引数に数値は置けません." - STR_ERR_DLGKEYMACMGR7 "Line %d: Column %d: Syntax Error\n" - STR_ERR_DLGKEYMACMGR8 "Line %d: %lsは存在しない関数です.\n" - - // CKeyWordSetMgr.cpp - - // CLayout.cpp - - // CLayoutMgr.cpp - - // CLayoutMgr.cpp - - // CLayoutMgr_New.cpp - - // CLayoutMgr_New2.cpp - - // CLineComment.cpp - - // CMacro.cpp - STR_ERR_DLGMACRO01 "CMacro::GetFuncInfoByID()に、バグがあるのでエラーが出ましたぁぁぁぁぁぁあああ\r\n" - STR_ERR_DLGMACRO02 "Macro実行エラー" - STR_ERR_DLGMACRO03 "挿入すべき文字コードが指定されていません." - STR_ERR_DLGMACRO03_1 "入力改行コードが指定されていません." - STR_ERR_DLGMACRO04 "引数(文字列)が指定されていません." - STR_ERR_DLGMACRO05 "ジャンプ先行番号が指定されていません." - STR_ERR_DLGMACRO06 "マーク行のパターンが指定されていません." - STR_ERR_DLGMACRO07 "引数(文字列)が指定されていません." - STR_ERR_DLGMACRO08 "ファイル名が指定されていません." - STR_ERR_DLGMACRO09 "置換元パターンが指定されていません." - STR_ERR_DLGMACRO10 "置換先パターンが指定されていません." - STR_ERR_DLGMACRO11 "GREPパターンが指定されていません." - STR_ERR_DLGMACRO12 "ファイル種別が指定されていません." - STR_ERR_DLGMACRO13 "検索先フォルダが指定されていません." - STR_ERR_DLGMACRO14 "読み込みファイル名が指定されていません." - STR_ERR_DLGMACRO15 "保存ファイル名が指定されていません." - STR_ERR_DLGMACRO16 "数値を指定してください." - STR_ERR_DLGMACRO17 "GREP置換後が指定されていません." - - // CMacroFactory.cpp - - // CMacroManagerBase.cpp - - // CMarkMgr.cpp - - // CMemory.cpp - STR_ERR_DLGMEM1 "CMemory::AllocBuffer(nNewDataLen==%d)\nメモリ確保に失敗しました。\n" - - // CMenuDrawer.cpp - - // CMigemo.cpp - - // CMRU.cpp - - // CMRUFolder.cpp - - // CNormalProcess.cpp - STR_ERR_DLGNRMPROC1 "CreateMutex()失敗。\n終了します。" - STR_ERR_DLGNRMPROC2 "エディタまたはシステムがビジー状態です。\nしばらく待って開きなおしてください。" - - // COpe.cpp - - // COpeBlk.cpp - - // CPPA.cpp - STR_ERR_DLGPPA1 "PPA実行中に新たにPPAマクロを呼び出すことはできません" - STR_ERR_DLGPPA2 "関数の実行エラー\n%hs" - STR_ERR_DLGPPA3 "不明な関数の実行エラー(バグです)\nFunc_ID=%d" - STR_ERR_DLGPPA4 "詳細不明のエラー" - STR_ERR_DLGPPA5 "未定義のエラー\nError_CD=%d\n%s" - STR_ERR_DLGPPA6 "エラー情報が不正" - STR_ERR_DLGPPA7 "PPA実行エラー" - - // CPPAMacroMgr.cpp - - // CPrint.cpp - STR_ERR_CPRINT01 "OpenPrinter()に失敗。\nプリンタデバイス名=[%s]" - STR_ERR_CPRINT02 "StartDoc()に失敗。\nプリンタデバイス名=[%s]" - STR_ERR_CPRINT03 "不明" - - - // CPrintPreview.cpp - STR_ERR_DLGPRNPRVW1 "横" - STR_ERR_DLGPRNPRVW2 "縦" - STR_ERR_DLGPRNPRVW3 "現在のプリンタ %s では、\n指定された用紙 %s は使用できません。\n利用可能な用紙 %s に変更しました。" - STR_ERR_DLGPRNPRVW3_1 "印刷ページ設定エラー:印字可能領域がありません" - STR_ERR_DLGPRNPRVW4 "表示するページ番号を指定してください。(1 - %d)" - STR_ERR_DLGPRNPRVW5 "プレビューページ指定" - STR_ERR_DLGPRNPRVW6 "%d/%d頁" - STR_ERR_DLGPRNPRVW7 "印刷するページがありません。" - - // CProcess.cpp - STR_ERR_DLGPROCESS1 "異なるバージョンのエディタを同時に起動することはできません。" - - // CProcessFactory.cpp - STR_ERR_DLGPROCFACT1 "このアプリケーションを実行するには、\nWindows95以上 または WindowsNT4.0以上のOSが必要です。\nアプリケーションを終了します。" - STR_ERR_DLGPROCFACT2 "OSのバージョンが取得できません。\nアプリケーションを終了します。" - STR_ERR_DLGPROCFACT3 "'%s'\nプロセスの起動に失敗しました。\n%s" - STR_ERR_DLGPROCFACT4 "'%ls'\nコントロールプロセスの起動に失敗しました。" - STR_ERR_DLGPROCFACT5 "エディタまたはシステムがビジー状態です。\nしばらく待って開きなおしてください。" - - // CProfile.cpp - - // CPropComBackup.cpp - STR_PROPCOMBK_SEL_FOLDER "バックアップを作成するフォルダを選んでください" - STR_PROPCOMBK_DUSTBOX "(ゴミ箱)" - - // CPropComCustmenu.cpp - STR_PROPCOMCUSTMENU_SEP " ─────────────" - STR_PROPCOMCUSTMENU_AC1 "メニューアイテムのアクセスキー設定" - STR_PROPCOMCUSTMENU_AC2 "キーを入力してください。" - // Has a HEADER #define, should we also fix this? - - // CPropComEdit.cpp - STR_PROPEDIT_SELECT_DIR "ファイルダイアログの指定フォルダの選択" - - // CPropComFile.cpp - STR_PROPCOMFNM_LIST1 "置換前" - STR_PROPCOMFNM_LIST2 "置換後" - STR_PROPCOMFNM_ERR_REG "これ以上登録できません。" - - // CPropComFormat.cpp - // Has static date-time string - - // CPropComGeneral.cpp - STR_PROPCOMGEN_FILE1 "最近使ったファイルの履歴を削除します。\nよろしいですか?\n" - STR_PROPCOMGEN_FILE2 "最近使ったファイルの履歴を削除しました。\n" - STR_PROPCOMGEN_DIR1 "最近使ったフォルダの履歴を削除します。\nよろしいですか?\n" - STR_PROPCOMGEN_DIR2 "最近使ったフォルダの履歴を削除しました。\n" - - // CPropComGrep.cpp - STR_PROPCOMGREP_DLL "正規表現は使用できません" - STR_TAGJUMP_0 "次のファイルを検索しない" - STR_TAGJUMP_1 "ヒットしたら次のファイルを検索しない" - STR_TAGJUMP_2 "完全一致でヒットしたら次のファイルを検索しない" - STR_TAGJUMP_3 "次のファイルを検索する" - - // CPropComHelper.cpp - STR_PROPCOMHELP_MIGEMODIR "検索するフォルダを選んでください" - - // CPropComKeybind.cpp - // STR_KEYDATA_HEAD... - STR_PROPCOMKEYBIND_UNASSIGN "未割付" - - // CPropComKeyword.cpp - STR_PROPCOMKEYWORD_ERR_LEN "キーワードの長さは%dバイトまでです。" - STR_PROPCOMKEYWORD_SETMAX "セットは%d個までしか登録できません。\n" - STR_PROPCOMKEYWORD_SETNAME1 "キーワードのセット追加" - STR_PROPCOMKEYWORD_SETNAME2 "セット名を入力してください。" - STR_PROPCOMKEYWORD_SETDEL "「%ls」のセットを削除します。\nよろしいですか?\n削除しようとするセットは、以下のファイルタイプに割り当てられています。\n削除したセットは無効になります。\n\n%s" - STR_PROPCOMKEYWORD_RENAME1 "セットの名称変更" - STR_PROPCOMKEYWORD_RENAME2 "セット名を入力してください。" - STR_PROPCOMKEYWORD_KEYMAX "登録できるキーワード数が上限に達しています。\n" - STR_PROPCOMKEYWORD_KEYADD1 "キーワード追加" - STR_PROPCOMKEYWORD_KEYADD2 "キーワードを入力してください。" - STR_PROPCOMKEYWORD_KEYEDIT1 "キーワード編集" - STR_PROPCOMKEYWORD_KEYEDIT2 "キーワードを編集してください。" - STR_PROPCOMKEYWORD_DEL "現在の設定では強調キーワードとして表示できないキーワードを削除しますか?" - STR_PROPCOMKEYWORD_INFO "(最大 %d 文字, 登録数 %d, 空き %d 個)" - - // CPropComMacro.cpp - STR_PROPCOMMACR_LIST1 "番号" - STR_PROPCOMMACR_LIST2 "マクロ名" - STR_PROPCOMMACR_LIST3 "ファイル名" - STR_PROPCOMMACR_LIST4 "実行時に読み込み" - STR_PROPCOMMACR_LIST5 "自動実行" - STR_PROPCOMMACR_SEL_DIR "Macroディレクトリの選択" - - // CPropComMainMenu.cpp - STR_SPECIAL_FUNC "特別機能" - STR_PROPCOMMAINMENU_EDIT "編集してください" - STR_PROPCOMMAINMENU_SEP "――――――――――" - STR_PROPCOMMAINMENU_ACCKEY1 "メニューアイテムのアクセスキー設定" - STR_PROPCOMMAINMENU_ACCKEY2 "キーを入力してください。" - STR_PROPCOMMAINMENU_CLEAR "メニューの設定をクリアします。\nよろしいですか?" - STR_PROPCOMMAINMENU_INIT "メニューの設定を初期状態に戻します。\nよろしいですか?" - STR_PROPCOMMAINMENU_DEL "選択している項目を下位項目ごと削除します。\nよろしいですか?" - STR_PROPCOMMAINMENU_OK "問題ありませんでした。" - STR_PROPCOMMAINMENU_ERR1 "メニュー設定の取得に失敗しました" - STR_PROPCOMMAINMENU_ERR2 "『共通設定』が有りません。\n" - STR_PROPCOMMAINMENU_ERR3 "トップレベルの項目数が多すぎます。\n" - STR_PROPCOMMAINMENU_ERR4 "登録項目数が多すぎます。\n" - STR_PROPCOMMAINMENU_ERR5 "重複したアクセスキーがあります。\n" - STR_PROPCOMMAINMENU_ERR6 "未設定のアクセスキーがあります。\n" - - // CPropCommon.cpp - STR_PROPCOMMON "共通設定" - STR_PROPCOMMON_GENERAL "全般" - STR_PROPCOMMON_WINDOW "ウィンドウ" - STR_PROPCOMMON_TABS "タブバー" - STR_PROPCOMMON_EDITING "編集" - STR_PROPCOMMON_FILE "ファイル" - STR_PROPCOMMON_BACKUP "バックアップ" - STR_PROPCOMMON_FORMAT "書式" - STR_PROPCOMMON_SEARCH "検索" - STR_PROPCOMMON_KEYS "キー割り当て" - STR_PROPCOMMON_CUSTMENU "カスタムメニュー" - STR_PROPCOMMON_TOOLBAR "ツールバー" - STR_PROPCOMMON_KEYWORD "強調キーワード" - STR_PROPCOMMON_SUPPORT "支援" - STR_PROPCOMMON_MACRO "マクロ" - STR_PROPCOMMON_FILENAME "ファイル名表示" - STR_PROPCOMMON_PLUGIN "プラグイン" - STR_PROPCOMMON_MAINMENU "メインメニュー" - STR_PROPCOMMON_STATBAR "ステータスバー" - - // General Settings::File Tab - STR_SCROLL_WITH_NO_KEY "組み合わせなし" - STR_SCROLL_WITH_MID_BTN "マウス中ボタン" - STR_SCROLL_WITH_SIDE_1_BTN "マウスサイドボタン1" - STR_SCROLL_WITH_SIDE_2_BTN "マウスサイドボタン2" - STR_SCROLL_WITH_CTRL_KEY "CONTROLキー" - STR_SCROLL_WITH_SHIFT_KEY "SHIFTキー" - - STR_ERR_DLGPROPCOMMON24 "CPropCommon::DoPropertySheet()内でエラーが出ました。\npsh.nStartPage=[%d]\n::PropertySheet()失敗\n\n%s\n" - - // CPropCOmPlugin.cpp - STR_PROPCOMPLG_ERR1 "プラグインはこのウィンドウで読み込まれていないか、フォルダが異なるため\n設定を変更できません" - STR_PROPCOMPLG_ERR2 "ReadMeファイルが開けません" - STR_PROPCOMPLG_ERR3 "ReadMeファイルが見つかりません " - STR_PROPCOMPLG_STATE1 "追加" - STR_PROPCOMPLG_STATE2 "更新" - STR_PROPCOMPLG_STATE3 "停止" - STR_PROPCOMPLG_STATE4 "稼働" - STR_PROPCOMPLG_STATE5 "削除" - STR_PROPCOMPLG_STATE6 "未定義" - STR_PROPCOMPLG_LOAD "読込" - STR_PROPCOMPLG_LIST1 "番号" - STR_PROPCOMPLG_LIST2 "プラグイン名" - STR_PROPCOMPLG_LIST3 "状態" - STR_PROPCOMPLG_LIST4 "読込" - STR_PROPCOMPLG_LIST5 "フォルダ" - STR_PROPCOMPLG_DELETE "%ls を削除しますか" - - // CPropComTab.cpp - STR_PROPCOMTAB_DISP_NO "なし" - STR_PROPCOMTAB_DISP_ALLWAYS "常に表示" - STR_PROPCOMTAB_DISP_AUTO "自動表示" - STR_PROPCOMTAB_TAB_POS_TOP "上" - STR_PROPCOMTAB_TAB_POS_BOTTOM "下" - STR_PROPCOMTAB_TAB_POS_LEFT "右" - STR_PROPCOMTAB_TAB_POS_RIGHT "左" - - // CPropComToolbar.cpp - STR_PROPCOMTOOL_ERR01 "Toolbar Dialog: 要素の挿入に失敗しました。(%d:%d)" - STR_PROPCOMTOOL_ERR02 "Toolbar Dialog: INS: 値の設定に失敗しました。:%d" - STR_PROPCOMTOOL_ERR03 "Toolbar Dialog: 要素の追加に失敗しました。(%d:%d)" - STR_PROPCOMTOOL_ERR04 "Toolbar Dialog: ADD: 値の設定に失敗しました。:%d" - STR_PROPCOMTOOL_ERR05 "Toolbar Dialog: 要素の追加に失敗しました。:%d" - STR_PROPCOMTOOL_ITEM1 "───────────" - STR_PROPCOMTOOL_ITEM2 "――ツールバー折返――" - STR_PROPCOMTOOL_ITEM3 "────不 明────" - - // CPropComWin.cpp - - // CPropTypes.cpp - STR_OUTLINE_CPP "C/C++" - STR_OUTLINE_PLSQL "PL/SQL" - STR_OUTLINE_JAVA "Java" - STR_OUTLINE_COBOL "COBOL" - STR_OUTLINE_PERL "Perl" - STR_OUTLINE_ASM "アセンブラ" - STR_OUTLINE_VB "Visual Basic" - STR_OUTLINE_PYTHON "Python" - STR_OUTLINE_ERLANG "Erlang" - STR_OUTLINE_WZ "WZ階層付テキスト" - STR_OUTLINE_HTML "HTML" - STR_OUTLINE_TEX "TeX" - STR_OUTLINE_TEXT "テキスト" - STR_TAB_SYMBOL_CHARA "文字指定" - STR_TAB_SYMBOL_SHORT_ARROW "短い矢印" - STR_TAB_SYMBOL_LONG_ARROW "長い矢印" - STR_SMART_INDENT_NONE "なし" // smart indent - STR_SMART_INDENT_C_CPP "C/C++" - STR_WRAP_INDENT_NONE "なし" // ident - STR_WRAP_INDENT_TX2X "tx2x" - STR_WRAP_INDENT_BOL "論理行先頭" - STR_WRAP_METHOD_NO_WRAP "折り返さない" // wrap method - STR_WRAP_METHOD_SPEC_WIDTH "指定桁で折り返す" - STR_WRAP_METHOD_WIN_WIDTH "右端で折り返す" - - // File Type Settings Tab names - STR_PROPTYPE "タイプ別設定" - STR_PROPTYPE_SCREEN "スクリーン" // Property Sheet - STR_PROPTYPE_COLOR "カラー" - STR_PROPTYPE_SUPPORT "支援" - STR_PROPTYPE_REGEX_KEYWORD "正規表現キーワード" - STR_PROPTYPE_KEYWORD_HELP "キーワードヘルプ" - STR_PROPTYPE_WINDOW "ウィンドウ" - STR_PROPTYPE_ERR "CPropTypes::DoPropertySheet()内でエラーが出ました。\npsh.nStartPage=[%d]\n::PropertySheet()失敗。\n\n%s\n" - - // CPropTypesScreen.cpp - STR_TSV_MODE_NONE "通常" - STR_TSV_MODE_TSV "TSV" - STR_TSV_MODE_CSV "CSV" - - // CPropTypesColor.cpp - STR_STRINGESC_CPP "C/C++言語風 \\""" - STR_STRINGESC_PLSQL "PL/SQL風 """"" - STR_STRINGESC_HTML "HTML/XML風 =""""" - STR_STRINGESC_CSHARP "C#風 @""""" - STR_STRINGESC_PYTHON "Python風 """"""" - - // CPropTypesKeyHelp.cpp - STR_PROPTYPKEYHELP_DIC " 辞書ファイル" - STR_PROPTYPKEYHELP_INFO "辞書の説明" - STR_PROPTYPKEYHELP_PATH "パス" - STR_PROPTYPKEYHELP_LINE1 "辞書ファイルの1行目の文字列" - STR_PROPTYPKEYHELP_DICPATH "キーワード辞書ファイル パス" - STR_PROPTYPKEYHELP_ERR_REG1 "これ以上登録できません。" - STR_PROPTYPKEYHELP_SELECT "更新する辞書をリストから選択してください。" - STR_PROPTYPKEYHELP_ERR_REG2 "既に登録済みの辞書です。" - STR_PROPTYPKEYHELP_ERR_OPEN "ファイルを開けませんでした。\n\n%s" - - // CPropTypesRegex.cpp - STR_PROPTYPEREGEX_LIST1 "キーワード" - STR_PROPTYPEREGEX_LIST2 "色指定" - STR_PROPTYPEREGEX_NOUSE "正規表現キーワードは使えません。" - STR_PROPTYPEREGEX_NOTFOUND "正規表現ライブラリが見つかりません。\n\n正規表現キーワードは機能しませんが、それでも有効にしますか?" - STR_PROPTYPEREGEX_NOREG "これ以上登録できません。" - STR_PROPTYPEREGEX_ALREADY "同じキーワードで登録済みです。" - STR_PROPTYPEREGEX_KAKOMI "正規表現キーワードを / と /k で囲ってください。\nキーワードに / がある場合は m# と #k で囲ってください。" - STR_PROPTYPEREGEX_INVALID "書式が正しくないか、正規表現ライブラリが見つかりません。\n\n登録しますか?" - STR_PROPTYPEREGEX_FULL "これ以上登録できません。\nキーワード領域がいっぱいです。" - STR_PROPTYPEREGEX_NOSEL "キーワードが選択されていません。" - - STR_KEYHELP_RMENU_NONE "表示しない" - STR_KEYHELP_RMENU_TOP "先頭に表示" - STR_KEYHELP_RMENU_BOTTOM "末尾に表示" - - // CPropTypesWindow.cpp - STR_IME_STATE_DEF "標準設定" // ime state - STR_IME_STATE_FULL "全角" - STR_IME_STATE_FULLHIRA "全角ひらがな" - STR_IME_STATE_FULLKATA "全角カタカナ" - STR_IME_STATE_NO "無変換" - STR_IME_SWITCH_DONTSET "そのまま" // ime switch - STR_IME_SWITCH_ON "常にON" - STR_IME_SWITCH_OFF "常にOFF" - STR_IMAGE_POS1 "左上" - STR_IMAGE_POS2 "右上" - STR_IMAGE_POS3 "左下" - STR_IMAGE_POS4 "右下" - STR_IMAGE_POS5 "中央" - STR_IMAGE_POS6 "中央上" - STR_IMAGE_POS7 "中央下" - STR_IMAGE_POS8 "中央左" - STR_IMAGE_POS9 "中央右" - - // CDlgTypeAscertain.cpp - STR_DLGTYPEASC_IMPORT "--そのままインポート--" - - // CDlgTypeList.cpp - STR_DLGTYPELIST_ERR1 "関連付けに失敗しました\n" - STR_DLGTYPELIST_ERR2 "関連付け解除に失敗しました\n" - STR_DLGTYPELIST_INIT1 "%s を初期化します。 よろしいですか?" - STR_DLGTYPELIST_SETNAME "設定%d" - STR_DLGTYPELIST_INIT2 "%s を初期化しました。" - STR_DLGTYPELIST_DEL "%s を削除します。 よろしいですか?" - STR_DLGTYPELIST_ACC "Windowsの関連付け設定を変更しようとしています。\nこの操作は同じ設定を利用する他のソフトにも影響を与える可能性があります。\n実施しますか?" - - // CImpExpManager.cpp - STR_IMPEXP_ERR_FILEOPEN "ファイルを開けませんでした。\n\n" - STR_IMPEXP_ERR_EXPORT "エクスポート出来ませんでした。\n\n" - STR_IMPEXP_OK_EXPORT "ファイルをエクスポートしました。\n\n" - STR_IMPEXP_OK_IMPORT "ファイルをインポートしました。\n\n" - STR_IMPEXP_ERR_COLOR_OLD "色設定ファイルの形式が違います。古い形式はサポートされなくなりました。\n" - STR_IMPEXP_ERR_TYPE "不正な形式です。\nインポートを中止します" - STR_IMPEXP_VER "エクスポートした %s(%s/%d) とバージョンが異なります。\n\nインポートしてもよろしいですか?" - STR_IMPEXP_REGEX1 "キーワード数が上限に達したため切り捨てました。" - STR_IMPEXP_REGEX2 "キーワード領域がいっぱいなため切り捨てました。" - STR_IMPEXP_REGEX3 "不正なキーワードを無視しました。" - STR_IMPEXP_REGEX4 "キーワードが長過ぎるため切り捨てました。" - STR_IMPEXP_DIC_NOTFOUND "【辞書ファイルが見つかりません】" - STR_IMPEXP_DIC_LENGTH "辞書の説明は%d文字以内にしてください。\n" - STR_IMPEXP_DIC_RECORD "一部のデータが読み込めませんでした\n不正な行数: %d" - STR_IMPEXP_KEY_FORMAT "キー設定ファイルの形式が違います。\n\n" - STR_IMPEXP_CUSTMENU_FORMAT "カスタムメニュー設定ファイルの形式が違います。\n\n" - STR_IMPEXP_KEYWORD "キーワードの数が上限に達したため、いくつかのキーワードを追加できませんでした。" - STR_IMPEXP_MEINMENU "メインメニュー設定ファイルの形式が違います。\n\n" - - // CRecent.cpp - - // CRegexKeyword.cpp - - // CRunningTimer.cpp - - // CShareData.cpp - STR_ERR_CSHAREDATA01 "CreateFileMapping()に失敗しました" - STR_ERR_CSHAREDATA02 "予期せぬエラー" - - // Common Prop::Tab/Title bar - STR_ERR_CSHAREDATA10 "${w?【Grep】$h$:【アウトプット】$:$f$}${U?(更新)$}${R?(読みとり専用)$:(上書き禁止)$}${M?【キーマクロの記録中】$}" - STR_CUSTMENU_RIGHT_CLICK "右クリックメニュー" - STR_CUSTMENU_CUSTOM "メニュー%d" - STR_CUSTMENU_TAB "タブメニュー" - STR_ERR_CSHAREDATA14 "1234567890(([[「『【■□▲△▼▽◆◇○◎●§・※☆★第①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ一二三四五六七八九十壱弐参伍" - STR_ERR_CSHAREDATA15 "yyyy'年'M'月'd'日('dddd')'" - STR_ERR_CSHAREDATA16 "tthh'時'mm'分'ss'秒'" - STR_ERR_CSHAREDATA17 "${w?$h$:アウトプット$:${I?$f$:$N$}$}${U?(更新)$} - sakura $V ${R?(読みとり専用)$:(上書き禁止)$}${M? 【キーマクロの記録中】$}" - STR_ERR_CSHAREDATA18 "${w?$h$:アウトプット$:$f$}${U?(更新)$} - sakura $V ${R?(読みとり専用)$:(上書き禁止)$}${M? 【キーマクロの記録中】$}" - STR_ERR_CSHAREDATA19 "同時に複数の編集用ウィンドウを閉じようとしています。これらを閉じますか?" - STR_ERR_CSHAREDATA20 "%s\n\n\n既に開いているファイルを違う文字コードで開く場合は、\nファイルメニューから「開き直す」を使用してください。\n\n現在の文字コードセット=[%s]\n新しい文字コードセット=[%s]" - STR_ERR_CSHAREDATA21 "%s\n\n多重オープンの確認で不明な文字コードが指定されました。\n\n現在の文字コードセット=%d [%s]\n新しい文字コードセット=%d [%s]" - STR_ERR_CSHAREDATA22 "不明" // relates to above two [%s] - - // Key settings dialog box ( loop so must be N items long in a row ) - STR_KEY_BIND_DBL_CLICK "ダブルクリック" - STR_KEY_BIND_R_CLICK "右クリック" - STR_KEY_BIND_MID_CLICK "中クリック" - STR_KEY_BIND_LSD_CLICK "左サイドクリック" - STR_KEY_BIND_RSD_CLICK "右サイドクリック" - STR_KEY_BIND_TRI_CLICK "トリプルクリック" - STR_KEY_BIND_QUA_CLICK "クアドラプルクリック" - STR_KEY_BIND_WHEEL_UP "ホイールアップ" - STR_KEY_BIND_WHEEL_DOWN "ホイールダウン" - STR_KEY_BIND_WHEEL_LEFT "ホイール左" - STR_KEY_BIND_WHEEL_RIGHT "ホイール右" - STR_KEY_BIND_HAT_ENG_QT "^(英語')" - STR_KEY_BIND_AT_ENG_BQ "@(英語`)" - STR_KEY_BIND_APLI "アプリキー" - - // Color Names in the Settings Color Box - STR_COLOR_TEXT "テキスト" - STR_COLOR_RULER "ルーラー" - STR_COLOR_CURSOR "カーソル" - STR_COLOR_CURSOR_IMEON "カーソル(IME ON)" - STR_COLOR_CURSOR_LINE_BG "カーソル行の背景色" - STR_COLOR_CURSOR_LINE "カーソル行アンダーライン" - STR_COLOR_CURSOR_COLUMN "カーソル位置縦線" - STR_COLOR_NOTE_LINE "ノート線" - STR_COLOR_LINE_NO "行番号" - STR_COLOR_LINE_NO_CHANGE "行番号(変更行)" - STR_COLOR_EVEN_LINE_BG "偶数行の背景色" - STR_COLOR_TAB "TAB記号" - STR_COLOR_HALF_SPACE "半角空白" - STR_COLOR_FULL_SPACE "日本語空白" - STR_COLOR_CTRL_CODE "コントロールコード" - STR_COLOR_CR "改行記号" - STR_COLOR_WRAP_MARK "折り返し記号" - STR_COLOR_VERT_LINE "指定桁縦線" - STR_COLOR_EOF "EOF記号" - STR_COLOR_NUMBER "半角数値" - STR_COLOR_BRACKET "対括弧の強調表示" - STR_COLOR_SELECTED_AREA "選択範囲" - STR_COLOR_SEARCH_WORD1 "検索文字列" - STR_COLOR_SEARCH_WORD2 "検索文字列2" - STR_COLOR_SEARCH_WORD3 "検索文字列3" - STR_COLOR_SEARCH_WORD4 "検索文字列4" - STR_COLOR_SEARCH_WORD5 "検索文字列5" - STR_COLOR_COMMENT "コメント" - STR_COLOR_SINGLE_QUOTE "シングルクォーテーション文字列" - STR_COLOR_DOUBLE_QUOTE "ダブルクォーテーション文字列" - STR_COLOR_HERE_DOCUMENT "ヒアドキュメント" - STR_COLOR_URL "URL" - - STR_COLOR_KEYWORD1 "強調キーワード1" - STR_COLOR_KEYWORD2 "強調キーワード2" - STR_COLOR_KEYWORD3 "強調キーワード3" - STR_COLOR_KEYWORD4 "強調キーワード4" - STR_COLOR_KEYWORD5 "強調キーワード5" - STR_COLOR_KEYWORD6 "強調キーワード6" - STR_COLOR_KEYWORD7 "強調キーワード7" - STR_COLOR_KEYWORD8 "強調キーワード8" - STR_COLOR_KEYWORD9 "強調キーワード9" - STR_COLOR_KEYWORD10 "強調キーワード10" - STR_COLOR_REGEX_KEYWORD1 "正規表現キーワード1" - STR_COLOR_REGEX_KEYWORD2 "正規表現キーワード2" - STR_COLOR_REGEX_KEYWORD3 "正規表現キーワード3" - STR_COLOR_REGEX_KEYWORD4 "正規表現キーワード4" - STR_COLOR_REGEX_KEYWORD5 "正規表現キーワード5" - STR_COLOR_REGEX_KEYWORD6 "正規表現キーワード6" - STR_COLOR_REGEX_KEYWORD7 "正規表現キーワード7" - STR_COLOR_REGEX_KEYWORD8 "正規表現キーワード8" - STR_COLOR_REGEX_KEYWORD9 "正規表現キーワード9" - STR_COLOR_REGEX_KEYWORD10 "正規表現キーワード10" - STR_COLOR_DIFF_ADD "DIFF差分表示(追加)" - STR_COLOR_DIFF_CNG "DIFF差分表示(変更)" - STR_COLOR_DIFF_DEL "DIFF差分表示(削除)" - STR_COLOR_BOOKMARK "ブックマーク" - STR_COLOR_PAGEVIEW "表示範囲(ミニマップ)" - - // ... could be many places left in this file I think, but couldnt decide if they should STAY as JPZ or not eg |* - - // CShareData_new.cpp - // CSMacroMgr.cpp - // CSortedTagJumpList.cpp - // CSplitBoxWnd.cpp - - // CSplitterWnd.cpp - STR_ERR_CSPLITTER01 "SplitterWndクラスの登録に失敗しました。" - - // CTabWnd.cpp - STR_TABWND_LR_INFO "左クリック: タブ名一覧\n右クリック: パス名一覧" - STR_TABWND_CLOSETAB "タブを閉じる" - STR_TABWND_SHOWALL "すべて表示(&A)" // Menus - STR_TABWND_SHOWTABNAME "タブ名一覧に切替える(&W)" // 表示切替メニュー - STR_TABWND_SHOWPATHNAME "パス名一覧に切替える(&W)" // 表示切替メニュー - - // CTipWnd.cpp - - // CUxTheme.cpp - - // CWaitCursor.cpp - - // CWnd.cpp - - // CWSH.cpp - STR_ERR_CWSH01 "指名のスクリプトエンジンが見つかりません" - STR_ERR_CWSH02 "指名のスクリプトエンジンが作成できません" - STR_ERR_CWSH03 "サイトを登録できません" - STR_ERR_CWSH04 "パーサを取得できません" - STR_ERR_CWSH05 "初期化できません" - STR_ERR_CWSH06 "オブジェクトを渡せなかった" - STR_ERR_CWSH07 "状態変更エラー" - STR_ERR_CWSH08 "実行に失敗しました" - STR_ERR_CWSH09 "マクロの実行を中断しました。" - - // Debug.cpp - // CONAINTS STRINGS... only for debug, so ignoring. - - // etc_uty.cpp - // CONTAINS a few STRINGS... - STR_ERR_ETCUTY01 "システム " - STR_ERR_ETCUTY02 "ユーザー " - STR_ERR_ETCUTY03 "%sリソースが極端に不足しています。\n\ -このまま%sを起動すると、正常に動作しない可能性があります。\n\ -新しい%sの起動を中断します。\n\ -\n\ -システム リソース\t残り %d%%\n\ -User リソース\t残り %d%%\n\ -GDI リソース\t残り %d%%\n\n" - STR_SHELL_HHCTRL "HHCTRL.OCXが見つかりません。\r\nHTMLヘルプを利用するにはHHCTRL.OCXが必要です。\r\n" - STR_SHELL_INFO "情報" - STR_SHELL_MENU_OPEN "開く(&O)..." - STR_SHELL_MENU_IMPEXP "インポート/エクスポートの起点リセット(&R)" - STR_SHELL_IMPEXPDIR "各種設定のインポート/エクスポート用ファイル選択画面の\n初期表示フォルダを設定フォルダに戻します。" - STR_SHELL_INIFOLDER "設定フォルダ(&/) >>" - - // Funccode.cpp - // CONTAINS one array with Japanese, ppszFuncKind. - // - CPropCom* -- in code that is no longer used. - // - CFuncLookup.cpp -- usedi in func CFuncLookup::Category2Name - // - CEditView_Command.cpp -- Command_MENU_ALLFUNC() uses CFuncLookup::Category2Name. - - // global.cpp - // GSTR_APPNAME (for debug) contains the words "sakura(debug version)" - // gm_pszCodeComboNameArr contains the string "Automatic" as its first entry. - // - CDlgGrep.cpp - // - CDlgOpenFile.cpp - STR_ERR_GLOBAL01 "自動選択" - - // my_icmp.cpp - - // MY_SP.C - - // StdAfx.cpp - - // WinMain.cpp - - // CCdoeChecker.cpp - STR_CODECHECKER_EOL_UNIFY "改行コードが混在しています。\r\n現在の入力改行コード %s に統一しますか?" - STR_CODECHECKER_CONFORM_LOSESOME "文字エンコード %s で保存しようとしていますが、\r\n文字コード変換により一部の文字情報が失われます。\r\n保存処理を続行しますか?\n最初の場所 %d行 %s 文字[%ls]%s\nキャンセル=該当位置に移動" - STR_CODECHECKER_LOSESOME_SAVE "一部の文字情報が、セーブ時の変換により失われました" - STR_CODECHECKER_LOSESOME_ROAD "一部の文字情報が、ロード時の変換により失われました" - STR_CONVERT_ERR "変換でエラーが発生しました" - - STR_DLGABOUT_APPNAME "サクラエディタ" - - STR_DLGEXEC_SELECT_CURDIR "カレントディレクトリを選んでください" - - STR_MENU_UNKOWN "%s 不明(応答なし)" - STR_MENU_GREP "%s 【Grep】""%s%s""" - STR_MENU_OUTPUT "%s アウトプット" - - STR_PRINT_WAITING "印刷処理の終了を待機しています・・・" - - // 設定値の変換 - STR_TAB_CAPTION_OUTPUT "【Grep】" - STR_TAB_CAPTION_GREP "【アウトプット】" - STR_CAPTION_ACTIVE_OUTPUT "アウトプット" - STR_CAPTION_ACTIVE_UPDATE "(更新)" - STR_CAPTION_ACTIVE_VIEW "(ビューモード)" - STR_CAPTION_ACTIVE_OVERWRITE "(上書き禁止)" - STR_CAPTION_ACTIVE_KEYMACRO "【キーマクロの記録中】" - STR_DATA_FORMAT "yyyy'年'M'月'd'日('dddd')'" - STR_TIME_FORMAT "tthh'時'mm'分'ss'秒'" - STR_TRANSNAME_COMDESKTOP "共有デスクトップ\\" - STR_TRANSNAME_COMDOC "共有ドキュメント\\" - STR_TRANSNAME_DESKTOP "デスクトップ\\" - STR_TRANSNAME_MYDOC "マイドキュメント\\" - STR_TRANSNAME_IE "IEキャッシュ\\" - STR_TRANSNAME_TEMP "TEMP\\" - STR_TRANSNAME_APPDATA "アプリデータ\\" - STR_PRINT_SET_NAME "印刷設定" - STR_TYPE_NAME_BASIS "基本" - STR_TYPE_NAME_RICHTEXT "リッチテキスト" - STR_TYPE_NAME_TEXT "テキスト" - STR_TYPE_NAME_DOS "MS-DOSバッチファイル" - STR_TYPE_NAME_ASM "アセンブラ" - STR_TYPE_NAME_INI "設定ファイル" - - // CBregexp.cpp -#ifdef _M_IA64 - STR_BREGONIG_LOAD "bregonig.dll のロードに失敗しました。\r\n正規表現を利用するには Unicode/IA64 版の bregonig.dll が必要です。\r\n入手方法はヘルプを参照してください。" -#elif defined(_M_AMD64) - STR_BREGONIG_LOAD "bregonig.dll のロードに失敗しました。\r\n正規表現を利用するには Unicode/x64 版の bregonig.dll が必要です。\r\n入手方法はヘルプを参照してください。" -#else - STR_BREGONIG_LOAD "bregonig.dll のロードに失敗しました。\r\n正規表現を利用するには Unicode 版の bregonig.dll が必要です。\r\n入手方法はヘルプを参照してください。" -#endif -#ifdef _M_IA64 - STR_BREGONIG_INIT "bregonig.dll の利用に失敗しました。\r\n正規表現を利用するには Unicode/IA64 版の bregonig.dll が必要です。\r\n入手方法はヘルプを参照してください。" -#elif defined(_M_AMD64) - STR_BREGONIG_INIT "bregonig.dll の利用に失敗しました。\r\n正規表現を利用するには Unicode/x64 版の bregonig.dll が必要です。\r\n入手方法はヘルプを参照してください。" -#else - STR_BREGONIG_INIT "bregonig.dll の利用に失敗しました。\r\n正規表現を利用するには Unicode 版の bregonig.dll が必要です。\r\n入手方法はヘルプを参照してください。" -#endif - STR_BREGONIG_ERROR "bregonig.dll のロードで予期せぬエラーが発生しました。" - STR_BREGONIG_TITLE "正規表現エラー" - - // CDllPlugin.cpp - STR_DLLPLG_TITLE "DLLプラグイン" - STR_DLLPLG_INIT_ERR1 "DLLの読み込みに失敗しました\n%s\n%ls" - STR_DLLPLG_INIT_ERR2 "DLLの読み込みに失敗しました" - - // CPluginManager.cpp - STR_PLGMGR_FOLDER "プラグインフォルダを作成出来ません" - STR_PLGMGR_CANCEL "キャンセルされました" - STR_PLGMGR_NEWPLUGIN "新しいプラグインは見つかりませんでした" - STR_PLGMGR_INSTALL "プラグイン「%s」をインストールしますか?" - STR_PLGMGR_INSTALL_ERR "プラグイン「%s」をインストールできませんでした\n理由:%ls" - STR_PLGMGR_ERR_ZIP "ZIPファイルは扱えません" - STR_PLGMGR_ERR_FOLDER "プラグインフォルダがありません" - STR_PLGMGR_ERR_CREATEDIR "プラグインフォルダを作成出来ません" - STR_PLGMGR_INST_ZIP_ACCESS "ZIPファイル「%s」にアクセス出来ません" - STR_PLGMGR_INST_ZIP_DEF "ZIPファイル「%s」にはプラグイン定義ファイル(plugin.def)がありません" - STR_PLGMGR_INST_ZIP_ALREADY "「%s」は既にインストールされています\n上書きしますか?" - STR_PLGMGR_INST_ZIP_INST "ZIPプラグイン「%s」を「%s」にインストールしますか?" - STR_PLGMGR_INST_ZIP_UNZIP "ZIPプラグイン「%s」の解凍に失敗しました" - STR_PLGMGR_INST_ZIP_ERR "プラグイン「%s」をインストールできませんでした\n理由:%ls" - STR_PLGMGR_INST_DEF "プラグイン定義ファイル(plugin.def)がありません" - STR_PLGMGR_INST_ID "Plugin.IDがありません" - STR_PLGMGR_INST_RESERVE1 "Plugin.IDに""" - STR_PLGMGR_INST_RESERVE2 """は使用できません" - STR_PLGMGR_INST_IDNUM "Plugin.IDの先頭に数字は使用できません" - STR_PLGMGR_INST_NAME "同じプラグインが別の名前でインストールされています。上書きしますか?\n はい → 新しい「%s」を使用\n いいえ→ インストール済みの「%ls」を使用" - STR_PLGMGR_INST_USERCANCEL "ユーザキャンセル" - STR_PLGMGR_INST_MAX "プラグインをこれ以上登録できません" - - STR_WSHPLUG_LOADMACRO "マクロの読み込みに失敗しました。\n\n%s" - STR_FILESAVE_CONVERT_ERROR "'%s'\nファイルを保存できません。\n変換エラーが発生しました。" - - STR_FILETREE_FROM_COMMON "設定: 共通設定" - STR_FILETREE_FROM_TYPE "設定: タイプ別設定" - STR_FILETREE_FROM_FILE "設定: %s" - STR_FILETREE_CURDIR "<カレントフォルダ>" - STR_FILETREE_MAXCOUNT "最大数(%d)を超えたため切り捨てました" - STR_FILETREE_MENU_ROOT "INIルート(&I)" - STR_FILETREE_MENU_MYDOC "マイ ドキュメント(&Y)" - STR_FILETREE_MENU_MYMUSIC "マイ ミュージック(&M)" - STR_FILETREE_MENU_MYVIDEO "マイ ビデオ(&V)" - STR_FILETREE_MENU_DESK "デスクトップ(&D)" - STR_FILETREE_MENU_TEMP "Temp(&T)" - STR_FILETREE_MENU_SAKURA "sakura(&S)" - STR_FILETREE_MENU_SAKURADATA "sakuraデータ(&A)" - STR_FILETREE_REPLACE_PATH_FROM "置換元パスを指定してください" - STR_FILETREE_REPLACE_PATH_TO "置換先文字列を指定してください" - - STR_ERR_FILEPATH_TOO_LONG "%ls\nというファイルを開けません。\nファイルのパスが長すぎます。" - STR_FILEDIALOG_READONLY "読み取り専用ファイルとして開く(&R)" - STR_FILEDIALOG_CODE "文字コードセット(&C):" - STR_FILEDIALOG_EOL "改行コード(&E):" - STR_FILEDIALOG_MRU "最近のファイル(&F):" - STR_FILEDIALOG_OPENFOLDER "最近のフォルダ(&D):" - -END - -STRINGTABLE DISCARDABLE -BEGIN - // Select Language - STR_SELLANG_NAME "Japanese" // language name [Primary language (Sublanguage)] - STR_SELLANG_LANGID "0x0411" // language id (hexadecimal string) - // See following link: - // http://msdn.microsoft.com/en-us/library/dd318693.aspx -END - - -#ifndef SAKURA_LANG_RESOURCE - -///////////////////////////////////////////////////////////////////////////// -// -// Custom Resource -// - -IDR_MENU1 ID_RC_TYPE_INI "../resource/MainMenu.ini" - -#endif // ! SAKURA_LANG_RESOURCE - -#endif // 日本語 resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - +// Microsoft Visual C++ generated resource script. +// +#include "sakura_rc.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#define APSTUDIO_HIDDEN_SYMBOLS +#include +#undef APSTUDIO_HIDDEN_SYMBOLS + +#include "Funccode_define.h" +#include "String_define.h" +#include "version.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// { ({) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN) +LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT +#pragma code_page(932) + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "sakura_rc.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include \r\n" + "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" + "\r\n" + "#include ""Funccode_define.h""\r\n" + "#include ""String_define.h""\r\n" + "#include ""version.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "#include ""sakura_rc.rc2""\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_FIND DIALOGEX 30, 0, 284, 93 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "" +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + LTEXT "(&N)",IDC_STATIC,5,6,26,10 + COMBOBOX IDC_COMBO_TEXT,34,4,183,150,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + CONTROL "PPʂŒT(&W)",IDC_CHK_WORD,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,5,21,130,10 + CONTROL "p啶Əʂ(&C)",IDC_CHK_LOHICASE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,5,32,130,10 + CONTROL "K\(&E)",IDC_CHK_REGULAREXP,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,5,43,55,10 + CONTROL "‚ȂƂɃbZ[W\(&M)",IDC_CHECK_NOTIFYNOTFOUND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,54,140,10 + CONTROL "_CAOIɕ‚(&L)",IDC_CHECK_bAutoCloseDlgFind,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,65,130,10 + CONTROL "擪ijČ(&Z)",IDC_CHECK_SEARCHALL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,76,130,10 + LTEXT "",IDC_STATIC_JRE32VER,62,43,154,10 + PUSHBUTTON "㌟(&U)",IDC_BUTTON_SEARCHPREV,221,4,58,14,WS_GROUP + DEFPUSHBUTTON "(&D)",IDC_BUTTON_SEARCHNEXT,221,20,58,14 + PUSHBUTTON "Ys}[N(&B)",IDC_BUTTON_SETMARK,221,38,58,14 + PUSHBUTTON "LZ(&X)",IDCANCEL,221,57,58,14,WS_GROUP + PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,221,73,58,14 +END + +IDD_JUMP DIALOGEX 0, 0, 252, 121 +STYLE DS_SETFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_SETFOREGROUND | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "wsփWv" +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + LTEXT "sԍ(&N)",IDC_STATIC,5,6,34,10 + EDITTEXT IDC_EDIT_LINENUM,43,4,40,12 + CONTROL "Spin1",IDC_SPIN_LINENUM,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,82,4,9,12 + CONTROL "܂ԂPʂ̍sԍ(&R)",IDC_RADIO_LINENUM_LAYOUT,"Button",BS_AUTORADIOBUTTON | WS_GROUP,94,5,97,10 + CONTROL "sPʂ̍sԍ(&W)",IDC_RADIO_LINENUM_CRLF,"Button",BS_AUTORADIOBUTTON,94,20,87,10 + CONTROL "&PL/SQLRpCG[s",IDC_CHECK_PLSQL,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,10,50,137,10 + LTEXT "sڂubN&1sڂƂ",IDC_LABEL_PLSQL2,92,66,92,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_PLSQL_E1,47,64,40,12 + CONTROL "Spin1",IDC_SPIN_PLSQL_E1,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,87,64,9,12 + LTEXT "eLXg",IDC_LABEL_PLSQL1,12,66,34,10,NOT WS_GROUP + LTEXT "oꂽPL/SQLpbP[W̃ubNI(&S)",IDC_LABEL_PLSQL3,12,81,166,10,NOT WS_GROUP + COMBOBOX IDC_COMBO_PLSQLBLOCKS,15,94,168,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "PL/SQLRpCG[s",IDC_STATIC,5,35,184,80,WS_GROUP + DEFPUSHBUTTON "Wv(&J)",IDC_BUTTON_JUMP,197,5,50,14,WS_GROUP + PUSHBUTTON "LZ(&X)",IDCANCEL,197,24,50,14 + PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,197,101,50,14 +END + +IDD_FUNCLIST DIALOG 0, 0, 240, 289 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU +CAPTION "x" +FONT 9, "lr oSVbN" +BEGIN + CONTROL "Tree1",IDC_TREE_FL,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,0,20,234,232 + CONTROL "List1",IDC_LIST_FL,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,0,0,234,252 + PUSHBUTTON "",IDC_BUTTON_MENU,1,255,10,14,NOT WS_TABSTOP + CONTROL "",IDC_BUTTON_WINSIZE,"Button",BS_AUTOCHECKBOX | BS_PUSHLIKE,12,255,10,14 + PUSHBUTTON "Rs[(&C)",IDC_BUTTON_COPY,24,255,50,14,WS_DISABLED + DEFPUSHBUTTON "Wv(&J)",IDOK,76,255,50,14 + PUSHBUTTON "LZ(&X)",IDCANCEL,128,255,50,14 + PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,180,255,50,14 + CONTROL "Iɕ‚(&D)",IDC_CHECK_bAutoCloseDlgFuncList,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,271,75,10 + CONTROL "tH[JXڂ(&F)",IDC_CHECK_bFunclistSetFocusOnJump,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,82,271,77,10 + CONTROL "s𖳎(&B)",IDC_CHECK_bMarkUpBlankLineEnable,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,271,76,10 + LTEXT "(&S)",IDC_STATIC_nSortType,3,6,28,10 + PUSHBUTTON "ݒ(&S)",IDC_BUTTON_SETTING,3,3,35,14 + COMBOBOX IDC_COMBO_nSortType,34,3,94,65,CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP +END + +IDD_GREP DIALOGEX 0, 0, 390, 192 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Grep" +FONT 9, "Yu Gothic UI", 0, 0, 0x1 +BEGIN + RTEXT "(&N):",IDC_STATIC,4,4,52,8 + COMBOBOX IDC_COMBO_TEXT,60,4,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + CONTROL "PP(&W)",IDC_CHK_WORD,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,60,18,80,8 + CONTROL "p召(&C)",IDC_CHK_LOHICASE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,28,80,8 + CONTROL "K\(&E)",IDC_CHK_REGULAREXP,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,38,80,8 + RTEXT "(ɐK\Cũo[W񂪕\܂)",IDC_STATIC_JRE32VER,144,38,188,8 + RTEXT "ꏊ(&L):",IDC_STATIC,4,52,52,8 + COMBOBOX IDC_COMBO_FOLDER,60,52,254,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "&...",IDC_BUTTON_FOLDER,316,52,16,10 + CONTROL "ҏW̃t@C猟(&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,66,100,8 + CONTROL "TutH_(&S)",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,76,100,8 + CONTROL "JgtH_l(&D)",IDC_CHK_DEFAULTFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,86,100,8 + PUSHBUTTON "Kw(&U)",IDC_BUTTON_FOLDER_UP,230,66,50,14 + PUSHBUTTON "tH_(&G)",IDC_BUTTON_CURRENTFOLDER,282,66,50,14,BS_MULTILINE + RTEXT "Ώۃt@C(&I):",IDC_STATIC,4,100,52,8,NOT WS_GROUP + COMBOBOX IDC_COMBO_FILE,60,100,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + RTEXT "Ot@C(&J):",IDC_STATIC,4,114,52,8,NOT WS_GROUP + COMBOBOX IDC_COMBO_EXCLUDE_FILE,60,114,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + RTEXT "OtH_(&K):",IDC_STATIC,4,128,53,8 + COMBOBOX IDC_COMBO_EXCLUDE_FOLDER,60,128,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + GROUPBOX "ʏo",IDC_STATIC,60,144,68,44,WS_GROUP + CONTROL "Ys(&1)",IDC_RADIO_OUTPUTLINE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,68,156,56,8 + CONTROL "Y(&2)",IDC_RADIO_OUTPUTMARKED,"Button",BS_AUTORADIOBUTTON,68,166,56,8 + CONTROL "ۊYs(&3)",IDC_RADIO_NOHIT,"Button",BS_AUTORADIOBUTTON,68,176,56,8 + GROUPBOX "ʏo͌`",IDC_STATIC,132,144,68,44,WS_GROUP + CONTROL "m[}(&4)",IDC_RADIO_OUTPUTSTYLE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,140,156,52,8 + CONTROL "t@C(&5)",IDC_RADIO_OUTPUTSTYLE2,"Button",BS_AUTORADIOBUTTON,140,166,52,8 + CONTROL "ʂ̂(&6)",IDC_RADIO_OUTPUTSTYLE3,"Button",BS_AUTORADIOBUTTON,140,176,52,8 + GROUPBOX "̑",IDC_STATIC,204,144,180,44,WS_GROUP + CONTROL "t@Cŏ̂݌(&7)",IDC_CHECK_FILE_ONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,156,92,8 + CONTROL "tH_ɕ\(&8)",IDC_CHECK_SEP_FOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,166,92,8 + CONTROL "x[XtH_\(&9)",IDC_CHECK_BASE_PATH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,176,92,8 + LTEXT "R[hZbg(&A):",IDC_STATIC,312,152,62,8 + COMBOBOX IDC_COMBO_CHARSET,312,162,64,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,312,176,30,8 + DEFPUSHBUTTON "(&F)",IDOK,336,4,50,14,WS_GROUP + PUSHBUTTON "LZ(&X)",IDCANCEL,336,20,50,14 + PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,336,36,50,14 +END + +IDD_GREP_REPLACE DIALOGEX 0, 0, 390, 204 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Grepu" +FONT 9, "Yu Gothic UI", 0, 0, 0x1 +BEGIN + RTEXT "uO(&N):",IDC_STATIC,4,4,52,10 + COMBOBOX IDC_COMBO_TEXT,60,4,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + RTEXT "u(&Z):",IDC_STATIC,4,18,52,10 + COMBOBOX IDC_COMBO_TEXT2,60,18,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + CONTROL "PP(&W)",IDC_CHK_WORD,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,60,32,80,8 + CONTROL "p召(&C)",IDC_CHK_LOHICASE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,42,80,8 + CONTROL "K\(&E)",IDC_CHK_REGULAREXP,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,52,80,8 + CONTROL "Nbv{[h̓eŒu(&V)",IDC_CHK_PASTE,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,196,32,120,8 + CONTROL "obNAbv쐬(&B)",IDC_CHK_BACKUP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,196,42,120,8 + RTEXT "(ɐK\Cũo[W񂪕\܂)",IDC_STATIC_JRE32VER,144,52,188,8 + RTEXT "ꏊ(&L):",IDC_STATIC,4,64,52,8 + COMBOBOX IDC_COMBO_FOLDER,60,64,254,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "&...",IDC_BUTTON_FOLDER,316,64,16,10 + CONTROL "ҏW̃t@C猟(&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,78,100,8 + CONTROL "TutH_(&S)",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,88,100,8 + CONTROL "JgtH_l(&D)",IDC_CHK_DEFAULTFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,98,100,8 + PUSHBUTTON "Kw(&U)",IDC_BUTTON_FOLDER_UP,230,78,50,14 + PUSHBUTTON "tH_(&G)",IDC_BUTTON_CURRENTFOLDER,282,78,50,14,BS_MULTILINE + RTEXT "Ώۃt@C(&I):",IDC_STATIC,4,114,52,8,NOT WS_GROUP + COMBOBOX IDC_COMBO_FILE,60,114,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + RTEXT "Ot@C(&J):",IDC_STATIC,4,128,52,8,NOT WS_GROUP + COMBOBOX IDC_COMBO_EXCLUDE_FILE,60,128,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + RTEXT "OtH_(&K):",IDC_STATIC,4,142,52,8 + COMBOBOX IDC_COMBO_EXCLUDE_FOLDER,60,142,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + GROUPBOX "ʏo",IDC_STATIC,60,156,68,44,WS_GROUP + CONTROL "Ys(&1)",IDC_RADIO_OUTPUTLINE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,68,168,56,8 + CONTROL "Y(&2)",IDC_RADIO_OUTPUTMARKED,"Button",BS_AUTORADIOBUTTON,68,178,56,8 + GROUPBOX "ʏo͌`",IDC_STATIC,132,156,68,44,WS_GROUP + CONTROL "m[}(&4)",IDC_RADIO_OUTPUTSTYLE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,140,168,52,8 + CONTROL "t@C(&5)",IDC_RADIO_OUTPUTSTYLE2,"Button",BS_AUTORADIOBUTTON,140,178,52,8 + CONTROL "ʂ̂(&6)",IDC_RADIO_OUTPUTSTYLE3,"Button",BS_AUTORADIOBUTTON,140,188,52,8 + GROUPBOX "̑",IDC_STATIC,204,156,180,44,WS_GROUP + CONTROL "t@Cŏ̂݌(&7)",IDC_CHECK_FILE_ONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,168,92,8 + CONTROL "tH_ɕ\(&8)",IDC_CHECK_SEP_FOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,178,92,8 + CONTROL "x[XtH_\(&9)",IDC_CHECK_BASE_PATH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,188,92,8 + LTEXT "R[hZbg(&A):",IDC_STATIC,312,164,62,8 + COMBOBOX IDC_COMBO_CHARSET,312,174,64,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,312,188,30,8 + DEFPUSHBUTTON "u(&R)",IDOK,336,4,50,14,WS_GROUP + PUSHBUTTON "LZ(&X)",IDCANCEL,336,20,50,14 + PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,336,36,50,14 +END + +IDD_GREPRUNNING DIALOGEX 0, 0, 293, 79 +STYLE DS_SETFONT | DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Greps" +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + LTEXT "Ă܂EEE",IDC_STATIC,5,5,61,10,NOT WS_GROUP + LTEXT "t@C",IDC_STATIC,5,21,26,10,NOT WS_GROUP + LTEXT "IDC_STATIC_CURPATH",IDC_STATIC_CURFILE,36,20,252,10,NOT WS_GROUP + LTEXT "tH_",IDC_STATIC,5,34,27,10,NOT WS_GROUP + EDITTEXT IDC_STATIC_CURPATH,36,35,252,20,ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + PUSHBUTTON "LZ(&X)",IDCANCEL,238,60,50,14 + LTEXT "0",IDC_STATIC_HITCOUNT,76,5,44,10,NOT WS_GROUP,WS_EX_RIGHT + LTEXT "݂‚܂B",IDC_STATIC,122,5,60,10,NOT WS_GROUP + CONTROL "A^C\(&V)",IDC_CHECK_REALTIMEVIEW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,149,59,84,14 +END + +IDD_REPLACE DIALOGEX 30, 0, 298, 149 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "u" +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + LTEXT "uO(&N)",IDC_STATIC,5,6,35,10 + COMBOBOX IDC_COMBO_TEXT,43,4,191,150,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + LTEXT "u(&P)",IDC_STATIC,5,21,34,10,NOT WS_GROUP + COMBOBOX IDC_COMBO_TEXT2,43,19,191,150,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + CONTROL "Nbv{[h\t(&T)",IDC_CHK_PASTE,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,5,41,116,10 + CONTROL "PPʂŒT(&W)",IDC_CHK_WORD,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,5,52,78,10 + CONTROL "p啶Əʂ(&C)",IDC_CHK_LOHICASE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,5,63,119,10 + CONTROL "K\(&E)",IDC_CHK_REGULAREXP,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,5,74,55,10 + LTEXT "",IDC_STATIC_JRE32VER,16,85,138,10 + CONTROL "uׂĒuv͒ǔJԂ(&I)",IDC_CHECK_CONSECUTIVEALL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,95,118,10 + CONTROL "‚ȂƂɃbZ[W\(&M)",IDC_CHECK_NOTIFYNOTFOUND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,107,140,10 + CONTROL "u_CAOIɕ‚(&L)",IDC_CHECK_bAutoCloseDlgReplace, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,118,128,10 + CONTROL "擪ijČ(&Z)",IDC_CHECK_SEARCHALL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,129,113,10 + GROUPBOX "uΏ",IDC_STATIC,156,37,78,62,WS_GROUP + CONTROL "I𕶎(&0)",IDC_RADIO_REPLACE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,159,50,59,10 + CONTROL "In_(&1)}",IDC_RADIO_INSERT,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,159,61,71,10 + CONTROL "II_(&2)lj",IDC_RADIO_ADD,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,159,72,71,10 + CONTROL "s폜(&3)",IDC_RADIO_LINEDELETE,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,159,83,71,10 + GROUPBOX "͈",IDC_STATIC,156,103,78,37,WS_GROUP + CONTROL "I͈(&S)",IDC_RADIO_SELECTEDAREA,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,159,115,57,10 + CONTROL "t@CS(&O)",IDC_RADIO_ALLAREA,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,159,126,68,10 + PUSHBUTTON "㌟(&U)",IDC_BUTTON_SEARCHPREV,237,4,58,14,WS_GROUP + DEFPUSHBUTTON "(&D)",IDC_BUTTON_SEARCHNEXT,237,19,58,14 + PUSHBUTTON "Ys}[N(&B)",IDC_BUTTON_SETMARK,237,38,58,14 + PUSHBUTTON "u(&R)",IDC_BUTTON_REPALCE,237,57,58,14 + PUSHBUTTON "ׂĒu(&A)",IDC_BUTTON_REPALCEALL,237,73,58,14 + PUSHBUTTON "LZ(&X)",IDCANCEL,237,110,58,14,WS_GROUP + PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,237,127,58,14 +END + +IDD_REPLACERUNNING DIALOG 0, 0, 190, 35 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "u" +FONT 9, "lr oSVbN" +BEGIN + LTEXT "ułEEEE",IDC_STATIC,5,5,55,10 + CONTROL "Progress1",IDC_PROGRESS_REPLACE,"msctls_progress32",WS_BORDER,5,20,120,10 + PUSHBUTTON "LZ(&X)",IDCANCEL,135,16,50,14 + RTEXT "9999999999",IDC_STATIC_KENSUU,64,5,37,10,NOT WS_GROUP + LTEXT "",IDC_STATIC,104,5,8,10,NOT WS_GROUP +END + +IDD_PROPERTY_FILE DIALOGEX 0, 0, 270, 225 +STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "t@C̃vpeB" +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "‚(&C)",IDOK,155,208,50,14 + PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,215,208,50,14 + EDITTEXT IDC_EDIT_PROPERTY,5,5,260,200,ES_MULTILINE | ES_READONLY | WS_VSCROLL +END + +IDD_INPUT1 DIALOGEX 0, 0, 185, 55 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "ėp̓_CAO" +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + EDITTEXT IDC_EDIT_INPUT1,5,17,175,12,ES_AUTOHSCROLL + DEFPUSHBUTTON "&OK",IDOK,37,36,50,14 + PUSHBUTTON "LZ(&X)",IDCANCEL,98,35,50,14 + LTEXT "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",IDC_STATIC_MSG,6,5,175,10 +END + +IDD_COMPARE DIALOGEX 0, 0, 365, 165 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "t@Cer" +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + LTEXT "rt@CIĂ(&C):",IDC_STATIC,5,31,158,10 + LISTBOX IDC_LIST_FILES,5,42,355,95,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + CONTROL "Eɕ\(&T)",IDC_CHECK_TILE_H,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,293,30,66,10 + DEFPUSHBUTTON "&OK",IDOK,184,145,50,14 + PUSHBUTTON "LZ(&X)",IDCANCEL,244,145,50,14 + PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,304,145,50,14 + EDITTEXT IDC_STATIC_COMPARESRC,7,7,355,20,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL,WS_EX_STATICEDGE +END + +IDD_PRINTPREVIEWBAR DIALOG 0, 0, 402, 32 +STYLE DS_SETFONT | WS_CHILD +FONT 9, "lr oSVbN" +BEGIN + DEFPUSHBUTTON "(&P)...",IDOK,2,1,55,14 + PUSHBUTTON "y[Wݒ(&S)...",IDC_BUTTON_PRINTSETTING,2,16,55,14 + PUSHBUTTON "O(&V)",IDC_BUTTON_PREVPAGE,60,1,30,14 + PUSHBUTTON "(&N)",IDC_BUTTON_NEXTPAGE,90,1,30,14 + PUSHBUTTON "..&.",IDC_BUTTON_DIRECTPAGE,120,1,9,14 + LTEXT "999/999",IDC_STATIC_PAGENUM,131,4,35,10 + PUSHBUTTON "k(&O)",IDC_BUTTON_ZOOMDOWN,60,16,30,14 + PUSHBUTTON "g(&I)",IDC_BUTTON_ZOOMUP,90,16,30,14 + LTEXT "999/999",IDC_STATIC_ZOOM,131,19,35,10 + PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,167,1,39,14 + CONTROL "炩(&A)",IDC_CHECK_ANTIALIAS,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,207,3,43,10 + PUSHBUTTON "߂(&Q)",IDCANCEL,167,16,39,14 + PUSHBUTTON "v^(&R)",IDC_BUTTON_PRINTERSELECT,208,16,40,14 + ICON IDI_PRINTER,IDC_STATIC,251,3,11,9,SS_REALSIZEIMAGE + LTEXT "Static",IDC_STATIC_PRNDEV,263,4,137,10 + LTEXT "Static",IDC_STATIC_PAPER,251,19,149,10 +END + +IDD_PRINTSETTING DIALOGEX 0, 0, 302, 253 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "y[Wݒ" +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + LTEXT "y[Wݒ(&1)",IDC_STATIC,7,9,45,10 + COMBOBOX IDC_COMBO_SETTINGNAME,56,7,163,170,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "ݒ薼ύX(&2)...",IDC_BUTTON_EDITSETTINGNAME,224,7,69,14 + GROUPBOX "ݒ",IDC_STATIC,4,22,289,204 + RTEXT "ptHg(&F)",IDC_STATIC,7,37,45,10 + COMBOBOX IDC_COMBO_FONT_HAN,56,35,84,230,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + RTEXT "SptHg(&K)",IDC_STATIC,7,52,45,10 + COMBOBOX IDC_COMBO_FONT_ZEN,56,50,84,230,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + RTEXT "tHg(&P)",IDC_STATIC,7,71,45,10 + EDITTEXT IDC_EDIT_FONTHEIGHT,56,69,30,12,ES_AUTOHSCROLL + CONTROL "Spin1",IDC_SPIN_FONTHEIGHT,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,69,9,12 + LTEXT "(1/10mm)",IDC_STATIC,88,71,32,10 + RTEXT "144.5pt",IDC_STATIC_FONTSIZE,120,71,22,10 + RTEXT "s(&S)",IDC_STATIC,7,85,45,10 + EDITTEXT IDC_EDIT_LINESPACE,56,83,30,12,ES_AUTOHSCROLL + CONTROL "Spin2",IDC_SPIN_LINESPACE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,83,9,12 + LTEXT "(%)",IDC_STATIC,88,85,10,10 + RTEXT "i (&C)",IDC_STATIC,7,99,45,10 + EDITTEXT IDC_EDIT_DANSUU,56,97,30,12,ES_AUTOHSCROLL + CONTROL "Spin3",IDC_SPIN_DANSUU,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,97,9,12 + RTEXT "ǐ(&E)",IDC_STATIC,7,113,45,10 + EDITTEXT IDC_EDIT_DANSPACE,56,111,30,12,ES_AUTOHSCROLL + CONTROL "Spin4",IDC_SPIN_DANSPACE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,111,9,12 + LTEXT "(mm)",IDC_STATIC,88,113,17,10 + RTEXT "pTCY(&Z)",IDC_STATIC,7,131,45,10 + COMBOBOX IDC_COMBO_PAPER,56,129,169,145,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + RTEXT "p̌",IDC_STATIC,7,146,45,10 + CONTROL "c(&I)",IDC_RADIO_PORTRAIT,"Button",BS_AUTORADIOBUTTON | WS_GROUP,58,145,40,10 + CONTROL "(&A)",IDC_RADIO_LANDSCAPE,"Button",BS_AUTORADIOBUTTON,102,145,40,10 + RTEXT "]^(&T)",IDC_STATIC,7,163,45,10 + EDITTEXT IDC_EDIT_MARGINTY,56,161,30,12,ES_AUTOHSCROLL + CONTROL "Spin5",IDC_SPIN_MARGINTY,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,161,9,12 + LTEXT "(mm)",IDC_STATIC,88,163,17,10 + RTEXT "(&B)",IDC_STATIC,7,177,45,10 + EDITTEXT IDC_EDIT_MARGINBY,56,175,30,12,ES_AUTOHSCROLL + CONTROL "Spin6",IDC_SPIN_MARGINBY,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,175,9,12 + LTEXT "(mm)",IDC_STATIC,88,177,17,10 + RTEXT "(&L)",IDC_STATIC,7,191,45,10 + EDITTEXT IDC_EDIT_MARGINLX,56,189,30,12,ES_AUTOHSCROLL + CONTROL "Spin7",IDC_SPIN_MARGINLX,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,189,9,12 + LTEXT "(mm)",IDC_STATIC,88,191,17,10 + RTEXT "E(&R)",IDC_STATIC,7,205,45,10 + EDITTEXT IDC_EDIT_MARGINRX,56,202,30,12,ES_AUTOHSCROLL + CONTROL "Spin8",IDC_SPIN_MARGINRX,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,202,9,12 + LTEXT "(mm)",IDC_STATIC,88,205,17,10 + CONTROL "sԍ(&N)",IDC_CHECK_LINENUMBER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,35,70,10 + CONTROL "p[hbv(&W)",IDC_CHECK_WORDWRAP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,49,78,10 + CONTROL "s֑",IDC_CHECK_PS_KINSOKUHEAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,63,46,10 + CONTROL "s֑",IDC_CHECK_PS_KINSOKUTAIL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,77,46,10 + CONTROL "sԂ牺",IDC_CHECK_PS_KINSOKURET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,197,63,60,10 + CONTROL "Ǔ_Ԃ牺",IDC_CHECK_PS_KINSOKUKUTO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,197,77,67,10 + LTEXT "s̕F",IDC_STATIC,150,96,65,10 + LTEXT "c̍sF",IDC_STATIC,150,110,65,10 + RTEXT "0",IDC_STATIC_ENABLECOLUMNS,215,96,20,10 + RTEXT "0",IDC_STATIC_ENABLELINES,215,110,20,10 + GROUPBOX "",IDC_STATIC,145,87,112,37 + CONTROL "J[(&V)",IDC_CHECK_COLORPRINT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,145,61,10 + LTEXT "wb_[(&U)",IDC_STATIC,107,163,38,10 + EDITTEXT IDC_EDIT_HEAD1,107,175,50,12,ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_HEAD2,158,175,50,12,ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_HEAD3,209,175,50,12,ES_AUTOHSCROLL + CONTROL "gp",IDC_CHECK_USE_FONT_HEAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,260,164,30,10 + PUSHBUTTON "tHg",IDC_BUTTON_FONT_HEAD,260,174,30,14 + RTEXT "Font(xxpt/xx.xmm)",IDC_STATIC_FONT_HEAD,145,160,114,14,SS_CENTERIMAGE + LTEXT "tb^[(&D)",IDC_STATIC,107,191,38,10 + EDITTEXT IDC_EDIT_FOOT1,107,203,50,12,ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_FOOT2,158,203,50,12,ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_FOOT3,209,203,50,12,ES_AUTOHSCROLL + CONTROL "gp",IDC_CHECK_USE_FONT_FOOT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,260,192,30,10 + PUSHBUTTON "tHg",IDC_BUTTON_FONT_FOOT,260,202,30,14 + RTEXT "Font(xxpt/xx.xmm)",IDC_STATIC_FONT_FOOT,145,189,114,14,SS_CENTERIMAGE + DEFPUSHBUTTON "&OK",IDOK,128,234,50,14 + PUSHBUTTON "LZ(&X)",IDCANCEL,183,234,50,14 + PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,238,234,50,14 +END + +IDD_EXITING DIALOG 0, 0, 171, 30 +STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_VISIBLE +FONT 9, "lr oSVbN" +BEGIN + ICON IDI_ICON_STD,IDC_STATIC,5,5,20,20 + LTEXT "IĂ܂B ΂炭҂EEE",IDC_STATIC,30,10,137,8 +END + +IDD_EXEC DIALOGEX 30, 0, 292, 137 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "t@Cw肵Ďs" +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + LTEXT "O(&N)",IDC_STATIC,5,6,26,10 + COMBOBOX IDC_COMBO_m_szCommand,34,4,254,240,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_TABSTOP + PUSHBUTTON "&...",IDC_BUTTON_REFERENCE,278,20,9,12,WS_GROUP + CONTROL "Wo͂𓾂(&S)",IDC_CHECK_GETSTDOUT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,32,76,10 + COMBOBOX IDC_COMBO_CODE_GET,16,43,73,10,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "W͂ɑ(&I)",IDC_CHECK_SENDSTDIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,58,74,10 + COMBOBOX IDC_COMBO_CODE_SEND,16,72,73,10,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "AEgvbgEBhE(&O)",IDC_RADIO_OUTPUT,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,102,51,93,10 + CONTROL "ҏW̃EBhE(&C)",IDC_RADIO_EDITWINDOW,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,196,51,87,10 + GROUPBOX "Wo̓_CNg",IDC_STATIC,98,39,190,29,WS_GROUP + CONTROL "JgfBNg(&R)",IDC_CHECK_CUR_DIR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,86,93,10 + COMBOBOX IDC_COMBO_CUR_DIR,16,100,263,240,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_TABSTOP + PUSHBUTTON "...",IDC_BUTTON_REFERENCE2,279,100,9,12,WS_GROUP + DEFPUSHBUTTON "s(&E)",IDOK,117,116,50,14 + PUSHBUTTON "LZ(&X)",IDCANCEL,177,116,50,14 + PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,237,116,50,14 + LTEXT "[Note] $FŕҏWt@C, $$$",IDC_STATIC,140,21,134,10 +END + +IDD_EXECRUNNING DIALOG 0, 0, 270, 55 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "R}hsEEE" +FONT 9, "lr oSVbN" +BEGIN + PUSHBUTTON "LZ(&X)",IDCANCEL,207,36,59,14 + EDITTEXT IDC_STATIC_CMD,5,5,260,23,ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP +END + +IDD_MACRORUNNING DIALOG 0, 0, 270, 55 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 9, "lr oSVbN" +BEGIN + PUSHBUTTON "LZ(&X)",IDCANCEL,207,5,59,14 + LTEXT "}NsEEE",IDC_STATIC,5,5,200,23 + EDITTEXT IDC_STATIC_CMD,5,28,260,23,ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP +END + +IDD_HOKAN DIALOGEX 0, 0, 125, 100 +STYLE DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | WS_THICKFRAME +EXSTYLE WS_EX_TOOLWINDOW +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + LISTBOX IDC_LIST_WORDS,0,0,120,95,LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_WANTKEYBOARDINPUT | WS_VSCROLL | WS_TABSTOP +END + +IDD_PRINTING DIALOG 0, 0, 145, 75 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "" +FONT 9, "lr oSVbN" +BEGIN + PUSHBUTTON "LZ(&X)",IDCANCEL,90,56,50,14 + LTEXT "Ă܂EEEE",IDC_STATIC,25,10,65,10 + LTEXT "12/123",IDC_STATIC_PROGRESS,25,43,100,10 + LTEXT "CEditView.cpp",IDC_STATIC_JOBNAME,25,20,115,20 + ICON IDI_PRINTER,IDC_STATIC,10,8,11,9,SS_REALSIZEIMAGE +END + +IDD_FILEOPEN DIALOG 0, 0, 261, 66 +STYLE DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN +FONT 9, "lr oSVbN" +BEGIN + LTEXT "",IDC_STATIC_STC32,0,0,261,10 + LTEXT "R[hZbg(&C):",IDC_STATIC_CHARCODE,5,15,64,10 + COMBOBOX IDC_COMBO_CODE,71,13,50,126,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,122,14,25,10 + CONTROL "&BOM",IDC_CHECK_BOM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,148,14,30,10 + LTEXT "sR[h(&E):",IDC_STATIC_EOL,181,15,45,10 + COMBOBOX IDC_COMBO_EOL,226,13,50,126,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "ŋ߂̃t@C(&F):",IDC_STATIC,5,32,59,10 + COMBOBOX IDC_COMBO_MRU,71,30,185,236,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP + LTEXT "ŋ߂̃tH_(&D):",IDC_STATIC,5,49,61,10 + COMBOBOX IDC_COMBO_OPENFOLDER,71,46,185,236,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP +END + +IDD_FILEUPDATEQUERY DIALOG 0, 0, 223, 107 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION +CAPTION "t@CXV܂" +FONT 9, "lr oSVbN" +BEGIN + PUSHBUTTON "ēǍ(&R)",IDC_BTN_RELOAD,7,63,50,14 + DEFPUSHBUTTON "‚(&C)",IDC_BTN_CLOSE,59,63,50,14 + PUSHBUTTON "Ȍ㖢ҏWōēǍ(&L)",IDC_BTN_AUTOLOAD,114,63,102,14 + PUSHBUTTON "ȌʒmbZ[Ŵ(&M)",IDC_BTN_NOTIFYONLY,7,81,102,14 + PUSHBUTTON "ȌXVĎȂ(&N)",IDC_BTN_NOSUPERVISION,114,81,102,14 + EDITTEXT IDC_UPDATEDFILENAME,7,7,209,25,ES_MULTILINE | ES_READONLY | NOT WS_TABSTOP + LTEXT "̃t@C͊ÕGfB^ŕύXĂ܂B",IDC_FILEUPDATEMSG,7,36,209,10 + LTEXT "",IDC_QUERYRELOADMSG,7,48,209,10 +END + +IDD_FAVORITE DIALOGEX 0, 0, 380, 274 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "ƂCɓ̊Ǘ" +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + CONTROL "List1",IDC_LIST_FAVORITE_FILE,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,3,17,373,213 + CONTROL "List1",IDC_LIST_FAVORITE_FOLDER,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,25,39,243,79 + CONTROL "List1",IDC_LIST_FAVORITE_EXCEPTMRU,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,27,42,243,79 + CONTROL "List1",IDC_LIST_FAVORITE_SEARCH,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,18,54,243,79 + CONTROL "List1",IDC_LIST_FAVORITE_REPLACE,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,11,73,243,79 + CONTROL "List1",IDC_LIST_FAVORITE_GREP_FILE,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,14,93,243,79 + CONTROL "List1",IDC_LIST_FAVORITE_GREP_FOLDER,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,18,115,243,79 + CONTROL "List1",IDC_LIST_FAVORITE_CMD,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,25,127,243,79 + CONTROL "List1",IDC_LIST_FAVORITE_CUR_DIR,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,25,127,243,79 + PUSHBUTTON "lj(&I)",IDC_BUTTON_ADD_FAVORITE,5,237,50,14 + LTEXT " ̍폜F",IDC_STATIC_BUTTONS,65,237,45,14,SS_CENTERIMAGE + PUSHBUTTON "ׂ(&A)...",IDC_BUTTON_CLEAR,111,237,50,14 + PUSHBUTTON "CɓȊO(&F)...",IDC_BUTTON_DELETE_NOFAVORATE,163,237,75,14 + PUSHBUTTON "݂Ȃ(&N)...",IDC_BUTTON_DELETE_NOTFOUND,241,237,72,14 + PUSHBUTTON "I(&D)",IDC_BUTTON_DELETE_SELECTED,315,237,58,14 + DEFPUSHBUTTON "‚(&C)",IDOK,260,255,50,14 + CONTROL "Tab1",IDC_TAB_FAVORITE,"SysTabControl32",WS_TABSTOP,3,4,374,15 + PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,315,255,50,14 + LTEXT "Message",IDC_STATIC_FAVORITE_MSG,4,254,250,19 +END + +IDD_TAGJUMPLIST DIALOGEX 0, 0, 410, 189 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "_CNg^OWvꗗ" +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + LTEXT "DIR",IDC_STATIC_BASEDIR,4,151,276,10,SS_NOPREFIX + LTEXT "L[[h(&K)",IDC_STATIC_KEYWORD,4,162,100,10,SS_NOPREFIX + COMBOBOX IDC_KEYWORD,3,172,134,180,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP + CONTROL "List1",IDC_LIST_TAGJUMP,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,3,4,403,143 + PUSHBUTTON "O(&P)",IDC_BUTTON_PREVTAG,296,152,50,14 + PUSHBUTTON "(&N)",IDC_BUTTON_NEXTTAG,349,152,50,14 + PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,243,170,50,14 + DEFPUSHBUTTON "Wv(&J)",IDOK,296,170,50,14 + PUSHBUTTON "LZ(&X)",IDCANCEL,349,170,50,14 + CONTROL "啶̓ꎋ(&F)",IDC_CHECK_ICASE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,144,163,95,10 + CONTROL "̓rɃ}b`(&A)",IDC_CHECK_ANYWHERE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,144,175,95,10 +END + +IDD_TAG_MAKE DIALOGEX 0, 0, 233, 85 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "^Ot@C̍쐬" +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + LTEXT "^O쐬tH_",IDC_STATIC,7,7,65,10 + EDITTEXT IDC_EDIT_TAG_MAKE_FOLDER,7,18,201,12,ES_AUTOHSCROLL + PUSHBUTTON "...",IDC_BUTTON_TAG_MAKE_REF,211,17,15,12 + PUSHBUTTON "(&B)",IDC_BUTTON_FOLDER_UP,186,31,25,14 + CONTROL "TutH_Ώۂɂ",IDC_CHECK_TAG_MAKE_RECURSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,34,107,10 + LTEXT "R}hCIvV",IDC_STATIC,7,49,86,10 + EDITTEXT IDC_EDIT_TAG_MAKE_CMDLINE,96,47,130,12,ES_AUTOHSCROLL + DEFPUSHBUTTON "쐬(&O)",IDOK,68,64,50,14 + PUSHBUTTON "LZ(&X)",IDCANCEL,122,64,50,14 + PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,176,64,50,14 +END + +IDD_OPERATIONRUNNING DIALOG 0, 0, 190, 35 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "̎s" +FONT 9, "lr oSVbN" +BEGIN + LTEXT "łEEEE",IDC_STATIC_MSG,5,5,54,10,NOT WS_GROUP + CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32",WS_BORDER,5,20,120,10 + PUSHBUTTON "LZ(&X)",IDCANCEL,135,16,50,14 + RTEXT "",IDC_STATIC_KENSUU,61,5,123,10,NOT WS_GROUP +END + +IDD_DIFF DIALOGEX 0, 0, 263, 303 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "DIFF\" +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + GROUPBOX "rt@C",IDC_FRAME_DIFF_DST,7,47,249,138,WS_GROUP + EDITTEXT IDC_EDIT_DIFF_DST,13,72,191,13,ES_AUTOHSCROLL + CONTROL "Ot@Cw",IDC_RADIO_DIFF_DST1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,13,58,78,11 + PUSHBUTTON "Q(&R)...",IDC_BUTTON_DIFF_DST,208,72,42,14,WS_GROUP + CONTROL "̕ҏW̃t@C",IDC_RADIO_DIFF_DST2,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,13,89,147,11 + LISTBOX IDC_LIST_DIFF_FILES,13,102,236,77,LBS_SORT | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + CONTROL "啶̓ꎋ(&C)",IDC_CHECK_DIFF_OPT_CASE,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,191,101,10 + CONTROL "󔒖(&W)",IDC_CHECK_DIFF_OPT_SPACE,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,203,64,10 + CONTROL "󔒕ύX(&B)",IDC_CHECK_DIFF_OPT_SPCCHG,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,216,73,10 + CONTROL "󔒍s(&L)",IDC_CHECK_DIFF_OPT_BLINE,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,229,74,10 + CONTROL "^u󔒕ϊ(&T)",IDC_CHECK_DIFF_OPT_TABSPC,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,242,74,10 + GROUPBOX "ҏWt@C...",IDC_FRAME_DIFF_FILE12,110,190,146,26,WS_GROUP + CONTROL "Vt@C(&N)",IDC_RADIO_DIFF_FILE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,119,201,59,10 + CONTROL "t@C(&D)",IDC_RADIO_DIFF_FILE2,"Button",BS_AUTORADIOBUTTON | WS_GROUP,183,201,59,10 + GROUPBOX "̍(O̍)ֈړ",IDC_FRAME_SEARCH_MSG,110,221,146,41 + CONTROL "‚ȂƂɃbZ[W\(&M)",IDC_CHECK_NOTIFYNOTFOUND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,232,140,10 + CONTROL "擪ijČ(&Z)",IDC_CHECK_SEARCHALL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,245,130,10 + CONTROL "DIFFȂƂɃbZ[W\",IDC_CHECK_DIFF_EXEC_STATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,267,139,10 + DEFPUSHBUTTON "&OK",IDOK,93,282,50,14 + PUSHBUTTON "LZ(&X)",IDCANCEL,147,282,50,14 + PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,202,282,50,14 + LTEXT "ҏW̃t@C",IDC_STATIC,7,7,61,10 + EDITTEXT IDC_STATIC_DIFF_SRC,7,18,249,23,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL,WS_EX_STATICEDGE +END + +IDD_CTRLCODE DIALOGEX 0, 0, 179, 185 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Rg[R[h" +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + CONTROL "List1",IDC_LIST_CTRLCODE,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_NOLABELWRAP | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,2,2,175,162 + DEFPUSHBUTTON "&OK",IDOK,19,168,50,14 + PUSHBUTTON "LZ(&X)",IDCANCEL,73,168,50,14 + PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,127,168,50,14 +END + +IDD_SETCHARSET DIALOGEX 0, 0, 186, 45 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION +CAPTION "R[h̎w" +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + LTEXT "R[hZbg(&C):",IDC_STATIC,5,9,64,10 + COMBOBOX IDC_COMBO_CHARSET,71,7,50,126,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,71,26,25,10 + CONTROL "&BOM",IDC_CHECK_BOM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,96,26,30,10 + DEFPUSHBUTTON "&OK",IDOK,129,7,50,14 + PUSHBUTTON "LZ(&X)",IDCANCEL,129,24,50,14 +END + +IDD_TYPELIST DIALOGEX 0, 0, 187, 280 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "^Cvʐݒꗗ" +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + LTEXT "^CvIĂ(&T):",IDC_STATIC,5,5,111,10 + LISTBOX IDC_LIST_TYPES,5,15,120,258,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + DEFPUSHBUTTON "ݒύX(&S)...",IDOK,130,15,50,14 + PUSHBUTTON "ꎞKp(&R)",IDC_BUTTON_TEMPCHANGE,130,31,50,14 + PUSHBUTTON "LZ(&X)",IDCANCEL,130,50,50,14 + PUSHBUTTON "C|[g(&I)",IDC_BUTTON_IMPORT,130,79,50,14 + PUSHBUTTON "GNX|[g(&E)",IDC_BUTTON_EXPORT,130,95,50,14 + PUSHBUTTON "(&N)",IDC_BUTTON_INITIALIZE,130,111,50,14 + PUSHBUTTON "(&C)",IDC_BUTTON_COPY_TYPE,130,127,50,14 + PUSHBUTTON "(&U)",IDC_BUTTON_UP_TYPE,130,143,50,14 + PUSHBUTTON "(&O)",IDC_BUTTON_DOWN_TYPE,130,159,50,14 + PUSHBUTTON "lj(&A)",IDC_BUTTON_ADD_TYPE,130,175,50,14 + PUSHBUTTON "폜(&D)",IDC_BUTTON_DEL_TYPE,130,191,50,14 + CONTROL "ENbNj[ɒlj",IDC_CHECK_EXT_RMENU,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_DISABLED | WS_TABSTOP,130,207,50,28 + CONTROL "_uNbNŊJ",IDC_CHECK_EXT_DBLCLICK,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_DISABLED | WS_TABSTOP,130,231,50,28 + PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,130,262,50,14 +END + +IDD_TYPE_ASCERTAIN DIALOGEX 0, 0, 187, 100 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "C|[gmF" +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + LTEXT "Ǎ:",IDC_STATIC,7,7,33,10 + CONTROL "VKlj(&A)",IDC_RADIO_TYPE_ADD,"Button",BS_AUTORADIOBUTTON,36,7,45,10 + CONTROL "{",IDC_RADIO_TYPE_TO,"Button",BS_AUTORADIOBUTTON,86,7,135,10 + LTEXT "V^Cv:",IDC_STATIC,7,27,33,10 + LTEXT "{",IDC_STATIC_TYPE_FILE,45,27,135,16 + LTEXT "FI(&C)",IDC_STATIC,7,47,35,10 + COMBOBOX IDC_COMBO_COLORS,44,45,100,250,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "LŃC|[g܂B낵łH",IDC_STATIC_MSG,26,64,154,10 + DEFPUSHBUTTON "&OK",IDOK,26,79,50,14 + PUSHBUTTON "LZ(&X)",IDCANCEL,78,79,50,14 + PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,130,79,50,14 +END + +IDD_PROP_SCREEN DIALOGEX 0, 0, 302, 244 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + LTEXT "ݒ̖O(&N)",IDC_STATIC,5,6,49,10 + EDITTEXT IDC_EDIT_TYPENAME,55,4,59,12,ES_AUTOHSCROLL + LTEXT "t@Cgq(&X)",IDC_STATIC,124,6,58,10 + EDITTEXT IDC_EDIT_TYPEEXTS,184,4,113,12,ES_AUTOHSCROLL + RTEXT "܂Ԃ@(&<)",IDC_STATIC,8,34,56,10,NOT WS_GROUP + COMBOBOX IDC_COMBO_WRAPMETHOD,70,32,72,78,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + RTEXT "܂Ԃ(&R)",IDC_STATIC,8,49,56,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_MAXLINELEN,70,48,40,12 + CONTROL "Spin1",IDC_SPIN_MAXLINELEN,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,117,48,9,12,WS_EX_TRANSPARENT + RTEXT "̊Ԋu(&C)",IDC_STATIC,8,63,56,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_CHARSPACE,70,62,40,12 + CONTROL "Spin1",IDC_SPIN_CHARSPACE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,117,62,9,12,WS_EX_TRANSPARENT + LTEXT "hbg",IDC_STATIC,114,63,18,10 + RTEXT "s̊Ԋu(&L)",IDC_STATIC,8,77,56,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_LINESPACE,70,76,40,12,ES_AUTOHSCROLL + CONTROL "Spin3",IDC_SPIN_LINESPACE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,117,76,9,12 + LTEXT "hbg",IDC_STATIC,114,77,18,10 + RTEXT "TAB(&T)",IDC_STATIC,8,91,56,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_TABSPACE,70,90,40,12,ES_AUTOHSCROLL + CONTROL "Spin3",IDC_SPIN_TABSPACE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,117,90,7,12 + LTEXT "T&AB\",IDC_STATIC,16,104,56,10,NOT WS_GROUP + COMBOBOX IDC_CHECK_TAB_ARROW,48,104,46,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + EDITTEXT IDC_EDIT_TABVIEWSTRING,102,104,40,12,ES_AUTOHSCROLL + CONTROL "S&PACȆ}",IDC_CHECK_INS_SPACE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,123,57,10 + COMBOBOX IDC_COMBO_TSV_MODE,16,121,46,40,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "CAEg",IDC_STATIC,3,22,145,117 + CONTROL "Cfg(&U)",IDC_CHECK_INDENT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,154,72,10 + CONTROL "Sp󔒂(&Z)",IDC_CHECK_INDENT_WSPACE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,83,154,61,10 + LTEXT "X}[gCfg(&S)",IDC_STATIC,8,169,68,10 + COMBOBOX IDC_COMBO_SMARTINDENT,82,167,60,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "̑̃CfgΏە(&I)",IDC_STATIC,8,183,120,10 + EDITTEXT IDC_EDIT_INDENTCHARS,38,195,103,12,ES_AUTOHSCROLL + LTEXT "܂ԂsCfg(&2)",IDC_STATIC,8,211,75,10 + COMBOBOX IDC_COMBO_INDENTLAYOUT,87,209,54,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "sɖ̋󔒂폜(&E)",IDC_CHECK_RTRIM_PREVLINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,224,113,10 + GROUPBOX "Cfg",IDC_STATIC,3,143,145,97 + CONTROL "W[(&B)",IDC_RADIO_OUTLINEDEFAULT,"Button",BS_AUTORADIOBUTTON | WS_GROUP,162,33,82,10 + COMBOBOX IDC_COMBO_OUTLINES,173,46,81,85,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "[t@C(&D)",IDC_RADIO_OUTLINERULEFILE,"Button",BS_AUTORADIOBUTTON,162,63,69,10 + EDITTEXT IDC_EDIT_OUTLINERULEFILE,173,74,92,14,ES_AUTOHSCROLL + PUSHBUTTON "(&1)...",IDC_BUTTON_RULEFILE_REF,268,74,20,14 + GROUPBOX "AEgC͕@",IDC_STATIC,153,22,145,71 + CONTROL "gp(&G)",IDC_CHECK_USETYPEFONT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,108,48,10 + LTEXT "Font(nnpt)",IDC_STATIC_TYPEFONT,210,105,85,16,SS_CENTERIMAGE + PUSHBUTTON "tHg(&F)...",IDC_BUTTON_TYPEFONT,173,121,80,14 + GROUPBOX "^CvʃtHg",IDC_STATIC,153,97,145,42 + CONTROL "p[hbv(&W)",IDC_CHECK_WORDWRAP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,154,78,10 + CONTROL "sԂ牺(&^)",IDC_CHECK_KINSOKURET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,168,100,10 + CONTROL "Ԃ牺B(&-)",IDC_CHECK_KINSOKUHIDE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,172,182,100,10 + CONTROL "Ǔ_Ԃ牺(&\\)",IDC_CHECK_KINSOKUKUTO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,196,95,10 + EDITTEXT IDC_EDIT_KINSOKUKUTO,258,195,30,12,ES_AUTOHSCROLL + CONTROL "s֑(&[)",IDC_CHECK_KINSOKUHEAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,210,54,10 + EDITTEXT IDC_EDIT_KINSOKUHEAD,218,209,70,12,ES_AUTOHSCROLL + CONTROL "s֑(&])",IDC_CHECK_KINSOKUTAIL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,224,54,10 + EDITTEXT IDC_EDIT_KINSOKUTAIL,218,223,70,12,ES_AUTOHSCROLL + GROUPBOX "֑",IDC_STATIC,153,143,145,97 +END + +IDD_PROP_COLOR DIALOGEX 0, 0, 302, 244 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + GROUPBOX "Fw(&L)",IDC_STATIC,3,6,148,204,WS_GROUP + LISTBOX IDC_LIST_COLORS,6,18,142,148,LBS_OWNERDRAWFIXED | WS_VSCROLL | WS_GROUP | WS_TABSTOP + CONTROL "F/\(&D)",IDC_CHECK_DISP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,165,65,10 + CONTROL "(&B)",IDC_CHECK_BOLD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,165,36,10 + CONTROL "(&U)",IDC_CHECK_UNDERLINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,112,165,36,10 + LTEXT "F(C)",IDC_STATIC_MOZI,16,181,34,10 + CONTROL "&C",IDC_BUTTON_TEXTCOLOR,"Button",BS_OWNERDRAW | WS_TABSTOP,54,178,25,14 + PUSHBUTTON "F(&<)...",IDC_BUTTON_SAMETEXTCOLOR,84,178,58,14 + LTEXT "wiF(K)",IDC_STATIC_HAIKEI,16,196,33,10,NOT WS_GROUP + CONTROL "&K",IDC_BUTTON_BACKCOLOR,"Button",BS_OWNERDRAW | WS_TABSTOP,54,193,25,14 + PUSHBUTTON "wiF(&>)...",IDC_BUTTON_SAMEBKCOLOR,84,193,58,14 + PUSHBUTTON "C|[g(&I)...",IDC_BUTTON_IMPORT,25,215,60,14,WS_GROUP + PUSHBUTTON "GNX|[g(&X)...",IDC_BUTTON_EXPORT,88,215,60,14 + LTEXT "L[[h&1",IDC_STATIC,162,18,54,10 + COMBOBOX IDC_COMBO_SET,218,16,75,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "&2`10...",IDC_BUTTON_KEYWORD_SELECT,218,32,75,14 + PUSHBUTTON "ʐݒ(&C)...",IDC_BUTTON_EDITKEYWORD,218,47,75,14 + GROUPBOX "L[[h",IDC_STATIC,156,6,142,60,WS_GROUP + LTEXT "ubN^(&F)",IDC_STATIC,164,80,42,10 + EDITTEXT IDC_EDIT_BLOCKCOMMENT_FROM,211,78,27,12,ES_AUTOHSCROLL + LTEXT "`(&T)",IDC_STATIC,245,80,18,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_BLOCKCOMMENT_TO,267,78,26,12,ES_AUTOHSCROLL + LTEXT "ubN^(&A)",IDC_STATIC,164,94,42,10 + EDITTEXT IDC_EDIT_BLOCKCOMMENT_FROM2,211,92,27,12,ES_AUTOHSCROLL + LTEXT "`(&Z)",IDC_STATIC,245,94,18,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_BLOCKCOMMENT_TO2,267,92,26,12,ES_AUTOHSCROLL + LTEXT "s^(&M)",IDC_STATIC,164,110,27,10 + EDITTEXT IDC_EDIT_LINECOMMENT,195,108,24,12,ES_AUTOHSCROLL + CONTROL "(&P)",IDC_CHECK_LCPOS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,223,109,33,10 + RTEXT "&@",IDC_LABEL_LCPOS,256,110,8,10 + EDITTEXT IDC_EDIT_LINECOMMENTPOS,267,108,26,12,ES_AUTOHSCROLL + CONTROL "",IDC_SPIN_LCColNum,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,295,108,6,12 + LTEXT "s^(&E)",IDC_STATIC,164,124,25,10 + EDITTEXT IDC_EDIT_LINECOMMENT2,195,122,24,12,ES_AUTOHSCROLL + CONTROL "(&O)",IDC_CHECK_LCPOS2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,223,123,34,10 + RTEXT "&[",IDC_LABEL_LCPOS2,256,124,8,10 + EDITTEXT IDC_EDIT_LINECOMMENTPOS2,267,122,26,12,ES_AUTOHSCROLL + CONTROL "",IDC_SPIN_LCColNum2,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,295,122,6,12 + LTEXT "s^(&G)",IDC_STATIC,164,138,26,10 + EDITTEXT IDC_EDIT_LINECOMMENT3,195,136,24,12,ES_AUTOHSCROLL + CONTROL "(&J)",IDC_CHECK_LCPOS3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,223,137,33,10 + RTEXT "&]",IDC_LABEL_LCPOS3,256,138,8,10 + EDITTEXT IDC_EDIT_LINECOMMENTPOS3,267,136,26,12,ES_AUTOHSCROLL + CONTROL "",IDC_SPIN_LCColNum3,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,295,136,6,12 + GROUPBOX "RgX^C",IDC_STATIC,156,68,142,85,WS_GROUP + GROUPBOX "GXP[v(&Q)",IDC_STATIC,156,164,142,46,WS_GROUP + COMBOBOX IDC_COMBO_STRINGLITERAL,160,178,68,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "ŝ(&\\)",IDC_CHECK_STRINGLINEONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,233,178,64,10 + CONTROL "IȂꍇs܂ŐF(&N)",IDC_CHECK_STRINGENDLINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,196,136,10 + LTEXT "cw(&3)",IDC_STATIC,164,218,46,10 + EDITTEXT IDC_EDIT_VERTLINE,210,216,74,12,ES_AUTOHSCROLL + LTEXT "*܂Step(Begin, End)ŃR}؂",IDC_STATIC,165,230,142,10 +END + +IDD_PROP_SUPPORT DIALOGEX 0, 0, 302, 244 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + LTEXT "Pt@C(&W)",IDC_STATIC,8,17,53,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_HOKANFILE,63,15,150,12,ES_AUTOHSCROLL | WS_GROUP + PUSHBUTTON "(&1)...",IDC_BUTTON_HOKANFILE_REF,215,14,19,14 + COMBOBOX IDC_COMBO_HOKAN_TYPE,236,15,58,57,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "p啶𓯈ꎋ(&I)",IDC_CHECK_HOKANLOHICASE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,31,110,10 + LTEXT "F",IDC_STATIC,122,33,20,10,NOT WS_GROUP + CONTROL "ҏW̃t@C(&F)",IDC_CHECK_HOKANBYFILE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,142,31,75,10 + CONTROL "L[[h(&K)",IDC_CHECK_HOKANBYKEYWORD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,217,31,75,10 + GROUPBOX "͕⊮@\",IDC_STATIC,3,3,295,45,WS_GROUP + GROUPBOX "Owv̐ݒ(&L)",IDC_STATIC,3,55,295,32,WS_GROUP + EDITTEXT IDC_EDIT_TYPEEXTHELP,8,68,264,12,ES_AUTOHSCROLL | WS_GROUP + PUSHBUTTON "(&2)...",IDC_BUTTON_TYPEOPENHELP,275,67,19,14 + GROUPBOX "OHTMLwv̐ݒ(&P)",IDC_STATIC,3,95,295,45,WS_GROUP + EDITTEXT IDC_EDIT_TYPEEXTHTMLHELP,8,109,264,12,ES_AUTOHSCROLL | WS_GROUP + PUSHBUTTON "(&3)...",IDC_BUTTON_TYPEOPENEXTHTMLHELP,275,107,19,14 + CONTROL "r[A𕡐NȂ(&N)",IDC_CHECK_TYPEHTMLHELPISSINGLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,125,109,10 + CONTROL "ۑɉsR[h݂̍x(&E)",IDC_CHECK_CHKENTERATEND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,145,146,10 + CONTROL "𖳎(&S)",IDC_CHECK_INDENTCPPSTR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,171,146,10 + CONTROL "Rg𖳎(&C)",IDC_CHECK_INDENTCPPCMT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,158,171,130,10 + CONTROL "Undoobt@𕪂(&U)",IDC_CHECK_INDENTCPPUNDO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,183,146,10 + GROUPBOX "C/C++Cfgڍאݒ",IDC_STATIC,3,159,295,40,WS_GROUP +END + +IDD_PROP_REGEX DIALOGEX 0, 0, 302, 244 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + CONTROL "K\L[[hgp(&R)",IDC_CHECK_REGEX,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,5,5,124,10 + RTEXT "BREGONIG.DLL Version",IDC_LABEL_REGEX_VERSION,89,15,208,11,NOT WS_GROUP,WS_EX_TRANSPARENT + GROUPBOX "K\L[[h(&K)",IDC_FRAME_REGEX,3,24,295,169 + CONTROL "List5",IDC_LIST_REGEX,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOLABELWRAP | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,8,36,243,115 + LTEXT "K\(&N)",IDC_LABEL_REGEX_KEYWORD,13,157,41,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_REGEX,59,155,192,14,ES_AUTOHSCROLL + LTEXT "Fw(&C)",IDC_LABEL_REGEX_COLOR,20,174,34,10,NOT WS_GROUP + COMBOBOX IDC_COMBO_REGEX_COLOR,59,172,128,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "}(&S)",IDC_BUTTON_REGEX_INS,255,118,38,15 + PUSHBUTTON "lj(&A)",IDC_BUTTON_REGEX_ADD,255,136,38,15 + PUSHBUTTON "XV(&E)",IDC_BUTTON_REGEX_UPD,255,154,38,15 + PUSHBUTTON "폜(&D)",IDC_BUTTON_REGEX_DEL,255,172,38,15 + PUSHBUTTON "擪(&T)",IDC_BUTTON_REGEX_TOP,255,36,38,15 + PUSHBUTTON "(&U)",IDC_BUTTON_REGEX_UP,255,54,38,15 + PUSHBUTTON "(&G)",IDC_BUTTON_REGEX_DOWN,255,72,38,15 + PUSHBUTTON "ŏI(&B)",IDC_BUTTON_REGEX_LAST,255,90,38,15 + PUSHBUTTON "C|[g(&I)...",IDC_BUTTON_REGEX_IMPORT,173,196,60,14,WS_GROUP + PUSHBUTTON "GNX|[g(&X)...",IDC_BUTTON_REGEX_EXPORT,236,196,60,14 + LTEXT "[Fw]ŁuURLvIƃ}b`񂪃NbJuɂȂ܂",IDC_STATIC,14,195,138,20 +END + +IDD_PROP_KEYHELP DIALOGEX 0, 0, 302, 244 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + CONTROL "L[[hwv@\g(&K)",IDC_CHECK_KEYHELP,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,5,6,114,10 + GROUPBOX "t@Cꗗ(&L)",IDC_FRAME_KEYHELP,3,21,295,174 + CONTROL "List5",IDC_LIST_KEYHELP,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOLABELWRAP | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,8,33,238,118 + LTEXT "<̐>",IDC_LABEL_KEYHELP_TITLE,10,159,50,10,NOT WS_GROUP + LTEXT "t@C̊Tv",IDC_LABEL_KEYHELP_ABOUT,61,159,185,10,NOT WS_GROUP,WS_EX_TRANSPARENT + LTEXT "t@C",IDC_LABEL_KEYHELP_KEYWORD,13,173,41,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_KEYHELP,61,172,170,12,ES_AUTOHSCROLL + PUSHBUTTON "...",IDC_BUTTON_KEYHELP_REF,234,172,12,13,WS_GROUP + LTEXT "Dx()",IDC_LABEL_KEYHELP_PRIOR,249,33,44,10,NOT WS_GROUP + PUSHBUTTON "}(&S)",IDC_BUTTON_KEYHELP_INS,251,136,38,15 + PUSHBUTTON "XV(&E)",IDC_BUTTON_KEYHELP_UPD,251,154,38,15 + PUSHBUTTON "폜(&D)",IDC_BUTTON_KEYHELP_DEL,251,172,38,15 + PUSHBUTTON "擪(&T)",IDC_BUTTON_KEYHELP_TOP,251,44,38,15 + PUSHBUTTON "(&U)",IDC_BUTTON_KEYHELP_UP,251,62,38,15 + PUSHBUTTON "(&G)",IDC_BUTTON_KEYHELP_DOWN,251,80,38,15 + PUSHBUTTON "ŏI(&B)",IDC_BUTTON_KEYHELP_LAST,251,98,38,15 + PUSHBUTTON "C|[g(&I)...",IDC_BUTTON_KEYHELP_IMPORT,173,199,60,14,WS_GROUP + PUSHBUTTON "GNX|[g(&X)...",IDC_BUTTON_KEYHELP_EXPORT,236,199,60,14 + CONTROL "qbg̎(&A)",IDC_CHECK_KEYHELP_ALLSEARCH,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,7,200,105,10 + CONTROL "L[[h\(&W)",IDC_CHECK_KEYHELP_KEYDISP,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,7,212,95,10 + CONTROL "I͈͂őOv(&P)",IDC_CHECK_KEYHELP_PREFIX,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,7,224,108,10 + LTEXT "ENbNj[(&R)",IDC_STATIC_MENU,120,225,70,10,NOT WS_GROUP + COMBOBOX IDC_COMBO_MENU,192,223,60,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP +END + +IDD_PROP_WINDOW DIALOGEX 0, 0, 302, 244 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + LTEXT "̓[h",IDC_STATIC,5,6,40,10 + LTEXT "sR[h(&E)",IDC_STATIC,8,34,46,10 + COMBOBOX IDC_COMBO_DEFAULT_EOLTYPE,57,32,52,57,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "&BOM",IDC_CHECK_DEFAULT_BOM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,33,30,10 + LTEXT "R[h(&C)",IDC_STATIC,8,49,46,10 + COMBOBOX IDC_COMBO_DEFAULT_CODETYPE,57,48,52,57,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,49,25,10 + CONTROL "ʎCESU-8 D悷(&U)",IDC_CHECK_PRIOR_CESU8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,64,135,10 + GROUPBOX "ftHg̕R[h",IDC_STATIC,3,20,145,62 + LTEXT "ON/OFF(&M)",IDC_STATIC,169,34,55,10 + COMBOBOX IDC_COMBO_IMESWITCH,232,32,61,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "̓[h(&D)",IDC_STATIC,179,50,45,10 + COMBOBOX IDC_COMBO_IMESTATE,232,48,61,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "NIME ({͕ϊ)",IDC_STATIC,153,20,145,62 + CONTROL "",IDC_STATIC,"Static",SS_ETCHEDFRAME,5,88,293,1 + LTEXT "EBhE",IDC_STATIC,5,96,36,10 + CONTROL "ACRg(&O)",IDC_CHECK_DOCICON,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,107,86,10 + CONTROL "܂ԂP(&R)",IDC_RADIO_LINENUM_LAYOUT,"Button",BS_AUTORADIOBUTTON | WS_GROUP,8,134,64,10 + CONTROL "sP(&W)",IDC_RADIO_LINENUM_CRLF,"Button",BS_AUTORADIOBUTTON,8,149,64,10 + LTEXT "",IDC_STATIC,18,165,16,10 + EDITTEXT IDC_EDIT_LINENUMWIDTH,41,163,31,12,ES_AUTOHSCROLL + CONTROL "Spin3",IDC_SPIN_LINENUMWIDTH,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,61,163,9,12 + GROUPBOX "sԍ̕\",IDC_STATIC,4,122,70,59,WS_GROUP + CONTROL "Ȃ(&N)",IDC_RADIO_LINETERMTYPE0,"Button",BS_AUTORADIOBUTTON | WS_GROUP,83,134,39,10 + CONTROL "c(&V)",IDC_RADIO_LINETERMTYPE1,"Button",BS_AUTORADIOBUTTON,83,149,41,10 + CONTROL "C(&Y)",IDC_RADIO_LINETERMTYPE2,"Button",BS_AUTORADIOBUTTON,83,164,41,10 + LTEXT "p(&S)",IDC_LABEL_LINETERMCHAR,93,178,26,10 + EDITTEXT IDC_EDIT_LINETERMCHAR,124,177,15,12,ES_AUTOHSCROLL + GROUPBOX "sԍ؂",IDC_STATIC,78,122,70,80 + EDITTEXT IDC_EDIT_BACKIMG_PATH,158,134,122,12,ES_AUTOHSCROLL + PUSHBUTTON "...",IDC_BUTTON_BACKIMG_PATH_SEL,282,134,12,12 + LTEXT "\ʒu",IDC_STATIC,158,150,40,10 + COMBOBOX IDC_COMBO_BACKIMG_POS,158,163,39,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "X",IDC_STATIC,200,165,8,10 + LTEXT "Y",IDC_STATIC,200,180,8,10 + LTEXT "Offset",IDC_STATIC,210,150,25,10 + EDITTEXT IDC_EDIT_BACKIMG_OFFSET_X,210,163,20,12 + EDITTEXT IDC_EDIT_BACKIMG_OFFSET_Y,210,178,20,12 + LTEXT "Repeat",IDC_STATIC,235,150,26,10 + CONTROL "",IDC_CHECK_BACKIMG_REP_X,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,243,164,10,10 + CONTROL "",IDC_CHECK_BACKIMG_REP_Y,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,243,179,10,10 + LTEXT "Scroll",IDC_STATIC,270,150,26,10 + CONTROL "",IDC_CHECK_BACKIMG_SCR_X,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,276,164,10,10 + CONTROL "",IDC_CHECK_BACKIMG_SCR_Y,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,276,179,10,10 + LTEXT "x",IDC_STATIC,158,194,45,10 + CONTROL "",IDC_TRACKBAR_BACKIMG_TRANSPARENCY,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,205,193,60,12 + EDITTEXT IDC_EDIT_BACKIMG_TRANSPARENCY,265,193,28,12 + CONTROL "Spin1",IDC_UPDOWN_BACKIMG_TRANSPARENCY,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,285,193,9,12 + GROUPBOX "wi摜",IDC_STATIC,153,122,145,90 +END + +IDD_DIALOG_KEYWORD_SELECT DIALOGEX 0, 0, 177, 197 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "L[[h̐ݒ" +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "&OK",IDOK,31,176,50,14 + PUSHBUTTON "LZ(&X)",IDCANCEL,91,176,50,14 + LTEXT "L[[h&1",IDC_STATIC,7,15,54,13 + COMBOBOX IDC_COMBO1,68,13,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "L[[h&2",IDC_STATIC,7,31,54,13 + COMBOBOX IDC_COMBO2,68,29,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "L[[h&3",IDC_STATIC,7,48,54,13 + COMBOBOX IDC_COMBO3,68,45,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "L[[h&4",IDC_STATIC,7,63,54,13 + COMBOBOX IDC_COMBO4,68,61,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "L[[h&5",IDC_STATIC,7,80,54,13 + COMBOBOX IDC_COMBO5,68,77,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "L[[h&6",IDC_STATIC,7,95,54,13 + COMBOBOX IDC_COMBO6,68,93,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "L[[h&7",IDC_STATIC,7,111,54,13 + COMBOBOX IDC_COMBO7,68,109,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "L[[h&8",IDC_STATIC,7,126,54,13 + COMBOBOX IDC_COMBO8,68,125,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "L[[h&9",IDC_STATIC,7,143,54,13 + COMBOBOX IDC_COMBO9,68,141,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "L[[h1&0",IDC_STATIC,7,159,58,13 + COMBOBOX IDC_COMBO10,68,157,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP +END + +IDD_SAMECOLOR DIALOGEX 0, 0, 183, 206 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "F" +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + LTEXT "F",IDC_STATIC,7,13,24,10 + LTEXT "Static",IDC_STATIC_COLOR,35,10,86,14,SS_CENTERIMAGE + LTEXT "ύXΏۂ̐F(&C)IŃ`FbNԂɂĂ",IDC_STATIC,7,29,166,10 + LISTBOX IDC_LIST_COLORS,7,41,114,90,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "S`FbN(&A)",IDC_BUTTON_SELALL,125,70,49,14 + PUSHBUTTON "S(&N)",IDC_BUTTON_SELNOTING,125,89,49,14 + LISTBOX IDC_LIST_ITEMINFO,7,143,114,35,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL + DEFPUSHBUTTON "&OK",IDOK,15,185,49,14 + PUSHBUTTON "LZ(&X)",IDCANCEL,67,185,49,14 + PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,119,185,49,14 +END + +IDD_PROP_GENERAL DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + GROUPBOX "J[\",IDC_STATIC,3,3,149,90 + CONTROL "t[J[\(&F)",IDC_CHECK_FREECARET,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,16,120,10 + CONTROL "PPʂňړƂ\nP̗[Ɏ~܂(&B)",IDC_CHECK_STOPS_BOTH_ENDS_WHEN_SEARCH_WORD, + "Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP,8,28,120,20 + CONTROL "iPʂňړƂ\ni̗[Ɏ~܂(&P)",IDC_CHECK_STOPS_BOTH_ENDS_WHEN_SEARCH_PARAGRAPH, + "Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP,8,48,120,20 + CONTROL "}EXNbNł̃ANeBuł\nJ[\ړȂ(&O)",IDC_CHECK_NOMOVE_ACTIVATE_BY_MOUSE, + "Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP,8,68,133,20 + GROUPBOX "J[\`",IDC_STATIC,3,93,149,26,WS_GROUP + CONTROL "&Windows",IDC_RADIO_CARETTYPE0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,8,104,61,10 + CONTROL "MS-&DOS",IDC_RADIO_CARETTYPE1,"Button",BS_AUTORADIOBUTTON,69,104,61,10 + GROUPBOX "^XNgC",IDC_STATIC,3,122,149,68,WS_GROUP + CONTROL "^XNgCg(&T)",IDC_CHECK_USETRAYICON,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,135,81,10 + CONTROL "^XNgCɏ풓(&R)",IDC_CHECK_STAYTASKTRAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,148,104,10 + LTEXT "NbNj[̃V[gJbgL[(&K)",IDC_STATIC,8,161,131,10 + CONTROL "HotKey1",IDC_HOTKEY_TRAYMENU,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,8,172,95,12 + CONTROL "ɕ̕ҏWpEBhE\n‚ƂmF(&U)",IDC_CHECK_CLOSEALLCONFIRM, + "Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP,8,194,124,20 + CONTROL "TNGfB^̑SIŕҏWp\nEBhE‚ƂmF(&V)",IDC_CHECK_EXITCONFIRM, + "Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP,8,214,124,20 + GROUPBOX "XN[",IDC_STATIC,158,3,130,135,WS_GROUP + LTEXT "s(&N)",IDC_STATIC,163,19,29,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_REPEATEDSCROLLLINENUM,196,17,40,12,ES_AUTOHSCROLL | WS_GROUP + CONTROL "Spin3",IDC_SPIN_REPEATEDSCROLLLINENUM,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,236,17,9,12 + CONTROL "炩ɂ(&S)",IDC_CHECK_REPEATEDSCROLLSMOOTH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,163,33,80,10 + LTEXT "gݍ킹ăzC[삵\ny[WXN[(&J)",IDC_STATIC,163,48,110,20,NOT WS_GROUP + COMBOBOX IDC_COMBO_WHEEL_PAGESCROLL,178,72,85,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "gݍ킹ăzC[삵\nXN[(&H)",IDC_STATIC,163,90,111,20,NOT WS_GROUP + COMBOBOX IDC_COMBO_WHEEL_HSCROLL,178,114,85,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "ʃLbVg(&G)",IDC_CHECK_MEMDC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,163,142,96,16 + GROUPBOX "",IDC_STATIC,158,160,130,74,WS_GROUP + LTEXT "t@C̗&MAX",IDC_STATIC,163,172,74,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_MAX_MRU_FILE,168,184,28,12,ES_AUTOHSCROLL | WS_GROUP + CONTROL "Spin1",IDC_SPIN_MAX_MRU_FILE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,196,184,9,12 + PUSHBUTTON "NA(&C)...",IDC_BUTTON_CLEAR_MRU_FILE,208,184,61,14 + LTEXT "tH_̗MA&X",IDC_STATIC,163,202,74,10 + EDITTEXT IDC_EDIT_MAX_MRU_FOLDER,168,214,28,12,ES_AUTOHSCROLL | WS_GROUP + CONTROL "Spin1",IDC_SPIN_MAX_MRU_FOLDER,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,196,214,9,12 + PUSHBUTTON "NA(&L)...",IDC_BUTTON_CLEAR_MRU_FOLDER,208,214,61,14 +END + +IDD_PROP_WIN DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + CONTROL "c[o[\(&T)",IDC_CHECK_DispTOOLBAR,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,17,76,10 + CONTROL "t@NVL[\(&K)",IDC_CHECK_DispFUNCKEYWND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,30,96,10 + CONTROL "Xe[^Xo[\(&S)",IDC_CHECK_DispSTATUSBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,43,88,10 + CONTROL "XN[o[(&R)",IDC_CHECK_bScrollBarHorz,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,104,17,89,10 + CONTROL "ACRtj[(&I)",IDC_CHECK_bMenuIcon,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,195,17,87,10 + PUSHBUTTON "ʒuƑ傫̐ݒ(&W)...",IDC_BUTTON_WINSIZE,202,35,83,14 + LTEXT "^uo[\\n[^uo[]^uɂ܂",IDC_STATIC,111,32,83,20 + GROUPBOX "{ݒ",IDC_STATIC,3,3,285,57,WS_GROUP + LTEXT "[[̍(&E)",IDC_STATIC,7,76,58,10 + EDITTEXT IDC_EDIT_nRulerHeight,101,74,28,12,ES_AUTOHSCROLL + CONTROL "Spin1",IDC_SPIN_nRulerHeight,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,124,74,10,12 + LTEXT "hbg",IDC_STATIC,133,76,17,10 + LTEXT "[[ƃeLXǧ(&P)",IDC_STATIC,7,89,91,10 + EDITTEXT IDC_EDIT_nRulerBottomSpace,101,88,28,12,ES_AUTOHSCROLL + CONTROL "Spin1",IDC_SPIN_nRulerBottomSpace,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,124,87,10,12 + LTEXT "hbg",IDC_STATIC,133,89,17,10 + LTEXT "sԍƃeLXǧ(&L)",IDC_STATIC,7,104,86,10 + EDITTEXT IDC_EDIT_nLineNumberRightSpace,101,102,28,12,ES_AUTOHSCROLL + CONTROL "Spin1",IDC_SPIN_nLineNumberRightSpace,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,124,102,10,12 + LTEXT "hbg",IDC_STATIC,133,104,17,10 + GROUPBOX "[[ / sԍ",IDC_STATIC,3,64,153,54 + CONTROL "XN[̓Ƃ(&V)",IDC_CHECK_SplitterWndVScroll,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,134,115,10 + CONTROL "XN[̓Ƃ(&H)",IDC_CHECK_SplitterWndHScroll,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,147,116,10 + GROUPBOX "EBhE",IDC_STATIC,3,122,153,39,WS_GROUP + LTEXT "ʒu",IDC_STATIC,167,76,16,10 + CONTROL "(&O)",IDC_RADIO_FUNCKEYWND_PLACE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,191,76,34,10 + CONTROL "(&B)",IDC_RADIO_FUNCKEYWND_PLACE2,"Button",BS_AUTORADIOBUTTON,227,76,34,10 + LTEXT "O[v{^(&G)",IDC_STATIC,167,89,67,10 + EDITTEXT IDC_EDIT_FUNCKEYWND_GROUPNUM,236,88,28,12,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "Spin1",IDC_SPIN_FUNCKEYWND_GROUPNUM,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,262,88,10,12 + GROUPBOX "t@NVL[",IDC_STATIC,162,64,126,40 + LTEXT "ANeBu(&1)",IDC_STATIC,7,179,59,10 + EDITTEXT IDC_WINCAPTION_ACTIVE,67,176,216,14,ES_AUTOHSCROLL + LTEXT "ANeBu(&2)",IDC_STATIC,7,196,58,10 + EDITTEXT IDC_WINCAPTION_INACTIVE,67,193,216,14,ES_AUTOHSCROLL + GROUPBOX "^Cgo[",IDC_STATIC,3,165,285,47 + GROUPBOX "",IDC_STATIC,162,108,126,40 + COMBOBOX IDC_COMBO_LANGUAGE,178,126,105,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP +END + +IDD_PROP_TOOLBAR DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + RTEXT "(&K)",IDC_LABEL_MENUFUNCKIND,4,4,51,10 + COMBOBOX IDC_COMBO_FUNCKIND,56,2,70,170,CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + LTEXT "@\(&F)",IDC_LABEL_MENUFUNC,3,15,40,10 + LISTBOX IDC_LIST_FUNC,3,25,123,199,LBS_OWNERDRAWFIXED | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + CONTROL "tbgȃ{^(&L)",IDC_CHECK_TOOLBARISFLAT,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,202,2,73,10 + LTEXT "c[o[(&T)",IDC_LABEL_TOOLBAR,164,15,46,10 + LISTBOX IDC_LIST_RES,164,25,123,199,LBS_OWNERDRAWFIXED | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + PUSHBUTTON "폜(&D)",IDC_BUTTON_DELETE,129,32,33,14,WS_GROUP + PUSHBUTTON "---(&S)",IDC_BUTTON_INSERTSEPARATOR,129,51,33,14 + PUSHBUTTON "(&A)",IDC_BUTTON_INSERT,129,71,33,14 + PUSHBUTTON ">>(&B)",IDC_BUTTON_ADD,129,85,33,14 + PUSHBUTTON "(&U)",IDC_BUTTON_UP,129,105,33,14 + PUSHBUTTON "(&O)",IDC_BUTTON_DOWN,129,119,33,14 + PUSHBUTTON "ܕ(&W)",IDC_BUTTON_INSERTWRAP,129,151,33,14 +END + +IDD_PROP_TAB DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP | WS_EX_COMPOSITED +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + CONTROL "^uo[\(&D)",IDC_CHECK_DispTabWnd,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,11,111,10 + CONTROL "EBhE܂Ƃ߂ăO[v(&B)",IDC_CHECK_DispTabWndMultiWin, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,40,239,10 + CONTROL "Ō̃t@C‚Ƃ()c(&R)",IDC_CHECK_RetainEmptyWindow, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,24,53,226,10 + CONTROL "EBhE̕‚{^݂͌̃t@Ĉݕ‚(&C)",IDC_CHECK_CloseOneWin, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,24,66,226,10 + CONTROL "ONƂ͐VEChEŊJ(&O)",IDC_CHECK_OpenNewWin,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,24,79,170,10 + GROUPBOX "샂[h",IDC_STATIC,7,27,280,68 + CONTROL "ACR\(&I)",IDC_CHECK_DispTabIcon,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,115,63,10 + CONTROL "(&E)",IDC_CHECK_SameTabWidth,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,80,115,39,10 + LTEXT "‚{^(&X)",IDC_TextTabClose,124,116,48,10 + COMBOBOX IDC_CHECK_DispTabClose,173,113,46,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "tHg(&F)...",IDC_BUTTON_TABFONT,232,113,51,14 + RTEXT "Font",IDC_STATIC_TABFONT,102,127,180,12 + CONTROL "^uꗗ\[g(&S)",IDC_CHECK_SortTabList,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,129,85,10 + CONTROL "i(&M)",IDC_CHECK_TAB_MULTILINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,141,60,10 + RTEXT "\ʒu(&P)",IDC_TAB_POSITION,80,143,40,10 + COMBOBOX IDC_COMBO_TAB_POSITION,124,140,46,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "^Cg(&T)",IDC_TextTabCaption,15,160,40,10 + EDITTEXT IDC_TABWND_CAPTION,56,157,226,14,ES_AUTOHSCROLL + GROUPBOX "^ůO",IDC_STATIC,7,102,280,76,WS_GROUP + CONTROL "}EXzC[Ń^uؑ(&W)",IDC_CHECK_ChgWndByWheel,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,196,127,10 + GROUPBOX "̑",IDC_STATIC,7,184,280,28,WS_GROUP +END + +IDD_PROP_STATUSBAR DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + GROUPBOX "\R[h̎w",IDC_STATIC,3,3,285,92 + CONTROL "SJIS, Latin1ŕR[hlUnicodeŕ\(&S)",IDC_CHECK_DISP_UNICODE_IN_SJIS, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,16,205,10 + CONTROL "JISŕR[hlUnicodeŕ\(&J)",IDC_CHECK_DISP_UNICODE_IN_JIS, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,32,205,10 + CONTROL "EUCŕR[hlUnicodeŕ\(&E)",IDC_CHECK_DISP_UNICODE_IN_EUC, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,48,205,10 + CONTROL "UTF-8CESU-8R[h|Cgŕ\(&8)",IDC_CHECK_DISP_UTF8_CODEPOINT, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,64,205,10 + CONTROL "TQ[gyAR[h|Cgŕ\(&P)",IDC_CHECK_DISP_SP_CODEPOINT, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,80,205,10 + GROUPBOX "\̎w",IDC_STATIC,3,98,285,47 + CONTROL "I𕶎𕶎Pʂł͂ȂoCgPʂŕ\(&B)@ׂ̂ߔ񐄏",IDC_CHECK_DISP_SELCOUNT_BY_BYTE, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,112,274,10 + CONTROL "݌[[Pʂł͂ȂPʂŕ\(&C)",IDC_CHECK_DISP_COL_BY_CHAR, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,128,274,10 +END + +IDD_PROP_EDIT DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + CONTROL "܂ԂsɉstăRs[(&C)",IDC_CHECK_ADDCRLFWHENCOPY,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,16,131,10 + CONTROL "Rs[I(&R)",IDC_CHECK_COPYnDISABLESELECTEDAREA, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,29,131,10 + CONTROL "IȂŃRs[”\ɂ(&E)",IDC_CHECK_bEnableNoSelectCopy, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,42,131,10 + CONTROL "C[h\t”\ɂ(&L)",IDC_CHECK_bEnableLineModePaste, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,55,131,10 + CONTROL "sR[hϊē\t(&P)",IDC_CHECK_CONVERTEOLPASTE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,68,131,10 + GROUPBOX "Rs[",IDC_STATIC,3,3,137,81,WS_GROUP + CONTROL "hbO && hbvҏW(&D)",IDC_CHECK_DRAGDROP,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,104,131,10 + CONTROL "hbvɂ(&S)",IDC_CHECK_DROPSOURCE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,117,131,10 + GROUPBOX "hbO && hbv",IDC_STATIC,3,91,137,43,WS_GROUP + CONTROL "sR[h͏㏑Ȃ(&N)",IDC_CHECK_bNotOverWriteCRLF,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,156,131,10 + CONTROL "ɍ킹ăXy[Xl߂(&F)",IDC_CHECK_bOverWriteFixMode, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,169,131,10 + CONTROL "`͂őI͈͂폜(&G)",IDC_CHECK_bOverWriteBoxDelete, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,182,131,10 + GROUPBOX "㏑[h",IDC_STATIC,3,143,137,58,WS_GROUP + CONTROL "NbN&URLI",IDC_CHECK_bSelectClickedURL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,149,18,120,10 + GROUPBOX "NbJuURL",IDC_STATIC,144,3,142,35,WS_GROUP + CONTROL "JgtH_(&U)",IDC_RADIO_CURDIR,"Button",BS_AUTORADIOBUTTON,149,54,90,10 + CONTROL "ŋߎgtH_(&M)",IDC_RADIO_MRUDIR,"Button",BS_AUTORADIOBUTTON,149,69,90,10 + CONTROL "wtH_(&F)",IDC_RADIO_SELDIR,"Button",BS_AUTORADIOBUTTON,149,84,90,10 + EDITTEXT IDC_EDIT_FILEOPENDIR,149,100,111,12,ES_AUTOHSCROLL + PUSHBUTTON "...",IDC_BUTTON_FILEOPENDIR,261,100,9,12 + GROUPBOX "t@C_CAȌʒu",IDC_STATIC,144,41,142,79,WS_GROUP + CONTROL "VistaX^C̃t@C_CAO(&I)",IDC_CHECK_VISTA_STYLE_FILEDIALOG, + "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,149,128,137,10 + CONTROL "sR[hNEL, PS, LSLɂ(&O)",IDC_CHECK_ENABLEEXTEOL, + "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,149,158,134,10 + CONTROL "`IړőIbN(&B)",IDC_CHECK_BOXSELECTLOCK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,149,171,134,10 + GROUPBOX "̑",IDC_STATIC,144,145,142,42,WS_GROUP +END + +IDD_PROP_FILE DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + LTEXT "r(&H)",IDC_STATIC,8,18,48,10 + COMBOBOX IDC_COMBO_FILESHAREMODE,60,16,84,78,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "XV̊Ď(&W)",IDC_CHECK_bCheckFileTimeStamp,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,33,60,10 + LTEXT "Ǎx(&A)",IDC_LABEL_AUTOLOAD_DELAY,68,33,62,10 + EDITTEXT IDC_EDIT_AUTOLOAD_DELAY,130,33,30,12 + CONTROL "Spin1",IDC_SPIN_AUTOLOAD_DELAY,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,150,33,9,12 + CONTROL "㏑֎~o͕ҏW֎~ɂ(&N)",IDC_CHECK_bUneditableIfUnwritable, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,46,154,10 + GROUPBOX "t@C̔r",IDC_STATIC,3,3,163,57,WS_GROUP + CONTROL "ύXł㏑(&S)",IDC_CHECK_ENABLEUNMODIFIEDOVERWRITE, + "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,175,16,111,10 + CONTROL "Iɕۑ(&U)",IDC_CHECK_AUTOSAVE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,175,31,84,10 + LTEXT "Ԋu(&I)",IDC_LABEL_AUTOSAVE,186,47,31,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_AUTOBACKUP_INTERVAL,219,45,30,12 + CONTROL "Spin1",IDC_SPIN_AUTOBACKUP_INTERVAL,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,266,45,9,12 + LTEXT "",IDC_LABEL_AUTOSAVE2,250,47,21,10,NOT WS_GROUP + GROUPBOX "t@C̕ۑ",IDC_STATIC,170,3,118,57,WS_GROUP + CONTROL "VKۑ͑St@C\(&O)",IDC_CHECK_NoFilterSaveNew,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,77,133,10 + CONTROL "VKȊOۑ͑St@C\(&F)",IDC_CHECK_NoFilterSaveFile, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,142,77,142,10 + GROUPBOX "uOtĕۑvŃt@C̎ނ[[U[w]̂Ƃ̃t@Cꗗ\",IDC_STATIC,3,65,285,28 + CONTROL "t@C̃hbv́u‚ĊJvɂ(&L)",IDC_CHECK_bDropFileAndClose, + "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,110,149,10 + LTEXT "t@C̃hbv͈x&MAX",IDC_LABEL_AUTOSAVE3,18,126,101,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_nDropFileNumMax,123,124,25,12,ES_AUTOHSCROLL + CONTROL "Spin1",IDC_SPIN_nDropFileNumMax,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,179,124,9,12 + LTEXT "‚܂łƂ",IDC_LABEL_AUTOSAVE4,151,126,41,10,NOT WS_GROUP + LTEXT "Fhbvt@C1‚̂ݗL",IDC_LANEL_NOTE,161,111,116,10 + CONTROL "t@CJƂɃJ[\ʒu𕜌(&C)",IDC_CHECK_RestoreCurPosition, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,140,174,10 + CONTROL "t@CJƂɃubN}[N𕜌(&B)",IDC_CHECK_RestoreBookmarks, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,155,214,10 + CONTROL "t@CJƂMIMEGR[hꂽwb_fR[h(&D)",IDC_CHECK_AutoMIMEDecode, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,169,231,10 + CONTROL "OƈقȂ镶R[ĥƂ₢킹s(&Q)",IDC_CHECK_QueryIfCodeChange, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,182,223,13 + CONTROL "JƂt@C݂ȂƂx(&E)",IDC_CHECK_AlertIfFileNotExist, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,198,223,10 + CONTROL "JƂt@C傫ꍇɌx(&T)",IDC_CHECK_ALERT_IF_LARGEFILE, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,214,167,10 + EDITTEXT IDC_EDIT_ALERT_FILESIZE,181,212,30,12,ES_AUTOHSCROLL + CONTROL "Spin1",IDC_SPIN_ALERT_FILESIZE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,240,211,9,14 + LTEXT "MB",IDC_STATIC,214,214,25,10 + GROUPBOX "t@CI[v",IDC_STATIC,3,97,285,135,WS_GROUP +END + +IDD_PROP_FNAME DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + CONTROL "pX̏ȗ\(&L)",IDC_CHECK_SHORTPATH,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,6,3,100,10 + LTEXT "(&N)",IDC_STATIC,109,4,45,10 + EDITTEXT IDC_EDIT_SHORTMAXWIDTH,155,3,30,13,ES_NUMBER + GROUPBOX "t@C̊ȈՕ\(&I)",IDC_STATIC,6,20,282,180 + CONTROL "List1",IDC_LIST_FNAME,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_AUTOARRANGE | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,12,35,230,117 + LTEXT "uO(&F)",IDC_STATIC,13,161,37,10 + EDITTEXT IDC_EDIT_FNAME_FROM,50,160,191,13,ES_AUTOHSCROLL + LTEXT "u(&R)",IDC_STATIC,13,180,37,10 + EDITTEXT IDC_EDIT_FNAME_TO,50,177,191,13,ES_AUTOHSCROLL + PUSHBUTTON "}(&S)",IDC_BUTTON_FNAME_INS,245,123,38,15 + PUSHBUTTON "lj(&A)",IDC_BUTTON_FNAME_ADD,245,141,38,15 + PUSHBUTTON "XV(&E)",IDC_BUTTON_FNAME_UPD,245,159,38,15 + PUSHBUTTON "폜(&D)",IDC_BUTTON_FNAME_DEL,245,177,38,15 + PUSHBUTTON "擪(&T)",IDC_BUTTON_FNAME_TOP,245,43,38,15 + PUSHBUTTON "(&U)",IDC_BUTTON_FNAME_UP,245,61,38,15 + PUSHBUTTON "(&G)",IDC_BUTTON_FNAME_DOWN,245,79,38,15 + PUSHBUTTON "ŏI(&B)",IDC_BUTTON_FNAME_LAST,245,97,38,15 +END + +IDD_PROP_BACKUP DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + GROUPBOX "obNAbv̍쐬",IDC_STATIC,3,3,285,207,WS_GROUP + CONTROL "ۑɃobNAbv쐬(&K)",IDC_CHECK_BACKUP,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,16,136,10 + CONTROL "ڍאݒ肷(&A)",IDC_CHECK_BACKUP_ADVANCED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,32,79,10 + EDITTEXT IDC_EDIT_BACKUPFILE,24,44,255,13,ES_AUTOHSCROLL + CONTROL "gq .bakɕύX(1 &B)",IDC_RADIO_BACKUP_TYPE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,12,66,142,10 + CONTROL "gqA(.b00`b98)ɕύX(&G)",IDC_RADIO_BACKUP_TYPE3, + "Button",BS_AUTORADIOBUTTON,12,80,156,10 + CONTROL "t@Čɕۑ̓tEt(&E)",IDC_RADIO_BACKUP_DATETYPE1, + "Button",BS_AUTORADIOBUTTON,12,106,204,10 + CONTROL "t@ČɑO̕ۑ̓tEt(&U)",IDC_RADIO_BACKUP_DATETYPE2, + "Button",BS_AUTORADIOBUTTON,12,120,230,10 + CONTROL "̊gqۑ(&R)",IDC_CHECK_BACKUP_RETAINEXT,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,162,66,96,10 + LTEXT "ۑ鐢㐔(1-99 &N)",IDC_LABEL_BACKUP_3,22,94,91,10 + EDITTEXT IDC_EDIT_BACKUP_3,106,92,28,12 + CONTROL "Spin1",IDC_SPIN_BACKUP_GENS,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,154,92,9,12 + CONTROL "(&Y)",IDC_CHECK_BACKUP_YEAR,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,22,132,35,10 + CONTROL "(&M)",IDC_CHECK_BACKUP_MONTH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,132,34,10 + CONTROL "(&D)",IDC_CHECK_BACKUP_DAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,97,132,34,10 + CONTROL "(&H)",IDC_CHECK_BACKUP_HOUR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,134,132,34,10 + CONTROL "(&I)",IDC_CHECK_BACKUP_MIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,171,132,31,10 + CONTROL "b(&S)",IDC_CHECK_BACKUP_SEC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,132,33,10 + LTEXT "",IDC_STATIC,12,60,271,83,NOT WS_VISIBLE + CONTROL "ۑ̓tEgp",IDC_RADIO_BACKUP_DATETYPE1A,"Button",BS_AUTORADIOBUTTON | WS_GROUP,12,104,111,10 + CONTROL "Õt@CXV̓tEgp",IDC_RADIO_BACKUP_DATETYPE2A,"Button",BS_AUTORADIOBUTTON,12,118,149,10 + LTEXT "$x : x̃tH_(0-9)\r* : gq\r\r%Y/%m/%d : N %y(2) \r%H:%M:%S: b \r%% : '%'L\r",IDC_LABEL_BACKUP_HELP2,165,75,115,50,SS_SUNKEN + CONTROL "wtH_ɍ쐬(&P)",IDC_CHECK_BACKUPFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,148,107,10 + CONTROL "[oufBÂ(&L)",IDC_CHECK_BACKUP_FOLDER_RM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,120,148,133,10 + LTEXT "tH_(&F)",IDC_LABEL_BACKUP_4,24,162,87,10 + EDITTEXT IDC_EDIT_BACKUPFOLDER,73,160,195,12,ES_AUTOHSCROLL + PUSHBUTTON "&...",IDC_BUTTON_BACKUP_FOLDER_REF,271,160,9,12 + CONTROL "obNAbvt@Cݔɕ荞(&X)",IDC_CHECK_BACKUP_DUSTBOX, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,176,150,10 + CONTROL "쐬OɊmF(&V)",IDC_CHECK_BACKUPDIALOG,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,12,196,104,10 +END + +IDD_PROP_FORMAT DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + CONTROL "W(&S)",IDC_RADIO_DFORM_0,"Button",BS_AUTORADIOBUTTON | WS_GROUP,8,18,41,10 + CONTROL "JX^(&C)",IDC_RADIO_DFORM_1,"Button",BS_AUTORADIOBUTTON,51,18,52,10 + LTEXT "&D:",IDC_LABEL_DFORM,106,19,8,10 + EDITTEXT IDC_EDIT_DFORM,115,17,82,12,ES_AUTOHSCROLL + GROUPBOX "t",IDC_STATIC,3,3,199,35,WS_GROUP + LTEXT "\",IDC_STATIC,209,7,27,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_DFORM_EX,209,17,77,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_TABSTOP + CONTROL "W(&N)",IDC_RADIO_TFORM_0,"Button",BS_AUTORADIOBUTTON | WS_GROUP,8,58,41,10 + CONTROL "JX^(&U)",IDC_RADIO_TFORM_1,"Button",BS_AUTORADIOBUTTON,51,58,52,10 + LTEXT "&T:",IDC_LABEL_TFORM,106,59,8,10 + EDITTEXT IDC_EDIT_TFORM,115,57,82,12,ES_AUTOHSCROLL + GROUPBOX "",IDC_STATIC,3,43,199,35,WS_GROUP + LTEXT "\",IDC_STATIC,209,47,27,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_TFORM_EX,209,57,77,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_TABSTOP + GROUPBOX "oL(&R)",IDC_STATIC,3,83,283,52,WS_GROUP + EDITTEXT IDC_EDIT_MIDASHIKIGOU,8,95,272,31,ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | WS_GROUP + GROUPBOX "p(&Q)",IDC_STATIC,3,140,283,32,WS_GROUP + EDITTEXT IDC_EDIT_INYOUKIGOU,8,152,270,12,ES_AUTOHSCROLL | WS_GROUP +END + +IDD_PROP_GREP DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + CONTROL "J[\ʒu̕ftHǧɂ(&C)",IDC_CHECK_bCaretTextForSearch, + "Button",BS_AUTOCHECKBOX | BS_TOP | WS_GROUP | WS_TABSTOP,8,21,204,12 + CONTROL "EOő̃r[ł̌ύXp(&I)",IDC_CHECK_INHERIT_KEY_OTHER_VIEW, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,33,209,12 + LTEXT "K\Cuw(&L)",IDC_LABEL_REGEXP,8,50,93,10 + LTEXT "",IDC_LABEL_REGEXP_VER,8,62,275,14 + EDITTEXT IDC_EDIT_REGEXPLIB,110,47,162,13,ES_AUTOHSCROLL + GROUPBOX "^u^Grep",IDC_STATIC,3,7,285,70,WS_GROUP + CONTROL "Grep[hŕۑmF(&V)",IDC_CHECK_bGrepExitConfirm,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,94,130,10 + CONTROL "A^Cŕ\(&R)",IDC_CHECK_GREPREALTIME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,106,111,10 + GROUPBOX "Grep",IDC_STATIC,3,80,285,42,WS_GROUP + CONTROL "G^[L[Ń^OWv(&E)",IDC_CHECK_GTJW_RETURN,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,142,109,10 + CONTROL "_uNbNŃ^OWv(&W)",IDC_CHECK_GTJW_LDBLCLK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,154,115,10 + GROUPBOX "Grepʂ̃^OWv",IDC_STATIC,3,127,285,46,WS_GROUP + GROUPBOX "^OWv",IDC_STATIC,3,178,285,52,WS_GROUP + LTEXT "^Ot@Č(&T):",IDC_STATIC,8,192,112,10 + COMBOBOX IDC_COMBO_TAGJUMP,124,190,156,100,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + LTEXT "L[[hw̃^Ot@C(&K):",IDC_STATIC,8,210,112,10 + COMBOBOX IDC_COMBO_KEYWORD_TAGJUMP,124,208,156,100,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP +END + +IDD_PROP_KEYBIND DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP | WS_EX_COMPOSITED +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + RTEXT "(&K)",IDC_LABEL_MENUFUNCKIND,4,4,51,10 + COMBOBOX IDC_COMBO_FUNCKIND,60,2,68,180,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + LTEXT "@\(&F)",IDC_LABEL_MENUFUNC,3,18,41,10 + LISTBOX IDC_LIST_FUNC,3,28,124,143,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + LTEXT "@\Ɋ蓖ĂĂL[(&G)",IDC_LABEL_FUNCtoKEY,6,173,113,10,NOT WS_GROUP + LISTBOX IDC_LIST_ASSIGNEDKEYS,3,184,124,33,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_GROUP | WS_TABSTOP + PUSHBUTTON "C|[g(&I)...",IDC_BUTTON_IMPORT,171,2,58,14,WS_GROUP + PUSHBUTTON "GNX|[g(&X)...",IDC_BUTTON_EXPORT,231,2,58,14 + LTEXT "L[(&Y)",IDC_LABEL_KEYKIND,164,18,25,10 + LISTBOX IDC_LIST_KEY,165,28,124,164,LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP + CONTROL "&Shift",IDC_CHECK_SHIFT,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,134,38,25,10 + CONTROL "&Ctrl",IDC_CHECK_CTRL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,134,53,25,10 + CONTROL "A&Lt",IDC_CHECK_ALT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,134,68,25,10 + LTEXT "L[Ɋ蓖ĂĂ@\",IDC_LABEL_KEYtoFUNC,166,194,120,10 + EDITTEXT IDC_EDIT_KEYSFUNC,164,205,118,12,ES_AUTOHSCROLL | ES_READONLY | WS_GROUP | NOT WS_TABSTOP + PUSHBUTTON "t(&B)",IDC_BUTTON_ASSIGN,129,190,34,14,WS_GROUP + PUSHBUTTON "(&R)",IDC_BUTTON_RELEASE,129,204,34,14 +END + +IDD_PROP_CUSTMENU DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP | WS_EX_COMPOSITED +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + RTEXT "(&K)",IDC_LABEL_MENUFUNCKIND,4,4,52,10 + COMBOBOX IDC_COMBO_FUNCKIND,60,2,68,180,CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + LTEXT "@\(&F)",IDC_LABEL_MENUFUNC,3,16,40,10,NOT WS_GROUP + LISTBOX IDC_LIST_FUNC,3,27,124,178,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + RTEXT "I(&C)",IDC_LABEL_MENUCHOICE,187,4,31,10 + COMBOBOX IDC_COMBO_MENU,221,2,68,220,CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + LTEXT "j[(&N)",IDC_LABEL_MENUNAME,142,16,64,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_MENUNAME,146,27,109,14,ES_AUTOHSCROLL + PUSHBUTTON "ݒ(&R)",IDC_BUTTON_MENUNAME,258,27,30,14 + LTEXT "j[(&M)",IDC_LABEL_MENU,142,44,37,10,NOT WS_GROUP + LISTBOX IDC_LIST_RES,164,54,123,151,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + PUSHBUTTON "폜(&D)",IDC_BUTTON_DELETE,130,62,30,14,WS_GROUP + PUSHBUTTON "---(&S)",IDC_BUTTON_INSERTSEPARATOR,130,81,30,14,BS_MULTILINE + PUSHBUTTON "(&A)",IDC_BUTTON_INSERT,128,101,34,14 + PUSHBUTTON ">>(&B)",IDC_BUTTON_ADD,128,115,34,14,BS_MULTILINE + PUSHBUTTON "(&U)",IDC_BUTTON_UP,128,135,34,14 + PUSHBUTTON "(&O)",IDC_BUTTON_DOWN,128,149,34,14 + LTEXT "_uNbNŃANZXL[ݒ",IDC_LABEL_MENUKEYCHANGE,174,208,114,10 + CONTROL "Tuj[Ƃĕ\(&S)",IDC_CHECK_SUBMENU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,164,220,114,10 + PUSHBUTTON "C|[g(&I)...",IDC_BUTTON_IMPORT,3,208,58,14,WS_GROUP + PUSHBUTTON "GNX|[g(&X)...",IDC_BUTTON_EXPORT,64,208,58,14 +END + +IDD_PROP_KEYWORD DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + LTEXT "Zbg(&N)",IDC_STATIC,3,6,37,10 + COMBOBOX IDC_COMBO_SET,42,5,85,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Zbglj(&M)...",IDC_BUTTON_ADDSET,181,5,53,14,WS_GROUP + PUSHBUTTON "Zbg폜(&R)...",IDC_BUTTON_DELSET,236,5,52,14 + GROUPBOX "L[[h(&K)",IDC_STATIC,3,22,285,215,WS_GROUP + CONTROL "List5",IDC_LIST_KEYWORD,"SysListView32",LVS_LIST | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_EDITLABELS | LVS_ALIGNLEFT | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP,8,35,274,165 + PUSHBUTTON "lj(&A)...",IDC_BUTTON_ADDKEYWORD,8,203,40,14,WS_GROUP + PUSHBUTTON "ҏW(&E)...",IDC_BUTTON_EDITKEYWORD,50,203,40,14 + PUSHBUTTON "폜(&D)",IDC_BUTTON_DELKEYWORD,92,203,40,14 + CONTROL "p啶(&C)",IDC_CHECK_KEYWORDCASE,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,221,94,10 + PUSHBUTTON "C|[g(&I)...",IDC_BUTTON_IMPORT,166,220,58,14,WS_GROUP + PUSHBUTTON "GNX|[g(&X)...",IDC_BUTTON_EXPORT,227,220,58,14 + RTEXT "(ő 100 o^ 9999 / 9999 )",IDC_STATIC_KEYWORD_COUNT,135,205,142,10 + PUSHBUTTON "ύX(&H)",IDC_BUTTON_KEYSETRENAME,130,5,40,14 + PUSHBUTTON "(&O)",IDC_BUTTON_KEYCLEAN,104,220,45,14 + PUSHBUTTON "OK",IDOK,182,243,50,14 + PUSHBUTTON "LZ(&X)",IDCANCEL,237,243,50,14 +END + +IDD_PROP_HELPER DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + CONTROL "&Enter",IDC_CHECK_m_bHokanKey_RETURN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,59,15,33,10 + CONTROL "&Tab",IDC_CHECK_m_bHokanKey_TAB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,93,15,28,10 + CONTROL "(&R)",IDC_CHECK_m_bHokanKey_RIGHT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,122,15,53,10 + GROUPBOX "͕⊮@\",IDC_STATIC,3,3,285,30,WS_GROUP + LTEXT "⌈L[",IDC_STATIC,7,17,45,10 + GROUPBOX "Owv̐ݒ(&L)",IDC_STATIC,3,37,285,32,WS_GROUP + EDITTEXT IDC_EDIT_EXTHELP1,8,50,253,12,ES_AUTOHSCROLL | WS_GROUP + PUSHBUTTON "(&1)...",IDC_BUTTON_OPENHELP1,264,49,19,14 + GROUPBOX "OHTMLwv̐ݒ(&P)",IDC_STATIC,3,73,285,45,WS_GROUP + EDITTEXT IDC_EDIT_EXTHTMLHELP,8,89,253,12,ES_AUTOHSCROLL | WS_GROUP + PUSHBUTTON "(&2)...",IDC_BUTTON_OPENEXTHTMLHELP,264,88,19,14 + CONTROL "r[A𕡐NȂ(&N)",IDC_CHECK_HTMLHELPISSINGLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,105,108,10 + GROUPBOX "L[[hwv",IDC_STATIC,3,123,285,33,WS_GROUP + RTEXT "Font",IDC_STATIC_KEYWORDHELPFONT,8,136,219,17 + PUSHBUTTON "tHg(&F)...",IDC_BUTTON_KEYWORDHELPFONT,232,136,51,14 + LTEXT "DLL(&M)",IDC_STATIC,7,174,26,10 + EDITTEXT IDC_EDIT_MIGEMO_DLL,36,172,224,12,ES_AUTOHSCROLL | WS_GROUP + PUSHBUTTON "(&3)...",IDC_BUTTON_OPENMDLL,264,171,19,14 + LTEXT "(&I)",IDC_STATIC,7,190,25,10 + EDITTEXT IDC_EDIT_MIGEMO_DICT,36,189,224,12,ES_AUTOHSCROLL + PUSHBUTTON "(&4)...",IDC_BUTTON_OPENMDICT,264,189,19,14 + GROUPBOX "migemoݒ",IDC_STATIC,3,159,287,47,WS_GROUP +END + +IDD_PROP_MACRO DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + LTEXT "}Nꗗ",IDC_STATIC,4,9,36,10 + EDITTEXT IDC_MACRODIR,46,5,199,14,ES_AUTOHSCROLL + PUSHBUTTON "Q(&R)...",IDC_MACRODIRREF,254,5,34,14 + CONTROL "List1",IDC_MACROLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_AUTOARRANGE | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,3,21,285,148 + LTEXT "O(&N)",IDC_STATIC,6,179,32,10 + EDITTEXT IDC_MACRONAME,39,176,203,14,ES_AUTOHSCROLL + LTEXT "&File",IDC_STATIC,6,194,12,10 + COMBOBOX IDC_MACROPATH,39,192,203,130,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP + CONTROL "}Ns邽тɃt@Cǂݍ݂Ȃi&Lj",IDC_CHECK_RELOADWHENEXECUTE, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,211,178,10 + LTEXT "LZmF҂",IDC_STATIC,185,212,75,10 + EDITTEXT IDC_MACROCANCELTIMER,260,209,18,14,ES_AUTOHSCROLL + LTEXT "b",IDC_STATIC,280,212,8,10 + LTEXT "s:",IDC_STATIC,6,225,34,10 + CONTROL "VK^Jt@C(&O)",IDC_CHECK_MacroOnOpened,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,44,224,89,10 + CONTROL "^CvύX(&T)",IDC_CHECK_MacroOnTypeChanged,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,135,224,72,10 + CONTROL "t@CۑO(&S)",IDC_CHECK_MacroOnSave,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,224,69,10 + LTEXT "Id:",IDC_STATIC,249,176,8,10 + COMBOBOX IDC_COMBO_MACROID,260,174,28,129,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "ݒ(&A)",IDC_MACRO_REG,250,190,38,14 +END + +IDD_PROP_PLUGIN DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + CONTROL "vOCLɂ(&E)",IDC_CHECK_PluginEnable,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,9,100,10 + PUSHBUTTON "ZIPvOC𓱓(&Z)",IDC_PLUGIN_INST_ZIP,192,6,96,14 + PUSHBUTTON "tH_J(&F)",IDC_PLUGIN_OpenFolder,120,20,70,14 + PUSHBUTTON "VKvOClj(&I)",IDC_PLUGIN_SearchNew,192,20,96,14 + LTEXT "vOCꗗ",IDC_STATIC,4,28,50,10 + CONTROL "List1",IDC_PLUGINLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_AUTOARRANGE | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,3,41,285,108 + LTEXT "",IDC_STATIC,11,160,50,10 + LTEXT "",IDC_LABEL_PLUGIN_Description,66,160,200,10 + LTEXT "",IDC_STATIC,11,175,50,10 + LTEXT "",IDC_LABEL_PLUGIN_Author,66,175,200,10 + LTEXT "o[W",IDC_STATIC,11,190,50,10 + LTEXT "",IDC_LABEL_PLUGIN_Version,66,190,100,10 + PUSHBUTTON "zz(&D)",IDC_PLUGIN_URL,186,187,80,14 + PUSHBUTTON "폜(&R)",IDC_PLUGIN_Remove,6,205,80,14 + PUSHBUTTON "ݒ(&P)",IDC_PLUGIN_OPTION,96,205,80,14 + PUSHBUTTON "ReadMe(&M)",IDC_PLUGIN_README,186,205,80,14 +END + +IDD_PROP_MAINMENU DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Cj[" +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + RTEXT "(&K)",IDC_LABEL_MENUFUNCKIND,10,6,45,10 + COMBOBOX IDC_COMBO_FUNCKIND,57,4,70,180,CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + LTEXT "@\(&F)",IDC_LABEL_MENUFUNC,4,17,40,10 + LISTBOX IDC_LIST_FUNC,4,28,123,190,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + CONTROL "ANZXL[K( )tŕ\(&P)",IDC_CHECK_KEY_PARENTHESES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,176,4,113,10 + LTEXT "j[(&M)",IDC_LABEL_MENU,166,17,35,10 + CONTROL "&Menu",IDC_TREE_RES,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_EDITLABELS | TVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,166,28,123,190,WS_EX_ACCEPTFILES + PUSHBUTTON "폜(&D)",IDC_BUTTON_DELETE,128,28,37,14,WS_GROUP + PUSHBUTTON "{(&N)",IDC_BUTTON_INSERT_NODE,128,47,37,14 + PUSHBUTTON "---(&S)",IDC_BUTTON_INSERTSEPARATOR,128,61,37,14 + PUSHBUTTON "(&Q)",IDC_BUTTON_INSERT,128,75,37,14 + PUSHBUTTON "(&A)",IDC_BUTTON_INSERT_A,128,89,37,14 + PUSHBUTTON ">>(&B)",IDC_BUTTON_ADD,128,103,37,14 + PUSHBUTTON "(&U)",IDC_BUTTON_UP,128,121,37,14 + PUSHBUTTON "(&O)",IDC_BUTTON_DOWN,128,135,37,14 + PUSHBUTTON "(&R)",IDC_BUTTON_RIGHT,128,149,37,14 + PUSHBUTTON "(&L)",IDC_BUTTON_LEFT,128,163,37,14 + PUSHBUTTON "SJ(&H)",IDC_BUTTON_EXPAND,128,190,37,14 + PUSHBUTTON "S(&Z)",IDC_BUTTON_COLLAPSE,128,204,37,14 + PUSHBUTTON "C|[g(&I)...",IDC_BUTTON_IMPORT,4,222,58,14,WS_GROUP + PUSHBUTTON "GNX|[g(&X)...",IDC_BUTTON_EXPORT,64,222,58,14 + PUSHBUTTON "(&T)",IDC_BUTTON_CHECK,124,222,44,14 + PUSHBUTTON "NA(&C)",IDC_BUTTON_CLEAR,196,222,44,14,WS_GROUP + PUSHBUTTON "ݒ(&E)",IDC_BUTTON_INITIALIZE,245,222,44,14 +END + +IDD_WINPOSSIZE DIALOGEX 0, 0, 177, 159 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "EBhËʒuƑ傫" +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + CONTROL "w肵Ȃ(&D)",IDC_RADIO_WINPOS_DEF,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,15,19,61,10 + CONTROL "p(&I)",IDC_RADIO_WINPOS_SAVE,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,15,32,52,10 + CONTROL "ڎw(&S)",IDC_RADIO_WINPOS_SET,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,15,45,56,10 + LTEXT "XW(&X)",IDC_STATIC,81,29,31,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_WX,115,25,33,14,ES_RIGHT | WS_GROUP + CONTROL "Spin1",IDC_SPIN_WX,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,148,25,10,14 + LTEXT "YW(&Y)",IDC_STATIC,81,43,31,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_WY,115,41,33,14,ES_RIGHT | WS_GROUP + CONTROL "Spin1",IDC_SPIN_WY,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,148,41,10,14 + CONTROL "w肵Ȃ(&E)",IDC_RADIO_WINSIZE_DEF,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,15,79,60,10 + CONTROL "p(&N)",IDC_RADIO_WINSIZE_SAVE,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,15,91,55,10 + CONTROL "ڎw(&T)",IDC_RADIO_WINSIZE_SET,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,15,103,56,10 + COMBOBOX IDC_COMBO_WINTYPE,84,74,64,52,CBS_DROPDOWNLIST | WS_VSCROLL | WS_GROUP | WS_TABSTOP + LTEXT "(&W)",IDC_STATIC,84,94,20,10 + EDITTEXT IDC_EDIT_SX,115,91,33,14,ES_RIGHT | ES_NUMBER + CONTROL "Spin1",IDC_SPIN_SX,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,148,90,10,14 + LTEXT "(&G)",IDC_STATIC,84,110,25,10 + EDITTEXT IDC_EDIT_SY,115,108,33,14,ES_RIGHT | ES_NUMBER + CONTROL "Spin1",IDC_SPIN_SY,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,148,108,10,14 + DEFPUSHBUTTON "‚(&C)",IDOK,26,138,50,14,WS_GROUP + PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,110,137,54,15,WS_GROUP + GROUPBOX "N̈ʒu",IDC_STATIC,7,7,163,52 + GROUPBOX "傫",IDC_STATIC,7,66,163,63 +END + +IDD_PLUGIN_OPTION DIALOGEX 0, 0, 271, 255 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "vOC̐ݒ" +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + LTEXT "vOC̃IvVݒ肵Ă",IDC_STATIC_MSG,11,7,119,10 + CONTROL "List1",IDC_LIST_PLUGIN_OPTIONS,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,22,257,186 + LTEXT "lF",IDC_STATIC,11,217,21,10 + EDITTEXT IDC_EDIT_PLUGIN_OPTION,36,214,228,14,ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_PLUGIN_OPTION_DIR,36,214,205,14,ES_AUTOHSCROLL + PUSHBUTTON "&...",IDC_BUTTON_PLUGIN_OPTION_DIR,243,214,21,14 + EDITTEXT IDC_EDIT_PLUGIN_OPTION_NUM,36,214,60,14,ES_RIGHT + CONTROL "Spin1",IDC_SPIN_PLUGIN_OPTION,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,148,25,10,14,WS_EX_TRANSPARENT + CONTROL "Check",IDC_CHECK_PLUGIN_OPTION,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,36,216,200,10 + COMBOBOX IDC_COMBO_PLUGIN_OPTION,36,214,183,150,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "ReadMe(&M)",IDC_PLUGIN_README,49,234,50,14 + DEFPUSHBUTTON "&OK",IDOK,104,234,50,14 + PUSHBUTTON "LZ(&X)",IDCANCEL,159,234,50,14 + PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,214,234,50,14 +END + +IDD_PROFILEMGR DIALOGEX 0, 0, 191, 184 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "vt@C}l[W" +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + LISTBOX IDC_LIST_PROFILE,9,9,109,128,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + CONTROL "ftHgݒɂċN(&E)",IDC_CHECK_PROF_DEFSTART,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,143,150,10 + DEFPUSHBUTTON "N(&S)",IDOK,8,161,56,14 + PUSHBUTTON "‚(&X)",IDCANCEL,68,161,56,14 + PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,128,161,56,14 + PUSHBUTTON "VK쐬(&N)",IDC_BUTTON_PROF_CREATE,125,8,61,14 + PUSHBUTTON "OύX(&R)",IDC_BUTTON_PROF_RENAME,125,25,61,14 + PUSHBUTTON "폜(&D)",IDC_BUTTON_PROF_DELETE,125,42,61,14 + PUSHBUTTON "ftHgݒ(&F)",IDC_BUTTON_PROF_DEFSET,125,62,61,14 + PUSHBUTTON "ftHg(&C)",IDC_BUTTON_PROF_DEFCLEAR,125,79,61,14 +END + +IDD_FILETREE DIALOGEX 0, 0, 291, 241 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "t@Cc[ݒ" +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + LTEXT "ݒFʐݒ",IDC_STATIC_SETTFING_FROM,4,4,282,10 + CONTROL "etH_̐ݒǂݍ(&I)",IDC_CHECK_LOADINI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,16,120,9 + LTEXT "ftHgݒt@C(&J)",IDC_STATIC,4,28,110,10 + EDITTEXT IDC_EDIT_DEFINI,13,39,124,13,ES_AUTOHSCROLL + PUSHBUTTON "...(&1)",IDC_BUTTON_REF1,137,39,17,13 + PUSHBUTTON "ǂݍ(&V)",IDC_BUTTON_LOAD,108,53,47,14 + CONTROL "Grep(&G)",IDC_RADIO_GREP,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,6,72,56,10 + CONTROL "t@C(&F)",IDC_RADIO_FILE,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,6,85,56,10 + CONTROL "tH_(&2)",IDC_RADIO_FOLDER,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,6,98,56,10 + GROUPBOX "",IDC_STATIC,1,61,89,50,WS_GROUP + LTEXT "pX(&T)",IDC_STATIC_PATH,3,119,22,10 + EDITTEXT IDC_EDIT_PATH,38,117,122,13,ES_AUTOHSCROLL + PUSHBUTTON "&...",IDC_BUTTON_REF2,161,117,10,13 + PUSHBUTTON "(&3)",IDC_BUTTON_PATH_MENU,171,117,21,14 + LTEXT "x(&E)",IDC_STATIC,3,136,32,10 + EDITTEXT IDC_EDIT_LABEL,38,134,111,13,ES_AUTOHSCROLL + LTEXT "t@C(&K)",IDC_STATIC_FILE,3,154,32,10 + EDITTEXT IDC_EDIT_FILE,38,151,111,13,ES_AUTOHSCROLL + CONTROL "Bt@C(&W)",IDC_CHECK_HIDDEN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,181,87,10 + CONTROL "ǂݎp(&Z)",IDC_CHECK_READONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,193,87,10 + CONTROL "VXet@C(&S)",IDC_CHECK_SYSTEM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,205,87,10 + GROUPBOX "\",IDC_STATIC,4,169,100,51 + PUSHBUTTON "폜(&4)",IDC_BUTTON_DELETE,156,17,36,14 + PUSHBUTTON "(&Q)",IDC_BUTTON_INSERT,156,32,36,14 + PUSHBUTTON "(&A)",IDC_BUTTON_INSERT_A,156,46,36,14 + PUSHBUTTON ">>(&B)",IDC_BUTTON_ADD,156,60,36,14 + PUSHBUTTON "XV(&P)",IDC_BUTTON_UPDATE,156,74,36,14 + PUSHBUTTON "t@C}(&C)...",IDC_BUTTON_FILEADD,133,88,59,14 + PUSHBUTTON "pẌꊇu(&N)...",IDC_BUTTON_REPLACE,111,102,81,14 + PUSHBUTTON "(&U)",IDC_BUTTON_UP,156,140,36,14 + PUSHBUTTON "(&D)",IDC_BUTTON_DOWN,156,154,36,14 + PUSHBUTTON "(&R)",IDC_BUTTON_RIGHT,156,168,36,14 + PUSHBUTTON "(&L)",IDC_BUTTON_LEFT,156,182,36,14 + CONTROL "",IDC_TREE_FL,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,193,17,94,202 + PUSHBUTTON "C|[g(&M)",IDC_BUTTON_IMPORT,5,225,50,14 + PUSHBUTTON "GNX|[g(&Y)",IDC_BUTTON_EXPORT,59,225,50,14 + DEFPUSHBUTTON "&OK",IDOK,128,225,50,14 + PUSHBUTTON "LZ(&X)",IDCANCEL,183,225,50,14 + PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,238,225,50,14 +END + +IDD_WINLIST DIALOGEX 0, 0, 350, 250 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "EBhEꗗ" +FONT 9, "lr oSVbN", 0, 0, 0x1 +BEGIN + CONTROL "",IDC_LIST_WINDOW,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,7,336,215 + PUSHBUTTON "EBhE‚(&C)",IDC_BUTTON_CLOSE,7,229,90,14 + PUSHBUTTON "㏑ۑ(&S)",IDC_BUTTON_SAVE,112,229,50,14 + DEFPUSHBUTTON "&OK",IDOK,229,229,50,14 + PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,286,229,50,14 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_FIND, DIALOG + BEGIN + LEFTMARGIN, 5 + RIGHTMARGIN, 279 + BOTTOMMARGIN, 86 + END + + IDD_JUMP, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 245 + TOPMARGIN, 7 + BOTTOMMARGIN, 114 + END + + IDD_FUNCLIST, DIALOG + BEGIN + TOPMARGIN, 7 + BOTTOMMARGIN, 283 + END + + IDD_GREP, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 303 + TOPMARGIN, 7 + BOTTOMMARGIN, 136 + END + + IDD_GREP_REPLACE, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 303 + TOPMARGIN, 7 + BOTTOMMARGIN, 158 + END + + IDD_GREPRUNNING, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 286 + TOPMARGIN, 7 + BOTTOMMARGIN, 72 + END + + IDD_REPLACE, DIALOG + BEGIN + LEFTMARGIN, 4 + RIGHTMARGIN, 293 + BOTTOMMARGIN, 142 + END + + IDD_REPLACERUNNING, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 183 + TOPMARGIN, 7 + BOTTOMMARGIN, 28 + END + + IDD_PROPERTY_FILE, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 263 + TOPMARGIN, 7 + BOTTOMMARGIN, 220 + END + + IDD_INPUT1, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 178 + TOPMARGIN, 7 + BOTTOMMARGIN, 48 + END + + IDD_COMPARE, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 358 + TOPMARGIN, 7 + BOTTOMMARGIN, 158 + END + + IDD_PRINTPREVIEWBAR, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 395 + TOPMARGIN, 7 + BOTTOMMARGIN, 25 + END + + IDD_PRINTSETTING, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 247 + TOPMARGIN, 7 + BOTTOMMARGIN, 246 + END + + IDD_EXITING, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 164 + TOPMARGIN, 7 + BOTTOMMARGIN, 23 + END + + IDD_EXEC, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 285 + TOPMARGIN, 7 + BOTTOMMARGIN, 132 + END + + IDD_EXECRUNNING, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 263 + TOPMARGIN, 7 + BOTTOMMARGIN, 48 + END + + IDD_MACRORUNNING, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 263 + TOPMARGIN, 7 + BOTTOMMARGIN, 48 + END + + IDD_HOKAN, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 118 + TOPMARGIN, 7 + BOTTOMMARGIN, 93 + END + + IDD_PRINTING, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 138 + TOPMARGIN, 7 + BOTTOMMARGIN, 68 + END + + IDD_FILEUPDATEQUERY, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 216 + TOPMARGIN, 7 + BOTTOMMARGIN, 100 + END + + IDD_FAVORITE, DIALOG + BEGIN + LEFTMARGIN, 3 + RIGHTMARGIN, 377 + TOPMARGIN, 4 + BOTTOMMARGIN, 270 + END + + IDD_TAGJUMPLIST, DIALOG + BEGIN + LEFTMARGIN, 3 + RIGHTMARGIN, 387 + TOPMARGIN, 4 + BOTTOMMARGIN, 187 + END + + IDD_TAG_MAKE, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 226 + TOPMARGIN, 7 + BOTTOMMARGIN, 78 + END + + IDD_OPERATIONRUNNING, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 183 + TOPMARGIN, 7 + BOTTOMMARGIN, 28 + END + + IDD_DIFF, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 256 + TOPMARGIN, 7 + BOTTOMMARGIN, 296 + END + + IDD_CTRLCODE, DIALOG + BEGIN + LEFTMARGIN, 2 + RIGHTMARGIN, 177 + TOPMARGIN, 2 + BOTTOMMARGIN, 182 + END + + IDD_TYPELIST, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 180 + TOPMARGIN, 7 + BOTTOMMARGIN, 216 + END + + IDD_PROP_SCREEN, DIALOG + BEGIN + LEFTMARGIN, 3 + RIGHTMARGIN, 299 + TOPMARGIN, 4 + BOTTOMMARGIN, 237 + END + + IDD_PROP_COLOR, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 296 + TOPMARGIN, 7 + END + + IDD_PROP_SUPPORT, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 296 + TOPMARGIN, 7 + BOTTOMMARGIN, 216 + END + + IDD_PROP_REGEX, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 296 + TOPMARGIN, 7 + BOTTOMMARGIN, 213 + END + + IDD_DIALOG_KEYWORD_SELECT, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 170 + TOPMARGIN, 7 + BOTTOMMARGIN, 190 + END + + IDD_SAMECOLOR, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 176 + TOPMARGIN, 7 + BOTTOMMARGIN, 199 + END + + IDD_PROP_GENERAL, DIALOG + BEGIN + LEFTMARGIN, 3 + RIGHTMARGIN, 286 + TOPMARGIN, 7 + BOTTOMMARGIN, 233 + END + + IDD_PROP_WIN, DIALOG + BEGIN + LEFTMARGIN, 2 + RIGHTMARGIN, 290 + TOPMARGIN, 2 + BOTTOMMARGIN, 206 + END + + IDD_PROP_TOOLBAR, DIALOG + BEGIN + RIGHTMARGIN, 292 + END + + IDD_PROP_TAB, DIALOG + BEGIN + LEFTMARGIN, 1 + RIGHTMARGIN, 291 + TOPMARGIN, 2 + BOTTOMMARGIN, 197 + END + + IDD_PROP_STATUSBAR, DIALOG + BEGIN + LEFTMARGIN, 1 + RIGHTMARGIN, 291 + TOPMARGIN, 7 + BOTTOMMARGIN, 217 + END + + IDD_PROP_EDIT, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 284 + TOPMARGIN, 7 + BOTTOMMARGIN, 204 + END + + IDD_PROP_FILE, DIALOG + BEGIN + LEFTMARGIN, 1 + TOPMARGIN, 7 + BOTTOMMARGIN, 233 + END + + IDD_PROP_FNAME, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 284 + TOPMARGIN, 7 + BOTTOMMARGIN, 206 + END + + IDD_PROP_BACKUP, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 284 + TOPMARGIN, 7 + BOTTOMMARGIN, 213 + END + + IDD_PROP_FORMAT, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 285 + TOPMARGIN, 7 + BOTTOMMARGIN, 178 + END + + IDD_PROP_GREP, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 286 + TOPMARGIN, 7 + BOTTOMMARGIN, 160 + END + + IDD_PROP_KEYBIND, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 286 + TOPMARGIN, 7 + BOTTOMMARGIN, 232 + END + + IDD_PROP_CUSTMENU, DIALOG + BEGIN + RIGHTMARGIN, 290 + VERTGUIDE, 276 + END + + IDD_PROP_KEYWORD, DIALOG + BEGIN + BOTTOMMARGIN, 238 + END + + IDD_PROP_HELPER, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 286 + TOPMARGIN, 7 + BOTTOMMARGIN, 210 + END + + IDD_PROP_MACRO, DIALOG + BEGIN + RIGHTMARGIN, 292 + BOTTOMMARGIN, 237 + END + + IDD_WINPOSSIZE, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 170 + TOPMARGIN, 7 + BOTTOMMARGIN, 152 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +IDB_MYTOOL BITMAP "../resource/mytool.bmp" + +IDB_SCROLL_CENTER BITMAP "../resource/auto_scroll_center.bmp" + +IDB_SCROLL_VERTICAL BITMAP "../resource/auto_scroll_vertical.bmp" + +IDB_SCROLL_HORIZONTAL BITMAP "../resource/auto_scroll_horizontal.bmp" + + +///////////////////////////////////////////////////////////////////////////// +// +// Cursor +// + +IDC_CURSOR_COPYARROW CURSOR "../resource/cursor_copy.cur" + +IDC_CURSOR_MOVEARROW CURSOR "../resource/cursor_move.cur" + +IDC_CURSOR_RVARROW CURSOR "../resource/cursor_rvarrow.cur" + +IDC_CURSOR_ISEARCH_F CURSOR "../resource/cursor_isf.cur" + +IDC_CURSOR_ISEARCH_B CURSOR "../resource/cursor_isb.cur" + +IDC_CURSOR_TAB_SEPARATE CURSOR "../resource/cursor_tab_separate.cur" + +IDC_CURSOR_TAB_JOIN CURSOR "../resource/cursor_tab_join.cur" + +IDC_CURSOR_AUTOSCROLL_CENTER CURSOR "../resource/auto_scroll_center.cur" + +IDC_CURSOR_AUTOSCROLL_HORIZONTAL CURSOR "../resource/auto_scroll_horizontal.cur" + +IDC_CURSOR_AUTOSCROLL_VERTICAL CURSOR "../resource/auto_scroll_vertical.cur" + +IDC_CURSOR_AUTOSCROLL_UP CURSOR "../resource/auto_scroll_up.cur" + +IDC_CURSOR_AUTOSCROLL_DOWN CURSOR "../resource/auto_scroll_down.cur" + +IDC_CURSOR_AUTOSCROLL_LEFT CURSOR "../resource/auto_scroll_left.cur" + +IDC_CURSOR_AUTOSCROLL_RIGHT CURSOR "../resource/auto_scroll_right.cur" + +IDC_CURSOR_AUTOSCROLL_UP_LEFT CURSOR "../resource/auto_scroll_up_left.cur" + +IDC_CURSOR_AUTOSCROLL_UP_RIGHT CURSOR "../resource/auto_scroll_up_right.cur" + +IDC_CURSOR_AUTOSCROLL_DOWN_LEFT CURSOR "../resource/auto_scroll_down_left.cur" + +IDC_CURSOR_AUTOSCROLL_DOWN_RIGHT CURSOR "../resource/auto_scroll_down_right.cur" + + +///////////////////////////////////////////////////////////////////////////// +// +// 100 +// + +IDR_MENU1 100 "../resource/MainMenu.ini" + + +///////////////////////////////////////////////////////////////////////////// +// +// AFX_DIALOG_LAYOUT +// + +IDD_GREP AFX_DIALOG_LAYOUT +BEGIN + 0 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + F_DISABLE "-- s --" +END + +STRINGTABLE +BEGIN + F_ISEARCH_SUBMENU "CN^T[`" + F_TAB_CLOSEOTHER_TAB "̃^uȊO‚" + F_TAB_CLOSEOTHER_WINDOW "̃EBhEȊO‚" + F_EDIT_BOX_SEL_SUBMENU "`I" + F_FILE_TOPMENU "t@C" + F_EDIT_TOPMENU "ҏW" + F_CONVERT_TOPMENU "ϊ" + F_SEARCH_TOPMENU "" + F_TOOL_TOPMENU "c[" + F_OPTION_TOPMENU "ݒ" + F_WINDOW_TOPMENU "EBhE" + F_HELP_TOPMENU "wv" + F_WINDOW_LIST_SUBMENU "EBhEꗗ" +END + +STRINGTABLE +BEGIN + F_FILENEW "VK쐬" + F_FILEOPEN "J..." + F_FILESAVE "㏑ۑ" + F_FILESAVEAS_DIALOG "Otĕۑ..." + F_FILECLOSE "‚()" + F_FILECLOSE_OPEN "‚ĊJ..." + F_FILEOPEN_DROPDOWN "J(hbv_E)..." + F_FILESAVECLOSE "ۑĕ‚" + F_FILENEW_NEWWINDOW "VKEChEJ" + F_FILE_REOPEN_SJIS "SJISŊJ" +END + +STRINGTABLE +BEGIN + F_TAB_MANIP_SUBMENU "^ȗ" + F_TAB_GROUPIZE "O[v" + F_TAB_GROUPDEL "O[v" + F_TOPMOST_REL "ɎO" + F_TOPMOST_SET "ɎOɕ\" + F_FILE_REOPEN_SUBMENU "J" + F_FILE_RCNTFILE_SUBMENU "ŋߎgt@C" + F_FILE_RCNTFLDR_SUBMENU "ŋߎgtH_" + F_EDIT_INS_SUBMENU "}" + F_EDIT_COS_SUBMENU "`" + F_EDIT_MOV_SUBMENU "ړ" + F_EDIT_SEL_SUBMENU "I" + F_EDIT_HLV_SUBMENU "xȑ" + F_CONV_ENCODE_SUBMENU "R[hϊ" + F_RECKEYMACRO_REC "L[}N̋L^Jn" + F_SAVEKEYMACRO_REC "L[}N̕ۑ" +END + +STRINGTABLE +BEGIN + F_FILE_REOPEN_JIS "JISŊJ" + F_FILE_REOPEN_EUC "EUCŊJ" + F_FILE_REOPEN_UNICODE "UTF-16ŊJ" + F_FILE_REOPEN_UTF8 "UTF-8ŊJ" + F_FILE_REOPEN_UTF7 "UTF-7ŊJ" + F_FILE_REOPEN_UNICODEBE "UTF-16BEŊJ" + F_FILE_REOPEN_CESU8 "CESU-8ŊJ" + F_FILE_REOPEN "J" + F_FILESAVEALL "ׂď㏑ۑ" + F_FILE_REOPEN_LATIN1 "Latin1ŊJ" +END + +STRINGTABLE +BEGIN + F_PRINT "..." + F_PRINT_PREVIEW "vr[" + F_PRINT_PAGESETUP "y[Wݒ..." +END + +STRINGTABLE +BEGIN + F_OPEN_HfromtoC "C/C++wb_(\[X)J" + F_ACTIVATE_SQLPLUS "SQL*PlusANeBu\" + F_PLSQL_COMPILE_ON_SQLPLUS "SQL*PlusŎs" +END + +STRINGTABLE +BEGIN + F_BROWSE "uEY" + F_VIEWMODE "r[[h" + F_PROPERTY_FILE "t@C̃vpeB" + F_PROFILEMGR "vt@C}l[W" +END + +STRINGTABLE +BEGIN + F_EXITALLEDITORS "ҏW̑SI" + F_EXITALL "TNGfB^̑SI" + F_OPEN_FOLDER_IN_EXPLORER "t@C̏ꏊJ" + F_OPEN_COMMAND_PROMPT "R}hvvgJ" + F_OPEN_COMMAND_PROMPT_AS_ADMIN "Ǘ҂ƂăR}hvvgJ" + F_WCHAR "" + F_IME_CHAR "Sp" +END + +STRINGTABLE +BEGIN + F_OPEN_POWERSHELL "PowerShellJ" + F_OPEN_POWERSHELL_AS_ADMIN "Ǘ҂ƂPowerShellJ" +END + +STRINGTABLE +BEGIN + F_UNDO "ɖ߂" + F_REDO "蒼" + F_DELETE "폜" + F_DELETE_BACK "J[\O폜" +END + +STRINGTABLE +BEGIN + F_WordDeleteToStart "P̍[܂ō폜" + F_WordDeleteToEnd "P̉E[܂ō폜" + F_WordCut "P؂" + F_WordDelete "P폜" +END + +STRINGTABLE +BEGIN + F_LineCutToStart "s܂Ő؂(sP)" + F_LineCutToEnd "s܂Ő؂(sP)" + F_LineDeleteToStart "s܂ō폜(sP)" + F_LineDeleteToEnd "s܂ō폜(sP)" + F_CUT_LINE "s؂(܂ԂP)" + F_DELETE_LINE "s폜(܂ԂP)" + F_DUPLICATELINE "s̓d(܂ԂP)" +END + +STRINGTABLE +BEGIN + F_INDENT_TAB "TABCfg" + F_UNINDENT_TAB "tTABCfg" + F_INDENT_SPACE "SPACECfg" + F_UNINDENT_SPACE "tSPACECfg" +END + +STRINGTABLE +BEGIN + F_LTRIM "(擪)̋󔒂폜" + F_RTRIM "E()̋󔒂폜" + F_SORT_ASC "Is̏\[g" + F_SORT_DESC "Is̍~\[g" + F_MERGE "Ads̍폜(uniq)" + F_RECONVERT "ĕϊ" +END + +STRINGTABLE +BEGIN + F_UP "J[\ړ" + F_DOWN "J[\ړ" + F_LEFT "J[\ړ" + F_RIGHT "J[\Eړ" + F_UP2 "J[\ړ(Qs)" + F_DOWN2 "J[\ړ(Qs)" +END + +STRINGTABLE +BEGIN + F_WORDLEFT "P̍[Ɉړ" + F_WORDRIGHT "P̉E[Ɉړ" + F_GOLINETOP "sɈړ(܂ԂP)" + F_GOLINEEND "sɈړ(܂ԂP)" +END + +STRINGTABLE +BEGIN + F_HalfPageUp "y[WAbv" + F_HalfPageDown "y[W_E" + F_1PageUp "Py[WAbv" + F_1PageDown "Py[W_E" + F_GOFILETOP "t@C̐擪Ɉړ" + F_GOFILEEND "t@C̍ŌɈړ" +END + +STRINGTABLE +BEGIN + F_CURLINECENTER "J[\sEBhE" + F_CURLINETOP "J[\sEBhE㕔" + F_CURLINEBOTTOM "J[\sEBhE" +END + +STRINGTABLE +BEGIN + F_JUMPHIST_PREV "ړ: O" + F_JUMPHIST_NEXT "ړ: " + F_JUMPHIST_SET "݈ʒuړɓo^" + F_WndScrollDown "eLXgPsփXN[" + F_WndScrollUp "eLXgPsփXN[" + F_GONEXTPARAGRAPH "̒iֈړ" + F_GOPREVPARAGRAPH "O̒iֈړ" +END + +STRINGTABLE +BEGIN + F_AUTOSCROLL "I[gXN[" + F_WHEELUP "zC[Abv" + F_WHEELDOWN "zC[_E" + F_WHEELLEFT "zC[" + F_WHEELRIGHT "zC[E" + F_WHEELPAGEUP "zC[y[WAbv" + F_WHEELPAGEDOWN "zC[y[W_E" + F_WHEELPAGELEFT "zC[y[W" + F_WHEELPAGERIGHT "zC[y[WE" + F_MODIFYLINE_NEXT "̕ύXs" + F_MODIFYLINE_PREV "O̕ύXs" +END + +STRINGTABLE +BEGIN + F_SELECTWORD "݈ʒu̒PI" + F_SELECTALL "ׂđI" + F_SELECTLINE "1sI" + F_BEGIN_SEL "͈͑IJn" + F_UP_SEL "(I)J[\ړ" + F_DOWN_SEL "(I)J[\ړ" + F_LEFT_SEL "(I)J[\ړ" + F_RIGHT_SEL "(I)J[\Eړ" + F_UP2_SEL "(I)J[\ړ(Qs)" +END + +STRINGTABLE +BEGIN + F_DOWN2_SEL "(I)J[\ړ(Qs)" + F_WORDLEFT_SEL "(I)P̍[Ɉړ" + F_WORDRIGHT_SEL "(I)P̉E[Ɉړ" +END + +STRINGTABLE +BEGIN + F_GOLINETOP_SEL "(I)sɈړ(܂ԂP)" + F_GOLINEEND_SEL "(I)sɈړ(܂ԂP)" + F_HalfPageUp_Sel "(I)y[WAbv" + F_HalfPageDown_Sel "(I)y[W_E" + F_1PageUp_Sel "(I)Py[WAbv" + F_1PageDown_Sel "(I)Py[W_E" +END + +STRINGTABLE +BEGIN + F_GOFILETOP_SEL "(I)t@C̐擪Ɉړ" + F_GOFILEEND_SEL "(I)t@C̍ŌɈړ" +END + +STRINGTABLE +BEGIN + F_GONEXTPARAGRAPH_SEL "(I)̒iֈړ" + F_GOPREVPARAGRAPH_SEL "(I)O̒iֈړ" + F_MODIFYLINE_NEXT_SEL "(I)̕ύXs" + F_MODIFYLINE_PREV_SEL "(I)O̕ύXs" +END + +STRINGTABLE +BEGIN + F_BEGIN_BOX "`͈͑IJn" + F_UP_BOX "(`I)J[\ړ" +END + +STRINGTABLE +BEGIN + F_DOWN_BOX "(`I)J[\ړ" + F_LEFT_BOX "(`I)J[\ړ" + F_RIGHT_BOX "(`I)J[\Eړ" + F_UP2_BOX "(`I)J[\ړ(Qs)" + F_DOWN2_BOX "(`I)J[\ړ(Qs)" + F_WORDLEFT_BOX "(`I)P̍[Ɉړ" + F_WORDRIGHT_BOX "(`I)P̉E[Ɉړ" +END + +STRINGTABLE +BEGIN + F_GOLOGICALLINETOP_BOX "(`I)sɈړ(sP)" + F_GOLINETOP_BOX "(`I)sɈړ(܂ԂP)" + F_GOLINEEND_BOX "(`I)sɈړ(܂ԂP)" + F_HalfPageUp_BOX "(`I)y[WAbv" + F_HalfPageDown_BOX "(`I)y[W_E" + F_1PageUp_BOX "(`I)Py[WAbv" + F_1PageDown_BOX "(`I)Py[W_E" +END + +STRINGTABLE +BEGIN + F_GOFILETOP_BOX "(`I)t@C̐擪Ɉړ" + F_GOFILEEND_BOX "(`I)t@C̍ŌɈړ" +END + +STRINGTABLE +BEGIN + F_CUT "؂" + F_COPY "Rs[" + F_COPY_CRLF "CRLFsŃRs[" + F_PASTE "\t" + F_PASTEBOX "`\t" + F_INSTEXT_W "eLXg\t" +END + +STRINGTABLE +BEGIN + F_COPY_ADDCRLF "܂Ԃʒuɉs‚ăRs[" + F_COPYLINES "I͈͓SsRs[" + F_COPYLINESASPASSAGE "I͈͓SsptRs[" + F_COPYLINESWITHLINENUMBER "I͈͓SssԍtRs[" + F_COPY_COLOR_HTML "I͈͓FtHTMLRs[" + F_COPY_COLOR_HTML_LINENUMBER "I͈͓sԍFtHTMLRs[" + F_COPYPATH "̃t@C̃pXRs[" + F_COPYTAG "̃t@C̃pXƃJ[\ʒuRs[" + F_COPYFNAME "̃t@CRs[" +END + +STRINGTABLE +BEGIN + F_CREATEKEYBINDLIST "L[蓖ĈꗗRs[" + F_COPYDIRPATH "̃t@C̃tH_Rs[" +END + +STRINGTABLE +BEGIN + F_INS_DATE "t}" + F_INS_TIME "}" + F_CTRL_CODE_DIALOG "Rg[R[h..." + F_INS_FILE_USED_RECENTLY "ŋߎgt@C}" + F_INS_FOLDER_USED_RECENTLY "ŋߎgtH_}" +END + +STRINGTABLE +BEGIN + F_TOLOWER "" + F_TOUPPER "啶" + F_TOHANKAKU "Spp" + F_TOZENKAKUKATA "p{SЂ灨SpEJ^Ji" + F_TOZENKAKUHIRA "p{SJ^SpEЂ炪" + F_HANKATATOZENKATA "pJ^JiSpJ^Ji" + F_HANKATATOZENHIRA "pJ^JiSpЂ炪" + F_TOZENEI "ppSpp" +END + +STRINGTABLE +BEGIN + F_TOHANEI "Spppp" + F_TOHANKATA "SpJ^JipJ^Ji" + F_TABTOSPACE "TAB" + F_SPACETOTAB "󔒁TAB" +END + +STRINGTABLE +BEGIN + F_CODECNV_AUTO2SJIS "ʁSJISR[hϊ" + F_CODECNV_EMAIL "E-Mail(JISSJIS)R[hϊ" + F_CODECNV_EUC2SJIS "EUCSJISR[hϊ" + F_CODECNV_UNICODE2SJIS "UTF-16SJISR[hϊ" + F_CODECNV_UTF82SJIS "UTF-8SJISR[hϊ" + F_CODECNV_UTF72SJIS "UTF-7SJISR[hϊ" + F_CODECNV_UNICODEBE2SJIS "UTF-16BESJISR[hϊ" + F_CODECNV_SJIS2JIS "SJISJISR[hϊ" + F_CODECNV_SJIS2EUC "SJISEUCR[hϊ" + F_CODECNV_SJIS2UTF8 "SJISUTF-8R[hϊ" + F_CODECNV_SJIS2UTF7 "SJISUTF-7R[hϊ" +END + +STRINGTABLE +BEGIN + F_BASE64DECODE "Base64fR[hĕۑ" +END + +STRINGTABLE +BEGIN + F_UUDECODE "uudecodeĕۑ" +END + +STRINGTABLE +BEGIN + F_SEARCH_DIALOG "..." + F_SEARCH_NEXT "" + F_SEARCH_PREV "O" + F_REPLACE_DIALOG "u..." + F_SEARCH_CLEARMARK "}[N̐ؑւ" + F_REPLACE "u" + F_REPLACE_ALL "ׂĒu" + F_SEARCH_BOX " ({bNX)" + F_JUMP_SRCHSTARTPOS "Jnʒu֖߂" + F_GREP_DIALOG "Grep..." + F_GREP "Grep" +END + +STRINGTABLE +BEGIN + F_GREP_REPLACE_DLG "Grepu..." + F_GREP_REPLACE "Grepu" + F_JUMP_DIALOG "wsփWv..." + F_JUMP "wsփWv" +END + +STRINGTABLE +BEGIN + F_OUTLINE "AEgC..." + F_OUTLINE_TOGGLE "AEgC(gO)..." + F_TAGJUMP "^OWv" + F_TAGJUMPBACK "^OWvobN" + F_TAGS_MAKE "^Ot@C̍쐬..." +END + +STRINGTABLE +BEGIN + F_DIRECT_TAGJUMP "_CNg^OWv" + F_TAGJUMP_CLOSE "‚ă^OWv" + F_TAGJUMP_KEYWORD "L[[hw肵ă^OWv..." + F_COMPARE "t@Cer..." +END + +STRINGTABLE +BEGIN + F_BRACKETPAIR "Ίʂ̌" + F_BOOKMARK_SET "ubN}[NݒE" + F_BOOKMARK_NEXT "̃ubN}[N" + F_BOOKMARK_PREV "ÕubN}[N" + F_BOOKMARK_RESET "ubN}[N̑S" + F_BOOKMARK_VIEW "ubN}[N̈ꗗ..." + F_BOOKMARK_PATTERN "Ys}[N" +END + +STRINGTABLE +BEGIN + F_TOGGLE_KEY_SEARCH_OFF "L[[hwv\Ȃ" + F_TOGGLE_KEY_SEARCH_ON "L[[hwv\" + F_SPLIT_V_ON "㉺ɕ" + F_SPLIT_V_OFF "㉺̉" + F_SPLIT_H_ON "Eɕ" + F_SPLIT_H_OFF "Ẻ" + F_CHGMOD_EOL_SUBMENU "͉sR[hw" + F_SPLIT_VH_ON "cɕ" + F_SPLIT_VH_OFF "c̉" + F_BOOKMARK_SUBMENU "ubN}[N" +END + +STRINGTABLE +BEGIN + F_DIFF_DIALOG "DIFF\..." + F_DIFF "DIFF\" + F_DIFF_NEXT "̍" + F_DIFF_PREV "O̍" + F_DIFF_RESET "\̑S" + F_ISEARCH_NEXT "OCN^T[`" + F_ISEARCH_PREV "CN^T[`" + F_ISEARCH_REGEXP_NEXT "K\OCN^T[`" + F_ISEARCH_REGEXP_PREV "K\CN^T[`" + F_ISEARCH_MIGEMO_NEXT "MIGEMOOCN^T[`" + F_ISEARCH_MIGEMO_PREV "MIGEMOCN^T[`" + F_FUNCLIST_NEXT "̊֐Xg}[N" + F_FUNCLIST_PREV "O̊֐Xg}[N" + F_FILETREE "t@Cc[" +END + +STRINGTABLE +BEGIN + F_CHGMOD_INS "}^㏑[h؂ւ" +END + +STRINGTABLE +BEGIN + F_CHG_CHARSET "R[hZbgw..." +END + +STRINGTABLE +BEGIN + F_CHGMOD_EOL_CRLF "͉sR[hw(CRLF)" + F_CHGMOD_EOL_LF "͉sR[hw(LF)" + F_CHGMOD_EOL_CR "͉sR[hw(CR)" +END + +STRINGTABLE +BEGIN + F_CANCEL_MODE "e탂[h̎" + F_SHOWTOOLBAR "c[o[̕\^\" + F_SHOWFUNCKEY "t@NVL[̕\^\" + F_SHOWSTATUSBAR "Xe[^Xo[̕\^\" + F_SHOWTAB "^uo[̕\^\" +END + +STRINGTABLE +BEGIN + F_SHOWMINIMAP "~j}bv̕\^\" + F_TYPE_LIST "^Cvʐݒꗗ..." + F_OPTION_TYPE "^Cvʐݒ..." + F_OPTION "ʐݒ..." + F_FAVORITE "̊Ǘ..." +END + +STRINGTABLE +BEGIN + F_LOADKEYMACRO_REC "L[}N̓ǂݍ" + F_EXECKEYMACRO_REC "L[}N̎s" + F_RECKEYMACRO_APPE "L[}N̋L^I" + F_SAVEKEYMACRO_APPE "L[}N̋L^I&&ۑ" + F_LOADKEYMACRO_APPE "L[}N̋L^I&&ǂݍ" + F_EXECKEYMACRO_APPE "L[}N̋L^I&&s" + F_EXECKEYMACRO_REGD "o^ς݃}N" + F_TOOL_CUSTOM_SUBMENU "JX^j[" + F_SHOWTOOLBAR_ON "c[o[\" + F_SHOWFUNCKEY_ON "t@NVL[\" + F_SHOWTAB_ON "^uo[\" + F_SHOWSTATUSBAR_ON "Xe[^Xo[\" + F_SHOWTOOLBAR_OFF "\̃c[o[B" + F_SHOWFUNCKEY_OFF "\̃t@NVL[B" + F_SHOWTAB_OFF "\̃^uo[B" + F_SHOWSTATUSBAR_OFF "\̃Xe[^Xo[B" +END + +STRINGTABLE +BEGIN + STR_FILETREE_MENU_TEMP "Temp(&T)" + STR_FILETREE_MENU_SAKURA "sakura(&S)" + STR_FILETREE_MENU_SAKURADATA "sakuraf[^(&A)" + STR_FILETREE_REPLACE_PATH_FROM "upXw肵Ă" + STR_FILETREE_REPLACE_PATH_TO "u敶w肵Ă" + F_SHOWMINIMAP_OFF "\̃~j}bvB" + F_SHOWMINIMAP_ON "~j}bv\" + STR_FUCLIST_NEXT_NOT_FOUND "O() Ɋ֐‚܂B" + STR_FUCLIST_PREV_NOT_FOUND "() Ɋ֐‚܂B" + STR_MODLINE_NEXT_NOT_FOUND "O() ɕύXs‚܂B" + STR_MODLINE_PREV_NOT_FOUND "() ɕύXs‚܂B" + STR_GREP_SHOW_MATCH_NOHITLINE " (vȂso)\r\n" + STR_TSV_MODE_NONE "ʏ" + STR_TSV_MODE_TSV "TSV" + STR_TSV_MODE_CSV "CSV" + STR_DLGFNCLST_SORTTYPE1_2 "ftHg(~)" +END + +STRINGTABLE +BEGIN + F_FONT "tHgݒ..." + F_SETFONTSIZE "tHgTCYݒ" + F_SETFONTSIZEUP "tHgTCYg" + F_SETFONTSIZEDOWN "tHgTCYk" +END + +STRINGTABLE +BEGIN + F_WRAPWINDOWWIDTH "܂Ԃ" + F_TMPWRAPNOWRAP "܂ԂȂ" + F_TMPWRAPSETTING "w茅Ő܂Ԃ" + F_TMPWRAPWINDOW "E[Ő܂Ԃ" + F_SELECT_COUNT_MODE "JEg@" +END + +STRINGTABLE +BEGIN + F_RECKEYMACRO "L[}N̋L^Jn^I" + F_SAVEKEYMACRO "L[}N̕ۑ" + F_LOADKEYMACRO "L[}N̓ǂݍ" + F_EXECKEYMACRO "L[}N̎s" + F_EXECEXTMACRO "Ow肵ă}Ns..." +END + +STRINGTABLE +BEGIN + F_EXECMD_DIALOG "OR}hs..." + F_EXECMD "OR}hs" +END + +STRINGTABLE +BEGIN + F_SPLIT_V "㉺ɕ^" + F_SPLIT_H "Eɕ^" +END + +STRINGTABLE +BEGIN + F_SPLIT_VH "cɕ^" + F_WINCLOSE "‚" + F_WIN_CLOSEALL "ׂĕ‚" +END + +STRINGTABLE +BEGIN + F_GROUPCLOSE "O[v‚" + F_NEXTGROUP "̃O[v" + F_PREVGROUP "ÕO[v" + F_TAB_MOVERIGHT "^uEɈړ" + F_TAB_MOVELEFT "^uɈړ" + F_TAB_SEPARATE "VKO[v" + F_TAB_JOINTNEXT "̃O[vɈړ" + F_TAB_JOINTPREV "ÕO[vɈړ" + F_TAB_CLOSEOTHER "̃^u^EBhEȊO‚" + F_TAB_CLOSELEFT "ׂĕ‚" + F_TAB_CLOSERIGHT "Eׂĕ‚" +END + +STRINGTABLE +BEGIN + F_CASCADE "d˂ĕ\" + F_TILE_V "㉺ɕׂĕ\" + F_TILE_H "Eɕׂĕ\" + F_BIND_WINDOW "O[v" + F_TOPMOST "ɎOɕ\" + F_WINLIST "EBhEꗗ..." + F_DLGWINLIST "EBhEꗗ\..." + F_NEXTWINDOW "̃EBhE" + F_PREVWINDOW "ÕEBhE" +END + +STRINGTABLE +BEGIN + F_MAXIMIZE_V "cɍő剻" + F_MINIMIZE_ALL "ׂčŏ" + F_MAXIMIZE_H "ɍő剻" +END + +STRINGTABLE +BEGIN + F_REDRAW "ĕ`" + F_WIN_OUTPUT "AEgvbg" +END + +STRINGTABLE +BEGIN + F_HOKAN "͕⊮" + F_TOGGLE_KEY_SEARCH "L[[hwv\" +END + +STRINGTABLE +BEGIN + F_HELP_CONTENTS "wvڎ" + F_HELP_SEARCH "wvL[[h" + F_MENU_ALLFUNC "R}hꗗ" + F_EXTHELP1 "OwvP" + F_EXTHTMLHELP "OHTMLwv" + F_ABOUT "o[W" +END + +STRINGTABLE +BEGIN + F_MENU_RBUTTON "ENbNj[" +END + +STRINGTABLE +BEGIN + F_CUSTMENU_1 "JX^j[1" + F_CUSTMENU_2 "JX^j[2" + F_CUSTMENU_3 "JX^j[3" +END + +STRINGTABLE +BEGIN + F_CUSTMENU_4 "JX^j[4" + F_CUSTMENU_5 "JX^j[5" + F_CUSTMENU_6 "JX^j[6" + F_CUSTMENU_7 "JX^j[7" + F_CUSTMENU_8 "JX^j[8" + F_CUSTMENU_9 "JX^j[9" + F_CUSTMENU_10 "JX^j[10" + F_CUSTMENU_11 "JX^j[11" + F_CUSTMENU_12 "JX^j[12" + F_CUSTMENU_13 "JX^j[13" + F_CUSTMENU_14 "JX^j[14" + F_CUSTMENU_15 "JX^j[15" + F_CUSTMENU_16 "JX^j[16" + F_CUSTMENU_17 "JX^j[17" + F_CUSTMENU_18 "JX^j[18" + F_CUSTMENU_19 "JX^j[19" +END + +STRINGTABLE +BEGIN + F_CUSTMENU_20 "JX^j[20" + F_CUSTMENU_21 "JX^j[21" + F_CUSTMENU_22 "JX^j[22" + F_CUSTMENU_23 "JX^j[23" + F_CUSTMENU_24 "^uj[" +END + +STRINGTABLE +BEGIN + F_MENU_NOT_USED_FIRST "\\c[o[ܕԁ\\" +END + +STRINGTABLE +BEGIN + F_CHGMOD_EOL "͉sR[hw" + F_TEXTWRAPMETHOD "܂Ԃ@" +END + +STRINGTABLE +BEGIN + F_WINDOW_LIST "EBhEXg" + F_FILE_USED_RECENTLY "ŋߎgt@C" + F_FOLDER_USED_RECENTLY "ŋߎgtH_" + F_CUSTMENU_LIST "JX^j[Xg" + F_USERMACRO_LIST "o^ς݃}NXg" + F_PLUGIN_LIST "vOCR}hXg" +END + +STRINGTABLE +BEGIN + IDS_AUTHOR_PAGE "https://sakura-editor.github.io/" + IDS_ABOUT_DESCRIPTION "̃\tgEFÁueLXgGfB^(J)v̂̂łB\r\npE񏤗p킸ŗpł܂A\[XR[h̒쌠͊eӏLqlۂĂ܂B\r\ñ\tgEFA͖ۏ؂łB\r\n" +END + +STRINGTABLE +BEGIN + STR_SELLANG_NAME "Japanese" + STR_SELLANG_LANGID "0x0411" + STR_SQLERR_EXEC_BUT_NOT_RUN + "Oracle SQL*PlusŎs܂B\n\n\nOracle SQL*PlusNĂ܂B\n" + STR_SQLERR_ACTV_BUT_NOT_RUN + "Oracle SQL*PlusANeBu\܂B\n\n\nOracle SQL*PlusNĂ܂B\n" + STR_ERR_CMPERR "r̃t@C\n%s\n%doCg𒴂s܂B\nrł܂B" + STR_ERR_MACROERR1 "}N̓ǂݍ݂Ɏs܂B\n\n%s" + STR_CMDLINE_PARSECMD1 "%ls\r\nL̃t@C͕słBt@C \\ / : * ? "" < > | ͎̕g܂B " + STR_ERR_CTRLMTX1 "CreateMutex()sB\nI܂B" + STR_ERR_CTRLMTX2 "CreateEvent()sB\nI܂B" + STR_ERR_CTRLMTX3 "EBhE̍쐬Ɏs܂B\nNł܂B" + STR_ERR_CTRLMTX4 "SetEvent()sB\nI܂B" + STR_NO_TITLE1 "()" + STR_NO_TITLE2 "" +END + +STRINGTABLE +BEGIN + STR_SHELL_HHCTRL "HHCTRL.OCX‚܂B\r\nHTMLwv𗘗pɂHHCTRL.OCXKvłB\r\n" + STR_SHELL_INFO "" + STR_SHELL_MENU_OPEN "J(&O)..." + STR_SHELL_MENU_IMPEXP "C|[g^GNX|[g̋N_Zbg(&R)" + STR_SHELL_IMPEXPDIR "eݒ̃C|[g^GNX|[gpt@CIʂ\n\tH_ݒtH_ɖ߂܂B" + STR_SHELL_INIFOLDER "ݒtH_(&/) >>" + STR_ERR_GLOBAL01 "I" + STR_PREVIEW_ONLY "(vr[ł̂ݎgpł܂)" + STR_NOT_SAVED "(ۑĂ܂)" + STR_PROPCOMMON_PLUGIN "vOC" + STR_PROPCOMMON_MAINMENU "Cj[" + STR_PROPCOMMON_STATBAR "Xe[^Xo[" + STR_SPECIAL_FUNC "ʋ@\" +END + +STRINGTABLE +BEGIN + STR_PLGMGR_INST_IDNUM "Plugin.ID̐擪ɐ͎gpł܂" + STR_PLGMGR_INST_NAME "vOCʂ̖OŃCXg[Ă܂B㏑܂H\n@͂@@Vu%svgp\n@@CXg[ς݂́u%lsvgp" + STR_PLGMGR_INST_USERCANCEL "[ULZ" + STR_PLGMGR_INST_MAX "vOCȏo^ł܂" + STR_WSHPLUG_LOADMACRO "}N̓ǂݍ݂Ɏs܂B\n\n%s" + STR_CARET_WITHBOM " BOMt" + STR_MAXWINDOW "ҏWEBhȄ%dłB\nȏ͓ɊJ܂B" + STR_MENU_UNKOWN "%s s(Ȃ)" + STR_PRINT_WAITING "̏Iҋ@Ă܂EEE" + STR_OUTLINE_ERLANG_SCANARGS "COutlineErlang::ScanArgs m̊" + STR_ESI_CHARCODE_DETECT "--R[h-----------\r\n" + STR_ESI_RESULT_STATE "ʌʂ̏\r\n" + STR_ESI_NO_INFO "\tʌʂ擾ł܂B\r\n" + STR_ESI_DETECTED "\t炭ɔ肳܂B\r\n" + STR_ESI_NO_DETECTED "\tR[hoł܂łB\r\n" + STR_ESI_DOC_TYPE "\r\n" +END + +STRINGTABLE +BEGIN + STR_DLGCTRLCODE_CODE "R[h" + STR_DLGCTRLCODE_SYMBOL "\L" + STR_DLGCTRLCODE_NAME "O" + STR_DLGCTRLCODE_DESC "" + STR_ERR_DLGCTL5 "󕶎" + STR_ERR_DLGCTL6 "wb_Jn" + STR_ERR_DLGCTL7 "eLXgJn" + STR_ERR_DLGCTL8 "eLXgI" + STR_ERR_DLGCTL9 "]I" + STR_ERR_DLGCTL10 "Ɖ" + STR_ERR_DLGCTL11 "MOK" + STR_ERR_DLGCTL12 "x(x)" + STR_ERR_DLGCTL13 "" + STR_ERR_DLGCTL14 "^u" + STR_ERR_DLGCTL15 "s" + STR_ERR_DLGCTL16 "^u" +END + +STRINGTABLE +BEGIN + STR_ERR_DLGCTL17 "y[W" + STR_ERR_DLGCTL18 "A" + STR_ERR_DLGCTL19 "VtgAEg" + STR_ERR_DLGCTL20 "VtgC" + STR_ERR_DLGCTL21 "f[^NGXP[v" + STR_ERR_DLGCTL22 "u1" + STR_ERR_DLGCTL23 "u2" + STR_ERR_DLGCTL24 "u3" + STR_ERR_DLGCTL25 "u4" + STR_ERR_DLGCTL26 "Ms" + STR_ERR_DLGCTL27 "" + STR_ERR_DLGCTL28 "]ubNI" + STR_ERR_DLGCTL29 "LZ" + STR_ERR_DLGCTL30 "fBAI" + STR_ERR_DLGCTL31 "u" + STR_ERR_DLGCTL32 "GXP[v" +END + +STRINGTABLE +BEGIN + STR_ERR_DLGCTL33 "tH[" + STR_ERR_DLGCTL34 "O[v" + STR_ERR_DLGCTL35 "R[h" + STR_ERR_DLGCTL36 "jbg" + STR_ERR_DLGCTL37 "폜" + STR_DLGFAV_FILE "t@C" + STR_DLGFAV_FOLDER "tH_" + STR_DLGFAV_SEARCH "" + STR_DLGFAV_REPLACE "u" + STR_DLGFAV_GREP_FILE "GREPt@C" + STR_DLGFAV_GREP_FOLDER "GREPtH_" + STR_DLGFAV_EXT_COMMAND "R}h" + STR_DLGFAV_HIDDEN "(\)" + STR_DLGFAV_FAVORITE "Cɓ" + STR_DLGFAV_CONF_DEL_FAV "ŋߎg%s̗폜܂B\n낵łH\n" + STR_DLGFAV_CONF_DEL_NOTFAV "ŋߎg%ŝ̗CɓȊO폜܂B\n낵łH" +END + +STRINGTABLE +BEGIN + STR_DLGFAV_CONF_DEL_PATH "ŋߎg%s݂̑ȂpX폜܂B\n낵łH" + STR_DLGFAV_DELIMITER "A" + STR_DLGFAV_FAV_REFRESH "(%s)XVꂽߕҏWjĕ\܂B" + STR_DLGFAV_FF_EXCLUDE "t@CEtH_O" + STR_DLGFAV_CURRENT_DIR "JgfBNg" + STR_DLGFAV_ADD "lj" + STR_DLGFAV_ADD_PROMPT "lj镶͂ĂB" + STR_DLGFAV_EDIT "ҏW" + STR_DLGFAV_EDIT_PROMPT "ҏW镶͂ĂB" + STR_DLGFAV_MENU_EDIT "ҏW(&E)" + STR_DLGFAV_MENU_ADD "VKlj(&I)" + STR_DLGFAV_MENU_EXCLUDE "OXgɒlj(&L)" + STR_DLGFAV_MENU_DEL_ALL "ׂč폜(&A)" + STR_DLGFAV_MENU_DEL_NOTFAV "CɓȊO폜(&F)" + STR_DLGFAV_MENU_DEL_INVALID "݂Ȃڍ폜(&N)" + STR_DLGFAV_MENU_DEL_SEL "Iڍ폜(&D)" +END + +STRINGTABLE +BEGIN + STR_DLGFAV_LIST_LIMIT_OVER "OXgςŒljł܂łB" + STR_ERR_DLGUPQRY1 "ă[hsƕύX܂낵ł?" + STR_ERR_DLGUPQRY2 "ă[h܂?" + STR_DLGFIND1 "w肵ĂB" + STR_DLGFNCLST_TITLE_CPP "C++ \bhc[" + STR_DLGFNCLST_TITLE_RULE "[t@C" + STR_DLGFNCLST_TITLE_WZ "WZKwteLXg" + STR_DLGFNCLST_TITLE_TEXT "eLXg gsbNc[" + STR_DLGFNCLST_TITLE_JAVA "Java \bhc[" + STR_DLGFNCLST_TITLE_PYTHON "Python \bhc[" + STR_DLGFNCLST_TITLE_COBOL "COBOL AEgC" + STR_DLGFNCLST_TITLE_VB "Visual Basic AEgC" + STR_DLGFNCLST_TITLE_C "C ֐ꗗ" + STR_DLGFNCLST_TITLE_PLSQL "PL/SQL ֐ꗗ" + STR_DLGFNCLST_TITLE_ASM "AZu AEgC" + STR_DLGFNCLST_TITLE_PERL "Perl ֐ꗗ" +END + +STRINGTABLE +BEGIN + STR_DLGFNCLST_TITLE_ERLANG "Erlang ֐ꗗ" + STR_DLGFNCLST_TITLE_BOOK "ubN}[N" + STR_DLGFNCLST_REMARK01 "錾" + STR_DLGFNCLST_REMARK02 "֐錾" + STR_DLGFNCLST_REMARK03 "vV[W錾" + STR_DLGFNCLST_REMARK04 "֐" + STR_DLGFNCLST_REMARK05 "vV[W" + STR_DLGFNCLST_REMARK06 "pbP[Wdl" + STR_DLGFNCLST_REMARK07 "pbP[W{̕" + STR_DLGFNCLST_REMARK08 "PROC" + STR_DLGFNCLST_REMARK09 "x" + STR_DLGFNCLST_REMARK10 "ENDP" + STR_DLGFNCLST_SORTTYPE1 "ftHg" + STR_DLGFNCLST_SORTTYPE2 "At@xbg" + STR_DLGFNCLST_APND_DECLARE "(錾)" + STR_DLGFNCLST_APND_CLASS " NX" +END + +STRINGTABLE +BEGIN + STR_DLGFNCLST_SORTTYPE2_2 "At@xbg(~)" + STR_DLGFNCLST_MENU_EXPAND "ׂēWJ(&E)" + STR_DLGFNCLST_MENU_COLLAPSE "ׂďk(&O)" + STR_DLGFNCLST_MENU_BOOK_DEL "ubN}[N폜(&D)" + STR_DLGFNCLST_MENU_BOOK_ALL_DEL "ubN}[NS폜(&A)" + STR_KEYHELP_RMENU_NONE "\Ȃ" + STR_KEYHELP_RMENU_TOP "擪ɕ\" + STR_KEYHELP_RMENU_BOTTOM "ɕ\" + STR_ERR_DLGDOCLM_TOOBIG "'%ls'\nƂt@CJ܂B\nt@CTCY傫܂B" + STR_LOADAGENT_BIG_ERROR "'%s'\nƂt@CJ܂B\nt@CTCY傫܂B\n\nwt@C̃TCY: %s\nt@CTCY̏: %s" + STR_ERR_FILEPATH_TOO_LONG "%ls\nƂt@CJ܂B\nt@C̃pX܂B" + STR_GREP_EXCLUDE_FILE "Ot@C " + STR_GREP_EXCLUDE_FOLDER "OtH_ " + STR_FILEDIALOG_READONLY "ǂݎpt@CƂĊJ(&R)" + STR_FILEDIALOG_CODE "R[hZbg(&C):" + STR_FILEDIALOG_EOL "sR[h(&E):" +END + +STRINGTABLE +BEGIN + STR_DLGFNCLST_APND_STRUCT " \" + STR_DLGFNCLST_APND_ENUM " 񋓑" + STR_DLGFNCLST_APND_UNION " p" + STR_DLGFNCLST_APND_NAMESPACE " O" + STR_DLGFNCLST_APND_INTERFACE " C^[tF[X" + STR_DLGFNCLST_APND_GLOBAL "O[o" + STR_DLGFNCLST_VB_STATIC "ÓI " + STR_DLGFNCLST_VB_PRIVATE "vCx[g" + STR_DLGFNCLST_VB_FRIEND "th" + STR_DLGFNCLST_VB_PUBLIC "pubN" + STR_DLGFNCLST_VB_FUNCTION "֐" + STR_DLGFNCLST_VB_PROC "vV[W" + STR_DLGFNCLST_VB_PROPGET "vpeB 擾" + STR_DLGFNCLST_VB_PROPLET "vpeB ݒ" + STR_DLGFNCLST_VB_PROPSET "vpeB Q" + STR_DLGFNCLST_VB_CONST "萔" +END + +STRINGTABLE +BEGIN + STR_DLGFNCLST_VB_ENUM "񋓌^" + STR_DLGFNCLST_VB_TYPE "[U`^" + STR_DLGFNCLST_VB_EVENT "Cxg" + STR_DLGFNCLST_VB_DECL "錾" + STR_DLGFNCLST_LIST_TEXT "eLXg" + STR_DLGFNCLST_LIST_TEXT_M "eLXg *" + STR_DLGFNCLST_LIST_FUNC "֐" + STR_DLGFNCLST_LIST_FUNC_M "֐ *" + STR_DLGFNCLST_LIST_LINE "s" + STR_DLGFNCLST_LIST_LINE_M "s *" + STR_DLGFNCLST_LIST_COL "" + STR_DLGFNCLST_LIST_COL_M " *" + STR_DLGFNCLST_LIST_M "*" + STR_DLGGREP1 "tH_Ił" + STR_DLGGREP2 "t@Cw̃tH_ɂ̓ChJ[h͎g܂B" + STR_DLGGREP3 "t@Cwɂ̓tpX͎g܂" +END + +STRINGTABLE +BEGIN + STR_TYPE_NAME_ASM "AZu" + STR_TYPE_NAME_INI "ݒt@C" + STR_DLGFNCLST_TIP_CLOSE "‚" + STR_DLGFNCLST_TIP_WIN "EBhËʒu" + STR_DLGFNCLST_TIP_UPDATE "XV" + STR_DLGFNCLST_MENU_UPDATE "XV(&U)" + STR_DLGFNCLST_MENU_COPY "Rs[(&C)" + STR_DLGFNCLST_MENU_WINPOS "EBhËʒu(&W)" + STR_DLGFNCLST_MENU_LEFTDOC "hbLO(&L)" + STR_DLGFNCLST_MENU_RIGHTDOC "EhbLO(&R)" + STR_DLGFNCLST_MENU_TOPDOC "hbLO(&T)" + STR_DLGFNCLST_MENU_BOTDOC "hbLO(&B)" + STR_DLGFNCLST_MENU_FLOATING "t[eBO(&F)" + STR_DLGFNCLST_MENU_NODOCK "hbLO֎~(&I)" + STR_DLGFNCLST_MENU_SYNC "hbLOzu𓯊(&S)" + STR_DLGFNCLST_MENU_INHERIT "hbLOzuʌp(&C)" +END + +STRINGTABLE +BEGIN + STR_DLGFNCLST_MENU_TYPE "hbLOzu^Cvʌp(&Y)" + STR_DLGFNCLST_MENU_UNIFY "p𓝈(&U)" + STR_DLGFNCLST_MENU_CLOSE "‚(&X)" + STR_DLGFNCLST_UNIFY "݂̉ʂ̃hbLOzuׂĂ̋ʐݒE^CvʐݒɃRs[ēꂵ܂B\ni݊JĂ鑼ʂ̏Ԃꂵ܂Bj\n" + STR_BREGONIG_LOAD "bregonig.dll ̃[hɎs܂B\r\nK\𗘗pɂ Unicode ł bregonig.dll KvłB\r\n@̓wvQƂĂB" + STR_BREGONIG_INIT "bregonig.dll ̗pɎs܂B\r\nK\𗘗pɂ Unicode ł bregonig.dll KvłB\r\n@̓wvQƂĂB" + STR_BREGONIG_ERROR "bregonig.dll ̃[hŗ\ʃG[܂B" + STR_BREGONIG_TITLE "K\G[" + STR_ERR_CWSH09 "}N̎s𒆒f܂B" + STR_ERR_DLGMACRO03_1 "͉sR[hw肳Ă܂D" + STR_ERR_DLGMACRO16 "lw肵ĂD" + STR_DLLPLG_TITLE "DLLvOC" + STR_DLLPLG_INIT_ERR1 "DLL̓ǂݍ݂Ɏs܂\n%s\n%ls" + STR_DLLPLG_INIT_ERR2 "DLL̓ǂݍ݂Ɏs܂" + STR_PLGMGR_FOLDER "vOCtH_쐬o܂" + STR_PLGMGR_CANCEL "LZ܂" +END + +STRINGTABLE +BEGIN + STR_DLGGREP4 "ΏۃtH_w肵ĂB" + STR_DLGGREP5 "ΏۃtH_܂B" + STR_DLGGREP6 "ΏۃtH_܂B" + STR_DLGJUMP1 "sԍ͂ĂB" + STR_DLGJUMP_PSLQL "%d s %s pbP[Wdl" + STR_DLGOPNFL1 "ϊȂ" + STR_DLGOPNFL2 " ͊ɑ݂܂B\r\n㏑܂H" + STR_DLGOPNFL3 "Otĕۑ" + STR_DLGOPNFL_EXTNAME1 "[U[w" + STR_DLGOPNFL_EXTNAME2 "eLXgt@C" + STR_DLGOPNFL_EXTNAME3 "ׂẴt@C" + STR_DLGOPNFL_ERR1 "_CAOJ܂B\n\nG[:%s" + STR_DLGPRNST1 "ݒ薼̕ύX" +END + +STRINGTABLE +BEGIN + STR_IMPEXP_DIC_LENGTH "̐%dȓɂĂB\n" + STR_IMPEXP_DIC_RECORD "ꕔ̃f[^ǂݍ߂܂ł\nsȍs: %d" + STR_IMPEXP_KEY_FORMAT "L[ݒt@Č`Ⴂ܂B\n\n" + STR_IMPEXP_CUSTMENU_FORMAT "JX^j[ݒt@Č`Ⴂ܂B\n\n" + STR_IMPEXP_KEYWORD "L[[h̐ɒB߁A‚̃L[[hljł܂łB" + STR_IMPEXP_MEINMENU "Cj[ݒt@Č`Ⴂ܂B\n\n" + STR_STRINGESC_CPP "C/C++ꕗ \\""" + STR_STRINGESC_PLSQL "PL/SQL """"" + STR_STRINGESC_HTML "HTML/XML =""""" + STR_STRINGESC_CSHARP "C# @""""" + STR_STRINGESC_PYTHON "Python """"""" + STR_KEY_BIND_WHEEL_UP "zC[Abv" + STR_KEY_BIND_WHEEL_DOWN "zC[_E" + STR_KEY_BIND_WHEEL_LEFT "zC[" + STR_KEY_BIND_WHEEL_RIGHT "zC[E" + STR_DLGPLUGINOPT_LOAD "vOC[hĂ܂B" +END + +STRINGTABLE +BEGIN + STR_DLGPLUGINOPT_TITLE "%ls vOC̐ݒ" + STR_DLGPLUGINOPT_INIHEAD " vOCݒt@C" + STR_DLGPLUGINOPT_OPTION "włIvV܂" + STR_DLGPLUGINOPT_LIST1 "" + STR_DLGPLUGINOPT_LIST2 "l" + STR_DLGPLUGINOPT_SELECT "%s̑I" + STR_DOCOUTLINE_REGEX "K\[\n%ls\nŃG[܂B\n%s" + STR_CHANGE_CHARSET "%s\n̓eLXg̕ύX͗L܂񂪁A\nR[hZbgύXĂ܂B\n‚Oɕۑ܂H" + STR_TITLE_GREP "yGrepz%ls%s" + STR_MENU_GREP "%s yGrepz""%s%s""" + STR_TAB_CAPTION_OUTPUT "yGrepz" + STR_TAB_CAPTION_GREP "yAEgvbgz" + STR_CAPTION_ACTIVE_OUTPUT "AEgvbg" + STR_CAPTION_ACTIVE_UPDATE "(XV)" + STR_CAPTION_ACTIVE_VIEW "(r[[h)" + STR_CAPTION_ACTIVE_OVERWRITE "(㏑֎~)" +END + +STRINGTABLE +BEGIN + STR_DLGPRNST2 "ݒ̖̂͂ĂB" + STR_DLGFLPROP_FILENAME "t@C " + STR_DLGFLPROP_FILETYPE "ݒ̃^Cv " + STR_DLGFLPROP_ENCODING "R[h " + STR_DLGFLPROP_WITH_BOM " BOM t" + STR_DLGFLPROP_LINE_COUNT "s %ds\r\n" + STR_DLGFLPROP_LAYOUT_LINE "CAEgs %ds\r\n" + STR_DLGFLPROP_VIEW_MODE "r[[hŊJĂ܂B\r\n" + STR_DLGFLPROP_MODIFIED "ύXĂ܂B\r\n" + STR_DLGFLPROP_NOT_MODIFIED "ύXĂ܂B\r\n" + STR_DLGFLPROP_CMD_COUNT "\r\nR}hs %d\r\n" + STR_DLGFLPROP_FILE_INFO "--t@C-----------------\r\n" + STR_DLGFLPROP_W_LOCK "Ȃ͂̃t@CAvZX̏㏑֎~[hŃbNĂ܂B\r\n" + STR_DLGFLPROP_RW_LOCK "Ȃ͂̃t@CAvZX̓ǂݏ֎~[hŃbNĂ܂B\r\n" + STR_DLGFLPROP_LOCK "Ȃ͂̃t@CbNĂ܂B\r\n" + STR_DLGFLPROP_NOT_LOCK "Ȃ͂̃t@CbNĂ܂B\r\n" +END + +STRINGTABLE +BEGIN + STR_DLGFLPROP_ATTRIBUTES "t@C " + STR_DLGFLPROP_AT_ARCHIVE "/A[JCu" + STR_DLGFLPROP_AT_COMPRESS "/k" + STR_DLGFLPROP_AT_FOLDER "/tH_" + STR_DLGFLPROP_AT_HIDDEN "/B" + STR_DLGFLPROP_AT_NORMAL "/m[}" + STR_DLGFLPROP_AT_OFFLINE "/ItC" + STR_DLGFLPROP_AT_READONLY "/ǂݎp" + STR_DLGFLPROP_AT_SYSTEM "/VXe" + STR_DLGFLPROP_AT_TEMP "/e|" + STR_DLGFLPROP_CREATE_DT "쐬 " + STR_DLGFLPROP_YMDHMS "%dN%d%d %02d:%02d:%02d" + STR_DLGFLPROP_UPDATE_DT "XV " + STR_DLGFLPROP_ACCESS_DT "ANZX " + STR_DLGFLPROP_DOS_NAME "MS-DOSt@C %s\r\n" + STR_DLGFLPROP_FILE_SIZE "t@CTCY %d oCg\r\n" +END + +STRINGTABLE +BEGIN + STR_DLGREPLC_CLIPBOARD "Nbv{[hɗLȃf[^܂I" + STR_DLGREPLC_STR "w肵ĂB" + STR_DLGREPLC_REPLACE "%dӏu܂B" + STR_DLGREPLC_REPSTR "uw肵ĂB" + STR_DLGSMCLR_BTN1 "F" + STR_DLGSMCLR_BTN2 "wiF" + STR_DLGTAGJMP1 "(ʒm)" + STR_DLGTAGJMP2 "(͌‚܂ł)" + STR_DLGTAGJMP_LIST1 "L[[h" + STR_DLGTAGJMP_LIST2 "Kw" + STR_DLGTAGJMP_LIST3 "sԍ" + STR_DLGTAGJMP_LIST4 "" + STR_DLGTAGJMP_LIST5 "t@C" + STR_DLGTAGJMP_LIST6 "l" + STR_DLGTAGJMP3 "L[[h ..." + STR_DLGTAGMAK_SELECTDIR "^O쐬tH_̑I" +END + +STRINGTABLE +BEGIN + STR_DLGWINSZ_NORMAL "" + STR_DLGWINSZ_MAXIMIZE "ő剻" + STR_DLGWINSZ_MINIMIZE "(ŏ)" + STR_ERR_DLGDOCLM1 "%ls\nƂt@CJ܂B\nt@C݂܂B" + STR_ERR_DLGDOCLM2 "'%ls'\nƂt@CJ܂B\nǂݍ݃ANZX܂B" + STR_ERR_DLGDOCLM3 "'%ls'\nƂt@CJ܂B\ñAvP[VŎgpÔ\܂B" + STR_ERR_DLGDOCLM4 "'%ls'Ƃt@C̓ǂݍݒɃG[܂B\nt@C̓ǂݍ݂𒆎~܂B" + STR_ERR_DLGDOCLM5 "'%ls'\nt@Cۑł܂B\npX݂ȂÃAvP[VŎgpÔ\܂B" + STR_ERR_DLGDOCLM6 "CDocLineMgr::GetAllData()\nmۂɎs܂B\n%doCg" + STR_ERR_DLGDOCLMN1 "sakura: ҂ɋė~G[" + STR_ERR_DLGDRPTGT1 "::RegisterDragDrop()\ns" + STR_TRAY_CREATE "CControlTray::Create()\nEBhENXo^ł܂łB" + STR_TRAY_TYPE_NAME "ݒ%d" + STR_TRAY_EXTHELP1 "OwvPݒ肳Ă܂B\nݒ肵܂?" + STR_TRAY_RESPONSEFILE "X|Xt@C̍쐬Ɏs܂B" + STR_TRAY_CREATEPROC1 "'%s'\nvZX̋NɎs܂B\n%s" +END + +STRINGTABLE +BEGIN + STR_ESI_DEFAULT_CHARCODE "ftHgR[h\r\n" + STR_ESI_SAMPLE_LEN "Tvf[^\r\n" + STR_ESI_SAMPLE_LEN_FORMAT "\t%d oCg\r\n" + STR_ESI_BYTES_AND_POINTS "ŗLoCgƃ|Cg\r\n" + STR_ESI_UTF16LE_B_AND_P "\t\tUTF16LE ŗLoCg %d,\t|Cg %d\r\n" + STR_ESI_UTF16BE_B_AND_P "\t\tUTF16BE ŗLoCg %d,\t|Cg %d\r\n" + STR_ESI_BOM "\t\tBOM ̐ʁ@" + STR_ESI_BOM_UNKNOWN "s\r\n" + STR_ESI_MBC_OTHER_UNICODE "\tMBC LȊO UNICODE t@~\r\n" + STR_ESI_OTHER_B_AND_P "\t\t%d.%s\tŗLoCg %d\t|Cg %d\r\n" + STR_ESI_EUC_ZENKAKU "\t\tEEUCSpJi/EUCSp\t%6.3f\r\n" + STR_ESI_RESULT "茋\r\n" + STR_FILESAVE_CONVERT_ERROR "'%s'\nt@Cۑł܂B\nϊG[܂B" + STR_DLGPROFILE_ERR_WRITE "vtB[ݒ݂̏Ɏs܂B" + STR_DLGPROFILE_NEW_PROF_TITLE "VKvt@C" + STR_DLGPROFILE_NEW_PROF_MSG "vt@C͂Ă" +END + +STRINGTABLE +BEGIN + STR_DLGPROFILE_ERR_INVALID_CHAR "płȂ܂܂Ă܂B" + STR_DLGPROFILE_ERR_ALREADY "łɓÕvt@C܂B" + STR_DLGPROFILE_ERR_FILE "̃t@C邽ߍ쐬ł܂B" + STR_DLGPROFILE_RENAME_TITLE "vt@C̕ύX" + STR_DLGPROFILE_RENAME_MSG "vt@C͂Ă" + STR_DLGPROFILE_ERR_RENAME "O̕ύXɎs܂B\nvt@C͗p̉”\܂B" + STR_PROPCOMTAB_TAB_POS_TOP "" + STR_PROPCOMTAB_TAB_POS_BOTTOM "" + STR_PROPCOMTAB_TAB_POS_LEFT "E" + STR_PROPCOMTAB_TAB_POS_RIGHT "" + STR_TAGJUMP_0 "̃t@CȂ" + STR_TAGJUMP_1 "qbg玟̃t@CȂ" + STR_TAGJUMP_2 "SvŃqbg玟̃t@CȂ" + STR_TAGJUMP_3 "̃t@C" + STR_GREP_REPLACE_TO "u " + STR_GREP_PASTE_CLIPBOAD "(Nbv{[h\t)" +END + +STRINGTABLE +BEGIN + STR_TRAY_CREATEPROC2 "'%s'\nvZX̋NɎs܂B" + STR_TRAY_EXITALL "݊JĂҏWp̃EBhEׂĕ‚ďI܂?" + STR_TRAY_ACCELTABLE "CControlTray::CreateAccelTbl()\nANZ[^ e[u쐬ł܂B\nVXe\[XsĂ܂B" + STR_LOADAGENT_ERR_OPEN "'%s'\nƂt@CJ܂B\nǂݍ݃ANZX܂B" + STR_LOADAGENT_BIG_WARNING "'%s'\nt@CTCY%dMBȏ゠܂BJ܂H" + STR_SAVEAGENT_VIEW_FILE "r[[hł͓t@Cւ̕ۑ͂ł܂B" + STR_SAVEAGENT_OTHER "'%s'\nt@Cۑł܂B\ñEBhEŎgpłB" + STR_ERR_DLGEDITDOC5 "R[h" + STR_ERR_DLGEDITDOC6 "%s\n\ñt@C𕶎R[h %s ŊJƂĂ܂AO͕ʂ̕R[h %s ŊJĂ܂B\nOƓR[hg܂H\n\nE[͂(Y)] %s\nE[(N)]%s\n" + STR_NOT_EXSIST_SAVE "%s\nƂt@C݂͑܂B\n\nt@CۑƂɁAfBXNɂ̃t@C쐬܂B" + STR_BACKUP_ERR_TITLE "t@Cۑ" + STR_BACKUP_ERR_MSG "obNAbv̍쐬Ɏs܂Dt@Cւ̏㏑pčs܂D" + STR_BACKUP_ERR_PATH_CRETE + "obNAbṽpX쐬ɃG[ɂȂ܂B\npX邩sȏłB\nobNAbv쐬ɏ㏑ۑĂ낵łH" + STR_BACKUP_CONFORM_TITLE1 "obNAbv쐬̊mF" + STR_BACKUP_CONFORM_MSG1 "ύXOɁAobNAbvt@C쐬܂B\n낵łH [(N)] IԂƍ쐬ɏ㏑i܂͖OtājۑɂȂ܂B\n\n%s\n \n%s\n\n쐬obNAbvt@Cݔɕ荞݂܂B\n" + STR_BACKUP_CONFORM_TITLE2 "obNAbv쐬̊mF" +END + +STRINGTABLE +BEGIN + STR_BACKUP_CONFORM_MSG2 "ύXOɁAobNAbvt@C쐬܂B\n낵łH [(N)] IԂƍ쐬ɏ㏑i܂͖OtājۑɂȂ܂B\n\n%s\n \n%s\n\n" + STR_BACKUP_ERR_DELETE "폜s" + STR_BACKUP_ERR_MOVE "ړs" + STR_ERR_DLGEDITDOC21 "%s\n͌ݑ̃vZXɂď݂֎~Ă܂B" + STR_EXCLU_DENY_READWRITE "ǂݏ֎~" + STR_EXCLU_DENY_WRITE "㏑֎~" + STR_EXCLU_UNDEFINED "`̃[hi肪܂j" + STR_FILE_LOCK_ERR "%s\n%sŃbNł܂łB\ñ݂t@Cɑ΂r͖ƂȂ܂B" + STR_ERR_DLGEDITDOC30 "%s\n͕ύXĂ܂B ‚Oɕۑ܂H\n\nr[[hŊJĂ̂ŁAOtĕۑ΂Ǝv܂B\n" + STR_ERR_DLGEDITDOC31 "%s\n͕ύXĂ܂B ‚Oɕۑ܂H" + STR_AUTORELOAD_NOFITY "t@CXV %02d:%02d:%02d" + STR_OUTLINE_CPP_NONAME "" + STR_OUTLINE_CPP_DEFPOS "::`ʒu" + STR_OUTLINE_PYTHON_UNDEFINED "̖" + STR_OUTLINE_PYTHON_CLASS " NX" + STR_OUTLINE_JAVA_DEFPOS "`ʒu" +END + +STRINGTABLE +BEGIN + STR_WRAP_WIDTH_FULL "܂Ԃ: %d iőj" + STR_WRAP_WIDTH_WINDOW "܂Ԃ: %d iE[j" + STR_WRAP_WIDTH_FIXED "܂Ԃ: %d iwj" + STR_EXCLU_NO_EXCLUSIVE "Ȃ" + STR_TAB_SYMBOL_CHARA "w" + STR_TAB_SYMBOL_SHORT_ARROW "Z" + STR_TAB_SYMBOL_LONG_ARROW "" + STR_CODECHECKER_EOL_UNIFY "sR[h݂Ă܂B\r\n݂͉̓sR[h %s ɓꂵ܂H" + STR_CODECHECKER_CONFORM_LOSESOME + "GR[h %s ŕۑ悤ƂĂ܂A\r\nR[hϊɂꕔ̕񂪎܂B\r\nۑ𑱍s܂H\nŏ̏ꏊ %ds %s [%ls]%s\nLZ=YʒuɈړ" + STR_CODECHECKER_LOSESOME_SAVE "ꕔ̕񂪁AZ[u̕ϊɂ莸܂" + STR_CODECHECKER_LOSESOME_ROAD "ꕔ̕񂪁A[h̕ϊɂ莸܂" + STR_SUPPORT_NOT_COMPLITE "⊮Ώۂ܂" + STR_CONVERT_ERR "ϊŃG[܂" +END + +STRINGTABLE +BEGIN + STR_VIEW_TIMER "CEditView::Create()\n^C}[Nł܂B\nVXe\[XsĂ̂܂B" + STR_ERR_DLGEDITVW2 "" + STR_ERR_DLGEDITVW5 "\n--------------------\n" + STR_ERR_DLGEDITVW6 "" + STR_MENU_KEYWORDINFO "L[[h̐Nbv{[hɃRs[" + STR_MENU_OPENKEYWORDDIC "L[[hJ" + STR_STATUS_ROW_COL "%5d s %4d " + STR_INS_MODE_INS "}" + STR_INS_MODE_OVR "㏑" + STR_GREP_SEARCH_CONDITION "\r\n " + STR_GREP_SEARCH_FILE "ut@Cv\r\n" + STR_GREP_SEARCH_TARGET "Ώ " + STR_GREP_SEARCH_FOLDER "tH_ " + STR_GREP_SUBFOLDER_YES " (TutH_)\r\n" + STR_GREP_SUBFOLDER_NO " (TutH_Ȃ)\r\n" + STR_GREP_COMPLETE_WORD " (PPʂŒT)\r\n" +END + +STRINGTABLE +BEGIN + STR_GREP_CASE_SENSITIVE " (p啶ʂ)\r\n" + STR_GREP_IGNORE_CASE " (p啶ʂȂ)\r\n" + STR_GREP_REGEX_DLL " (K\:" + STR_GREP_CHARSET_AUTODETECT " (R[hZbg̎)\r\n" + STR_GREP_CHARSET " (R[hZbgF" + STR_GREP_SHOW_MATCH_LINE " (vso)\r\n" + STR_GREP_SHOW_MATCH_AREA " (vӏ̂ݏo)\r\n" + STR_GREP_SUSPENDED "f܂B\r\n" + STR_GREP_MATCH_COUNT "%d ‚܂B\r\n" + STR_GREP_RUNNINNG "Grep̏łB\n" + STR_GREP_TIMER ": %d~b\r\n" + STR_GREP_SHOW_FIRST_MATCH " (t@Cŏ̂݌)\r\n" + STR_GREP_ERR_ENUMKEYS0 "(s)" + STR_GREP_ERR_ENUMKEYS1 "t@Cw̃tH_ɂ̓ChJ[h͎g܂" + STR_GREP_ERR_ENUMKEYS2 "t@Cwɂ̓tpX͎g܂" + STR_GREP_ERR_FILEOPEN "file open error [%s]\r\n" +END + +STRINGTABLE +BEGIN + STR_GREP_SHOW_FIRST_LINE " (vs̍ŏ̉ӏ̂ݏo)\r\n" + STR_GREP_REPLACE_COUNT "%d ‚u܂B\r\n" + STR_GREP_REP_ERR_DELETE "t@C̍폜Ɏs܂B" + STR_GREP_REP_ERR_REPLACE "t@C̒uɎs܂B" + STR_GREP_ERR_FILEWRITE "߂܂łB [%s]\r\n" + STR_ERR_DLGMACRO17 "GREPuオw肳Ă܂D" + STR_FILETREE_FROM_COMMON "ݒ: ʐݒ" + STR_FILETREE_FROM_TYPE "ݒ: ^Cvʐݒ" + STR_FILETREE_FROM_FILE "ݒ: %s" + STR_FILETREE_CURDIR "" + STR_FILETREE_MAXCOUNT "ő吔(%d)𒴂ߐ؂̂Ă܂" + STR_FILETREE_MENU_ROOT "INI[g(&I)" + STR_FILETREE_MENU_MYDOC "}C hLg(&Y)" + STR_FILETREE_MENU_MYMUSIC "}C ~[WbN(&M)" + STR_FILETREE_MENU_MYVIDEO "}C rfI(&V)" + STR_FILETREE_MENU_DESK "fXNgbv(&D)" +END + +STRINGTABLE +BEGIN + STR_GREP_ERR_FILEREAD "t@C̓ǂݍݒɃG[܂B[%s]\r\n" + STR_EDITVIEW_EXECCMD_ERR "R}hs͎s܂B" + STR_EDITVIEW_EXECCMD_STOP "\r\nf܂B\r\n" + STR_EDITVIEW_EXECCMD_RET "\r\nIR[h: %d\r\n" + STR_ERR_DLGEDITVWHOKAN1 "⊮ꗗt@Cݒ肳Ă܂B\nݒ肵܂?" + STR_EDITVWISRCH_REGEX "K\Cugpł܂B" + STR_EDITVWISRCH_MIGEGO1 "MIGEMO.DLLgpł܂B" + STR_EDITVWISRCH_MIGEGO2 "MIGEMO͎gpł܂B" + STR_EDITVWISRCH_NOMATCH " (‚܂)" + STR_ERR_MACRO1 "}N %d (%s) ̎sɎs܂B" + STR_ERR_SRPREV1 "Č܂" + STR_ERR_SRPREV2 "‚܂ł" + STR_ERR_SRPREV3 "() ɕ '%ls' P‚‚܂B" + STR_ERR_SRNEXT1 "擪Č܂" + STR_ERR_SRNEXT2 "‚܂ł" + STR_ERR_SRNEXT3 "O() ɕ '%ls' P‚‚܂B" +END + +STRINGTABLE +BEGIN + STR_ERR_UNINDENT1 "tCfg͑Î" + STR_ERR_TAGJMP1 "^OWvł܂" + STR_ERR_TAGJMPBK1 "^OWvobNł܂" + STR_ERR_CEDITVIEW_CMD01 "OwvPݒ肳Ă܂B\nݒ肵܂?" + STR_ERR_CEDITVIEW_CMD02 "OHTMLwvݒ肳Ă܂B\nݒ肵܂?" + STR_ERR_CEDITVIEW_CMD03 "^O쐬R}hs͎s܂B\n\nCTAGS.EXE ‚܂B" + STR_ERR_CEDITVIEW_CMD04 "^O쐬R}hs͎s܂B\n\n%s" + STR_ERR_CEDITVIEW_CMD05 "^Ot@C쐬łB" + STR_ERR_CEDITVIEW_CMD06 "^O쐬R}hs͎s܂B\n\n%hs" + STR_ERR_CEDITVIEW_CMD07 "^Ot@C̍쐬I܂B" + STR_ERR_CEDITVIEW_CMD08 "C/C++wb_t@C̃I[vɎs܂B" + STR_ERR_CEDITVIEW_CMD09 "C/C++\[Xt@C̃I[vɎs܂B" + STR_ERR_CEDITVIEW_CMD10 "Nbv{[hɗLȃf[^܂I" + STR_ERR_CEDITVIEW_CMD11 "Ō܂Œu܂B" + STR_ERR_CEDITVIEW_CMD14 "t@C݂̏Ɏs܂B\n\n%s" + STR_ERR_CEDITVIEW_CMD16 "t@C݂̏Ɏs܂B\n\n%s" +END + +STRINGTABLE +BEGIN + STR_ERR_CEDITVIEW_CMD18 "%s\n͕ύXĂ܂B Oracle SQL*PlusŎsOɕۑ܂H" + STR_ERR_CEDITVIEW_CMD20 "Oracle SQL*Plus̔܂B\n΂炭҂ĂĂюsĂB" + STR_ERR_CEDITVIEW_CMD21 "SQLt@CɕۑȂOracle SQL*PlusŎsł܂B\n" + STR_ERR_CEDITVIEW_CMD22 "قȂӏ͌‚܂łB" + STR_ERR_CEDITVIEW_CMD23 "قȂӏ‚܂B" + STR_ERR_CEDITVIEW_CMD24 "}Nt@C쐬ł܂łB\nt@C̎擾G[ nRet=%d" + STR_ERR_CEDITVIEW_CMD25 "}Nt@C쐬ł܂łB\n\n%s" + STR_ERR_CEDITVIEW_CMD26 "ۑ”\ȃ}N܂DL[{[h}NȊO͕ۑł܂D" + STR_ERR_CEDITVIEW_CMD27 "}Nt@C쐬ł܂łB\n\n%s" + STR_ERR_CEDITVIEW_CMD28 "t@CJ܂łB\n\n%s" + STR_ERR_CEDITVIEW_CMD29 "%s\n\ñt@C͕ύXĂ܂B\nă[hsƕύX܂A낵ł?" + STR_BOOKMARK_NEXT_NOT_FOUND "O() ɃubN}[N‚܂B" + STR_BOOKMARK_PREV_NOT_FOUND "() ɃubN}[N‚܂B" + STR_ERR_DLGEDITVWCMDNW7 "%ds}[W܂B" + STR_ERR_DLGEDITVWCMDNW8 "}[W”\ȍs݂‚܂łB" + STR_SAVEAGENT_OTHER_APP "'%s'\nt@Cۑł܂B\npX݂ȂÃAvP[VŎgpÔ\܂B" +END + +STRINGTABLE +BEGIN + STR_ERR_DLGEDITVWCMDNW11 "t@C̏ݒɃG[܂B" + STR_ERR_DLGEDITVWCMDNW12 "t@C̓ǂݍݒɃG[܂B" + STR_ERR_DLGEDITVWDIFF1 "R}hs͎s܂B\n\nrt@C‚܂B" + STR_ERR_DLGEDITVWDIFF2 "R}hs͎s܂B\n\nDIFF.EXE ‚܂B" + STR_ERR_DLGEDITVWDIFF3 "R}hs͎s܂B\n\n%ls" + STR_ERR_DLGEDITVWDIFF4 "DIFFsƂt@C̓oCit@CłB" + STR_ERR_DLGEDITVWDIFF5 "DIFF͌‚܂łB" + STR_DIFF_NEXT_NOT_FOUND "O() ɍ‚܂B" + STR_DIFF_PREV_NOT_FOUND "() ɍ‚܂B" + STR_DIFF_FAILED "R}hs͎s܂B" + STR_DIFF_FAILED_TEMP "R}hs͎s܂B\n\nꎞt@C쐬ł܂B" + STR_DIFF_FAILED_LONG "R}hs͎s܂B\n\ns܂B" + STR_VIEW_MOUSE_BUG "oOĂ" + STR_VIEW_MOUSE_MENU_PATH "pX\t(&P)" + STR_VIEW_MOUSE_MENU_FILE "t@C\t(&F)" + STR_VIEW_MOUSE_MENU_OPEN "t@CJ(&O)" +END + +STRINGTABLE +BEGIN + STR_VIEW_MOUSE_MENU_CANCEL "LZ" + STR_ERR_DLGEDITWND01 "CEditWnd::CreateAccelTbl()\nANZ[^ e[u쐬ł܂B\nVXe\[XsĂ܂B" + STR_ERR_DLGEDITWND02 "GfB^Ԃ̑ΘbɎs܂B\nẍقȂGfB^ɋNÔ\܂B" + STR_ERR_DLGEDITWND03 "CEditWnd::Create()\n^C}[Nł܂B\nVXe\[XsĂ̂܂B" + STR_ERR_DLGEDITWND04 "Rebar ̍쐬Ɏs܂B" + STR_ERR_DLGEDITWND05 "c[o[̍쐬Ɏs܂B" + STR_EDITWND_MENU_NEL "͉sR[hw(&NEL)" + STR_EDITWND_MENU_LS "͉sR[hw(L&S)" + STR_EDITWND_MENU_PS "͉sR[hw(&PS)" + STR_ERR_DLGEDITWND13 ":\t\t%ls (%s)\n\nSJIS:\t\t%s\nJIS:\t\t%s\nEUC:\t\t%s\nLatin1:\t\t%s\nUTF-16:\t\t%s\nUTF-8:\t\t%s\nCESU-8:\t\t%s" + STR_ERR_DLGEDITWND14 "vr[sOɁAv^CXg[ĂB\n" + STR_MENU_OUTPUT "%s AEgvbg" + STR_ERR_DLGEDITWND20 "99999 L 9999 C" + STR_ERR_DLGEDITWND21 "CFLF" + STR_ERR_DLGEDITWND22 "0000" +END + +STRINGTABLE +BEGIN + STR_ERR_DLGEDITWND23 "UTF-16 BOMt" + STR_ERR_DLGEDITWND24 "REC" + STR_ERR_DLGEDITWND25 "㏑" + STR_ERR_DLGFUNCKEYWN1 "CFuncKeyWnd::Open()\n^C}[Nł܂B\nVXe\[XsĂ̂܂B" + STR_ERR_DLGFUNCLKUP01 "O}N" + STR_ERR_DLGFUNCLKUP02 "JX^j[" + STR_ERR_DLGFUNCLKUP03 "}N %d (o^)" + STR_ERR_DLGFUNCLKUP04 "t@Cn" + STR_ERR_DLGFUNCLKUP05 "ҏWn" + STR_ERR_DLGFUNCLKUP06 "J[\ړn" + STR_ERR_DLGFUNCLKUP07 "In" + STR_ERR_DLGFUNCLKUP08 "`In" + STR_ERR_DLGFUNCLKUP09 "Nbv{[hn" + STR_ERR_DLGFUNCLKUP10 "}n" + STR_ERR_DLGFUNCLKUP11 "ϊn" + STR_ERR_DLGFUNCLKUP12 "n" +END + +STRINGTABLE +BEGIN + STR_ERR_DLGFUNCLKUP13 "[h؂ւn" + STR_ERR_DLGFUNCLKUP14 "ݒn" + STR_ERR_DLGFUNCLKUP15 "}Nn" + STR_ERR_DLGFUNCLKUP16 "EBhEn" + STR_ERR_DLGFUNCLKUP17 "x" + STR_ERR_DLGFUNCLKUP18 "̑" + STR_ERR_DLGFUNCLKUP19 "vOC" + STR_ERR_DLGKEYBIND1 "L[\t@\\t֐\t@\ԍ\tL[}NL^/s" + STR_ERR_DLGKEYBIND2 "---O`ĂȂ-----" + STR_ERR_DLGKEYMACMGR1 "//L[{[h}Ñt@C\r\n" + STR_ERR_DLGKEYMACMGR2 "Macroǂݍ݃G[" + STR_ERR_DLGKEYMACMGR3 "Line %d: Column %d: ܂\n" + STR_ERR_DLGKEYMACMGR4 "Line %d: Column %d\r\n֐%ls%dԖڂ̈ɕ͒u܂D" + STR_ERR_DLGKEYMACMGR5 "Line %d:\r\n֐%ls%dԖڂ̈̏I%lc܂D" + STR_ERR_DLGKEYMACMGR6 "Line %d: Column %d\r\n֐%ls%dԖڂ̈ɐl͒u܂D" + STR_ERR_DLGKEYMACMGR7 "Line %d: Column %d: Syntax Error\n" +END + +STRINGTABLE +BEGIN + STR_ERR_DLGKEYMACMGR8 "Line %d: %ls݂͑Ȃ֐łD\n" + STR_ERR_DLGMACRO01 "CMacro::GetFuncInfoByID()ɁAoÔŃG[o܂\r\n" + STR_ERR_DLGMACRO02 "MacrosG[" + STR_ERR_DLGMACRO03 "}ׂR[hw肳Ă܂D" + STR_ERR_DLGMACRO04 "()w肳Ă܂D" + STR_ERR_DLGMACRO05 "Wvsԍw肳Ă܂D" + STR_ERR_DLGMACRO06 "}[Ns̃p^[w肳Ă܂D" + STR_ERR_DLGMACRO07 "()w肳Ă܂D" + STR_ERR_DLGMACRO08 "t@Cw肳Ă܂D" + STR_ERR_DLGMACRO09 "up^[w肳Ă܂D" + STR_ERR_DLGMACRO10 "up^[w肳Ă܂D" + STR_ERR_DLGMACRO11 "GREPp^[w肳Ă܂D" + STR_ERR_DLGMACRO12 "t@Cʂw肳Ă܂D" + STR_ERR_DLGMACRO13 "tH_w肳Ă܂D" + STR_ERR_DLGMACRO14 "ǂݍ݃t@Cw肳Ă܂D" + STR_ERR_DLGMACRO15 "ۑt@Cw肳Ă܂D" +END + +STRINGTABLE +BEGIN + STR_ERR_DLGMEM1 "CMemory::AllocBuffer(nNewDataLen==%d)\nmۂɎs܂B\n" + STR_ERR_DLGNRMPROC1 "CreateMutex()sB\nI܂B" + STR_ERR_DLGNRMPROC2 "GfB^܂̓VXerW[ԂłB\n΂炭҂ĊJȂĂB" + STR_ERR_DLGPPA1 "PPAsɐVPPA}NĂяoƂ͂ł܂" + STR_ERR_DLGPPA2 "֐̎sG[\n%hs" + STR_ERR_DLGPPA3 "sȊ֐̎sG[(oOł)\nFunc_ID=%d" + STR_ERR_DLGPPA4 "ڍוs̃G[" + STR_ERR_DLGPPA5 "`̃G[\nError_CD=%d\n%s" + STR_ERR_DLGPPA6 "G[񂪕s" + STR_ERR_DLGPPA7 "PPAsG[" + STR_ERR_CPRINT01 "OpenPrinter()ɎsB\nv^foCX=[%s]" + STR_ERR_CPRINT02 "StartDoc()ɎsB\nv^foCX=[%s]" + STR_ERR_CPRINT03 "s" + STR_ERR_DLGPRNPRVW1 "" + STR_ERR_DLGPRNPRVW2 "c" + STR_ERR_DLGPRNPRVW3 "݂̃v^ %s ł́A\nw肳ꂽp %s ͎gpł܂B\np”\ȗp %s ɕύX܂B" +END + +STRINGTABLE +BEGIN + STR_ERR_DLGPRNPRVW4 "\y[Wԍw肵ĂB(1 - %d)" + STR_ERR_DLGPRNPRVW5 "vr[y[Ww" + STR_ERR_DLGPRNPRVW6 "%d/%d" + STR_ERR_DLGPRNPRVW7 "y[W܂B" + STR_ERR_DLGPRNPRVW3_1 "y[WݒG[:󎚉”\̈悪܂" + STR_ERR_DLGPROCESS1 "قȂo[W̃GfB^𓯎ɋN邱Ƃ͂ł܂B" + STR_ERR_DLGPROCFACT1 "̃AvP[Vsɂ́A\nWindows95ȏ ܂ WindowsNT4.0ȏOSKvłB\nAvP[VI܂B" + STR_ERR_DLGPROCFACT2 "OS̃o[W擾ł܂B\nAvP[VI܂B" + STR_ERR_DLGPROCFACT3 "'%s'\nvZX̋NɎs܂B\n%s" + STR_ERR_DLGPROCFACT4 "'%ls'\nRg[vZX̋NɎs܂B" + STR_ERR_DLGPROCFACT5 "GfB^܂̓VXerW[ԂłB\n΂炭҂ĊJȂĂB" + STR_PROPCOMBK_SEL_FOLDER "obNAbv쐬tH_Ił" + STR_PROPCOMBK_DUSTBOX "(S~)" + STR_PROPCOMCUSTMENU_SEP " " + STR_PROPCOMCUSTMENU_AC1 "j[ACẽANZXL[ݒ" + STR_PROPCOMCUSTMENU_AC2 "L[͂ĂB" +END + +STRINGTABLE +BEGIN + STR_DLGABOUT_APPNAME "TNGfB^" + STR_DLGEXEC_SELECT_CURDIR "JgfBNgIł" + STR_PROPEDIT_SELECT_DIR "t@C_CAO̎wtH_̑I" + STR_DLGTYPEASC_IMPORT "--̂܂܃C|[g--" + STR_PROPCOMMAINMENU_EDIT "ҏWĂ" + STR_PROPCOMMAINMENU_SEP "\\\\\\\\\\" + STR_PROPCOMMAINMENU_ACCKEY1 "j[ACẽANZXL[ݒ" + STR_PROPCOMMAINMENU_ACCKEY2 "L[͂ĂB" + STR_PROPCOMMAINMENU_CLEAR "j[̐ݒNA܂B\n낵łH" + STR_PROPCOMMAINMENU_INIT "j[̐ݒԂɖ߂܂B\n낵łH" + STR_PROPCOMMAINMENU_DEL "IĂ鍀ڂʍڂƍ폜܂B\n낵łH" + STR_PROPCOMMAINMENU_OK "肠܂łB" + STR_PROPCOMMAINMENU_ERR1 "j[ݒ̎擾Ɏs܂" + STR_PROPCOMMAINMENU_ERR2 "wʐݒxL܂B\n" + STR_PROPCOMMAINMENU_ERR3 "gbvx̍ڐ܂B\n" + STR_PROPCOMMAINMENU_ERR4 "o^ڐ܂B\n" +END + +STRINGTABLE +BEGIN + STR_PROPCOMFNM_LIST1 "uO" + STR_PROPCOMFNM_LIST2 "u" + STR_PROPCOMFNM_ERR_REG "ȏo^ł܂B" + STR_PROPCOMGREP_DLL "K\͎gpł܂" + STR_PROPCOMHELP_MIGEMODIR "tH_Ił" + STR_PROPCOMKEYBIND_UNASSIGN "t" + STR_PROPCOMKEYWORD_ERR_LEN "L[[h̒%doCg܂łłB" + STR_PROPCOMKEYWORD_SETMAX "Zbg%d‚܂ło^ł܂B\n" + STR_PROPCOMKEYWORD_SETNAME1 "L[[h̃Zbglj" + STR_PROPCOMKEYWORD_SETNAME2 "Zbg͂ĂB" + STR_PROPCOMKEYWORD_SETDEL + "u%lsṽZbg폜܂B\n낵łH\n폜悤ƂZbǵAȉ̃t@C^CvɊ蓖ĂĂ܂B\n폜Zbg͖ɂȂ܂B\n\n%s" + STR_PROPCOMKEYWORD_RENAME1 "Zbg̖̕ύX" + STR_PROPCOMKEYWORD_RENAME2 "Zbg͂ĂB" + STR_PROPCOMKEYWORD_KEYMAX "o^łL[[hɒBĂ܂B\n" + STR_PROPCOMKEYWORD_KEYADD1 "L[[hlj" + STR_PROPCOMKEYWORD_KEYADD2 "L[[h͂ĂB" +END + +STRINGTABLE +BEGIN + STR_ERR_DLGPROPCOMMON24 "CPropCommon::DoPropertySheet()ŃG[o܂B\npsh.nStartPage=[%d]\n::PropertySheet()s\n\n%s\n" + STR_PROPCOMGEN_FILE1 "ŋߎgt@C̗폜܂B\n낵łH\n" + STR_PROPCOMGEN_FILE2 "ŋߎgt@C̗폜܂B\n" + STR_PROPCOMGEN_DIR1 "ŋߎgtH_̗폜܂B\n낵łH\n" + STR_PROPCOMGEN_DIR2 "ŋߎgtH_̗폜܂B\n" + STR_PROPCOMTOOL_ERR01 "Toolbar Dialog: vf̑}Ɏs܂B(%d:%d)" + STR_PROPCOMTOOL_ERR02 "Toolbar Dialog: INS: l̐ݒɎs܂B:%d" + STR_PROPCOMTOOL_ERR03 "Toolbar Dialog: vf̒ljɎs܂B(%d:%d)" + STR_PROPCOMTOOL_ERR04 "Toolbar Dialog: ADD: l̐ݒɎs܂B:%d" + STR_PROPCOMTOOL_ERR05 "Toolbar Dialog: vf̒ljɎs܂B:%d" + STR_PROPCOMTOOL_ITEM1 "" + STR_PROPCOMTOOL_ITEM2 "\\c[o[ܕԁ\\" + STR_PROPCOMTOOL_ITEM3 "s@" + STR_OUTLINE_CPP "C/C++" + STR_OUTLINE_PLSQL "PL/SQL" + STR_OUTLINE_JAVA "Java" +END + +STRINGTABLE +BEGIN + STR_PROPCOMKEYWORD_KEYEDIT1 "L[[hҏW" + STR_PROPCOMKEYWORD_KEYEDIT2 "L[[hҏWĂB" + STR_PROPCOMKEYWORD_DEL "݂̐ݒł͋L[[hƂĕ\łȂL[[h폜܂H" + STR_PROPCOMKEYWORD_INFO "(ő %d , o^ %d, %d )" + STR_PROPCOMMACR_LIST1 "ԍ" + STR_PROPCOMMACR_LIST2 "}N" + STR_PROPCOMMACR_LIST3 "t@C" + STR_PROPCOMMACR_LIST4 "sɓǂݍ" + STR_PROPCOMMACR_LIST5 "s" + STR_PROPCOMMACR_SEL_DIR "MacrofBNg̑I" + STR_PROPCOMMON_GENERAL "S" + STR_PROPCOMMON_WINDOW "EBhE" + STR_PROPCOMMON_TABS "^uo[" + STR_PROPCOMMON_EDITING "ҏW" + STR_PROPCOMMON_FILE "t@C" + STR_PROPCOMMON_BACKUP "obNAbv" +END + +STRINGTABLE +BEGIN + STR_PROPCOMMAINMENU_ERR5 "dANZXL[܂B\n" + STR_PROPCOMMAINMENU_ERR6 "ݒ̃ANZXL[܂B\n" + STR_PROPCOMPLG_ERR1 "vOC͂̃EBhEœǂݍ܂ĂȂAtH_قȂ邽\nݒύXł܂" + STR_PROPCOMPLG_ERR2 "ReadMet@CJ܂" + STR_PROPCOMPLG_ERR3 "ReadMet@C‚܂ " + STR_PROPCOMPLG_STATE1 "lj" + STR_PROPCOMPLG_STATE2 "XV" + STR_PROPCOMPLG_STATE3 "~" + STR_PROPCOMPLG_STATE4 "ғ" + STR_PROPCOMPLG_STATE5 "폜" + STR_PROPCOMPLG_STATE6 "`" + STR_PROPCOMPLG_LOAD "Ǎ" + STR_PROPCOMPLG_LIST1 "ԍ" + STR_PROPCOMPLG_LIST2 "vOC" + STR_PROPCOMPLG_LIST3 "" + STR_PROPCOMPLG_LIST4 "Ǎ" +END + +STRINGTABLE +BEGIN + STR_PROPCOMMON_FORMAT "" + STR_PROPCOMMON_SEARCH "" + STR_PROPCOMMON_KEYS "L[蓖" + STR_PROPCOMMON_CUSTMENU "JX^j[" + STR_PROPCOMMON_TOOLBAR "c[o[" + STR_PROPCOMMON_KEYWORD "L[[h" + STR_PROPCOMMON_SUPPORT "x" + STR_PROPCOMMON_MACRO "}N" + STR_PROPCOMMON_FILENAME "t@C\" + STR_SCROLL_WITH_NO_KEY "gݍ킹Ȃ" + STR_SCROLL_WITH_MID_BTN "}EX{^" + STR_SCROLL_WITH_SIDE_1_BTN "}EXTCh{^1" + STR_SCROLL_WITH_SIDE_2_BTN "}EXTCh{^2" + STR_SCROLL_WITH_CTRL_KEY "CONTROLL[" + STR_SCROLL_WITH_SHIFT_KEY "SHIFTL[" + STR_PROPCOMMON "ʐݒ" +END + +STRINGTABLE +BEGIN + STR_PROPCOMPLG_LIST5 "tH_" + STR_PROPCOMPLG_DELETE "%ls 폜܂" + STR_DLGTYPELIST_ERR1 "֘AtɎs܂\n" + STR_DLGTYPELIST_ERR2 "֘AtɎs܂\n" + STR_DLGTYPELIST_INIT1 "%s ܂B 낵łH" + STR_DLGTYPELIST_SETNAME "ݒ%d" + STR_DLGTYPELIST_INIT2 "%s ܂B" + STR_DLGTYPELIST_DEL "%s 폜܂B 낵łH" + STR_DLGTYPELIST_ACC "Windows̊֘AtݒύX悤ƂĂ܂B\n͓̑ݒ𗘗p鑼̃\tgɂe^”\܂B\n{܂H" + STR_IMAGE_POS1 "" + STR_IMAGE_POS2 "E" + STR_IMAGE_POS3 "" + STR_IMAGE_POS4 "E" + STR_IMAGE_POS5 "" + STR_IMAGE_POS6 "" + STR_IMAGE_POS7 "" +END + +STRINGTABLE +BEGIN + STR_IMAGE_POS8 "" + STR_IMAGE_POS9 "E" + STR_PROPCOMTAB_DISP_NO "Ȃ" + STR_PROPCOMTAB_DISP_ALLWAYS "ɕ\" + STR_PROPCOMTAB_DISP_AUTO "\" + STR_IMPEXP_ERR_FILEOPEN "t@CJ܂łB\n\n" + STR_IMPEXP_ERR_EXPORT "GNX|[go܂łB\n\n" + STR_IMPEXP_OK_EXPORT "t@CGNX|[g܂B\n\n" + STR_IMPEXP_OK_IMPORT "t@CC|[g܂B\n\n" + STR_IMPEXP_ERR_COLOR_OLD "Fݒt@Č`Ⴂ܂BÂ`̓T|[gȂȂ܂B\n" + STR_IMPEXP_ERR_TYPE "sȌ`łB\nC|[g𒆎~܂" + STR_IMPEXP_VER "GNX|[g %s(%s/%d) ƃo[WقȂ܂B\n\nC|[gĂ낵łH" + STR_IMPEXP_REGEX1 "L[[hɒBߐ؂̂Ă܂B" + STR_IMPEXP_REGEX2 "L[[ḧ悪ςȂߐ؂̂Ă܂B" + STR_IMPEXP_REGEX3 "sȃL[[h𖳎܂B" + STR_IMPEXP_DIC_NOTFOUND "yt@C‚܂z" +END + +STRINGTABLE +BEGIN + STR_OUTLINE_COBOL "COBOL" + STR_OUTLINE_PERL "Perl" + STR_OUTLINE_ASM "AZu" + STR_OUTLINE_VB "Visual Basic" + STR_OUTLINE_PYTHON "Python" + STR_OUTLINE_ERLANG "Erlang" + STR_OUTLINE_WZ "WZKwteLXg" + STR_OUTLINE_HTML "HTML" + STR_OUTLINE_TEX "TeX" + STR_OUTLINE_TEXT "eLXg" + STR_SMART_INDENT_NONE "Ȃ" + STR_SMART_INDENT_C_CPP "C/C++" + STR_IME_STATE_DEF "Wݒ" + STR_IME_STATE_FULL "Sp" + STR_IME_STATE_FULLHIRA "SpЂ炪" + STR_IME_STATE_FULLKATA "SpJ^Ji" +END + +STRINGTABLE +BEGIN + STR_IME_STATE_NO "ϊ" + STR_IME_SWITCH_DONTSET "̂܂" + STR_IME_SWITCH_ON "ON" + STR_IME_SWITCH_OFF "OFF" + STR_WRAP_INDENT_NONE "Ȃ" + STR_WRAP_INDENT_TX2X "tx2x" + STR_WRAP_INDENT_BOL "_s擪" + STR_WRAP_METHOD_NO_WRAP "܂ԂȂ" + STR_WRAP_METHOD_SPEC_WIDTH "w茅Ő܂Ԃ" + STR_WRAP_METHOD_WIN_WIDTH "E[Ő܂Ԃ" + STR_PROPTYPE_SCREEN "XN[" + STR_PROPTYPE_COLOR "J[" + STR_PROPTYPE_SUPPORT "x" + STR_PROPTYPE_REGEX_KEYWORD "K\L[[h" + STR_PROPTYPE_KEYWORD_HELP "L[[hwv" + STR_PROPTYPE_WINDOW "EBhE" +END + +STRINGTABLE +BEGIN + STR_PROPTYPE "^Cvʐݒ" + STR_PROPTYPE_ERR "CPropTypes::DoPropertySheet()ŃG[o܂B\npsh.nStartPage=[%d]\n::PropertySheet()sB\n\n%s\n" + STR_PROPTYPKEYHELP_DIC " t@C" + STR_PROPTYPKEYHELP_INFO "̐" + STR_PROPTYPKEYHELP_PATH "pX" + STR_PROPTYPKEYHELP_LINE1 "t@ĈPsڂ̕" + STR_PROPTYPKEYHELP_DICPATH "L[[ht@C pX" + STR_PROPTYPKEYHELP_ERR_REG1 "ȏo^ł܂B" + STR_PROPTYPKEYHELP_SELECT "XV鎫XgIĂB" + STR_PROPTYPKEYHELP_ERR_REG2 "ɓo^ς݂̎łB" + STR_PROPTYPKEYHELP_ERR_OPEN "t@CJ܂łB\n\n%s" + STR_PROPTYPEREGEX_LIST1 "L[[h" + STR_PROPTYPEREGEX_LIST2 "Fw" + STR_PROPTYPEREGEX_NOUSE "K\L[[h͎g܂B" + STR_PROPTYPEREGEX_NOTFOUND + "K\Cu‚܂B\n\nK\L[[h͋@\܂񂪁AłLɂ܂H" + STR_PROPTYPEREGEX_NOREG "ȏo^ł܂B" +END + +STRINGTABLE +BEGIN + STR_PROPTYPEREGEX_ALREADY "L[[hœo^ς݂łB" + STR_PROPTYPEREGEX_KAKOMI + "K\L[[h / /k ň͂ĂB\nL[[h / ꍇ m# #k ň͂ĂB" + STR_PROPTYPEREGEX_INVALID "ȂAK\Cu‚܂B\n\no^܂H" + STR_PROPTYPEREGEX_FULL "ȏo^ł܂B\nL[[ḧ悪ςłB" + STR_PROPTYPEREGEX_NOSEL "L[[hIĂ܂B" + STR_ERR_CSHAREDATA01 "CreateFileMapping()Ɏs܂" + STR_ERR_CSHAREDATA02 "\ʃG[" + STR_ERR_CSHAREDATA10 "${w?yGrepz$h$:yAEgvbgz$:$f$}${U?(XV)$}${R?(ǂ݂Ƃp)$:(㏑֎~)$}${M?yL[}N̋L^z$}" + STR_CUSTMENU_RIGHT_CLICK "ENbNj[" + STR_CUSTMENU_CUSTOM "j[%d" + STR_CUSTMENU_TAB "^uj[" + STR_ERR_CSHAREDATA14 "PQRSTUVWXOi(m[uwyE@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]OlܘZ\Q" + STR_ERR_CSHAREDATA15 "yyyy'N'M''d'('dddd')'" + STR_ERR_CSHAREDATA16 "tthh''mm''ss'b'" + STR_ERR_CSHAREDATA17 "${w?$h$:AEgvbg$:${I?$f$:$N$}$}${U?(XV)$} - sakura $V ${R?(ǂ݂Ƃp)$:i㏑֎~j$}${M? yL[}N̋L^z$}" + STR_ERR_CSHAREDATA18 "${w?$h$:AEgvbg$:$f$}${U?(XV)$} - sakura $V ${R?(ǂ݂Ƃp)$:i㏑֎~j$}${M? yL[}N̋L^z$}" +END + +STRINGTABLE +BEGIN + STR_FILEDIALOG_MRU "ŋ߂̃t@C(&F):" + STR_FILEDIALOG_OPENFOLDER "ŋ߂̃tH_(&D):" + STR_IMPEXP_REGEX4 "L[[h߂邽ߐ؂̂Ă܂B" +END + +STRINGTABLE +BEGIN + STR_ERR_CSHAREDATA19 "ɕ̕ҏWpEBhE‚悤ƂĂ܂B‚܂?" + STR_ERR_CSHAREDATA20 "%s\n\n\nɊJĂt@CႤR[hŊJꍇ́A\nt@Cj[uJvgpĂB\n\n݂̕R[hZbg=[%s]\nVR[hZbg=[%s]" + STR_ERR_CSHAREDATA21 "%s\n\ndI[v̊mFŕsȕR[hw肳܂B\n\n݂̕R[hZbg=%d [%s]\nVR[hZbg=%d [%s]" + STR_ERR_CSHAREDATA22 "s" + STR_KEY_BIND_DBL_CLICK "_uNbN" + STR_KEY_BIND_R_CLICK "ENbN" + STR_KEY_BIND_MID_CLICK "NbN" + STR_KEY_BIND_LSD_CLICK "TChNbN" + STR_KEY_BIND_RSD_CLICK "ETChNbN" + STR_KEY_BIND_TRI_CLICK "gvNbN" + STR_KEY_BIND_QUA_CLICK "NAhvNbN" + STR_KEY_BIND_HAT_ENG_QT "^(p')" + STR_KEY_BIND_AT_ENG_BQ "@(p`)" + STR_KEY_BIND_APLI "AvL[" + STR_COLOR_TEXT "eLXg" + STR_COLOR_RULER "[[" +END + +STRINGTABLE +BEGIN + STR_COLOR_CURSOR "J[\" + STR_COLOR_CURSOR_IMEON "J[\(IME ON)" + STR_COLOR_CURSOR_LINE_BG "J[\s̔wiF" + STR_COLOR_CURSOR_LINE "J[\sA_[C" + STR_COLOR_CURSOR_COLUMN "J[\ʒuc" + STR_COLOR_LINE_NO "sԍ" + STR_COLOR_LINE_NO_CHANGE "sԍ(ύXs)" + STR_COLOR_EVEN_LINE_BG "s̔wiF" + STR_COLOR_TAB "TABL" + STR_COLOR_HALF_SPACE "p" + STR_COLOR_FULL_SPACE "{" + STR_COLOR_CTRL_CODE "Rg[R[h" + STR_COLOR_CR "sL" + STR_COLOR_WRAP_MARK "܂ԂL" + STR_COLOR_VERT_LINE "w茅c" + STR_COLOR_EOF "EOFL" +END + +STRINGTABLE +BEGIN + STR_COLOR_REGEX_KEYWORD10 "K\L[[h10" + STR_COLOR_DIFF_ADD "DIFF\(lj)" + STR_COLOR_DIFF_CNG "DIFF\(ύX)" + STR_COLOR_DIFF_DEL "DIFF\(폜)" + STR_COLOR_BOOKMARK "ubN}[N" + STR_COLOR_NOTE_LINE "m[g" + STR_COLOR_PAGEVIEW "\͈(~j}bv)" + STR_ERR_CSPLITTER01 "SplitterWndNX̓o^Ɏs܂B" +END + +STRINGTABLE +BEGIN + STR_COLOR_NUMBER "pl" + STR_COLOR_SELECTED_AREA "I͈" + STR_COLOR_SEARCH_WORD1 "" + STR_COLOR_SEARCH_WORD2 "2" + STR_COLOR_SEARCH_WORD3 "3" + STR_COLOR_SEARCH_WORD4 "4" + STR_COLOR_SEARCH_WORD5 "5" + STR_COLOR_BRACKET "Ίʂ̋\" + STR_COLOR_COMMENT "Rg" + STR_COLOR_SINGLE_QUOTE "VONH[e[V" + STR_COLOR_DOUBLE_QUOTE "_uNH[e[V" + STR_COLOR_HERE_DOCUMENT "qAhLg" + STR_COLOR_URL "URL" + STR_COLOR_KEYWORD1 "L[[h1" + STR_COLOR_KEYWORD2 "L[[h2" + STR_COLOR_KEYWORD3 "L[[h3" +END + +STRINGTABLE +BEGIN + STR_COLOR_KEYWORD4 "L[[h4" + STR_COLOR_KEYWORD5 "L[[h5" + STR_COLOR_KEYWORD6 "L[[h6" + STR_COLOR_KEYWORD7 "L[[h7" + STR_COLOR_KEYWORD8 "L[[h8" + STR_COLOR_KEYWORD9 "L[[h9" + STR_COLOR_KEYWORD10 "L[[h10" + STR_COLOR_REGEX_KEYWORD1 "K\L[[h1" + STR_COLOR_REGEX_KEYWORD2 "K\L[[h2" + STR_COLOR_REGEX_KEYWORD3 "K\L[[h3" + STR_COLOR_REGEX_KEYWORD4 "K\L[[h4" + STR_COLOR_REGEX_KEYWORD5 "K\L[[h5" + STR_COLOR_REGEX_KEYWORD6 "K\L[[h6" + STR_COLOR_REGEX_KEYWORD7 "K\L[[h7" + STR_COLOR_REGEX_KEYWORD8 "K\L[[h8" + STR_COLOR_REGEX_KEYWORD9 "K\L[[h9" +END + +STRINGTABLE +BEGIN + STR_TABWND_LR_INFO "NbN: ^uꗗ\nENbN: pXꗗ" + STR_TABWND_CLOSETAB "^u‚" + STR_TABWND_SHOWALL "ׂĕ\(&A)" + STR_TABWND_SHOWTABNAME "^uꗗɐؑւ(&W)" + STR_TABWND_SHOWPATHNAME "pXꗗɐؑւ(&W)" + STR_ERR_CWSH01 "w̃XNvgGW‚܂" + STR_ERR_CWSH02 "w̃XNvgGW쐬ł܂" + STR_ERR_CWSH03 "TCgo^ł܂" + STR_ERR_CWSH04 "p[T擾ł܂" + STR_ERR_CWSH05 "ł܂" + STR_ERR_CWSH06 "IuWFNgnȂ" + STR_ERR_CWSH07 "ԕύXG[" + STR_ERR_CWSH08 "sɎs܂" + STR_ERR_ETCUTY01 "VXe " + STR_ERR_ETCUTY02 "[U[ " + STR_ERR_ETCUTY03 "%s\[Xɒ[ɕsĂ܂B\n̂܂%sNƁAɓ삵Ȃ”\܂B\nV%s̋N𒆒f܂B\n\nVXe \[X\tc %d%%\nUser \[X\tc %d%%\nGDI \[X\tc %d%%\n\n" +END + +STRINGTABLE +BEGIN + STR_CAPTION_ACTIVE_KEYMACRO "yL[}N̋L^z" + STR_DATA_FORMAT "yyyy'N'M''d'('dddd')'" + STR_TIME_FORMAT "tthh''mm''ss'b'" + STR_TRANSNAME_COMDESKTOP "LfXNgbv\\" + STR_TRANSNAME_COMDOC "LhLg\\" + STR_TRANSNAME_DESKTOP "fXNgbv\\" + STR_TRANSNAME_MYDOC "}ChLg\\" + STR_TRANSNAME_IE "IELbV\\" + STR_TRANSNAME_TEMP "TEMP\\" + STR_TRANSNAME_APPDATA "Avf[^\\" + STR_PRINT_SET_NAME "ݒ" + STR_TYPE_NAME_BASIS "{" + STR_TYPE_NAME_RICHTEXT "b`eLXg" + STR_TYPE_NAME_TEXT "eLXg" + STR_TYPE_NAME_DOS "MS-DOSob`t@C" +END + +STRINGTABLE +BEGIN + STR_PLGMGR_NEWPLUGIN "VvOC͌‚܂ł" + STR_PLGMGR_INSTALL "vOCu%svCXg[܂H" + STR_PLGMGR_INSTALL_ERR "vOCu%svCXg[ł܂ł\nRF%ls" + STR_PLGMGR_ERR_ZIP "ZIPt@C͈܂" + STR_PLGMGR_ERR_FOLDER "vOCtH_܂" + STR_PLGMGR_ERR_CREATEDIR "vOCtH_쐬o܂" + STR_PLGMGR_INST_ZIP_ACCESS "ZIPt@Cu%svɃANZXo܂" + STR_PLGMGR_INST_ZIP_DEF "ZIPt@Cu%svɂ̓vOC`t@Ciplugin.defj܂" + STR_PLGMGR_INST_ZIP_ALREADY "u%sv͊ɃCXg[Ă܂\n㏑܂H" + STR_PLGMGR_INST_ZIP_INST "ZIPvOCu%svu%svɃCXg[܂H" + STR_PLGMGR_INST_ZIP_UNZIP "ZIPvOCu%sv̉𓀂Ɏs܂" + STR_PLGMGR_INST_ZIP_ERR "vOCu%svCXg[ł܂ł\nRF%ls" + STR_PLGMGR_INST_DEF "vOC`t@Ciplugin.defj܂" + STR_PLGMGR_INST_ID "Plugin.ID܂" + STR_PLGMGR_INST_RESERVE1 "Plugin.ID""" + STR_PLGMGR_INST_RESERVE2 """͎gpł܂" +END + +#endif // { ({) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// +#include "sakura_rc.rc2" + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/sakura_core/sakura_rc.rc2 b/sakura_core/sakura_rc.rc2 new file mode 100644 index 0000000000..f916884af6 --- /dev/null +++ b/sakura_core/sakura_rc.rc2 @@ -0,0 +1,117 @@ +#pragma code_page(932) + +#define S_COPYRIGHT "Copyright (C) 1998-2020 by Norio Nakatani & Collaborators" +#define FL_VER PR_VER +#define FL_VER_STR PR_VER_STR + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_ABOUT DIALOG DISCARDABLE 0, 0, 260, 228 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "o[W" +FONT 9, "lr oSVbN" +BEGIN + ICON IDI_ICON_STD, IDC_STATIC_MYICON, 5, 5, 20, 20, SS_NOTIFY + EDITTEXT IDC_EDIT_VER, 33, 5, 219, 70, ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT ": (|p_) ", IDC_STATIC, 33, 75, 125, 10, NOT WS_GROUP + LTEXT S_COPYRIGHT, IDC_STATIC, 33, 85, 220, 11, NOT WS_GROUP | SS_NOPREFIX + LTEXT "Project URL:", IDC_STATIC_URL_CAPTION, 33, 103, 71, 10, NOT WS_GROUP + LTEXT "https://sakura-editor.github.io/", IDC_STATIC_URL_UR, 91, 103, 120, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP +#ifdef GIT_REMOTE_ORIGIN_URL + LTEXT "Source URL:", IDC_STATIC_GIT_CAPTION, 33, 114, 71, 10, NOT WS_GROUP + LTEXT GIT_REMOTE_ORIGIN_URL, IDC_STATIC_URL_GIT, 91, 114, 120, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP +#endif +#ifdef CI_BUILD_NUMBER_LABEL + LTEXT "Build URL:", IDC_STATIC_URL_CI_BUILD_CAPTION, 33, 125, 71, 10, NOT WS_GROUP + LTEXT CI_BUILD_NUMBER_LABEL, IDC_STATIC_URL_CI_BUILD, 91, 125, 120, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP +#endif +#if defined( GITHUB_COMMIT_URL ) || defined( GITHUB_PR_HEAD_URL ) + LTEXT "GitHub URL:", IDC_STATIC_URL_GITHUB_CAPTION, 33, 136, 50, 10, NOT WS_GROUP +#endif +#if defined( GITHUB_COMMIT_URL ) + LTEXT GIT_SHORT_COMMIT_HASH, IDC_STATIC_URL_GITHUB_COMMIT, 91, 136, 30, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP +#endif +#if defined( GITHUB_PR_HEAD_URL ) + LTEXT GITHUB_PR_NUMBER_LABEL, IDC_STATIC_URL_GITHUB_PR, 140, 136, 30, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP +#endif + EDITTEXT IDC_EDIT_ABOUT, 5, 152, 248, 53, ES_MULTILINE | ES_READONLY | WS_VSCROLL | NOT WS_TABSTOP + DEFPUSHBUTTON "&OK", IDOK, 112, 209, 50, 14 + PUSHBUTTON "Rs[(&C)", IDC_BUTTON_COPY, 193, 209, 60, 14 +END + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO DISCARDABLE +BEGIN + IDD_ABOUT, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 238 + TOPMARGIN, 7 + BOTTOMMARGIN, 196 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION FL_VER + PRODUCTVERSION PR_VER + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x01L +#else + FILEFLAGS 0x00L +#endif + FILEOS 0x40004L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "041104b0" + BEGIN + VALUE "Comments", "̃\tg̓t[\tgłB\0" + VALUE "CompanyName", "Project: Sakura-Editor\0" + VALUE "FileDescription", "TNGfB^\0" + VALUE "FileVersion", FL_VER_STR + VALUE "InternalName", "sakura\0" + VALUE "LegalCopyright", S_COPYRIGHT + VALUE "LegalTrademarks", " \0" + VALUE "OriginalFilename", "sakura.exe\0" + VALUE "ProductName", "TNGfB^\0" + VALUE "ProductVersion", RESOURCE_VERSION_STRING(PR_VER_STR) // e.g. "2.3.2.0 (4a0de579) UNICODE 64bit DEBUG" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x411, 1200 + END +END + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +#ifdef _DEBUG +IDI_ICON_STD ICON DISCARDABLE "../resource/icon_debug.ico" +#else +IDI_ICON_STD ICON DISCARDABLE "../resource/icon_std.ico" +#endif +IDI_ICON_GREP ICON DISCARDABLE "../resource/icon_grep.ico" +IDI_PRINTER ICON DISCARDABLE "../resource/printer.ico" From 08c374531ae6fcbd94a3298c97f28650bf8f3157 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Thu, 5 Nov 2020 02:09:22 +0900 Subject: [PATCH 0259/1024] =?UTF-8?q?=E3=82=A8=E3=83=B3=E3=82=B3=E3=83=BC?= =?UTF-8?q?=E3=83=87=E3=82=A3=E3=83=B3=E3=82=B0=E3=83=81=E3=82=A7=E3=83=83?= =?UTF-8?q?=E3=82=AF=E3=82=A8=E3=83=A9=E3=83=BC=E8=A7=A3=E6=B6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- checkEncoding.py | 7 +- sakura/sakura.vcxproj | 7 +- sakura_lang_en_US/sakura_lang_en_US.vcxproj | 11 +- sakura_lang_en_US/sakura_lang_rc.rc | 150 ++++++++++---------- 4 files changed, 90 insertions(+), 85 deletions(-) diff --git a/checkEncoding.py b/checkEncoding.py index a6f251c9d8..aa20460045 100644 --- a/checkEncoding.py +++ b/checkEncoding.py @@ -15,10 +15,15 @@ patternUTF8_NoBOM = ( "utf-8" ) +patternSJIS = ( + "shift_jis", + "cp932" +) expectEncoding = { ".cpp" : patternUTF8_BOM, ".h" : patternUTF8_BOM, - ".rc" : patternUTF8_NoBOM, + ".rc" : patternSJIS, + ".rc2" : patternSJIS } # チェック対象の拡張子リスト diff --git a/sakura/sakura.vcxproj b/sakura/sakura.vcxproj index 0b12175597..3648312aaa 100644 --- a/sakura/sakura.vcxproj +++ b/sakura/sakura.vcxproj @@ -603,12 +603,7 @@ - - /c 65001 - /c 65001 - /c 65001 - /c 65001 - + diff --git a/sakura_lang_en_US/sakura_lang_en_US.vcxproj b/sakura_lang_en_US/sakura_lang_en_US.vcxproj index b0767188e0..0dcffcb236 100644 --- a/sakura_lang_en_US/sakura_lang_en_US.vcxproj +++ b/sakura_lang_en_US/sakura_lang_en_US.vcxproj @@ -127,7 +127,16 @@ - + + + + + + + + + + diff --git a/sakura_lang_en_US/sakura_lang_rc.rc b/sakura_lang_en_US/sakura_lang_rc.rc index 4618577a04..8b5788d740 100644 --- a/sakura_lang_en_US/sakura_lang_rc.rc +++ b/sakura_lang_en_US/sakura_lang_rc.rc @@ -1,10 +1,6 @@ //Microsoft Developer Studio generated resource script. -// このファイルのエンコーディングは UTF-8 (BOM無し) です. -// ※ BOM を付けると Visual Studio のリソースエディタで開けなくなってしまう. - -// CodePage: 65001 (UTF-8) -#pragma code_page(65001) +#pragma code_page(932) #define APSTUDIO_READONLY_SYMBOLS @@ -106,7 +102,7 @@ FONT 9, "Tahoma" BEGIN ICON IDI_ICON_STD, IDC_STATIC_MYICON, 5, 5, 20, 20, SS_NOTIFY EDITTEXT IDC_EDIT_VER, 33, 6, 204, 51, ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP - LTEXT "Original Author: Take-san(竹パンダ) さん", IDC_STATIC, 33, 61, 125, 8, NOT WS_GROUP + LTEXT "Original Author: Take-san(|p_) ", IDC_STATIC, 33, 61, 125, 8, NOT WS_GROUP LTEXT S_COPYRIGHT, IDC_STATIC, 33, 75, 205, 8, NOT WS_GROUP | SS_NOPREFIX LTEXT "Translation:",IDC_STATIC,33,90,41,8 LTEXT S_COPYRIGHT_TRANSLATION,IDC_STATIC,74,90,164,8,SS_NOPREFIX | NOT WS_GROUP @@ -165,8 +161,8 @@ FONT 9, "Tahoma" BEGIN CONTROL "Tree1", IDC_TREE_FL, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 0, 17, 234, 235 CONTROL "List1", IDC_LIST_FL, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP, 0, 0, 234, 252 - PUSHBUTTON "▼", IDC_BUTTON_MENU, 1, 255, 10, 14, NOT WS_TABSTOP - CONTROL "■", IDC_BUTTON_WINSIZE, "Button", BS_AUTOCHECKBOX | BS_PUSHLIKE, 12, 255, 10, 14 + PUSHBUTTON "", IDC_BUTTON_MENU, 1, 255, 10, 14, NOT WS_TABSTOP + CONTROL "", IDC_BUTTON_WINSIZE, "Button", BS_AUTOCHECKBOX | BS_PUSHLIKE, 12, 255, 10, 14 PUSHBUTTON "&Copy", IDC_BUTTON_COPY, 24, 255, 50, 14, WS_DISABLED DEFPUSHBUTTON "&Jump", IDOK, 76, 255, 50, 14 PUSHBUTTON "Cancel(&X)", IDCANCEL, 128, 255, 50, 14 @@ -285,7 +281,7 @@ STYLE DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Grep Running..." FONT 9, "Tahoma" BEGIN - LTEXT "Searching・・・", IDC_STATIC, 5, 5, 61, 8, NOT WS_GROUP + LTEXT "SearchingEEE", IDC_STATIC, 5, 5, 61, 8, NOT WS_GROUP LTEXT "File", IDC_STATIC, 5, 21, 26, 8, NOT WS_GROUP LTEXT "IDC_STATIC_CURPATH", IDC_STATIC_CURFILE, 36, 20, 252, 10, NOT WS_GROUP LTEXT "Folder", IDC_STATIC, 5, 34, 27, 8, NOT WS_GROUP @@ -843,7 +839,7 @@ BEGIN PUSHBUTTON "E&xport...", IDC_BUTTON_EXPORT, 88, 215, 60, 14 LTEXT "Keyword Set &1", IDC_STATIC, 162, 18, 54, 8 COMBOBOX IDC_COMBO_SET, 218, 16, 75, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "Set &2~10...", IDC_BUTTON_KEYWORD_SELECT, 218, 31, 75, 14 + PUSHBUTTON "Set &2`10...", IDC_BUTTON_KEYWORD_SELECT, 218, 31, 75, 14 PUSHBUTTON "Keyword Setting(&C)...", IDC_BUTTON_EDITKEYWORD, 218, 47, 75, 14 GROUPBOX "Keyword Highlighting", IDC_STATIC, 156, 6, 142, 60, WS_GROUP LTEXT "Block(&F)", IDC_STATIC, 164, 80, 42, 8 @@ -892,7 +888,7 @@ BEGIN PUSHBUTTON "(&1)...", IDC_BUTTON_HOKANFILE_REF, 215, 14, 19, 14 COMBOBOX IDC_COMBO_HOKAN_TYPE, 236, 15, 58, 57, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Case &Insensitive", IDC_CHECK_HOKANLOHICASE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 31, 90, 10 - LTEXT "Candidate:", IDC_STATIC, 102, 32, 30, 8, NOT WS_GROUP + LTEXT "CandidateF", IDC_STATIC, 102, 32, 30, 8, NOT WS_GROUP CONTROL "In current &file", IDC_CHECK_HOKANBYFILE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 142, 31, 68, 10 CONTROL "From &Keyword Set", IDC_CHECK_HOKANBYKEYWORD, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 212, 31, 80, 10 GROUPBOX "Input Auto-complete Support", IDC_STATIC, 3, 3, 295, 45, WS_GROUP @@ -907,7 +903,7 @@ BEGIN CONTROL "Ignore char in strings(&S)", IDC_CHECK_INDENTCPPSTR, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 171, 146, 10 CONTROL "Ignore char in comments(&C)", IDC_CHECK_INDENTCPPCMT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 158, 171, 130, 10 CONTROL "When Undo, separate from editing(&U)", IDC_CHECK_INDENTCPPUNDO, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 183, 146, 10 - GROUPBOX "C/C++ Indent Settings", IDC_STATIC, 3, 159, 295, 40, WS_GROUP + GROUPBOX "C/C++@Indent Settings", IDC_STATIC, 3, 159, 295, 40, WS_GROUP END IDD_PROP_REGEX DIALOGEX 0, 0, 302, 244 @@ -949,7 +945,7 @@ BEGIN LTEXT "Dictionary File", IDC_LABEL_KEYHELP_KEYWORD, 8, 173, 56, 8, NOT WS_GROUP EDITTEXT IDC_EDIT_KEYHELP, 61, 172, 170, 12, ES_AUTOHSCROLL PUSHBUTTON "...", IDC_BUTTON_KEYHELP_REF, 234, 172, 12, 13, WS_GROUP - LTEXT "↑ Priority (Top)", IDC_LABEL_KEYHELP_PRIOR, 249, 33, 44, 8, NOT WS_GROUP + LTEXT " Priority (Top)", IDC_LABEL_KEYHELP_PRIOR, 249, 33, 44, 8, NOT WS_GROUP PUSHBUTTON "In&sert", IDC_BUTTON_KEYHELP_INS, 251, 136, 38, 15 PUSHBUTTON "Updat&e", IDC_BUTTON_KEYHELP_UPD, 251, 154, 38, 15 PUSHBUTTON "&Delete", IDC_BUTTON_KEYHELP_DEL, 251, 172, 38, 15 @@ -1330,7 +1326,7 @@ BEGIN EDITTEXT IDC_EDIT_BACKUPFILE, 24, 44, 255, 13, ES_AUTOHSCROLL CONTROL "Save once as .&bak", IDC_RADIO_BACKUP_TYPE1, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 12, 66, 142, 10 - CONTROL "Save repeatedly as (.b00~b98)(&G)", IDC_RADIO_BACKUP_TYPE3, "Button", BS_AUTORADIOBUTTON, 12, 80, 156, 10 + CONTROL "Save repeatedly as (.b00`b98)(&G)", IDC_RADIO_BACKUP_TYPE3, "Button", BS_AUTORADIOBUTTON, 12, 80, 156, 10 CONTROL "App&end backup date/time to file name", IDC_RADIO_BACKUP_DATETYPE1, "Button", BS_AUTORADIOBUTTON, 12, 106, 204, 10 CONTROL "Append back&up date/time each time to file name", IDC_RADIO_BACKUP_DATETYPE2, "Button", BS_AUTORADIOBUTTON, 12, 120, 230, 10 CONTROL "&Retain original extension", IDC_CHECK_BACKUP_RETAINEXT, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 162, 66, 96, 10 @@ -1671,7 +1667,7 @@ EXSTYLE WS_EX_CONTEXTHELP CAPTION "File Tree Setting" FONT 9, "Tahoma" BEGIN - LTEXT "Setting:Common", IDC_STATIC_SETTFING_FROM, 4, 4, 282, 10 + LTEXT "SettingFCommon", IDC_STATIC_SETTFING_FROM, 4, 4, 282, 10 CONTROL "Load &Ini from folders", IDC_CHECK_LOADINI, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 4, 16, 120, 9 LTEXT "Default Setting File(&J)", IDC_STATIC, 4, 28, 110, 8 EDITTEXT IDC_EDIT_DEFINI, 13, 39, 124, 13, ES_AUTOHSCROLL @@ -1684,7 +1680,7 @@ BEGIN LTEXT "Pa&th", IDC_STATIC_PATH, 3, 119, 22, 10 EDITTEXT IDC_EDIT_PATH, 38, 117, 122, 13, ES_AUTOHSCROLL PUSHBUTTON "&...", IDC_BUTTON_REF2, 161, 117, 10, 13 - PUSHBUTTON "▼(&3)", IDC_BUTTON_PATH_MENU, 171, 117, 21, 14 + PUSHBUTTON "(&3)", IDC_BUTTON_PATH_MENU, 171, 117, 21, 14 LTEXT "Lab&el", IDC_STATIC, 3, 136, 32, 10 EDITTEXT IDC_EDIT_LABEL, 38, 134, 111, 13, ES_AUTOHSCROLL LTEXT "File(&K)", IDC_STATIC_FILE, 3, 154, 32, 10 @@ -2491,8 +2487,8 @@ STRINGTABLE DISCARDABLE BEGIN F_COPY_ADDCRLF "Copy adding CRLF" F_COPYLINES "Copy selected lines" - F_COPYLINESASPASSAGE "Copy selected as passage" // 選択範囲内全行引用符付きコピー" <<--check - F_COPYLINESWITHLINENUMBER "Copy selected with line nr" // 選択範囲内全行行番号付きコピー" <<--check + F_COPYLINESASPASSAGE "Copy selected as passage" // I͈͓SsptRs[" <<--check + F_COPYLINESWITHLINENUMBER "Copy selected with line nr" // I͈͓SssԍtRs[" <<--check F_COPY_COLOR_HTML "Copy selected with HTML markup" F_COPY_COLOR_HTML_LINENUMBER "Copy selected with line nr && HTML" F_COPYPATH "Copy this file's path" @@ -2520,36 +2516,36 @@ BEGIN F_CONVERT_TOPMENU "Convert" F_TOLOWER "Lower case" F_TOUPPER "Upper case" - F_TOHANKAKU "Full Height → Half Height" - F_TOZENKAKUKATA "Half Height + Hiragana → Full/Katakana" - F_TOZENKAKUHIRA "Half Height + Katakana → Full/Hiragana" - F_HANKATATOZENKATA "Half Height Katakana → Full Katakana" - F_HANKATATOZENHIRA "Half Katakana → Full Hiragana" - F_TOZENEI "Half Alphabetic → Full Alphabetic" + F_TOHANKAKU "Full Height Half Height" + F_TOZENKAKUKATA "Half Height + Hiragana Full/Katakana" + F_TOZENKAKUHIRA "Half Height + Katakana Full/Hiragana" + F_HANKATATOZENKATA "Half Height Katakana Full Katakana" + F_HANKATATOZENHIRA "Half Katakana Full Hiragana" + F_TOZENEI "Half Alphabetic Full Alphabetic" END STRINGTABLE DISCARDABLE BEGIN - F_TOHANEI "Full Alphabetic → Half Alphabetic" - F_TOHANKATA "Full Katakana → Half Katakana" - F_TABTOSPACE "TAB→Spaces" - F_SPACETOTAB "Spaces→TAB" + F_TOHANEI "Full Alphabetic Half Alphabetic" + F_TOHANKATA "Full Katakana Half Katakana" + F_TABTOSPACE "TABSpaces" + F_SPACETOTAB "SpacesTAB" F_CONV_ENCODE_SUBMENU "Change Encoding" END STRINGTABLE DISCARDABLE BEGIN - F_CODECNV_AUTO2SJIS "Automatic → SJIS Code" - F_CODECNV_EMAIL "E-Mail(JIS→SJIS) Code" - F_CODECNV_EUC2SJIS "EUC→SJIS Code" - F_CODECNV_UNICODE2SJIS "UTF-16→SJIS Code" - F_CODECNV_UTF82SJIS "UTF-8→SJIS Code" - F_CODECNV_UTF72SJIS "UTF-7→SJIS Code" - F_CODECNV_UNICODEBE2SJIS "UTF-16 BE→SJIS Code" - F_CODECNV_SJIS2JIS "SJIS→JIS Code" - F_CODECNV_SJIS2EUC "SJIS→EUC Code" - F_CODECNV_SJIS2UTF8 "SJIS→UTF-8 Code" - F_CODECNV_SJIS2UTF7 "SJIS→UTF-7 Code" + F_CODECNV_AUTO2SJIS "Automatic SJIS Code" + F_CODECNV_EMAIL "E-Mail(JISSJIS) Code" + F_CODECNV_EUC2SJIS "EUCSJIS Code" + F_CODECNV_UNICODE2SJIS "UTF-16SJIS Code" + F_CODECNV_UTF82SJIS "UTF-8SJIS Code" + F_CODECNV_UTF72SJIS "UTF-7SJIS Code" + F_CODECNV_UNICODEBE2SJIS "UTF-16 BESJIS Code" + F_CODECNV_SJIS2JIS "SJISJIS Code" + F_CODECNV_SJIS2EUC "SJISEUC Code" + F_CODECNV_SJIS2UTF8 "SJISUTF-8 Code" + F_CODECNV_SJIS2UTF7 "SJISUTF-7 Code" END STRINGTABLE DISCARDABLE @@ -2789,7 +2785,7 @@ BEGIN F_PREVGROUP "Prev group" F_TAB_MOVERIGHT "Move tab Right" F_TAB_MOVELEFT "Move tab Left" - F_TAB_SEPARATE "New Tab Group" // "新規グループ" + F_TAB_SEPARATE "New Tab Group" // "VKO[v" F_TAB_JOINTNEXT "Move to next group" F_TAB_JOINTPREV "Move to prev group" F_TAB_MANIP_SUBMENU "Tab control" // LMP -- added @@ -2861,7 +2857,7 @@ END STRINGTABLE DISCARDABLE BEGIN - F_MENU_NOT_USED_FIRST "--Tool Bar Break--" //"――ツールバー折返――" + F_MENU_NOT_USED_FIRST "--Tool Bar Break--" //"\\c[o[ܕԁ\\" END STRINGTABLE DISCARDABLE @@ -2891,7 +2887,7 @@ BEGIN STR_SQLERR_EXEC_BUT_NOT_RUN "Trying to execute in Oracle SQL*Plus\n\n\nOracle SQL*Plus is not running\n" STR_SQLERR_ACTV_BUT_NOT_RUN "Trying to activate Oracle SQL*Plus\n\n\nOracle SQL*Plus is not running\n" STR_ERR_CMPERR "Comparison destination folder\n%s\nhas a %d byte line \ncan not perform comparison." // FIXME - ok? -// STR_ERR_CMPERR "比較先のファイル\n%s\n%dバイトを超える行があります。\n比較できません。" +// STR_ERR_CMPERR "r̃t@C\n%s\n%doCg𒴂s܂B\nrł܂B" STR_NO_TITLE1 "(No Title)" STR_NO_TITLE2 "No Title" @@ -3005,8 +3001,8 @@ BEGIN STR_DLGFNCLST_REMARK03 "Procedure Declaration" STR_DLGFNCLST_REMARK04 "Function" STR_DLGFNCLST_REMARK05 "Procedure" - STR_DLGFNCLST_REMARK06 "■Package Specification" - STR_DLGFNCLST_REMARK07 "■Package Body" + STR_DLGFNCLST_REMARK06 "Package Specification" + STR_DLGFNCLST_REMARK07 "Package Body" STR_DLGFNCLST_REMARK08 "PROC" STR_DLGFNCLST_REMARK09 "LABEL" STR_DLGFNCLST_REMARK10 "ENDP" @@ -3074,7 +3070,7 @@ BEGIN STR_DLGFNCLST_MENU_UNIFY "&Unify inheriting info" STR_DLGFNCLST_MENU_CLOSE "Close(&X)" - STR_DLGFNCLST_UNIFY "現在の画面のドッキング配置情報をすべての共通設定・タイプ別設定にコピーして統一します。\n(現在開いている他画面の状態も統一します。)\n" + STR_DLGFNCLST_UNIFY "݂̉ʂ̃hbLOzuׂĂ̋ʐݒE^CvʐݒɃRs[ēꂵ܂B\ni݊JĂ鑼ʂ̏Ԃꂵ܂Bj\n" // CDlgGrep.cpp @@ -3226,9 +3222,9 @@ BEGIN STR_BACKUP_ERR_MSG "Failed to create backup.. Continue to overwrite the original file?" // Continue with original file STR_BACKUP_ERR_PATH_CRETE "error in the path of creating the backup destination.\nPath is too long or invalid format.\nContinue to overwrite the original file?" STR_BACKUP_CONFORM_TITLE1 "Confirming creation of backup" // Dialog Title for message below - STR_BACKUP_CONFORM_MSG1 "Creating a backup before updating.\nOK? [(N)o] = No backup, just overwrite (or save as).\n\n%s\n ↓\n%s\n\nBackup file will be sent to the Trashcan\n" + STR_BACKUP_CONFORM_MSG1 "Creating a backup before updating.\nOK? [(N)o] = No backup, just overwrite (or save as).\n\n%s\n \n%s\n\nBackup file will be sent to the Trashcan\n" STR_BACKUP_CONFORM_TITLE2 "Confirming creation of backup" // Dialog Title for message below - STR_BACKUP_CONFORM_MSG2 "Creating a backup before updating.\nOK? [(N)o] = No backup, just overwrite (or save as).\n\n%s\n ↓\n%s\n\n" + STR_BACKUP_CONFORM_MSG2 "Creating a backup before updating.\nOK? [(N)o] = No backup, just overwrite (or save as).\n\n%s\n \n%s\n\n" STR_BACKUP_ERR_DELETE "failed to delete" STR_BACKUP_ERR_MOVE "failed to move" STR_ERR_DLGEDITDOC21 "%s\nis currently prohibited from writing by another process." @@ -3243,7 +3239,7 @@ BEGIN STR_ERR_DLGEDITDOC30 "%s\nhas been altered. Save before closing? \n\nDue to opening as view-mode it is suggested to save under a different name.\n" STR_CHANGE_CHARSET "%s\nis no change.\nhowever change encoding.\nSave before closing?" STR_ERR_DLGEDITDOC31 "%s\nhas been altered. Save before closing?" - STR_AUTORELOAD_NOFITY "★File Updated at %02d:%02d:%02d" + STR_AUTORELOAD_NOFITY "File Updated at %02d:%02d:%02d" // CType_Cpp.cpp STR_OUTLINE_CPP_NONAME "No Name" @@ -3264,15 +3260,15 @@ BEGIN // CEditView.cpp STR_VIEW_TIMER "CEditView::Create()\nTimer could not start up.\nPossible insufficiency of system resources." - STR_ERR_DLGEDITVW2 "大" // Used in get Extents - STR_ERR_DLGEDITVW5 "\n--------------------\n■" - STR_ERR_DLGEDITVW6 "■" + STR_ERR_DLGEDITVW2 "" // Used in get Extents + STR_ERR_DLGEDITVW5 "\n--------------------\n" + STR_ERR_DLGEDITVW6 "" STR_MENU_KEYWORDINFO "Copy Keyword description to clipboard" // Right click menu STR_MENU_OPENKEYWORDDIC "Open keyword dictionary" // Right click menu STR_STATUS_ROW_COL "%5d Ln %4d Col" STR_INS_MODE_INS "INS" // Insert mode STR_INS_MODE_OVR "OVR" // Overwrite mode - STR_GREP_SEARCH_CONDITION "\r\n□ Search Conditions " // Output from GREP results + STR_GREP_SEARCH_CONDITION "\r\n Search Conditions " // Output from GREP results STR_GREP_SEARCH_FILE "\r\n" STR_GREP_SEARCH_TARGET "Search Target " STR_GREP_REPLACE_TO "Replace To " @@ -3324,13 +3320,13 @@ BEGIN // CEditView_Command.cpp STR_ERR_MACRO1 "Macro %d (%s) failed to execute." - STR_ERR_SRPREV1 "▲Restarted search from bottom" - STR_ERR_SRPREV2 "△Not Found" - STR_ERR_SRPREV3 "Reverse searching (↑) for '%ls' found no further instances." - STR_ERR_SRNEXT1 "▼Restarted search from top" - STR_ERR_SRNEXT2 "▽Not Found" - STR_ERR_SRNEXT3 "Forward searching (↓) for '%ls' found no further instances." - STR_ERR_UNINDENT1 "★Reverse indent only works on selected text" + STR_ERR_SRPREV1 "Restarted search from bottom" + STR_ERR_SRPREV2 "Not Found" + STR_ERR_SRPREV3 "Reverse searching () for '%ls' found no further instances." + STR_ERR_SRNEXT1 "Restarted search from top" + STR_ERR_SRNEXT2 "Not Found" + STR_ERR_SRNEXT3 "Forward searching () for '%ls' found no further instances." + STR_ERR_UNINDENT1 "Reverse indent only works on selected text" STR_ERR_TAGJMP1 "Cant Tag-Jump" STR_ERR_TAGJMPBK1 "Cant Bookmark Tag-Jump" STR_ERR_MACROERR1 "Failed to open Macro.\n\n%s" @@ -3363,10 +3359,10 @@ BEGIN // inside function Command_EXTHELP1 // CEditView_Command_New.cpp - STR_BOOKMARK_NEXT_NOT_FOUND "Forward (↓) bookmark wasn't found." - STR_BOOKMARK_PREV_NOT_FOUND "Previous (↑) bookmark wasn't found." - STR_FUCLIST_NEXT_NOT_FOUND "Forward (↓) Function wasn't found." - STR_FUCLIST_PREV_NOT_FOUND "Previous (↑) Function wasn't found." + STR_BOOKMARK_NEXT_NOT_FOUND "Forward () bookmark wasn't found." + STR_BOOKMARK_PREV_NOT_FOUND "Previous () bookmark wasn't found." + STR_FUCLIST_NEXT_NOT_FOUND "Forward () Function wasn't found." + STR_FUCLIST_PREV_NOT_FOUND "Previous () Function wasn't found." STR_ERR_DLGEDITVWCMDNW7 "%d line was successfully merged." // Edit Menu::Cosmtik::Merge lines option STR_ERR_DLGEDITVWCMDNW8 "There were no lines of text that could be merged in your selection." // Edit Menu::Cosmtik::Merge lines option STR_SAVEAGENT_OTHER_APP "'%s'\nCould not save the file.\nPath may not be correct, or the file is in use by another application." @@ -3379,13 +3375,13 @@ BEGIN STR_ERR_DLGEDITVWDIFF3 "DIFF command failed.\n\n%ls" STR_ERR_DLGEDITVWDIFF4 "The file to be used for comparison appears to be a binary file." STR_ERR_DLGEDITVWDIFF5 "No differences were found by DIFF" - STR_DIFF_NEXT_NOT_FOUND "Forwards (↓) searching didn't find differences" - STR_DIFF_PREV_NOT_FOUND "Backward (↑) searching didn't find differences" + STR_DIFF_NEXT_NOT_FOUND "Forwards () searching didn't find differences" + STR_DIFF_PREV_NOT_FOUND "Backward () searching didn't find differences" STR_DIFF_FAILED "DIFF command failed." STR_DIFF_FAILED_TEMP "DIFF command failed.\n\nCouldn't create temporary file." STR_DIFF_FAILED_LONG "DIFF command failed.\n\nLine was too long." - STR_MODLINE_NEXT_NOT_FOUND "Forward (↓) Modified Line wasn't found." - STR_MODLINE_PREV_NOT_FOUND "Previous (↑) Modified Line wasn't found." + STR_MODLINE_NEXT_NOT_FOUND "Forward () Modified Line wasn't found." + STR_MODLINE_PREV_NOT_FOUND "Previous () Modified Line wasn't found." // CEditView_New.cpp -- no words, going to ignore for now ( just block [], ... etc ) @@ -3414,10 +3410,10 @@ BEGIN STR_ERR_DLGEDITWND14 "Before using Print Preview please install a printer driver.\n" - // const char* pszLabel[7] = { "", "99999 行 9999 列", "CRLF", "0000", "UTF-16", "REC", "上書" }; //Oct. 30, 2000 JEPRO 千万行も要らん + // const char* pszLabel[7] = { "", "99999 s 9999 ", "CRLF", "0000", "UTF-16", "REC", "㏑" }; //Oct. 30, 2000 JEPRO 疜sv STR_ERR_DLGEDITWND19 "" STR_ERR_DLGEDITWND20 "99999 L 9999 C" -// STR_ERR_DLGEDITWND20 "99999 行 9999 列" +// STR_ERR_DLGEDITWND20 "99999 s 9999 " STR_ERR_DLGEDITWND21 "CFLF" STR_ERR_DLGEDITWND22 "0000" STR_ERR_DLGEDITWND23 "UTF-16 BOM" @@ -3818,7 +3814,7 @@ BEGIN // CPropTypesRegex.cpp STR_PROPTYPEREGEX_LIST1 "Keyword" - STR_PROPTYPEREGEX_LIST2 "Color Index" // LMP - not sure 色指定 + STR_PROPTYPEREGEX_LIST2 "Color Index" // LMP - not sure Fw STR_PROPTYPEREGEX_NOUSE "Cannot use Regular Expression" STR_PROPTYPEREGEX_NOTFOUND "RegEx library cannot be found\n\nRegular Expression functionality cant be used, do you want to enable it anyway?" STR_PROPTYPEREGEX_NOREG "Cannot register any further keywords." @@ -3894,17 +3890,17 @@ BEGIN STR_ERR_CSHAREDATA02 "Unexpected error" // Common Prop::Tab/Title bar - STR_ERR_CSHAREDATA10 "${w?【Grep】$h$:【Output】$:$f$}${U?(Changed)$}${R?(Read Only)$:(Write Protected)$}${M?【Recording Macro】$}" + STR_ERR_CSHAREDATA10 "${w?yGrepz$h$:yOutputz$:$f$}${U?(Changed)$}${R?(Read Only)$:(Write Protected)$}${M?yRecording Macroz$}" STR_CUSTMENU_RIGHT_CLICK "Right Click Menu" STR_CUSTMENU_CUSTOM "Menu%d" STR_CUSTMENU_TAB "Tab Menu" - STR_ERR_CSHAREDATA14 "1234567890(([[「『【■□▲△▼▽◆◇○◎●§・※☆★第①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ一二三四五六七八九十壱弐参伍" + STR_ERR_CSHAREDATA14 "PQRSTUVWXOi(m[uwyE@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]OlܘZ\Q" STR_ERR_CSHAREDATA15 "yyyy'Y'M'M'd'D('dddd')'" STR_ERR_CSHAREDATA16 "tthh'H'mm'M'ss'S'" - STR_ERR_CSHAREDATA17 "${w?$h$:Output$:${I?$f$:$N$}$}${U?(Changed)$} - sakura $V ${R?(Read Only)$:(Write Protected)$}${M? 【Recording Macro】$}" - STR_ERR_CSHAREDATA18 "${w?$h$:Output$:$f$}${U?(Changed)$} - sakura $V ${R?(Read Only)$:(Write Protected)$}${M? 【Recording Macro】$}" + STR_ERR_CSHAREDATA17 "${w?$h$:Output$:${I?$f$:$N$}$}${U?(Changed)$} - sakura $V ${R?(Read Only)$:(Write Protected)$}${M? yRecording Macroz$}" + STR_ERR_CSHAREDATA18 "${w?$h$:Output$:$f$}${U?(Changed)$} - sakura $V ${R?(Read Only)$:(Write Protected)$}${M? yRecording Macroz$}" STR_ERR_CSHAREDATA19 "Attempting to close multiple editor windows, sure you want to do this?" // Displayed if you try to close edit with many open windows - STR_ERR_CSHAREDATA20 "%s\n\n\nIn the case you want to re-open a file with a different encoding\nsChoose「Re-Open with Encoding」from the file menu please.\n\nCurrent Character Encoding set=[%s]\nNew Character Encoding=[%s]" // See Resource F_FILE_REOPEN_SUBMENU + STR_ERR_CSHAREDATA20 "%s\n\n\nIn the case you want to re-open a file with a different encoding\nsChooseuRe-Open with Encodingvfrom the file menu please.\n\nCurrent Character Encoding set=[%s]\nNew Character Encoding=[%s]" // See Resource F_FILE_REOPEN_SUBMENU STR_ERR_CSHAREDATA21 "%s\n\nUnclear character encoding found during opening multiple documents.\n\nCurrent Char Encoding=%d [%s]\nNew Char Encoding=%d [%s]" STR_ERR_CSHAREDATA22 "unknown" // relates to above two [%s] @@ -4149,7 +4145,7 @@ GDI Resource\tRemaining %d%%\n\n" STR_PLGMGR_INST_RESERVE1 "Don't Use """ STR_PLGMGR_INST_RESERVE2 """ in Plugin.ID" STR_PLGMGR_INST_IDNUM "Plugin.ID of Head character not use numbers" - STR_PLGMGR_INST_NAME "The same plugin has been installed under a different name. Are you sure Overwrite?\n Yes -> Use new「%s」\n No→ Use installed「%ls」" + STR_PLGMGR_INST_NAME "The same plugin has been installed under a different name. Are you sure Overwrite?\n@Yes@->@Use newu%sv\n@No@Use installedu%lsv" STR_PLGMGR_INST_USERCANCEL "User Cancel" STR_PLGMGR_INST_MAX "Plugin can not register any more" @@ -4160,7 +4156,7 @@ GDI Resource\tRemaining %d%%\n\n" STR_FILETREE_FROM_TYPE "Setting: Types" STR_FILETREE_FROM_FILE "Setting: %s" STR_FILETREE_CURDIR "" - STR_FILETREE_MAXCOUNT "最大数(%d)を超えたため切り捨てました" + STR_FILETREE_MAXCOUNT "ő吔(%d)𒴂ߐ؂̂Ă܂" STR_FILETREE_MENU_ROOT "&Ini Root" STR_FILETREE_MENU_MYDOC "M&y Document" STR_FILETREE_MENU_MYMUSIC "My &Music" From ef2f1fc2093f6418f5622c84fa0cef8367bf21f3 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Fri, 6 Nov 2020 01:23:58 +0900 Subject: [PATCH 0260/1024] =?UTF-8?q?=E3=83=AA=E3=82=BD=E3=83=BC=E3=82=B9?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB(.rc/.rc2)=E3=81=AE?= =?UTF-8?q?=E3=82=A8=E3=83=B3=E3=82=B3=E3=83=BC=E3=83=87=E3=82=A3=E3=83=B3?= =?UTF-8?q?=E3=82=B0=E6=8C=87=E5=AE=9A=E3=82=92UTF-16LE=E3=81=AB=E5=A4=89?= =?UTF-8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitattributes | 2 + checkEncoding.py | 9 +- sakura_core/sakura_rc.rc | 8141 +++++++++++++-------------- sakura_core/sakura_rc.rc2 | 235 +- sakura_lang_en_US/sakura_lang_rc.rc | 146 +- 5 files changed, 4266 insertions(+), 4267 deletions(-) diff --git a/.gitattributes b/.gitattributes index 1a621d6b58..e9191fea64 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3,3 +3,5 @@ *.hkn text *.bat text Makefile text eolf=lf +*.rc text working-tree-encoding=utf-16le-bom eol=crlf +*.rc2 text working-tree-encoding=utf-16le-bom eol=crlf diff --git a/checkEncoding.py b/checkEncoding.py index aa20460045..749c278c45 100644 --- a/checkEncoding.py +++ b/checkEncoding.py @@ -15,15 +15,14 @@ patternUTF8_NoBOM = ( "utf-8" ) -patternSJIS = ( - "shift_jis", - "cp932" +patternUTF16 = ( + "utf-16" ) expectEncoding = { ".cpp" : patternUTF8_BOM, ".h" : patternUTF8_BOM, - ".rc" : patternSJIS, - ".rc2" : patternSJIS + ".rc" : patternUTF16, + ".rc2" : patternUTF16 } # チェック対象の拡張子リスト diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index 518e6be18d..b3015ffca3 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -1,4071 +1,4070 @@ -// Microsoft Visual C++ generated resource script. -// -#include "sakura_rc.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#define APSTUDIO_HIDDEN_SYMBOLS -#include -#undef APSTUDIO_HIDDEN_SYMBOLS - -#include "Funccode_define.h" -#include "String_define.h" -#include "version.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// { ({) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN) -LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT -#pragma code_page(932) - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "sakura_rc.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" - "#include \r\n" - "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" - "\r\n" - "#include ""Funccode_define.h""\r\n" - "#include ""String_define.h""\r\n" - "#include ""version.h""\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "#include ""sakura_rc.rc2""\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_FIND DIALOGEX 30, 0, 284, 93 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "" -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - LTEXT "(&N)",IDC_STATIC,5,6,26,10 - COMBOBOX IDC_COMBO_TEXT,34,4,183,150,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - CONTROL "PPʂŒT(&W)",IDC_CHK_WORD,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,5,21,130,10 - CONTROL "p啶Əʂ(&C)",IDC_CHK_LOHICASE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,5,32,130,10 - CONTROL "K\(&E)",IDC_CHK_REGULAREXP,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,5,43,55,10 - CONTROL "‚ȂƂɃbZ[W\(&M)",IDC_CHECK_NOTIFYNOTFOUND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,54,140,10 - CONTROL "_CAOIɕ‚(&L)",IDC_CHECK_bAutoCloseDlgFind,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,65,130,10 - CONTROL "擪ijČ(&Z)",IDC_CHECK_SEARCHALL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,76,130,10 - LTEXT "",IDC_STATIC_JRE32VER,62,43,154,10 - PUSHBUTTON "㌟(&U)",IDC_BUTTON_SEARCHPREV,221,4,58,14,WS_GROUP - DEFPUSHBUTTON "(&D)",IDC_BUTTON_SEARCHNEXT,221,20,58,14 - PUSHBUTTON "Ys}[N(&B)",IDC_BUTTON_SETMARK,221,38,58,14 - PUSHBUTTON "LZ(&X)",IDCANCEL,221,57,58,14,WS_GROUP - PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,221,73,58,14 -END - -IDD_JUMP DIALOGEX 0, 0, 252, 121 -STYLE DS_SETFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_SETFOREGROUND | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "wsփWv" -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - LTEXT "sԍ(&N)",IDC_STATIC,5,6,34,10 - EDITTEXT IDC_EDIT_LINENUM,43,4,40,12 - CONTROL "Spin1",IDC_SPIN_LINENUM,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,82,4,9,12 - CONTROL "܂ԂPʂ̍sԍ(&R)",IDC_RADIO_LINENUM_LAYOUT,"Button",BS_AUTORADIOBUTTON | WS_GROUP,94,5,97,10 - CONTROL "sPʂ̍sԍ(&W)",IDC_RADIO_LINENUM_CRLF,"Button",BS_AUTORADIOBUTTON,94,20,87,10 - CONTROL "&PL/SQLRpCG[s",IDC_CHECK_PLSQL,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,10,50,137,10 - LTEXT "sڂubN&1sڂƂ",IDC_LABEL_PLSQL2,92,66,92,10,NOT WS_GROUP - EDITTEXT IDC_EDIT_PLSQL_E1,47,64,40,12 - CONTROL "Spin1",IDC_SPIN_PLSQL_E1,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,87,64,9,12 - LTEXT "eLXg",IDC_LABEL_PLSQL1,12,66,34,10,NOT WS_GROUP - LTEXT "oꂽPL/SQLpbP[W̃ubNI(&S)",IDC_LABEL_PLSQL3,12,81,166,10,NOT WS_GROUP - COMBOBOX IDC_COMBO_PLSQLBLOCKS,15,94,168,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - GROUPBOX "PL/SQLRpCG[s",IDC_STATIC,5,35,184,80,WS_GROUP - DEFPUSHBUTTON "Wv(&J)",IDC_BUTTON_JUMP,197,5,50,14,WS_GROUP - PUSHBUTTON "LZ(&X)",IDCANCEL,197,24,50,14 - PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,197,101,50,14 -END - -IDD_FUNCLIST DIALOG 0, 0, 240, 289 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU -CAPTION "x" -FONT 9, "lr oSVbN" -BEGIN - CONTROL "Tree1",IDC_TREE_FL,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,0,20,234,232 - CONTROL "List1",IDC_LIST_FL,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,0,0,234,252 - PUSHBUTTON "",IDC_BUTTON_MENU,1,255,10,14,NOT WS_TABSTOP - CONTROL "",IDC_BUTTON_WINSIZE,"Button",BS_AUTOCHECKBOX | BS_PUSHLIKE,12,255,10,14 - PUSHBUTTON "Rs[(&C)",IDC_BUTTON_COPY,24,255,50,14,WS_DISABLED - DEFPUSHBUTTON "Wv(&J)",IDOK,76,255,50,14 - PUSHBUTTON "LZ(&X)",IDCANCEL,128,255,50,14 - PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,180,255,50,14 - CONTROL "Iɕ‚(&D)",IDC_CHECK_bAutoCloseDlgFuncList,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,271,75,10 - CONTROL "tH[JXڂ(&F)",IDC_CHECK_bFunclistSetFocusOnJump,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,82,271,77,10 - CONTROL "s𖳎(&B)",IDC_CHECK_bMarkUpBlankLineEnable,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,271,76,10 - LTEXT "(&S)",IDC_STATIC_nSortType,3,6,28,10 - PUSHBUTTON "ݒ(&S)",IDC_BUTTON_SETTING,3,3,35,14 - COMBOBOX IDC_COMBO_nSortType,34,3,94,65,CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP -END - -IDD_GREP DIALOGEX 0, 0, 390, 192 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "Grep" -FONT 9, "Yu Gothic UI", 0, 0, 0x1 -BEGIN - RTEXT "(&N):",IDC_STATIC,4,4,52,8 - COMBOBOX IDC_COMBO_TEXT,60,4,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - CONTROL "PP(&W)",IDC_CHK_WORD,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,60,18,80,8 - CONTROL "p召(&C)",IDC_CHK_LOHICASE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,28,80,8 - CONTROL "K\(&E)",IDC_CHK_REGULAREXP,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,38,80,8 - RTEXT "(ɐK\Cũo[W񂪕\܂)",IDC_STATIC_JRE32VER,144,38,188,8 - RTEXT "ꏊ(&L):",IDC_STATIC,4,52,52,8 - COMBOBOX IDC_COMBO_FOLDER,60,52,254,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "&...",IDC_BUTTON_FOLDER,316,52,16,10 - CONTROL "ҏW̃t@C猟(&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,66,100,8 - CONTROL "TutH_(&S)",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,76,100,8 - CONTROL "JgtH_l(&D)",IDC_CHK_DEFAULTFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,86,100,8 - PUSHBUTTON "Kw(&U)",IDC_BUTTON_FOLDER_UP,230,66,50,14 - PUSHBUTTON "tH_(&G)",IDC_BUTTON_CURRENTFOLDER,282,66,50,14,BS_MULTILINE - RTEXT "Ώۃt@C(&I):",IDC_STATIC,4,100,52,8,NOT WS_GROUP - COMBOBOX IDC_COMBO_FILE,60,100,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - RTEXT "Ot@C(&J):",IDC_STATIC,4,114,52,8,NOT WS_GROUP - COMBOBOX IDC_COMBO_EXCLUDE_FILE,60,114,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - RTEXT "OtH_(&K):",IDC_STATIC,4,128,53,8 - COMBOBOX IDC_COMBO_EXCLUDE_FOLDER,60,128,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - GROUPBOX "ʏo",IDC_STATIC,60,144,68,44,WS_GROUP - CONTROL "Ys(&1)",IDC_RADIO_OUTPUTLINE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,68,156,56,8 - CONTROL "Y(&2)",IDC_RADIO_OUTPUTMARKED,"Button",BS_AUTORADIOBUTTON,68,166,56,8 - CONTROL "ۊYs(&3)",IDC_RADIO_NOHIT,"Button",BS_AUTORADIOBUTTON,68,176,56,8 - GROUPBOX "ʏo͌`",IDC_STATIC,132,144,68,44,WS_GROUP - CONTROL "m[}(&4)",IDC_RADIO_OUTPUTSTYLE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,140,156,52,8 - CONTROL "t@C(&5)",IDC_RADIO_OUTPUTSTYLE2,"Button",BS_AUTORADIOBUTTON,140,166,52,8 - CONTROL "ʂ̂(&6)",IDC_RADIO_OUTPUTSTYLE3,"Button",BS_AUTORADIOBUTTON,140,176,52,8 - GROUPBOX "̑",IDC_STATIC,204,144,180,44,WS_GROUP - CONTROL "t@Cŏ̂݌(&7)",IDC_CHECK_FILE_ONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,156,92,8 - CONTROL "tH_ɕ\(&8)",IDC_CHECK_SEP_FOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,166,92,8 - CONTROL "x[XtH_\(&9)",IDC_CHECK_BASE_PATH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,176,92,8 - LTEXT "R[hZbg(&A):",IDC_STATIC,312,152,62,8 - COMBOBOX IDC_COMBO_CHARSET,312,162,64,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,312,176,30,8 - DEFPUSHBUTTON "(&F)",IDOK,336,4,50,14,WS_GROUP - PUSHBUTTON "LZ(&X)",IDCANCEL,336,20,50,14 - PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,336,36,50,14 -END - -IDD_GREP_REPLACE DIALOGEX 0, 0, 390, 204 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "Grepu" -FONT 9, "Yu Gothic UI", 0, 0, 0x1 -BEGIN - RTEXT "uO(&N):",IDC_STATIC,4,4,52,10 - COMBOBOX IDC_COMBO_TEXT,60,4,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - RTEXT "u(&Z):",IDC_STATIC,4,18,52,10 - COMBOBOX IDC_COMBO_TEXT2,60,18,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - CONTROL "PP(&W)",IDC_CHK_WORD,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,60,32,80,8 - CONTROL "p召(&C)",IDC_CHK_LOHICASE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,42,80,8 - CONTROL "K\(&E)",IDC_CHK_REGULAREXP,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,52,80,8 - CONTROL "Nbv{[h̓eŒu(&V)",IDC_CHK_PASTE,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,196,32,120,8 - CONTROL "obNAbv쐬(&B)",IDC_CHK_BACKUP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,196,42,120,8 - RTEXT "(ɐK\Cũo[W񂪕\܂)",IDC_STATIC_JRE32VER,144,52,188,8 - RTEXT "ꏊ(&L):",IDC_STATIC,4,64,52,8 - COMBOBOX IDC_COMBO_FOLDER,60,64,254,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "&...",IDC_BUTTON_FOLDER,316,64,16,10 - CONTROL "ҏW̃t@C猟(&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,78,100,8 - CONTROL "TutH_(&S)",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,88,100,8 - CONTROL "JgtH_l(&D)",IDC_CHK_DEFAULTFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,98,100,8 - PUSHBUTTON "Kw(&U)",IDC_BUTTON_FOLDER_UP,230,78,50,14 - PUSHBUTTON "tH_(&G)",IDC_BUTTON_CURRENTFOLDER,282,78,50,14,BS_MULTILINE - RTEXT "Ώۃt@C(&I):",IDC_STATIC,4,114,52,8,NOT WS_GROUP - COMBOBOX IDC_COMBO_FILE,60,114,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - RTEXT "Ot@C(&J):",IDC_STATIC,4,128,52,8,NOT WS_GROUP - COMBOBOX IDC_COMBO_EXCLUDE_FILE,60,128,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - RTEXT "OtH_(&K):",IDC_STATIC,4,142,52,8 - COMBOBOX IDC_COMBO_EXCLUDE_FOLDER,60,142,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - GROUPBOX "ʏo",IDC_STATIC,60,156,68,44,WS_GROUP - CONTROL "Ys(&1)",IDC_RADIO_OUTPUTLINE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,68,168,56,8 - CONTROL "Y(&2)",IDC_RADIO_OUTPUTMARKED,"Button",BS_AUTORADIOBUTTON,68,178,56,8 - GROUPBOX "ʏo͌`",IDC_STATIC,132,156,68,44,WS_GROUP - CONTROL "m[}(&4)",IDC_RADIO_OUTPUTSTYLE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,140,168,52,8 - CONTROL "t@C(&5)",IDC_RADIO_OUTPUTSTYLE2,"Button",BS_AUTORADIOBUTTON,140,178,52,8 - CONTROL "ʂ̂(&6)",IDC_RADIO_OUTPUTSTYLE3,"Button",BS_AUTORADIOBUTTON,140,188,52,8 - GROUPBOX "̑",IDC_STATIC,204,156,180,44,WS_GROUP - CONTROL "t@Cŏ̂݌(&7)",IDC_CHECK_FILE_ONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,168,92,8 - CONTROL "tH_ɕ\(&8)",IDC_CHECK_SEP_FOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,178,92,8 - CONTROL "x[XtH_\(&9)",IDC_CHECK_BASE_PATH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,188,92,8 - LTEXT "R[hZbg(&A):",IDC_STATIC,312,164,62,8 - COMBOBOX IDC_COMBO_CHARSET,312,174,64,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,312,188,30,8 - DEFPUSHBUTTON "u(&R)",IDOK,336,4,50,14,WS_GROUP - PUSHBUTTON "LZ(&X)",IDCANCEL,336,20,50,14 - PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,336,36,50,14 -END - -IDD_GREPRUNNING DIALOGEX 0, 0, 293, 79 -STYLE DS_SETFONT | DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Greps" -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - LTEXT "Ă܂EEE",IDC_STATIC,5,5,61,10,NOT WS_GROUP - LTEXT "t@C",IDC_STATIC,5,21,26,10,NOT WS_GROUP - LTEXT "IDC_STATIC_CURPATH",IDC_STATIC_CURFILE,36,20,252,10,NOT WS_GROUP - LTEXT "tH_",IDC_STATIC,5,34,27,10,NOT WS_GROUP - EDITTEXT IDC_STATIC_CURPATH,36,35,252,20,ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP - PUSHBUTTON "LZ(&X)",IDCANCEL,238,60,50,14 - LTEXT "0",IDC_STATIC_HITCOUNT,76,5,44,10,NOT WS_GROUP,WS_EX_RIGHT - LTEXT "݂‚܂B",IDC_STATIC,122,5,60,10,NOT WS_GROUP - CONTROL "A^C\(&V)",IDC_CHECK_REALTIMEVIEW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,149,59,84,14 -END - -IDD_REPLACE DIALOGEX 30, 0, 298, 149 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "u" -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - LTEXT "uO(&N)",IDC_STATIC,5,6,35,10 - COMBOBOX IDC_COMBO_TEXT,43,4,191,150,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - LTEXT "u(&P)",IDC_STATIC,5,21,34,10,NOT WS_GROUP - COMBOBOX IDC_COMBO_TEXT2,43,19,191,150,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - CONTROL "Nbv{[h\t(&T)",IDC_CHK_PASTE,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,5,41,116,10 - CONTROL "PPʂŒT(&W)",IDC_CHK_WORD,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,5,52,78,10 - CONTROL "p啶Əʂ(&C)",IDC_CHK_LOHICASE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,5,63,119,10 - CONTROL "K\(&E)",IDC_CHK_REGULAREXP,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,5,74,55,10 - LTEXT "",IDC_STATIC_JRE32VER,16,85,138,10 - CONTROL "uׂĒuv͒ǔJԂ(&I)",IDC_CHECK_CONSECUTIVEALL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,95,118,10 - CONTROL "‚ȂƂɃbZ[W\(&M)",IDC_CHECK_NOTIFYNOTFOUND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,107,140,10 - CONTROL "u_CAOIɕ‚(&L)",IDC_CHECK_bAutoCloseDlgReplace, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,118,128,10 - CONTROL "擪ijČ(&Z)",IDC_CHECK_SEARCHALL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,129,113,10 - GROUPBOX "uΏ",IDC_STATIC,156,37,78,62,WS_GROUP - CONTROL "I𕶎(&0)",IDC_RADIO_REPLACE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,159,50,59,10 - CONTROL "In_(&1)}",IDC_RADIO_INSERT,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,159,61,71,10 - CONTROL "II_(&2)lj",IDC_RADIO_ADD,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,159,72,71,10 - CONTROL "s폜(&3)",IDC_RADIO_LINEDELETE,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,159,83,71,10 - GROUPBOX "͈",IDC_STATIC,156,103,78,37,WS_GROUP - CONTROL "I͈(&S)",IDC_RADIO_SELECTEDAREA,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,159,115,57,10 - CONTROL "t@CS(&O)",IDC_RADIO_ALLAREA,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,159,126,68,10 - PUSHBUTTON "㌟(&U)",IDC_BUTTON_SEARCHPREV,237,4,58,14,WS_GROUP - DEFPUSHBUTTON "(&D)",IDC_BUTTON_SEARCHNEXT,237,19,58,14 - PUSHBUTTON "Ys}[N(&B)",IDC_BUTTON_SETMARK,237,38,58,14 - PUSHBUTTON "u(&R)",IDC_BUTTON_REPALCE,237,57,58,14 - PUSHBUTTON "ׂĒu(&A)",IDC_BUTTON_REPALCEALL,237,73,58,14 - PUSHBUTTON "LZ(&X)",IDCANCEL,237,110,58,14,WS_GROUP - PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,237,127,58,14 -END - -IDD_REPLACERUNNING DIALOG 0, 0, 190, 35 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "u" -FONT 9, "lr oSVbN" -BEGIN - LTEXT "ułEEEE",IDC_STATIC,5,5,55,10 - CONTROL "Progress1",IDC_PROGRESS_REPLACE,"msctls_progress32",WS_BORDER,5,20,120,10 - PUSHBUTTON "LZ(&X)",IDCANCEL,135,16,50,14 - RTEXT "9999999999",IDC_STATIC_KENSUU,64,5,37,10,NOT WS_GROUP - LTEXT "",IDC_STATIC,104,5,8,10,NOT WS_GROUP -END - -IDD_PROPERTY_FILE DIALOGEX 0, 0, 270, 225 -STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "t@C̃vpeB" -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - DEFPUSHBUTTON "‚(&C)",IDOK,155,208,50,14 - PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,215,208,50,14 - EDITTEXT IDC_EDIT_PROPERTY,5,5,260,200,ES_MULTILINE | ES_READONLY | WS_VSCROLL -END - -IDD_INPUT1 DIALOGEX 0, 0, 185, 55 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "ėp̓_CAO" -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - EDITTEXT IDC_EDIT_INPUT1,5,17,175,12,ES_AUTOHSCROLL - DEFPUSHBUTTON "&OK",IDOK,37,36,50,14 - PUSHBUTTON "LZ(&X)",IDCANCEL,98,35,50,14 - LTEXT "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",IDC_STATIC_MSG,6,5,175,10 -END - -IDD_COMPARE DIALOGEX 0, 0, 365, 165 -STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "t@Cer" -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - LTEXT "rt@CIĂ(&C):",IDC_STATIC,5,31,158,10 - LISTBOX IDC_LIST_FILES,5,42,355,95,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - CONTROL "Eɕ\(&T)",IDC_CHECK_TILE_H,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,293,30,66,10 - DEFPUSHBUTTON "&OK",IDOK,184,145,50,14 - PUSHBUTTON "LZ(&X)",IDCANCEL,244,145,50,14 - PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,304,145,50,14 - EDITTEXT IDC_STATIC_COMPARESRC,7,7,355,20,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL,WS_EX_STATICEDGE -END - -IDD_PRINTPREVIEWBAR DIALOG 0, 0, 402, 32 -STYLE DS_SETFONT | WS_CHILD -FONT 9, "lr oSVbN" -BEGIN - DEFPUSHBUTTON "(&P)...",IDOK,2,1,55,14 - PUSHBUTTON "y[Wݒ(&S)...",IDC_BUTTON_PRINTSETTING,2,16,55,14 - PUSHBUTTON "O(&V)",IDC_BUTTON_PREVPAGE,60,1,30,14 - PUSHBUTTON "(&N)",IDC_BUTTON_NEXTPAGE,90,1,30,14 - PUSHBUTTON "..&.",IDC_BUTTON_DIRECTPAGE,120,1,9,14 - LTEXT "999/999",IDC_STATIC_PAGENUM,131,4,35,10 - PUSHBUTTON "k(&O)",IDC_BUTTON_ZOOMDOWN,60,16,30,14 - PUSHBUTTON "g(&I)",IDC_BUTTON_ZOOMUP,90,16,30,14 - LTEXT "999/999",IDC_STATIC_ZOOM,131,19,35,10 - PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,167,1,39,14 - CONTROL "炩(&A)",IDC_CHECK_ANTIALIAS,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,207,3,43,10 - PUSHBUTTON "߂(&Q)",IDCANCEL,167,16,39,14 - PUSHBUTTON "v^(&R)",IDC_BUTTON_PRINTERSELECT,208,16,40,14 - ICON IDI_PRINTER,IDC_STATIC,251,3,11,9,SS_REALSIZEIMAGE - LTEXT "Static",IDC_STATIC_PRNDEV,263,4,137,10 - LTEXT "Static",IDC_STATIC_PAPER,251,19,149,10 -END - -IDD_PRINTSETTING DIALOGEX 0, 0, 302, 253 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "y[Wݒ" -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - LTEXT "y[Wݒ(&1)",IDC_STATIC,7,9,45,10 - COMBOBOX IDC_COMBO_SETTINGNAME,56,7,163,170,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "ݒ薼ύX(&2)...",IDC_BUTTON_EDITSETTINGNAME,224,7,69,14 - GROUPBOX "ݒ",IDC_STATIC,4,22,289,204 - RTEXT "ptHg(&F)",IDC_STATIC,7,37,45,10 - COMBOBOX IDC_COMBO_FONT_HAN,56,35,84,230,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP - RTEXT "SptHg(&K)",IDC_STATIC,7,52,45,10 - COMBOBOX IDC_COMBO_FONT_ZEN,56,50,84,230,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP - RTEXT "tHg(&P)",IDC_STATIC,7,71,45,10 - EDITTEXT IDC_EDIT_FONTHEIGHT,56,69,30,12,ES_AUTOHSCROLL - CONTROL "Spin1",IDC_SPIN_FONTHEIGHT,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,69,9,12 - LTEXT "(1/10mm)",IDC_STATIC,88,71,32,10 - RTEXT "144.5pt",IDC_STATIC_FONTSIZE,120,71,22,10 - RTEXT "s(&S)",IDC_STATIC,7,85,45,10 - EDITTEXT IDC_EDIT_LINESPACE,56,83,30,12,ES_AUTOHSCROLL - CONTROL "Spin2",IDC_SPIN_LINESPACE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,83,9,12 - LTEXT "(%)",IDC_STATIC,88,85,10,10 - RTEXT "i (&C)",IDC_STATIC,7,99,45,10 - EDITTEXT IDC_EDIT_DANSUU,56,97,30,12,ES_AUTOHSCROLL - CONTROL "Spin3",IDC_SPIN_DANSUU,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,97,9,12 - RTEXT "ǐ(&E)",IDC_STATIC,7,113,45,10 - EDITTEXT IDC_EDIT_DANSPACE,56,111,30,12,ES_AUTOHSCROLL - CONTROL "Spin4",IDC_SPIN_DANSPACE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,111,9,12 - LTEXT "(mm)",IDC_STATIC,88,113,17,10 - RTEXT "pTCY(&Z)",IDC_STATIC,7,131,45,10 - COMBOBOX IDC_COMBO_PAPER,56,129,169,145,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - RTEXT "p̌",IDC_STATIC,7,146,45,10 - CONTROL "c(&I)",IDC_RADIO_PORTRAIT,"Button",BS_AUTORADIOBUTTON | WS_GROUP,58,145,40,10 - CONTROL "(&A)",IDC_RADIO_LANDSCAPE,"Button",BS_AUTORADIOBUTTON,102,145,40,10 - RTEXT "]^(&T)",IDC_STATIC,7,163,45,10 - EDITTEXT IDC_EDIT_MARGINTY,56,161,30,12,ES_AUTOHSCROLL - CONTROL "Spin5",IDC_SPIN_MARGINTY,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,161,9,12 - LTEXT "(mm)",IDC_STATIC,88,163,17,10 - RTEXT "(&B)",IDC_STATIC,7,177,45,10 - EDITTEXT IDC_EDIT_MARGINBY,56,175,30,12,ES_AUTOHSCROLL - CONTROL "Spin6",IDC_SPIN_MARGINBY,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,175,9,12 - LTEXT "(mm)",IDC_STATIC,88,177,17,10 - RTEXT "(&L)",IDC_STATIC,7,191,45,10 - EDITTEXT IDC_EDIT_MARGINLX,56,189,30,12,ES_AUTOHSCROLL - CONTROL "Spin7",IDC_SPIN_MARGINLX,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,189,9,12 - LTEXT "(mm)",IDC_STATIC,88,191,17,10 - RTEXT "E(&R)",IDC_STATIC,7,205,45,10 - EDITTEXT IDC_EDIT_MARGINRX,56,202,30,12,ES_AUTOHSCROLL - CONTROL "Spin8",IDC_SPIN_MARGINRX,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,202,9,12 - LTEXT "(mm)",IDC_STATIC,88,205,17,10 - CONTROL "sԍ(&N)",IDC_CHECK_LINENUMBER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,35,70,10 - CONTROL "p[hbv(&W)",IDC_CHECK_WORDWRAP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,49,78,10 - CONTROL "s֑",IDC_CHECK_PS_KINSOKUHEAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,63,46,10 - CONTROL "s֑",IDC_CHECK_PS_KINSOKUTAIL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,77,46,10 - CONTROL "sԂ牺",IDC_CHECK_PS_KINSOKURET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,197,63,60,10 - CONTROL "Ǔ_Ԃ牺",IDC_CHECK_PS_KINSOKUKUTO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,197,77,67,10 - LTEXT "s̕F",IDC_STATIC,150,96,65,10 - LTEXT "c̍sF",IDC_STATIC,150,110,65,10 - RTEXT "0",IDC_STATIC_ENABLECOLUMNS,215,96,20,10 - RTEXT "0",IDC_STATIC_ENABLELINES,215,110,20,10 - GROUPBOX "",IDC_STATIC,145,87,112,37 - CONTROL "J[(&V)",IDC_CHECK_COLORPRINT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,145,61,10 - LTEXT "wb_[(&U)",IDC_STATIC,107,163,38,10 - EDITTEXT IDC_EDIT_HEAD1,107,175,50,12,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_HEAD2,158,175,50,12,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_HEAD3,209,175,50,12,ES_AUTOHSCROLL - CONTROL "gp",IDC_CHECK_USE_FONT_HEAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,260,164,30,10 - PUSHBUTTON "tHg",IDC_BUTTON_FONT_HEAD,260,174,30,14 - RTEXT "Font(xxpt/xx.xmm)",IDC_STATIC_FONT_HEAD,145,160,114,14,SS_CENTERIMAGE - LTEXT "tb^[(&D)",IDC_STATIC,107,191,38,10 - EDITTEXT IDC_EDIT_FOOT1,107,203,50,12,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_FOOT2,158,203,50,12,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_FOOT3,209,203,50,12,ES_AUTOHSCROLL - CONTROL "gp",IDC_CHECK_USE_FONT_FOOT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,260,192,30,10 - PUSHBUTTON "tHg",IDC_BUTTON_FONT_FOOT,260,202,30,14 - RTEXT "Font(xxpt/xx.xmm)",IDC_STATIC_FONT_FOOT,145,189,114,14,SS_CENTERIMAGE - DEFPUSHBUTTON "&OK",IDOK,128,234,50,14 - PUSHBUTTON "LZ(&X)",IDCANCEL,183,234,50,14 - PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,238,234,50,14 -END - -IDD_EXITING DIALOG 0, 0, 171, 30 -STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_VISIBLE -FONT 9, "lr oSVbN" -BEGIN - ICON IDI_ICON_STD,IDC_STATIC,5,5,20,20 - LTEXT "IĂ܂B ΂炭҂EEE",IDC_STATIC,30,10,137,8 -END - -IDD_EXEC DIALOGEX 30, 0, 292, 137 -STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "t@Cw肵Ďs" -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - LTEXT "O(&N)",IDC_STATIC,5,6,26,10 - COMBOBOX IDC_COMBO_m_szCommand,34,4,254,240,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_TABSTOP - PUSHBUTTON "&...",IDC_BUTTON_REFERENCE,278,20,9,12,WS_GROUP - CONTROL "Wo͂𓾂(&S)",IDC_CHECK_GETSTDOUT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,32,76,10 - COMBOBOX IDC_COMBO_CODE_GET,16,43,73,10,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "W͂ɑ(&I)",IDC_CHECK_SENDSTDIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,58,74,10 - COMBOBOX IDC_COMBO_CODE_SEND,16,72,73,10,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "AEgvbgEBhE(&O)",IDC_RADIO_OUTPUT,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,102,51,93,10 - CONTROL "ҏW̃EBhE(&C)",IDC_RADIO_EDITWINDOW,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,196,51,87,10 - GROUPBOX "Wo̓_CNg",IDC_STATIC,98,39,190,29,WS_GROUP - CONTROL "JgfBNg(&R)",IDC_CHECK_CUR_DIR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,86,93,10 - COMBOBOX IDC_COMBO_CUR_DIR,16,100,263,240,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_TABSTOP - PUSHBUTTON "...",IDC_BUTTON_REFERENCE2,279,100,9,12,WS_GROUP - DEFPUSHBUTTON "s(&E)",IDOK,117,116,50,14 - PUSHBUTTON "LZ(&X)",IDCANCEL,177,116,50,14 - PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,237,116,50,14 - LTEXT "[Note] $FŕҏWt@C, $$$",IDC_STATIC,140,21,134,10 -END - -IDD_EXECRUNNING DIALOG 0, 0, 270, 55 -STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "R}hsEEE" -FONT 9, "lr oSVbN" -BEGIN - PUSHBUTTON "LZ(&X)",IDCANCEL,207,36,59,14 - EDITTEXT IDC_STATIC_CMD,5,5,260,23,ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP -END - -IDD_MACRORUNNING DIALOG 0, 0, 270, 55 -STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -FONT 9, "lr oSVbN" -BEGIN - PUSHBUTTON "LZ(&X)",IDCANCEL,207,5,59,14 - LTEXT "}NsEEE",IDC_STATIC,5,5,200,23 - EDITTEXT IDC_STATIC_CMD,5,28,260,23,ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP -END - -IDD_HOKAN DIALOGEX 0, 0, 125, 100 -STYLE DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | WS_THICKFRAME -EXSTYLE WS_EX_TOOLWINDOW -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - LISTBOX IDC_LIST_WORDS,0,0,120,95,LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_WANTKEYBOARDINPUT | WS_VSCROLL | WS_TABSTOP -END - -IDD_PRINTING DIALOG 0, 0, 145, 75 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "" -FONT 9, "lr oSVbN" -BEGIN - PUSHBUTTON "LZ(&X)",IDCANCEL,90,56,50,14 - LTEXT "Ă܂EEEE",IDC_STATIC,25,10,65,10 - LTEXT "12/123",IDC_STATIC_PROGRESS,25,43,100,10 - LTEXT "CEditView.cpp",IDC_STATIC_JOBNAME,25,20,115,20 - ICON IDI_PRINTER,IDC_STATIC,10,8,11,9,SS_REALSIZEIMAGE -END - -IDD_FILEOPEN DIALOG 0, 0, 261, 66 -STYLE DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN -FONT 9, "lr oSVbN" -BEGIN - LTEXT "",IDC_STATIC_STC32,0,0,261,10 - LTEXT "R[hZbg(&C):",IDC_STATIC_CHARCODE,5,15,64,10 - COMBOBOX IDC_COMBO_CODE,71,13,50,126,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,122,14,25,10 - CONTROL "&BOM",IDC_CHECK_BOM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,148,14,30,10 - LTEXT "sR[h(&E):",IDC_STATIC_EOL,181,15,45,10 - COMBOBOX IDC_COMBO_EOL,226,13,50,126,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "ŋ߂̃t@C(&F):",IDC_STATIC,5,32,59,10 - COMBOBOX IDC_COMBO_MRU,71,30,185,236,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP - LTEXT "ŋ߂̃tH_(&D):",IDC_STATIC,5,49,61,10 - COMBOBOX IDC_COMBO_OPENFOLDER,71,46,185,236,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP -END - -IDD_FILEUPDATEQUERY DIALOG 0, 0, 223, 107 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION -CAPTION "t@CXV܂" -FONT 9, "lr oSVbN" -BEGIN - PUSHBUTTON "ēǍ(&R)",IDC_BTN_RELOAD,7,63,50,14 - DEFPUSHBUTTON "‚(&C)",IDC_BTN_CLOSE,59,63,50,14 - PUSHBUTTON "Ȍ㖢ҏWōēǍ(&L)",IDC_BTN_AUTOLOAD,114,63,102,14 - PUSHBUTTON "ȌʒmbZ[Ŵ(&M)",IDC_BTN_NOTIFYONLY,7,81,102,14 - PUSHBUTTON "ȌXVĎȂ(&N)",IDC_BTN_NOSUPERVISION,114,81,102,14 - EDITTEXT IDC_UPDATEDFILENAME,7,7,209,25,ES_MULTILINE | ES_READONLY | NOT WS_TABSTOP - LTEXT "̃t@C͊ÕGfB^ŕύXĂ܂B",IDC_FILEUPDATEMSG,7,36,209,10 - LTEXT "",IDC_QUERYRELOADMSG,7,48,209,10 -END - -IDD_FAVORITE DIALOGEX 0, 0, 380, 274 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "ƂCɓ̊Ǘ" -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - CONTROL "List1",IDC_LIST_FAVORITE_FILE,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,3,17,373,213 - CONTROL "List1",IDC_LIST_FAVORITE_FOLDER,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,25,39,243,79 - CONTROL "List1",IDC_LIST_FAVORITE_EXCEPTMRU,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,27,42,243,79 - CONTROL "List1",IDC_LIST_FAVORITE_SEARCH,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,18,54,243,79 - CONTROL "List1",IDC_LIST_FAVORITE_REPLACE,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,11,73,243,79 - CONTROL "List1",IDC_LIST_FAVORITE_GREP_FILE,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,14,93,243,79 - CONTROL "List1",IDC_LIST_FAVORITE_GREP_FOLDER,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,18,115,243,79 - CONTROL "List1",IDC_LIST_FAVORITE_CMD,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,25,127,243,79 - CONTROL "List1",IDC_LIST_FAVORITE_CUR_DIR,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,25,127,243,79 - PUSHBUTTON "lj(&I)",IDC_BUTTON_ADD_FAVORITE,5,237,50,14 - LTEXT " ̍폜F",IDC_STATIC_BUTTONS,65,237,45,14,SS_CENTERIMAGE - PUSHBUTTON "ׂ(&A)...",IDC_BUTTON_CLEAR,111,237,50,14 - PUSHBUTTON "CɓȊO(&F)...",IDC_BUTTON_DELETE_NOFAVORATE,163,237,75,14 - PUSHBUTTON "݂Ȃ(&N)...",IDC_BUTTON_DELETE_NOTFOUND,241,237,72,14 - PUSHBUTTON "I(&D)",IDC_BUTTON_DELETE_SELECTED,315,237,58,14 - DEFPUSHBUTTON "‚(&C)",IDOK,260,255,50,14 - CONTROL "Tab1",IDC_TAB_FAVORITE,"SysTabControl32",WS_TABSTOP,3,4,374,15 - PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,315,255,50,14 - LTEXT "Message",IDC_STATIC_FAVORITE_MSG,4,254,250,19 -END - -IDD_TAGJUMPLIST DIALOGEX 0, 0, 410, 189 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "_CNg^OWvꗗ" -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - LTEXT "DIR",IDC_STATIC_BASEDIR,4,151,276,10,SS_NOPREFIX - LTEXT "L[[h(&K)",IDC_STATIC_KEYWORD,4,162,100,10,SS_NOPREFIX - COMBOBOX IDC_KEYWORD,3,172,134,180,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP - CONTROL "List1",IDC_LIST_TAGJUMP,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,3,4,403,143 - PUSHBUTTON "O(&P)",IDC_BUTTON_PREVTAG,296,152,50,14 - PUSHBUTTON "(&N)",IDC_BUTTON_NEXTTAG,349,152,50,14 - PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,243,170,50,14 - DEFPUSHBUTTON "Wv(&J)",IDOK,296,170,50,14 - PUSHBUTTON "LZ(&X)",IDCANCEL,349,170,50,14 - CONTROL "啶̓ꎋ(&F)",IDC_CHECK_ICASE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,144,163,95,10 - CONTROL "̓rɃ}b`(&A)",IDC_CHECK_ANYWHERE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,144,175,95,10 -END - -IDD_TAG_MAKE DIALOGEX 0, 0, 233, 85 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "^Ot@C̍쐬" -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - LTEXT "^O쐬tH_",IDC_STATIC,7,7,65,10 - EDITTEXT IDC_EDIT_TAG_MAKE_FOLDER,7,18,201,12,ES_AUTOHSCROLL - PUSHBUTTON "...",IDC_BUTTON_TAG_MAKE_REF,211,17,15,12 - PUSHBUTTON "(&B)",IDC_BUTTON_FOLDER_UP,186,31,25,14 - CONTROL "TutH_Ώۂɂ",IDC_CHECK_TAG_MAKE_RECURSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,34,107,10 - LTEXT "R}hCIvV",IDC_STATIC,7,49,86,10 - EDITTEXT IDC_EDIT_TAG_MAKE_CMDLINE,96,47,130,12,ES_AUTOHSCROLL - DEFPUSHBUTTON "쐬(&O)",IDOK,68,64,50,14 - PUSHBUTTON "LZ(&X)",IDCANCEL,122,64,50,14 - PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,176,64,50,14 -END - -IDD_OPERATIONRUNNING DIALOG 0, 0, 190, 35 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "̎s" -FONT 9, "lr oSVbN" -BEGIN - LTEXT "łEEEE",IDC_STATIC_MSG,5,5,54,10,NOT WS_GROUP - CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32",WS_BORDER,5,20,120,10 - PUSHBUTTON "LZ(&X)",IDCANCEL,135,16,50,14 - RTEXT "",IDC_STATIC_KENSUU,61,5,123,10,NOT WS_GROUP -END - -IDD_DIFF DIALOGEX 0, 0, 263, 303 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "DIFF\" -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - GROUPBOX "rt@C",IDC_FRAME_DIFF_DST,7,47,249,138,WS_GROUP - EDITTEXT IDC_EDIT_DIFF_DST,13,72,191,13,ES_AUTOHSCROLL - CONTROL "Ot@Cw",IDC_RADIO_DIFF_DST1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,13,58,78,11 - PUSHBUTTON "Q(&R)...",IDC_BUTTON_DIFF_DST,208,72,42,14,WS_GROUP - CONTROL "̕ҏW̃t@C",IDC_RADIO_DIFF_DST2,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,13,89,147,11 - LISTBOX IDC_LIST_DIFF_FILES,13,102,236,77,LBS_SORT | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - CONTROL "啶̓ꎋ(&C)",IDC_CHECK_DIFF_OPT_CASE,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,191,101,10 - CONTROL "󔒖(&W)",IDC_CHECK_DIFF_OPT_SPACE,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,203,64,10 - CONTROL "󔒕ύX(&B)",IDC_CHECK_DIFF_OPT_SPCCHG,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,216,73,10 - CONTROL "󔒍s(&L)",IDC_CHECK_DIFF_OPT_BLINE,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,229,74,10 - CONTROL "^u󔒕ϊ(&T)",IDC_CHECK_DIFF_OPT_TABSPC,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,242,74,10 - GROUPBOX "ҏWt@C...",IDC_FRAME_DIFF_FILE12,110,190,146,26,WS_GROUP - CONTROL "Vt@C(&N)",IDC_RADIO_DIFF_FILE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,119,201,59,10 - CONTROL "t@C(&D)",IDC_RADIO_DIFF_FILE2,"Button",BS_AUTORADIOBUTTON | WS_GROUP,183,201,59,10 - GROUPBOX "̍(O̍)ֈړ",IDC_FRAME_SEARCH_MSG,110,221,146,41 - CONTROL "‚ȂƂɃbZ[W\(&M)",IDC_CHECK_NOTIFYNOTFOUND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,232,140,10 - CONTROL "擪ijČ(&Z)",IDC_CHECK_SEARCHALL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,245,130,10 - CONTROL "DIFFȂƂɃbZ[W\",IDC_CHECK_DIFF_EXEC_STATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,267,139,10 - DEFPUSHBUTTON "&OK",IDOK,93,282,50,14 - PUSHBUTTON "LZ(&X)",IDCANCEL,147,282,50,14 - PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,202,282,50,14 - LTEXT "ҏW̃t@C",IDC_STATIC,7,7,61,10 - EDITTEXT IDC_STATIC_DIFF_SRC,7,18,249,23,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL,WS_EX_STATICEDGE -END - -IDD_CTRLCODE DIALOGEX 0, 0, 179, 185 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "Rg[R[h" -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - CONTROL "List1",IDC_LIST_CTRLCODE,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_NOLABELWRAP | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,2,2,175,162 - DEFPUSHBUTTON "&OK",IDOK,19,168,50,14 - PUSHBUTTON "LZ(&X)",IDCANCEL,73,168,50,14 - PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,127,168,50,14 -END - -IDD_SETCHARSET DIALOGEX 0, 0, 186, 45 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION -CAPTION "R[h̎w" -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - LTEXT "R[hZbg(&C):",IDC_STATIC,5,9,64,10 - COMBOBOX IDC_COMBO_CHARSET,71,7,50,126,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,71,26,25,10 - CONTROL "&BOM",IDC_CHECK_BOM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,96,26,30,10 - DEFPUSHBUTTON "&OK",IDOK,129,7,50,14 - PUSHBUTTON "LZ(&X)",IDCANCEL,129,24,50,14 -END - -IDD_TYPELIST DIALOGEX 0, 0, 187, 280 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "^Cvʐݒꗗ" -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - LTEXT "^CvIĂ(&T):",IDC_STATIC,5,5,111,10 - LISTBOX IDC_LIST_TYPES,5,15,120,258,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - DEFPUSHBUTTON "ݒύX(&S)...",IDOK,130,15,50,14 - PUSHBUTTON "ꎞKp(&R)",IDC_BUTTON_TEMPCHANGE,130,31,50,14 - PUSHBUTTON "LZ(&X)",IDCANCEL,130,50,50,14 - PUSHBUTTON "C|[g(&I)",IDC_BUTTON_IMPORT,130,79,50,14 - PUSHBUTTON "GNX|[g(&E)",IDC_BUTTON_EXPORT,130,95,50,14 - PUSHBUTTON "(&N)",IDC_BUTTON_INITIALIZE,130,111,50,14 - PUSHBUTTON "(&C)",IDC_BUTTON_COPY_TYPE,130,127,50,14 - PUSHBUTTON "(&U)",IDC_BUTTON_UP_TYPE,130,143,50,14 - PUSHBUTTON "(&O)",IDC_BUTTON_DOWN_TYPE,130,159,50,14 - PUSHBUTTON "lj(&A)",IDC_BUTTON_ADD_TYPE,130,175,50,14 - PUSHBUTTON "폜(&D)",IDC_BUTTON_DEL_TYPE,130,191,50,14 - CONTROL "ENbNj[ɒlj",IDC_CHECK_EXT_RMENU,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_DISABLED | WS_TABSTOP,130,207,50,28 - CONTROL "_uNbNŊJ",IDC_CHECK_EXT_DBLCLICK,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_DISABLED | WS_TABSTOP,130,231,50,28 - PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,130,262,50,14 -END - -IDD_TYPE_ASCERTAIN DIALOGEX 0, 0, 187, 100 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "C|[gmF" -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - LTEXT "Ǎ:",IDC_STATIC,7,7,33,10 - CONTROL "VKlj(&A)",IDC_RADIO_TYPE_ADD,"Button",BS_AUTORADIOBUTTON,36,7,45,10 - CONTROL "{",IDC_RADIO_TYPE_TO,"Button",BS_AUTORADIOBUTTON,86,7,135,10 - LTEXT "V^Cv:",IDC_STATIC,7,27,33,10 - LTEXT "{",IDC_STATIC_TYPE_FILE,45,27,135,16 - LTEXT "FI(&C)",IDC_STATIC,7,47,35,10 - COMBOBOX IDC_COMBO_COLORS,44,45,100,250,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "LŃC|[g܂B낵łH",IDC_STATIC_MSG,26,64,154,10 - DEFPUSHBUTTON "&OK",IDOK,26,79,50,14 - PUSHBUTTON "LZ(&X)",IDCANCEL,78,79,50,14 - PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,130,79,50,14 -END - -IDD_PROP_SCREEN DIALOGEX 0, 0, 302, 244 -STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - LTEXT "ݒ̖O(&N)",IDC_STATIC,5,6,49,10 - EDITTEXT IDC_EDIT_TYPENAME,55,4,59,12,ES_AUTOHSCROLL - LTEXT "t@Cgq(&X)",IDC_STATIC,124,6,58,10 - EDITTEXT IDC_EDIT_TYPEEXTS,184,4,113,12,ES_AUTOHSCROLL - RTEXT "܂Ԃ@(&<)",IDC_STATIC,8,34,56,10,NOT WS_GROUP - COMBOBOX IDC_COMBO_WRAPMETHOD,70,32,72,78,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - RTEXT "܂Ԃ(&R)",IDC_STATIC,8,49,56,10,NOT WS_GROUP - EDITTEXT IDC_EDIT_MAXLINELEN,70,48,40,12 - CONTROL "Spin1",IDC_SPIN_MAXLINELEN,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,117,48,9,12,WS_EX_TRANSPARENT - RTEXT "̊Ԋu(&C)",IDC_STATIC,8,63,56,10,NOT WS_GROUP - EDITTEXT IDC_EDIT_CHARSPACE,70,62,40,12 - CONTROL "Spin1",IDC_SPIN_CHARSPACE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,117,62,9,12,WS_EX_TRANSPARENT - LTEXT "hbg",IDC_STATIC,114,63,18,10 - RTEXT "s̊Ԋu(&L)",IDC_STATIC,8,77,56,10,NOT WS_GROUP - EDITTEXT IDC_EDIT_LINESPACE,70,76,40,12,ES_AUTOHSCROLL - CONTROL "Spin3",IDC_SPIN_LINESPACE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,117,76,9,12 - LTEXT "hbg",IDC_STATIC,114,77,18,10 - RTEXT "TAB(&T)",IDC_STATIC,8,91,56,10,NOT WS_GROUP - EDITTEXT IDC_EDIT_TABSPACE,70,90,40,12,ES_AUTOHSCROLL - CONTROL "Spin3",IDC_SPIN_TABSPACE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,117,90,7,12 - LTEXT "T&AB\",IDC_STATIC,16,104,56,10,NOT WS_GROUP - COMBOBOX IDC_CHECK_TAB_ARROW,48,104,46,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - EDITTEXT IDC_EDIT_TABVIEWSTRING,102,104,40,12,ES_AUTOHSCROLL - CONTROL "S&PACȆ}",IDC_CHECK_INS_SPACE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,123,57,10 - COMBOBOX IDC_COMBO_TSV_MODE,16,121,46,40,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - GROUPBOX "CAEg",IDC_STATIC,3,22,145,117 - CONTROL "Cfg(&U)",IDC_CHECK_INDENT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,154,72,10 - CONTROL "Sp󔒂(&Z)",IDC_CHECK_INDENT_WSPACE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,83,154,61,10 - LTEXT "X}[gCfg(&S)",IDC_STATIC,8,169,68,10 - COMBOBOX IDC_COMBO_SMARTINDENT,82,167,60,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "̑̃CfgΏە(&I)",IDC_STATIC,8,183,120,10 - EDITTEXT IDC_EDIT_INDENTCHARS,38,195,103,12,ES_AUTOHSCROLL - LTEXT "܂ԂsCfg(&2)",IDC_STATIC,8,211,75,10 - COMBOBOX IDC_COMBO_INDENTLAYOUT,87,209,54,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "sɖ̋󔒂폜(&E)",IDC_CHECK_RTRIM_PREVLINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,224,113,10 - GROUPBOX "Cfg",IDC_STATIC,3,143,145,97 - CONTROL "W[(&B)",IDC_RADIO_OUTLINEDEFAULT,"Button",BS_AUTORADIOBUTTON | WS_GROUP,162,33,82,10 - COMBOBOX IDC_COMBO_OUTLINES,173,46,81,85,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "[t@C(&D)",IDC_RADIO_OUTLINERULEFILE,"Button",BS_AUTORADIOBUTTON,162,63,69,10 - EDITTEXT IDC_EDIT_OUTLINERULEFILE,173,74,92,14,ES_AUTOHSCROLL - PUSHBUTTON "(&1)...",IDC_BUTTON_RULEFILE_REF,268,74,20,14 - GROUPBOX "AEgC͕@",IDC_STATIC,153,22,145,71 - CONTROL "gp(&G)",IDC_CHECK_USETYPEFONT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,108,48,10 - LTEXT "Font(nnpt)",IDC_STATIC_TYPEFONT,210,105,85,16,SS_CENTERIMAGE - PUSHBUTTON "tHg(&F)...",IDC_BUTTON_TYPEFONT,173,121,80,14 - GROUPBOX "^CvʃtHg",IDC_STATIC,153,97,145,42 - CONTROL "p[hbv(&W)",IDC_CHECK_WORDWRAP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,154,78,10 - CONTROL "sԂ牺(&^)",IDC_CHECK_KINSOKURET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,168,100,10 - CONTROL "Ԃ牺B(&-)",IDC_CHECK_KINSOKUHIDE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,172,182,100,10 - CONTROL "Ǔ_Ԃ牺(&\\)",IDC_CHECK_KINSOKUKUTO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,196,95,10 - EDITTEXT IDC_EDIT_KINSOKUKUTO,258,195,30,12,ES_AUTOHSCROLL - CONTROL "s֑(&[)",IDC_CHECK_KINSOKUHEAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,210,54,10 - EDITTEXT IDC_EDIT_KINSOKUHEAD,218,209,70,12,ES_AUTOHSCROLL - CONTROL "s֑(&])",IDC_CHECK_KINSOKUTAIL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,224,54,10 - EDITTEXT IDC_EDIT_KINSOKUTAIL,218,223,70,12,ES_AUTOHSCROLL - GROUPBOX "֑",IDC_STATIC,153,143,145,97 -END - -IDD_PROP_COLOR DIALOGEX 0, 0, 302, 244 -STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - GROUPBOX "Fw(&L)",IDC_STATIC,3,6,148,204,WS_GROUP - LISTBOX IDC_LIST_COLORS,6,18,142,148,LBS_OWNERDRAWFIXED | WS_VSCROLL | WS_GROUP | WS_TABSTOP - CONTROL "F/\(&D)",IDC_CHECK_DISP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,165,65,10 - CONTROL "(&B)",IDC_CHECK_BOLD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,165,36,10 - CONTROL "(&U)",IDC_CHECK_UNDERLINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,112,165,36,10 - LTEXT "F(C)",IDC_STATIC_MOZI,16,181,34,10 - CONTROL "&C",IDC_BUTTON_TEXTCOLOR,"Button",BS_OWNERDRAW | WS_TABSTOP,54,178,25,14 - PUSHBUTTON "F(&<)...",IDC_BUTTON_SAMETEXTCOLOR,84,178,58,14 - LTEXT "wiF(K)",IDC_STATIC_HAIKEI,16,196,33,10,NOT WS_GROUP - CONTROL "&K",IDC_BUTTON_BACKCOLOR,"Button",BS_OWNERDRAW | WS_TABSTOP,54,193,25,14 - PUSHBUTTON "wiF(&>)...",IDC_BUTTON_SAMEBKCOLOR,84,193,58,14 - PUSHBUTTON "C|[g(&I)...",IDC_BUTTON_IMPORT,25,215,60,14,WS_GROUP - PUSHBUTTON "GNX|[g(&X)...",IDC_BUTTON_EXPORT,88,215,60,14 - LTEXT "L[[h&1",IDC_STATIC,162,18,54,10 - COMBOBOX IDC_COMBO_SET,218,16,75,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "&2`10...",IDC_BUTTON_KEYWORD_SELECT,218,32,75,14 - PUSHBUTTON "ʐݒ(&C)...",IDC_BUTTON_EDITKEYWORD,218,47,75,14 - GROUPBOX "L[[h",IDC_STATIC,156,6,142,60,WS_GROUP - LTEXT "ubN^(&F)",IDC_STATIC,164,80,42,10 - EDITTEXT IDC_EDIT_BLOCKCOMMENT_FROM,211,78,27,12,ES_AUTOHSCROLL - LTEXT "`(&T)",IDC_STATIC,245,80,18,10,NOT WS_GROUP - EDITTEXT IDC_EDIT_BLOCKCOMMENT_TO,267,78,26,12,ES_AUTOHSCROLL - LTEXT "ubN^(&A)",IDC_STATIC,164,94,42,10 - EDITTEXT IDC_EDIT_BLOCKCOMMENT_FROM2,211,92,27,12,ES_AUTOHSCROLL - LTEXT "`(&Z)",IDC_STATIC,245,94,18,10,NOT WS_GROUP - EDITTEXT IDC_EDIT_BLOCKCOMMENT_TO2,267,92,26,12,ES_AUTOHSCROLL - LTEXT "s^(&M)",IDC_STATIC,164,110,27,10 - EDITTEXT IDC_EDIT_LINECOMMENT,195,108,24,12,ES_AUTOHSCROLL - CONTROL "(&P)",IDC_CHECK_LCPOS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,223,109,33,10 - RTEXT "&@",IDC_LABEL_LCPOS,256,110,8,10 - EDITTEXT IDC_EDIT_LINECOMMENTPOS,267,108,26,12,ES_AUTOHSCROLL - CONTROL "",IDC_SPIN_LCColNum,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,295,108,6,12 - LTEXT "s^(&E)",IDC_STATIC,164,124,25,10 - EDITTEXT IDC_EDIT_LINECOMMENT2,195,122,24,12,ES_AUTOHSCROLL - CONTROL "(&O)",IDC_CHECK_LCPOS2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,223,123,34,10 - RTEXT "&[",IDC_LABEL_LCPOS2,256,124,8,10 - EDITTEXT IDC_EDIT_LINECOMMENTPOS2,267,122,26,12,ES_AUTOHSCROLL - CONTROL "",IDC_SPIN_LCColNum2,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,295,122,6,12 - LTEXT "s^(&G)",IDC_STATIC,164,138,26,10 - EDITTEXT IDC_EDIT_LINECOMMENT3,195,136,24,12,ES_AUTOHSCROLL - CONTROL "(&J)",IDC_CHECK_LCPOS3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,223,137,33,10 - RTEXT "&]",IDC_LABEL_LCPOS3,256,138,8,10 - EDITTEXT IDC_EDIT_LINECOMMENTPOS3,267,136,26,12,ES_AUTOHSCROLL - CONTROL "",IDC_SPIN_LCColNum3,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,295,136,6,12 - GROUPBOX "RgX^C",IDC_STATIC,156,68,142,85,WS_GROUP - GROUPBOX "GXP[v(&Q)",IDC_STATIC,156,164,142,46,WS_GROUP - COMBOBOX IDC_COMBO_STRINGLITERAL,160,178,68,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "ŝ(&\\)",IDC_CHECK_STRINGLINEONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,233,178,64,10 - CONTROL "IȂꍇs܂ŐF(&N)",IDC_CHECK_STRINGENDLINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,196,136,10 - LTEXT "cw(&3)",IDC_STATIC,164,218,46,10 - EDITTEXT IDC_EDIT_VERTLINE,210,216,74,12,ES_AUTOHSCROLL - LTEXT "*܂Step(Begin, End)ŃR}؂",IDC_STATIC,165,230,142,10 -END - -IDD_PROP_SUPPORT DIALOGEX 0, 0, 302, 244 -STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - LTEXT "Pt@C(&W)",IDC_STATIC,8,17,53,10,NOT WS_GROUP - EDITTEXT IDC_EDIT_HOKANFILE,63,15,150,12,ES_AUTOHSCROLL | WS_GROUP - PUSHBUTTON "(&1)...",IDC_BUTTON_HOKANFILE_REF,215,14,19,14 - COMBOBOX IDC_COMBO_HOKAN_TYPE,236,15,58,57,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "p啶𓯈ꎋ(&I)",IDC_CHECK_HOKANLOHICASE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,31,110,10 - LTEXT "F",IDC_STATIC,122,33,20,10,NOT WS_GROUP - CONTROL "ҏW̃t@C(&F)",IDC_CHECK_HOKANBYFILE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,142,31,75,10 - CONTROL "L[[h(&K)",IDC_CHECK_HOKANBYKEYWORD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,217,31,75,10 - GROUPBOX "͕⊮@\",IDC_STATIC,3,3,295,45,WS_GROUP - GROUPBOX "Owv̐ݒ(&L)",IDC_STATIC,3,55,295,32,WS_GROUP - EDITTEXT IDC_EDIT_TYPEEXTHELP,8,68,264,12,ES_AUTOHSCROLL | WS_GROUP - PUSHBUTTON "(&2)...",IDC_BUTTON_TYPEOPENHELP,275,67,19,14 - GROUPBOX "OHTMLwv̐ݒ(&P)",IDC_STATIC,3,95,295,45,WS_GROUP - EDITTEXT IDC_EDIT_TYPEEXTHTMLHELP,8,109,264,12,ES_AUTOHSCROLL | WS_GROUP - PUSHBUTTON "(&3)...",IDC_BUTTON_TYPEOPENEXTHTMLHELP,275,107,19,14 - CONTROL "r[A𕡐NȂ(&N)",IDC_CHECK_TYPEHTMLHELPISSINGLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,125,109,10 - CONTROL "ۑɉsR[h݂̍x(&E)",IDC_CHECK_CHKENTERATEND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,145,146,10 - CONTROL "𖳎(&S)",IDC_CHECK_INDENTCPPSTR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,171,146,10 - CONTROL "Rg𖳎(&C)",IDC_CHECK_INDENTCPPCMT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,158,171,130,10 - CONTROL "Undoobt@𕪂(&U)",IDC_CHECK_INDENTCPPUNDO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,183,146,10 - GROUPBOX "C/C++Cfgڍאݒ",IDC_STATIC,3,159,295,40,WS_GROUP -END - -IDD_PROP_REGEX DIALOGEX 0, 0, 302, 244 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - CONTROL "K\L[[hgp(&R)",IDC_CHECK_REGEX,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,5,5,124,10 - RTEXT "BREGONIG.DLL Version",IDC_LABEL_REGEX_VERSION,89,15,208,11,NOT WS_GROUP,WS_EX_TRANSPARENT - GROUPBOX "K\L[[h(&K)",IDC_FRAME_REGEX,3,24,295,169 - CONTROL "List5",IDC_LIST_REGEX,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOLABELWRAP | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,8,36,243,115 - LTEXT "K\(&N)",IDC_LABEL_REGEX_KEYWORD,13,157,41,10,NOT WS_GROUP - EDITTEXT IDC_EDIT_REGEX,59,155,192,14,ES_AUTOHSCROLL - LTEXT "Fw(&C)",IDC_LABEL_REGEX_COLOR,20,174,34,10,NOT WS_GROUP - COMBOBOX IDC_COMBO_REGEX_COLOR,59,172,128,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "}(&S)",IDC_BUTTON_REGEX_INS,255,118,38,15 - PUSHBUTTON "lj(&A)",IDC_BUTTON_REGEX_ADD,255,136,38,15 - PUSHBUTTON "XV(&E)",IDC_BUTTON_REGEX_UPD,255,154,38,15 - PUSHBUTTON "폜(&D)",IDC_BUTTON_REGEX_DEL,255,172,38,15 - PUSHBUTTON "擪(&T)",IDC_BUTTON_REGEX_TOP,255,36,38,15 - PUSHBUTTON "(&U)",IDC_BUTTON_REGEX_UP,255,54,38,15 - PUSHBUTTON "(&G)",IDC_BUTTON_REGEX_DOWN,255,72,38,15 - PUSHBUTTON "ŏI(&B)",IDC_BUTTON_REGEX_LAST,255,90,38,15 - PUSHBUTTON "C|[g(&I)...",IDC_BUTTON_REGEX_IMPORT,173,196,60,14,WS_GROUP - PUSHBUTTON "GNX|[g(&X)...",IDC_BUTTON_REGEX_EXPORT,236,196,60,14 - LTEXT "[Fw]ŁuURLvIƃ}b`񂪃NbJuɂȂ܂",IDC_STATIC,14,195,138,20 -END - -IDD_PROP_KEYHELP DIALOGEX 0, 0, 302, 244 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - CONTROL "L[[hwv@\g(&K)",IDC_CHECK_KEYHELP,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,5,6,114,10 - GROUPBOX "t@Cꗗ(&L)",IDC_FRAME_KEYHELP,3,21,295,174 - CONTROL "List5",IDC_LIST_KEYHELP,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOLABELWRAP | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,8,33,238,118 - LTEXT "<̐>",IDC_LABEL_KEYHELP_TITLE,10,159,50,10,NOT WS_GROUP - LTEXT "t@C̊Tv",IDC_LABEL_KEYHELP_ABOUT,61,159,185,10,NOT WS_GROUP,WS_EX_TRANSPARENT - LTEXT "t@C",IDC_LABEL_KEYHELP_KEYWORD,13,173,41,10,NOT WS_GROUP - EDITTEXT IDC_EDIT_KEYHELP,61,172,170,12,ES_AUTOHSCROLL - PUSHBUTTON "...",IDC_BUTTON_KEYHELP_REF,234,172,12,13,WS_GROUP - LTEXT "Dx()",IDC_LABEL_KEYHELP_PRIOR,249,33,44,10,NOT WS_GROUP - PUSHBUTTON "}(&S)",IDC_BUTTON_KEYHELP_INS,251,136,38,15 - PUSHBUTTON "XV(&E)",IDC_BUTTON_KEYHELP_UPD,251,154,38,15 - PUSHBUTTON "폜(&D)",IDC_BUTTON_KEYHELP_DEL,251,172,38,15 - PUSHBUTTON "擪(&T)",IDC_BUTTON_KEYHELP_TOP,251,44,38,15 - PUSHBUTTON "(&U)",IDC_BUTTON_KEYHELP_UP,251,62,38,15 - PUSHBUTTON "(&G)",IDC_BUTTON_KEYHELP_DOWN,251,80,38,15 - PUSHBUTTON "ŏI(&B)",IDC_BUTTON_KEYHELP_LAST,251,98,38,15 - PUSHBUTTON "C|[g(&I)...",IDC_BUTTON_KEYHELP_IMPORT,173,199,60,14,WS_GROUP - PUSHBUTTON "GNX|[g(&X)...",IDC_BUTTON_KEYHELP_EXPORT,236,199,60,14 - CONTROL "qbg̎(&A)",IDC_CHECK_KEYHELP_ALLSEARCH,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,7,200,105,10 - CONTROL "L[[h\(&W)",IDC_CHECK_KEYHELP_KEYDISP,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,7,212,95,10 - CONTROL "I͈͂őOv(&P)",IDC_CHECK_KEYHELP_PREFIX,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,7,224,108,10 - LTEXT "ENbNj[(&R)",IDC_STATIC_MENU,120,225,70,10,NOT WS_GROUP - COMBOBOX IDC_COMBO_MENU,192,223,60,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP -END - -IDD_PROP_WINDOW DIALOGEX 0, 0, 302, 244 -STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - LTEXT "̓[h",IDC_STATIC,5,6,40,10 - LTEXT "sR[h(&E)",IDC_STATIC,8,34,46,10 - COMBOBOX IDC_COMBO_DEFAULT_EOLTYPE,57,32,52,57,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "&BOM",IDC_CHECK_DEFAULT_BOM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,33,30,10 - LTEXT "R[h(&C)",IDC_STATIC,8,49,46,10 - COMBOBOX IDC_COMBO_DEFAULT_CODETYPE,57,48,52,57,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,49,25,10 - CONTROL "ʎCESU-8 D悷(&U)",IDC_CHECK_PRIOR_CESU8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,64,135,10 - GROUPBOX "ftHg̕R[h",IDC_STATIC,3,20,145,62 - LTEXT "ON/OFF(&M)",IDC_STATIC,169,34,55,10 - COMBOBOX IDC_COMBO_IMESWITCH,232,32,61,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "̓[h(&D)",IDC_STATIC,179,50,45,10 - COMBOBOX IDC_COMBO_IMESTATE,232,48,61,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - GROUPBOX "NIME ({͕ϊ)",IDC_STATIC,153,20,145,62 - CONTROL "",IDC_STATIC,"Static",SS_ETCHEDFRAME,5,88,293,1 - LTEXT "EBhE",IDC_STATIC,5,96,36,10 - CONTROL "ACRg(&O)",IDC_CHECK_DOCICON,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,107,86,10 - CONTROL "܂ԂP(&R)",IDC_RADIO_LINENUM_LAYOUT,"Button",BS_AUTORADIOBUTTON | WS_GROUP,8,134,64,10 - CONTROL "sP(&W)",IDC_RADIO_LINENUM_CRLF,"Button",BS_AUTORADIOBUTTON,8,149,64,10 - LTEXT "",IDC_STATIC,18,165,16,10 - EDITTEXT IDC_EDIT_LINENUMWIDTH,41,163,31,12,ES_AUTOHSCROLL - CONTROL "Spin3",IDC_SPIN_LINENUMWIDTH,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,61,163,9,12 - GROUPBOX "sԍ̕\",IDC_STATIC,4,122,70,59,WS_GROUP - CONTROL "Ȃ(&N)",IDC_RADIO_LINETERMTYPE0,"Button",BS_AUTORADIOBUTTON | WS_GROUP,83,134,39,10 - CONTROL "c(&V)",IDC_RADIO_LINETERMTYPE1,"Button",BS_AUTORADIOBUTTON,83,149,41,10 - CONTROL "C(&Y)",IDC_RADIO_LINETERMTYPE2,"Button",BS_AUTORADIOBUTTON,83,164,41,10 - LTEXT "p(&S)",IDC_LABEL_LINETERMCHAR,93,178,26,10 - EDITTEXT IDC_EDIT_LINETERMCHAR,124,177,15,12,ES_AUTOHSCROLL - GROUPBOX "sԍ؂",IDC_STATIC,78,122,70,80 - EDITTEXT IDC_EDIT_BACKIMG_PATH,158,134,122,12,ES_AUTOHSCROLL - PUSHBUTTON "...",IDC_BUTTON_BACKIMG_PATH_SEL,282,134,12,12 - LTEXT "\ʒu",IDC_STATIC,158,150,40,10 - COMBOBOX IDC_COMBO_BACKIMG_POS,158,163,39,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "X",IDC_STATIC,200,165,8,10 - LTEXT "Y",IDC_STATIC,200,180,8,10 - LTEXT "Offset",IDC_STATIC,210,150,25,10 - EDITTEXT IDC_EDIT_BACKIMG_OFFSET_X,210,163,20,12 - EDITTEXT IDC_EDIT_BACKIMG_OFFSET_Y,210,178,20,12 - LTEXT "Repeat",IDC_STATIC,235,150,26,10 - CONTROL "",IDC_CHECK_BACKIMG_REP_X,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,243,164,10,10 - CONTROL "",IDC_CHECK_BACKIMG_REP_Y,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,243,179,10,10 - LTEXT "Scroll",IDC_STATIC,270,150,26,10 - CONTROL "",IDC_CHECK_BACKIMG_SCR_X,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,276,164,10,10 - CONTROL "",IDC_CHECK_BACKIMG_SCR_Y,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,276,179,10,10 - LTEXT "x",IDC_STATIC,158,194,45,10 - CONTROL "",IDC_TRACKBAR_BACKIMG_TRANSPARENCY,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,205,193,60,12 - EDITTEXT IDC_EDIT_BACKIMG_TRANSPARENCY,265,193,28,12 - CONTROL "Spin1",IDC_UPDOWN_BACKIMG_TRANSPARENCY,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,285,193,9,12 - GROUPBOX "wi摜",IDC_STATIC,153,122,145,90 -END - -IDD_DIALOG_KEYWORD_SELECT DIALOGEX 0, 0, 177, 197 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "L[[h̐ݒ" -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - DEFPUSHBUTTON "&OK",IDOK,31,176,50,14 - PUSHBUTTON "LZ(&X)",IDCANCEL,91,176,50,14 - LTEXT "L[[h&1",IDC_STATIC,7,15,54,13 - COMBOBOX IDC_COMBO1,68,13,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "L[[h&2",IDC_STATIC,7,31,54,13 - COMBOBOX IDC_COMBO2,68,29,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "L[[h&3",IDC_STATIC,7,48,54,13 - COMBOBOX IDC_COMBO3,68,45,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "L[[h&4",IDC_STATIC,7,63,54,13 - COMBOBOX IDC_COMBO4,68,61,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "L[[h&5",IDC_STATIC,7,80,54,13 - COMBOBOX IDC_COMBO5,68,77,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "L[[h&6",IDC_STATIC,7,95,54,13 - COMBOBOX IDC_COMBO6,68,93,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "L[[h&7",IDC_STATIC,7,111,54,13 - COMBOBOX IDC_COMBO7,68,109,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "L[[h&8",IDC_STATIC,7,126,54,13 - COMBOBOX IDC_COMBO8,68,125,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "L[[h&9",IDC_STATIC,7,143,54,13 - COMBOBOX IDC_COMBO9,68,141,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "L[[h1&0",IDC_STATIC,7,159,58,13 - COMBOBOX IDC_COMBO10,68,157,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP -END - -IDD_SAMECOLOR DIALOGEX 0, 0, 183, 206 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "F" -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - LTEXT "F",IDC_STATIC,7,13,24,10 - LTEXT "Static",IDC_STATIC_COLOR,35,10,86,14,SS_CENTERIMAGE - LTEXT "ύXΏۂ̐F(&C)IŃ`FbNԂɂĂ",IDC_STATIC,7,29,166,10 - LISTBOX IDC_LIST_COLORS,7,41,114,90,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "S`FbN(&A)",IDC_BUTTON_SELALL,125,70,49,14 - PUSHBUTTON "S(&N)",IDC_BUTTON_SELNOTING,125,89,49,14 - LISTBOX IDC_LIST_ITEMINFO,7,143,114,35,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL - DEFPUSHBUTTON "&OK",IDOK,15,185,49,14 - PUSHBUTTON "LZ(&X)",IDCANCEL,67,185,49,14 - PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,119,185,49,14 -END - -IDD_PROP_GENERAL DIALOGEX 0, 0, 293, 240 -STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - GROUPBOX "J[\",IDC_STATIC,3,3,149,90 - CONTROL "t[J[\(&F)",IDC_CHECK_FREECARET,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,16,120,10 - CONTROL "PPʂňړƂ\nP̗[Ɏ~܂(&B)",IDC_CHECK_STOPS_BOTH_ENDS_WHEN_SEARCH_WORD, - "Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP,8,28,120,20 - CONTROL "iPʂňړƂ\ni̗[Ɏ~܂(&P)",IDC_CHECK_STOPS_BOTH_ENDS_WHEN_SEARCH_PARAGRAPH, - "Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP,8,48,120,20 - CONTROL "}EXNbNł̃ANeBuł\nJ[\ړȂ(&O)",IDC_CHECK_NOMOVE_ACTIVATE_BY_MOUSE, - "Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP,8,68,133,20 - GROUPBOX "J[\`",IDC_STATIC,3,93,149,26,WS_GROUP - CONTROL "&Windows",IDC_RADIO_CARETTYPE0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,8,104,61,10 - CONTROL "MS-&DOS",IDC_RADIO_CARETTYPE1,"Button",BS_AUTORADIOBUTTON,69,104,61,10 - GROUPBOX "^XNgC",IDC_STATIC,3,122,149,68,WS_GROUP - CONTROL "^XNgCg(&T)",IDC_CHECK_USETRAYICON,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,135,81,10 - CONTROL "^XNgCɏ풓(&R)",IDC_CHECK_STAYTASKTRAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,148,104,10 - LTEXT "NbNj[̃V[gJbgL[(&K)",IDC_STATIC,8,161,131,10 - CONTROL "HotKey1",IDC_HOTKEY_TRAYMENU,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,8,172,95,12 - CONTROL "ɕ̕ҏWpEBhE\n‚ƂmF(&U)",IDC_CHECK_CLOSEALLCONFIRM, - "Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP,8,194,124,20 - CONTROL "TNGfB^̑SIŕҏWp\nEBhE‚ƂmF(&V)",IDC_CHECK_EXITCONFIRM, - "Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP,8,214,124,20 - GROUPBOX "XN[",IDC_STATIC,158,3,130,135,WS_GROUP - LTEXT "s(&N)",IDC_STATIC,163,19,29,10,NOT WS_GROUP - EDITTEXT IDC_EDIT_REPEATEDSCROLLLINENUM,196,17,40,12,ES_AUTOHSCROLL | WS_GROUP - CONTROL "Spin3",IDC_SPIN_REPEATEDSCROLLLINENUM,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,236,17,9,12 - CONTROL "炩ɂ(&S)",IDC_CHECK_REPEATEDSCROLLSMOOTH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,163,33,80,10 - LTEXT "gݍ킹ăzC[삵\ny[WXN[(&J)",IDC_STATIC,163,48,110,20,NOT WS_GROUP - COMBOBOX IDC_COMBO_WHEEL_PAGESCROLL,178,72,85,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "gݍ킹ăzC[삵\nXN[(&H)",IDC_STATIC,163,90,111,20,NOT WS_GROUP - COMBOBOX IDC_COMBO_WHEEL_HSCROLL,178,114,85,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "ʃLbVg(&G)",IDC_CHECK_MEMDC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,163,142,96,16 - GROUPBOX "",IDC_STATIC,158,160,130,74,WS_GROUP - LTEXT "t@C̗&MAX",IDC_STATIC,163,172,74,10,NOT WS_GROUP - EDITTEXT IDC_EDIT_MAX_MRU_FILE,168,184,28,12,ES_AUTOHSCROLL | WS_GROUP - CONTROL "Spin1",IDC_SPIN_MAX_MRU_FILE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,196,184,9,12 - PUSHBUTTON "NA(&C)...",IDC_BUTTON_CLEAR_MRU_FILE,208,184,61,14 - LTEXT "tH_̗MA&X",IDC_STATIC,163,202,74,10 - EDITTEXT IDC_EDIT_MAX_MRU_FOLDER,168,214,28,12,ES_AUTOHSCROLL | WS_GROUP - CONTROL "Spin1",IDC_SPIN_MAX_MRU_FOLDER,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,196,214,9,12 - PUSHBUTTON "NA(&L)...",IDC_BUTTON_CLEAR_MRU_FOLDER,208,214,61,14 -END - -IDD_PROP_WIN DIALOGEX 0, 0, 293, 240 -STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - CONTROL "c[o[\(&T)",IDC_CHECK_DispTOOLBAR,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,17,76,10 - CONTROL "t@NVL[\(&K)",IDC_CHECK_DispFUNCKEYWND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,30,96,10 - CONTROL "Xe[^Xo[\(&S)",IDC_CHECK_DispSTATUSBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,43,88,10 - CONTROL "XN[o[(&R)",IDC_CHECK_bScrollBarHorz,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,104,17,89,10 - CONTROL "ACRtj[(&I)",IDC_CHECK_bMenuIcon,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,195,17,87,10 - PUSHBUTTON "ʒuƑ傫̐ݒ(&W)...",IDC_BUTTON_WINSIZE,202,35,83,14 - LTEXT "^uo[\\n[^uo[]^uɂ܂",IDC_STATIC,111,32,83,20 - GROUPBOX "{ݒ",IDC_STATIC,3,3,285,57,WS_GROUP - LTEXT "[[̍(&E)",IDC_STATIC,7,76,58,10 - EDITTEXT IDC_EDIT_nRulerHeight,101,74,28,12,ES_AUTOHSCROLL - CONTROL "Spin1",IDC_SPIN_nRulerHeight,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,124,74,10,12 - LTEXT "hbg",IDC_STATIC,133,76,17,10 - LTEXT "[[ƃeLXǧ(&P)",IDC_STATIC,7,89,91,10 - EDITTEXT IDC_EDIT_nRulerBottomSpace,101,88,28,12,ES_AUTOHSCROLL - CONTROL "Spin1",IDC_SPIN_nRulerBottomSpace,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,124,87,10,12 - LTEXT "hbg",IDC_STATIC,133,89,17,10 - LTEXT "sԍƃeLXǧ(&L)",IDC_STATIC,7,104,86,10 - EDITTEXT IDC_EDIT_nLineNumberRightSpace,101,102,28,12,ES_AUTOHSCROLL - CONTROL "Spin1",IDC_SPIN_nLineNumberRightSpace,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,124,102,10,12 - LTEXT "hbg",IDC_STATIC,133,104,17,10 - GROUPBOX "[[ / sԍ",IDC_STATIC,3,64,153,54 - CONTROL "XN[̓Ƃ(&V)",IDC_CHECK_SplitterWndVScroll,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,134,115,10 - CONTROL "XN[̓Ƃ(&H)",IDC_CHECK_SplitterWndHScroll,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,147,116,10 - GROUPBOX "EBhE",IDC_STATIC,3,122,153,39,WS_GROUP - LTEXT "ʒu",IDC_STATIC,167,76,16,10 - CONTROL "(&O)",IDC_RADIO_FUNCKEYWND_PLACE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,191,76,34,10 - CONTROL "(&B)",IDC_RADIO_FUNCKEYWND_PLACE2,"Button",BS_AUTORADIOBUTTON,227,76,34,10 - LTEXT "O[v{^(&G)",IDC_STATIC,167,89,67,10 - EDITTEXT IDC_EDIT_FUNCKEYWND_GROUPNUM,236,88,28,12,ES_AUTOHSCROLL | ES_NUMBER - CONTROL "Spin1",IDC_SPIN_FUNCKEYWND_GROUPNUM,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,262,88,10,12 - GROUPBOX "t@NVL[",IDC_STATIC,162,64,126,40 - LTEXT "ANeBu(&1)",IDC_STATIC,7,179,59,10 - EDITTEXT IDC_WINCAPTION_ACTIVE,67,176,216,14,ES_AUTOHSCROLL - LTEXT "ANeBu(&2)",IDC_STATIC,7,196,58,10 - EDITTEXT IDC_WINCAPTION_INACTIVE,67,193,216,14,ES_AUTOHSCROLL - GROUPBOX "^Cgo[",IDC_STATIC,3,165,285,47 - GROUPBOX "",IDC_STATIC,162,108,126,40 - COMBOBOX IDC_COMBO_LANGUAGE,178,126,105,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP -END - -IDD_PROP_TOOLBAR DIALOGEX 0, 0, 293, 240 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - RTEXT "(&K)",IDC_LABEL_MENUFUNCKIND,4,4,51,10 - COMBOBOX IDC_COMBO_FUNCKIND,56,2,70,170,CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - LTEXT "@\(&F)",IDC_LABEL_MENUFUNC,3,15,40,10 - LISTBOX IDC_LIST_FUNC,3,25,123,199,LBS_OWNERDRAWFIXED | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - CONTROL "tbgȃ{^(&L)",IDC_CHECK_TOOLBARISFLAT,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,202,2,73,10 - LTEXT "c[o[(&T)",IDC_LABEL_TOOLBAR,164,15,46,10 - LISTBOX IDC_LIST_RES,164,25,123,199,LBS_OWNERDRAWFIXED | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - PUSHBUTTON "폜(&D)",IDC_BUTTON_DELETE,129,32,33,14,WS_GROUP - PUSHBUTTON "---(&S)",IDC_BUTTON_INSERTSEPARATOR,129,51,33,14 - PUSHBUTTON "(&A)",IDC_BUTTON_INSERT,129,71,33,14 - PUSHBUTTON ">>(&B)",IDC_BUTTON_ADD,129,85,33,14 - PUSHBUTTON "(&U)",IDC_BUTTON_UP,129,105,33,14 - PUSHBUTTON "(&O)",IDC_BUTTON_DOWN,129,119,33,14 - PUSHBUTTON "ܕ(&W)",IDC_BUTTON_INSERTWRAP,129,151,33,14 -END - -IDD_PROP_TAB DIALOGEX 0, 0, 293, 240 -STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP | WS_EX_COMPOSITED -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - CONTROL "^uo[\(&D)",IDC_CHECK_DispTabWnd,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,11,111,10 - CONTROL "EBhE܂Ƃ߂ăO[v(&B)",IDC_CHECK_DispTabWndMultiWin, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,40,239,10 - CONTROL "Ō̃t@C‚Ƃ()c(&R)",IDC_CHECK_RetainEmptyWindow, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,24,53,226,10 - CONTROL "EBhE̕‚{^݂͌̃t@Ĉݕ‚(&C)",IDC_CHECK_CloseOneWin, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,24,66,226,10 - CONTROL "ONƂ͐VEChEŊJ(&O)",IDC_CHECK_OpenNewWin,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,24,79,170,10 - GROUPBOX "샂[h",IDC_STATIC,7,27,280,68 - CONTROL "ACR\(&I)",IDC_CHECK_DispTabIcon,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,115,63,10 - CONTROL "(&E)",IDC_CHECK_SameTabWidth,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,80,115,39,10 - LTEXT "‚{^(&X)",IDC_TextTabClose,124,116,48,10 - COMBOBOX IDC_CHECK_DispTabClose,173,113,46,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "tHg(&F)...",IDC_BUTTON_TABFONT,232,113,51,14 - RTEXT "Font",IDC_STATIC_TABFONT,102,127,180,12 - CONTROL "^uꗗ\[g(&S)",IDC_CHECK_SortTabList,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,129,85,10 - CONTROL "i(&M)",IDC_CHECK_TAB_MULTILINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,141,60,10 - RTEXT "\ʒu(&P)",IDC_TAB_POSITION,80,143,40,10 - COMBOBOX IDC_COMBO_TAB_POSITION,124,140,46,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "^Cg(&T)",IDC_TextTabCaption,15,160,40,10 - EDITTEXT IDC_TABWND_CAPTION,56,157,226,14,ES_AUTOHSCROLL - GROUPBOX "^ůO",IDC_STATIC,7,102,280,76,WS_GROUP - CONTROL "}EXzC[Ń^uؑ(&W)",IDC_CHECK_ChgWndByWheel,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,196,127,10 - GROUPBOX "̑",IDC_STATIC,7,184,280,28,WS_GROUP -END - -IDD_PROP_STATUSBAR DIALOGEX 0, 0, 293, 240 -STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - GROUPBOX "\R[h̎w",IDC_STATIC,3,3,285,92 - CONTROL "SJIS, Latin1ŕR[hlUnicodeŕ\(&S)",IDC_CHECK_DISP_UNICODE_IN_SJIS, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,16,205,10 - CONTROL "JISŕR[hlUnicodeŕ\(&J)",IDC_CHECK_DISP_UNICODE_IN_JIS, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,32,205,10 - CONTROL "EUCŕR[hlUnicodeŕ\(&E)",IDC_CHECK_DISP_UNICODE_IN_EUC, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,48,205,10 - CONTROL "UTF-8CESU-8R[h|Cgŕ\(&8)",IDC_CHECK_DISP_UTF8_CODEPOINT, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,64,205,10 - CONTROL "TQ[gyAR[h|Cgŕ\(&P)",IDC_CHECK_DISP_SP_CODEPOINT, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,80,205,10 - GROUPBOX "\̎w",IDC_STATIC,3,98,285,47 - CONTROL "I𕶎𕶎Pʂł͂ȂoCgPʂŕ\(&B)@ׂ̂ߔ񐄏",IDC_CHECK_DISP_SELCOUNT_BY_BYTE, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,112,274,10 - CONTROL "݌[[Pʂł͂ȂPʂŕ\(&C)",IDC_CHECK_DISP_COL_BY_CHAR, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,128,274,10 -END - -IDD_PROP_EDIT DIALOGEX 0, 0, 293, 240 -STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - CONTROL "܂ԂsɉstăRs[(&C)",IDC_CHECK_ADDCRLFWHENCOPY,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,16,131,10 - CONTROL "Rs[I(&R)",IDC_CHECK_COPYnDISABLESELECTEDAREA, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,29,131,10 - CONTROL "IȂŃRs[”\ɂ(&E)",IDC_CHECK_bEnableNoSelectCopy, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,42,131,10 - CONTROL "C[h\t”\ɂ(&L)",IDC_CHECK_bEnableLineModePaste, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,55,131,10 - CONTROL "sR[hϊē\t(&P)",IDC_CHECK_CONVERTEOLPASTE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,68,131,10 - GROUPBOX "Rs[",IDC_STATIC,3,3,137,81,WS_GROUP - CONTROL "hbO && hbvҏW(&D)",IDC_CHECK_DRAGDROP,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,104,131,10 - CONTROL "hbvɂ(&S)",IDC_CHECK_DROPSOURCE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,117,131,10 - GROUPBOX "hbO && hbv",IDC_STATIC,3,91,137,43,WS_GROUP - CONTROL "sR[h͏㏑Ȃ(&N)",IDC_CHECK_bNotOverWriteCRLF,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,156,131,10 - CONTROL "ɍ킹ăXy[Xl߂(&F)",IDC_CHECK_bOverWriteFixMode, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,169,131,10 - CONTROL "`͂őI͈͂폜(&G)",IDC_CHECK_bOverWriteBoxDelete, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,182,131,10 - GROUPBOX "㏑[h",IDC_STATIC,3,143,137,58,WS_GROUP - CONTROL "NbN&URLI",IDC_CHECK_bSelectClickedURL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,149,18,120,10 - GROUPBOX "NbJuURL",IDC_STATIC,144,3,142,35,WS_GROUP - CONTROL "JgtH_(&U)",IDC_RADIO_CURDIR,"Button",BS_AUTORADIOBUTTON,149,54,90,10 - CONTROL "ŋߎgtH_(&M)",IDC_RADIO_MRUDIR,"Button",BS_AUTORADIOBUTTON,149,69,90,10 - CONTROL "wtH_(&F)",IDC_RADIO_SELDIR,"Button",BS_AUTORADIOBUTTON,149,84,90,10 - EDITTEXT IDC_EDIT_FILEOPENDIR,149,100,111,12,ES_AUTOHSCROLL - PUSHBUTTON "...",IDC_BUTTON_FILEOPENDIR,261,100,9,12 - GROUPBOX "t@C_CAȌʒu",IDC_STATIC,144,41,142,79,WS_GROUP - CONTROL "VistaX^C̃t@C_CAO(&I)",IDC_CHECK_VISTA_STYLE_FILEDIALOG, - "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,149,128,137,10 - CONTROL "sR[hNEL, PS, LSLɂ(&O)",IDC_CHECK_ENABLEEXTEOL, - "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,149,158,134,10 - CONTROL "`IړőIbN(&B)",IDC_CHECK_BOXSELECTLOCK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,149,171,134,10 - GROUPBOX "̑",IDC_STATIC,144,145,142,42,WS_GROUP -END - -IDD_PROP_FILE DIALOGEX 0, 0, 293, 240 -STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - LTEXT "r(&H)",IDC_STATIC,8,18,48,10 - COMBOBOX IDC_COMBO_FILESHAREMODE,60,16,84,78,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "XV̊Ď(&W)",IDC_CHECK_bCheckFileTimeStamp,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,33,60,10 - LTEXT "Ǎx(&A)",IDC_LABEL_AUTOLOAD_DELAY,68,33,62,10 - EDITTEXT IDC_EDIT_AUTOLOAD_DELAY,130,33,30,12 - CONTROL "Spin1",IDC_SPIN_AUTOLOAD_DELAY,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,150,33,9,12 - CONTROL "㏑֎~o͕ҏW֎~ɂ(&N)",IDC_CHECK_bUneditableIfUnwritable, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,46,154,10 - GROUPBOX "t@C̔r",IDC_STATIC,3,3,163,57,WS_GROUP - CONTROL "ύXł㏑(&S)",IDC_CHECK_ENABLEUNMODIFIEDOVERWRITE, - "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,175,16,111,10 - CONTROL "Iɕۑ(&U)",IDC_CHECK_AUTOSAVE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,175,31,84,10 - LTEXT "Ԋu(&I)",IDC_LABEL_AUTOSAVE,186,47,31,10,NOT WS_GROUP - EDITTEXT IDC_EDIT_AUTOBACKUP_INTERVAL,219,45,30,12 - CONTROL "Spin1",IDC_SPIN_AUTOBACKUP_INTERVAL,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,266,45,9,12 - LTEXT "",IDC_LABEL_AUTOSAVE2,250,47,21,10,NOT WS_GROUP - GROUPBOX "t@C̕ۑ",IDC_STATIC,170,3,118,57,WS_GROUP - CONTROL "VKۑ͑St@C\(&O)",IDC_CHECK_NoFilterSaveNew,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,77,133,10 - CONTROL "VKȊOۑ͑St@C\(&F)",IDC_CHECK_NoFilterSaveFile, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,142,77,142,10 - GROUPBOX "uOtĕۑvŃt@C̎ނ[[U[w]̂Ƃ̃t@Cꗗ\",IDC_STATIC,3,65,285,28 - CONTROL "t@C̃hbv́u‚ĊJvɂ(&L)",IDC_CHECK_bDropFileAndClose, - "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,110,149,10 - LTEXT "t@C̃hbv͈x&MAX",IDC_LABEL_AUTOSAVE3,18,126,101,10,NOT WS_GROUP - EDITTEXT IDC_EDIT_nDropFileNumMax,123,124,25,12,ES_AUTOHSCROLL - CONTROL "Spin1",IDC_SPIN_nDropFileNumMax,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,179,124,9,12 - LTEXT "‚܂łƂ",IDC_LABEL_AUTOSAVE4,151,126,41,10,NOT WS_GROUP - LTEXT "Fhbvt@C1‚̂ݗL",IDC_LANEL_NOTE,161,111,116,10 - CONTROL "t@CJƂɃJ[\ʒu𕜌(&C)",IDC_CHECK_RestoreCurPosition, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,140,174,10 - CONTROL "t@CJƂɃubN}[N𕜌(&B)",IDC_CHECK_RestoreBookmarks, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,155,214,10 - CONTROL "t@CJƂMIMEGR[hꂽwb_fR[h(&D)",IDC_CHECK_AutoMIMEDecode, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,169,231,10 - CONTROL "OƈقȂ镶R[ĥƂ₢킹s(&Q)",IDC_CHECK_QueryIfCodeChange, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,182,223,13 - CONTROL "JƂt@C݂ȂƂx(&E)",IDC_CHECK_AlertIfFileNotExist, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,198,223,10 - CONTROL "JƂt@C傫ꍇɌx(&T)",IDC_CHECK_ALERT_IF_LARGEFILE, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,214,167,10 - EDITTEXT IDC_EDIT_ALERT_FILESIZE,181,212,30,12,ES_AUTOHSCROLL - CONTROL "Spin1",IDC_SPIN_ALERT_FILESIZE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,240,211,9,14 - LTEXT "MB",IDC_STATIC,214,214,25,10 - GROUPBOX "t@CI[v",IDC_STATIC,3,97,285,135,WS_GROUP -END - -IDD_PROP_FNAME DIALOGEX 0, 0, 293, 240 -STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - CONTROL "pX̏ȗ\(&L)",IDC_CHECK_SHORTPATH,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,6,3,100,10 - LTEXT "(&N)",IDC_STATIC,109,4,45,10 - EDITTEXT IDC_EDIT_SHORTMAXWIDTH,155,3,30,13,ES_NUMBER - GROUPBOX "t@C̊ȈՕ\(&I)",IDC_STATIC,6,20,282,180 - CONTROL "List1",IDC_LIST_FNAME,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_AUTOARRANGE | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,12,35,230,117 - LTEXT "uO(&F)",IDC_STATIC,13,161,37,10 - EDITTEXT IDC_EDIT_FNAME_FROM,50,160,191,13,ES_AUTOHSCROLL - LTEXT "u(&R)",IDC_STATIC,13,180,37,10 - EDITTEXT IDC_EDIT_FNAME_TO,50,177,191,13,ES_AUTOHSCROLL - PUSHBUTTON "}(&S)",IDC_BUTTON_FNAME_INS,245,123,38,15 - PUSHBUTTON "lj(&A)",IDC_BUTTON_FNAME_ADD,245,141,38,15 - PUSHBUTTON "XV(&E)",IDC_BUTTON_FNAME_UPD,245,159,38,15 - PUSHBUTTON "폜(&D)",IDC_BUTTON_FNAME_DEL,245,177,38,15 - PUSHBUTTON "擪(&T)",IDC_BUTTON_FNAME_TOP,245,43,38,15 - PUSHBUTTON "(&U)",IDC_BUTTON_FNAME_UP,245,61,38,15 - PUSHBUTTON "(&G)",IDC_BUTTON_FNAME_DOWN,245,79,38,15 - PUSHBUTTON "ŏI(&B)",IDC_BUTTON_FNAME_LAST,245,97,38,15 -END - -IDD_PROP_BACKUP DIALOGEX 0, 0, 293, 240 -STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - GROUPBOX "obNAbv̍쐬",IDC_STATIC,3,3,285,207,WS_GROUP - CONTROL "ۑɃobNAbv쐬(&K)",IDC_CHECK_BACKUP,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,16,136,10 - CONTROL "ڍאݒ肷(&A)",IDC_CHECK_BACKUP_ADVANCED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,32,79,10 - EDITTEXT IDC_EDIT_BACKUPFILE,24,44,255,13,ES_AUTOHSCROLL - CONTROL "gq .bakɕύX(1 &B)",IDC_RADIO_BACKUP_TYPE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,12,66,142,10 - CONTROL "gqA(.b00`b98)ɕύX(&G)",IDC_RADIO_BACKUP_TYPE3, - "Button",BS_AUTORADIOBUTTON,12,80,156,10 - CONTROL "t@Čɕۑ̓tEt(&E)",IDC_RADIO_BACKUP_DATETYPE1, - "Button",BS_AUTORADIOBUTTON,12,106,204,10 - CONTROL "t@ČɑO̕ۑ̓tEt(&U)",IDC_RADIO_BACKUP_DATETYPE2, - "Button",BS_AUTORADIOBUTTON,12,120,230,10 - CONTROL "̊gqۑ(&R)",IDC_CHECK_BACKUP_RETAINEXT,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,162,66,96,10 - LTEXT "ۑ鐢㐔(1-99 &N)",IDC_LABEL_BACKUP_3,22,94,91,10 - EDITTEXT IDC_EDIT_BACKUP_3,106,92,28,12 - CONTROL "Spin1",IDC_SPIN_BACKUP_GENS,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,154,92,9,12 - CONTROL "(&Y)",IDC_CHECK_BACKUP_YEAR,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,22,132,35,10 - CONTROL "(&M)",IDC_CHECK_BACKUP_MONTH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,132,34,10 - CONTROL "(&D)",IDC_CHECK_BACKUP_DAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,97,132,34,10 - CONTROL "(&H)",IDC_CHECK_BACKUP_HOUR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,134,132,34,10 - CONTROL "(&I)",IDC_CHECK_BACKUP_MIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,171,132,31,10 - CONTROL "b(&S)",IDC_CHECK_BACKUP_SEC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,132,33,10 - LTEXT "",IDC_STATIC,12,60,271,83,NOT WS_VISIBLE - CONTROL "ۑ̓tEgp",IDC_RADIO_BACKUP_DATETYPE1A,"Button",BS_AUTORADIOBUTTON | WS_GROUP,12,104,111,10 - CONTROL "Õt@CXV̓tEgp",IDC_RADIO_BACKUP_DATETYPE2A,"Button",BS_AUTORADIOBUTTON,12,118,149,10 - LTEXT "$x : x̃tH_(0-9)\r* : gq\r\r%Y/%m/%d : N %y(2) \r%H:%M:%S: b \r%% : '%'L\r",IDC_LABEL_BACKUP_HELP2,165,75,115,50,SS_SUNKEN - CONTROL "wtH_ɍ쐬(&P)",IDC_CHECK_BACKUPFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,148,107,10 - CONTROL "[oufBÂ(&L)",IDC_CHECK_BACKUP_FOLDER_RM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,120,148,133,10 - LTEXT "tH_(&F)",IDC_LABEL_BACKUP_4,24,162,87,10 - EDITTEXT IDC_EDIT_BACKUPFOLDER,73,160,195,12,ES_AUTOHSCROLL - PUSHBUTTON "&...",IDC_BUTTON_BACKUP_FOLDER_REF,271,160,9,12 - CONTROL "obNAbvt@Cݔɕ荞(&X)",IDC_CHECK_BACKUP_DUSTBOX, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,176,150,10 - CONTROL "쐬OɊmF(&V)",IDC_CHECK_BACKUPDIALOG,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,12,196,104,10 -END - -IDD_PROP_FORMAT DIALOGEX 0, 0, 293, 240 -STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - CONTROL "W(&S)",IDC_RADIO_DFORM_0,"Button",BS_AUTORADIOBUTTON | WS_GROUP,8,18,41,10 - CONTROL "JX^(&C)",IDC_RADIO_DFORM_1,"Button",BS_AUTORADIOBUTTON,51,18,52,10 - LTEXT "&D:",IDC_LABEL_DFORM,106,19,8,10 - EDITTEXT IDC_EDIT_DFORM,115,17,82,12,ES_AUTOHSCROLL - GROUPBOX "t",IDC_STATIC,3,3,199,35,WS_GROUP - LTEXT "\",IDC_STATIC,209,7,27,10,NOT WS_GROUP - EDITTEXT IDC_EDIT_DFORM_EX,209,17,77,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_TABSTOP - CONTROL "W(&N)",IDC_RADIO_TFORM_0,"Button",BS_AUTORADIOBUTTON | WS_GROUP,8,58,41,10 - CONTROL "JX^(&U)",IDC_RADIO_TFORM_1,"Button",BS_AUTORADIOBUTTON,51,58,52,10 - LTEXT "&T:",IDC_LABEL_TFORM,106,59,8,10 - EDITTEXT IDC_EDIT_TFORM,115,57,82,12,ES_AUTOHSCROLL - GROUPBOX "",IDC_STATIC,3,43,199,35,WS_GROUP - LTEXT "\",IDC_STATIC,209,47,27,10,NOT WS_GROUP - EDITTEXT IDC_EDIT_TFORM_EX,209,57,77,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_TABSTOP - GROUPBOX "oL(&R)",IDC_STATIC,3,83,283,52,WS_GROUP - EDITTEXT IDC_EDIT_MIDASHIKIGOU,8,95,272,31,ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | WS_GROUP - GROUPBOX "p(&Q)",IDC_STATIC,3,140,283,32,WS_GROUP - EDITTEXT IDC_EDIT_INYOUKIGOU,8,152,270,12,ES_AUTOHSCROLL | WS_GROUP -END - -IDD_PROP_GREP DIALOGEX 0, 0, 293, 240 -STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - CONTROL "J[\ʒu̕ftHǧɂ(&C)",IDC_CHECK_bCaretTextForSearch, - "Button",BS_AUTOCHECKBOX | BS_TOP | WS_GROUP | WS_TABSTOP,8,21,204,12 - CONTROL "EOő̃r[ł̌ύXp(&I)",IDC_CHECK_INHERIT_KEY_OTHER_VIEW, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,33,209,12 - LTEXT "K\Cuw(&L)",IDC_LABEL_REGEXP,8,50,93,10 - LTEXT "",IDC_LABEL_REGEXP_VER,8,62,275,14 - EDITTEXT IDC_EDIT_REGEXPLIB,110,47,162,13,ES_AUTOHSCROLL - GROUPBOX "^u^Grep",IDC_STATIC,3,7,285,70,WS_GROUP - CONTROL "Grep[hŕۑmF(&V)",IDC_CHECK_bGrepExitConfirm,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,94,130,10 - CONTROL "A^Cŕ\(&R)",IDC_CHECK_GREPREALTIME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,106,111,10 - GROUPBOX "Grep",IDC_STATIC,3,80,285,42,WS_GROUP - CONTROL "G^[L[Ń^OWv(&E)",IDC_CHECK_GTJW_RETURN,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,142,109,10 - CONTROL "_uNbNŃ^OWv(&W)",IDC_CHECK_GTJW_LDBLCLK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,154,115,10 - GROUPBOX "Grepʂ̃^OWv",IDC_STATIC,3,127,285,46,WS_GROUP - GROUPBOX "^OWv",IDC_STATIC,3,178,285,52,WS_GROUP - LTEXT "^Ot@Č(&T):",IDC_STATIC,8,192,112,10 - COMBOBOX IDC_COMBO_TAGJUMP,124,190,156,100,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - LTEXT "L[[hw̃^Ot@C(&K):",IDC_STATIC,8,210,112,10 - COMBOBOX IDC_COMBO_KEYWORD_TAGJUMP,124,208,156,100,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP -END - -IDD_PROP_KEYBIND DIALOGEX 0, 0, 293, 240 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP | WS_EX_COMPOSITED -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - RTEXT "(&K)",IDC_LABEL_MENUFUNCKIND,4,4,51,10 - COMBOBOX IDC_COMBO_FUNCKIND,60,2,68,180,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - LTEXT "@\(&F)",IDC_LABEL_MENUFUNC,3,18,41,10 - LISTBOX IDC_LIST_FUNC,3,28,124,143,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - LTEXT "@\Ɋ蓖ĂĂL[(&G)",IDC_LABEL_FUNCtoKEY,6,173,113,10,NOT WS_GROUP - LISTBOX IDC_LIST_ASSIGNEDKEYS,3,184,124,33,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_GROUP | WS_TABSTOP - PUSHBUTTON "C|[g(&I)...",IDC_BUTTON_IMPORT,171,2,58,14,WS_GROUP - PUSHBUTTON "GNX|[g(&X)...",IDC_BUTTON_EXPORT,231,2,58,14 - LTEXT "L[(&Y)",IDC_LABEL_KEYKIND,164,18,25,10 - LISTBOX IDC_LIST_KEY,165,28,124,164,LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP - CONTROL "&Shift",IDC_CHECK_SHIFT,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,134,38,25,10 - CONTROL "&Ctrl",IDC_CHECK_CTRL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,134,53,25,10 - CONTROL "A&Lt",IDC_CHECK_ALT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,134,68,25,10 - LTEXT "L[Ɋ蓖ĂĂ@\",IDC_LABEL_KEYtoFUNC,166,194,120,10 - EDITTEXT IDC_EDIT_KEYSFUNC,164,205,118,12,ES_AUTOHSCROLL | ES_READONLY | WS_GROUP | NOT WS_TABSTOP - PUSHBUTTON "t(&B)",IDC_BUTTON_ASSIGN,129,190,34,14,WS_GROUP - PUSHBUTTON "(&R)",IDC_BUTTON_RELEASE,129,204,34,14 -END - -IDD_PROP_CUSTMENU DIALOGEX 0, 0, 293, 240 -STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP | WS_EX_COMPOSITED -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - RTEXT "(&K)",IDC_LABEL_MENUFUNCKIND,4,4,52,10 - COMBOBOX IDC_COMBO_FUNCKIND,60,2,68,180,CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - LTEXT "@\(&F)",IDC_LABEL_MENUFUNC,3,16,40,10,NOT WS_GROUP - LISTBOX IDC_LIST_FUNC,3,27,124,178,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - RTEXT "I(&C)",IDC_LABEL_MENUCHOICE,187,4,31,10 - COMBOBOX IDC_COMBO_MENU,221,2,68,220,CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - LTEXT "j[(&N)",IDC_LABEL_MENUNAME,142,16,64,10,NOT WS_GROUP - EDITTEXT IDC_EDIT_MENUNAME,146,27,109,14,ES_AUTOHSCROLL - PUSHBUTTON "ݒ(&R)",IDC_BUTTON_MENUNAME,258,27,30,14 - LTEXT "j[(&M)",IDC_LABEL_MENU,142,44,37,10,NOT WS_GROUP - LISTBOX IDC_LIST_RES,164,54,123,151,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - PUSHBUTTON "폜(&D)",IDC_BUTTON_DELETE,130,62,30,14,WS_GROUP - PUSHBUTTON "---(&S)",IDC_BUTTON_INSERTSEPARATOR,130,81,30,14,BS_MULTILINE - PUSHBUTTON "(&A)",IDC_BUTTON_INSERT,128,101,34,14 - PUSHBUTTON ">>(&B)",IDC_BUTTON_ADD,128,115,34,14,BS_MULTILINE - PUSHBUTTON "(&U)",IDC_BUTTON_UP,128,135,34,14 - PUSHBUTTON "(&O)",IDC_BUTTON_DOWN,128,149,34,14 - LTEXT "_uNbNŃANZXL[ݒ",IDC_LABEL_MENUKEYCHANGE,174,208,114,10 - CONTROL "Tuj[Ƃĕ\(&S)",IDC_CHECK_SUBMENU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,164,220,114,10 - PUSHBUTTON "C|[g(&I)...",IDC_BUTTON_IMPORT,3,208,58,14,WS_GROUP - PUSHBUTTON "GNX|[g(&X)...",IDC_BUTTON_EXPORT,64,208,58,14 -END - -IDD_PROP_KEYWORD DIALOGEX 0, 0, 293, 240 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - LTEXT "Zbg(&N)",IDC_STATIC,3,6,37,10 - COMBOBOX IDC_COMBO_SET,42,5,85,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "Zbglj(&M)...",IDC_BUTTON_ADDSET,181,5,53,14,WS_GROUP - PUSHBUTTON "Zbg폜(&R)...",IDC_BUTTON_DELSET,236,5,52,14 - GROUPBOX "L[[h(&K)",IDC_STATIC,3,22,285,215,WS_GROUP - CONTROL "List5",IDC_LIST_KEYWORD,"SysListView32",LVS_LIST | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_EDITLABELS | LVS_ALIGNLEFT | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP,8,35,274,165 - PUSHBUTTON "lj(&A)...",IDC_BUTTON_ADDKEYWORD,8,203,40,14,WS_GROUP - PUSHBUTTON "ҏW(&E)...",IDC_BUTTON_EDITKEYWORD,50,203,40,14 - PUSHBUTTON "폜(&D)",IDC_BUTTON_DELKEYWORD,92,203,40,14 - CONTROL "p啶(&C)",IDC_CHECK_KEYWORDCASE,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,221,94,10 - PUSHBUTTON "C|[g(&I)...",IDC_BUTTON_IMPORT,166,220,58,14,WS_GROUP - PUSHBUTTON "GNX|[g(&X)...",IDC_BUTTON_EXPORT,227,220,58,14 - RTEXT "(ő 100 o^ 9999 / 9999 )",IDC_STATIC_KEYWORD_COUNT,135,205,142,10 - PUSHBUTTON "ύX(&H)",IDC_BUTTON_KEYSETRENAME,130,5,40,14 - PUSHBUTTON "(&O)",IDC_BUTTON_KEYCLEAN,104,220,45,14 - PUSHBUTTON "OK",IDOK,182,243,50,14 - PUSHBUTTON "LZ(&X)",IDCANCEL,237,243,50,14 -END - -IDD_PROP_HELPER DIALOGEX 0, 0, 293, 240 -STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - CONTROL "&Enter",IDC_CHECK_m_bHokanKey_RETURN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,59,15,33,10 - CONTROL "&Tab",IDC_CHECK_m_bHokanKey_TAB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,93,15,28,10 - CONTROL "(&R)",IDC_CHECK_m_bHokanKey_RIGHT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,122,15,53,10 - GROUPBOX "͕⊮@\",IDC_STATIC,3,3,285,30,WS_GROUP - LTEXT "⌈L[",IDC_STATIC,7,17,45,10 - GROUPBOX "Owv̐ݒ(&L)",IDC_STATIC,3,37,285,32,WS_GROUP - EDITTEXT IDC_EDIT_EXTHELP1,8,50,253,12,ES_AUTOHSCROLL | WS_GROUP - PUSHBUTTON "(&1)...",IDC_BUTTON_OPENHELP1,264,49,19,14 - GROUPBOX "OHTMLwv̐ݒ(&P)",IDC_STATIC,3,73,285,45,WS_GROUP - EDITTEXT IDC_EDIT_EXTHTMLHELP,8,89,253,12,ES_AUTOHSCROLL | WS_GROUP - PUSHBUTTON "(&2)...",IDC_BUTTON_OPENEXTHTMLHELP,264,88,19,14 - CONTROL "r[A𕡐NȂ(&N)",IDC_CHECK_HTMLHELPISSINGLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,105,108,10 - GROUPBOX "L[[hwv",IDC_STATIC,3,123,285,33,WS_GROUP - RTEXT "Font",IDC_STATIC_KEYWORDHELPFONT,8,136,219,17 - PUSHBUTTON "tHg(&F)...",IDC_BUTTON_KEYWORDHELPFONT,232,136,51,14 - LTEXT "DLL(&M)",IDC_STATIC,7,174,26,10 - EDITTEXT IDC_EDIT_MIGEMO_DLL,36,172,224,12,ES_AUTOHSCROLL | WS_GROUP - PUSHBUTTON "(&3)...",IDC_BUTTON_OPENMDLL,264,171,19,14 - LTEXT "(&I)",IDC_STATIC,7,190,25,10 - EDITTEXT IDC_EDIT_MIGEMO_DICT,36,189,224,12,ES_AUTOHSCROLL - PUSHBUTTON "(&4)...",IDC_BUTTON_OPENMDICT,264,189,19,14 - GROUPBOX "migemoݒ",IDC_STATIC,3,159,287,47,WS_GROUP -END - -IDD_PROP_MACRO DIALOGEX 0, 0, 293, 240 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - LTEXT "}Nꗗ",IDC_STATIC,4,9,36,10 - EDITTEXT IDC_MACRODIR,46,5,199,14,ES_AUTOHSCROLL - PUSHBUTTON "Q(&R)...",IDC_MACRODIRREF,254,5,34,14 - CONTROL "List1",IDC_MACROLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_AUTOARRANGE | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,3,21,285,148 - LTEXT "O(&N)",IDC_STATIC,6,179,32,10 - EDITTEXT IDC_MACRONAME,39,176,203,14,ES_AUTOHSCROLL - LTEXT "&File",IDC_STATIC,6,194,12,10 - COMBOBOX IDC_MACROPATH,39,192,203,130,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP - CONTROL "}Ns邽тɃt@Cǂݍ݂Ȃi&Lj",IDC_CHECK_RELOADWHENEXECUTE, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,211,178,10 - LTEXT "LZmF҂",IDC_STATIC,185,212,75,10 - EDITTEXT IDC_MACROCANCELTIMER,260,209,18,14,ES_AUTOHSCROLL - LTEXT "b",IDC_STATIC,280,212,8,10 - LTEXT "s:",IDC_STATIC,6,225,34,10 - CONTROL "VK^Jt@C(&O)",IDC_CHECK_MacroOnOpened,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,44,224,89,10 - CONTROL "^CvύX(&T)",IDC_CHECK_MacroOnTypeChanged,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,135,224,72,10 - CONTROL "t@CۑO(&S)",IDC_CHECK_MacroOnSave,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,224,69,10 - LTEXT "Id:",IDC_STATIC,249,176,8,10 - COMBOBOX IDC_COMBO_MACROID,260,174,28,129,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "ݒ(&A)",IDC_MACRO_REG,250,190,38,14 -END - -IDD_PROP_PLUGIN DIALOGEX 0, 0, 293, 240 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - CONTROL "vOCLɂ(&E)",IDC_CHECK_PluginEnable,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,9,100,10 - PUSHBUTTON "ZIPvOC𓱓(&Z)",IDC_PLUGIN_INST_ZIP,192,6,96,14 - PUSHBUTTON "tH_J(&F)",IDC_PLUGIN_OpenFolder,120,20,70,14 - PUSHBUTTON "VKvOClj(&I)",IDC_PLUGIN_SearchNew,192,20,96,14 - LTEXT "vOCꗗ",IDC_STATIC,4,28,50,10 - CONTROL "List1",IDC_PLUGINLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_AUTOARRANGE | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,3,41,285,108 - LTEXT "",IDC_STATIC,11,160,50,10 - LTEXT "",IDC_LABEL_PLUGIN_Description,66,160,200,10 - LTEXT "",IDC_STATIC,11,175,50,10 - LTEXT "",IDC_LABEL_PLUGIN_Author,66,175,200,10 - LTEXT "o[W",IDC_STATIC,11,190,50,10 - LTEXT "",IDC_LABEL_PLUGIN_Version,66,190,100,10 - PUSHBUTTON "zz(&D)",IDC_PLUGIN_URL,186,187,80,14 - PUSHBUTTON "폜(&R)",IDC_PLUGIN_Remove,6,205,80,14 - PUSHBUTTON "ݒ(&P)",IDC_PLUGIN_OPTION,96,205,80,14 - PUSHBUTTON "ReadMe(&M)",IDC_PLUGIN_README,186,205,80,14 -END - -IDD_PROP_MAINMENU DIALOGEX 0, 0, 293, 240 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "Cj[" -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - RTEXT "(&K)",IDC_LABEL_MENUFUNCKIND,10,6,45,10 - COMBOBOX IDC_COMBO_FUNCKIND,57,4,70,180,CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - LTEXT "@\(&F)",IDC_LABEL_MENUFUNC,4,17,40,10 - LISTBOX IDC_LIST_FUNC,4,28,123,190,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - CONTROL "ANZXL[K( )tŕ\(&P)",IDC_CHECK_KEY_PARENTHESES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,176,4,113,10 - LTEXT "j[(&M)",IDC_LABEL_MENU,166,17,35,10 - CONTROL "&Menu",IDC_TREE_RES,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_EDITLABELS | TVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,166,28,123,190,WS_EX_ACCEPTFILES - PUSHBUTTON "폜(&D)",IDC_BUTTON_DELETE,128,28,37,14,WS_GROUP - PUSHBUTTON "{(&N)",IDC_BUTTON_INSERT_NODE,128,47,37,14 - PUSHBUTTON "---(&S)",IDC_BUTTON_INSERTSEPARATOR,128,61,37,14 - PUSHBUTTON "(&Q)",IDC_BUTTON_INSERT,128,75,37,14 - PUSHBUTTON "(&A)",IDC_BUTTON_INSERT_A,128,89,37,14 - PUSHBUTTON ">>(&B)",IDC_BUTTON_ADD,128,103,37,14 - PUSHBUTTON "(&U)",IDC_BUTTON_UP,128,121,37,14 - PUSHBUTTON "(&O)",IDC_BUTTON_DOWN,128,135,37,14 - PUSHBUTTON "(&R)",IDC_BUTTON_RIGHT,128,149,37,14 - PUSHBUTTON "(&L)",IDC_BUTTON_LEFT,128,163,37,14 - PUSHBUTTON "SJ(&H)",IDC_BUTTON_EXPAND,128,190,37,14 - PUSHBUTTON "S(&Z)",IDC_BUTTON_COLLAPSE,128,204,37,14 - PUSHBUTTON "C|[g(&I)...",IDC_BUTTON_IMPORT,4,222,58,14,WS_GROUP - PUSHBUTTON "GNX|[g(&X)...",IDC_BUTTON_EXPORT,64,222,58,14 - PUSHBUTTON "(&T)",IDC_BUTTON_CHECK,124,222,44,14 - PUSHBUTTON "NA(&C)",IDC_BUTTON_CLEAR,196,222,44,14,WS_GROUP - PUSHBUTTON "ݒ(&E)",IDC_BUTTON_INITIALIZE,245,222,44,14 -END - -IDD_WINPOSSIZE DIALOGEX 0, 0, 177, 159 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "EBhËʒuƑ傫" -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - CONTROL "w肵Ȃ(&D)",IDC_RADIO_WINPOS_DEF,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,15,19,61,10 - CONTROL "p(&I)",IDC_RADIO_WINPOS_SAVE,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,15,32,52,10 - CONTROL "ڎw(&S)",IDC_RADIO_WINPOS_SET,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,15,45,56,10 - LTEXT "XW(&X)",IDC_STATIC,81,29,31,10,NOT WS_GROUP - EDITTEXT IDC_EDIT_WX,115,25,33,14,ES_RIGHT | WS_GROUP - CONTROL "Spin1",IDC_SPIN_WX,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,148,25,10,14 - LTEXT "YW(&Y)",IDC_STATIC,81,43,31,10,NOT WS_GROUP - EDITTEXT IDC_EDIT_WY,115,41,33,14,ES_RIGHT | WS_GROUP - CONTROL "Spin1",IDC_SPIN_WY,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,148,41,10,14 - CONTROL "w肵Ȃ(&E)",IDC_RADIO_WINSIZE_DEF,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,15,79,60,10 - CONTROL "p(&N)",IDC_RADIO_WINSIZE_SAVE,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,15,91,55,10 - CONTROL "ڎw(&T)",IDC_RADIO_WINSIZE_SET,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,15,103,56,10 - COMBOBOX IDC_COMBO_WINTYPE,84,74,64,52,CBS_DROPDOWNLIST | WS_VSCROLL | WS_GROUP | WS_TABSTOP - LTEXT "(&W)",IDC_STATIC,84,94,20,10 - EDITTEXT IDC_EDIT_SX,115,91,33,14,ES_RIGHT | ES_NUMBER - CONTROL "Spin1",IDC_SPIN_SX,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,148,90,10,14 - LTEXT "(&G)",IDC_STATIC,84,110,25,10 - EDITTEXT IDC_EDIT_SY,115,108,33,14,ES_RIGHT | ES_NUMBER - CONTROL "Spin1",IDC_SPIN_SY,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,148,108,10,14 - DEFPUSHBUTTON "‚(&C)",IDOK,26,138,50,14,WS_GROUP - PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,110,137,54,15,WS_GROUP - GROUPBOX "N̈ʒu",IDC_STATIC,7,7,163,52 - GROUPBOX "傫",IDC_STATIC,7,66,163,63 -END - -IDD_PLUGIN_OPTION DIALOGEX 0, 0, 271, 255 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "vOC̐ݒ" -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - LTEXT "vOC̃IvVݒ肵Ă",IDC_STATIC_MSG,11,7,119,10 - CONTROL "List1",IDC_LIST_PLUGIN_OPTIONS,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,22,257,186 - LTEXT "lF",IDC_STATIC,11,217,21,10 - EDITTEXT IDC_EDIT_PLUGIN_OPTION,36,214,228,14,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_PLUGIN_OPTION_DIR,36,214,205,14,ES_AUTOHSCROLL - PUSHBUTTON "&...",IDC_BUTTON_PLUGIN_OPTION_DIR,243,214,21,14 - EDITTEXT IDC_EDIT_PLUGIN_OPTION_NUM,36,214,60,14,ES_RIGHT - CONTROL "Spin1",IDC_SPIN_PLUGIN_OPTION,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,148,25,10,14,WS_EX_TRANSPARENT - CONTROL "Check",IDC_CHECK_PLUGIN_OPTION,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,36,216,200,10 - COMBOBOX IDC_COMBO_PLUGIN_OPTION,36,214,183,150,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "ReadMe(&M)",IDC_PLUGIN_README,49,234,50,14 - DEFPUSHBUTTON "&OK",IDOK,104,234,50,14 - PUSHBUTTON "LZ(&X)",IDCANCEL,159,234,50,14 - PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,214,234,50,14 -END - -IDD_PROFILEMGR DIALOGEX 0, 0, 191, 184 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "vt@C}l[W" -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - LISTBOX IDC_LIST_PROFILE,9,9,109,128,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - CONTROL "ftHgݒɂċN(&E)",IDC_CHECK_PROF_DEFSTART,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,143,150,10 - DEFPUSHBUTTON "N(&S)",IDOK,8,161,56,14 - PUSHBUTTON "‚(&X)",IDCANCEL,68,161,56,14 - PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,128,161,56,14 - PUSHBUTTON "VK쐬(&N)",IDC_BUTTON_PROF_CREATE,125,8,61,14 - PUSHBUTTON "OύX(&R)",IDC_BUTTON_PROF_RENAME,125,25,61,14 - PUSHBUTTON "폜(&D)",IDC_BUTTON_PROF_DELETE,125,42,61,14 - PUSHBUTTON "ftHgݒ(&F)",IDC_BUTTON_PROF_DEFSET,125,62,61,14 - PUSHBUTTON "ftHg(&C)",IDC_BUTTON_PROF_DEFCLEAR,125,79,61,14 -END - -IDD_FILETREE DIALOGEX 0, 0, 291, 241 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "t@Cc[ݒ" -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - LTEXT "ݒFʐݒ",IDC_STATIC_SETTFING_FROM,4,4,282,10 - CONTROL "etH_̐ݒǂݍ(&I)",IDC_CHECK_LOADINI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,16,120,9 - LTEXT "ftHgݒt@C(&J)",IDC_STATIC,4,28,110,10 - EDITTEXT IDC_EDIT_DEFINI,13,39,124,13,ES_AUTOHSCROLL - PUSHBUTTON "...(&1)",IDC_BUTTON_REF1,137,39,17,13 - PUSHBUTTON "ǂݍ(&V)",IDC_BUTTON_LOAD,108,53,47,14 - CONTROL "Grep(&G)",IDC_RADIO_GREP,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,6,72,56,10 - CONTROL "t@C(&F)",IDC_RADIO_FILE,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,6,85,56,10 - CONTROL "tH_(&2)",IDC_RADIO_FOLDER,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,6,98,56,10 - GROUPBOX "",IDC_STATIC,1,61,89,50,WS_GROUP - LTEXT "pX(&T)",IDC_STATIC_PATH,3,119,22,10 - EDITTEXT IDC_EDIT_PATH,38,117,122,13,ES_AUTOHSCROLL - PUSHBUTTON "&...",IDC_BUTTON_REF2,161,117,10,13 - PUSHBUTTON "(&3)",IDC_BUTTON_PATH_MENU,171,117,21,14 - LTEXT "x(&E)",IDC_STATIC,3,136,32,10 - EDITTEXT IDC_EDIT_LABEL,38,134,111,13,ES_AUTOHSCROLL - LTEXT "t@C(&K)",IDC_STATIC_FILE,3,154,32,10 - EDITTEXT IDC_EDIT_FILE,38,151,111,13,ES_AUTOHSCROLL - CONTROL "Bt@C(&W)",IDC_CHECK_HIDDEN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,181,87,10 - CONTROL "ǂݎp(&Z)",IDC_CHECK_READONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,193,87,10 - CONTROL "VXet@C(&S)",IDC_CHECK_SYSTEM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,205,87,10 - GROUPBOX "\",IDC_STATIC,4,169,100,51 - PUSHBUTTON "폜(&4)",IDC_BUTTON_DELETE,156,17,36,14 - PUSHBUTTON "(&Q)",IDC_BUTTON_INSERT,156,32,36,14 - PUSHBUTTON "(&A)",IDC_BUTTON_INSERT_A,156,46,36,14 - PUSHBUTTON ">>(&B)",IDC_BUTTON_ADD,156,60,36,14 - PUSHBUTTON "XV(&P)",IDC_BUTTON_UPDATE,156,74,36,14 - PUSHBUTTON "t@C}(&C)...",IDC_BUTTON_FILEADD,133,88,59,14 - PUSHBUTTON "pẌꊇu(&N)...",IDC_BUTTON_REPLACE,111,102,81,14 - PUSHBUTTON "(&U)",IDC_BUTTON_UP,156,140,36,14 - PUSHBUTTON "(&D)",IDC_BUTTON_DOWN,156,154,36,14 - PUSHBUTTON "(&R)",IDC_BUTTON_RIGHT,156,168,36,14 - PUSHBUTTON "(&L)",IDC_BUTTON_LEFT,156,182,36,14 - CONTROL "",IDC_TREE_FL,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,193,17,94,202 - PUSHBUTTON "C|[g(&M)",IDC_BUTTON_IMPORT,5,225,50,14 - PUSHBUTTON "GNX|[g(&Y)",IDC_BUTTON_EXPORT,59,225,50,14 - DEFPUSHBUTTON "&OK",IDOK,128,225,50,14 - PUSHBUTTON "LZ(&X)",IDCANCEL,183,225,50,14 - PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,238,225,50,14 -END - -IDD_WINLIST DIALOGEX 0, 0, 350, 250 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "EBhEꗗ" -FONT 9, "lr oSVbN", 0, 0, 0x1 -BEGIN - CONTROL "",IDC_LIST_WINDOW,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,7,336,215 - PUSHBUTTON "EBhE‚(&C)",IDC_BUTTON_CLOSE,7,229,90,14 - PUSHBUTTON "㏑ۑ(&S)",IDC_BUTTON_SAVE,112,229,50,14 - DEFPUSHBUTTON "&OK",IDOK,229,229,50,14 - PUSHBUTTON "wv(&H)",IDC_BUTTON_HELP,286,229,50,14 -END - - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO -BEGIN - IDD_FIND, DIALOG - BEGIN - LEFTMARGIN, 5 - RIGHTMARGIN, 279 - BOTTOMMARGIN, 86 - END - - IDD_JUMP, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 245 - TOPMARGIN, 7 - BOTTOMMARGIN, 114 - END - - IDD_FUNCLIST, DIALOG - BEGIN - TOPMARGIN, 7 - BOTTOMMARGIN, 283 - END - - IDD_GREP, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 303 - TOPMARGIN, 7 - BOTTOMMARGIN, 136 - END - - IDD_GREP_REPLACE, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 303 - TOPMARGIN, 7 - BOTTOMMARGIN, 158 - END - - IDD_GREPRUNNING, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 286 - TOPMARGIN, 7 - BOTTOMMARGIN, 72 - END - - IDD_REPLACE, DIALOG - BEGIN - LEFTMARGIN, 4 - RIGHTMARGIN, 293 - BOTTOMMARGIN, 142 - END - - IDD_REPLACERUNNING, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 183 - TOPMARGIN, 7 - BOTTOMMARGIN, 28 - END - - IDD_PROPERTY_FILE, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 263 - TOPMARGIN, 7 - BOTTOMMARGIN, 220 - END - - IDD_INPUT1, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 178 - TOPMARGIN, 7 - BOTTOMMARGIN, 48 - END - - IDD_COMPARE, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 358 - TOPMARGIN, 7 - BOTTOMMARGIN, 158 - END - - IDD_PRINTPREVIEWBAR, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 395 - TOPMARGIN, 7 - BOTTOMMARGIN, 25 - END - - IDD_PRINTSETTING, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 247 - TOPMARGIN, 7 - BOTTOMMARGIN, 246 - END - - IDD_EXITING, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 164 - TOPMARGIN, 7 - BOTTOMMARGIN, 23 - END - - IDD_EXEC, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 285 - TOPMARGIN, 7 - BOTTOMMARGIN, 132 - END - - IDD_EXECRUNNING, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 263 - TOPMARGIN, 7 - BOTTOMMARGIN, 48 - END - - IDD_MACRORUNNING, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 263 - TOPMARGIN, 7 - BOTTOMMARGIN, 48 - END - - IDD_HOKAN, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 118 - TOPMARGIN, 7 - BOTTOMMARGIN, 93 - END - - IDD_PRINTING, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 138 - TOPMARGIN, 7 - BOTTOMMARGIN, 68 - END - - IDD_FILEUPDATEQUERY, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 216 - TOPMARGIN, 7 - BOTTOMMARGIN, 100 - END - - IDD_FAVORITE, DIALOG - BEGIN - LEFTMARGIN, 3 - RIGHTMARGIN, 377 - TOPMARGIN, 4 - BOTTOMMARGIN, 270 - END - - IDD_TAGJUMPLIST, DIALOG - BEGIN - LEFTMARGIN, 3 - RIGHTMARGIN, 387 - TOPMARGIN, 4 - BOTTOMMARGIN, 187 - END - - IDD_TAG_MAKE, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 226 - TOPMARGIN, 7 - BOTTOMMARGIN, 78 - END - - IDD_OPERATIONRUNNING, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 183 - TOPMARGIN, 7 - BOTTOMMARGIN, 28 - END - - IDD_DIFF, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 256 - TOPMARGIN, 7 - BOTTOMMARGIN, 296 - END - - IDD_CTRLCODE, DIALOG - BEGIN - LEFTMARGIN, 2 - RIGHTMARGIN, 177 - TOPMARGIN, 2 - BOTTOMMARGIN, 182 - END - - IDD_TYPELIST, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 180 - TOPMARGIN, 7 - BOTTOMMARGIN, 216 - END - - IDD_PROP_SCREEN, DIALOG - BEGIN - LEFTMARGIN, 3 - RIGHTMARGIN, 299 - TOPMARGIN, 4 - BOTTOMMARGIN, 237 - END - - IDD_PROP_COLOR, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 296 - TOPMARGIN, 7 - END - - IDD_PROP_SUPPORT, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 296 - TOPMARGIN, 7 - BOTTOMMARGIN, 216 - END - - IDD_PROP_REGEX, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 296 - TOPMARGIN, 7 - BOTTOMMARGIN, 213 - END - - IDD_DIALOG_KEYWORD_SELECT, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 170 - TOPMARGIN, 7 - BOTTOMMARGIN, 190 - END - - IDD_SAMECOLOR, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 176 - TOPMARGIN, 7 - BOTTOMMARGIN, 199 - END - - IDD_PROP_GENERAL, DIALOG - BEGIN - LEFTMARGIN, 3 - RIGHTMARGIN, 286 - TOPMARGIN, 7 - BOTTOMMARGIN, 233 - END - - IDD_PROP_WIN, DIALOG - BEGIN - LEFTMARGIN, 2 - RIGHTMARGIN, 290 - TOPMARGIN, 2 - BOTTOMMARGIN, 206 - END - - IDD_PROP_TOOLBAR, DIALOG - BEGIN - RIGHTMARGIN, 292 - END - - IDD_PROP_TAB, DIALOG - BEGIN - LEFTMARGIN, 1 - RIGHTMARGIN, 291 - TOPMARGIN, 2 - BOTTOMMARGIN, 197 - END - - IDD_PROP_STATUSBAR, DIALOG - BEGIN - LEFTMARGIN, 1 - RIGHTMARGIN, 291 - TOPMARGIN, 7 - BOTTOMMARGIN, 217 - END - - IDD_PROP_EDIT, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 284 - TOPMARGIN, 7 - BOTTOMMARGIN, 204 - END - - IDD_PROP_FILE, DIALOG - BEGIN - LEFTMARGIN, 1 - TOPMARGIN, 7 - BOTTOMMARGIN, 233 - END - - IDD_PROP_FNAME, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 284 - TOPMARGIN, 7 - BOTTOMMARGIN, 206 - END - - IDD_PROP_BACKUP, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 284 - TOPMARGIN, 7 - BOTTOMMARGIN, 213 - END - - IDD_PROP_FORMAT, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 285 - TOPMARGIN, 7 - BOTTOMMARGIN, 178 - END - - IDD_PROP_GREP, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 286 - TOPMARGIN, 7 - BOTTOMMARGIN, 160 - END - - IDD_PROP_KEYBIND, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 286 - TOPMARGIN, 7 - BOTTOMMARGIN, 232 - END - - IDD_PROP_CUSTMENU, DIALOG - BEGIN - RIGHTMARGIN, 290 - VERTGUIDE, 276 - END - - IDD_PROP_KEYWORD, DIALOG - BEGIN - BOTTOMMARGIN, 238 - END - - IDD_PROP_HELPER, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 286 - TOPMARGIN, 7 - BOTTOMMARGIN, 210 - END - - IDD_PROP_MACRO, DIALOG - BEGIN - RIGHTMARGIN, 292 - BOTTOMMARGIN, 237 - END - - IDD_WINPOSSIZE, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 170 - TOPMARGIN, 7 - BOTTOMMARGIN, 152 - END -END -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Bitmap -// - -IDB_MYTOOL BITMAP "../resource/mytool.bmp" - -IDB_SCROLL_CENTER BITMAP "../resource/auto_scroll_center.bmp" - -IDB_SCROLL_VERTICAL BITMAP "../resource/auto_scroll_vertical.bmp" - -IDB_SCROLL_HORIZONTAL BITMAP "../resource/auto_scroll_horizontal.bmp" - - -///////////////////////////////////////////////////////////////////////////// -// -// Cursor -// - -IDC_CURSOR_COPYARROW CURSOR "../resource/cursor_copy.cur" - -IDC_CURSOR_MOVEARROW CURSOR "../resource/cursor_move.cur" - -IDC_CURSOR_RVARROW CURSOR "../resource/cursor_rvarrow.cur" - -IDC_CURSOR_ISEARCH_F CURSOR "../resource/cursor_isf.cur" - -IDC_CURSOR_ISEARCH_B CURSOR "../resource/cursor_isb.cur" - -IDC_CURSOR_TAB_SEPARATE CURSOR "../resource/cursor_tab_separate.cur" - -IDC_CURSOR_TAB_JOIN CURSOR "../resource/cursor_tab_join.cur" - -IDC_CURSOR_AUTOSCROLL_CENTER CURSOR "../resource/auto_scroll_center.cur" - -IDC_CURSOR_AUTOSCROLL_HORIZONTAL CURSOR "../resource/auto_scroll_horizontal.cur" - -IDC_CURSOR_AUTOSCROLL_VERTICAL CURSOR "../resource/auto_scroll_vertical.cur" - -IDC_CURSOR_AUTOSCROLL_UP CURSOR "../resource/auto_scroll_up.cur" - -IDC_CURSOR_AUTOSCROLL_DOWN CURSOR "../resource/auto_scroll_down.cur" - -IDC_CURSOR_AUTOSCROLL_LEFT CURSOR "../resource/auto_scroll_left.cur" - -IDC_CURSOR_AUTOSCROLL_RIGHT CURSOR "../resource/auto_scroll_right.cur" - -IDC_CURSOR_AUTOSCROLL_UP_LEFT CURSOR "../resource/auto_scroll_up_left.cur" - -IDC_CURSOR_AUTOSCROLL_UP_RIGHT CURSOR "../resource/auto_scroll_up_right.cur" - -IDC_CURSOR_AUTOSCROLL_DOWN_LEFT CURSOR "../resource/auto_scroll_down_left.cur" - -IDC_CURSOR_AUTOSCROLL_DOWN_RIGHT CURSOR "../resource/auto_scroll_down_right.cur" - - -///////////////////////////////////////////////////////////////////////////// -// -// 100 -// - -IDR_MENU1 100 "../resource/MainMenu.ini" - - -///////////////////////////////////////////////////////////////////////////// -// -// AFX_DIALOG_LAYOUT -// - -IDD_GREP AFX_DIALOG_LAYOUT -BEGIN - 0 -END - - -///////////////////////////////////////////////////////////////////////////// -// -// String Table -// - -STRINGTABLE -BEGIN - F_DISABLE "-- s --" -END - -STRINGTABLE -BEGIN - F_ISEARCH_SUBMENU "CN^T[`" - F_TAB_CLOSEOTHER_TAB "̃^uȊO‚" - F_TAB_CLOSEOTHER_WINDOW "̃EBhEȊO‚" - F_EDIT_BOX_SEL_SUBMENU "`I" - F_FILE_TOPMENU "t@C" - F_EDIT_TOPMENU "ҏW" - F_CONVERT_TOPMENU "ϊ" - F_SEARCH_TOPMENU "" - F_TOOL_TOPMENU "c[" - F_OPTION_TOPMENU "ݒ" - F_WINDOW_TOPMENU "EBhE" - F_HELP_TOPMENU "wv" - F_WINDOW_LIST_SUBMENU "EBhEꗗ" -END - -STRINGTABLE -BEGIN - F_FILENEW "VK쐬" - F_FILEOPEN "J..." - F_FILESAVE "㏑ۑ" - F_FILESAVEAS_DIALOG "Otĕۑ..." - F_FILECLOSE "‚()" - F_FILECLOSE_OPEN "‚ĊJ..." - F_FILEOPEN_DROPDOWN "J(hbv_E)..." - F_FILESAVECLOSE "ۑĕ‚" - F_FILENEW_NEWWINDOW "VKEChEJ" - F_FILE_REOPEN_SJIS "SJISŊJ" -END - -STRINGTABLE -BEGIN - F_TAB_MANIP_SUBMENU "^ȗ" - F_TAB_GROUPIZE "O[v" - F_TAB_GROUPDEL "O[v" - F_TOPMOST_REL "ɎO" - F_TOPMOST_SET "ɎOɕ\" - F_FILE_REOPEN_SUBMENU "J" - F_FILE_RCNTFILE_SUBMENU "ŋߎgt@C" - F_FILE_RCNTFLDR_SUBMENU "ŋߎgtH_" - F_EDIT_INS_SUBMENU "}" - F_EDIT_COS_SUBMENU "`" - F_EDIT_MOV_SUBMENU "ړ" - F_EDIT_SEL_SUBMENU "I" - F_EDIT_HLV_SUBMENU "xȑ" - F_CONV_ENCODE_SUBMENU "R[hϊ" - F_RECKEYMACRO_REC "L[}N̋L^Jn" - F_SAVEKEYMACRO_REC "L[}N̕ۑ" -END - -STRINGTABLE -BEGIN - F_FILE_REOPEN_JIS "JISŊJ" - F_FILE_REOPEN_EUC "EUCŊJ" - F_FILE_REOPEN_UNICODE "UTF-16ŊJ" - F_FILE_REOPEN_UTF8 "UTF-8ŊJ" - F_FILE_REOPEN_UTF7 "UTF-7ŊJ" - F_FILE_REOPEN_UNICODEBE "UTF-16BEŊJ" - F_FILE_REOPEN_CESU8 "CESU-8ŊJ" - F_FILE_REOPEN "J" - F_FILESAVEALL "ׂď㏑ۑ" - F_FILE_REOPEN_LATIN1 "Latin1ŊJ" -END - -STRINGTABLE -BEGIN - F_PRINT "..." - F_PRINT_PREVIEW "vr[" - F_PRINT_PAGESETUP "y[Wݒ..." -END - -STRINGTABLE -BEGIN - F_OPEN_HfromtoC "C/C++wb_(\[X)J" - F_ACTIVATE_SQLPLUS "SQL*PlusANeBu\" - F_PLSQL_COMPILE_ON_SQLPLUS "SQL*PlusŎs" -END - -STRINGTABLE -BEGIN - F_BROWSE "uEY" - F_VIEWMODE "r[[h" - F_PROPERTY_FILE "t@C̃vpeB" - F_PROFILEMGR "vt@C}l[W" -END - -STRINGTABLE -BEGIN - F_EXITALLEDITORS "ҏW̑SI" - F_EXITALL "TNGfB^̑SI" - F_OPEN_FOLDER_IN_EXPLORER "t@C̏ꏊJ" - F_OPEN_COMMAND_PROMPT "R}hvvgJ" - F_OPEN_COMMAND_PROMPT_AS_ADMIN "Ǘ҂ƂăR}hvvgJ" - F_WCHAR "" - F_IME_CHAR "Sp" -END - -STRINGTABLE -BEGIN - F_OPEN_POWERSHELL "PowerShellJ" - F_OPEN_POWERSHELL_AS_ADMIN "Ǘ҂ƂPowerShellJ" -END - -STRINGTABLE -BEGIN - F_UNDO "ɖ߂" - F_REDO "蒼" - F_DELETE "폜" - F_DELETE_BACK "J[\O폜" -END - -STRINGTABLE -BEGIN - F_WordDeleteToStart "P̍[܂ō폜" - F_WordDeleteToEnd "P̉E[܂ō폜" - F_WordCut "P؂" - F_WordDelete "P폜" -END - -STRINGTABLE -BEGIN - F_LineCutToStart "s܂Ő؂(sP)" - F_LineCutToEnd "s܂Ő؂(sP)" - F_LineDeleteToStart "s܂ō폜(sP)" - F_LineDeleteToEnd "s܂ō폜(sP)" - F_CUT_LINE "s؂(܂ԂP)" - F_DELETE_LINE "s폜(܂ԂP)" - F_DUPLICATELINE "s̓d(܂ԂP)" -END - -STRINGTABLE -BEGIN - F_INDENT_TAB "TABCfg" - F_UNINDENT_TAB "tTABCfg" - F_INDENT_SPACE "SPACECfg" - F_UNINDENT_SPACE "tSPACECfg" -END - -STRINGTABLE -BEGIN - F_LTRIM "(擪)̋󔒂폜" - F_RTRIM "E()̋󔒂폜" - F_SORT_ASC "Is̏\[g" - F_SORT_DESC "Is̍~\[g" - F_MERGE "Ads̍폜(uniq)" - F_RECONVERT "ĕϊ" -END - -STRINGTABLE -BEGIN - F_UP "J[\ړ" - F_DOWN "J[\ړ" - F_LEFT "J[\ړ" - F_RIGHT "J[\Eړ" - F_UP2 "J[\ړ(Qs)" - F_DOWN2 "J[\ړ(Qs)" -END - -STRINGTABLE -BEGIN - F_WORDLEFT "P̍[Ɉړ" - F_WORDRIGHT "P̉E[Ɉړ" - F_GOLINETOP "sɈړ(܂ԂP)" - F_GOLINEEND "sɈړ(܂ԂP)" -END - -STRINGTABLE -BEGIN - F_HalfPageUp "y[WAbv" - F_HalfPageDown "y[W_E" - F_1PageUp "Py[WAbv" - F_1PageDown "Py[W_E" - F_GOFILETOP "t@C̐擪Ɉړ" - F_GOFILEEND "t@C̍ŌɈړ" -END - -STRINGTABLE -BEGIN - F_CURLINECENTER "J[\sEBhE" - F_CURLINETOP "J[\sEBhE㕔" - F_CURLINEBOTTOM "J[\sEBhE" -END - -STRINGTABLE -BEGIN - F_JUMPHIST_PREV "ړ: O" - F_JUMPHIST_NEXT "ړ: " - F_JUMPHIST_SET "݈ʒuړɓo^" - F_WndScrollDown "eLXgPsփXN[" - F_WndScrollUp "eLXgPsփXN[" - F_GONEXTPARAGRAPH "̒iֈړ" - F_GOPREVPARAGRAPH "O̒iֈړ" -END - -STRINGTABLE -BEGIN - F_AUTOSCROLL "I[gXN[" - F_WHEELUP "zC[Abv" - F_WHEELDOWN "zC[_E" - F_WHEELLEFT "zC[" - F_WHEELRIGHT "zC[E" - F_WHEELPAGEUP "zC[y[WAbv" - F_WHEELPAGEDOWN "zC[y[W_E" - F_WHEELPAGELEFT "zC[y[W" - F_WHEELPAGERIGHT "zC[y[WE" - F_MODIFYLINE_NEXT "̕ύXs" - F_MODIFYLINE_PREV "O̕ύXs" -END - -STRINGTABLE -BEGIN - F_SELECTWORD "݈ʒu̒PI" - F_SELECTALL "ׂđI" - F_SELECTLINE "1sI" - F_BEGIN_SEL "͈͑IJn" - F_UP_SEL "(I)J[\ړ" - F_DOWN_SEL "(I)J[\ړ" - F_LEFT_SEL "(I)J[\ړ" - F_RIGHT_SEL "(I)J[\Eړ" - F_UP2_SEL "(I)J[\ړ(Qs)" -END - -STRINGTABLE -BEGIN - F_DOWN2_SEL "(I)J[\ړ(Qs)" - F_WORDLEFT_SEL "(I)P̍[Ɉړ" - F_WORDRIGHT_SEL "(I)P̉E[Ɉړ" -END - -STRINGTABLE -BEGIN - F_GOLINETOP_SEL "(I)sɈړ(܂ԂP)" - F_GOLINEEND_SEL "(I)sɈړ(܂ԂP)" - F_HalfPageUp_Sel "(I)y[WAbv" - F_HalfPageDown_Sel "(I)y[W_E" - F_1PageUp_Sel "(I)Py[WAbv" - F_1PageDown_Sel "(I)Py[W_E" -END - -STRINGTABLE -BEGIN - F_GOFILETOP_SEL "(I)t@C̐擪Ɉړ" - F_GOFILEEND_SEL "(I)t@C̍ŌɈړ" -END - -STRINGTABLE -BEGIN - F_GONEXTPARAGRAPH_SEL "(I)̒iֈړ" - F_GOPREVPARAGRAPH_SEL "(I)O̒iֈړ" - F_MODIFYLINE_NEXT_SEL "(I)̕ύXs" - F_MODIFYLINE_PREV_SEL "(I)O̕ύXs" -END - -STRINGTABLE -BEGIN - F_BEGIN_BOX "`͈͑IJn" - F_UP_BOX "(`I)J[\ړ" -END - -STRINGTABLE -BEGIN - F_DOWN_BOX "(`I)J[\ړ" - F_LEFT_BOX "(`I)J[\ړ" - F_RIGHT_BOX "(`I)J[\Eړ" - F_UP2_BOX "(`I)J[\ړ(Qs)" - F_DOWN2_BOX "(`I)J[\ړ(Qs)" - F_WORDLEFT_BOX "(`I)P̍[Ɉړ" - F_WORDRIGHT_BOX "(`I)P̉E[Ɉړ" -END - -STRINGTABLE -BEGIN - F_GOLOGICALLINETOP_BOX "(`I)sɈړ(sP)" - F_GOLINETOP_BOX "(`I)sɈړ(܂ԂP)" - F_GOLINEEND_BOX "(`I)sɈړ(܂ԂP)" - F_HalfPageUp_BOX "(`I)y[WAbv" - F_HalfPageDown_BOX "(`I)y[W_E" - F_1PageUp_BOX "(`I)Py[WAbv" - F_1PageDown_BOX "(`I)Py[W_E" -END - -STRINGTABLE -BEGIN - F_GOFILETOP_BOX "(`I)t@C̐擪Ɉړ" - F_GOFILEEND_BOX "(`I)t@C̍ŌɈړ" -END - -STRINGTABLE -BEGIN - F_CUT "؂" - F_COPY "Rs[" - F_COPY_CRLF "CRLFsŃRs[" - F_PASTE "\t" - F_PASTEBOX "`\t" - F_INSTEXT_W "eLXg\t" -END - -STRINGTABLE -BEGIN - F_COPY_ADDCRLF "܂Ԃʒuɉs‚ăRs[" - F_COPYLINES "I͈͓SsRs[" - F_COPYLINESASPASSAGE "I͈͓SsptRs[" - F_COPYLINESWITHLINENUMBER "I͈͓SssԍtRs[" - F_COPY_COLOR_HTML "I͈͓FtHTMLRs[" - F_COPY_COLOR_HTML_LINENUMBER "I͈͓sԍFtHTMLRs[" - F_COPYPATH "̃t@C̃pXRs[" - F_COPYTAG "̃t@C̃pXƃJ[\ʒuRs[" - F_COPYFNAME "̃t@CRs[" -END - -STRINGTABLE -BEGIN - F_CREATEKEYBINDLIST "L[蓖ĈꗗRs[" - F_COPYDIRPATH "̃t@C̃tH_Rs[" -END - -STRINGTABLE -BEGIN - F_INS_DATE "t}" - F_INS_TIME "}" - F_CTRL_CODE_DIALOG "Rg[R[h..." - F_INS_FILE_USED_RECENTLY "ŋߎgt@C}" - F_INS_FOLDER_USED_RECENTLY "ŋߎgtH_}" -END - -STRINGTABLE -BEGIN - F_TOLOWER "" - F_TOUPPER "啶" - F_TOHANKAKU "Spp" - F_TOZENKAKUKATA "p{SЂ灨SpEJ^Ji" - F_TOZENKAKUHIRA "p{SJ^SpEЂ炪" - F_HANKATATOZENKATA "pJ^JiSpJ^Ji" - F_HANKATATOZENHIRA "pJ^JiSpЂ炪" - F_TOZENEI "ppSpp" -END - -STRINGTABLE -BEGIN - F_TOHANEI "Spppp" - F_TOHANKATA "SpJ^JipJ^Ji" - F_TABTOSPACE "TAB" - F_SPACETOTAB "󔒁TAB" -END - -STRINGTABLE -BEGIN - F_CODECNV_AUTO2SJIS "ʁSJISR[hϊ" - F_CODECNV_EMAIL "E-Mail(JISSJIS)R[hϊ" - F_CODECNV_EUC2SJIS "EUCSJISR[hϊ" - F_CODECNV_UNICODE2SJIS "UTF-16SJISR[hϊ" - F_CODECNV_UTF82SJIS "UTF-8SJISR[hϊ" - F_CODECNV_UTF72SJIS "UTF-7SJISR[hϊ" - F_CODECNV_UNICODEBE2SJIS "UTF-16BESJISR[hϊ" - F_CODECNV_SJIS2JIS "SJISJISR[hϊ" - F_CODECNV_SJIS2EUC "SJISEUCR[hϊ" - F_CODECNV_SJIS2UTF8 "SJISUTF-8R[hϊ" - F_CODECNV_SJIS2UTF7 "SJISUTF-7R[hϊ" -END - -STRINGTABLE -BEGIN - F_BASE64DECODE "Base64fR[hĕۑ" -END - -STRINGTABLE -BEGIN - F_UUDECODE "uudecodeĕۑ" -END - -STRINGTABLE -BEGIN - F_SEARCH_DIALOG "..." - F_SEARCH_NEXT "" - F_SEARCH_PREV "O" - F_REPLACE_DIALOG "u..." - F_SEARCH_CLEARMARK "}[N̐ؑւ" - F_REPLACE "u" - F_REPLACE_ALL "ׂĒu" - F_SEARCH_BOX " ({bNX)" - F_JUMP_SRCHSTARTPOS "Jnʒu֖߂" - F_GREP_DIALOG "Grep..." - F_GREP "Grep" -END - -STRINGTABLE -BEGIN - F_GREP_REPLACE_DLG "Grepu..." - F_GREP_REPLACE "Grepu" - F_JUMP_DIALOG "wsփWv..." - F_JUMP "wsփWv" -END - -STRINGTABLE -BEGIN - F_OUTLINE "AEgC..." - F_OUTLINE_TOGGLE "AEgC(gO)..." - F_TAGJUMP "^OWv" - F_TAGJUMPBACK "^OWvobN" - F_TAGS_MAKE "^Ot@C̍쐬..." -END - -STRINGTABLE -BEGIN - F_DIRECT_TAGJUMP "_CNg^OWv" - F_TAGJUMP_CLOSE "‚ă^OWv" - F_TAGJUMP_KEYWORD "L[[hw肵ă^OWv..." - F_COMPARE "t@Cer..." -END - -STRINGTABLE -BEGIN - F_BRACKETPAIR "Ίʂ̌" - F_BOOKMARK_SET "ubN}[NݒE" - F_BOOKMARK_NEXT "̃ubN}[N" - F_BOOKMARK_PREV "ÕubN}[N" - F_BOOKMARK_RESET "ubN}[N̑S" - F_BOOKMARK_VIEW "ubN}[N̈ꗗ..." - F_BOOKMARK_PATTERN "Ys}[N" -END - -STRINGTABLE -BEGIN - F_TOGGLE_KEY_SEARCH_OFF "L[[hwv\Ȃ" - F_TOGGLE_KEY_SEARCH_ON "L[[hwv\" - F_SPLIT_V_ON "㉺ɕ" - F_SPLIT_V_OFF "㉺̉" - F_SPLIT_H_ON "Eɕ" - F_SPLIT_H_OFF "Ẻ" - F_CHGMOD_EOL_SUBMENU "͉sR[hw" - F_SPLIT_VH_ON "cɕ" - F_SPLIT_VH_OFF "c̉" - F_BOOKMARK_SUBMENU "ubN}[N" -END - -STRINGTABLE -BEGIN - F_DIFF_DIALOG "DIFF\..." - F_DIFF "DIFF\" - F_DIFF_NEXT "̍" - F_DIFF_PREV "O̍" - F_DIFF_RESET "\̑S" - F_ISEARCH_NEXT "OCN^T[`" - F_ISEARCH_PREV "CN^T[`" - F_ISEARCH_REGEXP_NEXT "K\OCN^T[`" - F_ISEARCH_REGEXP_PREV "K\CN^T[`" - F_ISEARCH_MIGEMO_NEXT "MIGEMOOCN^T[`" - F_ISEARCH_MIGEMO_PREV "MIGEMOCN^T[`" - F_FUNCLIST_NEXT "̊֐Xg}[N" - F_FUNCLIST_PREV "O̊֐Xg}[N" - F_FILETREE "t@Cc[" -END - -STRINGTABLE -BEGIN - F_CHGMOD_INS "}^㏑[h؂ւ" -END - -STRINGTABLE -BEGIN - F_CHG_CHARSET "R[hZbgw..." -END - -STRINGTABLE -BEGIN - F_CHGMOD_EOL_CRLF "͉sR[hw(CRLF)" - F_CHGMOD_EOL_LF "͉sR[hw(LF)" - F_CHGMOD_EOL_CR "͉sR[hw(CR)" -END - -STRINGTABLE -BEGIN - F_CANCEL_MODE "e탂[h̎" - F_SHOWTOOLBAR "c[o[̕\^\" - F_SHOWFUNCKEY "t@NVL[̕\^\" - F_SHOWSTATUSBAR "Xe[^Xo[̕\^\" - F_SHOWTAB "^uo[̕\^\" -END - -STRINGTABLE -BEGIN - F_SHOWMINIMAP "~j}bv̕\^\" - F_TYPE_LIST "^Cvʐݒꗗ..." - F_OPTION_TYPE "^Cvʐݒ..." - F_OPTION "ʐݒ..." - F_FAVORITE "̊Ǘ..." -END - -STRINGTABLE -BEGIN - F_LOADKEYMACRO_REC "L[}N̓ǂݍ" - F_EXECKEYMACRO_REC "L[}N̎s" - F_RECKEYMACRO_APPE "L[}N̋L^I" - F_SAVEKEYMACRO_APPE "L[}N̋L^I&&ۑ" - F_LOADKEYMACRO_APPE "L[}N̋L^I&&ǂݍ" - F_EXECKEYMACRO_APPE "L[}N̋L^I&&s" - F_EXECKEYMACRO_REGD "o^ς݃}N" - F_TOOL_CUSTOM_SUBMENU "JX^j[" - F_SHOWTOOLBAR_ON "c[o[\" - F_SHOWFUNCKEY_ON "t@NVL[\" - F_SHOWTAB_ON "^uo[\" - F_SHOWSTATUSBAR_ON "Xe[^Xo[\" - F_SHOWTOOLBAR_OFF "\̃c[o[B" - F_SHOWFUNCKEY_OFF "\̃t@NVL[B" - F_SHOWTAB_OFF "\̃^uo[B" - F_SHOWSTATUSBAR_OFF "\̃Xe[^Xo[B" -END - -STRINGTABLE -BEGIN - STR_FILETREE_MENU_TEMP "Temp(&T)" - STR_FILETREE_MENU_SAKURA "sakura(&S)" - STR_FILETREE_MENU_SAKURADATA "sakuraf[^(&A)" - STR_FILETREE_REPLACE_PATH_FROM "upXw肵Ă" - STR_FILETREE_REPLACE_PATH_TO "u敶w肵Ă" - F_SHOWMINIMAP_OFF "\̃~j}bvB" - F_SHOWMINIMAP_ON "~j}bv\" - STR_FUCLIST_NEXT_NOT_FOUND "O() Ɋ֐‚܂B" - STR_FUCLIST_PREV_NOT_FOUND "() Ɋ֐‚܂B" - STR_MODLINE_NEXT_NOT_FOUND "O() ɕύXs‚܂B" - STR_MODLINE_PREV_NOT_FOUND "() ɕύXs‚܂B" - STR_GREP_SHOW_MATCH_NOHITLINE " (vȂso)\r\n" - STR_TSV_MODE_NONE "ʏ" - STR_TSV_MODE_TSV "TSV" - STR_TSV_MODE_CSV "CSV" - STR_DLGFNCLST_SORTTYPE1_2 "ftHg(~)" -END - -STRINGTABLE -BEGIN - F_FONT "tHgݒ..." - F_SETFONTSIZE "tHgTCYݒ" - F_SETFONTSIZEUP "tHgTCYg" - F_SETFONTSIZEDOWN "tHgTCYk" -END - -STRINGTABLE -BEGIN - F_WRAPWINDOWWIDTH "܂Ԃ" - F_TMPWRAPNOWRAP "܂ԂȂ" - F_TMPWRAPSETTING "w茅Ő܂Ԃ" - F_TMPWRAPWINDOW "E[Ő܂Ԃ" - F_SELECT_COUNT_MODE "JEg@" -END - -STRINGTABLE -BEGIN - F_RECKEYMACRO "L[}N̋L^Jn^I" - F_SAVEKEYMACRO "L[}N̕ۑ" - F_LOADKEYMACRO "L[}N̓ǂݍ" - F_EXECKEYMACRO "L[}N̎s" - F_EXECEXTMACRO "Ow肵ă}Ns..." -END - -STRINGTABLE -BEGIN - F_EXECMD_DIALOG "OR}hs..." - F_EXECMD "OR}hs" -END - -STRINGTABLE -BEGIN - F_SPLIT_V "㉺ɕ^" - F_SPLIT_H "Eɕ^" -END - -STRINGTABLE -BEGIN - F_SPLIT_VH "cɕ^" - F_WINCLOSE "‚" - F_WIN_CLOSEALL "ׂĕ‚" -END - -STRINGTABLE -BEGIN - F_GROUPCLOSE "O[v‚" - F_NEXTGROUP "̃O[v" - F_PREVGROUP "ÕO[v" - F_TAB_MOVERIGHT "^uEɈړ" - F_TAB_MOVELEFT "^uɈړ" - F_TAB_SEPARATE "VKO[v" - F_TAB_JOINTNEXT "̃O[vɈړ" - F_TAB_JOINTPREV "ÕO[vɈړ" - F_TAB_CLOSEOTHER "̃^u^EBhEȊO‚" - F_TAB_CLOSELEFT "ׂĕ‚" - F_TAB_CLOSERIGHT "Eׂĕ‚" -END - -STRINGTABLE -BEGIN - F_CASCADE "d˂ĕ\" - F_TILE_V "㉺ɕׂĕ\" - F_TILE_H "Eɕׂĕ\" - F_BIND_WINDOW "O[v" - F_TOPMOST "ɎOɕ\" - F_WINLIST "EBhEꗗ..." - F_DLGWINLIST "EBhEꗗ\..." - F_NEXTWINDOW "̃EBhE" - F_PREVWINDOW "ÕEBhE" -END - -STRINGTABLE -BEGIN - F_MAXIMIZE_V "cɍő剻" - F_MINIMIZE_ALL "ׂčŏ" - F_MAXIMIZE_H "ɍő剻" -END - -STRINGTABLE -BEGIN - F_REDRAW "ĕ`" - F_WIN_OUTPUT "AEgvbg" -END - -STRINGTABLE -BEGIN - F_HOKAN "͕⊮" - F_TOGGLE_KEY_SEARCH "L[[hwv\" -END - -STRINGTABLE -BEGIN - F_HELP_CONTENTS "wvڎ" - F_HELP_SEARCH "wvL[[h" - F_MENU_ALLFUNC "R}hꗗ" - F_EXTHELP1 "OwvP" - F_EXTHTMLHELP "OHTMLwv" - F_ABOUT "o[W" -END - -STRINGTABLE -BEGIN - F_MENU_RBUTTON "ENbNj[" -END - -STRINGTABLE -BEGIN - F_CUSTMENU_1 "JX^j[1" - F_CUSTMENU_2 "JX^j[2" - F_CUSTMENU_3 "JX^j[3" -END - -STRINGTABLE -BEGIN - F_CUSTMENU_4 "JX^j[4" - F_CUSTMENU_5 "JX^j[5" - F_CUSTMENU_6 "JX^j[6" - F_CUSTMENU_7 "JX^j[7" - F_CUSTMENU_8 "JX^j[8" - F_CUSTMENU_9 "JX^j[9" - F_CUSTMENU_10 "JX^j[10" - F_CUSTMENU_11 "JX^j[11" - F_CUSTMENU_12 "JX^j[12" - F_CUSTMENU_13 "JX^j[13" - F_CUSTMENU_14 "JX^j[14" - F_CUSTMENU_15 "JX^j[15" - F_CUSTMENU_16 "JX^j[16" - F_CUSTMENU_17 "JX^j[17" - F_CUSTMENU_18 "JX^j[18" - F_CUSTMENU_19 "JX^j[19" -END - -STRINGTABLE -BEGIN - F_CUSTMENU_20 "JX^j[20" - F_CUSTMENU_21 "JX^j[21" - F_CUSTMENU_22 "JX^j[22" - F_CUSTMENU_23 "JX^j[23" - F_CUSTMENU_24 "^uj[" -END - -STRINGTABLE -BEGIN - F_MENU_NOT_USED_FIRST "\\c[o[ܕԁ\\" -END - -STRINGTABLE -BEGIN - F_CHGMOD_EOL "͉sR[hw" - F_TEXTWRAPMETHOD "܂Ԃ@" -END - -STRINGTABLE -BEGIN - F_WINDOW_LIST "EBhEXg" - F_FILE_USED_RECENTLY "ŋߎgt@C" - F_FOLDER_USED_RECENTLY "ŋߎgtH_" - F_CUSTMENU_LIST "JX^j[Xg" - F_USERMACRO_LIST "o^ς݃}NXg" - F_PLUGIN_LIST "vOCR}hXg" -END - -STRINGTABLE -BEGIN - IDS_AUTHOR_PAGE "https://sakura-editor.github.io/" - IDS_ABOUT_DESCRIPTION "̃\tgEFÁueLXgGfB^(J)v̂̂łB\r\npE񏤗p킸ŗpł܂A\[XR[h̒쌠͊eӏLqlۂĂ܂B\r\ñ\tgEFA͖ۏ؂łB\r\n" -END - -STRINGTABLE -BEGIN - STR_SELLANG_NAME "Japanese" - STR_SELLANG_LANGID "0x0411" - STR_SQLERR_EXEC_BUT_NOT_RUN - "Oracle SQL*PlusŎs܂B\n\n\nOracle SQL*PlusNĂ܂B\n" - STR_SQLERR_ACTV_BUT_NOT_RUN - "Oracle SQL*PlusANeBu\܂B\n\n\nOracle SQL*PlusNĂ܂B\n" - STR_ERR_CMPERR "r̃t@C\n%s\n%doCg𒴂s܂B\nrł܂B" - STR_ERR_MACROERR1 "}N̓ǂݍ݂Ɏs܂B\n\n%s" - STR_CMDLINE_PARSECMD1 "%ls\r\nL̃t@C͕słBt@C \\ / : * ? "" < > | ͎̕g܂B " - STR_ERR_CTRLMTX1 "CreateMutex()sB\nI܂B" - STR_ERR_CTRLMTX2 "CreateEvent()sB\nI܂B" - STR_ERR_CTRLMTX3 "EBhE̍쐬Ɏs܂B\nNł܂B" - STR_ERR_CTRLMTX4 "SetEvent()sB\nI܂B" - STR_NO_TITLE1 "()" - STR_NO_TITLE2 "" -END - -STRINGTABLE -BEGIN - STR_SHELL_HHCTRL "HHCTRL.OCX‚܂B\r\nHTMLwv𗘗pɂHHCTRL.OCXKvłB\r\n" - STR_SHELL_INFO "" - STR_SHELL_MENU_OPEN "J(&O)..." - STR_SHELL_MENU_IMPEXP "C|[g^GNX|[g̋N_Zbg(&R)" - STR_SHELL_IMPEXPDIR "eݒ̃C|[g^GNX|[gpt@CIʂ\n\tH_ݒtH_ɖ߂܂B" - STR_SHELL_INIFOLDER "ݒtH_(&/) >>" - STR_ERR_GLOBAL01 "I" - STR_PREVIEW_ONLY "(vr[ł̂ݎgpł܂)" - STR_NOT_SAVED "(ۑĂ܂)" - STR_PROPCOMMON_PLUGIN "vOC" - STR_PROPCOMMON_MAINMENU "Cj[" - STR_PROPCOMMON_STATBAR "Xe[^Xo[" - STR_SPECIAL_FUNC "ʋ@\" -END - -STRINGTABLE -BEGIN - STR_PLGMGR_INST_IDNUM "Plugin.ID̐擪ɐ͎gpł܂" - STR_PLGMGR_INST_NAME "vOCʂ̖OŃCXg[Ă܂B㏑܂H\n@͂@@Vu%svgp\n@@CXg[ς݂́u%lsvgp" - STR_PLGMGR_INST_USERCANCEL "[ULZ" - STR_PLGMGR_INST_MAX "vOCȏo^ł܂" - STR_WSHPLUG_LOADMACRO "}N̓ǂݍ݂Ɏs܂B\n\n%s" - STR_CARET_WITHBOM " BOMt" - STR_MAXWINDOW "ҏWEBhȄ%dłB\nȏ͓ɊJ܂B" - STR_MENU_UNKOWN "%s s(Ȃ)" - STR_PRINT_WAITING "̏Iҋ@Ă܂EEE" - STR_OUTLINE_ERLANG_SCANARGS "COutlineErlang::ScanArgs m̊" - STR_ESI_CHARCODE_DETECT "--R[h-----------\r\n" - STR_ESI_RESULT_STATE "ʌʂ̏\r\n" - STR_ESI_NO_INFO "\tʌʂ擾ł܂B\r\n" - STR_ESI_DETECTED "\t炭ɔ肳܂B\r\n" - STR_ESI_NO_DETECTED "\tR[hoł܂łB\r\n" - STR_ESI_DOC_TYPE "\r\n" -END - -STRINGTABLE -BEGIN - STR_DLGCTRLCODE_CODE "R[h" - STR_DLGCTRLCODE_SYMBOL "\L" - STR_DLGCTRLCODE_NAME "O" - STR_DLGCTRLCODE_DESC "" - STR_ERR_DLGCTL5 "󕶎" - STR_ERR_DLGCTL6 "wb_Jn" - STR_ERR_DLGCTL7 "eLXgJn" - STR_ERR_DLGCTL8 "eLXgI" - STR_ERR_DLGCTL9 "]I" - STR_ERR_DLGCTL10 "Ɖ" - STR_ERR_DLGCTL11 "MOK" - STR_ERR_DLGCTL12 "x(x)" - STR_ERR_DLGCTL13 "" - STR_ERR_DLGCTL14 "^u" - STR_ERR_DLGCTL15 "s" - STR_ERR_DLGCTL16 "^u" -END - -STRINGTABLE -BEGIN - STR_ERR_DLGCTL17 "y[W" - STR_ERR_DLGCTL18 "A" - STR_ERR_DLGCTL19 "VtgAEg" - STR_ERR_DLGCTL20 "VtgC" - STR_ERR_DLGCTL21 "f[^NGXP[v" - STR_ERR_DLGCTL22 "u1" - STR_ERR_DLGCTL23 "u2" - STR_ERR_DLGCTL24 "u3" - STR_ERR_DLGCTL25 "u4" - STR_ERR_DLGCTL26 "Ms" - STR_ERR_DLGCTL27 "" - STR_ERR_DLGCTL28 "]ubNI" - STR_ERR_DLGCTL29 "LZ" - STR_ERR_DLGCTL30 "fBAI" - STR_ERR_DLGCTL31 "u" - STR_ERR_DLGCTL32 "GXP[v" -END - -STRINGTABLE -BEGIN - STR_ERR_DLGCTL33 "tH[" - STR_ERR_DLGCTL34 "O[v" - STR_ERR_DLGCTL35 "R[h" - STR_ERR_DLGCTL36 "jbg" - STR_ERR_DLGCTL37 "폜" - STR_DLGFAV_FILE "t@C" - STR_DLGFAV_FOLDER "tH_" - STR_DLGFAV_SEARCH "" - STR_DLGFAV_REPLACE "u" - STR_DLGFAV_GREP_FILE "GREPt@C" - STR_DLGFAV_GREP_FOLDER "GREPtH_" - STR_DLGFAV_EXT_COMMAND "R}h" - STR_DLGFAV_HIDDEN "(\)" - STR_DLGFAV_FAVORITE "Cɓ" - STR_DLGFAV_CONF_DEL_FAV "ŋߎg%s̗폜܂B\n낵łH\n" - STR_DLGFAV_CONF_DEL_NOTFAV "ŋߎg%ŝ̗CɓȊO폜܂B\n낵łH" -END - -STRINGTABLE -BEGIN - STR_DLGFAV_CONF_DEL_PATH "ŋߎg%s݂̑ȂpX폜܂B\n낵łH" - STR_DLGFAV_DELIMITER "A" - STR_DLGFAV_FAV_REFRESH "(%s)XVꂽߕҏWjĕ\܂B" - STR_DLGFAV_FF_EXCLUDE "t@CEtH_O" - STR_DLGFAV_CURRENT_DIR "JgfBNg" - STR_DLGFAV_ADD "lj" - STR_DLGFAV_ADD_PROMPT "lj镶͂ĂB" - STR_DLGFAV_EDIT "ҏW" - STR_DLGFAV_EDIT_PROMPT "ҏW镶͂ĂB" - STR_DLGFAV_MENU_EDIT "ҏW(&E)" - STR_DLGFAV_MENU_ADD "VKlj(&I)" - STR_DLGFAV_MENU_EXCLUDE "OXgɒlj(&L)" - STR_DLGFAV_MENU_DEL_ALL "ׂč폜(&A)" - STR_DLGFAV_MENU_DEL_NOTFAV "CɓȊO폜(&F)" - STR_DLGFAV_MENU_DEL_INVALID "݂Ȃڍ폜(&N)" - STR_DLGFAV_MENU_DEL_SEL "Iڍ폜(&D)" -END - -STRINGTABLE -BEGIN - STR_DLGFAV_LIST_LIMIT_OVER "OXgςŒljł܂łB" - STR_ERR_DLGUPQRY1 "ă[hsƕύX܂낵ł?" - STR_ERR_DLGUPQRY2 "ă[h܂?" - STR_DLGFIND1 "w肵ĂB" - STR_DLGFNCLST_TITLE_CPP "C++ \bhc[" - STR_DLGFNCLST_TITLE_RULE "[t@C" - STR_DLGFNCLST_TITLE_WZ "WZKwteLXg" - STR_DLGFNCLST_TITLE_TEXT "eLXg gsbNc[" - STR_DLGFNCLST_TITLE_JAVA "Java \bhc[" - STR_DLGFNCLST_TITLE_PYTHON "Python \bhc[" - STR_DLGFNCLST_TITLE_COBOL "COBOL AEgC" - STR_DLGFNCLST_TITLE_VB "Visual Basic AEgC" - STR_DLGFNCLST_TITLE_C "C ֐ꗗ" - STR_DLGFNCLST_TITLE_PLSQL "PL/SQL ֐ꗗ" - STR_DLGFNCLST_TITLE_ASM "AZu AEgC" - STR_DLGFNCLST_TITLE_PERL "Perl ֐ꗗ" -END - -STRINGTABLE -BEGIN - STR_DLGFNCLST_TITLE_ERLANG "Erlang ֐ꗗ" - STR_DLGFNCLST_TITLE_BOOK "ubN}[N" - STR_DLGFNCLST_REMARK01 "錾" - STR_DLGFNCLST_REMARK02 "֐錾" - STR_DLGFNCLST_REMARK03 "vV[W錾" - STR_DLGFNCLST_REMARK04 "֐" - STR_DLGFNCLST_REMARK05 "vV[W" - STR_DLGFNCLST_REMARK06 "pbP[Wdl" - STR_DLGFNCLST_REMARK07 "pbP[W{̕" - STR_DLGFNCLST_REMARK08 "PROC" - STR_DLGFNCLST_REMARK09 "x" - STR_DLGFNCLST_REMARK10 "ENDP" - STR_DLGFNCLST_SORTTYPE1 "ftHg" - STR_DLGFNCLST_SORTTYPE2 "At@xbg" - STR_DLGFNCLST_APND_DECLARE "(錾)" - STR_DLGFNCLST_APND_CLASS " NX" -END - -STRINGTABLE -BEGIN - STR_DLGFNCLST_SORTTYPE2_2 "At@xbg(~)" - STR_DLGFNCLST_MENU_EXPAND "ׂēWJ(&E)" - STR_DLGFNCLST_MENU_COLLAPSE "ׂďk(&O)" - STR_DLGFNCLST_MENU_BOOK_DEL "ubN}[N폜(&D)" - STR_DLGFNCLST_MENU_BOOK_ALL_DEL "ubN}[NS폜(&A)" - STR_KEYHELP_RMENU_NONE "\Ȃ" - STR_KEYHELP_RMENU_TOP "擪ɕ\" - STR_KEYHELP_RMENU_BOTTOM "ɕ\" - STR_ERR_DLGDOCLM_TOOBIG "'%ls'\nƂt@CJ܂B\nt@CTCY傫܂B" - STR_LOADAGENT_BIG_ERROR "'%s'\nƂt@CJ܂B\nt@CTCY傫܂B\n\nwt@C̃TCY: %s\nt@CTCY̏: %s" - STR_ERR_FILEPATH_TOO_LONG "%ls\nƂt@CJ܂B\nt@C̃pX܂B" - STR_GREP_EXCLUDE_FILE "Ot@C " - STR_GREP_EXCLUDE_FOLDER "OtH_ " - STR_FILEDIALOG_READONLY "ǂݎpt@CƂĊJ(&R)" - STR_FILEDIALOG_CODE "R[hZbg(&C):" - STR_FILEDIALOG_EOL "sR[h(&E):" -END - -STRINGTABLE -BEGIN - STR_DLGFNCLST_APND_STRUCT " \" - STR_DLGFNCLST_APND_ENUM " 񋓑" - STR_DLGFNCLST_APND_UNION " p" - STR_DLGFNCLST_APND_NAMESPACE " O" - STR_DLGFNCLST_APND_INTERFACE " C^[tF[X" - STR_DLGFNCLST_APND_GLOBAL "O[o" - STR_DLGFNCLST_VB_STATIC "ÓI " - STR_DLGFNCLST_VB_PRIVATE "vCx[g" - STR_DLGFNCLST_VB_FRIEND "th" - STR_DLGFNCLST_VB_PUBLIC "pubN" - STR_DLGFNCLST_VB_FUNCTION "֐" - STR_DLGFNCLST_VB_PROC "vV[W" - STR_DLGFNCLST_VB_PROPGET "vpeB 擾" - STR_DLGFNCLST_VB_PROPLET "vpeB ݒ" - STR_DLGFNCLST_VB_PROPSET "vpeB Q" - STR_DLGFNCLST_VB_CONST "萔" -END - -STRINGTABLE -BEGIN - STR_DLGFNCLST_VB_ENUM "񋓌^" - STR_DLGFNCLST_VB_TYPE "[U`^" - STR_DLGFNCLST_VB_EVENT "Cxg" - STR_DLGFNCLST_VB_DECL "錾" - STR_DLGFNCLST_LIST_TEXT "eLXg" - STR_DLGFNCLST_LIST_TEXT_M "eLXg *" - STR_DLGFNCLST_LIST_FUNC "֐" - STR_DLGFNCLST_LIST_FUNC_M "֐ *" - STR_DLGFNCLST_LIST_LINE "s" - STR_DLGFNCLST_LIST_LINE_M "s *" - STR_DLGFNCLST_LIST_COL "" - STR_DLGFNCLST_LIST_COL_M " *" - STR_DLGFNCLST_LIST_M "*" - STR_DLGGREP1 "tH_Ił" - STR_DLGGREP2 "t@Cw̃tH_ɂ̓ChJ[h͎g܂B" - STR_DLGGREP3 "t@Cwɂ̓tpX͎g܂" -END - -STRINGTABLE -BEGIN - STR_TYPE_NAME_ASM "AZu" - STR_TYPE_NAME_INI "ݒt@C" - STR_DLGFNCLST_TIP_CLOSE "‚" - STR_DLGFNCLST_TIP_WIN "EBhËʒu" - STR_DLGFNCLST_TIP_UPDATE "XV" - STR_DLGFNCLST_MENU_UPDATE "XV(&U)" - STR_DLGFNCLST_MENU_COPY "Rs[(&C)" - STR_DLGFNCLST_MENU_WINPOS "EBhËʒu(&W)" - STR_DLGFNCLST_MENU_LEFTDOC "hbLO(&L)" - STR_DLGFNCLST_MENU_RIGHTDOC "EhbLO(&R)" - STR_DLGFNCLST_MENU_TOPDOC "hbLO(&T)" - STR_DLGFNCLST_MENU_BOTDOC "hbLO(&B)" - STR_DLGFNCLST_MENU_FLOATING "t[eBO(&F)" - STR_DLGFNCLST_MENU_NODOCK "hbLO֎~(&I)" - STR_DLGFNCLST_MENU_SYNC "hbLOzu𓯊(&S)" - STR_DLGFNCLST_MENU_INHERIT "hbLOzuʌp(&C)" -END - -STRINGTABLE -BEGIN - STR_DLGFNCLST_MENU_TYPE "hbLOzu^Cvʌp(&Y)" - STR_DLGFNCLST_MENU_UNIFY "p𓝈(&U)" - STR_DLGFNCLST_MENU_CLOSE "‚(&X)" - STR_DLGFNCLST_UNIFY "݂̉ʂ̃hbLOzuׂĂ̋ʐݒE^CvʐݒɃRs[ēꂵ܂B\ni݊JĂ鑼ʂ̏Ԃꂵ܂Bj\n" - STR_BREGONIG_LOAD "bregonig.dll ̃[hɎs܂B\r\nK\𗘗pɂ Unicode ł bregonig.dll KvłB\r\n@̓wvQƂĂB" - STR_BREGONIG_INIT "bregonig.dll ̗pɎs܂B\r\nK\𗘗pɂ Unicode ł bregonig.dll KvłB\r\n@̓wvQƂĂB" - STR_BREGONIG_ERROR "bregonig.dll ̃[hŗ\ʃG[܂B" - STR_BREGONIG_TITLE "K\G[" - STR_ERR_CWSH09 "}N̎s𒆒f܂B" - STR_ERR_DLGMACRO03_1 "͉sR[hw肳Ă܂D" - STR_ERR_DLGMACRO16 "lw肵ĂD" - STR_DLLPLG_TITLE "DLLvOC" - STR_DLLPLG_INIT_ERR1 "DLL̓ǂݍ݂Ɏs܂\n%s\n%ls" - STR_DLLPLG_INIT_ERR2 "DLL̓ǂݍ݂Ɏs܂" - STR_PLGMGR_FOLDER "vOCtH_쐬o܂" - STR_PLGMGR_CANCEL "LZ܂" -END - -STRINGTABLE -BEGIN - STR_DLGGREP4 "ΏۃtH_w肵ĂB" - STR_DLGGREP5 "ΏۃtH_܂B" - STR_DLGGREP6 "ΏۃtH_܂B" - STR_DLGJUMP1 "sԍ͂ĂB" - STR_DLGJUMP_PSLQL "%d s %s pbP[Wdl" - STR_DLGOPNFL1 "ϊȂ" - STR_DLGOPNFL2 " ͊ɑ݂܂B\r\n㏑܂H" - STR_DLGOPNFL3 "Otĕۑ" - STR_DLGOPNFL_EXTNAME1 "[U[w" - STR_DLGOPNFL_EXTNAME2 "eLXgt@C" - STR_DLGOPNFL_EXTNAME3 "ׂẴt@C" - STR_DLGOPNFL_ERR1 "_CAOJ܂B\n\nG[:%s" - STR_DLGPRNST1 "ݒ薼̕ύX" -END - -STRINGTABLE -BEGIN - STR_IMPEXP_DIC_LENGTH "̐%dȓɂĂB\n" - STR_IMPEXP_DIC_RECORD "ꕔ̃f[^ǂݍ߂܂ł\nsȍs: %d" - STR_IMPEXP_KEY_FORMAT "L[ݒt@Č`Ⴂ܂B\n\n" - STR_IMPEXP_CUSTMENU_FORMAT "JX^j[ݒt@Č`Ⴂ܂B\n\n" - STR_IMPEXP_KEYWORD "L[[h̐ɒB߁A‚̃L[[hljł܂łB" - STR_IMPEXP_MEINMENU "Cj[ݒt@Č`Ⴂ܂B\n\n" - STR_STRINGESC_CPP "C/C++ꕗ \\""" - STR_STRINGESC_PLSQL "PL/SQL """"" - STR_STRINGESC_HTML "HTML/XML =""""" - STR_STRINGESC_CSHARP "C# @""""" - STR_STRINGESC_PYTHON "Python """"""" - STR_KEY_BIND_WHEEL_UP "zC[Abv" - STR_KEY_BIND_WHEEL_DOWN "zC[_E" - STR_KEY_BIND_WHEEL_LEFT "zC[" - STR_KEY_BIND_WHEEL_RIGHT "zC[E" - STR_DLGPLUGINOPT_LOAD "vOC[hĂ܂B" -END - -STRINGTABLE -BEGIN - STR_DLGPLUGINOPT_TITLE "%ls vOC̐ݒ" - STR_DLGPLUGINOPT_INIHEAD " vOCݒt@C" - STR_DLGPLUGINOPT_OPTION "włIvV܂" - STR_DLGPLUGINOPT_LIST1 "" - STR_DLGPLUGINOPT_LIST2 "l" - STR_DLGPLUGINOPT_SELECT "%s̑I" - STR_DOCOUTLINE_REGEX "K\[\n%ls\nŃG[܂B\n%s" - STR_CHANGE_CHARSET "%s\n̓eLXg̕ύX͗L܂񂪁A\nR[hZbgύXĂ܂B\n‚Oɕۑ܂H" - STR_TITLE_GREP "yGrepz%ls%s" - STR_MENU_GREP "%s yGrepz""%s%s""" - STR_TAB_CAPTION_OUTPUT "yGrepz" - STR_TAB_CAPTION_GREP "yAEgvbgz" - STR_CAPTION_ACTIVE_OUTPUT "AEgvbg" - STR_CAPTION_ACTIVE_UPDATE "(XV)" - STR_CAPTION_ACTIVE_VIEW "(r[[h)" - STR_CAPTION_ACTIVE_OVERWRITE "(㏑֎~)" -END - -STRINGTABLE -BEGIN - STR_DLGPRNST2 "ݒ̖̂͂ĂB" - STR_DLGFLPROP_FILENAME "t@C " - STR_DLGFLPROP_FILETYPE "ݒ̃^Cv " - STR_DLGFLPROP_ENCODING "R[h " - STR_DLGFLPROP_WITH_BOM " BOM t" - STR_DLGFLPROP_LINE_COUNT "s %ds\r\n" - STR_DLGFLPROP_LAYOUT_LINE "CAEgs %ds\r\n" - STR_DLGFLPROP_VIEW_MODE "r[[hŊJĂ܂B\r\n" - STR_DLGFLPROP_MODIFIED "ύXĂ܂B\r\n" - STR_DLGFLPROP_NOT_MODIFIED "ύXĂ܂B\r\n" - STR_DLGFLPROP_CMD_COUNT "\r\nR}hs %d\r\n" - STR_DLGFLPROP_FILE_INFO "--t@C-----------------\r\n" - STR_DLGFLPROP_W_LOCK "Ȃ͂̃t@CAvZX̏㏑֎~[hŃbNĂ܂B\r\n" - STR_DLGFLPROP_RW_LOCK "Ȃ͂̃t@CAvZX̓ǂݏ֎~[hŃbNĂ܂B\r\n" - STR_DLGFLPROP_LOCK "Ȃ͂̃t@CbNĂ܂B\r\n" - STR_DLGFLPROP_NOT_LOCK "Ȃ͂̃t@CbNĂ܂B\r\n" -END - -STRINGTABLE -BEGIN - STR_DLGFLPROP_ATTRIBUTES "t@C " - STR_DLGFLPROP_AT_ARCHIVE "/A[JCu" - STR_DLGFLPROP_AT_COMPRESS "/k" - STR_DLGFLPROP_AT_FOLDER "/tH_" - STR_DLGFLPROP_AT_HIDDEN "/B" - STR_DLGFLPROP_AT_NORMAL "/m[}" - STR_DLGFLPROP_AT_OFFLINE "/ItC" - STR_DLGFLPROP_AT_READONLY "/ǂݎp" - STR_DLGFLPROP_AT_SYSTEM "/VXe" - STR_DLGFLPROP_AT_TEMP "/e|" - STR_DLGFLPROP_CREATE_DT "쐬 " - STR_DLGFLPROP_YMDHMS "%dN%d%d %02d:%02d:%02d" - STR_DLGFLPROP_UPDATE_DT "XV " - STR_DLGFLPROP_ACCESS_DT "ANZX " - STR_DLGFLPROP_DOS_NAME "MS-DOSt@C %s\r\n" - STR_DLGFLPROP_FILE_SIZE "t@CTCY %d oCg\r\n" -END - -STRINGTABLE -BEGIN - STR_DLGREPLC_CLIPBOARD "Nbv{[hɗLȃf[^܂I" - STR_DLGREPLC_STR "w肵ĂB" - STR_DLGREPLC_REPLACE "%dӏu܂B" - STR_DLGREPLC_REPSTR "uw肵ĂB" - STR_DLGSMCLR_BTN1 "F" - STR_DLGSMCLR_BTN2 "wiF" - STR_DLGTAGJMP1 "(ʒm)" - STR_DLGTAGJMP2 "(͌‚܂ł)" - STR_DLGTAGJMP_LIST1 "L[[h" - STR_DLGTAGJMP_LIST2 "Kw" - STR_DLGTAGJMP_LIST3 "sԍ" - STR_DLGTAGJMP_LIST4 "" - STR_DLGTAGJMP_LIST5 "t@C" - STR_DLGTAGJMP_LIST6 "l" - STR_DLGTAGJMP3 "L[[h ..." - STR_DLGTAGMAK_SELECTDIR "^O쐬tH_̑I" -END - -STRINGTABLE -BEGIN - STR_DLGWINSZ_NORMAL "" - STR_DLGWINSZ_MAXIMIZE "ő剻" - STR_DLGWINSZ_MINIMIZE "(ŏ)" - STR_ERR_DLGDOCLM1 "%ls\nƂt@CJ܂B\nt@C݂܂B" - STR_ERR_DLGDOCLM2 "'%ls'\nƂt@CJ܂B\nǂݍ݃ANZX܂B" - STR_ERR_DLGDOCLM3 "'%ls'\nƂt@CJ܂B\ñAvP[VŎgpÔ\܂B" - STR_ERR_DLGDOCLM4 "'%ls'Ƃt@C̓ǂݍݒɃG[܂B\nt@C̓ǂݍ݂𒆎~܂B" - STR_ERR_DLGDOCLM5 "'%ls'\nt@Cۑł܂B\npX݂ȂÃAvP[VŎgpÔ\܂B" - STR_ERR_DLGDOCLM6 "CDocLineMgr::GetAllData()\nmۂɎs܂B\n%doCg" - STR_ERR_DLGDOCLMN1 "sakura: ҂ɋė~G[" - STR_ERR_DLGDRPTGT1 "::RegisterDragDrop()\ns" - STR_TRAY_CREATE "CControlTray::Create()\nEBhENXo^ł܂łB" - STR_TRAY_TYPE_NAME "ݒ%d" - STR_TRAY_EXTHELP1 "OwvPݒ肳Ă܂B\nݒ肵܂?" - STR_TRAY_RESPONSEFILE "X|Xt@C̍쐬Ɏs܂B" - STR_TRAY_CREATEPROC1 "'%s'\nvZX̋NɎs܂B\n%s" -END - -STRINGTABLE -BEGIN - STR_ESI_DEFAULT_CHARCODE "ftHgR[h\r\n" - STR_ESI_SAMPLE_LEN "Tvf[^\r\n" - STR_ESI_SAMPLE_LEN_FORMAT "\t%d oCg\r\n" - STR_ESI_BYTES_AND_POINTS "ŗLoCgƃ|Cg\r\n" - STR_ESI_UTF16LE_B_AND_P "\t\tUTF16LE ŗLoCg %d,\t|Cg %d\r\n" - STR_ESI_UTF16BE_B_AND_P "\t\tUTF16BE ŗLoCg %d,\t|Cg %d\r\n" - STR_ESI_BOM "\t\tBOM ̐ʁ@" - STR_ESI_BOM_UNKNOWN "s\r\n" - STR_ESI_MBC_OTHER_UNICODE "\tMBC LȊO UNICODE t@~\r\n" - STR_ESI_OTHER_B_AND_P "\t\t%d.%s\tŗLoCg %d\t|Cg %d\r\n" - STR_ESI_EUC_ZENKAKU "\t\tEEUCSpJi/EUCSp\t%6.3f\r\n" - STR_ESI_RESULT "茋\r\n" - STR_FILESAVE_CONVERT_ERROR "'%s'\nt@Cۑł܂B\nϊG[܂B" - STR_DLGPROFILE_ERR_WRITE "vtB[ݒ݂̏Ɏs܂B" - STR_DLGPROFILE_NEW_PROF_TITLE "VKvt@C" - STR_DLGPROFILE_NEW_PROF_MSG "vt@C͂Ă" -END - -STRINGTABLE -BEGIN - STR_DLGPROFILE_ERR_INVALID_CHAR "płȂ܂܂Ă܂B" - STR_DLGPROFILE_ERR_ALREADY "łɓÕvt@C܂B" - STR_DLGPROFILE_ERR_FILE "̃t@C邽ߍ쐬ł܂B" - STR_DLGPROFILE_RENAME_TITLE "vt@C̕ύX" - STR_DLGPROFILE_RENAME_MSG "vt@C͂Ă" - STR_DLGPROFILE_ERR_RENAME "O̕ύXɎs܂B\nvt@C͗p̉”\܂B" - STR_PROPCOMTAB_TAB_POS_TOP "" - STR_PROPCOMTAB_TAB_POS_BOTTOM "" - STR_PROPCOMTAB_TAB_POS_LEFT "E" - STR_PROPCOMTAB_TAB_POS_RIGHT "" - STR_TAGJUMP_0 "̃t@CȂ" - STR_TAGJUMP_1 "qbg玟̃t@CȂ" - STR_TAGJUMP_2 "SvŃqbg玟̃t@CȂ" - STR_TAGJUMP_3 "̃t@C" - STR_GREP_REPLACE_TO "u " - STR_GREP_PASTE_CLIPBOAD "(Nbv{[h\t)" -END - -STRINGTABLE -BEGIN - STR_TRAY_CREATEPROC2 "'%s'\nvZX̋NɎs܂B" - STR_TRAY_EXITALL "݊JĂҏWp̃EBhEׂĕ‚ďI܂?" - STR_TRAY_ACCELTABLE "CControlTray::CreateAccelTbl()\nANZ[^ e[u쐬ł܂B\nVXe\[XsĂ܂B" - STR_LOADAGENT_ERR_OPEN "'%s'\nƂt@CJ܂B\nǂݍ݃ANZX܂B" - STR_LOADAGENT_BIG_WARNING "'%s'\nt@CTCY%dMBȏ゠܂BJ܂H" - STR_SAVEAGENT_VIEW_FILE "r[[hł͓t@Cւ̕ۑ͂ł܂B" - STR_SAVEAGENT_OTHER "'%s'\nt@Cۑł܂B\ñEBhEŎgpłB" - STR_ERR_DLGEDITDOC5 "R[h" - STR_ERR_DLGEDITDOC6 "%s\n\ñt@C𕶎R[h %s ŊJƂĂ܂AO͕ʂ̕R[h %s ŊJĂ܂B\nOƓR[hg܂H\n\nE[͂(Y)] %s\nE[(N)]%s\n" - STR_NOT_EXSIST_SAVE "%s\nƂt@C݂͑܂B\n\nt@CۑƂɁAfBXNɂ̃t@C쐬܂B" - STR_BACKUP_ERR_TITLE "t@Cۑ" - STR_BACKUP_ERR_MSG "obNAbv̍쐬Ɏs܂Dt@Cւ̏㏑pčs܂D" - STR_BACKUP_ERR_PATH_CRETE - "obNAbṽpX쐬ɃG[ɂȂ܂B\npX邩sȏłB\nobNAbv쐬ɏ㏑ۑĂ낵łH" - STR_BACKUP_CONFORM_TITLE1 "obNAbv쐬̊mF" - STR_BACKUP_CONFORM_MSG1 "ύXOɁAobNAbvt@C쐬܂B\n낵łH [(N)] IԂƍ쐬ɏ㏑i܂͖OtājۑɂȂ܂B\n\n%s\n \n%s\n\n쐬obNAbvt@Cݔɕ荞݂܂B\n" - STR_BACKUP_CONFORM_TITLE2 "obNAbv쐬̊mF" -END - -STRINGTABLE -BEGIN - STR_BACKUP_CONFORM_MSG2 "ύXOɁAobNAbvt@C쐬܂B\n낵łH [(N)] IԂƍ쐬ɏ㏑i܂͖OtājۑɂȂ܂B\n\n%s\n \n%s\n\n" - STR_BACKUP_ERR_DELETE "폜s" - STR_BACKUP_ERR_MOVE "ړs" - STR_ERR_DLGEDITDOC21 "%s\n͌ݑ̃vZXɂď݂֎~Ă܂B" - STR_EXCLU_DENY_READWRITE "ǂݏ֎~" - STR_EXCLU_DENY_WRITE "㏑֎~" - STR_EXCLU_UNDEFINED "`̃[hi肪܂j" - STR_FILE_LOCK_ERR "%s\n%sŃbNł܂łB\ñ݂t@Cɑ΂r͖ƂȂ܂B" - STR_ERR_DLGEDITDOC30 "%s\n͕ύXĂ܂B ‚Oɕۑ܂H\n\nr[[hŊJĂ̂ŁAOtĕۑ΂Ǝv܂B\n" - STR_ERR_DLGEDITDOC31 "%s\n͕ύXĂ܂B ‚Oɕۑ܂H" - STR_AUTORELOAD_NOFITY "t@CXV %02d:%02d:%02d" - STR_OUTLINE_CPP_NONAME "" - STR_OUTLINE_CPP_DEFPOS "::`ʒu" - STR_OUTLINE_PYTHON_UNDEFINED "̖" - STR_OUTLINE_PYTHON_CLASS " NX" - STR_OUTLINE_JAVA_DEFPOS "`ʒu" -END - -STRINGTABLE -BEGIN - STR_WRAP_WIDTH_FULL "܂Ԃ: %d iőj" - STR_WRAP_WIDTH_WINDOW "܂Ԃ: %d iE[j" - STR_WRAP_WIDTH_FIXED "܂Ԃ: %d iwj" - STR_EXCLU_NO_EXCLUSIVE "Ȃ" - STR_TAB_SYMBOL_CHARA "w" - STR_TAB_SYMBOL_SHORT_ARROW "Z" - STR_TAB_SYMBOL_LONG_ARROW "" - STR_CODECHECKER_EOL_UNIFY "sR[h݂Ă܂B\r\n݂͉̓sR[h %s ɓꂵ܂H" - STR_CODECHECKER_CONFORM_LOSESOME - "GR[h %s ŕۑ悤ƂĂ܂A\r\nR[hϊɂꕔ̕񂪎܂B\r\nۑ𑱍s܂H\nŏ̏ꏊ %ds %s [%ls]%s\nLZ=YʒuɈړ" - STR_CODECHECKER_LOSESOME_SAVE "ꕔ̕񂪁AZ[u̕ϊɂ莸܂" - STR_CODECHECKER_LOSESOME_ROAD "ꕔ̕񂪁A[h̕ϊɂ莸܂" - STR_SUPPORT_NOT_COMPLITE "⊮Ώۂ܂" - STR_CONVERT_ERR "ϊŃG[܂" -END - -STRINGTABLE -BEGIN - STR_VIEW_TIMER "CEditView::Create()\n^C}[Nł܂B\nVXe\[XsĂ̂܂B" - STR_ERR_DLGEDITVW2 "" - STR_ERR_DLGEDITVW5 "\n--------------------\n" - STR_ERR_DLGEDITVW6 "" - STR_MENU_KEYWORDINFO "L[[h̐Nbv{[hɃRs[" - STR_MENU_OPENKEYWORDDIC "L[[hJ" - STR_STATUS_ROW_COL "%5d s %4d " - STR_INS_MODE_INS "}" - STR_INS_MODE_OVR "㏑" - STR_GREP_SEARCH_CONDITION "\r\n " - STR_GREP_SEARCH_FILE "ut@Cv\r\n" - STR_GREP_SEARCH_TARGET "Ώ " - STR_GREP_SEARCH_FOLDER "tH_ " - STR_GREP_SUBFOLDER_YES " (TutH_)\r\n" - STR_GREP_SUBFOLDER_NO " (TutH_Ȃ)\r\n" - STR_GREP_COMPLETE_WORD " (PPʂŒT)\r\n" -END - -STRINGTABLE -BEGIN - STR_GREP_CASE_SENSITIVE " (p啶ʂ)\r\n" - STR_GREP_IGNORE_CASE " (p啶ʂȂ)\r\n" - STR_GREP_REGEX_DLL " (K\:" - STR_GREP_CHARSET_AUTODETECT " (R[hZbg̎)\r\n" - STR_GREP_CHARSET " (R[hZbgF" - STR_GREP_SHOW_MATCH_LINE " (vso)\r\n" - STR_GREP_SHOW_MATCH_AREA " (vӏ̂ݏo)\r\n" - STR_GREP_SUSPENDED "f܂B\r\n" - STR_GREP_MATCH_COUNT "%d ‚܂B\r\n" - STR_GREP_RUNNINNG "Grep̏łB\n" - STR_GREP_TIMER ": %d~b\r\n" - STR_GREP_SHOW_FIRST_MATCH " (t@Cŏ̂݌)\r\n" - STR_GREP_ERR_ENUMKEYS0 "(s)" - STR_GREP_ERR_ENUMKEYS1 "t@Cw̃tH_ɂ̓ChJ[h͎g܂" - STR_GREP_ERR_ENUMKEYS2 "t@Cwɂ̓tpX͎g܂" - STR_GREP_ERR_FILEOPEN "file open error [%s]\r\n" -END - -STRINGTABLE -BEGIN - STR_GREP_SHOW_FIRST_LINE " (vs̍ŏ̉ӏ̂ݏo)\r\n" - STR_GREP_REPLACE_COUNT "%d ‚u܂B\r\n" - STR_GREP_REP_ERR_DELETE "t@C̍폜Ɏs܂B" - STR_GREP_REP_ERR_REPLACE "t@C̒uɎs܂B" - STR_GREP_ERR_FILEWRITE "߂܂łB [%s]\r\n" - STR_ERR_DLGMACRO17 "GREPuオw肳Ă܂D" - STR_FILETREE_FROM_COMMON "ݒ: ʐݒ" - STR_FILETREE_FROM_TYPE "ݒ: ^Cvʐݒ" - STR_FILETREE_FROM_FILE "ݒ: %s" - STR_FILETREE_CURDIR "" - STR_FILETREE_MAXCOUNT "ő吔(%d)𒴂ߐ؂̂Ă܂" - STR_FILETREE_MENU_ROOT "INI[g(&I)" - STR_FILETREE_MENU_MYDOC "}C hLg(&Y)" - STR_FILETREE_MENU_MYMUSIC "}C ~[WbN(&M)" - STR_FILETREE_MENU_MYVIDEO "}C rfI(&V)" - STR_FILETREE_MENU_DESK "fXNgbv(&D)" -END - -STRINGTABLE -BEGIN - STR_GREP_ERR_FILEREAD "t@C̓ǂݍݒɃG[܂B[%s]\r\n" - STR_EDITVIEW_EXECCMD_ERR "R}hs͎s܂B" - STR_EDITVIEW_EXECCMD_STOP "\r\nf܂B\r\n" - STR_EDITVIEW_EXECCMD_RET "\r\nIR[h: %d\r\n" - STR_ERR_DLGEDITVWHOKAN1 "⊮ꗗt@Cݒ肳Ă܂B\nݒ肵܂?" - STR_EDITVWISRCH_REGEX "K\Cugpł܂B" - STR_EDITVWISRCH_MIGEGO1 "MIGEMO.DLLgpł܂B" - STR_EDITVWISRCH_MIGEGO2 "MIGEMO͎gpł܂B" - STR_EDITVWISRCH_NOMATCH " (‚܂)" - STR_ERR_MACRO1 "}N %d (%s) ̎sɎs܂B" - STR_ERR_SRPREV1 "Č܂" - STR_ERR_SRPREV2 "‚܂ł" - STR_ERR_SRPREV3 "() ɕ '%ls' P‚‚܂B" - STR_ERR_SRNEXT1 "擪Č܂" - STR_ERR_SRNEXT2 "‚܂ł" - STR_ERR_SRNEXT3 "O() ɕ '%ls' P‚‚܂B" -END - -STRINGTABLE -BEGIN - STR_ERR_UNINDENT1 "tCfg͑Î" - STR_ERR_TAGJMP1 "^OWvł܂" - STR_ERR_TAGJMPBK1 "^OWvobNł܂" - STR_ERR_CEDITVIEW_CMD01 "OwvPݒ肳Ă܂B\nݒ肵܂?" - STR_ERR_CEDITVIEW_CMD02 "OHTMLwvݒ肳Ă܂B\nݒ肵܂?" - STR_ERR_CEDITVIEW_CMD03 "^O쐬R}hs͎s܂B\n\nCTAGS.EXE ‚܂B" - STR_ERR_CEDITVIEW_CMD04 "^O쐬R}hs͎s܂B\n\n%s" - STR_ERR_CEDITVIEW_CMD05 "^Ot@C쐬łB" - STR_ERR_CEDITVIEW_CMD06 "^O쐬R}hs͎s܂B\n\n%hs" - STR_ERR_CEDITVIEW_CMD07 "^Ot@C̍쐬I܂B" - STR_ERR_CEDITVIEW_CMD08 "C/C++wb_t@C̃I[vɎs܂B" - STR_ERR_CEDITVIEW_CMD09 "C/C++\[Xt@C̃I[vɎs܂B" - STR_ERR_CEDITVIEW_CMD10 "Nbv{[hɗLȃf[^܂I" - STR_ERR_CEDITVIEW_CMD11 "Ō܂Œu܂B" - STR_ERR_CEDITVIEW_CMD14 "t@C݂̏Ɏs܂B\n\n%s" - STR_ERR_CEDITVIEW_CMD16 "t@C݂̏Ɏs܂B\n\n%s" -END - -STRINGTABLE -BEGIN - STR_ERR_CEDITVIEW_CMD18 "%s\n͕ύXĂ܂B Oracle SQL*PlusŎsOɕۑ܂H" - STR_ERR_CEDITVIEW_CMD20 "Oracle SQL*Plus̔܂B\n΂炭҂ĂĂюsĂB" - STR_ERR_CEDITVIEW_CMD21 "SQLt@CɕۑȂOracle SQL*PlusŎsł܂B\n" - STR_ERR_CEDITVIEW_CMD22 "قȂӏ͌‚܂łB" - STR_ERR_CEDITVIEW_CMD23 "قȂӏ‚܂B" - STR_ERR_CEDITVIEW_CMD24 "}Nt@C쐬ł܂łB\nt@C̎擾G[ nRet=%d" - STR_ERR_CEDITVIEW_CMD25 "}Nt@C쐬ł܂łB\n\n%s" - STR_ERR_CEDITVIEW_CMD26 "ۑ”\ȃ}N܂DL[{[h}NȊO͕ۑł܂D" - STR_ERR_CEDITVIEW_CMD27 "}Nt@C쐬ł܂łB\n\n%s" - STR_ERR_CEDITVIEW_CMD28 "t@CJ܂łB\n\n%s" - STR_ERR_CEDITVIEW_CMD29 "%s\n\ñt@C͕ύXĂ܂B\nă[hsƕύX܂A낵ł?" - STR_BOOKMARK_NEXT_NOT_FOUND "O() ɃubN}[N‚܂B" - STR_BOOKMARK_PREV_NOT_FOUND "() ɃubN}[N‚܂B" - STR_ERR_DLGEDITVWCMDNW7 "%ds}[W܂B" - STR_ERR_DLGEDITVWCMDNW8 "}[W”\ȍs݂‚܂łB" - STR_SAVEAGENT_OTHER_APP "'%s'\nt@Cۑł܂B\npX݂ȂÃAvP[VŎgpÔ\܂B" -END - -STRINGTABLE -BEGIN - STR_ERR_DLGEDITVWCMDNW11 "t@C̏ݒɃG[܂B" - STR_ERR_DLGEDITVWCMDNW12 "t@C̓ǂݍݒɃG[܂B" - STR_ERR_DLGEDITVWDIFF1 "R}hs͎s܂B\n\nrt@C‚܂B" - STR_ERR_DLGEDITVWDIFF2 "R}hs͎s܂B\n\nDIFF.EXE ‚܂B" - STR_ERR_DLGEDITVWDIFF3 "R}hs͎s܂B\n\n%ls" - STR_ERR_DLGEDITVWDIFF4 "DIFFsƂt@C̓oCit@CłB" - STR_ERR_DLGEDITVWDIFF5 "DIFF͌‚܂łB" - STR_DIFF_NEXT_NOT_FOUND "O() ɍ‚܂B" - STR_DIFF_PREV_NOT_FOUND "() ɍ‚܂B" - STR_DIFF_FAILED "R}hs͎s܂B" - STR_DIFF_FAILED_TEMP "R}hs͎s܂B\n\nꎞt@C쐬ł܂B" - STR_DIFF_FAILED_LONG "R}hs͎s܂B\n\ns܂B" - STR_VIEW_MOUSE_BUG "oOĂ" - STR_VIEW_MOUSE_MENU_PATH "pX\t(&P)" - STR_VIEW_MOUSE_MENU_FILE "t@C\t(&F)" - STR_VIEW_MOUSE_MENU_OPEN "t@CJ(&O)" -END - -STRINGTABLE -BEGIN - STR_VIEW_MOUSE_MENU_CANCEL "LZ" - STR_ERR_DLGEDITWND01 "CEditWnd::CreateAccelTbl()\nANZ[^ e[u쐬ł܂B\nVXe\[XsĂ܂B" - STR_ERR_DLGEDITWND02 "GfB^Ԃ̑ΘbɎs܂B\nẍقȂGfB^ɋNÔ\܂B" - STR_ERR_DLGEDITWND03 "CEditWnd::Create()\n^C}[Nł܂B\nVXe\[XsĂ̂܂B" - STR_ERR_DLGEDITWND04 "Rebar ̍쐬Ɏs܂B" - STR_ERR_DLGEDITWND05 "c[o[̍쐬Ɏs܂B" - STR_EDITWND_MENU_NEL "͉sR[hw(&NEL)" - STR_EDITWND_MENU_LS "͉sR[hw(L&S)" - STR_EDITWND_MENU_PS "͉sR[hw(&PS)" - STR_ERR_DLGEDITWND13 ":\t\t%ls (%s)\n\nSJIS:\t\t%s\nJIS:\t\t%s\nEUC:\t\t%s\nLatin1:\t\t%s\nUTF-16:\t\t%s\nUTF-8:\t\t%s\nCESU-8:\t\t%s" - STR_ERR_DLGEDITWND14 "vr[sOɁAv^CXg[ĂB\n" - STR_MENU_OUTPUT "%s AEgvbg" - STR_ERR_DLGEDITWND20 "99999 L 9999 C" - STR_ERR_DLGEDITWND21 "CFLF" - STR_ERR_DLGEDITWND22 "0000" -END - -STRINGTABLE -BEGIN - STR_ERR_DLGEDITWND23 "UTF-16 BOMt" - STR_ERR_DLGEDITWND24 "REC" - STR_ERR_DLGEDITWND25 "㏑" - STR_ERR_DLGFUNCKEYWN1 "CFuncKeyWnd::Open()\n^C}[Nł܂B\nVXe\[XsĂ̂܂B" - STR_ERR_DLGFUNCLKUP01 "O}N" - STR_ERR_DLGFUNCLKUP02 "JX^j[" - STR_ERR_DLGFUNCLKUP03 "}N %d (o^)" - STR_ERR_DLGFUNCLKUP04 "t@Cn" - STR_ERR_DLGFUNCLKUP05 "ҏWn" - STR_ERR_DLGFUNCLKUP06 "J[\ړn" - STR_ERR_DLGFUNCLKUP07 "In" - STR_ERR_DLGFUNCLKUP08 "`In" - STR_ERR_DLGFUNCLKUP09 "Nbv{[hn" - STR_ERR_DLGFUNCLKUP10 "}n" - STR_ERR_DLGFUNCLKUP11 "ϊn" - STR_ERR_DLGFUNCLKUP12 "n" -END - -STRINGTABLE -BEGIN - STR_ERR_DLGFUNCLKUP13 "[h؂ւn" - STR_ERR_DLGFUNCLKUP14 "ݒn" - STR_ERR_DLGFUNCLKUP15 "}Nn" - STR_ERR_DLGFUNCLKUP16 "EBhEn" - STR_ERR_DLGFUNCLKUP17 "x" - STR_ERR_DLGFUNCLKUP18 "̑" - STR_ERR_DLGFUNCLKUP19 "vOC" - STR_ERR_DLGKEYBIND1 "L[\t@\\t֐\t@\ԍ\tL[}NL^/s" - STR_ERR_DLGKEYBIND2 "---O`ĂȂ-----" - STR_ERR_DLGKEYMACMGR1 "//L[{[h}Ñt@C\r\n" - STR_ERR_DLGKEYMACMGR2 "Macroǂݍ݃G[" - STR_ERR_DLGKEYMACMGR3 "Line %d: Column %d: ܂\n" - STR_ERR_DLGKEYMACMGR4 "Line %d: Column %d\r\n֐%ls%dԖڂ̈ɕ͒u܂D" - STR_ERR_DLGKEYMACMGR5 "Line %d:\r\n֐%ls%dԖڂ̈̏I%lc܂D" - STR_ERR_DLGKEYMACMGR6 "Line %d: Column %d\r\n֐%ls%dԖڂ̈ɐl͒u܂D" - STR_ERR_DLGKEYMACMGR7 "Line %d: Column %d: Syntax Error\n" -END - -STRINGTABLE -BEGIN - STR_ERR_DLGKEYMACMGR8 "Line %d: %ls݂͑Ȃ֐łD\n" - STR_ERR_DLGMACRO01 "CMacro::GetFuncInfoByID()ɁAoÔŃG[o܂\r\n" - STR_ERR_DLGMACRO02 "MacrosG[" - STR_ERR_DLGMACRO03 "}ׂR[hw肳Ă܂D" - STR_ERR_DLGMACRO04 "()w肳Ă܂D" - STR_ERR_DLGMACRO05 "Wvsԍw肳Ă܂D" - STR_ERR_DLGMACRO06 "}[Ns̃p^[w肳Ă܂D" - STR_ERR_DLGMACRO07 "()w肳Ă܂D" - STR_ERR_DLGMACRO08 "t@Cw肳Ă܂D" - STR_ERR_DLGMACRO09 "up^[w肳Ă܂D" - STR_ERR_DLGMACRO10 "up^[w肳Ă܂D" - STR_ERR_DLGMACRO11 "GREPp^[w肳Ă܂D" - STR_ERR_DLGMACRO12 "t@Cʂw肳Ă܂D" - STR_ERR_DLGMACRO13 "tH_w肳Ă܂D" - STR_ERR_DLGMACRO14 "ǂݍ݃t@Cw肳Ă܂D" - STR_ERR_DLGMACRO15 "ۑt@Cw肳Ă܂D" -END - -STRINGTABLE -BEGIN - STR_ERR_DLGMEM1 "CMemory::AllocBuffer(nNewDataLen==%d)\nmۂɎs܂B\n" - STR_ERR_DLGNRMPROC1 "CreateMutex()sB\nI܂B" - STR_ERR_DLGNRMPROC2 "GfB^܂̓VXerW[ԂłB\n΂炭҂ĊJȂĂB" - STR_ERR_DLGPPA1 "PPAsɐVPPA}NĂяoƂ͂ł܂" - STR_ERR_DLGPPA2 "֐̎sG[\n%hs" - STR_ERR_DLGPPA3 "sȊ֐̎sG[(oOł)\nFunc_ID=%d" - STR_ERR_DLGPPA4 "ڍוs̃G[" - STR_ERR_DLGPPA5 "`̃G[\nError_CD=%d\n%s" - STR_ERR_DLGPPA6 "G[񂪕s" - STR_ERR_DLGPPA7 "PPAsG[" - STR_ERR_CPRINT01 "OpenPrinter()ɎsB\nv^foCX=[%s]" - STR_ERR_CPRINT02 "StartDoc()ɎsB\nv^foCX=[%s]" - STR_ERR_CPRINT03 "s" - STR_ERR_DLGPRNPRVW1 "" - STR_ERR_DLGPRNPRVW2 "c" - STR_ERR_DLGPRNPRVW3 "݂̃v^ %s ł́A\nw肳ꂽp %s ͎gpł܂B\np”\ȗp %s ɕύX܂B" -END - -STRINGTABLE -BEGIN - STR_ERR_DLGPRNPRVW4 "\y[Wԍw肵ĂB(1 - %d)" - STR_ERR_DLGPRNPRVW5 "vr[y[Ww" - STR_ERR_DLGPRNPRVW6 "%d/%d" - STR_ERR_DLGPRNPRVW7 "y[W܂B" - STR_ERR_DLGPRNPRVW3_1 "y[WݒG[:󎚉”\̈悪܂" - STR_ERR_DLGPROCESS1 "قȂo[W̃GfB^𓯎ɋN邱Ƃ͂ł܂B" - STR_ERR_DLGPROCFACT1 "̃AvP[Vsɂ́A\nWindows95ȏ ܂ WindowsNT4.0ȏOSKvłB\nAvP[VI܂B" - STR_ERR_DLGPROCFACT2 "OS̃o[W擾ł܂B\nAvP[VI܂B" - STR_ERR_DLGPROCFACT3 "'%s'\nvZX̋NɎs܂B\n%s" - STR_ERR_DLGPROCFACT4 "'%ls'\nRg[vZX̋NɎs܂B" - STR_ERR_DLGPROCFACT5 "GfB^܂̓VXerW[ԂłB\n΂炭҂ĊJȂĂB" - STR_PROPCOMBK_SEL_FOLDER "obNAbv쐬tH_Ił" - STR_PROPCOMBK_DUSTBOX "(S~)" - STR_PROPCOMCUSTMENU_SEP " " - STR_PROPCOMCUSTMENU_AC1 "j[ACẽANZXL[ݒ" - STR_PROPCOMCUSTMENU_AC2 "L[͂ĂB" -END - -STRINGTABLE -BEGIN - STR_DLGABOUT_APPNAME "TNGfB^" - STR_DLGEXEC_SELECT_CURDIR "JgfBNgIł" - STR_PROPEDIT_SELECT_DIR "t@C_CAO̎wtH_̑I" - STR_DLGTYPEASC_IMPORT "--̂܂܃C|[g--" - STR_PROPCOMMAINMENU_EDIT "ҏWĂ" - STR_PROPCOMMAINMENU_SEP "\\\\\\\\\\" - STR_PROPCOMMAINMENU_ACCKEY1 "j[ACẽANZXL[ݒ" - STR_PROPCOMMAINMENU_ACCKEY2 "L[͂ĂB" - STR_PROPCOMMAINMENU_CLEAR "j[̐ݒNA܂B\n낵łH" - STR_PROPCOMMAINMENU_INIT "j[̐ݒԂɖ߂܂B\n낵łH" - STR_PROPCOMMAINMENU_DEL "IĂ鍀ڂʍڂƍ폜܂B\n낵łH" - STR_PROPCOMMAINMENU_OK "肠܂łB" - STR_PROPCOMMAINMENU_ERR1 "j[ݒ̎擾Ɏs܂" - STR_PROPCOMMAINMENU_ERR2 "wʐݒxL܂B\n" - STR_PROPCOMMAINMENU_ERR3 "gbvx̍ڐ܂B\n" - STR_PROPCOMMAINMENU_ERR4 "o^ڐ܂B\n" -END - -STRINGTABLE -BEGIN - STR_PROPCOMFNM_LIST1 "uO" - STR_PROPCOMFNM_LIST2 "u" - STR_PROPCOMFNM_ERR_REG "ȏo^ł܂B" - STR_PROPCOMGREP_DLL "K\͎gpł܂" - STR_PROPCOMHELP_MIGEMODIR "tH_Ił" - STR_PROPCOMKEYBIND_UNASSIGN "t" - STR_PROPCOMKEYWORD_ERR_LEN "L[[h̒%doCg܂łłB" - STR_PROPCOMKEYWORD_SETMAX "Zbg%d‚܂ło^ł܂B\n" - STR_PROPCOMKEYWORD_SETNAME1 "L[[h̃Zbglj" - STR_PROPCOMKEYWORD_SETNAME2 "Zbg͂ĂB" - STR_PROPCOMKEYWORD_SETDEL - "u%lsṽZbg폜܂B\n낵łH\n폜悤ƂZbǵAȉ̃t@C^CvɊ蓖ĂĂ܂B\n폜Zbg͖ɂȂ܂B\n\n%s" - STR_PROPCOMKEYWORD_RENAME1 "Zbg̖̕ύX" - STR_PROPCOMKEYWORD_RENAME2 "Zbg͂ĂB" - STR_PROPCOMKEYWORD_KEYMAX "o^łL[[hɒBĂ܂B\n" - STR_PROPCOMKEYWORD_KEYADD1 "L[[hlj" - STR_PROPCOMKEYWORD_KEYADD2 "L[[h͂ĂB" -END - -STRINGTABLE -BEGIN - STR_ERR_DLGPROPCOMMON24 "CPropCommon::DoPropertySheet()ŃG[o܂B\npsh.nStartPage=[%d]\n::PropertySheet()s\n\n%s\n" - STR_PROPCOMGEN_FILE1 "ŋߎgt@C̗폜܂B\n낵łH\n" - STR_PROPCOMGEN_FILE2 "ŋߎgt@C̗폜܂B\n" - STR_PROPCOMGEN_DIR1 "ŋߎgtH_̗폜܂B\n낵łH\n" - STR_PROPCOMGEN_DIR2 "ŋߎgtH_̗폜܂B\n" - STR_PROPCOMTOOL_ERR01 "Toolbar Dialog: vf̑}Ɏs܂B(%d:%d)" - STR_PROPCOMTOOL_ERR02 "Toolbar Dialog: INS: l̐ݒɎs܂B:%d" - STR_PROPCOMTOOL_ERR03 "Toolbar Dialog: vf̒ljɎs܂B(%d:%d)" - STR_PROPCOMTOOL_ERR04 "Toolbar Dialog: ADD: l̐ݒɎs܂B:%d" - STR_PROPCOMTOOL_ERR05 "Toolbar Dialog: vf̒ljɎs܂B:%d" - STR_PROPCOMTOOL_ITEM1 "" - STR_PROPCOMTOOL_ITEM2 "\\c[o[ܕԁ\\" - STR_PROPCOMTOOL_ITEM3 "s@" - STR_OUTLINE_CPP "C/C++" - STR_OUTLINE_PLSQL "PL/SQL" - STR_OUTLINE_JAVA "Java" -END - -STRINGTABLE -BEGIN - STR_PROPCOMKEYWORD_KEYEDIT1 "L[[hҏW" - STR_PROPCOMKEYWORD_KEYEDIT2 "L[[hҏWĂB" - STR_PROPCOMKEYWORD_DEL "݂̐ݒł͋L[[hƂĕ\łȂL[[h폜܂H" - STR_PROPCOMKEYWORD_INFO "(ő %d , o^ %d, %d )" - STR_PROPCOMMACR_LIST1 "ԍ" - STR_PROPCOMMACR_LIST2 "}N" - STR_PROPCOMMACR_LIST3 "t@C" - STR_PROPCOMMACR_LIST4 "sɓǂݍ" - STR_PROPCOMMACR_LIST5 "s" - STR_PROPCOMMACR_SEL_DIR "MacrofBNg̑I" - STR_PROPCOMMON_GENERAL "S" - STR_PROPCOMMON_WINDOW "EBhE" - STR_PROPCOMMON_TABS "^uo[" - STR_PROPCOMMON_EDITING "ҏW" - STR_PROPCOMMON_FILE "t@C" - STR_PROPCOMMON_BACKUP "obNAbv" -END - -STRINGTABLE -BEGIN - STR_PROPCOMMAINMENU_ERR5 "dANZXL[܂B\n" - STR_PROPCOMMAINMENU_ERR6 "ݒ̃ANZXL[܂B\n" - STR_PROPCOMPLG_ERR1 "vOC͂̃EBhEœǂݍ܂ĂȂAtH_قȂ邽\nݒύXł܂" - STR_PROPCOMPLG_ERR2 "ReadMet@CJ܂" - STR_PROPCOMPLG_ERR3 "ReadMet@C‚܂ " - STR_PROPCOMPLG_STATE1 "lj" - STR_PROPCOMPLG_STATE2 "XV" - STR_PROPCOMPLG_STATE3 "~" - STR_PROPCOMPLG_STATE4 "ғ" - STR_PROPCOMPLG_STATE5 "폜" - STR_PROPCOMPLG_STATE6 "`" - STR_PROPCOMPLG_LOAD "Ǎ" - STR_PROPCOMPLG_LIST1 "ԍ" - STR_PROPCOMPLG_LIST2 "vOC" - STR_PROPCOMPLG_LIST3 "" - STR_PROPCOMPLG_LIST4 "Ǎ" -END - -STRINGTABLE -BEGIN - STR_PROPCOMMON_FORMAT "" - STR_PROPCOMMON_SEARCH "" - STR_PROPCOMMON_KEYS "L[蓖" - STR_PROPCOMMON_CUSTMENU "JX^j[" - STR_PROPCOMMON_TOOLBAR "c[o[" - STR_PROPCOMMON_KEYWORD "L[[h" - STR_PROPCOMMON_SUPPORT "x" - STR_PROPCOMMON_MACRO "}N" - STR_PROPCOMMON_FILENAME "t@C\" - STR_SCROLL_WITH_NO_KEY "gݍ킹Ȃ" - STR_SCROLL_WITH_MID_BTN "}EX{^" - STR_SCROLL_WITH_SIDE_1_BTN "}EXTCh{^1" - STR_SCROLL_WITH_SIDE_2_BTN "}EXTCh{^2" - STR_SCROLL_WITH_CTRL_KEY "CONTROLL[" - STR_SCROLL_WITH_SHIFT_KEY "SHIFTL[" - STR_PROPCOMMON "ʐݒ" -END - -STRINGTABLE -BEGIN - STR_PROPCOMPLG_LIST5 "tH_" - STR_PROPCOMPLG_DELETE "%ls 폜܂" - STR_DLGTYPELIST_ERR1 "֘AtɎs܂\n" - STR_DLGTYPELIST_ERR2 "֘AtɎs܂\n" - STR_DLGTYPELIST_INIT1 "%s ܂B 낵łH" - STR_DLGTYPELIST_SETNAME "ݒ%d" - STR_DLGTYPELIST_INIT2 "%s ܂B" - STR_DLGTYPELIST_DEL "%s 폜܂B 낵łH" - STR_DLGTYPELIST_ACC "Windows̊֘AtݒύX悤ƂĂ܂B\n͓̑ݒ𗘗p鑼̃\tgɂe^”\܂B\n{܂H" - STR_IMAGE_POS1 "" - STR_IMAGE_POS2 "E" - STR_IMAGE_POS3 "" - STR_IMAGE_POS4 "E" - STR_IMAGE_POS5 "" - STR_IMAGE_POS6 "" - STR_IMAGE_POS7 "" -END - -STRINGTABLE -BEGIN - STR_IMAGE_POS8 "" - STR_IMAGE_POS9 "E" - STR_PROPCOMTAB_DISP_NO "Ȃ" - STR_PROPCOMTAB_DISP_ALLWAYS "ɕ\" - STR_PROPCOMTAB_DISP_AUTO "\" - STR_IMPEXP_ERR_FILEOPEN "t@CJ܂łB\n\n" - STR_IMPEXP_ERR_EXPORT "GNX|[go܂łB\n\n" - STR_IMPEXP_OK_EXPORT "t@CGNX|[g܂B\n\n" - STR_IMPEXP_OK_IMPORT "t@CC|[g܂B\n\n" - STR_IMPEXP_ERR_COLOR_OLD "Fݒt@Č`Ⴂ܂BÂ`̓T|[gȂȂ܂B\n" - STR_IMPEXP_ERR_TYPE "sȌ`łB\nC|[g𒆎~܂" - STR_IMPEXP_VER "GNX|[g %s(%s/%d) ƃo[WقȂ܂B\n\nC|[gĂ낵łH" - STR_IMPEXP_REGEX1 "L[[hɒBߐ؂̂Ă܂B" - STR_IMPEXP_REGEX2 "L[[ḧ悪ςȂߐ؂̂Ă܂B" - STR_IMPEXP_REGEX3 "sȃL[[h𖳎܂B" - STR_IMPEXP_DIC_NOTFOUND "yt@C‚܂z" -END - -STRINGTABLE -BEGIN - STR_OUTLINE_COBOL "COBOL" - STR_OUTLINE_PERL "Perl" - STR_OUTLINE_ASM "AZu" - STR_OUTLINE_VB "Visual Basic" - STR_OUTLINE_PYTHON "Python" - STR_OUTLINE_ERLANG "Erlang" - STR_OUTLINE_WZ "WZKwteLXg" - STR_OUTLINE_HTML "HTML" - STR_OUTLINE_TEX "TeX" - STR_OUTLINE_TEXT "eLXg" - STR_SMART_INDENT_NONE "Ȃ" - STR_SMART_INDENT_C_CPP "C/C++" - STR_IME_STATE_DEF "Wݒ" - STR_IME_STATE_FULL "Sp" - STR_IME_STATE_FULLHIRA "SpЂ炪" - STR_IME_STATE_FULLKATA "SpJ^Ji" -END - -STRINGTABLE -BEGIN - STR_IME_STATE_NO "ϊ" - STR_IME_SWITCH_DONTSET "̂܂" - STR_IME_SWITCH_ON "ON" - STR_IME_SWITCH_OFF "OFF" - STR_WRAP_INDENT_NONE "Ȃ" - STR_WRAP_INDENT_TX2X "tx2x" - STR_WRAP_INDENT_BOL "_s擪" - STR_WRAP_METHOD_NO_WRAP "܂ԂȂ" - STR_WRAP_METHOD_SPEC_WIDTH "w茅Ő܂Ԃ" - STR_WRAP_METHOD_WIN_WIDTH "E[Ő܂Ԃ" - STR_PROPTYPE_SCREEN "XN[" - STR_PROPTYPE_COLOR "J[" - STR_PROPTYPE_SUPPORT "x" - STR_PROPTYPE_REGEX_KEYWORD "K\L[[h" - STR_PROPTYPE_KEYWORD_HELP "L[[hwv" - STR_PROPTYPE_WINDOW "EBhE" -END - -STRINGTABLE -BEGIN - STR_PROPTYPE "^Cvʐݒ" - STR_PROPTYPE_ERR "CPropTypes::DoPropertySheet()ŃG[o܂B\npsh.nStartPage=[%d]\n::PropertySheet()sB\n\n%s\n" - STR_PROPTYPKEYHELP_DIC " t@C" - STR_PROPTYPKEYHELP_INFO "̐" - STR_PROPTYPKEYHELP_PATH "pX" - STR_PROPTYPKEYHELP_LINE1 "t@ĈPsڂ̕" - STR_PROPTYPKEYHELP_DICPATH "L[[ht@C pX" - STR_PROPTYPKEYHELP_ERR_REG1 "ȏo^ł܂B" - STR_PROPTYPKEYHELP_SELECT "XV鎫XgIĂB" - STR_PROPTYPKEYHELP_ERR_REG2 "ɓo^ς݂̎łB" - STR_PROPTYPKEYHELP_ERR_OPEN "t@CJ܂łB\n\n%s" - STR_PROPTYPEREGEX_LIST1 "L[[h" - STR_PROPTYPEREGEX_LIST2 "Fw" - STR_PROPTYPEREGEX_NOUSE "K\L[[h͎g܂B" - STR_PROPTYPEREGEX_NOTFOUND - "K\Cu‚܂B\n\nK\L[[h͋@\܂񂪁AłLɂ܂H" - STR_PROPTYPEREGEX_NOREG "ȏo^ł܂B" -END - -STRINGTABLE -BEGIN - STR_PROPTYPEREGEX_ALREADY "L[[hœo^ς݂łB" - STR_PROPTYPEREGEX_KAKOMI - "K\L[[h / /k ň͂ĂB\nL[[h / ꍇ m# #k ň͂ĂB" - STR_PROPTYPEREGEX_INVALID "ȂAK\Cu‚܂B\n\no^܂H" - STR_PROPTYPEREGEX_FULL "ȏo^ł܂B\nL[[ḧ悪ςłB" - STR_PROPTYPEREGEX_NOSEL "L[[hIĂ܂B" - STR_ERR_CSHAREDATA01 "CreateFileMapping()Ɏs܂" - STR_ERR_CSHAREDATA02 "\ʃG[" - STR_ERR_CSHAREDATA10 "${w?yGrepz$h$:yAEgvbgz$:$f$}${U?(XV)$}${R?(ǂ݂Ƃp)$:(㏑֎~)$}${M?yL[}N̋L^z$}" - STR_CUSTMENU_RIGHT_CLICK "ENbNj[" - STR_CUSTMENU_CUSTOM "j[%d" - STR_CUSTMENU_TAB "^uj[" - STR_ERR_CSHAREDATA14 "PQRSTUVWXOi(m[uwyE@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]OlܘZ\Q" - STR_ERR_CSHAREDATA15 "yyyy'N'M''d'('dddd')'" - STR_ERR_CSHAREDATA16 "tthh''mm''ss'b'" - STR_ERR_CSHAREDATA17 "${w?$h$:AEgvbg$:${I?$f$:$N$}$}${U?(XV)$} - sakura $V ${R?(ǂ݂Ƃp)$:i㏑֎~j$}${M? yL[}N̋L^z$}" - STR_ERR_CSHAREDATA18 "${w?$h$:AEgvbg$:$f$}${U?(XV)$} - sakura $V ${R?(ǂ݂Ƃp)$:i㏑֎~j$}${M? yL[}N̋L^z$}" -END - -STRINGTABLE -BEGIN - STR_FILEDIALOG_MRU "ŋ߂̃t@C(&F):" - STR_FILEDIALOG_OPENFOLDER "ŋ߂̃tH_(&D):" - STR_IMPEXP_REGEX4 "L[[h߂邽ߐ؂̂Ă܂B" -END - -STRINGTABLE -BEGIN - STR_ERR_CSHAREDATA19 "ɕ̕ҏWpEBhE‚悤ƂĂ܂B‚܂?" - STR_ERR_CSHAREDATA20 "%s\n\n\nɊJĂt@CႤR[hŊJꍇ́A\nt@Cj[uJvgpĂB\n\n݂̕R[hZbg=[%s]\nVR[hZbg=[%s]" - STR_ERR_CSHAREDATA21 "%s\n\ndI[v̊mFŕsȕR[hw肳܂B\n\n݂̕R[hZbg=%d [%s]\nVR[hZbg=%d [%s]" - STR_ERR_CSHAREDATA22 "s" - STR_KEY_BIND_DBL_CLICK "_uNbN" - STR_KEY_BIND_R_CLICK "ENbN" - STR_KEY_BIND_MID_CLICK "NbN" - STR_KEY_BIND_LSD_CLICK "TChNbN" - STR_KEY_BIND_RSD_CLICK "ETChNbN" - STR_KEY_BIND_TRI_CLICK "gvNbN" - STR_KEY_BIND_QUA_CLICK "NAhvNbN" - STR_KEY_BIND_HAT_ENG_QT "^(p')" - STR_KEY_BIND_AT_ENG_BQ "@(p`)" - STR_KEY_BIND_APLI "AvL[" - STR_COLOR_TEXT "eLXg" - STR_COLOR_RULER "[[" -END - -STRINGTABLE -BEGIN - STR_COLOR_CURSOR "J[\" - STR_COLOR_CURSOR_IMEON "J[\(IME ON)" - STR_COLOR_CURSOR_LINE_BG "J[\s̔wiF" - STR_COLOR_CURSOR_LINE "J[\sA_[C" - STR_COLOR_CURSOR_COLUMN "J[\ʒuc" - STR_COLOR_LINE_NO "sԍ" - STR_COLOR_LINE_NO_CHANGE "sԍ(ύXs)" - STR_COLOR_EVEN_LINE_BG "s̔wiF" - STR_COLOR_TAB "TABL" - STR_COLOR_HALF_SPACE "p" - STR_COLOR_FULL_SPACE "{" - STR_COLOR_CTRL_CODE "Rg[R[h" - STR_COLOR_CR "sL" - STR_COLOR_WRAP_MARK "܂ԂL" - STR_COLOR_VERT_LINE "w茅c" - STR_COLOR_EOF "EOFL" -END - -STRINGTABLE -BEGIN - STR_COLOR_REGEX_KEYWORD10 "K\L[[h10" - STR_COLOR_DIFF_ADD "DIFF\(lj)" - STR_COLOR_DIFF_CNG "DIFF\(ύX)" - STR_COLOR_DIFF_DEL "DIFF\(폜)" - STR_COLOR_BOOKMARK "ubN}[N" - STR_COLOR_NOTE_LINE "m[g" - STR_COLOR_PAGEVIEW "\͈(~j}bv)" - STR_ERR_CSPLITTER01 "SplitterWndNX̓o^Ɏs܂B" -END - -STRINGTABLE -BEGIN - STR_COLOR_NUMBER "pl" - STR_COLOR_SELECTED_AREA "I͈" - STR_COLOR_SEARCH_WORD1 "" - STR_COLOR_SEARCH_WORD2 "2" - STR_COLOR_SEARCH_WORD3 "3" - STR_COLOR_SEARCH_WORD4 "4" - STR_COLOR_SEARCH_WORD5 "5" - STR_COLOR_BRACKET "Ίʂ̋\" - STR_COLOR_COMMENT "Rg" - STR_COLOR_SINGLE_QUOTE "VONH[e[V" - STR_COLOR_DOUBLE_QUOTE "_uNH[e[V" - STR_COLOR_HERE_DOCUMENT "qAhLg" - STR_COLOR_URL "URL" - STR_COLOR_KEYWORD1 "L[[h1" - STR_COLOR_KEYWORD2 "L[[h2" - STR_COLOR_KEYWORD3 "L[[h3" -END - -STRINGTABLE -BEGIN - STR_COLOR_KEYWORD4 "L[[h4" - STR_COLOR_KEYWORD5 "L[[h5" - STR_COLOR_KEYWORD6 "L[[h6" - STR_COLOR_KEYWORD7 "L[[h7" - STR_COLOR_KEYWORD8 "L[[h8" - STR_COLOR_KEYWORD9 "L[[h9" - STR_COLOR_KEYWORD10 "L[[h10" - STR_COLOR_REGEX_KEYWORD1 "K\L[[h1" - STR_COLOR_REGEX_KEYWORD2 "K\L[[h2" - STR_COLOR_REGEX_KEYWORD3 "K\L[[h3" - STR_COLOR_REGEX_KEYWORD4 "K\L[[h4" - STR_COLOR_REGEX_KEYWORD5 "K\L[[h5" - STR_COLOR_REGEX_KEYWORD6 "K\L[[h6" - STR_COLOR_REGEX_KEYWORD7 "K\L[[h7" - STR_COLOR_REGEX_KEYWORD8 "K\L[[h8" - STR_COLOR_REGEX_KEYWORD9 "K\L[[h9" -END - -STRINGTABLE -BEGIN - STR_TABWND_LR_INFO "NbN: ^uꗗ\nENbN: pXꗗ" - STR_TABWND_CLOSETAB "^u‚" - STR_TABWND_SHOWALL "ׂĕ\(&A)" - STR_TABWND_SHOWTABNAME "^uꗗɐؑւ(&W)" - STR_TABWND_SHOWPATHNAME "pXꗗɐؑւ(&W)" - STR_ERR_CWSH01 "w̃XNvgGW‚܂" - STR_ERR_CWSH02 "w̃XNvgGW쐬ł܂" - STR_ERR_CWSH03 "TCgo^ł܂" - STR_ERR_CWSH04 "p[T擾ł܂" - STR_ERR_CWSH05 "ł܂" - STR_ERR_CWSH06 "IuWFNgnȂ" - STR_ERR_CWSH07 "ԕύXG[" - STR_ERR_CWSH08 "sɎs܂" - STR_ERR_ETCUTY01 "VXe " - STR_ERR_ETCUTY02 "[U[ " - STR_ERR_ETCUTY03 "%s\[Xɒ[ɕsĂ܂B\n̂܂%sNƁAɓ삵Ȃ”\܂B\nV%s̋N𒆒f܂B\n\nVXe \[X\tc %d%%\nUser \[X\tc %d%%\nGDI \[X\tc %d%%\n\n" -END - -STRINGTABLE -BEGIN - STR_CAPTION_ACTIVE_KEYMACRO "yL[}N̋L^z" - STR_DATA_FORMAT "yyyy'N'M''d'('dddd')'" - STR_TIME_FORMAT "tthh''mm''ss'b'" - STR_TRANSNAME_COMDESKTOP "LfXNgbv\\" - STR_TRANSNAME_COMDOC "LhLg\\" - STR_TRANSNAME_DESKTOP "fXNgbv\\" - STR_TRANSNAME_MYDOC "}ChLg\\" - STR_TRANSNAME_IE "IELbV\\" - STR_TRANSNAME_TEMP "TEMP\\" - STR_TRANSNAME_APPDATA "Avf[^\\" - STR_PRINT_SET_NAME "ݒ" - STR_TYPE_NAME_BASIS "{" - STR_TYPE_NAME_RICHTEXT "b`eLXg" - STR_TYPE_NAME_TEXT "eLXg" - STR_TYPE_NAME_DOS "MS-DOSob`t@C" -END - -STRINGTABLE -BEGIN - STR_PLGMGR_NEWPLUGIN "VvOC͌‚܂ł" - STR_PLGMGR_INSTALL "vOCu%svCXg[܂H" - STR_PLGMGR_INSTALL_ERR "vOCu%svCXg[ł܂ł\nRF%ls" - STR_PLGMGR_ERR_ZIP "ZIPt@C͈܂" - STR_PLGMGR_ERR_FOLDER "vOCtH_܂" - STR_PLGMGR_ERR_CREATEDIR "vOCtH_쐬o܂" - STR_PLGMGR_INST_ZIP_ACCESS "ZIPt@Cu%svɃANZXo܂" - STR_PLGMGR_INST_ZIP_DEF "ZIPt@Cu%svɂ̓vOC`t@Ciplugin.defj܂" - STR_PLGMGR_INST_ZIP_ALREADY "u%sv͊ɃCXg[Ă܂\n㏑܂H" - STR_PLGMGR_INST_ZIP_INST "ZIPvOCu%svu%svɃCXg[܂H" - STR_PLGMGR_INST_ZIP_UNZIP "ZIPvOCu%sv̉𓀂Ɏs܂" - STR_PLGMGR_INST_ZIP_ERR "vOCu%svCXg[ł܂ł\nRF%ls" - STR_PLGMGR_INST_DEF "vOC`t@Ciplugin.defj܂" - STR_PLGMGR_INST_ID "Plugin.ID܂" - STR_PLGMGR_INST_RESERVE1 "Plugin.ID""" - STR_PLGMGR_INST_RESERVE2 """͎gpł܂" -END - -#endif // { ({) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// -#include "sakura_rc.rc2" - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - +// Microsoft Visual C++ generated resource script. +// +#include "sakura_rc.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#define APSTUDIO_HIDDEN_SYMBOLS +#include +#undef APSTUDIO_HIDDEN_SYMBOLS + +#include "Funccode_define.h" +#include "String_define.h" +#include "version.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// 日本語 (日本) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN) +LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "sakura_rc.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include \r\n" + "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" + "\r\n" + "#include ""Funccode_define.h""\r\n" + "#include ""String_define.h""\r\n" + "#include ""version.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "#include ""sakura_rc.rc2""\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_FIND DIALOGEX 30, 0, 284, 93 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "検索" +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + LTEXT "条件(&N)",IDC_STATIC,5,6,26,10 + COMBOBOX IDC_COMBO_TEXT,34,4,183,150,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + CONTROL "単語単位で探す(&W)",IDC_CHK_WORD,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,5,21,130,10 + CONTROL "英大文字と小文字を区別する(&C)",IDC_CHK_LOHICASE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,5,32,130,10 + CONTROL "正規表現(&E)",IDC_CHK_REGULAREXP,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,5,43,55,10 + CONTROL "見つからないときにメッセージを表示(&M)",IDC_CHECK_NOTIFYNOTFOUND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,54,140,10 + CONTROL "検索ダイアログを自動的に閉じる(&L)",IDC_CHECK_bAutoCloseDlgFind,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,65,130,10 + CONTROL "先頭(末尾)から再検索する(&Z)",IDC_CHECK_SEARCHALL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,76,130,10 + LTEXT "",IDC_STATIC_JRE32VER,62,43,154,10 + PUSHBUTTON "上検索(&U)",IDC_BUTTON_SEARCHPREV,221,4,58,14,WS_GROUP + DEFPUSHBUTTON "下検索(&D)",IDC_BUTTON_SEARCHNEXT,221,20,58,14 + PUSHBUTTON "該当行マーク(&B)",IDC_BUTTON_SETMARK,221,38,58,14 + PUSHBUTTON "キャンセル(&X)",IDCANCEL,221,57,58,14,WS_GROUP + PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,221,73,58,14 +END + +IDD_JUMP DIALOGEX 0, 0, 252, 121 +STYLE DS_SETFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_SETFOREGROUND | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "指定行へジャンプ" +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + LTEXT "行番号(&N)",IDC_STATIC,5,6,34,10 + EDITTEXT IDC_EDIT_LINENUM,43,4,40,12 + CONTROL "Spin1",IDC_SPIN_LINENUM,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,82,4,9,12 + CONTROL "折り返し単位の行番号(&R)",IDC_RADIO_LINENUM_LAYOUT,"Button",BS_AUTORADIOBUTTON | WS_GROUP,94,5,97,10 + CONTROL "改行単位の行番号(&W)",IDC_RADIO_LINENUM_CRLF,"Button",BS_AUTORADIOBUTTON,94,20,87,10 + CONTROL "&PL/SQLコンパイルエラー行を処理する",IDC_CHECK_PLSQL,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,10,50,137,10 + LTEXT "行目をブロックの&1行目とする",IDC_LABEL_PLSQL2,92,66,92,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_PLSQL_E1,47,64,40,12 + CONTROL "Spin1",IDC_SPIN_PLSQL_E1,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,87,64,9,12 + LTEXT "テキストの",IDC_LABEL_PLSQL1,12,66,34,10,NOT WS_GROUP + LTEXT "検出されたPL/SQLパッケージのブロックから選択(&S)",IDC_LABEL_PLSQL3,12,81,166,10,NOT WS_GROUP + COMBOBOX IDC_COMBO_PLSQLBLOCKS,15,94,168,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "PL/SQLコンパイルエラー行",IDC_STATIC,5,35,184,80,WS_GROUP + DEFPUSHBUTTON "ジャンプ(&J)",IDC_BUTTON_JUMP,197,5,50,14,WS_GROUP + PUSHBUTTON "キャンセル(&X)",IDCANCEL,197,24,50,14 + PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,197,101,50,14 +END + +IDD_FUNCLIST DIALOG 0, 0, 240, 289 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU +CAPTION "x" +FONT 9, "MS Pゴシック" +BEGIN + CONTROL "Tree1",IDC_TREE_FL,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,0,20,234,232 + CONTROL "List1",IDC_LIST_FL,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,0,0,234,252 + PUSHBUTTON "▼",IDC_BUTTON_MENU,1,255,10,14,NOT WS_TABSTOP + CONTROL "■",IDC_BUTTON_WINSIZE,"Button",BS_AUTOCHECKBOX | BS_PUSHLIKE,12,255,10,14 + PUSHBUTTON "コピー(&C)",IDC_BUTTON_COPY,24,255,50,14,WS_DISABLED + DEFPUSHBUTTON "ジャンプ(&J)",IDOK,76,255,50,14 + PUSHBUTTON "キャンセル(&X)",IDCANCEL,128,255,50,14 + PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,180,255,50,14 + CONTROL "自動的に閉じる(&D)",IDC_CHECK_bAutoCloseDlgFuncList,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,271,75,10 + CONTROL "フォーカスを移す(&F)",IDC_CHECK_bFunclistSetFocusOnJump,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,82,271,77,10 + CONTROL "空行を無視する(&B)",IDC_CHECK_bMarkUpBlankLineEnable,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,271,76,10 + LTEXT "順序(&S)",IDC_STATIC_nSortType,3,6,28,10 + PUSHBUTTON "設定(&S)",IDC_BUTTON_SETTING,3,3,35,14 + COMBOBOX IDC_COMBO_nSortType,34,3,94,65,CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP +END + +IDD_GREP DIALOGEX 0, 0, 390, 192 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Grep" +FONT 9, "Yu Gothic UI", 0, 0, 0x1 +BEGIN + RTEXT "条件(&N):",IDC_STATIC,4,4,52,8 + COMBOBOX IDC_COMBO_TEXT,60,4,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + CONTROL "単語単位(&W)",IDC_CHK_WORD,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,60,18,80,8 + CONTROL "英大小文字区別(&C)",IDC_CHK_LOHICASE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,28,80,8 + CONTROL "正規表現(&E)",IDC_CHK_REGULAREXP,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,38,80,8 + RTEXT "(ここに正規表現ライブラリのバージョン情報が表示されます)",IDC_STATIC_JRE32VER,144,38,188,8 + RTEXT "検索場所(&L):",IDC_STATIC,4,52,52,8 + COMBOBOX IDC_COMBO_FOLDER,60,52,254,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "&...",IDC_BUTTON_FOLDER,316,52,16,10 + CONTROL "編集中のファイルから検索(&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,66,100,8 + CONTROL "サブフォルダも検索(&S)",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,76,100,8 + CONTROL "カレントフォルダが初期値(&D)",IDC_CHK_DEFAULTFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,86,100,8 + PUSHBUTTON "上階層へ(&U)",IDC_BUTTON_FOLDER_UP,230,66,50,14 + PUSHBUTTON "現フォルダ(&G)",IDC_BUTTON_CURRENTFOLDER,282,66,50,14,BS_MULTILINE + RTEXT "対象ファイル(&I):",IDC_STATIC,4,100,52,8,NOT WS_GROUP + COMBOBOX IDC_COMBO_FILE,60,100,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + RTEXT "除外ファイル(&J):",IDC_STATIC,4,114,52,8,NOT WS_GROUP + COMBOBOX IDC_COMBO_EXCLUDE_FILE,60,114,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + RTEXT "除外フォルダ(&K):",IDC_STATIC,4,128,53,8 + COMBOBOX IDC_COMBO_EXCLUDE_FOLDER,60,128,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + GROUPBOX "結果出力",IDC_STATIC,60,144,68,44,WS_GROUP + CONTROL "該当行(&1)",IDC_RADIO_OUTPUTLINE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,68,156,56,8 + CONTROL "該当部分(&2)",IDC_RADIO_OUTPUTMARKED,"Button",BS_AUTORADIOBUTTON,68,166,56,8 + CONTROL "否該当行(&3)",IDC_RADIO_NOHIT,"Button",BS_AUTORADIOBUTTON,68,176,56,8 + GROUPBOX "結果出力形式",IDC_STATIC,132,144,68,44,WS_GROUP + CONTROL "ノーマル(&4)",IDC_RADIO_OUTPUTSTYLE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,140,156,52,8 + CONTROL "ファイル毎(&5)",IDC_RADIO_OUTPUTSTYLE2,"Button",BS_AUTORADIOBUTTON,140,166,52,8 + CONTROL "結果のみ(&6)",IDC_RADIO_OUTPUTSTYLE3,"Button",BS_AUTORADIOBUTTON,140,176,52,8 + GROUPBOX "その他",IDC_STATIC,204,144,180,44,WS_GROUP + CONTROL "ファイル毎最初のみ検索(&7)",IDC_CHECK_FILE_ONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,156,92,8 + CONTROL "フォルダ毎に表示(&8)",IDC_CHECK_SEP_FOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,166,92,8 + CONTROL "ベースフォルダ表示(&9)",IDC_CHECK_BASE_PATH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,176,92,8 + LTEXT "文字コードセット(&A):",IDC_STATIC,312,152,62,8 + COMBOBOX IDC_COMBO_CHARSET,312,162,64,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,312,176,30,8 + DEFPUSHBUTTON "検索(&F)",IDOK,336,4,50,14,WS_GROUP + PUSHBUTTON "キャンセル(&X)",IDCANCEL,336,20,50,14 + PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,336,36,50,14 +END + +IDD_GREP_REPLACE DIALOGEX 0, 0, 390, 204 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Grep置換" +FONT 9, "Yu Gothic UI", 0, 0, 0x1 +BEGIN + RTEXT "置換前(&N):",IDC_STATIC,4,4,52,10 + COMBOBOX IDC_COMBO_TEXT,60,4,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + RTEXT "置換後(&Z):",IDC_STATIC,4,18,52,10 + COMBOBOX IDC_COMBO_TEXT2,60,18,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + CONTROL "単語単位(&W)",IDC_CHK_WORD,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,60,32,80,8 + CONTROL "英大小文字区別(&C)",IDC_CHK_LOHICASE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,42,80,8 + CONTROL "正規表現(&E)",IDC_CHK_REGULAREXP,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,52,80,8 + CONTROL "クリップボードの内容で置換(&V)",IDC_CHK_PASTE,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,196,32,120,8 + CONTROL "バックアップ作成(&B)",IDC_CHK_BACKUP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,196,42,120,8 + RTEXT "(ここに正規表現ライブラリのバージョン情報が表示されます)",IDC_STATIC_JRE32VER,144,52,188,8 + RTEXT "検索場所(&L):",IDC_STATIC,4,64,52,8 + COMBOBOX IDC_COMBO_FOLDER,60,64,254,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "&...",IDC_BUTTON_FOLDER,316,64,16,10 + CONTROL "編集中のファイルから検索(&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,78,100,8 + CONTROL "サブフォルダも検索(&S)",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,88,100,8 + CONTROL "カレントフォルダが初期値(&D)",IDC_CHK_DEFAULTFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,98,100,8 + PUSHBUTTON "上階層へ(&U)",IDC_BUTTON_FOLDER_UP,230,78,50,14 + PUSHBUTTON "現フォルダ(&G)",IDC_BUTTON_CURRENTFOLDER,282,78,50,14,BS_MULTILINE + RTEXT "対象ファイル(&I):",IDC_STATIC,4,114,52,8,NOT WS_GROUP + COMBOBOX IDC_COMBO_FILE,60,114,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + RTEXT "除外ファイル(&J):",IDC_STATIC,4,128,52,8,NOT WS_GROUP + COMBOBOX IDC_COMBO_EXCLUDE_FILE,60,128,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + RTEXT "除外フォルダ(&K):",IDC_STATIC,4,142,52,8 + COMBOBOX IDC_COMBO_EXCLUDE_FOLDER,60,142,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + GROUPBOX "結果出力",IDC_STATIC,60,156,68,44,WS_GROUP + CONTROL "該当行(&1)",IDC_RADIO_OUTPUTLINE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,68,168,56,8 + CONTROL "該当部分(&2)",IDC_RADIO_OUTPUTMARKED,"Button",BS_AUTORADIOBUTTON,68,178,56,8 + GROUPBOX "結果出力形式",IDC_STATIC,132,156,68,44,WS_GROUP + CONTROL "ノーマル(&4)",IDC_RADIO_OUTPUTSTYLE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,140,168,52,8 + CONTROL "ファイル毎(&5)",IDC_RADIO_OUTPUTSTYLE2,"Button",BS_AUTORADIOBUTTON,140,178,52,8 + CONTROL "結果のみ(&6)",IDC_RADIO_OUTPUTSTYLE3,"Button",BS_AUTORADIOBUTTON,140,188,52,8 + GROUPBOX "その他",IDC_STATIC,204,156,180,44,WS_GROUP + CONTROL "ファイル毎最初のみ検索(&7)",IDC_CHECK_FILE_ONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,168,92,8 + CONTROL "フォルダ毎に表示(&8)",IDC_CHECK_SEP_FOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,178,92,8 + CONTROL "ベースフォルダ表示(&9)",IDC_CHECK_BASE_PATH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,188,92,8 + LTEXT "文字コードセット(&A):",IDC_STATIC,312,164,62,8 + COMBOBOX IDC_COMBO_CHARSET,312,174,64,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,312,188,30,8 + DEFPUSHBUTTON "置換(&R)",IDOK,336,4,50,14,WS_GROUP + PUSHBUTTON "キャンセル(&X)",IDCANCEL,336,20,50,14 + PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,336,36,50,14 +END + +IDD_GREPRUNNING DIALOGEX 0, 0, 293, 79 +STYLE DS_SETFONT | DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Grep実行中" +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + LTEXT "検索しています・・・",IDC_STATIC,5,5,61,10,NOT WS_GROUP + LTEXT "ファイル",IDC_STATIC,5,21,26,10,NOT WS_GROUP + LTEXT "IDC_STATIC_CURPATH",IDC_STATIC_CURFILE,36,20,252,10,NOT WS_GROUP + LTEXT "フォルダ",IDC_STATIC,5,34,27,10,NOT WS_GROUP + EDITTEXT IDC_STATIC_CURPATH,36,35,252,20,ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + PUSHBUTTON "キャンセル(&X)",IDCANCEL,238,60,50,14 + LTEXT "0",IDC_STATIC_HITCOUNT,76,5,44,10,NOT WS_GROUP,WS_EX_RIGHT + LTEXT "件みつかりました。",IDC_STATIC,122,5,60,10,NOT WS_GROUP + CONTROL "リアルタイム表示(&V)",IDC_CHECK_REALTIMEVIEW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,149,59,84,14 +END + +IDD_REPLACE DIALOGEX 30, 0, 298, 149 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "置換" +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + LTEXT "置換前(&N)",IDC_STATIC,5,6,35,10 + COMBOBOX IDC_COMBO_TEXT,43,4,191,150,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + LTEXT "置換後(&P)",IDC_STATIC,5,21,34,10,NOT WS_GROUP + COMBOBOX IDC_COMBO_TEXT2,43,19,191,150,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + CONTROL "クリップボードから貼り付ける(&T)",IDC_CHK_PASTE,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,5,41,116,10 + CONTROL "単語単位で探す(&W)",IDC_CHK_WORD,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,5,52,78,10 + CONTROL "英大文字と小文字を区別する(&C)",IDC_CHK_LOHICASE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,5,63,119,10 + CONTROL "正規表現(&E)",IDC_CHK_REGULAREXP,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,5,74,55,10 + LTEXT "",IDC_STATIC_JRE32VER,16,85,138,10 + CONTROL "「すべて置換」は置換の繰返し(&I)",IDC_CHECK_CONSECUTIVEALL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,95,118,10 + CONTROL "見つからないときにメッセージを表示(&M)",IDC_CHECK_NOTIFYNOTFOUND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,107,140,10 + CONTROL "置換ダイアログを自動的に閉じる(&L)",IDC_CHECK_bAutoCloseDlgReplace, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,118,128,10 + CONTROL "先頭(末尾)から再検索する(&Z)",IDC_CHECK_SEARCHALL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,129,113,10 + GROUPBOX "置換対象",IDC_STATIC,156,37,78,62,WS_GROUP + CONTROL "選択文字(&0)",IDC_RADIO_REPLACE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,159,50,59,10 + CONTROL "選択始点(&1)挿入",IDC_RADIO_INSERT,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,159,61,71,10 + CONTROL "選択終点(&2)追加",IDC_RADIO_ADD,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,159,72,71,10 + CONTROL "行削除(&3)",IDC_RADIO_LINEDELETE,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,159,83,71,10 + GROUPBOX "範囲",IDC_STATIC,156,103,78,37,WS_GROUP + CONTROL "選択範囲(&S)",IDC_RADIO_SELECTEDAREA,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,159,115,57,10 + CONTROL "ファイル全体(&O)",IDC_RADIO_ALLAREA,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,159,126,68,10 + PUSHBUTTON "上検索(&U)",IDC_BUTTON_SEARCHPREV,237,4,58,14,WS_GROUP + DEFPUSHBUTTON "下検索(&D)",IDC_BUTTON_SEARCHNEXT,237,19,58,14 + PUSHBUTTON "該当行マーク(&B)",IDC_BUTTON_SETMARK,237,38,58,14 + PUSHBUTTON "置換(&R)",IDC_BUTTON_REPALCE,237,57,58,14 + PUSHBUTTON "すべて置換(&A)",IDC_BUTTON_REPALCEALL,237,73,58,14 + PUSHBUTTON "キャンセル(&X)",IDCANCEL,237,110,58,14,WS_GROUP + PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,237,127,58,14 +END + +IDD_REPLACERUNNING DIALOG 0, 0, 190, 35 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "置換中" +FONT 9, "MS Pゴシック" +BEGIN + LTEXT "置換中です・・・・",IDC_STATIC,5,5,55,10 + CONTROL "Progress1",IDC_PROGRESS_REPLACE,"msctls_progress32",WS_BORDER,5,20,120,10 + PUSHBUTTON "キャンセル(&X)",IDCANCEL,135,16,50,14 + RTEXT "9999999999",IDC_STATIC_KENSUU,64,5,37,10,NOT WS_GROUP + LTEXT "個",IDC_STATIC,104,5,8,10,NOT WS_GROUP +END + +IDD_PROPERTY_FILE DIALOGEX 0, 0, 270, 225 +STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "ファイルのプロパティ" +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "閉じる(&C)",IDOK,155,208,50,14 + PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,215,208,50,14 + EDITTEXT IDC_EDIT_PROPERTY,5,5,260,200,ES_MULTILINE | ES_READONLY | WS_VSCROLL +END + +IDD_INPUT1 DIALOGEX 0, 0, 185, 55 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "汎用入力ダイアログ" +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + EDITTEXT IDC_EDIT_INPUT1,5,17,175,12,ES_AUTOHSCROLL + DEFPUSHBUTTON "&OK",IDOK,37,36,50,14 + PUSHBUTTON "キャンセル(&X)",IDCANCEL,98,35,50,14 + LTEXT "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",IDC_STATIC_MSG,6,5,175,10 +END + +IDD_COMPARE DIALOGEX 0, 0, 365, 165 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "ファイル内容比較" +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + LTEXT "比較するファイルを下から選択してください(&C):",IDC_STATIC,5,31,158,10 + LISTBOX IDC_LIST_FILES,5,42,355,95,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + CONTROL "左右に表示(&T)",IDC_CHECK_TILE_H,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,293,30,66,10 + DEFPUSHBUTTON "&OK",IDOK,184,145,50,14 + PUSHBUTTON "キャンセル(&X)",IDCANCEL,244,145,50,14 + PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,304,145,50,14 + EDITTEXT IDC_STATIC_COMPARESRC,7,7,355,20,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL,WS_EX_STATICEDGE +END + +IDD_PRINTPREVIEWBAR DIALOG 0, 0, 402, 32 +STYLE DS_SETFONT | WS_CHILD +FONT 9, "MS Pゴシック" +BEGIN + DEFPUSHBUTTON "印刷(&P)...",IDOK,2,1,55,14 + PUSHBUTTON "ページ設定(&S)...",IDC_BUTTON_PRINTSETTING,2,16,55,14 + PUSHBUTTON "前(&V)",IDC_BUTTON_PREVPAGE,60,1,30,14 + PUSHBUTTON "次(&N)",IDC_BUTTON_NEXTPAGE,90,1,30,14 + PUSHBUTTON "..&.",IDC_BUTTON_DIRECTPAGE,120,1,9,14 + LTEXT "999/999",IDC_STATIC_PAGENUM,131,4,35,10 + PUSHBUTTON "縮小(&O)",IDC_BUTTON_ZOOMDOWN,60,16,30,14 + PUSHBUTTON "拡大(&I)",IDC_BUTTON_ZOOMUP,90,16,30,14 + LTEXT "999/999",IDC_STATIC_ZOOM,131,19,35,10 + PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,167,1,39,14 + CONTROL "滑らか(&A)",IDC_CHECK_ANTIALIAS,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,207,3,43,10 + PUSHBUTTON "戻る(&Q)",IDCANCEL,167,16,39,14 + PUSHBUTTON "プリンタ(&R)",IDC_BUTTON_PRINTERSELECT,208,16,40,14 + ICON IDI_PRINTER,IDC_STATIC,251,3,11,9,SS_REALSIZEIMAGE + LTEXT "Static",IDC_STATIC_PRNDEV,263,4,137,10 + LTEXT "Static",IDC_STATIC_PAPER,251,19,149,10 +END + +IDD_PRINTSETTING DIALOGEX 0, 0, 302, 253 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "印刷ページ設定" +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + LTEXT "ページ設定(&1)",IDC_STATIC,7,9,45,10 + COMBOBOX IDC_COMBO_SETTINGNAME,56,7,163,170,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "設定名変更(&2)...",IDC_BUTTON_EDITSETTINGNAME,224,7,69,14 + GROUPBOX "設定",IDC_STATIC,4,22,289,204 + RTEXT "半角フォント(&F)",IDC_STATIC,7,37,45,10 + COMBOBOX IDC_COMBO_FONT_HAN,56,35,84,230,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + RTEXT "全角フォント(&K)",IDC_STATIC,7,52,45,10 + COMBOBOX IDC_COMBO_FONT_ZEN,56,50,84,230,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + RTEXT "フォント高(&P)",IDC_STATIC,7,71,45,10 + EDITTEXT IDC_EDIT_FONTHEIGHT,56,69,30,12,ES_AUTOHSCROLL + CONTROL "Spin1",IDC_SPIN_FONTHEIGHT,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,69,9,12 + LTEXT "(1/10mm)",IDC_STATIC,88,71,32,10 + RTEXT "144.5pt",IDC_STATIC_FONTSIZE,120,71,22,10 + RTEXT "行送り(&S)",IDC_STATIC,7,85,45,10 + EDITTEXT IDC_EDIT_LINESPACE,56,83,30,12,ES_AUTOHSCROLL + CONTROL "Spin2",IDC_SPIN_LINESPACE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,83,9,12 + LTEXT "(%)",IDC_STATIC,88,85,10,10 + RTEXT "段数 (&C)",IDC_STATIC,7,99,45,10 + EDITTEXT IDC_EDIT_DANSUU,56,97,30,12,ES_AUTOHSCROLL + CONTROL "Spin3",IDC_SPIN_DANSUU,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,97,9,12 + RTEXT "段の隙間(&E)",IDC_STATIC,7,113,45,10 + EDITTEXT IDC_EDIT_DANSPACE,56,111,30,12,ES_AUTOHSCROLL + CONTROL "Spin4",IDC_SPIN_DANSPACE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,111,9,12 + LTEXT "(mm)",IDC_STATIC,88,113,17,10 + RTEXT "用紙サイズ(&Z)",IDC_STATIC,7,131,45,10 + COMBOBOX IDC_COMBO_PAPER,56,129,169,145,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + RTEXT "用紙の向き",IDC_STATIC,7,146,45,10 + CONTROL "縦(&I)",IDC_RADIO_PORTRAIT,"Button",BS_AUTORADIOBUTTON | WS_GROUP,58,145,40,10 + CONTROL "横(&A)",IDC_RADIO_LANDSCAPE,"Button",BS_AUTORADIOBUTTON,102,145,40,10 + RTEXT "余白/上(&T)",IDC_STATIC,7,163,45,10 + EDITTEXT IDC_EDIT_MARGINTY,56,161,30,12,ES_AUTOHSCROLL + CONTROL "Spin5",IDC_SPIN_MARGINTY,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,161,9,12 + LTEXT "(mm)",IDC_STATIC,88,163,17,10 + RTEXT "下(&B)",IDC_STATIC,7,177,45,10 + EDITTEXT IDC_EDIT_MARGINBY,56,175,30,12,ES_AUTOHSCROLL + CONTROL "Spin6",IDC_SPIN_MARGINBY,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,175,9,12 + LTEXT "(mm)",IDC_STATIC,88,177,17,10 + RTEXT "左(&L)",IDC_STATIC,7,191,45,10 + EDITTEXT IDC_EDIT_MARGINLX,56,189,30,12,ES_AUTOHSCROLL + CONTROL "Spin7",IDC_SPIN_MARGINLX,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,189,9,12 + LTEXT "(mm)",IDC_STATIC,88,191,17,10 + RTEXT "右(&R)",IDC_STATIC,7,205,45,10 + EDITTEXT IDC_EDIT_MARGINRX,56,202,30,12,ES_AUTOHSCROLL + CONTROL "Spin8",IDC_SPIN_MARGINRX,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,202,9,12 + LTEXT "(mm)",IDC_STATIC,88,205,17,10 + CONTROL "行番号を印刷(&N)",IDC_CHECK_LINENUMBER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,35,70,10 + CONTROL "英文ワードラップ(&W)",IDC_CHECK_WORDWRAP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,49,78,10 + CONTROL "行頭禁則",IDC_CHECK_PS_KINSOKUHEAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,63,46,10 + CONTROL "行末禁則",IDC_CHECK_PS_KINSOKUTAIL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,77,46,10 + CONTROL "改行ぶら下げ",IDC_CHECK_PS_KINSOKURET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,197,63,60,10 + CONTROL "句読点ぶら下げ",IDC_CHECK_PS_KINSOKUKUTO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,197,77,67,10 + LTEXT "行あたりの文字数:",IDC_STATIC,150,96,65,10 + LTEXT "縦方向の行数:",IDC_STATIC,150,110,65,10 + RTEXT "0",IDC_STATIC_ENABLECOLUMNS,215,96,20,10 + RTEXT "0",IDC_STATIC_ENABLELINES,215,110,20,10 + GROUPBOX "",IDC_STATIC,145,87,112,37 + CONTROL "カラー印刷(&V)",IDC_CHECK_COLORPRINT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,145,61,10 + LTEXT "ヘッダー(&U)",IDC_STATIC,107,163,38,10 + EDITTEXT IDC_EDIT_HEAD1,107,175,50,12,ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_HEAD2,158,175,50,12,ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_HEAD3,209,175,50,12,ES_AUTOHSCROLL + CONTROL "使用",IDC_CHECK_USE_FONT_HEAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,260,164,30,10 + PUSHBUTTON "フォント",IDC_BUTTON_FONT_HEAD,260,174,30,14 + RTEXT "Font(xxpt/xx.xmm)",IDC_STATIC_FONT_HEAD,145,160,114,14,SS_CENTERIMAGE + LTEXT "フッター(&D)",IDC_STATIC,107,191,38,10 + EDITTEXT IDC_EDIT_FOOT1,107,203,50,12,ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_FOOT2,158,203,50,12,ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_FOOT3,209,203,50,12,ES_AUTOHSCROLL + CONTROL "使用",IDC_CHECK_USE_FONT_FOOT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,260,192,30,10 + PUSHBUTTON "フォント",IDC_BUTTON_FONT_FOOT,260,202,30,14 + RTEXT "Font(xxpt/xx.xmm)",IDC_STATIC_FONT_FOOT,145,189,114,14,SS_CENTERIMAGE + DEFPUSHBUTTON "&OK",IDOK,128,234,50,14 + PUSHBUTTON "キャンセル(&X)",IDCANCEL,183,234,50,14 + PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,238,234,50,14 +END + +IDD_EXITING DIALOG 0, 0, 171, 30 +STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_VISIBLE +FONT 9, "MS Pゴシック" +BEGIN + ICON IDI_ICON_STD,IDC_STATIC,5,5,20,20 + LTEXT "終了しています。 しばらくお待ちください・・・",IDC_STATIC,30,10,137,8 +END + +IDD_EXEC DIALOGEX 30, 0, 292, 137 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "ファイル名を指定して実行" +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + LTEXT "名前(&N)",IDC_STATIC,5,6,26,10 + COMBOBOX IDC_COMBO_m_szCommand,34,4,254,240,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_TABSTOP + PUSHBUTTON "&...",IDC_BUTTON_REFERENCE,278,20,9,12,WS_GROUP + CONTROL "標準出力を得る(&S)",IDC_CHECK_GETSTDOUT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,32,76,10 + COMBOBOX IDC_COMBO_CODE_GET,16,43,73,10,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "標準入力に送る(&I)",IDC_CHECK_SENDSTDIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,58,74,10 + COMBOBOX IDC_COMBO_CODE_SEND,16,72,73,10,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "アウトプットウィンドウ(&O)",IDC_RADIO_OUTPUT,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,102,51,93,10 + CONTROL "編集中のウィンドウ(&C)",IDC_RADIO_EDITWINDOW,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,196,51,87,10 + GROUPBOX "標準出力リダイレクト先",IDC_STATIC,98,39,190,29,WS_GROUP + CONTROL "カレントディレクトリ(&R)",IDC_CHECK_CUR_DIR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,86,93,10 + COMBOBOX IDC_COMBO_CUR_DIR,16,100,263,240,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_TABSTOP + PUSHBUTTON "...",IDC_BUTTON_REFERENCE2,279,100,9,12,WS_GROUP + DEFPUSHBUTTON "実行(&E)",IDOK,117,116,50,14 + PUSHBUTTON "キャンセル(&X)",IDCANCEL,177,116,50,14 + PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,237,116,50,14 + LTEXT "[Note] $Fで編集中ファイル名, $$で$",IDC_STATIC,140,21,134,10 +END + +IDD_EXECRUNNING DIALOG 0, 0, 270, 55 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "コマンド実行中・・・" +FONT 9, "MS Pゴシック" +BEGIN + PUSHBUTTON "キャンセル(&X)",IDCANCEL,207,36,59,14 + EDITTEXT IDC_STATIC_CMD,5,5,260,23,ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP +END + +IDD_MACRORUNNING DIALOG 0, 0, 270, 55 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 9, "MS Pゴシック" +BEGIN + PUSHBUTTON "キャンセル(&X)",IDCANCEL,207,5,59,14 + LTEXT "マクロ実行中・・・",IDC_STATIC,5,5,200,23 + EDITTEXT IDC_STATIC_CMD,5,28,260,23,ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP +END + +IDD_HOKAN DIALOGEX 0, 0, 125, 100 +STYLE DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | WS_THICKFRAME +EXSTYLE WS_EX_TOOLWINDOW +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + LISTBOX IDC_LIST_WORDS,0,0,120,95,LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_WANTKEYBOARDINPUT | WS_VSCROLL | WS_TABSTOP +END + +IDD_PRINTING DIALOG 0, 0, 145, 75 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "印刷中" +FONT 9, "MS Pゴシック" +BEGIN + PUSHBUTTON "キャンセル(&X)",IDCANCEL,90,56,50,14 + LTEXT "印刷しています・・・・",IDC_STATIC,25,10,65,10 + LTEXT "12/123頁",IDC_STATIC_PROGRESS,25,43,100,10 + LTEXT "CEditView.cpp",IDC_STATIC_JOBNAME,25,20,115,20 + ICON IDI_PRINTER,IDC_STATIC,10,8,11,9,SS_REALSIZEIMAGE +END + +IDD_FILEOPEN DIALOG 0, 0, 261, 66 +STYLE DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN +FONT 9, "MS Pゴシック" +BEGIN + LTEXT "",IDC_STATIC_STC32,0,0,261,10 + LTEXT "文字コードセット(&C):",IDC_STATIC_CHARCODE,5,15,64,10 + COMBOBOX IDC_COMBO_CODE,71,13,50,126,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,122,14,25,10 + CONTROL "&BOM",IDC_CHECK_BOM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,148,14,30,10 + LTEXT "改行コード(&E):",IDC_STATIC_EOL,181,15,45,10 + COMBOBOX IDC_COMBO_EOL,226,13,50,126,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "最近のファイル(&F):",IDC_STATIC,5,32,59,10 + COMBOBOX IDC_COMBO_MRU,71,30,185,236,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP + LTEXT "最近のフォルダ(&D):",IDC_STATIC,5,49,61,10 + COMBOBOX IDC_COMBO_OPENFOLDER,71,46,185,236,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP +END + +IDD_FILEUPDATEQUERY DIALOG 0, 0, 223, 107 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION +CAPTION "ファイルが更新されました" +FONT 9, "MS Pゴシック" +BEGIN + PUSHBUTTON "再読込(&R)",IDC_BTN_RELOAD,7,63,50,14 + DEFPUSHBUTTON "閉じる(&C)",IDC_BTN_CLOSE,59,63,50,14 + PUSHBUTTON "以後未編集で再読込(&L)",IDC_BTN_AUTOLOAD,114,63,102,14 + PUSHBUTTON "以後通知メッセージのみ(&M)",IDC_BTN_NOTIFYONLY,7,81,102,14 + PUSHBUTTON "以後更新を監視しない(&N)",IDC_BTN_NOSUPERVISION,114,81,102,14 + EDITTEXT IDC_UPDATEDFILENAME,7,7,209,25,ES_MULTILINE | ES_READONLY | NOT WS_TABSTOP + LTEXT "このファイルは外部のエディタ等で変更されています。",IDC_FILEUPDATEMSG,7,36,209,10 + LTEXT "",IDC_QUERYRELOADMSG,7,48,209,10 +END + +IDD_FAVORITE DIALOGEX 0, 0, 380, 274 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "履歴とお気に入りの管理" +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + CONTROL "List1",IDC_LIST_FAVORITE_FILE,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,3,17,373,213 + CONTROL "List1",IDC_LIST_FAVORITE_FOLDER,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,25,39,243,79 + CONTROL "List1",IDC_LIST_FAVORITE_EXCEPTMRU,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,27,42,243,79 + CONTROL "List1",IDC_LIST_FAVORITE_SEARCH,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,18,54,243,79 + CONTROL "List1",IDC_LIST_FAVORITE_REPLACE,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,11,73,243,79 + CONTROL "List1",IDC_LIST_FAVORITE_GREP_FILE,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,14,93,243,79 + CONTROL "List1",IDC_LIST_FAVORITE_GREP_FOLDER,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,18,115,243,79 + CONTROL "List1",IDC_LIST_FAVORITE_CMD,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,25,127,243,79 + CONTROL "List1",IDC_LIST_FAVORITE_CUR_DIR,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,25,127,243,79 + PUSHBUTTON "追加(&I)",IDC_BUTTON_ADD_FAVORITE,5,237,50,14 + LTEXT " 履歴の削除:",IDC_STATIC_BUTTONS,65,237,45,14,SS_CENTERIMAGE + PUSHBUTTON "すべて(&A)...",IDC_BUTTON_CLEAR,111,237,50,14 + PUSHBUTTON "お気に入り以外(&F)...",IDC_BUTTON_DELETE_NOFAVORATE,163,237,75,14 + PUSHBUTTON "存在しない項目(&N)...",IDC_BUTTON_DELETE_NOTFOUND,241,237,72,14 + PUSHBUTTON "選択項目(&D)",IDC_BUTTON_DELETE_SELECTED,315,237,58,14 + DEFPUSHBUTTON "閉じる(&C)",IDOK,260,255,50,14 + CONTROL "Tab1",IDC_TAB_FAVORITE,"SysTabControl32",WS_TABSTOP,3,4,374,15 + PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,315,255,50,14 + LTEXT "Message",IDC_STATIC_FAVORITE_MSG,4,254,250,19 +END + +IDD_TAGJUMPLIST DIALOGEX 0, 0, 410, 189 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "ダイレクトタグジャンプ一覧" +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + LTEXT "DIR",IDC_STATIC_BASEDIR,4,151,276,10,SS_NOPREFIX + LTEXT "キーワード(&K)",IDC_STATIC_KEYWORD,4,162,100,10,SS_NOPREFIX + COMBOBOX IDC_KEYWORD,3,172,134,180,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP + CONTROL "List1",IDC_LIST_TAGJUMP,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,3,4,403,143 + PUSHBUTTON "前へ(&P)",IDC_BUTTON_PREVTAG,296,152,50,14 + PUSHBUTTON "次へ(&N)",IDC_BUTTON_NEXTTAG,349,152,50,14 + PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,243,170,50,14 + DEFPUSHBUTTON "ジャンプ(&J)",IDOK,296,170,50,14 + PUSHBUTTON "キャンセル(&X)",IDCANCEL,349,170,50,14 + CONTROL "大文字小文字の同一視(&F)",IDC_CHECK_ICASE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,144,163,95,10 + CONTROL "文字列の途中にマッチ(&A)",IDC_CHECK_ANYWHERE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,144,175,95,10 +END + +IDD_TAG_MAKE DIALOGEX 0, 0, 233, 85 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "タグファイルの作成" +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + LTEXT "タグ作成フォルダ",IDC_STATIC,7,7,65,10 + EDITTEXT IDC_EDIT_TAG_MAKE_FOLDER,7,18,201,12,ES_AUTOHSCROLL + PUSHBUTTON "...",IDC_BUTTON_TAG_MAKE_REF,211,17,15,12 + PUSHBUTTON "上(&B)",IDC_BUTTON_FOLDER_UP,186,31,25,14 + CONTROL "サブフォルダも対象にする",IDC_CHECK_TAG_MAKE_RECURSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,34,107,10 + LTEXT "コマンドラインオプション",IDC_STATIC,7,49,86,10 + EDITTEXT IDC_EDIT_TAG_MAKE_CMDLINE,96,47,130,12,ES_AUTOHSCROLL + DEFPUSHBUTTON "作成(&O)",IDOK,68,64,50,14 + PUSHBUTTON "キャンセル(&X)",IDCANCEL,122,64,50,14 + PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,176,64,50,14 +END + +IDD_OPERATIONRUNNING DIALOG 0, 0, 190, 35 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "処理の実行中" +FONT 9, "MS Pゴシック" +BEGIN + LTEXT "処理中です・・・・",IDC_STATIC_MSG,5,5,54,10,NOT WS_GROUP + CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32",WS_BORDER,5,20,120,10 + PUSHBUTTON "キャンセル(&X)",IDCANCEL,135,16,50,14 + RTEXT "",IDC_STATIC_KENSUU,61,5,123,10,NOT WS_GROUP +END + +IDD_DIFF DIALOGEX 0, 0, 263, 303 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "DIFF差分表示" +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + GROUPBOX "比較するファイル",IDC_FRAME_DIFF_DST,7,47,249,138,WS_GROUP + EDITTEXT IDC_EDIT_DIFF_DST,13,72,191,13,ES_AUTOHSCROLL + CONTROL "外部ファイルを指定",IDC_RADIO_DIFF_DST1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,13,58,78,11 + PUSHBUTTON "参照(&R)...",IDC_BUTTON_DIFF_DST,208,72,42,14,WS_GROUP + CONTROL "他の編集中のファイル",IDC_RADIO_DIFF_DST2,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,13,89,147,11 + LISTBOX IDC_LIST_DIFF_FILES,13,102,236,77,LBS_SORT | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + CONTROL "大文字小文字の同一視(&C)",IDC_CHECK_DIFF_OPT_CASE,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,191,101,10 + CONTROL "空白無視(&W)",IDC_CHECK_DIFF_OPT_SPACE,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,203,64,10 + CONTROL "空白変更無視(&B)",IDC_CHECK_DIFF_OPT_SPCCHG,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,216,73,10 + CONTROL "空白行無視(&L)",IDC_CHECK_DIFF_OPT_BLINE,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,229,74,10 + CONTROL "タブ空白変換(&T)",IDC_CHECK_DIFF_OPT_TABSPC,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,242,74,10 + GROUPBOX "編集中ファイルが...",IDC_FRAME_DIFF_FILE12,110,190,146,26,WS_GROUP + CONTROL "新ファイル(&N)",IDC_RADIO_DIFF_FILE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,119,201,59,10 + CONTROL "旧ファイル(&D)",IDC_RADIO_DIFF_FILE2,"Button",BS_AUTORADIOBUTTON | WS_GROUP,183,201,59,10 + GROUPBOX "次の差分(前の差分)へ移動時",IDC_FRAME_SEARCH_MSG,110,221,146,41 + CONTROL "見つからないときにメッセージを表示(&M)",IDC_CHECK_NOTIFYNOTFOUND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,232,140,10 + CONTROL "先頭(末尾)から再検索する(&Z)",IDC_CHECK_SEARCHALL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,245,130,10 + CONTROL "DIFF差分がないときにメッセージを表示",IDC_CHECK_DIFF_EXEC_STATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,267,139,10 + DEFPUSHBUTTON "&OK",IDOK,93,282,50,14 + PUSHBUTTON "キャンセル(&X)",IDCANCEL,147,282,50,14 + PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,202,282,50,14 + LTEXT "編集中のファイル",IDC_STATIC,7,7,61,10 + EDITTEXT IDC_STATIC_DIFF_SRC,7,18,249,23,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL,WS_EX_STATICEDGE +END + +IDD_CTRLCODE DIALOGEX 0, 0, 179, 185 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "コントロールコード" +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + CONTROL "List1",IDC_LIST_CTRLCODE,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_NOLABELWRAP | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,2,2,175,162 + DEFPUSHBUTTON "&OK",IDOK,19,168,50,14 + PUSHBUTTON "キャンセル(&X)",IDCANCEL,73,168,50,14 + PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,127,168,50,14 +END + +IDD_SETCHARSET DIALOGEX 0, 0, 186, 45 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION +CAPTION "文字コードの指定" +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + LTEXT "文字コードセット(&C):",IDC_STATIC,5,9,64,10 + COMBOBOX IDC_COMBO_CHARSET,71,7,50,126,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,71,26,25,10 + CONTROL "&BOM",IDC_CHECK_BOM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,96,26,30,10 + DEFPUSHBUTTON "&OK",IDOK,129,7,50,14 + PUSHBUTTON "キャンセル(&X)",IDCANCEL,129,24,50,14 +END + +IDD_TYPELIST DIALOGEX 0, 0, 187, 280 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "タイプ別設定一覧" +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + LTEXT "下からタイプを選択してください(&T):",IDC_STATIC,5,5,111,10 + LISTBOX IDC_LIST_TYPES,5,15,120,258,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + DEFPUSHBUTTON "設定変更(&S)...",IDOK,130,15,50,14 + PUSHBUTTON "一時適用(&R)",IDC_BUTTON_TEMPCHANGE,130,31,50,14 + PUSHBUTTON "キャンセル(&X)",IDCANCEL,130,50,50,14 + PUSHBUTTON "インポート(&I)",IDC_BUTTON_IMPORT,130,79,50,14 + PUSHBUTTON "エクスポート(&E)",IDC_BUTTON_EXPORT,130,95,50,14 + PUSHBUTTON "初期化(&N)",IDC_BUTTON_INITIALIZE,130,111,50,14 + PUSHBUTTON "複製(&C)",IDC_BUTTON_COPY_TYPE,130,127,50,14 + PUSHBUTTON "↑(&U)",IDC_BUTTON_UP_TYPE,130,143,50,14 + PUSHBUTTON "↓(&O)",IDC_BUTTON_DOWN_TYPE,130,159,50,14 + PUSHBUTTON "追加(&A)",IDC_BUTTON_ADD_TYPE,130,175,50,14 + PUSHBUTTON "削除(&D)",IDC_BUTTON_DEL_TYPE,130,191,50,14 + CONTROL "右クリックメニューに追加",IDC_CHECK_EXT_RMENU,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_DISABLED | WS_TABSTOP,130,207,50,28 + CONTROL "ダブルクリックで開く",IDC_CHECK_EXT_DBLCLICK,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_DISABLED | WS_TABSTOP,130,231,50,28 + PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,130,262,50,14 +END + +IDD_TYPE_ASCERTAIN DIALOGEX 0, 0, 187, 100 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "インポート確認" +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + LTEXT "読込先:",IDC_STATIC,7,7,33,10 + CONTROL "新規追加(&A)",IDC_RADIO_TYPE_ADD,"Button",BS_AUTORADIOBUTTON,36,7,45,10 + CONTROL "基本",IDC_RADIO_TYPE_TO,"Button",BS_AUTORADIOBUTTON,86,7,135,10 + LTEXT "新タイプ名:",IDC_STATIC,7,27,33,10 + LTEXT "基本",IDC_STATIC_TYPE_FILE,45,27,135,16 + LTEXT "色選択(&C)",IDC_STATIC,7,47,35,10 + COMBOBOX IDC_COMBO_COLORS,44,45,100,250,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "上記条件でインポートします。よろしいですか?",IDC_STATIC_MSG,26,64,154,10 + DEFPUSHBUTTON "&OK",IDOK,26,79,50,14 + PUSHBUTTON "キャンセル(&X)",IDCANCEL,78,79,50,14 + PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,130,79,50,14 +END + +IDD_PROP_SCREEN DIALOGEX 0, 0, 302, 244 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + LTEXT "設定の名前(&N)",IDC_STATIC,5,6,49,10 + EDITTEXT IDC_EDIT_TYPENAME,55,4,59,12,ES_AUTOHSCROLL + LTEXT "ファイル拡張子(&X)",IDC_STATIC,124,6,58,10 + EDITTEXT IDC_EDIT_TYPEEXTS,184,4,113,12,ES_AUTOHSCROLL + RTEXT "折り返し方法(&<)",IDC_STATIC,8,34,56,10,NOT WS_GROUP + COMBOBOX IDC_COMBO_WRAPMETHOD,70,32,72,78,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + RTEXT "折り返し桁数(&R)",IDC_STATIC,8,49,56,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_MAXLINELEN,70,48,40,12 + CONTROL "Spin1",IDC_SPIN_MAXLINELEN,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,117,48,9,12,WS_EX_TRANSPARENT + RTEXT "文字の間隔(&C)",IDC_STATIC,8,63,56,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_CHARSPACE,70,62,40,12 + CONTROL "Spin1",IDC_SPIN_CHARSPACE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,117,62,9,12,WS_EX_TRANSPARENT + LTEXT "ドット",IDC_STATIC,114,63,18,10 + RTEXT "行の間隔(&L)",IDC_STATIC,8,77,56,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_LINESPACE,70,76,40,12,ES_AUTOHSCROLL + CONTROL "Spin3",IDC_SPIN_LINESPACE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,117,76,9,12 + LTEXT "ドット",IDC_STATIC,114,77,18,10 + RTEXT "TAB幅(&T)",IDC_STATIC,8,91,56,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_TABSPACE,70,90,40,12,ES_AUTOHSCROLL + CONTROL "Spin3",IDC_SPIN_TABSPACE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,117,90,7,12 + LTEXT "T&AB表示",IDC_STATIC,16,104,56,10,NOT WS_GROUP + COMBOBOX IDC_CHECK_TAB_ARROW,48,104,46,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + EDITTEXT IDC_EDIT_TABVIEWSTRING,102,104,40,12,ES_AUTOHSCROLL + CONTROL "S&PACEの挿入",IDC_CHECK_INS_SPACE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,123,57,10 + COMBOBOX IDC_COMBO_TSV_MODE,16,121,46,40,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "レイアウト",IDC_STATIC,3,22,145,117 + CONTROL "自動インデント(&U)",IDC_CHECK_INDENT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,154,72,10 + CONTROL "全角空白も(&Z)",IDC_CHECK_INDENT_WSPACE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,83,154,61,10 + LTEXT "スマートインデント(&S)",IDC_STATIC,8,169,68,10 + COMBOBOX IDC_COMBO_SMARTINDENT,82,167,60,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "その他のインデント対象文字(&I)",IDC_STATIC,8,183,120,10 + EDITTEXT IDC_EDIT_INDENTCHARS,38,195,103,12,ES_AUTOHSCROLL + LTEXT "折り返し行インデント(&2)",IDC_STATIC,8,211,75,10 + COMBOBOX IDC_COMBO_INDENTLAYOUT,87,209,54,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "改行時に末尾の空白を削除(&E)",IDC_CHECK_RTRIM_PREVLINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,224,113,10 + GROUPBOX "インデント",IDC_STATIC,3,143,145,97 + CONTROL "標準ルール(&B)",IDC_RADIO_OUTLINEDEFAULT,"Button",BS_AUTORADIOBUTTON | WS_GROUP,162,33,82,10 + COMBOBOX IDC_COMBO_OUTLINES,173,46,81,85,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "ルールファイル(&D)",IDC_RADIO_OUTLINERULEFILE,"Button",BS_AUTORADIOBUTTON,162,63,69,10 + EDITTEXT IDC_EDIT_OUTLINERULEFILE,173,74,92,14,ES_AUTOHSCROLL + PUSHBUTTON "(&1)...",IDC_BUTTON_RULEFILE_REF,268,74,20,14 + GROUPBOX "アウトライン解析方法",IDC_STATIC,153,22,145,71 + CONTROL "使用する(&G)",IDC_CHECK_USETYPEFONT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,108,48,10 + LTEXT "Font(nnpt)",IDC_STATIC_TYPEFONT,210,105,85,16,SS_CENTERIMAGE + PUSHBUTTON "フォント(&F)...",IDC_BUTTON_TYPEFONT,173,121,80,14 + GROUPBOX "タイプ別フォント",IDC_STATIC,153,97,145,42 + CONTROL "英文ワードラップ(&W)",IDC_CHECK_WORDWRAP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,154,78,10 + CONTROL "改行ぶら下げ(&^)",IDC_CHECK_KINSOKURET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,168,100,10 + CONTROL "ぶら下げを隠す(&-)",IDC_CHECK_KINSOKUHIDE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,172,182,100,10 + CONTROL "句読点ぶら下げ(&\\)",IDC_CHECK_KINSOKUKUTO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,196,95,10 + EDITTEXT IDC_EDIT_KINSOKUKUTO,258,195,30,12,ES_AUTOHSCROLL + CONTROL "行頭禁則(&[)",IDC_CHECK_KINSOKUHEAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,210,54,10 + EDITTEXT IDC_EDIT_KINSOKUHEAD,218,209,70,12,ES_AUTOHSCROLL + CONTROL "行末禁則(&])",IDC_CHECK_KINSOKUTAIL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,224,54,10 + EDITTEXT IDC_EDIT_KINSOKUTAIL,218,223,70,12,ES_AUTOHSCROLL + GROUPBOX "禁則処理",IDC_STATIC,153,143,145,97 +END + +IDD_PROP_COLOR DIALOGEX 0, 0, 302, 244 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + GROUPBOX "色指定(&L)",IDC_STATIC,3,6,148,204,WS_GROUP + LISTBOX IDC_LIST_COLORS,6,18,142,148,LBS_OWNERDRAWFIXED | WS_VSCROLL | WS_GROUP | WS_TABSTOP + CONTROL "色分け/表示(&D)",IDC_CHECK_DISP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,165,65,10 + CONTROL "太字(&B)",IDC_CHECK_BOLD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,165,36,10 + CONTROL "下線(&U)",IDC_CHECK_UNDERLINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,112,165,36,10 + LTEXT "文字色(C)",IDC_STATIC_MOZI,16,181,34,10 + CONTROL "&C",IDC_BUTTON_TEXTCOLOR,"Button",BS_OWNERDRAW | WS_TABSTOP,54,178,25,14 + PUSHBUTTON "文字色統一(&<)...",IDC_BUTTON_SAMETEXTCOLOR,84,178,58,14 + LTEXT "背景色(K)",IDC_STATIC_HAIKEI,16,196,33,10,NOT WS_GROUP + CONTROL "&K",IDC_BUTTON_BACKCOLOR,"Button",BS_OWNERDRAW | WS_TABSTOP,54,193,25,14 + PUSHBUTTON "背景色統一(&>)...",IDC_BUTTON_SAMEBKCOLOR,84,193,58,14 + PUSHBUTTON "インポート(&I)...",IDC_BUTTON_IMPORT,25,215,60,14,WS_GROUP + PUSHBUTTON "エクスポート(&X)...",IDC_BUTTON_EXPORT,88,215,60,14 + LTEXT "強調キーワード&1",IDC_STATIC,162,18,54,10 + COMBOBOX IDC_COMBO_SET,218,16,75,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "&2~10...",IDC_BUTTON_KEYWORD_SELECT,218,32,75,14 + PUSHBUTTON "共通設定(&C)...",IDC_BUTTON_EDITKEYWORD,218,47,75,14 + GROUPBOX "強調キーワード",IDC_STATIC,156,6,142,60,WS_GROUP + LTEXT "ブロック型(&F)",IDC_STATIC,164,80,42,10 + EDITTEXT IDC_EDIT_BLOCKCOMMENT_FROM,211,78,27,12,ES_AUTOHSCROLL + LTEXT "~(&T)",IDC_STATIC,245,80,18,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_BLOCKCOMMENT_TO,267,78,26,12,ES_AUTOHSCROLL + LTEXT "ブロック型(&A)",IDC_STATIC,164,94,42,10 + EDITTEXT IDC_EDIT_BLOCKCOMMENT_FROM2,211,92,27,12,ES_AUTOHSCROLL + LTEXT "~(&Z)",IDC_STATIC,245,94,18,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_BLOCKCOMMENT_TO2,267,92,26,12,ES_AUTOHSCROLL + LTEXT "行型(&M)",IDC_STATIC,164,110,27,10 + EDITTEXT IDC_EDIT_LINECOMMENT,195,108,24,12,ES_AUTOHSCROLL + CONTROL "桁(&P)",IDC_CHECK_LCPOS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,223,109,33,10 + RTEXT "&@",IDC_LABEL_LCPOS,256,110,8,10 + EDITTEXT IDC_EDIT_LINECOMMENTPOS,267,108,26,12,ES_AUTOHSCROLL + CONTROL "",IDC_SPIN_LCColNum,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,295,108,6,12 + LTEXT "行型(&E)",IDC_STATIC,164,124,25,10 + EDITTEXT IDC_EDIT_LINECOMMENT2,195,122,24,12,ES_AUTOHSCROLL + CONTROL "桁(&O)",IDC_CHECK_LCPOS2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,223,123,34,10 + RTEXT "&[",IDC_LABEL_LCPOS2,256,124,8,10 + EDITTEXT IDC_EDIT_LINECOMMENTPOS2,267,122,26,12,ES_AUTOHSCROLL + CONTROL "",IDC_SPIN_LCColNum2,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,295,122,6,12 + LTEXT "行型(&G)",IDC_STATIC,164,138,26,10 + EDITTEXT IDC_EDIT_LINECOMMENT3,195,136,24,12,ES_AUTOHSCROLL + CONTROL "桁(&J)",IDC_CHECK_LCPOS3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,223,137,33,10 + RTEXT "&]",IDC_LABEL_LCPOS3,256,138,8,10 + EDITTEXT IDC_EDIT_LINECOMMENTPOS3,267,136,26,12,ES_AUTOHSCROLL + CONTROL "",IDC_SPIN_LCColNum3,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,295,136,6,12 + GROUPBOX "コメントスタイル",IDC_STATIC,156,68,142,85,WS_GROUP + GROUPBOX "文字列エスケープ(&Q)",IDC_STATIC,156,164,142,46,WS_GROUP + COMBOBOX IDC_COMBO_STRINGLITERAL,160,178,68,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "行内のみ(&\\)",IDC_CHECK_STRINGLINEONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,233,178,64,10 + CONTROL "終了文字がない場合行末まで色分け(&N)",IDC_CHECK_STRINGENDLINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,196,136,10 + LTEXT "縦線桁指定(&3)",IDC_STATIC,164,218,46,10 + EDITTEXT IDC_EDIT_VERTLINE,210,216,74,12,ES_AUTOHSCROLL + LTEXT "*桁またはStep(Begin, End)でコンマ区切り",IDC_STATIC,165,230,142,10 +END + +IDD_PROP_SUPPORT DIALOGEX 0, 0, 302, 244 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + LTEXT "単語ファイル(&W)",IDC_STATIC,8,17,53,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_HOKANFILE,63,15,150,12,ES_AUTOHSCROLL | WS_GROUP + PUSHBUTTON "(&1)...",IDC_BUTTON_HOKANFILE_REF,215,14,19,14 + COMBOBOX IDC_COMBO_HOKAN_TYPE,236,15,58,57,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "英大文字小文字を同一視(&I)",IDC_CHECK_HOKANLOHICASE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,31,110,10 + LTEXT "候補:",IDC_STATIC,122,33,20,10,NOT WS_GROUP + CONTROL "編集中のファイル(&F)",IDC_CHECK_HOKANBYFILE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,142,31,75,10 + CONTROL "強調キーワード(&K)",IDC_CHECK_HOKANBYKEYWORD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,217,31,75,10 + GROUPBOX "入力補完機能",IDC_STATIC,3,3,295,45,WS_GROUP + GROUPBOX "外部ヘルプの設定(&L)",IDC_STATIC,3,55,295,32,WS_GROUP + EDITTEXT IDC_EDIT_TYPEEXTHELP,8,68,264,12,ES_AUTOHSCROLL | WS_GROUP + PUSHBUTTON "(&2)...",IDC_BUTTON_TYPEOPENHELP,275,67,19,14 + GROUPBOX "外部HTMLヘルプの設定(&P)",IDC_STATIC,3,95,295,45,WS_GROUP + EDITTEXT IDC_EDIT_TYPEEXTHTMLHELP,8,109,264,12,ES_AUTOHSCROLL | WS_GROUP + PUSHBUTTON "(&3)...",IDC_BUTTON_TYPEOPENEXTHTMLHELP,275,107,19,14 + CONTROL "ビューアを複数起動しない(&N)",IDC_CHECK_TYPEHTMLHELPISSINGLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,125,109,10 + CONTROL "保存時に改行コードの混在を警告する(&E)",IDC_CHECK_CHKENTERATEND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,145,146,10 + CONTROL "文字列を無視する(&S)",IDC_CHECK_INDENTCPPSTR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,171,146,10 + CONTROL "コメントを無視する(&C)",IDC_CHECK_INDENTCPPCMT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,158,171,130,10 + CONTROL "Undoバッファを分ける(&U)",IDC_CHECK_INDENTCPPUNDO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,183,146,10 + GROUPBOX "C/C++インデント詳細設定",IDC_STATIC,3,159,295,40,WS_GROUP +END + +IDD_PROP_REGEX DIALOGEX 0, 0, 302, 244 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + CONTROL "正規表現キーワードを使用する(&R)",IDC_CHECK_REGEX,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,5,5,124,10 + RTEXT "BREGONIG.DLL Version",IDC_LABEL_REGEX_VERSION,89,15,208,11,NOT WS_GROUP,WS_EX_TRANSPARENT + GROUPBOX "正規表現キーワード(&K)",IDC_FRAME_REGEX,3,24,295,169 + CONTROL "List5",IDC_LIST_REGEX,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOLABELWRAP | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,8,36,243,115 + LTEXT "正規表現(&N)",IDC_LABEL_REGEX_KEYWORD,13,157,41,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_REGEX,59,155,192,14,ES_AUTOHSCROLL + LTEXT "色指定(&C)",IDC_LABEL_REGEX_COLOR,20,174,34,10,NOT WS_GROUP + COMBOBOX IDC_COMBO_REGEX_COLOR,59,172,128,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "挿入(&S)",IDC_BUTTON_REGEX_INS,255,118,38,15 + PUSHBUTTON "追加(&A)",IDC_BUTTON_REGEX_ADD,255,136,38,15 + PUSHBUTTON "更新(&E)",IDC_BUTTON_REGEX_UPD,255,154,38,15 + PUSHBUTTON "削除(&D)",IDC_BUTTON_REGEX_DEL,255,172,38,15 + PUSHBUTTON "先頭(&T)",IDC_BUTTON_REGEX_TOP,255,36,38,15 + PUSHBUTTON "上へ(&U)",IDC_BUTTON_REGEX_UP,255,54,38,15 + PUSHBUTTON "下へ(&G)",IDC_BUTTON_REGEX_DOWN,255,72,38,15 + PUSHBUTTON "最終(&B)",IDC_BUTTON_REGEX_LAST,255,90,38,15 + PUSHBUTTON "インポート(&I)...",IDC_BUTTON_REGEX_IMPORT,173,196,60,14,WS_GROUP + PUSHBUTTON "エクスポート(&X)...",IDC_BUTTON_REGEX_EXPORT,236,196,60,14 + LTEXT "[色指定]で「URL」を選択するとマッチ文字列がクリッカブルになります",IDC_STATIC,14,195,138,20 +END + +IDD_PROP_KEYHELP DIALOGEX 0, 0, 302, 244 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + CONTROL "キーワードヘルプ機能を使う(&K)",IDC_CHECK_KEYHELP,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,5,6,114,10 + GROUPBOX "辞書ファイル一覧(&L)",IDC_FRAME_KEYHELP,3,21,295,174 + CONTROL "List5",IDC_LIST_KEYHELP,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOLABELWRAP | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,8,33,238,118 + LTEXT "<辞書の説明>",IDC_LABEL_KEYHELP_TITLE,10,159,50,10,NOT WS_GROUP + LTEXT "辞書ファイルの概要",IDC_LABEL_KEYHELP_ABOUT,61,159,185,10,NOT WS_GROUP,WS_EX_TRANSPARENT + LTEXT "辞書ファイル",IDC_LABEL_KEYHELP_KEYWORD,13,173,41,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_KEYHELP,61,172,170,12,ES_AUTOHSCROLL + PUSHBUTTON "...",IDC_BUTTON_KEYHELP_REF,234,172,12,13,WS_GROUP + LTEXT "↑優先度(高)",IDC_LABEL_KEYHELP_PRIOR,249,33,44,10,NOT WS_GROUP + PUSHBUTTON "挿入(&S)",IDC_BUTTON_KEYHELP_INS,251,136,38,15 + PUSHBUTTON "更新(&E)",IDC_BUTTON_KEYHELP_UPD,251,154,38,15 + PUSHBUTTON "削除(&D)",IDC_BUTTON_KEYHELP_DEL,251,172,38,15 + PUSHBUTTON "先頭(&T)",IDC_BUTTON_KEYHELP_TOP,251,44,38,15 + PUSHBUTTON "上へ(&U)",IDC_BUTTON_KEYHELP_UP,251,62,38,15 + PUSHBUTTON "下へ(&G)",IDC_BUTTON_KEYHELP_DOWN,251,80,38,15 + PUSHBUTTON "最終(&B)",IDC_BUTTON_KEYHELP_LAST,251,98,38,15 + PUSHBUTTON "インポート(&I)...",IDC_BUTTON_KEYHELP_IMPORT,173,199,60,14,WS_GROUP + PUSHBUTTON "エクスポート(&X)...",IDC_BUTTON_KEYHELP_EXPORT,236,199,60,14 + CONTROL "ヒットした次の辞書も検索(&A)",IDC_CHECK_KEYHELP_ALLSEARCH,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,7,200,105,10 + CONTROL "キーワードも表示する(&W)",IDC_CHECK_KEYHELP_KEYDISP,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,7,212,95,10 + CONTROL "選択範囲で前方一致検索(&P)",IDC_CHECK_KEYHELP_PREFIX,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,7,224,108,10 + LTEXT "右クリックメニュー(&R)",IDC_STATIC_MENU,120,225,70,10,NOT WS_GROUP + COMBOBOX IDC_COMBO_MENU,192,223,60,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP +END + +IDD_PROP_WINDOW DIALOGEX 0, 0, 302, 244 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + LTEXT "入力モード",IDC_STATIC,5,6,40,10 + LTEXT "改行コード(&E)",IDC_STATIC,8,34,46,10 + COMBOBOX IDC_COMBO_DEFAULT_EOLTYPE,57,32,52,57,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "&BOM",IDC_CHECK_DEFAULT_BOM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,33,30,10 + LTEXT "文字コード(&C)",IDC_STATIC,8,49,46,10 + COMBOBOX IDC_COMBO_DEFAULT_CODETYPE,57,48,52,57,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,49,25,10 + CONTROL "自動判別時にCESU-8 を優先する(&U)",IDC_CHECK_PRIOR_CESU8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,64,135,10 + GROUPBOX "デフォルトの文字コード",IDC_STATIC,3,20,145,62 + LTEXT "ON/OFF状態(&M)",IDC_STATIC,169,34,55,10 + COMBOBOX IDC_COMBO_IMESWITCH,232,32,61,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "入力モード(&D)",IDC_STATIC,179,50,45,10 + COMBOBOX IDC_COMBO_IMESTATE,232,48,61,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "起動時のIME (日本語入力変換)",IDC_STATIC,153,20,145,62 + CONTROL "",IDC_STATIC,"Static",SS_ETCHEDFRAME,5,88,293,1 + LTEXT "ウィンドウ",IDC_STATIC,5,96,36,10 + CONTROL "文書アイコンを使う(&O)",IDC_CHECK_DOCICON,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,107,86,10 + CONTROL "折り返し単位(&R)",IDC_RADIO_LINENUM_LAYOUT,"Button",BS_AUTORADIOBUTTON | WS_GROUP,8,134,64,10 + CONTROL "改行単位(&W)",IDC_RADIO_LINENUM_CRLF,"Button",BS_AUTORADIOBUTTON,8,149,64,10 + LTEXT "桁数",IDC_STATIC,18,165,16,10 + EDITTEXT IDC_EDIT_LINENUMWIDTH,41,163,31,12,ES_AUTOHSCROLL + CONTROL "Spin3",IDC_SPIN_LINENUMWIDTH,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,61,163,9,12 + GROUPBOX "行番号の表示",IDC_STATIC,4,122,70,59,WS_GROUP + CONTROL "なし(&N)",IDC_RADIO_LINETERMTYPE0,"Button",BS_AUTORADIOBUTTON | WS_GROUP,83,134,39,10 + CONTROL "縦線(&V)",IDC_RADIO_LINETERMTYPE1,"Button",BS_AUTORADIOBUTTON,83,149,41,10 + CONTROL "任意(&Y)",IDC_RADIO_LINETERMTYPE2,"Button",BS_AUTORADIOBUTTON,83,164,41,10 + LTEXT "半角(&S)",IDC_LABEL_LINETERMCHAR,93,178,26,10 + EDITTEXT IDC_EDIT_LINETERMCHAR,124,177,15,12,ES_AUTOHSCROLL + GROUPBOX "行番号区切り",IDC_STATIC,78,122,70,80 + EDITTEXT IDC_EDIT_BACKIMG_PATH,158,134,122,12,ES_AUTOHSCROLL + PUSHBUTTON "...",IDC_BUTTON_BACKIMG_PATH_SEL,282,134,12,12 + LTEXT "表示位置",IDC_STATIC,158,150,40,10 + COMBOBOX IDC_COMBO_BACKIMG_POS,158,163,39,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "X",IDC_STATIC,200,165,8,10 + LTEXT "Y",IDC_STATIC,200,180,8,10 + LTEXT "Offset",IDC_STATIC,210,150,25,10 + EDITTEXT IDC_EDIT_BACKIMG_OFFSET_X,210,163,20,12 + EDITTEXT IDC_EDIT_BACKIMG_OFFSET_Y,210,178,20,12 + LTEXT "Repeat",IDC_STATIC,235,150,26,10 + CONTROL "",IDC_CHECK_BACKIMG_REP_X,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,243,164,10,10 + CONTROL "",IDC_CHECK_BACKIMG_REP_Y,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,243,179,10,10 + LTEXT "Scroll",IDC_STATIC,270,150,26,10 + CONTROL "",IDC_CHECK_BACKIMG_SCR_X,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,276,164,10,10 + CONTROL "",IDC_CHECK_BACKIMG_SCR_Y,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,276,179,10,10 + LTEXT "透明度",IDC_STATIC,158,194,45,10 + CONTROL "",IDC_TRACKBAR_BACKIMG_TRANSPARENCY,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,205,193,60,12 + EDITTEXT IDC_EDIT_BACKIMG_TRANSPARENCY,265,193,28,12 + CONTROL "Spin1",IDC_UPDOWN_BACKIMG_TRANSPARENCY,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,285,193,9,12 + GROUPBOX "背景画像",IDC_STATIC,153,122,145,90 +END + +IDD_DIALOG_KEYWORD_SELECT DIALOGEX 0, 0, 177, 197 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "強調キーワードの設定" +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "&OK",IDOK,31,176,50,14 + PUSHBUTTON "キャンセル(&X)",IDCANCEL,91,176,50,14 + LTEXT "強調キーワード&1",IDC_STATIC,7,15,54,13 + COMBOBOX IDC_COMBO1,68,13,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "強調キーワード&2",IDC_STATIC,7,31,54,13 + COMBOBOX IDC_COMBO2,68,29,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "強調キーワード&3",IDC_STATIC,7,48,54,13 + COMBOBOX IDC_COMBO3,68,45,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "強調キーワード&4",IDC_STATIC,7,63,54,13 + COMBOBOX IDC_COMBO4,68,61,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "強調キーワード&5",IDC_STATIC,7,80,54,13 + COMBOBOX IDC_COMBO5,68,77,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "強調キーワード&6",IDC_STATIC,7,95,54,13 + COMBOBOX IDC_COMBO6,68,93,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "強調キーワード&7",IDC_STATIC,7,111,54,13 + COMBOBOX IDC_COMBO7,68,109,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "強調キーワード&8",IDC_STATIC,7,126,54,13 + COMBOBOX IDC_COMBO8,68,125,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "強調キーワード&9",IDC_STATIC,7,143,54,13 + COMBOBOX IDC_COMBO9,68,141,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "強調キーワード1&0",IDC_STATIC,7,159,58,13 + COMBOBOX IDC_COMBO10,68,157,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP +END + +IDD_SAMECOLOR DIALOGEX 0, 0, 183, 206 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "文字色統一" +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + LTEXT "統一色",IDC_STATIC,7,13,24,10 + LTEXT "Static",IDC_STATIC_COLOR,35,10,86,14,SS_CENTERIMAGE + LTEXT "変更対象の色(&C)を選んでチェック状態にしてください",IDC_STATIC,7,29,166,10 + LISTBOX IDC_LIST_COLORS,7,41,114,90,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "全チェック(&A)",IDC_BUTTON_SELALL,125,70,49,14 + PUSHBUTTON "全解除(&N)",IDC_BUTTON_SELNOTING,125,89,49,14 + LISTBOX IDC_LIST_ITEMINFO,7,143,114,35,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL + DEFPUSHBUTTON "&OK",IDOK,15,185,49,14 + PUSHBUTTON "キャンセル(&X)",IDCANCEL,67,185,49,14 + PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,119,185,49,14 +END + +IDD_PROP_GENERAL DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + GROUPBOX "カーソル",IDC_STATIC,3,3,149,90 + CONTROL "フリーカーソル(&F)",IDC_CHECK_FREECARET,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,16,120,10 + CONTROL "単語単位で移動するときに\n単語の両端に止まる(&B)",IDC_CHECK_STOPS_BOTH_ENDS_WHEN_SEARCH_WORD, + "Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP,8,28,120,20 + CONTROL "段落単位で移動するときに\n段落の両端に止まる(&P)",IDC_CHECK_STOPS_BOTH_ENDS_WHEN_SEARCH_PARAGRAPH, + "Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP,8,48,120,20 + CONTROL "マウスクリックでのアクティブ化では\nカーソルを移動しない(&O)",IDC_CHECK_NOMOVE_ACTIVATE_BY_MOUSE, + "Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP,8,68,133,20 + GROUPBOX "カーソル形状",IDC_STATIC,3,93,149,26,WS_GROUP + CONTROL "&Windows風",IDC_RADIO_CARETTYPE0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,8,104,61,10 + CONTROL "MS-&DOS風",IDC_RADIO_CARETTYPE1,"Button",BS_AUTORADIOBUTTON,69,104,61,10 + GROUPBOX "タスクトレイ",IDC_STATIC,3,122,149,68,WS_GROUP + CONTROL "タスクトレイを使う(&T)",IDC_CHECK_USETRAYICON,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,135,81,10 + CONTROL "タスクトレイに常駐(&R)",IDC_CHECK_STAYTASKTRAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,148,104,10 + LTEXT "左クリックメニューのショートカットキー(&K)",IDC_STATIC,8,161,131,10 + CONTROL "HotKey1",IDC_HOTKEY_TRAYMENU,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,8,172,95,12 + CONTROL "同時に複数の編集用ウィンドウを\n閉じるとき確認(&U)",IDC_CHECK_CLOSEALLCONFIRM, + "Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP,8,194,124,20 + CONTROL "サクラエディタの全終了で編集用\nウィンドウを閉じるとき確認(&V)",IDC_CHECK_EXITCONFIRM, + "Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP,8,214,124,20 + GROUPBOX "スクロール",IDC_STATIC,158,3,130,135,WS_GROUP + LTEXT "行数(&N)",IDC_STATIC,163,19,29,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_REPEATEDSCROLLLINENUM,196,17,40,12,ES_AUTOHSCROLL | WS_GROUP + CONTROL "Spin3",IDC_SPIN_REPEATEDSCROLLLINENUM,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,236,17,9,12 + CONTROL "少し滑らかにする(&S)",IDC_CHECK_REPEATEDSCROLLSMOOTH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,163,33,80,10 + LTEXT "組み合わせてホイール操作した時\nページスクロールする(&J)",IDC_STATIC,163,48,110,20,NOT WS_GROUP + COMBOBOX IDC_COMBO_WHEEL_PAGESCROLL,178,72,85,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "組み合わせてホイール操作した時\n横スクロールする(&H)",IDC_STATIC,163,90,111,20,NOT WS_GROUP + COMBOBOX IDC_COMBO_WHEEL_HSCROLL,178,114,85,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "画面キャッシュを使う(&G)",IDC_CHECK_MEMDC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,163,142,96,16 + GROUPBOX "履歴",IDC_STATIC,158,160,130,74,WS_GROUP + LTEXT "ファイルの履歴&MAX",IDC_STATIC,163,172,74,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_MAX_MRU_FILE,168,184,28,12,ES_AUTOHSCROLL | WS_GROUP + CONTROL "Spin1",IDC_SPIN_MAX_MRU_FILE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,196,184,9,12 + PUSHBUTTON "履歴をクリア(&C)...",IDC_BUTTON_CLEAR_MRU_FILE,208,184,61,14 + LTEXT "フォルダの履歴MA&X",IDC_STATIC,163,202,74,10 + EDITTEXT IDC_EDIT_MAX_MRU_FOLDER,168,214,28,12,ES_AUTOHSCROLL | WS_GROUP + CONTROL "Spin1",IDC_SPIN_MAX_MRU_FOLDER,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,196,214,9,12 + PUSHBUTTON "履歴をクリア(&L)...",IDC_BUTTON_CLEAR_MRU_FOLDER,208,214,61,14 +END + +IDD_PROP_WIN DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + CONTROL "ツールバー表示(&T)",IDC_CHECK_DispTOOLBAR,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,17,76,10 + CONTROL "ファンクションキー表示(&K)",IDC_CHECK_DispFUNCKEYWND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,30,96,10 + CONTROL "ステータスバー表示(&S)",IDC_CHECK_DispSTATUSBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,43,88,10 + CONTROL "水平スクロールバー(&R)",IDC_CHECK_bScrollBarHorz,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,104,17,89,10 + CONTROL "アイコン付きメニュー(&I)",IDC_CHECK_bMenuIcon,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,195,17,87,10 + PUSHBUTTON "位置と大きさの設定(&W)...",IDC_BUTTON_WINSIZE,202,35,83,14 + LTEXT "タブバー表示は\n[タブバー]タブにあります",IDC_STATIC,111,32,83,20 + GROUPBOX "基本設定",IDC_STATIC,3,3,285,57,WS_GROUP + LTEXT "ルーラーの高さ(&E)",IDC_STATIC,7,76,58,10 + EDITTEXT IDC_EDIT_nRulerHeight,101,74,28,12,ES_AUTOHSCROLL + CONTROL "Spin1",IDC_SPIN_nRulerHeight,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,124,74,10,12 + LTEXT "ドット",IDC_STATIC,133,76,17,10 + LTEXT "ルーラーとテキストの隙間(&P)",IDC_STATIC,7,89,91,10 + EDITTEXT IDC_EDIT_nRulerBottomSpace,101,88,28,12,ES_AUTOHSCROLL + CONTROL "Spin1",IDC_SPIN_nRulerBottomSpace,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,124,87,10,12 + LTEXT "ドット",IDC_STATIC,133,89,17,10 + LTEXT "行番号とテキストの隙間(&L)",IDC_STATIC,7,104,86,10 + EDITTEXT IDC_EDIT_nLineNumberRightSpace,101,102,28,12,ES_AUTOHSCROLL + CONTROL "Spin1",IDC_SPIN_nLineNumberRightSpace,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,124,102,10,12 + LTEXT "ドット",IDC_STATIC,133,104,17,10 + GROUPBOX "ルーラー / 行番号",IDC_STATIC,3,64,153,54 + CONTROL "垂直スクロールの同期をとる(&V)",IDC_CHECK_SplitterWndVScroll,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,134,115,10 + CONTROL "水平スクロールの同期をとる(&H)",IDC_CHECK_SplitterWndHScroll,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,147,116,10 + GROUPBOX "分割ウィンドウ",IDC_STATIC,3,122,153,39,WS_GROUP + LTEXT "位置",IDC_STATIC,167,76,16,10 + CONTROL "上(&O)",IDC_RADIO_FUNCKEYWND_PLACE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,191,76,34,10 + CONTROL "下(&B)",IDC_RADIO_FUNCKEYWND_PLACE2,"Button",BS_AUTORADIOBUTTON,227,76,34,10 + LTEXT "グループボタン数(&G)",IDC_STATIC,167,89,67,10 + EDITTEXT IDC_EDIT_FUNCKEYWND_GROUPNUM,236,88,28,12,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "Spin1",IDC_SPIN_FUNCKEYWND_GROUPNUM,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,262,88,10,12 + GROUPBOX "ファンクションキー",IDC_STATIC,162,64,126,40 + LTEXT "アクティブ時(&1)",IDC_STATIC,7,179,59,10 + EDITTEXT IDC_WINCAPTION_ACTIVE,67,176,216,14,ES_AUTOHSCROLL + LTEXT "非アクティブ時(&2)",IDC_STATIC,7,196,58,10 + EDITTEXT IDC_WINCAPTION_INACTIVE,67,193,216,14,ES_AUTOHSCROLL + GROUPBOX "タイトルバー",IDC_STATIC,3,165,285,47 + GROUPBOX "言語",IDC_STATIC,162,108,126,40 + COMBOBOX IDC_COMBO_LANGUAGE,178,126,105,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP +END + +IDD_PROP_TOOLBAR DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + RTEXT "種別(&K)",IDC_LABEL_MENUFUNCKIND,4,4,51,10 + COMBOBOX IDC_COMBO_FUNCKIND,56,2,70,170,CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + LTEXT "機能(&F)",IDC_LABEL_MENUFUNC,3,15,40,10 + LISTBOX IDC_LIST_FUNC,3,25,123,199,LBS_OWNERDRAWFIXED | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + CONTROL "フラットなボタン(&L)",IDC_CHECK_TOOLBARISFLAT,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,202,2,73,10 + LTEXT "ツールバー(&T)",IDC_LABEL_TOOLBAR,164,15,46,10 + LISTBOX IDC_LIST_RES,164,25,123,199,LBS_OWNERDRAWFIXED | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + PUSHBUTTON "削除(&D)",IDC_BUTTON_DELETE,129,32,33,14,WS_GROUP + PUSHBUTTON "---(&S)",IDC_BUTTON_INSERTSEPARATOR,129,51,33,14 + PUSHBUTTON "→(&A)",IDC_BUTTON_INSERT,129,71,33,14 + PUSHBUTTON ">>(&B)",IDC_BUTTON_ADD,129,85,33,14 + PUSHBUTTON "↑(&U)",IDC_BUTTON_UP,129,105,33,14 + PUSHBUTTON "↓(&O)",IDC_BUTTON_DOWN,129,119,33,14 + PUSHBUTTON "折返(&W)",IDC_BUTTON_INSERTWRAP,129,151,33,14 +END + +IDD_PROP_TAB DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP | WS_EX_COMPOSITED +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + CONTROL "タブバーを表示する(&D)",IDC_CHECK_DispTabWnd,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,11,111,10 + CONTROL "ウィンドウをまとめてグループ化する(&B)",IDC_CHECK_DispTabWndMultiWin, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,40,239,10 + CONTROL "最後のファイルを閉じたとき(無題)文書を残す(&R)",IDC_CHECK_RetainEmptyWindow, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,24,53,226,10 + CONTROL "ウィンドウの閉じるボタンは現在のファイルのみ閉じる(&C)",IDC_CHECK_CloseOneWin, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,24,66,226,10 + CONTROL "外部から起動するときは新しいウインドウで開く(&O)",IDC_CHECK_OpenNewWin,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,24,79,170,10 + GROUPBOX "動作モード",IDC_STATIC,7,27,280,68 + CONTROL "アイコン表示(&I)",IDC_CHECK_DispTabIcon,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,115,63,10 + CONTROL "等幅(&E)",IDC_CHECK_SameTabWidth,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,80,115,39,10 + LTEXT "閉じるボタン(&X)",IDC_TextTabClose,124,116,48,10 + COMBOBOX IDC_CHECK_DispTabClose,173,113,46,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "フォント(&F)...",IDC_BUTTON_TABFONT,232,113,51,14 + RTEXT "Font",IDC_STATIC_TABFONT,102,127,180,12 + CONTROL "タブ一覧をソートする(&S)",IDC_CHECK_SortTabList,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,129,85,10 + CONTROL "多段(&M)",IDC_CHECK_TAB_MULTILINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,141,60,10 + RTEXT "表示位置(&P)",IDC_TAB_POSITION,80,143,40,10 + COMBOBOX IDC_COMBO_TAB_POSITION,124,140,46,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "タイトル(&T)",IDC_TextTabCaption,15,160,40,10 + EDITTEXT IDC_TABWND_CAPTION,56,157,226,14,ES_AUTOHSCROLL + GROUPBOX "タブの外観",IDC_STATIC,7,102,280,76,WS_GROUP + CONTROL "マウスホイールでタブ切替(&W)",IDC_CHECK_ChgWndByWheel,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,196,127,10 + GROUPBOX "その他",IDC_STATIC,7,184,280,28,WS_GROUP +END + +IDD_PROP_STATUSBAR DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + GROUPBOX "表示文字コードの指定",IDC_STATIC,3,3,285,92 + CONTROL "SJIS, Latin1等で文字コード値をUnicodeで表示する(&S)",IDC_CHECK_DISP_UNICODE_IN_SJIS, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,16,205,10 + CONTROL "JISで文字コード値をUnicodeで表示する(&J)",IDC_CHECK_DISP_UNICODE_IN_JIS, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,32,205,10 + CONTROL "EUCで文字コード値をUnicodeで表示する(&E)",IDC_CHECK_DISP_UNICODE_IN_EUC, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,48,205,10 + CONTROL "UTF-8およびCESU-8をコードポイントで表示する(&8)",IDC_CHECK_DISP_UTF8_CODEPOINT, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,64,205,10 + CONTROL "サロゲートペアをコードポイントで表示する(&P)",IDC_CHECK_DISP_SP_CODEPOINT, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,80,205,10 + GROUPBOX "表示文字数の指定",IDC_STATIC,3,98,285,47 + CONTROL "選択文字数を文字単位ではなくバイト単位で表示する(&B) ※高負荷のため非推奨",IDC_CHECK_DISP_SELCOUNT_BY_BYTE, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,112,274,10 + CONTROL "現在桁をルーラー単位ではなく文字単位で表示する(&C)",IDC_CHECK_DISP_COL_BY_CHAR, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,128,274,10 +END + +IDD_PROP_EDIT DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + CONTROL "折り返し行に改行を付けてコピー(&C)",IDC_CHECK_ADDCRLFWHENCOPY,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,16,131,10 + CONTROL "コピーしたら選択解除(&R)",IDC_CHECK_COPYnDISABLESELECTEDAREA, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,29,131,10 + CONTROL "選択なしでコピーを可能にする(&E)",IDC_CHECK_bEnableNoSelectCopy, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,42,131,10 + CONTROL "ラインモード貼り付けを可能にする(&L)",IDC_CHECK_bEnableLineModePaste, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,55,131,10 + CONTROL "改行コードを変換して貼り付ける(&P)",IDC_CHECK_CONVERTEOLPASTE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,68,131,10 + GROUPBOX "コピー",IDC_STATIC,3,3,137,81,WS_GROUP + CONTROL "ドラッグ && ドロップ編集する(&D)",IDC_CHECK_DRAGDROP,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,104,131,10 + CONTROL "ドロップ元にする(&S)",IDC_CHECK_DROPSOURCE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,117,131,10 + GROUPBOX "ドラッグ && ドロップ",IDC_STATIC,3,91,137,43,WS_GROUP + CONTROL "改行コードは上書きしない(&N)",IDC_CHECK_bNotOverWriteCRLF,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,156,131,10 + CONTROL "文字幅に合わせてスペースを詰める(&F)",IDC_CHECK_bOverWriteFixMode, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,169,131,10 + CONTROL "矩形入力で選択範囲を削除する(&G)",IDC_CHECK_bOverWriteBoxDelete, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,182,131,10 + GROUPBOX "上書きモード",IDC_STATIC,3,143,137,58,WS_GROUP + CONTROL "クリックで&URLを選択する",IDC_CHECK_bSelectClickedURL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,149,18,120,10 + GROUPBOX "クリッカブルURL",IDC_STATIC,144,3,142,35,WS_GROUP + CONTROL "カレントフォルダ(&U)",IDC_RADIO_CURDIR,"Button",BS_AUTORADIOBUTTON,149,54,90,10 + CONTROL "最近使ったフォルダ(&M)",IDC_RADIO_MRUDIR,"Button",BS_AUTORADIOBUTTON,149,69,90,10 + CONTROL "指定フォルダ(&F)",IDC_RADIO_SELDIR,"Button",BS_AUTORADIOBUTTON,149,84,90,10 + EDITTEXT IDC_EDIT_FILEOPENDIR,149,100,111,12,ES_AUTOHSCROLL + PUSHBUTTON "...",IDC_BUTTON_FILEOPENDIR,261,100,9,12 + GROUPBOX "ファイルダイアログの初期位置",IDC_STATIC,144,41,142,79,WS_GROUP + CONTROL "Vistaスタイルのファイルダイアログ(&I)",IDC_CHECK_VISTA_STYLE_FILEDIALOG, + "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,149,128,137,10 + CONTROL "改行コードNEL, PS, LSを有効にする(&O)",IDC_CHECK_ENABLEEXTEOL, + "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,149,158,134,10 + CONTROL "矩形選択移動で選択をロックする(&B)",IDC_CHECK_BOXSELECTLOCK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,149,171,134,10 + GROUPBOX "その他",IDC_STATIC,144,145,142,42,WS_GROUP +END + +IDD_PROP_FILE DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + LTEXT "排他制御(&H)",IDC_STATIC,8,18,48,10 + COMBOBOX IDC_COMBO_FILESHAREMODE,60,16,84,78,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "更新の監視(&W)",IDC_CHECK_bCheckFileTimeStamp,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,33,60,10 + LTEXT "自動読込時遅延(&A)",IDC_LABEL_AUTOLOAD_DELAY,68,33,62,10 + EDITTEXT IDC_EDIT_AUTOLOAD_DELAY,130,33,30,12 + CONTROL "Spin1",IDC_SPIN_AUTOLOAD_DELAY,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,150,33,9,12 + CONTROL "上書き禁止検出時は編集禁止にする(&N)",IDC_CHECK_bUneditableIfUnwritable, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,46,154,10 + GROUPBOX "ファイルの排他制御",IDC_STATIC,3,3,163,57,WS_GROUP + CONTROL "無変更でも上書きする(&S)",IDC_CHECK_ENABLEUNMODIFIEDOVERWRITE, + "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,175,16,111,10 + CONTROL "自動的に保存する(&U)",IDC_CHECK_AUTOSAVE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,175,31,84,10 + LTEXT "間隔は(&I)",IDC_LABEL_AUTOSAVE,186,47,31,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_AUTOBACKUP_INTERVAL,219,45,30,12 + CONTROL "Spin1",IDC_SPIN_AUTOBACKUP_INTERVAL,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,266,45,9,12 + LTEXT "分ごと",IDC_LABEL_AUTOSAVE2,250,47,21,10,NOT WS_GROUP + GROUPBOX "ファイルの保存",IDC_STATIC,170,3,118,57,WS_GROUP + CONTROL "新規から保存時は全ファイル表示(&O)",IDC_CHECK_NoFilterSaveNew,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,77,133,10 + CONTROL "新規以外から保存時は全ファイル表示(&F)",IDC_CHECK_NoFilterSaveFile, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,142,77,142,10 + GROUPBOX "「名前を付けて保存」でファイルの種類が[ユーザー指定]のときのファイル一覧表示",IDC_STATIC,3,65,285,28 + CONTROL "ファイルのドロップは「閉じて開く」にする(&L)",IDC_CHECK_bDropFileAndClose, + "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,110,149,10 + LTEXT "ファイルのドロップは一度に&MAX",IDC_LABEL_AUTOSAVE3,18,126,101,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_nDropFileNumMax,123,124,25,12,ES_AUTOHSCROLL + CONTROL "Spin1",IDC_SPIN_nDropFileNumMax,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,179,124,9,12 + LTEXT "個までとする",IDC_LABEL_AUTOSAVE4,151,126,41,10,NOT WS_GROUP + LTEXT "←注:ドロップファイルは1つのみ有効",IDC_LANEL_NOTE,161,111,116,10 + CONTROL "ファイルを開いたときにカーソル位置を復元する(&C)",IDC_CHECK_RestoreCurPosition, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,140,174,10 + CONTROL "ファイルを開いたときにブックマークを復元する(&B)",IDC_CHECK_RestoreBookmarks, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,155,214,10 + CONTROL "ファイルを開いたときにMIMEエンコードされたヘッダをデコードする(&D)",IDC_CHECK_AutoMIMEDecode, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,169,231,10 + CONTROL "前回と異なる文字コードのとき問い合わせを行う(&Q)",IDC_CHECK_QueryIfCodeChange, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,182,223,13 + CONTROL "開こうとしたファイルが存在しないとき警告する(&E)",IDC_CHECK_AlertIfFileNotExist, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,198,223,10 + CONTROL "開こうとしたファイルが大きい場合に警告する(&T)",IDC_CHECK_ALERT_IF_LARGEFILE, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,214,167,10 + EDITTEXT IDC_EDIT_ALERT_FILESIZE,181,212,30,12,ES_AUTOHSCROLL + CONTROL "Spin1",IDC_SPIN_ALERT_FILESIZE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,240,211,9,14 + LTEXT "MBから",IDC_STATIC,214,214,25,10 + GROUPBOX "ファイルオープン",IDC_STATIC,3,97,285,135,WS_GROUP +END + +IDD_PROP_FNAME DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + CONTROL "長いパスの省略表示(&L)",IDC_CHECK_SHORTPATH,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,6,3,100,10 + LTEXT "文字数(&N)",IDC_STATIC,109,4,45,10 + EDITTEXT IDC_EDIT_SHORTMAXWIDTH,155,3,30,13,ES_NUMBER + GROUPBOX "ファイル名の簡易表示(&I)",IDC_STATIC,6,20,282,180 + CONTROL "List1",IDC_LIST_FNAME,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_AUTOARRANGE | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,12,35,230,117 + LTEXT "置換前(&F)",IDC_STATIC,13,161,37,10 + EDITTEXT IDC_EDIT_FNAME_FROM,50,160,191,13,ES_AUTOHSCROLL + LTEXT "置換後(&R)",IDC_STATIC,13,180,37,10 + EDITTEXT IDC_EDIT_FNAME_TO,50,177,191,13,ES_AUTOHSCROLL + PUSHBUTTON "挿入(&S)",IDC_BUTTON_FNAME_INS,245,123,38,15 + PUSHBUTTON "追加(&A)",IDC_BUTTON_FNAME_ADD,245,141,38,15 + PUSHBUTTON "更新(&E)",IDC_BUTTON_FNAME_UPD,245,159,38,15 + PUSHBUTTON "削除(&D)",IDC_BUTTON_FNAME_DEL,245,177,38,15 + PUSHBUTTON "先頭(&T)",IDC_BUTTON_FNAME_TOP,245,43,38,15 + PUSHBUTTON "上へ(&U)",IDC_BUTTON_FNAME_UP,245,61,38,15 + PUSHBUTTON "下へ(&G)",IDC_BUTTON_FNAME_DOWN,245,79,38,15 + PUSHBUTTON "最終(&B)",IDC_BUTTON_FNAME_LAST,245,97,38,15 +END + +IDD_PROP_BACKUP DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + GROUPBOX "バックアップの作成",IDC_STATIC,3,3,285,207,WS_GROUP + CONTROL "保存時にバックアップを作成する(&K)",IDC_CHECK_BACKUP,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,16,136,10 + CONTROL "詳細設定する(&A)",IDC_CHECK_BACKUP_ADVANCED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,32,79,10 + EDITTEXT IDC_EDIT_BACKUPFILE,24,44,255,13,ES_AUTOHSCROLL + CONTROL "拡張子を .bakに変更したもの(1世代 &B)",IDC_RADIO_BACKUP_TYPE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,12,66,142,10 + CONTROL "拡張子を連番(.b00~b98)に変更したもの(&G)",IDC_RADIO_BACKUP_TYPE3, + "Button",BS_AUTORADIOBUTTON,12,80,156,10 + CONTROL "ファイル名の後ろに保存時の日付・時刻を付加したもの(&E)",IDC_RADIO_BACKUP_DATETYPE1, + "Button",BS_AUTORADIOBUTTON,12,106,204,10 + CONTROL "ファイル名の後ろに前回の保存時の日付・時刻を付加したもの(&U)",IDC_RADIO_BACKUP_DATETYPE2, + "Button",BS_AUTORADIOBUTTON,12,120,230,10 + CONTROL "元の拡張子を保存(&R)",IDC_CHECK_BACKUP_RETAINEXT,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,162,66,96,10 + LTEXT "保存する世代数(1-99 &N)",IDC_LABEL_BACKUP_3,22,94,91,10 + EDITTEXT IDC_EDIT_BACKUP_3,106,92,28,12 + CONTROL "Spin1",IDC_SPIN_BACKUP_GENS,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,154,92,9,12 + CONTROL "西暦(&Y)",IDC_CHECK_BACKUP_YEAR,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,22,132,35,10 + CONTROL "月(&M)",IDC_CHECK_BACKUP_MONTH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,132,34,10 + CONTROL "日(&D)",IDC_CHECK_BACKUP_DAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,97,132,34,10 + CONTROL "時(&H)",IDC_CHECK_BACKUP_HOUR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,134,132,34,10 + CONTROL "分(&I)",IDC_CHECK_BACKUP_MIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,171,132,31,10 + CONTROL "秒(&S)",IDC_CHECK_BACKUP_SEC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,132,33,10 + LTEXT "",IDC_STATIC,12,60,271,83,NOT WS_VISIBLE + CONTROL "保存時の日付・時刻を使用",IDC_RADIO_BACKUP_DATETYPE1A,"Button",BS_AUTORADIOBUTTON | WS_GROUP,12,104,111,10 + CONTROL "前回のファイル更新時の日付・時刻を使用",IDC_RADIO_BACKUP_DATETYPE2A,"Button",BS_AUTORADIOBUTTON,12,118,149,10 + LTEXT "$x : x個上のフォルダ名(0-9)\r* : 拡張子\r\r%Y/%m/%d : 年月日 %y西暦(2桁) \r%H:%M:%S: 時分秒 \r%% : '%'記号\r",IDC_LABEL_BACKUP_HELP2,165,75,115,50,SS_SUNKEN + CONTROL "指定フォルダに作成する(&P)",IDC_CHECK_BACKUPFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,148,107,10 + CONTROL "リムーバブルメディアのみ(&L)",IDC_CHECK_BACKUP_FOLDER_RM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,120,148,133,10 + LTEXT "フォルダ名(&F)",IDC_LABEL_BACKUP_4,24,162,87,10 + EDITTEXT IDC_EDIT_BACKUPFOLDER,73,160,195,12,ES_AUTOHSCROLL + PUSHBUTTON "&...",IDC_BUTTON_BACKUP_FOLDER_REF,271,160,9,12 + CONTROL "バックアップファイルをごみ箱に放り込む(&X)",IDC_CHECK_BACKUP_DUSTBOX, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,176,150,10 + CONTROL "作成前に確認する(&V)",IDC_CHECK_BACKUPDIALOG,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,12,196,104,10 +END + +IDD_PROP_FORMAT DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + CONTROL "標準(&S)",IDC_RADIO_DFORM_0,"Button",BS_AUTORADIOBUTTON | WS_GROUP,8,18,41,10 + CONTROL "カスタム(&C)",IDC_RADIO_DFORM_1,"Button",BS_AUTORADIOBUTTON,51,18,52,10 + LTEXT "&D:",IDC_LABEL_DFORM,106,19,8,10 + EDITTEXT IDC_EDIT_DFORM,115,17,82,12,ES_AUTOHSCROLL + GROUPBOX "日付書式",IDC_STATIC,3,3,199,35,WS_GROUP + LTEXT "表示例",IDC_STATIC,209,7,27,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_DFORM_EX,209,17,77,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_TABSTOP + CONTROL "標準(&N)",IDC_RADIO_TFORM_0,"Button",BS_AUTORADIOBUTTON | WS_GROUP,8,58,41,10 + CONTROL "カスタム(&U)",IDC_RADIO_TFORM_1,"Button",BS_AUTORADIOBUTTON,51,58,52,10 + LTEXT "&T:",IDC_LABEL_TFORM,106,59,8,10 + EDITTEXT IDC_EDIT_TFORM,115,57,82,12,ES_AUTOHSCROLL + GROUPBOX "時刻書式",IDC_STATIC,3,43,199,35,WS_GROUP + LTEXT "表示例",IDC_STATIC,209,47,27,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_TFORM_EX,209,57,77,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_TABSTOP + GROUPBOX "見出し記号(&R)",IDC_STATIC,3,83,283,52,WS_GROUP + EDITTEXT IDC_EDIT_MIDASHIKIGOU,8,95,272,31,ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | WS_GROUP + GROUPBOX "引用符(&Q)",IDC_STATIC,3,140,283,32,WS_GROUP + EDITTEXT IDC_EDIT_INYOUKIGOU,8,152,270,12,ES_AUTOHSCROLL | WS_GROUP +END + +IDD_PROP_GREP DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + CONTROL "カーソル位置の文字列をデフォルトの検索文字列にする(&C)",IDC_CHECK_bCaretTextForSearch, + "Button",BS_AUTOCHECKBOX | BS_TOP | WS_GROUP | WS_TABSTOP,8,21,204,12 + CONTROL "次・前検索で他のビューでの検索条件変更を引き継ぐ(&I)",IDC_CHECK_INHERIT_KEY_OTHER_VIEW, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,33,209,12 + LTEXT "正規表現ライブラリ指定(&L)",IDC_LABEL_REGEXP,8,50,93,10 + LTEXT "",IDC_LABEL_REGEXP_VER,8,62,275,14 + EDITTEXT IDC_EDIT_REGEXPLIB,110,47,162,13,ES_AUTOHSCROLL + GROUPBOX "検索/置換/Grep",IDC_STATIC,3,7,285,70,WS_GROUP + CONTROL "Grepモードで保存確認する(&V)",IDC_CHECK_bGrepExitConfirm,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,94,130,10 + CONTROL "リアルタイムで表示する(&R)",IDC_CHECK_GREPREALTIME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,106,111,10 + GROUPBOX "Grep",IDC_STATIC,3,80,285,42,WS_GROUP + CONTROL "エンターキーでタグジャンプ(&E)",IDC_CHECK_GTJW_RETURN,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,142,109,10 + CONTROL "ダブルクリックでタグジャンプ(&W)",IDC_CHECK_GTJW_LDBLCLK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,154,115,10 + GROUPBOX "Grep結果からのタグジャンプ",IDC_STATIC,3,127,285,46,WS_GROUP + GROUPBOX "タグジャンプ",IDC_STATIC,3,178,285,52,WS_GROUP + LTEXT "タグファイルの検索(&T):",IDC_STATIC,8,192,112,10 + COMBOBOX IDC_COMBO_TAGJUMP,124,190,156,100,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + LTEXT "キーワード指定のタグファイル検索(&K):",IDC_STATIC,8,210,112,10 + COMBOBOX IDC_COMBO_KEYWORD_TAGJUMP,124,208,156,100,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP +END + +IDD_PROP_KEYBIND DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP | WS_EX_COMPOSITED +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + RTEXT "種別(&K)",IDC_LABEL_MENUFUNCKIND,4,4,51,10 + COMBOBOX IDC_COMBO_FUNCKIND,60,2,68,180,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + LTEXT "機能(&F)",IDC_LABEL_MENUFUNC,3,18,41,10 + LISTBOX IDC_LIST_FUNC,3,28,124,143,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + LTEXT "機能に割り当てられているキー(&G)",IDC_LABEL_FUNCtoKEY,6,173,113,10,NOT WS_GROUP + LISTBOX IDC_LIST_ASSIGNEDKEYS,3,184,124,33,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_GROUP | WS_TABSTOP + PUSHBUTTON "インポート(&I)...",IDC_BUTTON_IMPORT,171,2,58,14,WS_GROUP + PUSHBUTTON "エクスポート(&X)...",IDC_BUTTON_EXPORT,231,2,58,14 + LTEXT "キー(&Y)",IDC_LABEL_KEYKIND,164,18,25,10 + LISTBOX IDC_LIST_KEY,165,28,124,164,LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP + CONTROL "&Shift",IDC_CHECK_SHIFT,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,134,38,25,10 + CONTROL "&Ctrl",IDC_CHECK_CTRL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,134,53,25,10 + CONTROL "A&Lt",IDC_CHECK_ALT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,134,68,25,10 + LTEXT "キーに割り当てられている機能",IDC_LABEL_KEYtoFUNC,166,194,120,10 + EDITTEXT IDC_EDIT_KEYSFUNC,164,205,118,12,ES_AUTOHSCROLL | ES_READONLY | WS_GROUP | NOT WS_TABSTOP + PUSHBUTTON "割付(&B)",IDC_BUTTON_ASSIGN,129,190,34,14,WS_GROUP + PUSHBUTTON "解除(&R)",IDC_BUTTON_RELEASE,129,204,34,14 +END + +IDD_PROP_CUSTMENU DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP | WS_EX_COMPOSITED +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + RTEXT "種別(&K)",IDC_LABEL_MENUFUNCKIND,4,4,52,10 + COMBOBOX IDC_COMBO_FUNCKIND,60,2,68,180,CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + LTEXT "機能(&F)",IDC_LABEL_MENUFUNC,3,16,40,10,NOT WS_GROUP + LISTBOX IDC_LIST_FUNC,3,27,124,178,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + RTEXT "選択(&C)",IDC_LABEL_MENUCHOICE,187,4,31,10 + COMBOBOX IDC_COMBO_MENU,221,2,68,220,CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + LTEXT "メニュー名(&N)",IDC_LABEL_MENUNAME,142,16,64,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_MENUNAME,146,27,109,14,ES_AUTOHSCROLL + PUSHBUTTON "設定(&R)",IDC_BUTTON_MENUNAME,258,27,30,14 + LTEXT "メニュー(&M)",IDC_LABEL_MENU,142,44,37,10,NOT WS_GROUP + LISTBOX IDC_LIST_RES,164,54,123,151,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + PUSHBUTTON "削除(&D)",IDC_BUTTON_DELETE,130,62,30,14,WS_GROUP + PUSHBUTTON "---(&S)",IDC_BUTTON_INSERTSEPARATOR,130,81,30,14,BS_MULTILINE + PUSHBUTTON "→(&A)",IDC_BUTTON_INSERT,128,101,34,14 + PUSHBUTTON ">>(&B)",IDC_BUTTON_ADD,128,115,34,14,BS_MULTILINE + PUSHBUTTON "↑(&U)",IDC_BUTTON_UP,128,135,34,14 + PUSHBUTTON "↓(&O)",IDC_BUTTON_DOWN,128,149,34,14 + LTEXT "↑ダブルクリックでアクセスキー設定可",IDC_LABEL_MENUKEYCHANGE,174,208,114,10 + CONTROL "サブメニューとして表示(&S)",IDC_CHECK_SUBMENU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,164,220,114,10 + PUSHBUTTON "インポート(&I)...",IDC_BUTTON_IMPORT,3,208,58,14,WS_GROUP + PUSHBUTTON "エクスポート(&X)...",IDC_BUTTON_EXPORT,64,208,58,14 +END + +IDD_PROP_KEYWORD DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + LTEXT "セット名(&N)",IDC_STATIC,3,6,37,10 + COMBOBOX IDC_COMBO_SET,42,5,85,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "セット追加(&M)...",IDC_BUTTON_ADDSET,181,5,53,14,WS_GROUP + PUSHBUTTON "セット削除(&R)...",IDC_BUTTON_DELSET,236,5,52,14 + GROUPBOX "強調キーワード(&K)",IDC_STATIC,3,22,285,215,WS_GROUP + CONTROL "List5",IDC_LIST_KEYWORD,"SysListView32",LVS_LIST | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_EDITLABELS | LVS_ALIGNLEFT | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP,8,35,274,165 + PUSHBUTTON "追加(&A)...",IDC_BUTTON_ADDKEYWORD,8,203,40,14,WS_GROUP + PUSHBUTTON "編集(&E)...",IDC_BUTTON_EDITKEYWORD,50,203,40,14 + PUSHBUTTON "削除(&D)",IDC_BUTTON_DELKEYWORD,92,203,40,14 + CONTROL "英大文字小文字区別(&C)",IDC_CHECK_KEYWORDCASE,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,221,94,10 + PUSHBUTTON "インポート(&I)...",IDC_BUTTON_IMPORT,166,220,58,14,WS_GROUP + PUSHBUTTON "エクスポート(&X)...",IDC_BUTTON_EXPORT,227,220,58,14 + RTEXT "(最大 100 文字 登録数 9999 / 9999 個)",IDC_STATIC_KEYWORD_COUNT,135,205,142,10 + PUSHBUTTON "変更(&H)",IDC_BUTTON_KEYSETRENAME,130,5,40,14 + PUSHBUTTON "整理(&O)",IDC_BUTTON_KEYCLEAN,104,220,45,14 + PUSHBUTTON "OK",IDOK,182,243,50,14 + PUSHBUTTON "キャンセル(&X)",IDCANCEL,237,243,50,14 +END + +IDD_PROP_HELPER DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + CONTROL "&Enter",IDC_CHECK_m_bHokanKey_RETURN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,59,15,33,10 + CONTROL "&Tab",IDC_CHECK_m_bHokanKey_TAB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,93,15,28,10 + CONTROL "→(&R)",IDC_CHECK_m_bHokanKey_RIGHT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,122,15,53,10 + GROUPBOX "入力補完機能",IDC_STATIC,3,3,285,30,WS_GROUP + LTEXT "候補決定キー",IDC_STATIC,7,17,45,10 + GROUPBOX "外部ヘルプの設定(&L)",IDC_STATIC,3,37,285,32,WS_GROUP + EDITTEXT IDC_EDIT_EXTHELP1,8,50,253,12,ES_AUTOHSCROLL | WS_GROUP + PUSHBUTTON "(&1)...",IDC_BUTTON_OPENHELP1,264,49,19,14 + GROUPBOX "外部HTMLヘルプの設定(&P)",IDC_STATIC,3,73,285,45,WS_GROUP + EDITTEXT IDC_EDIT_EXTHTMLHELP,8,89,253,12,ES_AUTOHSCROLL | WS_GROUP + PUSHBUTTON "(&2)...",IDC_BUTTON_OPENEXTHTMLHELP,264,88,19,14 + CONTROL "ビューアを複数起動しない(&N)",IDC_CHECK_HTMLHELPISSINGLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,105,108,10 + GROUPBOX "キーワードヘルプ",IDC_STATIC,3,123,285,33,WS_GROUP + RTEXT "Font",IDC_STATIC_KEYWORDHELPFONT,8,136,219,17 + PUSHBUTTON "フォント(&F)...",IDC_BUTTON_KEYWORDHELPFONT,232,136,51,14 + LTEXT "DLL(&M)",IDC_STATIC,7,174,26,10 + EDITTEXT IDC_EDIT_MIGEMO_DLL,36,172,224,12,ES_AUTOHSCROLL | WS_GROUP + PUSHBUTTON "(&3)...",IDC_BUTTON_OPENMDLL,264,171,19,14 + LTEXT "辞書(&I)",IDC_STATIC,7,190,25,10 + EDITTEXT IDC_EDIT_MIGEMO_DICT,36,189,224,12,ES_AUTOHSCROLL + PUSHBUTTON "(&4)...",IDC_BUTTON_OPENMDICT,264,189,19,14 + GROUPBOX "migemo設定",IDC_STATIC,3,159,287,47,WS_GROUP +END + +IDD_PROP_MACRO DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + LTEXT "マクロ一覧",IDC_STATIC,4,9,36,10 + EDITTEXT IDC_MACRODIR,46,5,199,14,ES_AUTOHSCROLL + PUSHBUTTON "参照(&R)...",IDC_MACRODIRREF,254,5,34,14 + CONTROL "List1",IDC_MACROLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_AUTOARRANGE | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,3,21,285,148 + LTEXT "名前(&N)",IDC_STATIC,6,179,32,10 + EDITTEXT IDC_MACRONAME,39,176,203,14,ES_AUTOHSCROLL + LTEXT "&File",IDC_STATIC,6,194,12,10 + COMBOBOX IDC_MACROPATH,39,192,203,130,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP + CONTROL "マクロを実行するたびにファイルを読み込みなおす(&L)",IDC_CHECK_RELOADWHENEXECUTE, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,211,178,10 + LTEXT "キャンセル確認待ち時間",IDC_STATIC,185,212,75,10 + EDITTEXT IDC_MACROCANCELTIMER,260,209,18,14,ES_AUTOHSCROLL + LTEXT "秒",IDC_STATIC,280,212,8,10 + LTEXT "自動実行:",IDC_STATIC,6,225,34,10 + CONTROL "新規/開ファイル後(&O)",IDC_CHECK_MacroOnOpened,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,44,224,89,10 + CONTROL "タイプ変更後(&T)",IDC_CHECK_MacroOnTypeChanged,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,135,224,72,10 + CONTROL "ファイル保存前(&S)",IDC_CHECK_MacroOnSave,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,224,69,10 + LTEXT "Id:",IDC_STATIC,249,176,8,10 + COMBOBOX IDC_COMBO_MACROID,260,174,28,129,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "設定(&A)",IDC_MACRO_REG,250,190,38,14 +END + +IDD_PROP_PLUGIN DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + CONTROL "プラグインを有効にする(&E)",IDC_CHECK_PluginEnable,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,9,100,10 + PUSHBUTTON "ZIPプラグインを導入(&Z)",IDC_PLUGIN_INST_ZIP,192,6,96,14 + PUSHBUTTON "フォルダを開く(&F)",IDC_PLUGIN_OpenFolder,120,20,70,14 + PUSHBUTTON "新規プラグインを追加(&I)",IDC_PLUGIN_SearchNew,192,20,96,14 + LTEXT "プラグイン一覧",IDC_STATIC,4,28,50,10 + CONTROL "List1",IDC_PLUGINLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_AUTOARRANGE | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,3,41,285,108 + LTEXT "説明",IDC_STATIC,11,160,50,10 + LTEXT "",IDC_LABEL_PLUGIN_Description,66,160,200,10 + LTEXT "作者",IDC_STATIC,11,175,50,10 + LTEXT "",IDC_LABEL_PLUGIN_Author,66,175,200,10 + LTEXT "バージョン",IDC_STATIC,11,190,50,10 + LTEXT "",IDC_LABEL_PLUGIN_Version,66,190,100,10 + PUSHBUTTON "配布元(&D)",IDC_PLUGIN_URL,186,187,80,14 + PUSHBUTTON "削除(&R)",IDC_PLUGIN_Remove,6,205,80,14 + PUSHBUTTON "設定(&P)",IDC_PLUGIN_OPTION,96,205,80,14 + PUSHBUTTON "ReadMe(&M)",IDC_PLUGIN_README,186,205,80,14 +END + +IDD_PROP_MAINMENU DIALOGEX 0, 0, 293, 240 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "メインメニュー" +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + RTEXT "種別(&K)",IDC_LABEL_MENUFUNCKIND,10,6,45,10 + COMBOBOX IDC_COMBO_FUNCKIND,57,4,70,180,CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + LTEXT "機能(&F)",IDC_LABEL_MENUFUNC,4,17,40,10 + LISTBOX IDC_LIST_FUNC,4,28,123,190,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + CONTROL "アクセスキーを必ず( )付で表示(&P)",IDC_CHECK_KEY_PARENTHESES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,176,4,113,10 + LTEXT "メニュー(&M)",IDC_LABEL_MENU,166,17,35,10 + CONTROL "&Menu",IDC_TREE_RES,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_EDITLABELS | TVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,166,28,123,190,WS_EX_ACCEPTFILES + PUSHBUTTON "削除(&D)",IDC_BUTTON_DELETE,128,28,37,14,WS_GROUP + PUSHBUTTON "+(&N)",IDC_BUTTON_INSERT_NODE,128,47,37,14 + PUSHBUTTON "---(&S)",IDC_BUTTON_INSERTSEPARATOR,128,61,37,14 + PUSHBUTTON "上⇒(&Q)",IDC_BUTTON_INSERT,128,75,37,14 + PUSHBUTTON "下⇒(&A)",IDC_BUTTON_INSERT_A,128,89,37,14 + PUSHBUTTON ">>(&B)",IDC_BUTTON_ADD,128,103,37,14 + PUSHBUTTON "↑(&U)",IDC_BUTTON_UP,128,121,37,14 + PUSHBUTTON "↓(&O)",IDC_BUTTON_DOWN,128,135,37,14 + PUSHBUTTON "→(&R)",IDC_BUTTON_RIGHT,128,149,37,14 + PUSHBUTTON "←(&L)",IDC_BUTTON_LEFT,128,163,37,14 + PUSHBUTTON "全開(&H)",IDC_BUTTON_EXPAND,128,190,37,14 + PUSHBUTTON "全閉(&Z)",IDC_BUTTON_COLLAPSE,128,204,37,14 + PUSHBUTTON "インポート(&I)...",IDC_BUTTON_IMPORT,4,222,58,14,WS_GROUP + PUSHBUTTON "エクスポート(&X)...",IDC_BUTTON_EXPORT,64,222,58,14 + PUSHBUTTON "検査(&T)",IDC_BUTTON_CHECK,124,222,44,14 + PUSHBUTTON "クリア(&C)",IDC_BUTTON_CLEAR,196,222,44,14,WS_GROUP + PUSHBUTTON "初期設定(&E)",IDC_BUTTON_INITIALIZE,245,222,44,14 +END + +IDD_WINPOSSIZE DIALOGEX 0, 0, 177, 159 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "ウィンドウの位置と大きさ" +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + CONTROL "指定しない(&D)",IDC_RADIO_WINPOS_DEF,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,15,19,61,10 + CONTROL "継承する(&I)",IDC_RADIO_WINPOS_SAVE,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,15,32,52,10 + CONTROL "直接指定(&S)",IDC_RADIO_WINPOS_SET,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,15,45,56,10 + LTEXT "X座標(&X)",IDC_STATIC,81,29,31,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_WX,115,25,33,14,ES_RIGHT | WS_GROUP + CONTROL "Spin1",IDC_SPIN_WX,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,148,25,10,14 + LTEXT "Y座標(&Y)",IDC_STATIC,81,43,31,10,NOT WS_GROUP + EDITTEXT IDC_EDIT_WY,115,41,33,14,ES_RIGHT | WS_GROUP + CONTROL "Spin1",IDC_SPIN_WY,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,148,41,10,14 + CONTROL "指定しない(&E)",IDC_RADIO_WINSIZE_DEF,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,15,79,60,10 + CONTROL "継承する(&N)",IDC_RADIO_WINSIZE_SAVE,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,15,91,55,10 + CONTROL "直接指定(&T)",IDC_RADIO_WINSIZE_SET,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,15,103,56,10 + COMBOBOX IDC_COMBO_WINTYPE,84,74,64,52,CBS_DROPDOWNLIST | WS_VSCROLL | WS_GROUP | WS_TABSTOP + LTEXT "幅(&W)",IDC_STATIC,84,94,20,10 + EDITTEXT IDC_EDIT_SX,115,91,33,14,ES_RIGHT | ES_NUMBER + CONTROL "Spin1",IDC_SPIN_SX,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,148,90,10,14 + LTEXT "高さ(&G)",IDC_STATIC,84,110,25,10 + EDITTEXT IDC_EDIT_SY,115,108,33,14,ES_RIGHT | ES_NUMBER + CONTROL "Spin1",IDC_SPIN_SY,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,148,108,10,14 + DEFPUSHBUTTON "閉じる(&C)",IDOK,26,138,50,14,WS_GROUP + PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,110,137,54,15,WS_GROUP + GROUPBOX "起動時の位置",IDC_STATIC,7,7,163,52 + GROUPBOX "大きさ",IDC_STATIC,7,66,163,63 +END + +IDD_PLUGIN_OPTION DIALOGEX 0, 0, 271, 255 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "プラグインの設定" +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + LTEXT "プラグインのオプションを設定してください",IDC_STATIC_MSG,11,7,119,10 + CONTROL "List1",IDC_LIST_PLUGIN_OPTIONS,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,22,257,186 + LTEXT "値:",IDC_STATIC,11,217,21,10 + EDITTEXT IDC_EDIT_PLUGIN_OPTION,36,214,228,14,ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_PLUGIN_OPTION_DIR,36,214,205,14,ES_AUTOHSCROLL + PUSHBUTTON "&...",IDC_BUTTON_PLUGIN_OPTION_DIR,243,214,21,14 + EDITTEXT IDC_EDIT_PLUGIN_OPTION_NUM,36,214,60,14,ES_RIGHT + CONTROL "Spin1",IDC_SPIN_PLUGIN_OPTION,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,148,25,10,14,WS_EX_TRANSPARENT + CONTROL "Check",IDC_CHECK_PLUGIN_OPTION,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,36,216,200,10 + COMBOBOX IDC_COMBO_PLUGIN_OPTION,36,214,183,150,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "ReadMe(&M)",IDC_PLUGIN_README,49,234,50,14 + DEFPUSHBUTTON "&OK",IDOK,104,234,50,14 + PUSHBUTTON "キャンセル(&X)",IDCANCEL,159,234,50,14 + PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,214,234,50,14 +END + +IDD_PROFILEMGR DIALOGEX 0, 0, 191, 184 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "プロファイルマネージャ" +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + LISTBOX IDC_LIST_PROFILE,9,9,109,128,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + CONTROL "デフォルト設定にして起動(&E)",IDC_CHECK_PROF_DEFSTART,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,143,150,10 + DEFPUSHBUTTON "起動(&S)",IDOK,8,161,56,14 + PUSHBUTTON "閉じる(&X)",IDCANCEL,68,161,56,14 + PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,128,161,56,14 + PUSHBUTTON "新規作成(&N)",IDC_BUTTON_PROF_CREATE,125,8,61,14 + PUSHBUTTON "名前変更(&R)",IDC_BUTTON_PROF_RENAME,125,25,61,14 + PUSHBUTTON "削除(&D)",IDC_BUTTON_PROF_DELETE,125,42,61,14 + PUSHBUTTON "デフォルト設定(&F)",IDC_BUTTON_PROF_DEFSET,125,62,61,14 + PUSHBUTTON "デフォルト解除(&C)",IDC_BUTTON_PROF_DEFCLEAR,125,79,61,14 +END + +IDD_FILETREE DIALOGEX 0, 0, 291, 241 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "ファイルツリー設定" +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + LTEXT "設定:共通設定",IDC_STATIC_SETTFING_FROM,4,4,282,10 + CONTROL "各フォルダの設定を読み込む(&I)",IDC_CHECK_LOADINI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,16,120,9 + LTEXT "デフォルト設定ファイル名(&J)",IDC_STATIC,4,28,110,10 + EDITTEXT IDC_EDIT_DEFINI,13,39,124,13,ES_AUTOHSCROLL + PUSHBUTTON "...(&1)",IDC_BUTTON_REF1,137,39,17,13 + PUSHBUTTON "読み込み(&V)",IDC_BUTTON_LOAD,108,53,47,14 + CONTROL "Grep(&G)",IDC_RADIO_GREP,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,6,72,56,10 + CONTROL "ファイル(&F)",IDC_RADIO_FILE,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,6,85,56,10 + CONTROL "フォルダ(&2)",IDC_RADIO_FOLDER,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,6,98,56,10 + GROUPBOX "種類",IDC_STATIC,1,61,89,50,WS_GROUP + LTEXT "パス(&T)",IDC_STATIC_PATH,3,119,22,10 + EDITTEXT IDC_EDIT_PATH,38,117,122,13,ES_AUTOHSCROLL + PUSHBUTTON "&...",IDC_BUTTON_REF2,161,117,10,13 + PUSHBUTTON "▼(&3)",IDC_BUTTON_PATH_MENU,171,117,21,14 + LTEXT "ラベル(&E)",IDC_STATIC,3,136,32,10 + EDITTEXT IDC_EDIT_LABEL,38,134,111,13,ES_AUTOHSCROLL + LTEXT "ファイル(&K)",IDC_STATIC_FILE,3,154,32,10 + EDITTEXT IDC_EDIT_FILE,38,151,111,13,ES_AUTOHSCROLL + CONTROL "隠しファイル(&W)",IDC_CHECK_HIDDEN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,181,87,10 + CONTROL "読み取り専用(&Z)",IDC_CHECK_READONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,193,87,10 + CONTROL "システムファイル(&S)",IDC_CHECK_SYSTEM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,205,87,10 + GROUPBOX "非表示属性",IDC_STATIC,4,169,100,51 + PUSHBUTTON "削除(&4)",IDC_BUTTON_DELETE,156,17,36,14 + PUSHBUTTON "上⇒(&Q)",IDC_BUTTON_INSERT,156,32,36,14 + PUSHBUTTON "下⇒(&A)",IDC_BUTTON_INSERT_A,156,46,36,14 + PUSHBUTTON ">>(&B)",IDC_BUTTON_ADD,156,60,36,14 + PUSHBUTTON "更新(&P)",IDC_BUTTON_UPDATE,156,74,36,14 + PUSHBUTTON "ファイル挿入(&C)...",IDC_BUTTON_FILEADD,133,88,59,14 + PUSHBUTTON "パスの一括置換(&N)...",IDC_BUTTON_REPLACE,111,102,81,14 + PUSHBUTTON "↑(&U)",IDC_BUTTON_UP,156,140,36,14 + PUSHBUTTON "↓(&D)",IDC_BUTTON_DOWN,156,154,36,14 + PUSHBUTTON "→(&R)",IDC_BUTTON_RIGHT,156,168,36,14 + PUSHBUTTON "←(&L)",IDC_BUTTON_LEFT,156,182,36,14 + CONTROL "",IDC_TREE_FL,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,193,17,94,202 + PUSHBUTTON "インポート(&M)",IDC_BUTTON_IMPORT,5,225,50,14 + PUSHBUTTON "エクスポート(&Y)",IDC_BUTTON_EXPORT,59,225,50,14 + DEFPUSHBUTTON "&OK",IDOK,128,225,50,14 + PUSHBUTTON "キャンセル(&X)",IDCANCEL,183,225,50,14 + PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,238,225,50,14 +END + +IDD_WINLIST DIALOGEX 0, 0, 350, 250 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "ウィンドウ一覧" +FONT 9, "MS Pゴシック", 0, 0, 0x1 +BEGIN + CONTROL "",IDC_LIST_WINDOW,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,7,336,215 + PUSHBUTTON "ウィンドウを閉じる(&C)",IDC_BUTTON_CLOSE,7,229,90,14 + PUSHBUTTON "上書き保存(&S)",IDC_BUTTON_SAVE,112,229,50,14 + DEFPUSHBUTTON "&OK",IDOK,229,229,50,14 + PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,286,229,50,14 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_FIND, DIALOG + BEGIN + LEFTMARGIN, 5 + RIGHTMARGIN, 279 + BOTTOMMARGIN, 86 + END + + IDD_JUMP, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 245 + TOPMARGIN, 7 + BOTTOMMARGIN, 114 + END + + IDD_FUNCLIST, DIALOG + BEGIN + TOPMARGIN, 7 + BOTTOMMARGIN, 283 + END + + IDD_GREP, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 303 + TOPMARGIN, 7 + BOTTOMMARGIN, 136 + END + + IDD_GREP_REPLACE, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 303 + TOPMARGIN, 7 + BOTTOMMARGIN, 158 + END + + IDD_GREPRUNNING, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 286 + TOPMARGIN, 7 + BOTTOMMARGIN, 72 + END + + IDD_REPLACE, DIALOG + BEGIN + LEFTMARGIN, 4 + RIGHTMARGIN, 293 + BOTTOMMARGIN, 142 + END + + IDD_REPLACERUNNING, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 183 + TOPMARGIN, 7 + BOTTOMMARGIN, 28 + END + + IDD_PROPERTY_FILE, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 263 + TOPMARGIN, 7 + BOTTOMMARGIN, 220 + END + + IDD_INPUT1, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 178 + TOPMARGIN, 7 + BOTTOMMARGIN, 48 + END + + IDD_COMPARE, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 358 + TOPMARGIN, 7 + BOTTOMMARGIN, 158 + END + + IDD_PRINTPREVIEWBAR, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 395 + TOPMARGIN, 7 + BOTTOMMARGIN, 25 + END + + IDD_PRINTSETTING, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 247 + TOPMARGIN, 7 + BOTTOMMARGIN, 246 + END + + IDD_EXITING, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 164 + TOPMARGIN, 7 + BOTTOMMARGIN, 23 + END + + IDD_EXEC, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 285 + TOPMARGIN, 7 + BOTTOMMARGIN, 132 + END + + IDD_EXECRUNNING, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 263 + TOPMARGIN, 7 + BOTTOMMARGIN, 48 + END + + IDD_MACRORUNNING, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 263 + TOPMARGIN, 7 + BOTTOMMARGIN, 48 + END + + IDD_HOKAN, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 118 + TOPMARGIN, 7 + BOTTOMMARGIN, 93 + END + + IDD_PRINTING, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 138 + TOPMARGIN, 7 + BOTTOMMARGIN, 68 + END + + IDD_FILEUPDATEQUERY, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 216 + TOPMARGIN, 7 + BOTTOMMARGIN, 100 + END + + IDD_FAVORITE, DIALOG + BEGIN + LEFTMARGIN, 3 + RIGHTMARGIN, 377 + TOPMARGIN, 4 + BOTTOMMARGIN, 270 + END + + IDD_TAGJUMPLIST, DIALOG + BEGIN + LEFTMARGIN, 3 + RIGHTMARGIN, 387 + TOPMARGIN, 4 + BOTTOMMARGIN, 187 + END + + IDD_TAG_MAKE, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 226 + TOPMARGIN, 7 + BOTTOMMARGIN, 78 + END + + IDD_OPERATIONRUNNING, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 183 + TOPMARGIN, 7 + BOTTOMMARGIN, 28 + END + + IDD_DIFF, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 256 + TOPMARGIN, 7 + BOTTOMMARGIN, 296 + END + + IDD_CTRLCODE, DIALOG + BEGIN + LEFTMARGIN, 2 + RIGHTMARGIN, 177 + TOPMARGIN, 2 + BOTTOMMARGIN, 182 + END + + IDD_TYPELIST, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 180 + TOPMARGIN, 7 + BOTTOMMARGIN, 216 + END + + IDD_PROP_SCREEN, DIALOG + BEGIN + LEFTMARGIN, 3 + RIGHTMARGIN, 299 + TOPMARGIN, 4 + BOTTOMMARGIN, 237 + END + + IDD_PROP_COLOR, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 296 + TOPMARGIN, 7 + END + + IDD_PROP_SUPPORT, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 296 + TOPMARGIN, 7 + BOTTOMMARGIN, 216 + END + + IDD_PROP_REGEX, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 296 + TOPMARGIN, 7 + BOTTOMMARGIN, 213 + END + + IDD_DIALOG_KEYWORD_SELECT, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 170 + TOPMARGIN, 7 + BOTTOMMARGIN, 190 + END + + IDD_SAMECOLOR, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 176 + TOPMARGIN, 7 + BOTTOMMARGIN, 199 + END + + IDD_PROP_GENERAL, DIALOG + BEGIN + LEFTMARGIN, 3 + RIGHTMARGIN, 286 + TOPMARGIN, 7 + BOTTOMMARGIN, 233 + END + + IDD_PROP_WIN, DIALOG + BEGIN + LEFTMARGIN, 2 + RIGHTMARGIN, 290 + TOPMARGIN, 2 + BOTTOMMARGIN, 206 + END + + IDD_PROP_TOOLBAR, DIALOG + BEGIN + RIGHTMARGIN, 292 + END + + IDD_PROP_TAB, DIALOG + BEGIN + LEFTMARGIN, 1 + RIGHTMARGIN, 291 + TOPMARGIN, 2 + BOTTOMMARGIN, 197 + END + + IDD_PROP_STATUSBAR, DIALOG + BEGIN + LEFTMARGIN, 1 + RIGHTMARGIN, 291 + TOPMARGIN, 7 + BOTTOMMARGIN, 217 + END + + IDD_PROP_EDIT, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 284 + TOPMARGIN, 7 + BOTTOMMARGIN, 204 + END + + IDD_PROP_FILE, DIALOG + BEGIN + LEFTMARGIN, 1 + TOPMARGIN, 7 + BOTTOMMARGIN, 233 + END + + IDD_PROP_FNAME, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 284 + TOPMARGIN, 7 + BOTTOMMARGIN, 206 + END + + IDD_PROP_BACKUP, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 284 + TOPMARGIN, 7 + BOTTOMMARGIN, 213 + END + + IDD_PROP_FORMAT, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 285 + TOPMARGIN, 7 + BOTTOMMARGIN, 178 + END + + IDD_PROP_GREP, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 286 + TOPMARGIN, 7 + BOTTOMMARGIN, 160 + END + + IDD_PROP_KEYBIND, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 286 + TOPMARGIN, 7 + BOTTOMMARGIN, 232 + END + + IDD_PROP_CUSTMENU, DIALOG + BEGIN + RIGHTMARGIN, 290 + VERTGUIDE, 276 + END + + IDD_PROP_KEYWORD, DIALOG + BEGIN + BOTTOMMARGIN, 238 + END + + IDD_PROP_HELPER, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 286 + TOPMARGIN, 7 + BOTTOMMARGIN, 210 + END + + IDD_PROP_MACRO, DIALOG + BEGIN + RIGHTMARGIN, 292 + BOTTOMMARGIN, 237 + END + + IDD_WINPOSSIZE, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 170 + TOPMARGIN, 7 + BOTTOMMARGIN, 152 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +IDB_MYTOOL BITMAP "../resource/mytool.bmp" + +IDB_SCROLL_CENTER BITMAP "../resource/auto_scroll_center.bmp" + +IDB_SCROLL_VERTICAL BITMAP "../resource/auto_scroll_vertical.bmp" + +IDB_SCROLL_HORIZONTAL BITMAP "../resource/auto_scroll_horizontal.bmp" + + +///////////////////////////////////////////////////////////////////////////// +// +// Cursor +// + +IDC_CURSOR_COPYARROW CURSOR "../resource/cursor_copy.cur" + +IDC_CURSOR_MOVEARROW CURSOR "../resource/cursor_move.cur" + +IDC_CURSOR_RVARROW CURSOR "../resource/cursor_rvarrow.cur" + +IDC_CURSOR_ISEARCH_F CURSOR "../resource/cursor_isf.cur" + +IDC_CURSOR_ISEARCH_B CURSOR "../resource/cursor_isb.cur" + +IDC_CURSOR_TAB_SEPARATE CURSOR "../resource/cursor_tab_separate.cur" + +IDC_CURSOR_TAB_JOIN CURSOR "../resource/cursor_tab_join.cur" + +IDC_CURSOR_AUTOSCROLL_CENTER CURSOR "../resource/auto_scroll_center.cur" + +IDC_CURSOR_AUTOSCROLL_HORIZONTAL CURSOR "../resource/auto_scroll_horizontal.cur" + +IDC_CURSOR_AUTOSCROLL_VERTICAL CURSOR "../resource/auto_scroll_vertical.cur" + +IDC_CURSOR_AUTOSCROLL_UP CURSOR "../resource/auto_scroll_up.cur" + +IDC_CURSOR_AUTOSCROLL_DOWN CURSOR "../resource/auto_scroll_down.cur" + +IDC_CURSOR_AUTOSCROLL_LEFT CURSOR "../resource/auto_scroll_left.cur" + +IDC_CURSOR_AUTOSCROLL_RIGHT CURSOR "../resource/auto_scroll_right.cur" + +IDC_CURSOR_AUTOSCROLL_UP_LEFT CURSOR "../resource/auto_scroll_up_left.cur" + +IDC_CURSOR_AUTOSCROLL_UP_RIGHT CURSOR "../resource/auto_scroll_up_right.cur" + +IDC_CURSOR_AUTOSCROLL_DOWN_LEFT CURSOR "../resource/auto_scroll_down_left.cur" + +IDC_CURSOR_AUTOSCROLL_DOWN_RIGHT CURSOR "../resource/auto_scroll_down_right.cur" + + +///////////////////////////////////////////////////////////////////////////// +// +// 100 +// + +IDR_MENU1 100 "../resource/MainMenu.ini" + + +///////////////////////////////////////////////////////////////////////////// +// +// AFX_DIALOG_LAYOUT +// + +IDD_GREP AFX_DIALOG_LAYOUT +BEGIN + 0 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + F_DISABLE "-- 不明 --" +END + +STRINGTABLE +BEGIN + F_ISEARCH_SUBMENU "インクリメンタルサーチ" + F_TAB_CLOSEOTHER_TAB "このタブ以外を閉じる" + F_TAB_CLOSEOTHER_WINDOW "このウィンドウ以外を閉じる" + F_EDIT_BOX_SEL_SUBMENU "矩形選択" + F_FILE_TOPMENU "ファイル" + F_EDIT_TOPMENU "編集" + F_CONVERT_TOPMENU "変換" + F_SEARCH_TOPMENU "検索" + F_TOOL_TOPMENU "ツール" + F_OPTION_TOPMENU "設定" + F_WINDOW_TOPMENU "ウィンドウ" + F_HELP_TOPMENU "ヘルプ" + F_WINDOW_LIST_SUBMENU "ウィンドウ一覧" +END + +STRINGTABLE +BEGIN + F_FILENEW "新規作成" + F_FILEOPEN "開く..." + F_FILESAVE "上書き保存" + F_FILESAVEAS_DIALOG "名前を付けて保存..." + F_FILECLOSE "閉じて(無題)" + F_FILECLOSE_OPEN "閉じて開く..." + F_FILEOPEN_DROPDOWN "開く(ドロップダウン)..." + F_FILESAVECLOSE "保存して閉じる" + F_FILENEW_NEWWINDOW "新規ウインドウを開く" + F_FILE_REOPEN_SJIS "SJISで開き直す" +END + +STRINGTABLE +BEGIN + F_TAB_MANIP_SUBMENU "タブの操作" + F_TAB_GROUPIZE "グループ化" + F_TAB_GROUPDEL "グループ化を解除" + F_TOPMOST_REL "常に手前を解除" + F_TOPMOST_SET "常に手前に表示" + F_FILE_REOPEN_SUBMENU "開き直す" + F_FILE_RCNTFILE_SUBMENU "最近使ったファイル" + F_FILE_RCNTFLDR_SUBMENU "最近使ったフォルダ" + F_EDIT_INS_SUBMENU "挿入" + F_EDIT_COS_SUBMENU "整形" + F_EDIT_MOV_SUBMENU "移動" + F_EDIT_SEL_SUBMENU "選択" + F_EDIT_HLV_SUBMENU "高度な操作" + F_CONV_ENCODE_SUBMENU "文字コード変換" + F_RECKEYMACRO_REC "キーマクロの記録開始" + F_SAVEKEYMACRO_REC "キーマクロの保存" +END + +STRINGTABLE +BEGIN + F_FILE_REOPEN_JIS "JISで開き直す" + F_FILE_REOPEN_EUC "EUCで開き直す" + F_FILE_REOPEN_UNICODE "UTF-16で開き直す" + F_FILE_REOPEN_UTF8 "UTF-8で開き直す" + F_FILE_REOPEN_UTF7 "UTF-7で開き直す" + F_FILE_REOPEN_UNICODEBE "UTF-16BEで開き直す" + F_FILE_REOPEN_CESU8 "CESU-8で開き直す" + F_FILE_REOPEN "開き直す" + F_FILESAVEALL "すべて上書き保存" + F_FILE_REOPEN_LATIN1 "Latin1で開き直す" +END + +STRINGTABLE +BEGIN + F_PRINT "印刷..." + F_PRINT_PREVIEW "印刷プレビュー" + F_PRINT_PAGESETUP "印刷ページ設定..." +END + +STRINGTABLE +BEGIN + F_OPEN_HfromtoC "同名のC/C++ヘッダ(ソース)を開く" + F_ACTIVATE_SQLPLUS "SQL*Plusをアクティブ表示" + F_PLSQL_COMPILE_ON_SQLPLUS "SQL*Plusで実行" +END + +STRINGTABLE +BEGIN + F_BROWSE "ブラウズ" + F_VIEWMODE "ビューモード" + F_PROPERTY_FILE "ファイルのプロパティ" + F_PROFILEMGR "プロファイルマネージャ" +END + +STRINGTABLE +BEGIN + F_EXITALLEDITORS "編集の全終了" + F_EXITALL "サクラエディタの全終了" + F_OPEN_FOLDER_IN_EXPLORER "ファイルの場所を開く" + F_OPEN_COMMAND_PROMPT "コマンドプロンプトを開く" + F_OPEN_COMMAND_PROMPT_AS_ADMIN "管理者としてコマンドプロンプトを開く" + F_WCHAR "文字入力" + F_IME_CHAR "全角文字入力" +END + +STRINGTABLE +BEGIN + F_OPEN_POWERSHELL "PowerShellを開く" + F_OPEN_POWERSHELL_AS_ADMIN "管理者としてPowerShellを開く" +END + +STRINGTABLE +BEGIN + F_UNDO "元に戻す" + F_REDO "やり直し" + F_DELETE "削除" + F_DELETE_BACK "カーソル前を削除" +END + +STRINGTABLE +BEGIN + F_WordDeleteToStart "単語の左端まで削除" + F_WordDeleteToEnd "単語の右端まで削除" + F_WordCut "単語切り取り" + F_WordDelete "単語削除" +END + +STRINGTABLE +BEGIN + F_LineCutToStart "行頭まで切り取り(改行単位)" + F_LineCutToEnd "行末まで切り取り(改行単位)" + F_LineDeleteToStart "行頭まで削除(改行単位)" + F_LineDeleteToEnd "行末まで削除(改行単位)" + F_CUT_LINE "行切り取り(折り返し単位)" + F_DELETE_LINE "行削除(折り返し単位)" + F_DUPLICATELINE "行の二重化(折り返し単位)" +END + +STRINGTABLE +BEGIN + F_INDENT_TAB "TABインデント" + F_UNINDENT_TAB "逆TABインデント" + F_INDENT_SPACE "SPACEインデント" + F_UNINDENT_SPACE "逆SPACEインデント" +END + +STRINGTABLE +BEGIN + F_LTRIM "左(先頭)の空白を削除" + F_RTRIM "右(末尾)の空白を削除" + F_SORT_ASC "選択行の昇順ソート" + F_SORT_DESC "選択行の降順ソート" + F_MERGE "連続した重複行の削除(uniq)" + F_RECONVERT "再変換" +END + +STRINGTABLE +BEGIN + F_UP "カーソル上移動" + F_DOWN "カーソル下移動" + F_LEFT "カーソル左移動" + F_RIGHT "カーソル右移動" + F_UP2 "カーソル上移動(2行ごと)" + F_DOWN2 "カーソル下移動(2行ごと)" +END + +STRINGTABLE +BEGIN + F_WORDLEFT "単語の左端に移動" + F_WORDRIGHT "単語の右端に移動" + F_GOLINETOP "行頭に移動(折り返し単位)" + F_GOLINEEND "行末に移動(折り返し単位)" +END + +STRINGTABLE +BEGIN + F_HalfPageUp "半ページアップ" + F_HalfPageDown "半ページダウン" + F_1PageUp "1ページアップ" + F_1PageDown "1ページダウン" + F_GOFILETOP "ファイルの先頭に移動" + F_GOFILEEND "ファイルの最後に移動" +END + +STRINGTABLE +BEGIN + F_CURLINECENTER "カーソル行をウィンドウ中央へ" + F_CURLINETOP "カーソル行をウィンドウ上部へ" + F_CURLINEBOTTOM "カーソル行をウィンドウ下部へ" +END + +STRINGTABLE +BEGIN + F_JUMPHIST_PREV "移動履歴: 前へ" + F_JUMPHIST_NEXT "移動履歴: 次へ" + F_JUMPHIST_SET "現在位置を移動履歴に登録" + F_WndScrollDown "テキストを1行下へスクロール" + F_WndScrollUp "テキストを1行上へスクロール" + F_GONEXTPARAGRAPH "次の段落へ移動" + F_GOPREVPARAGRAPH "前の段落へ移動" +END + +STRINGTABLE +BEGIN + F_AUTOSCROLL "オートスクロール" + F_WHEELUP "ホイールアップ" + F_WHEELDOWN "ホイールダウン" + F_WHEELLEFT "ホイール左" + F_WHEELRIGHT "ホイール右" + F_WHEELPAGEUP "ホイールページアップ" + F_WHEELPAGEDOWN "ホイールページダウン" + F_WHEELPAGELEFT "ホイールページ左" + F_WHEELPAGERIGHT "ホイールページ右" + F_MODIFYLINE_NEXT "次の変更行へ" + F_MODIFYLINE_PREV "前の変更行へ" +END + +STRINGTABLE +BEGIN + F_SELECTWORD "現在位置の単語選択" + F_SELECTALL "すべて選択" + F_SELECTLINE "1行選択" + F_BEGIN_SEL "範囲選択開始" + F_UP_SEL "(選択)カーソル上移動" + F_DOWN_SEL "(選択)カーソル下移動" + F_LEFT_SEL "(選択)カーソル左移動" + F_RIGHT_SEL "(選択)カーソル右移動" + F_UP2_SEL "(選択)カーソル上移動(2行ごと)" +END + +STRINGTABLE +BEGIN + F_DOWN2_SEL "(選択)カーソル下移動(2行ごと)" + F_WORDLEFT_SEL "(選択)単語の左端に移動" + F_WORDRIGHT_SEL "(選択)単語の右端に移動" +END + +STRINGTABLE +BEGIN + F_GOLINETOP_SEL "(選択)行頭に移動(折り返し単位)" + F_GOLINEEND_SEL "(選択)行末に移動(折り返し単位)" + F_HalfPageUp_Sel "(選択)半ページアップ" + F_HalfPageDown_Sel "(選択)半ページダウン" + F_1PageUp_Sel "(選択)1ページアップ" + F_1PageDown_Sel "(選択)1ページダウン" +END + +STRINGTABLE +BEGIN + F_GOFILETOP_SEL "(選択)ファイルの先頭に移動" + F_GOFILEEND_SEL "(選択)ファイルの最後に移動" +END + +STRINGTABLE +BEGIN + F_GONEXTPARAGRAPH_SEL "(選択)次の段落へ移動" + F_GOPREVPARAGRAPH_SEL "(選択)前の段落へ移動" + F_MODIFYLINE_NEXT_SEL "(選択)次の変更行へ" + F_MODIFYLINE_PREV_SEL "(選択)前の変更行へ" +END + +STRINGTABLE +BEGIN + F_BEGIN_BOX "矩形範囲選択開始" + F_UP_BOX "(矩形選択)カーソル上移動" +END + +STRINGTABLE +BEGIN + F_DOWN_BOX "(矩形選択)カーソル下移動" + F_LEFT_BOX "(矩形選択)カーソル左移動" + F_RIGHT_BOX "(矩形選択)カーソル右移動" + F_UP2_BOX "(矩形選択)カーソル上移動(2行ごと)" + F_DOWN2_BOX "(矩形選択)カーソル下移動(2行ごと)" + F_WORDLEFT_BOX "(矩形選択)単語の左端に移動" + F_WORDRIGHT_BOX "(矩形選択)単語の右端に移動" +END + +STRINGTABLE +BEGIN + F_GOLOGICALLINETOP_BOX "(矩形選択)行頭に移動(改行単位)" + F_GOLINETOP_BOX "(矩形選択)行頭に移動(折り返し単位)" + F_GOLINEEND_BOX "(矩形選択)行末に移動(折り返し単位)" + F_HalfPageUp_BOX "(矩形選択)半ページアップ" + F_HalfPageDown_BOX "(矩形選択)半ページダウン" + F_1PageUp_BOX "(矩形選択)1ページアップ" + F_1PageDown_BOX "(矩形選択)1ページダウン" +END + +STRINGTABLE +BEGIN + F_GOFILETOP_BOX "(矩形選択)ファイルの先頭に移動" + F_GOFILEEND_BOX "(矩形選択)ファイルの最後に移動" +END + +STRINGTABLE +BEGIN + F_CUT "切り取り" + F_COPY "コピー" + F_COPY_CRLF "CRLF改行でコピー" + F_PASTE "貼り付け" + F_PASTEBOX "矩形貼り付け" + F_INSTEXT_W "テキストを貼り付け" +END + +STRINGTABLE +BEGIN + F_COPY_ADDCRLF "折り返し位置に改行をつけてコピー" + F_COPYLINES "選択範囲内全行コピー" + F_COPYLINESASPASSAGE "選択範囲内全行引用符付きコピー" + F_COPYLINESWITHLINENUMBER "選択範囲内全行行番号付きコピー" + F_COPY_COLOR_HTML "選択範囲内色付きHTMLコピー" + F_COPY_COLOR_HTML_LINENUMBER "選択範囲内行番号色付きHTMLコピー" + F_COPYPATH "このファイルのパス名をコピー" + F_COPYTAG "このファイルのパス名とカーソル位置をコピー" + F_COPYFNAME "このファイル名をコピー" +END + +STRINGTABLE +BEGIN + F_CREATEKEYBINDLIST "キー割り当て一覧をコピー" + F_COPYDIRPATH "このファイルのフォルダ名をコピー" +END + +STRINGTABLE +BEGIN + F_INS_DATE "日付挿入" + F_INS_TIME "時刻挿入" + F_CTRL_CODE_DIALOG "コントロールコード入力..." + F_INS_FILE_USED_RECENTLY "最近使ったファイル挿入" + F_INS_FOLDER_USED_RECENTLY "最近使ったフォルダ挿入" +END + +STRINGTABLE +BEGIN + F_TOLOWER "小文字" + F_TOUPPER "大文字" + F_TOHANKAKU "全角→半角" + F_TOZENKAKUKATA "半角+全ひら→全角・カタカナ" + F_TOZENKAKUHIRA "半角+全カタ→全角・ひらがな" + F_HANKATATOZENKATA "半角カタカナ→全角カタカナ" + F_HANKATATOZENHIRA "半角カタカナ→全角ひらがな" + F_TOZENEI "半角英数→全角英数" +END + +STRINGTABLE +BEGIN + F_TOHANEI "全角英数→半角英数" + F_TOHANKATA "全角カタカナ→半角カタカナ" + F_TABTOSPACE "TAB→空白" + F_SPACETOTAB "空白→TAB" +END + +STRINGTABLE +BEGIN + F_CODECNV_AUTO2SJIS "自動判別→SJISコード変換" + F_CODECNV_EMAIL "E-Mail(JIS→SJIS)コード変換" + F_CODECNV_EUC2SJIS "EUC→SJISコード変換" + F_CODECNV_UNICODE2SJIS "UTF-16→SJISコード変換" + F_CODECNV_UTF82SJIS "UTF-8→SJISコード変換" + F_CODECNV_UTF72SJIS "UTF-7→SJISコード変換" + F_CODECNV_UNICODEBE2SJIS "UTF-16BE→SJISコード変換" + F_CODECNV_SJIS2JIS "SJIS→JISコード変換" + F_CODECNV_SJIS2EUC "SJIS→EUCコード変換" + F_CODECNV_SJIS2UTF8 "SJIS→UTF-8コード変換" + F_CODECNV_SJIS2UTF7 "SJIS→UTF-7コード変換" +END + +STRINGTABLE +BEGIN + F_BASE64DECODE "Base64デコードして保存" +END + +STRINGTABLE +BEGIN + F_UUDECODE "uudecodeして保存" +END + +STRINGTABLE +BEGIN + F_SEARCH_DIALOG "検索..." + F_SEARCH_NEXT "次を検索" + F_SEARCH_PREV "前を検索" + F_REPLACE_DIALOG "置換..." + F_SEARCH_CLEARMARK "検索マークの切替え" + F_REPLACE "置換" + F_REPLACE_ALL "すべて置換" + F_SEARCH_BOX "検索 (ボックス)" + F_JUMP_SRCHSTARTPOS "検索開始位置へ戻る" + F_GREP_DIALOG "Grep..." + F_GREP "Grep" +END + +STRINGTABLE +BEGIN + F_GREP_REPLACE_DLG "Grep置換..." + F_GREP_REPLACE "Grep置換" + F_JUMP_DIALOG "指定行へジャンプ..." + F_JUMP "指定行へジャンプ" +END + +STRINGTABLE +BEGIN + F_OUTLINE "アウトライン解析..." + F_OUTLINE_TOGGLE "アウトライン解析(トグル)..." + F_TAGJUMP "タグジャンプ" + F_TAGJUMPBACK "タグジャンプバック" + F_TAGS_MAKE "タグファイルの作成..." +END + +STRINGTABLE +BEGIN + F_DIRECT_TAGJUMP "ダイレクトタグジャンプ" + F_TAGJUMP_CLOSE "閉じてタグジャンプ" + F_TAGJUMP_KEYWORD "キーワードを指定してタグジャンプ..." + F_COMPARE "ファイル内容比較..." +END + +STRINGTABLE +BEGIN + F_BRACKETPAIR "対括弧の検索" + F_BOOKMARK_SET "ブックマーク設定・解除" + F_BOOKMARK_NEXT "次のブックマークへ" + F_BOOKMARK_PREV "前のブックマークへ" + F_BOOKMARK_RESET "ブックマークの全解除" + F_BOOKMARK_VIEW "ブックマークの一覧..." + F_BOOKMARK_PATTERN "該当行マーク" +END + +STRINGTABLE +BEGIN + F_TOGGLE_KEY_SEARCH_OFF "キーワードヘルプ自動表示しない" + F_TOGGLE_KEY_SEARCH_ON "キーワードヘルプ自動表示する" + F_SPLIT_V_ON "上下に分割" + F_SPLIT_V_OFF "上下分割の解除" + F_SPLIT_H_ON "左右に分割" + F_SPLIT_H_OFF "左右分割の解除" + F_CHGMOD_EOL_SUBMENU "入力改行コード指定" + F_SPLIT_VH_ON "縦横に分割" + F_SPLIT_VH_OFF "縦横分割の解除" + F_BOOKMARK_SUBMENU "ブックマーク" +END + +STRINGTABLE +BEGIN + F_DIFF_DIALOG "DIFF差分表示..." + F_DIFF "DIFF差分表示" + F_DIFF_NEXT "次の差分へ" + F_DIFF_PREV "前の差分へ" + F_DIFF_RESET "差分表示の全解除" + F_ISEARCH_NEXT "前方インクリメンタルサーチ" + F_ISEARCH_PREV "後方インクリメンタルサーチ" + F_ISEARCH_REGEXP_NEXT "正規表現前方インクリメンタルサーチ" + F_ISEARCH_REGEXP_PREV "正規表現後方インクリメンタルサーチ" + F_ISEARCH_MIGEMO_NEXT "MIGEMO前方インクリメンタルサーチ" + F_ISEARCH_MIGEMO_PREV "MIGEMO後方インクリメンタルサーチ" + F_FUNCLIST_NEXT "次の関数リストマーク" + F_FUNCLIST_PREV "前の関数リストマーク" + F_FILETREE "ファイルツリー" +END + +STRINGTABLE +BEGIN + F_CHGMOD_INS "挿入/上書きモード切り替え" +END + +STRINGTABLE +BEGIN + F_CHG_CHARSET "文字コードセット指定..." +END + +STRINGTABLE +BEGIN + F_CHGMOD_EOL_CRLF "入力改行コード指定(CRLF)" + F_CHGMOD_EOL_LF "入力改行コード指定(LF)" + F_CHGMOD_EOL_CR "入力改行コード指定(CR)" +END + +STRINGTABLE +BEGIN + F_CANCEL_MODE "各種モードの取り消し" + F_SHOWTOOLBAR "ツールバーの表示/非表示" + F_SHOWFUNCKEY "ファンクションキーの表示/非表示" + F_SHOWSTATUSBAR "ステータスバーの表示/非表示" + F_SHOWTAB "タブバーの表示/非表示" +END + +STRINGTABLE +BEGIN + F_SHOWMINIMAP "ミニマップの表示/非表示" + F_TYPE_LIST "タイプ別設定一覧..." + F_OPTION_TYPE "タイプ別設定..." + F_OPTION "共通設定..." + F_FAVORITE "履歴の管理..." +END + +STRINGTABLE +BEGIN + F_LOADKEYMACRO_REC "キーマクロの読み込み" + F_EXECKEYMACRO_REC "キーマクロの実行" + F_RECKEYMACRO_APPE "キーマクロの記録終了" + F_SAVEKEYMACRO_APPE "キーマクロの記録終了&&保存" + F_LOADKEYMACRO_APPE "キーマクロの記録終了&&読み込み" + F_EXECKEYMACRO_APPE "キーマクロの記録終了&&実行" + F_EXECKEYMACRO_REGD "登録済みマクロ" + F_TOOL_CUSTOM_SUBMENU "カスタムメニュー" + F_SHOWTOOLBAR_ON "ツールバーを表示" + F_SHOWFUNCKEY_ON "ファンクションキーを表示" + F_SHOWTAB_ON "タブバーを表示" + F_SHOWSTATUSBAR_ON "ステータスバーを表示" + F_SHOWTOOLBAR_OFF "表示中のツールバーを隠す" + F_SHOWFUNCKEY_OFF "表示中のファンクションキーを隠す" + F_SHOWTAB_OFF "表示中のタブバーを隠す" + F_SHOWSTATUSBAR_OFF "表示中のステータスバーを隠す" +END + +STRINGTABLE +BEGIN + STR_FILETREE_MENU_TEMP "Temp(&T)" + STR_FILETREE_MENU_SAKURA "sakura(&S)" + STR_FILETREE_MENU_SAKURADATA "sakuraデータ(&A)" + STR_FILETREE_REPLACE_PATH_FROM "置換元パスを指定してください" + STR_FILETREE_REPLACE_PATH_TO "置換先文字列を指定してください" + F_SHOWMINIMAP_OFF "表示中のミニマップを隠す" + F_SHOWMINIMAP_ON "ミニマップを表示" + STR_FUCLIST_NEXT_NOT_FOUND "前方(↓) に関数が見つかりません。" + STR_FUCLIST_PREV_NOT_FOUND "後方(↑) に関数が見つかりません。" + STR_MODLINE_NEXT_NOT_FOUND "前方(↓) に変更行が見つかりません。" + STR_MODLINE_PREV_NOT_FOUND "後方(↑) に変更行が見つかりません。" + STR_GREP_SHOW_MATCH_NOHITLINE " (一致しなかった行を出力)\r\n" + STR_TSV_MODE_NONE "通常" + STR_TSV_MODE_TSV "TSV" + STR_TSV_MODE_CSV "CSV" + STR_DLGFNCLST_SORTTYPE1_2 "デフォルト(降順)" +END + +STRINGTABLE +BEGIN + F_FONT "フォント設定..." + F_SETFONTSIZE "フォントサイズ設定" + F_SETFONTSIZEUP "フォントサイズ拡大" + F_SETFONTSIZEDOWN "フォントサイズ縮小" +END + +STRINGTABLE +BEGIN + F_WRAPWINDOWWIDTH "折り返し桁数" + F_TMPWRAPNOWRAP "折り返さない" + F_TMPWRAPSETTING "指定桁で折り返す" + F_TMPWRAPWINDOW "右端で折り返す" + F_SELECT_COUNT_MODE "文字カウント方法" +END + +STRINGTABLE +BEGIN + F_RECKEYMACRO "キーマクロの記録開始/終了" + F_SAVEKEYMACRO "キーマクロの保存" + F_LOADKEYMACRO "キーマクロの読み込み" + F_EXECKEYMACRO "キーマクロの実行" + F_EXECEXTMACRO "名前を指定してマクロ実行..." +END + +STRINGTABLE +BEGIN + F_EXECMD_DIALOG "外部コマンド実行..." + F_EXECMD "外部コマンド実行" +END + +STRINGTABLE +BEGIN + F_SPLIT_V "上下に分割/分割解除" + F_SPLIT_H "左右に分割/分割解除" +END + +STRINGTABLE +BEGIN + F_SPLIT_VH "縦横に分割/分割解除" + F_WINCLOSE "閉じる" + F_WIN_CLOSEALL "すべて閉じる" +END + +STRINGTABLE +BEGIN + F_GROUPCLOSE "グループを閉じる" + F_NEXTGROUP "次のグループ" + F_PREVGROUP "前のグループ" + F_TAB_MOVERIGHT "タブを右に移動" + F_TAB_MOVELEFT "タブを左に移動" + F_TAB_SEPARATE "新規グループ" + F_TAB_JOINTNEXT "次のグループに移動" + F_TAB_JOINTPREV "前のグループに移動" + F_TAB_CLOSEOTHER "このタブ/ウィンドウ以外を閉じる" + F_TAB_CLOSELEFT "左をすべて閉じる" + F_TAB_CLOSERIGHT "右をすべて閉じる" +END + +STRINGTABLE +BEGIN + F_CASCADE "重ねて表示" + F_TILE_V "上下に並べて表示" + F_TILE_H "左右に並べて表示" + F_BIND_WINDOW "グループ化" + F_TOPMOST "常に手前に表示" + F_WINLIST "ウィンドウ一覧..." + F_DLGWINLIST "ウィンドウ一覧表示..." + F_NEXTWINDOW "次のウィンドウ" + F_PREVWINDOW "前のウィンドウ" +END + +STRINGTABLE +BEGIN + F_MAXIMIZE_V "縦方向に最大化" + F_MINIMIZE_ALL "すべて最小化" + F_MAXIMIZE_H "横方向に最大化" +END + +STRINGTABLE +BEGIN + F_REDRAW "再描画" + F_WIN_OUTPUT "アウトプット" +END + +STRINGTABLE +BEGIN + F_HOKAN "入力補完" + F_TOGGLE_KEY_SEARCH "キーワードヘルプ自動表示" +END + +STRINGTABLE +BEGIN + F_HELP_CONTENTS "ヘルプ目次" + F_HELP_SEARCH "ヘルプキーワード検索" + F_MENU_ALLFUNC "コマンド一覧" + F_EXTHELP1 "外部ヘルプ1" + F_EXTHTMLHELP "外部HTMLヘルプ" + F_ABOUT "バージョン情報" +END + +STRINGTABLE +BEGIN + F_MENU_RBUTTON "右クリックメニュー" +END + +STRINGTABLE +BEGIN + F_CUSTMENU_1 "カスタムメニュー1" + F_CUSTMENU_2 "カスタムメニュー2" + F_CUSTMENU_3 "カスタムメニュー3" +END + +STRINGTABLE +BEGIN + F_CUSTMENU_4 "カスタムメニュー4" + F_CUSTMENU_5 "カスタムメニュー5" + F_CUSTMENU_6 "カスタムメニュー6" + F_CUSTMENU_7 "カスタムメニュー7" + F_CUSTMENU_8 "カスタムメニュー8" + F_CUSTMENU_9 "カスタムメニュー9" + F_CUSTMENU_10 "カスタムメニュー10" + F_CUSTMENU_11 "カスタムメニュー11" + F_CUSTMENU_12 "カスタムメニュー12" + F_CUSTMENU_13 "カスタムメニュー13" + F_CUSTMENU_14 "カスタムメニュー14" + F_CUSTMENU_15 "カスタムメニュー15" + F_CUSTMENU_16 "カスタムメニュー16" + F_CUSTMENU_17 "カスタムメニュー17" + F_CUSTMENU_18 "カスタムメニュー18" + F_CUSTMENU_19 "カスタムメニュー19" +END + +STRINGTABLE +BEGIN + F_CUSTMENU_20 "カスタムメニュー20" + F_CUSTMENU_21 "カスタムメニュー21" + F_CUSTMENU_22 "カスタムメニュー22" + F_CUSTMENU_23 "カスタムメニュー23" + F_CUSTMENU_24 "タブメニュー" +END + +STRINGTABLE +BEGIN + F_MENU_NOT_USED_FIRST "――ツールバー折返――" +END + +STRINGTABLE +BEGIN + F_CHGMOD_EOL "入力改行コード指定" + F_TEXTWRAPMETHOD "折り返し方法" +END + +STRINGTABLE +BEGIN + F_WINDOW_LIST "ウィンドウリスト" + F_FILE_USED_RECENTLY "最近使ったファイル" + F_FOLDER_USED_RECENTLY "最近使ったフォルダ" + F_CUSTMENU_LIST "カスタムメニューリスト" + F_USERMACRO_LIST "登録済みマクロリスト" + F_PLUGIN_LIST "プラグインコマンドリスト" +END + +STRINGTABLE +BEGIN + IDS_AUTHOR_PAGE "https://sakura-editor.github.io/" + IDS_ABOUT_DESCRIPTION "このソフトウェアは「テキストエディタ(共同開発版)」を改称したものです。\r\n商用・非商用を問わず無償で利用できますが、ソースコードの著作権は各箇所を記述した人が留保しています。\r\nこのソフトウェアは無保証です。\r\n" +END + +STRINGTABLE +BEGIN + STR_SELLANG_NAME "Japanese" + STR_SELLANG_LANGID "0x0411" + STR_SQLERR_EXEC_BUT_NOT_RUN + "Oracle SQL*Plusで実行します。\n\n\nOracle SQL*Plusが起動されていません。\n" + STR_SQLERR_ACTV_BUT_NOT_RUN + "Oracle SQL*Plusをアクティブ表示します。\n\n\nOracle SQL*Plusが起動されていません。\n" + STR_ERR_CMPERR "比較先のファイル\n%s\n%dバイトを超える行があります。\n比較できません。" + STR_ERR_MACROERR1 "マクロの読み込みに失敗しました。\n\n%s" + STR_CMDLINE_PARSECMD1 "%ls\r\n上記のファイル名は不正です。ファイル名に \\ / : * ? "" < > | の文字は使えません。 " + STR_ERR_CTRLMTX1 "CreateMutex()失敗。\n終了します。" + STR_ERR_CTRLMTX2 "CreateEvent()失敗。\n終了します。" + STR_ERR_CTRLMTX3 "ウィンドウの作成に失敗しました。\n起動できません。" + STR_ERR_CTRLMTX4 "SetEvent()失敗。\n終了します。" + STR_NO_TITLE1 "(無題)" + STR_NO_TITLE2 "無題" +END + +STRINGTABLE +BEGIN + STR_SHELL_HHCTRL "HHCTRL.OCXが見つかりません。\r\nHTMLヘルプを利用するにはHHCTRL.OCXが必要です。\r\n" + STR_SHELL_INFO "情報" + STR_SHELL_MENU_OPEN "開く(&O)..." + STR_SHELL_MENU_IMPEXP "インポート/エクスポートの起点リセット(&R)" + STR_SHELL_IMPEXPDIR "各種設定のインポート/エクスポート用ファイル選択画面の\n初期表示フォルダを設定フォルダに戻します。" + STR_SHELL_INIFOLDER "設定フォルダ(&/) >>" + STR_ERR_GLOBAL01 "自動選択" + STR_PREVIEW_ONLY "(印刷プレビューでのみ使用できます)" + STR_NOT_SAVED "(保存されていません)" + STR_PROPCOMMON_PLUGIN "プラグイン" + STR_PROPCOMMON_MAINMENU "メインメニュー" + STR_PROPCOMMON_STATBAR "ステータスバー" + STR_SPECIAL_FUNC "特別機能" +END + +STRINGTABLE +BEGIN + STR_PLGMGR_INST_IDNUM "Plugin.IDの先頭に数字は使用できません" + STR_PLGMGR_INST_NAME "同じプラグインが別の名前でインストールされています。上書きしますか?\n はい → 新しい「%s」を使用\n いいえ→ インストール済みの「%ls」を使用" + STR_PLGMGR_INST_USERCANCEL "ユーザキャンセル" + STR_PLGMGR_INST_MAX "プラグインをこれ以上登録できません" + STR_WSHPLUG_LOADMACRO "マクロの読み込みに失敗しました。\n\n%s" + STR_CARET_WITHBOM " BOM付" + STR_MAXWINDOW "編集ウィンドウ数の上限は%dです。\nこれ以上は同時に開けません。" + STR_MENU_UNKOWN "%s 不明(応答なし)" + STR_PRINT_WAITING "印刷処理の終了を待機しています・・・" + STR_OUTLINE_ERLANG_SCANARGS "COutlineErlang::ScanArgs 未知の括弧" + STR_ESI_CHARCODE_DETECT "--文字コード調査結果-----------\r\n" + STR_ESI_RESULT_STATE "判別結果の状態\r\n" + STR_ESI_NO_INFO "\t判別結果を取得できません。\r\n" + STR_ESI_DETECTED "\tおそらく正常に判定されました。\r\n" + STR_ESI_NO_DETECTED "\tコードを検出できませんでした。\r\n" + STR_ESI_DOC_TYPE "文書種別\r\n" +END + +STRINGTABLE +BEGIN + STR_DLGCTRLCODE_CODE "コード" + STR_DLGCTRLCODE_SYMBOL "表記" + STR_DLGCTRLCODE_NAME "名前" + STR_DLGCTRLCODE_DESC "説明" + STR_ERR_DLGCTL5 "空文字" + STR_ERR_DLGCTL6 "ヘッダ開始" + STR_ERR_DLGCTL7 "テキスト開始" + STR_ERR_DLGCTL8 "テキスト終了" + STR_ERR_DLGCTL9 "転送終了" + STR_ERR_DLGCTL10 "照会" + STR_ERR_DLGCTL11 "受信OK" + STR_ERR_DLGCTL12 "警告(ベル)" + STR_ERR_DLGCTL13 "後退" + STR_ERR_DLGCTL14 "タブ" + STR_ERR_DLGCTL15 "改行" + STR_ERR_DLGCTL16 "垂直タブ" +END + +STRINGTABLE +BEGIN + STR_ERR_DLGCTL17 "改ページ" + STR_ERR_DLGCTL18 "復帰" + STR_ERR_DLGCTL19 "シフトアウト" + STR_ERR_DLGCTL20 "シフトイン" + STR_ERR_DLGCTL21 "データリンクエスケープ" + STR_ERR_DLGCTL22 "装置制御1" + STR_ERR_DLGCTL23 "装置制御2" + STR_ERR_DLGCTL24 "装置制御3" + STR_ERR_DLGCTL25 "装置制御4" + STR_ERR_DLGCTL26 "受信失敗" + STR_ERR_DLGCTL27 "同期" + STR_ERR_DLGCTL28 "転送ブロック終了" + STR_ERR_DLGCTL29 "キャンセル" + STR_ERR_DLGCTL30 "メディア終了" + STR_ERR_DLGCTL31 "置換" + STR_ERR_DLGCTL32 "エスケープ" +END + +STRINGTABLE +BEGIN + STR_ERR_DLGCTL33 "フォーム区切" + STR_ERR_DLGCTL34 "グループ区切" + STR_ERR_DLGCTL35 "レコード区切" + STR_ERR_DLGCTL36 "ユニット区切" + STR_ERR_DLGCTL37 "削除" + STR_DLGFAV_FILE "ファイル" + STR_DLGFAV_FOLDER "フォルダ" + STR_DLGFAV_SEARCH "検索" + STR_DLGFAV_REPLACE "置換" + STR_DLGFAV_GREP_FILE "GREPファイル" + STR_DLGFAV_GREP_FOLDER "GREPフォルダ" + STR_DLGFAV_EXT_COMMAND "コマンド" + STR_DLGFAV_HIDDEN "(非表示)" + STR_DLGFAV_FAVORITE "お気に入り" + STR_DLGFAV_CONF_DEL_FAV "最近使った%sの履歴を削除します。\nよろしいですか?\n" + STR_DLGFAV_CONF_DEL_NOTFAV "最近使った%sの履歴のお気に入り以外を削除します。\nよろしいですか?" +END + +STRINGTABLE +BEGIN + STR_DLGFAV_CONF_DEL_PATH "最近使った%sの存在しないパスを削除します。\nよろしいですか?" + STR_DLGFAV_DELIMITER "、" + STR_DLGFAV_FAV_REFRESH "履歴(%s)が更新されたため編集中情報を破棄し再表示しました。" + STR_DLGFAV_FF_EXCLUDE "ファイル・フォルダ除外" + STR_DLGFAV_CURRENT_DIR "カレントディレクトリ" + STR_DLGFAV_ADD "追加" + STR_DLGFAV_ADD_PROMPT "追加する文字列を入力してください。" + STR_DLGFAV_EDIT "編集" + STR_DLGFAV_EDIT_PROMPT "編集する文字列を入力してください。" + STR_DLGFAV_MENU_EDIT "編集(&E)" + STR_DLGFAV_MENU_ADD "新規追加(&I)" + STR_DLGFAV_MENU_EXCLUDE "除外リストに追加(&L)" + STR_DLGFAV_MENU_DEL_ALL "すべて削除(&A)" + STR_DLGFAV_MENU_DEL_NOTFAV "お気に入り以外削除(&F)" + STR_DLGFAV_MENU_DEL_INVALID "存在しない項目削除(&N)" + STR_DLGFAV_MENU_DEL_SEL "選択項目削除(&D)" +END + +STRINGTABLE +BEGIN + STR_DLGFAV_LIST_LIMIT_OVER "除外リストがいっぱいで追加できませんでした。" + STR_ERR_DLGUPQRY1 "再ロードを行うと変更が失われますがよろしいですか?" + STR_ERR_DLGUPQRY2 "再ロードしますか?" + STR_DLGFIND1 "検索条件を指定してください。" + STR_DLGFNCLST_TITLE_CPP "C++ メソッドツリー" + STR_DLGFNCLST_TITLE_RULE "ルールファイル" + STR_DLGFNCLST_TITLE_WZ "WZ階層付テキスト" + STR_DLGFNCLST_TITLE_TEXT "テキスト トピックツリー" + STR_DLGFNCLST_TITLE_JAVA "Java メソッドツリー" + STR_DLGFNCLST_TITLE_PYTHON "Python メソッドツリー" + STR_DLGFNCLST_TITLE_COBOL "COBOL アウトライン" + STR_DLGFNCLST_TITLE_VB "Visual Basic アウトライン" + STR_DLGFNCLST_TITLE_C "C 関数一覧" + STR_DLGFNCLST_TITLE_PLSQL "PL/SQL 関数一覧" + STR_DLGFNCLST_TITLE_ASM "アセンブラ アウトライン" + STR_DLGFNCLST_TITLE_PERL "Perl 関数一覧" +END + +STRINGTABLE +BEGIN + STR_DLGFNCLST_TITLE_ERLANG "Erlang 関数一覧" + STR_DLGFNCLST_TITLE_BOOK "ブックマーク" + STR_DLGFNCLST_REMARK01 "宣言" + STR_DLGFNCLST_REMARK02 "関数宣言" + STR_DLGFNCLST_REMARK03 "プロシージャ宣言" + STR_DLGFNCLST_REMARK04 "関数" + STR_DLGFNCLST_REMARK05 "プロシージャ" + STR_DLGFNCLST_REMARK06 "■パッケージ仕様部" + STR_DLGFNCLST_REMARK07 "■パッケージ本体部" + STR_DLGFNCLST_REMARK08 "PROC" + STR_DLGFNCLST_REMARK09 "ラベル" + STR_DLGFNCLST_REMARK10 "ENDP" + STR_DLGFNCLST_SORTTYPE1 "デフォルト" + STR_DLGFNCLST_SORTTYPE2 "アルファベット順" + STR_DLGFNCLST_APND_DECLARE "(宣言)" + STR_DLGFNCLST_APND_CLASS " クラス" +END + +STRINGTABLE +BEGIN + STR_DLGFNCLST_SORTTYPE2_2 "アルファベット(降順)" + STR_DLGFNCLST_MENU_EXPAND "すべて展開(&E)" + STR_DLGFNCLST_MENU_COLLAPSE "すべて縮小(&O)" + STR_DLGFNCLST_MENU_BOOK_DEL "ブックマーク削除(&D)" + STR_DLGFNCLST_MENU_BOOK_ALL_DEL "ブックマーク全削除(&A)" + STR_KEYHELP_RMENU_NONE "表示しない" + STR_KEYHELP_RMENU_TOP "先頭に表示" + STR_KEYHELP_RMENU_BOTTOM "末尾に表示" + STR_ERR_DLGDOCLM_TOOBIG "'%ls'\nというファイルを開けません。\nファイルサイズが大きすぎます。" + STR_LOADAGENT_BIG_ERROR "'%s'\nというファイルを開けません。\nファイルサイズが大きすぎます。\n\n指定ファイルのサイズ: %s\nファイルサイズの上限: %s" + STR_ERR_FILEPATH_TOO_LONG "%ls\nというファイルを開けません。\nファイルのパスが長すぎます。" + STR_GREP_EXCLUDE_FILE "除外ファイル " + STR_GREP_EXCLUDE_FOLDER "除外フォルダ " + STR_FILEDIALOG_READONLY "読み取り専用ファイルとして開く(&R)" + STR_FILEDIALOG_CODE "文字コードセット(&C):" + STR_FILEDIALOG_EOL "改行コード(&E):" +END + +STRINGTABLE +BEGIN + STR_DLGFNCLST_APND_STRUCT " 構造体" + STR_DLGFNCLST_APND_ENUM " 列挙体" + STR_DLGFNCLST_APND_UNION " 共用体" + STR_DLGFNCLST_APND_NAMESPACE " 名前空間" + STR_DLGFNCLST_APND_INTERFACE " インターフェース" + STR_DLGFNCLST_APND_GLOBAL "グローバル" + STR_DLGFNCLST_VB_STATIC "静的 " + STR_DLGFNCLST_VB_PRIVATE "プライベート" + STR_DLGFNCLST_VB_FRIEND "フレンド" + STR_DLGFNCLST_VB_PUBLIC "パブリック" + STR_DLGFNCLST_VB_FUNCTION "関数" + STR_DLGFNCLST_VB_PROC "プロシージャ" + STR_DLGFNCLST_VB_PROPGET "プロパティ 取得" + STR_DLGFNCLST_VB_PROPLET "プロパティ 設定" + STR_DLGFNCLST_VB_PROPSET "プロパティ 参照" + STR_DLGFNCLST_VB_CONST "定数" +END + +STRINGTABLE +BEGIN + STR_DLGFNCLST_VB_ENUM "列挙型" + STR_DLGFNCLST_VB_TYPE "ユーザ定義型" + STR_DLGFNCLST_VB_EVENT "イベント" + STR_DLGFNCLST_VB_DECL "宣言" + STR_DLGFNCLST_LIST_TEXT "テキスト" + STR_DLGFNCLST_LIST_TEXT_M "テキスト *" + STR_DLGFNCLST_LIST_FUNC "関数名" + STR_DLGFNCLST_LIST_FUNC_M "関数名 *" + STR_DLGFNCLST_LIST_LINE "行" + STR_DLGFNCLST_LIST_LINE_M "行 *" + STR_DLGFNCLST_LIST_COL "桁" + STR_DLGFNCLST_LIST_COL_M "桁 *" + STR_DLGFNCLST_LIST_M "*" + STR_DLGGREP1 "検索するフォルダを選んでください" + STR_DLGGREP2 "ファイル指定のフォルダ部分にはワイルドカードは使えません。" + STR_DLGGREP3 "ファイル指定にはフルパスは使えません" +END + +STRINGTABLE +BEGIN + STR_TYPE_NAME_ASM "アセンブラ" + STR_TYPE_NAME_INI "設定ファイル" + STR_DLGFNCLST_TIP_CLOSE "閉じる" + STR_DLGFNCLST_TIP_WIN "ウィンドウの位置" + STR_DLGFNCLST_TIP_UPDATE "更新" + STR_DLGFNCLST_MENU_UPDATE "更新(&U)" + STR_DLGFNCLST_MENU_COPY "コピー(&C)" + STR_DLGFNCLST_MENU_WINPOS "ウィンドウの位置(&W)" + STR_DLGFNCLST_MENU_LEFTDOC "左ドッキング(&L)" + STR_DLGFNCLST_MENU_RIGHTDOC "右ドッキング(&R)" + STR_DLGFNCLST_MENU_TOPDOC "上ドッキング(&T)" + STR_DLGFNCLST_MENU_BOTDOC "下ドッキング(&B)" + STR_DLGFNCLST_MENU_FLOATING "フローティング(&F)" + STR_DLGFNCLST_MENU_NODOCK "ドッキング禁止(&I)" + STR_DLGFNCLST_MENU_SYNC "ドッキング配置を同期(&S)" + STR_DLGFNCLST_MENU_INHERIT "ドッキング配置を共通継承(&C)" +END + +STRINGTABLE +BEGIN + STR_DLGFNCLST_MENU_TYPE "ドッキング配置をタイプ別継承(&Y)" + STR_DLGFNCLST_MENU_UNIFY "継承情報を統一(&U)" + STR_DLGFNCLST_MENU_CLOSE "閉じる(&X)" + STR_DLGFNCLST_UNIFY "現在の画面のドッキング配置情報をすべての共通設定・タイプ別設定にコピーして統一します。\n(現在開いている他画面の状態も統一します。)\n" + STR_BREGONIG_LOAD "bregonig.dll のロードに失敗しました。\r\n正規表現を利用するには Unicode 版の bregonig.dll が必要です。\r\n入手方法はヘルプを参照してください。" + STR_BREGONIG_INIT "bregonig.dll の利用に失敗しました。\r\n正規表現を利用するには Unicode 版の bregonig.dll が必要です。\r\n入手方法はヘルプを参照してください。" + STR_BREGONIG_ERROR "bregonig.dll のロードで予期せぬエラーが発生しました。" + STR_BREGONIG_TITLE "正規表現エラー" + STR_ERR_CWSH09 "マクロの実行を中断しました。" + STR_ERR_DLGMACRO03_1 "入力改行コードが指定されていません." + STR_ERR_DLGMACRO16 "数値を指定してください." + STR_DLLPLG_TITLE "DLLプラグイン" + STR_DLLPLG_INIT_ERR1 "DLLの読み込みに失敗しました\n%s\n%ls" + STR_DLLPLG_INIT_ERR2 "DLLの読み込みに失敗しました" + STR_PLGMGR_FOLDER "プラグインフォルダを作成出来ません" + STR_PLGMGR_CANCEL "キャンセルされました" +END + +STRINGTABLE +BEGIN + STR_DLGGREP4 "検索対象フォルダを指定してください。" + STR_DLGGREP5 "検索対象フォルダが正しくありません。" + STR_DLGGREP6 "検索対象フォルダが長すぎます。" + STR_DLGJUMP1 "正しく行番号を入力してください。" + STR_DLGJUMP_PSLQL "%d 行 %s パッケージ仕様部" + STR_DLGOPNFL1 "変換なし" + STR_DLGOPNFL2 " は既に存在します。\r\n上書きしますか?" + STR_DLGOPNFL3 "名前を付けて保存" + STR_DLGOPNFL_EXTNAME1 "ユーザー指定" + STR_DLGOPNFL_EXTNAME2 "テキストファイル" + STR_DLGOPNFL_EXTNAME3 "すべてのファイル" + STR_DLGOPNFL_ERR1 "ダイアログが開けません。\n\nエラー:%s" + STR_DLGPRNST1 "設定名の変更" +END + +STRINGTABLE +BEGIN + STR_IMPEXP_DIC_LENGTH "辞書の説明は%d文字以内にしてください。\n" + STR_IMPEXP_DIC_RECORD "一部のデータが読み込めませんでした\n不正な行数: %d" + STR_IMPEXP_KEY_FORMAT "キー設定ファイルの形式が違います。\n\n" + STR_IMPEXP_CUSTMENU_FORMAT "カスタムメニュー設定ファイルの形式が違います。\n\n" + STR_IMPEXP_KEYWORD "キーワードの数が上限に達したため、いくつかのキーワードを追加できませんでした。" + STR_IMPEXP_MEINMENU "メインメニュー設定ファイルの形式が違います。\n\n" + STR_STRINGESC_CPP "C/C++言語風 \\""" + STR_STRINGESC_PLSQL "PL/SQL風 """"" + STR_STRINGESC_HTML "HTML/XML風 =""""" + STR_STRINGESC_CSHARP "C#風 @""""" + STR_STRINGESC_PYTHON "Python風 """"""" + STR_KEY_BIND_WHEEL_UP "ホイールアップ" + STR_KEY_BIND_WHEEL_DOWN "ホイールダウン" + STR_KEY_BIND_WHEEL_LEFT "ホイール左" + STR_KEY_BIND_WHEEL_RIGHT "ホイール右" + STR_DLGPLUGINOPT_LOAD "プラグインがロードされていません。" +END + +STRINGTABLE +BEGIN + STR_DLGPLUGINOPT_TITLE "%ls プラグインの設定" + STR_DLGPLUGINOPT_INIHEAD " プラグイン設定ファイル" + STR_DLGPLUGINOPT_OPTION "指定できるオプションがありません" + STR_DLGPLUGINOPT_LIST1 "項目" + STR_DLGPLUGINOPT_LIST2 "値" + STR_DLGPLUGINOPT_SELECT "%sの選択" + STR_DOCOUTLINE_REGEX "正規表現ルール\n%ls\nでエラーが発生しました。\n%s" + STR_CHANGE_CHARSET "%s\nはテキストの変更は有りませんが、\n文字コードセットが変更されています。\n閉じる前に保存しますか?" + STR_TITLE_GREP "【Grep】%ls%s" + STR_MENU_GREP "%s 【Grep】""%s%s""" + STR_TAB_CAPTION_OUTPUT "【Grep】" + STR_TAB_CAPTION_GREP "【アウトプット】" + STR_CAPTION_ACTIVE_OUTPUT "アウトプット" + STR_CAPTION_ACTIVE_UPDATE "(更新)" + STR_CAPTION_ACTIVE_VIEW "(ビューモード)" + STR_CAPTION_ACTIVE_OVERWRITE "(上書き禁止)" +END + +STRINGTABLE +BEGIN + STR_DLGPRNST2 "設定の名称を入力してください。" + STR_DLGFLPROP_FILENAME "ファイル名 " + STR_DLGFLPROP_FILETYPE "設定のタイプ " + STR_DLGFLPROP_ENCODING "文字コード " + STR_DLGFLPROP_WITH_BOM " BOM 付" + STR_DLGFLPROP_LINE_COUNT "行数 %d行\r\n" + STR_DLGFLPROP_LAYOUT_LINE "レイアウト行数 %d行\r\n" + STR_DLGFLPROP_VIEW_MODE "ビューモードで開いています。\r\n" + STR_DLGFLPROP_MODIFIED "変更されています。\r\n" + STR_DLGFLPROP_NOT_MODIFIED "変更されていません。\r\n" + STR_DLGFLPROP_CMD_COUNT "\r\nコマンド実行回数 %d回\r\n" + STR_DLGFLPROP_FILE_INFO "--ファイル情報-----------------\r\n" + STR_DLGFLPROP_W_LOCK "あなたはこのファイルを、他プロセスからの上書き禁止モードでロックしています。\r\n" + STR_DLGFLPROP_RW_LOCK "あなたはこのファイルを、他プロセスからの読み書き禁止モードでロックしています。\r\n" + STR_DLGFLPROP_LOCK "あなたはこのファイルをロックしています。\r\n" + STR_DLGFLPROP_NOT_LOCK "あなたはこのファイルをロックしていません。\r\n" +END + +STRINGTABLE +BEGIN + STR_DLGFLPROP_ATTRIBUTES "ファイル属性 " + STR_DLGFLPROP_AT_ARCHIVE "/アーカイブ" + STR_DLGFLPROP_AT_COMPRESS "/圧縮" + STR_DLGFLPROP_AT_FOLDER "/フォルダ" + STR_DLGFLPROP_AT_HIDDEN "/隠し" + STR_DLGFLPROP_AT_NORMAL "/ノーマル" + STR_DLGFLPROP_AT_OFFLINE "/オフライン" + STR_DLGFLPROP_AT_READONLY "/読み取り専用" + STR_DLGFLPROP_AT_SYSTEM "/システム" + STR_DLGFLPROP_AT_TEMP "/テンポラリ" + STR_DLGFLPROP_CREATE_DT "作成日時 " + STR_DLGFLPROP_YMDHMS "%d年%d月%d日 %02d:%02d:%02d" + STR_DLGFLPROP_UPDATE_DT "更新日時 " + STR_DLGFLPROP_ACCESS_DT "アクセス日時 " + STR_DLGFLPROP_DOS_NAME "MS-DOSファイル名 %s\r\n" + STR_DLGFLPROP_FILE_SIZE "ファイルサイズ %d バイト\r\n" +END + +STRINGTABLE +BEGIN + STR_DLGREPLC_CLIPBOARD "クリップボードに有効なデータがありません!" + STR_DLGREPLC_STR "文字列を指定してください。" + STR_DLGREPLC_REPLACE "%d箇所を置換しました。" + STR_DLGREPLC_REPSTR "置換条件を指定してください。" + STR_DLGSMCLR_BTN1 "文字色統一" + STR_DLGSMCLR_BTN2 "背景色統一" + STR_DLGTAGJMP1 "(通知)" + STR_DLGTAGJMP2 "(候補は見つかりませんでした)" + STR_DLGTAGJMP_LIST1 "キーワード" + STR_DLGTAGJMP_LIST2 "階層" + STR_DLGTAGJMP_LIST3 "行番号" + STR_DLGTAGJMP_LIST4 "種類" + STR_DLGTAGJMP_LIST5 "ファイル名" + STR_DLGTAGJMP_LIST6 "備考" + STR_DLGTAGJMP3 "キーワード 検索中..." + STR_DLGTAGMAK_SELECTDIR "タグ作成フォルダの選択" +END + +STRINGTABLE +BEGIN + STR_DLGWINSZ_NORMAL "普通" + STR_DLGWINSZ_MAXIMIZE "最大化" + STR_DLGWINSZ_MINIMIZE "(最小化)" + STR_ERR_DLGDOCLM1 "%ls\nというファイルを開けません。\nファイルが存在しません。" + STR_ERR_DLGDOCLM2 "'%ls'\nというファイルを開けません。\n読み込みアクセス権がありません。" + STR_ERR_DLGDOCLM3 "'%ls'\nというファイルを開けません。\n他のアプリケーションで使用されている可能性があります。" + STR_ERR_DLGDOCLM4 "'%ls'というファイルの読み込み中にエラーが発生しました。\nファイルの読み込みを中止します。" + STR_ERR_DLGDOCLM5 "'%ls'\nファイルを保存できません。\nパスが存在しないか、他のアプリケーションで使用されている可能性があります。" + STR_ERR_DLGDOCLM6 "CDocLineMgr::GetAllData()\nメモリ確保に失敗しました。\n%dバイト" + STR_ERR_DLGDOCLMN1 "sakura: 作者に教えて欲しいエラー" + STR_ERR_DLGDRPTGT1 "::RegisterDragDrop()\n失敗" + STR_TRAY_CREATE "CControlTray::Create()\nウィンドウクラスを登録できませんでした。" + STR_TRAY_TYPE_NAME "設定%d" + STR_TRAY_EXTHELP1 "外部ヘルプ1が設定されていません。\n今すぐ設定しますか?" + STR_TRAY_RESPONSEFILE "レスポンスファイルの作成に失敗しました。" + STR_TRAY_CREATEPROC1 "'%s'\nプロセスの起動に失敗しました。\n%s" +END + +STRINGTABLE +BEGIN + STR_ESI_DEFAULT_CHARCODE "デフォルト文字コード\r\n" + STR_ESI_SAMPLE_LEN "サンプルデータ長\r\n" + STR_ESI_SAMPLE_LEN_FORMAT "\t%d バイト\r\n" + STR_ESI_BYTES_AND_POINTS "固有バイト数とポイント数\r\n" + STR_ESI_UTF16LE_B_AND_P "\t\tUTF16LE 固有バイト数 %d,\tポイント数 %d\r\n" + STR_ESI_UTF16BE_B_AND_P "\t\tUTF16BE 固有バイト数 %d,\tポイント数 %d\r\n" + STR_ESI_BOM "\t\tBOM の推測結果 " + STR_ESI_BOM_UNKNOWN "不明\r\n" + STR_ESI_MBC_OTHER_UNICODE "\tMBC と 上記以外の UNICODE ファミリ\r\n" + STR_ESI_OTHER_B_AND_P "\t\t%d.%s\t固有バイト数 %d\tポイント数 %d\r\n" + STR_ESI_EUC_ZENKAKU "\t\t・EUC全角カナかな/EUC全角\t%6.3f\r\n" + STR_ESI_RESULT "判定結果\r\n" + STR_FILESAVE_CONVERT_ERROR "'%s'\nファイルを保存できません。\n変換エラーが発生しました。" + STR_DLGPROFILE_ERR_WRITE "プロフィール設定の書き込みに失敗しました。" + STR_DLGPROFILE_NEW_PROF_TITLE "新規プロファイル名" + STR_DLGPROFILE_NEW_PROF_MSG "プロファイル名を入力してください" +END + +STRINGTABLE +BEGIN + STR_DLGPROFILE_ERR_INVALID_CHAR "利用できない文字が含まれています。" + STR_DLGPROFILE_ERR_ALREADY "すでに同じ名前のプロファイルがあります。" + STR_DLGPROFILE_ERR_FILE "同名のファイルがあるため作成できません。" + STR_DLGPROFILE_RENAME_TITLE "プロファイル名の変更" + STR_DLGPROFILE_RENAME_MSG "プロファイル名を入力してください" + STR_DLGPROFILE_ERR_RENAME "名前の変更に失敗しました。\nプロファイルは利用中の可能性があります。" + STR_PROPCOMTAB_TAB_POS_TOP "上" + STR_PROPCOMTAB_TAB_POS_BOTTOM "下" + STR_PROPCOMTAB_TAB_POS_LEFT "右" + STR_PROPCOMTAB_TAB_POS_RIGHT "左" + STR_TAGJUMP_0 "次のファイルを検索しない" + STR_TAGJUMP_1 "ヒットしたら次のファイルを検索しない" + STR_TAGJUMP_2 "完全一致でヒットしたら次のファイルを検索しない" + STR_TAGJUMP_3 "次のファイルを検索する" + STR_GREP_REPLACE_TO "置換後 " + STR_GREP_PASTE_CLIPBOAD "(クリップボードから貼り付け)" +END + +STRINGTABLE +BEGIN + STR_TRAY_CREATEPROC2 "'%s'\nプロセスの起動に失敗しました。" + STR_TRAY_EXITALL "現在開いている編集用のウィンドウをすべて閉じて終了しますか?" + STR_TRAY_ACCELTABLE "CControlTray::CreateAccelTbl()\nアクセラレータ テーブルが作成できません。\nシステムリソースが不足しています。" + STR_LOADAGENT_ERR_OPEN "'%s'\nというファイルを開けません。\n読み込みアクセス権がありません。" + STR_LOADAGENT_BIG_WARNING "'%s'\nファイルサイズが%dMB以上あります。開きますか?" + STR_SAVEAGENT_VIEW_FILE "ビューモードでは同一ファイルへの保存はできません。" + STR_SAVEAGENT_OTHER "'%s'\nファイルを保存できません。\n他のウィンドウで使用中です。" + STR_ERR_DLGEDITDOC5 "文字コード情報" + STR_ERR_DLGEDITDOC6 "%s\n\nこのファイルを文字コード %s で開こうとしていますが、前回は別の文字コード %s で開かれています。\n前回と同じ文字コードを使いますか?\n\n・[はい(Y)] =%s\n・[いいえ(N)]=%s\n" + STR_NOT_EXSIST_SAVE "%s\nというファイルは存在しません。\n\nファイルを保存したときに、ディスク上にこのファイルが作成されます。" + STR_BACKUP_ERR_TITLE "ファイル保存" + STR_BACKUP_ERR_MSG "バックアップの作成に失敗しました.元ファイルへの上書きを継続して行いますか." + STR_BACKUP_ERR_PATH_CRETE + "バックアップ先のパス作成中にエラーになりました。\nパスが長すぎるか不正な書式です。\nバックアップを作成せずに上書き保存してよろしいですか?" + STR_BACKUP_CONFORM_TITLE1 "バックアップ作成の確認" + STR_BACKUP_CONFORM_MSG1 "変更される前に、バックアップファイルを作成します。\nよろしいですか? [いいえ(N)] を選ぶと作成せずに上書き(または名前を付けて)保存になります。\n\n%s\n ↓\n%s\n\n作成したバックアップファイルをごみ箱に放り込みます。\n" + STR_BACKUP_CONFORM_TITLE2 "バックアップ作成の確認" +END + +STRINGTABLE +BEGIN + STR_BACKUP_CONFORM_MSG2 "変更される前に、バックアップファイルを作成します。\nよろしいですか? [いいえ(N)] を選ぶと作成せずに上書き(または名前を付けて)保存になります。\n\n%s\n ↓\n%s\n\n" + STR_BACKUP_ERR_DELETE "削除失敗" + STR_BACKUP_ERR_MOVE "移動失敗" + STR_ERR_DLGEDITDOC21 "%s\nは現在他のプロセスによって書込みが禁止されています。" + STR_EXCLU_DENY_READWRITE "読み書きを禁止する" + STR_EXCLU_DENY_WRITE "上書きを禁止する" + STR_EXCLU_UNDEFINED "未定義のモード(問題があります)" + STR_FILE_LOCK_ERR "%s\nを%sでロックできませんでした。\n現在このファイルに対する排他制御は無効となります。" + STR_ERR_DLGEDITDOC30 "%s\nは変更されています。 閉じる前に保存しますか?\n\nビューモードで開いているので、名前を付けて保存すればいいと思います。\n" + STR_ERR_DLGEDITDOC31 "%s\nは変更されています。 閉じる前に保存しますか?" + STR_AUTORELOAD_NOFITY "★ファイル更新 %02d:%02d:%02d" + STR_OUTLINE_CPP_NONAME "無名" + STR_OUTLINE_CPP_DEFPOS "::定義位置" + STR_OUTLINE_PYTHON_UNDEFINED "名称未定" + STR_OUTLINE_PYTHON_CLASS " クラス" + STR_OUTLINE_JAVA_DEFPOS "定義位置" +END + +STRINGTABLE +BEGIN + STR_WRAP_WIDTH_FULL "折り返し桁数: %d 桁(最大)" + STR_WRAP_WIDTH_WINDOW "折り返し桁数: %d 桁(右端)" + STR_WRAP_WIDTH_FIXED "折り返し桁数: %d 桁(指定)" + STR_EXCLU_NO_EXCLUSIVE "しない" + STR_TAB_SYMBOL_CHARA "文字指定" + STR_TAB_SYMBOL_SHORT_ARROW "短い矢印" + STR_TAB_SYMBOL_LONG_ARROW "長い矢印" + STR_CODECHECKER_EOL_UNIFY "改行コードが混在しています。\r\n現在の入力改行コード %s に統一しますか?" + STR_CODECHECKER_CONFORM_LOSESOME + "文字エンコード %s で保存しようとしていますが、\r\n文字コード変換により一部の文字情報が失われます。\r\n保存処理を続行しますか?\n最初の場所 %d行 %s 文字[%ls]%s\nキャンセル=該当位置に移動" + STR_CODECHECKER_LOSESOME_SAVE "一部の文字情報が、セーブ時の変換により失われました" + STR_CODECHECKER_LOSESOME_ROAD "一部の文字情報が、ロード時の変換により失われました" + STR_SUPPORT_NOT_COMPLITE "補完対象がありません" + STR_CONVERT_ERR "変換でエラーが発生しました" +END + +STRINGTABLE +BEGIN + STR_VIEW_TIMER "CEditView::Create()\nタイマーが起動できません。\nシステムリソースが不足しているのかもしれません。" + STR_ERR_DLGEDITVW2 "大" + STR_ERR_DLGEDITVW5 "\n--------------------\n■" + STR_ERR_DLGEDITVW6 "■" + STR_MENU_KEYWORDINFO "キーワードの説明をクリップボードにコピー" + STR_MENU_OPENKEYWORDDIC "キーワード辞書を開く" + STR_STATUS_ROW_COL "%5d 行 %4d 桁" + STR_INS_MODE_INS "挿入" + STR_INS_MODE_OVR "上書" + STR_GREP_SEARCH_CONDITION "\r\n□検索条件 " + STR_GREP_SEARCH_FILE "「ファイル検索」\r\n" + STR_GREP_SEARCH_TARGET "検索対象 " + STR_GREP_SEARCH_FOLDER "フォルダ " + STR_GREP_SUBFOLDER_YES " (サブフォルダも検索)\r\n" + STR_GREP_SUBFOLDER_NO " (サブフォルダを検索しない)\r\n" + STR_GREP_COMPLETE_WORD " (単語単位で探す)\r\n" +END + +STRINGTABLE +BEGIN + STR_GREP_CASE_SENSITIVE " (英大文字小文字を区別する)\r\n" + STR_GREP_IGNORE_CASE " (英大文字小文字を区別しない)\r\n" + STR_GREP_REGEX_DLL " (正規表現:" + STR_GREP_CHARSET_AUTODETECT " (文字コードセットの自動判別)\r\n" + STR_GREP_CHARSET " (文字コードセット:" + STR_GREP_SHOW_MATCH_LINE " (一致した行を出力)\r\n" + STR_GREP_SHOW_MATCH_AREA " (一致した箇所のみ出力)\r\n" + STR_GREP_SUSPENDED "中断しました。\r\n" + STR_GREP_MATCH_COUNT "%d 個が検索されました。\r\n" + STR_GREP_RUNNINNG "Grepの処理中です。\n" + STR_GREP_TIMER "処理時間: %dミリ秒\r\n" + STR_GREP_SHOW_FIRST_MATCH " (ファイル毎最初のみ検索)\r\n" + STR_GREP_ERR_ENUMKEYS0 "(不明)" + STR_GREP_ERR_ENUMKEYS1 "ファイル指定のフォルダ部分にはワイルドカードは使えません" + STR_GREP_ERR_ENUMKEYS2 "ファイル指定にはフルパスは使えません" + STR_GREP_ERR_FILEOPEN "file open error [%s]\r\n" +END + +STRINGTABLE +BEGIN + STR_GREP_SHOW_FIRST_LINE " (一致した行の最初の箇所のみ出力)\r\n" + STR_GREP_REPLACE_COUNT "%d 個を置換しました。\r\n" + STR_GREP_REP_ERR_DELETE "ファイルの削除に失敗しました。" + STR_GREP_REP_ERR_REPLACE "ファイルの置き換えに失敗しました。" + STR_GREP_ERR_FILEWRITE "書き込めませんでした。 [%s]\r\n" + STR_ERR_DLGMACRO17 "GREP置換後が指定されていません." + STR_FILETREE_FROM_COMMON "設定: 共通設定" + STR_FILETREE_FROM_TYPE "設定: タイプ別設定" + STR_FILETREE_FROM_FILE "設定: %s" + STR_FILETREE_CURDIR "<カレントフォルダ>" + STR_FILETREE_MAXCOUNT "最大数(%d)を超えたため切り捨てました" + STR_FILETREE_MENU_ROOT "INIルート(&I)" + STR_FILETREE_MENU_MYDOC "マイ ドキュメント(&Y)" + STR_FILETREE_MENU_MYMUSIC "マイ ミュージック(&M)" + STR_FILETREE_MENU_MYVIDEO "マイ ビデオ(&V)" + STR_FILETREE_MENU_DESK "デスクトップ(&D)" +END + +STRINGTABLE +BEGIN + STR_GREP_ERR_FILEREAD "ファイルの読み込み中にエラーが発生しました。[%s]\r\n" + STR_EDITVIEW_EXECCMD_ERR "コマンド実行は失敗しました。" + STR_EDITVIEW_EXECCMD_STOP "\r\n中断しました。\r\n" + STR_EDITVIEW_EXECCMD_RET "\r\n終了コード: %d\r\n" + STR_ERR_DLGEDITVWHOKAN1 "補完候補一覧ファイルが設定されていません。\n今すぐ設定しますか?" + STR_EDITVWISRCH_REGEX "正規表現ライブラリが使用できません。" + STR_EDITVWISRCH_MIGEGO1 "MIGEMO.DLLが使用できません。" + STR_EDITVWISRCH_MIGEGO2 "MIGEMOは使用できません。" + STR_EDITVWISRCH_NOMATCH " (見つかりません)" + STR_ERR_MACRO1 "マクロ %d (%s) の実行に失敗しました。" + STR_ERR_SRPREV1 "▲末尾から再検索しました" + STR_ERR_SRPREV2 "△見つかりませんでした" + STR_ERR_SRPREV3 "後方(↑) に文字列 '%ls' が1つも見つかりません。" + STR_ERR_SRNEXT1 "▼先頭から再検索しました" + STR_ERR_SRNEXT2 "▽見つかりませんでした" + STR_ERR_SRNEXT3 "前方(↓) に文字列 '%ls' が1つも見つかりません。" +END + +STRINGTABLE +BEGIN + STR_ERR_UNINDENT1 "★逆インデントは選択時のみ" + STR_ERR_TAGJMP1 "タグジャンプできません" + STR_ERR_TAGJMPBK1 "タグジャンプバックできません" + STR_ERR_CEDITVIEW_CMD01 "外部ヘルプ1が設定されていません。\n今すぐ設定しますか?" + STR_ERR_CEDITVIEW_CMD02 "外部HTMLヘルプが設定されていません。\n今すぐ設定しますか?" + STR_ERR_CEDITVIEW_CMD03 "タグ作成コマンド実行は失敗しました。\n\nCTAGS.EXE が見つかりません。" + STR_ERR_CEDITVIEW_CMD04 "タグ作成コマンド実行は失敗しました。\n\n%s" + STR_ERR_CEDITVIEW_CMD05 "タグファイルを作成中です。" + STR_ERR_CEDITVIEW_CMD06 "タグ作成コマンド実行は失敗しました。\n\n%hs" + STR_ERR_CEDITVIEW_CMD07 "タグファイルの作成が終了しました。" + STR_ERR_CEDITVIEW_CMD08 "C/C++ヘッダファイルのオープンに失敗しました。" + STR_ERR_CEDITVIEW_CMD09 "C/C++ソースファイルのオープンに失敗しました。" + STR_ERR_CEDITVIEW_CMD10 "クリップボードに有効なデータがありません!" + STR_ERR_CEDITVIEW_CMD11 "最後まで置換しました。" + STR_ERR_CEDITVIEW_CMD14 "ファイルの書き込みに失敗しました。\n\n%s" + STR_ERR_CEDITVIEW_CMD16 "ファイルの書き込みに失敗しました。\n\n%s" +END + +STRINGTABLE +BEGIN + STR_ERR_CEDITVIEW_CMD18 "%s\nは変更されています。 Oracle SQL*Plusで実行する前に保存しますか?" + STR_ERR_CEDITVIEW_CMD20 "Oracle SQL*Plusからの反応がありません。\nしばらく待ってから再び実行してください。" + STR_ERR_CEDITVIEW_CMD21 "SQLをファイルに保存しないとOracle SQL*Plusで実行できません。\n" + STR_ERR_CEDITVIEW_CMD22 "異なる箇所は見つかりませんでした。" + STR_ERR_CEDITVIEW_CMD23 "異なる箇所が見つかりました。" + STR_ERR_CEDITVIEW_CMD24 "マクロファイルを作成できませんでした。\nファイル名の取得エラー nRet=%d" + STR_ERR_CEDITVIEW_CMD25 "マクロファイルを作成できませんでした。\n\n%s" + STR_ERR_CEDITVIEW_CMD26 "保存可能なマクロがありません.キーボードマクロ以外は保存できません." + STR_ERR_CEDITVIEW_CMD27 "マクロファイルを作成できませんでした。\n\n%s" + STR_ERR_CEDITVIEW_CMD28 "ファイルを開けませんでした。\n\n%s" + STR_ERR_CEDITVIEW_CMD29 "%s\n\nこのファイルは変更されています。\n再ロードを行うと変更が失われますが、よろしいですか?" + STR_BOOKMARK_NEXT_NOT_FOUND "前方(↓) にブックマークが見つかりません。" + STR_BOOKMARK_PREV_NOT_FOUND "後方(↑) にブックマークが見つかりません。" + STR_ERR_DLGEDITVWCMDNW7 "%d行をマージしました。" + STR_ERR_DLGEDITVWCMDNW8 "マージ可能な行がみつかりませんでした。" + STR_SAVEAGENT_OTHER_APP "'%s'\nファイルを保存できません。\nパスが存在しないか、他のアプリケーションで使用されている可能性があります。" +END + +STRINGTABLE +BEGIN + STR_ERR_DLGEDITVWCMDNW11 "ファイルの書き込み中にエラーが発生しました。" + STR_ERR_DLGEDITVWCMDNW12 "ファイルの読み込み中にエラーが発生しました。" + STR_ERR_DLGEDITVWDIFF1 "差分コマンド実行は失敗しました。\n\n比較するファイルが見つかりません。" + STR_ERR_DLGEDITVWDIFF2 "差分コマンド実行は失敗しました。\n\nDIFF.EXE が見つかりません。" + STR_ERR_DLGEDITVWDIFF3 "差分コマンド実行は失敗しました。\n\n%ls" + STR_ERR_DLGEDITVWDIFF4 "DIFF差分を行おうとしたファイルはバイナリファイルです。" + STR_ERR_DLGEDITVWDIFF5 "DIFF差分は見つかりませんでした。" + STR_DIFF_NEXT_NOT_FOUND "前方(↓) に差分が見つかりません。" + STR_DIFF_PREV_NOT_FOUND "後方(↑) に差分が見つかりません。" + STR_DIFF_FAILED "差分コマンド実行は失敗しました。" + STR_DIFF_FAILED_TEMP "差分コマンド実行は失敗しました。\n\n一時ファイルを作成できません。" + STR_DIFF_FAILED_LONG "差分コマンド実行は失敗しました。\n\n行が長すぎます。" + STR_VIEW_MOUSE_BUG "バグってる" + STR_VIEW_MOUSE_MENU_PATH "パス名貼り付け(&P)" + STR_VIEW_MOUSE_MENU_FILE "ファイル名貼り付け(&F)" + STR_VIEW_MOUSE_MENU_OPEN "ファイルを開く(&O)" +END + +STRINGTABLE +BEGIN + STR_VIEW_MOUSE_MENU_CANCEL "キャンセル" + STR_ERR_DLGEDITWND01 "CEditWnd::CreateAccelTbl()\nアクセラレータ テーブルが作成できません。\nシステムリソースが不足しています。" + STR_ERR_DLGEDITWND02 "エディタ間の対話に失敗しました。\n権限レベルの異なるエディタが既に起動している可能性があります。" + STR_ERR_DLGEDITWND03 "CEditWnd::Create()\nタイマーが起動できません。\nシステムリソースが不足しているのかもしれません。" + STR_ERR_DLGEDITWND04 "Rebar の作成に失敗しました。" + STR_ERR_DLGEDITWND05 "ツールバーの作成に失敗しました。" + STR_EDITWND_MENU_NEL "入力改行コード指定(&NEL)" + STR_EDITWND_MENU_LS "入力改行コード指定(L&S)" + STR_EDITWND_MENU_PS "入力改行コード指定(&PS)" + STR_ERR_DLGEDITWND13 "文字:\t\t%ls (%s)\n\nSJIS:\t\t%s\nJIS:\t\t%s\nEUC:\t\t%s\nLatin1:\t\t%s\nUTF-16:\t\t%s\nUTF-8:\t\t%s\nCESU-8:\t\t%s" + STR_ERR_DLGEDITWND14 "印刷プレビューを実行する前に、プリンタをインストールしてください。\n" + STR_MENU_OUTPUT "%s アウトプット" + STR_ERR_DLGEDITWND20 "99999 L 9999 C" + STR_ERR_DLGEDITWND21 "CFLF" + STR_ERR_DLGEDITWND22 "0000" +END + +STRINGTABLE +BEGIN + STR_ERR_DLGEDITWND23 "UTF-16 BOM付" + STR_ERR_DLGEDITWND24 "REC" + STR_ERR_DLGEDITWND25 "上書" + STR_ERR_DLGFUNCKEYWN1 "CFuncKeyWnd::Open()\nタイマーが起動できません。\nシステムリソースが不足しているのかもしれません。" + STR_ERR_DLGFUNCLKUP01 "外部マクロ" + STR_ERR_DLGFUNCLKUP02 "カスタムメニュー" + STR_ERR_DLGFUNCLKUP03 "マクロ %d (未登録)" + STR_ERR_DLGFUNCLKUP04 "ファイル操作系" + STR_ERR_DLGFUNCLKUP05 "編集系" + STR_ERR_DLGFUNCLKUP06 "カーソル移動系" + STR_ERR_DLGFUNCLKUP07 "選択系" + STR_ERR_DLGFUNCLKUP08 "矩形選択系" + STR_ERR_DLGFUNCLKUP09 "クリップボード系" + STR_ERR_DLGFUNCLKUP10 "挿入系" + STR_ERR_DLGFUNCLKUP11 "変換系" + STR_ERR_DLGFUNCLKUP12 "検索系" +END + +STRINGTABLE +BEGIN + STR_ERR_DLGFUNCLKUP13 "モード切り替え系" + STR_ERR_DLGFUNCLKUP14 "設定系" + STR_ERR_DLGFUNCLKUP15 "マクロ系" + STR_ERR_DLGFUNCLKUP16 "ウィンドウ系" + STR_ERR_DLGFUNCLKUP17 "支援" + STR_ERR_DLGFUNCLKUP18 "その他" + STR_ERR_DLGFUNCLKUP19 "プラグイン" + STR_ERR_DLGKEYBIND1 "キー\t機能名\t関数名\t機能番号\tキーマクロ記録可/不可" + STR_ERR_DLGKEYBIND2 "---名前が定義されていない-----" + STR_ERR_DLGKEYMACMGR1 "//キーボードマクロのファイル\r\n" + STR_ERR_DLGKEYMACMGR2 "Macro読み込みエラー" + STR_ERR_DLGKEYMACMGR3 "Line %d: Column %d: 引数が多すぎます\n" + STR_ERR_DLGKEYMACMGR4 "Line %d: Column %d\r\n関数%lsの%d番目の引数に文字列は置けません." + STR_ERR_DLGKEYMACMGR5 "Line %d:\r\n関数%lsの%d番目の引数の終わりに%lcがありません." + STR_ERR_DLGKEYMACMGR6 "Line %d: Column %d\r\n関数%lsの%d番目の引数に数値は置けません." + STR_ERR_DLGKEYMACMGR7 "Line %d: Column %d: Syntax Error\n" +END + +STRINGTABLE +BEGIN + STR_ERR_DLGKEYMACMGR8 "Line %d: %lsは存在しない関数です.\n" + STR_ERR_DLGMACRO01 "CMacro::GetFuncInfoByID()に、バグがあるのでエラーが出ましたぁぁぁぁぁぁあああ\r\n" + STR_ERR_DLGMACRO02 "Macro実行エラー" + STR_ERR_DLGMACRO03 "挿入すべき文字コードが指定されていません." + STR_ERR_DLGMACRO04 "引数(文字列)が指定されていません." + STR_ERR_DLGMACRO05 "ジャンプ先行番号が指定されていません." + STR_ERR_DLGMACRO06 "マーク行のパターンが指定されていません." + STR_ERR_DLGMACRO07 "引数(文字列)が指定されていません." + STR_ERR_DLGMACRO08 "ファイル名が指定されていません." + STR_ERR_DLGMACRO09 "置換元パターンが指定されていません." + STR_ERR_DLGMACRO10 "置換先パターンが指定されていません." + STR_ERR_DLGMACRO11 "GREPパターンが指定されていません." + STR_ERR_DLGMACRO12 "ファイル種別が指定されていません." + STR_ERR_DLGMACRO13 "検索先フォルダが指定されていません." + STR_ERR_DLGMACRO14 "読み込みファイル名が指定されていません." + STR_ERR_DLGMACRO15 "保存ファイル名が指定されていません." +END + +STRINGTABLE +BEGIN + STR_ERR_DLGMEM1 "CMemory::AllocBuffer(nNewDataLen==%d)\nメモリ確保に失敗しました。\n" + STR_ERR_DLGNRMPROC1 "CreateMutex()失敗。\n終了します。" + STR_ERR_DLGNRMPROC2 "エディタまたはシステムがビジー状態です。\nしばらく待って開きなおしてください。" + STR_ERR_DLGPPA1 "PPA実行中に新たにPPAマクロを呼び出すことはできません" + STR_ERR_DLGPPA2 "関数の実行エラー\n%hs" + STR_ERR_DLGPPA3 "不明な関数の実行エラー(バグです)\nFunc_ID=%d" + STR_ERR_DLGPPA4 "詳細不明のエラー" + STR_ERR_DLGPPA5 "未定義のエラー\nError_CD=%d\n%s" + STR_ERR_DLGPPA6 "エラー情報が不正" + STR_ERR_DLGPPA7 "PPA実行エラー" + STR_ERR_CPRINT01 "OpenPrinter()に失敗。\nプリンタデバイス名=[%s]" + STR_ERR_CPRINT02 "StartDoc()に失敗。\nプリンタデバイス名=[%s]" + STR_ERR_CPRINT03 "不明" + STR_ERR_DLGPRNPRVW1 "横" + STR_ERR_DLGPRNPRVW2 "縦" + STR_ERR_DLGPRNPRVW3 "現在のプリンタ %s では、\n指定された用紙 %s は使用できません。\n利用可能な用紙 %s に変更しました。" +END + +STRINGTABLE +BEGIN + STR_ERR_DLGPRNPRVW4 "表示するページ番号を指定してください。(1 - %d)" + STR_ERR_DLGPRNPRVW5 "プレビューページ指定" + STR_ERR_DLGPRNPRVW6 "%d/%d頁" + STR_ERR_DLGPRNPRVW7 "印刷するページがありません。" + STR_ERR_DLGPRNPRVW3_1 "印刷ページ設定エラー:印字可能領域がありません" + STR_ERR_DLGPROCESS1 "異なるバージョンのエディタを同時に起動することはできません。" + STR_ERR_DLGPROCFACT1 "このアプリケーションを実行するには、\nWindows95以上 または WindowsNT4.0以上のOSが必要です。\nアプリケーションを終了します。" + STR_ERR_DLGPROCFACT2 "OSのバージョンが取得できません。\nアプリケーションを終了します。" + STR_ERR_DLGPROCFACT3 "'%s'\nプロセスの起動に失敗しました。\n%s" + STR_ERR_DLGPROCFACT4 "'%ls'\nコントロールプロセスの起動に失敗しました。" + STR_ERR_DLGPROCFACT5 "エディタまたはシステムがビジー状態です。\nしばらく待って開きなおしてください。" + STR_PROPCOMBK_SEL_FOLDER "バックアップを作成するフォルダを選んでください" + STR_PROPCOMBK_DUSTBOX "(ゴミ箱)" + STR_PROPCOMCUSTMENU_SEP " ─────────────" + STR_PROPCOMCUSTMENU_AC1 "メニューアイテムのアクセスキー設定" + STR_PROPCOMCUSTMENU_AC2 "キーを入力してください。" +END + +STRINGTABLE +BEGIN + STR_DLGABOUT_APPNAME "サクラエディタ" + STR_DLGEXEC_SELECT_CURDIR "カレントディレクトリを選んでください" + STR_PROPEDIT_SELECT_DIR "ファイルダイアログの指定フォルダの選択" + STR_DLGTYPEASC_IMPORT "--そのままインポート--" + STR_PROPCOMMAINMENU_EDIT "編集してください" + STR_PROPCOMMAINMENU_SEP "――――――――――" + STR_PROPCOMMAINMENU_ACCKEY1 "メニューアイテムのアクセスキー設定" + STR_PROPCOMMAINMENU_ACCKEY2 "キーを入力してください。" + STR_PROPCOMMAINMENU_CLEAR "メニューの設定をクリアします。\nよろしいですか?" + STR_PROPCOMMAINMENU_INIT "メニューの設定を初期状態に戻します。\nよろしいですか?" + STR_PROPCOMMAINMENU_DEL "選択している項目を下位項目ごと削除します。\nよろしいですか?" + STR_PROPCOMMAINMENU_OK "問題ありませんでした。" + STR_PROPCOMMAINMENU_ERR1 "メニュー設定の取得に失敗しました" + STR_PROPCOMMAINMENU_ERR2 "『共通設定』が有りません。\n" + STR_PROPCOMMAINMENU_ERR3 "トップレベルの項目数が多すぎます。\n" + STR_PROPCOMMAINMENU_ERR4 "登録項目数が多すぎます。\n" +END + +STRINGTABLE +BEGIN + STR_PROPCOMFNM_LIST1 "置換前" + STR_PROPCOMFNM_LIST2 "置換後" + STR_PROPCOMFNM_ERR_REG "これ以上登録できません。" + STR_PROPCOMGREP_DLL "正規表現は使用できません" + STR_PROPCOMHELP_MIGEMODIR "検索するフォルダを選んでください" + STR_PROPCOMKEYBIND_UNASSIGN "未割付" + STR_PROPCOMKEYWORD_ERR_LEN "キーワードの長さは%dバイトまでです。" + STR_PROPCOMKEYWORD_SETMAX "セットは%d個までしか登録できません。\n" + STR_PROPCOMKEYWORD_SETNAME1 "キーワードのセット追加" + STR_PROPCOMKEYWORD_SETNAME2 "セット名を入力してください。" + STR_PROPCOMKEYWORD_SETDEL + "「%ls」のセットを削除します。\nよろしいですか?\n削除しようとするセットは、以下のファイルタイプに割り当てられています。\n削除したセットは無効になります。\n\n%s" + STR_PROPCOMKEYWORD_RENAME1 "セットの名称変更" + STR_PROPCOMKEYWORD_RENAME2 "セット名を入力してください。" + STR_PROPCOMKEYWORD_KEYMAX "登録できるキーワード数が上限に達しています。\n" + STR_PROPCOMKEYWORD_KEYADD1 "キーワード追加" + STR_PROPCOMKEYWORD_KEYADD2 "キーワードを入力してください。" +END + +STRINGTABLE +BEGIN + STR_ERR_DLGPROPCOMMON24 "CPropCommon::DoPropertySheet()内でエラーが出ました。\npsh.nStartPage=[%d]\n::PropertySheet()失敗\n\n%s\n" + STR_PROPCOMGEN_FILE1 "最近使ったファイルの履歴を削除します。\nよろしいですか?\n" + STR_PROPCOMGEN_FILE2 "最近使ったファイルの履歴を削除しました。\n" + STR_PROPCOMGEN_DIR1 "最近使ったフォルダの履歴を削除します。\nよろしいですか?\n" + STR_PROPCOMGEN_DIR2 "最近使ったフォルダの履歴を削除しました。\n" + STR_PROPCOMTOOL_ERR01 "Toolbar Dialog: 要素の挿入に失敗しました。(%d:%d)" + STR_PROPCOMTOOL_ERR02 "Toolbar Dialog: INS: 値の設定に失敗しました。:%d" + STR_PROPCOMTOOL_ERR03 "Toolbar Dialog: 要素の追加に失敗しました。(%d:%d)" + STR_PROPCOMTOOL_ERR04 "Toolbar Dialog: ADD: 値の設定に失敗しました。:%d" + STR_PROPCOMTOOL_ERR05 "Toolbar Dialog: 要素の追加に失敗しました。:%d" + STR_PROPCOMTOOL_ITEM1 "───────────" + STR_PROPCOMTOOL_ITEM2 "――ツールバー折返――" + STR_PROPCOMTOOL_ITEM3 "────不 明────" + STR_OUTLINE_CPP "C/C++" + STR_OUTLINE_PLSQL "PL/SQL" + STR_OUTLINE_JAVA "Java" +END + +STRINGTABLE +BEGIN + STR_PROPCOMKEYWORD_KEYEDIT1 "キーワード編集" + STR_PROPCOMKEYWORD_KEYEDIT2 "キーワードを編集してください。" + STR_PROPCOMKEYWORD_DEL "現在の設定では強調キーワードとして表示できないキーワードを削除しますか?" + STR_PROPCOMKEYWORD_INFO "(最大 %d 文字, 登録数 %d, 空き %d 個)" + STR_PROPCOMMACR_LIST1 "番号" + STR_PROPCOMMACR_LIST2 "マクロ名" + STR_PROPCOMMACR_LIST3 "ファイル名" + STR_PROPCOMMACR_LIST4 "実行時に読み込み" + STR_PROPCOMMACR_LIST5 "自動実行" + STR_PROPCOMMACR_SEL_DIR "Macroディレクトリの選択" + STR_PROPCOMMON_GENERAL "全般" + STR_PROPCOMMON_WINDOW "ウィンドウ" + STR_PROPCOMMON_TABS "タブバー" + STR_PROPCOMMON_EDITING "編集" + STR_PROPCOMMON_FILE "ファイル" + STR_PROPCOMMON_BACKUP "バックアップ" +END + +STRINGTABLE +BEGIN + STR_PROPCOMMAINMENU_ERR5 "重複したアクセスキーがあります。\n" + STR_PROPCOMMAINMENU_ERR6 "未設定のアクセスキーがあります。\n" + STR_PROPCOMPLG_ERR1 "プラグインはこのウィンドウで読み込まれていないか、フォルダが異なるため\n設定を変更できません" + STR_PROPCOMPLG_ERR2 "ReadMeファイルが開けません" + STR_PROPCOMPLG_ERR3 "ReadMeファイルが見つかりません " + STR_PROPCOMPLG_STATE1 "追加" + STR_PROPCOMPLG_STATE2 "更新" + STR_PROPCOMPLG_STATE3 "停止" + STR_PROPCOMPLG_STATE4 "稼働" + STR_PROPCOMPLG_STATE5 "削除" + STR_PROPCOMPLG_STATE6 "未定義" + STR_PROPCOMPLG_LOAD "読込" + STR_PROPCOMPLG_LIST1 "番号" + STR_PROPCOMPLG_LIST2 "プラグイン名" + STR_PROPCOMPLG_LIST3 "状態" + STR_PROPCOMPLG_LIST4 "読込" +END + +STRINGTABLE +BEGIN + STR_PROPCOMMON_FORMAT "書式" + STR_PROPCOMMON_SEARCH "検索" + STR_PROPCOMMON_KEYS "キー割り当て" + STR_PROPCOMMON_CUSTMENU "カスタムメニュー" + STR_PROPCOMMON_TOOLBAR "ツールバー" + STR_PROPCOMMON_KEYWORD "強調キーワード" + STR_PROPCOMMON_SUPPORT "支援" + STR_PROPCOMMON_MACRO "マクロ" + STR_PROPCOMMON_FILENAME "ファイル名表示" + STR_SCROLL_WITH_NO_KEY "組み合わせなし" + STR_SCROLL_WITH_MID_BTN "マウス中ボタン" + STR_SCROLL_WITH_SIDE_1_BTN "マウスサイドボタン1" + STR_SCROLL_WITH_SIDE_2_BTN "マウスサイドボタン2" + STR_SCROLL_WITH_CTRL_KEY "CONTROLキー" + STR_SCROLL_WITH_SHIFT_KEY "SHIFTキー" + STR_PROPCOMMON "共通設定" +END + +STRINGTABLE +BEGIN + STR_PROPCOMPLG_LIST5 "フォルダ" + STR_PROPCOMPLG_DELETE "%ls を削除しますか" + STR_DLGTYPELIST_ERR1 "関連付けに失敗しました\n" + STR_DLGTYPELIST_ERR2 "関連付け解除に失敗しました\n" + STR_DLGTYPELIST_INIT1 "%s を初期化します。 よろしいですか?" + STR_DLGTYPELIST_SETNAME "設定%d" + STR_DLGTYPELIST_INIT2 "%s を初期化しました。" + STR_DLGTYPELIST_DEL "%s を削除します。 よろしいですか?" + STR_DLGTYPELIST_ACC "Windowsの関連付け設定を変更しようとしています。\nこの操作は同じ設定を利用する他のソフトにも影響を与える可能性があります。\n実施しますか?" + STR_IMAGE_POS1 "左上" + STR_IMAGE_POS2 "右上" + STR_IMAGE_POS3 "左下" + STR_IMAGE_POS4 "右下" + STR_IMAGE_POS5 "中央" + STR_IMAGE_POS6 "中央上" + STR_IMAGE_POS7 "中央下" +END + +STRINGTABLE +BEGIN + STR_IMAGE_POS8 "中央左" + STR_IMAGE_POS9 "中央右" + STR_PROPCOMTAB_DISP_NO "なし" + STR_PROPCOMTAB_DISP_ALLWAYS "常に表示" + STR_PROPCOMTAB_DISP_AUTO "自動表示" + STR_IMPEXP_ERR_FILEOPEN "ファイルを開けませんでした。\n\n" + STR_IMPEXP_ERR_EXPORT "エクスポート出来ませんでした。\n\n" + STR_IMPEXP_OK_EXPORT "ファイルをエクスポートしました。\n\n" + STR_IMPEXP_OK_IMPORT "ファイルをインポートしました。\n\n" + STR_IMPEXP_ERR_COLOR_OLD "色設定ファイルの形式が違います。古い形式はサポートされなくなりました。\n" + STR_IMPEXP_ERR_TYPE "不正な形式です。\nインポートを中止します" + STR_IMPEXP_VER "エクスポートした %s(%s/%d) とバージョンが異なります。\n\nインポートしてもよろしいですか?" + STR_IMPEXP_REGEX1 "キーワード数が上限に達したため切り捨てました。" + STR_IMPEXP_REGEX2 "キーワード領域がいっぱいなため切り捨てました。" + STR_IMPEXP_REGEX3 "不正なキーワードを無視しました。" + STR_IMPEXP_DIC_NOTFOUND "【辞書ファイルが見つかりません】" +END + +STRINGTABLE +BEGIN + STR_OUTLINE_COBOL "COBOL" + STR_OUTLINE_PERL "Perl" + STR_OUTLINE_ASM "アセンブラ" + STR_OUTLINE_VB "Visual Basic" + STR_OUTLINE_PYTHON "Python" + STR_OUTLINE_ERLANG "Erlang" + STR_OUTLINE_WZ "WZ階層付テキスト" + STR_OUTLINE_HTML "HTML" + STR_OUTLINE_TEX "TeX" + STR_OUTLINE_TEXT "テキスト" + STR_SMART_INDENT_NONE "なし" + STR_SMART_INDENT_C_CPP "C/C++" + STR_IME_STATE_DEF "標準設定" + STR_IME_STATE_FULL "全角" + STR_IME_STATE_FULLHIRA "全角ひらがな" + STR_IME_STATE_FULLKATA "全角カタカナ" +END + +STRINGTABLE +BEGIN + STR_IME_STATE_NO "無変換" + STR_IME_SWITCH_DONTSET "そのまま" + STR_IME_SWITCH_ON "常にON" + STR_IME_SWITCH_OFF "常にOFF" + STR_WRAP_INDENT_NONE "なし" + STR_WRAP_INDENT_TX2X "tx2x" + STR_WRAP_INDENT_BOL "論理行先頭" + STR_WRAP_METHOD_NO_WRAP "折り返さない" + STR_WRAP_METHOD_SPEC_WIDTH "指定桁で折り返す" + STR_WRAP_METHOD_WIN_WIDTH "右端で折り返す" + STR_PROPTYPE_SCREEN "スクリーン" + STR_PROPTYPE_COLOR "カラー" + STR_PROPTYPE_SUPPORT "支援" + STR_PROPTYPE_REGEX_KEYWORD "正規表現キーワード" + STR_PROPTYPE_KEYWORD_HELP "キーワードヘルプ" + STR_PROPTYPE_WINDOW "ウィンドウ" +END + +STRINGTABLE +BEGIN + STR_PROPTYPE "タイプ別設定" + STR_PROPTYPE_ERR "CPropTypes::DoPropertySheet()内でエラーが出ました。\npsh.nStartPage=[%d]\n::PropertySheet()失敗。\n\n%s\n" + STR_PROPTYPKEYHELP_DIC " 辞書ファイル" + STR_PROPTYPKEYHELP_INFO "辞書の説明" + STR_PROPTYPKEYHELP_PATH "パス" + STR_PROPTYPKEYHELP_LINE1 "辞書ファイルの1行目の文字列" + STR_PROPTYPKEYHELP_DICPATH "キーワード辞書ファイル パス" + STR_PROPTYPKEYHELP_ERR_REG1 "これ以上登録できません。" + STR_PROPTYPKEYHELP_SELECT "更新する辞書をリストから選択してください。" + STR_PROPTYPKEYHELP_ERR_REG2 "既に登録済みの辞書です。" + STR_PROPTYPKEYHELP_ERR_OPEN "ファイルを開けませんでした。\n\n%s" + STR_PROPTYPEREGEX_LIST1 "キーワード" + STR_PROPTYPEREGEX_LIST2 "色指定" + STR_PROPTYPEREGEX_NOUSE "正規表現キーワードは使えません。" + STR_PROPTYPEREGEX_NOTFOUND + "正規表現ライブラリが見つかりません。\n\n正規表現キーワードは機能しませんが、それでも有効にしますか?" + STR_PROPTYPEREGEX_NOREG "これ以上登録できません。" +END + +STRINGTABLE +BEGIN + STR_PROPTYPEREGEX_ALREADY "同じキーワードで登録済みです。" + STR_PROPTYPEREGEX_KAKOMI + "正規表現キーワードを / と /k で囲ってください。\nキーワードに / がある場合は m# と #k で囲ってください。" + STR_PROPTYPEREGEX_INVALID "書式が正しくないか、正規表現ライブラリが見つかりません。\n\n登録しますか?" + STR_PROPTYPEREGEX_FULL "これ以上登録できません。\nキーワード領域がいっぱいです。" + STR_PROPTYPEREGEX_NOSEL "キーワードが選択されていません。" + STR_ERR_CSHAREDATA01 "CreateFileMapping()に失敗しました" + STR_ERR_CSHAREDATA02 "予期せぬエラー" + STR_ERR_CSHAREDATA10 "${w?【Grep】$h$:【アウトプット】$:$f$}${U?(更新)$}${R?(読みとり専用)$:(上書き禁止)$}${M?【キーマクロの記録中】$}" + STR_CUSTMENU_RIGHT_CLICK "右クリックメニュー" + STR_CUSTMENU_CUSTOM "メニュー%d" + STR_CUSTMENU_TAB "タブメニュー" + STR_ERR_CSHAREDATA14 "1234567890(([[「『【■□▲△▼▽◆◇○◎●§・※☆★第①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ一二三四五六七八九十壱弐参伍" + STR_ERR_CSHAREDATA15 "yyyy'年'M'月'd'日('dddd')'" + STR_ERR_CSHAREDATA16 "tthh'時'mm'分'ss'秒'" + STR_ERR_CSHAREDATA17 "${w?$h$:アウトプット$:${I?$f$:$N$}$}${U?(更新)$} - sakura $V ${R?(読みとり専用)$:(上書き禁止)$}${M? 【キーマクロの記録中】$}" + STR_ERR_CSHAREDATA18 "${w?$h$:アウトプット$:$f$}${U?(更新)$} - sakura $V ${R?(読みとり専用)$:(上書き禁止)$}${M? 【キーマクロの記録中】$}" +END + +STRINGTABLE +BEGIN + STR_FILEDIALOG_MRU "最近のファイル(&F):" + STR_FILEDIALOG_OPENFOLDER "最近のフォルダ(&D):" + STR_IMPEXP_REGEX4 "キーワードが長過ぎるため切り捨てました。" +END + +STRINGTABLE +BEGIN + STR_ERR_CSHAREDATA19 "同時に複数の編集用ウィンドウを閉じようとしています。これらを閉じますか?" + STR_ERR_CSHAREDATA20 "%s\n\n\n既に開いているファイルを違う文字コードで開く場合は、\nファイルメニューから「開き直す」を使用してください。\n\n現在の文字コードセット=[%s]\n新しい文字コードセット=[%s]" + STR_ERR_CSHAREDATA21 "%s\n\n多重オープンの確認で不明な文字コードが指定されました。\n\n現在の文字コードセット=%d [%s]\n新しい文字コードセット=%d [%s]" + STR_ERR_CSHAREDATA22 "不明" + STR_KEY_BIND_DBL_CLICK "ダブルクリック" + STR_KEY_BIND_R_CLICK "右クリック" + STR_KEY_BIND_MID_CLICK "中クリック" + STR_KEY_BIND_LSD_CLICK "左サイドクリック" + STR_KEY_BIND_RSD_CLICK "右サイドクリック" + STR_KEY_BIND_TRI_CLICK "トリプルクリック" + STR_KEY_BIND_QUA_CLICK "クアドラプルクリック" + STR_KEY_BIND_HAT_ENG_QT "^(英語')" + STR_KEY_BIND_AT_ENG_BQ "@(英語`)" + STR_KEY_BIND_APLI "アプリキー" + STR_COLOR_TEXT "テキスト" + STR_COLOR_RULER "ルーラー" +END + +STRINGTABLE +BEGIN + STR_COLOR_CURSOR "カーソル" + STR_COLOR_CURSOR_IMEON "カーソル(IME ON)" + STR_COLOR_CURSOR_LINE_BG "カーソル行の背景色" + STR_COLOR_CURSOR_LINE "カーソル行アンダーライン" + STR_COLOR_CURSOR_COLUMN "カーソル位置縦線" + STR_COLOR_LINE_NO "行番号" + STR_COLOR_LINE_NO_CHANGE "行番号(変更行)" + STR_COLOR_EVEN_LINE_BG "偶数行の背景色" + STR_COLOR_TAB "TAB記号" + STR_COLOR_HALF_SPACE "半角空白" + STR_COLOR_FULL_SPACE "日本語空白" + STR_COLOR_CTRL_CODE "コントロールコード" + STR_COLOR_CR "改行記号" + STR_COLOR_WRAP_MARK "折り返し記号" + STR_COLOR_VERT_LINE "指定桁縦線" + STR_COLOR_EOF "EOF記号" +END + +STRINGTABLE +BEGIN + STR_COLOR_REGEX_KEYWORD10 "正規表現キーワード10" + STR_COLOR_DIFF_ADD "DIFF差分表示(追加)" + STR_COLOR_DIFF_CNG "DIFF差分表示(変更)" + STR_COLOR_DIFF_DEL "DIFF差分表示(削除)" + STR_COLOR_BOOKMARK "ブックマーク" + STR_COLOR_NOTE_LINE "ノート線" + STR_COLOR_PAGEVIEW "表示範囲(ミニマップ)" + STR_ERR_CSPLITTER01 "SplitterWndクラスの登録に失敗しました。" +END + +STRINGTABLE +BEGIN + STR_COLOR_NUMBER "半角数値" + STR_COLOR_SELECTED_AREA "選択範囲" + STR_COLOR_SEARCH_WORD1 "検索文字列" + STR_COLOR_SEARCH_WORD2 "検索文字列2" + STR_COLOR_SEARCH_WORD3 "検索文字列3" + STR_COLOR_SEARCH_WORD4 "検索文字列4" + STR_COLOR_SEARCH_WORD5 "検索文字列5" + STR_COLOR_BRACKET "対括弧の強調表示" + STR_COLOR_COMMENT "コメント" + STR_COLOR_SINGLE_QUOTE "シングルクォーテーション文字列" + STR_COLOR_DOUBLE_QUOTE "ダブルクォーテーション文字列" + STR_COLOR_HERE_DOCUMENT "ヒアドキュメント" + STR_COLOR_URL "URL" + STR_COLOR_KEYWORD1 "強調キーワード1" + STR_COLOR_KEYWORD2 "強調キーワード2" + STR_COLOR_KEYWORD3 "強調キーワード3" +END + +STRINGTABLE +BEGIN + STR_COLOR_KEYWORD4 "強調キーワード4" + STR_COLOR_KEYWORD5 "強調キーワード5" + STR_COLOR_KEYWORD6 "強調キーワード6" + STR_COLOR_KEYWORD7 "強調キーワード7" + STR_COLOR_KEYWORD8 "強調キーワード8" + STR_COLOR_KEYWORD9 "強調キーワード9" + STR_COLOR_KEYWORD10 "強調キーワード10" + STR_COLOR_REGEX_KEYWORD1 "正規表現キーワード1" + STR_COLOR_REGEX_KEYWORD2 "正規表現キーワード2" + STR_COLOR_REGEX_KEYWORD3 "正規表現キーワード3" + STR_COLOR_REGEX_KEYWORD4 "正規表現キーワード4" + STR_COLOR_REGEX_KEYWORD5 "正規表現キーワード5" + STR_COLOR_REGEX_KEYWORD6 "正規表現キーワード6" + STR_COLOR_REGEX_KEYWORD7 "正規表現キーワード7" + STR_COLOR_REGEX_KEYWORD8 "正規表現キーワード8" + STR_COLOR_REGEX_KEYWORD9 "正規表現キーワード9" +END + +STRINGTABLE +BEGIN + STR_TABWND_LR_INFO "左クリック: タブ名一覧\n右クリック: パス名一覧" + STR_TABWND_CLOSETAB "タブを閉じる" + STR_TABWND_SHOWALL "すべて表示(&A)" + STR_TABWND_SHOWTABNAME "タブ名一覧に切替える(&W)" + STR_TABWND_SHOWPATHNAME "パス名一覧に切替える(&W)" + STR_ERR_CWSH01 "指名のスクリプトエンジンが見つかりません" + STR_ERR_CWSH02 "指名のスクリプトエンジンが作成できません" + STR_ERR_CWSH03 "サイトを登録できません" + STR_ERR_CWSH04 "パーサを取得できません" + STR_ERR_CWSH05 "初期化できません" + STR_ERR_CWSH06 "オブジェクトを渡せなかった" + STR_ERR_CWSH07 "状態変更エラー" + STR_ERR_CWSH08 "実行に失敗しました" + STR_ERR_ETCUTY01 "システム " + STR_ERR_ETCUTY02 "ユーザー " + STR_ERR_ETCUTY03 "%sリソースが極端に不足しています。\nこのまま%sを起動すると、正常に動作しない可能性があります。\n新しい%sの起動を中断します。\n\nシステム リソース\t残り %d%%\nUser リソース\t残り %d%%\nGDI リソース\t残り %d%%\n\n" +END + +STRINGTABLE +BEGIN + STR_CAPTION_ACTIVE_KEYMACRO "【キーマクロの記録中】" + STR_DATA_FORMAT "yyyy'年'M'月'd'日('dddd')'" + STR_TIME_FORMAT "tthh'時'mm'分'ss'秒'" + STR_TRANSNAME_COMDESKTOP "共有デスクトップ\\" + STR_TRANSNAME_COMDOC "共有ドキュメント\\" + STR_TRANSNAME_DESKTOP "デスクトップ\\" + STR_TRANSNAME_MYDOC "マイドキュメント\\" + STR_TRANSNAME_IE "IEキャッシュ\\" + STR_TRANSNAME_TEMP "TEMP\\" + STR_TRANSNAME_APPDATA "アプリデータ\\" + STR_PRINT_SET_NAME "印刷設定" + STR_TYPE_NAME_BASIS "基本" + STR_TYPE_NAME_RICHTEXT "リッチテキスト" + STR_TYPE_NAME_TEXT "テキスト" + STR_TYPE_NAME_DOS "MS-DOSバッチファイル" +END + +STRINGTABLE +BEGIN + STR_PLGMGR_NEWPLUGIN "新しいプラグインは見つかりませんでした" + STR_PLGMGR_INSTALL "プラグイン「%s」をインストールしますか?" + STR_PLGMGR_INSTALL_ERR "プラグイン「%s」をインストールできませんでした\n理由:%ls" + STR_PLGMGR_ERR_ZIP "ZIPファイルは扱えません" + STR_PLGMGR_ERR_FOLDER "プラグインフォルダがありません" + STR_PLGMGR_ERR_CREATEDIR "プラグインフォルダを作成出来ません" + STR_PLGMGR_INST_ZIP_ACCESS "ZIPファイル「%s」にアクセス出来ません" + STR_PLGMGR_INST_ZIP_DEF "ZIPファイル「%s」にはプラグイン定義ファイル(plugin.def)がありません" + STR_PLGMGR_INST_ZIP_ALREADY "「%s」は既にインストールされています\n上書きしますか?" + STR_PLGMGR_INST_ZIP_INST "ZIPプラグイン「%s」を「%s」にインストールしますか?" + STR_PLGMGR_INST_ZIP_UNZIP "ZIPプラグイン「%s」の解凍に失敗しました" + STR_PLGMGR_INST_ZIP_ERR "プラグイン「%s」をインストールできませんでした\n理由:%ls" + STR_PLGMGR_INST_DEF "プラグイン定義ファイル(plugin.def)がありません" + STR_PLGMGR_INST_ID "Plugin.IDがありません" + STR_PLGMGR_INST_RESERVE1 "Plugin.IDに""" + STR_PLGMGR_INST_RESERVE2 """は使用できません" +END + +#endif // 日本語 (日本) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// +#include "sakura_rc.rc2" + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/sakura_core/sakura_rc.rc2 b/sakura_core/sakura_rc.rc2 index f916884af6..d9bd76a7c3 100644 --- a/sakura_core/sakura_rc.rc2 +++ b/sakura_core/sakura_rc.rc2 @@ -1,117 +1,118 @@ -#pragma code_page(932) - -#define S_COPYRIGHT "Copyright (C) 1998-2020 by Norio Nakatani & Collaborators" -#define FL_VER PR_VER -#define FL_VER_STR PR_VER_STR - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_ABOUT DIALOG DISCARDABLE 0, 0, 260, 228 -STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "o[W" -FONT 9, "lr oSVbN" -BEGIN - ICON IDI_ICON_STD, IDC_STATIC_MYICON, 5, 5, 20, 20, SS_NOTIFY - EDITTEXT IDC_EDIT_VER, 33, 5, 219, 70, ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP - LTEXT ": (|p_) ", IDC_STATIC, 33, 75, 125, 10, NOT WS_GROUP - LTEXT S_COPYRIGHT, IDC_STATIC, 33, 85, 220, 11, NOT WS_GROUP | SS_NOPREFIX - LTEXT "Project URL:", IDC_STATIC_URL_CAPTION, 33, 103, 71, 10, NOT WS_GROUP - LTEXT "https://sakura-editor.github.io/", IDC_STATIC_URL_UR, 91, 103, 120, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP -#ifdef GIT_REMOTE_ORIGIN_URL - LTEXT "Source URL:", IDC_STATIC_GIT_CAPTION, 33, 114, 71, 10, NOT WS_GROUP - LTEXT GIT_REMOTE_ORIGIN_URL, IDC_STATIC_URL_GIT, 91, 114, 120, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP -#endif -#ifdef CI_BUILD_NUMBER_LABEL - LTEXT "Build URL:", IDC_STATIC_URL_CI_BUILD_CAPTION, 33, 125, 71, 10, NOT WS_GROUP - LTEXT CI_BUILD_NUMBER_LABEL, IDC_STATIC_URL_CI_BUILD, 91, 125, 120, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP -#endif -#if defined( GITHUB_COMMIT_URL ) || defined( GITHUB_PR_HEAD_URL ) - LTEXT "GitHub URL:", IDC_STATIC_URL_GITHUB_CAPTION, 33, 136, 50, 10, NOT WS_GROUP -#endif -#if defined( GITHUB_COMMIT_URL ) - LTEXT GIT_SHORT_COMMIT_HASH, IDC_STATIC_URL_GITHUB_COMMIT, 91, 136, 30, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP -#endif -#if defined( GITHUB_PR_HEAD_URL ) - LTEXT GITHUB_PR_NUMBER_LABEL, IDC_STATIC_URL_GITHUB_PR, 140, 136, 30, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP -#endif - EDITTEXT IDC_EDIT_ABOUT, 5, 152, 248, 53, ES_MULTILINE | ES_READONLY | WS_VSCROLL | NOT WS_TABSTOP - DEFPUSHBUTTON "&OK", IDOK, 112, 209, 50, 14 - PUSHBUTTON "Rs[(&C)", IDC_BUTTON_COPY, 193, 209, 60, 14 -END - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO DISCARDABLE -BEGIN - IDD_ABOUT, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 238 - TOPMARGIN, 7 - BOTTOMMARGIN, 196 - END -END -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -VS_VERSION_INFO VERSIONINFO - FILEVERSION FL_VER - PRODUCTVERSION PR_VER - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x01L -#else - FILEFLAGS 0x00L -#endif - FILEOS 0x40004L - FILETYPE 0x1L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "041104b0" - BEGIN - VALUE "Comments", "̃\tg̓t[\tgłB\0" - VALUE "CompanyName", "Project: Sakura-Editor\0" - VALUE "FileDescription", "TNGfB^\0" - VALUE "FileVersion", FL_VER_STR - VALUE "InternalName", "sakura\0" - VALUE "LegalCopyright", S_COPYRIGHT - VALUE "LegalTrademarks", " \0" - VALUE "OriginalFilename", "sakura.exe\0" - VALUE "ProductName", "TNGfB^\0" - VALUE "ProductVersion", RESOURCE_VERSION_STRING(PR_VER_STR) // e.g. "2.3.2.0 (4a0de579) UNICODE 64bit DEBUG" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x411, 1200 - END -END - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -#ifdef _DEBUG -IDI_ICON_STD ICON DISCARDABLE "../resource/icon_debug.ico" -#else -IDI_ICON_STD ICON DISCARDABLE "../resource/icon_std.ico" -#endif -IDI_ICON_GREP ICON DISCARDABLE "../resource/icon_grep.ico" -IDI_PRINTER ICON DISCARDABLE "../resource/printer.ico" +// このファイルにはリソースエディタで編集できない要素を配置します. +// このファイルのエンコーディングは UTF-16LE です. + +#define S_COPYRIGHT "Copyright (C) 1998-2020 by Norio Nakatani & Collaborators" +#define FL_VER PR_VER +#define FL_VER_STR PR_VER_STR + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_ABOUT DIALOG DISCARDABLE 0, 0, 260, 228 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "バージョン情報" +FONT 9, "MS Pゴシック" +BEGIN + ICON IDI_ICON_STD, IDC_STATIC_MYICON, 5, 5, 20, 20, SS_NOTIFY + EDITTEXT IDC_EDIT_VER, 33, 5, 219, 70, ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "原作者: たけ(竹パンダ) さん", IDC_STATIC, 33, 75, 125, 10, NOT WS_GROUP + LTEXT S_COPYRIGHT, IDC_STATIC, 33, 85, 220, 11, NOT WS_GROUP | SS_NOPREFIX + LTEXT "Project URL:", IDC_STATIC_URL_CAPTION, 33, 103, 71, 10, NOT WS_GROUP + LTEXT "https://sakura-editor.github.io/", IDC_STATIC_URL_UR, 91, 103, 120, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP +#ifdef GIT_REMOTE_ORIGIN_URL + LTEXT "Source URL:", IDC_STATIC_GIT_CAPTION, 33, 114, 71, 10, NOT WS_GROUP + LTEXT GIT_REMOTE_ORIGIN_URL, IDC_STATIC_URL_GIT, 91, 114, 120, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP +#endif +#ifdef CI_BUILD_NUMBER_LABEL + LTEXT "Build URL:", IDC_STATIC_URL_CI_BUILD_CAPTION, 33, 125, 71, 10, NOT WS_GROUP + LTEXT CI_BUILD_NUMBER_LABEL, IDC_STATIC_URL_CI_BUILD, 91, 125, 120, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP +#endif +#if defined( GITHUB_COMMIT_URL ) || defined( GITHUB_PR_HEAD_URL ) + LTEXT "GitHub URL:", IDC_STATIC_URL_GITHUB_CAPTION, 33, 136, 50, 10, NOT WS_GROUP +#endif +#if defined( GITHUB_COMMIT_URL ) + LTEXT GIT_SHORT_COMMIT_HASH, IDC_STATIC_URL_GITHUB_COMMIT, 91, 136, 30, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP +#endif +#if defined( GITHUB_PR_HEAD_URL ) + LTEXT GITHUB_PR_NUMBER_LABEL, IDC_STATIC_URL_GITHUB_PR, 140, 136, 30, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP +#endif + EDITTEXT IDC_EDIT_ABOUT, 5, 152, 248, 53, ES_MULTILINE | ES_READONLY | WS_VSCROLL | NOT WS_TABSTOP + DEFPUSHBUTTON "&OK", IDOK, 112, 209, 50, 14 + PUSHBUTTON "情報をコピー(&C)", IDC_BUTTON_COPY, 193, 209, 60, 14 +END + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO DISCARDABLE +BEGIN + IDD_ABOUT, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 238 + TOPMARGIN, 7 + BOTTOMMARGIN, 196 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION FL_VER + PRODUCTVERSION PR_VER + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x01L +#else + FILEFLAGS 0x00L +#endif + FILEOS 0x40004L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "041104b0" + BEGIN + VALUE "Comments", "このソフトはフリーソフトです。\0" + VALUE "CompanyName", "Project: Sakura-Editor\0" + VALUE "FileDescription", "サクラエディタ\0" + VALUE "FileVersion", FL_VER_STR + VALUE "InternalName", "sakura\0" + VALUE "LegalCopyright", S_COPYRIGHT + VALUE "LegalTrademarks", " \0" + VALUE "OriginalFilename", "sakura.exe\0" + VALUE "ProductName", "サクラエディタ\0" + VALUE "ProductVersion", RESOURCE_VERSION_STRING(PR_VER_STR) // e.g. "2.3.2.0 (4a0de579) UNICODE 64bit DEBUG" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x411, 1200 + END +END + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +#ifdef _DEBUG +IDI_ICON_STD ICON DISCARDABLE "../resource/icon_debug.ico" +#else +IDI_ICON_STD ICON DISCARDABLE "../resource/icon_std.ico" +#endif +IDI_ICON_GREP ICON DISCARDABLE "../resource/icon_grep.ico" +IDI_PRINTER ICON DISCARDABLE "../resource/printer.ico" diff --git a/sakura_lang_en_US/sakura_lang_rc.rc b/sakura_lang_en_US/sakura_lang_rc.rc index 8b5788d740..90bdf06ff3 100644 --- a/sakura_lang_en_US/sakura_lang_rc.rc +++ b/sakura_lang_en_US/sakura_lang_rc.rc @@ -1,7 +1,5 @@ //Microsoft Developer Studio generated resource script. -#pragma code_page(932) - #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// @@ -102,7 +100,7 @@ FONT 9, "Tahoma" BEGIN ICON IDI_ICON_STD, IDC_STATIC_MYICON, 5, 5, 20, 20, SS_NOTIFY EDITTEXT IDC_EDIT_VER, 33, 6, 204, 51, ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP - LTEXT "Original Author: Take-san(|p_) ", IDC_STATIC, 33, 61, 125, 8, NOT WS_GROUP + LTEXT "Original Author: Take-san(竹パンダ) さん", IDC_STATIC, 33, 61, 125, 8, NOT WS_GROUP LTEXT S_COPYRIGHT, IDC_STATIC, 33, 75, 205, 8, NOT WS_GROUP | SS_NOPREFIX LTEXT "Translation:",IDC_STATIC,33,90,41,8 LTEXT S_COPYRIGHT_TRANSLATION,IDC_STATIC,74,90,164,8,SS_NOPREFIX | NOT WS_GROUP @@ -161,8 +159,8 @@ FONT 9, "Tahoma" BEGIN CONTROL "Tree1", IDC_TREE_FL, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 0, 17, 234, 235 CONTROL "List1", IDC_LIST_FL, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP, 0, 0, 234, 252 - PUSHBUTTON "", IDC_BUTTON_MENU, 1, 255, 10, 14, NOT WS_TABSTOP - CONTROL "", IDC_BUTTON_WINSIZE, "Button", BS_AUTOCHECKBOX | BS_PUSHLIKE, 12, 255, 10, 14 + PUSHBUTTON "▼", IDC_BUTTON_MENU, 1, 255, 10, 14, NOT WS_TABSTOP + CONTROL "■", IDC_BUTTON_WINSIZE, "Button", BS_AUTOCHECKBOX | BS_PUSHLIKE, 12, 255, 10, 14 PUSHBUTTON "&Copy", IDC_BUTTON_COPY, 24, 255, 50, 14, WS_DISABLED DEFPUSHBUTTON "&Jump", IDOK, 76, 255, 50, 14 PUSHBUTTON "Cancel(&X)", IDCANCEL, 128, 255, 50, 14 @@ -281,7 +279,7 @@ STYLE DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Grep Running..." FONT 9, "Tahoma" BEGIN - LTEXT "SearchingEEE", IDC_STATIC, 5, 5, 61, 8, NOT WS_GROUP + LTEXT "Searching・・・", IDC_STATIC, 5, 5, 61, 8, NOT WS_GROUP LTEXT "File", IDC_STATIC, 5, 21, 26, 8, NOT WS_GROUP LTEXT "IDC_STATIC_CURPATH", IDC_STATIC_CURFILE, 36, 20, 252, 10, NOT WS_GROUP LTEXT "Folder", IDC_STATIC, 5, 34, 27, 8, NOT WS_GROUP @@ -839,7 +837,7 @@ BEGIN PUSHBUTTON "E&xport...", IDC_BUTTON_EXPORT, 88, 215, 60, 14 LTEXT "Keyword Set &1", IDC_STATIC, 162, 18, 54, 8 COMBOBOX IDC_COMBO_SET, 218, 16, 75, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "Set &2`10...", IDC_BUTTON_KEYWORD_SELECT, 218, 31, 75, 14 + PUSHBUTTON "Set &2~10...", IDC_BUTTON_KEYWORD_SELECT, 218, 31, 75, 14 PUSHBUTTON "Keyword Setting(&C)...", IDC_BUTTON_EDITKEYWORD, 218, 47, 75, 14 GROUPBOX "Keyword Highlighting", IDC_STATIC, 156, 6, 142, 60, WS_GROUP LTEXT "Block(&F)", IDC_STATIC, 164, 80, 42, 8 @@ -888,7 +886,7 @@ BEGIN PUSHBUTTON "(&1)...", IDC_BUTTON_HOKANFILE_REF, 215, 14, 19, 14 COMBOBOX IDC_COMBO_HOKAN_TYPE, 236, 15, 58, 57, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Case &Insensitive", IDC_CHECK_HOKANLOHICASE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 31, 90, 10 - LTEXT "CandidateF", IDC_STATIC, 102, 32, 30, 8, NOT WS_GROUP + LTEXT "Candidate:", IDC_STATIC, 102, 32, 30, 8, NOT WS_GROUP CONTROL "In current &file", IDC_CHECK_HOKANBYFILE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 142, 31, 68, 10 CONTROL "From &Keyword Set", IDC_CHECK_HOKANBYKEYWORD, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 212, 31, 80, 10 GROUPBOX "Input Auto-complete Support", IDC_STATIC, 3, 3, 295, 45, WS_GROUP @@ -903,7 +901,7 @@ BEGIN CONTROL "Ignore char in strings(&S)", IDC_CHECK_INDENTCPPSTR, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 171, 146, 10 CONTROL "Ignore char in comments(&C)", IDC_CHECK_INDENTCPPCMT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 158, 171, 130, 10 CONTROL "When Undo, separate from editing(&U)", IDC_CHECK_INDENTCPPUNDO, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 183, 146, 10 - GROUPBOX "C/C++@Indent Settings", IDC_STATIC, 3, 159, 295, 40, WS_GROUP + GROUPBOX "C/C++ Indent Settings", IDC_STATIC, 3, 159, 295, 40, WS_GROUP END IDD_PROP_REGEX DIALOGEX 0, 0, 302, 244 @@ -945,7 +943,7 @@ BEGIN LTEXT "Dictionary File", IDC_LABEL_KEYHELP_KEYWORD, 8, 173, 56, 8, NOT WS_GROUP EDITTEXT IDC_EDIT_KEYHELP, 61, 172, 170, 12, ES_AUTOHSCROLL PUSHBUTTON "...", IDC_BUTTON_KEYHELP_REF, 234, 172, 12, 13, WS_GROUP - LTEXT " Priority (Top)", IDC_LABEL_KEYHELP_PRIOR, 249, 33, 44, 8, NOT WS_GROUP + LTEXT "↑ Priority (Top)", IDC_LABEL_KEYHELP_PRIOR, 249, 33, 44, 8, NOT WS_GROUP PUSHBUTTON "In&sert", IDC_BUTTON_KEYHELP_INS, 251, 136, 38, 15 PUSHBUTTON "Updat&e", IDC_BUTTON_KEYHELP_UPD, 251, 154, 38, 15 PUSHBUTTON "&Delete", IDC_BUTTON_KEYHELP_DEL, 251, 172, 38, 15 @@ -1326,7 +1324,7 @@ BEGIN EDITTEXT IDC_EDIT_BACKUPFILE, 24, 44, 255, 13, ES_AUTOHSCROLL CONTROL "Save once as .&bak", IDC_RADIO_BACKUP_TYPE1, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 12, 66, 142, 10 - CONTROL "Save repeatedly as (.b00`b98)(&G)", IDC_RADIO_BACKUP_TYPE3, "Button", BS_AUTORADIOBUTTON, 12, 80, 156, 10 + CONTROL "Save repeatedly as (.b00~b98)(&G)", IDC_RADIO_BACKUP_TYPE3, "Button", BS_AUTORADIOBUTTON, 12, 80, 156, 10 CONTROL "App&end backup date/time to file name", IDC_RADIO_BACKUP_DATETYPE1, "Button", BS_AUTORADIOBUTTON, 12, 106, 204, 10 CONTROL "Append back&up date/time each time to file name", IDC_RADIO_BACKUP_DATETYPE2, "Button", BS_AUTORADIOBUTTON, 12, 120, 230, 10 CONTROL "&Retain original extension", IDC_CHECK_BACKUP_RETAINEXT, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 162, 66, 96, 10 @@ -1667,7 +1665,7 @@ EXSTYLE WS_EX_CONTEXTHELP CAPTION "File Tree Setting" FONT 9, "Tahoma" BEGIN - LTEXT "SettingFCommon", IDC_STATIC_SETTFING_FROM, 4, 4, 282, 10 + LTEXT "Setting:Common", IDC_STATIC_SETTFING_FROM, 4, 4, 282, 10 CONTROL "Load &Ini from folders", IDC_CHECK_LOADINI, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 4, 16, 120, 9 LTEXT "Default Setting File(&J)", IDC_STATIC, 4, 28, 110, 8 EDITTEXT IDC_EDIT_DEFINI, 13, 39, 124, 13, ES_AUTOHSCROLL @@ -1680,7 +1678,7 @@ BEGIN LTEXT "Pa&th", IDC_STATIC_PATH, 3, 119, 22, 10 EDITTEXT IDC_EDIT_PATH, 38, 117, 122, 13, ES_AUTOHSCROLL PUSHBUTTON "&...", IDC_BUTTON_REF2, 161, 117, 10, 13 - PUSHBUTTON "(&3)", IDC_BUTTON_PATH_MENU, 171, 117, 21, 14 + PUSHBUTTON "▼(&3)", IDC_BUTTON_PATH_MENU, 171, 117, 21, 14 LTEXT "Lab&el", IDC_STATIC, 3, 136, 32, 10 EDITTEXT IDC_EDIT_LABEL, 38, 134, 111, 13, ES_AUTOHSCROLL LTEXT "File(&K)", IDC_STATIC_FILE, 3, 154, 32, 10 @@ -2487,8 +2485,8 @@ STRINGTABLE DISCARDABLE BEGIN F_COPY_ADDCRLF "Copy adding CRLF" F_COPYLINES "Copy selected lines" - F_COPYLINESASPASSAGE "Copy selected as passage" // I͈͓SsptRs[" <<--check - F_COPYLINESWITHLINENUMBER "Copy selected with line nr" // I͈͓SssԍtRs[" <<--check + F_COPYLINESASPASSAGE "Copy selected as passage" // 選択範囲内全行引用符付きコピー" <<--check + F_COPYLINESWITHLINENUMBER "Copy selected with line nr" // 選択範囲内全行行番号付きコピー" <<--check F_COPY_COLOR_HTML "Copy selected with HTML markup" F_COPY_COLOR_HTML_LINENUMBER "Copy selected with line nr && HTML" F_COPYPATH "Copy this file's path" @@ -2516,36 +2514,36 @@ BEGIN F_CONVERT_TOPMENU "Convert" F_TOLOWER "Lower case" F_TOUPPER "Upper case" - F_TOHANKAKU "Full Height Half Height" - F_TOZENKAKUKATA "Half Height + Hiragana Full/Katakana" - F_TOZENKAKUHIRA "Half Height + Katakana Full/Hiragana" - F_HANKATATOZENKATA "Half Height Katakana Full Katakana" - F_HANKATATOZENHIRA "Half Katakana Full Hiragana" - F_TOZENEI "Half Alphabetic Full Alphabetic" + F_TOHANKAKU "Full Height → Half Height" + F_TOZENKAKUKATA "Half Height + Hiragana → Full/Katakana" + F_TOZENKAKUHIRA "Half Height + Katakana → Full/Hiragana" + F_HANKATATOZENKATA "Half Height Katakana → Full Katakana" + F_HANKATATOZENHIRA "Half Katakana → Full Hiragana" + F_TOZENEI "Half Alphabetic → Full Alphabetic" END STRINGTABLE DISCARDABLE BEGIN - F_TOHANEI "Full Alphabetic Half Alphabetic" - F_TOHANKATA "Full Katakana Half Katakana" - F_TABTOSPACE "TABSpaces" - F_SPACETOTAB "SpacesTAB" + F_TOHANEI "Full Alphabetic → Half Alphabetic" + F_TOHANKATA "Full Katakana → Half Katakana" + F_TABTOSPACE "TAB→Spaces" + F_SPACETOTAB "Spaces→TAB" F_CONV_ENCODE_SUBMENU "Change Encoding" END STRINGTABLE DISCARDABLE BEGIN - F_CODECNV_AUTO2SJIS "Automatic SJIS Code" - F_CODECNV_EMAIL "E-Mail(JISSJIS) Code" - F_CODECNV_EUC2SJIS "EUCSJIS Code" - F_CODECNV_UNICODE2SJIS "UTF-16SJIS Code" - F_CODECNV_UTF82SJIS "UTF-8SJIS Code" - F_CODECNV_UTF72SJIS "UTF-7SJIS Code" - F_CODECNV_UNICODEBE2SJIS "UTF-16 BESJIS Code" - F_CODECNV_SJIS2JIS "SJISJIS Code" - F_CODECNV_SJIS2EUC "SJISEUC Code" - F_CODECNV_SJIS2UTF8 "SJISUTF-8 Code" - F_CODECNV_SJIS2UTF7 "SJISUTF-7 Code" + F_CODECNV_AUTO2SJIS "Automatic → SJIS Code" + F_CODECNV_EMAIL "E-Mail(JIS→SJIS) Code" + F_CODECNV_EUC2SJIS "EUC→SJIS Code" + F_CODECNV_UNICODE2SJIS "UTF-16→SJIS Code" + F_CODECNV_UTF82SJIS "UTF-8→SJIS Code" + F_CODECNV_UTF72SJIS "UTF-7→SJIS Code" + F_CODECNV_UNICODEBE2SJIS "UTF-16 BE→SJIS Code" + F_CODECNV_SJIS2JIS "SJIS→JIS Code" + F_CODECNV_SJIS2EUC "SJIS→EUC Code" + F_CODECNV_SJIS2UTF8 "SJIS→UTF-8 Code" + F_CODECNV_SJIS2UTF7 "SJIS→UTF-7 Code" END STRINGTABLE DISCARDABLE @@ -2785,7 +2783,7 @@ BEGIN F_PREVGROUP "Prev group" F_TAB_MOVERIGHT "Move tab Right" F_TAB_MOVELEFT "Move tab Left" - F_TAB_SEPARATE "New Tab Group" // "VKO[v" + F_TAB_SEPARATE "New Tab Group" // "新規グループ" F_TAB_JOINTNEXT "Move to next group" F_TAB_JOINTPREV "Move to prev group" F_TAB_MANIP_SUBMENU "Tab control" // LMP -- added @@ -2857,7 +2855,7 @@ END STRINGTABLE DISCARDABLE BEGIN - F_MENU_NOT_USED_FIRST "--Tool Bar Break--" //"\\c[o[ܕԁ\\" + F_MENU_NOT_USED_FIRST "--Tool Bar Break--" //"――ツールバー折返――" END STRINGTABLE DISCARDABLE @@ -2887,7 +2885,7 @@ BEGIN STR_SQLERR_EXEC_BUT_NOT_RUN "Trying to execute in Oracle SQL*Plus\n\n\nOracle SQL*Plus is not running\n" STR_SQLERR_ACTV_BUT_NOT_RUN "Trying to activate Oracle SQL*Plus\n\n\nOracle SQL*Plus is not running\n" STR_ERR_CMPERR "Comparison destination folder\n%s\nhas a %d byte line \ncan not perform comparison." // FIXME - ok? -// STR_ERR_CMPERR "r̃t@C\n%s\n%doCg𒴂s܂B\nrł܂B" +// STR_ERR_CMPERR "比較先のファイル\n%s\n%dバイトを超える行があります。\n比較できません。" STR_NO_TITLE1 "(No Title)" STR_NO_TITLE2 "No Title" @@ -3001,8 +2999,8 @@ BEGIN STR_DLGFNCLST_REMARK03 "Procedure Declaration" STR_DLGFNCLST_REMARK04 "Function" STR_DLGFNCLST_REMARK05 "Procedure" - STR_DLGFNCLST_REMARK06 "Package Specification" - STR_DLGFNCLST_REMARK07 "Package Body" + STR_DLGFNCLST_REMARK06 "■Package Specification" + STR_DLGFNCLST_REMARK07 "■Package Body" STR_DLGFNCLST_REMARK08 "PROC" STR_DLGFNCLST_REMARK09 "LABEL" STR_DLGFNCLST_REMARK10 "ENDP" @@ -3070,7 +3068,7 @@ BEGIN STR_DLGFNCLST_MENU_UNIFY "&Unify inheriting info" STR_DLGFNCLST_MENU_CLOSE "Close(&X)" - STR_DLGFNCLST_UNIFY "݂̉ʂ̃hbLOzuׂĂ̋ʐݒE^CvʐݒɃRs[ēꂵ܂B\ni݊JĂ鑼ʂ̏Ԃꂵ܂Bj\n" + STR_DLGFNCLST_UNIFY "現在の画面のドッキング配置情報をすべての共通設定・タイプ別設定にコピーして統一します。\n(現在開いている他画面の状態も統一します。)\n" // CDlgGrep.cpp @@ -3222,9 +3220,9 @@ BEGIN STR_BACKUP_ERR_MSG "Failed to create backup.. Continue to overwrite the original file?" // Continue with original file STR_BACKUP_ERR_PATH_CRETE "error in the path of creating the backup destination.\nPath is too long or invalid format.\nContinue to overwrite the original file?" STR_BACKUP_CONFORM_TITLE1 "Confirming creation of backup" // Dialog Title for message below - STR_BACKUP_CONFORM_MSG1 "Creating a backup before updating.\nOK? [(N)o] = No backup, just overwrite (or save as).\n\n%s\n \n%s\n\nBackup file will be sent to the Trashcan\n" + STR_BACKUP_CONFORM_MSG1 "Creating a backup before updating.\nOK? [(N)o] = No backup, just overwrite (or save as).\n\n%s\n ↓\n%s\n\nBackup file will be sent to the Trashcan\n" STR_BACKUP_CONFORM_TITLE2 "Confirming creation of backup" // Dialog Title for message below - STR_BACKUP_CONFORM_MSG2 "Creating a backup before updating.\nOK? [(N)o] = No backup, just overwrite (or save as).\n\n%s\n \n%s\n\n" + STR_BACKUP_CONFORM_MSG2 "Creating a backup before updating.\nOK? [(N)o] = No backup, just overwrite (or save as).\n\n%s\n ↓\n%s\n\n" STR_BACKUP_ERR_DELETE "failed to delete" STR_BACKUP_ERR_MOVE "failed to move" STR_ERR_DLGEDITDOC21 "%s\nis currently prohibited from writing by another process." @@ -3239,7 +3237,7 @@ BEGIN STR_ERR_DLGEDITDOC30 "%s\nhas been altered. Save before closing? \n\nDue to opening as view-mode it is suggested to save under a different name.\n" STR_CHANGE_CHARSET "%s\nis no change.\nhowever change encoding.\nSave before closing?" STR_ERR_DLGEDITDOC31 "%s\nhas been altered. Save before closing?" - STR_AUTORELOAD_NOFITY "File Updated at %02d:%02d:%02d" + STR_AUTORELOAD_NOFITY "★File Updated at %02d:%02d:%02d" // CType_Cpp.cpp STR_OUTLINE_CPP_NONAME "No Name" @@ -3260,15 +3258,15 @@ BEGIN // CEditView.cpp STR_VIEW_TIMER "CEditView::Create()\nTimer could not start up.\nPossible insufficiency of system resources." - STR_ERR_DLGEDITVW2 "" // Used in get Extents - STR_ERR_DLGEDITVW5 "\n--------------------\n" - STR_ERR_DLGEDITVW6 "" + STR_ERR_DLGEDITVW2 "大" // Used in get Extents + STR_ERR_DLGEDITVW5 "\n--------------------\n■" + STR_ERR_DLGEDITVW6 "■" STR_MENU_KEYWORDINFO "Copy Keyword description to clipboard" // Right click menu STR_MENU_OPENKEYWORDDIC "Open keyword dictionary" // Right click menu STR_STATUS_ROW_COL "%5d Ln %4d Col" STR_INS_MODE_INS "INS" // Insert mode STR_INS_MODE_OVR "OVR" // Overwrite mode - STR_GREP_SEARCH_CONDITION "\r\n Search Conditions " // Output from GREP results + STR_GREP_SEARCH_CONDITION "\r\n□ Search Conditions " // Output from GREP results STR_GREP_SEARCH_FILE "\r\n" STR_GREP_SEARCH_TARGET "Search Target " STR_GREP_REPLACE_TO "Replace To " @@ -3320,13 +3318,13 @@ BEGIN // CEditView_Command.cpp STR_ERR_MACRO1 "Macro %d (%s) failed to execute." - STR_ERR_SRPREV1 "Restarted search from bottom" - STR_ERR_SRPREV2 "Not Found" - STR_ERR_SRPREV3 "Reverse searching () for '%ls' found no further instances." - STR_ERR_SRNEXT1 "Restarted search from top" - STR_ERR_SRNEXT2 "Not Found" - STR_ERR_SRNEXT3 "Forward searching () for '%ls' found no further instances." - STR_ERR_UNINDENT1 "Reverse indent only works on selected text" + STR_ERR_SRPREV1 "▲Restarted search from bottom" + STR_ERR_SRPREV2 "△Not Found" + STR_ERR_SRPREV3 "Reverse searching (↑) for '%ls' found no further instances." + STR_ERR_SRNEXT1 "▼Restarted search from top" + STR_ERR_SRNEXT2 "▽Not Found" + STR_ERR_SRNEXT3 "Forward searching (↓) for '%ls' found no further instances." + STR_ERR_UNINDENT1 "★Reverse indent only works on selected text" STR_ERR_TAGJMP1 "Cant Tag-Jump" STR_ERR_TAGJMPBK1 "Cant Bookmark Tag-Jump" STR_ERR_MACROERR1 "Failed to open Macro.\n\n%s" @@ -3359,10 +3357,10 @@ BEGIN // inside function Command_EXTHELP1 // CEditView_Command_New.cpp - STR_BOOKMARK_NEXT_NOT_FOUND "Forward () bookmark wasn't found." - STR_BOOKMARK_PREV_NOT_FOUND "Previous () bookmark wasn't found." - STR_FUCLIST_NEXT_NOT_FOUND "Forward () Function wasn't found." - STR_FUCLIST_PREV_NOT_FOUND "Previous () Function wasn't found." + STR_BOOKMARK_NEXT_NOT_FOUND "Forward (↓) bookmark wasn't found." + STR_BOOKMARK_PREV_NOT_FOUND "Previous (↑) bookmark wasn't found." + STR_FUCLIST_NEXT_NOT_FOUND "Forward (↓) Function wasn't found." + STR_FUCLIST_PREV_NOT_FOUND "Previous (↑) Function wasn't found." STR_ERR_DLGEDITVWCMDNW7 "%d line was successfully merged." // Edit Menu::Cosmtik::Merge lines option STR_ERR_DLGEDITVWCMDNW8 "There were no lines of text that could be merged in your selection." // Edit Menu::Cosmtik::Merge lines option STR_SAVEAGENT_OTHER_APP "'%s'\nCould not save the file.\nPath may not be correct, or the file is in use by another application." @@ -3375,13 +3373,13 @@ BEGIN STR_ERR_DLGEDITVWDIFF3 "DIFF command failed.\n\n%ls" STR_ERR_DLGEDITVWDIFF4 "The file to be used for comparison appears to be a binary file." STR_ERR_DLGEDITVWDIFF5 "No differences were found by DIFF" - STR_DIFF_NEXT_NOT_FOUND "Forwards () searching didn't find differences" - STR_DIFF_PREV_NOT_FOUND "Backward () searching didn't find differences" + STR_DIFF_NEXT_NOT_FOUND "Forwards (↓) searching didn't find differences" + STR_DIFF_PREV_NOT_FOUND "Backward (↑) searching didn't find differences" STR_DIFF_FAILED "DIFF command failed." STR_DIFF_FAILED_TEMP "DIFF command failed.\n\nCouldn't create temporary file." STR_DIFF_FAILED_LONG "DIFF command failed.\n\nLine was too long." - STR_MODLINE_NEXT_NOT_FOUND "Forward () Modified Line wasn't found." - STR_MODLINE_PREV_NOT_FOUND "Previous () Modified Line wasn't found." + STR_MODLINE_NEXT_NOT_FOUND "Forward (↓) Modified Line wasn't found." + STR_MODLINE_PREV_NOT_FOUND "Previous (↑) Modified Line wasn't found." // CEditView_New.cpp -- no words, going to ignore for now ( just block [], ... etc ) @@ -3410,10 +3408,10 @@ BEGIN STR_ERR_DLGEDITWND14 "Before using Print Preview please install a printer driver.\n" - // const char* pszLabel[7] = { "", "99999 s 9999 ", "CRLF", "0000", "UTF-16", "REC", "㏑" }; //Oct. 30, 2000 JEPRO 疜sv + // const char* pszLabel[7] = { "", "99999 行 9999 列", "CRLF", "0000", "UTF-16", "REC", "上書" }; //Oct. 30, 2000 JEPRO 千万行も要らん STR_ERR_DLGEDITWND19 "" STR_ERR_DLGEDITWND20 "99999 L 9999 C" -// STR_ERR_DLGEDITWND20 "99999 s 9999 " +// STR_ERR_DLGEDITWND20 "99999 行 9999 列" STR_ERR_DLGEDITWND21 "CFLF" STR_ERR_DLGEDITWND22 "0000" STR_ERR_DLGEDITWND23 "UTF-16 BOM" @@ -3814,7 +3812,7 @@ BEGIN // CPropTypesRegex.cpp STR_PROPTYPEREGEX_LIST1 "Keyword" - STR_PROPTYPEREGEX_LIST2 "Color Index" // LMP - not sure Fw + STR_PROPTYPEREGEX_LIST2 "Color Index" // LMP - not sure 色指定 STR_PROPTYPEREGEX_NOUSE "Cannot use Regular Expression" STR_PROPTYPEREGEX_NOTFOUND "RegEx library cannot be found\n\nRegular Expression functionality cant be used, do you want to enable it anyway?" STR_PROPTYPEREGEX_NOREG "Cannot register any further keywords." @@ -3890,17 +3888,17 @@ BEGIN STR_ERR_CSHAREDATA02 "Unexpected error" // Common Prop::Tab/Title bar - STR_ERR_CSHAREDATA10 "${w?yGrepz$h$:yOutputz$:$f$}${U?(Changed)$}${R?(Read Only)$:(Write Protected)$}${M?yRecording Macroz$}" + STR_ERR_CSHAREDATA10 "${w?【Grep】$h$:【Output】$:$f$}${U?(Changed)$}${R?(Read Only)$:(Write Protected)$}${M?【Recording Macro】$}" STR_CUSTMENU_RIGHT_CLICK "Right Click Menu" STR_CUSTMENU_CUSTOM "Menu%d" STR_CUSTMENU_TAB "Tab Menu" - STR_ERR_CSHAREDATA14 "PQRSTUVWXOi(m[uwyE@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]OlܘZ\Q" + STR_ERR_CSHAREDATA14 "1234567890(([[「『【■□▲△▼▽◆◇○◎●§・※☆★第①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ一二三四五六七八九十壱弐参伍" STR_ERR_CSHAREDATA15 "yyyy'Y'M'M'd'D('dddd')'" STR_ERR_CSHAREDATA16 "tthh'H'mm'M'ss'S'" - STR_ERR_CSHAREDATA17 "${w?$h$:Output$:${I?$f$:$N$}$}${U?(Changed)$} - sakura $V ${R?(Read Only)$:(Write Protected)$}${M? yRecording Macroz$}" - STR_ERR_CSHAREDATA18 "${w?$h$:Output$:$f$}${U?(Changed)$} - sakura $V ${R?(Read Only)$:(Write Protected)$}${M? yRecording Macroz$}" + STR_ERR_CSHAREDATA17 "${w?$h$:Output$:${I?$f$:$N$}$}${U?(Changed)$} - sakura $V ${R?(Read Only)$:(Write Protected)$}${M? 【Recording Macro】$}" + STR_ERR_CSHAREDATA18 "${w?$h$:Output$:$f$}${U?(Changed)$} - sakura $V ${R?(Read Only)$:(Write Protected)$}${M? 【Recording Macro】$}" STR_ERR_CSHAREDATA19 "Attempting to close multiple editor windows, sure you want to do this?" // Displayed if you try to close edit with many open windows - STR_ERR_CSHAREDATA20 "%s\n\n\nIn the case you want to re-open a file with a different encoding\nsChooseuRe-Open with Encodingvfrom the file menu please.\n\nCurrent Character Encoding set=[%s]\nNew Character Encoding=[%s]" // See Resource F_FILE_REOPEN_SUBMENU + STR_ERR_CSHAREDATA20 "%s\n\n\nIn the case you want to re-open a file with a different encoding\nsChoose「Re-Open with Encoding」from the file menu please.\n\nCurrent Character Encoding set=[%s]\nNew Character Encoding=[%s]" // See Resource F_FILE_REOPEN_SUBMENU STR_ERR_CSHAREDATA21 "%s\n\nUnclear character encoding found during opening multiple documents.\n\nCurrent Char Encoding=%d [%s]\nNew Char Encoding=%d [%s]" STR_ERR_CSHAREDATA22 "unknown" // relates to above two [%s] @@ -4145,7 +4143,7 @@ GDI Resource\tRemaining %d%%\n\n" STR_PLGMGR_INST_RESERVE1 "Don't Use """ STR_PLGMGR_INST_RESERVE2 """ in Plugin.ID" STR_PLGMGR_INST_IDNUM "Plugin.ID of Head character not use numbers" - STR_PLGMGR_INST_NAME "The same plugin has been installed under a different name. Are you sure Overwrite?\n@Yes@->@Use newu%sv\n@No@Use installedu%lsv" + STR_PLGMGR_INST_NAME "The same plugin has been installed under a different name. Are you sure Overwrite?\n Yes -> Use new「%s」\n No→ Use installed「%ls」" STR_PLGMGR_INST_USERCANCEL "User Cancel" STR_PLGMGR_INST_MAX "Plugin can not register any more" @@ -4156,7 +4154,7 @@ GDI Resource\tRemaining %d%%\n\n" STR_FILETREE_FROM_TYPE "Setting: Types" STR_FILETREE_FROM_FILE "Setting: %s" STR_FILETREE_CURDIR "" - STR_FILETREE_MAXCOUNT "ő吔(%d)𒴂ߐ؂̂Ă܂" + STR_FILETREE_MAXCOUNT "最大数(%d)を超えたため切り捨てました" STR_FILETREE_MENU_ROOT "&Ini Root" STR_FILETREE_MENU_MYDOC "M&y Document" STR_FILETREE_MENU_MYMUSIC "My &Music" From be14640baa8817a48763d2b02fd4e5836808c2eb Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Fri, 6 Nov 2020 01:35:34 +0900 Subject: [PATCH 0261/1024] =?UTF-8?q?.rc2=E3=81=AB=E7=A7=BB=E5=8B=95?= =?UTF-8?q?=E3=81=99=E3=82=8B=E3=82=82=E3=81=AE=E8=A6=8B=E7=9B=B4=E3=81=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/sakura_rc.rc2 | 119 +------------------------------------- 1 file changed, 1 insertion(+), 118 deletions(-) diff --git a/sakura_core/sakura_rc.rc2 b/sakura_core/sakura_rc.rc2 index d9bd76a7c3..3995b52409 100644 --- a/sakura_core/sakura_rc.rc2 +++ b/sakura_core/sakura_rc.rc2 @@ -1,118 +1 @@ -// このファイルにはリソースエディタで編集できない要素を配置します. -// このファイルのエンコーディングは UTF-16LE です. - -#define S_COPYRIGHT "Copyright (C) 1998-2020 by Norio Nakatani & Collaborators" -#define FL_VER PR_VER -#define FL_VER_STR PR_VER_STR - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_ABOUT DIALOG DISCARDABLE 0, 0, 260, 228 -STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "バージョン情報" -FONT 9, "MS Pゴシック" -BEGIN - ICON IDI_ICON_STD, IDC_STATIC_MYICON, 5, 5, 20, 20, SS_NOTIFY - EDITTEXT IDC_EDIT_VER, 33, 5, 219, 70, ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP - LTEXT "原作者: たけ(竹パンダ) さん", IDC_STATIC, 33, 75, 125, 10, NOT WS_GROUP - LTEXT S_COPYRIGHT, IDC_STATIC, 33, 85, 220, 11, NOT WS_GROUP | SS_NOPREFIX - LTEXT "Project URL:", IDC_STATIC_URL_CAPTION, 33, 103, 71, 10, NOT WS_GROUP - LTEXT "https://sakura-editor.github.io/", IDC_STATIC_URL_UR, 91, 103, 120, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP -#ifdef GIT_REMOTE_ORIGIN_URL - LTEXT "Source URL:", IDC_STATIC_GIT_CAPTION, 33, 114, 71, 10, NOT WS_GROUP - LTEXT GIT_REMOTE_ORIGIN_URL, IDC_STATIC_URL_GIT, 91, 114, 120, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP -#endif -#ifdef CI_BUILD_NUMBER_LABEL - LTEXT "Build URL:", IDC_STATIC_URL_CI_BUILD_CAPTION, 33, 125, 71, 10, NOT WS_GROUP - LTEXT CI_BUILD_NUMBER_LABEL, IDC_STATIC_URL_CI_BUILD, 91, 125, 120, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP -#endif -#if defined( GITHUB_COMMIT_URL ) || defined( GITHUB_PR_HEAD_URL ) - LTEXT "GitHub URL:", IDC_STATIC_URL_GITHUB_CAPTION, 33, 136, 50, 10, NOT WS_GROUP -#endif -#if defined( GITHUB_COMMIT_URL ) - LTEXT GIT_SHORT_COMMIT_HASH, IDC_STATIC_URL_GITHUB_COMMIT, 91, 136, 30, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP -#endif -#if defined( GITHUB_PR_HEAD_URL ) - LTEXT GITHUB_PR_NUMBER_LABEL, IDC_STATIC_URL_GITHUB_PR, 140, 136, 30, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP -#endif - EDITTEXT IDC_EDIT_ABOUT, 5, 152, 248, 53, ES_MULTILINE | ES_READONLY | WS_VSCROLL | NOT WS_TABSTOP - DEFPUSHBUTTON "&OK", IDOK, 112, 209, 50, 14 - PUSHBUTTON "情報をコピー(&C)", IDC_BUTTON_COPY, 193, 209, 60, 14 -END - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO DISCARDABLE -BEGIN - IDD_ABOUT, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 238 - TOPMARGIN, 7 - BOTTOMMARGIN, 196 - END -END -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -VS_VERSION_INFO VERSIONINFO - FILEVERSION FL_VER - PRODUCTVERSION PR_VER - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x01L -#else - FILEFLAGS 0x00L -#endif - FILEOS 0x40004L - FILETYPE 0x1L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "041104b0" - BEGIN - VALUE "Comments", "このソフトはフリーソフトです。\0" - VALUE "CompanyName", "Project: Sakura-Editor\0" - VALUE "FileDescription", "サクラエディタ\0" - VALUE "FileVersion", FL_VER_STR - VALUE "InternalName", "sakura\0" - VALUE "LegalCopyright", S_COPYRIGHT - VALUE "LegalTrademarks", " \0" - VALUE "OriginalFilename", "sakura.exe\0" - VALUE "ProductName", "サクラエディタ\0" - VALUE "ProductVersion", RESOURCE_VERSION_STRING(PR_VER_STR) // e.g. "2.3.2.0 (4a0de579) UNICODE 64bit DEBUG" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x411, 1200 - END -END - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -#ifdef _DEBUG -IDI_ICON_STD ICON DISCARDABLE "../resource/icon_debug.ico" -#else -IDI_ICON_STD ICON DISCARDABLE "../resource/icon_std.ico" -#endif -IDI_ICON_GREP ICON DISCARDABLE "../resource/icon_grep.ico" -IDI_PRINTER ICON DISCARDABLE "../resource/printer.ico" +⼯⃣膓껣莕ꇣ芤ꯣ膫꿣莪뷣莼맣芨蟣芣뿣膧꣩鮆꟣膍ꫣ膄臧뒠鋩薍껣膗뻣膙⸊⼯⃣膓껣莕ꇣ芤ꯣ膮꣣莳돣莼蟣芣돣芰꼠啔䘭ㄶ䱅⃣膧餮ਊ⍤敦楮攉卟䍏偙剉䝈吉≃潰祲楧桴
䌩‱㤹㠭㈰㈰†批⁎潲楯⁎慫慴慮椠☠䍯汬慢潲慴潲猢ਣ摥晩湥⁆䱟噅刉ॐ剟噅刊⍤敦楮攠䙌彖䕒当呒ॐ剟噅剟協刊ਯ⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯ਯ⼊⼯⁄楡汯朊⼯ਊ䥄䑟䅂何吠䑉䅌佇⁄䥓䍁剄䅂䱅†〬‰Ⱐ㈶〬′㈸੓呙䱅⁄卟䵏䑁䱆剁䵅⁼⁄卟䍅乔䕒⁼⁗卟偏偕倠簠坓彃䅐呉低⁼⁗卟卙卍䕎唊䍁偔䥏丠⋣莐볣芸꟣莳藥ꂱ∊䙏乔‹Ⱐ⋯벭댠냣芴럣莃꼢ੂ䕇䥎ਠ†⁉䍏丠†††††⁉䑉彉䍏也協䐬⁉䑃当呁呉䍟䵙䥃低Ⱐ㔬‵Ⱐ㈰Ⱐ㈰Ⱐ卓彎佔䥆夊††䕄䥔呅塔††††䥄䍟䕄䥔彖䕒Ⱐ㌳Ⱐ㔬′ㄹⰠ㜰Ⱐ䕓彍啌呉䱉久⁼⁅卟剅䅄低䱙⁼⁎佔⁗卟䉏剄䕒⁼⁎佔⁗卟呁䉓呏倊††䱔䕘吠†††††⋥躟鳨肅㨠鿣膑⣧ꮹ釣莳耩⃣膕錢Ⱐ䥄䍟協䅔䥃Ⱐ㌳Ⱐ㜵Ⱐㄲ㔬‱〬⁎佔⁗卟䝒何倊††䱔䕘吠†††††卟䍏偙剉䝈听⁉䑃当呁呉䌬″㌬‸㔬′㈰ⰠㄱⰠ乏吠坓彇剏啐⁼⁓卟乏偒䕆䥘ਠ†⁌呅塔†††††•偲潪散琠啒䰺∬⁉䑃当呁呉䍟啒䱟䍁偔䥏丬″㌬‱〳Ⱐ㜱Ⱐ㄰Ⱐ乏吠坓彇剏啐ਠ†⁌呅塔†††††•桴瑰猺⼯獡歵牡ⵥ摩瑯爮杩瑨畢⹩漯∬⁉䑃当呁呉䍟啒䱟啒Ⱐ㤱Ⱐ㄰㌬‱㈰Ⱐ㄰Ⱐ卓彎佔䥆夠簠乏吠坓彇剏啐⁼⁗卟呁䉓呏倊⍩晤敦⁇䥔归䕍佔䕟佒䥇䥎录剌ਠ†⁌呅塔†††††•卯畲捥⁕剌㨢Ⱐ䥄䍟協䅔䥃彇䥔彃䅐呉低Ⱐ㌳Ⱐㄱ㐬‷ㄬ‱〬⁎佔⁗卟䝒何倊ौ呅塔†††††⁇䥔归䕍佔䕟佒䥇䥎录剌Ⱐ䥄䍟協䅔䥃录剌彇䥔Ⱐ㤱Ⱐㄱ㐬‱㈰Ⱐ㄰Ⱐ卓彎佔䥆夠簠乏吠坓彇剏啐⁼⁗卟呁䉓呏倊⍥湤楦ਣ楦摥映䍉彂啉䱄彎啍䉅剟䱁䉅䰊††䱔䕘吠†††††≂畩汤⁕剌㨢Ⱐ䥄䍟協䅔䥃录剌彃䥟䉕䥌䑟䍁偔䥏丬″㌬‱㈵Ⱐ㜱Ⱐ㄰Ⱐ乏吠坓彇剏啐ਠ†⁌呅塔†††††⁃䥟䉕䥌䑟乕䵂䕒彌䅂䕌Ⱐ䥄䍟協䅔䥃录剌彃䥟䉕䥌䐬‹ㄬ‱㈵Ⱐㄲ〬‱〬⁓卟乏呉䙙⁼⁎佔⁗卟䝒何倠簠坓彔䅂協佐ਣ敮摩昊⍩映摥晩湥搨⁇䥔䡕䉟䍏䵍䥔录剌
⁼簠摥晩湥搨⁇䥔䡕䉟偒彈䕁䑟啒䰠⤊††䱔䕘吠†††††≇楴䡵戠啒䰺∬⁉䑃当呁呉䍟啒䱟䝉呈啂彃䅐呉低Ⱐ㌳Ⱐㄳ㘬‵〬‱〬⁎佔⁗卟䝒何倊⍥湤楦ਣ楦⁤敦楮敤⠠䝉呈啂彃位䵉呟啒䰠⤊††䱔䕘吠†††††䝉呟午佒呟䍏䵍䥔彈䅓䠬⁉䑃当呁呉䍟啒䱟䝉呈啂彃位䵉听‹ㄬ‱㌶Ⱐ㌰Ⱐ㄰Ⱐ卓彎佔䥆夠簠乏吠坓彇剏啐⁼⁗卟呁䉓呏倊⍥湤楦ਣ楦⁤敦楮敤⠠䝉呈啂彐剟䡅䅄录剌
ਠ†⁌呅塔†††††⁇䥔䡕䉟偒彎啍䉅剟䱁䉅䰬⁉䑃当呁呉䍟啒䱟䝉呈啂彐刬‱㐰Ⱐㄳ㘬″〬‱〬⁓卟乏呉䙙⁼⁎佔⁗卟䝒何倠簠坓彔䅂協佐ਣ敮摩昊††䕄䥔呅塔††††䥄䍟䕄䥔彁䉏啔Ⱐ㔬‱㔲Ⱐ㈴㠬‵㌬⁅卟䵕䱔䥌䥎䔠簠䕓归䕁䑏乌夠簠坓彖千剏䱌⁼⁎佔⁗卟呁䉓呏倊††䑅䙐啓䡂啔呏丠†∦佋∬⁉䑏䬬‱ㄲⰠ㈰㤬‵〬‱㐊††偕午䉕呔低†††⋦莅뇣芒돣莔밨♃⤢Ⱐ䥄䍟䉕呔低彃佐夬‱㤳Ⱐ㈰㤬‶〬‱㐊䕎䐊ਯ⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯ਯ⼊⼯⁄䕓䥇义乆伊⼯ਊ⍩晤敦⁁偓呕䑉佟䥎噏䭅䐊䝕䥄䕌䥎䕓⁄䕓䥇义乆传䑉千䅒䑁䉌䔠ੂ䕇䥎ਠ†⁉䑄彁䉏啔Ⱐ䑉䅌佇ਠ†⁂䕇䥎ਠ†††⁌䕆呍䅒䝉丬‷ਠ†††⁒䥇䡔䵁則䥎Ⱐ㈳㠊††††呏偍䅒䝉丬‷ਠ†††⁂佔呏䵍䅒䝉丬‱㤶ਠ†⁅乄੅乄ਣ敮摩映† ⼠䅐協啄䥏彉乖佋䕄ਊਯ⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯ਯ⼊⼯⁖敲獩潮ਯ⼊੖卟噅剓䥏也䥎䙏⁖䕒卉低䥎䙏ਠ䙉䱅噅剓䥏丠†⁆䱟噅刊⁐剏䑕䍔噅剓䥏丠偒彖䕒ਠ䙉䱅䙌䅇卍䅓䬠へ㍦䰊⍩晤敦 䑅䉕䜊⁆䥌䕆䱁䝓‰砰ㅌਣ敬獥ਠ䙉䱅䙌䅇匠へ〰䰊⍥湤楦ਠ䙉䱅体‰破〰〴䰊⁆䥌䕔奐䔠へㅌਠ䙉䱅单䉔奐䔠へがੂ䕇䥎ਠ†⁂䱏䍋•却物湧䙩汥䥮景∊††䉅䝉上††††䉌佃䬠∰㐱㄰㑢〢ਠ†††⁂䕇䥎ਠ†††††⁖䅌啅•䍯浭敮瑳∬•鏣膮뷣莕裣膯闣莪볣芽闣莈꟣膙艜〢ਠ†††††⁖䅌啅•䍯浰慮祎慭攢Ⱐ≐牯橥捴㨠卡歵牡ⵅ摩瑯牜〢ਠ†††††⁖䅌啅•䙩汥䑥獣物灴楯渢Ⱐ⋣芵꿣莩꣣莇ꏣ芿尰∊††††††噁䱕䔠≆楬敖敲獩潮∬⁆䱟噅剟協刊††††††噁䱕䔠≉湴敲湡汎慭攢Ⱐ≳慫畲慜〢ਠ†††††⁖䅌啅•䱥条汃潰祲楧桴∬⁓彃佐奒䥇䡔ਠ†††††⁖䅌啅•䱥条汔牡摥浡牫猢Ⱐ∠尰∊††††††噁䱕䔠≏物杩湡汆楬敮慭攢Ⱐ≳慫畲愮數敜〢ਠ†††††⁖䅌啅•偲潤畣瑎慭攢Ⱐ⋣芵꿣莩꣣莇ꏣ芿尰∊††††††噁䱕䔠≐牯摵捴噥牳楯渢Ⱐ剅协啒䍅彖䕒卉低当呒䥎䜨偒彖䕒当呒⤠⼯⁥⹧⸠∲⸳⸲⸰
㑡つ攵㜹⤠啎䥃佄䔠㘴扩琠䑅䉕䜢ਠ†††⁅乄ਠ†⁅乄ਠ†⁂䱏䍋•噡牆楬敉湦漢ਠ†⁂䕇䥎ਠ†††⁖䅌啅•呲慮獬慴楯渢Ⱐへ㐱ㄬ‱㈰《††䕎䐊䕎䐊ਯ⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯ਯ⼊⼯⁉捯渊⼯ਊ⼯⁉捯渠睩瑨潷敳琠䥄⁶慬略⁰污捥搠晩牳琠瑯⁥湳畲攠慰灬楣慴楯渠楣潮ਯ⼠牥浡楮猠捯湳楳瑥湴渠慬氠獹獴敭献ਣ楦摥映彄䕂啇੉䑉彉䍏也協䐠†††††⁉䍏丠†⁄䥓䍁剄䅂䱅††•⸮⽲敳潵牣支楣潮彤敢畧⹩捯∊⍥汳攊䥄䥟䥃低当呄††††††䥃低††䑉千䅒䑁䉌䔠††∮ⸯ牥獯畲捥⽩捯湟獴搮楣漢ਣ敮摩昊䥄䥟䥃低彇剅倠†††††䥃低††䑉千䅒䑁䉌䔠††∮ⸯ牥獯畲捥⽩捯湟杲数⹩捯∊䥄䥟偒䥎呅删††††††䥃低††䑉千䅒䑁䉌䔠††∮ⸯ牥獯畲捥⽰物湴敲⹩捯∊ \ No newline at end of file From 0177eb65c9f7f8d836434ff2262043c6a887c8aa Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sun, 8 Nov 2020 01:30:45 +0900 Subject: [PATCH 0262/1024] =?UTF-8?q?=E8=8B=B1=E8=AA=9E=E3=83=AA=E3=82=BD?= =?UTF-8?q?=E3=83=BC=E3=82=B9=E3=82=82.rc/.rc2=E5=88=86=E9=9B=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/sakura_rc.rc2 | 147 +- sakura_lang_en_US/sakura_lang_en_US.vcxproj | 33 + .../sakura_lang_en_US.vcxproj.filters | 90 + sakura_lang_en_US/sakura_lang_rc.rc | 5978 ++++++++--------- sakura_lang_en_US/sakura_lang_rc.rc2 | 151 + 5 files changed, 3371 insertions(+), 3028 deletions(-) create mode 100644 sakura_lang_en_US/sakura_lang_en_US.vcxproj.filters create mode 100644 sakura_lang_en_US/sakura_lang_rc.rc2 diff --git a/sakura_core/sakura_rc.rc2 b/sakura_core/sakura_rc.rc2 index 3995b52409..d92fc2b1c4 100644 --- a/sakura_core/sakura_rc.rc2 +++ b/sakura_core/sakura_rc.rc2 @@ -1 +1,146 @@ -⼯⃣膓껣莕ꇣ芤ꯣ膫꿣莪뷣莼맣芨蟣芣뿣膧꣩鮆꟣膍ꫣ膄臧뒠鋩薍껣膗뻣膙⸊⼯⃣膓껣莕ꇣ芤ꯣ膮꣣莳돣莼蟣芣돣芰꼠啔䘭ㄶ䱅⃣膧餮ਊ⍤敦楮攉卟䍏偙剉䝈吉≃潰祲楧桴
䌩‱㤹㠭㈰㈰†批⁎潲楯⁎慫慴慮椠☠䍯汬慢潲慴潲猢ਣ摥晩湥⁆䱟噅刉ॐ剟噅刊⍤敦楮攠䙌彖䕒当呒ॐ剟噅剟協刊ਯ⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯ਯ⼊⼯⁄楡汯朊⼯ਊ䥄䑟䅂何吠䑉䅌佇⁄䥓䍁剄䅂䱅†〬‰Ⱐ㈶〬′㈸੓呙䱅⁄卟䵏䑁䱆剁䵅⁼⁄卟䍅乔䕒⁼⁗卟偏偕倠簠坓彃䅐呉低⁼⁗卟卙卍䕎唊䍁偔䥏丠⋣莐볣芸꟣莳藥ꂱ∊䙏乔‹Ⱐ⋯벭댠냣芴럣莃꼢ੂ䕇䥎ਠ†⁉䍏丠†††††⁉䑉彉䍏也協䐬⁉䑃当呁呉䍟䵙䥃低Ⱐ㔬‵Ⱐ㈰Ⱐ㈰Ⱐ卓彎佔䥆夊††䕄䥔呅塔††††䥄䍟䕄䥔彖䕒Ⱐ㌳Ⱐ㔬′ㄹⰠ㜰Ⱐ䕓彍啌呉䱉久⁼⁅卟剅䅄低䱙⁼⁎佔⁗卟䉏剄䕒⁼⁎佔⁗卟呁䉓呏倊††䱔䕘吠†††††⋥躟鳨肅㨠鿣膑⣧ꮹ釣莳耩⃣膕錢Ⱐ䥄䍟協䅔䥃Ⱐ㌳Ⱐ㜵Ⱐㄲ㔬‱〬⁎佔⁗卟䝒何倊††䱔䕘吠†††††卟䍏偙剉䝈听⁉䑃当呁呉䌬″㌬‸㔬′㈰ⰠㄱⰠ乏吠坓彇剏啐⁼⁓卟乏偒䕆䥘ਠ†⁌呅塔†††††•偲潪散琠啒䰺∬⁉䑃当呁呉䍟啒䱟䍁偔䥏丬″㌬‱〳Ⱐ㜱Ⱐ㄰Ⱐ乏吠坓彇剏啐ਠ†⁌呅塔†††††•桴瑰猺⼯獡歵牡ⵥ摩瑯爮杩瑨畢⹩漯∬⁉䑃当呁呉䍟啒䱟啒Ⱐ㤱Ⱐ㄰㌬‱㈰Ⱐ㄰Ⱐ卓彎佔䥆夠簠乏吠坓彇剏啐⁼⁗卟呁䉓呏倊⍩晤敦⁇䥔归䕍佔䕟佒䥇䥎录剌ਠ†⁌呅塔†††††•卯畲捥⁕剌㨢Ⱐ䥄䍟協䅔䥃彇䥔彃䅐呉低Ⱐ㌳Ⱐㄱ㐬‷ㄬ‱〬⁎佔⁗卟䝒何倊ौ呅塔†††††⁇䥔归䕍佔䕟佒䥇䥎录剌Ⱐ䥄䍟協䅔䥃录剌彇䥔Ⱐ㤱Ⱐㄱ㐬‱㈰Ⱐ㄰Ⱐ卓彎佔䥆夠簠乏吠坓彇剏啐⁼⁗卟呁䉓呏倊⍥湤楦ਣ楦摥映䍉彂啉䱄彎啍䉅剟䱁䉅䰊††䱔䕘吠†††††≂畩汤⁕剌㨢Ⱐ䥄䍟協䅔䥃录剌彃䥟䉕䥌䑟䍁偔䥏丬″㌬‱㈵Ⱐ㜱Ⱐ㄰Ⱐ乏吠坓彇剏啐ਠ†⁌呅塔†††††⁃䥟䉕䥌䑟乕䵂䕒彌䅂䕌Ⱐ䥄䍟協䅔䥃录剌彃䥟䉕䥌䐬‹ㄬ‱㈵Ⱐㄲ〬‱〬⁓卟乏呉䙙⁼⁎佔⁗卟䝒何倠簠坓彔䅂協佐ਣ敮摩昊⍩映摥晩湥搨⁇䥔䡕䉟䍏䵍䥔录剌
⁼簠摥晩湥搨⁇䥔䡕䉟偒彈䕁䑟啒䰠⤊††䱔䕘吠†††††≇楴䡵戠啒䰺∬⁉䑃当呁呉䍟啒䱟䝉呈啂彃䅐呉低Ⱐ㌳Ⱐㄳ㘬‵〬‱〬⁎佔⁗卟䝒何倊⍥湤楦ਣ楦⁤敦楮敤⠠䝉呈啂彃位䵉呟啒䰠⤊††䱔䕘吠†††††䝉呟午佒呟䍏䵍䥔彈䅓䠬⁉䑃当呁呉䍟啒䱟䝉呈啂彃位䵉听‹ㄬ‱㌶Ⱐ㌰Ⱐ㄰Ⱐ卓彎佔䥆夠簠乏吠坓彇剏啐⁼⁗卟呁䉓呏倊⍥湤楦ਣ楦⁤敦楮敤⠠䝉呈啂彐剟䡅䅄录剌
ਠ†⁌呅塔†††††⁇䥔䡕䉟偒彎啍䉅剟䱁䉅䰬⁉䑃当呁呉䍟啒䱟䝉呈啂彐刬‱㐰Ⱐㄳ㘬″〬‱〬⁓卟乏呉䙙⁼⁎佔⁗卟䝒何倠簠坓彔䅂協佐ਣ敮摩昊††䕄䥔呅塔††††䥄䍟䕄䥔彁䉏啔Ⱐ㔬‱㔲Ⱐ㈴㠬‵㌬⁅卟䵕䱔䥌䥎䔠簠䕓归䕁䑏乌夠簠坓彖千剏䱌⁼⁎佔⁗卟呁䉓呏倊††䑅䙐啓䡂啔呏丠†∦佋∬⁉䑏䬬‱ㄲⰠ㈰㤬‵〬‱㐊††偕午䉕呔低†††⋦莅뇣芒돣莔밨♃⤢Ⱐ䥄䍟䉕呔低彃佐夬‱㤳Ⱐ㈰㤬‶〬‱㐊䕎䐊ਯ⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯ਯ⼊⼯⁄䕓䥇义乆伊⼯ਊ⍩晤敦⁁偓呕䑉佟䥎噏䭅䐊䝕䥄䕌䥎䕓⁄䕓䥇义乆传䑉千䅒䑁䉌䔠ੂ䕇䥎ਠ†⁉䑄彁䉏啔Ⱐ䑉䅌佇ਠ†⁂䕇䥎ਠ†††⁌䕆呍䅒䝉丬‷ਠ†††⁒䥇䡔䵁則䥎Ⱐ㈳㠊††††呏偍䅒䝉丬‷ਠ†††⁂佔呏䵍䅒䝉丬‱㤶ਠ†⁅乄੅乄ਣ敮摩映† ⼠䅐協啄䥏彉乖佋䕄ਊਯ⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯ਯ⼊⼯⁖敲獩潮ਯ⼊੖卟噅剓䥏也䥎䙏⁖䕒卉低䥎䙏ਠ䙉䱅噅剓䥏丠†⁆䱟噅刊⁐剏䑕䍔噅剓䥏丠偒彖䕒ਠ䙉䱅䙌䅇卍䅓䬠へ㍦䰊⍩晤敦 䑅䉕䜊⁆䥌䕆䱁䝓‰砰ㅌਣ敬獥ਠ䙉䱅䙌䅇匠へ〰䰊⍥湤楦ਠ䙉䱅体‰破〰〴䰊⁆䥌䕔奐䔠へㅌਠ䙉䱅单䉔奐䔠へがੂ䕇䥎ਠ†⁂䱏䍋•却物湧䙩汥䥮景∊††䉅䝉上††††䉌佃䬠∰㐱㄰㑢〢ਠ†††⁂䕇䥎ਠ†††††⁖䅌啅•䍯浭敮瑳∬•鏣膮뷣莕裣膯闣莪볣芽闣莈꟣膙艜〢ਠ†††††⁖䅌啅•䍯浰慮祎慭攢Ⱐ≐牯橥捴㨠卡歵牡ⵅ摩瑯牜〢ਠ†††††⁖䅌啅•䙩汥䑥獣物灴楯渢Ⱐ⋣芵꿣莩꣣莇ꏣ芿尰∊††††††噁䱕䔠≆楬敖敲獩潮∬⁆䱟噅剟協刊††††††噁䱕䔠≉湴敲湡汎慭攢Ⱐ≳慫畲慜〢ਠ†††††⁖䅌啅•䱥条汃潰祲楧桴∬⁓彃佐奒䥇䡔ਠ†††††⁖䅌啅•䱥条汔牡摥浡牫猢Ⱐ∠尰∊††††††噁䱕䔠≏物杩湡汆楬敮慭攢Ⱐ≳慫畲愮數敜〢ਠ†††††⁖䅌啅•偲潤畣瑎慭攢Ⱐ⋣芵꿣莩꣣莇ꏣ芿尰∊††††††噁䱕䔠≐牯摵捴噥牳楯渢Ⱐ剅协啒䍅彖䕒卉低当呒䥎䜨偒彖䕒当呒⤠⼯⁥⹧⸠∲⸳⸲⸰
㑡つ攵㜹⤠啎䥃佄䔠㘴扩琠䑅䉕䜢ਠ†††⁅乄ਠ†⁅乄ਠ†⁂䱏䍋•噡牆楬敉湦漢ਠ†⁂䕇䥎ਠ†††⁖䅌啅•呲慮獬慴楯渢Ⱐへ㐱ㄬ‱㈰《††䕎䐊䕎䐊ਯ⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯⼯ਯ⼊⼯⁉捯渊⼯ਊ⼯⁉捯渠睩瑨潷敳琠䥄⁶慬略⁰污捥搠晩牳琠瑯⁥湳畲攠慰灬楣慴楯渠楣潮ਯ⼠牥浡楮猠捯湳楳瑥湴渠慬氠獹獴敭献ਣ楦摥映彄䕂啇੉䑉彉䍏也協䐠†††††⁉䍏丠†⁄䥓䍁剄䅂䱅††•⸮⽲敳潵牣支楣潮彤敢畧⹩捯∊⍥汳攊䥄䥟䥃低当呄††††††䥃低††䑉千䅒䑁䉌䔠††∮ⸯ牥獯畲捥⽩捯湟獴搮楣漢ਣ敮摩昊䥄䥟䥃低彇剅倠†††††䥃低††䑉千䅒䑁䉌䔠††∮ⸯ牥獯畲捥⽩捯湟杲数⹩捯∊䥄䥟偒䥎呅删††††††䥃低††䑉千䅒䑁䉌䔠††∮ⸯ牥獯畲捥⽰物湴敲⹩捯∊ \ No newline at end of file +// このファイルにはリソースエディタで編集できない要素を配置します. +// このファイルのエンコーディング/改行コードは UTF-16LE(BOM)/CRLF です. + +#define S_COPYRIGHT "Copyright (C) 1998-2020 by Norio Nakatani & Collaborators" +#define FL_VER PR_VER +#define FL_VER_STR PR_VER_STR + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_ABOUT DIALOG 0, 0, 260, 228 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "バージョン情報" +FONT 9, "MS Pゴシック" +BEGIN + ICON IDI_ICON_STD, IDC_STATIC_MYICON, 5, 5, 20, 20, SS_NOTIFY + EDITTEXT IDC_EDIT_VER, 33, 5, 219, 70, ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "原作者: たけ(竹パンダ) さん", IDC_STATIC, 33, 75, 125, 10, NOT WS_GROUP + LTEXT S_COPYRIGHT, IDC_STATIC, 33, 85, 220, 11, NOT WS_GROUP | SS_NOPREFIX + LTEXT "Project URL:", IDC_STATIC_URL_CAPTION, 33, 103, 71, 10, NOT WS_GROUP + LTEXT "https://sakura-editor.github.io/", IDC_STATIC_URL_UR, 91, 103, 120, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP +#ifdef GIT_REMOTE_ORIGIN_URL + LTEXT "Source URL:", IDC_STATIC_GIT_CAPTION, 33, 114, 71, 10, NOT WS_GROUP + LTEXT GIT_REMOTE_ORIGIN_URL, IDC_STATIC_URL_GIT, 91, 114, 120, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP +#endif +#ifdef CI_BUILD_NUMBER_LABEL + LTEXT "Build URL:", IDC_STATIC_URL_CI_BUILD_CAPTION, 33, 125, 71, 10, NOT WS_GROUP + LTEXT CI_BUILD_NUMBER_LABEL, IDC_STATIC_URL_CI_BUILD, 91, 125, 120, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP +#endif +#if defined( GITHUB_COMMIT_URL ) || defined( GITHUB_PR_HEAD_URL ) + LTEXT "GitHub URL:", IDC_STATIC_URL_GITHUB_CAPTION, 33, 136, 50, 10, NOT WS_GROUP +#endif +#if defined( GITHUB_COMMIT_URL ) + LTEXT GIT_SHORT_COMMIT_HASH, IDC_STATIC_URL_GITHUB_COMMIT, 91, 136, 30, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP +#endif +#if defined( GITHUB_PR_HEAD_URL ) + LTEXT GITHUB_PR_NUMBER_LABEL, IDC_STATIC_URL_GITHUB_PR, 140, 136, 30, 10, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP +#endif + EDITTEXT IDC_EDIT_ABOUT, 5, 152, 248, 53, ES_MULTILINE | ES_READONLY | WS_VSCROLL | NOT WS_TABSTOP + DEFPUSHBUTTON "&OK", IDOK, 112, 209, 50, 14 + PUSHBUTTON "情報をコピー(&C)", IDC_BUTTON_COPY, 193, 209, 60, 14 +END + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO DISCARDABLE +BEGIN + IDD_ABOUT, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 238 + TOPMARGIN, 7 + BOTTOMMARGIN, 196 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION FL_VER + PRODUCTVERSION PR_VER + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x01L +#else + FILEFLAGS 0x00L +#endif + FILEOS 0x40004L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "041104b0" + BEGIN + VALUE "Comments", "このソフトはフリーソフトです。\0" + VALUE "CompanyName", "Project: Sakura-Editor\0" + VALUE "FileDescription", "サクラエディタ\0" + VALUE "FileVersion", FL_VER_STR + VALUE "InternalName", "sakura\0" + VALUE "LegalCopyright", S_COPYRIGHT + VALUE "LegalTrademarks", " \0" + VALUE "OriginalFilename", "sakura.exe\0" + VALUE "ProductName", "サクラエディタ\0" + VALUE "ProductVersion", RESOURCE_VERSION_STRING(PR_VER_STR) // e.g. "2.3.2.0 (4a0de579) UNICODE 64bit DEBUG" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x411, 1200 + END +END + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +#ifdef _DEBUG +IDI_ICON_STD ICON "../resource/icon_debug.ico" +#else +IDI_ICON_STD ICON "../resource/icon_std.ico" +#endif + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + // CBregexp.cpp +#ifdef _M_IA64 + STR_BREGONIG_LOAD "bregonig.dll のロードに失敗しました。\r\n正規表現を利用するには Unicode/IA64 版の bregonig.dll が必要です。\r\n入手方法はヘルプを参照してください。" +#elif defined(_M_AMD64) + STR_BREGONIG_LOAD "bregonig.dll のロードに失敗しました。\r\n正規表現を利用するには Unicode/x64 版の bregonig.dll が必要です。\r\n入手方法はヘルプを参照してください。" +#else + STR_BREGONIG_LOAD "bregonig.dll のロードに失敗しました。\r\n正規表現を利用するには Unicode 版の bregonig.dll が必要です。\r\n入手方法はヘルプを参照してください。" +#endif +#ifdef _M_IA64 + STR_BREGONIG_INIT "bregonig.dll の利用に失敗しました。\r\n正規表現を利用するには Unicode/IA64 版の bregonig.dll が必要です。\r\n入手方法はヘルプを参照してください。" +#elif defined(_M_AMD64) + STR_BREGONIG_INIT "bregonig.dll の利用に失敗しました。\r\n正規表現を利用するには Unicode/x64 版の bregonig.dll が必要です。\r\n入手方法はヘルプを参照してください。" +#else + STR_BREGONIG_INIT "bregonig.dll の利用に失敗しました。\r\n正規表現を利用するには Unicode 版の bregonig.dll が必要です。\r\n入手方法はヘルプを参照してください。" +#endif + + // Select Language + STR_SELLANG_NAME "Japanese" // language name [Primary language (Sublanguage)] + STR_SELLANG_LANGID "0x0411" // language id (hexadecimal string) + // See following link: + // http://msdn.microsoft.com/en-us/library/dd318693.aspx +END diff --git a/sakura_lang_en_US/sakura_lang_en_US.vcxproj b/sakura_lang_en_US/sakura_lang_en_US.vcxproj index 0dcffcb236..3c4305b708 100644 --- a/sakura_lang_en_US/sakura_lang_en_US.vcxproj +++ b/sakura_lang_en_US/sakura_lang_en_US.vcxproj @@ -143,6 +143,39 @@ {af03508c-515e-4a0e-87be-67ed1e254bd0} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sakura_lang_en_US/sakura_lang_en_US.vcxproj.filters b/sakura_lang_en_US/sakura_lang_en_US.vcxproj.filters new file mode 100644 index 0000000000..56c240ed4a --- /dev/null +++ b/sakura_lang_en_US/sakura_lang_en_US.vcxproj.filters @@ -0,0 +1,90 @@ + + + + + + + + {fb40f358-c2bb-436a-b87f-5c9ca3697244} + + + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + \ No newline at end of file diff --git a/sakura_lang_en_US/sakura_lang_rc.rc b/sakura_lang_en_US/sakura_lang_rc.rc index 90bdf06ff3..2ab156380a 100644 --- a/sakura_lang_en_US/sakura_lang_rc.rc +++ b/sakura_lang_en_US/sakura_lang_rc.rc @@ -1,5 +1,6 @@ -//Microsoft Developer Studio generated resource script. - +// Microsoft Visual C++ generated resource script. +// +#include "..\sakura_core\sakura_rc.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// @@ -10,7 +11,6 @@ #include #undef APSTUDIO_HIDDEN_SYMBOLS -#include "sakura_rc.h" #include "Funccode_define.h" #include "String_define.h" #include "version.h" @@ -19,19 +19,10 @@ #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// -// English resources - -/* LMP (Lucien Murray-Pitts) : 2011-02-26 Added Basic English Translation Resources */ +// 英語 (米国) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -#ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#endif //_WIN32 - -#define S_COPYRIGHT "Copyright (C) 1998-2020 by Norio Nakatani & Collaborators" -#define S_COPYRIGHT_TRANSLATION "Copyright (C) 2011-2020 by Lucien & Collaborators" -#define FL_VER PR_VER -#define FL_VER_STR PR_VER_STR #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// @@ -41,7 +32,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US 1 TEXTINCLUDE BEGIN - "sakura_rc.h\0" + "..\\sakura_core\\sakura_rc.h\0" END 2 TEXTINCLUDE @@ -50,7 +41,6 @@ BEGIN "#include \r\n" "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" "\r\n" - "#include ""sakura_rc.h""\r\n" "#include ""Funccode_define.h""\r\n" "#include ""String_define.h""\r\n" "#include ""version.h""\r\n" @@ -59,7 +49,7 @@ END 3 TEXTINCLUDE BEGIN - "\r\n" + "#include ""sakura_lang_rc.rc2""\r\n" "\0" END @@ -72,105 +62,76 @@ END // IDD_FIND DIALOGEX 30, 0, 284, 93 -STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP CAPTION "Search" -FONT 9, "Tahoma" -BEGIN - LTEXT "Fi&nd what", IDC_STATIC, 5, 6, 45, 8 - COMBOBOX IDC_COMBO_TEXT, 51, 4, 166, 150, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - CONTROL "Match Whole &Word", IDC_CHK_WORD, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 5, 21, 130, 10 - CONTROL "&Case Sensitive", IDC_CHK_LOHICASE, "Button", BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP, 5, 32, 130, 10 - CONTROL "R&egex", IDC_CHK_REGULAREXP, "Button", BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP, 5, 43, 55, 10 - CONTROL "Display a &message if not found", IDC_CHECK_NOTIFYNOTFOUND, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 54, 140, 10 - CONTROL "Automatica&lly close the search dialog", IDC_CHECK_bAutoCloseDlgFind, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 65, 140, 10 - CONTROL "Re-start search from beginning(end)(&Z)", IDC_CHECK_SEARCHALL, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 76, 130, 10 - LTEXT "", IDC_STATIC_JRE32VER, 62, 43, 154, 10 - PUSHBUTTON "Previo&us", IDC_BUTTON_SEARCHPREV, 221, 4, 58, 14, WS_GROUP - DEFPUSHBUTTON "Next(&D)", IDC_BUTTON_SEARCHNEXT, 221, 20, 58, 14 - PUSHBUTTON "&Bookmark", IDC_BUTTON_SETMARK, 221, 38, 58, 14 - PUSHBUTTON "Cancel(&X)", IDCANCEL, 221, 57, 58, 14, WS_GROUP - PUSHBUTTON "&Help", IDC_BUTTON_HELP, 221, 73, 58, 14 -END - -IDD_ABOUT DIALOG DISCARDABLE 0, 0, 245, 228 -STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Version Information" -FONT 9, "Tahoma" -BEGIN - ICON IDI_ICON_STD, IDC_STATIC_MYICON, 5, 5, 20, 20, SS_NOTIFY - EDITTEXT IDC_EDIT_VER, 33, 6, 204, 51, ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP - LTEXT "Original Author: Take-san(竹パンダ) さん", IDC_STATIC, 33, 61, 125, 8, NOT WS_GROUP - LTEXT S_COPYRIGHT, IDC_STATIC, 33, 75, 205, 8, NOT WS_GROUP | SS_NOPREFIX - LTEXT "Translation:",IDC_STATIC,33,90,41,8 - LTEXT S_COPYRIGHT_TRANSLATION,IDC_STATIC,74,90,164,8,SS_NOPREFIX | NOT WS_GROUP - LTEXT "Project URL:", IDC_STATIC_URL_CAPTION, 33, 103, 71, 8, NOT WS_GROUP - LTEXT "https://sakura-editor.github.io/", IDC_STATIC_URL_UR, 101, 103, 120, 8, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP -#ifdef GIT_REMOTE_ORIGIN_URL - LTEXT "Source URL:", IDC_STATIC_GIT_CAPTION, 33, 113, 71, 8, NOT WS_GROUP - LTEXT GIT_REMOTE_ORIGIN_URL, IDC_STATIC_URL_GIT, 101, 113, 120, 8, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP -#endif -#ifdef CI_BUILD_NUMBER_LABEL - LTEXT "Build URL:", IDC_STATIC_URL_CI_BUILD_CAPTION, 33, 123, 71, 8, NOT WS_GROUP - LTEXT CI_BUILD_NUMBER_LABEL, IDC_STATIC_URL_CI_BUILD, 101, 123, 120, 8, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP -#endif -#if defined( GITHUB_COMMIT_URL ) || defined( GITHUB_PR_HEAD_URL ) - LTEXT "GitHub URL:", IDC_STATIC_URL_GITHUB_CAPTION, 33, 133, 50, 8, NOT WS_GROUP -#endif -#if defined( GITHUB_COMMIT_URL ) - LTEXT GIT_SHORT_COMMIT_HASH, IDC_STATIC_URL_GITHUB_COMMIT, 101, 133, 30, 8, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP -#endif -#if defined( GITHUB_PR_HEAD_URL ) - LTEXT GITHUB_PR_NUMBER_LABEL, IDC_STATIC_URL_GITHUB_PR, 150, 133, 30, 8, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP -#endif - EDITTEXT IDC_EDIT_ABOUT, 5, 146, 233, 53, ES_MULTILINE | ES_READONLY | WS_VSCROLL | NOT WS_TABSTOP - DEFPUSHBUTTON "&OK", IDOK, 97, 203, 50, 14 - PUSHBUTTON "&Copy to Clipboard", IDC_BUTTON_COPY, 178, 203, 60, 14 +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + LTEXT "Fi&nd what",IDC_STATIC,5,6,45,8 + COMBOBOX IDC_COMBO_TEXT,51,4,166,150,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + CONTROL "Match Whole &Word",IDC_CHK_WORD,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,5,21,130,10 + CONTROL "&Case Sensitive",IDC_CHK_LOHICASE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,5,32,130,10 + CONTROL "R&egex",IDC_CHK_REGULAREXP,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,5,43,55,10 + CONTROL "Display a &message if not found",IDC_CHECK_NOTIFYNOTFOUND, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,54,140,10 + CONTROL "Automatica&lly close the search dialog",IDC_CHECK_bAutoCloseDlgFind, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,65,140,10 + CONTROL "Re-start search from beginning(end)(&Z)",IDC_CHECK_SEARCHALL, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,76,130,10 + LTEXT "",IDC_STATIC_JRE32VER,62,43,154,10 + PUSHBUTTON "Previo&us",IDC_BUTTON_SEARCHPREV,221,4,58,14,WS_GROUP + DEFPUSHBUTTON "Next(&D)",IDC_BUTTON_SEARCHNEXT,221,20,58,14 + PUSHBUTTON "&Bookmark",IDC_BUTTON_SETMARK,221,38,58,14 + PUSHBUTTON "Cancel(&X)",IDCANCEL,221,57,58,14,WS_GROUP + PUSHBUTTON "&Help",IDC_BUTTON_HELP,221,73,58,14 END IDD_JUMP DIALOGEX 0, 0, 252, 121 -STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_SETFOREGROUND | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_SETFOREGROUND | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP CAPTION "Jump to Line" -FONT 9, "Tahoma" -BEGIN - LTEXT "Line &Number", IDC_STATIC, 5, 6, 34, 8 - EDITTEXT IDC_EDIT_LINENUM, 43, 4, 40, 12 - CONTROL "Spin1", IDC_SPIN_LINENUM, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 82, 4, 9, 12 - CONTROL "Use Layout(&R)", IDC_RADIO_LINENUM_LAYOUT, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 94, 5, 97, 10 - CONTROL "Use CRLF(&W)", IDC_RADIO_LINENUM_CRLF, "Button", BS_AUTORADIOBUTTON, 102, 20, 87, 10 - CONTROL "&PL/SQL Compiler Error Processing", IDC_CHECK_PLSQL, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 10, 50, 137, 10 - LTEXT "Line as a block of &1 Line", IDC_LABEL_PLSQL2, 92, 66, 92, 8, NOT WS_GROUP - EDITTEXT IDC_EDIT_PLSQL_E1, 47, 64, 40, 12 - CONTROL "Spin1", IDC_SPIN_PLSQL_E1, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 87, 64, 9, 12 - LTEXT "Group", IDC_LABEL_PLSQL1, 12, 66, 34, 8, NOT WS_GROUP - LTEXT "&Select from detected PL/SQL package's block", IDC_LABEL_PLSQL3, 12, 81, 166, 8, NOT WS_GROUP - COMBOBOX IDC_COMBO_PLSQLBLOCKS, 15, 94, 168, 100, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - GROUPBOX "PL/SQL Compile Error Line", IDC_STATIC, 5, 35, 184, 80, WS_GROUP - DEFPUSHBUTTON "&Jump", IDC_BUTTON_JUMP, 197, 5, 50, 14, WS_GROUP - PUSHBUTTON "Cancel(&X)", IDCANCEL, 197, 24, 50, 14 - PUSHBUTTON "&Help", IDC_BUTTON_HELP, 197, 101, 50, 14 -END - -IDD_FUNCLIST DIALOG DISCARDABLE 0, 0, 240, 289 -STYLE DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + LTEXT "Line &Number",IDC_STATIC,5,6,34,8 + EDITTEXT IDC_EDIT_LINENUM,43,4,40,12 + CONTROL "Spin1",IDC_SPIN_LINENUM,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,82,4,9,12 + CONTROL "Use Layout(&R)",IDC_RADIO_LINENUM_LAYOUT,"Button",BS_AUTORADIOBUTTON | WS_GROUP,94,5,97,10 + CONTROL "Use CRLF(&W)",IDC_RADIO_LINENUM_CRLF,"Button",BS_AUTORADIOBUTTON,102,20,87,10 + CONTROL "&PL/SQL Compiler Error Processing",IDC_CHECK_PLSQL, + "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,10,50,137,10 + LTEXT "Line as a block of &1 Line",IDC_LABEL_PLSQL2,92,66,92,8,NOT WS_GROUP + EDITTEXT IDC_EDIT_PLSQL_E1,47,64,40,12 + CONTROL "Spin1",IDC_SPIN_PLSQL_E1,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,87,64,9,12 + LTEXT "Group",IDC_LABEL_PLSQL1,12,66,34,8,NOT WS_GROUP + LTEXT "&Select from detected PL/SQL package's block",IDC_LABEL_PLSQL3,12,81,166,8,NOT WS_GROUP + COMBOBOX IDC_COMBO_PLSQLBLOCKS,15,94,168,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "PL/SQL Compile Error Line",IDC_STATIC,5,35,184,80,WS_GROUP + DEFPUSHBUTTON "&Jump",IDC_BUTTON_JUMP,197,5,50,14,WS_GROUP + PUSHBUTTON "Cancel(&X)",IDCANCEL,197,24,50,14 + PUSHBUTTON "&Help",IDC_BUTTON_HELP,197,101,50,14 +END + +IDD_FUNCLIST DIALOG 0, 0, 240, 289 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU CAPTION "x" FONT 9, "Tahoma" BEGIN - CONTROL "Tree1", IDC_TREE_FL, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 0, 17, 234, 235 - CONTROL "List1", IDC_LIST_FL, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP, 0, 0, 234, 252 - PUSHBUTTON "▼", IDC_BUTTON_MENU, 1, 255, 10, 14, NOT WS_TABSTOP - CONTROL "■", IDC_BUTTON_WINSIZE, "Button", BS_AUTOCHECKBOX | BS_PUSHLIKE, 12, 255, 10, 14 - PUSHBUTTON "&Copy", IDC_BUTTON_COPY, 24, 255, 50, 14, WS_DISABLED - DEFPUSHBUTTON "&Jump", IDOK, 76, 255, 50, 14 - PUSHBUTTON "Cancel(&X)", IDCANCEL, 128, 255, 50, 14 - PUSHBUTTON "&Help", IDC_BUTTON_HELP, 180, 255, 50, 14 - CONTROL "Automatically Close(&D)", IDC_CHECK_bAutoCloseDlgFuncList, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 271, 79, 10 - CONTROL "Swap &Focus", IDC_CHECK_bFunclistSetFocusOnJump, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 86, 271, 70, 10 - CONTROL "Mark &Blank Lines", IDC_CHECK_bMarkUpBlankLineEnable, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 160, 271, 76, 10 - LTEXT "&Sort", IDC_STATIC_nSortType, 3, 5, 28, 8 - PUSHBUTTON "&Setting", IDC_BUTTON_SETTING, 3, 3, 45, 14 - COMBOBOX IDC_COMBO_nSortType, 34, 3, 94, 65, CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + CONTROL "Tree1",IDC_TREE_FL,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,0,17,234,235 + CONTROL "List1",IDC_LIST_FL,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,0,0,234,252 + PUSHBUTTON "▼",IDC_BUTTON_MENU,1,255,10,14,NOT WS_TABSTOP + CONTROL "■",IDC_BUTTON_WINSIZE,"Button",BS_AUTOCHECKBOX | BS_PUSHLIKE,12,255,10,14 + PUSHBUTTON "&Copy",IDC_BUTTON_COPY,24,255,50,14,WS_DISABLED + DEFPUSHBUTTON "&Jump",IDOK,76,255,50,14 + PUSHBUTTON "Cancel(&X)",IDCANCEL,128,255,50,14 + PUSHBUTTON "&Help",IDC_BUTTON_HELP,180,255,50,14 + CONTROL "Automatically Close(&D)",IDC_CHECK_bAutoCloseDlgFuncList, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,271,79,10 + CONTROL "Swap &Focus",IDC_CHECK_bFunclistSetFocusOnJump,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,86,271,70,10 + CONTROL "Mark &Blank Lines",IDC_CHECK_bMarkUpBlankLineEnable, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,271,76,10 + LTEXT "&Sort",IDC_STATIC_nSortType,3,5,28,8 + PUSHBUTTON "&Setting",IDC_BUTTON_SETTING,3,3,45,14 + COMBOBOX IDC_COMBO_nSortType,34,3,94,65,CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP END IDD_GREP DIALOGEX 0, 0, 430, 192 @@ -275,1466 +236,1536 @@ BEGIN END IDD_GREPRUNNING DIALOGEX 0, 0, 293, 79 -STYLE DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Grep Running..." -FONT 9, "Tahoma" +FONT 9, "Tahoma", 0, 0, 0x1 BEGIN - LTEXT "Searching・・・", IDC_STATIC, 5, 5, 61, 8, NOT WS_GROUP - LTEXT "File", IDC_STATIC, 5, 21, 26, 8, NOT WS_GROUP - LTEXT "IDC_STATIC_CURPATH", IDC_STATIC_CURFILE, 36, 20, 252, 10, NOT WS_GROUP - LTEXT "Folder", IDC_STATIC, 5, 34, 27, 8, NOT WS_GROUP - EDITTEXT IDC_STATIC_CURPATH, 36, 35, 252, 20, ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP - PUSHBUTTON "Cancel(&X)", IDCANCEL, 238, 60, 50, 14 - LTEXT "0", IDC_STATIC_HITCOUNT, 76, 5, 44, 8, NOT WS_GROUP, WS_EX_RIGHT - LTEXT "Found item", IDC_STATIC, 122, 5, 60, 8, NOT WS_GROUP - CONTROL "Real Time &View", IDC_CHECK_REALTIMEVIEW, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 149, 59, 84, 14 + LTEXT "Searching・・・",IDC_STATIC,5,5,61,8,NOT WS_GROUP + LTEXT "File",IDC_STATIC,5,21,26,8,NOT WS_GROUP + LTEXT "IDC_STATIC_CURPATH",IDC_STATIC_CURFILE,36,20,252,10,NOT WS_GROUP + LTEXT "Folder",IDC_STATIC,5,34,27,8,NOT WS_GROUP + EDITTEXT IDC_STATIC_CURPATH,36,35,252,20,ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + PUSHBUTTON "Cancel(&X)",IDCANCEL,238,60,50,14 + LTEXT "0",IDC_STATIC_HITCOUNT,76,5,44,8,NOT WS_GROUP,WS_EX_RIGHT + LTEXT "Found item",IDC_STATIC,122,5,60,8,NOT WS_GROUP + CONTROL "Real Time &View",IDC_CHECK_REALTIMEVIEW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,149,59,84,14 END IDD_REPLACE DIALOGEX 30, 0, 298, 149 -STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP CAPTION "Replace" -FONT 9, "Tahoma" -BEGIN - LTEXT "Fi&nd what", IDC_STATIC, 5, 6, 52, 8 - COMBOBOX IDC_COMBO_TEXT, 57, 4, 177, 150, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - LTEXT "Re&place with", IDC_STATIC, 5, 21, 52, 8, NOT WS_GROUP - COMBOBOX IDC_COMBO_TEXT2, 57, 19, 177, 150, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - CONTROL "Pas&te from Clipboard", IDC_CHK_PASTE, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 5, 41, 116, 10 - CONTROL "Match Whole &Word", IDC_CHK_WORD, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 5, 52, 140, 10 - CONTROL "&Case Sensitive", IDC_CHK_LOHICASE, "Button", BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP, 5, 63, 119, 10 - CONTROL "R&egex", IDC_CHK_REGULAREXP, "Button", BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP, 5, 74, 55, 10 - LTEXT "", IDC_STATIC_JRE32VER, 16, 85, 138, 8 - CONTROL "'Replace All' &Iteratively replaces", IDC_CHECK_CONSECUTIVEALL, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 95, 118, 10 - CONTROL "Display a &message if not found", IDC_CHECK_NOTIFYNOTFOUND, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 107, 140, 10 - CONTROL "Automatica&lly close dialog", IDC_CHECK_bAutoCloseDlgReplace, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 118, 128, 10 - CONTROL "Re-start search from beginning(end)(&Z)", IDC_CHECK_SEARCHALL, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 129, 146, 10 - GROUPBOX "Substitution Method", IDC_STATIC, 153, 37, 81, 62, WS_GROUP - CONTROL "(&0) overwrite", IDC_RADIO_REPLACE, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 156, 50, 59, 10 - CONTROL "(&1) insert before", IDC_RADIO_INSERT, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 156, 61, 71, 10 - CONTROL "(&2) insert after", IDC_RADIO_ADD, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 156, 72, 71, 10 - CONTROL "(&3) line delete", IDC_RADIO_LINEDELETE, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 156, 83, 71, 10 - GROUPBOX "Scope", IDC_STATIC, 153, 103, 81, 37, WS_GROUP - CONTROL "&Selected text", IDC_RADIO_SELECTEDAREA, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 156, 115, 73, 10 - CONTROL "Wh&ole Document", IDC_RADIO_ALLAREA, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 156, 126, 76, 10 - PUSHBUTTON "Search &Up", IDC_BUTTON_SEARCHPREV, 237, 4, 58, 14, WS_GROUP - DEFPUSHBUTTON "Search &Down", IDC_BUTTON_SEARCHNEXT, 237, 19, 58, 14 - PUSHBUTTON "&Bookmark", IDC_BUTTON_SETMARK, 237, 38, 58, 14 - PUSHBUTTON "&Replace", IDC_BUTTON_REPALCE, 237, 57, 58, 14 - PUSHBUTTON "Replace &All", IDC_BUTTON_REPALCEALL, 237, 73, 58, 14 - PUSHBUTTON "Cancel(&X)", IDCANCEL, 237, 110, 58, 14, WS_GROUP - PUSHBUTTON "&Help", IDC_BUTTON_HELP, 237, 127, 58, 14 -END - -IDD_REPLACERUNNING DIALOG DISCARDABLE 0, 0, 190, 35 -STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + LTEXT "Fi&nd what",IDC_STATIC,5,6,52,8 + COMBOBOX IDC_COMBO_TEXT,57,4,177,150,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + LTEXT "Re&place with",IDC_STATIC,5,21,52,8,NOT WS_GROUP + COMBOBOX IDC_COMBO_TEXT2,57,19,177,150,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + CONTROL "Pas&te from Clipboard",IDC_CHK_PASTE,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,5,41,116,10 + CONTROL "Match Whole &Word",IDC_CHK_WORD,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,5,52,140,10 + CONTROL "&Case Sensitive",IDC_CHK_LOHICASE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,5,63,119,10 + CONTROL "R&egex",IDC_CHK_REGULAREXP,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,5,74,55,10 + LTEXT "",IDC_STATIC_JRE32VER,16,85,138,8 + CONTROL "'Replace All' &Iteratively replaces",IDC_CHECK_CONSECUTIVEALL, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,95,118,10 + CONTROL "Display a &message if not found",IDC_CHECK_NOTIFYNOTFOUND, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,107,140,10 + CONTROL "Automatica&lly close dialog",IDC_CHECK_bAutoCloseDlgReplace, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,118,128,10 + CONTROL "Re-start search from beginning(end)(&Z)",IDC_CHECK_SEARCHALL, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,129,146,10 + GROUPBOX "Substitution Method",IDC_STATIC,153,37,81,62,WS_GROUP + CONTROL "(&0) overwrite",IDC_RADIO_REPLACE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,156,50,59,10 + CONTROL "(&1) insert before",IDC_RADIO_INSERT,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,156,61,71,10 + CONTROL "(&2) insert after",IDC_RADIO_ADD,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,156,72,71,10 + CONTROL "(&3) line delete",IDC_RADIO_LINEDELETE,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,156,83,71,10 + GROUPBOX "Scope",IDC_STATIC,153,103,81,37,WS_GROUP + CONTROL "&Selected text",IDC_RADIO_SELECTEDAREA,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,156,115,73,10 + CONTROL "Wh&ole Document",IDC_RADIO_ALLAREA,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,156,126,76,10 + PUSHBUTTON "Search &Up",IDC_BUTTON_SEARCHPREV,237,4,58,14,WS_GROUP + DEFPUSHBUTTON "Search &Down",IDC_BUTTON_SEARCHNEXT,237,19,58,14 + PUSHBUTTON "&Bookmark",IDC_BUTTON_SETMARK,237,38,58,14 + PUSHBUTTON "&Replace",IDC_BUTTON_REPALCE,237,57,58,14 + PUSHBUTTON "Replace &All",IDC_BUTTON_REPALCEALL,237,73,58,14 + PUSHBUTTON "Cancel(&X)",IDCANCEL,237,110,58,14,WS_GROUP + PUSHBUTTON "&Help",IDC_BUTTON_HELP,237,127,58,14 +END + +IDD_REPLACERUNNING DIALOG 0, 0, 190, 35 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Replacing..." FONT 9, "Tahoma" BEGIN - LTEXT "Replacing . . . .", IDC_STATIC, 5, 5, 55, 8 - CONTROL "Progress1", IDC_PROGRESS_REPLACE, "msctls_progress32", WS_BORDER, 5, 20, 120, 10 - PUSHBUTTON "Cancel(&X)", IDCANCEL, 135, 16, 50, 14 - RTEXT "9999999999", IDC_STATIC_KENSUU, 64, 5, 37, 8, NOT WS_GROUP - LTEXT "items", IDC_STATIC, 104, 5, 8, 8, NOT WS_GROUP + LTEXT "Replacing . . . .",IDC_STATIC,5,5,55,8 + CONTROL "Progress1",IDC_PROGRESS_REPLACE,"msctls_progress32",WS_BORDER,5,20,120,10 + PUSHBUTTON "Cancel(&X)",IDCANCEL,135,16,50,14 + RTEXT "9999999999",IDC_STATIC_KENSUU,64,5,37,8,NOT WS_GROUP + LTEXT "items",IDC_STATIC,104,5,8,8,NOT WS_GROUP END IDD_PROPERTY_FILE DIALOGEX 0, 0, 270, 225 -STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "File Property" -FONT 9, "Tahoma" +FONT 9, "Tahoma", 0, 0, 0x1 BEGIN - DEFPUSHBUTTON "&Close", IDOK, 155, 208, 50, 14 - PUSHBUTTON "&Help", IDC_BUTTON_HELP, 215, 208, 50, 14 - EDITTEXT IDC_EDIT_PROPERTY, 5, 5, 260, 200, ES_MULTILINE | ES_READONLY | WS_VSCROLL | WS_TABSTOP + DEFPUSHBUTTON "&Close",IDOK,155,208,50,14 + PUSHBUTTON "&Help",IDC_BUTTON_HELP,215,208,50,14 + EDITTEXT IDC_EDIT_PROPERTY,5,5,260,200,ES_MULTILINE | ES_READONLY | WS_VSCROLL END IDD_INPUT1 DIALOGEX 0, 0, 185, 55 -STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "General Input" -FONT 9, "Tahoma" +FONT 9, "Tahoma", 0, 0, 0x1 BEGIN - EDITTEXT IDC_EDIT_INPUT1, 5, 15, 175, 12, ES_AUTOHSCROLL - DEFPUSHBUTTON "&OK", IDOK, 37, 36, 50, 14 - PUSHBUTTON "Cancel(&X)", IDCANCEL, 98, 35, 50, 14 - LTEXT "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", IDC_STATIC_MSG, 6, 5, 175, 8 + EDITTEXT IDC_EDIT_INPUT1,5,15,175,12,ES_AUTOHSCROLL + DEFPUSHBUTTON "&OK",IDOK,37,36,50,14 + PUSHBUTTON "Cancel(&X)",IDCANCEL,98,35,50,14 + LTEXT "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",IDC_STATIC_MSG,6,5,175,8 END IDD_COMPARE DIALOGEX 0, 0, 365, 165 -STYLE DS_MODALFRAME | WS_POPUP | WS_THICKFRAME | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME EXSTYLE WS_EX_CONTEXTHELP CAPTION "File Compare" -FONT 9, "Tahoma" +FONT 9, "Tahoma", 0, 0, 0x1 BEGIN - LTEXT "&Choose a file from below to use as comparison:", IDC_STATIC, 5, 31, 158, 8 - LISTBOX IDC_LIST_FILES, 5, 42, 355, 95, LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - CONTROL "Display side-by-side(&T)", IDC_CHECK_TILE_H, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 288, 30, 71, 10 - DEFPUSHBUTTON "&OK", IDOK, 184, 145, 50, 14 - PUSHBUTTON "Cancel(&X)", IDCANCEL, 244, 145, 50, 14 - PUSHBUTTON "&Help", IDC_BUTTON_HELP, 304, 145, 50, 14 - EDITTEXT IDC_STATIC_COMPARESRC, 7, 7, 355, 20, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL, WS_EX_STATICEDGE + LTEXT "&Choose a file from below to use as comparison:",IDC_STATIC,5,31,158,8 + LISTBOX IDC_LIST_FILES,5,42,355,95,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + CONTROL "Display side-by-side(&T)",IDC_CHECK_TILE_H,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,288,30,71,10 + DEFPUSHBUTTON "&OK",IDOK,184,145,50,14 + PUSHBUTTON "Cancel(&X)",IDCANCEL,244,145,50,14 + PUSHBUTTON "&Help",IDC_BUTTON_HELP,304,145,50,14 + EDITTEXT IDC_STATIC_COMPARESRC,7,7,355,20,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL,WS_EX_STATICEDGE END -IDD_PRINTPREVIEWBAR DIALOG DISCARDABLE 0, 0, 402, 32 -STYLE WS_CHILD +IDD_PRINTPREVIEWBAR DIALOG 0, 0, 402, 32 +STYLE DS_SETFONT | WS_CHILD FONT 9, "Tahoma" BEGIN - DEFPUSHBUTTON "&Print...", IDOK, 2, 1, 55, 14 - PUSHBUTTON "Page &Setup...", IDC_BUTTON_PRINTSETTING, 2, 16, 55, 14 - PUSHBUTTON "Pre&v", IDC_BUTTON_PREVPAGE, 60, 1, 30, 14 - PUSHBUTTON "&Next", IDC_BUTTON_NEXTPAGE, 90, 1, 30, 14 - PUSHBUTTON "..&.", IDC_BUTTON_DIRECTPAGE, 120, 1, 9, 14 - LTEXT "999/999", IDC_STATIC_PAGENUM, 131, 4, 35, 8 - PUSHBUTTON "Zoom &Out", IDC_BUTTON_ZOOMDOWN, 60, 16, 40, 14 - PUSHBUTTON "Zoom &In", IDC_BUTTON_ZOOMUP, 100, 16, 40, 14 - LTEXT "999/999", IDC_STATIC_ZOOM, 141, 19, 35, 8 - PUSHBUTTON "&Help", IDC_BUTTON_HELP, 167, 1, 39, 14 - CONTROL "&Antialias", IDC_CHECK_ANTIALIAS, "Button", BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP, 207, 3, 43, 10 - PUSHBUTTON "Close(&Q)", IDCANCEL, 167, 16, 39, 14 - PUSHBUTTON "Printe&r...", IDC_BUTTON_PRINTERSELECT, 208, 16, 40, 14 - ICON IDI_PRINTER, IDC_STATIC, 251, 3, 11, 9, SS_REALSIZEIMAGE - LTEXT "Static", IDC_STATIC_PRNDEV, 263, 4, 137, 8 - LTEXT "Static", IDC_STATIC_PAPER, 251, 19, 149, 8 + DEFPUSHBUTTON "&Print...",IDOK,2,1,55,14 + PUSHBUTTON "Page &Setup...",IDC_BUTTON_PRINTSETTING,2,16,55,14 + PUSHBUTTON "Pre&v",IDC_BUTTON_PREVPAGE,60,1,30,14 + PUSHBUTTON "&Next",IDC_BUTTON_NEXTPAGE,90,1,30,14 + PUSHBUTTON "..&.",IDC_BUTTON_DIRECTPAGE,120,1,9,14 + LTEXT "999/999",IDC_STATIC_PAGENUM,131,4,35,8 + PUSHBUTTON "Zoom &Out",IDC_BUTTON_ZOOMDOWN,60,16,40,14 + PUSHBUTTON "Zoom &In",IDC_BUTTON_ZOOMUP,100,16,40,14 + LTEXT "999/999",IDC_STATIC_ZOOM,141,19,35,8 + PUSHBUTTON "&Help",IDC_BUTTON_HELP,167,1,39,14 + CONTROL "&Antialias",IDC_CHECK_ANTIALIAS,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,207,3,43,10 + PUSHBUTTON "Close(&Q)",IDCANCEL,167,16,39,14 + PUSHBUTTON "Printe&r...",IDC_BUTTON_PRINTERSELECT,208,16,40,14 + ICON IDI_PRINTER,IDC_STATIC,251,3,11,9,SS_REALSIZEIMAGE + LTEXT "Static",IDC_STATIC_PRNDEV,263,4,137,8 + LTEXT "Static",IDC_STATIC_PAPER,251,19,149,8 END IDD_PRINTSETTING DIALOGEX 0, 0, 302, 253 -STYLE DS_MODALFRAME | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP CAPTION "Printer Page Setup" +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + LTEXT "Setup Profile(&1)",IDC_STATIC,2,9,50,8 + COMBOBOX IDC_COMBO_SETTINGNAME,56,7,163,170,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Change Name(&2)...",IDC_BUTTON_EDITSETTINGNAME,224,7,69,14 + GROUPBOX "Settings",IDC_STATIC,4,22,289,204 + RTEXT "Half Width Font",IDC_STATIC,5,37,49,8 + COMBOBOX IDC_COMBO_FONT_HAN,56,35,84,230,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + RTEXT "Full Width Font(&K)",IDC_STATIC,5,52,49,8 + COMBOBOX IDC_COMBO_FONT_ZEN,56,50,84,230,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + RTEXT "Font Height(&P)",IDC_STATIC,5,71,49,8 + EDITTEXT IDC_EDIT_FONTHEIGHT,56,69,30,12,ES_AUTOHSCROLL + CONTROL "Spin1",IDC_SPIN_FONTHEIGHT,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,69,9,12 + LTEXT "(1/10mm)",IDC_STATIC,88,71,32,8 + RTEXT "144.5pt",IDC_STATIC_FONTSIZE,120,71,22,8 + RTEXT "Line &Spacing",IDC_STATIC,5,85,49,8 + EDITTEXT IDC_EDIT_LINESPACE,56,83,30,12,ES_AUTOHSCROLL + CONTROL "Spin2",IDC_SPIN_LINESPACE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,83,9,12 + LTEXT "(%)",IDC_STATIC,88,85,10,8 + RTEXT "&Col sz",IDC_STATIC,7,99,45,8 + EDITTEXT IDC_EDIT_DANSUU,56,97,30,12,ES_AUTOHSCROLL + CONTROL "Spin3",IDC_SPIN_DANSUU,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,97,9,12 + RTEXT "Col Spac&e",IDC_STATIC,7,113,45,8 + EDITTEXT IDC_EDIT_DANSPACE,56,111,30,12,ES_AUTOHSCROLL + CONTROL "Spin4",IDC_SPIN_DANSPACE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,111,9,12 + LTEXT "(mm)",IDC_STATIC,88,113,17,8 + RTEXT "Paper Si&ze",IDC_STATIC,7,131,45,8 + COMBOBOX IDC_COMBO_PAPER,56,129,169,145,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + RTEXT "Orientation",IDC_STATIC,7,146,45,8 + CONTROL "Portra&it",IDC_RADIO_PORTRAIT,"Button",BS_AUTORADIOBUTTON | WS_GROUP,58,145,40,10 + CONTROL "L&andscape",IDC_RADIO_LANDSCAPE,"Button",BS_AUTORADIOBUTTON,102,145,53,10 + RTEXT "Space/&Top",IDC_STATIC,7,163,45,8 + EDITTEXT IDC_EDIT_MARGINTY,56,161,30,12,ES_AUTOHSCROLL + CONTROL "Spin5",IDC_SPIN_MARGINTY,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,161,9,12 + LTEXT "(mm)",IDC_STATIC,88,163,17,8 + RTEXT "&Bottom",IDC_STATIC,7,177,45,8 + EDITTEXT IDC_EDIT_MARGINBY,56,175,30,12,ES_AUTOHSCROLL + CONTROL "Spin6",IDC_SPIN_MARGINBY,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,175,9,12 + LTEXT "(mm)",IDC_STATIC,88,177,17,8 + RTEXT "&Left",IDC_STATIC,7,191,45,8 + EDITTEXT IDC_EDIT_MARGINLX,56,189,30,12,ES_AUTOHSCROLL + CONTROL "Spin7",IDC_SPIN_MARGINLX,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,189,9,12 + LTEXT "(mm)",IDC_STATIC,88,191,17,8 + RTEXT "&Right",IDC_STATIC,7,205,45,8 + EDITTEXT IDC_EDIT_MARGINRX,56,202,30,12,ES_AUTOHSCROLL + CONTROL "Spin8",IDC_SPIN_MARGINRX,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,202,9,12 + LTEXT "(mm)",IDC_STATIC,88,205,17,8 + CONTROL "Pri&nt Line nr",IDC_CHECK_LINENUMBER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,35,70,10 + CONTROL "&Word Wrap",IDC_CHECK_WORDWRAP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,49,78,10 + CONTROL "cant-start rule",IDC_CHECK_PS_KINSOKUHEAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,63,54,10 + CONTROL "cant-end rule",IDC_CHECK_PS_KINSOKUTAIL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,77,54,10 + CONTROL "Don't wrap new-line",IDC_CHECK_PS_KINSOKURET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,63,86,10 + CONTROL "Don't wrap punctuation",IDC_CHECK_PS_KINSOKUKUTO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,77,86,10 + LTEXT "Char per Line :",IDC_STATIC,150,96,65,8 + LTEXT "Nr Lines :",IDC_STATIC,150,110,65,8 + RTEXT "0",IDC_STATIC_ENABLECOLUMNS,215,96,20,8 + RTEXT "0",IDC_STATIC_ENABLELINES,215,110,20,8 + GROUPBOX "",IDC_STATIC,145,87,112,37 + CONTROL "Print Color(&V)",IDC_CHECK_COLORPRINT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,145,61,10 + LTEXT "Header(&U)",IDC_STATIC,107,165,38,8 + EDITTEXT IDC_EDIT_HEAD1,107,175,50,12,ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_HEAD2,158,175,50,12,ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_HEAD3,209,175,50,12,ES_AUTOHSCROLL + CONTROL "Use",IDC_CHECK_USE_FONT_HEAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,260,164,30,10 + PUSHBUTTON "Font",IDC_BUTTON_FONT_HEAD,260,174,30,14 + RTEXT "Font(xxpt/xx.xmm)",IDC_STATIC_FONT_HEAD,145,161,114,14,SS_CENTERIMAGE + LTEXT "Footer(&D)",IDC_STATIC,107,193,38,8 + EDITTEXT IDC_EDIT_FOOT1,107,203,50,12,ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_FOOT2,158,203,50,12,ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_FOOT3,209,203,50,12,ES_AUTOHSCROLL + CONTROL "Use",IDC_CHECK_USE_FONT_FOOT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,260,192,30,10 + PUSHBUTTON "Font",IDC_BUTTON_FONT_FOOT,260,202,30,14 + RTEXT "Font(xxpt/xx.xmm)",IDC_STATIC_FONT_FOOT,145,189,114,14,SS_CENTERIMAGE + DEFPUSHBUTTON "&OK",IDOK,128,234,50,14 + PUSHBUTTON "Cancel(&X)",IDCANCEL,183,234,50,14 + PUSHBUTTON "&Help",IDC_BUTTON_HELP,238,234,50,14 +END + +IDD_EXITING DIALOG 0, 0, 171, 30 +STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_VISIBLE FONT 9, "Tahoma" BEGIN - LTEXT "Setup Profile(&1)", IDC_STATIC, 2, 9, 50, 8 - COMBOBOX IDC_COMBO_SETTINGNAME, 56, 7, 163, 170, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "Change Name(&2)...", IDC_BUTTON_EDITSETTINGNAME, 224, 7, 69, 14 - GROUPBOX "Settings", IDC_STATIC, 4, 22, 289, 204 - RTEXT "Half Width Font", IDC_STATIC, 5, 37, 49, 8 - COMBOBOX IDC_COMBO_FONT_HAN, 56, 35, 84, 230, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP - RTEXT "Full Width Font(&K)", IDC_STATIC, 5, 52, 49, 8 - COMBOBOX IDC_COMBO_FONT_ZEN, 56, 50, 84, 230, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP - RTEXT "Font Height(&P)", IDC_STATIC, 5, 71, 49, 8 - EDITTEXT IDC_EDIT_FONTHEIGHT, 56, 69, 30, 12, ES_AUTOHSCROLL - CONTROL "Spin1", IDC_SPIN_FONTHEIGHT, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 76, 69, 9, 12 - LTEXT "(1/10mm)", IDC_STATIC, 88, 71, 32, 8 - RTEXT "144.5pt", IDC_STATIC_FONTSIZE, 120, 71, 22, 8 - RTEXT "Line &Spacing", IDC_STATIC, 5, 85, 49, 8 - EDITTEXT IDC_EDIT_LINESPACE, 56, 83, 30, 12, ES_AUTOHSCROLL - CONTROL "Spin2", IDC_SPIN_LINESPACE, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 76, 83, 9, 12 - LTEXT "(%)", IDC_STATIC, 88, 85, 10, 8 - RTEXT "&Col sz", IDC_STATIC, 7, 99, 45, 8 - EDITTEXT IDC_EDIT_DANSUU, 56, 97, 30, 12, ES_AUTOHSCROLL - CONTROL "Spin3", IDC_SPIN_DANSUU, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 76, 97, 9, 12 - RTEXT "Col Spac&e", IDC_STATIC, 7, 113, 45, 8 - EDITTEXT IDC_EDIT_DANSPACE, 56, 111, 30, 12, ES_AUTOHSCROLL - CONTROL "Spin4", IDC_SPIN_DANSPACE, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 76, 111, 9, 12 - LTEXT "(mm)", IDC_STATIC, 88, 113, 17, 8 - RTEXT "Paper Si&ze", IDC_STATIC, 7, 131, 45, 8 - COMBOBOX IDC_COMBO_PAPER, 56, 129, 169, 145, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - RTEXT "Orientation", IDC_STATIC, 7, 146, 45, 8 - CONTROL "Portra&it", IDC_RADIO_PORTRAIT, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 58, 145, 40, 10 - CONTROL "L&andscape", IDC_RADIO_LANDSCAPE, "Button", BS_AUTORADIOBUTTON, 102, 145, 53, 10 - RTEXT "Space/&Top", IDC_STATIC, 7, 163, 45, 8 - EDITTEXT IDC_EDIT_MARGINTY, 56, 161, 30, 12, ES_AUTOHSCROLL - CONTROL "Spin5", IDC_SPIN_MARGINTY, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 76, 161, 9, 12 - LTEXT "(mm)", IDC_STATIC, 88, 163, 17, 8 - RTEXT "&Bottom", IDC_STATIC, 7, 177, 45, 8 - EDITTEXT IDC_EDIT_MARGINBY, 56, 175, 30, 12, ES_AUTOHSCROLL - CONTROL "Spin6", IDC_SPIN_MARGINBY, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 76, 175, 9, 12 - LTEXT "(mm)", IDC_STATIC, 88, 177, 17, 8 - RTEXT "&Left", IDC_STATIC, 7, 191, 45, 8 - EDITTEXT IDC_EDIT_MARGINLX, 56, 189, 30, 12, ES_AUTOHSCROLL - CONTROL "Spin7", IDC_SPIN_MARGINLX, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 76, 189, 9, 12 - LTEXT "(mm)", IDC_STATIC, 88, 191, 17, 8 - RTEXT "&Right", IDC_STATIC, 7, 205, 45, 8 - EDITTEXT IDC_EDIT_MARGINRX, 56, 202, 30, 12, ES_AUTOHSCROLL - CONTROL "Spin8", IDC_SPIN_MARGINRX, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 76, 202, 9, 12 - LTEXT "(mm)", IDC_STATIC, 88, 205, 17, 8 - CONTROL "Pri&nt Line nr", IDC_CHECK_LINENUMBER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 150, 35, 70, 10 - CONTROL "&Word Wrap", IDC_CHECK_WORDWRAP, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 150, 49, 78, 10 - CONTROL "cant-start rule", IDC_CHECK_PS_KINSOKUHEAD, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 150, 63, 54, 10 - CONTROL "cant-end rule", IDC_CHECK_PS_KINSOKUTAIL, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 150, 77, 54, 10 - CONTROL "Don't wrap new-line", IDC_CHECK_PS_KINSOKURET, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 205, 63, 86, 10 - CONTROL "Don't wrap punctuation", IDC_CHECK_PS_KINSOKUKUTO, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 205, 77, 86, 10 - LTEXT "Char per Line :", IDC_STATIC, 150, 96, 65, 8 - LTEXT "Nr Lines :", IDC_STATIC, 150, 110, 65, 8 - RTEXT "0", IDC_STATIC_ENABLECOLUMNS, 215, 96, 20, 8 - RTEXT "0", IDC_STATIC_ENABLELINES, 215, 110, 20, 8 - GROUPBOX "", IDC_STATIC, 145, 87, 112, 37 - CONTROL "Print Color(&V)", IDC_CHECK_COLORPRINT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 160, 145, 61, 10 - LTEXT "Header(&U)", IDC_STATIC, 107, 165, 38, 8 - EDITTEXT IDC_EDIT_HEAD1, 107, 175, 50, 12, ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_HEAD2, 158, 175, 50, 12, ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_HEAD3, 209, 175, 50, 12, ES_AUTOHSCROLL - CONTROL "Use", IDC_CHECK_USE_FONT_HEAD, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 260, 164, 30, 10 - PUSHBUTTON "Font", IDC_BUTTON_FONT_HEAD, 260, 174, 30, 14 - RTEXT "Font(xxpt/xx.xmm)", IDC_STATIC_FONT_HEAD, 145, 161, 114, 14, SS_CENTERIMAGE - LTEXT "Footer(&D)", IDC_STATIC, 107, 193, 38, 8 - EDITTEXT IDC_EDIT_FOOT1, 107, 203, 50, 12, ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_FOOT2, 158, 203, 50, 12, ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_FOOT3, 209, 203, 50, 12, ES_AUTOHSCROLL - CONTROL "Use", IDC_CHECK_USE_FONT_FOOT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 260, 192, 30, 10 - PUSHBUTTON "Font", IDC_BUTTON_FONT_FOOT, 260, 202, 30, 14 - RTEXT "Font(xxpt/xx.xmm)", IDC_STATIC_FONT_FOOT, 145, 189, 114, 14, SS_CENTERIMAGE - DEFPUSHBUTTON "&OK", IDOK, 128, 234, 50, 14 - PUSHBUTTON "Cancel(&X)", IDCANCEL, 183, 234, 50, 14 - PUSHBUTTON "&Help", IDC_BUTTON_HELP, 238, 234, 50, 14 -END - -IDD_EXITING DIALOG DISCARDABLE 0, 0, 171, 30 -STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_VISIBLE -FONT 9, "Tahoma" -BEGIN - ICON IDI_ICON_STD, IDC_STATIC, 5, 5, 20, 20 - LTEXT "Finished, please wait . . .", IDC_STATIC, 30, 10, 137, 8 + ICON IDI_ICON_STD,IDC_STATIC,5,5,20,20 + LTEXT "Finished, please wait . . .",IDC_STATIC,30,10,137,8 END IDD_EXEC DIALOGEX 30, 0, 292, 137 -STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP CAPTION "Execute an external command" -FONT 9, "Tahoma" -BEGIN - LTEXT "&Name", IDC_STATIC, 5, 6, 29, 8 - COMBOBOX IDC_COMBO_m_szCommand, 37, 4, 251, 240, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_TABSTOP - PUSHBUTTON "&...", IDC_BUTTON_REFERENCE, 278, 20, 9, 12, WS_GROUP - CONTROL "Capture &Standard Output", IDC_CHECK_GETSTDOUT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 29, 99, 10 - COMBOBOX IDC_COMBO_CODE_GET, 16, 42, 73, 10, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Capture Standard &Input", IDC_CHECK_SENDSTDIN, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 58, 92, 10 - COMBOBOX IDC_COMBO_CODE_SEND, 16, 72, 73, 10, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "&Output Window", IDC_RADIO_OUTPUT, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 102, 51, 93, 10 - CONTROL "Editor Window(&C)", IDC_RADIO_EDITWINDOW, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 196, 51, 87, 10 - GROUPBOX "Std Out Redirect Address", IDC_STATIC, 98, 39, 190, 29, WS_GROUP - CONTROL "Cu&rrent Directory", IDC_CHECK_CUR_DIR, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 5, 86, 93, 10 - COMBOBOX IDC_COMBO_CUR_DIR, 16, 100, 263, 240, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_TABSTOP - PUSHBUTTON "...", IDC_BUTTON_REFERENCE2, 279, 100, 9, 12, WS_GROUP - DEFPUSHBUTTON "&Exec", IDOK, 117, 116, 50, 14 - PUSHBUTTON "Cancel(&X)", IDCANCEL, 177, 116, 50, 14 - PUSHBUTTON "&Help", IDC_BUTTON_HELP, 237, 116, 50, 14 - LTEXT "[Note] $F=Editor Filename, $$=$", IDC_STATIC, 140, 21, 134, 8 -END - -IDD_EXECRUNNING DIALOG DISCARDABLE 0, 0, 270, 55 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + LTEXT "&Name",IDC_STATIC,5,6,29,8 + COMBOBOX IDC_COMBO_m_szCommand,37,4,251,240,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_TABSTOP + PUSHBUTTON "&...",IDC_BUTTON_REFERENCE,278,20,9,12,WS_GROUP + CONTROL "Capture &Standard Output",IDC_CHECK_GETSTDOUT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,29,99,10 + COMBOBOX IDC_COMBO_CODE_GET,16,42,73,10,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Capture Standard &Input",IDC_CHECK_SENDSTDIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,58,92,10 + COMBOBOX IDC_COMBO_CODE_SEND,16,72,73,10,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "&Output Window",IDC_RADIO_OUTPUT,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,102,51,93,10 + CONTROL "Editor Window(&C)",IDC_RADIO_EDITWINDOW,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,196,51,87,10 + GROUPBOX "Std Out Redirect Address",IDC_STATIC,98,39,190,29,WS_GROUP + CONTROL "Cu&rrent Directory",IDC_CHECK_CUR_DIR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,86,93,10 + COMBOBOX IDC_COMBO_CUR_DIR,16,100,263,240,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_TABSTOP + PUSHBUTTON "...",IDC_BUTTON_REFERENCE2,279,100,9,12,WS_GROUP + DEFPUSHBUTTON "&Exec",IDOK,117,116,50,14 + PUSHBUTTON "Cancel(&X)",IDCANCEL,177,116,50,14 + PUSHBUTTON "&Help",IDC_BUTTON_HELP,237,116,50,14 + LTEXT "[Note] $F=Editor Filename, $$=$",IDC_STATIC,140,21,134,8 +END + +IDD_EXECRUNNING DIALOG 0, 0, 270, 55 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Executing Command . . ." FONT 9, "Tahoma" BEGIN - PUSHBUTTON "Cancel(&X)", IDCANCEL, 207, 36, 59, 14 - EDITTEXT IDC_STATIC_CMD, 5, 5, 260, 23, ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + PUSHBUTTON "Cancel(&X)",IDCANCEL,207,36,59,14 + EDITTEXT IDC_STATIC_CMD,5,5,260,23,ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP END -IDD_MACRORUNNING DIALOG DISCARDABLE 0, 0, 270, 55 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "" +IDD_MACRORUNNING DIALOG 0, 0, 270, 55 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU FONT 9, "Tahoma" BEGIN - PUSHBUTTON "Cancel(&X)", IDCANCEL, 207, 5, 59, 14 - LTEXT "Executing Macro . . .", IDC_STATIC, 5, 5, 200, 23 - EDITTEXT IDC_STATIC_CMD, 5, 28, 260, 23, ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + PUSHBUTTON "Cancel(&X)",IDCANCEL,207,5,59,14 + LTEXT "Executing Macro . . .",IDC_STATIC,5,5,200,23 + EDITTEXT IDC_STATIC_CMD,5,28,260,23,ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP END IDD_HOKAN DIALOGEX 0, 0, 125, 100 -STYLE DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | WS_THICKFRAME +STYLE DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | WS_THICKFRAME EXSTYLE WS_EX_TOOLWINDOW -FONT 9, "Tahoma" +FONT 9, "Tahoma", 0, 0, 0x1 BEGIN - LISTBOX IDC_LIST_WORDS, 0, 0, 120, 95, LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_WANTKEYBOARDINPUT | WS_VSCROLL | WS_TABSTOP + LISTBOX IDC_LIST_WORDS,0,0,120,95,LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_WANTKEYBOARDINPUT | WS_VSCROLL | WS_TABSTOP END -IDD_PRINTING DIALOG DISCARDABLE 0, 0, 145, 75 -STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +IDD_PRINTING DIALOG 0, 0, 145, 75 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Printing..." FONT 9, "Tahoma" BEGIN - PUSHBUTTON "Cancel(&X)", IDCANCEL, 90, 56, 50, 14 - LTEXT "Printing . . . .", IDC_STATIC, 25, 10, 65, 8 - LTEXT "12/123pages", IDC_STATIC_PROGRESS, 25, 43, 100, 8 - LTEXT "CEditView.cpp", IDC_STATIC_JOBNAME, 25, 20, 115, 20 - ICON IDI_PRINTER, IDC_STATIC, 10, 8, 11, 9, SS_REALSIZEIMAGE + PUSHBUTTON "Cancel(&X)",IDCANCEL,90,56,50,14 + LTEXT "Printing . . . .",IDC_STATIC,25,10,65,8 + LTEXT "12/123pages",IDC_STATIC_PROGRESS,25,43,100,8 + LTEXT "CEditView.cpp",IDC_STATIC_JOBNAME,25,20,115,20 + ICON IDI_PRINTER,IDC_STATIC,10,8,11,9,SS_REALSIZEIMAGE END -IDD_FILEOPEN DIALOG DISCARDABLE 0, 0, 261, 66 -STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN +IDD_FILEOPEN DIALOG 0, 0, 261, 66 +STYLE DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN FONT 9, "Tahoma" BEGIN - LTEXT "", IDC_STATIC_STC32, 0, 0, 261, 8 - LTEXT "En&coding:", IDC_STATIC, 5, 15, 64, 8 - COMBOBOX IDC_COMBO_CODE, 71, 13, 50, 126, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "C&P", IDC_CHECK_CP, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 122, 14, 25, 10 - CONTROL "&BOM", IDC_CHECK_BOM, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 148, 14, 30, 10 - LTEXT "CR Code(&E):", IDC_STATIC_EOL, 181, 15, 45, 8 - COMBOBOX IDC_COMBO_EOL, 226, 13, 50, 126, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Recent &File:", IDC_STATIC, 5, 32, 59, 8 - COMBOBOX IDC_COMBO_MRU, 71, 30, 185, 236, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP - LTEXT "Recent Fol&der:", IDC_STATIC, 5, 49, 61, 8 - COMBOBOX IDC_COMBO_OPENFOLDER, 71, 46, 185, 236, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP -END - -IDD_FILEUPDATEQUERY DIALOG DISCARDABLE 0, 0, 223, 107 -STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION + LTEXT "",IDC_STATIC_STC32,0,0,261,8 + LTEXT "En&coding:",IDC_STATIC,5,15,64,8 + COMBOBOX IDC_COMBO_CODE,71,13,50,126,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,122,14,25,10 + CONTROL "&BOM",IDC_CHECK_BOM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,148,14,30,10 + LTEXT "CR Code(&E):",IDC_STATIC_EOL,181,15,45,8 + COMBOBOX IDC_COMBO_EOL,226,13,50,126,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Recent &File:",IDC_STATIC,5,32,59,8 + COMBOBOX IDC_COMBO_MRU,71,30,185,236,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP + LTEXT "Recent Fol&der:",IDC_STATIC,5,49,61,8 + COMBOBOX IDC_COMBO_OPENFOLDER,71,46,185,236,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP +END + +IDD_FILEUPDATEQUERY DIALOG 0, 0, 223, 107 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION CAPTION "File has changed" FONT 9, "Tahoma" BEGIN - PUSHBUTTON "&Reload", IDC_BTN_RELOAD, 7, 63, 50, 14 - DEFPUSHBUTTON "&Close", IDC_BTN_CLOSE, 59, 63, 50, 14 - PUSHBUTTON "Auto&load while not modified", IDC_BTN_AUTOLOAD, 114, 63, 102, 14 - PUSHBUTTON "Notify &me later", IDC_BTN_NOTIFYONLY, 7, 81, 102, 14 - PUSHBUTTON "Don't &Notify me again", IDC_BTN_NOSUPERVISION, 114, 81, 102, 14 - EDITTEXT IDC_UPDATEDFILENAME, 7, 7, 209, 25, ES_READONLY | NOT WS_TABSTOP | ES_MULTILINE - LTEXT "This file has been altered by an external editor or other program.", IDC_FILEUPDATEMSG, 7, 36, 209, 8 - LTEXT "", IDC_QUERYRELOADMSG, 7, 48, 209, 8 + PUSHBUTTON "&Reload",IDC_BTN_RELOAD,7,63,50,14 + DEFPUSHBUTTON "&Close",IDC_BTN_CLOSE,59,63,50,14 + PUSHBUTTON "Auto&load while not modified",IDC_BTN_AUTOLOAD,114,63,102,14 + PUSHBUTTON "Notify &me later",IDC_BTN_NOTIFYONLY,7,81,102,14 + PUSHBUTTON "Don't &Notify me again",IDC_BTN_NOSUPERVISION,114,81,102,14 + EDITTEXT IDC_UPDATEDFILENAME,7,7,209,25,ES_MULTILINE | ES_READONLY | NOT WS_TABSTOP + LTEXT "This file has been altered by an external editor or other program.",IDC_FILEUPDATEMSG,7,36,209,8 + LTEXT "",IDC_QUERYRELOADMSG,7,48,209,8 END IDD_FAVORITE DIALOGEX 0, 0, 380, 274 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_THICKFRAME | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME EXSTYLE WS_EX_CONTEXTHELP CAPTION "History Management" -FONT 9, "Tahoma" -BEGIN - CONTROL "List1", IDC_LIST_FAVORITE_FILE, "SysListView32", LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 3, 17, 373, 213 - CONTROL "List1", IDC_LIST_FAVORITE_FOLDER, "SysListView32", LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 25, 39, 243, 79 - CONTROL "List1", IDC_LIST_FAVORITE_EXCEPTMRU, "SysListView32", LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 27, 42, 243, 79 - CONTROL "List1", IDC_LIST_FAVORITE_SEARCH, "SysListView32", LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 18, 54, 243, 79 - CONTROL "List1", IDC_LIST_FAVORITE_REPLACE, "SysListView32", LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 11, 73, 243, 79 - CONTROL "List1", IDC_LIST_FAVORITE_GREP_FILE, "SysListView32", LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 14, 93, 243, 79 - CONTROL "List1", IDC_LIST_FAVORITE_GREP_FOLDER, "SysListView32", LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 18, 115, 243, 79 - CONTROL "List1", IDC_LIST_FAVORITE_CMD, "SysListView32", LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 25, 127, 243, 79 - CONTROL "List1", IDC_LIST_FAVORITE_CUR_DIR, "SysListView32", LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 25, 127, 243, 79 - PUSHBUTTON "Add(&I)", IDC_BUTTON_ADD_FAVORITE, 5, 237, 50, 14 - LTEXT " Clear History:", IDC_STATIC_BUTTONS, 65, 237, 45, 14, SS_CENTERIMAGE - PUSHBUTTON "&All...", IDC_BUTTON_CLEAR, 111, 237, 50, 14 - PUSHBUTTON "Except &Favorite...", IDC_BUTTON_DELETE_NOFAVORATE, 163, 237, 75, 14 - PUSHBUTTON "Missing(&N)...", IDC_BUTTON_DELETE_NOTFOUND, 241, 237, 72, 14 - PUSHBUTTON "Selecte&d", IDC_BUTTON_DELETE_SELECTED, 315, 237, 58, 14 - DEFPUSHBUTTON "&Close", IDOK, 260, 255, 50, 14 - CONTROL "Tab1", IDC_TAB_FAVORITE, "SysTabControl32", WS_TABSTOP, 3, 4, 374, 15 - PUSHBUTTON "&Help", IDC_BUTTON_HELP, 320, 255, 50, 14 - LTEXT "Message", IDC_STATIC_FAVORITE_MSG, 4, 254, 250, 19 +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + CONTROL "List1",IDC_LIST_FAVORITE_FILE,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,3,17,373,213 + CONTROL "List1",IDC_LIST_FAVORITE_FOLDER,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,25,39,243,79 + CONTROL "List1",IDC_LIST_FAVORITE_EXCEPTMRU,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,27,42,243,79 + CONTROL "List1",IDC_LIST_FAVORITE_SEARCH,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,18,54,243,79 + CONTROL "List1",IDC_LIST_FAVORITE_REPLACE,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,11,73,243,79 + CONTROL "List1",IDC_LIST_FAVORITE_GREP_FILE,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,14,93,243,79 + CONTROL "List1",IDC_LIST_FAVORITE_GREP_FOLDER,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,18,115,243,79 + CONTROL "List1",IDC_LIST_FAVORITE_CMD,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,25,127,243,79 + CONTROL "List1",IDC_LIST_FAVORITE_CUR_DIR,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,25,127,243,79 + PUSHBUTTON "Add(&I)",IDC_BUTTON_ADD_FAVORITE,5,237,50,14 + LTEXT " Clear History:",IDC_STATIC_BUTTONS,65,237,45,14,SS_CENTERIMAGE + PUSHBUTTON "&All...",IDC_BUTTON_CLEAR,111,237,50,14 + PUSHBUTTON "Except &Favorite...",IDC_BUTTON_DELETE_NOFAVORATE,163,237,75,14 + PUSHBUTTON "Missing(&N)...",IDC_BUTTON_DELETE_NOTFOUND,241,237,72,14 + PUSHBUTTON "Selecte&d",IDC_BUTTON_DELETE_SELECTED,315,237,58,14 + DEFPUSHBUTTON "&Close",IDOK,260,255,50,14 + CONTROL "Tab1",IDC_TAB_FAVORITE,"SysTabControl32",WS_TABSTOP,3,4,374,15 + PUSHBUTTON "&Help",IDC_BUTTON_HELP,320,255,50,14 + LTEXT "Message",IDC_STATIC_FAVORITE_MSG,4,254,250,19 END IDD_TAGJUMPLIST DIALOGEX 0, 0, 410, 189 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_THICKFRAME | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME EXSTYLE WS_EX_CONTEXTHELP CAPTION "Direct Tag Jump List" -FONT 9, "Tahoma" +FONT 9, "Tahoma", 0, 0, 0x1 BEGIN - LTEXT "DIR", IDC_STATIC_BASEDIR, 4, 151, 276, 8, SS_NOPREFIX - LTEXT "&Keyword", IDC_STATIC_KEYWORD, 4, 162, 100, 8, SS_NOPREFIX - COMBOBOX IDC_KEYWORD, 3, 172, 134, 180, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP - CONTROL "List1", IDC_LIST_TAGJUMP, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 3, 4, 403, 143 - PUSHBUTTON "&Previous", IDC_BUTTON_PREVTAG, 296, 152, 50, 14 - PUSHBUTTON "&Next", IDC_BUTTON_NEXTTAG, 349, 152, 50, 14 - PUSHBUTTON "&Help", IDC_BUTTON_HELP, 243, 170, 50, 14 - DEFPUSHBUTTON "&Jump", IDOK, 296, 170, 50, 14 - PUSHBUTTON "Cancel(&X)", IDCANCEL, 349, 170, 50, 14 - CONTROL "Case Insensitive(&F)", IDC_CHECK_ICASE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 144, 163, 93, 10 - CONTROL "M&atch inside string", IDC_CHECK_ANYWHERE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 144, 175, 93, 10 + LTEXT "DIR",IDC_STATIC_BASEDIR,4,151,276,8,SS_NOPREFIX + LTEXT "&Keyword",IDC_STATIC_KEYWORD,4,162,100,8,SS_NOPREFIX + COMBOBOX IDC_KEYWORD,3,172,134,180,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP + CONTROL "List1",IDC_LIST_TAGJUMP,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,3,4,403,143 + PUSHBUTTON "&Previous",IDC_BUTTON_PREVTAG,296,152,50,14 + PUSHBUTTON "&Next",IDC_BUTTON_NEXTTAG,349,152,50,14 + PUSHBUTTON "&Help",IDC_BUTTON_HELP,243,170,50,14 + DEFPUSHBUTTON "&Jump",IDOK,296,170,50,14 + PUSHBUTTON "Cancel(&X)",IDCANCEL,349,170,50,14 + CONTROL "Case Insensitive(&F)",IDC_CHECK_ICASE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,144,163,93,10 + CONTROL "M&atch inside string",IDC_CHECK_ANYWHERE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,144,175,93,10 END IDD_TAG_MAKE DIALOGEX 0, 0, 233, 85 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP CAPTION "Make Tag File" -FONT 9, "Tahoma" +FONT 9, "Tahoma", 0, 0, 0x1 BEGIN - LTEXT "Tag Creation Folder", IDC_STATIC, 7, 7, 65, 8 - EDITTEXT IDC_EDIT_TAG_MAKE_FOLDER, 7, 18, 201, 12, ES_AUTOHSCROLL - PUSHBUTTON "...", IDC_BUTTON_TAG_MAKE_REF, 211, 17, 15, 12 - PUSHBUTTON "Up(&B)", IDC_BUTTON_FOLDER_UP, 186, 31, 25, 14 - CONTROL "Recurse subfolders", IDC_CHECK_TAG_MAKE_RECURSE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 34, 107, 10 - LTEXT "Command line options", IDC_STATIC, 7, 49, 86, 8 - EDITTEXT IDC_EDIT_TAG_MAKE_CMDLINE, 96, 47, 130, 12, ES_AUTOHSCROLL - DEFPUSHBUTTON "Create(&O)", IDOK, 68, 64, 50, 14 - PUSHBUTTON "Cancel(&X)", IDCANCEL, 122, 64, 50, 14 - PUSHBUTTON "&Help", IDC_BUTTON_HELP, 176, 64, 50, 14 + LTEXT "Tag Creation Folder",IDC_STATIC,7,7,65,8 + EDITTEXT IDC_EDIT_TAG_MAKE_FOLDER,7,18,201,12,ES_AUTOHSCROLL + PUSHBUTTON "...",IDC_BUTTON_TAG_MAKE_REF,211,17,15,12 + PUSHBUTTON "Up(&B)",IDC_BUTTON_FOLDER_UP,186,31,25,14 + CONTROL "Recurse subfolders",IDC_CHECK_TAG_MAKE_RECURSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,34,107,10 + LTEXT "Command line options",IDC_STATIC,7,49,86,8 + EDITTEXT IDC_EDIT_TAG_MAKE_CMDLINE,96,47,130,12,ES_AUTOHSCROLL + DEFPUSHBUTTON "Create(&O)",IDOK,68,64,50,14 + PUSHBUTTON "Cancel(&X)",IDCANCEL,122,64,50,14 + PUSHBUTTON "&Help",IDC_BUTTON_HELP,176,64,50,14 END -IDD_OPERATIONRUNNING DIALOG DISCARDABLE 0, 0, 190, 35 -STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +IDD_OPERATIONRUNNING DIALOG 0, 0, 190, 35 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Processing..." FONT 9, "Tahoma" BEGIN - LTEXT "Processing . . . .", IDC_STATIC_MSG, 5, 5, 54, 8, NOT WS_GROUP - CONTROL "Progress1", IDC_PROGRESS, "msctls_progress32", WS_BORDER, 5, 20, 120, 10 - PUSHBUTTON "Cancel(&X)", IDCANCEL, 135, 16, 50, 14 - RTEXT "", IDC_STATIC_KENSUU, 61, 5, 123, 8, NOT WS_GROUP + LTEXT "Processing . . . .",IDC_STATIC_MSG,5,5,54,8,NOT WS_GROUP + CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32",WS_BORDER,5,20,120,10 + PUSHBUTTON "Cancel(&X)",IDCANCEL,135,16,50,14 + RTEXT "",IDC_STATIC_KENSUU,61,5,123,8,NOT WS_GROUP END IDD_DIFF DIALOGEX 0, 0, 263, 303 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_THICKFRAME | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME EXSTYLE WS_EX_CONTEXTHELP CAPTION "DIFF Differences" -FONT 9, "Tahoma" -BEGIN - GROUPBOX "Compare with", IDC_FRAME_DIFF_DST, 7, 47, 249, 138, WS_GROUP - EDITTEXT IDC_EDIT_DIFF_DST, 13, 72, 191, 13, ES_AUTOHSCROLL - CONTROL "Using External File", IDC_RADIO_DIFF_DST1, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 13, 58, 78, 11 - PUSHBUTTON "Select(&R)...", IDC_BUTTON_DIFF_DST, 208, 72, 42, 14, WS_GROUP - CONTROL "Other Open Editor Files", IDC_RADIO_DIFF_DST2, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 13, 89, 147, 11 - LISTBOX IDC_LIST_DIFF_FILES, 13, 102, 236, 77, LBS_SORT | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - CONTROL "&Case Insensitive", IDC_CHECK_DIFF_OPT_CASE, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 7, 191, 101, 10 - CONTROL "Ignore &Whitespace", IDC_CHECK_DIFF_OPT_SPACE, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 7, 203, 101, 10 - CONTROL "Ignore diff in whitespace(&B)", IDC_CHECK_DIFF_OPT_SPCCHG, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 7, 216, 101, 10 - CONTROL "Ignore Blank &Lines", IDC_CHECK_DIFF_OPT_BLINE, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 7, 229, 101, 10 - CONTROL "&Tab whitespace diff", IDC_CHECK_DIFF_OPT_TABSPC, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 7, 242, 101, 10 - GROUPBOX "Editor File is...", IDC_FRAME_DIFF_FILE12, 110, 190, 146, 26, WS_GROUP - CONTROL "&New File", IDC_RADIO_DIFF_FILE1, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 119, 201, 59, 10 - CONTROL "Ol&d File", IDC_RADIO_DIFF_FILE2, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 183, 201, 59, 10 - GROUPBOX "Jump to Prev(Next) diff", IDC_FRAME_SEARCH_MSG, 110, 221, 146, 41 - CONTROL "Show &message if not found", IDC_CHECK_NOTIFYNOTFOUND, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 114, 232, 140, 10 - CONTROL "Continue search from top of file(&Z)", IDC_CHECK_SEARCHALL, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 114, 245, 130, 10 - CONTROL "Show message if no differences found", IDC_CHECK_DIFF_EXEC_STATE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 110, 267, 139, 10 - DEFPUSHBUTTON "&OK", IDOK, 93, 282, 50, 14 - PUSHBUTTON "Cancel(&X)", IDCANCEL, 147, 282, 50, 14 - PUSHBUTTON "&Help", IDC_BUTTON_HELP, 202, 282, 50, 14 - LTEXT "Current Editor File", IDC_STATIC, 7, 7, 61, 8 - EDITTEXT IDC_STATIC_DIFF_SRC, 7, 18, 249, 23, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL, WS_EX_STATICEDGE +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + GROUPBOX "Compare with",IDC_FRAME_DIFF_DST,7,47,249,138,WS_GROUP + EDITTEXT IDC_EDIT_DIFF_DST,13,72,191,13,ES_AUTOHSCROLL + CONTROL "Using External File",IDC_RADIO_DIFF_DST1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,13,58,78,11 + PUSHBUTTON "Select(&R)...",IDC_BUTTON_DIFF_DST,208,72,42,14,WS_GROUP + CONTROL "Other Open Editor Files",IDC_RADIO_DIFF_DST2,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,13,89,147,11 + LISTBOX IDC_LIST_DIFF_FILES,13,102,236,77,LBS_SORT | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + CONTROL "&Case Insensitive",IDC_CHECK_DIFF_OPT_CASE,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,191,101,10 + CONTROL "Ignore &Whitespace",IDC_CHECK_DIFF_OPT_SPACE,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,203,101,10 + CONTROL "Ignore diff in whitespace(&B)",IDC_CHECK_DIFF_OPT_SPCCHG, + "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,216,101,10 + CONTROL "Ignore Blank &Lines",IDC_CHECK_DIFF_OPT_BLINE,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,229,101,10 + CONTROL "&Tab whitespace diff",IDC_CHECK_DIFF_OPT_TABSPC,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,242,101,10 + GROUPBOX "Editor File is...",IDC_FRAME_DIFF_FILE12,110,190,146,26,WS_GROUP + CONTROL "&New File",IDC_RADIO_DIFF_FILE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,119,201,59,10 + CONTROL "Ol&d File",IDC_RADIO_DIFF_FILE2,"Button",BS_AUTORADIOBUTTON | WS_GROUP,183,201,59,10 + GROUPBOX "Jump to Prev(Next) diff",IDC_FRAME_SEARCH_MSG,110,221,146,41 + CONTROL "Show &message if not found",IDC_CHECK_NOTIFYNOTFOUND, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,232,140,10 + CONTROL "Continue search from top of file(&Z)",IDC_CHECK_SEARCHALL, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,245,130,10 + CONTROL "Show message if no differences found",IDC_CHECK_DIFF_EXEC_STATE, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,267,139,10 + DEFPUSHBUTTON "&OK",IDOK,93,282,50,14 + PUSHBUTTON "Cancel(&X)",IDCANCEL,147,282,50,14 + PUSHBUTTON "&Help",IDC_BUTTON_HELP,202,282,50,14 + LTEXT "Current Editor File",IDC_STATIC,7,7,61,8 + EDITTEXT IDC_STATIC_DIFF_SRC,7,18,249,23,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL,WS_EX_STATICEDGE END IDD_CTRLCODE DIALOGEX 0, 0, 179, 185 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP CAPTION "Control Code" -FONT 9, "Tahoma" +FONT 9, "Tahoma", 0, 0, 0x1 BEGIN - CONTROL "List1", IDC_LIST_CTRLCODE, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOLABELWRAP | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 2, 2, 175, 162 - DEFPUSHBUTTON "&OK", IDOK, 19, 168, 50, 14 - PUSHBUTTON "Cancel(&X)", IDCANCEL, 73, 168, 50, 14 - PUSHBUTTON "&Help", IDC_BUTTON_HELP, 127, 168, 50, 14 + CONTROL "List1",IDC_LIST_CTRLCODE,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_NOLABELWRAP | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,2,2,175,162 + DEFPUSHBUTTON "&OK",IDOK,19,168,50,14 + PUSHBUTTON "Cancel(&X)",IDCANCEL,73,168,50,14 + PUSHBUTTON "&Help",IDC_BUTTON_HELP,127,168,50,14 END IDD_SETCHARSET DIALOGEX 0, 0, 186, 45 -STYLE DS_CENTER | DS_MODALFRAME | DS_SETFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION CAPTION "Select Encoding" -FONT 9, "Tahoma" +FONT 9, "Tahoma", 0, 0, 0x1 BEGIN - LTEXT "En&coding:", IDC_STATIC, 5, 9, 64, 8 - COMBOBOX IDC_COMBO_CHARSET, 71, 7, 50, 126, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - AUTOCHECKBOX "C&P", IDC_CHECK_CP, 71, 26, 25, 10 - AUTOCHECKBOX "&BOM", IDC_CHECK_BOM, 96, 26, 30, 10 - DEFPUSHBUTTON "&OK", IDOK, 129, 7, 50, 14 - PUSHBUTTON "Cancel(&X)", IDCANCEL, 129, 24, 50, 14 + LTEXT "En&coding:",IDC_STATIC,5,9,64,8 + COMBOBOX IDC_COMBO_CHARSET,71,7,50,126,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,71,26,25,10 + CONTROL "&BOM",IDC_CHECK_BOM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,96,26,30,10 + DEFPUSHBUTTON "&OK",IDOK,129,7,50,14 + PUSHBUTTON "Cancel(&X)",IDCANCEL,129,24,50,14 END IDD_TYPELIST DIALOGEX 0, 0, 187, 280 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP CAPTION "Document Type List" -FONT 9, "Tahoma" -BEGIN - LTEXT "Selec&t the type from below:", IDC_STATIC, 5, 5, 111, 8 - LISTBOX IDC_LIST_TYPES, 5, 15, 120, 258, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - DEFPUSHBUTTON "&Settings...", IDOK, 130, 15, 50, 14 - PUSHBUTTON "Temp Apply(&R)", IDC_BUTTON_TEMPCHANGE, 130, 31, 50, 14 - PUSHBUTTON "Cancel(&X)", IDCANCEL, 130, 50, 50, 14 - PUSHBUTTON "&Import", IDC_BUTTON_IMPORT, 130, 79, 50, 14 - PUSHBUTTON "&Export", IDC_BUTTON_EXPORT, 130, 95, 50, 14 - PUSHBUTTON "I&nitialize", IDC_BUTTON_INITIALIZE, 130, 111, 50, 14 - PUSHBUTTON "Dupli&cate", IDC_BUTTON_COPY_TYPE, 130, 127, 50, 14 - PUSHBUTTON "&Up", IDC_BUTTON_UP_TYPE, 130, 143, 50, 14 - PUSHBUTTON "D&own", IDC_BUTTON_DOWN_TYPE, 130, 159, 50, 14 - PUSHBUTTON "&Add", IDC_BUTTON_ADD_TYPE, 130, 175, 50, 14 - PUSHBUTTON "&Del", IDC_BUTTON_DEL_TYPE, 130, 191, 50, 14 - CONTROL "Add to Context Menu", IDC_CHECK_EXT_RMENU, "Button", BS_AUTOCHECKBOX | BS_MULTILINE | WS_DISABLED | WS_TABSTOP, 130, 207, 54, 28 - CONTROL "Open on Double Click", IDC_CHECK_EXT_DBLCLICK, "Button", BS_AUTOCHECKBOX | BS_MULTILINE | WS_DISABLED | WS_TABSTOP, 130, 231, 54, 28 - PUSHBUTTON "&Help", IDC_BUTTON_HELP, 130, 262, 50, 14 +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + LTEXT "Selec&t the type from below:",IDC_STATIC,5,5,111,8 + LISTBOX IDC_LIST_TYPES,5,15,120,258,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + DEFPUSHBUTTON "&Settings...",IDOK,130,15,50,14 + PUSHBUTTON "Temp Apply(&R)",IDC_BUTTON_TEMPCHANGE,130,31,50,14 + PUSHBUTTON "Cancel(&X)",IDCANCEL,130,50,50,14 + PUSHBUTTON "&Import",IDC_BUTTON_IMPORT,130,79,50,14 + PUSHBUTTON "&Export",IDC_BUTTON_EXPORT,130,95,50,14 + PUSHBUTTON "I&nitialize",IDC_BUTTON_INITIALIZE,130,111,50,14 + PUSHBUTTON "Dupli&cate",IDC_BUTTON_COPY_TYPE,130,127,50,14 + PUSHBUTTON "&Up",IDC_BUTTON_UP_TYPE,130,143,50,14 + PUSHBUTTON "D&own",IDC_BUTTON_DOWN_TYPE,130,159,50,14 + PUSHBUTTON "&Add",IDC_BUTTON_ADD_TYPE,130,175,50,14 + PUSHBUTTON "&Del",IDC_BUTTON_DEL_TYPE,130,191,50,14 + CONTROL "Add to Context Menu",IDC_CHECK_EXT_RMENU,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_DISABLED | WS_TABSTOP,130,207,54,28 + CONTROL "Open on Double Click",IDC_CHECK_EXT_DBLCLICK,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_DISABLED | WS_TABSTOP,130,231,54,28 + PUSHBUTTON "&Help",IDC_BUTTON_HELP,130,262,50,14 END IDD_TYPE_ASCERTAIN DIALOGEX 0, 0, 187, 100 -STYLE DS_MODALFRAME | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Import Document Type Settings" -FONT 9, "Tahoma" +FONT 9, "Tahoma", 0, 0, 0x1 BEGIN - LTEXT "Import to:", IDC_STATIC, 7, 7, 33, 8 - CONTROL "New &Add", IDC_RADIO_TYPE_ADD, "Button", BS_AUTORADIOBUTTON, 36, 7, 45, 8 - CONTROL "Default", IDC_RADIO_TYPE_TO, "Button", BS_AUTORADIOBUTTON, 86, 7, 135, 8 - LTEXT "Type Name:", IDC_STATIC, 7, 27, 33, 8 - LTEXT "Default", IDC_STATIC_TYPE_FILE, 45, 27, 135, 16 - LTEXT "&Color", IDC_STATIC, 7, 47, 35, 8 - COMBOBOX IDC_COMBO_COLORS, 44, 45, 100, 250, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Press OK to import type setting.", IDC_STATIC_MSG, 26, 64, 154, 8 - DEFPUSHBUTTON "&OK", IDOK, 26, 79, 50, 14 - PUSHBUTTON "Cancel(&X)", IDCANCEL, 78, 79, 50, 14 - PUSHBUTTON "&Help", IDC_BUTTON_HELP, 130, 79, 50, 14 + LTEXT "Import to:",IDC_STATIC,7,7,33,8 + CONTROL "New &Add",IDC_RADIO_TYPE_ADD,"Button",BS_AUTORADIOBUTTON,36,7,45,8 + CONTROL "Default",IDC_RADIO_TYPE_TO,"Button",BS_AUTORADIOBUTTON,86,7,135,8 + LTEXT "Type Name:",IDC_STATIC,7,27,33,8 + LTEXT "Default",IDC_STATIC_TYPE_FILE,45,27,135,16 + LTEXT "&Color",IDC_STATIC,7,47,35,8 + COMBOBOX IDC_COMBO_COLORS,44,45,100,250,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Press OK to import type setting.",IDC_STATIC_MSG,26,64,154,8 + DEFPUSHBUTTON "&OK",IDOK,26,79,50,14 + PUSHBUTTON "Cancel(&X)",IDCANCEL,78,79,50,14 + PUSHBUTTON "&Help",IDC_BUTTON_HELP,130,79,50,14 END IDD_PROP_SCREEN DIALOGEX 0, 0, 302, 244 -STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "Tahoma" -BEGIN - LTEXT "&Name", IDC_STATIC, 5, 6, 49, 8 - EDITTEXT IDC_EDIT_TYPENAME, 55, 4, 59, 12, ES_AUTOHSCROLL - LTEXT "File E&xt", IDC_STATIC, 124, 6, 58, 8 - EDITTEXT IDC_EDIT_TYPEEXTS, 184, 4, 113, 12, ES_AUTOHSCROLL - RTEXT "Line Wrap Method(&<)", IDC_STATIC, 8, 34, 56, 8, NOT WS_GROUP - COMBOBOX IDC_COMBO_WRAPMETHOD, 70, 32, 72, 78, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - RTEXT "W&rap@Col", IDC_STATIC, 8, 49, 56, 8, NOT WS_GROUP - EDITTEXT IDC_EDIT_MAXLINELEN, 70, 48, 40, 12 - CONTROL "Spin1", IDC_SPIN_MAXLINELEN, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 117, 48, 9, 12, WS_EX_TRANSPARENT - RTEXT "Letter spa&cing", IDC_STATIC, 8, 64, 56, 8, NOT WS_GROUP - EDITTEXT IDC_EDIT_CHARSPACE, 70, 63, 40, 12 - CONTROL "Spin1", IDC_SPIN_CHARSPACE, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 117, 63, 9, 12, WS_EX_TRANSPARENT - LTEXT "dot", IDC_STATIC, 114, 64, 18, 8 - RTEXT "&Line spacing", IDC_STATIC, 8, 79, 56, 8, NOT WS_GROUP - EDITTEXT IDC_EDIT_LINESPACE, 70, 78, 40, 12, ES_AUTOHSCROLL - CONTROL "Spin3", IDC_SPIN_LINESPACE, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 117, 78, 9, 12 - LTEXT "dot", IDC_STATIC, 114, 79, 18, 8 - RTEXT "&TAB Width", IDC_STATIC, 8, 94, 56, 8, NOT WS_GROUP - EDITTEXT IDC_EDIT_TABSPACE, 70, 93, 40, 12, ES_AUTOHSCROLL - CONTROL "Spin3", IDC_SPIN_TABSPACE, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 117, 93, 7, 12 - LTEXT "T&AB Symbol", IDC_STATIC, 8, 110, 56, 8, NOT WS_GROUP - COMBOBOX IDC_CHECK_TAB_ARROW, 48, 108, 50, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - EDITTEXT IDC_EDIT_TABVIEWSTRING, 103, 108, 40, 12, ES_AUTOHSCROLL - CONTROL "Insert S&PACE", IDC_CHECK_INS_SPACE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 70, 123, 57, 10 - COMBOBOX IDC_COMBO_TSV_MODE, 16, 123, 46, 40, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - GROUPBOX "Layout", IDC_STATIC, 3, 22, 145, 117 - CONTROL "A&uto-Indent", IDC_CHECK_INDENT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 154, 72, 10 - CONTROL "Full Width Space Chr(&Z)", IDC_CHECK_INDENT_WSPACE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 83, 154, 61, 10 - LTEXT "&Smart-Indent", IDC_STATIC, 8, 169, 68, 8 - COMBOBOX IDC_COMBO_SMARTINDENT, 82, 167, 60, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Alternative &Indent Char", IDC_STATIC, 8, 183, 120, 8 - EDITTEXT IDC_EDIT_INDENTCHARS, 38, 195, 103, 12, ES_AUTOHSCROLL - LTEXT "Wrapped Line Indent(&2)", IDC_STATIC, 8, 211, 75, 8 - COMBOBOX IDC_COMBO_INDENTLAYOUT, 87, 209, 54, 63, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Trim Blank at &end of line", IDC_CHECK_RTRIM_PREVLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 224, 113, 10 - GROUPBOX "Indent", IDC_STATIC, 3, 143, 145, 97 - CONTROL "Standard Rules(&B)", IDC_RADIO_OUTLINEDEFAULT, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 162, 33, 82, 10 - COMBOBOX IDC_COMBO_OUTLINES, 173, 46, 81, 85, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Rule File(&D)", IDC_RADIO_OUTLINERULEFILE, "Button", BS_AUTORADIOBUTTON, 162, 63, 69, 10 - EDITTEXT IDC_EDIT_OUTLINERULEFILE, 173, 74, 92, 14, ES_AUTOHSCROLL - PUSHBUTTON "(&1)...", IDC_BUTTON_RULEFILE_REF, 268, 74, 20, 14 - GROUPBOX "Outline Analysis Method", IDC_STATIC, 153, 22, 145, 71 - CONTROL "Enable(&G)", IDC_CHECK_USETYPEFONT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 162, 108, 48, 10 - LTEXT "Font(nnpt)", IDC_STATIC_TYPEFONT, 210, 105, 85, 16, SS_CENTERIMAGE - PUSHBUTTON "&Font...", IDC_BUTTON_TYPEFONT, 173, 121, 80, 14 - GROUPBOX "Type Specific Font", IDC_STATIC, 153, 97, 145, 42 - CONTROL "ASCII &Word Wrap", IDC_CHECK_WORDWRAP, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 162, 154, 78, 10 - CONTROL "Don't wrap new-line(&^)", IDC_CHECK_KINSOKURET, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 162, 168, 100, 10 - CONTROL "Don't show wrap margin(&-)", IDC_CHECK_KINSOKUHIDE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 172, 182, 100, 10 - CONTROL "Don't wrap punctuation(&\\)", IDC_CHECK_KINSOKUKUTO, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 162, 196, 95, 10 - EDITTEXT IDC_EDIT_KINSOKUKUTO, 258, 195, 30, 12, ES_AUTOHSCROLL - CONTROL "Line cant-start with(&[)", IDC_CHECK_KINSOKUHEAD, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 162, 210, 54, 10 - EDITTEXT IDC_EDIT_KINSOKUHEAD, 218, 209, 70, 12, ES_AUTOHSCROLL - CONTROL "Line cant-end with(&])", IDC_CHECK_KINSOKUTAIL, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 162, 224, 54, 10 - EDITTEXT IDC_EDIT_KINSOKUTAIL, 218, 223, 70, 12, ES_AUTOHSCROLL - GROUPBOX "Misc", IDC_STATIC, 153, 143, 145, 97 -END - -IDD_PROP_COLOR DIALOGEX DISCARDABLE 0, 0, 302, 244 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -FONT 9, "Tahoma" -BEGIN - GROUPBOX "Co&lors", IDC_STATIC, 3, 6, 148, 204, WS_GROUP - LISTBOX IDC_LIST_COLORS, 6, 18, 142, 148, LBS_OWNERDRAWFIXED | WS_VSCROLL | WS_GROUP | WS_TABSTOP - CONTROL "Enable highlight(&D)", IDC_CHECK_DISP, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 6, 165, 65, 10 - CONTROL "&Bold", IDC_CHECK_BOLD, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 72, 165, 36, 10 - CONTROL "&Underline", IDC_CHECK_UNDERLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 100, 165, 40, 10 - LTEXT "Text(C)", IDC_STATIC_MOZI, 16, 181, 34, 8 - CONTROL "&C", IDC_BUTTON_TEXTCOLOR, "Button", BS_OWNERDRAW | WS_TABSTOP, 54, 178, 25, 14 - PUSHBUTTON "Unify color(&<)...", IDC_BUTTON_SAMETEXTCOLOR, 84, 178, 58, 14 - LTEXT "Background(K)", IDC_STATIC_HAIKEI, 16, 196, 33, 8, NOT WS_GROUP - CONTROL "&K", IDC_BUTTON_BACKCOLOR, "Button", BS_OWNERDRAW | WS_TABSTOP, 54, 193, 25, 14 - PUSHBUTTON "Unify color(&>)...", IDC_BUTTON_SAMEBKCOLOR, 84, 193, 58, 14 - PUSHBUTTON "&Import...", IDC_BUTTON_IMPORT, 25, 215, 60, 14, WS_GROUP - PUSHBUTTON "E&xport...", IDC_BUTTON_EXPORT, 88, 215, 60, 14 - LTEXT "Keyword Set &1", IDC_STATIC, 162, 18, 54, 8 - COMBOBOX IDC_COMBO_SET, 218, 16, 75, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "Set &2~10...", IDC_BUTTON_KEYWORD_SELECT, 218, 31, 75, 14 - PUSHBUTTON "Keyword Setting(&C)...", IDC_BUTTON_EDITKEYWORD, 218, 47, 75, 14 - GROUPBOX "Keyword Highlighting", IDC_STATIC, 156, 6, 142, 60, WS_GROUP - LTEXT "Block(&F)", IDC_STATIC, 164, 80, 42, 8 - EDITTEXT IDC_EDIT_BLOCKCOMMENT_FROM, 211, 78, 27, 12, ES_AUTOHSCROLL - LTEXT "&to", IDC_STATIC, 245, 80, 18, 8, NOT WS_GROUP - EDITTEXT IDC_EDIT_BLOCKCOMMENT_TO, 267, 78, 26, 12, ES_AUTOHSCROLL - LTEXT "Block(&A)", IDC_STATIC, 164, 94, 42, 8 - EDITTEXT IDC_EDIT_BLOCKCOMMENT_FROM2, 211, 92, 27, 12, ES_AUTOHSCROLL - LTEXT "to(&Z)", IDC_STATIC, 245, 94, 18, 8, NOT WS_GROUP - EDITTEXT IDC_EDIT_BLOCKCOMMENT_TO2, 267, 92, 26, 12, ES_AUTOHSCROLL - LTEXT "Line(&M)", IDC_STATIC, 164, 110, 27, 8 - EDITTEXT IDC_EDIT_LINECOMMENT, 195, 108, 24, 12, ES_AUTOHSCROLL - CONTROL "Col(&P)", IDC_CHECK_LCPOS, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 223, 109, 33, 10 - RTEXT "&@", IDC_LABEL_LCPOS, 256, 110, 8, 8 - EDITTEXT IDC_EDIT_LINECOMMENTPOS, 267, 108, 26, 12, ES_AUTOHSCROLL - CONTROL "", IDC_SPIN_LCColNum, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 295, 108, 6, 12 - LTEXT "Line(&E)", IDC_STATIC, 164, 124, 25, 8 - EDITTEXT IDC_EDIT_LINECOMMENT2, 195, 122, 24, 12, ES_AUTOHSCROLL - CONTROL "C&ol", IDC_CHECK_LCPOS2, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 223, 123, 34, 10 - RTEXT "&[", IDC_LABEL_LCPOS2, 256, 124, 8, 8 - EDITTEXT IDC_EDIT_LINECOMMENTPOS2, 267, 122, 26, 12, ES_AUTOHSCROLL - CONTROL "", IDC_SPIN_LCColNum2, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 295, 122, 6, 12 - LTEXT "Line(&G)", IDC_STATIC, 164, 138, 26, 8 - EDITTEXT IDC_EDIT_LINECOMMENT3, 195, 136, 24, 12, ES_AUTOHSCROLL - CONTROL "Col(&J)", IDC_CHECK_LCPOS3, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 223, 137, 33, 10 - RTEXT "&]", IDC_LABEL_LCPOS3, 256, 138, 8, 8 - EDITTEXT IDC_EDIT_LINECOMMENTPOS3, 267, 136, 26, 12, ES_AUTOHSCROLL - CONTROL "", IDC_SPIN_LCColNum3, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 295, 136, 6, 12 - GROUPBOX "Comments", IDC_STATIC, 156, 68, 142, 85, WS_GROUP - GROUPBOX "Escape(&Q)", IDC_STATIC, 156, 168, 142, 42, WS_GROUP - COMBOBOX IDC_COMBO_STRINGLITERAL, 160, 180, 68, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Single line(&\\)", IDC_CHECK_STRINGLINEONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 233, 180, 64, 10 - CONTROL "Highlight to eol if without e&nd mark", IDC_CHECK_STRINGENDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 160, 194, 136, 10 - LTEXT "Vertical Line(&3)", IDC_STATIC, 164, 218, 66, 8 - EDITTEXT IDC_EDIT_VERTLINE, 220, 216, 74, 12, ES_AUTOHSCROLL - LTEXT "* Align using Step(Begin, End) and separate with commas", IDC_STATIC, 115, 230, 192, 8 +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + LTEXT "&Name",IDC_STATIC,5,6,49,8 + EDITTEXT IDC_EDIT_TYPENAME,55,4,59,12,ES_AUTOHSCROLL + LTEXT "File E&xt",IDC_STATIC,124,6,58,8 + EDITTEXT IDC_EDIT_TYPEEXTS,184,4,113,12,ES_AUTOHSCROLL + RTEXT "Line Wrap Method(&<)",IDC_STATIC,8,34,56,8,NOT WS_GROUP + COMBOBOX IDC_COMBO_WRAPMETHOD,70,32,72,78,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + RTEXT "W&rap@Col",IDC_STATIC,8,49,56,8,NOT WS_GROUP + EDITTEXT IDC_EDIT_MAXLINELEN,70,48,40,12 + CONTROL "Spin1",IDC_SPIN_MAXLINELEN,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,117,48,9,12,WS_EX_TRANSPARENT + RTEXT "Letter spa&cing",IDC_STATIC,8,64,56,8,NOT WS_GROUP + EDITTEXT IDC_EDIT_CHARSPACE,70,63,40,12 + CONTROL "Spin1",IDC_SPIN_CHARSPACE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,117,63,9,12,WS_EX_TRANSPARENT + LTEXT "dot",IDC_STATIC,114,64,18,8 + RTEXT "&Line spacing",IDC_STATIC,8,79,56,8,NOT WS_GROUP + EDITTEXT IDC_EDIT_LINESPACE,70,78,40,12,ES_AUTOHSCROLL + CONTROL "Spin3",IDC_SPIN_LINESPACE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,117,78,9,12 + LTEXT "dot",IDC_STATIC,114,79,18,8 + RTEXT "&TAB Width",IDC_STATIC,8,94,56,8,NOT WS_GROUP + EDITTEXT IDC_EDIT_TABSPACE,70,93,40,12,ES_AUTOHSCROLL + CONTROL "Spin3",IDC_SPIN_TABSPACE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,117,93,7,12 + LTEXT "T&AB Symbol",IDC_STATIC,8,110,56,8,NOT WS_GROUP + COMBOBOX IDC_CHECK_TAB_ARROW,48,108,50,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + EDITTEXT IDC_EDIT_TABVIEWSTRING,103,108,40,12,ES_AUTOHSCROLL + CONTROL "Insert S&PACE",IDC_CHECK_INS_SPACE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,123,57,10 + COMBOBOX IDC_COMBO_TSV_MODE,16,123,46,40,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Layout",IDC_STATIC,3,22,145,117 + CONTROL "A&uto-Indent",IDC_CHECK_INDENT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,154,72,10 + CONTROL "Full Width Space Chr(&Z)",IDC_CHECK_INDENT_WSPACE, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,83,154,61,10 + LTEXT "&Smart-Indent",IDC_STATIC,8,169,68,8 + COMBOBOX IDC_COMBO_SMARTINDENT,82,167,60,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Alternative &Indent Char",IDC_STATIC,8,183,120,8 + EDITTEXT IDC_EDIT_INDENTCHARS,38,195,103,12,ES_AUTOHSCROLL + LTEXT "Wrapped Line Indent(&2)",IDC_STATIC,8,211,75,8 + COMBOBOX IDC_COMBO_INDENTLAYOUT,87,209,54,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Trim Blank at &end of line",IDC_CHECK_RTRIM_PREVLINE, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,224,113,10 + GROUPBOX "Indent",IDC_STATIC,3,143,145,97 + CONTROL "Standard Rules(&B)",IDC_RADIO_OUTLINEDEFAULT,"Button",BS_AUTORADIOBUTTON | WS_GROUP,162,33,82,10 + COMBOBOX IDC_COMBO_OUTLINES,173,46,81,85,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Rule File(&D)",IDC_RADIO_OUTLINERULEFILE,"Button",BS_AUTORADIOBUTTON,162,63,69,10 + EDITTEXT IDC_EDIT_OUTLINERULEFILE,173,74,92,14,ES_AUTOHSCROLL + PUSHBUTTON "(&1)...",IDC_BUTTON_RULEFILE_REF,268,74,20,14 + GROUPBOX "Outline Analysis Method",IDC_STATIC,153,22,145,71 + CONTROL "Enable(&G)",IDC_CHECK_USETYPEFONT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,108,48,10 + LTEXT "Font(nnpt)",IDC_STATIC_TYPEFONT,210,105,85,16,SS_CENTERIMAGE + PUSHBUTTON "&Font...",IDC_BUTTON_TYPEFONT,173,121,80,14 + GROUPBOX "Type Specific Font",IDC_STATIC,153,97,145,42 + CONTROL "ASCII &Word Wrap",IDC_CHECK_WORDWRAP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,154,78,10 + CONTROL "Don't wrap new-line(&^)",IDC_CHECK_KINSOKURET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,168,100,10 + CONTROL "Don't show wrap margin(&-)",IDC_CHECK_KINSOKUHIDE, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,172,182,100,10 + CONTROL "Don't wrap punctuation(&\\)",IDC_CHECK_KINSOKUKUTO, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,196,95,10 + EDITTEXT IDC_EDIT_KINSOKUKUTO,258,195,30,12,ES_AUTOHSCROLL + CONTROL "Line cant-start with(&[)",IDC_CHECK_KINSOKUHEAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,210,54,10 + EDITTEXT IDC_EDIT_KINSOKUHEAD,218,209,70,12,ES_AUTOHSCROLL + CONTROL "Line cant-end with(&])",IDC_CHECK_KINSOKUTAIL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,224,54,10 + EDITTEXT IDC_EDIT_KINSOKUTAIL,218,223,70,12,ES_AUTOHSCROLL + GROUPBOX "Misc",IDC_STATIC,153,143,145,97 +END + +IDD_PROP_COLOR DIALOGEX 0, 0, 302, 244 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + GROUPBOX "Co&lors",IDC_STATIC,3,6,148,204,WS_GROUP + LISTBOX IDC_LIST_COLORS,6,18,142,148,LBS_OWNERDRAWFIXED | WS_VSCROLL | WS_GROUP | WS_TABSTOP + CONTROL "Enable highlight(&D)",IDC_CHECK_DISP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,165,65,10 + CONTROL "&Bold",IDC_CHECK_BOLD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,165,36,10 + CONTROL "&Underline",IDC_CHECK_UNDERLINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,165,40,10 + LTEXT "Text(C)",IDC_STATIC_MOZI,16,181,34,8 + CONTROL "&C",IDC_BUTTON_TEXTCOLOR,"Button",BS_OWNERDRAW | WS_TABSTOP,54,178,25,14 + PUSHBUTTON "Unify color(&<)...",IDC_BUTTON_SAMETEXTCOLOR,84,178,58,14 + LTEXT "Background(K)",IDC_STATIC_HAIKEI,16,196,33,8,NOT WS_GROUP + CONTROL "&K",IDC_BUTTON_BACKCOLOR,"Button",BS_OWNERDRAW | WS_TABSTOP,54,193,25,14 + PUSHBUTTON "Unify color(&>)...",IDC_BUTTON_SAMEBKCOLOR,84,193,58,14 + PUSHBUTTON "&Import...",IDC_BUTTON_IMPORT,25,215,60,14,WS_GROUP + PUSHBUTTON "E&xport...",IDC_BUTTON_EXPORT,88,215,60,14 + LTEXT "Keyword Set &1",IDC_STATIC,162,18,54,8 + COMBOBOX IDC_COMBO_SET,218,16,75,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Set &2~10...",IDC_BUTTON_KEYWORD_SELECT,218,31,75,14 + PUSHBUTTON "Keyword Setting(&C)...",IDC_BUTTON_EDITKEYWORD,218,47,75,14 + GROUPBOX "Keyword Highlighting",IDC_STATIC,156,6,142,60,WS_GROUP + LTEXT "Block(&F)",IDC_STATIC,164,80,42,8 + EDITTEXT IDC_EDIT_BLOCKCOMMENT_FROM,211,78,27,12,ES_AUTOHSCROLL + LTEXT "&to",IDC_STATIC,245,80,18,8,NOT WS_GROUP + EDITTEXT IDC_EDIT_BLOCKCOMMENT_TO,267,78,26,12,ES_AUTOHSCROLL + LTEXT "Block(&A)",IDC_STATIC,164,94,42,8 + EDITTEXT IDC_EDIT_BLOCKCOMMENT_FROM2,211,92,27,12,ES_AUTOHSCROLL + LTEXT "to(&Z)",IDC_STATIC,245,94,18,8,NOT WS_GROUP + EDITTEXT IDC_EDIT_BLOCKCOMMENT_TO2,267,92,26,12,ES_AUTOHSCROLL + LTEXT "Line(&M)",IDC_STATIC,164,110,27,8 + EDITTEXT IDC_EDIT_LINECOMMENT,195,108,24,12,ES_AUTOHSCROLL + CONTROL "Col(&P)",IDC_CHECK_LCPOS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,223,109,33,10 + RTEXT "&@",IDC_LABEL_LCPOS,256,110,8,8 + EDITTEXT IDC_EDIT_LINECOMMENTPOS,267,108,26,12,ES_AUTOHSCROLL + CONTROL "",IDC_SPIN_LCColNum,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,295,108,6,12 + LTEXT "Line(&E)",IDC_STATIC,164,124,25,8 + EDITTEXT IDC_EDIT_LINECOMMENT2,195,122,24,12,ES_AUTOHSCROLL + CONTROL "C&ol",IDC_CHECK_LCPOS2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,223,123,34,10 + RTEXT "&[",IDC_LABEL_LCPOS2,256,124,8,8 + EDITTEXT IDC_EDIT_LINECOMMENTPOS2,267,122,26,12,ES_AUTOHSCROLL + CONTROL "",IDC_SPIN_LCColNum2,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,295,122,6,12 + LTEXT "Line(&G)",IDC_STATIC,164,138,26,8 + EDITTEXT IDC_EDIT_LINECOMMENT3,195,136,24,12,ES_AUTOHSCROLL + CONTROL "Col(&J)",IDC_CHECK_LCPOS3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,223,137,33,10 + RTEXT "&]",IDC_LABEL_LCPOS3,256,138,8,8 + EDITTEXT IDC_EDIT_LINECOMMENTPOS3,267,136,26,12,ES_AUTOHSCROLL + CONTROL "",IDC_SPIN_LCColNum3,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,295,136,6,12 + GROUPBOX "Comments",IDC_STATIC,156,68,142,85,WS_GROUP + GROUPBOX "Escape(&Q)",IDC_STATIC,156,168,142,42,WS_GROUP + COMBOBOX IDC_COMBO_STRINGLITERAL,160,180,68,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Single line(&\\)",IDC_CHECK_STRINGLINEONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,233,180,64,10 + CONTROL "Highlight to eol if without e&nd mark",IDC_CHECK_STRINGENDLINE, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,194,136,10 + LTEXT "Vertical Line(&3)",IDC_STATIC,164,218,66,8 + EDITTEXT IDC_EDIT_VERTLINE,220,216,74,12,ES_AUTOHSCROLL + LTEXT "* Align using Step(Begin, End) and separate with commas",IDC_STATIC,115,230,192,8 END IDD_PROP_SUPPORT DIALOGEX 0, 0, 302, 244 -STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "Tahoma" -BEGIN - LTEXT "Lexicon File(&W)", IDC_STATIC, 8, 17, 53, 8, NOT WS_GROUP - EDITTEXT IDC_EDIT_HOKANFILE, 63, 15, 150, 12, ES_AUTOHSCROLL | WS_GROUP - PUSHBUTTON "(&1)...", IDC_BUTTON_HOKANFILE_REF, 215, 14, 19, 14 - COMBOBOX IDC_COMBO_HOKAN_TYPE, 236, 15, 58, 57, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Case &Insensitive", IDC_CHECK_HOKANLOHICASE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 31, 90, 10 - LTEXT "Candidate:", IDC_STATIC, 102, 32, 30, 8, NOT WS_GROUP - CONTROL "In current &file", IDC_CHECK_HOKANBYFILE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 142, 31, 68, 10 - CONTROL "From &Keyword Set", IDC_CHECK_HOKANBYKEYWORD, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 212, 31, 80, 10 - GROUPBOX "Input Auto-complete Support", IDC_STATIC, 3, 3, 295, 45, WS_GROUP - GROUPBOX "Externa&l Help Setup", IDC_STATIC, 3, 55, 295, 32, WS_GROUP - EDITTEXT IDC_EDIT_TYPEEXTHELP, 8, 68, 264, 12, ES_AUTOHSCROLL | WS_GROUP - PUSHBUTTON "(&2)...", IDC_BUTTON_TYPEOPENHELP, 275, 67, 19, 14 - GROUPBOX "External HTML Hel&p Setup", IDC_STATIC, 3, 95, 295, 45, WS_GROUP - EDITTEXT IDC_EDIT_TYPEEXTHTMLHELP, 8, 109, 264, 12, ES_AUTOHSCROLL | WS_GROUP - PUSHBUTTON "(&3)...", IDC_BUTTON_TYPEOPENEXTHTMLHELP, 275, 107, 19, 14 - CONTROL "Do&n't open multiple viewers", IDC_CHECK_TYPEHTMLHELPISSINGLE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 125, 109, 10 - CONTROL "Ch&eck CR consistence when save", IDC_CHECK_CHKENTERATEND, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 145, 146, 10 - CONTROL "Ignore char in strings(&S)", IDC_CHECK_INDENTCPPSTR, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 171, 146, 10 - CONTROL "Ignore char in comments(&C)", IDC_CHECK_INDENTCPPCMT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 158, 171, 130, 10 - CONTROL "When Undo, separate from editing(&U)", IDC_CHECK_INDENTCPPUNDO, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 183, 146, 10 - GROUPBOX "C/C++ Indent Settings", IDC_STATIC, 3, 159, 295, 40, WS_GROUP +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + LTEXT "Lexicon File(&W)",IDC_STATIC,8,17,53,8,NOT WS_GROUP + EDITTEXT IDC_EDIT_HOKANFILE,63,15,150,12,ES_AUTOHSCROLL | WS_GROUP + PUSHBUTTON "(&1)...",IDC_BUTTON_HOKANFILE_REF,215,14,19,14 + COMBOBOX IDC_COMBO_HOKAN_TYPE,236,15,58,57,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Case &Insensitive",IDC_CHECK_HOKANLOHICASE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,31,90,10 + LTEXT "Candidate:",IDC_STATIC,102,32,30,8,NOT WS_GROUP + CONTROL "In current &file",IDC_CHECK_HOKANBYFILE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,142,31,68,10 + CONTROL "From &Keyword Set",IDC_CHECK_HOKANBYKEYWORD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,31,80,10 + GROUPBOX "Input Auto-complete Support",IDC_STATIC,3,3,295,45,WS_GROUP + GROUPBOX "Externa&l Help Setup",IDC_STATIC,3,55,295,32,WS_GROUP + EDITTEXT IDC_EDIT_TYPEEXTHELP,8,68,264,12,ES_AUTOHSCROLL | WS_GROUP + PUSHBUTTON "(&2)...",IDC_BUTTON_TYPEOPENHELP,275,67,19,14 + GROUPBOX "External HTML Hel&p Setup",IDC_STATIC,3,95,295,45,WS_GROUP + EDITTEXT IDC_EDIT_TYPEEXTHTMLHELP,8,109,264,12,ES_AUTOHSCROLL | WS_GROUP + PUSHBUTTON "(&3)...",IDC_BUTTON_TYPEOPENEXTHTMLHELP,275,107,19,14 + CONTROL "Do&n't open multiple viewers",IDC_CHECK_TYPEHTMLHELPISSINGLE, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,125,109,10 + CONTROL "Ch&eck CR consistence when save",IDC_CHECK_CHKENTERATEND, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,145,146,10 + CONTROL "Ignore char in strings(&S)",IDC_CHECK_INDENTCPPSTR, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,171,146,10 + CONTROL "Ignore char in comments(&C)",IDC_CHECK_INDENTCPPCMT, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,158,171,130,10 + CONTROL "When Undo, separate from editing(&U)",IDC_CHECK_INDENTCPPUNDO, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,183,146,10 + GROUPBOX "C/C++ Indent Settings",IDC_STATIC,3,159,295,40,WS_GROUP END IDD_PROP_REGEX DIALOGEX 0, 0, 302, 244 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "Tahoma" -BEGIN - CONTROL "Use &Regex Keywords", IDC_CHECK_REGEX, "Button", BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP, 5, 5, 124, 10 - RTEXT "BREGONIG.DLL Version", IDC_LABEL_REGEX_VERSION, 89, 15, 208, 10, NOT WS_GROUP, WS_EX_TRANSPARENT - GROUPBOX "Regex &Keyword", IDC_FRAME_REGEX, 3, 24, 295, 169 - CONTROL "List5", IDC_LIST_REGEX, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOLABELWRAP | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 8, 33, 243, 118 - RTEXT "Regex(&N)", IDC_LABEL_REGEX_KEYWORD, 10, 157, 44, 8, NOT WS_GROUP - EDITTEXT IDC_EDIT_REGEX, 59, 155, 191, 14, ES_AUTOHSCROLL - RTEXT "&Colorization", IDC_LABEL_REGEX_COLOR, 10, 174, 44, 8, NOT WS_GROUP - COMBOBOX IDC_COMBO_REGEX_COLOR, 59, 172, 128, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "In&sert", IDC_BUTTON_REGEX_INS, 255, 118, 38, 15 - PUSHBUTTON "&Append", IDC_BUTTON_REGEX_ADD, 255, 136, 38, 15 - PUSHBUTTON "&Edit", IDC_BUTTON_REGEX_UPD, 255, 154, 38, 15 - PUSHBUTTON "&Delete", IDC_BUTTON_REGEX_DEL, 255, 172, 38, 15 - PUSHBUTTON "&Top", IDC_BUTTON_REGEX_TOP, 255, 33, 38, 15 - PUSHBUTTON "&Up", IDC_BUTTON_REGEX_UP, 255, 51, 38, 15 - PUSHBUTTON "Down(&G)", IDC_BUTTON_REGEX_DOWN, 255, 69, 38, 15 - PUSHBUTTON "Last(&B)", IDC_BUTTON_REGEX_LAST, 255, 87, 38, 15 - PUSHBUTTON "&Import...", IDC_BUTTON_REGEX_IMPORT, 173, 196, 60, 14, WS_GROUP - PUSHBUTTON "E&xport...", IDC_BUTTON_REGEX_EXPORT, 236, 196, 60, 14 - LTEXT "If you specify [URL] in the [Colorize] field then the matched text will become clickable.", IDC_STATIC, 14, 195, 138, 29 +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + CONTROL "Use &Regex Keywords",IDC_CHECK_REGEX,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,5,5,124,10 + RTEXT "BREGONIG.DLL Version",IDC_LABEL_REGEX_VERSION,89,15,208,10,NOT WS_GROUP,WS_EX_TRANSPARENT + GROUPBOX "Regex &Keyword",IDC_FRAME_REGEX,3,24,295,169 + CONTROL "List5",IDC_LIST_REGEX,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOLABELWRAP | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,8,33,243,118 + RTEXT "Regex(&N)",IDC_LABEL_REGEX_KEYWORD,10,157,44,8,NOT WS_GROUP + EDITTEXT IDC_EDIT_REGEX,59,155,191,14,ES_AUTOHSCROLL + RTEXT "&Colorization",IDC_LABEL_REGEX_COLOR,10,174,44,8,NOT WS_GROUP + COMBOBOX IDC_COMBO_REGEX_COLOR,59,172,128,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "In&sert",IDC_BUTTON_REGEX_INS,255,118,38,15 + PUSHBUTTON "&Append",IDC_BUTTON_REGEX_ADD,255,136,38,15 + PUSHBUTTON "&Edit",IDC_BUTTON_REGEX_UPD,255,154,38,15 + PUSHBUTTON "&Delete",IDC_BUTTON_REGEX_DEL,255,172,38,15 + PUSHBUTTON "&Top",IDC_BUTTON_REGEX_TOP,255,33,38,15 + PUSHBUTTON "&Up",IDC_BUTTON_REGEX_UP,255,51,38,15 + PUSHBUTTON "Down(&G)",IDC_BUTTON_REGEX_DOWN,255,69,38,15 + PUSHBUTTON "Last(&B)",IDC_BUTTON_REGEX_LAST,255,87,38,15 + PUSHBUTTON "&Import...",IDC_BUTTON_REGEX_IMPORT,173,196,60,14,WS_GROUP + PUSHBUTTON "E&xport...",IDC_BUTTON_REGEX_EXPORT,236,196,60,14 + LTEXT "If you specify [URL] in the [Colorize] field then the matched text will become clickable.",IDC_STATIC,14,195,138,29 END IDD_PROP_KEYHELP DIALOGEX 0, 0, 302, 244 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "Tahoma" -BEGIN - CONTROL "Use &Keyword Help", IDC_CHECK_KEYHELP, "Button", BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP, 5, 6, 114, 10 - GROUPBOX "Dictionary File &List", IDC_FRAME_KEYHELP, 3, 21, 295, 174 - CONTROL "List5", IDC_LIST_KEYHELP, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOLABELWRAP | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 8, 33, 238, 118 - LTEXT "Dictionary desc.", IDC_LABEL_KEYHELP_TITLE, 8, 159, 50, 8, NOT WS_GROUP - LTEXT "Dict file desc.", IDC_LABEL_KEYHELP_ABOUT, 61, 159, 185, 8, NOT WS_GROUP, WS_EX_TRANSPARENT - LTEXT "Dictionary File", IDC_LABEL_KEYHELP_KEYWORD, 8, 173, 56, 8, NOT WS_GROUP - EDITTEXT IDC_EDIT_KEYHELP, 61, 172, 170, 12, ES_AUTOHSCROLL - PUSHBUTTON "...", IDC_BUTTON_KEYHELP_REF, 234, 172, 12, 13, WS_GROUP - LTEXT "↑ Priority (Top)", IDC_LABEL_KEYHELP_PRIOR, 249, 33, 44, 8, NOT WS_GROUP - PUSHBUTTON "In&sert", IDC_BUTTON_KEYHELP_INS, 251, 136, 38, 15 - PUSHBUTTON "Updat&e", IDC_BUTTON_KEYHELP_UPD, 251, 154, 38, 15 - PUSHBUTTON "&Delete", IDC_BUTTON_KEYHELP_DEL, 251, 172, 38, 15 - PUSHBUTTON "&Top", IDC_BUTTON_KEYHELP_TOP, 251, 44, 38, 15 - PUSHBUTTON "&Up", IDC_BUTTON_KEYHELP_UP, 251, 62, 38, 15 - PUSHBUTTON "Down(&G)", IDC_BUTTON_KEYHELP_DOWN, 251, 80, 38, 15 - PUSHBUTTON "Last(&B)", IDC_BUTTON_KEYHELP_LAST, 251, 98, 38, 15 - PUSHBUTTON "&Import...", IDC_BUTTON_KEYHELP_IMPORT, 173, 199, 60, 14, WS_GROUP - PUSHBUTTON "E&xport...", IDC_BUTTON_KEYHELP_EXPORT, 236, 199, 60, 14 - CONTROL "Cont. se&arching other dict.", IDC_CHECK_KEYHELP_ALLSEARCH, "Button", BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP, 7, 200, 105, 10 - CONTROL "Also show Key&Word", IDC_CHECK_KEYHELP_KEYDISP, "Button", BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP, 7, 212, 95, 10 - CONTROL "Search within selection(&P)", IDC_CHECK_KEYHELP_PREFIX, "Button", BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP, 7, 224, 108, 10 - LTEXT "&Right Click Menu", IDC_STATIC_MENU, 120, 225, 70, 8, NOT WS_GROUP - COMBOBOX IDC_COMBO_MENU, 192, 223, 60, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + CONTROL "Use &Keyword Help",IDC_CHECK_KEYHELP,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,5,6,114,10 + GROUPBOX "Dictionary File &List",IDC_FRAME_KEYHELP,3,21,295,174 + CONTROL "List5",IDC_LIST_KEYHELP,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOLABELWRAP | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,8,33,238,118 + LTEXT "Dictionary desc.",IDC_LABEL_KEYHELP_TITLE,8,159,50,8,NOT WS_GROUP + LTEXT "Dict file desc.",IDC_LABEL_KEYHELP_ABOUT,61,159,185,8,NOT WS_GROUP,WS_EX_TRANSPARENT + LTEXT "Dictionary File",IDC_LABEL_KEYHELP_KEYWORD,8,173,56,8,NOT WS_GROUP + EDITTEXT IDC_EDIT_KEYHELP,61,172,170,12,ES_AUTOHSCROLL + PUSHBUTTON "...",IDC_BUTTON_KEYHELP_REF,234,172,12,13,WS_GROUP + LTEXT "↑ Priority (Top)",IDC_LABEL_KEYHELP_PRIOR,249,33,44,8,NOT WS_GROUP + PUSHBUTTON "In&sert",IDC_BUTTON_KEYHELP_INS,251,136,38,15 + PUSHBUTTON "Updat&e",IDC_BUTTON_KEYHELP_UPD,251,154,38,15 + PUSHBUTTON "&Delete",IDC_BUTTON_KEYHELP_DEL,251,172,38,15 + PUSHBUTTON "&Top",IDC_BUTTON_KEYHELP_TOP,251,44,38,15 + PUSHBUTTON "&Up",IDC_BUTTON_KEYHELP_UP,251,62,38,15 + PUSHBUTTON "Down(&G)",IDC_BUTTON_KEYHELP_DOWN,251,80,38,15 + PUSHBUTTON "Last(&B)",IDC_BUTTON_KEYHELP_LAST,251,98,38,15 + PUSHBUTTON "&Import...",IDC_BUTTON_KEYHELP_IMPORT,173,199,60,14,WS_GROUP + PUSHBUTTON "E&xport...",IDC_BUTTON_KEYHELP_EXPORT,236,199,60,14 + CONTROL "Cont. se&arching other dict.",IDC_CHECK_KEYHELP_ALLSEARCH, + "Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,7,200,105,10 + CONTROL "Also show Key&Word",IDC_CHECK_KEYHELP_KEYDISP,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,7,212,95,10 + CONTROL "Search within selection(&P)",IDC_CHECK_KEYHELP_PREFIX, + "Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,7,224,108,10 + LTEXT "&Right Click Menu",IDC_STATIC_MENU,120,225,70,8,NOT WS_GROUP + COMBOBOX IDC_COMBO_MENU,192,223,60,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END IDD_PROP_WINDOW DIALOGEX 0, 0, 302, 244 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -FONT 9, "Tahoma" -BEGIN - LTEXT "Input Mode", IDC_STATIC, 5, 6, 40, 8 - LTEXT "CR Cod&e", IDC_STATIC, 15, 34, 46, 8 - COMBOBOX IDC_COMBO_DEFAULT_EOLTYPE, 57, 32, 52, 57, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "&BOM", IDC_CHECK_DEFAULT_BOM, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 114, 33, 30, 10 - LTEXT "En&coding", IDC_STATIC, 8, 49, 46, 8 - COMBOBOX IDC_COMBO_DEFAULT_CODETYPE, 57, 47, 52, 57, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "C&P", IDC_CHECK_CP, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 114, 48, 25, 10 - CONTROL "Give Priority to CES&U-8 at Auto-Detection", IDC_CHECK_PRIOR_CESU8, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 63, 135, 10 - GROUPBOX "Default Encoding", IDC_STATIC, 3, 22, 145, 58 - LTEXT "ON/OFF(&M)", IDC_STATIC, 189, 34, 55, 8 - COMBOBOX IDC_COMBO_IMESWITCH, 232, 32, 61, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "IME Input Mo&de", IDC_STATIC, 164, 49, 75, 8 - COMBOBOX IDC_COMBO_IMESTATE, 232, 47, 61, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - GROUPBOX "IME State at Editor Startup", IDC_STATIC, 153, 22, 145, 58 - CONTROL "", IDC_STATIC, "Static", SS_ETCHEDFRAME, 5, 88, 293, 1 - LTEXT "Window Setting", IDC_STATIC, 5, 96, 36, 8 - CONTROL "Use D&ocument Icon", IDC_CHECK_DOCICON, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 107, 86, 10 - CONTROL "Layout(&R)", IDC_RADIO_LINENUM_LAYOUT, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 8, 134, 60, 10 - CONTROL "CRLF(&W)", IDC_RADIO_LINENUM_CRLF, "Button", BS_AUTORADIOBUTTON, 8, 149, 60, 10 - LTEXT "Column", IDC_STATIC, 8, 165, 26, 8 - EDITTEXT IDC_EDIT_LINENUMWIDTH, 41, 163, 31, 12, ES_AUTOHSCROLL - CONTROL "Spin3", IDC_SPIN_LINENUMWIDTH, "msctls_updown32", UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY, 61, 163, 9, 12 - GROUPBOX "Line nr. Display", IDC_STATIC, 4, 122, 70, 59, WS_GROUP - CONTROL "&None", IDC_RADIO_LINETERMTYPE0, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 83, 134, 39, 10 - CONTROL "&Vertical Line", IDC_RADIO_LINETERMTYPE1, "Button", BS_AUTORADIOBUTTON, 83, 149, 61, 10 - CONTROL "Other(&Y)", IDC_RADIO_LINETERMTYPE2, "Button", BS_AUTORADIOBUTTON, 83, 164, 41, 10 - LTEXT "HH-&Spacer", IDC_LABEL_LINETERMCHAR, 83, 178, 46, 8 - EDITTEXT IDC_EDIT_LINETERMCHAR, 129, 177, 15, 12, ES_AUTOHSCROLL - GROUPBOX "Line nr. Delimiter", IDC_STATIC, 78, 122, 70, 80 - - EDITTEXT IDC_EDIT_BACKIMG_PATH, 158, 134, 122, 12, ES_AUTOHSCROLL - PUSHBUTTON "...", IDC_BUTTON_BACKIMG_PATH_SEL, 282, 134, 12, 12 - LTEXT "Placement", IDC_STATIC, 158, 150, 40, 8 - COMBOBOX IDC_COMBO_BACKIMG_POS, 158, 163, 39, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "X", IDC_STATIC, 200, 165, 8, 8 - LTEXT "Y", IDC_STATIC, 200, 180, 8, 8 - LTEXT "Offset", IDC_STATIC, 210, 150, 25, 8 - EDITTEXT IDC_EDIT_BACKIMG_OFFSET_X, 210, 163, 20, 12 - EDITTEXT IDC_EDIT_BACKIMG_OFFSET_Y, 210, 178, 20, 12 - LTEXT "Repeat", IDC_STATIC, 235, 150, 26, 8 - CONTROL "", IDC_CHECK_BACKIMG_REP_X, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 243, 164, 10, 10 - CONTROL "", IDC_CHECK_BACKIMG_REP_Y, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 243, 179, 10, 10 - LTEXT "Scroll", IDC_STATIC, 270, 150, 26, 8 - CONTROL "", IDC_CHECK_BACKIMG_SCR_X, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 276, 164, 10, 10 - CONTROL "", IDC_CHECK_BACKIMG_SCR_Y, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 276, 179, 10, 10 - LTEXT "Transparency", IDC_STATIC, 158, 194, 45, 8 - CONTROL "",IDC_TRACKBAR_BACKIMG_TRANSPARENCY, "msctls_trackbar32", TBS_BOTH | TBS_NOTICKS | WS_TABSTOP, 205, 193, 60, 12 - EDITTEXT IDC_EDIT_BACKIMG_TRANSPARENCY, 265, 193, 28, 12 - CONTROL "Spin1", IDC_UPDOWN_BACKIMG_TRANSPARENCY, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 285, 193, 9, 12 - GROUPBOX "Background Image", IDC_STATIC, 153, 122, 145, 90 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + LTEXT "Input Mode",IDC_STATIC,5,6,40,8 + LTEXT "CR Cod&e",IDC_STATIC,15,34,46,8 + COMBOBOX IDC_COMBO_DEFAULT_EOLTYPE,57,32,52,57,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "&BOM",IDC_CHECK_DEFAULT_BOM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,33,30,10 + LTEXT "En&coding",IDC_STATIC,8,49,46,8 + COMBOBOX IDC_COMBO_DEFAULT_CODETYPE,57,47,52,57,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,48,25,10 + CONTROL "Give Priority to CES&U-8 at Auto-Detection",IDC_CHECK_PRIOR_CESU8, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,63,135,10 + GROUPBOX "Default Encoding",IDC_STATIC,3,22,145,58 + LTEXT "ON/OFF(&M)",IDC_STATIC,189,34,55,8 + COMBOBOX IDC_COMBO_IMESWITCH,232,32,61,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "IME Input Mo&de",IDC_STATIC,164,49,75,8 + COMBOBOX IDC_COMBO_IMESTATE,232,47,61,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "IME State at Editor Startup",IDC_STATIC,153,22,145,58 + CONTROL "",IDC_STATIC,"Static",SS_ETCHEDFRAME,5,88,293,1 + LTEXT "Window Setting",IDC_STATIC,5,96,36,8 + CONTROL "Use D&ocument Icon",IDC_CHECK_DOCICON,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,107,86,10 + CONTROL "Layout(&R)",IDC_RADIO_LINENUM_LAYOUT,"Button",BS_AUTORADIOBUTTON | WS_GROUP,8,134,60,10 + CONTROL "CRLF(&W)",IDC_RADIO_LINENUM_CRLF,"Button",BS_AUTORADIOBUTTON,8,149,60,10 + LTEXT "Column",IDC_STATIC,8,165,26,8 + EDITTEXT IDC_EDIT_LINENUMWIDTH,41,163,31,12,ES_AUTOHSCROLL + CONTROL "Spin3",IDC_SPIN_LINENUMWIDTH,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,61,163,9,12 + GROUPBOX "Line nr. Display",IDC_STATIC,4,122,70,59,WS_GROUP + CONTROL "&None",IDC_RADIO_LINETERMTYPE0,"Button",BS_AUTORADIOBUTTON | WS_GROUP,83,134,39,10 + CONTROL "&Vertical Line",IDC_RADIO_LINETERMTYPE1,"Button",BS_AUTORADIOBUTTON,83,149,61,10 + CONTROL "Other(&Y)",IDC_RADIO_LINETERMTYPE2,"Button",BS_AUTORADIOBUTTON,83,164,41,10 + LTEXT "HH-&Spacer",IDC_LABEL_LINETERMCHAR,83,178,46,8 + EDITTEXT IDC_EDIT_LINETERMCHAR,129,177,15,12,ES_AUTOHSCROLL + GROUPBOX "Line nr. Delimiter",IDC_STATIC,78,122,70,80 + EDITTEXT IDC_EDIT_BACKIMG_PATH,158,134,122,12,ES_AUTOHSCROLL + PUSHBUTTON "...",IDC_BUTTON_BACKIMG_PATH_SEL,282,134,12,12 + LTEXT "Placement",IDC_STATIC,158,150,40,8 + COMBOBOX IDC_COMBO_BACKIMG_POS,158,163,39,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "X",IDC_STATIC,200,165,8,8 + LTEXT "Y",IDC_STATIC,200,180,8,8 + LTEXT "Offset",IDC_STATIC,210,150,25,8 + EDITTEXT IDC_EDIT_BACKIMG_OFFSET_X,210,163,20,12 + EDITTEXT IDC_EDIT_BACKIMG_OFFSET_Y,210,178,20,12 + LTEXT "Repeat",IDC_STATIC,235,150,26,8 + CONTROL "",IDC_CHECK_BACKIMG_REP_X,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,243,164,10,10 + CONTROL "",IDC_CHECK_BACKIMG_REP_Y,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,243,179,10,10 + LTEXT "Scroll",IDC_STATIC,270,150,26,8 + CONTROL "",IDC_CHECK_BACKIMG_SCR_X,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,276,164,10,10 + CONTROL "",IDC_CHECK_BACKIMG_SCR_Y,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,276,179,10,10 + LTEXT "Transparency",IDC_STATIC,158,194,45,8 + CONTROL "",IDC_TRACKBAR_BACKIMG_TRANSPARENCY,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,205,193,60,12 + EDITTEXT IDC_EDIT_BACKIMG_TRANSPARENCY,265,193,28,12 + CONTROL "Spin1",IDC_UPDOWN_BACKIMG_TRANSPARENCY,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,285,193,9,12 + GROUPBOX "Background Image",IDC_STATIC,153,122,145,90 END IDD_DIALOG_KEYWORD_SELECT DIALOGEX 0, 0, 177, 197 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP CAPTION "Keyword Highlight Settings" -FONT 9, "Tahoma" -BEGIN - DEFPUSHBUTTON "&OK", IDOK, 31, 176, 50, 14 - PUSHBUTTON "Cancel(&X)", IDCANCEL, 91, 176, 50, 14 - LTEXT "Highlight &1", IDC_STATIC, 7, 15, 54, 13 - COMBOBOX IDC_COMBO1, 68, 13, 104, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Highlight &2", IDC_STATIC, 7, 31, 54, 13 - COMBOBOX IDC_COMBO2, 68, 29, 104, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Highlight &3", IDC_STATIC, 7, 48, 54, 13 - COMBOBOX IDC_COMBO3, 68, 45, 104, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Highlight &4", IDC_STATIC, 7, 63, 54, 13 - COMBOBOX IDC_COMBO4, 68, 61, 104, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Highlight &5", IDC_STATIC, 7, 80, 54, 13 - COMBOBOX IDC_COMBO5, 68, 77, 104, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Highlight &6", IDC_STATIC, 7, 95, 54, 13 - COMBOBOX IDC_COMBO6, 68, 93, 104, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Highlight &7", IDC_STATIC, 7, 111, 54, 13 - COMBOBOX IDC_COMBO7, 68, 109, 104, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Highlight &8", IDC_STATIC, 7, 126, 54, 13 - COMBOBOX IDC_COMBO8, 68, 125, 104, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Highlight &9", IDC_STATIC, 7, 143, 54, 13 - COMBOBOX IDC_COMBO9, 68, 141, 104, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Highlight 1&0", IDC_STATIC, 7, 159, 58, 8 - COMBOBOX IDC_COMBO10, 68, 157, 104, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "&OK",IDOK,31,176,50,14 + PUSHBUTTON "Cancel(&X)",IDCANCEL,91,176,50,14 + LTEXT "Highlight &1",IDC_STATIC,7,15,54,13 + COMBOBOX IDC_COMBO1,68,13,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Highlight &2",IDC_STATIC,7,31,54,13 + COMBOBOX IDC_COMBO2,68,29,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Highlight &3",IDC_STATIC,7,48,54,13 + COMBOBOX IDC_COMBO3,68,45,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Highlight &4",IDC_STATIC,7,63,54,13 + COMBOBOX IDC_COMBO4,68,61,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Highlight &5",IDC_STATIC,7,80,54,13 + COMBOBOX IDC_COMBO5,68,77,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Highlight &6",IDC_STATIC,7,95,54,13 + COMBOBOX IDC_COMBO6,68,93,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Highlight &7",IDC_STATIC,7,111,54,13 + COMBOBOX IDC_COMBO7,68,109,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Highlight &8",IDC_STATIC,7,126,54,13 + COMBOBOX IDC_COMBO8,68,125,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Highlight &9",IDC_STATIC,7,143,54,13 + COMBOBOX IDC_COMBO9,68,141,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Highlight 1&0",IDC_STATIC,7,159,58,8 + COMBOBOX IDC_COMBO10,68,157,104,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END IDD_SAMECOLOR DIALOGEX 0, 0, 183, 206 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP CAPTION "Color Consolidation" -FONT 9, "Tahoma" +FONT 9, "Tahoma", 0, 0, 0x1 BEGIN - LTEXT "Color", IDC_STATIC, 7, 13, 24, 8 - LTEXT "Static", IDC_STATIC_COLOR, 35, 10, 86, 14, SS_CENTERIMAGE - LTEXT "&Check colors to consolidate on.", IDC_STATIC, 7, 29, 166, 8 - LISTBOX IDC_LIST_COLORS, 7, 41, 114, 90, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "Check &All", IDC_BUTTON_SELALL, 125, 70, 49, 14 - PUSHBUTTON "Check &None", IDC_BUTTON_SELNOTING, 125, 89, 49, 14 - LISTBOX IDC_LIST_ITEMINFO, 7, 143, 114, 35, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL - DEFPUSHBUTTON "&OK", IDOK, 15, 185, 49, 14 - PUSHBUTTON "Cancel(&X)", IDCANCEL, 67, 185, 49, 14 - PUSHBUTTON "&Help", IDC_BUTTON_HELP, 119, 185, 49, 14 + LTEXT "Color",IDC_STATIC,7,13,24,8 + LTEXT "Static",IDC_STATIC_COLOR,35,10,86,14,SS_CENTERIMAGE + LTEXT "&Check colors to consolidate on.",IDC_STATIC,7,29,166,8 + LISTBOX IDC_LIST_COLORS,7,41,114,90,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Check &All",IDC_BUTTON_SELALL,125,70,49,14 + PUSHBUTTON "Check &None",IDC_BUTTON_SELNOTING,125,89,49,14 + LISTBOX IDC_LIST_ITEMINFO,7,143,114,35,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL + DEFPUSHBUTTON "&OK",IDOK,15,185,49,14 + PUSHBUTTON "Cancel(&X)",IDCANCEL,67,185,49,14 + PUSHBUTTON "&Help",IDC_BUTTON_HELP,119,185,49,14 END IDD_PROP_GENERAL DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "Tahoma" -BEGIN - GROUPBOX "Cursor", IDC_STATIC, 3, 3, 149, 84 - CONTROL "&Free Cursor", IDC_CHECK_FREECARET, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 14, 120, 10 - CONTROL "When moving &between words\nstop at each boundary", IDC_CHECK_STOPS_BOTH_ENDS_WHEN_SEARCH_WORD, "Button", BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP, 8, 26, 120, 19 - CONTROL "When moving between ¶graphs\nstop on each boundary", IDC_CHECK_STOPS_BOTH_ENDS_WHEN_SEARCH_PARAGRAPH, "Button", BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP, 8, 46, 120, 19 - CONTROL "Clicking &on the window to gain focus\ndoes not move the cursor", IDC_CHECK_NOMOVE_ACTIVATE_BY_MOUSE, "Button", BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP, 8, 66, 133, 19 - GROUPBOX "Cursor Style", IDC_STATIC, 3, 89, 149, 24, WS_GROUP - CONTROL "&Windows Style", IDC_RADIO_CARETTYPE0, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 8, 99, 61, 10 - CONTROL "MS-&DOS Style", IDC_RADIO_CARETTYPE1, "Button", BS_AUTORADIOBUTTON, 69, 99, 61, 10 - GROUPBOX "Task Tray", IDC_STATIC, 3, 115, 149, 71, WS_GROUP - CONTROL "Use &Task Tray", IDC_CHECK_USETRAYICON, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 127, 81, 10 - CONTROL "Stay &Resident in Task Tray", IDC_CHECK_STAYTASKTRAY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 141, 104, 10 - LTEXT "Put short cut in Right-Clic&k(Context) Menu", IDC_STATIC, 8, 157, 131, 8 - CONTROL "HotKey1", IDC_HOTKEY_TRAYMENU, "msctls_hotkey32", WS_BORDER | WS_TABSTOP, 8, 167, 95, 12 - CONTROL "Confirm when closing\nm&ultiple editor windows", IDC_CHECK_CLOSEALLCONFIRM, "Button", BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 8, 193, 124, 19 - CONTROL "When closing all Sakura Editors,\nconfirm closing editor windows(&V)", IDC_CHECK_EXITCONFIRM, "Button", BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 8, 212, 124, 19 - GROUPBOX "Scroll", IDC_STATIC, 158, 3, 130, 125, WS_GROUP - LTEXT "Line &Numbers", IDC_STATIC, 163, 19, 29, 8, NOT WS_GROUP - EDITTEXT IDC_EDIT_REPEATEDSCROLLLINENUM, 196, 17, 40, 12, ES_AUTOHSCROLL | WS_GROUP - CONTROL "Spin3", IDC_SPIN_REPEATEDSCROLLLINENUM, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 236, 17, 9, 12 - CONTROL "Very &Smooth", IDC_CHECK_REPEATEDSCROLLSMOOTH, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 163, 33, 80, 10 - LTEXT "Mouse wheel vertical page \nscroll behavior is(&J)", IDC_STATIC, 163, 49, 110, 16, NOT WS_GROUP - COMBOBOX IDC_COMBO_WHEEL_PAGESCROLL, 178, 67, 85, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Mouse wheel &horizontal page \nscroll behavior is", IDC_STATIC, 163, 88, 111, 16, NOT WS_GROUP - COMBOBOX IDC_COMBO_WHEEL_HSCROLL, 178, 108, 85, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Cache Display(&G)", IDC_CHECK_MEMDC, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 163, 134, 96, 16 - GROUPBOX "History", IDC_STATIC, 158, 152, 130, 82, WS_GROUP - LTEXT "&Maximum File History", IDC_STATIC, 163, 167, 74, 8, NOT WS_GROUP - EDITTEXT IDC_EDIT_MAX_MRU_FILE, 168, 178, 28, 12, ES_AUTOHSCROLL | WS_GROUP - CONTROL "Spin1", IDC_SPIN_MAX_MRU_FILE, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 196, 178, 9, 12 - PUSHBUTTON "&Clear History...", IDC_BUTTON_CLEAR_MRU_FILE, 208, 177, 61, 14 - LTEXT "Ma&ximum Folder History", IDC_STATIC, 163, 200, 74, 8 - EDITTEXT IDC_EDIT_MAX_MRU_FOLDER, 168, 211, 28, 12, ES_AUTOHSCROLL | WS_GROUP - CONTROL "Spin1", IDC_SPIN_MAX_MRU_FOLDER, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 196, 211, 9, 12 - PUSHBUTTON "C&lear History...", IDC_BUTTON_CLEAR_MRU_FOLDER, 208, 210, 61, 14 +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + GROUPBOX "Cursor",IDC_STATIC,3,3,149,84 + CONTROL "&Free Cursor",IDC_CHECK_FREECARET,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,14,120,10 + CONTROL "When moving &between words\nstop at each boundary",IDC_CHECK_STOPS_BOTH_ENDS_WHEN_SEARCH_WORD, + "Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP,8,26,120,19 + CONTROL "When moving between ¶graphs\nstop on each boundary",IDC_CHECK_STOPS_BOTH_ENDS_WHEN_SEARCH_PARAGRAPH, + "Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP,8,46,120,19 + CONTROL "Clicking &on the window to gain focus\ndoes not move the cursor",IDC_CHECK_NOMOVE_ACTIVATE_BY_MOUSE, + "Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP,8,66,133,19 + GROUPBOX "Cursor Style",IDC_STATIC,3,89,149,24,WS_GROUP + CONTROL "&Windows Style",IDC_RADIO_CARETTYPE0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,8,99,61,10 + CONTROL "MS-&DOS Style",IDC_RADIO_CARETTYPE1,"Button",BS_AUTORADIOBUTTON,69,99,61,10 + GROUPBOX "Task Tray",IDC_STATIC,3,115,149,71,WS_GROUP + CONTROL "Use &Task Tray",IDC_CHECK_USETRAYICON,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,127,81,10 + CONTROL "Stay &Resident in Task Tray",IDC_CHECK_STAYTASKTRAY, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,141,104,10 + LTEXT "Put short cut in Right-Clic&k(Context) Menu",IDC_STATIC,8,157,131,8 + CONTROL "HotKey1",IDC_HOTKEY_TRAYMENU,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,8,167,95,12 + CONTROL "Confirm when closing\nm&ultiple editor windows",IDC_CHECK_CLOSEALLCONFIRM, + "Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP,8,193,124,19 + CONTROL "When closing all Sakura Editors,\nconfirm closing editor windows(&V)",IDC_CHECK_EXITCONFIRM, + "Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP,8,212,124,19 + GROUPBOX "Scroll",IDC_STATIC,158,3,130,125,WS_GROUP + LTEXT "Line &Numbers",IDC_STATIC,163,19,29,8,NOT WS_GROUP + EDITTEXT IDC_EDIT_REPEATEDSCROLLLINENUM,196,17,40,12,ES_AUTOHSCROLL | WS_GROUP + CONTROL "Spin3",IDC_SPIN_REPEATEDSCROLLLINENUM,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,236,17,9,12 + CONTROL "Very &Smooth",IDC_CHECK_REPEATEDSCROLLSMOOTH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,163,33,80,10 + LTEXT "Mouse wheel vertical page \nscroll behavior is(&J)",IDC_STATIC,163,49,110,16,NOT WS_GROUP + COMBOBOX IDC_COMBO_WHEEL_PAGESCROLL,178,67,85,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Mouse wheel &horizontal page \nscroll behavior is",IDC_STATIC,163,88,111,16,NOT WS_GROUP + COMBOBOX IDC_COMBO_WHEEL_HSCROLL,178,108,85,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Cache Display(&G)",IDC_CHECK_MEMDC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,163,134,96,16 + GROUPBOX "History",IDC_STATIC,158,152,130,82,WS_GROUP + LTEXT "&Maximum File History",IDC_STATIC,163,167,74,8,NOT WS_GROUP + EDITTEXT IDC_EDIT_MAX_MRU_FILE,168,178,28,12,ES_AUTOHSCROLL | WS_GROUP + CONTROL "Spin1",IDC_SPIN_MAX_MRU_FILE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,196,178,9,12 + PUSHBUTTON "&Clear History...",IDC_BUTTON_CLEAR_MRU_FILE,208,177,61,14 + LTEXT "Ma&ximum Folder History",IDC_STATIC,163,200,74,8 + EDITTEXT IDC_EDIT_MAX_MRU_FOLDER,168,211,28,12,ES_AUTOHSCROLL | WS_GROUP + CONTROL "Spin1",IDC_SPIN_MAX_MRU_FOLDER,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,196,211,9,12 + PUSHBUTTON "C&lear History...",IDC_BUTTON_CLEAR_MRU_FOLDER,208,210,61,14 END IDD_PROP_WIN DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "Tahoma" -BEGIN - CONTROL "Show &Toolbar", IDC_CHECK_DispTOOLBAR, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 7, 13, 76, 10 - CONTROL "Show Function &Key", IDC_CHECK_DispFUNCKEYWND, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 25, 96, 10 - CONTROL "&Show Status Bar", IDC_CHECK_DispSTATUSBAR, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 37, 88, 10 - CONTROL "Horizontal Scrollba&r", IDC_CHECK_bScrollBarHorz, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 104, 13, 89, 10 - CONTROL "Menu &Icon", IDC_CHECK_bMenuIcon, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 195, 13, 87, 10 - PUSHBUTTON "&Window pos && size...", IDC_BUTTON_WINSIZE, 202, 33, 83, 14 - LTEXT "NB: Tab-Bar display\nis in the tab bar tab", IDC_STATIC, 111, 30, 83, 17 - GROUPBOX "Basic Settings", IDC_STATIC, 3, 3, 285, 49, WS_GROUP - LTEXT "Ruler H&eight", IDC_STATIC, 7, 68, 58, 8 - EDITTEXT IDC_EDIT_nRulerHeight, 101, 66, 28, 12, ES_AUTOHSCROLL - CONTROL "Spin1", IDC_SPIN_nRulerHeight, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 124, 66, 10, 12 - LTEXT "dots", IDC_STATIC, 133, 68, 17, 8 - LTEXT "Ruler and Text s&pacing", IDC_STATIC, 7, 81, 91, 8 - EDITTEXT IDC_EDIT_nRulerBottomSpace, 101, 80, 28, 12, ES_AUTOHSCROLL - CONTROL "Spin1", IDC_SPIN_nRulerBottomSpace, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 124, 79, 10, 12 - LTEXT "dots", IDC_STATIC, 133, 81, 17, 8 - LTEXT "&Line number and Text spacing", IDC_STATIC, 7, 96, 86, 8 - EDITTEXT IDC_EDIT_nLineNumberRightSpace, 101, 94, 28, 12, ES_AUTOHSCROLL - CONTROL "Spin1", IDC_SPIN_nLineNumberRightSpace, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 124, 94, 10, 12 - LTEXT "dots", IDC_STATIC, 133, 96, 17, 8 - GROUPBOX "Ruler / Line Numbering", IDC_STATIC, 3, 56, 153, 54 - CONTROL "Sync'd to &vertical scroll", IDC_CHECK_SplitterWndVScroll, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 126, 115, 10 - CONTROL "Sync'd to &horizontal scroll", IDC_CHECK_SplitterWndHScroll, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 139, 116, 10 - GROUPBOX "Split Window", IDC_STATIC, 3, 114, 153, 39, WS_GROUP - LTEXT "Pos", IDC_STATIC, 167, 68, 16, 8 - CONTROL "T&op", IDC_RADIO_FUNCKEYWND_PLACE1, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 191, 68, 44, 10 - CONTROL "&Bottom", IDC_RADIO_FUNCKEYWND_PLACE2, "Button", BS_AUTORADIOBUTTON, 237, 68, 44, 10 - LTEXT "&Group Button nr.", IDC_STATIC, 167, 81, 67, 10 - EDITTEXT IDC_EDIT_FUNCKEYWND_GROUPNUM, 236, 80, 28, 12, ES_AUTOHSCROLL | ES_NUMBER - CONTROL "Spin1", IDC_SPIN_FUNCKEYWND_GROUPNUM, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 262, 80, 10, 12 - GROUPBOX "Function Key", IDC_STATIC, 162, 56, 126, 40 - LTEXT "When Active(&1)", IDC_STATIC, 7, 171, 59, 8 - EDITTEXT IDC_WINCAPTION_ACTIVE, 67, 168, 216, 14, ES_AUTOHSCROLL - LTEXT "When Inactive(&2)", IDC_STATIC, 7, 188, 58, 8 - EDITTEXT IDC_WINCAPTION_INACTIVE, 67, 185, 216, 14, ES_AUTOHSCROLL - GROUPBOX "Title Bar", IDC_STATIC, 3, 157, 285, 47 - GROUPBOX "Language", IDC_STATIC, 162, 100, 126, 40 - COMBOBOX IDC_COMBO_LANGUAGE, 178, 118, 105, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + CONTROL "Show &Toolbar",IDC_CHECK_DispTOOLBAR,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,13,76,10 + CONTROL "Show Function &Key",IDC_CHECK_DispFUNCKEYWND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,25,96,10 + CONTROL "&Show Status Bar",IDC_CHECK_DispSTATUSBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,37,88,10 + CONTROL "Horizontal Scrollba&r",IDC_CHECK_bScrollBarHorz,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,104,13,89,10 + CONTROL "Menu &Icon",IDC_CHECK_bMenuIcon,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,195,13,87,10 + PUSHBUTTON "&Window pos && size...",IDC_BUTTON_WINSIZE,202,33,83,14 + LTEXT "NB: Tab-Bar display\nis in the tab bar tab",IDC_STATIC,111,30,83,17 + GROUPBOX "Basic Settings",IDC_STATIC,3,3,285,49,WS_GROUP + LTEXT "Ruler H&eight",IDC_STATIC,7,68,58,8 + EDITTEXT IDC_EDIT_nRulerHeight,101,66,28,12,ES_AUTOHSCROLL + CONTROL "Spin1",IDC_SPIN_nRulerHeight,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,124,66,10,12 + LTEXT "dots",IDC_STATIC,133,68,17,8 + LTEXT "Ruler and Text s&pacing",IDC_STATIC,7,81,91,8 + EDITTEXT IDC_EDIT_nRulerBottomSpace,101,80,28,12,ES_AUTOHSCROLL + CONTROL "Spin1",IDC_SPIN_nRulerBottomSpace,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,124,79,10,12 + LTEXT "dots",IDC_STATIC,133,81,17,8 + LTEXT "&Line number and Text spacing",IDC_STATIC,7,96,86,8 + EDITTEXT IDC_EDIT_nLineNumberRightSpace,101,94,28,12,ES_AUTOHSCROLL + CONTROL "Spin1",IDC_SPIN_nLineNumberRightSpace,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,124,94,10,12 + LTEXT "dots",IDC_STATIC,133,96,17,8 + GROUPBOX "Ruler / Line Numbering",IDC_STATIC,3,56,153,54 + CONTROL "Sync'd to &vertical scroll",IDC_CHECK_SplitterWndVScroll, + "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,126,115,10 + CONTROL "Sync'd to &horizontal scroll",IDC_CHECK_SplitterWndHScroll, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,139,116,10 + GROUPBOX "Split Window",IDC_STATIC,3,114,153,39,WS_GROUP + LTEXT "Pos",IDC_STATIC,167,68,16,8 + CONTROL "T&op",IDC_RADIO_FUNCKEYWND_PLACE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,191,68,44,10 + CONTROL "&Bottom",IDC_RADIO_FUNCKEYWND_PLACE2,"Button",BS_AUTORADIOBUTTON,237,68,44,10 + LTEXT "&Group Button nr.",IDC_STATIC,167,81,67,10 + EDITTEXT IDC_EDIT_FUNCKEYWND_GROUPNUM,236,80,28,12,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "Spin1",IDC_SPIN_FUNCKEYWND_GROUPNUM,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,262,80,10,12 + GROUPBOX "Function Key",IDC_STATIC,162,56,126,40 + LTEXT "When Active(&1)",IDC_STATIC,7,171,59,8 + EDITTEXT IDC_WINCAPTION_ACTIVE,67,168,216,14,ES_AUTOHSCROLL + LTEXT "When Inactive(&2)",IDC_STATIC,7,188,58,8 + EDITTEXT IDC_WINCAPTION_INACTIVE,67,185,216,14,ES_AUTOHSCROLL + GROUPBOX "Title Bar",IDC_STATIC,3,157,285,47 + GROUPBOX "Language",IDC_STATIC,162,100,126,40 + COMBOBOX IDC_COMBO_LANGUAGE,178,118,105,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END IDD_PROP_TOOLBAR DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "Tahoma" -BEGIN - RTEXT "Category(&K)", IDC_LABEL_MENUFUNCKIND, 4, 4, 51, 8 - COMBOBOX IDC_COMBO_FUNCKIND, 56, 2, 80, 170, CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - LTEXT "&Function", IDC_LABEL_MENUFUNC, 3, 15, 40, 8 - LISTBOX IDC_LIST_FUNC, 3, 25, 123, 199, LBS_OWNERDRAWFIXED | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - CONTROL "F&lat Button Style", IDC_CHECK_TOOLBARISFLAT, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 202, 2, 73, 10 - LTEXT "&Toolbar", IDC_LABEL_TOOLBAR, 164, 15, 46, 8 - LISTBOX IDC_LIST_RES, 164, 25, 123, 199, LBS_OWNERDRAWFIXED | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - PUSHBUTTON "&Delete", IDC_BUTTON_DELETE, 129, 32, 33, 14, WS_GROUP - PUSHBUTTON "---(&S)", IDC_BUTTON_INSERTSEPARATOR, 129, 51, 33, 14 - PUSHBUTTON "Ins(&A)", IDC_BUTTON_INSERT, 129, 71, 33, 14 - PUSHBUTTON "Add(&B)", IDC_BUTTON_ADD, 129, 85, 33, 14 - PUSHBUTTON "&Up", IDC_BUTTON_UP, 129, 105, 33, 14 - PUSHBUTTON "&Down", IDC_BUTTON_DOWN, 129, 119, 33, 14 - PUSHBUTTON "Ne&w Line", IDC_BUTTON_INSERTWRAP, 129, 151, 33, 14 +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + RTEXT "Category(&K)",IDC_LABEL_MENUFUNCKIND,4,4,51,8 + COMBOBOX IDC_COMBO_FUNCKIND,56,2,80,170,CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + LTEXT "&Function",IDC_LABEL_MENUFUNC,3,15,40,8 + LISTBOX IDC_LIST_FUNC,3,25,123,199,LBS_OWNERDRAWFIXED | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + CONTROL "F&lat Button Style",IDC_CHECK_TOOLBARISFLAT,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,202,2,73,10 + LTEXT "&Toolbar",IDC_LABEL_TOOLBAR,164,15,46,8 + LISTBOX IDC_LIST_RES,164,25,123,199,LBS_OWNERDRAWFIXED | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + PUSHBUTTON "&Delete",IDC_BUTTON_DELETE,129,32,33,14,WS_GROUP + PUSHBUTTON "---(&S)",IDC_BUTTON_INSERTSEPARATOR,129,51,33,14 + PUSHBUTTON "Ins(&A)",IDC_BUTTON_INSERT,129,71,33,14 + PUSHBUTTON "Add(&B)",IDC_BUTTON_ADD,129,85,33,14 + PUSHBUTTON "&Up",IDC_BUTTON_UP,129,105,33,14 + PUSHBUTTON "&Down",IDC_BUTTON_DOWN,129,119,33,14 + PUSHBUTTON "Ne&w Line",IDC_BUTTON_INSERTWRAP,129,151,33,14 END IDD_PROP_TAB DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "Tahoma" -BEGIN - CONTROL "Show Tab bar(&D)", IDC_CHECK_DispTabWnd, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 11, 111, 10 - CONTROL "Ta&b-Group uses common window", IDC_CHECK_DispTabWndMultiWin, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 15, 40, 239, 10 - CONTROL "Afte&r closing last document, open a new blank document", IDC_CHECK_RetainEmptyWindow, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 24, 53, 226, 10 - CONTROL "&Closing main window closes only the active file", IDC_CHECK_CloseOneWin, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 24, 66, 226, 10 - CONTROL "&Open in New Window when start from outside", IDC_CHECK_OpenNewWin, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 24, 79, 170, 10 - GROUPBOX "Automatic Mode", IDC_STATIC, 7, 27, 280, 68 - CONTROL "Display &Icons", IDC_CHECK_DispTabIcon, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 15, 115, 53, 10 - CONTROL "Fix&ed Width", IDC_CHECK_SameTabWidth, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 70, 115, 59, 10 - LTEXT "Close Btn(&X)", IDC_TextTabClose, 133, 116, 68, 8 - COMBOBOX IDC_CHECK_DispTabClose, 176, 113, 46, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "&Font...", IDC_BUTTON_TABFONT, 232, 113, 51, 14 - RTEXT "Font", IDC_STATIC_TABFONT, 102, 127, 180, 17, SS_RIGHT - CONTROL "&Sort Tab List", IDC_CHECK_SortTabList, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 15, 129, 85, 10 - CONTROL "&Multi Line", IDC_CHECK_TAB_MULTILINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 15, 141, 60, 10 - RTEXT "&Position", IDC_TAB_POSITION, 80, 142, 40, 8 - COMBOBOX IDC_COMBO_TAB_POSITION, 124, 140, 46, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "&Title", IDC_TextTabCaption, 15, 160, 40, 10 - EDITTEXT IDC_TABWND_CAPTION, 56, 157, 226, 14, ES_AUTOHSCROLL - GROUPBOX "Appearance of Tabs", IDC_STATIC, 7, 102, 280, 76, WS_GROUP - CONTROL "Change tabs using mouse &Wheel", IDC_CHECK_ChgWndByWheel, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 15, 196, 127, 10 - GROUPBOX "Misc", IDC_STATIC, 7, 184, 280, 28, WS_GROUP +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + CONTROL "Show Tab bar(&D)",IDC_CHECK_DispTabWnd,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,11,111,10 + CONTROL "Ta&b-Group uses common window",IDC_CHECK_DispTabWndMultiWin, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,40,239,10 + CONTROL "Afte&r closing last document, open a new blank document",IDC_CHECK_RetainEmptyWindow, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,24,53,226,10 + CONTROL "&Closing main window closes only the active file",IDC_CHECK_CloseOneWin, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,24,66,226,10 + CONTROL "&Open in New Window when start from outside",IDC_CHECK_OpenNewWin, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,24,79,170,10 + GROUPBOX "Automatic Mode",IDC_STATIC,7,27,280,68 + CONTROL "Display &Icons",IDC_CHECK_DispTabIcon,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,115,53,10 + CONTROL "Fix&ed Width",IDC_CHECK_SameTabWidth,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,70,115,59,10 + LTEXT "Close Btn(&X)",IDC_TextTabClose,133,116,68,8 + COMBOBOX IDC_CHECK_DispTabClose,176,113,46,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "&Font...",IDC_BUTTON_TABFONT,232,113,51,14 + RTEXT "Font",IDC_STATIC_TABFONT,102,127,180,17 + CONTROL "&Sort Tab List",IDC_CHECK_SortTabList,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,129,85,10 + CONTROL "&Multi Line",IDC_CHECK_TAB_MULTILINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,141,60,10 + RTEXT "&Position",IDC_TAB_POSITION,80,142,40,8 + COMBOBOX IDC_COMBO_TAB_POSITION,124,140,46,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "&Title",IDC_TextTabCaption,15,160,40,10 + EDITTEXT IDC_TABWND_CAPTION,56,157,226,14,ES_AUTOHSCROLL + GROUPBOX "Appearance of Tabs",IDC_STATIC,7,102,280,76,WS_GROUP + CONTROL "Change tabs using mouse &Wheel",IDC_CHECK_ChgWndByWheel, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,196,127,10 + GROUPBOX "Misc",IDC_STATIC,7,184,280,28,WS_GROUP END IDD_PROP_STATUSBAR DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "Tahoma" -BEGIN - GROUPBOX "Character Code", IDC_STATIC, 3, 3, 285, 92 - CONTROL "Display Character Code by Unicode when using &SJIS, Latin1", IDC_CHECK_DISP_UNICODE_IN_SJIS, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 16, 205, 10 - CONTROL "Display Character Code by Unicode when using &JIS", IDC_CHECK_DISP_UNICODE_IN_JIS, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 32, 205, 10 - CONTROL "Display Character Code by Unicode when using &EUC", IDC_CHECK_DISP_UNICODE_IN_EUC, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 48, 205, 10 - CONTROL "Display Code Point when using UTF-8, CESU-&8", IDC_CHECK_DISP_UTF8_CODEPOINT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 64, 205, 10 - CONTROL "Display Code Point for Surrogate &Pair", IDC_CHECK_DISP_SP_CODEPOINT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 80, 205, 10 - GROUPBOX "Character Count", IDC_STATIC, 3, 98, 285, 47 - CONTROL "Display Character Count by &Bytes * HIGH LOAD", IDC_CHECK_DISP_SELCOUNT_BY_BYTE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 112, 274, 10 - CONTROL "Display Column by Character Count(&C)", IDC_CHECK_DISP_COL_BY_CHAR, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 128, 274, 10 +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + GROUPBOX "Character Code",IDC_STATIC,3,3,285,92 + CONTROL "Display Character Code by Unicode when using &SJIS, Latin1",IDC_CHECK_DISP_UNICODE_IN_SJIS, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,16,205,10 + CONTROL "Display Character Code by Unicode when using &JIS",IDC_CHECK_DISP_UNICODE_IN_JIS, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,32,205,10 + CONTROL "Display Character Code by Unicode when using &EUC",IDC_CHECK_DISP_UNICODE_IN_EUC, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,48,205,10 + CONTROL "Display Code Point when using UTF-8, CESU-&8",IDC_CHECK_DISP_UTF8_CODEPOINT, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,64,205,10 + CONTROL "Display Code Point for Surrogate &Pair",IDC_CHECK_DISP_SP_CODEPOINT, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,80,205,10 + GROUPBOX "Character Count",IDC_STATIC,3,98,285,47 + CONTROL "Display Character Count by &Bytes * HIGH LOAD",IDC_CHECK_DISP_SELCOUNT_BY_BYTE, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,112,274,10 + CONTROL "Display Column by Character Count(&C)",IDC_CHECK_DISP_COL_BY_CHAR, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,128,274,10 END IDD_PROP_EDIT DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "Tahoma" -BEGIN - CONTROL "Insert &CR when line-wraps in copied text", IDC_CHECK_ADDCRLFWHENCOPY, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 16, 143, 10 - CONTROL "Cancel selection afte&r copying", IDC_CHECK_COPYnDISABLESELECTEDAREA, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 29, 143, 10 - CONTROL "Selectionless copy copies current lin&e", IDC_CHECK_bEnableNoSelectCopy, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 42, 143, 10 - CONTROL "Pasting a &Line pastes at start of line", IDC_CHECK_bEnableLineModePaste, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 55, 143, 10 - CONTROL "&Pasting Lines with CR Conversion", IDC_CHECK_CONVERTEOLPASTE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 68, 143, 10 - GROUPBOX "Copy", IDC_STATIC, 3, 3, 149, 81, WS_GROUP - CONTROL "&Drag'n'Drop editing", IDC_CHECK_DRAGDROP, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 104, 143, 10 - CONTROL "Allow other tool&s to drop", IDC_CHECK_DROPSOURCE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 117, 143, 10 - GROUPBOX "Drag'n'Drop", IDC_STATIC, 3, 91, 149, 43, WS_GROUP - CONTROL "Do&n't overwrite existing line-breaks", IDC_CHECK_bNotOverWriteCRLF, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 156, 143, 10 - CONTROL "&Fill Space when Overwrite 2-bytes by 1-byte", IDC_CHECK_bOverWriteFixMode, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 169, 143, 10 - CONTROL "Delete selecting area while box selecting(&G)", IDC_CHECK_bOverWriteBoxDelete, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 182, 143, 10 - GROUPBOX "Overwrite Mode", IDC_STATIC, 3, 143, 149, 58, WS_GROUP - CONTROL "Clicking selects whole &URL", IDC_CHECK_bSelectClickedURL, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 161, 18, 120, 10 - GROUPBOX "URL Selection", IDC_STATIC, 156, 3, 131, 35, WS_GROUP - CONTROL "C&urrent Folder", IDC_RADIO_CURDIR, "Button", BS_AUTORADIOBUTTON, 161, 54, 90, 8 - CONTROL "Recently Used Folder(&M)", IDC_RADIO_MRUDIR, "Button", BS_AUTORADIOBUTTON, 161, 69, 90, 8 - CONTROL "Specific &Folder", IDC_RADIO_SELDIR, "Button", BS_AUTORADIOBUTTON, 161, 84, 90, 8 - EDITTEXT IDC_EDIT_FILEOPENDIR, 161, 100, 111, 12, ES_AUTOHSCROLL - PUSHBUTTON "...", IDC_BUTTON_FILEOPENDIR, 273, 100, 9, 12 - GROUPBOX "Initial Folder for File Dialog", IDC_STATIC, 156, 41, 130, 79, WS_GROUP - CONTROL "Vista style File Dialog(&I)", IDC_CHECK_VISTA_STYLE_FILEDIALOG, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 161, 128, 125, 10 - CONTROL "Enable CR Code NEL, PS, LS(&O)", IDC_CHECK_ENABLEEXTEOL, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 161, 158, 122, 10 - CONTROL "Lock Move Box Selecting(&B)", IDC_CHECK_BOXSELECTLOCK, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 161, 171, 122, 10 - GROUPBOX "Etc", IDC_STATIC, 156, 145, 131, 42, WS_GROUP +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + CONTROL "Insert &CR when line-wraps in copied text",IDC_CHECK_ADDCRLFWHENCOPY, + "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,16,143,10 + CONTROL "Cancel selection afte&r copying",IDC_CHECK_COPYnDISABLESELECTEDAREA, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,29,143,10 + CONTROL "Selectionless copy copies current lin&e",IDC_CHECK_bEnableNoSelectCopy, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,42,143,10 + CONTROL "Pasting a &Line pastes at start of line",IDC_CHECK_bEnableLineModePaste, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,55,143,10 + CONTROL "&Pasting Lines with CR Conversion",IDC_CHECK_CONVERTEOLPASTE, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,68,143,10 + GROUPBOX "Copy",IDC_STATIC,3,3,149,81,WS_GROUP + CONTROL "&Drag'n'Drop editing",IDC_CHECK_DRAGDROP,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,104,143,10 + CONTROL "Allow other tool&s to drop",IDC_CHECK_DROPSOURCE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,117,143,10 + GROUPBOX "Drag'n'Drop",IDC_STATIC,3,91,149,43,WS_GROUP + CONTROL "Do&n't overwrite existing line-breaks",IDC_CHECK_bNotOverWriteCRLF, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,156,143,10 + CONTROL "&Fill Space when Overwrite 2-bytes by 1-byte",IDC_CHECK_bOverWriteFixMode, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,169,143,10 + CONTROL "Delete selecting area while box selecting(&G)",IDC_CHECK_bOverWriteBoxDelete, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,182,143,10 + GROUPBOX "Overwrite Mode",IDC_STATIC,3,143,149,58,WS_GROUP + CONTROL "Clicking selects whole &URL",IDC_CHECK_bSelectClickedURL, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,18,120,10 + GROUPBOX "URL Selection",IDC_STATIC,156,3,131,35,WS_GROUP + CONTROL "C&urrent Folder",IDC_RADIO_CURDIR,"Button",BS_AUTORADIOBUTTON,161,54,90,8 + CONTROL "Recently Used Folder(&M)",IDC_RADIO_MRUDIR,"Button",BS_AUTORADIOBUTTON,161,69,90,8 + CONTROL "Specific &Folder",IDC_RADIO_SELDIR,"Button",BS_AUTORADIOBUTTON,161,84,90,8 + EDITTEXT IDC_EDIT_FILEOPENDIR,161,100,111,12,ES_AUTOHSCROLL + PUSHBUTTON "...",IDC_BUTTON_FILEOPENDIR,273,100,9,12 + GROUPBOX "Initial Folder for File Dialog",IDC_STATIC,156,41,130,79,WS_GROUP + CONTROL "Vista style File Dialog(&I)",IDC_CHECK_VISTA_STYLE_FILEDIALOG, + "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,161,128,125,10 + CONTROL "Enable CR Code NEL, PS, LS(&O)",IDC_CHECK_ENABLEEXTEOL, + "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,161,158,122,10 + CONTROL "Lock Move Box Selecting(&B)",IDC_CHECK_BOXSELECTLOCK, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,171,122,10 + GROUPBOX "Etc",IDC_STATIC,156,145,131,42,WS_GROUP END IDD_PROP_FILE DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "Tahoma" -BEGIN - LTEXT "Exclusive(&H)", IDC_STATIC, 8, 16, 48, 10 - COMBOBOX IDC_COMBO_FILESHAREMODE, 50, 14, 111, 78, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "&Watch for updates", IDC_CHECK_bCheckFileTimeStamp, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 31, 70, 10 - LTEXT "&Autoload Delay", IDC_LABEL_AUTOLOAD_DELAY, 80, 32, 62, 10 - EDITTEXT IDC_EDIT_AUTOLOAD_DELAY, 130, 30, 30, 12 - CONTROL "Spin1", IDC_SPIN_AUTOLOAD_DELAY, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 150, 30, 9, 12 - CONTROL "Forbid Editi&ng when Detecting Read-Only", IDC_CHECK_bUneditableIfUnwritable, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 46, 154, 10 - GROUPBOX "Exclusive File Control", IDC_STATIC, 3, 3, 163, 57, WS_GROUP - CONTROL "&Save even if there're no changes", IDC_CHECK_ENABLEUNMODIFIEDOVERWRITE, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 175, 16, 111, 10 - CONTROL "A&utomatically save", IDC_CHECK_AUTOSAVE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 175, 31, 84, 10 - LTEXT "&Interval is every", IDC_LABEL_AUTOSAVE, 186, 47, 31, 8, NOT WS_GROUP - EDITTEXT IDC_EDIT_AUTOBACKUP_INTERVAL, 219, 45, 30, 12 - CONTROL "Spin1", IDC_SPIN_AUTOBACKUP_INTERVAL, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 266, 45, 9, 12 - LTEXT "mins", IDC_LABEL_AUTOSAVE2, 250, 47, 21, 8, NOT WS_GROUP - GROUPBOX "File Saving...", IDC_STATIC, 170, 3, 118, 57, WS_GROUP - CONTROL "Display all file types for new file(&O)", IDC_CHECK_NoFilterSaveNew, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 77, 133, 10 - CONTROL "Display all &file types for saved file", IDC_CHECK_NoFilterSaveFile, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 142, 77, 142, 10 - GROUPBOX "File List display filter for file-dialog", IDC_STATIC, 3, 65, 285, 28 - CONTROL "C&lose existing file when drag'n'drop new one", IDC_CHECK_bDropFileAndClose, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 110, 149, 10 - LTEXT "Support up to &MAX", IDC_LABEL_AUTOSAVE3, 18, 126, 101, 8, NOT WS_GROUP - EDITTEXT IDC_EDIT_nDropFileNumMax, 123, 124, 25, 12, ES_AUTOHSCROLL - CONTROL "Spin1", IDC_SPIN_nDropFileNumMax, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 179, 124, 9, 12 - LTEXT "files", IDC_LABEL_AUTOSAVE4, 151, 126, 41, 8, NOT WS_GROUP - LTEXT "NB: Only possible to drop 1 file", IDC_LANEL_NOTE, 161, 111, 106, 8 - CONTROL "Restore &cursor position on open file", IDC_CHECK_RestoreCurPosition, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 140, 174, 10 - CONTROL "Restore &bookmarks on file open", IDC_CHECK_RestoreBookmarks, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 155, 214, 10 - CONTROL "&Decode MIME headers on file open", IDC_CHECK_AutoMIMEDecode, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 169, 231, 10 - CONTROL "Display a dialog if char. encoding changes(&Q)", IDC_CHECK_QueryIfCodeChange, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 182, 223, 13 - CONTROL "Al&ert if file does not Exist", IDC_CHECK_AlertIfFileNotExist, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 198, 223, 10 - CONTROL "Aler&t if file is overly large", IDC_CHECK_ALERT_IF_LARGEFILE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 214, 167, 10 - EDITTEXT IDC_EDIT_ALERT_FILESIZE, 181, 212, 30, 12, ES_AUTOHSCROLL - CONTROL "Spin1", IDC_SPIN_ALERT_FILESIZE, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 240, 211, 9, 14 - LTEXT "MB", IDC_STATIC, 214, 214, 25, 10 - GROUPBOX "File Open...", IDC_STATIC, 3, 97, 285, 135, WS_GROUP +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + LTEXT "Exclusive(&H)",IDC_STATIC,8,16,48,10 + COMBOBOX IDC_COMBO_FILESHAREMODE,50,14,111,78,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "&Watch for updates",IDC_CHECK_bCheckFileTimeStamp, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,31,70,10 + LTEXT "&Autoload Delay",IDC_LABEL_AUTOLOAD_DELAY,80,32,62,10 + EDITTEXT IDC_EDIT_AUTOLOAD_DELAY,130,30,30,12 + CONTROL "Spin1",IDC_SPIN_AUTOLOAD_DELAY,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,150,30,9,12 + CONTROL "Forbid Editi&ng when Detecting Read-Only",IDC_CHECK_bUneditableIfUnwritable, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,46,154,10 + GROUPBOX "Exclusive File Control",IDC_STATIC,3,3,163,57,WS_GROUP + CONTROL "&Save even if there're no changes",IDC_CHECK_ENABLEUNMODIFIEDOVERWRITE, + "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,175,16,111,10 + CONTROL "A&utomatically save",IDC_CHECK_AUTOSAVE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,175,31,84,10 + LTEXT "&Interval is every",IDC_LABEL_AUTOSAVE,186,47,31,8,NOT WS_GROUP + EDITTEXT IDC_EDIT_AUTOBACKUP_INTERVAL,219,45,30,12 + CONTROL "Spin1",IDC_SPIN_AUTOBACKUP_INTERVAL,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,266,45,9,12 + LTEXT "mins",IDC_LABEL_AUTOSAVE2,250,47,21,8,NOT WS_GROUP + GROUPBOX "File Saving...",IDC_STATIC,170,3,118,57,WS_GROUP + CONTROL "Display all file types for new file(&O)",IDC_CHECK_NoFilterSaveNew, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,77,133,10 + CONTROL "Display all &file types for saved file",IDC_CHECK_NoFilterSaveFile, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,142,77,142,10 + GROUPBOX "File List display filter for file-dialog",IDC_STATIC,3,65,285,28 + CONTROL "C&lose existing file when drag'n'drop new one",IDC_CHECK_bDropFileAndClose, + "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,110,149,10 + LTEXT "Support up to &MAX",IDC_LABEL_AUTOSAVE3,18,126,101,8,NOT WS_GROUP + EDITTEXT IDC_EDIT_nDropFileNumMax,123,124,25,12,ES_AUTOHSCROLL + CONTROL "Spin1",IDC_SPIN_nDropFileNumMax,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,179,124,9,12 + LTEXT "files",IDC_LABEL_AUTOSAVE4,151,126,41,8,NOT WS_GROUP + LTEXT "NB: Only possible to drop 1 file",IDC_LANEL_NOTE,161,111,106,8 + CONTROL "Restore &cursor position on open file",IDC_CHECK_RestoreCurPosition, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,140,174,10 + CONTROL "Restore &bookmarks on file open",IDC_CHECK_RestoreBookmarks, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,155,214,10 + CONTROL "&Decode MIME headers on file open",IDC_CHECK_AutoMIMEDecode, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,169,231,10 + CONTROL "Display a dialog if char. encoding changes(&Q)",IDC_CHECK_QueryIfCodeChange, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,182,223,13 + CONTROL "Al&ert if file does not Exist",IDC_CHECK_AlertIfFileNotExist, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,198,223,10 + CONTROL "Aler&t if file is overly large",IDC_CHECK_ALERT_IF_LARGEFILE, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,214,167,10 + EDITTEXT IDC_EDIT_ALERT_FILESIZE,181,212,30,12,ES_AUTOHSCROLL + CONTROL "Spin1",IDC_SPIN_ALERT_FILESIZE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,240,211,9,14 + LTEXT "MB",IDC_STATIC,214,214,25,10 + GROUPBOX "File Open...",IDC_STATIC,3,97,285,135,WS_GROUP END IDD_PROP_FNAME DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "Tahoma" -BEGIN - CONTROL "Long path ellipsis(&L)", IDC_CHECK_SHORTPATH, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 6, 3, 100, 10 - LTEXT "Chars(&N)", IDC_STATIC, 109, 4, 45, 10 - EDITTEXT IDC_EDIT_SHORTMAXWIDTH, 155, 3, 30, 13, ES_NUMBER - GROUPBOX "S&imple Filename Display", IDC_STATIC, 6, 20, 282, 180 - CONTROL "List1", IDC_LIST_FNAME, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_AUTOARRANGE | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 12, 35, 230, 117 - LTEXT "&From", IDC_STATIC, 13, 161, 37, 10 - EDITTEXT IDC_EDIT_FNAME_FROM, 50, 160, 191, 13, ES_AUTOHSCROLL - LTEXT "To(&R)", IDC_STATIC, 13, 180, 37, 10 - EDITTEXT IDC_EDIT_FNAME_TO, 50, 177, 191, 13, ES_AUTOHSCROLL - PUSHBUTTON "In&sert", IDC_BUTTON_FNAME_INS, 245, 123, 38, 15 - PUSHBUTTON "&Add", IDC_BUTTON_FNAME_ADD, 245, 141, 38, 15 - PUSHBUTTON "&Edit", IDC_BUTTON_FNAME_UPD, 245, 159, 38, 15 - PUSHBUTTON "&Del", IDC_BUTTON_FNAME_DEL, 245, 177, 38, 15 - PUSHBUTTON "&Top", IDC_BUTTON_FNAME_TOP, 245, 43, 38, 15 - PUSHBUTTON "&Up", IDC_BUTTON_FNAME_UP, 245, 61, 38, 15 - PUSHBUTTON "Down(&G)", IDC_BUTTON_FNAME_DOWN, 245, 79, 38, 15 - PUSHBUTTON "&Bottom", IDC_BUTTON_FNAME_LAST, 245, 97, 38, 15 +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + CONTROL "Long path ellipsis(&L)",IDC_CHECK_SHORTPATH,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,6,3,100,10 + LTEXT "Chars(&N)",IDC_STATIC,109,4,45,10 + EDITTEXT IDC_EDIT_SHORTMAXWIDTH,155,3,30,13,ES_NUMBER + GROUPBOX "S&imple Filename Display",IDC_STATIC,6,20,282,180 + CONTROL "List1",IDC_LIST_FNAME,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_AUTOARRANGE | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,12,35,230,117 + LTEXT "&From",IDC_STATIC,13,161,37,10 + EDITTEXT IDC_EDIT_FNAME_FROM,50,160,191,13,ES_AUTOHSCROLL + LTEXT "To(&R)",IDC_STATIC,13,180,37,10 + EDITTEXT IDC_EDIT_FNAME_TO,50,177,191,13,ES_AUTOHSCROLL + PUSHBUTTON "In&sert",IDC_BUTTON_FNAME_INS,245,123,38,15 + PUSHBUTTON "&Add",IDC_BUTTON_FNAME_ADD,245,141,38,15 + PUSHBUTTON "&Edit",IDC_BUTTON_FNAME_UPD,245,159,38,15 + PUSHBUTTON "&Del",IDC_BUTTON_FNAME_DEL,245,177,38,15 + PUSHBUTTON "&Top",IDC_BUTTON_FNAME_TOP,245,43,38,15 + PUSHBUTTON "&Up",IDC_BUTTON_FNAME_UP,245,61,38,15 + PUSHBUTTON "Down(&G)",IDC_BUTTON_FNAME_DOWN,245,79,38,15 + PUSHBUTTON "&Bottom",IDC_BUTTON_FNAME_LAST,245,97,38,15 END IDD_PROP_BACKUP DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "Tahoma" -BEGIN - GROUPBOX "Backup Creation", IDC_STATIC, 3, 3, 285, 207, WS_GROUP - CONTROL "Create bac&kup during save", IDC_CHECK_BACKUP, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 16, 136, 10 - - CONTROL "Det&ailed Settings", IDC_CHECK_BACKUP_ADVANCED, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 12, 32, 79, 10 - EDITTEXT IDC_EDIT_BACKUPFILE, 24, 44, 255, 13, ES_AUTOHSCROLL - - CONTROL "Save once as .&bak", IDC_RADIO_BACKUP_TYPE1, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 12, 66, 142, 10 - CONTROL "Save repeatedly as (.b00~b98)(&G)", IDC_RADIO_BACKUP_TYPE3, "Button", BS_AUTORADIOBUTTON, 12, 80, 156, 10 - CONTROL "App&end backup date/time to file name", IDC_RADIO_BACKUP_DATETYPE1, "Button", BS_AUTORADIOBUTTON, 12, 106, 204, 10 - CONTROL "Append back&up date/time each time to file name", IDC_RADIO_BACKUP_DATETYPE2, "Button", BS_AUTORADIOBUTTON, 12, 120, 230, 10 - CONTROL "&Retain original extension", IDC_CHECK_BACKUP_RETAINEXT, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 162, 66, 96, 10 - LTEXT "&Number of backups (1-99)", IDC_LABEL_BACKUP_3, 22, 94, 91, 8 - EDITTEXT IDC_EDIT_BACKUP_3, 116, 92, 28, 12 - CONTROL "Spin1", IDC_SPIN_BACKUP_GENS, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 154, 92, 9, 12 - CONTROL "&Yr", IDC_CHECK_BACKUP_YEAR, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 22, 132, 35, 10 - CONTROL "&Mth", IDC_CHECK_BACKUP_MONTH, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 60, 132, 34, 10 - CONTROL "&Day", IDC_CHECK_BACKUP_DAY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 97, 132, 34, 10 - CONTROL "&Hr", IDC_CHECK_BACKUP_HOUR, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 134, 132, 34, 10 - CONTROL "M&in", IDC_CHECK_BACKUP_MIN, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 171, 132, 31, 10 - CONTROL "&Sec", IDC_CHECK_BACKUP_SEC, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 205, 132, 33, 10 - - LTEXT "", IDC_STATIC, 12, 60, 271, 83, NOT WS_VISIBLE - CONTROL "Use date/time when saving file", IDC_RADIO_BACKUP_DATETYPE1A, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 12, 104, 111, 10 - CONTROL "Use date/time from previous file update", IDC_RADIO_BACKUP_DATETYPE2A, "Button", BS_AUTORADIOBUTTON, 12, 118, 149, 10 - LTEXT "$x : x-th folder above's name (x=0-9)\r* : Extension\r%Y/%m/%d : YMD %y (2 dig. year) \r%H:%M:%S: HMS \r%% : '%' symbol\r", IDC_LABEL_BACKUP_HELP2, 165, 75, 115, 50, SS_SUNKEN - - CONTROL "Create in folder(&P)", IDC_CHECK_BACKUPFOLDER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 12, 148, 107, 10 - AUTOCHECKBOX "App&ly for Files on Removable Media", IDC_CHECK_BACKUP_FOLDER_RM, 120, 148, 133, 10 - LTEXT "&Folder Name", IDC_LABEL_BACKUP_4, 24, 162, 87, 8 - EDITTEXT IDC_EDIT_BACKUPFOLDER, 73, 160, 195, 12, ES_AUTOHSCROLL - PUSHBUTTON "&...", IDC_BUTTON_BACKUP_FOLDER_REF, 271, 160, 9, 12 - CONTROL "Throw backup file into Recycle Bin(&X)", IDC_CHECK_BACKUP_DUSTBOX, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 12, 176, 150, 10 - - CONTROL "Confirm before creating(&V)", IDC_CHECK_BACKUPDIALOG, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 12, 196, 104, 10 +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + GROUPBOX "Backup Creation",IDC_STATIC,3,3,285,207,WS_GROUP + CONTROL "Create bac&kup during save",IDC_CHECK_BACKUP,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,16,136,10 + CONTROL "Det&ailed Settings",IDC_CHECK_BACKUP_ADVANCED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,32,79,10 + EDITTEXT IDC_EDIT_BACKUPFILE,24,44,255,13,ES_AUTOHSCROLL + CONTROL "Save once as .&bak",IDC_RADIO_BACKUP_TYPE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,12,66,142,10 + CONTROL "Save repeatedly as (.b00~b98)(&G)",IDC_RADIO_BACKUP_TYPE3, + "Button",BS_AUTORADIOBUTTON,12,80,156,10 + CONTROL "App&end backup date/time to file name",IDC_RADIO_BACKUP_DATETYPE1, + "Button",BS_AUTORADIOBUTTON,12,106,204,10 + CONTROL "Append back&up date/time each time to file name",IDC_RADIO_BACKUP_DATETYPE2, + "Button",BS_AUTORADIOBUTTON,12,120,230,10 + CONTROL "&Retain original extension",IDC_CHECK_BACKUP_RETAINEXT, + "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,162,66,96,10 + LTEXT "&Number of backups (1-99)",IDC_LABEL_BACKUP_3,22,94,91,8 + EDITTEXT IDC_EDIT_BACKUP_3,116,92,28,12 + CONTROL "Spin1",IDC_SPIN_BACKUP_GENS,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,154,92,9,12 + CONTROL "&Yr",IDC_CHECK_BACKUP_YEAR,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,22,132,35,10 + CONTROL "&Mth",IDC_CHECK_BACKUP_MONTH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,132,34,10 + CONTROL "&Day",IDC_CHECK_BACKUP_DAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,97,132,34,10 + CONTROL "&Hr",IDC_CHECK_BACKUP_HOUR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,134,132,34,10 + CONTROL "M&in",IDC_CHECK_BACKUP_MIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,171,132,31,10 + CONTROL "&Sec",IDC_CHECK_BACKUP_SEC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,132,33,10 + LTEXT "",IDC_STATIC,12,60,271,83,NOT WS_VISIBLE + CONTROL "Use date/time when saving file",IDC_RADIO_BACKUP_DATETYPE1A, + "Button",BS_AUTORADIOBUTTON | WS_GROUP,12,104,111,10 + CONTROL "Use date/time from previous file update",IDC_RADIO_BACKUP_DATETYPE2A, + "Button",BS_AUTORADIOBUTTON,12,118,149,10 + LTEXT "$x : x-th folder above's name (x=0-9)\r* : Extension\r%Y/%m/%d : YMD %y (2 dig. year) \r%H:%M:%S: HMS \r%% : '%' symbol\r",IDC_LABEL_BACKUP_HELP2,165,75,115,50,SS_SUNKEN + CONTROL "Create in folder(&P)",IDC_CHECK_BACKUPFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,148,107,10 + CONTROL "App&ly for Files on Removable Media",IDC_CHECK_BACKUP_FOLDER_RM, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,120,148,133,10 + LTEXT "&Folder Name",IDC_LABEL_BACKUP_4,24,162,87,8 + EDITTEXT IDC_EDIT_BACKUPFOLDER,73,160,195,12,ES_AUTOHSCROLL + PUSHBUTTON "&...",IDC_BUTTON_BACKUP_FOLDER_REF,271,160,9,12 + CONTROL "Throw backup file into Recycle Bin(&X)",IDC_CHECK_BACKUP_DUSTBOX, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,176,150,10 + CONTROL "Confirm before creating(&V)",IDC_CHECK_BACKUPDIALOG, + "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,12,196,104,10 END IDD_PROP_FORMAT DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "Tahoma" -BEGIN - CONTROL "&Standard", IDC_RADIO_DFORM_0, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 8, 18, 48, 10 - CONTROL "&Custom", IDC_RADIO_DFORM_1, "Button", BS_AUTORADIOBUTTON, 58, 18, 48, 10 - LTEXT "&D:", IDC_LABEL_DFORM, 106, 19, 8, 8 - EDITTEXT IDC_EDIT_DFORM, 115, 17, 82, 12, ES_AUTOHSCROLL - GROUPBOX "Date Format", IDC_STATIC, 3, 3, 199, 35, WS_GROUP - LTEXT "Example", IDC_STATIC, 209, 7, 27, 8, NOT WS_GROUP - EDITTEXT IDC_EDIT_DFORM_EX, 209, 17, 77, 12, ES_AUTOHSCROLL | ES_READONLY | NOT WS_TABSTOP - CONTROL "Sta&ndard", IDC_RADIO_TFORM_0, "Button", BS_AUTORADIOBUTTON | WS_GROUP, 8, 58, 48, 10 - CONTROL "C&ustom", IDC_RADIO_TFORM_1, "Button", BS_AUTORADIOBUTTON, 58, 58, 48, 10 - LTEXT "&T:", IDC_LABEL_TFORM, 106, 59, 8, 8 - EDITTEXT IDC_EDIT_TFORM, 115, 57, 82, 12, ES_AUTOHSCROLL - GROUPBOX "Time Format", IDC_STATIC, 3, 43, 199, 35, WS_GROUP - LTEXT "Example", IDC_STATIC, 209, 47, 27, 8, NOT WS_GROUP - EDITTEXT IDC_EDIT_TFORM_EX, 209, 57, 77, 12, ES_AUTOHSCROLL | ES_READONLY | NOT WS_TABSTOP - GROUPBOX "Header Numbe&ring", IDC_STATIC, 3, 83, 283, 52, WS_GROUP - EDITTEXT IDC_EDIT_MIDASHIKIGOU, 8, 95, 272, 31, ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | WS_GROUP - GROUPBOX "&Quotation Character", IDC_STATIC, 3, 140, 283, 32, WS_GROUP - EDITTEXT IDC_EDIT_INYOUKIGOU, 8, 152, 270, 12, ES_AUTOHSCROLL | WS_GROUP +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + CONTROL "&Standard",IDC_RADIO_DFORM_0,"Button",BS_AUTORADIOBUTTON | WS_GROUP,8,18,48,10 + CONTROL "&Custom",IDC_RADIO_DFORM_1,"Button",BS_AUTORADIOBUTTON,58,18,48,10 + LTEXT "&D:",IDC_LABEL_DFORM,106,19,8,8 + EDITTEXT IDC_EDIT_DFORM,115,17,82,12,ES_AUTOHSCROLL + GROUPBOX "Date Format",IDC_STATIC,3,3,199,35,WS_GROUP + LTEXT "Example",IDC_STATIC,209,7,27,8,NOT WS_GROUP + EDITTEXT IDC_EDIT_DFORM_EX,209,17,77,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_TABSTOP + CONTROL "Sta&ndard",IDC_RADIO_TFORM_0,"Button",BS_AUTORADIOBUTTON | WS_GROUP,8,58,48,10 + CONTROL "C&ustom",IDC_RADIO_TFORM_1,"Button",BS_AUTORADIOBUTTON,58,58,48,10 + LTEXT "&T:",IDC_LABEL_TFORM,106,59,8,8 + EDITTEXT IDC_EDIT_TFORM,115,57,82,12,ES_AUTOHSCROLL + GROUPBOX "Time Format",IDC_STATIC,3,43,199,35,WS_GROUP + LTEXT "Example",IDC_STATIC,209,47,27,8,NOT WS_GROUP + EDITTEXT IDC_EDIT_TFORM_EX,209,57,77,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_TABSTOP + GROUPBOX "Header Numbe&ring",IDC_STATIC,3,83,283,52,WS_GROUP + EDITTEXT IDC_EDIT_MIDASHIKIGOU,8,95,272,31,ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | WS_GROUP + GROUPBOX "&Quotation Character",IDC_STATIC,3,140,283,32,WS_GROUP + EDITTEXT IDC_EDIT_INYOUKIGOU,8,152,270,12,ES_AUTOHSCROLL | WS_GROUP END IDD_PROP_GREP DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "Tahoma" -BEGIN - CONTROL "Use word at ¤t cursor position as default", IDC_CHECK_bCaretTextForSearch, "Button", BS_AUTOCHECKBOX | BS_TOP | WS_GROUP | WS_TABSTOP, 8, 21, 204, 10 - CONTROL "Share Search Cond&ition with Editors when Search Up/Down", IDC_CHECK_INHERIT_KEY_OTHER_VIEW, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 35, 209, 10 - LTEXT "Regex &Lib name", IDC_LABEL_REGEXP, 8, 50, 93, 10 - LTEXT "", IDC_LABEL_REGEXP_VER, 8, 62, 275, 14 - EDITTEXT IDC_EDIT_REGEXPLIB, 110, 47, 162, 13, ES_AUTOHSCROLL - GROUPBOX "Search/Replace/Grep", IDC_STATIC, 3, 7, 285, 70, WS_GROUP - CONTROL "Confirm when exiting GREP results(&V)", IDC_CHECK_bGrepExitConfirm, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 94, 130, 10 - CONTROL "Display &Results in real time", IDC_CHECK_GREPREALTIME, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 106, 111, 10 - GROUPBOX "Grep", IDC_STATIC, 3, 80, 285, 42, WS_GROUP - CONTROL "Tag Jump using &Enter key", IDC_CHECK_GTJW_RETURN, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 142, 109, 10 - CONTROL "Tag Jump using double-click(&W)", IDC_CHECK_GTJW_LDBLCLK, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 154, 115, 10 - GROUPBOX "Tag Jump using Grep results", IDC_STATIC, 3, 127, 285, 46, WS_GROUP - GROUPBOX "Tag Jump", IDC_STATIC, 3, 178, 285, 52, WS_GROUP - LTEXT "Search &Tag file:", IDC_STATIC, 8, 192, 112, 8 - COMBOBOX IDC_COMBO_TAGJUMP, 124, 190, 156, 100, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - LTEXT "Search Tag file by &Keyword:", IDC_STATIC, 8, 210, 112, 8 - COMBOBOX IDC_COMBO_KEYWORD_TAGJUMP, 124, 208, 156, 100, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + CONTROL "Use word at ¤t cursor position as default",IDC_CHECK_bCaretTextForSearch, + "Button",BS_AUTOCHECKBOX | BS_TOP | WS_GROUP | WS_TABSTOP,8,21,204,10 + CONTROL "Share Search Cond&ition with Editors when Search Up/Down",IDC_CHECK_INHERIT_KEY_OTHER_VIEW, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,35,209,10 + LTEXT "Regex &Lib name",IDC_LABEL_REGEXP,8,50,93,10 + LTEXT "",IDC_LABEL_REGEXP_VER,8,62,275,14 + EDITTEXT IDC_EDIT_REGEXPLIB,110,47,162,13,ES_AUTOHSCROLL + GROUPBOX "Search/Replace/Grep",IDC_STATIC,3,7,285,70,WS_GROUP + CONTROL "Confirm when exiting GREP results(&V)",IDC_CHECK_bGrepExitConfirm, + "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,94,130,10 + CONTROL "Display &Results in real time",IDC_CHECK_GREPREALTIME, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,106,111,10 + GROUPBOX "Grep",IDC_STATIC,3,80,285,42,WS_GROUP + CONTROL "Tag Jump using &Enter key",IDC_CHECK_GTJW_RETURN,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,142,109,10 + CONTROL "Tag Jump using double-click(&W)",IDC_CHECK_GTJW_LDBLCLK, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,154,115,10 + GROUPBOX "Tag Jump using Grep results",IDC_STATIC,3,127,285,46,WS_GROUP + GROUPBOX "Tag Jump",IDC_STATIC,3,178,285,52,WS_GROUP + LTEXT "Search &Tag file:",IDC_STATIC,8,192,112,8 + COMBOBOX IDC_COMBO_TAGJUMP,124,190,156,100,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + LTEXT "Search Tag file by &Keyword:",IDC_STATIC,8,210,112,8 + COMBOBOX IDC_COMBO_KEYWORD_TAGJUMP,124,208,156,100,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP END IDD_PROP_KEYBIND DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "Tahoma" -BEGIN - RTEXT "Category(&K)", IDC_LABEL_MENUFUNCKIND, 4, 4, 51, 8 - COMBOBOX IDC_COMBO_FUNCKIND, 60, 2, 80, 180, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - LTEXT "&Function", IDC_LABEL_MENUFUNC, 3, 18, 41, 8 - LISTBOX IDC_LIST_FUNC, 3, 28, 124, 143, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - LTEXT "Key for assigned function...(&G)", IDC_LABEL_FUNCtoKEY, 6, 175, 113, 8, NOT WS_GROUP - LISTBOX IDC_LIST_ASSIGNEDKEYS, 3, 184, 124, 33, LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Import...", IDC_BUTTON_IMPORT, 171, 2, 58, 14, WS_GROUP - PUSHBUTTON "E&xport...", IDC_BUTTON_EXPORT, 231, 2, 58, 14 - LTEXT "Ke&y", IDC_LABEL_KEYKIND, 164, 18, 25, 8 - LISTBOX IDC_LIST_KEY, 165, 28, 124, 164, LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP - CONTROL "&Shift", IDC_CHECK_SHIFT, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 134, 38, 25, 10 - CONTROL "&Ctrl", IDC_CHECK_CTRL, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 134, 53, 25, 10 - CONTROL "A<", IDC_CHECK_ALT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 134, 68, 25, 10 - LTEXT "Assigned Key's Function...", IDC_LABEL_KEYtoFUNC, 166, 196, 120, 8 - EDITTEXT IDC_EDIT_KEYSFUNC, 164, 205, 118, 12, ES_AUTOHSCROLL | ES_READONLY | WS_GROUP | NOT WS_TABSTOP - PUSHBUTTON "Assign(&B)", IDC_BUTTON_ASSIGN, 129, 190, 34, 14, WS_GROUP - PUSHBUTTON "&Release", IDC_BUTTON_RELEASE, 129, 204, 34, 14 +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + RTEXT "Category(&K)",IDC_LABEL_MENUFUNCKIND,4,4,51,8 + COMBOBOX IDC_COMBO_FUNCKIND,60,2,80,180,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + LTEXT "&Function",IDC_LABEL_MENUFUNC,3,18,41,8 + LISTBOX IDC_LIST_FUNC,3,28,124,143,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + LTEXT "Key for assigned function...(&G)",IDC_LABEL_FUNCtoKEY,6,175,113,8,NOT WS_GROUP + LISTBOX IDC_LIST_ASSIGNEDKEYS,3,184,124,33,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Import...",IDC_BUTTON_IMPORT,171,2,58,14,WS_GROUP + PUSHBUTTON "E&xport...",IDC_BUTTON_EXPORT,231,2,58,14 + LTEXT "Ke&y",IDC_LABEL_KEYKIND,164,18,25,8 + LISTBOX IDC_LIST_KEY,165,28,124,164,LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP + CONTROL "&Shift",IDC_CHECK_SHIFT,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,134,38,25,10 + CONTROL "&Ctrl",IDC_CHECK_CTRL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,134,53,25,10 + CONTROL "A<",IDC_CHECK_ALT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,134,68,25,10 + LTEXT "Assigned Key's Function...",IDC_LABEL_KEYtoFUNC,166,196,120,8 + EDITTEXT IDC_EDIT_KEYSFUNC,164,205,118,12,ES_AUTOHSCROLL | ES_READONLY | WS_GROUP | NOT WS_TABSTOP + PUSHBUTTON "Assign(&B)",IDC_BUTTON_ASSIGN,129,190,34,14,WS_GROUP + PUSHBUTTON "&Release",IDC_BUTTON_RELEASE,129,204,34,14 END IDD_PROP_CUSTMENU DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "Tahoma" -BEGIN - RTEXT "Category(&K)", IDC_LABEL_MENUFUNCKIND, 4, 4, 52, 8 - COMBOBOX IDC_COMBO_FUNCKIND, 60, 2, 80, 180, CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - LTEXT "&Function", IDC_LABEL_MENUFUNC, 3, 16, 40, 8, NOT WS_GROUP - LISTBOX IDC_LIST_FUNC, 3, 27, 124, 178, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - RTEXT "Sele&ct", IDC_LABEL_MENUCHOICE, 187, 4, 31, 8 - COMBOBOX IDC_COMBO_MENU, 221, 2, 68, 220, CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - LTEXT "Menu &Name", IDC_LABEL_MENUNAME, 142, 16, 64, 8, NOT WS_GROUP - EDITTEXT IDC_EDIT_MENUNAME, 146, 27, 109, 14, ES_AUTOHSCROLL - PUSHBUTTON "Set(&R)", IDC_BUTTON_MENUNAME, 258, 27, 30, 14 - LTEXT "&Menu", IDC_LABEL_MENU, 142, 44, 37, 8, NOT WS_GROUP - LISTBOX IDC_LIST_RES, 164, 54, 123, 151, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - PUSHBUTTON "&Del", IDC_BUTTON_DELETE, 128, 62, 34, 14, WS_GROUP - PUSHBUTTON "---(&S)", IDC_BUTTON_INSERTSEPARATOR, 128, 81, 34, 14, BS_MULTILINE - PUSHBUTTON "Insert(&A)", IDC_BUTTON_INSERT, 128, 101, 34, 14 - PUSHBUTTON "Ins. &Bot.", IDC_BUTTON_ADD, 128, 115, 34, 14, BS_MULTILINE - PUSHBUTTON "&Up", IDC_BUTTON_UP, 128, 135, 34, 14 - PUSHBUTTON "D&own", IDC_BUTTON_DOWN, 128, 149, 34, 14 - LTEXT "Double click item to set hot-key", IDC_LABEL_MENUKEYCHANGE, 174, 208, 114, 8 - CONTROL "Di&splay as Sub Menu", IDC_CHECK_SUBMENU, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 164, 220, 114, 8 - PUSHBUTTON "&Import...", IDC_BUTTON_IMPORT, 3, 208, 58, 14, WS_GROUP - PUSHBUTTON "E&xport...", IDC_BUTTON_EXPORT, 64, 208, 58, 14 +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + RTEXT "Category(&K)",IDC_LABEL_MENUFUNCKIND,4,4,52,8 + COMBOBOX IDC_COMBO_FUNCKIND,60,2,80,180,CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + LTEXT "&Function",IDC_LABEL_MENUFUNC,3,16,40,8,NOT WS_GROUP + LISTBOX IDC_LIST_FUNC,3,27,124,178,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + RTEXT "Sele&ct",IDC_LABEL_MENUCHOICE,187,4,31,8 + COMBOBOX IDC_COMBO_MENU,221,2,68,220,CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + LTEXT "Menu &Name",IDC_LABEL_MENUNAME,142,16,64,8,NOT WS_GROUP + EDITTEXT IDC_EDIT_MENUNAME,146,27,109,14,ES_AUTOHSCROLL + PUSHBUTTON "Set(&R)",IDC_BUTTON_MENUNAME,258,27,30,14 + LTEXT "&Menu",IDC_LABEL_MENU,142,44,37,8,NOT WS_GROUP + LISTBOX IDC_LIST_RES,164,54,123,151,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + PUSHBUTTON "&Del",IDC_BUTTON_DELETE,128,62,34,14,WS_GROUP + PUSHBUTTON "---(&S)",IDC_BUTTON_INSERTSEPARATOR,128,81,34,14,BS_MULTILINE + PUSHBUTTON "Insert(&A)",IDC_BUTTON_INSERT,128,101,34,14 + PUSHBUTTON "Ins. &Bot.",IDC_BUTTON_ADD,128,115,34,14,BS_MULTILINE + PUSHBUTTON "&Up",IDC_BUTTON_UP,128,135,34,14 + PUSHBUTTON "D&own",IDC_BUTTON_DOWN,128,149,34,14 + LTEXT "Double click item to set hot-key",IDC_LABEL_MENUKEYCHANGE,174,208,114,8 + CONTROL "Di&splay as Sub Menu",IDC_CHECK_SUBMENU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,164,220,114,8 + PUSHBUTTON "&Import...",IDC_BUTTON_IMPORT,3,208,58,14,WS_GROUP + PUSHBUTTON "E&xport...",IDC_BUTTON_EXPORT,64,208,58,14 END IDD_PROP_KEYWORD DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "Tahoma" -BEGIN - LTEXT "&Name", IDC_STATIC, 3, 6, 37, 8 - COMBOBOX IDC_COMBO_SET, 42, 3, 85, 180, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "&Make Set...", IDC_BUTTON_ADDSET, 181, 5, 53, 14, WS_GROUP - PUSHBUTTON "&Remove Set...", IDC_BUTTON_DELSET, 236, 5, 52, 14 - GROUPBOX "&Keyword Highlighting", IDC_STATIC, 3, 20, 285, 217, WS_GROUP - CONTROL "List5", IDC_LIST_KEYWORD, "SysListView32", LVS_LIST | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_EDITLABELS | LVS_ALIGNLEFT | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 5, 30, 280, 171 - PUSHBUTTON "&Add...", IDC_BUTTON_ADDKEYWORD, 8, 203, 40, 14, WS_GROUP - PUSHBUTTON "&Edit...", IDC_BUTTON_EDITKEYWORD, 50, 203, 40, 14 - PUSHBUTTON "&Delete", IDC_BUTTON_DELKEYWORD, 92, 203, 40, 14 - CONTROL "Match &Case", IDC_CHECK_KEYWORDCASE, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 8, 221, 94, 10 - PUSHBUTTON "&Import...", IDC_BUTTON_IMPORT, 166, 220, 58, 14, WS_GROUP - PUSHBUTTON "E&xport...", IDC_BUTTON_EXPORT, 227, 220, 58, 14 - RTEXT "(Max 100 chr Registered 9999 / 9999)", IDC_STATIC_KEYWORD_COUNT, 135, 205, 142, 8 - PUSHBUTTON "Rename(&H)", IDC_BUTTON_KEYSETRENAME, 130, 3, 40, 14 - PUSHBUTTON "&Order", IDC_BUTTON_KEYCLEAN, 104, 220, 45, 14 - PUSHBUTTON "OK", IDOK, 182, 243, 50, 14 - PUSHBUTTON "Cancel(&X)", IDCANCEL, 237, 243, 50, 14 +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + LTEXT "&Name",IDC_STATIC,3,6,37,8 + COMBOBOX IDC_COMBO_SET,42,3,85,180,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "&Make Set...",IDC_BUTTON_ADDSET,181,5,53,14,WS_GROUP + PUSHBUTTON "&Remove Set...",IDC_BUTTON_DELSET,236,5,52,14 + GROUPBOX "&Keyword Highlighting",IDC_STATIC,3,20,285,217,WS_GROUP + CONTROL "List5",IDC_LIST_KEYWORD,"SysListView32",LVS_LIST | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_EDITLABELS | LVS_ALIGNLEFT | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP,5,30,280,171 + PUSHBUTTON "&Add...",IDC_BUTTON_ADDKEYWORD,8,203,40,14,WS_GROUP + PUSHBUTTON "&Edit...",IDC_BUTTON_EDITKEYWORD,50,203,40,14 + PUSHBUTTON "&Delete",IDC_BUTTON_DELKEYWORD,92,203,40,14 + CONTROL "Match &Case",IDC_CHECK_KEYWORDCASE,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,8,221,94,10 + PUSHBUTTON "&Import...",IDC_BUTTON_IMPORT,166,220,58,14,WS_GROUP + PUSHBUTTON "E&xport...",IDC_BUTTON_EXPORT,227,220,58,14 + RTEXT "(Max 100 chr Registered 9999 / 9999)",IDC_STATIC_KEYWORD_COUNT,135,205,142,8 + PUSHBUTTON "Rename(&H)",IDC_BUTTON_KEYSETRENAME,130,3,40,14 + PUSHBUTTON "&Order",IDC_BUTTON_KEYCLEAN,104,220,45,14 + PUSHBUTTON "OK",IDOK,182,243,50,14 + PUSHBUTTON "Cancel(&X)",IDCANCEL,237,243,50,14 END IDD_PROP_HELPER DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "Tahoma" -BEGIN - CONTROL "&Enter", IDC_CHECK_m_bHokanKey_RETURN, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 59, 15, 33, 10 - CONTROL "&Tab", IDC_CHECK_m_bHokanKey_TAB, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 93, 15, 28, 10 - CONTROL "&Right Arrow", IDC_CHECK_m_bHokanKey_RIGHT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 122, 15, 53, 10 - GROUPBOX "Input Autocompletion", IDC_STATIC, 3, 3, 285, 30, WS_GROUP - LTEXT "Candidate Select Key", IDC_STATIC, 7, 17, 45, 8 - GROUPBOX "Externa&l Help Setting", IDC_STATIC, 3, 37, 285, 32, WS_GROUP - EDITTEXT IDC_EDIT_EXTHELP1, 8, 50, 253, 12, ES_AUTOHSCROLL | WS_GROUP - PUSHBUTTON "(&1)...", IDC_BUTTON_OPENHELP1, 264, 49, 19, 14 - GROUPBOX "External HTML Hel&p Setting", IDC_STATIC, 3, 73, 285, 45, WS_GROUP - EDITTEXT IDC_EDIT_EXTHTMLHELP, 8, 89, 253, 12, ES_AUTOHSCROLL | WS_GROUP - PUSHBUTTON "(&2)...", IDC_BUTTON_OPENEXTHTMLHELP, 264, 88, 19, 14 - CONTROL "Do&n't open multiple viewers", IDC_CHECK_HTMLHELPISSINGLE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 8, 105, 108, 10 - GROUPBOX "Keyword Help", IDC_STATIC, 3, 123, 285, 33, WS_GROUP - RTEXT "Font", IDC_STATIC_KEYWORDHELPFONT, 8, 136, 219, 17, SS_RIGHT - PUSHBUTTON "&Font...", IDC_BUTTON_KEYWORDHELPFONT, 232, 136, 51, 14 - LTEXT "DLL(&M)", IDC_STATIC, 7, 172, 26, 8 - EDITTEXT IDC_EDIT_MIGEMO_DLL, 36, 170, 224, 12, ES_AUTOHSCROLL | WS_GROUP - PUSHBUTTON "(&3)...", IDC_BUTTON_OPENMDLL, 264, 169, 19, 14 - LTEXT "D&ict", IDC_STATIC, 7, 188, 25, 8 - EDITTEXT IDC_EDIT_MIGEMO_DICT, 36, 187, 224, 12, ES_AUTOHSCROLL - PUSHBUTTON "(&4)...", IDC_BUTTON_OPENMDICT, 264, 187, 19, 14 - GROUPBOX "migemo settings", IDC_STATIC, 3, 159, 285, 47, WS_GROUP +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + CONTROL "&Enter",IDC_CHECK_m_bHokanKey_RETURN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,59,15,33,10 + CONTROL "&Tab",IDC_CHECK_m_bHokanKey_TAB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,93,15,28,10 + CONTROL "&Right Arrow",IDC_CHECK_m_bHokanKey_RIGHT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,122,15,53,10 + GROUPBOX "Input Autocompletion",IDC_STATIC,3,3,285,30,WS_GROUP + LTEXT "Candidate Select Key",IDC_STATIC,7,17,45,8 + GROUPBOX "Externa&l Help Setting",IDC_STATIC,3,37,285,32,WS_GROUP + EDITTEXT IDC_EDIT_EXTHELP1,8,50,253,12,ES_AUTOHSCROLL | WS_GROUP + PUSHBUTTON "(&1)...",IDC_BUTTON_OPENHELP1,264,49,19,14 + GROUPBOX "External HTML Hel&p Setting",IDC_STATIC,3,73,285,45,WS_GROUP + EDITTEXT IDC_EDIT_EXTHTMLHELP,8,89,253,12,ES_AUTOHSCROLL | WS_GROUP + PUSHBUTTON "(&2)...",IDC_BUTTON_OPENEXTHTMLHELP,264,88,19,14 + CONTROL "Do&n't open multiple viewers",IDC_CHECK_HTMLHELPISSINGLE, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,105,108,10 + GROUPBOX "Keyword Help",IDC_STATIC,3,123,285,33,WS_GROUP + RTEXT "Font",IDC_STATIC_KEYWORDHELPFONT,8,136,219,17 + PUSHBUTTON "&Font...",IDC_BUTTON_KEYWORDHELPFONT,232,136,51,14 + LTEXT "DLL(&M)",IDC_STATIC,7,172,26,8 + EDITTEXT IDC_EDIT_MIGEMO_DLL,36,170,224,12,ES_AUTOHSCROLL | WS_GROUP + PUSHBUTTON "(&3)...",IDC_BUTTON_OPENMDLL,264,169,19,14 + LTEXT "D&ict",IDC_STATIC,7,188,25,8 + EDITTEXT IDC_EDIT_MIGEMO_DICT,36,187,224,12,ES_AUTOHSCROLL + PUSHBUTTON "(&4)...",IDC_BUTTON_OPENMDICT,264,187,19,14 + GROUPBOX "migemo settings",IDC_STATIC,3,159,285,47,WS_GROUP END IDD_PROP_MACRO DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "Tahoma" -BEGIN - LTEXT "Macro List", IDC_STATIC, 4, 9, 36, 8 - EDITTEXT IDC_MACRODIR, 46, 5, 199, 14, ES_AUTOHSCROLL - PUSHBUTTON "Add(&R)...", IDC_MACRODIRREF, 254, 5, 34, 14 - CONTROL "List1", IDC_MACROLIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_AUTOARRANGE | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 3, 21, 285, 148 - LTEXT "&Name", IDC_STATIC, 6, 179, 32, 8 - EDITTEXT IDC_MACRONAME, 39, 176, 203, 14, ES_AUTOHSCROLL - LTEXT "&File", IDC_STATIC, 6, 194, 12, 8 - COMBOBOX IDC_MACROPATH, 39, 192, 203, 130, CBS_DROPDOWN | CBS_SORT | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - CONTROL "Re&load file when Macro is executed", IDC_CHECK_RELOADWHENEXECUTE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 6, 211, 178, 10 - LTEXT "Cancel Timeout", IDC_STATIC, 185, 212, 75, 8 - EDITTEXT IDC_MACROCANCELTIMER, 255, 209, 18, 14, ES_AUTOHSCROLL - LTEXT "sec", IDC_STATIC, 275, 212, 13, 8 - LTEXT "AutoRun:", IDC_STATIC, 6, 225, 34, 8 - CONTROL "After new/&open file", IDC_CHECK_MacroOnOpened, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 44, 224, 89, 10 - CONTROL "After changing &Type", IDC_CHECK_MacroOnTypeChanged, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 135, 224, 77, 10 - CONTROL "Before &saving", IDC_CHECK_MacroOnSave, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 216, 224, 69, 10 - LTEXT "Id:", IDC_STATIC, 249, 176, 8, 8 - COMBOBOX IDC_COMBO_MACROID, 260, 174, 28, 129, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "&Apply", IDC_MACRO_REG, 250, 190, 38, 14 +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + LTEXT "Macro List",IDC_STATIC,4,9,36,8 + EDITTEXT IDC_MACRODIR,46,5,199,14,ES_AUTOHSCROLL + PUSHBUTTON "Add(&R)...",IDC_MACRODIRREF,254,5,34,14 + CONTROL "List1",IDC_MACROLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_AUTOARRANGE | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,3,21,285,148 + LTEXT "&Name",IDC_STATIC,6,179,32,8 + EDITTEXT IDC_MACRONAME,39,176,203,14,ES_AUTOHSCROLL + LTEXT "&File",IDC_STATIC,6,194,12,8 + COMBOBOX IDC_MACROPATH,39,192,203,130,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP + CONTROL "Re&load file when Macro is executed",IDC_CHECK_RELOADWHENEXECUTE, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,211,178,10 + LTEXT "Cancel Timeout",IDC_STATIC,185,212,75,8 + EDITTEXT IDC_MACROCANCELTIMER,255,209,18,14,ES_AUTOHSCROLL + LTEXT "sec",IDC_STATIC,275,212,13,8 + LTEXT "AutoRun:",IDC_STATIC,6,225,34,8 + CONTROL "After new/&open file",IDC_CHECK_MacroOnOpened,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,44,224,89,10 + CONTROL "After changing &Type",IDC_CHECK_MacroOnTypeChanged, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,135,224,77,10 + CONTROL "Before &saving",IDC_CHECK_MacroOnSave,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,216,224,69,10 + LTEXT "Id:",IDC_STATIC,249,176,8,8 + COMBOBOX IDC_COMBO_MACROID,260,174,28,129,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "&Apply",IDC_MACRO_REG,250,190,38,14 END IDD_PROP_PLUGIN DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP -FONT 9, "Tahoma" -BEGIN - CONTROL "&Enable Plugin Feature", IDC_CHECK_PluginEnable, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 6, 9, 100, 10 - PUSHBUTTON "Install &ZIP Plugin", IDC_PLUGIN_INST_ZIP, 192, 6, 96, 14 - PUSHBUTTON "Open &Folder", IDC_PLUGIN_OpenFolder, 120, 20, 70, 14 - PUSHBUTTON "&Install Plugin", IDC_PLUGIN_SearchNew, 192, 20, 96, 14 - LTEXT "Plugin List", IDC_STATIC, 4, 28, 50, 8 - CONTROL "List1", IDC_PLUGINLIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_AUTOARRANGE | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 3, 41, 285, 108 - LTEXT "Description", IDC_STATIC, 11, 160, 50, 8 - LTEXT "", IDC_LABEL_PLUGIN_Description, 66, 160, 200, 8 - LTEXT "Author", IDC_STATIC, 11, 175, 50, 8 - LTEXT "", IDC_LABEL_PLUGIN_Author, 66, 175, 200, 8 - LTEXT "Version", IDC_STATIC, 11, 190, 50, 8 - LTEXT "", IDC_LABEL_PLUGIN_Version, 66, 190, 100, 8 - PUSHBUTTON "Distribution Site(&D)", IDC_PLUGIN_URL, 186, 187, 80, 14 - PUSHBUTTON "&Remove", IDC_PLUGIN_Remove, 6, 205, 80, 14 - PUSHBUTTON "&Properties", IDC_PLUGIN_OPTION, 96, 205, 80, 14 - PUSHBUTTON "Read&Me", IDC_PLUGIN_README, 186, 205, 80, 14 +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + CONTROL "&Enable Plugin Feature",IDC_CHECK_PluginEnable,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,9,100,10 + PUSHBUTTON "Install &ZIP Plugin",IDC_PLUGIN_INST_ZIP,192,6,96,14 + PUSHBUTTON "Open &Folder",IDC_PLUGIN_OpenFolder,120,20,70,14 + PUSHBUTTON "&Install Plugin",IDC_PLUGIN_SearchNew,192,20,96,14 + LTEXT "Plugin List",IDC_STATIC,4,28,50,8 + CONTROL "List1",IDC_PLUGINLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_AUTOARRANGE | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,3,41,285,108 + LTEXT "Description",IDC_STATIC,11,160,50,8 + LTEXT "",IDC_LABEL_PLUGIN_Description,66,160,200,8 + LTEXT "Author",IDC_STATIC,11,175,50,8 + LTEXT "",IDC_LABEL_PLUGIN_Author,66,175,200,8 + LTEXT "Version",IDC_STATIC,11,190,50,8 + LTEXT "",IDC_LABEL_PLUGIN_Version,66,190,100,8 + PUSHBUTTON "Distribution Site(&D)",IDC_PLUGIN_URL,186,187,80,14 + PUSHBUTTON "&Remove",IDC_PLUGIN_Remove,6,205,80,14 + PUSHBUTTON "&Properties",IDC_PLUGIN_OPTION,96,205,80,14 + PUSHBUTTON "Read&Me",IDC_PLUGIN_README,186,205,80,14 END IDD_PROP_MAINMENU DIALOGEX 0, 0, 293, 240 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP CAPTION "Main Menu" -FONT 9, "Tahoma" -BEGIN - RTEXT "Category(&K)", IDC_LABEL_MENUFUNCKIND, 15, 6, 40, 8 - COMBOBOX IDC_COMBO_FUNCKIND, 57, 4, 80, 180, CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - LTEXT "&Function", IDC_LABEL_MENUFUNC, 4, 15, 40, 8 - LISTBOX IDC_LIST_FUNC, 4, 25, 123, 192, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - AUTOCHECKBOX "Dis&play Access Key in ( )", IDC_CHECK_KEY_PARENTHESES, 176, 4, 113, 10 - LTEXT "&Menu", IDC_LABEL_MENU, 166, 15, 35, 8 - CONTROL "&Menu", IDC_TREE_RES, "SysTreeView32", WS_TABSTOP | WS_BORDER | TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_EDITLABELS | TVS_SHOWSELALWAYS, 166, 25, 123, 192, WS_EX_ACCEPTFILES - PUSHBUTTON "&Delete", IDC_BUTTON_DELETE, 128, 25, 37, 14, WS_GROUP - PUSHBUTTON "&New Node", IDC_BUTTON_INSERT_NODE, 128, 44, 37, 14 - PUSHBUTTON "---(&S)", IDC_BUTTON_INSERTSEPARATOR, 128, 58, 37, 14 - PUSHBUTTON "Ins Bef.(&Q)", IDC_BUTTON_INSERT, 128, 72, 37, 14 - PUSHBUTTON "Ins &Aft.", IDC_BUTTON_INSERT_A, 128, 86, 37, 14 - PUSHBUTTON "Ins &Bot.", IDC_BUTTON_ADD, 128, 100, 37, 14 - PUSHBUTTON "&Up", IDC_BUTTON_UP, 128, 118, 37, 14 - PUSHBUTTON "D&own", IDC_BUTTON_DOWN, 128, 132, 37, 14 - PUSHBUTTON "&Right", IDC_BUTTON_RIGHT, 128, 146, 37, 14 - PUSHBUTTON "&Left", IDC_BUTTON_LEFT, 128, 160, 37, 14 - PUSHBUTTON "Expand(&H)", IDC_BUTTON_EXPAND, 128, 186, 37, 14 - PUSHBUTTON "Collapse(&Z)", IDC_BUTTON_COLLAPSE, 128, 200, 37, 14 - PUSHBUTTON "&Import...", IDC_BUTTON_IMPORT, 4, 222, 58, 14, WS_GROUP - PUSHBUTTON "E&xport...", IDC_BUTTON_EXPORT, 64, 222, 58, 14 - PUSHBUTTON "Validate(&T)", IDC_BUTTON_CHECK, 124, 222, 44, 14 - PUSHBUTTON "Erase All(&C)", IDC_BUTTON_CLEAR, 186, 222, 44, 14, WS_GROUP - PUSHBUTTON "Load D&efault", IDC_BUTTON_INITIALIZE, 235, 222, 54, 14 +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + RTEXT "Category(&K)",IDC_LABEL_MENUFUNCKIND,15,6,40,8 + COMBOBOX IDC_COMBO_FUNCKIND,57,4,80,180,CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + LTEXT "&Function",IDC_LABEL_MENUFUNC,4,15,40,8 + LISTBOX IDC_LIST_FUNC,4,25,123,192,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + CONTROL "Dis&play Access Key in ( )",IDC_CHECK_KEY_PARENTHESES, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,176,4,113,10 + LTEXT "&Menu",IDC_LABEL_MENU,166,15,35,8 + CONTROL "&Menu",IDC_TREE_RES,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_EDITLABELS | TVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,166,25,123,192,WS_EX_ACCEPTFILES + PUSHBUTTON "&Delete",IDC_BUTTON_DELETE,128,25,37,14,WS_GROUP + PUSHBUTTON "&New Node",IDC_BUTTON_INSERT_NODE,128,44,37,14 + PUSHBUTTON "---(&S)",IDC_BUTTON_INSERTSEPARATOR,128,58,37,14 + PUSHBUTTON "Ins Bef.(&Q)",IDC_BUTTON_INSERT,128,72,37,14 + PUSHBUTTON "Ins &Aft.",IDC_BUTTON_INSERT_A,128,86,37,14 + PUSHBUTTON "Ins &Bot.",IDC_BUTTON_ADD,128,100,37,14 + PUSHBUTTON "&Up",IDC_BUTTON_UP,128,118,37,14 + PUSHBUTTON "D&own",IDC_BUTTON_DOWN,128,132,37,14 + PUSHBUTTON "&Right",IDC_BUTTON_RIGHT,128,146,37,14 + PUSHBUTTON "&Left",IDC_BUTTON_LEFT,128,160,37,14 + PUSHBUTTON "Expand(&H)",IDC_BUTTON_EXPAND,128,186,37,14 + PUSHBUTTON "Collapse(&Z)",IDC_BUTTON_COLLAPSE,128,200,37,14 + PUSHBUTTON "&Import...",IDC_BUTTON_IMPORT,4,222,58,14,WS_GROUP + PUSHBUTTON "E&xport...",IDC_BUTTON_EXPORT,64,222,58,14 + PUSHBUTTON "Validate(&T)",IDC_BUTTON_CHECK,124,222,44,14 + PUSHBUTTON "Erase All(&C)",IDC_BUTTON_CLEAR,186,222,44,14,WS_GROUP + PUSHBUTTON "Load D&efault",IDC_BUTTON_INITIALIZE,235,222,54,14 END IDD_WINPOSSIZE DIALOGEX 0, 0, 177, 159 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP CAPTION "Window Position and Size" -FONT 9, "Tahoma" -BEGIN - CONTROL "&Default", IDC_RADIO_WINPOS_DEF, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 19, 61, 10 - CONTROL "Last Pos&ition", IDC_RADIO_WINPOS_SAVE, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 32, 52, 10 - CONTROL "Cu&stom Position", IDC_RADIO_WINPOS_SET, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 45, 56, 10 - LTEXT "&X pos", IDC_STATIC, 81, 29, 31, 8, NOT WS_GROUP - EDITTEXT IDC_EDIT_WX, 115, 25, 33, 14, ES_RIGHT | WS_GROUP - CONTROL "Spin1", IDC_SPIN_WX, "msctls_updown32", UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS, 148, 25, 10, 14 - LTEXT "&Y pos", IDC_STATIC, 81, 43, 31, 8, NOT WS_GROUP - EDITTEXT IDC_EDIT_WY, 115, 41, 33, 14, ES_RIGHT | WS_GROUP - CONTROL "Spin1", IDC_SPIN_WY, "msctls_updown32", UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS, 148, 41, 10, 14 - CONTROL "D&efault", IDC_RADIO_WINSIZE_DEF, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 79, 60, 10 - CONTROL "Last size(&N)", IDC_RADIO_WINSIZE_SAVE, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 91, 55, 10 - CONTROL "Cus&tom size", IDC_RADIO_WINSIZE_SET, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 103, 56, 10 - COMBOBOX IDC_COMBO_WINTYPE, 84, 74, 64, 52, CBS_DROPDOWNLIST | WS_VSCROLL | WS_GROUP | WS_TABSTOP - LTEXT "&Width", IDC_STATIC, 84, 94, 20, 8 - EDITTEXT IDC_EDIT_SX, 115, 91, 33, 14, ES_RIGHT | ES_NUMBER - CONTROL "Spin1", IDC_SPIN_SX, "msctls_updown32", UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS, 148, 90, 10, 14 - LTEXT "Hei&ght", IDC_STATIC, 84, 110, 25, 8 - EDITTEXT IDC_EDIT_SY, 115, 108, 33, 14, ES_RIGHT | ES_NUMBER - CONTROL "Spin1", IDC_SPIN_SY, "msctls_updown32", UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS, 148, 108, 10, 14 - DEFPUSHBUTTON "&Close", IDOK, 26, 138, 50, 14, WS_GROUP - PUSHBUTTON "&Help", IDC_BUTTON_HELP, 110, 137, 54, 15, WS_GROUP - GROUPBOX "Initial Position", IDC_STATIC, 7, 7, 163, 52 - GROUPBOX "Size", IDC_STATIC, 7, 66, 163, 63 +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + CONTROL "&Default",IDC_RADIO_WINPOS_DEF,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,15,19,61,10 + CONTROL "Last Pos&ition",IDC_RADIO_WINPOS_SAVE,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,15,32,52,10 + CONTROL "Cu&stom Position",IDC_RADIO_WINPOS_SET,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,15,45,56,10 + LTEXT "&X pos",IDC_STATIC,81,29,31,8,NOT WS_GROUP + EDITTEXT IDC_EDIT_WX,115,25,33,14,ES_RIGHT | WS_GROUP + CONTROL "Spin1",IDC_SPIN_WX,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,148,25,10,14 + LTEXT "&Y pos",IDC_STATIC,81,43,31,8,NOT WS_GROUP + EDITTEXT IDC_EDIT_WY,115,41,33,14,ES_RIGHT | WS_GROUP + CONTROL "Spin1",IDC_SPIN_WY,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,148,41,10,14 + CONTROL "D&efault",IDC_RADIO_WINSIZE_DEF,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,15,79,60,10 + CONTROL "Last size(&N)",IDC_RADIO_WINSIZE_SAVE,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,15,91,55,10 + CONTROL "Cus&tom size",IDC_RADIO_WINSIZE_SET,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,15,103,56,10 + COMBOBOX IDC_COMBO_WINTYPE,84,74,64,52,CBS_DROPDOWNLIST | WS_VSCROLL | WS_GROUP | WS_TABSTOP + LTEXT "&Width",IDC_STATIC,84,94,20,8 + EDITTEXT IDC_EDIT_SX,115,91,33,14,ES_RIGHT | ES_NUMBER + CONTROL "Spin1",IDC_SPIN_SX,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,148,90,10,14 + LTEXT "Hei&ght",IDC_STATIC,84,110,25,8 + EDITTEXT IDC_EDIT_SY,115,108,33,14,ES_RIGHT | ES_NUMBER + CONTROL "Spin1",IDC_SPIN_SY,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,148,108,10,14 + DEFPUSHBUTTON "&Close",IDOK,26,138,50,14,WS_GROUP + PUSHBUTTON "&Help",IDC_BUTTON_HELP,110,137,54,15,WS_GROUP + GROUPBOX "Initial Position",IDC_STATIC,7,7,163,52 + GROUPBOX "Size",IDC_STATIC,7,66,163,63 END IDD_PLUGIN_OPTION DIALOGEX 0, 0, 271, 255 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP CAPTION "Properties" -FONT 9, "Tahoma" -BEGIN - LTEXT "Plugin Properties", IDC_STATIC_MSG, 11, 7, 119, 8 - CONTROL "List1", IDC_LIST_PLUGIN_OPTIONS, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 22, 257, 186 - LTEXT "Value:", IDC_STATIC, 11, 217, 21, 8 - EDITTEXT IDC_EDIT_PLUGIN_OPTION, 36, 214, 228, 14, ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_PLUGIN_OPTION_DIR, 36, 214, 205, 14, ES_AUTOHSCROLL - PUSHBUTTON "&...", IDC_BUTTON_PLUGIN_OPTION_DIR, 243, 214, 21, 14 - EDITTEXT IDC_EDIT_PLUGIN_OPTION_NUM, 36, 214, 60, 14, ES_RIGHT - CONTROL "Spin1", IDC_SPIN_PLUGIN_OPTION, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 148, 25, 10, 14, WS_EX_TRANSPARENT - CONTROL "Check", IDC_CHECK_PLUGIN_OPTION, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 36, 216, 200, 10 - COMBOBOX IDC_COMBO_PLUGIN_OPTION, 36, 214, 183, 150, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "Read&Me", IDC_PLUGIN_README, 49, 234, 50, 14 - DEFPUSHBUTTON "&OK", IDOK, 104, 234, 50, 14 - PUSHBUTTON "Cancel(&X)", IDCANCEL, 159, 234, 50, 14 - PUSHBUTTON "&Help", IDC_BUTTON_HELP, 214, 234, 50, 14 +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + LTEXT "Plugin Properties",IDC_STATIC_MSG,11,7,119,8 + CONTROL "List1",IDC_LIST_PLUGIN_OPTIONS,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,22,257,186 + LTEXT "Value:",IDC_STATIC,11,217,21,8 + EDITTEXT IDC_EDIT_PLUGIN_OPTION,36,214,228,14,ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_PLUGIN_OPTION_DIR,36,214,205,14,ES_AUTOHSCROLL + PUSHBUTTON "&...",IDC_BUTTON_PLUGIN_OPTION_DIR,243,214,21,14 + EDITTEXT IDC_EDIT_PLUGIN_OPTION_NUM,36,214,60,14,ES_RIGHT + CONTROL "Spin1",IDC_SPIN_PLUGIN_OPTION,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,148,25,10,14,WS_EX_TRANSPARENT + CONTROL "Check",IDC_CHECK_PLUGIN_OPTION,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,36,216,200,10 + COMBOBOX IDC_COMBO_PLUGIN_OPTION,36,214,183,150,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Read&Me",IDC_PLUGIN_README,49,234,50,14 + DEFPUSHBUTTON "&OK",IDOK,104,234,50,14 + PUSHBUTTON "Cancel(&X)",IDCANCEL,159,234,50,14 + PUSHBUTTON "&Help",IDC_BUTTON_HELP,214,234,50,14 END IDD_PROFILEMGR DIALOGEX 0, 0, 191, 184 -STYLE DS_MODALFRAME | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP CAPTION "Profile Manager" -FONT 9, "Tahoma" +FONT 9, "Tahoma", 0, 0, 0x1 BEGIN - LISTBOX IDC_LIST_PROFILE, 9, 9, 109, 128, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - CONTROL "Start Default Setting(&E)", IDC_CHECK_PROF_DEFSTART, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 10, 143, 150, 10 - DEFPUSHBUTTON "&Start", IDOK, 8, 161, 56, 14 - PUSHBUTTON "Close(&X)", IDCANCEL, 68, 161, 56, 14 - PUSHBUTTON "&Help", IDC_BUTTON_HELP, 128, 161, 56, 14 - PUSHBUTTON "&New", IDC_BUTTON_PROF_CREATE, 125, 8, 61, 14 - PUSHBUTTON "&Rename", IDC_BUTTON_PROF_RENAME, 125, 25, 61, 14 - PUSHBUTTON "&Delete", IDC_BUTTON_PROF_DELETE, 125, 42, 61, 14 - PUSHBUTTON "Set De&fault", IDC_BUTTON_PROF_DEFSET, 125, 62, 61, 14 - PUSHBUTTON "&Clear Default", IDC_BUTTON_PROF_DEFCLEAR, 125, 79, 61, 14 + LISTBOX IDC_LIST_PROFILE,9,9,109,128,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + CONTROL "Start Default Setting(&E)",IDC_CHECK_PROF_DEFSTART, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,143,150,10 + DEFPUSHBUTTON "&Start",IDOK,8,161,56,14 + PUSHBUTTON "Close(&X)",IDCANCEL,68,161,56,14 + PUSHBUTTON "&Help",IDC_BUTTON_HELP,128,161,56,14 + PUSHBUTTON "&New",IDC_BUTTON_PROF_CREATE,125,8,61,14 + PUSHBUTTON "&Rename",IDC_BUTTON_PROF_RENAME,125,25,61,14 + PUSHBUTTON "&Delete",IDC_BUTTON_PROF_DELETE,125,42,61,14 + PUSHBUTTON "Set De&fault",IDC_BUTTON_PROF_DEFSET,125,62,61,14 + PUSHBUTTON "&Clear Default",IDC_BUTTON_PROF_DEFCLEAR,125,79,61,14 END IDD_FILETREE DIALOGEX 0, 0, 291, 241 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP CAPTION "File Tree Setting" -FONT 9, "Tahoma" -BEGIN - LTEXT "Setting:Common", IDC_STATIC_SETTFING_FROM, 4, 4, 282, 10 - CONTROL "Load &Ini from folders", IDC_CHECK_LOADINI, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 4, 16, 120, 9 - LTEXT "Default Setting File(&J)", IDC_STATIC, 4, 28, 110, 8 - EDITTEXT IDC_EDIT_DEFINI, 13, 39, 124, 13, ES_AUTOHSCROLL - PUSHBUTTON "...(&1)", IDC_BUTTON_REF1, 137, 39, 17, 13 - PUSHBUTTON "Load(&V)", IDC_BUTTON_LOAD, 108, 53, 47, 14 - CONTROL "&Grep", IDC_RADIO_GREP, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 6, 72, 56, 8 - CONTROL "&File", IDC_RADIO_FILE, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 6, 85, 56, 8 - CONTROL "Folder(&2)", IDC_RADIO_FOLDER, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 6, 98, 56, 8 - GROUPBOX "Type", IDC_STATIC, 1, 61, 89, 50, WS_GROUP - LTEXT "Pa&th", IDC_STATIC_PATH, 3, 119, 22, 10 - EDITTEXT IDC_EDIT_PATH, 38, 117, 122, 13, ES_AUTOHSCROLL - PUSHBUTTON "&...", IDC_BUTTON_REF2, 161, 117, 10, 13 - PUSHBUTTON "▼(&3)", IDC_BUTTON_PATH_MENU, 171, 117, 21, 14 - LTEXT "Lab&el", IDC_STATIC, 3, 136, 32, 10 - EDITTEXT IDC_EDIT_LABEL, 38, 134, 111, 13, ES_AUTOHSCROLL - LTEXT "File(&K)", IDC_STATIC_FILE, 3, 154, 32, 10 - EDITTEXT IDC_EDIT_FILE, 38, 151, 111, 13, ES_AUTOHSCROLL - CONTROL "Hidden file(&W)", IDC_CHECK_HIDDEN, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 10, 181, 87, 8 - CONTROL "Read Only(&Z)", IDC_CHECK_READONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 10, 193, 87, 8 - CONTROL "&System file", IDC_CHECK_SYSTEM, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 10, 205, 87, 8 - GROUPBOX "Excepting File Att", IDC_STATIC, 4, 169, 100, 51 - PUSHBUTTON "Del(&4)", IDC_BUTTON_DELETE, 156, 17, 36, 14 - PUSHBUTTON "Ins Bef(&Q)", IDC_BUTTON_INSERT, 156, 32, 36, 14 - PUSHBUTTON "Ins &Aft", IDC_BUTTON_INSERT_A, 156, 46, 36, 14 - PUSHBUTTON "Ins Last(&B)", IDC_BUTTON_ADD, 156, 60, 36, 14 - PUSHBUTTON "U&pdate", IDC_BUTTON_UPDATE, 156, 74, 36, 14 - PUSHBUTTON "Files Ins(&C)...", IDC_BUTTON_FILEADD, 133, 88, 59, 14 - PUSHBUTTON "Paths Replace(&N)...", IDC_BUTTON_REPLACE, 111, 102, 81, 14 - PUSHBUTTON "&Up", IDC_BUTTON_UP, 156, 140, 36, 14 - PUSHBUTTON "&Down", IDC_BUTTON_DOWN, 156, 154, 36, 14 - PUSHBUTTON "&Right", IDC_BUTTON_RIGHT, 156, 168, 36, 14 - PUSHBUTTON "&Left", IDC_BUTTON_LEFT, 156, 182, 36, 14 - CONTROL "", IDC_TREE_FL, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 193, 17, 94, 202 - PUSHBUTTON "I&mport", IDC_BUTTON_IMPORT, 5, 225, 50, 14 - PUSHBUTTON "Export(&Y)", IDC_BUTTON_EXPORT, 59, 225, 50, 14 - DEFPUSHBUTTON "&OK", IDOK, 128, 225, 50, 14 - PUSHBUTTON "Cancel(&X)", IDCANCEL, 183, 225, 50, 14 - PUSHBUTTON "&Help", IDC_BUTTON_HELP, 238, 225, 50, 14 +FONT 9, "Tahoma", 0, 0, 0x1 +BEGIN + LTEXT "Setting:Common",IDC_STATIC_SETTFING_FROM,4,4,282,10 + CONTROL "Load &Ini from folders",IDC_CHECK_LOADINI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,16,120,9 + LTEXT "Default Setting File(&J)",IDC_STATIC,4,28,110,8 + EDITTEXT IDC_EDIT_DEFINI,13,39,124,13,ES_AUTOHSCROLL + PUSHBUTTON "...(&1)",IDC_BUTTON_REF1,137,39,17,13 + PUSHBUTTON "Load(&V)",IDC_BUTTON_LOAD,108,53,47,14 + CONTROL "&Grep",IDC_RADIO_GREP,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,6,72,56,8 + CONTROL "&File",IDC_RADIO_FILE,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,6,85,56,8 + CONTROL "Folder(&2)",IDC_RADIO_FOLDER,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,6,98,56,8 + GROUPBOX "Type",IDC_STATIC,1,61,89,50,WS_GROUP + LTEXT "Pa&th",IDC_STATIC_PATH,3,119,22,10 + EDITTEXT IDC_EDIT_PATH,38,117,122,13,ES_AUTOHSCROLL + PUSHBUTTON "&...",IDC_BUTTON_REF2,161,117,10,13 + PUSHBUTTON "▼(&3)",IDC_BUTTON_PATH_MENU,171,117,21,14 + LTEXT "Lab&el",IDC_STATIC,3,136,32,10 + EDITTEXT IDC_EDIT_LABEL,38,134,111,13,ES_AUTOHSCROLL + LTEXT "File(&K)",IDC_STATIC_FILE,3,154,32,10 + EDITTEXT IDC_EDIT_FILE,38,151,111,13,ES_AUTOHSCROLL + CONTROL "Hidden file(&W)",IDC_CHECK_HIDDEN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,181,87,8 + CONTROL "Read Only(&Z)",IDC_CHECK_READONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,193,87,8 + CONTROL "&System file",IDC_CHECK_SYSTEM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,205,87,8 + GROUPBOX "Excepting File Att",IDC_STATIC,4,169,100,51 + PUSHBUTTON "Del(&4)",IDC_BUTTON_DELETE,156,17,36,14 + PUSHBUTTON "Ins Bef(&Q)",IDC_BUTTON_INSERT,156,32,36,14 + PUSHBUTTON "Ins &Aft",IDC_BUTTON_INSERT_A,156,46,36,14 + PUSHBUTTON "Ins Last(&B)",IDC_BUTTON_ADD,156,60,36,14 + PUSHBUTTON "U&pdate",IDC_BUTTON_UPDATE,156,74,36,14 + PUSHBUTTON "Files Ins(&C)...",IDC_BUTTON_FILEADD,133,88,59,14 + PUSHBUTTON "Paths Replace(&N)...",IDC_BUTTON_REPLACE,111,102,81,14 + PUSHBUTTON "&Up",IDC_BUTTON_UP,156,140,36,14 + PUSHBUTTON "&Down",IDC_BUTTON_DOWN,156,154,36,14 + PUSHBUTTON "&Right",IDC_BUTTON_RIGHT,156,168,36,14 + PUSHBUTTON "&Left",IDC_BUTTON_LEFT,156,182,36,14 + CONTROL "",IDC_TREE_FL,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,193,17,94,202 + PUSHBUTTON "I&mport",IDC_BUTTON_IMPORT,5,225,50,14 + PUSHBUTTON "Export(&Y)",IDC_BUTTON_EXPORT,59,225,50,14 + DEFPUSHBUTTON "&OK",IDOK,128,225,50,14 + PUSHBUTTON "Cancel(&X)",IDCANCEL,183,225,50,14 + PUSHBUTTON "&Help",IDC_BUTTON_HELP,238,225,50,14 END IDD_WINLIST DIALOGEX 0, 0, 350, 250 -STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_THICKFRAME | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME EXSTYLE WS_EX_CONTEXTHELP CAPTION "Window List" -FONT 9, "Tahoma" +FONT 9, "Tahoma", 0, 0, 0x1 BEGIN - CONTROL "", IDC_LIST_WINDOW, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 7, 336, 215 - PUSHBUTTON "&Close Window", IDC_BUTTON_CLOSE, 7, 229, 90, 14 - PUSHBUTTON "&Save", IDC_BUTTON_SAVE, 112, 229, 50, 14 - DEFPUSHBUTTON "&OK", IDOK, 229, 229, 50, 14 - PUSHBUTTON "&Help", IDC_BUTTON_HELP, 286, 229, 50, 14 + CONTROL "",IDC_LIST_WINDOW,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,7,336,215 + PUSHBUTTON "&Close Window",IDC_BUTTON_CLOSE,7,229,90,14 + PUSHBUTTON "&Save",IDC_BUTTON_SAVE,112,229,50,14 + DEFPUSHBUTTON "&OK",IDOK,229,229,50,14 + PUSHBUTTON "&Help",IDC_BUTTON_HELP,286,229,50,14 END + ///////////////////////////////////////////////////////////////////////////// // // DESIGNINFO // #ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO DISCARDABLE +GUIDELINES DESIGNINFO BEGIN - IDD_PROP_GENERAL, DIALOG - BEGIN - LEFTMARGIN, 3 - RIGHTMARGIN, 286 - TOPMARGIN, 7 - BOTTOMMARGIN, 233 - END - IDD_FIND, DIALOG BEGIN LEFTMARGIN, 5 @@ -1742,22 +1773,6 @@ BEGIN BOTTOMMARGIN, 86 END - IDD_PROP_FILE, DIALOG - BEGIN - LEFTMARGIN, 1 - RIGHTMARGIN, 293 - TOPMARGIN, 7 - BOTTOMMARGIN, 233 - END - - IDD_ABOUT, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 238 - TOPMARGIN, 7 - BOTTOMMARGIN, 196 - END - IDD_JUMP, DIALOG BEGIN LEFTMARGIN, 7 @@ -1803,379 +1818,354 @@ BEGIN BOTTOMMARGIN, 142 END - IDD_PROP_TOOLBAR, DIALOG + IDD_REPLACERUNNING, DIALOG BEGIN - RIGHTMARGIN, 292 + LEFTMARGIN, 7 + RIGHTMARGIN, 183 + TOPMARGIN, 7 + BOTTOMMARGIN, 28 END - IDD_TYPELIST, DIALOG + IDD_PROPERTY_FILE, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 180 + RIGHTMARGIN, 263 TOPMARGIN, 7 - BOTTOMMARGIN, 216 + BOTTOMMARGIN, 220 END - IDD_PROP_SCREEN, DIALOG + IDD_INPUT1, DIALOG BEGIN - LEFTMARGIN, 3 - RIGHTMARGIN, 299 - TOPMARGIN, 4 - BOTTOMMARGIN, 237 + LEFTMARGIN, 7 + RIGHTMARGIN, 178 + TOPMARGIN, 7 + BOTTOMMARGIN, 48 END - IDD_PROPERTY_FILE, DIALOG + IDD_COMPARE, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 263 + RIGHTMARGIN, 358 TOPMARGIN, 7 - BOTTOMMARGIN, 220 + BOTTOMMARGIN, 158 END - IDD_PROP_KEYWORD, DIALOG + IDD_PRINTPREVIEWBAR, DIALOG BEGIN - BOTTOMMARGIN, 238 + LEFTMARGIN, 7 + RIGHTMARGIN, 395 + TOPMARGIN, 7 + BOTTOMMARGIN, 25 END - IDD_INPUT1, DIALOG + IDD_PRINTSETTING, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 178 + RIGHTMARGIN, 247 TOPMARGIN, 7 - BOTTOMMARGIN, 48 + BOTTOMMARGIN, 246 END - IDD_PROP_CUSTMENU, DIALOG + IDD_EXITING, DIALOG BEGIN - RIGHTMARGIN, 290 - VERTGUIDE, 276 + LEFTMARGIN, 7 + RIGHTMARGIN, 164 + TOPMARGIN, 7 + BOTTOMMARGIN, 23 END - IDD_PROP_FORMAT, DIALOG + IDD_EXEC, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 285 TOPMARGIN, 7 - BOTTOMMARGIN, 178 + BOTTOMMARGIN, 132 END - IDD_REPLACERUNNING, DIALOG + IDD_EXECRUNNING, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 183 + RIGHTMARGIN, 263 TOPMARGIN, 7 - BOTTOMMARGIN, 28 + BOTTOMMARGIN, 48 END - IDD_PROP_HELPER, DIALOG + IDD_MACRORUNNING, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 286 + RIGHTMARGIN, 263 TOPMARGIN, 7 - BOTTOMMARGIN, 210 + BOTTOMMARGIN, 48 END - IDD_PROP_COLOR, DIALOG + IDD_HOKAN, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 296 + RIGHTMARGIN, 118 TOPMARGIN, 7 + BOTTOMMARGIN, 93 END - IDD_COMPARE, DIALOG + IDD_PRINTING, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 358 + RIGHTMARGIN, 138 TOPMARGIN, 7 - BOTTOMMARGIN, 158 + BOTTOMMARGIN, 68 END - IDD_PRINTPREVIEWBAR, DIALOG + IDD_FILEUPDATEQUERY, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 395 + RIGHTMARGIN, 216 TOPMARGIN, 7 - BOTTOMMARGIN, 25 + BOTTOMMARGIN, 100 END - IDD_PRINTSETTING, DIALOG + IDD_FAVORITE, DIALOG + BEGIN + LEFTMARGIN, 3 + RIGHTMARGIN, 377 + TOPMARGIN, 4 + BOTTOMMARGIN, 270 + END + + IDD_TAGJUMPLIST, DIALOG + BEGIN + LEFTMARGIN, 3 + RIGHTMARGIN, 387 + TOPMARGIN, 4 + BOTTOMMARGIN, 187 + END + + IDD_TAG_MAKE, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 247 + RIGHTMARGIN, 226 TOPMARGIN, 7 - BOTTOMMARGIN, 246 + BOTTOMMARGIN, 78 END - IDD_PROP_KEYBIND, DIALOG + IDD_OPERATIONRUNNING, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 286 + RIGHTMARGIN, 183 TOPMARGIN, 7 - BOTTOMMARGIN, 232 + BOTTOMMARGIN, 28 END - IDD_EXITING, DIALOG + IDD_DIFF, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 164 + RIGHTMARGIN, 256 TOPMARGIN, 7 - BOTTOMMARGIN, 23 + BOTTOMMARGIN, 296 END - IDD_PROP_WIN, DIALOG + IDD_CTRLCODE, DIALOG BEGIN LEFTMARGIN, 2 - RIGHTMARGIN, 290 + RIGHTMARGIN, 177 TOPMARGIN, 2 - BOTTOMMARGIN, 206 + BOTTOMMARGIN, 182 END - IDD_PROP_EDIT, DIALOG + IDD_TYPELIST, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 284 + RIGHTMARGIN, 180 TOPMARGIN, 7 - BOTTOMMARGIN, 204 + BOTTOMMARGIN, 216 END - IDD_PROP_TAB, DIALOG + IDD_PROP_SCREEN, DIALOG BEGIN - LEFTMARGIN, 1 - RIGHTMARGIN, 291 - TOPMARGIN, 2 - BOTTOMMARGIN, 197 + LEFTMARGIN, 3 + RIGHTMARGIN, 299 + TOPMARGIN, 4 + BOTTOMMARGIN, 237 END - IDD_PROP_GREP, DIALOG + IDD_PROP_COLOR, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 286 + RIGHTMARGIN, 296 TOPMARGIN, 7 - BOTTOMMARGIN, 160 END - IDD_PROP_BACKUP, DIALOG + IDD_PROP_SUPPORT, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 284 + RIGHTMARGIN, 296 TOPMARGIN, 7 - BOTTOMMARGIN, 213 + BOTTOMMARGIN, 216 END - IDD_EXEC, DIALOG + IDD_PROP_REGEX, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 285 + RIGHTMARGIN, 296 TOPMARGIN, 7 - BOTTOMMARGIN, 132 + BOTTOMMARGIN, 213 END - IDD_OPERATIONRUNNING, DIALOG + IDD_DIALOG_KEYWORD_SELECT, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 183 + RIGHTMARGIN, 170 TOPMARGIN, 7 - BOTTOMMARGIN, 28 + BOTTOMMARGIN, 190 END - IDD_HOKAN, DIALOG + IDD_SAMECOLOR, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 118 + RIGHTMARGIN, 176 TOPMARGIN, 7 - BOTTOMMARGIN, 93 + BOTTOMMARGIN, 199 END - IDD_EXECRUNNING, DIALOG + IDD_PROP_GENERAL, DIALOG BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 263 + LEFTMARGIN, 3 + RIGHTMARGIN, 286 TOPMARGIN, 7 - BOTTOMMARGIN, 48 + BOTTOMMARGIN, 233 + END + + IDD_PROP_WIN, DIALOG + BEGIN + LEFTMARGIN, 2 + RIGHTMARGIN, 290 + TOPMARGIN, 2 + BOTTOMMARGIN, 206 + END + + IDD_PROP_TOOLBAR, DIALOG + BEGIN + RIGHTMARGIN, 292 + END + + IDD_PROP_TAB, DIALOG + BEGIN + LEFTMARGIN, 1 + RIGHTMARGIN, 291 + TOPMARGIN, 2 + BOTTOMMARGIN, 197 END - IDD_MACRORUNNING, DIALOG + IDD_PROP_STATUSBAR, DIALOG BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 263 + LEFTMARGIN, 1 + RIGHTMARGIN, 291 TOPMARGIN, 7 - BOTTOMMARGIN, 48 + BOTTOMMARGIN, 217 END - IDD_PRINTING, DIALOG + IDD_PROP_EDIT, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 138 + RIGHTMARGIN, 284 TOPMARGIN, 7 - BOTTOMMARGIN, 68 + BOTTOMMARGIN, 204 END - IDD_PROP_MACRO, DIALOG + IDD_PROP_FILE, DIALOG BEGIN - RIGHTMARGIN, 292 - BOTTOMMARGIN, 237 + LEFTMARGIN, 1 + TOPMARGIN, 7 + BOTTOMMARGIN, 233 END - IDD_PROP_SUPPORT, DIALOG + IDD_PROP_FNAME, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 296 + RIGHTMARGIN, 284 TOPMARGIN, 7 - BOTTOMMARGIN, 216 + BOTTOMMARGIN, 206 END - IDD_PROP_REGEX, DIALOG + IDD_PROP_BACKUP, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 296 + RIGHTMARGIN, 284 TOPMARGIN, 7 BOTTOMMARGIN, 213 END - IDD_DIFF, DIALOG + IDD_PROP_FORMAT, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 256 + RIGHTMARGIN, 285 TOPMARGIN, 7 - BOTTOMMARGIN, 296 - END - - IDD_CTRLCODE, DIALOG - BEGIN - LEFTMARGIN, 2 - RIGHTMARGIN, 177 - TOPMARGIN, 2 - BOTTOMMARGIN, 182 + BOTTOMMARGIN, 178 END - IDD_FILEUPDATEQUERY, DIALOG + IDD_PROP_GREP, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 216 + RIGHTMARGIN, 286 TOPMARGIN, 7 - BOTTOMMARGIN, 100 + BOTTOMMARGIN, 160 END - IDD_PROP_FNAME, DIALOG + IDD_PROP_KEYBIND, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 284 + RIGHTMARGIN, 286 TOPMARGIN, 7 - BOTTOMMARGIN, 206 + BOTTOMMARGIN, 232 END - IDD_FAVORITE, DIALOG + IDD_PROP_CUSTMENU, DIALOG BEGIN - LEFTMARGIN, 3 - RIGHTMARGIN, 377 - TOPMARGIN, 4 - BOTTOMMARGIN, 270 + RIGHTMARGIN, 290 + VERTGUIDE, 276 END - IDD_TAGJUMPLIST, DIALOG + IDD_PROP_KEYWORD, DIALOG BEGIN - LEFTMARGIN, 3 - RIGHTMARGIN, 387 - TOPMARGIN, 4 - BOTTOMMARGIN, 187 + BOTTOMMARGIN, 238 END - IDD_TAG_MAKE, DIALOG + IDD_PROP_HELPER, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 226 + RIGHTMARGIN, 286 TOPMARGIN, 7 - BOTTOMMARGIN, 78 + BOTTOMMARGIN, 210 END - IDD_WINPOSSIZE, DIALOG + IDD_PROP_MACRO, DIALOG BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 170 - TOPMARGIN, 7 - BOTTOMMARGIN, 152 + RIGHTMARGIN, 292 + BOTTOMMARGIN, 237 END - IDD_DIALOG_KEYWORD_SELECT, DIALOG + IDD_WINPOSSIZE, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 170 TOPMARGIN, 7 - BOTTOMMARGIN, 190 - END - - IDD_SAMECOLOR, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 176 - TOPMARGIN, 7 - BOTTOMMARGIN, 199 - END - - IDD_PROP_STATUSBAR, DIALOG - BEGIN - LEFTMARGIN, 1 - RIGHTMARGIN, 291 - TOPMARGIN, 7 - BOTTOMMARGIN, 217 + BOTTOMMARGIN, 152 END END #endif // APSTUDIO_INVOKED -#ifndef _MAC ///////////////////////////////////////////////////////////////////////////// // -// Version +// Bitmap // -VS_VERSION_INFO VERSIONINFO - FILEVERSION FL_VER - PRODUCTVERSION PR_VER - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x01L -#else - FILEFLAGS 0x00L -#endif - FILEOS 0x40004L - FILETYPE 0x1L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "Comments", "This is free software\0" - VALUE "CompanyName", "Project: Sakura-Editor\0" - VALUE "FileDescription", "Sakura Editor Language DLL(en_US)\0" - VALUE "FileVersion", FL_VER_STR - VALUE "InternalName", "sakura\0" - VALUE "LegalCopyright", S_COPYRIGHT_TRANSLATION - VALUE "LegalTrademarks", " \0" - VALUE "OriginalFilename", "sakura.exe\0" - VALUE "ProductName", "Sakura Editor Language DLL\0" - VALUE "ProductVersion", RESOURCE_VERSION_STRING(PR_VER_STR) // e.g. "2.3.2.0 4a0de579 UNICODE 64bit DEBUG" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END -#endif // !_MAC +IDB_MYTOOL BITMAP "../resource/mytool.bmp" -#ifndef SAKURA_LANG_RESOURCE +IDB_SCROLL_CENTER BITMAP "../resource/auto_scroll_center.bmp" -///////////////////////////////////////////////////////////////////////////// -// -// Bitmap -// +IDB_SCROLL_VERTICAL BITMAP "../resource/auto_scroll_vertical.bmp" + +IDB_SCROLL_HORIZONTAL BITMAP "../resource/auto_scroll_horizontal.bmp" -IDB_MYTOOL BITMAP DISCARDABLE "../resource/mytool.bmp" -IDB_SCROLL_CENTER BITMAP DISCARDABLE "../resource/auto_scroll_center.bmp" -IDB_SCROLL_VERTICAL BITMAP DISCARDABLE "../resource/auto_scroll_vertical.bmp" -IDB_SCROLL_HORIZONTAL BITMAP DISCARDABLE "../resource/auto_scroll_horizontal.bmp" ///////////////////////////////////////////////////////////////////////////// // @@ -2184,57 +2174,91 @@ IDB_SCROLL_HORIZONTAL BITMAP DISCARDABLE "../resource/auto_scroll_horizon // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. -#ifdef _DEBUG -IDI_ICON_STD ICON DISCARDABLE "../resource/icon_debug.ico" -#else -IDI_ICON_STD ICON DISCARDABLE "../resource/icon_std.ico" -#endif -IDI_ICON_GREP ICON DISCARDABLE "../resource/icon_grep.ico" -IDI_PRINTER ICON DISCARDABLE "../resource/printer.ico" +IDI_ICON_GREP ICON "../resource/icon_grep.ico" + +IDI_PRINTER ICON "../resource/printer.ico" + ///////////////////////////////////////////////////////////////////////////// // // Cursor // -IDC_CURSOR_COPYARROW CURSOR DISCARDABLE "../resource/cursor_copy.cur" -IDC_CURSOR_MOVEARROW CURSOR DISCARDABLE "../resource/cursor_move.cur" -IDC_CURSOR_RVARROW CURSOR DISCARDABLE "../resource/cursor_rvarrow.cur" -IDC_CURSOR_ISEARCH_F CURSOR DISCARDABLE "../resource/cursor_isf.cur" -IDC_CURSOR_ISEARCH_B CURSOR DISCARDABLE "../resource/cursor_isb.cur" -//IDC_CURSOR_TAB_LEFT CURSOR DISCARDABLE "../resource/cursor_tab_left.cur" -//IDC_CURSOR_TAB_RIGHT CURSOR DISCARDABLE "../resource/cursor_tab_right.cur" -IDC_CURSOR_TAB_SEPARATE CURSOR DISCARDABLE "../resource/cursor_tab_separate.cur" -IDC_CURSOR_TAB_JOIN CURSOR DISCARDABLE "../resource/cursor_tab_join.cur" -IDC_CURSOR_AUTOSCROLL_CENTER CURSOR DISCARDABLE "../resource/auto_scroll_center.cur" -IDC_CURSOR_AUTOSCROLL_HORIZONTAL CURSOR DISCARDABLE "../resource/auto_scroll_horizontal.cur" -IDC_CURSOR_AUTOSCROLL_VERTICAL CURSOR DISCARDABLE "../resource/auto_scroll_vertical.cur" -IDC_CURSOR_AUTOSCROLL_UP CURSOR DISCARDABLE "../resource/auto_scroll_up.cur" -IDC_CURSOR_AUTOSCROLL_DOWN CURSOR DISCARDABLE "../resource/auto_scroll_down.cur" -IDC_CURSOR_AUTOSCROLL_LEFT CURSOR DISCARDABLE "../resource/auto_scroll_left.cur" -IDC_CURSOR_AUTOSCROLL_RIGHT CURSOR DISCARDABLE "../resource/auto_scroll_right.cur" -IDC_CURSOR_AUTOSCROLL_UP_LEFT CURSOR DISCARDABLE "../resource/auto_scroll_up_left.cur" -IDC_CURSOR_AUTOSCROLL_UP_RIGHT CURSOR DISCARDABLE "../resource/auto_scroll_up_right.cur" -IDC_CURSOR_AUTOSCROLL_DOWN_LEFT CURSOR DISCARDABLE "../resource/auto_scroll_down_left.cur" -IDC_CURSOR_AUTOSCROLL_DOWN_RIGHT CURSOR DISCARDABLE "../resource/auto_scroll_down_right.cur" - -#endif // ! SAKURA_LANG_RESOURCE +IDC_CURSOR_COPYARROW CURSOR "../resource/cursor_copy.cur" + +IDC_CURSOR_MOVEARROW CURSOR "../resource/cursor_move.cur" + +IDC_CURSOR_RVARROW CURSOR "../resource/cursor_rvarrow.cur" + +IDC_CURSOR_ISEARCH_F CURSOR "../resource/cursor_isf.cur" + +IDC_CURSOR_ISEARCH_B CURSOR "../resource/cursor_isb.cur" + +IDC_CURSOR_TAB_SEPARATE CURSOR "../resource/cursor_tab_separate.cur" + +IDC_CURSOR_TAB_JOIN CURSOR "../resource/cursor_tab_join.cur" + +IDC_CURSOR_AUTOSCROLL_CENTER CURSOR "../resource/auto_scroll_center.cur" + +IDC_CURSOR_AUTOSCROLL_HORIZONTAL CURSOR "../resource/auto_scroll_horizontal.cur" + +IDC_CURSOR_AUTOSCROLL_VERTICAL CURSOR "../resource/auto_scroll_vertical.cur" + +IDC_CURSOR_AUTOSCROLL_UP CURSOR "../resource/auto_scroll_up.cur" + +IDC_CURSOR_AUTOSCROLL_DOWN CURSOR "../resource/auto_scroll_down.cur" + +IDC_CURSOR_AUTOSCROLL_LEFT CURSOR "../resource/auto_scroll_left.cur" + +IDC_CURSOR_AUTOSCROLL_RIGHT CURSOR "../resource/auto_scroll_right.cur" + +IDC_CURSOR_AUTOSCROLL_UP_LEFT CURSOR "../resource/auto_scroll_up_left.cur" + +IDC_CURSOR_AUTOSCROLL_UP_RIGHT CURSOR "../resource/auto_scroll_up_right.cur" + +IDC_CURSOR_AUTOSCROLL_DOWN_LEFT CURSOR "../resource/auto_scroll_down_left.cur" + +IDC_CURSOR_AUTOSCROLL_DOWN_RIGHT CURSOR "../resource/auto_scroll_down_right.cur" + + +///////////////////////////////////////////////////////////////////////////// +// +// 100 +// + +IDR_MENU1 100 "../resource/MainMenu.ini" + ///////////////////////////////////////////////////////////////////////////// // // String Table // -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_DISABLE "-- unknown --" END -STRINGTABLE DISCARDABLE +STRINGTABLE +BEGIN + F_ISEARCH_SUBMENU "Incremental Search" + F_TAB_CLOSEOTHER_TAB "Close all Other tabs" + F_TAB_CLOSEOTHER_WINDOW "Close all Other windows" + F_EDIT_BOX_SEL_SUBMENU "Box Selection" + F_FILE_TOPMENU "File" + F_EDIT_TOPMENU "Edit" + F_CONVERT_TOPMENU "Convert" + F_SEARCH_TOPMENU "Search" + F_TOOL_TOPMENU "Tool" + F_OPTION_TOPMENU "Option" + F_WINDOW_TOPMENU "Window" + F_HELP_TOPMENU "Help" + F_WINDOW_LIST_SUBMENU "Window List" +END + +STRINGTABLE BEGIN - F_FILE_TOPMENU "File" F_FILENEW "New" - F_FILENEW_NEWWINDOW "Open New Window" F_FILEOPEN "Open..." F_FILESAVE "Save" F_FILESAVEAS_DIALOG "Save As" @@ -2242,13 +2266,31 @@ BEGIN F_FILECLOSE_OPEN "Close and Open..." F_FILEOPEN_DROPDOWN "Open... (Dropdown)" F_FILESAVECLOSE "Save&&Close" + F_FILENEW_NEWWINDOW "Open New Window" F_FILE_REOPEN_SJIS "Re-open as SJIS" - F_FILE_REOPEN_SUBMENU "Re-open With encoding" - F_FILE_RCNTFILE_SUBMENU "Recently Used File" - F_FILE_RCNTFLDR_SUBMENU "Recently Used Folder" END -STRINGTABLE DISCARDABLE +STRINGTABLE +BEGIN + F_TAB_MANIP_SUBMENU "Tab control" + F_TAB_GROUPIZE "Create Tab group" + F_TAB_GROUPDEL "Tab group delete" + F_TOPMOST_REL "Release Always on top" + F_TOPMOST_SET "Set Always on top" + F_FILE_REOPEN_SUBMENU "Re-open With encoding" + F_FILE_RCNTFILE_SUBMENU "Recently Used File" + F_FILE_RCNTFLDR_SUBMENU "Recently Used Folder" + F_EDIT_INS_SUBMENU "Insert" + F_EDIT_COS_SUBMENU "Cosmetik" + F_EDIT_MOV_SUBMENU "Cursor Movement" + F_EDIT_SEL_SUBMENU "Selection" + F_EDIT_HLV_SUBMENU "High Level Editing" + F_CONV_ENCODE_SUBMENU "Change Encoding" + F_RECKEYMACRO_REC "Start Recording Macro" + F_SAVEKEYMACRO_REC "Save the macro" +END + +STRINGTABLE BEGIN F_FILE_REOPEN_JIS "Re-Open as JIS" F_FILE_REOPEN_EUC "Re-Open as EUC" @@ -2257,55 +2299,58 @@ BEGIN F_FILE_REOPEN_UTF7 "Re-Open as UTF-7" F_FILE_REOPEN_UNICODEBE "Re-Open as UTF-16 BE" F_FILE_REOPEN_CESU8 "Re-Open as CESU-8" - F_FILE_REOPEN_LATIN1 "Re-Open as Latin1" F_FILE_REOPEN "Re-Open" F_FILESAVEALL "Save all" + F_FILE_REOPEN_LATIN1 "Re-Open as Latin1" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_PRINT "Print..." F_PRINT_PREVIEW "Print PreView..." F_PRINT_PAGESETUP "Page SetUp..." END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_OPEN_HfromtoC "Open C/C++ header with same name..." F_ACTIVATE_SQLPLUS "Activate SQL*Plus" F_PLSQL_COMPILE_ON_SQLPLUS "Execute on SQL*Plus" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_BROWSE "Browse" F_VIEWMODE "View Mode" F_PROPERTY_FILE "File Property" F_PROFILEMGR "Profile Manager" - F_OPEN_FOLDER_IN_EXPLORER "Open Containing Folder" - F_OPEN_COMMAND_PROMPT "Open Command Prompt" - F_OPEN_POWERSHELL "Open PowerShell" - F_OPEN_POWERSHELL_AS_ADMIN "Open PowerShell As Admin" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_EXITALLEDITORS "Quit All Editors" F_EXITALL "Exit Sakura completely" + F_OPEN_FOLDER_IN_EXPLORER "Open Containing Folder" + F_OPEN_COMMAND_PROMPT "Open Command Prompt" F_WCHAR "Character Input" F_IME_CHAR "Hlf-Width Character Input" END -STRINGTABLE DISCARDABLE +STRINGTABLE +BEGIN + F_OPEN_POWERSHELL "Open PowerShell" + F_OPEN_POWERSHELL_AS_ADMIN "Open PowerShell As Admin" +END + +STRINGTABLE BEGIN - F_EDIT_TOPMENU "Edit" F_UNDO "Undo" F_REDO "Redo" F_DELETE "Delete" F_DELETE_BACK "Delete Back" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_WordDeleteToStart "Delete to start of word" F_WordDeleteToEnd "Delete to end of word" @@ -2313,7 +2358,7 @@ BEGIN F_WordDelete "Delete entire word" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_LineCutToStart "Cut to start of line" F_LineCutToEnd "Cut to end of line" @@ -2324,7 +2369,7 @@ BEGIN F_DUPLICATELINE "Duplicate line" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_INDENT_TAB "Tab Indent" F_UNINDENT_TAB "Back-Tab Indent" @@ -2332,7 +2377,7 @@ BEGIN F_UNINDENT_SPACE "Reverse Space Indent" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_LTRIM "Left trim whitespace" F_RTRIM "Right trim whitespace" @@ -2342,7 +2387,7 @@ BEGIN F_RECONVERT "Reconvert" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_UP "Cursor Up" F_DOWN "Cursor Down" @@ -2352,7 +2397,7 @@ BEGIN F_DOWN2 "Move Cursor Down - 2 lines" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_WORDLEFT "Move Cursor to Left of word" F_WORDRIGHT "Move Cursor to Right of word" @@ -2360,24 +2405,24 @@ BEGIN F_GOLINEEND "Move to End of line" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_HalfPageUp "Half page up" F_HalfPageDown "Half page down" F_1PageUp "1 page Up" F_1PageDown "1 page Down" - F_GOFILETOP "Start of file" // FIXME - &T - F_GOFILEEND "End of file" // FIXME - &B + F_GOFILETOP "Start of file" + F_GOFILEEND "End of file" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_CURLINECENTER "Center Current Line" F_CURLINETOP "Top Current Line" F_CURLINEBOTTOM "Bottom Current Line" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_JUMPHIST_PREV "Jump History: Previous" F_JUMPHIST_NEXT "Jump History: Next" @@ -2386,6 +2431,10 @@ BEGIN F_WndScrollUp "Scroll text down 1 line" F_GONEXTPARAGRAPH "Next Paragraph" F_GOPREVPARAGRAPH "Prev Paragraph" +END + +STRINGTABLE +BEGIN F_AUTOSCROLL "Auto Scroll" F_WHEELUP "Wheel Up" F_WHEELDOWN "Wheel Down" @@ -2399,7 +2448,7 @@ BEGIN F_MODIFYLINE_PREV "Prev Modified Line" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_SELECTWORD "Select Word at Cursor" F_SELECTALL "Select All" @@ -2412,14 +2461,14 @@ BEGIN F_UP2_SEL "Select 2 lines above" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_DOWN2_SEL "Select 2 lines below" F_WORDLEFT_SEL "Select to Left side of word" F_WORDRIGHT_SEL "Select to Right side of word" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_GOLINETOP_SEL "Select to start of line" F_GOLINEEND_SEL "Select to end of line" @@ -2429,13 +2478,13 @@ BEGIN F_1PageDown_Sel "Select 1 page Down" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_GOFILETOP_SEL "Select to top of file" F_GOFILEEND_SEL "Select to end of file" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_GONEXTPARAGRAPH_SEL "Select next paragraph" F_GOPREVPARAGRAPH_SEL "Select previous paragraph" @@ -2443,10 +2492,14 @@ BEGIN F_MODIFYLINE_PREV_SEL "Select Prev Modified Line" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_BEGIN_BOX "Box select being" F_UP_BOX "(Box Sel.)Cursor Up" +END + +STRINGTABLE +BEGIN F_DOWN_BOX "(Box Sel.)Cursor Down" F_LEFT_BOX "(Box Sel.)Cursor Left" F_RIGHT_BOX "(Box Sel.)Cursor Right" @@ -2454,6 +2507,10 @@ BEGIN F_DOWN2_BOX "(Box Sel.) 2 lines below" F_WORDLEFT_BOX "(Box Sel.)To Left side of word" F_WORDRIGHT_BOX "(Box Sel.)To Right side of word" +END + +STRINGTABLE +BEGIN F_GOLOGICALLINETOP_BOX "(Box Sel.)To start of line" F_GOLINETOP_BOX "(Box Sel.)To left side of line" F_GOLINEEND_BOX "(Box Sel.)To end of line" @@ -2461,11 +2518,15 @@ BEGIN F_HalfPageDown_BOX "(Box Sel.)Half page down" F_1PageUp_BOX "(Box Sel.) 1 page Up" F_1PageDown_BOX "(Box Sel.) 1 page Down" +END + +STRINGTABLE +BEGIN F_GOFILETOP_BOX "(Box Sel.)To top of file" F_GOFILEEND_BOX "(Box Sel.)To end of file" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_CUT "Cut" F_COPY "Copy" @@ -2473,45 +2534,38 @@ BEGIN F_PASTE "Paste" F_PASTEBOX "Paste Box" F_INSTEXT_W "Paste Text" - F_EDIT_INS_SUBMENU "Insert" - F_EDIT_HLV_SUBMENU "High Level Editing" - F_EDIT_MOV_SUBMENU "Cursor Movement" - F_EDIT_SEL_SUBMENU "Selection" - F_EDIT_BOX_SEL_SUBMENU "Box Selection" - F_EDIT_COS_SUBMENU "Cosmetik" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_COPY_ADDCRLF "Copy adding CRLF" F_COPYLINES "Copy selected lines" - F_COPYLINESASPASSAGE "Copy selected as passage" // 選択範囲内全行引用符付きコピー" <<--check - F_COPYLINESWITHLINENUMBER "Copy selected with line nr" // 選択範囲内全行行番号付きコピー" <<--check + F_COPYLINESASPASSAGE "Copy selected as passage" + F_COPYLINESWITHLINENUMBER "Copy selected with line nr" F_COPY_COLOR_HTML "Copy selected with HTML markup" F_COPY_COLOR_HTML_LINENUMBER "Copy selected with line nr && HTML" F_COPYPATH "Copy this file's path" F_COPYTAG "Copy file path and cursor location" F_COPYFNAME "Copy this file's name" - F_COPYDIRPATH "Copy this file's directory path" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_CREATEKEYBINDLIST "Copy the Key Binding list" + F_COPYDIRPATH "Copy this file's directory path" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_INS_DATE "Ins. Date" F_INS_TIME "Ins. Time" F_CTRL_CODE_DIALOG "Control Code Input" - F_INS_FILE_USED_RECENTLY "Ins. Recently Used File" - F_INS_FOLDER_USED_RECENTLY "Ins. Recently Used Folder" + F_INS_FILE_USED_RECENTLY "Ins. Recently Used File" + F_INS_FOLDER_USED_RECENTLY "Ins. Recently Used Folder" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN - F_CONVERT_TOPMENU "Convert" F_TOLOWER "Lower case" F_TOUPPER "Upper case" F_TOHANKAKU "Full Height → Half Height" @@ -2522,16 +2576,15 @@ BEGIN F_TOZENEI "Half Alphabetic → Full Alphabetic" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_TOHANEI "Full Alphabetic → Half Alphabetic" F_TOHANKATA "Full Katakana → Half Katakana" F_TABTOSPACE "TAB→Spaces" F_SPACETOTAB "Spaces→TAB" - F_CONV_ENCODE_SUBMENU "Change Encoding" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_CODECNV_AUTO2SJIS "Automatic → SJIS Code" F_CODECNV_EMAIL "E-Mail(JIS→SJIS) Code" @@ -2546,19 +2599,18 @@ BEGIN F_CODECNV_SJIS2UTF7 "SJIS→UTF-7 Code" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_BASE64DECODE "Base64 Decode and save" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_UUDECODE "uudecode and save" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN - F_SEARCH_TOPMENU "Search" F_SEARCH_DIALOG "Find" F_SEARCH_NEXT "Next" F_SEARCH_PREV "Prev" @@ -2570,17 +2622,17 @@ BEGIN F_JUMP_SRCHSTARTPOS "Jump to Initial search start position" F_GREP_DIALOG "Grep" F_GREP "Grep" - F_GREP_REPLACE_DLG "Grep Replace..." - F_GREP_REPLACE "Grep Replace" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN + F_GREP_REPLACE_DLG "Grep Replace..." + F_GREP_REPLACE "Grep Replace" F_JUMP_DIALOG "Jump to Line" F_JUMP "Jump to Line" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_OUTLINE "Outline analysis" F_OUTLINE_TOGGLE "Outline analysis(toggle)" @@ -2589,7 +2641,7 @@ BEGIN F_TAGS_MAKE "Make Tag file..." END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_DIRECT_TAGJUMP "Direct Tag Jump" F_TAGJUMP_CLOSE "Close, Tag Jump" @@ -2597,20 +2649,32 @@ BEGIN F_COMPARE "File Compare" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_BRACKETPAIR "Matching Bracket Search" F_BOOKMARK_SET "Set/Delete Bookmark" F_BOOKMARK_NEXT "Next Bookmark" - F_BOOKMARK_PATTERN "Set Bookmark" F_BOOKMARK_PREV "Prev Bookmark" F_BOOKMARK_RESET "Delete all bookmarks" F_BOOKMARK_VIEW "View Bookmark list" + F_BOOKMARK_PATTERN "Set Bookmark" +END +STRINGTABLE +BEGIN + F_TOGGLE_KEY_SEARCH_OFF "Don't show Keyword help" + F_TOGGLE_KEY_SEARCH_ON "Automatically show Keyword help" + F_SPLIT_V_ON "Split document Vertically" + F_SPLIT_V_OFF "Stop Split document Vertically" + F_SPLIT_H_ON "Split document Horizontally" + F_SPLIT_H_OFF "Stop Split document Horizontally" + F_CHGMOD_EOL_SUBMENU "End of line setting" + F_SPLIT_VH_ON "Split four ways" + F_SPLIT_VH_OFF "Stop Split four ways" F_BOOKMARK_SUBMENU "Bookmark" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_DIFF_DIALOG "DIFF Differences" F_DIFF "DIFF Differences" @@ -2626,57 +2690,84 @@ BEGIN F_FUNCLIST_NEXT "Next Function List Mark" F_FUNCLIST_PREV "Prev Function List Mark" F_FILETREE "File Tree" - - F_ISEARCH_SUBMENU "Incremental Search" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN - F_OPTION_TOPMENU "Option" F_CHGMOD_INS "Insert/Overwrite mode toggle" +END + +STRINGTABLE +BEGIN F_CHG_CHARSET "Select Encoding..." END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_CHGMOD_EOL_CRLF "End of line type (CRLF)" F_CHGMOD_EOL_LF "End of line type (LF)" F_CHGMOD_EOL_CR "End of line type (CR)" - F_CHGMOD_EOL_SUBMENU "End of line setting" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN - F_CANCEL_MODE "Cancel Mode" // Fixme + F_CANCEL_MODE "Cancel Mode" F_SHOWTOOLBAR "Hide/Show Tool Bar" F_SHOWFUNCKEY "Hide/Show Function" F_SHOWSTATUSBAR "Hide/Show Status Bar" F_SHOWTAB "Hide/Show Tab Bar" - F_SHOWMINIMAP "Hide/Show Mini Map" - - F_SHOWTOOLBAR_ON "Show Tool bar" - F_SHOWFUNCKEY_ON "Show Function Keys" - F_SHOWTAB_ON "Show Multi-Tabs" - F_SHOWSTATUSBAR_ON "Show Status bar" - F_SHOWMINIMAP_ON "Show Mini Map" - - F_SHOWTOOLBAR_OFF "Hide Tool bar" - F_SHOWFUNCKEY_OFF "Hide Function Keys" - F_SHOWTAB_OFF "Hide Multi-Tabs" - F_SHOWSTATUSBAR_OFF "Hide Status bar" - F_SHOWMINIMAP_OFF "Hide Mini Map" - END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN + F_SHOWMINIMAP "Hide/Show Mini Map" F_TYPE_LIST "File type list" F_OPTION_TYPE "File type settings" F_OPTION "Common Settings" F_FAVORITE "Manage History" END -STRINGTABLE DISCARDABLE +STRINGTABLE +BEGIN + F_LOADKEYMACRO_REC "Load the macro" + F_EXECKEYMACRO_REC "Run the macro" + F_RECKEYMACRO_APPE "Stop Recording Macro" + F_SAVEKEYMACRO_APPE "Stop && Save the macro" + F_LOADKEYMACRO_APPE "Stop && Load the macro" + F_EXECKEYMACRO_APPE "Stop && Run the macro" + F_EXECKEYMACRO_REGD "Registered Macros" + F_TOOL_CUSTOM_SUBMENU "Custom Menu" + F_SHOWTOOLBAR_ON "Show Tool bar" + F_SHOWFUNCKEY_ON "Show Function Keys" + F_SHOWTAB_ON "Show Multi-Tabs" + F_SHOWSTATUSBAR_ON "Show Status bar" + F_SHOWTOOLBAR_OFF "Hide Tool bar" + F_SHOWFUNCKEY_OFF "Hide Function Keys" + F_SHOWTAB_OFF "Hide Multi-Tabs" + F_SHOWSTATUSBAR_OFF "Hide Status bar" +END + +STRINGTABLE +BEGIN + STR_FILETREE_MENU_TEMP "&Temp" + STR_FILETREE_MENU_SAKURA "&Sakura" + STR_FILETREE_MENU_SAKURADATA "S&akura data" + STR_FILETREE_REPLACE_PATH_FROM "Please Input Replace 'From' Path" + STR_FILETREE_REPLACE_PATH_TO "Please Input Replace 'To' Path" + F_SHOWMINIMAP_OFF "Hide Mini Map" + F_SHOWMINIMAP_ON "Show Mini Map" + STR_FUCLIST_NEXT_NOT_FOUND "Forward (↓) Function wasn't found." + STR_FUCLIST_PREV_NOT_FOUND "Previous (↑) Function wasn't found." + STR_MODLINE_NEXT_NOT_FOUND "Forward (↓) Modified Line wasn't found." + STR_MODLINE_PREV_NOT_FOUND "Previous (↑) Modified Line wasn't found." + STR_GREP_SHOW_MATCH_NOHITLINE " (Not Matching Line displayed)\r\n" + STR_TSV_MODE_NONE "Normal" + STR_TSV_MODE_TSV "TSV" + STR_TSV_MODE_CSV "CSV" + STR_DLGFNCLST_SORTTYPE1_2 "Default (Desc)" +END + +STRINGTABLE BEGIN F_FONT "Font settings" F_SETFONTSIZE "Font Size Settings" @@ -2684,126 +2775,92 @@ BEGIN F_SETFONTSIZEDOWN "Decrease Font Size" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_WRAPWINDOWWIDTH "Line Wrap Width" F_TMPWRAPNOWRAP "Don't wrap" F_TMPWRAPSETTING "Wrap at set line" - F_TMPWRAPWINDOW "Wrap at right side of window" // FIXME - &W + F_TMPWRAPWINDOW "Wrap at right side of window" F_SELECT_COUNT_MODE "Count Byte Count" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN - F_TOOL_TOPMENU "Tool" F_RECKEYMACRO "Start/Stop recording Key Macro" F_SAVEKEYMACRO "Save Key Macro" F_LOADKEYMACRO "Load Key Macro" F_EXECKEYMACRO "Run Key Macro" - F_EXECEXTMACRO "Run an Existing macro" - - F_RECKEYMACRO_REC "Start Recording Macro" - F_SAVEKEYMACRO_REC "Save the macro" - F_LOADKEYMACRO_REC "Load the macro" - F_EXECKEYMACRO_REC "Run the macro" - - F_RECKEYMACRO_APPE "Stop Recording Macro" - F_SAVEKEYMACRO_APPE "Stop && Save the macro" - F_LOADKEYMACRO_APPE "Stop && Load the macro" - F_EXECKEYMACRO_APPE "Stop && Run the macro" - - F_EXECKEYMACRO_REGD "Registered Macros" - F_TOOL_CUSTOM_SUBMENU "Custom Menu" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_EXECMD_DIALOG "Execute an external command" F_EXECMD "Execute an external command" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN - F_WINDOW_TOPMENU "Window" F_SPLIT_V "Toggle Horizontal split" - F_SPLIT_V_ON "Split document Vertically" - F_SPLIT_V_OFF "Stop Split document Vertically" F_SPLIT_H "Toggle Vertical split" - F_SPLIT_H_ON "Split document Horizontally" - F_SPLIT_H_OFF "Stop Split document Horizontally" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_SPLIT_VH "Toggle 4-way split" - F_SPLIT_VH_ON "Split four ways" - F_SPLIT_VH_OFF "Stop Split four ways" - F_WINCLOSE "Close" F_WIN_CLOSEALL "Close All" +END + +STRINGTABLE +BEGIN + F_GROUPCLOSE "Group Close" + F_NEXTGROUP "Next group" + F_PREVGROUP "Prev group" + F_TAB_MOVERIGHT "Move tab Right" + F_TAB_MOVELEFT "Move tab Left" + F_TAB_SEPARATE "New Tab Group" + F_TAB_JOINTNEXT "Move to next group" + F_TAB_JOINTPREV "Move to prev group" F_TAB_CLOSEOTHER "Close all Other windows or tabs" - F_TAB_CLOSEOTHER_TAB "Close all Other tabs" - F_TAB_CLOSEOTHER_WINDOW "Close all Other windows" + F_TAB_CLOSELEFT "Close all tabs to the Left" + F_TAB_CLOSERIGHT "Close all tabs to the Right" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_CASCADE "Cascade" F_TILE_V "Tile Vertically" F_TILE_H "Tile Horizontally" - F_BIND_WINDOW "Group windows" // See F_TAB_GROUPDEL/F_TAB_GROUPIZE toggle for this one. - F_TOPMOST "Always on top" // Toggle for below two types (set/rel on top) - F_TOPMOST_REL "Release Always on top" - F_TOPMOST_SET "Set Always on top" + F_BIND_WINDOW "Group windows" + F_TOPMOST "Always on top" F_WINLIST "Window list" F_DLGWINLIST "Window List(Dlg)..." F_NEXTWINDOW "Next window" F_PREVWINDOW "Prev window" - F_WINDOW_LIST_SUBMENU "Window List" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_MAXIMIZE_V "Maximize Vertically" F_MINIMIZE_ALL "Minimize all" F_MAXIMIZE_H "Maximize Horizontally" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_REDRAW "Redraw" F_WIN_OUTPUT "Show output window" END -STRINGTABLE DISCARDABLE -BEGIN - F_GROUPCLOSE "Group Close" - F_NEXTGROUP "Next group" - F_PREVGROUP "Prev group" - F_TAB_MOVERIGHT "Move tab Right" - F_TAB_MOVELEFT "Move tab Left" - F_TAB_SEPARATE "New Tab Group" // "新規グループ" - F_TAB_JOINTNEXT "Move to next group" - F_TAB_JOINTPREV "Move to prev group" - F_TAB_MANIP_SUBMENU "Tab control" // LMP -- added - F_TAB_GROUPDEL "Tab group delete" // LMP -- added - F_TAB_GROUPIZE "Create Tab group" // LMP -- added - F_TAB_CLOSELEFT "Close all tabs to the Left" - F_TAB_CLOSERIGHT "Close all tabs to the Right" -END - -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_HOKAN "Supplemental Input" F_TOGGLE_KEY_SEARCH "Auto-display keyword help" - F_TOGGLE_KEY_SEARCH_ON "Automatically show Keyword help" - F_TOGGLE_KEY_SEARCH_OFF "Don't show Keyword help" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN - F_HELP_TOPMENU "Help" F_HELP_CONTENTS "Open help contents" F_HELP_SEARCH "Search help by keyword" F_MENU_ALLFUNC "Command list" @@ -2812,19 +2869,19 @@ BEGIN F_ABOUT "About Sakura" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_MENU_RBUTTON "Right Click Menu" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_CUSTMENU_1 "Custom Menu 1" F_CUSTMENU_2 "Custom Menu 2" F_CUSTMENU_3 "Custom Menu 3" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_CUSTMENU_4 "Custom Menu 4" F_CUSTMENU_5 "Custom Menu 5" @@ -2844,7 +2901,7 @@ BEGIN F_CUSTMENU_19 "Custom Menu 19" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_CUSTMENU_20 "Custom Menu 20" F_CUSTMENU_21 "Custom Menu 21" @@ -2853,18 +2910,18 @@ BEGIN F_CUSTMENU_24 "Tab Menu" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN - F_MENU_NOT_USED_FIRST "--Tool Bar Break--" //"――ツールバー折返――" + F_MENU_NOT_USED_FIRST "--Tool Bar Break--" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_CHGMOD_EOL "Newline code setting" F_TEXTWRAPMETHOD "Line Wrap Method" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN F_WINDOW_LIST "Window List" F_FILE_USED_RECENTLY "Recently Used File" @@ -2874,1329 +2931,1196 @@ BEGIN F_PLUGIN_LIST "Plugin Commands" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_AUTHOR_PAGE "https://sakura-editor.github.io/" IDS_ABOUT_DESCRIPTION "This software is the renamed [Text Editor(Joint Development Version)].\r\nIt is free for use irrespective of use commercially or not but, Source Code Copyright reserved by the person as described in each section.\r\nThis software is distributed without guarantee.\r\n" END -STRINGTABLE DISCARDABLE -BEGIN - STR_SQLERR_EXEC_BUT_NOT_RUN "Trying to execute in Oracle SQL*Plus\n\n\nOracle SQL*Plus is not running\n" - STR_SQLERR_ACTV_BUT_NOT_RUN "Trying to activate Oracle SQL*Plus\n\n\nOracle SQL*Plus is not running\n" - STR_ERR_CMPERR "Comparison destination folder\n%s\nhas a %d byte line \ncan not perform comparison." // FIXME - ok? -// STR_ERR_CMPERR "比較先のファイル\n%s\n%dバイトを超える行があります。\n比較できません。" - - STR_NO_TITLE1 "(No Title)" - STR_NO_TITLE2 "No Title" - STR_PREVIEW_ONLY "(Available in Print Preview)" - STR_NOT_SAVED "(Not Saved)" - - // CCommandLine.cpp - cant map properly - STR_CMDLINE_PARSECMD1 "%ls\r\nThe above file name is not correct. File name cannot contain the following characters; \\ / : * ? "" < > | ." - - // CControlProcess.cpp - STR_ERR_CTRLMTX1 "CreateMutex() failed.\n Will exit app." - STR_ERR_CTRLMTX2 "CreateEvent() failed.\n Will exit app." - STR_ERR_CTRLMTX3 "Failed to create window\nCant start it up." - STR_ERR_CTRLMTX4 "SetEvent() failed.\nWeill exit app." - - // CDlgCtrlCode.cpp - STR_DLGCTRLCODE_CODE "Code" - STR_DLGCTRLCODE_SYMBOL "Symbol" - STR_DLGCTRLCODE_NAME "Name" - STR_DLGCTRLCODE_DESC "Desc." - - STR_ERR_DLGCTL5 "Empty Code" // Codes for p_ctrl_list - STR_ERR_DLGCTL6 "Start of Header" - STR_ERR_DLGCTL7 "Start of Text" - STR_ERR_DLGCTL8 "End of Text" - STR_ERR_DLGCTL9 "End of Transmission" - STR_ERR_DLGCTL10 "Enquiry" - STR_ERR_DLGCTL11 "Acknowledge" - STR_ERR_DLGCTL12 "Bell" - STR_ERR_DLGCTL13 "Backspace" - STR_ERR_DLGCTL14 "Tab" - STR_ERR_DLGCTL15 "Linefeed" - STR_ERR_DLGCTL16 "Vertical Tab" - STR_ERR_DLGCTL17 "Form feed" - STR_ERR_DLGCTL18 "Carriage Return" - STR_ERR_DLGCTL19 "Shift Out" - STR_ERR_DLGCTL20 "Shift In" - STR_ERR_DLGCTL21 "Data Link Escape" - STR_ERR_DLGCTL22 "Data Control 1" - STR_ERR_DLGCTL23 "Data Control 2" - STR_ERR_DLGCTL24 "Data Control 3" - STR_ERR_DLGCTL25 "Data Control 4" - STR_ERR_DLGCTL26 "Neg. Ack" - STR_ERR_DLGCTL27 "Synchronize" - STR_ERR_DLGCTL28 "End Transmission Block" - STR_ERR_DLGCTL29 "Cancel" - STR_ERR_DLGCTL30 "End Media" - STR_ERR_DLGCTL31 "Substitute" - STR_ERR_DLGCTL32 "Escape" - STR_ERR_DLGCTL33 "Form Select" - STR_ERR_DLGCTL34 "Group Select" - STR_ERR_DLGCTL35 "Record Select" - STR_ERR_DLGCTL36 "Unit Select" - STR_ERR_DLGCTL37 "Delete" - - // CDlgFavorite.cpp - STR_DLGFAV_FILE "File" - STR_DLGFAV_FOLDER "Folder" - STR_DLGFAV_FF_EXCLUDE "Except File/Folder" - STR_DLGFAV_SEARCH "Search" - STR_DLGFAV_REPLACE "Replace" - STR_DLGFAV_GREP_FILE "GREP-File" - STR_DLGFAV_GREP_FOLDER "GREP-Folder" - STR_DLGFAV_EXT_COMMAND "Command" - STR_DLGFAV_CURRENT_DIR "Current Dir" - STR_DLGFAV_HIDDEN "(hidden)" - STR_DLGFAV_FAVORITE "Favorite" - STR_DLGFAV_CONF_DEL_FAV "Delete recent %s history.\nOK?" - STR_DLGFAV_CONF_DEL_NOTFAV "Delete recent %s history(except Favorites). \nOK?" - STR_DLGFAV_CONF_DEL_PATH "Delete recent %s history(Missing path) \nOK?" - STR_DLGFAV_DELIMITER ", " - STR_DLGFAV_FAV_REFRESH "History (%s) has been updated, will discard edit information and redisplay." - STR_DLGFAV_ADD "Add" - STR_DLGFAV_ADD_PROMPT "Please enter a string to add." - STR_DLGFAV_EDIT "Edit" - STR_DLGFAV_EDIT_PROMPT "Please enter a string to edit." - STR_DLGFAV_MENU_EDIT "&Edit" - STR_DLGFAV_MENU_ADD "new add(&I)" - STR_DLGFAV_MENU_EXCLUDE "add for except &List" - STR_DLGFAV_MENU_DEL_ALL "&All delete" - STR_DLGFAV_MENU_DEL_NOTFAV "delete except &Favorites" - STR_DLGFAV_MENU_DEL_INVALID "delete missi&ng path" - STR_DLGFAV_MENU_DEL_SEL "&Delete selecting item" - STR_DLGFAV_LIST_LIMIT_OVER "It was not possible to add full except list." - - // CDlgFileUpdateQuery.cpp - STR_ERR_DLGUPQRY1 "Reloading will cause changes to be lost, is this OK?" - STR_ERR_DLGUPQRY2 "Reload?" - - // CDlgFind.cpp - STR_DLGFIND1 "Please supply a search term first." - - // CDlgFuncList.cpp - STR_DLGFNCLST_TITLE_CPP "C++ Method Tree" - STR_DLGFNCLST_TITLE_RULE "Rule File" - STR_DLGFNCLST_TITLE_WZ "WZ Hierarchy Text" - STR_DLGFNCLST_TITLE_TEXT "Text Topic Tree" - STR_DLGFNCLST_TITLE_JAVA "Java Method Tree" - STR_DLGFNCLST_TITLE_PYTHON "Python Method Tree" - STR_DLGFNCLST_TITLE_COBOL "COBOL Outline" - STR_DLGFNCLST_TITLE_VB "Visual Basic Outline" - STR_DLGFNCLST_TITLE_C "C Function list" - STR_DLGFNCLST_TITLE_PLSQL "PL/SQL Function list" - STR_DLGFNCLST_TITLE_ASM "Assembler Outline" - STR_DLGFNCLST_TITLE_PERL "Perl Function list" - STR_DLGFNCLST_TITLE_ERLANG "Erlang Function list" - STR_DLGFNCLST_TITLE_BOOK "Bookmark" - - STR_DLGFNCLST_REMARK01 "Definition" - STR_DLGFNCLST_REMARK02 "Function Declaration" - STR_DLGFNCLST_REMARK03 "Procedure Declaration" - STR_DLGFNCLST_REMARK04 "Function" - STR_DLGFNCLST_REMARK05 "Procedure" - STR_DLGFNCLST_REMARK06 "■Package Specification" - STR_DLGFNCLST_REMARK07 "■Package Body" - STR_DLGFNCLST_REMARK08 "PROC" - STR_DLGFNCLST_REMARK09 "LABEL" - STR_DLGFNCLST_REMARK10 "ENDP" - - STR_DLGFNCLST_SORTTYPE1 "Default" - STR_DLGFNCLST_SORTTYPE1_2 "Default (Desc)" - STR_DLGFNCLST_SORTTYPE2 "Alphabetical Order" - STR_DLGFNCLST_SORTTYPE2_2 "Alphabetical Order (Desc)" - - // NOT complete.... - STR_DLGFNCLST_APND_DECLARE "(Declaration)" - STR_DLGFNCLST_APND_CLASS " class" - STR_DLGFNCLST_APND_STRUCT " struct" - STR_DLGFNCLST_APND_ENUM " enum" - STR_DLGFNCLST_APND_UNION " union" - STR_DLGFNCLST_APND_NAMESPACE " namespace" - STR_DLGFNCLST_APND_INTERFACE " interface" - STR_DLGFNCLST_APND_GLOBAL "Global" - - STR_DLGFNCLST_VB_STATIC "static " - STR_DLGFNCLST_VB_PRIVATE "private" - STR_DLGFNCLST_VB_FRIEND "friend" - STR_DLGFNCLST_VB_PUBLIC "public" - STR_DLGFNCLST_VB_FUNCTION "function" - STR_DLGFNCLST_VB_PROC "procedure" - STR_DLGFNCLST_VB_PROPGET "property get" // FIXME - sure? the comments don't match the names. (see CDlgFuncList.cpp) - STR_DLGFNCLST_VB_PROPLET "property set" - STR_DLGFNCLST_VB_PROPSET "property reference" - STR_DLGFNCLST_VB_CONST "Constant" - STR_DLGFNCLST_VB_ENUM "Enumerated type" - STR_DLGFNCLST_VB_TYPE "User Defined Type" - STR_DLGFNCLST_VB_EVENT "event" - STR_DLGFNCLST_VB_DECL "declaration" - - STR_DLGFNCLST_LIST_TEXT "Text" - STR_DLGFNCLST_LIST_TEXT_M "Text *" - STR_DLGFNCLST_LIST_FUNC "Function name" - STR_DLGFNCLST_LIST_FUNC_M "Function name *" - STR_DLGFNCLST_LIST_LINE "Ln" - STR_DLGFNCLST_LIST_LINE_M "Ln *" - STR_DLGFNCLST_LIST_COL "Cl" - STR_DLGFNCLST_LIST_COL_M "Cl *" - STR_DLGFNCLST_LIST_M "*" - - STR_DLGFNCLST_TIP_CLOSE "Close" - STR_DLGFNCLST_TIP_WIN "Window position" - STR_DLGFNCLST_TIP_UPDATE "Update" - - STR_DLGFNCLST_MENU_UPDATE "&Update" - STR_DLGFNCLST_MENU_COPY "&Copy" - STR_DLGFNCLST_MENU_EXPAND "&Expand all" - STR_DLGFNCLST_MENU_COLLAPSE "Collapse(&O) all" - STR_DLGFNCLST_MENU_BOOK_DEL "&Delete bookmark" - STR_DLGFNCLST_MENU_BOOK_ALL_DEL "delete &All bookmark" - STR_DLGFNCLST_MENU_WINPOS "&Window position" - STR_DLGFNCLST_MENU_LEFTDOC "&Left docking" - STR_DLGFNCLST_MENU_RIGHTDOC "&Right docking" - STR_DLGFNCLST_MENU_TOPDOC "&Top docking" - STR_DLGFNCLST_MENU_BOTDOC "&Bottom docking" - STR_DLGFNCLST_MENU_FLOATING "&Floating" - STR_DLGFNCLST_MENU_NODOCK "No docking(&I)" - STR_DLGFNCLST_MENU_SYNC "Docking position &Sync" - STR_DLGFNCLST_MENU_INHERIT "Docking position inherit &Common setting" - STR_DLGFNCLST_MENU_TYPE "Docking position inherit type setting(&Y)" - STR_DLGFNCLST_MENU_UNIFY "&Unify inheriting info" - STR_DLGFNCLST_MENU_CLOSE "Close(&X)" - - STR_DLGFNCLST_UNIFY "現在の画面のドッキング配置情報をすべての共通設定・タイプ別設定にコピーして統一します。\n(現在開いている他画面の状態も統一します。)\n" - - - // CDlgGrep.cpp - STR_DLGGREP1 "Please select search folder." - STR_DLGGREP2 "You can not use wildcards in the folder part of the file specification." - STR_DLGGREP3 "File name not use full path." - STR_DLGGREP4 "Please define the target search folder." - STR_DLGGREP5 "Target folder is not correct." - STR_DLGGREP6 "Target folder is too long" - - // CDlgJump.cpp - STR_DLGJUMP1 "Please input correct line number" - STR_DLGJUMP_PSLQL "%d Ln %s Package Specification" // PL/SQL - - // CDlgOpenFile.cpp - STR_DLGOPNFL1 "as is" // Save dialog, CRLF encoding option (none, cr+lf, cr) - STR_DLGOPNFL2 " already exists\r\nOverwrite the file?" - STR_DLGOPNFL3 "Save as" //"save with name" // FIXME - used in what context - STR_DLGOPNFL_EXTNAME1 "User setting" // Used for most "eXport" buttons in the File dialog - STR_DLGOPNFL_EXTNAME2 "Text File" - STR_DLGOPNFL_EXTNAME3 "All Files" - STR_DLGOPNFL_ERR1 "Dialog didn't open.\n\nError:%s" - - // CDlgPluginOption.cpp - STR_DLGPLUGINOPT_LOAD "Didn't load plugin." - STR_DLGPLUGINOPT_TITLE "%ls Plugin Setting" - STR_DLGPLUGINOPT_INIHEAD " Plugin Setting file" - STR_DLGPLUGINOPT_OPTION "Option doesn't exist" - STR_DLGPLUGINOPT_LIST1 "Item" - STR_DLGPLUGINOPT_LIST2 "Value" - STR_DLGPLUGINOPT_SELECT "Select %s" - - // CDlgPrintSetting.cpp - STR_DLGPRNST1 "Page Setup Profile Name" - STR_DLGPRNST2 "Please input the profile name" - - // CDlgProperty.cpp - STR_DLGFLPROP_FILENAME "Filename " - STR_DLGFLPROP_FILETYPE "File Type " - STR_DLGFLPROP_ENCODING "Character Encoding " - STR_DLGFLPROP_WITH_BOM " with BOM" - STR_DLGFLPROP_LINE_COUNT "Total Lines %d\r\n" - STR_DLGFLPROP_LAYOUT_LINE "Total including wrapped lines %d\r\n" - STR_DLGFLPROP_VIEW_MODE "Opened in View-Mode mode.\r\n" - STR_DLGFLPROP_MODIFIED "Updated since last save\r\n" - STR_DLGFLPROP_NOT_MODIFIED "Not changed since last save\r\n" - STR_DLGFLPROP_CMD_COUNT "\r\nTotal Editor Commands issued %d times\r\n" - STR_DLGFLPROP_FILE_INFO "--File Information-----------------\r\n" - STR_DLGFLPROP_W_LOCK "You have a *write-only* lock on this file that prevents other processes from accessing it.\r\n" - STR_DLGFLPROP_RW_LOCK "You have a *ready-only* lock on this file that prevents other processes from accessing it.\r\n" - STR_DLGFLPROP_LOCK "You locked this file.\r\n" - STR_DLGFLPROP_NOT_LOCK "You did not lock this file.\r\n" - STR_DLGFLPROP_ATTRIBUTES "File Attributes " - STR_DLGFLPROP_AT_ARCHIVE "/Archive" - STR_DLGFLPROP_AT_COMPRESS "/Compressed" - STR_DLGFLPROP_AT_FOLDER "/Folder" - STR_DLGFLPROP_AT_HIDDEN "/Hidden" - STR_DLGFLPROP_AT_NORMAL "/Normal" - STR_DLGFLPROP_AT_OFFLINE "/Offline" - STR_DLGFLPROP_AT_READONLY "/Read Only" - STR_DLGFLPROP_AT_SYSTEM "/System" - STR_DLGFLPROP_AT_TEMP "/Temporary" - STR_DLGFLPROP_CREATE_DT "Create Date " - STR_DLGFLPROP_YMDHMS "%dY %dM %dD %02d:%02d:%02d" - STR_DLGFLPROP_UPDATE_DT "Modify Date " - STR_DLGFLPROP_ACCESS_DT "Access Date " - STR_DLGFLPROP_DOS_NAME "MS-DOS Filename %s\r\n" - STR_DLGFLPROP_FILE_SIZE "File Size %d Bytes\r\n" - - // CDlgReplace.cpp - STR_DLGREPLC_CLIPBOARD "There is no valid data in the clipboard!" - STR_DLGREPLC_STR "No Selected Text to Replace" - STR_DLGREPLC_REPLACE "Changed %d occurrences" - STR_DLGREPLC_REPSTR "Please provide a replacement term first." - - // CDlgSameColor.cpp - STR_DLGSMCLR_BTN1 "foreground color unity" // FIXME - correct? - STR_DLGSMCLR_BTN2 "background color unity" - - // CDlgTagJumpList.cpp - STR_DLGTAGJMP1 "(report)" // FIXME - correct? - STR_DLGTAGJMP2 "(Not Found)" // FIXME ??? - STR_DLGTAGJMP_LIST1 "Keyword" - STR_DLGTAGJMP_LIST2 "hierarchical" - STR_DLGTAGJMP_LIST3 "Line Nr" - STR_DLGTAGJMP_LIST4 "Type" - STR_DLGTAGJMP_LIST5 "File Name" - STR_DLGTAGJMP_LIST6 "Notes" - STR_DLGTAGJMP3 "Keyword Searching..." - - // CDlgTagsMake.cpp - STR_DLGTAGMAK_SELECTDIR "Select folder for tag creation" - - // CDlgWinSize.cpp - STR_DLGWINSZ_NORMAL "Normal" // Window Settings &Window to size - STR_DLGWINSZ_MAXIMIZE "Maximize" - STR_DLGWINSZ_MINIMIZE "(Minimize)" - - // CDlgProfileMgr.cpp - STR_DLGPROFILE_ERR_WRITE "Failed to write profile settings." - STR_DLGPROFILE_NEW_PROF_TITLE "New Profile Name" - STR_DLGPROFILE_NEW_PROF_MSG "Input New Profile Name." - STR_DLGPROFILE_ERR_INVALID_CHAR "Contains is not available characters." - STR_DLGPROFILE_ERR_ALREADY "Already there is a profile of the same name." - STR_DLGPROFILE_ERR_FILE "You can not create because there is a file with the same name." - STR_DLGPROFILE_RENAME_TITLE "Rename Profile Name" - STR_DLGPROFILE_RENAME_MSG "Input Profile Name." - STR_DLGPROFILE_ERR_RENAME "Failed to change the name.\nProfile there is a possibility of being used." - - // CDocOutline.cpp - STR_DOCOUTLINE_REGEX "Regex Rule\n%ls\nOn Error\n%s" - - // CDocLineMgr.cpp - STR_ERR_DLGDOCLM1 "%ls\n file couldn't be opened.\nFile is not valid." - STR_ERR_DLGDOCLM2 "'%ls'\n file could not be opened.\nCould not get access to the file." - STR_ERR_DLGDOCLM3 "'%ls'\n file could not be opened.\nIts possible another application is using the file." - STR_ERR_DLGDOCLM4 "'%ls' error occurred whilst trying to read the file.\nWill stop attempting to read file." - STR_ERR_DLGDOCLM5 "'%ls'\nCould not save file.\nIncorrect path or other application is using the file." - STR_ERR_DLGDOCLM6 "CDocLineMgr::GetAllData()\nFailure to reserve memory \n%d bytes" - STR_ERR_DLGDOCLM_TOOBIG "'%ls'\n file could not be opened.\nIts size is too big." - - // CDocLineMgr_New.cpp - STR_ERR_DLGDOCLMN1 "Please inform the developers about this bug." - - // CDropTarget.cpp - STR_ERR_DLGDRPTGT1 "::RegisterDragDrop()\nError" - - // CEditApp.cpp - STR_TRAY_CREATE "CControlTray::Create()\nCould not register window class." - STR_TRAY_TYPE_NAME "Set %d" - STR_TRAY_EXTHELP1 "External Help 1 is unset.\nSet it now?" - STR_TRAY_RESPONSEFILE "Create error response file." - STR_TRAY_CREATEPROC1 "'%s'\nFailed to execute process.\n%s" - STR_TRAY_CREATEPROC2 "'%s'\nFailed to execute process." - STR_TRAY_EXITALL "Close all open windows, and exit editor without saving?" // When you exit editor - STR_TRAY_ACCELTABLE "CControlTray::CreateAccelTbl()\nCould not create accelerator table.\nInsufficient system resources." - - - // CEditDoc.cpp - STR_LOADAGENT_ERR_OPEN "'%s'\nCannot open file.\nYou do not have read access to this file." - STR_LOADAGENT_BIG_WARNING "'%s'\nFile size is %dMB or over. Do you want to open?" - STR_LOADAGENT_BIG_ERROR "'%s'\nCannot open file.\nIts size is too big.\n\nSpecified file size: %s\n File size limit: %s" - STR_SAVEAGENT_VIEW_FILE "Cannot overwrite file in view-mode." - STR_SAVEAGENT_OTHER "'%s'\nCannot save file.\nOther editor is opening this file." - STR_ERR_DLGEDITDOC5 "Character Encoding" // Dialog title for below - STR_ERR_DLGEDITDOC6 "%s\n\nOpening in %s, but it has been opened in %s last time.\nUse same character formatting as last time?\n\n\t[(Y)es] =%s\n\t[(N)o]=%s\n" - STR_NOT_EXSIST_SAVE "%s\nThe above file doesn't exist.\n\nWhen you save this document the file will be created on the disk." - STR_BACKUP_ERR_TITLE "File Save" - STR_BACKUP_ERR_MSG "Failed to create backup.. Continue to overwrite the original file?" // Continue with original file - STR_BACKUP_ERR_PATH_CRETE "error in the path of creating the backup destination.\nPath is too long or invalid format.\nContinue to overwrite the original file?" - STR_BACKUP_CONFORM_TITLE1 "Confirming creation of backup" // Dialog Title for message below - STR_BACKUP_CONFORM_MSG1 "Creating a backup before updating.\nOK? [(N)o] = No backup, just overwrite (or save as).\n\n%s\n ↓\n%s\n\nBackup file will be sent to the Trashcan\n" - STR_BACKUP_CONFORM_TITLE2 "Confirming creation of backup" // Dialog Title for message below - STR_BACKUP_CONFORM_MSG2 "Creating a backup before updating.\nOK? [(N)o] = No backup, just overwrite (or save as).\n\n%s\n ↓\n%s\n\n" - STR_BACKUP_ERR_DELETE "failed to delete" - STR_BACKUP_ERR_MOVE "failed to move" - STR_ERR_DLGEDITDOC21 "%s\nis currently prohibited from writing by another process." - - STR_EXCLU_NO_EXCLUSIVE "No Exclusive Mode" - STR_EXCLU_DENY_WRITE "Deny Write Access Mode" - STR_EXCLU_DENY_READWRITE "Deny Read-Write Access Mode" - STR_EXCLU_UNDEFINED "Undefined mode (problem)" - STR_FILE_LOCK_ERR "%s\n [%s] could not obtain lock\nThe exclusive lock on the current file is now invalid." - - STR_TITLE_GREP "[Grep] %ls%s" - STR_ERR_DLGEDITDOC30 "%s\nhas been altered. Save before closing? \n\nDue to opening as view-mode it is suggested to save under a different name.\n" - STR_CHANGE_CHARSET "%s\nis no change.\nhowever change encoding.\nSave before closing?" - STR_ERR_DLGEDITDOC31 "%s\nhas been altered. Save before closing?" - STR_AUTORELOAD_NOFITY "★File Updated at %02d:%02d:%02d" - - // CType_Cpp.cpp - STR_OUTLINE_CPP_NONAME "No Name" - STR_OUTLINE_CPP_DEFPOS "::def. pos." // Defined position - - // CType_Python.cpp - STR_OUTLINE_PYTHON_UNDEFINED "unset name" - STR_OUTLINE_PYTHON_CLASS " Class" - - // CType_Java.cpp - STR_OUTLINE_JAVA_DEFPOS "def. pos." // Defined position - - // CType_Erlang.cpp - STR_OUTLINE_ERLANG_SCANARGS "COutlineErlang::ScanArgs unknown bracket" - - // Caret.cpp - STR_CARET_WITHBOM " BOM" - - // CEditView.cpp - STR_VIEW_TIMER "CEditView::Create()\nTimer could not start up.\nPossible insufficiency of system resources." - STR_ERR_DLGEDITVW2 "大" // Used in get Extents - STR_ERR_DLGEDITVW5 "\n--------------------\n■" - STR_ERR_DLGEDITVW6 "■" - STR_MENU_KEYWORDINFO "Copy Keyword description to clipboard" // Right click menu - STR_MENU_OPENKEYWORDDIC "Open keyword dictionary" // Right click menu - STR_STATUS_ROW_COL "%5d Ln %4d Col" - STR_INS_MODE_INS "INS" // Insert mode - STR_INS_MODE_OVR "OVR" // Overwrite mode - STR_GREP_SEARCH_CONDITION "\r\n□ Search Conditions " // Output from GREP results - STR_GREP_SEARCH_FILE "\r\n" - STR_GREP_SEARCH_TARGET "Search Target " - STR_GREP_REPLACE_TO "Replace To " - STR_GREP_PASTE_CLIPBOAD "(Paste From Clipboard)" - STR_GREP_SEARCH_FOLDER "Folder " - STR_GREP_EXCLUDE_FILE "Exclude File " - STR_GREP_EXCLUDE_FOLDER "Exclude Folder " - STR_GREP_SUBFOLDER_YES " (search sub-folders = Yes)\r\n" - STR_GREP_SUBFOLDER_NO " (search sub-folders = No)\r\n" - STR_GREP_COMPLETE_WORD " (Match Whole Word)\r\n" - STR_GREP_CASE_SENSITIVE " (Case Sensitivity = Yes)\r\n" - STR_GREP_IGNORE_CASE " (Case Sensitivity = No)\r\n" - STR_GREP_REGEX_DLL " (RegEx:" - STR_GREP_CHARSET_AUTODETECT " (Encoding = Auto-Detect)\r\n" - STR_GREP_CHARSET " (Encoding:" - STR_GREP_SHOW_MATCH_LINE " (Matching Line displayed)\r\n" - STR_GREP_SHOW_FIRST_LINE " (Matching line first position only displayed)\r\n" - STR_GREP_SHOW_MATCH_AREA " (Matching Area only displayed)\r\n" - STR_GREP_SHOW_MATCH_NOHITLINE " (Not Matching Line displayed)\r\n" - STR_GREP_SHOW_FIRST_MATCH " (First Matching Area only displayed for each file)\r\n" - STR_GREP_SUSPENDED "suspended.\r\n" - STR_GREP_REPLACE_COUNT "%d items replaced.\r\n" - STR_GREP_MATCH_COUNT "%d items were checked.\r\n" - STR_GREP_RUNNINNG "Grep Running.\n" - STR_GREP_ERR_ENUMKEYS0 "(Unknown)" - STR_GREP_ERR_ENUMKEYS1 "You can not use a wild card in the folder of the file specified." - STR_GREP_ERR_ENUMKEYS2 "You can not use the full path in the file specification." - STR_GREP_TIMER "Processing time: %dms\r\n" - STR_GREP_ERR_FILEOPEN "file open error [%s]\r\n" - STR_GREP_ERR_FILEREAD "file read error [%s]\r\n" - STR_GREP_ERR_FILEWRITE "file write error [%s]\r\n" - STR_GREP_REP_ERR_DELETE "failed file delete." - STR_GREP_REP_ERR_REPLACE "failed file replace." - - // CEditView_ExecCmd.cpp - STR_EDITVIEW_EXECCMD_ERR "Failed to execute command." - STR_EDITVIEW_EXECCMD_STOP "\r\nSuspended.\r\n" - STR_EDITVIEW_EXECCMD_RET "\r\nProgram's Exit Code: %d\r\n" - - // CEditView_CmdHokan.cpp - STR_ERR_DLGEDITVWHOKAN1 "Autocompletion dictionary file is not set.\nSet it now?" - STR_SUPPORT_NOT_COMPLITE "There is no completions." - - // CEditView_Cmdisrch.cpp - STR_EDITVWISRCH_REGEX "Regex dll cant be loaded, or found." - STR_EDITVWISRCH_MIGEGO1 "MIGEMO.DLL cant be loaded, or found." - STR_EDITVWISRCH_MIGEGO2 "MIGEMO is not available" - STR_EDITVWISRCH_NOMATCH " (No Matches)" - - // CEditView_Command.cpp - STR_ERR_MACRO1 "Macro %d (%s) failed to execute." - STR_ERR_SRPREV1 "▲Restarted search from bottom" - STR_ERR_SRPREV2 "△Not Found" - STR_ERR_SRPREV3 "Reverse searching (↑) for '%ls' found no further instances." - STR_ERR_SRNEXT1 "▼Restarted search from top" - STR_ERR_SRNEXT2 "▽Not Found" - STR_ERR_SRNEXT3 "Forward searching (↓) for '%ls' found no further instances." - STR_ERR_UNINDENT1 "★Reverse indent only works on selected text" - STR_ERR_TAGJMP1 "Cant Tag-Jump" - STR_ERR_TAGJMPBK1 "Cant Bookmark Tag-Jump" - STR_ERR_MACROERR1 "Failed to open Macro.\n\n%s" - STR_ERR_CEDITVIEW_CMD01 "External Help-1 is not set.\nSet it now?" - STR_ERR_CEDITVIEW_CMD02 "External Help is not set.\nSet it now?" - STR_ERR_CEDITVIEW_CMD03 "Tag creation command failed to run.\n\nCTAGS.EXE could not be found." - STR_ERR_CEDITVIEW_CMD04 "Tag creation command failed to run.\n\n%s" - STR_ERR_CEDITVIEW_CMD05 "Creating Tag File ..." - STR_ERR_CEDITVIEW_CMD06 "Tag creation command failed to run.\n\n%hs" - STR_ERR_CEDITVIEW_CMD07 "Tag fille creation completed." - STR_ERR_CEDITVIEW_CMD08 "Failed to open C/C++ header file." - STR_ERR_CEDITVIEW_CMD09 "Failed to open C/C++ source file." - STR_ERR_CEDITVIEW_CMD10 "No valid data on the clip board !" - STR_ERR_CEDITVIEW_CMD11 "Replaced all occurrences to end of file." // Comes up when you press replace individually until u reach end of file. - STR_ERR_CEDITVIEW_CMD14 "Failed to write to the file.\n\n%s" - STR_ERR_CEDITVIEW_CMD16 "Failed to write to the file.\n\n%s" - STR_ERR_CEDITVIEW_CMD18 "%s\n has been changed. Save before passing to Oracle SQL*Plus?" - STR_ERR_CEDITVIEW_CMD20 "Oracle SQL*Plus did not respond.\nPlease wait a while and try again." - STR_ERR_CEDITVIEW_CMD21 "If the SQL isn't saved to a file then Oracle SQL*Plus can not run it.\n" - STR_ERR_CEDITVIEW_CMD22 "Did not find any differences." - STR_ERR_CEDITVIEW_CMD23 "Some differences were found." - STR_ERR_CEDITVIEW_CMD24 "Could not create the Macro File.\nFile name acquisition error (nRet=%d)" - STR_ERR_CEDITVIEW_CMD25 "Could not create the Macro File.\n\n%s" - STR_ERR_CEDITVIEW_CMD26 "Not a savable macro sequence. Can only save Keyboard Macros." - STR_ERR_CEDITVIEW_CMD27 "Could not create the Macro File.\n\n%s" - STR_ERR_CEDITVIEW_CMD28 "Could not open the file.\n\n%s" - STR_ERR_CEDITVIEW_CMD29 "%s\n\nThis file has been updated.\nReloading will cause all changed to be *lost*, OK?" - - // FIXME -- possibly some left over text in the form of square blocks in the TAGList - // inside function Command_EXTHELP1 - - // CEditView_Command_New.cpp - STR_BOOKMARK_NEXT_NOT_FOUND "Forward (↓) bookmark wasn't found." - STR_BOOKMARK_PREV_NOT_FOUND "Previous (↑) bookmark wasn't found." - STR_FUCLIST_NEXT_NOT_FOUND "Forward (↓) Function wasn't found." - STR_FUCLIST_PREV_NOT_FOUND "Previous (↑) Function wasn't found." - STR_ERR_DLGEDITVWCMDNW7 "%d line was successfully merged." // Edit Menu::Cosmtik::Merge lines option - STR_ERR_DLGEDITVWCMDNW8 "There were no lines of text that could be merged in your selection." // Edit Menu::Cosmtik::Merge lines option - STR_SAVEAGENT_OTHER_APP "'%s'\nCould not save the file.\nPath may not be correct, or the file is in use by another application." - STR_ERR_DLGEDITVWCMDNW11 "An error occurred whilst trying to write to the file." - STR_ERR_DLGEDITVWCMDNW12 "An error occurred whilst trying to read the file." - - // CEditView_Diff.cpp - STR_ERR_DLGEDITVWDIFF1 "DIFF command failed.\n\nFile to be used for comparison wasn't found." - STR_ERR_DLGEDITVWDIFF2 "DIFF command failed.\n\nDIFF.EXE wasn't found." - STR_ERR_DLGEDITVWDIFF3 "DIFF command failed.\n\n%ls" - STR_ERR_DLGEDITVWDIFF4 "The file to be used for comparison appears to be a binary file." - STR_ERR_DLGEDITVWDIFF5 "No differences were found by DIFF" - STR_DIFF_NEXT_NOT_FOUND "Forwards (↓) searching didn't find differences" - STR_DIFF_PREV_NOT_FOUND "Backward (↑) searching didn't find differences" - STR_DIFF_FAILED "DIFF command failed." - STR_DIFF_FAILED_TEMP "DIFF command failed.\n\nCouldn't create temporary file." - STR_DIFF_FAILED_LONG "DIFF command failed.\n\nLine was too long." - STR_MODLINE_NEXT_NOT_FOUND "Forward (↓) Modified Line wasn't found." - STR_MODLINE_PREV_NOT_FOUND "Previous (↑) Modified Line wasn't found." - - // CEditView_New.cpp -- no words, going to ignore for now ( just block [], ... etc ) - - // CEditView_New2.cpp -- no words, going to ignore for now ( just block [], ... etc ) - - // CEditView_New3.cpp -- no words, going to ignore for now ( just block [], ... etc ) - - // CEditView_Mouse.cpp - STR_VIEW_MOUSE_BUG "Possible bug, please report to the development team." - STR_VIEW_MOUSE_MENU_PATH "Drop &Path as text" // LMP: Right-Click Drag&Drop Menu - STR_VIEW_MOUSE_MENU_FILE "Drop &File as text" - STR_VIEW_MOUSE_MENU_OPEN "&Open File" - STR_VIEW_MOUSE_MENU_CANCEL "Cancel" - - // CEditWnd.cpp - STR_ERR_DLGEDITWND01 "CEditWnd::CreateAccelTbl()\nCould not create the accelerator table\nInsufficient system resources." - STR_ERR_DLGEDITWND02 "Interaction between editors has failed.\nWindows OS UIPI security may be different between the editors." - STR_ERR_DLGEDITWND03 "CEditWnd::Create()\nTimer could not start up.\nPossible insufficiency of system resources." - STR_ERR_DLGEDITWND04 "Rebar creation failed." - STR_ERR_DLGEDITWND05 "Failed to create the Tool Bar." - STR_EDITWND_MENU_NEL "End of line type (&NEL)" - STR_EDITWND_MENU_LS "End of line type (L&S)" - STR_EDITWND_MENU_PS "End of line type (&PS)" - - STR_ERR_DLGEDITWND13 "Character:\t\t%ls (%s)\n\nSJIS:\t\t%s\nJIS:\t\t%s\nEUC:\t\t%s\nLatin1:\t\t%s\nUTF-16:\t\t%s\nUTF-8:\t\t%s\nCESU-8:\t\t%s" - - STR_ERR_DLGEDITWND14 "Before using Print Preview please install a printer driver.\n" - - // const char* pszLabel[7] = { "", "99999 行 9999 列", "CRLF", "0000", "UTF-16", "REC", "上書" }; //Oct. 30, 2000 JEPRO 千万行も要らん - STR_ERR_DLGEDITWND19 "" - STR_ERR_DLGEDITWND20 "99999 L 9999 C" -// STR_ERR_DLGEDITWND20 "99999 行 9999 列" - STR_ERR_DLGEDITWND21 "CFLF" - STR_ERR_DLGEDITWND22 "0000" - STR_ERR_DLGEDITWND23 "UTF-16 BOM" - STR_ERR_DLGEDITWND24 "REC" - STR_ERR_DLGEDITWND25 "OVR" // Overwrite mode - STR_WRAP_WIDTH_FULL "Line Wrap Width: %d Col(Max)" - STR_WRAP_WIDTH_WINDOW "Line Wrap Width: %d Col(Window)" - STR_WRAP_WIDTH_FIXED "Line Wrap Width: %d Col(Fixed)" - - - // CEol.cpp - - // CESI.cpp - STR_ESI_CHARCODE_DETECT "--Charcode Detection-----------\r\n" - STR_ESI_RESULT_STATE "Status\r\n" - STR_ESI_NO_INFO "\tNo Information.\r\n" - STR_ESI_DETECTED "\tDetected.\r\n" - STR_ESI_NO_DETECTED "\tNot Detected.\r\n" - STR_ESI_DOC_TYPE "Document Type\r\n" - STR_ESI_DEFAULT_CHARCODE "Default Charcode\r\n" - STR_ESI_SAMPLE_LEN "Sample Data Length\r\n" - STR_ESI_SAMPLE_LEN_FORMAT "\t%d bytes\r\n" - STR_ESI_BYTES_AND_POINTS "Specific Bytes and Point\n" - STR_ESI_UTF16LE_B_AND_P "\t\tUTF16LE Specific Bytes %d\tPoint %d\r\n" - STR_ESI_UTF16BE_B_AND_P "\t\tUTF16BE Specific Bytes %d\tPoint %d\r\n" - STR_ESI_BOM "\t\tBOM Detection " - STR_ESI_BOM_UNKNOWN "Unknown\r\n" - STR_ESI_MBC_OTHER_UNICODE "\tMBC and Other UNICODE Family\r\n" - STR_ESI_OTHER_B_AND_P "\t\t%d.%s\tSpecific Bytes %d\tPoint %d\r\n" - STR_ESI_EUC_ZENKAKU "\t\tEUC Zenkaku Kana/EUC Zenkaku Kanji\t%6.3f\r\n" - STR_ESI_RESULT "Detection Result\r\n" - - // CFileExt.cpp - - // CFileLoad.cpp - - // CFileWrite.cpp - - // CFuncInfo.cpp - - // CFuncInfoArr.cpp - STR_ERR_DLGFUNCKEYWN1 "CFuncKeyWnd::Open()\nCouldn't start timer.\nPossibly insufficient system resources." - - // CFuncLookup.cpp - STR_ERR_DLGFUNCLKUP01 "External Macro" - STR_ERR_DLGFUNCLKUP02 "Custom Menu" - STR_ERR_DLGFUNCLKUP03 "Macro %d (Unregistered)" - STR_ERR_DLGFUNCLKUP19 "Plugin" - - // Related Commands Menu - STR_ERR_DLGFUNCLKUP04 "File related" - STR_ERR_DLGFUNCLKUP05 "Edit related" - STR_ERR_DLGFUNCLKUP06 "Cursor related" - STR_ERR_DLGFUNCLKUP07 "Selection related" - STR_ERR_DLGFUNCLKUP08 "Box Selection related" - STR_ERR_DLGFUNCLKUP09 "Clipboard related" - STR_ERR_DLGFUNCLKUP10 "Insert related" - STR_ERR_DLGFUNCLKUP11 "Replace related" - STR_ERR_DLGFUNCLKUP12 "Search related" - STR_ERR_DLGFUNCLKUP13 "Mode change related" - STR_ERR_DLGFUNCLKUP14 "Settings related" - STR_ERR_DLGFUNCLKUP15 "Macro related" - STR_ERR_DLGFUNCLKUP16 "Window related" - STR_ERR_DLGFUNCLKUP17 "Support related" - STR_ERR_DLGFUNCLKUP18 "Misc Others" - - // charchode.cpp - - // CHokanMgr.cpp - - // CHtmlHelp.cpp - - // CImageListMgr.cpp - - // CKeyBind.cpp - STR_ERR_DLGKEYBIND1 "Key\tFunctionalName\tFunctionName\tFunctionalNr\tCan_record_as_key_macro?" // Header for Copy buffer when doing Help->Copy Key binding list - STR_ERR_DLGKEYBIND2 "---Undefined Name-----" - - // CKeyMacroMgr.cpp - STR_ERR_DLGKEYMACMGR1 "//Keyboard macro file\r\n" - STR_ERR_DLGKEYMACMGR2 "Error reading in Macro" - STR_ERR_DLGKEYMACMGR3 "Line %d: Column %d: Too many parameters\n" - STR_ERR_DLGKEYMACMGR4 "Line %d: Column %d\r\nFunction %ls parameter %d can not be a string." - STR_ERR_DLGKEYMACMGR5 "Line %d:\r\nFunction %ls parameter %d does not end with %lc." - STR_ERR_DLGKEYMACMGR6 "Line %d: Column %d\r\n Function %ls parameter %d can not be a numeral." - STR_ERR_DLGKEYMACMGR7 "Line %d: Column %d: Syntax Error\n" - STR_ERR_DLGKEYMACMGR8 "Line %d: %ls function does not exist.\n" - - // CKeyWordSetMgr.cpp - - // CLayout.cpp - - // CLayoutMgr.cpp - - // CLayoutMgr.cpp - - // CLayoutMgr_New.cpp - - // CLayoutMgr_New2.cpp - - // CLineComment.cpp - - // CMacro.cpp - STR_ERR_DLGMACRO01 "CMacro::GetFuncInfoByID() hit a bug, please report it\r\n" - STR_ERR_DLGMACRO02 "Macro Execution Error" - STR_ERR_DLGMACRO03 "End of line auto-insert char code hasn't been defined." // Fixme: what code? - STR_ERR_DLGMACRO03_1 "Line Break Code is not defined." - STR_ERR_DLGMACRO04 "Parameter(string)is not defined." - STR_ERR_DLGMACRO05 "Jump To Line Numer is not defined." - STR_ERR_DLGMACRO06 "Bookmarking pattern has not been defined." // Fixme: pattern? - STR_ERR_DLGMACRO07 "Parameter(string)is not defined." - STR_ERR_DLGMACRO08 "File name is not defined." - STR_ERR_DLGMACRO09 "Source replacement string is unset." // Fixme - clear enough? - STR_ERR_DLGMACRO10 "Destination replacement string is unset." - STR_ERR_DLGMACRO11 "GREP pattern is not defined." - STR_ERR_DLGMACRO12 "File type is not defined." - STR_ERR_DLGMACRO13 "Destination search folder is unset." - STR_ERR_DLGMACRO14 "Input file name is unset." - STR_ERR_DLGMACRO15 "Filename for saving not set." - STR_ERR_DLGMACRO16 "Number is not defined." - STR_ERR_DLGMACRO17 "Grep Replace To is not defined." - - // CMacroFactory.cpp - - // CMacroManagerBase.cpp - - // CMarkMgr.cpp - - // CMemory.cpp - STR_ERR_DLGMEM1 "CMemory::AllocBuffer(nNewDataLen==%d)\nMemory reservation error\n" - - // CMenuDrawer.cpp - - // CMigemo.cpp - - // CMRU.cpp - - // CMRUFolder.cpp - - // CNormalProcess.cpp - STR_ERR_DLGNRMPROC1 "CreateMutex() failed. \nExiting app." - STR_ERR_DLGNRMPROC2 "Editor or System is busy.\nPlease wait for a while..." - - // COpe.cpp - - // COpeBlk.cpp - - // CPPA.cpp - STR_ERR_DLGPPA1 "Whilst executing PPA its impossible to call another PPA macro." - STR_ERR_DLGPPA2 "Error executing function\n%hs" - STR_ERR_DLGPPA3 "Unknown type of error whilst executing a function (Bug?)\nFunc_ID=%d" - STR_ERR_DLGPPA4 "Detailed Unknown Error" - STR_ERR_DLGPPA5 "Undefined Error\nError_CD=%d\n%s" - STR_ERR_DLGPPA6 "Error report is not correct" - STR_ERR_DLGPPA7 "PPA Execution Error" - - // CPPAMacroMgr.cpp - - // CPrint.cpp - STR_ERR_CPRINT01 "OpenPrinter() failed.\nPrinter Device Name=[%s]" - STR_ERR_CPRINT02 "StartDoc() error,\nPrinter Device Name=[%s]" - STR_ERR_CPRINT03 "unknown" - - - // CPrintPreview.cpp - STR_ERR_DLGPRNPRVW1 "Landscape" - STR_ERR_DLGPRNPRVW2 "Portrait" // next to paper type - STR_ERR_DLGPRNPRVW3 "The printer %s, \n cant use the selected %s paper.\n Automatically choosing to use %s paper." - STR_ERR_DLGPRNPRVW3_1 "Print Page Setting Error:There is no printable area" - STR_ERR_DLGPRNPRVW4 "Please choose the page number to display (1 - %d)" // Print dialog ".." button - STR_ERR_DLGPRNPRVW5 "Preview Page Settings" // Print dialog ".." button - STR_ERR_DLGPRNPRVW6 "%d/%dpg" - STR_ERR_DLGPRNPRVW7 "The page is blank, there is nothing to print." - - // CProcess.cpp - STR_ERR_DLGPROCESS1 "Can not run as there is already a different version of the editor open." - - // CProcessFactory.cpp - STR_ERR_DLGPROCFACT1 "This application expects to run on \nbetter than Windows95, or WindowsNT4.0 OS.\nApplication will now close." - STR_ERR_DLGPROCFACT2 "Could not determine OS Version.\nExiting Application." - STR_ERR_DLGPROCFACT3 "'%s'\nProcess startup failed.\n%s" - STR_ERR_DLGPROCFACT4 "'%ls'\nControl Process startup failed." - STR_ERR_DLGPROCFACT5 "Editor or System is busy.\nPlease wait a while..." - - // CProfile.cpp - - // CPropComBackup.cpp - STR_PROPCOMBK_SEL_FOLDER "Please choose the file to be created for backup" - STR_PROPCOMBK_DUSTBOX "(Recycle Folder)" - - // CPropComCustmenu.cpp - STR_PROPCOMCUSTMENU_SEP " --------------------------" - STR_PROPCOMCUSTMENU_AC1 "Menu Item Access Settings" - STR_PROPCOMCUSTMENU_AC2 "Please press a key." - // Has a HEADER #define, should we also fix this? - - // CPropComEdit.cpp - STR_PROPEDIT_SELECT_DIR "Select file dialog path" - - // CPropComFile.cpp - STR_PROPCOMFNM_LIST1 "Before Replacement" // ComProp::Filename Display table headings - STR_PROPCOMFNM_LIST2 "After Replacement" - STR_PROPCOMFNM_ERR_REG "Cannot register any more." - - // CPropComFormat.cpp - // Has static date-time string - - // CPropComGeneral.cpp - STR_PROPCOMGEN_FILE1 "Deleting recent file history,\nOK?\n" - STR_PROPCOMGEN_FILE2 "Deleted recent file history.\n" - STR_PROPCOMGEN_DIR1 "Deleting recent folder history,\nOK?\n" - STR_PROPCOMGEN_DIR2 "Deleted recent folder history\n" - - // CPropComGrep.cpp - STR_PROPCOMGREP_DLL "Regex are disabled" - STR_TAGJUMP_0 "Don't search next file" - STR_TAGJUMP_1 "If hit, don't search next file" - STR_TAGJUMP_2 "If exact match, don't search next file" - STR_TAGJUMP_3 "Search next file." - - // CPropComHelper.cpp - STR_PROPCOMHELP_MIGEMODIR "Please Select the Folder" // Common Property Support::Miegmo Dictionary - - // CPropComKeybind.cpp - // STR_KEYDATA_HEAD... - STR_PROPCOMKEYBIND_UNASSIGN "Unassigned" // Is key assigned? (xxx or Unassigned) - - // CPropComKeyword.cpp - STR_PROPCOMKEYWORD_ERR_LEN "Maximum Keyword length is %d bytes." - STR_PROPCOMKEYWORD_SETMAX "Maximum registration of %d sets is possible.\n" - STR_PROPCOMKEYWORD_SETNAME1 "Added Keyword Set" - STR_PROPCOMKEYWORD_SETNAME2 "Please input the Set's name" - STR_PROPCOMKEYWORD_SETDEL "Delete the set [%ls]\nOK?\nThe set to be deleted is one of the below types\nDeleted set will become invalid.\n\n%s" // FIX - STR_PROPCOMKEYWORD_RENAME1 "Name for Set has been changed" - STR_PROPCOMKEYWORD_RENAME2 "Please input Set's name" - STR_PROPCOMKEYWORD_KEYMAX "Reached the maximum number of registerable keywords.\n" - STR_PROPCOMKEYWORD_KEYADD1 "Added Keyword" - STR_PROPCOMKEYWORD_KEYADD2 "Please input the Keyword" - STR_PROPCOMKEYWORD_KEYEDIT1 "Keyword Editing" // Dialog Title - STR_PROPCOMKEYWORD_KEYEDIT2 "Please edit the keyword" // Dialog contents - STR_PROPCOMKEYWORD_DEL "Delete undisplayable Keywords from the current input ?" - STR_PROPCOMKEYWORD_INFO "(Max %d chr, keywords %d, space %d )" - - // CPropComMacro.cpp - STR_PROPCOMMACR_LIST1 "Number" - STR_PROPCOMMACR_LIST2 "Macro Name" - STR_PROPCOMMACR_LIST3 "File Name" - STR_PROPCOMMACR_LIST4 "Read at Exec time" - STR_PROPCOMMACR_LIST5 "Automatic" - STR_PROPCOMMACR_SEL_DIR "Select Macro Directory" - - // CPropComMainMenu.cpp - STR_SPECIAL_FUNC "Special Function" - STR_PROPCOMMAINMENU_EDIT "Please edit" - STR_PROPCOMMAINMENU_SEP "--------------------" - STR_PROPCOMMAINMENU_ACCKEY1 "Access key settings of menu item" - STR_PROPCOMMAINMENU_ACCKEY2 "Please input key." - STR_PROPCOMMAINMENU_CLEAR "Are you sure you want to erase menu settings?" - STR_PROPCOMMAINMENU_INIT "Are you sure you want to load default menu settings?" - STR_PROPCOMMAINMENU_DEL "Are you sure you want to delete selected item?" - STR_PROPCOMMAINMENU_OK "No problems detected." - STR_PROPCOMMAINMENU_ERR1 "Failed to get menu setting" - STR_PROPCOMMAINMENU_ERR2 "Not include [Common Settings]\n" - STR_PROPCOMMAINMENU_ERR3 "Too many top-level items\n" - STR_PROPCOMMAINMENU_ERR4 "Too many items\n" - STR_PROPCOMMAINMENU_ERR5 "There is access key duplicate.\n" - STR_PROPCOMMAINMENU_ERR6 "There is access key not set.\n" - - // CPropCommon.cpp - STR_PROPCOMMON "Common Setting" - STR_PROPCOMMON_GENERAL "General" - STR_PROPCOMMON_WINDOW "Window" - STR_PROPCOMMON_TABS "Tabs" - STR_PROPCOMMON_EDITING "Editing" - STR_PROPCOMMON_FILE "File" - STR_PROPCOMMON_BACKUP "Backup" - STR_PROPCOMMON_FORMAT "Format" - STR_PROPCOMMON_SEARCH "Search" - STR_PROPCOMMON_KEYS "Function Key" - STR_PROPCOMMON_CUSTMENU "Custom Menu" - STR_PROPCOMMON_TOOLBAR "Tool Bar" - STR_PROPCOMMON_KEYWORD "Keyword Highlight" - STR_PROPCOMMON_SUPPORT "Support" - STR_PROPCOMMON_MACRO "Macro" - STR_PROPCOMMON_FILENAME "Filename Display" - STR_PROPCOMMON_PLUGIN "Plugin" - STR_PROPCOMMON_MAINMENU "Main Menu" - STR_PROPCOMMON_STATBAR "Status Bar" - - // General Settings::File Tab - STR_SCROLL_WITH_NO_KEY "Not used" - STR_SCROLL_WITH_MID_BTN "Middle Button" - STR_SCROLL_WITH_SIDE_1_BTN "Side Button 1" - STR_SCROLL_WITH_SIDE_2_BTN "Side Button 2" - STR_SCROLL_WITH_CTRL_KEY "Control Key" - STR_SCROLL_WITH_SHIFT_KEY "Shift Key" - - STR_ERR_DLGPROPCOMMON24 "CPropCommon::DoPropertySheet() failed.\npsh.nStartPage=[%d]\n::PropertySheet() failed\n\n%s\n" - - // CPropCOmPlugin.cpp - STR_PROPCOMPLG_ERR1 "Do not loaded plugin this window or Folder is different for\nYou can't change the settings." - STR_PROPCOMPLG_ERR2 "Don't open ReadMe File" - STR_PROPCOMPLG_ERR3 "ReadMe file not found" - STR_PROPCOMPLG_STATE1 "Add" - STR_PROPCOMPLG_STATE2 "Update" - STR_PROPCOMPLG_STATE3 "Stopped" - STR_PROPCOMPLG_STATE4 "Loaded" - STR_PROPCOMPLG_STATE5 "Delete" - STR_PROPCOMPLG_STATE6 "Undefined" - STR_PROPCOMPLG_LOAD "Loaded" - STR_PROPCOMPLG_LIST1 "No" - STR_PROPCOMPLG_LIST2 "Plugin name" - STR_PROPCOMPLG_LIST3 "Stat" - STR_PROPCOMPLG_LIST4 "Load" - STR_PROPCOMPLG_LIST5 "Folder" - STR_PROPCOMPLG_DELETE "Are you sure you want to remove %ls ?" - - // CPropComTab.cpp - STR_PROPCOMTAB_DISP_NO "None" - STR_PROPCOMTAB_DISP_ALLWAYS "Always" - STR_PROPCOMTAB_DISP_AUTO "Auto" - STR_PROPCOMTAB_TAB_POS_TOP "Top" - STR_PROPCOMTAB_TAB_POS_BOTTOM "Bottom" - STR_PROPCOMTAB_TAB_POS_LEFT "Left" - STR_PROPCOMTAB_TAB_POS_RIGHT "Right" - - - // CPropComToolbar.cpp - STR_PROPCOMTOOL_ERR01 "Toolbar Dialog: Problem inserting item. (%d:%d)" - STR_PROPCOMTOOL_ERR02 "Toolbar Dialog: INS: Problem setting value :%d" - STR_PROPCOMTOOL_ERR03 "Toolbar Dialog: Problem adding item. (%d:%d)" - STR_PROPCOMTOOL_ERR04 "Toolbar Dialog: ADD: Problem setting value :%d" - STR_PROPCOMTOOL_ERR05 "Toolbar Dialog: Problem adding item :%d" - STR_PROPCOMTOOL_ITEM1 "---------------------" - STR_PROPCOMTOOL_ITEM2 "-- Tool Bar Break --" - STR_PROPCOMTOOL_ITEM3 "----- disabled -----" - - // CPropComWin.cpp - - // CPropTypes.cpp - STR_OUTLINE_CPP "C/C++" - STR_OUTLINE_PLSQL "PL/SQL" - STR_OUTLINE_JAVA "Java" - STR_OUTLINE_COBOL "COBOL" - STR_OUTLINE_PERL "Perl" - STR_OUTLINE_ASM "Assembler" - STR_OUTLINE_VB "Visual Basic" - STR_OUTLINE_PYTHON "Python" - STR_OUTLINE_ERLANG "Erlang" - STR_OUTLINE_WZ "WZ Hierarchy Text" - STR_OUTLINE_HTML "HTML" - STR_OUTLINE_TEX "TeX" - STR_OUTLINE_TEXT "Text" // <-- FIXME CHECK was Nashi - STR_TAB_SYMBOL_CHARA "Character" - STR_TAB_SYMBOL_SHORT_ARROW "Short Arrow" - STR_TAB_SYMBOL_LONG_ARROW "Long Arrow" - STR_SMART_INDENT_NONE "None" // smart indent - STR_SMART_INDENT_C_CPP "C/C++" - STR_WRAP_INDENT_NONE "None" // ident - STR_WRAP_INDENT_TX2X "tx2x" - STR_WRAP_INDENT_BOL "prev. line start" - STR_WRAP_METHOD_NO_WRAP "Dont LineWrap" // wrap method - STR_WRAP_METHOD_SPEC_WIDTH "Wrap at set col." - STR_WRAP_METHOD_WIN_WIDTH "Wrap at window edge" - - // File Type Settings Tab names - STR_PROPTYPE "File Type Setting" - STR_PROPTYPE_SCREEN "Screen" // Property Sheet - STR_PROPTYPE_COLOR "Color" - STR_PROPTYPE_SUPPORT "Support" - STR_PROPTYPE_REGEX_KEYWORD "RegEx Keyword" - STR_PROPTYPE_KEYWORD_HELP "Keyword Help" - STR_PROPTYPE_WINDOW "Window" - STR_PROPTYPE_ERR "CPropTypes::DoPropertySheet() failed.\npsh.nStartPage=[%d]\n::PropertySheet() failed.\n\n%s\n" - - // CPropTypesScreen.cpp - STR_TSV_MODE_NONE "Normal" - STR_TSV_MODE_TSV "TSV" - STR_TSV_MODE_CSV "CSV" - - // CPropTypesColor.cpp - STR_STRINGESC_CPP "C/C++ \\"" " - STR_STRINGESC_PLSQL "PL/SQL """"" - STR_STRINGESC_HTML "HTML/XML =""""" - STR_STRINGESC_CSHARP "C# @""""" - STR_STRINGESC_PYTHON "Python """"""" - - // CPropTypesKeyHelp.cpp - STR_PROPTYPKEYHELP_DIC " Dict Filename" - STR_PROPTYPKEYHELP_INFO "Description" - STR_PROPTYPKEYHELP_PATH "Path" - STR_PROPTYPKEYHELP_LINE1 "<>" - STR_PROPTYPKEYHELP_DICPATH "Keyword dict file path" - STR_PROPTYPKEYHELP_ERR_REG1 "Cannot register any more dictionaries." - STR_PROPTYPKEYHELP_SELECT "Select dict to update from the list" - STR_PROPTYPKEYHELP_ERR_REG2 "You have already registered this dictionary." - STR_PROPTYPKEYHELP_ERR_OPEN "Could not open the file.\n\n%s" - - // CPropTypesRegex.cpp - STR_PROPTYPEREGEX_LIST1 "Keyword" - STR_PROPTYPEREGEX_LIST2 "Color Index" // LMP - not sure 色指定 - STR_PROPTYPEREGEX_NOUSE "Cannot use Regular Expression" - STR_PROPTYPEREGEX_NOTFOUND "RegEx library cannot be found\n\nRegular Expression functionality cant be used, do you want to enable it anyway?" - STR_PROPTYPEREGEX_NOREG "Cannot register any further keywords." - STR_PROPTYPEREGEX_ALREADY "The same keyword is already registered." - STR_PROPTYPEREGEX_KAKOMI "RegEx Keyword should be enclosed in / and /k \nWhen the keyword has a / use m# and #k to enclose it." - STR_PROPTYPEREGEX_INVALID "Formatted incorrectly or RegEx library cant be found\n\nRegister anyway?" - STR_PROPTYPEREGEX_FULL "Cannot register any further keywords.\nkeyword area is full." - STR_PROPTYPEREGEX_NOSEL "No selected Keyword." - - STR_KEYHELP_RMENU_NONE "Hide" - STR_KEYHELP_RMENU_TOP "Show Top" - STR_KEYHELP_RMENU_BOTTOM "Show Bottom" - - // CPropTypesWindow.cpp - STR_IME_STATE_DEF "Default" // ime state - STR_IME_STATE_FULL "Full Height" - STR_IME_STATE_FULLHIRA "Full Height Hiragana" - STR_IME_STATE_FULLKATA "Full Height Katakana" - STR_IME_STATE_NO "No Conversion" - STR_IME_SWITCH_DONTSET "Don't Set" // ime switch - STR_IME_SWITCH_ON "Turn On" - STR_IME_SWITCH_OFF "Turn Off" - STR_IMAGE_POS1 "Left top" - STR_IMAGE_POS2 "Right top" - STR_IMAGE_POS3 "Left bottom" - STR_IMAGE_POS4 "Right bottom" - STR_IMAGE_POS5 "Center" - STR_IMAGE_POS6 "Center top" - STR_IMAGE_POS7 "Center bottom" - STR_IMAGE_POS8 "Center left" - STR_IMAGE_POS9 "Center right" - - // CDlgTypeAscertain.cpp - STR_DLGTYPEASC_IMPORT "--Without change import--" - - // CDlgTypeList.cpp - STR_DLGTYPELIST_ERR1 "Failed to set association settings.\n" - STR_DLGTYPELIST_ERR2 "Failed to reset association settings.\n" - STR_DLGTYPELIST_INIT1 "Are you sure you want to initialize %s ?" - STR_DLGTYPELIST_SETNAME "Set %d" - STR_DLGTYPELIST_INIT2 "%s has been initialized" - STR_DLGTYPELIST_DEL "Are you sure you want to remove %s ?" - STR_DLGTYPELIST_ACC "Are you sure you want to change Windows association settings?\nThis may affects other apps that use same settings." - - // CImpExpManager.cpp - STR_IMPEXP_ERR_FILEOPEN "Could not open the file.\n\n" - STR_IMPEXP_ERR_EXPORT "Was not able to export\n\n" - STR_IMPEXP_OK_EXPORT "Exported to the file\n\n" - STR_IMPEXP_OK_IMPORT "Imported to the file.\n\n" - STR_IMPEXP_ERR_COLOR_OLD "Is different format color settings file. Not support old version format.\n" - STR_IMPEXP_ERR_TYPE "Invalid format.\nStop import." - STR_IMPEXP_VER "Export %s(%s/%d) Different version.\n\nAre you sure you want to import?" - STR_IMPEXP_REGEX1 "keyword truncated because the number of keywords has reached the upper limit." - STR_IMPEXP_REGEX2 "keyword truncated because keyword are is full." - STR_IMPEXP_REGEX3 "Ignore invalid keyword." - STR_IMPEXP_REGEX4 "keyword truncated because too long." - STR_IMPEXP_DIC_NOTFOUND "" - STR_IMPEXP_DIC_LENGTH "Dictionary file description should be a maximum of %d characters.\n" - STR_IMPEXP_DIC_RECORD "A part of the data couldn't be read\nIncorrect line: %d" - STR_IMPEXP_KEY_FORMAT "Key bindings file is the wrong format.\n\n" - STR_IMPEXP_CUSTMENU_FORMAT "Custom Menu setting file's format is wrong.\n\n" - STR_IMPEXP_KEYWORD "Due to reaching the upper limit, several keywords could not be registered." - STR_IMPEXP_MEINMENU "Is different format main menu setting file\n\n" - - // CRecent.cpp - - // CRegexKeyword.cpp - - // CRunningTimer.cpp - - // CShareData.cpp - STR_ERR_CSHAREDATA01 "CreateFileMapping() failed." - STR_ERR_CSHAREDATA02 "Unexpected error" - - // Common Prop::Tab/Title bar - STR_ERR_CSHAREDATA10 "${w?【Grep】$h$:【Output】$:$f$}${U?(Changed)$}${R?(Read Only)$:(Write Protected)$}${M?【Recording Macro】$}" - STR_CUSTMENU_RIGHT_CLICK "Right Click Menu" - STR_CUSTMENU_CUSTOM "Menu%d" - STR_CUSTMENU_TAB "Tab Menu" - STR_ERR_CSHAREDATA14 "1234567890(([[「『【■□▲△▼▽◆◇○◎●§・※☆★第①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ一二三四五六七八九十壱弐参伍" - STR_ERR_CSHAREDATA15 "yyyy'Y'M'M'd'D('dddd')'" - STR_ERR_CSHAREDATA16 "tthh'H'mm'M'ss'S'" - STR_ERR_CSHAREDATA17 "${w?$h$:Output$:${I?$f$:$N$}$}${U?(Changed)$} - sakura $V ${R?(Read Only)$:(Write Protected)$}${M? 【Recording Macro】$}" - STR_ERR_CSHAREDATA18 "${w?$h$:Output$:$f$}${U?(Changed)$} - sakura $V ${R?(Read Only)$:(Write Protected)$}${M? 【Recording Macro】$}" - STR_ERR_CSHAREDATA19 "Attempting to close multiple editor windows, sure you want to do this?" // Displayed if you try to close edit with many open windows - STR_ERR_CSHAREDATA20 "%s\n\n\nIn the case you want to re-open a file with a different encoding\nsChoose「Re-Open with Encoding」from the file menu please.\n\nCurrent Character Encoding set=[%s]\nNew Character Encoding=[%s]" // See Resource F_FILE_REOPEN_SUBMENU - STR_ERR_CSHAREDATA21 "%s\n\nUnclear character encoding found during opening multiple documents.\n\nCurrent Char Encoding=%d [%s]\nNew Char Encoding=%d [%s]" - STR_ERR_CSHAREDATA22 "unknown" // relates to above two [%s] - - // Key settings dialog box ( loop so must be N items long in a row ) - STR_KEY_BIND_DBL_CLICK "Double-Click" - STR_KEY_BIND_R_CLICK "Right-Click" - STR_KEY_BIND_MID_CLICK "Middle-Click" - STR_KEY_BIND_LSD_CLICK "Left-Side-Click" - STR_KEY_BIND_RSD_CLICK "Right-Side-Click" - STR_KEY_BIND_TRI_CLICK "Triple-Click" - STR_KEY_BIND_QUA_CLICK "Quadruple-Click" - STR_KEY_BIND_WHEEL_UP "Wheel-Up" - STR_KEY_BIND_WHEEL_DOWN "Wheel-Down" - STR_KEY_BIND_WHEEL_LEFT "Wheel-Left" - STR_KEY_BIND_WHEEL_RIGHT "Wheel-Right" - STR_KEY_BIND_HAT_ENG_QT "^(EN KBD ')" - STR_KEY_BIND_AT_ENG_BQ "@(EN KBD `)" - STR_KEY_BIND_APLI "Application Key" - - // Color Names in the Settings Color Box - STR_COLOR_TEXT "Text" - STR_COLOR_RULER "Ruler" - STR_COLOR_CURSOR "Cursor" - STR_COLOR_CURSOR_IMEON "Cursor(IME ON)" - STR_COLOR_CURSOR_LINE_BG "CursorLine Background" - STR_COLOR_CURSOR_LINE "CursorLine Underline" - STR_COLOR_CURSOR_COLUMN "Cursor pos VertLine" - STR_COLOR_NOTE_LINE "Note Line" - STR_COLOR_LINE_NO "Line No." - STR_COLOR_LINE_NO_CHANGE "Line No.(edited)" - STR_COLOR_EVEN_LINE_BG "Even Line Background" - STR_COLOR_TAB "TAB Mark" - STR_COLOR_HALF_SPACE "ASCII Space" - STR_COLOR_FULL_SPACE "Japanese Space" - STR_COLOR_CTRL_CODE "Control Code" - STR_COLOR_CR "Newline Mark" - STR_COLOR_WRAP_MARK "Wrapping Point" - STR_COLOR_VERT_LINE "Specific pos VertLine" - STR_COLOR_EOF "EOF Mark" - STR_COLOR_NUMBER "HalfHeight Numerals" - STR_COLOR_BRACKET "Parenthesis highlight" - STR_COLOR_SELECTED_AREA "Selected Area" - STR_COLOR_SEARCH_WORD1 "Search string" - STR_COLOR_SEARCH_WORD2 "Search string 2" - STR_COLOR_SEARCH_WORD3 "Search string 3" - STR_COLOR_SEARCH_WORD4 "Search string 4" - STR_COLOR_SEARCH_WORD5 "Search string 5" - STR_COLOR_COMMENT "Comment" - STR_COLOR_SINGLE_QUOTE "Single Quote String" - STR_COLOR_DOUBLE_QUOTE "Double Quote String" - STR_COLOR_HERE_DOCUMENT "Here Document" - STR_COLOR_URL "URL" - - STR_COLOR_KEYWORD1 "Keyword Highlight 1" - STR_COLOR_KEYWORD2 "Keyword Highlight 2" - STR_COLOR_KEYWORD3 "Keyword Highlight 3" - STR_COLOR_KEYWORD4 "Keyword Highlight 4" - STR_COLOR_KEYWORD5 "Keyword Highlight 5" - STR_COLOR_KEYWORD6 "Keyword Highlight 6" - STR_COLOR_KEYWORD7 "Keyword Highlight 7" - STR_COLOR_KEYWORD8 "Keyword Highlight 8" - STR_COLOR_KEYWORD9 "Keyword Highlight 9" - STR_COLOR_KEYWORD10 "Keyword Highlight 10" - STR_COLOR_REGEX_KEYWORD1 "RegEx Keyword 1" - STR_COLOR_REGEX_KEYWORD2 "RegEx Keyword 2" - STR_COLOR_REGEX_KEYWORD3 "RegEx Keyword 3" - STR_COLOR_REGEX_KEYWORD4 "RegEx Keyword 4" - STR_COLOR_REGEX_KEYWORD5 "RegEx Keyword 5" - STR_COLOR_REGEX_KEYWORD6 "RegEx Keyword 6" - STR_COLOR_REGEX_KEYWORD7 "RegEx Keyword 7" - STR_COLOR_REGEX_KEYWORD8 "RegEx Keyword 8" - STR_COLOR_REGEX_KEYWORD9 "RegEx Keyword 9" - STR_COLOR_REGEX_KEYWORD10 "RegEx Keyword 10" - STR_COLOR_DIFF_ADD "DIFF area (added)" - STR_COLOR_DIFF_CNG "DIFF area (changed)" - STR_COLOR_DIFF_DEL "DIFF area (deleted)" - STR_COLOR_BOOKMARK "Bookmark" - STR_COLOR_PAGEVIEW "View Range(Minimap)" - - // ... could be many places left in this file I think, but couldn't decide if they should STAY as JPZ or not eg |* - - // CShareData_new.cpp - // CSMacroMgr.cpp - // CSortedTagJumpList.cpp - // CSplitBoxWnd.cpp - - // CSplitterWnd.cpp - STR_ERR_CSPLITTER01 "SplitterWnd class registration failed." - - // CTabWnd.cpp - STR_TABWND_LR_INFO "Left-Click: Tab Name List\nRight-Click: Path List" - STR_TABWND_CLOSETAB "Close Tab" - STR_TABWND_SHOWALL "Show &All" // Menus - STR_TABWND_SHOWTABNAME "S&wap to tab names list" // Windows Menu -> Show Windows - STR_TABWND_SHOWPATHNAME "S&wap to path names list" // Windows Menu -> Show Windows - - // CTipWnd.cpp - - // CUxTheme.cpp - - // CWaitCursor.cpp - - // CWnd.cpp - - // CWSH.cpp - STR_ERR_CWSH01 "Could not find the nominated script-engine" - STR_ERR_CWSH02 "Couldn't create names script engine" // ?3 - STR_ERR_CWSH03 "Couldn't register site" // ? - STR_ERR_CWSH04 "Couldn't acquire parser" // ? - STR_ERR_CWSH05 "Unable to initialize" - STR_ERR_CWSH06 "Unable to pass object" - STR_ERR_CWSH07 "Status update error" - STR_ERR_CWSH08 "Failed to execute" - STR_ERR_CWSH09 "Aborted execute macro." - - - // Debug.cpp - // CONAINTS STRINGS... only for debug, so ignoring. - - // etc_uty.cpp - // CONTAINS a few STRINGS... - STR_ERR_ETCUTY01 "System " - STR_ERR_ETCUTY02 "User " - STR_ERR_ETCUTY03 "%s resources are extremely low\n\ -Continued execution of %s will likely result in failure.\n\ -Suspending execution of any further new %s.\n\ -\n\ -System Resource\tRemaining %d%%\n\ -User Resource\tRemaining %d%%\n\ -GDI Resource\tRemaining %d%%\n\n" - STR_SHELL_HHCTRL "HHCTRL.OCX could not be found\r\nHTML help requires HHCTRL.OCX.\r\n" - STR_SHELL_INFO "Information" - STR_SHELL_MENU_OPEN "&Open ..." - STR_SHELL_MENU_IMPEXP "Import/Export Location &Reset " - STR_SHELL_IMPEXPDIR "Reset Import/Export default folder path to\nSettings-Folder path." - STR_SHELL_INIFOLDER "Settings Folder(&/) >>" - - // Funccode.cpp - // CONTAINS one array with Japanese, ppszFuncKind. - // - CPropCom* -- in code that is no longer used. - // - CFuncLookup.cpp -- used in func CFuncLookup::Category2Name - // - CEditView_Command.cpp -- Command_MENU_ALLFUNC() uses CFuncLookup::Category2Name. - - // global.cpp - // GSTR_APPNAME (for debug) contains the words "sakura(debug version)" - // gm_pszCodeComboNameArr contains the string "Automatic" as its first entry. - // - CDlgGrep.cpp - // - CDlgOpenFile.cpp - STR_ERR_GLOBAL01 "Auto" - - - // my_icmp.cpp - - // MY_SP.C - - // StdAfx.cpp - - // WinMain.cpp - - // CCdoeChecker.cpp - STR_CODECHECKER_EOL_UNIFY "CR Code is mixed.\r\n You want to unify the CR code (%s)?" - STR_CODECHECKER_CONFORM_LOSESOME "Saving encoding %s...\r\nChar info is lost by the encoding conversion.\r\nDo you continue saving?\nFirst point %d Line %s Char[%ls]%s\nCancel=Move to lost point" - STR_CODECHECKER_LOSESOME_SAVE "lose some char info by saving encoding conversion." - STR_CODECHECKER_LOSESOME_ROAD "lose some char info by loading encoding conversion." - STR_CONVERT_ERR "Error on Convert." - - STR_DLGABOUT_APPNAME "Sakura Editor" - - STR_DLGEXEC_SELECT_CURDIR "Select current directory." - - STR_MENU_UNKOWN "%s unknown" - STR_MENU_GREP "%s [Grep]""%s%s""" - STR_MENU_OUTPUT "%s output" - - STR_PRINT_WAITING "Waiting for end of printing processing..." - - // Convert Setting Values - STR_TAB_CAPTION_OUTPUT "[Grep]" - STR_TAB_CAPTION_GREP "[Output]" - STR_CAPTION_ACTIVE_OUTPUT "Output" - STR_CAPTION_ACTIVE_UPDATE "(Update)" - STR_CAPTION_ACTIVE_VIEW "(View mode)" - STR_CAPTION_ACTIVE_OVERWRITE "(Read only)" - STR_CAPTION_ACTIVE_KEYMACRO "[REC Key macro]" - STR_DATA_FORMAT "M'/'d'/'yyyy dddd" - STR_TIME_FORMAT "hh':'mm':'ss' 'tt" - STR_TRANSNAME_COMDESKTOP "Shared Desktop\\" - STR_TRANSNAME_COMDOC "Shared Documents\\" - STR_TRANSNAME_DESKTOP "Desktop\\" - STR_TRANSNAME_MYDOC "My Documents\\" - STR_TRANSNAME_IE "IE Cache\\" - STR_TRANSNAME_TEMP "TEMP\\" - STR_TRANSNAME_APPDATA "App Data\\" - STR_PRINT_SET_NAME "Print settings" - STR_TYPE_NAME_BASIS "Default" - STR_TYPE_NAME_RICHTEXT "Rich text" - STR_TYPE_NAME_TEXT "Text" - STR_TYPE_NAME_DOS "MS-DOS batch file" - STR_TYPE_NAME_ASM "Assembler" - STR_TYPE_NAME_INI "Ini file" - - // CBregexp.cpp -#ifdef _M_IA64 - STR_BREGONIG_LOAD "failed to load the bregonig.dll.\r\nRegex relies upon bregonig.dll(Uniocde/IA64 ver) to work.\r\nPlease refer to the help for assistance." -#elif defined(_M_AMD64) - STR_BREGONIG_LOAD "failed to load the bregonig.dll.\r\nRegex relies upon bregonig.dll(Uniocde/x64 ver) to work.\r\nPlease refer to the help for assistance." -#else - STR_BREGONIG_LOAD "failed to load the bregonig.dll.\r\nRegex relies upon bregonig.dll(Uniocde ver) to work.\r\nPlease refer to the help for assistance." -#endif -#ifdef _M_IA64 - STR_BREGONIG_INIT "failed to init the bregonig.dll.\r\nRegex relies upon bregonig.dll(Uniocde/IA64 ver) to work.\r\nPlease refer to the help for assistance." -#elif defined(_M_AMD64) - STR_BREGONIG_INIT "failed to init the bregonig.dll.\r\nRegex relies upon bregonig.dll(Uniocde/x64 ver) to work.\r\nPlease refer to the help for assistance." -#else - STR_BREGONIG_INIT "failed to init the bregonig.dll.\r\nRegex relies upon bregonig.dll(Uniocde ver) to work.\r\nPlease refer to the help for assistance." -#endif - STR_BREGONIG_ERROR "Failed to load bregonig.dll." - STR_BREGONIG_TITLE "Regular Expression Error" - - // CDllPlugin.cpp - STR_DLLPLG_TITLE "DLL Plugin" - STR_DLLPLG_INIT_ERR1 "Failed to read DLL\n%s\n%ls" - STR_DLLPLG_INIT_ERR2 "Failed to read DLL" - - // CPluginManager.cpp - STR_PLGMGR_FOLDER "Failed to create plugin folder" - STR_PLGMGR_CANCEL "Canceled" - STR_PLGMGR_NEWPLUGIN "Not found new plugin" - STR_PLGMGR_INSTALL "Are you sure you want to install %s?" - STR_PLGMGR_INSTALL_ERR "Failed to install %s\nReason: %ls" - STR_PLGMGR_ERR_ZIP "Can't use ZIP file." - STR_PLGMGR_ERR_FOLDER "Not found plugins folder" - STR_PLGMGR_ERR_CREATEDIR "Can't create plugins folder." - STR_PLGMGR_INST_ZIP_ACCESS "Can't access ZIP file [%s]" - STR_PLGMGR_INST_ZIP_DEF "Not found plugin Define file(plugin.def) in ZIP file [%s]" - STR_PLGMGR_INST_ZIP_ALREADY "Already install [%s]\nDo you overwrite?" - STR_PLGMGR_INST_ZIP_INST "Do you install ZIP plugin [%s] for [%s]?" - STR_PLGMGR_INST_ZIP_UNZIP "Error unzip ZIP plugin [%s]" - STR_PLGMGR_INST_ZIP_ERR "Can't install plugin [%s]\nReason: %ls" - STR_PLGMGR_INST_DEF "Not found plugin Define file(plugin.def)" - STR_PLGMGR_INST_ID "Not found Plugin.ID" - STR_PLGMGR_INST_RESERVE1 "Don't Use """ - STR_PLGMGR_INST_RESERVE2 """ in Plugin.ID" - STR_PLGMGR_INST_IDNUM "Plugin.ID of Head character not use numbers" - STR_PLGMGR_INST_NAME "The same plugin has been installed under a different name. Are you sure Overwrite?\n Yes -> Use new「%s」\n No→ Use installed「%ls」" - STR_PLGMGR_INST_USERCANCEL "User Cancel" - STR_PLGMGR_INST_MAX "Plugin can not register any more" - - STR_WSHPLUG_LOADMACRO "Failed to read the macro.\n\n%s" - STR_FILESAVE_CONVERT_ERROR "'%s'\nFailed File save\nConvert Error." - - STR_FILETREE_FROM_COMMON "Setting: Common" - STR_FILETREE_FROM_TYPE "Setting: Types" - STR_FILETREE_FROM_FILE "Setting: %s" - STR_FILETREE_CURDIR "" - STR_FILETREE_MAXCOUNT "最大数(%d)を超えたため切り捨てました" - STR_FILETREE_MENU_ROOT "&Ini Root" - STR_FILETREE_MENU_MYDOC "M&y Document" - STR_FILETREE_MENU_MYMUSIC "My &Music" - STR_FILETREE_MENU_MYVIDEO "My &Video" - STR_FILETREE_MENU_DESK "&Desktop" - STR_FILETREE_MENU_TEMP "&Temp" - STR_FILETREE_MENU_SAKURA "&Sakura" - STR_FILETREE_MENU_SAKURADATA "S&akura data" - STR_FILETREE_REPLACE_PATH_FROM "Please Input Replace 'From' Path" - STR_FILETREE_REPLACE_PATH_TO "Please Input Replace 'To' Path" - - STR_ERR_FILEPATH_TOO_LONG "'%s'\nCannot open the file.\nThe filepath is too long." - STR_FILEDIALOG_READONLY "Open as &read-only" - STR_FILEDIALOG_CODE "En&coding:" - STR_FILEDIALOG_EOL "CR Code(&E):" - STR_FILEDIALOG_MRU "Recent &File:" - STR_FILEDIALOG_OPENFOLDER "Recent Fol&der:" - -END - -STRINGTABLE DISCARDABLE -BEGIN - // Select Language - STR_SELLANG_NAME "English (United States)" // language name [Primary language (Sublanguage)] - STR_SELLANG_LANGID "0x0409" // language id (hexadecimal string) - // See following link: - // http://msdn.microsoft.com/en-us/library/dd318693.aspx -END - - -#ifndef SAKURA_LANG_RESOURCE - -///////////////////////////////////////////////////////////////////////////// -// -// Custom Resource -// - -IDR_MENU1 ID_RC_TYPE_INI "../resource/MainMenu.ini" - -#endif // ! SAKURA_LANG_RESOURCE - -#endif // English resources +STRINGTABLE +BEGIN + STR_SQLERR_EXEC_BUT_NOT_RUN + "Trying to execute in Oracle SQL*Plus\n\n\nOracle SQL*Plus is not running\n" + STR_SQLERR_ACTV_BUT_NOT_RUN + "Trying to activate Oracle SQL*Plus\n\n\nOracle SQL*Plus is not running\n" + STR_ERR_CMPERR "Comparison destination folder\n%s\nhas a %d byte line \ncan not perform comparison." + STR_ERR_MACROERR1 "Failed to open Macro.\n\n%s" + STR_CMDLINE_PARSECMD1 "%ls\r\nThe above file name is not correct. File name cannot contain the following characters; \\ / : * ? "" < > | ." + STR_ERR_CTRLMTX1 "CreateMutex() failed.\n Will exit app." + STR_ERR_CTRLMTX2 "CreateEvent() failed.\n Will exit app." + STR_ERR_CTRLMTX3 "Failed to create window\nCant start it up." + STR_ERR_CTRLMTX4 "SetEvent() failed.\nWeill exit app." + STR_NO_TITLE1 "(No Title)" + STR_NO_TITLE2 "No Title" +END + +STRINGTABLE +BEGIN + STR_SHELL_HHCTRL "HHCTRL.OCX could not be found\r\nHTML help requires HHCTRL.OCX.\r\n" + STR_SHELL_INFO "Information" + STR_SHELL_MENU_OPEN "&Open ..." + STR_SHELL_MENU_IMPEXP "Import/Export Location &Reset " + STR_SHELL_IMPEXPDIR "Reset Import/Export default folder path to\nSettings-Folder path." + STR_SHELL_INIFOLDER "Settings Folder(&/) >>" + STR_ERR_GLOBAL01 "Auto" + STR_PREVIEW_ONLY "(Available in Print Preview)" + STR_NOT_SAVED "(Not Saved)" + STR_PROPCOMMON_PLUGIN "Plugin" + STR_PROPCOMMON_MAINMENU "Main Menu" + STR_PROPCOMMON_STATBAR "Status Bar" + STR_SPECIAL_FUNC "Special Function" +END + +STRINGTABLE +BEGIN + STR_DLGCTRLCODE_CODE "Code" + STR_DLGCTRLCODE_SYMBOL "Symbol" + STR_DLGCTRLCODE_NAME "Name" + STR_DLGCTRLCODE_DESC "Desc." + STR_ERR_DLGCTL5 "Empty Code" + STR_ERR_DLGCTL6 "Start of Header" + STR_ERR_DLGCTL7 "Start of Text" + STR_ERR_DLGCTL8 "End of Text" + STR_ERR_DLGCTL9 "End of Transmission" + STR_ERR_DLGCTL10 "Enquiry" + STR_ERR_DLGCTL11 "Acknowledge" + STR_ERR_DLGCTL12 "Bell" + STR_ERR_DLGCTL13 "Backspace" + STR_ERR_DLGCTL14 "Tab" + STR_ERR_DLGCTL15 "Linefeed" + STR_ERR_DLGCTL16 "Vertical Tab" +END + +STRINGTABLE +BEGIN + STR_ERR_DLGCTL17 "Form feed" + STR_ERR_DLGCTL18 "Carriage Return" + STR_ERR_DLGCTL19 "Shift Out" + STR_ERR_DLGCTL20 "Shift In" + STR_ERR_DLGCTL21 "Data Link Escape" + STR_ERR_DLGCTL22 "Data Control 1" + STR_ERR_DLGCTL23 "Data Control 2" + STR_ERR_DLGCTL24 "Data Control 3" + STR_ERR_DLGCTL25 "Data Control 4" + STR_ERR_DLGCTL26 "Neg. Ack" + STR_ERR_DLGCTL27 "Synchronize" + STR_ERR_DLGCTL28 "End Transmission Block" + STR_ERR_DLGCTL29 "Cancel" + STR_ERR_DLGCTL30 "End Media" + STR_ERR_DLGCTL31 "Substitute" + STR_ERR_DLGCTL32 "Escape" +END + +STRINGTABLE +BEGIN + STR_ERR_DLGCTL33 "Form Select" + STR_ERR_DLGCTL34 "Group Select" + STR_ERR_DLGCTL35 "Record Select" + STR_ERR_DLGCTL36 "Unit Select" + STR_ERR_DLGCTL37 "Delete" + STR_DLGFAV_FILE "File" + STR_DLGFAV_FOLDER "Folder" + STR_DLGFAV_SEARCH "Search" + STR_DLGFAV_REPLACE "Replace" + STR_DLGFAV_GREP_FILE "GREP-File" + STR_DLGFAV_GREP_FOLDER "GREP-Folder" + STR_DLGFAV_EXT_COMMAND "Command" + STR_DLGFAV_HIDDEN "(hidden)" + STR_DLGFAV_FAVORITE "Favorite" + STR_DLGFAV_CONF_DEL_FAV "Delete recent %s history.\nOK?" + STR_DLGFAV_CONF_DEL_NOTFAV + "Delete recent %s history(except Favorites). \nOK?" +END + +STRINGTABLE +BEGIN + STR_DLGFAV_CONF_DEL_PATH "Delete recent %s history(Missing path) \nOK?" + STR_DLGFAV_DELIMITER ", " + STR_DLGFAV_FAV_REFRESH "History (%s) has been updated, will discard edit information and redisplay." + STR_DLGFAV_FF_EXCLUDE "Except File/Folder" + STR_DLGFAV_CURRENT_DIR "Current Dir" + STR_DLGFAV_ADD "Add" + STR_DLGFAV_ADD_PROMPT "Please enter a string to add." + STR_DLGFAV_EDIT "Edit" + STR_DLGFAV_EDIT_PROMPT "Please enter a string to edit." + STR_DLGFAV_MENU_EDIT "&Edit" + STR_DLGFAV_MENU_ADD "new add(&I)" + STR_DLGFAV_MENU_EXCLUDE "add for except &List" + STR_DLGFAV_MENU_DEL_ALL "&All delete" + STR_DLGFAV_MENU_DEL_NOTFAV "delete except &Favorites" + STR_DLGFAV_MENU_DEL_INVALID "delete missi&ng path" + STR_DLGFAV_MENU_DEL_SEL "&Delete selecting item" +END + +STRINGTABLE +BEGIN + STR_DLGFAV_LIST_LIMIT_OVER "It was not possible to add full except list." + STR_ERR_DLGUPQRY1 "Reloading will cause changes to be lost, is this OK?" + STR_ERR_DLGUPQRY2 "Reload?" + STR_DLGFIND1 "Please supply a search term first." + STR_DLGFNCLST_TITLE_CPP "C++ Method Tree" + STR_DLGFNCLST_TITLE_RULE "Rule File" + STR_DLGFNCLST_TITLE_WZ "WZ Hierarchy Text" + STR_DLGFNCLST_TITLE_TEXT "Text Topic Tree" + STR_DLGFNCLST_TITLE_JAVA "Java Method Tree" + STR_DLGFNCLST_TITLE_PYTHON "Python Method Tree" + STR_DLGFNCLST_TITLE_COBOL "COBOL Outline" + STR_DLGFNCLST_TITLE_VB "Visual Basic Outline" + STR_DLGFNCLST_TITLE_C "C Function list" + STR_DLGFNCLST_TITLE_PLSQL "PL/SQL Function list" + STR_DLGFNCLST_TITLE_ASM "Assembler Outline" + STR_DLGFNCLST_TITLE_PERL "Perl Function list" +END + +STRINGTABLE +BEGIN + STR_DLGFNCLST_TITLE_ERLANG "Erlang Function list" + STR_DLGFNCLST_TITLE_BOOK "Bookmark" + STR_DLGFNCLST_REMARK01 "Definition" + STR_DLGFNCLST_REMARK02 "Function Declaration" + STR_DLGFNCLST_REMARK03 "Procedure Declaration" + STR_DLGFNCLST_REMARK04 "Function" + STR_DLGFNCLST_REMARK05 "Procedure" + STR_DLGFNCLST_REMARK06 "■Package Specification" + STR_DLGFNCLST_REMARK07 "■Package Body" + STR_DLGFNCLST_REMARK08 "PROC" + STR_DLGFNCLST_REMARK09 "LABEL" + STR_DLGFNCLST_REMARK10 "ENDP" + STR_DLGFNCLST_SORTTYPE1 "Default" + STR_DLGFNCLST_SORTTYPE2 "Alphabetical Order" + STR_DLGFNCLST_APND_DECLARE "(Declaration)" + STR_DLGFNCLST_APND_CLASS " class" +END + +STRINGTABLE +BEGIN + STR_DLGFNCLST_SORTTYPE2_2 "Alphabetical Order (Desc)" + STR_DLGFNCLST_MENU_EXPAND "&Expand all" + STR_DLGFNCLST_MENU_COLLAPSE "Collapse(&O) all" + STR_DLGFNCLST_MENU_BOOK_DEL "&Delete bookmark" + STR_DLGFNCLST_MENU_BOOK_ALL_DEL "delete &All bookmark" + STR_KEYHELP_RMENU_NONE "Hide" + STR_KEYHELP_RMENU_TOP "Show Top" + STR_KEYHELP_RMENU_BOTTOM "Show Bottom" + STR_ERR_DLGDOCLM_TOOBIG "'%ls'\n file could not be opened.\nIts size is too big." + STR_LOADAGENT_BIG_ERROR "'%s'\nCannot open file.\nIts size is too big.\n\nSpecified file size: %s\n File size limit: %s" + STR_ERR_FILEPATH_TOO_LONG + "'%s'\nCannot open the file.\nThe filepath is too long." + STR_GREP_EXCLUDE_FILE "Exclude File " + STR_GREP_EXCLUDE_FOLDER "Exclude Folder " + STR_FILEDIALOG_READONLY "Open as &read-only" + STR_FILEDIALOG_CODE "En&coding:" + STR_FILEDIALOG_EOL "CR Code(&E):" +END + +STRINGTABLE +BEGIN + STR_DLGFNCLST_APND_STRUCT " struct" + STR_DLGFNCLST_APND_ENUM " enum" + STR_DLGFNCLST_APND_UNION " union" + STR_DLGFNCLST_APND_NAMESPACE " namespace" + STR_DLGFNCLST_APND_INTERFACE " interface" + STR_DLGFNCLST_APND_GLOBAL "Global" + STR_DLGFNCLST_VB_STATIC "static " + STR_DLGFNCLST_VB_PRIVATE "private" + STR_DLGFNCLST_VB_FRIEND "friend" + STR_DLGFNCLST_VB_PUBLIC "public" + STR_DLGFNCLST_VB_FUNCTION "function" + STR_DLGFNCLST_VB_PROC "procedure" + STR_DLGFNCLST_VB_PROPGET "property get" + STR_DLGFNCLST_VB_PROPLET "property set" + STR_DLGFNCLST_VB_PROPSET "property reference" + STR_DLGFNCLST_VB_CONST "Constant" +END + +STRINGTABLE +BEGIN + STR_DLGFNCLST_VB_ENUM "Enumerated type" + STR_DLGFNCLST_VB_TYPE "User Defined Type" + STR_DLGFNCLST_VB_EVENT "event" + STR_DLGFNCLST_VB_DECL "declaration" + STR_DLGFNCLST_LIST_TEXT "Text" + STR_DLGFNCLST_LIST_TEXT_M "Text *" + STR_DLGFNCLST_LIST_FUNC "Function name" + STR_DLGFNCLST_LIST_FUNC_M "Function name *" + STR_DLGFNCLST_LIST_LINE "Ln" + STR_DLGFNCLST_LIST_LINE_M "Ln *" + STR_DLGFNCLST_LIST_COL "Cl" + STR_DLGFNCLST_LIST_COL_M "Cl *" + STR_DLGFNCLST_LIST_M "*" + STR_DLGGREP1 "Please select search folder." + STR_DLGGREP2 "You can not use wildcards in the folder part of the file specification." + STR_DLGGREP3 "File name not use full path." +END + +STRINGTABLE +BEGIN + STR_TYPE_NAME_ASM "Assembler" + STR_TYPE_NAME_INI "Ini file" + STR_DLGFNCLST_TIP_CLOSE "Close" + STR_DLGFNCLST_TIP_WIN "Window position" + STR_DLGFNCLST_TIP_UPDATE "Update" + STR_DLGFNCLST_MENU_UPDATE "&Update" + STR_DLGFNCLST_MENU_COPY "&Copy" + STR_DLGFNCLST_MENU_WINPOS "&Window position" + STR_DLGFNCLST_MENU_LEFTDOC "&Left docking" + STR_DLGFNCLST_MENU_RIGHTDOC "&Right docking" + STR_DLGFNCLST_MENU_TOPDOC "&Top docking" + STR_DLGFNCLST_MENU_BOTDOC "&Bottom docking" + STR_DLGFNCLST_MENU_FLOATING "&Floating" + STR_DLGFNCLST_MENU_NODOCK "No docking(&I)" + STR_DLGFNCLST_MENU_SYNC "Docking position &Sync" + STR_DLGFNCLST_MENU_INHERIT "Docking position inherit &Common setting" +END + +STRINGTABLE +BEGIN + STR_DLGFNCLST_MENU_TYPE "Docking position inherit type setting(&Y)" + STR_DLGFNCLST_MENU_UNIFY "&Unify inheriting info" + STR_DLGFNCLST_MENU_CLOSE "Close(&X)" + STR_DLGFNCLST_UNIFY "現在の画面のドッキング配置情報をすべての共通設定・タイプ別設定にコピーして統一します。\n(現在開いている他画面の状態も統一します。)\n" + STR_BREGONIG_ERROR "Failed to load bregonig.dll." + STR_BREGONIG_TITLE "Regular Expression Error" + STR_ERR_CWSH09 "Aborted execute macro." + STR_ERR_DLGMACRO03_1 "Line Break Code is not defined." + STR_ERR_DLGMACRO16 "Number is not defined." + STR_DLLPLG_TITLE "DLL Plugin" + STR_DLLPLG_INIT_ERR1 "Failed to read DLL\n%s\n%ls" + STR_DLLPLG_INIT_ERR2 "Failed to read DLL" + STR_PLGMGR_FOLDER "Failed to create plugin folder" + STR_PLGMGR_CANCEL "Canceled" +END + +STRINGTABLE +BEGIN + STR_DLGGREP4 "Please define the target search folder." + STR_DLGGREP5 "Target folder is not correct." + STR_DLGGREP6 "Target folder is too long" + STR_DLGJUMP1 "Please input correct line number" + STR_DLGJUMP_PSLQL "%d Ln %s Package Specification" + STR_DLGOPNFL1 "as is" + STR_DLGOPNFL2 " already exists\r\nOverwrite the file?" + STR_DLGOPNFL3 "Save as" + STR_DLGOPNFL_EXTNAME1 "User setting" + STR_DLGOPNFL_EXTNAME2 "Text File" + STR_DLGOPNFL_EXTNAME3 "All Files" + STR_DLGOPNFL_ERR1 "Dialog didn't open.\n\nError:%s" + STR_DLGPRNST1 "Page Setup Profile Name" +END + +STRINGTABLE +BEGIN + STR_IMPEXP_DIC_LENGTH "Dictionary file description should be a maximum of %d characters.\n" + STR_IMPEXP_DIC_RECORD "A part of the data couldn't be read\nIncorrect line: %d" + STR_IMPEXP_KEY_FORMAT "Key bindings file is the wrong format.\n\n" + STR_IMPEXP_CUSTMENU_FORMAT + "Custom Menu setting file's format is wrong.\n\n" + STR_IMPEXP_KEYWORD "Due to reaching the upper limit, several keywords could not be registered." + STR_IMPEXP_MEINMENU "Is different format main menu setting file\n\n" + STR_STRINGESC_CPP "C/C++ \\"" " + STR_STRINGESC_PLSQL "PL/SQL """"" + STR_STRINGESC_HTML "HTML/XML =""""" + STR_STRINGESC_CSHARP "C# @""""" + STR_STRINGESC_PYTHON "Python """"""" + STR_KEY_BIND_WHEEL_UP "Wheel-Up" + STR_KEY_BIND_WHEEL_DOWN "Wheel-Down" + STR_KEY_BIND_WHEEL_LEFT "Wheel-Left" + STR_KEY_BIND_WHEEL_RIGHT "Wheel-Right" + STR_DLGPLUGINOPT_LOAD "Didn't load plugin." +END + +STRINGTABLE +BEGIN + STR_DLGPLUGINOPT_TITLE "%ls Plugin Setting" + STR_DLGPLUGINOPT_INIHEAD " Plugin Setting file" + STR_DLGPLUGINOPT_OPTION "Option doesn't exist" + STR_DLGPLUGINOPT_LIST1 "Item" + STR_DLGPLUGINOPT_LIST2 "Value" + STR_DLGPLUGINOPT_SELECT "Select %s" + STR_DOCOUTLINE_REGEX "Regex Rule\n%ls\nOn Error\n%s" + STR_CHANGE_CHARSET "%s\nis no change.\nhowever change encoding.\nSave before closing?" + STR_TITLE_GREP "[Grep] %ls%s" + STR_MENU_GREP "%s [Grep]""%s%s""" + STR_TAB_CAPTION_OUTPUT "[Grep]" + STR_TAB_CAPTION_GREP "[Output]" + STR_CAPTION_ACTIVE_OUTPUT "Output" + STR_CAPTION_ACTIVE_UPDATE "(Update)" + STR_CAPTION_ACTIVE_VIEW "(View mode)" + STR_CAPTION_ACTIVE_OVERWRITE "(Read only)" +END + +STRINGTABLE +BEGIN + STR_DLGPRNST2 "Please input the profile name" + STR_DLGFLPROP_FILENAME "Filename " + STR_DLGFLPROP_FILETYPE "File Type " + STR_DLGFLPROP_ENCODING "Character Encoding " + STR_DLGFLPROP_WITH_BOM " with BOM" + STR_DLGFLPROP_LINE_COUNT "Total Lines %d\r\n" + STR_DLGFLPROP_LAYOUT_LINE "Total including wrapped lines %d\r\n" + STR_DLGFLPROP_VIEW_MODE "Opened in View-Mode mode.\r\n" + STR_DLGFLPROP_MODIFIED "Updated since last save\r\n" + STR_DLGFLPROP_NOT_MODIFIED "Not changed since last save\r\n" + STR_DLGFLPROP_CMD_COUNT "\r\nTotal Editor Commands issued %d times\r\n" + STR_DLGFLPROP_FILE_INFO "--File Information-----------------\r\n" + STR_DLGFLPROP_W_LOCK "You have a *write-only* lock on this file that prevents other processes from accessing it.\r\n" + STR_DLGFLPROP_RW_LOCK "You have a *ready-only* lock on this file that prevents other processes from accessing it.\r\n" + STR_DLGFLPROP_LOCK "You locked this file.\r\n" + STR_DLGFLPROP_NOT_LOCK "You did not lock this file.\r\n" +END + +STRINGTABLE +BEGIN + STR_DLGFLPROP_ATTRIBUTES "File Attributes " + STR_DLGFLPROP_AT_ARCHIVE "/Archive" + STR_DLGFLPROP_AT_COMPRESS "/Compressed" + STR_DLGFLPROP_AT_FOLDER "/Folder" + STR_DLGFLPROP_AT_HIDDEN "/Hidden" + STR_DLGFLPROP_AT_NORMAL "/Normal" + STR_DLGFLPROP_AT_OFFLINE "/Offline" + STR_DLGFLPROP_AT_READONLY "/Read Only" + STR_DLGFLPROP_AT_SYSTEM "/System" + STR_DLGFLPROP_AT_TEMP "/Temporary" + STR_DLGFLPROP_CREATE_DT "Create Date " + STR_DLGFLPROP_YMDHMS "%dY %dM %dD %02d:%02d:%02d" + STR_DLGFLPROP_UPDATE_DT "Modify Date " + STR_DLGFLPROP_ACCESS_DT "Access Date " + STR_DLGFLPROP_DOS_NAME "MS-DOS Filename %s\r\n" + STR_DLGFLPROP_FILE_SIZE "File Size %d Bytes\r\n" +END + +STRINGTABLE +BEGIN + STR_DLGREPLC_CLIPBOARD "There is no valid data in the clipboard!" + STR_DLGREPLC_STR "No Selected Text to Replace" + STR_DLGREPLC_REPLACE "Changed %d occurrences" + STR_DLGREPLC_REPSTR "Please provide a replacement term first." + STR_DLGSMCLR_BTN1 "foreground color unity" + STR_DLGSMCLR_BTN2 "background color unity" + STR_DLGTAGJMP1 "(report)" + STR_DLGTAGJMP2 "(Not Found)" + STR_DLGTAGJMP_LIST1 "Keyword" + STR_DLGTAGJMP_LIST2 "hierarchical" + STR_DLGTAGJMP_LIST3 "Line Nr" + STR_DLGTAGJMP_LIST4 "Type" + STR_DLGTAGJMP_LIST5 "File Name" + STR_DLGTAGJMP_LIST6 "Notes" + STR_DLGTAGJMP3 "Keyword Searching..." + STR_DLGTAGMAK_SELECTDIR "Select folder for tag creation" +END + +STRINGTABLE +BEGIN + STR_DLGWINSZ_NORMAL "Normal" + STR_DLGWINSZ_MAXIMIZE "Maximize" + STR_DLGWINSZ_MINIMIZE "(Minimize)" + STR_ERR_DLGDOCLM1 "%ls\n file couldn't be opened.\nFile is not valid." + STR_ERR_DLGDOCLM2 "'%ls'\n file could not be opened.\nCould not get access to the file." + STR_ERR_DLGDOCLM3 "'%ls'\n file could not be opened.\nIts possible another application is using the file." + STR_ERR_DLGDOCLM4 "'%ls' error occurred whilst trying to read the file.\nWill stop attempting to read file." + STR_ERR_DLGDOCLM5 "'%ls'\nCould not save file.\nIncorrect path or other application is using the file." + STR_ERR_DLGDOCLM6 "CDocLineMgr::GetAllData()\nFailure to reserve memory \n%d bytes" + STR_ERR_DLGDOCLMN1 "Please inform the developers about this bug." + STR_ERR_DLGDRPTGT1 "::RegisterDragDrop()\nError" + STR_TRAY_CREATE "CControlTray::Create()\nCould not register window class." + STR_TRAY_TYPE_NAME "Set %d" + STR_TRAY_EXTHELP1 "External Help 1 is unset.\nSet it now?" + STR_TRAY_RESPONSEFILE "Create error response file." + STR_TRAY_CREATEPROC1 "'%s'\nFailed to execute process.\n%s" +END + +STRINGTABLE +BEGIN + STR_ESI_DEFAULT_CHARCODE "Default Charcode\r\n" + STR_ESI_SAMPLE_LEN "Sample Data Length\r\n" + STR_ESI_SAMPLE_LEN_FORMAT "\t%d bytes\r\n" + STR_ESI_BYTES_AND_POINTS "Specific Bytes and Point\n" + STR_ESI_UTF16LE_B_AND_P "\t\tUTF16LE Specific Bytes %d\tPoint %d\r\n" + STR_ESI_UTF16BE_B_AND_P "\t\tUTF16BE Specific Bytes %d\tPoint %d\r\n" + STR_ESI_BOM "\t\tBOM Detection " + STR_ESI_BOM_UNKNOWN "Unknown\r\n" + STR_ESI_MBC_OTHER_UNICODE "\tMBC and Other UNICODE Family\r\n" + STR_ESI_OTHER_B_AND_P "\t\t%d.%s\tSpecific Bytes %d\tPoint %d\r\n" + STR_ESI_EUC_ZENKAKU "\t\tEUC Zenkaku Kana/EUC Zenkaku Kanji\t%6.3f\r\n" + STR_ESI_RESULT "Detection Result\r\n" + STR_FILESAVE_CONVERT_ERROR "'%s'\nFailed File save\nConvert Error." + STR_DLGPROFILE_ERR_WRITE "Failed to write profile settings." + STR_DLGPROFILE_NEW_PROF_TITLE "New Profile Name" + STR_DLGPROFILE_NEW_PROF_MSG "Input New Profile Name." +END + +STRINGTABLE +BEGIN + STR_DLGPROFILE_ERR_INVALID_CHAR "Contains is not available characters." + STR_DLGPROFILE_ERR_ALREADY "Already there is a profile of the same name." + STR_DLGPROFILE_ERR_FILE "You can not create because there is a file with the same name." + STR_DLGPROFILE_RENAME_TITLE "Rename Profile Name" + STR_DLGPROFILE_RENAME_MSG "Input Profile Name." + STR_DLGPROFILE_ERR_RENAME + "Failed to change the name.\nProfile there is a possibility of being used." + STR_PROPCOMTAB_TAB_POS_TOP "Top" + STR_PROPCOMTAB_TAB_POS_BOTTOM "Bottom" + STR_PROPCOMTAB_TAB_POS_LEFT "Left" + STR_PROPCOMTAB_TAB_POS_RIGHT "Right" + STR_TAGJUMP_0 "Don't search next file" + STR_TAGJUMP_1 "If hit, don't search next file" + STR_TAGJUMP_2 "If exact match, don't search next file" + STR_TAGJUMP_3 "Search next file." + STR_GREP_REPLACE_TO "Replace To " + STR_GREP_PASTE_CLIPBOAD "(Paste From Clipboard)" +END + +STRINGTABLE +BEGIN + STR_TRAY_CREATEPROC2 "'%s'\nFailed to execute process." + STR_TRAY_EXITALL "Close all open windows, and exit editor without saving?" + STR_TRAY_ACCELTABLE "CControlTray::CreateAccelTbl()\nCould not create accelerator table.\nInsufficient system resources." + STR_LOADAGENT_ERR_OPEN "'%s'\nCannot open file.\nYou do not have read access to this file." + STR_LOADAGENT_BIG_WARNING + "'%s'\nFile size is %dMB or over. Do you want to open?" + STR_SAVEAGENT_VIEW_FILE "Cannot overwrite file in view-mode." + STR_SAVEAGENT_OTHER "'%s'\nCannot save file.\nOther editor is opening this file." + STR_ERR_DLGEDITDOC5 "Character Encoding" + STR_ERR_DLGEDITDOC6 "%s\n\nOpening in %s, but it has been opened in %s last time.\nUse same character formatting as last time?\n\n\t[(Y)es] =%s\n\t[(N)o]=%s\n" + STR_NOT_EXSIST_SAVE "%s\nThe above file doesn't exist.\n\nWhen you save this document the file will be created on the disk." + STR_BACKUP_ERR_TITLE "File Save" + STR_BACKUP_ERR_MSG "Failed to create backup.. Continue to overwrite the original file?" + STR_BACKUP_ERR_PATH_CRETE + "error in the path of creating the backup destination.\nPath is too long or invalid format.\nContinue to overwrite the original file?" + STR_BACKUP_CONFORM_TITLE1 "Confirming creation of backup" + STR_BACKUP_CONFORM_MSG1 "Creating a backup before updating.\nOK? [(N)o] = No backup, just overwrite (or save as).\n\n%s\n ↓\n%s\n\nBackup file will be sent to the Trashcan\n" + STR_BACKUP_CONFORM_TITLE2 "Confirming creation of backup" +END + +STRINGTABLE +BEGIN + STR_BACKUP_CONFORM_MSG2 "Creating a backup before updating.\nOK? [(N)o] = No backup, just overwrite (or save as).\n\n%s\n ↓\n%s\n\n" + STR_BACKUP_ERR_DELETE "failed to delete" + STR_BACKUP_ERR_MOVE "failed to move" + STR_ERR_DLGEDITDOC21 "%s\nis currently prohibited from writing by another process." + STR_EXCLU_DENY_READWRITE "Deny Read-Write Access Mode" + STR_EXCLU_DENY_WRITE "Deny Write Access Mode" + STR_EXCLU_UNDEFINED "Undefined mode (problem)" + STR_FILE_LOCK_ERR "%s\n [%s] could not obtain lock\nThe exclusive lock on the current file is now invalid." + STR_ERR_DLGEDITDOC30 "%s\nhas been altered. Save before closing? \n\nDue to opening as view-mode it is suggested to save under a different name.\n" + STR_ERR_DLGEDITDOC31 "%s\nhas been altered. Save before closing?" + STR_AUTORELOAD_NOFITY "★File Updated at %02d:%02d:%02d" + STR_OUTLINE_CPP_NONAME "No Name" + STR_OUTLINE_CPP_DEFPOS "::def. pos." + STR_OUTLINE_PYTHON_UNDEFINED "unset name" + STR_OUTLINE_PYTHON_CLASS " Class" + STR_OUTLINE_JAVA_DEFPOS "def. pos." +END + +STRINGTABLE +BEGIN + STR_WRAP_WIDTH_FULL "Line Wrap Width: %d Col(Max)" + STR_WRAP_WIDTH_WINDOW "Line Wrap Width: %d Col(Window)" + STR_WRAP_WIDTH_FIXED "Line Wrap Width: %d Col(Fixed)" + STR_EXCLU_NO_EXCLUSIVE "No Exclusive Mode" + STR_TAB_SYMBOL_CHARA "Character" + STR_TAB_SYMBOL_SHORT_ARROW "Short Arrow" + STR_TAB_SYMBOL_LONG_ARROW "Long Arrow" + STR_CODECHECKER_EOL_UNIFY + "CR Code is mixed.\r\n You want to unify the CR code (%s)?" + STR_CODECHECKER_CONFORM_LOSESOME + "Saving encoding %s...\r\nChar info is lost by the encoding conversion.\r\nDo you continue saving?\nFirst point %d Line %s Char[%ls]%s\nCancel=Move to lost point" + STR_CODECHECKER_LOSESOME_SAVE + "lose some char info by saving encoding conversion." + STR_CODECHECKER_LOSESOME_ROAD + "lose some char info by loading encoding conversion." + STR_SUPPORT_NOT_COMPLITE "There is no completions." + STR_CONVERT_ERR "Error on Convert." +END + +STRINGTABLE +BEGIN + STR_PLGMGR_INST_IDNUM "Plugin.ID of Head character not use numbers" + STR_PLGMGR_INST_NAME "The same plugin has been installed under a different name. Are you sure Overwrite?\n Yes -> Use new「%s」\n No→ Use installed「%ls」" + STR_PLGMGR_INST_USERCANCEL "User Cancel" + STR_PLGMGR_INST_MAX "Plugin can not register any more" + STR_WSHPLUG_LOADMACRO "Failed to read the macro.\n\n%s" + STR_CARET_WITHBOM " BOM" + STR_MENU_UNKOWN "%s unknown" + STR_PRINT_WAITING "Waiting for end of printing processing..." + STR_OUTLINE_ERLANG_SCANARGS "COutlineErlang::ScanArgs unknown bracket" + STR_ESI_CHARCODE_DETECT "--Charcode Detection-----------\r\n" + STR_ESI_RESULT_STATE "Status\r\n" + STR_ESI_NO_INFO "\tNo Information.\r\n" + STR_ESI_DETECTED "\tDetected.\r\n" + STR_ESI_NO_DETECTED "\tNot Detected.\r\n" + STR_ESI_DOC_TYPE "Document Type\r\n" +END + +STRINGTABLE +BEGIN + STR_VIEW_TIMER "CEditView::Create()\nTimer could not start up.\nPossible insufficiency of system resources." + STR_ERR_DLGEDITVW2 "大" + STR_ERR_DLGEDITVW5 "\n--------------------\n■" + STR_ERR_DLGEDITVW6 "■" + STR_MENU_KEYWORDINFO "Copy Keyword description to clipboard" + STR_MENU_OPENKEYWORDDIC "Open keyword dictionary" + STR_STATUS_ROW_COL "%5d Ln %4d Col" + STR_INS_MODE_INS "INS" + STR_INS_MODE_OVR "OVR" + STR_GREP_SEARCH_CONDITION "\r\n□ Search Conditions " + STR_GREP_SEARCH_FILE "\r\n" + STR_GREP_SEARCH_TARGET "Search Target " + STR_GREP_SEARCH_FOLDER "Folder " + STR_GREP_SUBFOLDER_YES " (search sub-folders = Yes)\r\n" + STR_GREP_SUBFOLDER_NO " (search sub-folders = No)\r\n" + STR_GREP_COMPLETE_WORD " (Match Whole Word)\r\n" +END + +STRINGTABLE +BEGIN + STR_GREP_CASE_SENSITIVE " (Case Sensitivity = Yes)\r\n" + STR_GREP_IGNORE_CASE " (Case Sensitivity = No)\r\n" + STR_GREP_REGEX_DLL " (RegEx:" + STR_GREP_CHARSET_AUTODETECT " (Encoding = Auto-Detect)\r\n" + STR_GREP_CHARSET " (Encoding:" + STR_GREP_SHOW_MATCH_LINE " (Matching Line displayed)\r\n" + STR_GREP_SHOW_MATCH_AREA " (Matching Area only displayed)\r\n" + STR_GREP_SUSPENDED "suspended.\r\n" + STR_GREP_MATCH_COUNT "%d items were checked.\r\n" + STR_GREP_RUNNINNG "Grep Running.\n" + STR_GREP_TIMER "Processing time: %dms\r\n" + STR_GREP_SHOW_FIRST_MATCH + " (First Matching Area only displayed for each file)\r\n" + STR_GREP_ERR_ENUMKEYS0 "(Unknown)" + STR_GREP_ERR_ENUMKEYS1 "You can not use a wild card in the folder of the file specified." + STR_GREP_ERR_ENUMKEYS2 "You can not use the full path in the file specification." + STR_GREP_ERR_FILEOPEN "file open error [%s]\r\n" +END + +STRINGTABLE +BEGIN + STR_GREP_SHOW_FIRST_LINE + " (Matching line first position only displayed)\r\n" + STR_GREP_REPLACE_COUNT "%d items replaced.\r\n" + STR_GREP_REP_ERR_DELETE "failed file delete." + STR_GREP_REP_ERR_REPLACE "failed file replace." + STR_GREP_ERR_FILEWRITE "file write error [%s]\r\n" + STR_ERR_DLGMACRO17 "Grep Replace To is not defined." + STR_FILETREE_FROM_COMMON "Setting: Common" + STR_FILETREE_FROM_TYPE "Setting: Types" + STR_FILETREE_FROM_FILE "Setting: %s" + STR_FILETREE_CURDIR "" + STR_FILETREE_MAXCOUNT "最大数(%d)を超えたため切り捨てました" + STR_FILETREE_MENU_ROOT "&Ini Root" + STR_FILETREE_MENU_MYDOC "M&y Document" + STR_FILETREE_MENU_MYMUSIC "My &Music" + STR_FILETREE_MENU_MYVIDEO "My &Video" + STR_FILETREE_MENU_DESK "&Desktop" +END + +STRINGTABLE +BEGIN + STR_GREP_ERR_FILEREAD "file read error [%s]\r\n" + STR_EDITVIEW_EXECCMD_ERR "Failed to execute command." + STR_EDITVIEW_EXECCMD_STOP "\r\nSuspended.\r\n" + STR_EDITVIEW_EXECCMD_RET "\r\nProgram's Exit Code: %d\r\n" + STR_ERR_DLGEDITVWHOKAN1 "Autocompletion dictionary file is not set.\nSet it now?" + STR_EDITVWISRCH_REGEX "Regex dll cant be loaded, or found." + STR_EDITVWISRCH_MIGEGO1 "MIGEMO.DLL cant be loaded, or found." + STR_EDITVWISRCH_MIGEGO2 "MIGEMO is not available" + STR_EDITVWISRCH_NOMATCH " (No Matches)" + STR_ERR_MACRO1 "Macro %d (%s) failed to execute." + STR_ERR_SRPREV1 "▲Restarted search from bottom" + STR_ERR_SRPREV2 "△Not Found" + STR_ERR_SRPREV3 "Reverse searching (↑) for '%ls' found no further instances." + STR_ERR_SRNEXT1 "▼Restarted search from top" + STR_ERR_SRNEXT2 "▽Not Found" + STR_ERR_SRNEXT3 "Forward searching (↓) for '%ls' found no further instances." +END + +STRINGTABLE +BEGIN + STR_ERR_UNINDENT1 "★Reverse indent only works on selected text" + STR_ERR_TAGJMP1 "Cant Tag-Jump" + STR_ERR_TAGJMPBK1 "Cant Bookmark Tag-Jump" + STR_ERR_CEDITVIEW_CMD01 "External Help-1 is not set.\nSet it now?" + STR_ERR_CEDITVIEW_CMD02 "External Help is not set.\nSet it now?" + STR_ERR_CEDITVIEW_CMD03 "Tag creation command failed to run.\n\nCTAGS.EXE could not be found." + STR_ERR_CEDITVIEW_CMD04 "Tag creation command failed to run.\n\n%s" + STR_ERR_CEDITVIEW_CMD05 "Creating Tag File ..." + STR_ERR_CEDITVIEW_CMD06 "Tag creation command failed to run.\n\n%hs" + STR_ERR_CEDITVIEW_CMD07 "Tag fille creation completed." + STR_ERR_CEDITVIEW_CMD08 "Failed to open C/C++ header file." + STR_ERR_CEDITVIEW_CMD09 "Failed to open C/C++ source file." + STR_ERR_CEDITVIEW_CMD10 "No valid data on the clip board !" + STR_ERR_CEDITVIEW_CMD11 "Replaced all occurrences to end of file." + STR_ERR_CEDITVIEW_CMD14 "Failed to write to the file.\n\n%s" + STR_ERR_CEDITVIEW_CMD16 "Failed to write to the file.\n\n%s" +END + +STRINGTABLE +BEGIN + STR_ERR_CEDITVIEW_CMD18 "%s\n has been changed. Save before passing to Oracle SQL*Plus?" + STR_ERR_CEDITVIEW_CMD20 "Oracle SQL*Plus did not respond.\nPlease wait a while and try again." + STR_ERR_CEDITVIEW_CMD21 "If the SQL isn't saved to a file then Oracle SQL*Plus can not run it.\n" + STR_ERR_CEDITVIEW_CMD22 "Did not find any differences." + STR_ERR_CEDITVIEW_CMD23 "Some differences were found." + STR_ERR_CEDITVIEW_CMD24 "Could not create the Macro File.\nFile name acquisition error (nRet=%d)" + STR_ERR_CEDITVIEW_CMD25 "Could not create the Macro File.\n\n%s" + STR_ERR_CEDITVIEW_CMD26 "Not a savable macro sequence. Can only save Keyboard Macros." + STR_ERR_CEDITVIEW_CMD27 "Could not create the Macro File.\n\n%s" + STR_ERR_CEDITVIEW_CMD28 "Could not open the file.\n\n%s" + STR_ERR_CEDITVIEW_CMD29 "%s\n\nThis file has been updated.\nReloading will cause all changed to be *lost*, OK?" + STR_BOOKMARK_NEXT_NOT_FOUND "Forward (↓) bookmark wasn't found." + STR_BOOKMARK_PREV_NOT_FOUND "Previous (↑) bookmark wasn't found." + STR_ERR_DLGEDITVWCMDNW7 "%d line was successfully merged." + STR_ERR_DLGEDITVWCMDNW8 "There were no lines of text that could be merged in your selection." + STR_SAVEAGENT_OTHER_APP "'%s'\nCould not save the file.\nPath may not be correct, or the file is in use by another application." +END + +STRINGTABLE +BEGIN + STR_ERR_DLGEDITVWCMDNW11 + "An error occurred whilst trying to write to the file." + STR_ERR_DLGEDITVWCMDNW12 + "An error occurred whilst trying to read the file." + STR_ERR_DLGEDITVWDIFF1 "DIFF command failed.\n\nFile to be used for comparison wasn't found." + STR_ERR_DLGEDITVWDIFF2 "DIFF command failed.\n\nDIFF.EXE wasn't found." + STR_ERR_DLGEDITVWDIFF3 "DIFF command failed.\n\n%ls" + STR_ERR_DLGEDITVWDIFF4 "The file to be used for comparison appears to be a binary file." + STR_ERR_DLGEDITVWDIFF5 "No differences were found by DIFF" + STR_DIFF_NEXT_NOT_FOUND "Forwards (↓) searching didn't find differences" + STR_DIFF_PREV_NOT_FOUND "Backward (↑) searching didn't find differences" + STR_DIFF_FAILED "DIFF command failed." + STR_DIFF_FAILED_TEMP "DIFF command failed.\n\nCouldn't create temporary file." + STR_DIFF_FAILED_LONG "DIFF command failed.\n\nLine was too long." + STR_VIEW_MOUSE_BUG "Possible bug, please report to the development team." + STR_VIEW_MOUSE_MENU_PATH "Drop &Path as text" + STR_VIEW_MOUSE_MENU_FILE "Drop &File as text" + STR_VIEW_MOUSE_MENU_OPEN "&Open File" +END + +STRINGTABLE +BEGIN + STR_VIEW_MOUSE_MENU_CANCEL "Cancel" + STR_ERR_DLGEDITWND01 "CEditWnd::CreateAccelTbl()\nCould not create the accelerator table\nInsufficient system resources." + STR_ERR_DLGEDITWND02 "Interaction between editors has failed.\nWindows OS UIPI security may be different between the editors." + STR_ERR_DLGEDITWND03 "CEditWnd::Create()\nTimer could not start up.\nPossible insufficiency of system resources." + STR_ERR_DLGEDITWND04 "Rebar creation failed." + STR_ERR_DLGEDITWND05 "Failed to create the Tool Bar." + STR_EDITWND_MENU_NEL "End of line type (&NEL)" + STR_EDITWND_MENU_LS "End of line type (L&S)" + STR_EDITWND_MENU_PS "End of line type (&PS)" + STR_ERR_DLGEDITWND13 "Character:\t\t%ls (%s)\n\nSJIS:\t\t%s\nJIS:\t\t%s\nEUC:\t\t%s\nLatin1:\t\t%s\nUTF-16:\t\t%s\nUTF-8:\t\t%s\nCESU-8:\t\t%s" + STR_ERR_DLGEDITWND14 "Before using Print Preview please install a printer driver.\n" + STR_MENU_OUTPUT "%s output" + STR_ERR_DLGEDITWND20 "99999 L 9999 C" + STR_ERR_DLGEDITWND21 "CFLF" + STR_ERR_DLGEDITWND22 "0000" +END + +STRINGTABLE +BEGIN + STR_ERR_DLGEDITWND23 "UTF-16 BOM" + STR_ERR_DLGEDITWND24 "REC" + STR_ERR_DLGEDITWND25 "OVR" + STR_ERR_DLGFUNCKEYWN1 "CFuncKeyWnd::Open()\nCouldn't start timer.\nPossibly insufficient system resources." + STR_ERR_DLGFUNCLKUP01 "External Macro" + STR_ERR_DLGFUNCLKUP02 "Custom Menu" + STR_ERR_DLGFUNCLKUP03 "Macro %d (Unregistered)" + STR_ERR_DLGFUNCLKUP04 "File related" + STR_ERR_DLGFUNCLKUP05 "Edit related" + STR_ERR_DLGFUNCLKUP06 "Cursor related" + STR_ERR_DLGFUNCLKUP07 "Selection related" + STR_ERR_DLGFUNCLKUP08 "Box Selection related" + STR_ERR_DLGFUNCLKUP09 "Clipboard related" + STR_ERR_DLGFUNCLKUP10 "Insert related" + STR_ERR_DLGFUNCLKUP11 "Replace related" + STR_ERR_DLGFUNCLKUP12 "Search related" +END + +STRINGTABLE +BEGIN + STR_ERR_DLGFUNCLKUP13 "Mode change related" + STR_ERR_DLGFUNCLKUP14 "Settings related" + STR_ERR_DLGFUNCLKUP15 "Macro related" + STR_ERR_DLGFUNCLKUP16 "Window related" + STR_ERR_DLGFUNCLKUP17 "Support related" + STR_ERR_DLGFUNCLKUP18 "Misc Others" + STR_ERR_DLGFUNCLKUP19 "Plugin" + STR_ERR_DLGKEYBIND1 "Key\tFunctionalName\tFunctionName\tFunctionalNr\tCan_record_as_key_macro?" + STR_ERR_DLGKEYBIND2 "---Undefined Name-----" + STR_ERR_DLGKEYMACMGR1 "//Keyboard macro file\r\n" + STR_ERR_DLGKEYMACMGR2 "Error reading in Macro" + STR_ERR_DLGKEYMACMGR3 "Line %d: Column %d: Too many parameters\n" + STR_ERR_DLGKEYMACMGR4 "Line %d: Column %d\r\nFunction %ls parameter %d can not be a string." + STR_ERR_DLGKEYMACMGR5 "Line %d:\r\nFunction %ls parameter %d does not end with %lc." + STR_ERR_DLGKEYMACMGR6 "Line %d: Column %d\r\n Function %ls parameter %d can not be a numeral." + STR_ERR_DLGKEYMACMGR7 "Line %d: Column %d: Syntax Error\n" +END + +STRINGTABLE +BEGIN + STR_ERR_DLGKEYMACMGR8 "Line %d: %ls function does not exist.\n" + STR_ERR_DLGMACRO01 "CMacro::GetFuncInfoByID() hit a bug, please report it\r\n" + STR_ERR_DLGMACRO02 "Macro Execution Error" + STR_ERR_DLGMACRO03 "End of line auto-insert char code hasn't been defined." + STR_ERR_DLGMACRO04 "Parameter(string)is not defined." + STR_ERR_DLGMACRO05 "Jump To Line Numer is not defined." + STR_ERR_DLGMACRO06 "Bookmarking pattern has not been defined." + STR_ERR_DLGMACRO07 "Parameter(string)is not defined." + STR_ERR_DLGMACRO08 "File name is not defined." + STR_ERR_DLGMACRO09 "Source replacement string is unset." + STR_ERR_DLGMACRO10 "Destination replacement string is unset." + STR_ERR_DLGMACRO11 "GREP pattern is not defined." + STR_ERR_DLGMACRO12 "File type is not defined." + STR_ERR_DLGMACRO13 "Destination search folder is unset." + STR_ERR_DLGMACRO14 "Input file name is unset." + STR_ERR_DLGMACRO15 "Filename for saving not set." +END + +STRINGTABLE +BEGIN + STR_ERR_DLGMEM1 "CMemory::AllocBuffer(nNewDataLen==%d)\nMemory reservation error\n" + STR_ERR_DLGNRMPROC1 "CreateMutex() failed. \nExiting app." + STR_ERR_DLGNRMPROC2 "Editor or System is busy.\nPlease wait for a while..." + STR_ERR_DLGPPA1 "Whilst executing PPA its impossible to call another PPA macro." + STR_ERR_DLGPPA2 "Error executing function\n%hs" + STR_ERR_DLGPPA3 "Unknown type of error whilst executing a function (Bug?)\nFunc_ID=%d" + STR_ERR_DLGPPA4 "Detailed Unknown Error" + STR_ERR_DLGPPA5 "Undefined Error\nError_CD=%d\n%s" + STR_ERR_DLGPPA6 "Error report is not correct" + STR_ERR_DLGPPA7 "PPA Execution Error" + STR_ERR_CPRINT01 "OpenPrinter() failed.\nPrinter Device Name=[%s]" + STR_ERR_CPRINT02 "StartDoc() error,\nPrinter Device Name=[%s]" + STR_ERR_CPRINT03 "unknown" + STR_ERR_DLGPRNPRVW1 "Landscape" + STR_ERR_DLGPRNPRVW2 "Portrait" + STR_ERR_DLGPRNPRVW3 "The printer %s, \n cant use the selected %s paper.\n Automatically choosing to use %s paper." +END + +STRINGTABLE +BEGIN + STR_ERR_DLGPRNPRVW4 "Please choose the page number to display (1 - %d)" + STR_ERR_DLGPRNPRVW5 "Preview Page Settings" + STR_ERR_DLGPRNPRVW6 "%d/%dpg" + STR_ERR_DLGPRNPRVW7 "The page is blank, there is nothing to print." + STR_ERR_DLGPRNPRVW3_1 "Print Page Setting Error:There is no printable area" + STR_ERR_DLGPROCESS1 "Can not run as there is already a different version of the editor open." + STR_ERR_DLGPROCFACT1 "This application expects to run on \nbetter than Windows95, or WindowsNT4.0 OS.\nApplication will now close." + STR_ERR_DLGPROCFACT2 "Could not determine OS Version.\nExiting Application." + STR_ERR_DLGPROCFACT3 "'%s'\nProcess startup failed.\n%s" + STR_ERR_DLGPROCFACT4 "'%ls'\nControl Process startup failed." + STR_ERR_DLGPROCFACT5 "Editor or System is busy.\nPlease wait a while..." + STR_PROPCOMBK_SEL_FOLDER "Please choose the file to be created for backup" + STR_PROPCOMBK_DUSTBOX "(Recycle Folder)" + STR_PROPCOMCUSTMENU_SEP " --------------------------" + STR_PROPCOMCUSTMENU_AC1 "Menu Item Access Settings" + STR_PROPCOMCUSTMENU_AC2 "Please press a key." +END + +STRINGTABLE +BEGIN + STR_DLGABOUT_APPNAME "Sakura Editor" + STR_DLGEXEC_SELECT_CURDIR "Select current directory." + STR_PROPEDIT_SELECT_DIR "Select file dialog path" + STR_DLGTYPEASC_IMPORT "--Without change import--" + STR_PROPCOMMAINMENU_EDIT "Please edit" + STR_PROPCOMMAINMENU_SEP "--------------------" + STR_PROPCOMMAINMENU_ACCKEY1 "Access key settings of menu item" + STR_PROPCOMMAINMENU_ACCKEY2 "Please input key." + STR_PROPCOMMAINMENU_CLEAR "Are you sure you want to erase menu settings?" + STR_PROPCOMMAINMENU_INIT + "Are you sure you want to load default menu settings?" + STR_PROPCOMMAINMENU_DEL "Are you sure you want to delete selected item?" + STR_PROPCOMMAINMENU_OK "No problems detected." + STR_PROPCOMMAINMENU_ERR1 "Failed to get menu setting" + STR_PROPCOMMAINMENU_ERR2 "Not include [Common Settings]\n" + STR_PROPCOMMAINMENU_ERR3 "Too many top-level items\n" + STR_PROPCOMMAINMENU_ERR4 "Too many items\n" +END + +STRINGTABLE +BEGIN + STR_PROPCOMFNM_LIST1 "Before Replacement" + STR_PROPCOMFNM_LIST2 "After Replacement" + STR_PROPCOMFNM_ERR_REG "Cannot register any more." + STR_PROPCOMGREP_DLL "Regex are disabled" + STR_PROPCOMHELP_MIGEMODIR "Please Select the Folder" + STR_PROPCOMKEYBIND_UNASSIGN "Unassigned" + STR_PROPCOMKEYWORD_ERR_LEN "Maximum Keyword length is %d bytes." + STR_PROPCOMKEYWORD_SETMAX "Maximum registration of %d sets is possible.\n" + STR_PROPCOMKEYWORD_SETNAME1 "Added Keyword Set" + STR_PROPCOMKEYWORD_SETNAME2 "Please input the Set's name" + STR_PROPCOMKEYWORD_SETDEL + "Delete the set [%ls]\nOK?\nThe set to be deleted is one of the below types\nDeleted set will become invalid.\n\n%s" + STR_PROPCOMKEYWORD_RENAME1 "Name for Set has been changed" + STR_PROPCOMKEYWORD_RENAME2 "Please input Set's name" + STR_PROPCOMKEYWORD_KEYMAX + "Reached the maximum number of registerable keywords.\n" + STR_PROPCOMKEYWORD_KEYADD1 "Added Keyword" + STR_PROPCOMKEYWORD_KEYADD2 "Please input the Keyword" +END + +STRINGTABLE +BEGIN + STR_ERR_DLGPROPCOMMON24 "CPropCommon::DoPropertySheet() failed.\npsh.nStartPage=[%d]\n::PropertySheet() failed\n\n%s\n" + STR_PROPCOMGEN_FILE1 "Deleting recent file history,\nOK?\n" + STR_PROPCOMGEN_FILE2 "Deleted recent file history.\n" + STR_PROPCOMGEN_DIR1 "Deleting recent folder history,\nOK?\n" + STR_PROPCOMGEN_DIR2 "Deleted recent folder history\n" + STR_PROPCOMTOOL_ERR01 "Toolbar Dialog: Problem inserting item. (%d:%d)" + STR_PROPCOMTOOL_ERR02 "Toolbar Dialog: INS: Problem setting value :%d" + STR_PROPCOMTOOL_ERR03 "Toolbar Dialog: Problem adding item. (%d:%d)" + STR_PROPCOMTOOL_ERR04 "Toolbar Dialog: ADD: Problem setting value :%d" + STR_PROPCOMTOOL_ERR05 "Toolbar Dialog: Problem adding item :%d" + STR_PROPCOMTOOL_ITEM1 "---------------------" + STR_PROPCOMTOOL_ITEM2 "-- Tool Bar Break --" + STR_PROPCOMTOOL_ITEM3 "----- disabled -----" + STR_OUTLINE_CPP "C/C++" + STR_OUTLINE_PLSQL "PL/SQL" + STR_OUTLINE_JAVA "Java" +END + +STRINGTABLE +BEGIN + STR_PROPCOMKEYWORD_KEYEDIT1 "Keyword Editing" + STR_PROPCOMKEYWORD_KEYEDIT2 "Please edit the keyword" + STR_PROPCOMKEYWORD_DEL "Delete undisplayable Keywords from the current input ?" + STR_PROPCOMKEYWORD_INFO "(Max %d chr, keywords %d, space %d )" + STR_PROPCOMMACR_LIST1 "Number" + STR_PROPCOMMACR_LIST2 "Macro Name" + STR_PROPCOMMACR_LIST3 "File Name" + STR_PROPCOMMACR_LIST4 "Read at Exec time" + STR_PROPCOMMACR_LIST5 "Automatic" + STR_PROPCOMMACR_SEL_DIR "Select Macro Directory" + STR_PROPCOMMON_GENERAL "General" + STR_PROPCOMMON_WINDOW "Window" + STR_PROPCOMMON_TABS "Tabs" + STR_PROPCOMMON_EDITING "Editing" + STR_PROPCOMMON_FILE "File" + STR_PROPCOMMON_BACKUP "Backup" +END + +STRINGTABLE +BEGIN + STR_PROPCOMMAINMENU_ERR5 "There is access key duplicate.\n" + STR_PROPCOMMAINMENU_ERR6 "There is access key not set.\n" + STR_PROPCOMPLG_ERR1 "Do not loaded plugin this window or Folder is different for\nYou can't change the settings." + STR_PROPCOMPLG_ERR2 "Don't open ReadMe File" + STR_PROPCOMPLG_ERR3 "ReadMe file not found" + STR_PROPCOMPLG_STATE1 "Add" + STR_PROPCOMPLG_STATE2 "Update" + STR_PROPCOMPLG_STATE3 "Stopped" + STR_PROPCOMPLG_STATE4 "Loaded" + STR_PROPCOMPLG_STATE5 "Delete" + STR_PROPCOMPLG_STATE6 "Undefined" + STR_PROPCOMPLG_LOAD "Loaded" + STR_PROPCOMPLG_LIST1 "No" + STR_PROPCOMPLG_LIST2 "Plugin name" + STR_PROPCOMPLG_LIST3 "Stat" + STR_PROPCOMPLG_LIST4 "Load" +END + +STRINGTABLE +BEGIN + STR_PROPCOMMON_FORMAT "Format" + STR_PROPCOMMON_SEARCH "Search" + STR_PROPCOMMON_KEYS "Function Key" + STR_PROPCOMMON_CUSTMENU "Custom Menu" + STR_PROPCOMMON_TOOLBAR "Tool Bar" + STR_PROPCOMMON_KEYWORD "Keyword Highlight" + STR_PROPCOMMON_SUPPORT "Support" + STR_PROPCOMMON_MACRO "Macro" + STR_PROPCOMMON_FILENAME "Filename Display" + STR_SCROLL_WITH_NO_KEY "Not used" + STR_SCROLL_WITH_MID_BTN "Middle Button" + STR_SCROLL_WITH_SIDE_1_BTN "Side Button 1" + STR_SCROLL_WITH_SIDE_2_BTN "Side Button 2" + STR_SCROLL_WITH_CTRL_KEY "Control Key" + STR_SCROLL_WITH_SHIFT_KEY "Shift Key" + STR_PROPCOMMON "Common Setting" +END + +STRINGTABLE +BEGIN + STR_PROPCOMPLG_LIST5 "Folder" + STR_PROPCOMPLG_DELETE "Are you sure you want to remove %ls ?" + STR_DLGTYPELIST_ERR1 "Failed to set association settings.\n" + STR_DLGTYPELIST_ERR2 "Failed to reset association settings.\n" + STR_DLGTYPELIST_INIT1 "Are you sure you want to initialize %s ?" + STR_DLGTYPELIST_SETNAME "Set %d" + STR_DLGTYPELIST_INIT2 "%s has been initialized" + STR_DLGTYPELIST_DEL "Are you sure you want to remove %s ?" + STR_DLGTYPELIST_ACC "Are you sure you want to change Windows association settings?\nThis may affects other apps that use same settings." + STR_IMAGE_POS1 "Left top" + STR_IMAGE_POS2 "Right top" + STR_IMAGE_POS3 "Left bottom" + STR_IMAGE_POS4 "Right bottom" + STR_IMAGE_POS5 "Center" + STR_IMAGE_POS6 "Center top" + STR_IMAGE_POS7 "Center bottom" +END + +STRINGTABLE +BEGIN + STR_IMAGE_POS8 "Center left" + STR_IMAGE_POS9 "Center right" + STR_PROPCOMTAB_DISP_NO "None" + STR_PROPCOMTAB_DISP_ALLWAYS "Always" + STR_PROPCOMTAB_DISP_AUTO "Auto" + STR_IMPEXP_ERR_FILEOPEN "Could not open the file.\n\n" + STR_IMPEXP_ERR_EXPORT "Was not able to export\n\n" + STR_IMPEXP_OK_EXPORT "Exported to the file\n\n" + STR_IMPEXP_OK_IMPORT "Imported to the file.\n\n" + STR_IMPEXP_ERR_COLOR_OLD + "Is different format color settings file. Not support old version format.\n" + STR_IMPEXP_ERR_TYPE "Invalid format.\nStop import." + STR_IMPEXP_VER "Export %s(%s/%d) Different version.\n\nAre you sure you want to import?" + STR_IMPEXP_REGEX1 "keyword truncated because the number of keywords has reached the upper limit." + STR_IMPEXP_REGEX2 "keyword truncated because keyword are is full." + STR_IMPEXP_REGEX3 "Ignore invalid keyword." + STR_IMPEXP_DIC_NOTFOUND "" +END + +STRINGTABLE +BEGIN + STR_OUTLINE_COBOL "COBOL" + STR_OUTLINE_PERL "Perl" + STR_OUTLINE_ASM "Assembler" + STR_OUTLINE_VB "Visual Basic" + STR_OUTLINE_PYTHON "Python" + STR_OUTLINE_ERLANG "Erlang" + STR_OUTLINE_WZ "WZ Hierarchy Text" + STR_OUTLINE_HTML "HTML" + STR_OUTLINE_TEX "TeX" + STR_OUTLINE_TEXT "Text" + STR_SMART_INDENT_NONE "None" + STR_SMART_INDENT_C_CPP "C/C++" + STR_IME_STATE_DEF "Default" + STR_IME_STATE_FULL "Full Height" + STR_IME_STATE_FULLHIRA "Full Height Hiragana" + STR_IME_STATE_FULLKATA "Full Height Katakana" +END + +STRINGTABLE +BEGIN + STR_IME_STATE_NO "No Conversion" + STR_IME_SWITCH_DONTSET "Don't Set" + STR_IME_SWITCH_ON "Turn On" + STR_IME_SWITCH_OFF "Turn Off" + STR_WRAP_INDENT_NONE "None" + STR_WRAP_INDENT_TX2X "tx2x" + STR_WRAP_INDENT_BOL "prev. line start" + STR_WRAP_METHOD_NO_WRAP "Dont LineWrap" + STR_WRAP_METHOD_SPEC_WIDTH "Wrap at set col." + STR_WRAP_METHOD_WIN_WIDTH "Wrap at window edge" + STR_PROPTYPE_SCREEN "Screen" + STR_PROPTYPE_COLOR "Color" + STR_PROPTYPE_SUPPORT "Support" + STR_PROPTYPE_REGEX_KEYWORD "RegEx Keyword" + STR_PROPTYPE_KEYWORD_HELP "Keyword Help" + STR_PROPTYPE_WINDOW "Window" +END + +STRINGTABLE +BEGIN + STR_PROPTYPE "File Type Setting" + STR_PROPTYPE_ERR "CPropTypes::DoPropertySheet() failed.\npsh.nStartPage=[%d]\n::PropertySheet() failed.\n\n%s\n" + STR_PROPTYPKEYHELP_DIC " Dict Filename" + STR_PROPTYPKEYHELP_INFO "Description" + STR_PROPTYPKEYHELP_PATH "Path" + STR_PROPTYPKEYHELP_LINE1 "<>" + STR_PROPTYPKEYHELP_DICPATH "Keyword dict file path" + STR_PROPTYPKEYHELP_ERR_REG1 "Cannot register any more dictionaries." + STR_PROPTYPKEYHELP_SELECT "Select dict to update from the list" + STR_PROPTYPKEYHELP_ERR_REG2 "You have already registered this dictionary." + STR_PROPTYPKEYHELP_ERR_OPEN "Could not open the file.\n\n%s" + STR_PROPTYPEREGEX_LIST1 "Keyword" + STR_PROPTYPEREGEX_LIST2 "Color Index" + STR_PROPTYPEREGEX_NOUSE "Cannot use Regular Expression" + STR_PROPTYPEREGEX_NOTFOUND + "RegEx library cannot be found\n\nRegular Expression functionality cant be used, do you want to enable it anyway?" + STR_PROPTYPEREGEX_NOREG "Cannot register any further keywords." +END + +STRINGTABLE +BEGIN + STR_PROPTYPEREGEX_ALREADY "The same keyword is already registered." + STR_PROPTYPEREGEX_KAKOMI + "RegEx Keyword should be enclosed in / and /k \nWhen the keyword has a / use m# and #k to enclose it." + STR_PROPTYPEREGEX_INVALID + "Formatted incorrectly or RegEx library cant be found\n\nRegister anyway?" + STR_PROPTYPEREGEX_FULL "Cannot register any further keywords.\nkeyword area is full." + STR_PROPTYPEREGEX_NOSEL "No selected Keyword." + STR_ERR_CSHAREDATA01 "CreateFileMapping() failed." + STR_ERR_CSHAREDATA02 "Unexpected error" + STR_ERR_CSHAREDATA10 "${w?【Grep】$h$:【Output】$:$f$}${U?(Changed)$}${R?(Read Only)$:(Write Protected)$}${M?【Recording Macro】$}" + STR_CUSTMENU_RIGHT_CLICK "Right Click Menu" + STR_CUSTMENU_CUSTOM "Menu%d" + STR_CUSTMENU_TAB "Tab Menu" + STR_ERR_CSHAREDATA14 "1234567890(([[「『【■□▲△▼▽◆◇○◎●§・※☆★第①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ一二三四五六七八九十壱弐参伍" + STR_ERR_CSHAREDATA15 "yyyy'Y'M'M'd'D('dddd')'" + STR_ERR_CSHAREDATA16 "tthh'H'mm'M'ss'S'" + STR_ERR_CSHAREDATA17 "${w?$h$:Output$:${I?$f$:$N$}$}${U?(Changed)$} - sakura $V ${R?(Read Only)$:(Write Protected)$}${M? 【Recording Macro】$}" + STR_ERR_CSHAREDATA18 "${w?$h$:Output$:$f$}${U?(Changed)$} - sakura $V ${R?(Read Only)$:(Write Protected)$}${M? 【Recording Macro】$}" +END + +STRINGTABLE +BEGIN + STR_FILEDIALOG_MRU "Recent &File:" + STR_FILEDIALOG_OPENFOLDER "Recent Fol&der:" + STR_IMPEXP_REGEX4 "keyword truncated because too long." +END + +STRINGTABLE +BEGIN + STR_ERR_CSHAREDATA19 "Attempting to close multiple editor windows, sure you want to do this?" + STR_ERR_CSHAREDATA20 "%s\n\n\nIn the case you want to re-open a file with a different encoding\nsChoose「Re-Open with Encoding」from the file menu please.\n\nCurrent Character Encoding set=[%s]\nNew Character Encoding=[%s]" + STR_ERR_CSHAREDATA21 "%s\n\nUnclear character encoding found during opening multiple documents.\n\nCurrent Char Encoding=%d [%s]\nNew Char Encoding=%d [%s]" + STR_ERR_CSHAREDATA22 "unknown" + STR_KEY_BIND_DBL_CLICK "Double-Click" + STR_KEY_BIND_R_CLICK "Right-Click" + STR_KEY_BIND_MID_CLICK "Middle-Click" + STR_KEY_BIND_LSD_CLICK "Left-Side-Click" + STR_KEY_BIND_RSD_CLICK "Right-Side-Click" + STR_KEY_BIND_TRI_CLICK "Triple-Click" + STR_KEY_BIND_QUA_CLICK "Quadruple-Click" + STR_KEY_BIND_HAT_ENG_QT "^(EN KBD ')" + STR_KEY_BIND_AT_ENG_BQ "@(EN KBD `)" + STR_KEY_BIND_APLI "Application Key" + STR_COLOR_TEXT "Text" + STR_COLOR_RULER "Ruler" +END + +STRINGTABLE +BEGIN + STR_COLOR_CURSOR "Cursor" + STR_COLOR_CURSOR_IMEON "Cursor(IME ON)" + STR_COLOR_CURSOR_LINE_BG "CursorLine Background" + STR_COLOR_CURSOR_LINE "CursorLine Underline" + STR_COLOR_CURSOR_COLUMN "Cursor pos VertLine" + STR_COLOR_LINE_NO "Line No." + STR_COLOR_LINE_NO_CHANGE "Line No.(edited)" + STR_COLOR_EVEN_LINE_BG "Even Line Background" + STR_COLOR_TAB "TAB Mark" + STR_COLOR_HALF_SPACE "ASCII Space" + STR_COLOR_FULL_SPACE "Japanese Space" + STR_COLOR_CTRL_CODE "Control Code" + STR_COLOR_CR "Newline Mark" + STR_COLOR_WRAP_MARK "Wrapping Point" + STR_COLOR_VERT_LINE "Specific pos VertLine" + STR_COLOR_EOF "EOF Mark" +END + +STRINGTABLE +BEGIN + STR_COLOR_REGEX_KEYWORD10 "RegEx Keyword 10" + STR_COLOR_DIFF_ADD "DIFF area (added)" + STR_COLOR_DIFF_CNG "DIFF area (changed)" + STR_COLOR_DIFF_DEL "DIFF area (deleted)" + STR_COLOR_BOOKMARK "Bookmark" + STR_COLOR_NOTE_LINE "Note Line" + STR_COLOR_PAGEVIEW "View Range(Minimap)" + STR_ERR_CSPLITTER01 "SplitterWnd class registration failed." +END + +STRINGTABLE +BEGIN + STR_COLOR_NUMBER "HalfHeight Numerals" + STR_COLOR_SELECTED_AREA "Selected Area" + STR_COLOR_SEARCH_WORD1 "Search string" + STR_COLOR_SEARCH_WORD2 "Search string 2" + STR_COLOR_SEARCH_WORD3 "Search string 3" + STR_COLOR_SEARCH_WORD4 "Search string 4" + STR_COLOR_SEARCH_WORD5 "Search string 5" + STR_COLOR_BRACKET "Parenthesis highlight" + STR_COLOR_COMMENT "Comment" + STR_COLOR_SINGLE_QUOTE "Single Quote String" + STR_COLOR_DOUBLE_QUOTE "Double Quote String" + STR_COLOR_HERE_DOCUMENT "Here Document" + STR_COLOR_URL "URL" + STR_COLOR_KEYWORD1 "Keyword Highlight 1" + STR_COLOR_KEYWORD2 "Keyword Highlight 2" + STR_COLOR_KEYWORD3 "Keyword Highlight 3" +END + +STRINGTABLE +BEGIN + STR_COLOR_KEYWORD4 "Keyword Highlight 4" + STR_COLOR_KEYWORD5 "Keyword Highlight 5" + STR_COLOR_KEYWORD6 "Keyword Highlight 6" + STR_COLOR_KEYWORD7 "Keyword Highlight 7" + STR_COLOR_KEYWORD8 "Keyword Highlight 8" + STR_COLOR_KEYWORD9 "Keyword Highlight 9" + STR_COLOR_KEYWORD10 "Keyword Highlight 10" + STR_COLOR_REGEX_KEYWORD1 "RegEx Keyword 1" + STR_COLOR_REGEX_KEYWORD2 "RegEx Keyword 2" + STR_COLOR_REGEX_KEYWORD3 "RegEx Keyword 3" + STR_COLOR_REGEX_KEYWORD4 "RegEx Keyword 4" + STR_COLOR_REGEX_KEYWORD5 "RegEx Keyword 5" + STR_COLOR_REGEX_KEYWORD6 "RegEx Keyword 6" + STR_COLOR_REGEX_KEYWORD7 "RegEx Keyword 7" + STR_COLOR_REGEX_KEYWORD8 "RegEx Keyword 8" + STR_COLOR_REGEX_KEYWORD9 "RegEx Keyword 9" +END + +STRINGTABLE +BEGIN + STR_TABWND_LR_INFO "Left-Click: Tab Name List\nRight-Click: Path List" + STR_TABWND_CLOSETAB "Close Tab" + STR_TABWND_SHOWALL "Show &All" + STR_TABWND_SHOWTABNAME "S&wap to tab names list" + STR_TABWND_SHOWPATHNAME "S&wap to path names list" + STR_ERR_CWSH01 "Could not find the nominated script-engine" + STR_ERR_CWSH02 "Couldn't create names script engine" + STR_ERR_CWSH03 "Couldn't register site" + STR_ERR_CWSH04 "Couldn't acquire parser" + STR_ERR_CWSH05 "Unable to initialize" + STR_ERR_CWSH06 "Unable to pass object" + STR_ERR_CWSH07 "Status update error" + STR_ERR_CWSH08 "Failed to execute" + STR_ERR_ETCUTY01 "System " + STR_ERR_ETCUTY02 "User " + STR_ERR_ETCUTY03 "%s resources are extremely low\nContinued execution of %s will likely result in failure.\nSuspending execution of any further new %s.\n\nSystem Resource\tRemaining %d%%\nUser Resource\tRemaining %d%%\nGDI Resource\tRemaining %d%%\n\n" +END + +STRINGTABLE +BEGIN + STR_CAPTION_ACTIVE_KEYMACRO "[REC Key macro]" + STR_DATA_FORMAT "M'/'d'/'yyyy dddd" + STR_TIME_FORMAT "hh':'mm':'ss' 'tt" + STR_TRANSNAME_COMDESKTOP "Shared Desktop\\" + STR_TRANSNAME_COMDOC "Shared Documents\\" + STR_TRANSNAME_DESKTOP "Desktop\\" + STR_TRANSNAME_MYDOC "My Documents\\" + STR_TRANSNAME_IE "IE Cache\\" + STR_TRANSNAME_TEMP "TEMP\\" + STR_TRANSNAME_APPDATA "App Data\\" + STR_PRINT_SET_NAME "Print settings" + STR_TYPE_NAME_BASIS "Default" + STR_TYPE_NAME_RICHTEXT "Rich text" + STR_TYPE_NAME_TEXT "Text" + STR_TYPE_NAME_DOS "MS-DOS batch file" +END + +STRINGTABLE +BEGIN + STR_PLGMGR_NEWPLUGIN "Not found new plugin" + STR_PLGMGR_INSTALL "Are you sure you want to install %s?" + STR_PLGMGR_INSTALL_ERR "Failed to install %s\nReason: %ls" + STR_PLGMGR_ERR_ZIP "Can't use ZIP file." + STR_PLGMGR_ERR_FOLDER "Not found plugins folder" + STR_PLGMGR_ERR_CREATEDIR "Can't create plugins folder." + STR_PLGMGR_INST_ZIP_ACCESS "Can't access ZIP file [%s]" + STR_PLGMGR_INST_ZIP_DEF "Not found plugin Define file(plugin.def) in ZIP file [%s]" + STR_PLGMGR_INST_ZIP_ALREADY "Already install [%s]\nDo you overwrite?" + STR_PLGMGR_INST_ZIP_INST "Do you install ZIP plugin [%s] for [%s]?" + STR_PLGMGR_INST_ZIP_UNZIP "Error unzip ZIP plugin [%s]" + STR_PLGMGR_INST_ZIP_ERR "Can't install plugin [%s]\nReason: %ls" + STR_PLGMGR_INST_DEF "Not found plugin Define file(plugin.def)" + STR_PLGMGR_INST_ID "Not found Plugin.ID" + STR_PLGMGR_INST_RESERVE1 "Don't Use """ + STR_PLGMGR_INST_RESERVE2 """ in Plugin.ID" +END + +#endif // 英語 (米国) resources ///////////////////////////////////////////////////////////////////////////// @@ -4206,7 +4130,7 @@ IDR_MENU1 ID_RC_TYPE_INI "../resource/MainMenu.ini" // // Generated from the TEXTINCLUDE 3 resource. // - +#include "sakura_lang_rc.rc2" ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED diff --git a/sakura_lang_en_US/sakura_lang_rc.rc2 b/sakura_lang_en_US/sakura_lang_rc.rc2 new file mode 100644 index 0000000000..996875eb60 --- /dev/null +++ b/sakura_lang_en_US/sakura_lang_rc.rc2 @@ -0,0 +1,151 @@ +// このファイルにはリソースエディタで編集できない要素を配置します. +// このファイルのエンコーディング/改行コードは UTF-16LE(BOM)/CRLF です. + +#define S_COPYRIGHT "Copyright (C) 1998-2020 by Norio Nakatani & Collaborators" +#define S_COPYRIGHT_TRANSLATION "Copyright (C) 2011-2020 by Lucien & Collaborators" +#define FL_VER PR_VER +#define FL_VER_STR PR_VER_STR + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_ABOUT DIALOG 0, 0, 245, 228 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Version Information" +FONT 9, "Tahoma" +BEGIN + ICON IDI_ICON_STD, IDC_STATIC_MYICON, 5, 5, 20, 20, SS_NOTIFY + EDITTEXT IDC_EDIT_VER, 33, 6, 204, 51, ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "Original Author: Take-san(竹パンダ) さん", IDC_STATIC, 33, 61, 125, 8, NOT WS_GROUP + LTEXT S_COPYRIGHT, IDC_STATIC, 33, 75, 205, 8, NOT WS_GROUP | SS_NOPREFIX + LTEXT "Translation:",IDC_STATIC,33,90,41,8 + LTEXT S_COPYRIGHT_TRANSLATION,IDC_STATIC,74,90,164,8,SS_NOPREFIX | NOT WS_GROUP + LTEXT "Project URL:", IDC_STATIC_URL_CAPTION, 33, 103, 71, 8, NOT WS_GROUP + LTEXT "https://sakura-editor.github.io/", IDC_STATIC_URL_UR, 101, 103, 120, 8, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP +#ifdef GIT_REMOTE_ORIGIN_URL + LTEXT "Source URL:", IDC_STATIC_GIT_CAPTION, 33, 113, 71, 8, NOT WS_GROUP + LTEXT GIT_REMOTE_ORIGIN_URL, IDC_STATIC_URL_GIT, 101, 113, 120, 8, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP +#endif +#ifdef CI_BUILD_NUMBER_LABEL + LTEXT "Build URL:", IDC_STATIC_URL_CI_BUILD_CAPTION, 33, 123, 71, 8, NOT WS_GROUP + LTEXT CI_BUILD_NUMBER_LABEL, IDC_STATIC_URL_CI_BUILD, 101, 123, 120, 8, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP +#endif +#if defined( GITHUB_COMMIT_URL ) || defined( GITHUB_PR_HEAD_URL ) + LTEXT "GitHub URL:", IDC_STATIC_URL_GITHUB_CAPTION, 33, 133, 50, 8, NOT WS_GROUP +#endif +#if defined( GITHUB_COMMIT_URL ) + LTEXT GIT_SHORT_COMMIT_HASH, IDC_STATIC_URL_GITHUB_COMMIT, 101, 133, 30, 8, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP +#endif +#if defined( GITHUB_PR_HEAD_URL ) + LTEXT GITHUB_PR_NUMBER_LABEL, IDC_STATIC_URL_GITHUB_PR, 150, 133, 30, 8, SS_NOTIFY | NOT WS_GROUP | WS_TABSTOP +#endif + EDITTEXT IDC_EDIT_ABOUT, 5, 146, 233, 53, ES_MULTILINE | ES_READONLY | WS_VSCROLL | NOT WS_TABSTOP + DEFPUSHBUTTON "&OK", IDOK, 97, 203, 50, 14 + PUSHBUTTON "&Copy to Clipboard", IDC_BUTTON_COPY, 178, 203, 60, 14 +END + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_ABOUT, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 238 + TOPMARGIN, 7 + BOTTOMMARGIN, 196 + END +END +#endif // APSTUDIO_INVOKED + + +#ifndef _MAC +///////////////////////////////////////////////////////////////////////////// +// +// Version +// +VS_VERSION_INFO VERSIONINFO + FILEVERSION FL_VER + PRODUCTVERSION PR_VER + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x01L +#else + FILEFLAGS 0x00L +#endif + FILEOS 0x40004L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "Comments", "This is free software\0" + VALUE "CompanyName", "Project: Sakura-Editor\0" + VALUE "FileDescription", "Sakura Editor Language DLL(en_US)\0" + VALUE "FileVersion", FL_VER_STR + VALUE "InternalName", "sakura\0" + VALUE "LegalCopyright", S_COPYRIGHT_TRANSLATION + VALUE "LegalTrademarks", " \0" + VALUE "OriginalFilename", "sakura.exe\0" + VALUE "ProductName", "Sakura Editor Language DLL\0" + VALUE "ProductVersion", RESOURCE_VERSION_STRING(PR_VER_STR) // e.g. "2.3.2.0 4a0de579 UNICODE 64bit DEBUG" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +#endif // !_MAC + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +#ifdef _DEBUG +IDI_ICON_STD ICON "../resource/icon_debug.ico" +#else +IDI_ICON_STD ICON "../resource/icon_std.ico" +#endif + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + // Select Language + STR_SELLANG_NAME "English (United States)" // language name [Primary language (Sublanguage)] + STR_SELLANG_LANGID "0x0409" // language id (hexadecimal string) + // See following link: + // http://msdn.microsoft.com/en-us/library/dd318693.aspx + + // CBregexp.cpp +#ifdef _M_IA64 + STR_BREGONIG_LOAD "failed to load the bregonig.dll.\r\nRegex relies upon bregonig.dll(Uniocde/IA64 ver) to work.\r\nPlease refer to the help for assistance." +#elif defined(_M_AMD64) + STR_BREGONIG_LOAD "failed to load the bregonig.dll.\r\nRegex relies upon bregonig.dll(Uniocde/x64 ver) to work.\r\nPlease refer to the help for assistance." +#else + STR_BREGONIG_LOAD "failed to load the bregonig.dll.\r\nRegex relies upon bregonig.dll(Uniocde ver) to work.\r\nPlease refer to the help for assistance." +#endif +#ifdef _M_IA64 + STR_BREGONIG_INIT "failed to init the bregonig.dll.\r\nRegex relies upon bregonig.dll(Uniocde/IA64 ver) to work.\r\nPlease refer to the help for assistance." +#elif defined(_M_AMD64) + STR_BREGONIG_INIT "failed to init the bregonig.dll.\r\nRegex relies upon bregonig.dll(Uniocde/x64 ver) to work.\r\nPlease refer to the help for assistance." +#else + STR_BREGONIG_INIT "failed to init the bregonig.dll.\r\nRegex relies upon bregonig.dll(Uniocde ver) to work.\r\nPlease refer to the help for assistance." +#endif +END From 8a4d7d1d7dd32bb34b7ca7a73e5e94eb12d4a284 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sun, 8 Nov 2020 02:53:31 +0900 Subject: [PATCH 0263/1024] =?UTF-8?q?MinGW=E3=83=93=E3=83=AB=E3=83=89?= =?UTF-8?q?=E3=82=A8=E3=83=A9=E3=83=BC=E8=A7=A3=E6=B6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build-gnu.bat | 10 ++++++++++ sakura_core/Makefile | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/build-gnu.bat b/build-gnu.bat index 5ca914952b..2f67a11945 100644 --- a/build-gnu.bat +++ b/build-gnu.bat @@ -28,12 +28,22 @@ if "%configuration%" == "Release" ( @rem path=C:\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev1\mingw64\bin;%path% path=C:\msys64\mingw64\bin;%path% +@rem Preparation for resource compile (windres.exe cannot recognize utf-16) +set rc_dir=sakura_core\_rc_utf8 +if not exist %rc_dir% mkdir %rc_dir% +for %%i in (sakura_core\*.rc?) do ( + C:\msys64\usr\bin\iconv -f utf-16 -t utf-8 %%i > %rc_dir%\%%~nxi% +) + @echo mingw32-make -C sakura_core MYDEFINES="%MYDEFINES%" MYCFLAGS="%MYCFLAGS%" MYLIBS="%MYLIBS%" mingw32-make -C sakura_core MYDEFINES="%MYDEFINES%" MYCFLAGS="%MYCFLAGS%" MYLIBS="%MYLIBS%" -j4 if errorlevel 1 ( echo error 2 errorlevel %errorlevel% exit /b 1 ) + +rmdir /s /q %rc_dir% + exit /b 0 diff --git a/sakura_core/Makefile b/sakura_core/Makefile index 03a84050ab..defc680f49 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -144,7 +144,7 @@ $(OBJS): StdAfx.h.gch $(HEADERMAKE): $(HEADERMAKETOOLDIR)/HeaderMake.cpp $(CXX) $(CXXFLAGS:-MMD=) $< -o $@ -static-libgcc -sakura_rc.o: sakura_rc.rc githash.h Funccode_define.h +sakura_rc.o: _rc_utf8\sakura_rc.rc githash.h Funccode_define.h $(RC) -c utf-8 --language=0411 $(DEFINES) -I. -I$(SRCDIR) $< -o $@ clean: From 441f91543f4f9c12fef291301e5c260e1b1b975f Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sun, 8 Nov 2020 20:45:16 +0900 Subject: [PATCH 0264/1024] =?UTF-8?q?sakura=5Frc.h,sakura=5Flang=5Fen=5FUS?= =?UTF-8?q?.vcxproj.filters=E3=81=AE=E6=94=B9=E8=A1=8C=E3=82=B3=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=82=92LF=E3=81=AB=E8=A8=AD=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitattributes | 3 +- sakura_core/sakura_rc.h | 1680 ++++++++--------- .../sakura_lang_en_US.vcxproj.filters | 178 +- 3 files changed, 931 insertions(+), 930 deletions(-) diff --git a/.gitattributes b/.gitattributes index e9191fea64..09de1145cf 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,6 +2,7 @@ *.khp text *.hkn text *.bat text -Makefile text eolf=lf +Makefile text eol=lf +sakura_rc.h text eol=crlf *.rc text working-tree-encoding=utf-16le-bom eol=crlf *.rc2 text working-tree-encoding=utf-16le-bom eol=crlf diff --git a/sakura_core/sakura_rc.h b/sakura_core/sakura_rc.h index dfe0a09378..512e326cfa 100644 --- a/sakura_core/sakura_rc.h +++ b/sakura_core/sakura_rc.h @@ -1,840 +1,840 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ で生成されたインクルード ファイル。 -// sakura_rc.rc で使用 -// -#define ID_RC_TYPE_INI 100 -#define IDR_MENU1 102 -#define IDR_TRAYMENU_L 103 -#define IDD_FIND 110 -#define IDD_ABOUT 111 -#define IDD_JUMP 112 -#define IDD_FUNCLIST 113 -#define IDD_GREP 114 -#define IDD_GREPRUNNING 115 -#define IDD_REPLACE 116 -#define IDD_REPLACERUNNING 117 -#define IDD_PROPERTY_FILE 118 -#define IDD_INPUT1 119 -#define IDD_COMPARE 120 -#define IDD_PRINTPREVIEWBAR 121 -#define IDD_PRINTSETTING 122 -#define IDD_EXITING 123 -#define IDD_EXEC 125 -#define IDD_EXECRUNNING 126 -#define IDD_HOKAN 127 -#define IDD_PRINTING 128 -#define IDD_FILEOPEN 130 -#define IDD_FILEUPDATEQUERY 131 -#define IDD_FAVORITE 132 -#define IDD_TAGJUMPLIST 133 -#define IDD_TAG_MAKE 134 -#define IDD_OPERATIONRUNNING 135 -#define IDD_DIFF 136 -#define IDD_CTRLCODE 137 -#define IDD_MACRORUNNING 138 -#define IDD_SETCHARSET 139 -#define IDD_GREP_REPLACE 140 -#define IDD_WINLIST 141 -#define IDB_MYTOOL 200 -#define IDB_SCROLL_CENTER 201 -#define IDB_SCROLL_VERTICAL 202 -#define IDB_SCROLL_HORIZONTAL 203 -#define IDI_ICON_STD 210 -#define IDI_ICON_GREP 212 -#define IDI_PRINTER 215 -#define IDC_CURSOR_COPYARROW 220 -#define IDC_CURSOR_MOVEARROW 222 -#define IDC_CURSOR_RVARROW 223 -#define IDC_CURSOR_ISEARCH_F 224 -#define IDC_CURSOR_ISEARCH_B 225 -#define IDC_CURSOR_TAB_SEPARATE 228 -#define IDC_CURSOR_TAB_JOIN 229 -#define IDC_CURSOR_AUTOSCROLL_CENTER 230 -#define IDC_CURSOR_AUTOSCROLL_VERTICAL 231 -#define IDC_CURSOR_AUTOSCROLL_HORIZONTAL 232 -#define IDC_CURSOR_AUTOSCROLL_UP 233 -#define IDC_CURSOR_AUTOSCROLL_DOWN 234 -#define IDC_CURSOR_AUTOSCROLL_LEFT 235 -#define IDC_CURSOR_AUTOSCROLL_RIGHT 236 -#define IDC_CURSOR_AUTOSCROLL_UP_LEFT 237 -#define IDC_CURSOR_AUTOSCROLL_UP_RIGHT 238 -#define IDC_CURSOR_AUTOSCROLL_DOWN_LEFT 239 -#define IDC_CURSOR_AUTOSCROLL_DOWN_RIGHT 240 -#define IDC_BUTTON_PRINTERSELECT 1000 -#define IDC_CHK_LOHICASE 1001 -#define IDC_CHECK_INDENT 1002 -#define IDC_CHK_REGULAREXP 1003 -#define IDC_COMBO_INDENTLAYOUT 1004 -#define IDC_CHECK_INDENT_WSPACE 1005 -#define IDC_CHECK_STOPS_BOTH_ENDS_WHEN_SEARCH_WORD 1006 -#define IDC_CHECK_GTJW_RETURN 1007 -#define IDC_CHECK_STOPS_BOTH_ENDS_WHEN_SEARCH_PARAGRAPH 1008 -#define IDC_CHECK_RTRIM_PREVLINE 1009 -#define IDC_CHECK_FREECARET 1010 -#define IDC_BUTTON_CLEAR_MRU_FOLDER 1011 -#define IDC_BUTTON_RELEASE 1012 -#define IDC_COMBO_TEXT 1013 -#define IDC_COMBO_TEXT2 1014 -#define IDC_CHECK_GTJW_LDBLCLK 1015 -#define IDC_EDIT_MAXLINELEN 1016 -#define IDC_EDIT_CHARSPACE 1017 -#define IDC_SPIN_MAXLINELEN 1018 -#define IDC_SPIN_CHARSPACE 1019 -#define IDC_EDIT_LINESPACE 1020 -#define IDC_SPIN_LINESPACE 1021 -#define IDC_SPIN_REPEATEDSCROLLLINENUM 1022 -#define IDC_EDIT_TABVIEWSTRING 1023 -#define IDC_SPIN_TABSPACE 1024 -#define IDC_EDIT_TABSPACE 1025 -#define IDC_BUTTON_TEXTCOLOR 1026 -#define IDC_BUTTON_BACKCOLOR 1027 -#define IDC_STATIC_JRE32VER 1028 -#define IDC_COMBO_FILESHAREMODE 1029 -#define IDC_CHECK_bUneditableIfUnwritable 1030 -#define IDC_CHECK_NOMOVE_ACTIVATE_BY_MOUSE 1032 -#define IDC_EDIT_LINENUM 1033 -#define IDC_CHECK_BACKUP 1034 -#define IDC_CHECK_EXITCONFIRM 1035 -#define IDC_CHECK_PLSQL 1036 -#define IDC_CHECK_SHIFT 1037 -#define IDC_CHK_FROMTHISTEXT 1038 -#define IDC_CHECK_TOOLBARISFLAT 1039 -#define IDC_CHECK_RELOADWHENEXECUTE 1040 -#define IDC_CHECK_DOCICON 1041 -#define IDC_CHECK_LCPOS2 1042 -#define IDC_CHECK_SplitterWndHScroll 1043 -#define IDC_RADIO_BACKUP_TYPE1 1044 -#define IDC_RADIO_BACKUP_TYPE3 1045 -#define IDC_RADIO_OUTPUTMARKED 1046 -#define IDC_RADIO_ALLAREA 1047 -#define IDC_RADIO_CARETTYPE1 1048 -#define IDC_CHECK_LCPOS3 1049 -#define IDC_RADIO_FUNCKEYWND_PLACE2 1050 -#define IDC_CHECK_BACKUP_YEAR 1051 -#define IDC_CHECK_ALT 1052 -#define IDC_CHECK_DispTabIcon 1053 -#define IDC_CHECK_BACKUP_HOUR 1054 -#define IDC_CHECK_BACKUP_MIN 1055 -#define IDC_CHECK_BACKUP_SEC 1056 -#define IDC_CHECK_BACKUPDIALOG 1057 -#define IDC_CHECK_BACKUPFOLDER 1058 -#define IDC_CHECK_UNDERLINE 1059 -#define IDC_EDIT_INPUT1 1060 -#define IDC_EDIT_PROPERTY 1061 -#define IDC_EDIT_BACKUPFOLDER 1062 -#define IDC_EDIT_EXTHELP1 1063 -#define IDC_EDIT_PLSQL_E1 1064 -#define IDC_EDIT_BLOCKCOMMENT_FROM 1065 -#define IDC_EDIT_TYPENAME 1066 -#define IDC_BUTTON_BACKUP_FOLDER_REF 1067 -#define IDC_BUTTON_REPALCE 1068 -#define IDC_BUTTON_DELETE 1069 -#define IDC_BUTTON_DELKEYWORD 1070 -#define IDC_EDIT_EXTHTMLHELP 1071 -#define IDC_EDIT_TFORM 1072 -#define IDC_EDIT_BLOCKCOMMENT_FROM2 1073 -#define IDC_EDIT_FNAME_TO 1074 -#define IDC_CHECK_BACKUP_MONTH 1075 -#define IDC_BUTTON_INSERTSEPARATOR 1076 -#define IDC_BUTTON_ZOOMUP 1077 -#define IDC_EDIT_MIGEMO_DLL 1078 -#define IDC_CHECK_BACKUP_DAY 1079 -#define IDC_BUTTON_INSERTWRAP 1080 -#define IDC_EDIT_MIGEMO_DICT 1081 -#define IDC_CHECK_AUTOSAVE 1082 -#define IDC_CHECK_BACKUP_DUSTBOX 1083 -#define IDC_LIST_FL 1084 -#define IDC_CHECK_DispTOOLBAR 1085 -#define IDC_EDIT_AUTOBACKUP_INTERVAL 1086 -#define IDC_BUTTON_OPENHELP1 1087 -#define IDC_BUTTON_OPENEXTHTMLHELP 1088 -#define IDC_EDIT_REPEATEDSCROLLLINENUM 1089 -#define IDC_BUTTON_KEYWORDHELPFONT 1090 -#define IDC_BUTTON_HELP 1091 -#define IDC_BUTTON_OPENMDLL 1092 -#define IDC_BUTTON_OPENMDICT 1093 -#define IDC_EDIT_BLOCKCOMMENT_TO 1095 -#define IDC_EDIT_BLOCKCOMMENT_TO2 1096 -#define IDC_EDIT_TYPEEXTS 1097 -#define IDC_EDIT_MARGINTY 1098 -#define IDC_EDIT_nRulerBottomSpace 1099 -#define IDC_EDIT_LINECOMMENT 1100 -#define IDC_EDIT_INDENTCHARS 1101 -#define IDC_EDIT_MAX_MRU_FOLDER 1102 -#define IDC_EDIT_MARGINBY 1103 -#define IDC_EDIT_nLineNumberRightSpace 1104 -#define IDC_EDIT_LINECOMMENT2 1105 -#define IDC_EDIT_MARGINLX 1106 -#define IDC_LIST_FUNC 1107 -#define IDC_EDIT_MARGINRX 1108 -#define IDC_COMBO_FUNCKIND 1109 -#define IDC_EDIT_DANSPACE 1110 -#define IDC_EDIT_LINECOMMENT3 1111 -#define IDC_LIST_KEY 1112 -#define IDC_CHECK_CTRL 1113 -#define IDC_CHECK_ADDCRLFWHENCOPY 1114 -#define IDC_COMBO_FILE 1115 -#define IDC_COMBO_nSortType 1116 -#define IDC_COMBO_FOLDER 1117 -#define IDC_STATIC_STC32 1118 -#define IDC_COMBO_SETTINGNAME 1119 -#define IDC_COMBO_PAPER 1120 -#define IDC_BUTTON_FOLDER 1121 -#define IDC_CHK_SUBFOLDER 1122 -#define IDC_STATIC_CURPATH 1123 -#define IDC_CHK_DEFAULTFOLDER 1124 -#define IDC_STATIC_HITCOUNT 1125 -#define IDC_EDIT_VER 1126 -#define IDC_LIST_ASSIGNEDKEYS 1127 -#define IDC_STATIC_MSG 1128 -#define IDC_RADIO_OUTPUTLINE 1129 -#define IDC_RADIO_SELECTEDAREA 1130 -#define IDC_BUTTON_REPALCEALL 1131 -#define IDC_BUTTON_SEARCHPREV 1132 -#define IDC_CHECK_CONSECUTIVEALL 1133 -#define IDC_BUTTON_SEARCHNEXT 1134 -#define IDC_LIST_RES 1135 -#define IDC_BUTTON_SETMARK 1136 -#define IDC_TREE_FL 1137 -#define IDC_BUTTON_ADD 1138 -#define IDC_BUTTON_INSERT 1139 -#define IDC_BUTTON_REGEX_INS 1140 -#define IDC_BUTTON_UP 1141 -#define IDC_BUTTON_DOWN 1142 -#define IDC_BUTTON_SAMEBKCOLOR 1143 -#define IDC_CHECK_REPEATEDSCROLLSMOOTH 1144 -#define IDC_BUTTON_SAMETEXTCOLOR 1145 -#define IDC_COMBO_CODE 1146 -#define IDC_RADIO_CARETTYPE0 1147 -#define IDC_COMBO_EOL 1148 -#define IDC_BUTTON_COPY 1149 -#define IDC_COMBO_STRINGLITERAL 1150 -#define IDC_CHECK_STRINGLINEONLY 1151 -#define IDC_LIST_TYPES 1152 -#define IDC_RADIO_OUTPUTSTYLE1 1153 -#define IDC_COMBO_PLSQLBLOCKS 1154 -#define IDC_COMBO_MRU 1155 -#define IDC_CHECK_KEYWORDCASE 1156 -#define IDC_COMBO_OPENFOLDER 1157 -#define IDC_BUTTON_ADDKEYWORD 1158 -#define IDC_BUTTON_IMPORT 1159 -#define IDC_BUTTON_EXPORT 1160 -#define IDC_BUTTON_ADDSET 1161 -#define IDC_BUTTON_EDITKEYWORD 1162 -#define IDC_BUTTON_DELSET 1163 -#define IDC_COMBO_SET 1164 -#define IDC_LIST_KEYWORD 1165 -#define IDC_SPIN_MAX_MRU_FILE 1166 -#define IDC_SPIN_MAX_MRU_FOLDER 1167 -#define IDC_SPIN_nDropFileNumMax 1168 -#define IDC_SPIN_nRulerBottomSpace 1169 -#define IDC_EDIT_MAX_MRU_FILE 1170 -#define IDC_SPIN_PLSQL_E1 1171 -#define IDC_SPIN_LCColNum2 1172 -#define IDC_SPIN_nLineNumberRightSpace 1173 -#define IDC_BUTTON_CLEAR_MRU_FILE 1174 -#define IDC_SPIN_LCColNum3 1175 -#define IDC_COMBO_MENU 1176 -#define IDC_RADIO_FUNCKEYWND_PLACE1 1177 -#define IDC_CHECK_DispFUNCKEYWND 1178 -#define IDC_CHECK_NOTIFYNOTFOUND 1179 -#define IDC_EDIT_MIDASHIKIGOU 1180 -#define IDC_EDIT_INYOUKIGOU 1181 -#define IDC_PROGRESS_REPLACE 1182 -#define IDC_STATIC_KENSUU 1183 -#define IDC_STATIC_MYICON 1184 -#define IDC_EDIT_HOKANFILE 1185 -#define IDC_BUTTON_HOKANFILE_REF 1186 -#define IDC_COMBO_HOKAN_TYPE 1187 -#define IDC_LIST_COLORS 1188 -#define IDC_CHECK_DISP 1189 -#define IDC_CHECK_BOLD 1190 -#define IDC_RADIO_LINENUM_LAYOUT 1191 -#define IDC_RADIO_LINENUM_CRLF 1192 -#define IDC_STATIC_HAIKEI 1193 -#define IDC_COMBO_CHARSET 1194 -#define IDC_RADIO_LINETERMTYPE2 1195 -#define IDC_EDIT_LINETERMCHAR 1196 -#define IDC_RADIO_LINETERMTYPE0 1197 -#define IDC_RADIO_LINETERMTYPE1 1198 -#define IDC_LIST_FILES 1199 -#define IDC_STATIC_COMPARESRC 1200 -#define IDC_CHECK_HOKANLOHICASE 1201 -#define IDC_BUTTON_NEXTPAGE 1202 -#define IDC_BUTTON_ZOOMDOWN 1203 -#define IDC_BUTTON_PRINTSETTING 1204 -#define IDC_EDIT_LINECOMMENTPOS 1205 -#define IDC_BUTTON_PREVPAGE 1206 -#define IDC_EDIT_LINECOMMENTPOS2 1207 -#define IDC_SPIN_MARGINTY 1208 -#define IDC_EDIT_LINECOMMENTPOS3 1209 -#define IDC_SPIN_MARGINBY 1210 -#define IDC_SPIN_MARGINLX 1211 -#define IDC_SPIN_MARGINRX 1212 -#define IDC_SPIN_FONTHEIGHT 1213 -#define IDC_SPIN_DANSUU 1214 -#define IDC_EDIT_FOOT1 1215 -#define IDC_COMBO_FONT_HAN 1216 -#define IDC_COMBO_FONT_ZEN 1217 -#define IDC_SPIN_DANSPACE 1218 -#define IDC_EDIT_FONTHEIGHT 1219 -#define IDC_EDIT_DANSUU 1220 -#define IDC_CHECK_WORDWRAP 1221 -#define IDC_CHECK_LINENUMBER 1222 -#define IDC_CHECK_KINSOKUHEAD 1223 -#define IDC_BUTTON_EDITSETTINGNAME 1224 -#define IDC_CHECK_KINSOKUTAIL 1225 -#define IDC_STATIC_PAGENUM 1226 -#define IDC_CHECK_PS_KINSOKUHEAD 1227 -#define IDC_CHECK_KINSOKURET 1228 -#define IDC_STATIC_ZOOM 1229 -#define IDC_CHECK_PS_KINSOKUTAIL 1230 -#define IDC_CHECK_KINSOKUKUTO 1231 -#define IDC_CHECK_PS_KINSOKURET 1232 -#define IDC_CHECK_PS_KINSOKUKUTO 1233 -#define IDC_EDIT_HEAD1 1234 -#define IDC_STATIC_PRNDEV 1235 -#define IDC_STATIC_PAPER 1236 -#define IDC_EDIT_KEYSFUNC 1237 -#define IDC_BUTTON_ASSIGN 1238 -#define IDC_EDIT_HEAD2 1239 -#define IDC_EDIT_HEAD3 1240 -#define IDC_BUTTON_CURRENTFOLDER 1241 -#define IDC_EDIT_FOOT2 1243 -#define IDC_CHECK_USETRAYICON 1244 -#define IDC_EDIT_FOOT3 1245 -#define IDC_CHECK_STAYTASKTRAY 1246 -#define IDC_CHECK_DispSTATUSBAR 1247 -#define IDC_RADIO_OUTPUTSTYLE2 1248 -#define IDC_CHECK_DispTabWnd 1249 -#define IDC_STATIC_ENABLECOLUMNS 1250 -#define IDC_STATIC_ENABLELINES 1251 -#define IDC_HOTKEY_TRAYMENU 1252 -#define IDC_CHECK_ENABLEUNMODIFIEDOVERWRITE 1253 -#define IDC_CHECK_DRAGDROP 1254 -#define IDC_CHECK_DROPSOURCE 1255 -#define IDC_CHECK_COPYnDISABLESELECTEDAREA 1256 -#define IDC_CHECK_HTMLHELPISSINGLE 1257 -#define IDC_CHECK_bEnableLineModePaste 1258 -#define IDC_CHECK_bSelectClickedURL 1259 -#define IDC_EDIT_nRulerHeight 1260 -#define IDC_CHECK_bEnableNoSelectCopy 1261 -#define IDC_CHECK_bGrepExitConfirm 1262 -#define IDC_CHECK_TILE_H 1263 -#define IDC_CHECK_bDropFileAndClose 1264 -#define IDC_EDIT_nDropFileNumMax 1265 -#define IDC_CHECK_bCheckFileTimeStamp 1266 -#define IDC_CHECK_bNotOverWriteCRLF 1267 -#define IDC_COMBO_OUTLINES 1268 -#define IDC_COMBO_SMARTINDENT 1269 -#define IDC_BUTTON_REFERENCE 1270 -#define IDC_COMBO_IMESTATE 1271 -#define IDC_CHECK_bAutoCloseDlgFind 1272 -#define IDC_COMBO_IMESWITCH 1273 -#define IDC_CHECK_bScrollBarHorz 1274 -#define IDC_CHECK_bAutoCloseDlgFuncList 1275 -#define IDC_CHECK_bAutoCloseDlgReplace 1276 -#define IDC_CHECK_bMarkUpBlankLineEnable 1277 -#define IDC_CHECK_bFunclistSetFocusOnJump 1278 -#define IDC_STATIC_CURFILE 1279 -#define IDC_PROGRESS 1280 -#define IDC_LIST_WORDS 1281 -#define IDC_CHECK_m_bHokanKey_RETURN 1282 -#define IDC_CHECK_m_bHokanKey_TAB 1283 -#define IDC_CHECK_m_bHokanKey_RIGHT 1284 -#define IDC_RADIO_DFORM_0 1285 -#define IDC_RADIO_DFORM_1 1286 -#define IDC_EDIT_DFORM_EX 1287 -#define IDC_RADIO_TFORM_0 1288 -#define IDC_RADIO_TFORM_1 1289 -#define IDC_EDIT_TFORM_EX 1290 -#define IDC_EDIT_DFORM 1291 -#define IDC_RADIO_PORTRAIT 1293 -#define IDC_RADIO_BACKUP_DATETYPE1 1294 -#define IDC_RADIO_REPLACE 1295 -#define IDC_RADIO_DIFF_FILE1 1296 -#define IDC_RADIO_DIFF_FILE2 1297 -#define IDC_RADIO_OUTLINEDEFAULT 1298 -#define IDC_RADIO_LANDSCAPE 1300 -#define IDC_RADIO_BACKUP_DATETYPE2 1301 -#define IDC_RADIO_INSERT 1302 -#define IDC_RADIO_OUTLINERULEFILE 1303 -#define IDC_RADIO_ADD 1304 -#define IDC_RADIO_DIFF_DST1 1305 -#define IDC_RADIO_DIFF_DST2 1306 -#define IDC_EDIT_BACKUP_3 1307 -#define IDC_MACROPATH 1308 -#define IDC_EDIT_TAG_MAKE_CMDLINE 1309 -#define IDC_EDIT_WX 1310 -#define IDC_EDIT_VERTLINE 1311 -#define IDC_COMBO_m_szCommand 1312 -#define IDC_EDIT_WY 1313 -#define IDC_CHECK_GETSTDOUT 1314 -#define IDC_EDIT_SX 1315 -#define IDC_STATIC_CMD 1316 -#define IDC_EDIT_SY 1317 -#define IDC_STATIC_JOBNAME 1318 -#define IDC_STATIC_PROGRESS 1319 -#define IDC_CHECK_bMenuIcon 1322 -#define IDC_LABEL_BACKUP_3 1323 -#define IDC_LABEL_BACKUP_4 1324 -#define IDC_LABEL_AUTOSAVE 1325 -#define IDC_LABEL_AUTOSAVE2 1326 -#define IDC_LABEL_AUTOSAVE3 1327 -#define IDC_LABEL_AUTOSAVE4 1328 -#define IDC_LABEL_MENUFUNC 1329 -#define IDC_LABEL_MENUFUNCKIND 1330 -#define IDC_LABEL_MENU 1331 -#define IDC_LABEL_MENUCHOICE 1332 -#define IDC_LABEL_MENUKEYCHANGE 1333 -#define IDC_LABEL_TOOLBAR 1334 -#define IDC_LABEL_MENUNAME 1335 -#define IDC_LABEL_KEYKIND 1336 -#define IDC_LABEL_FUNCtoKEY 1337 -#define IDC_LABEL_KEYtoFUNC 1338 -#define IDC_LABEL_LINETERMCHAR 1339 -#define IDC_LABEL_DFORM 1340 -#define IDC_LABEL_TFORM 1341 -#define IDC_LABEL_PLSQL1 1344 -#define IDC_LABEL_PLSQL2 1345 -#define IDC_LABEL_PLSQL3 1346 -#define IDC_SPIN_BACKUP_GENS 1347 -#define IDC_SPIN_AUTOBACKUP_INTERVAL 1348 -#define IDC_SPIN_nRulerHeight 1349 -#define IDC_CHECK_BACKUP_RETAINEXT 1350 -#define IDC_SPIN_LINENUM 1351 -#define IDC_LANEL_NOTE 1352 -#define IDC_CHECK_RestoreCurPosition 1353 -#define IDC_STATIC_URL_CAPTION 1354 -#define IDC_STATIC_URL_UR 1355 -#define IDC_CHECK_AutoMIMEDecode 1356 -#define IDC_EDIT_MENUNAME 1357 -#define IDC_CHECK_RestoreBookmarks 1358 -#define IDC_BUTTON_TEMPCHANGE 1359 -#define IDC_STATIC_EOL 1360 -#define IDC_BUTTON_JUMP 1361 -#define IDC_CHECK_LCPOS 1362 -#define IDC_SPIN_LCColNum 1363 -#define IDC_LABEL_LCPOS 1364 -#define IDC_LABEL_LCPOS2 1365 -#define IDC_LABEL_LCPOS3 1366 -#define IDC_MACRO_REG 1367 -#define IDC_COMBO_MACROID 1368 -#define IDC_BUTTON_REGEX_TOP 1369 -#define IDC_BUTTON_REGEX_LAST 1370 -#define IDC_MACROLIST 1371 -#define IDC_MACRONAME 1372 -#define IDC_EDIT_ABOUT 1373 -#define IDC_CHECK_SplitterWndVScroll 1374 -#define IDC_BUTTON_REGEX_UPD 1375 -#define IDC_CHK_WORD 1376 -#define IDC_BUTTON_REGEX_DEL 1377 -#define IDC_CHECK_SameTabWidth 1378 -#define IDC_MACRODIR 1379 -#define IDC_MACRODIRREF 1380 -#define IDC_BUTTON_MENUNAME 1381 -#define IDC_EDIT_REGEX 1382 -#define IDC_CHECK_REGEX 1383 -#define IDC_LIST_REGEX 1384 -#define IDC_COMBO_REGEX_COLOR 1385 -#define IDC_LABEL_REGEX_COLOR 1386 -#define IDC_LABEL_REGEX_KEYWORD 1387 -#define IDC_BUTTON_REGEX_UP 1388 -#define IDC_BUTTON_REGEX_DOWN 1389 -#define IDC_BUTTON_REGEX_ADD 1390 -#define IDC_BUTTON_REGEX_IMPORT 1391 -#define IDC_BUTTON_REGEX_EXPORT 1392 -#define IDC_FRAME_REGEX 1393 -#define IDC_LABEL_REGEX_VERSION 1394 -#define IDC_CHECK_INS_SPACE 1395 -#define IDC_CHK_PASTE 1396 -#define IDC_CHECK_SEARCHALL 1397 -#define IDC_EDIT_TYPEEXTHELP 1398 -#define IDC_EDIT_TYPEEXTHTMLHELP 1399 -#define IDC_BUTTON_TYPEOPENHELP 1400 -#define IDC_BUTTON_TYPEOPENEXTHTMLHELP 1401 -#define IDC_CHECK_TYPEHTMLHELPISSINGLE 1402 -#define IDC_CHECK_DispTabWndMultiWin 1403 -#define IDC_EDIT_OUTLINERULEFILE 1404 -#define IDC_BUTTON_RULEFILE_REF 1405 -#define IDC_EDIT_KINSOKUHEAD 1406 -#define IDC_STATIC_DIFF_SRC 1407 -#define IDC_EDIT_KINSOKUTAIL 1408 -#define IDC_EDIT_DIFF_DST 1409 -#define IDC_BUTTON_DIFF_DST 1410 -#define IDC_SPIN_FUNCKEYWND_GROUPNUM 1411 -#define IDC_CHECK_DIFF_OPT_CASE 1412 -#define IDC_EDIT_FUNCKEYWND_GROUPNUM 1413 -#define IDC_CHECK_DIFF_OPT_SPACE 1414 -#define IDC_CHECK_DIFF_OPT_SPCCHG 1415 -#define IDC_STATIC_nSortType 1416 -#define IDC_BTN_RELOAD 1417 -#define IDC_CHECK_DIFF_OPT_BLINE 1418 -#define IDC_CHECK_DIFF_OPT_TABSPC 1419 -#define IDC_BTN_NOTIFYONLY 1420 -#define IDC_FRAME_DIFF_FILE12 1421 -#define IDC_LIST_DIFF_FILES 1422 -#define IDC_FILEUPDATEMSG 1423 -#define IDC_FRAME_DIFF_DST 1424 -#define IDC_LIST_CTRLCODE 1425 -#define IDC_BTN_NOSUPERVISION 1426 -#define IDC_BTN_CLOSE 1427 -#define IDC_UPDATEDFILENAME 1428 -#define IDC_QUERYRELOADMSG 1429 -#define IDC_BUTTON_FNAME_TOP 1430 -#define IDC_BUTTON_FNAME_UP 1431 -#define IDC_BUTTON_FNAME_DOWN 1432 -#define IDC_BUTTON_FNAME_LAST 1433 -#define IDC_BUTTON_FNAME_INS 1434 -#define IDC_BUTTON_FNAME_ADD 1435 -#define IDC_BUTTON_FNAME_UPD 1436 -#define IDC_BUTTON_FNAME_DEL 1437 -#define IDC_LIST_FNAME 1438 -#define IDC_EDIT_FNAME_FROM 1439 -#define IDC_CHECK_TAB_ARROW 1440 -#define IDC_TAB_FAVORITE 1441 -#define IDC_LIST_FAVORITE_FILE 1442 -#define IDC_LIST_FAVORITE_FOLDER 1443 -#define IDC_LIST_FAVORITE_GREP_FILE 1444 -#define IDC_LIST_FAVORITE_GREP_FOLDER 1445 -#define IDC_LIST_FAVORITE_REPLACE 1446 -#define IDC_LIST_FAVORITE_SEARCH 1447 -#define IDC_LIST_FAVORITE_CMD 1448 -#define IDC_BUTTON_CLEAR 1449 -#define IDC_LIST_TAGJUMP 1450 -#define IDC_WINCAPTION_ACTIVE 1451 -#define IDC_WINCAPTION_INACTIVE 1452 -#define IDC_CHECK_HOKANBYFILE 1453 -#define IDC_BUTTON_TAG_MAKE_REF 1454 -#define IDC_TABWND_CAPTION 1455 -#define IDC_CHECK_TAG_MAKE_RECURSE 1456 -#define IDC_EDIT_TAG_MAKE_FOLDER 1457 -#define IDC_FRAME_SEARCH_MSG 1458 -#define IDC_CHECK_DIFF_EXEC_STATE 1459 -#define IDC_STATIC_FAVORITE_MSG 1460 -#define IDC_CHECK_REALTIMEVIEW 1461 -#define IDC_CHECK_BOM 1462 -#define IDC_CHECK_GREPREALTIME 1463 -#define IDC_RADIO_WINSIZE_DEF 1464 -#define IDC_RADIO_WINSIZE_SAVE 1465 -#define IDC_RADIO_WINSIZE_SET 1466 -#define IDC_SPIN_WX 1467 -#define IDC_SPIN_WY 1468 -#define IDC_RADIO_WINPOS_DEF 1469 -#define IDC_RADIO_WINPOS_SAVE 1470 -#define IDC_RADIO_WINPOS_SET 1471 -#define IDC_SPIN_SX 1472 -#define IDC_SPIN_SY 1473 -#define IDC_COMBO_WINTYPE 1474 -#define IDC_BUTTON_WINSIZE 1475 -#define IDC_CHECK_QueryIfCodeChange 1476 -#define IDC_CHECK_AlertIfFileNotExist 1477 -#define IDC_COMBO1 1478 -#define IDC_COMBO2 1479 -#define IDC_COMBO3 1480 -#define IDC_COMBO4 1481 -#define IDC_COMBO5 1482 -#define IDC_COMBO6 1483 -#define IDC_COMBO7 1484 -#define IDC_COMBO8 1485 -#define IDC_COMBO9 1486 -#define IDC_COMBO10 1487 -#define IDC_BUTTON_KEYWORD_SELECT 1488 -#define IDC_STATIC_KEYWORD_COUNT 1489 -#define IDC_BUTTON_KEYSETRENAME 1490 -#define IDC_BUTTON_KEYCLEAN 1491 -#define IDC_KEYWORD 1492 -#define IDC_STATIC_KEYWORD 1493 -#define IDC_CHECK_ICASE 1494 -#define IDC_CHECK_ANYWHERE 1495 -#define IDC_EDIT_BACKUPFILE 1496 -#define IDC_CHECK_BACKUP_FOLDER_RM 1497 -#define IDC_CHECK_BACKUP_ADVANCED 1498 -#define IDC_RADIO_BACKUP_DATETYPE1A 1499 -#define IDC_RADIO_BACKUP_DATETYPE2A 1500 -#define IDC_LABEL_BACKUP_HELP2 1501 -#define IDC_CHECK_MEMDC 1502 -#define IDC_STATIC_COLOR 1503 -#define IDC_BUTTON_SELALL 1504 -#define IDC_BUTTON_SELNOTING 1505 -#define IDC_LIST_ITEMINFO 1506 -#define IDC_CHECK_NoFilterSaveNew 1507 -#define IDC_CHECK_NoFilterSaveFile 1508 -#define IDC_CHECK_CLOSEALLCONFIRM 1509 -#define IDC_CHECK_ANTIALIAS 1510 -#define IDC_CHECK_RetainEmptyWindow 1511 -#define IDC_BUTTON_DIRECTPAGE 1512 -#define IDC_CHECK_CloseOneWin 1513 -#define IDC_CHECK_bCaretTextForSearch 1514 -#define IDC_CHECK_ChgWndByWheel 1515 -#define IDC_LABEL_REGEXP 1516 -#define IDC_EDIT_REGEXPLIB 1517 -#define IDC_LABEL_REGEXP_VER 1518 -#define IDC_COMBO_CODE_GET 1519 -#define IDC_COMBO_CODE_SEND 1520 -#define IDC_CHECK_DISP_UNICODE_IN_SJIS 1521 -#define IDC_CHECK_DISP_UNICODE_IN_JIS 1522 -#define IDC_CHECK_DISP_UNICODE_IN_EUC 1523 -#define IDC_CHECK_DISP_UTF8_CODEPOINT 1524 -#define IDC_CHECK_DISP_SP_CODEPOINT 1525 -#define IDC_RADIO_OUTPUT 1526 -#define IDC_RADIO_EDITWINDOW 1527 -#define IDC_CHECK_SENDSTDIN 1528 -#define IDC_CHECK_SortTabList 1529 -#define IDC_COMBO_WRAPMETHOD 1530 -#define IDC_FRAME_KEYHELP 1531 -#define IDC_LIST_KEYHELP 1532 -#define IDC_LABEL_KEYHELP_KEYWORD 1533 -#define IDC_EDIT_KEYHELP 1534 -#define IDC_LABEL_KEYHELP_TITLE 1535 -#define IDC_BUTTON_KEYHELP_INS 1536 -#define IDC_BUTTON_KEYHELP_UPD 1537 -#define IDC_BUTTON_KEYHELP_DEL 1538 -#define IDC_BUTTON_KEYHELP_TOP 1539 -#define IDC_BUTTON_KEYHELP_UP 1540 -#define IDC_BUTTON_KEYHELP_DOWN 1541 -#define IDC_BUTTON_KEYHELP_LAST 1542 -#define IDC_BUTTON_KEYHELP_IMPORT 1543 -#define IDC_BUTTON_KEYHELP_EXPORT 1544 -#define IDC_LABEL_KEYHELP_ABOUT 1545 -#define IDC_CHECK_KEYHELP 1546 -#define IDC_LABEL_KEYHELP_PRIOR 1547 -#define IDC_BUTTON_KEYHELP_REF 1548 -#define IDC_CHECK_KEYHELP_ALLSEARCH 1549 -#define IDC_CHECK_KEYHELP_KEYDISP 1550 -#define IDC_CHECK_KEYHELP_PREFIX 1551 -#define IDC_SPIN_ALERT_FILESIZE 1552 -#define IDC_EDIT_ALERT_FILESIZE 1553 -#define IDC_CHECK_ALERT_IF_LARGEFILE 1554 -#define IDC_COMBO_WHEEL_HSCROLL 1555 -#define IDC_COMBO_WHEEL_PAGESCROLL 1556 -#define IDC_COMBO_DEFAULT_CODETYPE 1557 -#define IDC_CHECK_PRIOR_CESU8 1558 -#define IDC_CHECK_DISP_SELCOUNT_BY_BYTE 1559 -#define IDC_EDIT_KINSOKUKUTO 1560 -#define IDC_CHECK_MacroOnOpened 1562 -#define IDC_CHECK_MacroOnTypeChanged 1563 -#define IDC_CHECK_MacroOnSave 1564 -#define IDC_PLUGINLIST 1565 -#define IDC_CHECK_PluginEnable 1566 -#define IDC_PLUGIN_SearchNew 1567 -#define IDC_PLUGIN_Remove 1568 -#define IDC_LABEL_PLUGIN_Description 1569 -#define IDC_LABEL_PLUGIN_Author 1570 -#define IDC_LABEL_PLUGIN_Version 1571 -#define IDC_PLUGIN_OPTION 1572 -#define IDC_LIST_PLUGIN_OPTIONS 1573 -#define IDC_EDIT_PLUGIN_OPTION 1574 -#define IDC_EDIT_PLUGIN_OPTION_NUM 1575 -#define IDC_SPIN_PLUGIN_OPTION 1576 -#define IDC_CHECK_PLUGIN_OPTION 1577 -#define IDC_COMBO_PLUGIN_OPTION 1578 -#define IDC_BUTTON_INITIALIZE 1578 -#define IDC_RADIO_TYPE_TO 1579 -#define IDC_STATIC_TYPE_FILE 1580 -#define IDC_COMBO_COLORS 1581 -#define IDC_BUTTON_MENU 1582 -#define IDC_STATIC_BUTTONS 1582 -#define IDC_BUTTON_DELETE_NOFAVORATE 1583 -#define IDC_BUTTON_DELETE_NOTFOUND 1584 -#define IDC_BUTTON_DELETE_SELECTED 1585 -#define IDC_BUTTON_PREVTAG 1586 -#define IDC_BUTTON_NEXTTAG 1587 -#define IDC_STATIC_BASEDIR 1588 -#define IDC_TREE_RES 1589 -#define IDC_BUTTON_INSERT_NODE 1590 -#define IDC_BUTTON_INSERT_A 1591 -#define IDC_BUTTON_RIGHT 1592 -#define IDC_BUTTON_LEFT 1593 -#define IDC_CHECK_KEY_PARENTHESES 1594 -#define IDC_BUTTON_EXPAND 1595 -#define IDC_BUTTON_COLLAPSE 1596 -#define IDC_BUTTON_CHECK 1597 -#define IDC_CHECK_EXT_RMENU 1598 -#define IDC_CHECK_EXT_DBLCLICK 1599 -#define IDC_COMBO_DEFAULT_EOLTYPE 1600 -#define IDC_CHECK_DEFAULT_BOM 1601 -#define IDC_EDIT_BACKIMG_PATH 1602 -#define IDC_BUTTON_BACKIMG_PATH_SEL 1603 -#define IDC_COMBO_BACKIMG_POS 1604 -#define IDC_CHECK_BACKIMG_SCR_X 1605 -#define IDC_CHECK_BACKIMG_SCR_Y 1606 -#define IDC_CHECK_BACKIMG_REP_X 1607 -#define IDC_CHECK_BACKIMG_REP_Y 1608 -#define IDC_EDIT_BACKIMG_OFFSET_X 1609 -#define IDC_EDIT_BACKIMG_OFFSET_Y 1610 -#define IDC_CHECK_CONVERTEOLPASTE 1611 -#define IDC_CHECK_OpenNewWin 1612 -#define IDC_BUTTON_TABFONT 1613 -#define IDC_MACROCANCELTIMER 1614 -#define IDC_PLUGIN_OpenFolder 1615 -#define IDC_CHECK_INHERIT_KEY_OTHER_VIEW 1616 -#define IDC_LIST_FAVORITE_EXCEPTMRU 1617 -#define IDC_BUTTON_ADD_FAVORITE 1618 -#define IDC_BTN_AUTOLOAD 1619 -#define IDC_LABEL_AUTOLOAD_DELAY 1620 -#define IDC_EDIT_AUTOLOAD_DELAY 1621 -#define IDC_SPIN_AUTOLOAD_DELAY 1622 -#define IDC_CHECK_KINSOKUHIDE 1623 -#define IDC_PLUGIN_README 1624 -#define IDC_PLUGIN_INST_ZIP 1625 -#define IDC_CHECK_HOKANBYKEYWORD 1626 -#define IDC_RADIO_CURDIR 1627 -#define IDC_RADIO_MRUDIR 1628 -#define IDC_RADIO_SELDIR 1629 -#define IDC_EDIT_FILEOPENDIR 1630 -#define IDC_BUTTON_FILEOPENDIR 1631 -#define IDC_CHECK_bOverWriteFixMode 1632 -#define IDC_STATIC_MOZI 1633 -#define IDC_BUTTON_TYPEFONT 1634 -#define IDC_CHECK_USETYPEFONT 1635 -#define IDC_STATIC_TABFONT 1636 -#define IDC_STATIC_KEYWORDHELPFONT 1637 -#define IDC_STATIC_FONTSIZE 1638 -#define IDC_CHECK_COLORPRINT 1639 -#define IDC_CHECK_USE_FONT_HEAD 1640 -#define IDC_BUTTON_FONT_HEAD 1641 -#define IDC_STATIC_FONT_HEAD 1642 -#define IDC_CHECK_USE_FONT_FOOT 1643 -#define IDC_BUTTON_FONT_FOOT 1644 -#define IDC_STATIC_FONT_FOOT 1645 -#define IDC_CHECK_CUR_DIR 1646 -#define IDC_COMBO_CUR_DIR 1647 -#define IDC_BUTTON_REFERENCE2 1648 -#define IDC_LIST_FAVORITE_CUR_DIR 1649 -#define IDC_EDIT_PLUGIN_OPTION_DIR 1650 -#define IDC_BUTTON_PLUGIN_OPTION_DIR 1651 -#define IDC_CHECK_STRINGENDLINE 1652 -#define IDC_CHECK_DispTabClose 1653 -#define IDC_CHECK_CHKENTERATEND 1654 -#define IDC_RADIO_OUTPUTSTYLE3 1655 -#define IDC_CHECK_FILE_ONLY 1656 -#define IDC_CHECK_BASE_PATH 1657 -#define IDC_CHECK_SEP_FOLDER 1658 -#define IDC_BUTTON_FOLDER_UP 1659 -#define IDC_CHECK_SUBMENU 1660 -#define IDC_COMBO_LANGUAGE 1661 -#define IDC_BUTTON_UP_TYPE 1662 -#define IDC_BUTTON_DOWN_TYPE 1663 -#define IDC_BUTTON_ADD_TYPE 1664 -#define IDC_BUTTON_DEL_TYPE 1665 -#define IDC_BUTTON_COPY_TYPE 1666 -#define IDC_RADIO_TYPE_ADD 1667 -#define IDC_STATIC_TYPEFONT 1668 -#define IDC_TextTabClose 1669 -#define IDC_TextTabCaption 1670 -#define IDC_CHECK_CP 1671 -#define IDC_CHECK_ENABLEEXTEOL 1672 -#define IDC_LIST_PROFILE 1673 -#define IDC_BUTTON_PROF_CREATE 1674 -#define IDC_BUTTON_PROF_RENAME 1675 -#define IDC_BUTTON_PROF_DELETE 1676 -#define IDC_CHECK_PROF_DEFSTART 1677 -#define IDC_BUTTON_PROF_DEFSET 1678 -#define IDC_BUTTON_PROF_DEFCLEAR 1679 -#define IDC_TAB_POSITION 1680 -#define IDC_COMBO_TAB_POSITION 1681 -#define IDC_CHECK_TAB_MULTILINE 1682 -#define IDC_CHECK_bOverWriteBoxDelete 1683 -#define IDC_CHECK_SHORTPATH 1684 -#define IDC_EDIT_SHORTMAXWIDTH 1685 -#define IDC_COMBO_TAGJUMP 1686 -#define IDC_COMBO_KEYWORD_TAGJUMP 1687 -#define IDC_SPIN_LINENUMWIDTH 1688 -#define IDC_EDIT_LINENUMWIDTH 1689 -#define IDC_CHK_BACKUP 1690 -#define IDC_STATIC_SETTFING_FROM 1691 -#define IDC_CHECK_LOADINI 1692 -#define IDC_EDIT_DEFINI 1693 -#define IDC_BUTTON_REF1 1694 -#define IDC_BUTTON_LOAD 1695 -#define IDC_RADIO_GREP 1696 -#define IDC_RADIO_FILE 1697 -#define IDC_RADIO_FOLDER 1698 -#define IDC_STATIC_PATH 1699 -#define IDC_EDIT_PATH 1700 -#define IDC_BUTTON_REF2 1701 -#define IDC_BUTTON_PATH_MENU 1702 -#define IDC_EDIT_LABEL 1703 -#define IDC_STATIC_FILE 1704 -#define IDC_EDIT_FILE 1705 -#define IDC_CHECK_HIDDEN 1706 -#define IDC_CHECK_READONLY 1707 -#define IDC_CHECK_SYSTEM 1708 -#define IDC_BUTTON_UPDATE 1709 -#define IDC_BUTTON_FILEADD 1710 -#define IDC_BUTTON_REPLACE 1711 -#define IDC_BUTTON_SETTING 1712 -#define IDC_STATIC_CHARCODE 1713 -#define IDC_PLUGIN_URL 1714 -#define IDC_RADIO_LINEDELETE 1715 -#define IDC_RADIO_NOHIT 1716 -#define IDC_CHECK_BOXSELECTLOCK 1717 -#define IDC_COMBO_TSV_MODE 1718 -#define IDC_CHECK_INDENTCPPSTR 1719 -#define IDC_CHECK_INDENTCPPCMT 1720 -#define IDC_CHECK_INDENTCPPUNDO 1721 -#define IDC_CHECK_DISP_COL_BY_CHAR 1722 -#define IDC_STATIC_MENU 1723 -#define IDC_LIST_WINDOW 1724 -#define IDC_BUTTON_SAVE 1725 -#define IDC_BUTTON_CLOSE 1726 -#define IDC_STATIC_URL_GIT 1727 -#define IDC_STATIC_GIT_CAPTION 1728 -#define IDC_STATIC_URL_CI_BUILD_CAPTION 1729 -#define IDC_STATIC_URL_CI_BUILD 1730 -#define IDC_STATIC_URL_GITHUB_CAPTION 1731 -#define IDC_STATIC_URL_GITHUB_COMMIT 1732 -#define IDC_STATIC_URL_GITHUB_PR 1733 -#define IDC_TRACKBAR_BACKIMG_TRANSPARENCY 1734 -#define IDC_COMBO_EXCLUDE_FOLDER 1734 -#define IDC_EDIT_BACKIMG_TRANSPARENCY 1735 -#define IDC_COMBO_EXCLUDE_FILE 1735 -#define IDC_UPDOWN_BACKIMG_TRANSPARENCY 1736 -#define IDC_CHECK_VISTA_STYLE_FILEDIALOG 1737 -#define IDS_AUTHOR_PAGE 4054 -#define IDS_ABOUT_DESCRIPTION 4056 -#define IDD_TYPELIST 5000 -#define IDD_TYPE_ASCERTAIN 5001 -#define IDD_PROP_SCREEN 5100 -#define IDD_PROP_COLOR 5101 -#define IDD_PROP_SUPPORT 5102 -#define IDD_PROP_REGEX 5103 -#define IDD_PROP_KEYHELP 5104 -#define IDD_PROP_WINDOW 5105 -#define IDD_DIALOG_KEYWORD_SELECT 5110 -#define IDD_SAMECOLOR 5111 -#define IDD_PROP_GENERAL 5200 -#define IDD_PROP_WIN 5201 -#define IDD_PROP_TOOLBAR 5202 -#define IDD_PROP_TAB 5203 -#define IDD_PROP_STATUSBAR 5204 -#define IDD_PROP_EDIT 5205 -#define IDD_PROP_FILE 5206 -#define IDD_PROP_FNAME 5207 -#define IDD_PROP_BACKUP 5208 -#define IDD_PROP_FORMAT 5209 -#define IDD_PROP_GREP 5210 -#define IDD_PROP_KEYBIND 5211 -#define IDD_PROP_CUSTMENU 5212 -#define IDD_PROP_KEYWORD 5213 -#define IDD_PROP_HELPER 5214 -#define IDD_PROP_MACRO 5215 -#define IDD_PROP_PLUGIN 5216 -#define IDD_PROP_MAINMENU 5217 -#define IDD_WINPOSSIZE 5220 -#define IDD_PLUGIN_OPTION 5221 -#define IDD_PROFILEMGR 5222 -#define IDD_FILETREE 5223 -#define IDC_STATIC -1 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 230 -#define _APS_NEXT_COMMAND_VALUE 4057 -#define _APS_NEXT_CONTROL_VALUE 1738 -#define _APS_NEXT_SYMED_VALUE 104 -#endif -#endif +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ で生成されたインクルード ファイル。 +// sakura_rc.rc で使用 +// +#define ID_RC_TYPE_INI 100 +#define IDR_MENU1 102 +#define IDR_TRAYMENU_L 103 +#define IDD_FIND 110 +#define IDD_ABOUT 111 +#define IDD_JUMP 112 +#define IDD_FUNCLIST 113 +#define IDD_GREP 114 +#define IDD_GREPRUNNING 115 +#define IDD_REPLACE 116 +#define IDD_REPLACERUNNING 117 +#define IDD_PROPERTY_FILE 118 +#define IDD_INPUT1 119 +#define IDD_COMPARE 120 +#define IDD_PRINTPREVIEWBAR 121 +#define IDD_PRINTSETTING 122 +#define IDD_EXITING 123 +#define IDD_EXEC 125 +#define IDD_EXECRUNNING 126 +#define IDD_HOKAN 127 +#define IDD_PRINTING 128 +#define IDD_FILEOPEN 130 +#define IDD_FILEUPDATEQUERY 131 +#define IDD_FAVORITE 132 +#define IDD_TAGJUMPLIST 133 +#define IDD_TAG_MAKE 134 +#define IDD_OPERATIONRUNNING 135 +#define IDD_DIFF 136 +#define IDD_CTRLCODE 137 +#define IDD_MACRORUNNING 138 +#define IDD_SETCHARSET 139 +#define IDD_GREP_REPLACE 140 +#define IDD_WINLIST 141 +#define IDB_MYTOOL 200 +#define IDB_SCROLL_CENTER 201 +#define IDB_SCROLL_VERTICAL 202 +#define IDB_SCROLL_HORIZONTAL 203 +#define IDI_ICON_STD 210 +#define IDI_ICON_GREP 212 +#define IDI_PRINTER 215 +#define IDC_CURSOR_COPYARROW 220 +#define IDC_CURSOR_MOVEARROW 222 +#define IDC_CURSOR_RVARROW 223 +#define IDC_CURSOR_ISEARCH_F 224 +#define IDC_CURSOR_ISEARCH_B 225 +#define IDC_CURSOR_TAB_SEPARATE 228 +#define IDC_CURSOR_TAB_JOIN 229 +#define IDC_CURSOR_AUTOSCROLL_CENTER 230 +#define IDC_CURSOR_AUTOSCROLL_VERTICAL 231 +#define IDC_CURSOR_AUTOSCROLL_HORIZONTAL 232 +#define IDC_CURSOR_AUTOSCROLL_UP 233 +#define IDC_CURSOR_AUTOSCROLL_DOWN 234 +#define IDC_CURSOR_AUTOSCROLL_LEFT 235 +#define IDC_CURSOR_AUTOSCROLL_RIGHT 236 +#define IDC_CURSOR_AUTOSCROLL_UP_LEFT 237 +#define IDC_CURSOR_AUTOSCROLL_UP_RIGHT 238 +#define IDC_CURSOR_AUTOSCROLL_DOWN_LEFT 239 +#define IDC_CURSOR_AUTOSCROLL_DOWN_RIGHT 240 +#define IDC_BUTTON_PRINTERSELECT 1000 +#define IDC_CHK_LOHICASE 1001 +#define IDC_CHECK_INDENT 1002 +#define IDC_CHK_REGULAREXP 1003 +#define IDC_COMBO_INDENTLAYOUT 1004 +#define IDC_CHECK_INDENT_WSPACE 1005 +#define IDC_CHECK_STOPS_BOTH_ENDS_WHEN_SEARCH_WORD 1006 +#define IDC_CHECK_GTJW_RETURN 1007 +#define IDC_CHECK_STOPS_BOTH_ENDS_WHEN_SEARCH_PARAGRAPH 1008 +#define IDC_CHECK_RTRIM_PREVLINE 1009 +#define IDC_CHECK_FREECARET 1010 +#define IDC_BUTTON_CLEAR_MRU_FOLDER 1011 +#define IDC_BUTTON_RELEASE 1012 +#define IDC_COMBO_TEXT 1013 +#define IDC_COMBO_TEXT2 1014 +#define IDC_CHECK_GTJW_LDBLCLK 1015 +#define IDC_EDIT_MAXLINELEN 1016 +#define IDC_EDIT_CHARSPACE 1017 +#define IDC_SPIN_MAXLINELEN 1018 +#define IDC_SPIN_CHARSPACE 1019 +#define IDC_EDIT_LINESPACE 1020 +#define IDC_SPIN_LINESPACE 1021 +#define IDC_SPIN_REPEATEDSCROLLLINENUM 1022 +#define IDC_EDIT_TABVIEWSTRING 1023 +#define IDC_SPIN_TABSPACE 1024 +#define IDC_EDIT_TABSPACE 1025 +#define IDC_BUTTON_TEXTCOLOR 1026 +#define IDC_BUTTON_BACKCOLOR 1027 +#define IDC_STATIC_JRE32VER 1028 +#define IDC_COMBO_FILESHAREMODE 1029 +#define IDC_CHECK_bUneditableIfUnwritable 1030 +#define IDC_CHECK_NOMOVE_ACTIVATE_BY_MOUSE 1032 +#define IDC_EDIT_LINENUM 1033 +#define IDC_CHECK_BACKUP 1034 +#define IDC_CHECK_EXITCONFIRM 1035 +#define IDC_CHECK_PLSQL 1036 +#define IDC_CHECK_SHIFT 1037 +#define IDC_CHK_FROMTHISTEXT 1038 +#define IDC_CHECK_TOOLBARISFLAT 1039 +#define IDC_CHECK_RELOADWHENEXECUTE 1040 +#define IDC_CHECK_DOCICON 1041 +#define IDC_CHECK_LCPOS2 1042 +#define IDC_CHECK_SplitterWndHScroll 1043 +#define IDC_RADIO_BACKUP_TYPE1 1044 +#define IDC_RADIO_BACKUP_TYPE3 1045 +#define IDC_RADIO_OUTPUTMARKED 1046 +#define IDC_RADIO_ALLAREA 1047 +#define IDC_RADIO_CARETTYPE1 1048 +#define IDC_CHECK_LCPOS3 1049 +#define IDC_RADIO_FUNCKEYWND_PLACE2 1050 +#define IDC_CHECK_BACKUP_YEAR 1051 +#define IDC_CHECK_ALT 1052 +#define IDC_CHECK_DispTabIcon 1053 +#define IDC_CHECK_BACKUP_HOUR 1054 +#define IDC_CHECK_BACKUP_MIN 1055 +#define IDC_CHECK_BACKUP_SEC 1056 +#define IDC_CHECK_BACKUPDIALOG 1057 +#define IDC_CHECK_BACKUPFOLDER 1058 +#define IDC_CHECK_UNDERLINE 1059 +#define IDC_EDIT_INPUT1 1060 +#define IDC_EDIT_PROPERTY 1061 +#define IDC_EDIT_BACKUPFOLDER 1062 +#define IDC_EDIT_EXTHELP1 1063 +#define IDC_EDIT_PLSQL_E1 1064 +#define IDC_EDIT_BLOCKCOMMENT_FROM 1065 +#define IDC_EDIT_TYPENAME 1066 +#define IDC_BUTTON_BACKUP_FOLDER_REF 1067 +#define IDC_BUTTON_REPALCE 1068 +#define IDC_BUTTON_DELETE 1069 +#define IDC_BUTTON_DELKEYWORD 1070 +#define IDC_EDIT_EXTHTMLHELP 1071 +#define IDC_EDIT_TFORM 1072 +#define IDC_EDIT_BLOCKCOMMENT_FROM2 1073 +#define IDC_EDIT_FNAME_TO 1074 +#define IDC_CHECK_BACKUP_MONTH 1075 +#define IDC_BUTTON_INSERTSEPARATOR 1076 +#define IDC_BUTTON_ZOOMUP 1077 +#define IDC_EDIT_MIGEMO_DLL 1078 +#define IDC_CHECK_BACKUP_DAY 1079 +#define IDC_BUTTON_INSERTWRAP 1080 +#define IDC_EDIT_MIGEMO_DICT 1081 +#define IDC_CHECK_AUTOSAVE 1082 +#define IDC_CHECK_BACKUP_DUSTBOX 1083 +#define IDC_LIST_FL 1084 +#define IDC_CHECK_DispTOOLBAR 1085 +#define IDC_EDIT_AUTOBACKUP_INTERVAL 1086 +#define IDC_BUTTON_OPENHELP1 1087 +#define IDC_BUTTON_OPENEXTHTMLHELP 1088 +#define IDC_EDIT_REPEATEDSCROLLLINENUM 1089 +#define IDC_BUTTON_KEYWORDHELPFONT 1090 +#define IDC_BUTTON_HELP 1091 +#define IDC_BUTTON_OPENMDLL 1092 +#define IDC_BUTTON_OPENMDICT 1093 +#define IDC_EDIT_BLOCKCOMMENT_TO 1095 +#define IDC_EDIT_BLOCKCOMMENT_TO2 1096 +#define IDC_EDIT_TYPEEXTS 1097 +#define IDC_EDIT_MARGINTY 1098 +#define IDC_EDIT_nRulerBottomSpace 1099 +#define IDC_EDIT_LINECOMMENT 1100 +#define IDC_EDIT_INDENTCHARS 1101 +#define IDC_EDIT_MAX_MRU_FOLDER 1102 +#define IDC_EDIT_MARGINBY 1103 +#define IDC_EDIT_nLineNumberRightSpace 1104 +#define IDC_EDIT_LINECOMMENT2 1105 +#define IDC_EDIT_MARGINLX 1106 +#define IDC_LIST_FUNC 1107 +#define IDC_EDIT_MARGINRX 1108 +#define IDC_COMBO_FUNCKIND 1109 +#define IDC_EDIT_DANSPACE 1110 +#define IDC_EDIT_LINECOMMENT3 1111 +#define IDC_LIST_KEY 1112 +#define IDC_CHECK_CTRL 1113 +#define IDC_CHECK_ADDCRLFWHENCOPY 1114 +#define IDC_COMBO_FILE 1115 +#define IDC_COMBO_nSortType 1116 +#define IDC_COMBO_FOLDER 1117 +#define IDC_STATIC_STC32 1118 +#define IDC_COMBO_SETTINGNAME 1119 +#define IDC_COMBO_PAPER 1120 +#define IDC_BUTTON_FOLDER 1121 +#define IDC_CHK_SUBFOLDER 1122 +#define IDC_STATIC_CURPATH 1123 +#define IDC_CHK_DEFAULTFOLDER 1124 +#define IDC_STATIC_HITCOUNT 1125 +#define IDC_EDIT_VER 1126 +#define IDC_LIST_ASSIGNEDKEYS 1127 +#define IDC_STATIC_MSG 1128 +#define IDC_RADIO_OUTPUTLINE 1129 +#define IDC_RADIO_SELECTEDAREA 1130 +#define IDC_BUTTON_REPALCEALL 1131 +#define IDC_BUTTON_SEARCHPREV 1132 +#define IDC_CHECK_CONSECUTIVEALL 1133 +#define IDC_BUTTON_SEARCHNEXT 1134 +#define IDC_LIST_RES 1135 +#define IDC_BUTTON_SETMARK 1136 +#define IDC_TREE_FL 1137 +#define IDC_BUTTON_ADD 1138 +#define IDC_BUTTON_INSERT 1139 +#define IDC_BUTTON_REGEX_INS 1140 +#define IDC_BUTTON_UP 1141 +#define IDC_BUTTON_DOWN 1142 +#define IDC_BUTTON_SAMEBKCOLOR 1143 +#define IDC_CHECK_REPEATEDSCROLLSMOOTH 1144 +#define IDC_BUTTON_SAMETEXTCOLOR 1145 +#define IDC_COMBO_CODE 1146 +#define IDC_RADIO_CARETTYPE0 1147 +#define IDC_COMBO_EOL 1148 +#define IDC_BUTTON_COPY 1149 +#define IDC_COMBO_STRINGLITERAL 1150 +#define IDC_CHECK_STRINGLINEONLY 1151 +#define IDC_LIST_TYPES 1152 +#define IDC_RADIO_OUTPUTSTYLE1 1153 +#define IDC_COMBO_PLSQLBLOCKS 1154 +#define IDC_COMBO_MRU 1155 +#define IDC_CHECK_KEYWORDCASE 1156 +#define IDC_COMBO_OPENFOLDER 1157 +#define IDC_BUTTON_ADDKEYWORD 1158 +#define IDC_BUTTON_IMPORT 1159 +#define IDC_BUTTON_EXPORT 1160 +#define IDC_BUTTON_ADDSET 1161 +#define IDC_BUTTON_EDITKEYWORD 1162 +#define IDC_BUTTON_DELSET 1163 +#define IDC_COMBO_SET 1164 +#define IDC_LIST_KEYWORD 1165 +#define IDC_SPIN_MAX_MRU_FILE 1166 +#define IDC_SPIN_MAX_MRU_FOLDER 1167 +#define IDC_SPIN_nDropFileNumMax 1168 +#define IDC_SPIN_nRulerBottomSpace 1169 +#define IDC_EDIT_MAX_MRU_FILE 1170 +#define IDC_SPIN_PLSQL_E1 1171 +#define IDC_SPIN_LCColNum2 1172 +#define IDC_SPIN_nLineNumberRightSpace 1173 +#define IDC_BUTTON_CLEAR_MRU_FILE 1174 +#define IDC_SPIN_LCColNum3 1175 +#define IDC_COMBO_MENU 1176 +#define IDC_RADIO_FUNCKEYWND_PLACE1 1177 +#define IDC_CHECK_DispFUNCKEYWND 1178 +#define IDC_CHECK_NOTIFYNOTFOUND 1179 +#define IDC_EDIT_MIDASHIKIGOU 1180 +#define IDC_EDIT_INYOUKIGOU 1181 +#define IDC_PROGRESS_REPLACE 1182 +#define IDC_STATIC_KENSUU 1183 +#define IDC_STATIC_MYICON 1184 +#define IDC_EDIT_HOKANFILE 1185 +#define IDC_BUTTON_HOKANFILE_REF 1186 +#define IDC_COMBO_HOKAN_TYPE 1187 +#define IDC_LIST_COLORS 1188 +#define IDC_CHECK_DISP 1189 +#define IDC_CHECK_BOLD 1190 +#define IDC_RADIO_LINENUM_LAYOUT 1191 +#define IDC_RADIO_LINENUM_CRLF 1192 +#define IDC_STATIC_HAIKEI 1193 +#define IDC_COMBO_CHARSET 1194 +#define IDC_RADIO_LINETERMTYPE2 1195 +#define IDC_EDIT_LINETERMCHAR 1196 +#define IDC_RADIO_LINETERMTYPE0 1197 +#define IDC_RADIO_LINETERMTYPE1 1198 +#define IDC_LIST_FILES 1199 +#define IDC_STATIC_COMPARESRC 1200 +#define IDC_CHECK_HOKANLOHICASE 1201 +#define IDC_BUTTON_NEXTPAGE 1202 +#define IDC_BUTTON_ZOOMDOWN 1203 +#define IDC_BUTTON_PRINTSETTING 1204 +#define IDC_EDIT_LINECOMMENTPOS 1205 +#define IDC_BUTTON_PREVPAGE 1206 +#define IDC_EDIT_LINECOMMENTPOS2 1207 +#define IDC_SPIN_MARGINTY 1208 +#define IDC_EDIT_LINECOMMENTPOS3 1209 +#define IDC_SPIN_MARGINBY 1210 +#define IDC_SPIN_MARGINLX 1211 +#define IDC_SPIN_MARGINRX 1212 +#define IDC_SPIN_FONTHEIGHT 1213 +#define IDC_SPIN_DANSUU 1214 +#define IDC_EDIT_FOOT1 1215 +#define IDC_COMBO_FONT_HAN 1216 +#define IDC_COMBO_FONT_ZEN 1217 +#define IDC_SPIN_DANSPACE 1218 +#define IDC_EDIT_FONTHEIGHT 1219 +#define IDC_EDIT_DANSUU 1220 +#define IDC_CHECK_WORDWRAP 1221 +#define IDC_CHECK_LINENUMBER 1222 +#define IDC_CHECK_KINSOKUHEAD 1223 +#define IDC_BUTTON_EDITSETTINGNAME 1224 +#define IDC_CHECK_KINSOKUTAIL 1225 +#define IDC_STATIC_PAGENUM 1226 +#define IDC_CHECK_PS_KINSOKUHEAD 1227 +#define IDC_CHECK_KINSOKURET 1228 +#define IDC_STATIC_ZOOM 1229 +#define IDC_CHECK_PS_KINSOKUTAIL 1230 +#define IDC_CHECK_KINSOKUKUTO 1231 +#define IDC_CHECK_PS_KINSOKURET 1232 +#define IDC_CHECK_PS_KINSOKUKUTO 1233 +#define IDC_EDIT_HEAD1 1234 +#define IDC_STATIC_PRNDEV 1235 +#define IDC_STATIC_PAPER 1236 +#define IDC_EDIT_KEYSFUNC 1237 +#define IDC_BUTTON_ASSIGN 1238 +#define IDC_EDIT_HEAD2 1239 +#define IDC_EDIT_HEAD3 1240 +#define IDC_BUTTON_CURRENTFOLDER 1241 +#define IDC_EDIT_FOOT2 1243 +#define IDC_CHECK_USETRAYICON 1244 +#define IDC_EDIT_FOOT3 1245 +#define IDC_CHECK_STAYTASKTRAY 1246 +#define IDC_CHECK_DispSTATUSBAR 1247 +#define IDC_RADIO_OUTPUTSTYLE2 1248 +#define IDC_CHECK_DispTabWnd 1249 +#define IDC_STATIC_ENABLECOLUMNS 1250 +#define IDC_STATIC_ENABLELINES 1251 +#define IDC_HOTKEY_TRAYMENU 1252 +#define IDC_CHECK_ENABLEUNMODIFIEDOVERWRITE 1253 +#define IDC_CHECK_DRAGDROP 1254 +#define IDC_CHECK_DROPSOURCE 1255 +#define IDC_CHECK_COPYnDISABLESELECTEDAREA 1256 +#define IDC_CHECK_HTMLHELPISSINGLE 1257 +#define IDC_CHECK_bEnableLineModePaste 1258 +#define IDC_CHECK_bSelectClickedURL 1259 +#define IDC_EDIT_nRulerHeight 1260 +#define IDC_CHECK_bEnableNoSelectCopy 1261 +#define IDC_CHECK_bGrepExitConfirm 1262 +#define IDC_CHECK_TILE_H 1263 +#define IDC_CHECK_bDropFileAndClose 1264 +#define IDC_EDIT_nDropFileNumMax 1265 +#define IDC_CHECK_bCheckFileTimeStamp 1266 +#define IDC_CHECK_bNotOverWriteCRLF 1267 +#define IDC_COMBO_OUTLINES 1268 +#define IDC_COMBO_SMARTINDENT 1269 +#define IDC_BUTTON_REFERENCE 1270 +#define IDC_COMBO_IMESTATE 1271 +#define IDC_CHECK_bAutoCloseDlgFind 1272 +#define IDC_COMBO_IMESWITCH 1273 +#define IDC_CHECK_bScrollBarHorz 1274 +#define IDC_CHECK_bAutoCloseDlgFuncList 1275 +#define IDC_CHECK_bAutoCloseDlgReplace 1276 +#define IDC_CHECK_bMarkUpBlankLineEnable 1277 +#define IDC_CHECK_bFunclistSetFocusOnJump 1278 +#define IDC_STATIC_CURFILE 1279 +#define IDC_PROGRESS 1280 +#define IDC_LIST_WORDS 1281 +#define IDC_CHECK_m_bHokanKey_RETURN 1282 +#define IDC_CHECK_m_bHokanKey_TAB 1283 +#define IDC_CHECK_m_bHokanKey_RIGHT 1284 +#define IDC_RADIO_DFORM_0 1285 +#define IDC_RADIO_DFORM_1 1286 +#define IDC_EDIT_DFORM_EX 1287 +#define IDC_RADIO_TFORM_0 1288 +#define IDC_RADIO_TFORM_1 1289 +#define IDC_EDIT_TFORM_EX 1290 +#define IDC_EDIT_DFORM 1291 +#define IDC_RADIO_PORTRAIT 1293 +#define IDC_RADIO_BACKUP_DATETYPE1 1294 +#define IDC_RADIO_REPLACE 1295 +#define IDC_RADIO_DIFF_FILE1 1296 +#define IDC_RADIO_DIFF_FILE2 1297 +#define IDC_RADIO_OUTLINEDEFAULT 1298 +#define IDC_RADIO_LANDSCAPE 1300 +#define IDC_RADIO_BACKUP_DATETYPE2 1301 +#define IDC_RADIO_INSERT 1302 +#define IDC_RADIO_OUTLINERULEFILE 1303 +#define IDC_RADIO_ADD 1304 +#define IDC_RADIO_DIFF_DST1 1305 +#define IDC_RADIO_DIFF_DST2 1306 +#define IDC_EDIT_BACKUP_3 1307 +#define IDC_MACROPATH 1308 +#define IDC_EDIT_TAG_MAKE_CMDLINE 1309 +#define IDC_EDIT_WX 1310 +#define IDC_EDIT_VERTLINE 1311 +#define IDC_COMBO_m_szCommand 1312 +#define IDC_EDIT_WY 1313 +#define IDC_CHECK_GETSTDOUT 1314 +#define IDC_EDIT_SX 1315 +#define IDC_STATIC_CMD 1316 +#define IDC_EDIT_SY 1317 +#define IDC_STATIC_JOBNAME 1318 +#define IDC_STATIC_PROGRESS 1319 +#define IDC_CHECK_bMenuIcon 1322 +#define IDC_LABEL_BACKUP_3 1323 +#define IDC_LABEL_BACKUP_4 1324 +#define IDC_LABEL_AUTOSAVE 1325 +#define IDC_LABEL_AUTOSAVE2 1326 +#define IDC_LABEL_AUTOSAVE3 1327 +#define IDC_LABEL_AUTOSAVE4 1328 +#define IDC_LABEL_MENUFUNC 1329 +#define IDC_LABEL_MENUFUNCKIND 1330 +#define IDC_LABEL_MENU 1331 +#define IDC_LABEL_MENUCHOICE 1332 +#define IDC_LABEL_MENUKEYCHANGE 1333 +#define IDC_LABEL_TOOLBAR 1334 +#define IDC_LABEL_MENUNAME 1335 +#define IDC_LABEL_KEYKIND 1336 +#define IDC_LABEL_FUNCtoKEY 1337 +#define IDC_LABEL_KEYtoFUNC 1338 +#define IDC_LABEL_LINETERMCHAR 1339 +#define IDC_LABEL_DFORM 1340 +#define IDC_LABEL_TFORM 1341 +#define IDC_LABEL_PLSQL1 1344 +#define IDC_LABEL_PLSQL2 1345 +#define IDC_LABEL_PLSQL3 1346 +#define IDC_SPIN_BACKUP_GENS 1347 +#define IDC_SPIN_AUTOBACKUP_INTERVAL 1348 +#define IDC_SPIN_nRulerHeight 1349 +#define IDC_CHECK_BACKUP_RETAINEXT 1350 +#define IDC_SPIN_LINENUM 1351 +#define IDC_LANEL_NOTE 1352 +#define IDC_CHECK_RestoreCurPosition 1353 +#define IDC_STATIC_URL_CAPTION 1354 +#define IDC_STATIC_URL_UR 1355 +#define IDC_CHECK_AutoMIMEDecode 1356 +#define IDC_EDIT_MENUNAME 1357 +#define IDC_CHECK_RestoreBookmarks 1358 +#define IDC_BUTTON_TEMPCHANGE 1359 +#define IDC_STATIC_EOL 1360 +#define IDC_BUTTON_JUMP 1361 +#define IDC_CHECK_LCPOS 1362 +#define IDC_SPIN_LCColNum 1363 +#define IDC_LABEL_LCPOS 1364 +#define IDC_LABEL_LCPOS2 1365 +#define IDC_LABEL_LCPOS3 1366 +#define IDC_MACRO_REG 1367 +#define IDC_COMBO_MACROID 1368 +#define IDC_BUTTON_REGEX_TOP 1369 +#define IDC_BUTTON_REGEX_LAST 1370 +#define IDC_MACROLIST 1371 +#define IDC_MACRONAME 1372 +#define IDC_EDIT_ABOUT 1373 +#define IDC_CHECK_SplitterWndVScroll 1374 +#define IDC_BUTTON_REGEX_UPD 1375 +#define IDC_CHK_WORD 1376 +#define IDC_BUTTON_REGEX_DEL 1377 +#define IDC_CHECK_SameTabWidth 1378 +#define IDC_MACRODIR 1379 +#define IDC_MACRODIRREF 1380 +#define IDC_BUTTON_MENUNAME 1381 +#define IDC_EDIT_REGEX 1382 +#define IDC_CHECK_REGEX 1383 +#define IDC_LIST_REGEX 1384 +#define IDC_COMBO_REGEX_COLOR 1385 +#define IDC_LABEL_REGEX_COLOR 1386 +#define IDC_LABEL_REGEX_KEYWORD 1387 +#define IDC_BUTTON_REGEX_UP 1388 +#define IDC_BUTTON_REGEX_DOWN 1389 +#define IDC_BUTTON_REGEX_ADD 1390 +#define IDC_BUTTON_REGEX_IMPORT 1391 +#define IDC_BUTTON_REGEX_EXPORT 1392 +#define IDC_FRAME_REGEX 1393 +#define IDC_LABEL_REGEX_VERSION 1394 +#define IDC_CHECK_INS_SPACE 1395 +#define IDC_CHK_PASTE 1396 +#define IDC_CHECK_SEARCHALL 1397 +#define IDC_EDIT_TYPEEXTHELP 1398 +#define IDC_EDIT_TYPEEXTHTMLHELP 1399 +#define IDC_BUTTON_TYPEOPENHELP 1400 +#define IDC_BUTTON_TYPEOPENEXTHTMLHELP 1401 +#define IDC_CHECK_TYPEHTMLHELPISSINGLE 1402 +#define IDC_CHECK_DispTabWndMultiWin 1403 +#define IDC_EDIT_OUTLINERULEFILE 1404 +#define IDC_BUTTON_RULEFILE_REF 1405 +#define IDC_EDIT_KINSOKUHEAD 1406 +#define IDC_STATIC_DIFF_SRC 1407 +#define IDC_EDIT_KINSOKUTAIL 1408 +#define IDC_EDIT_DIFF_DST 1409 +#define IDC_BUTTON_DIFF_DST 1410 +#define IDC_SPIN_FUNCKEYWND_GROUPNUM 1411 +#define IDC_CHECK_DIFF_OPT_CASE 1412 +#define IDC_EDIT_FUNCKEYWND_GROUPNUM 1413 +#define IDC_CHECK_DIFF_OPT_SPACE 1414 +#define IDC_CHECK_DIFF_OPT_SPCCHG 1415 +#define IDC_STATIC_nSortType 1416 +#define IDC_BTN_RELOAD 1417 +#define IDC_CHECK_DIFF_OPT_BLINE 1418 +#define IDC_CHECK_DIFF_OPT_TABSPC 1419 +#define IDC_BTN_NOTIFYONLY 1420 +#define IDC_FRAME_DIFF_FILE12 1421 +#define IDC_LIST_DIFF_FILES 1422 +#define IDC_FILEUPDATEMSG 1423 +#define IDC_FRAME_DIFF_DST 1424 +#define IDC_LIST_CTRLCODE 1425 +#define IDC_BTN_NOSUPERVISION 1426 +#define IDC_BTN_CLOSE 1427 +#define IDC_UPDATEDFILENAME 1428 +#define IDC_QUERYRELOADMSG 1429 +#define IDC_BUTTON_FNAME_TOP 1430 +#define IDC_BUTTON_FNAME_UP 1431 +#define IDC_BUTTON_FNAME_DOWN 1432 +#define IDC_BUTTON_FNAME_LAST 1433 +#define IDC_BUTTON_FNAME_INS 1434 +#define IDC_BUTTON_FNAME_ADD 1435 +#define IDC_BUTTON_FNAME_UPD 1436 +#define IDC_BUTTON_FNAME_DEL 1437 +#define IDC_LIST_FNAME 1438 +#define IDC_EDIT_FNAME_FROM 1439 +#define IDC_CHECK_TAB_ARROW 1440 +#define IDC_TAB_FAVORITE 1441 +#define IDC_LIST_FAVORITE_FILE 1442 +#define IDC_LIST_FAVORITE_FOLDER 1443 +#define IDC_LIST_FAVORITE_GREP_FILE 1444 +#define IDC_LIST_FAVORITE_GREP_FOLDER 1445 +#define IDC_LIST_FAVORITE_REPLACE 1446 +#define IDC_LIST_FAVORITE_SEARCH 1447 +#define IDC_LIST_FAVORITE_CMD 1448 +#define IDC_BUTTON_CLEAR 1449 +#define IDC_LIST_TAGJUMP 1450 +#define IDC_WINCAPTION_ACTIVE 1451 +#define IDC_WINCAPTION_INACTIVE 1452 +#define IDC_CHECK_HOKANBYFILE 1453 +#define IDC_BUTTON_TAG_MAKE_REF 1454 +#define IDC_TABWND_CAPTION 1455 +#define IDC_CHECK_TAG_MAKE_RECURSE 1456 +#define IDC_EDIT_TAG_MAKE_FOLDER 1457 +#define IDC_FRAME_SEARCH_MSG 1458 +#define IDC_CHECK_DIFF_EXEC_STATE 1459 +#define IDC_STATIC_FAVORITE_MSG 1460 +#define IDC_CHECK_REALTIMEVIEW 1461 +#define IDC_CHECK_BOM 1462 +#define IDC_CHECK_GREPREALTIME 1463 +#define IDC_RADIO_WINSIZE_DEF 1464 +#define IDC_RADIO_WINSIZE_SAVE 1465 +#define IDC_RADIO_WINSIZE_SET 1466 +#define IDC_SPIN_WX 1467 +#define IDC_SPIN_WY 1468 +#define IDC_RADIO_WINPOS_DEF 1469 +#define IDC_RADIO_WINPOS_SAVE 1470 +#define IDC_RADIO_WINPOS_SET 1471 +#define IDC_SPIN_SX 1472 +#define IDC_SPIN_SY 1473 +#define IDC_COMBO_WINTYPE 1474 +#define IDC_BUTTON_WINSIZE 1475 +#define IDC_CHECK_QueryIfCodeChange 1476 +#define IDC_CHECK_AlertIfFileNotExist 1477 +#define IDC_COMBO1 1478 +#define IDC_COMBO2 1479 +#define IDC_COMBO3 1480 +#define IDC_COMBO4 1481 +#define IDC_COMBO5 1482 +#define IDC_COMBO6 1483 +#define IDC_COMBO7 1484 +#define IDC_COMBO8 1485 +#define IDC_COMBO9 1486 +#define IDC_COMBO10 1487 +#define IDC_BUTTON_KEYWORD_SELECT 1488 +#define IDC_STATIC_KEYWORD_COUNT 1489 +#define IDC_BUTTON_KEYSETRENAME 1490 +#define IDC_BUTTON_KEYCLEAN 1491 +#define IDC_KEYWORD 1492 +#define IDC_STATIC_KEYWORD 1493 +#define IDC_CHECK_ICASE 1494 +#define IDC_CHECK_ANYWHERE 1495 +#define IDC_EDIT_BACKUPFILE 1496 +#define IDC_CHECK_BACKUP_FOLDER_RM 1497 +#define IDC_CHECK_BACKUP_ADVANCED 1498 +#define IDC_RADIO_BACKUP_DATETYPE1A 1499 +#define IDC_RADIO_BACKUP_DATETYPE2A 1500 +#define IDC_LABEL_BACKUP_HELP2 1501 +#define IDC_CHECK_MEMDC 1502 +#define IDC_STATIC_COLOR 1503 +#define IDC_BUTTON_SELALL 1504 +#define IDC_BUTTON_SELNOTING 1505 +#define IDC_LIST_ITEMINFO 1506 +#define IDC_CHECK_NoFilterSaveNew 1507 +#define IDC_CHECK_NoFilterSaveFile 1508 +#define IDC_CHECK_CLOSEALLCONFIRM 1509 +#define IDC_CHECK_ANTIALIAS 1510 +#define IDC_CHECK_RetainEmptyWindow 1511 +#define IDC_BUTTON_DIRECTPAGE 1512 +#define IDC_CHECK_CloseOneWin 1513 +#define IDC_CHECK_bCaretTextForSearch 1514 +#define IDC_CHECK_ChgWndByWheel 1515 +#define IDC_LABEL_REGEXP 1516 +#define IDC_EDIT_REGEXPLIB 1517 +#define IDC_LABEL_REGEXP_VER 1518 +#define IDC_COMBO_CODE_GET 1519 +#define IDC_COMBO_CODE_SEND 1520 +#define IDC_CHECK_DISP_UNICODE_IN_SJIS 1521 +#define IDC_CHECK_DISP_UNICODE_IN_JIS 1522 +#define IDC_CHECK_DISP_UNICODE_IN_EUC 1523 +#define IDC_CHECK_DISP_UTF8_CODEPOINT 1524 +#define IDC_CHECK_DISP_SP_CODEPOINT 1525 +#define IDC_RADIO_OUTPUT 1526 +#define IDC_RADIO_EDITWINDOW 1527 +#define IDC_CHECK_SENDSTDIN 1528 +#define IDC_CHECK_SortTabList 1529 +#define IDC_COMBO_WRAPMETHOD 1530 +#define IDC_FRAME_KEYHELP 1531 +#define IDC_LIST_KEYHELP 1532 +#define IDC_LABEL_KEYHELP_KEYWORD 1533 +#define IDC_EDIT_KEYHELP 1534 +#define IDC_LABEL_KEYHELP_TITLE 1535 +#define IDC_BUTTON_KEYHELP_INS 1536 +#define IDC_BUTTON_KEYHELP_UPD 1537 +#define IDC_BUTTON_KEYHELP_DEL 1538 +#define IDC_BUTTON_KEYHELP_TOP 1539 +#define IDC_BUTTON_KEYHELP_UP 1540 +#define IDC_BUTTON_KEYHELP_DOWN 1541 +#define IDC_BUTTON_KEYHELP_LAST 1542 +#define IDC_BUTTON_KEYHELP_IMPORT 1543 +#define IDC_BUTTON_KEYHELP_EXPORT 1544 +#define IDC_LABEL_KEYHELP_ABOUT 1545 +#define IDC_CHECK_KEYHELP 1546 +#define IDC_LABEL_KEYHELP_PRIOR 1547 +#define IDC_BUTTON_KEYHELP_REF 1548 +#define IDC_CHECK_KEYHELP_ALLSEARCH 1549 +#define IDC_CHECK_KEYHELP_KEYDISP 1550 +#define IDC_CHECK_KEYHELP_PREFIX 1551 +#define IDC_SPIN_ALERT_FILESIZE 1552 +#define IDC_EDIT_ALERT_FILESIZE 1553 +#define IDC_CHECK_ALERT_IF_LARGEFILE 1554 +#define IDC_COMBO_WHEEL_HSCROLL 1555 +#define IDC_COMBO_WHEEL_PAGESCROLL 1556 +#define IDC_COMBO_DEFAULT_CODETYPE 1557 +#define IDC_CHECK_PRIOR_CESU8 1558 +#define IDC_CHECK_DISP_SELCOUNT_BY_BYTE 1559 +#define IDC_EDIT_KINSOKUKUTO 1560 +#define IDC_CHECK_MacroOnOpened 1562 +#define IDC_CHECK_MacroOnTypeChanged 1563 +#define IDC_CHECK_MacroOnSave 1564 +#define IDC_PLUGINLIST 1565 +#define IDC_CHECK_PluginEnable 1566 +#define IDC_PLUGIN_SearchNew 1567 +#define IDC_PLUGIN_Remove 1568 +#define IDC_LABEL_PLUGIN_Description 1569 +#define IDC_LABEL_PLUGIN_Author 1570 +#define IDC_LABEL_PLUGIN_Version 1571 +#define IDC_PLUGIN_OPTION 1572 +#define IDC_LIST_PLUGIN_OPTIONS 1573 +#define IDC_EDIT_PLUGIN_OPTION 1574 +#define IDC_EDIT_PLUGIN_OPTION_NUM 1575 +#define IDC_SPIN_PLUGIN_OPTION 1576 +#define IDC_CHECK_PLUGIN_OPTION 1577 +#define IDC_COMBO_PLUGIN_OPTION 1578 +#define IDC_BUTTON_INITIALIZE 1578 +#define IDC_RADIO_TYPE_TO 1579 +#define IDC_STATIC_TYPE_FILE 1580 +#define IDC_COMBO_COLORS 1581 +#define IDC_BUTTON_MENU 1582 +#define IDC_STATIC_BUTTONS 1582 +#define IDC_BUTTON_DELETE_NOFAVORATE 1583 +#define IDC_BUTTON_DELETE_NOTFOUND 1584 +#define IDC_BUTTON_DELETE_SELECTED 1585 +#define IDC_BUTTON_PREVTAG 1586 +#define IDC_BUTTON_NEXTTAG 1587 +#define IDC_STATIC_BASEDIR 1588 +#define IDC_TREE_RES 1589 +#define IDC_BUTTON_INSERT_NODE 1590 +#define IDC_BUTTON_INSERT_A 1591 +#define IDC_BUTTON_RIGHT 1592 +#define IDC_BUTTON_LEFT 1593 +#define IDC_CHECK_KEY_PARENTHESES 1594 +#define IDC_BUTTON_EXPAND 1595 +#define IDC_BUTTON_COLLAPSE 1596 +#define IDC_BUTTON_CHECK 1597 +#define IDC_CHECK_EXT_RMENU 1598 +#define IDC_CHECK_EXT_DBLCLICK 1599 +#define IDC_COMBO_DEFAULT_EOLTYPE 1600 +#define IDC_CHECK_DEFAULT_BOM 1601 +#define IDC_EDIT_BACKIMG_PATH 1602 +#define IDC_BUTTON_BACKIMG_PATH_SEL 1603 +#define IDC_COMBO_BACKIMG_POS 1604 +#define IDC_CHECK_BACKIMG_SCR_X 1605 +#define IDC_CHECK_BACKIMG_SCR_Y 1606 +#define IDC_CHECK_BACKIMG_REP_X 1607 +#define IDC_CHECK_BACKIMG_REP_Y 1608 +#define IDC_EDIT_BACKIMG_OFFSET_X 1609 +#define IDC_EDIT_BACKIMG_OFFSET_Y 1610 +#define IDC_CHECK_CONVERTEOLPASTE 1611 +#define IDC_CHECK_OpenNewWin 1612 +#define IDC_BUTTON_TABFONT 1613 +#define IDC_MACROCANCELTIMER 1614 +#define IDC_PLUGIN_OpenFolder 1615 +#define IDC_CHECK_INHERIT_KEY_OTHER_VIEW 1616 +#define IDC_LIST_FAVORITE_EXCEPTMRU 1617 +#define IDC_BUTTON_ADD_FAVORITE 1618 +#define IDC_BTN_AUTOLOAD 1619 +#define IDC_LABEL_AUTOLOAD_DELAY 1620 +#define IDC_EDIT_AUTOLOAD_DELAY 1621 +#define IDC_SPIN_AUTOLOAD_DELAY 1622 +#define IDC_CHECK_KINSOKUHIDE 1623 +#define IDC_PLUGIN_README 1624 +#define IDC_PLUGIN_INST_ZIP 1625 +#define IDC_CHECK_HOKANBYKEYWORD 1626 +#define IDC_RADIO_CURDIR 1627 +#define IDC_RADIO_MRUDIR 1628 +#define IDC_RADIO_SELDIR 1629 +#define IDC_EDIT_FILEOPENDIR 1630 +#define IDC_BUTTON_FILEOPENDIR 1631 +#define IDC_CHECK_bOverWriteFixMode 1632 +#define IDC_STATIC_MOZI 1633 +#define IDC_BUTTON_TYPEFONT 1634 +#define IDC_CHECK_USETYPEFONT 1635 +#define IDC_STATIC_TABFONT 1636 +#define IDC_STATIC_KEYWORDHELPFONT 1637 +#define IDC_STATIC_FONTSIZE 1638 +#define IDC_CHECK_COLORPRINT 1639 +#define IDC_CHECK_USE_FONT_HEAD 1640 +#define IDC_BUTTON_FONT_HEAD 1641 +#define IDC_STATIC_FONT_HEAD 1642 +#define IDC_CHECK_USE_FONT_FOOT 1643 +#define IDC_BUTTON_FONT_FOOT 1644 +#define IDC_STATIC_FONT_FOOT 1645 +#define IDC_CHECK_CUR_DIR 1646 +#define IDC_COMBO_CUR_DIR 1647 +#define IDC_BUTTON_REFERENCE2 1648 +#define IDC_LIST_FAVORITE_CUR_DIR 1649 +#define IDC_EDIT_PLUGIN_OPTION_DIR 1650 +#define IDC_BUTTON_PLUGIN_OPTION_DIR 1651 +#define IDC_CHECK_STRINGENDLINE 1652 +#define IDC_CHECK_DispTabClose 1653 +#define IDC_CHECK_CHKENTERATEND 1654 +#define IDC_RADIO_OUTPUTSTYLE3 1655 +#define IDC_CHECK_FILE_ONLY 1656 +#define IDC_CHECK_BASE_PATH 1657 +#define IDC_CHECK_SEP_FOLDER 1658 +#define IDC_BUTTON_FOLDER_UP 1659 +#define IDC_CHECK_SUBMENU 1660 +#define IDC_COMBO_LANGUAGE 1661 +#define IDC_BUTTON_UP_TYPE 1662 +#define IDC_BUTTON_DOWN_TYPE 1663 +#define IDC_BUTTON_ADD_TYPE 1664 +#define IDC_BUTTON_DEL_TYPE 1665 +#define IDC_BUTTON_COPY_TYPE 1666 +#define IDC_RADIO_TYPE_ADD 1667 +#define IDC_STATIC_TYPEFONT 1668 +#define IDC_TextTabClose 1669 +#define IDC_TextTabCaption 1670 +#define IDC_CHECK_CP 1671 +#define IDC_CHECK_ENABLEEXTEOL 1672 +#define IDC_LIST_PROFILE 1673 +#define IDC_BUTTON_PROF_CREATE 1674 +#define IDC_BUTTON_PROF_RENAME 1675 +#define IDC_BUTTON_PROF_DELETE 1676 +#define IDC_CHECK_PROF_DEFSTART 1677 +#define IDC_BUTTON_PROF_DEFSET 1678 +#define IDC_BUTTON_PROF_DEFCLEAR 1679 +#define IDC_TAB_POSITION 1680 +#define IDC_COMBO_TAB_POSITION 1681 +#define IDC_CHECK_TAB_MULTILINE 1682 +#define IDC_CHECK_bOverWriteBoxDelete 1683 +#define IDC_CHECK_SHORTPATH 1684 +#define IDC_EDIT_SHORTMAXWIDTH 1685 +#define IDC_COMBO_TAGJUMP 1686 +#define IDC_COMBO_KEYWORD_TAGJUMP 1687 +#define IDC_SPIN_LINENUMWIDTH 1688 +#define IDC_EDIT_LINENUMWIDTH 1689 +#define IDC_CHK_BACKUP 1690 +#define IDC_STATIC_SETTFING_FROM 1691 +#define IDC_CHECK_LOADINI 1692 +#define IDC_EDIT_DEFINI 1693 +#define IDC_BUTTON_REF1 1694 +#define IDC_BUTTON_LOAD 1695 +#define IDC_RADIO_GREP 1696 +#define IDC_RADIO_FILE 1697 +#define IDC_RADIO_FOLDER 1698 +#define IDC_STATIC_PATH 1699 +#define IDC_EDIT_PATH 1700 +#define IDC_BUTTON_REF2 1701 +#define IDC_BUTTON_PATH_MENU 1702 +#define IDC_EDIT_LABEL 1703 +#define IDC_STATIC_FILE 1704 +#define IDC_EDIT_FILE 1705 +#define IDC_CHECK_HIDDEN 1706 +#define IDC_CHECK_READONLY 1707 +#define IDC_CHECK_SYSTEM 1708 +#define IDC_BUTTON_UPDATE 1709 +#define IDC_BUTTON_FILEADD 1710 +#define IDC_BUTTON_REPLACE 1711 +#define IDC_BUTTON_SETTING 1712 +#define IDC_STATIC_CHARCODE 1713 +#define IDC_PLUGIN_URL 1714 +#define IDC_RADIO_LINEDELETE 1715 +#define IDC_RADIO_NOHIT 1716 +#define IDC_CHECK_BOXSELECTLOCK 1717 +#define IDC_COMBO_TSV_MODE 1718 +#define IDC_CHECK_INDENTCPPSTR 1719 +#define IDC_CHECK_INDENTCPPCMT 1720 +#define IDC_CHECK_INDENTCPPUNDO 1721 +#define IDC_CHECK_DISP_COL_BY_CHAR 1722 +#define IDC_STATIC_MENU 1723 +#define IDC_LIST_WINDOW 1724 +#define IDC_BUTTON_SAVE 1725 +#define IDC_BUTTON_CLOSE 1726 +#define IDC_STATIC_URL_GIT 1727 +#define IDC_STATIC_GIT_CAPTION 1728 +#define IDC_STATIC_URL_CI_BUILD_CAPTION 1729 +#define IDC_STATIC_URL_CI_BUILD 1730 +#define IDC_STATIC_URL_GITHUB_CAPTION 1731 +#define IDC_STATIC_URL_GITHUB_COMMIT 1732 +#define IDC_STATIC_URL_GITHUB_PR 1733 +#define IDC_TRACKBAR_BACKIMG_TRANSPARENCY 1734 +#define IDC_COMBO_EXCLUDE_FOLDER 1734 +#define IDC_EDIT_BACKIMG_TRANSPARENCY 1735 +#define IDC_COMBO_EXCLUDE_FILE 1735 +#define IDC_UPDOWN_BACKIMG_TRANSPARENCY 1736 +#define IDC_CHECK_VISTA_STYLE_FILEDIALOG 1737 +#define IDS_AUTHOR_PAGE 4054 +#define IDS_ABOUT_DESCRIPTION 4056 +#define IDD_TYPELIST 5000 +#define IDD_TYPE_ASCERTAIN 5001 +#define IDD_PROP_SCREEN 5100 +#define IDD_PROP_COLOR 5101 +#define IDD_PROP_SUPPORT 5102 +#define IDD_PROP_REGEX 5103 +#define IDD_PROP_KEYHELP 5104 +#define IDD_PROP_WINDOW 5105 +#define IDD_DIALOG_KEYWORD_SELECT 5110 +#define IDD_SAMECOLOR 5111 +#define IDD_PROP_GENERAL 5200 +#define IDD_PROP_WIN 5201 +#define IDD_PROP_TOOLBAR 5202 +#define IDD_PROP_TAB 5203 +#define IDD_PROP_STATUSBAR 5204 +#define IDD_PROP_EDIT 5205 +#define IDD_PROP_FILE 5206 +#define IDD_PROP_FNAME 5207 +#define IDD_PROP_BACKUP 5208 +#define IDD_PROP_FORMAT 5209 +#define IDD_PROP_GREP 5210 +#define IDD_PROP_KEYBIND 5211 +#define IDD_PROP_CUSTMENU 5212 +#define IDD_PROP_KEYWORD 5213 +#define IDD_PROP_HELPER 5214 +#define IDD_PROP_MACRO 5215 +#define IDD_PROP_PLUGIN 5216 +#define IDD_PROP_MAINMENU 5217 +#define IDD_WINPOSSIZE 5220 +#define IDD_PLUGIN_OPTION 5221 +#define IDD_PROFILEMGR 5222 +#define IDD_FILETREE 5223 +#define IDC_STATIC -1 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 230 +#define _APS_NEXT_COMMAND_VALUE 4057 +#define _APS_NEXT_CONTROL_VALUE 1738 +#define _APS_NEXT_SYMED_VALUE 104 +#endif +#endif diff --git a/sakura_lang_en_US/sakura_lang_en_US.vcxproj.filters b/sakura_lang_en_US/sakura_lang_en_US.vcxproj.filters index 56c240ed4a..511f9e281b 100644 --- a/sakura_lang_en_US/sakura_lang_en_US.vcxproj.filters +++ b/sakura_lang_en_US/sakura_lang_en_US.vcxproj.filters @@ -1,90 +1,90 @@ - - - - - - - - {fb40f358-c2bb-436a-b87f-5c9ca3697244} - - - - - Resource Files - - - Resource Files - - - Resource Files - - - Resource Files - - - Resource Files - - - Resource Files - - - - - Resource Files - - - Resource Files - - - Resource Files - - - Resource Files - - - Resource Files - - - Resource Files - - - Resource Files - - - Resource Files - - - Resource Files - - - Resource Files - - - Resource Files - - - Resource Files - - - Resource Files - - - Resource Files - - - Resource Files - - - Resource Files - - - Resource Files - - - Resource Files - - - Resource Files - - + + + + + + + + {fb40f358-c2bb-436a-b87f-5c9ca3697244} + + + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + \ No newline at end of file From 1f5afac22e0c39406c57cb85f41c696bd9ea674c Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Wed, 11 Nov 2020 00:28:13 +0900 Subject: [PATCH 0265/1024] =?UTF-8?q?=E3=83=AA=E3=82=BD=E3=83=BC=E3=82=B9?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AEUTF-8=E5=A4=89?= =?UTF-8?q?=E6=8F=9B=E5=87=A6=E7=90=86=E3=82=92Makefile=E3=81=B8=E7=A7=BB?= =?UTF-8?q?=E5=8B=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build-gnu.bat | 9 --------- sakura_core/Makefile | 18 +++++++++++++++++- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/build-gnu.bat b/build-gnu.bat index 2f67a11945..c15225b83d 100644 --- a/build-gnu.bat +++ b/build-gnu.bat @@ -28,13 +28,6 @@ if "%configuration%" == "Release" ( @rem path=C:\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev1\mingw64\bin;%path% path=C:\msys64\mingw64\bin;%path% -@rem Preparation for resource compile (windres.exe cannot recognize utf-16) -set rc_dir=sakura_core\_rc_utf8 -if not exist %rc_dir% mkdir %rc_dir% -for %%i in (sakura_core\*.rc?) do ( - C:\msys64\usr\bin\iconv -f utf-16 -t utf-8 %%i > %rc_dir%\%%~nxi% -) - @echo mingw32-make -C sakura_core MYDEFINES="%MYDEFINES%" MYCFLAGS="%MYCFLAGS%" MYLIBS="%MYLIBS%" mingw32-make -C sakura_core MYDEFINES="%MYDEFINES%" MYCFLAGS="%MYCFLAGS%" MYLIBS="%MYLIBS%" -j4 if errorlevel 1 ( @@ -42,8 +35,6 @@ if errorlevel 1 ( exit /b 1 ) -rmdir /s /q %rc_dir% - exit /b 0 diff --git a/sakura_core/Makefile b/sakura_core/Makefile index defc680f49..19ceaa1b02 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -26,15 +26,19 @@ OUTDIR = ifeq ($(SHELL),sh.exe) # If cmd.exe is used as a shell. MKDIR = md +RMDIR = rmdir /s /q RM = del DIRSEP = $(strip \ ) DEVNULL = NUL +ICONV = C:\msys64\usr\bin\iconv.exe else # If unix-like shell is used. MKDIR = mkdir -p +RMDIR = rm -fr RM = rm -f DIRSEP = / DEVNULL = /dev/null +ICONV = iconv endif ifndef PREFIX @@ -116,6 +120,8 @@ GENERATED_FILES= \ HEADERMAKETOOLDIR= $(SRCDIR)/../HeaderMake HEADERMAKE= $(or $(OUTDIR),$(HEADERMAKETOOLDIR))/HeaderMake.exe +RC_TMP_DIR = _rc_tmp + all: $(exe) $(exe): $(OBJS) sakura_rc.o @@ -144,8 +150,18 @@ $(OBJS): StdAfx.h.gch $(HEADERMAKE): $(HEADERMAKETOOLDIR)/HeaderMake.cpp $(CXX) $(CXXFLAGS:-MMD=) $< -o $@ -static-libgcc -sakura_rc.o: _rc_utf8\sakura_rc.rc githash.h Funccode_define.h +sakura_rc.o: $(RC_TMP_DIR)/sakura_rc.rc $(RC_TMP_DIR)/sakura_rc.rc2 githash.h Funccode_define.h $(RC) -c utf-8 --language=0411 $(DEFINES) -I. -I$(SRCDIR) $< -o $@ + -$(RMDIR) $(RC_TMP_DIR) > $(DEVNULL) 2>&1 + +$(RC_TMP_DIR)/sakura_rc.rc: $(RC_TMP_DIR)/ + $(ICONV) -f utf-16 -t utf-8 sakura_rc.rc > $(RC_TMP_DIR)/sakura_rc.rc + +$(RC_TMP_DIR)/sakura_rc.rc2: $(RC_TMP_DIR)/ + $(ICONV) -f utf-16 -t utf-8 sakura_rc.rc2 > $(RC_TMP_DIR)/sakura_rc.rc2 + +$(RC_TMP_DIR)/: + -$(MKDIR) $(RC_TMP_DIR) > $(DEVNULL) 2>&1 clean: -$(RM) $(subst /,$(DIRSEP),$(exe) $(OBJS) $(HEADERMAKE)) StdAfx.h.gch $(GENERATED_FILES) From 9f822f1affcd46cf15a7e8d62dfd0cd997dec103 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Wed, 11 Nov 2020 01:57:30 +0900 Subject: [PATCH 0266/1024] =?UTF-8?q?Makefile=E4=B8=AD=E3=81=AE=E5=86=97?= =?UTF-8?q?=E9=95=B7=E3=81=AA=E8=A8=98=E8=BF=B0=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/Makefile | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/sakura_core/Makefile b/sakura_core/Makefile index 19ceaa1b02..364a86050c 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -154,11 +154,8 @@ sakura_rc.o: $(RC_TMP_DIR)/sakura_rc.rc $(RC_TMP_DIR)/sakura_rc.rc2 githash.h Fu $(RC) -c utf-8 --language=0411 $(DEFINES) -I. -I$(SRCDIR) $< -o $@ -$(RMDIR) $(RC_TMP_DIR) > $(DEVNULL) 2>&1 -$(RC_TMP_DIR)/sakura_rc.rc: $(RC_TMP_DIR)/ - $(ICONV) -f utf-16 -t utf-8 sakura_rc.rc > $(RC_TMP_DIR)/sakura_rc.rc - -$(RC_TMP_DIR)/sakura_rc.rc2: $(RC_TMP_DIR)/ - $(ICONV) -f utf-16 -t utf-8 sakura_rc.rc2 > $(RC_TMP_DIR)/sakura_rc.rc2 +$(RC_TMP_DIR)/sakura_rc.rc $(RC_TMP_DIR)/sakura_rc.rc2: $(RC_TMP_DIR)/ + $(ICONV) -f utf-16 -t utf-8 $(@F) > $@ $(RC_TMP_DIR)/: -$(MKDIR) $(RC_TMP_DIR) > $(DEVNULL) 2>&1 From a98d5d477d63adb49a6a4bde0a93dff2235a85b5 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sun, 22 Nov 2020 11:36:06 +0900 Subject: [PATCH 0267/1024] =?UTF-8?q?MinGW=E3=83=93=E3=83=AB=E3=83=89?= =?UTF-8?q?=E3=81=A7=E4=B8=80=E6=99=82=E3=83=87=E3=82=A3=E3=83=AC=E3=82=AF?= =?UTF-8?q?=E3=83=88=E3=83=AA=E3=81=AA=E3=81=97=E3=81=A7.rc=E3=82=92?= =?UTF-8?q?=E3=82=B3=E3=83=B3=E3=83=91=E3=82=A4=E3=83=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build-gnu.bat | 1 - sakura_core/Makefile | 16 +++++----------- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/build-gnu.bat b/build-gnu.bat index c15225b83d..5ca914952b 100644 --- a/build-gnu.bat +++ b/build-gnu.bat @@ -34,7 +34,6 @@ if errorlevel 1 ( echo error 2 errorlevel %errorlevel% exit /b 1 ) - exit /b 0 diff --git a/sakura_core/Makefile b/sakura_core/Makefile index 364a86050c..10dd529f5e 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -26,19 +26,19 @@ OUTDIR = ifeq ($(SHELL),sh.exe) # If cmd.exe is used as a shell. MKDIR = md -RMDIR = rmdir /s /q RM = del DIRSEP = $(strip \ ) DEVNULL = NUL ICONV = C:\msys64\usr\bin\iconv.exe +SED = C:\msys64\usr\bin\sed.exe else # If unix-like shell is used. MKDIR = mkdir -p -RMDIR = rm -fr RM = rm -f DIRSEP = / DEVNULL = /dev/null ICONV = iconv +SED = sed endif ifndef PREFIX @@ -120,8 +120,6 @@ GENERATED_FILES= \ HEADERMAKETOOLDIR= $(SRCDIR)/../HeaderMake HEADERMAKE= $(or $(OUTDIR),$(HEADERMAKETOOLDIR))/HeaderMake.exe -RC_TMP_DIR = _rc_tmp - all: $(exe) $(exe): $(OBJS) sakura_rc.o @@ -150,15 +148,11 @@ $(OBJS): StdAfx.h.gch $(HEADERMAKE): $(HEADERMAKETOOLDIR)/HeaderMake.cpp $(CXX) $(CXXFLAGS:-MMD=) $< -o $@ -static-libgcc -sakura_rc.o: $(RC_TMP_DIR)/sakura_rc.rc $(RC_TMP_DIR)/sakura_rc.rc2 githash.h Funccode_define.h +sakura_rc.o: sakura_rc.rc.utf8 sakura_rc.rc2.utf8 githash.h Funccode_define.h $(RC) -c utf-8 --language=0411 $(DEFINES) -I. -I$(SRCDIR) $< -o $@ - -$(RMDIR) $(RC_TMP_DIR) > $(DEVNULL) 2>&1 - -$(RC_TMP_DIR)/sakura_rc.rc $(RC_TMP_DIR)/sakura_rc.rc2: $(RC_TMP_DIR)/ - $(ICONV) -f utf-16 -t utf-8 $(@F) > $@ -$(RC_TMP_DIR)/: - -$(MKDIR) $(RC_TMP_DIR) > $(DEVNULL) 2>&1 +sakura_rc.rc.utf8 sakura_rc.rc2.utf8: sakura_rc.rc sakura_rc.rc2 + $(ICONV) -f utf-16 -t utf-8 $(subst .utf8,,$(@F)) | $(SED) '/#include/s/.rc2\b/.rc2.utf8/' > $@ clean: -$(RM) $(subst /,$(DIRSEP),$(exe) $(OBJS) $(HEADERMAKE)) StdAfx.h.gch $(GENERATED_FILES) From 57791c7e636a4fd24e68765325d81d9e34dc0814 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sun, 22 Nov 2020 11:37:02 +0900 Subject: [PATCH 0268/1024] =?UTF-8?q?MinGW=E3=83=93=E3=83=AB=E3=83=89?= =?UTF-8?q?=E6=99=82=E3=81=AE=E3=83=80=E3=82=A4=E3=82=A2=E3=83=AD=E3=82=B0?= =?UTF-8?q?=E6=96=87=E5=AD=97=E5=8C=96=E3=81=91=E8=A7=A3=E6=B6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/Makefile b/sakura_core/Makefile index 10dd529f5e..26b8ebba8d 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -152,7 +152,7 @@ sakura_rc.o: sakura_rc.rc.utf8 sakura_rc.rc2.utf8 githash.h Funccode_define.h $(RC) -c utf-8 --language=0411 $(DEFINES) -I. -I$(SRCDIR) $< -o $@ sakura_rc.rc.utf8 sakura_rc.rc2.utf8: sakura_rc.rc sakura_rc.rc2 - $(ICONV) -f utf-16 -t utf-8 $(subst .utf8,,$(@F)) | $(SED) '/#include/s/.rc2\b/.rc2.utf8/' > $@ + $(ICONV) -f utf-16 -t utf-8 $(subst .utf8,,$(@F)) | $(SED) -e 1i'#pragma code_page(65001)' -e '/#include/s/.rc2\b/.rc2.utf8/' > $@ clean: -$(RM) $(subst /,$(DIRSEP),$(exe) $(OBJS) $(HEADERMAKE)) StdAfx.h.gch $(GENERATED_FILES) From 241fb2f527ffc135069e6a3f9fa99b708bcc7e39 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sun, 22 Nov 2020 11:37:18 +0900 Subject: [PATCH 0269/1024] =?UTF-8?q?=5FAPS=5FNEXT=5F...=E3=81=AE=E5=80=A4?= =?UTF-8?q?=E3=82=92=E7=8F=BE=E5=9C=A8=E3=81=AE=E5=AE=9A=E7=BE=A9=E5=86=85?= =?UTF-8?q?=E5=AE=B9=E3=81=AB=E5=90=88=E3=82=8F=E3=81=9B=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/sakura_rc.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sakura_core/sakura_rc.h b/sakura_core/sakura_rc.h index 512e326cfa..d7de4d1194 100644 --- a/sakura_core/sakura_rc.h +++ b/sakura_core/sakura_rc.h @@ -832,9 +832,9 @@ // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 230 -#define _APS_NEXT_COMMAND_VALUE 4057 +#define _APS_NEXT_RESOURCE_VALUE 5224 +#define _APS_NEXT_COMMAND_VALUE 101 #define _APS_NEXT_CONTROL_VALUE 1738 -#define _APS_NEXT_SYMED_VALUE 104 +#define _APS_NEXT_SYMED_VALUE 10000 #endif #endif From b4af6c27ed53ef23553a3711f0b805186df19103 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sun, 22 Nov 2020 23:27:57 +0900 Subject: [PATCH 0270/1024] =?UTF-8?q?sakura=5Flang=5Fen=5FUS.vcxproj?= =?UTF-8?q?=E5=86=85=E3=81=AE=E4=B8=8D=E8=A6=81=E3=81=AB=E3=81=AA=E3=81=A3?= =?UTF-8?q?=E3=81=9F=E8=A8=98=E8=BF=B0=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_lang_en_US/sakura_lang_en_US.vcxproj | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/sakura_lang_en_US/sakura_lang_en_US.vcxproj b/sakura_lang_en_US/sakura_lang_en_US.vcxproj index 3c4305b708..fc20cb319d 100644 --- a/sakura_lang_en_US/sakura_lang_en_US.vcxproj +++ b/sakura_lang_en_US/sakura_lang_en_US.vcxproj @@ -82,7 +82,6 @@ ..\sakura_core;$(OutDir);%(AdditionalIncludeDirectories) 0x0409 - /c 65001 true @@ -127,16 +126,7 @@ - - - - - - - - - - + From e4ae1cab9239056e68e7b457e5f66bc08858cacf Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Tue, 24 Nov 2020 01:19:53 +0900 Subject: [PATCH 0271/1024] =?UTF-8?q?MinGW=E3=83=93=E3=83=AB=E3=83=89?= =?UTF-8?q?=E6=99=82=E3=81=AE=E3=83=AA=E3=82=BD=E3=83=BC=E3=82=B9=E9=96=A2?= =?UTF-8?q?=E9=80=A3=E7=94=9F=E6=88=90=E7=89=A9=E3=82=92clean=E5=AF=BE?= =?UTF-8?q?=E8=B1=A1=E3=81=AB=E8=BF=BD=E5=8A=A0=E3=81=A8.gitignore?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/.gitignore | 1 + sakura_core/Makefile | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/sakura_core/.gitignore b/sakura_core/.gitignore index 3e3a1f9139..c2d64a43b8 100644 --- a/sakura_core/.gitignore +++ b/sakura_core/.gitignore @@ -7,4 +7,5 @@ /sakura.exe *.d *.o +*.utf8 /StdAfx.h.gch diff --git a/sakura_core/Makefile b/sakura_core/Makefile index 26b8ebba8d..d984b90302 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -155,7 +155,7 @@ sakura_rc.rc.utf8 sakura_rc.rc2.utf8: sakura_rc.rc sakura_rc.rc2 $(ICONV) -f utf-16 -t utf-8 $(subst .utf8,,$(@F)) | $(SED) -e 1i'#pragma code_page(65001)' -e '/#include/s/.rc2\b/.rc2.utf8/' > $@ clean: - -$(RM) $(subst /,$(DIRSEP),$(exe) $(OBJS) $(HEADERMAKE)) StdAfx.h.gch $(GENERATED_FILES) + -$(RM) $(subst /,$(DIRSEP),$(exe) $(OBJS) $(HEADERMAKE)) StdAfx.h.gch $(GENERATED_FILES) sakura_rc.o sakura_rc.*.utf8 -$(RM) $(subst /,$(DIRSEP),$(DEPS)) .SUFFIXES: .cpp .o .rc From 30cc06f8be5b6361736a4a9ab3b17e31d1172acf Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Tue, 24 Nov 2020 02:54:52 +0900 Subject: [PATCH 0272/1024] =?UTF-8?q?rebase=E5=BE=8C=E3=81=AB=E3=81=8A?= =?UTF-8?q?=E3=81=8B=E3=81=97=E3=81=8F=E3=81=AA=E3=81=A3=E3=81=9F=E6=89=80?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/sakura_rc.rc | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index b3015ffca3..b4c667b36d 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -2153,6 +2153,18 @@ IDC_CURSOR_AUTOSCROLL_DOWN_LEFT CURSOR "../resource/auto_scroll IDC_CURSOR_AUTOSCROLL_DOWN_RIGHT CURSOR "../resource/auto_scroll_down_right.cur" +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_ICON_GREP ICON "../resource/icon_grep.ico" + +IDI_PRINTER ICON "../resource/printer.ico" + + ///////////////////////////////////////////////////////////////////////////// // // 100 @@ -2883,8 +2895,6 @@ END STRINGTABLE BEGIN - STR_SELLANG_NAME "Japanese" - STR_SELLANG_LANGID "0x0411" STR_SQLERR_EXEC_BUT_NOT_RUN "Oracle SQL*Plusで実行します。\n\n\nOracle SQL*Plusが起動されていません。\n" STR_SQLERR_ACTV_BUT_NOT_RUN @@ -3143,8 +3153,6 @@ BEGIN STR_DLGFNCLST_MENU_UNIFY "継承情報を統一(&U)" STR_DLGFNCLST_MENU_CLOSE "閉じる(&X)" STR_DLGFNCLST_UNIFY "現在の画面のドッキング配置情報をすべての共通設定・タイプ別設定にコピーして統一します。\n(現在開いている他画面の状態も統一します。)\n" - STR_BREGONIG_LOAD "bregonig.dll のロードに失敗しました。\r\n正規表現を利用するには Unicode 版の bregonig.dll が必要です。\r\n入手方法はヘルプを参照してください。" - STR_BREGONIG_INIT "bregonig.dll の利用に失敗しました。\r\n正規表現を利用するには Unicode 版の bregonig.dll が必要です。\r\n入手方法はヘルプを参照してください。" STR_BREGONIG_ERROR "bregonig.dll のロードで予期せぬエラーが発生しました。" STR_BREGONIG_TITLE "正規表現エラー" STR_ERR_CWSH09 "マクロの実行を中断しました。" From 459030086a4080378fbdcae80ff07714211c093e Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 28 Nov 2020 14:11:21 +0900 Subject: [PATCH 0273/1024] =?UTF-8?q?PR=E3=83=86=E3=83=B3=E3=83=97?= =?UTF-8?q?=E3=83=AC=E3=83=BC=E3=83=88=E3=81=AE=E3=80=8C=E5=BD=B1=E9=9F=BF?= =?UTF-8?q?=E7=AF=84=E5=9B=B2=E3=80=8D=E3=82=92=E3=80=8C=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E5=86=85=E5=AE=B9=E3=80=8D=E3=81=AE=E5=89=8D=E3=81=AB?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/PULL_REQUEST_TEMPLATE.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index c41e32d502..3896937270 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -52,6 +52,10 @@ +## PR の影響範囲 + + + ## テスト内容 @@ -63,10 +67,6 @@ 手順 -## PR の影響範囲 - - - ## 関連 issue, PR From efdd06e0a713e3b8de4346b427ae2fcb9d4ca3b7 Mon Sep 17 00:00:00 2001 From: "Kengo Ide (kagari)" <36005663+k-kagari@users.noreply.github.com> Date: Sun, 29 Nov 2020 11:34:17 +0900 Subject: [PATCH 0274/1024] =?UTF-8?q?=E3=82=B3=E3=83=B3=E3=83=9C=E3=83=9C?= =?UTF-8?q?=E3=83=83=E3=82=AF=E3=82=B9=E3=81=AB=20Ctrl+Backspace=20?= =?UTF-8?q?=E3=81=AB=E3=82=88=E3=82=8B=E5=8D=98=E8=AA=9E=E5=89=8A=E9=99=A4?= =?UTF-8?q?=E6=A9=9F=E8=83=BD=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B?= =?UTF-8?q?=20(#1470)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CSearchAgent.cpp | 43 ++---------------------------- sakura_core/dlg/CDialog.cpp | 45 ++++++++++++++++++++++++++++++-- sakura_core/parse/CWordParse.cpp | 45 ++++++++++++++++++++++++++++++++ sakura_core/parse/CWordParse.h | 3 +++ 4 files changed, 93 insertions(+), 43 deletions(-) diff --git a/sakura_core/CSearchAgent.cpp b/sakura_core/CSearchAgent.cpp index 7536ffa16b..03ad26b49f 100644 --- a/sakura_core/CSearchAgent.cpp +++ b/sakura_core/CSearchAgent.cpp @@ -406,48 +406,9 @@ bool CSearchAgent::PrevOrNextWord( } /* 前の単語か?後ろの単語か? */ if( bLEFT ){ - /* 現在位置の文字の種類を調べる */ - ECharKind nCharKind = CWordParse::WhatKindOfChar( pLine, nLineLen, nIdx ); - if( nIdx == 0 ){ - return false; - } - - /* 文字種類が変わるまで前方へサーチ */ - /* 空白とタブは無視する */ - int nCount = 0; - CLogicInt nIdxNext = nIdx; - CLogicInt nCharChars = CLogicInt(&pLine[nIdxNext] - CNativeW::GetCharPrev( pLine, nLineLen, &pLine[nIdxNext] )); - while( nCharChars > 0 ){ - CLogicInt nIdxNextPrev = nIdxNext; - nIdxNext -= nCharChars; - ECharKind nCharKindNext = CWordParse::WhatKindOfChar( pLine, nLineLen, nIdxNext ); - - ECharKind nCharKindMerge = CWordParse::WhatKindOfTwoChars( nCharKindNext, nCharKind ); - if( nCharKindMerge == CK_NULL ){ - /* サーチ開始位置の文字が空白またはタブの場合 */ - if( nCharKind == CK_TAB || nCharKind == CK_SPACE ){ - if ( bStopsBothEnds && nCount ){ - nIdxNext = nIdxNextPrev; - break; - } - nCharKindMerge = nCharKindNext; - }else{ - if( nCount == 0){ - nCharKindMerge = nCharKindNext; - }else{ - nIdxNext = nIdxNextPrev; - break; - } - } - } - nCharKind = nCharKindMerge; - nCharChars = CLogicInt(&pLine[nIdxNext] - CNativeW::GetCharPrev( pLine, nLineLen, &pLine[nIdxNext] )); - ++nCount; - } - *pnColumnNew = nIdxNext; - }else{ - CWordParse::SearchNextWordPosition(pLine, nLineLen, nIdx, pnColumnNew, bStopsBothEnds); + return CWordParse::SearchPrevWordPosition(pLine, nLineLen, nIdx, pnColumnNew, bStopsBothEnds); } + CWordParse::SearchNextWordPosition(pLine, nLineLen, nIdx, pnColumnNew, bStopsBothEnds); return true; } diff --git a/sakura_core/dlg/CDialog.cpp b/sakura_core/dlg/CDialog.cpp index 9706d412a6..7ec031ba25 100644 --- a/sakura_core/dlg/CDialog.cpp +++ b/sakura_core/dlg/CDialog.cpp @@ -19,10 +19,13 @@ Please contact the copyright holder to use this code for other purpose. */ #include "StdAfx.h" +#include +#include #include "dlg/CDialog.h" #include "CEditApp.h" #include "env/CShareData.h" #include "env/DLLSHAREDATA.h" +#include "parse/CWordParse.h" #include "recent/CRecent.h" #include "util/os.h" #include "util/shell.h" @@ -745,13 +748,28 @@ static void DeleteRecentItem( } } +//! コンボボックスのエディットの単語削除処理を行う +static int DeletePreviousWord(wchar_t* text, int length, int curPos) +{ + if (curPos == 0) { + // カーソル位置が既に先頭なので何もしない + return 0; + } + CLogicInt prevWordStartPos; + CWordParse::SearchPrevWordPosition(text, CLogicInt(length), CLogicInt(curPos), &prevWordStartPos, + GetDllShareData().m_Common.m_sGeneral.m_bStopsBothEndsWhenSearchWord); + assert(prevWordStartPos < curPos); + // null文字ごと前方へ移動する + std::copy(text + curPos, text + length + 1, text + prevWordStartPos); + return prevWordStartPos; +} + LRESULT CALLBACK SubEditProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData) { HWND hwndCombo = GetParent(hwnd); switch( uMsg ){ case WM_KEYDOWN: - { if( wParam == VK_DELETE ){ BOOL bShow = Combo_GetDroppedState(hwndCombo); int nIndex = Combo_GetCurSel(hwndCombo); @@ -760,7 +778,30 @@ LRESULT CALLBACK SubEditProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, } } break; - } + case WM_CHAR: + // ASCII 削除文字。Ctrl + Backspace が入力された。 + if (wParam == 0x7f) { + DWORD selStart, selEnd; + Combo_GetEditSel(hwndCombo, selStart, selEnd); + if (selStart != selEnd) { + // テキストが選択されているため、通常の削除動作を行う。 + // Edit に Backspace を流して処理してもらう。 + wParam = VK_BACK; + break; + } + + // 単語削除する + const int length = ::GetWindowTextLength(hwndCombo); + auto text = std::make_unique(length + 1); + ::GetWindowText(hwndCombo, text.get(), length + 1); + + const int pos = DeletePreviousWord(text.get(), length, selStart); + + ::SetWindowText(hwndCombo, text.get()); + Combo_SetEditSel(hwndCombo, pos, pos); + return 0; + } + break; } return ::DefSubclassProc(hwnd, uMsg, wParam, lParam); } diff --git a/sakura_core/parse/CWordParse.cpp b/sakura_core/parse/CWordParse.cpp index 7358d4c9be..9ea9043a99 100644 --- a/sakura_core/parse/CWordParse.cpp +++ b/sakura_core/parse/CWordParse.cpp @@ -309,6 +309,51 @@ bool CWordParse::SearchNextWordPosition4KW( return false; } +bool CWordParse::SearchPrevWordPosition(const wchar_t* pLine, + CLogicInt nLineLen, CLogicInt nIdx, CLogicInt* pnColumnNew, BOOL bStopsBothEnds) +{ + /* 現在位置の文字の種類を調べる */ + ECharKind nCharKind = CWordParse::WhatKindOfChar( pLine, nLineLen, nIdx ); + if( nIdx == 0 ){ + return false; + } + + /* 文字種類が変わるまで前方へサーチ */ + /* 空白とタブは無視する */ + int nCount = 0; + CLogicInt nIdxNext = nIdx; + CLogicInt nCharChars = CLogicInt(&pLine[nIdxNext] - CNativeW::GetCharPrev( pLine, nLineLen, &pLine[nIdxNext] )); + while( nCharChars > 0 ){ + CLogicInt nIdxNextPrev = nIdxNext; + nIdxNext -= nCharChars; + ECharKind nCharKindNext = CWordParse::WhatKindOfChar( pLine, nLineLen, nIdxNext ); + + ECharKind nCharKindMerge = CWordParse::WhatKindOfTwoChars( nCharKindNext, nCharKind ); + if( nCharKindMerge == CK_NULL ){ + /* サーチ開始位置の文字が空白またはタブの場合 */ + if( nCharKind == CK_TAB || nCharKind == CK_SPACE ){ + if ( bStopsBothEnds && nCount ){ + nIdxNext = nIdxNextPrev; + break; + } + nCharKindMerge = nCharKindNext; + }else{ + if( nCount == 0){ + nCharKindMerge = nCharKindNext; + }else{ + nIdxNext = nIdxNextPrev; + break; + } + } + } + nCharKind = nCharKindMerge; + nCharChars = CLogicInt(&pLine[nIdxNext] - CNativeW::GetCharPrev( pLine, nLineLen, &pLine[nIdxNext] )); + ++nCount; + } + *pnColumnNew = nIdxNext; + return true; +} + //! wcがasciiなら0-127のまま返す。それ以外は0を返す。 uchar_t wc_to_c(wchar_t wc) { diff --git a/sakura_core/parse/CWordParse.h b/sakura_core/parse/CWordParse.h index ceab19d184..6ad031a347 100644 --- a/sakura_core/parse/CWordParse.h +++ b/sakura_core/parse/CWordParse.h @@ -116,6 +116,9 @@ class CWordParse{ BOOL bStopsBothEnds // 単語の両端で止まる ); + static bool SearchPrevWordPosition(const wchar_t* pLine, + CLogicInt nLineLen, CLogicInt nIdx, CLogicInt* pnColumnNew, BOOL bStopsBothEnds); + template< class CHAR_TYPE > static int GetWord( const CHAR_TYPE* pS, const int nLen, const CHAR_TYPE *pszSplitCharList, CHAR_TYPE **ppWordStart, int *pnWordLen ); From 769f30cc788b199a53dba844c5c9a8539aa00e31 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sun, 29 Nov 2020 20:24:18 +0900 Subject: [PATCH 0275/1024] =?UTF-8?q?VisualStudio=E9=96=A2=E4=BF=82?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AE=E6=94=B9=E8=A1=8C?= =?UTF-8?q?=E3=82=B3=E3=83=BC=E3=83=89=E3=82=92.gitattribute=E3=81=A7?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitattributes | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.gitattributes b/.gitattributes index 09de1145cf..020fa30df0 100644 --- a/.gitattributes +++ b/.gitattributes @@ -6,3 +6,14 @@ Makefile text eol=lf sakura_rc.h text eol=crlf *.rc text working-tree-encoding=utf-16le-bom eol=crlf *.rc2 text working-tree-encoding=utf-16le-bom eol=crlf +*.config text eol=crlf +*.csproj text eol=crlf +*.filters text eol=crlf +*.manifest text eol=crlf +*.natvis text eol=crlf +*.props text eol=crlf +*.settings text eol=crlf +*.sln text eol=crlf +*.targets text eol=crlf +*.vcxproj text eol=crlf +*.vsconfig text eol=crlf From f5a7f94de1201992985cce8440aed696e5fac6c6 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Mon, 30 Nov 2020 02:28:44 +0900 Subject: [PATCH 0276/1024] =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E6=99=82=E3=81=AE=E6=97=A2=E5=AE=9A=E3=81=AE?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E5=90=8D=E3=82=92=E6=97=A5?= =?UTF-8?q?=E6=99=82=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/doc/CDocFileOperation.cpp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/sakura_core/doc/CDocFileOperation.cpp b/sakura_core/doc/CDocFileOperation.cpp index 5e4b531be2..d60dbe1876 100644 --- a/sakura_core/doc/CDocFileOperation.cpp +++ b/sakura_core/doc/CDocFileOperation.cpp @@ -40,6 +40,7 @@ #include "env/CSakuraEnvironment.h" #include "plugin/CPlugin.h" #include "plugin/CJackManager.h" +#include "util/format.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // ロック // @@ -263,14 +264,19 @@ bool CDocFileOperation::SaveFileDialog( wcscat(szDefaultWildCard, L";*.*"); // 全ファイル表示 } } - // 無題に、無題番号を付ける + + // 無題の時は日時を付ける if( pSaveInfo->cFilePath[0] == L'\0' ){ - const EditNode* node = CAppNodeManager::getInstance()->GetEditNode( m_pcDocRef->m_pcEditWnd->GetHwnd() ); - if( 0 < node->m_nId ){ - WCHAR szText[16]; - auto_sprintf(szText, L"%d", node->m_nId); - wcscpy(pSaveInfo->cFilePath, LS(STR_NO_TITLE2)); // 無題 - wcscat(pSaveInfo->cFilePath, szText); + SYSTEMTIME localTime = {}; + ::GetLocalTime( &localTime ); + TCHAR format[40] = {}; + auto_sprintf_s( format, _countof(format), _T("%s_%%Y%%m%%d_%%H%%M%%S"), LS(STR_NO_TITLE2) ); + if( !GetDateTimeFormat( pSaveInfo->cFilePath, pSaveInfo->cFilePath.GetBufferCount(), format, localTime ) ){ + // 失敗したら日時の代わりに連番を付与 + const EditNode* node = CAppNodeManager::getInstance()->GetEditNode( m_pcDocRef->m_pcEditWnd->GetHwnd() ); + if( 0 < node->m_nId ){ + auto_sprintf_s( pSaveInfo->cFilePath, pSaveInfo->cFilePath.GetBufferCount(), _T("%s%d"), LS(STR_NO_TITLE2), node->m_nId ); + } } } From f3f2e78680b2b5ca89543e3e0ca293849212e18a Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Sun, 6 Dec 2020 11:03:41 +0800 Subject: [PATCH 0277/1024] with BOM --- installer/sakura-common.iss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/installer/sakura-common.iss b/installer/sakura-common.iss index 91d907c78b..5ac1b52fc2 100644 --- a/installer/sakura-common.iss +++ b/installer/sakura-common.iss @@ -1,4 +1,4 @@ -#if VER < EncodeVer(5,6,1) +#if VER < EncodeVer(5,6,1) #define MySendTo "{sendto}" #else #define MySendTo "{usersendto}" @@ -200,7 +200,7 @@ zh_hant.ReadyMemo_VirtualStoreDisable=無效 en.ReadyMemo_ExecProfileDir=Same as the executable file ja.ReadyMemo_ExecProfileDir=実行ファイルと同一ディレクトリ zh_hans.ReadyMemo_ExecProfileDir=与可执行文件相同 -zh_hant.ReadyMemo_ExecProfileDir=與可執行文件相同 +zh_hant.ReadyMemo_ExecProfileDir=実行ファイルと同一ディレクトリ en.ReadyMemo_VirtualStoreEnable=Enable ja.ReadyMemo_VirtualStoreEnable=有効 From 8537b0da4cf2b3589e77f9c0892927e05b3adf0d Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Sun, 6 Dec 2020 11:09:39 +0800 Subject: [PATCH 0278/1024] change some wrong --- installer/sakura-common.iss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/installer/sakura-common.iss b/installer/sakura-common.iss index 5ac1b52fc2..24a4987bb7 100644 --- a/installer/sakura-common.iss +++ b/installer/sakura-common.iss @@ -200,7 +200,7 @@ zh_hant.ReadyMemo_VirtualStoreDisable=無效 en.ReadyMemo_ExecProfileDir=Same as the executable file ja.ReadyMemo_ExecProfileDir=実行ファイルと同一ディレクトリ zh_hans.ReadyMemo_ExecProfileDir=与可执行文件相同 -zh_hant.ReadyMemo_ExecProfileDir=実行ファイルと同一ディレクトリ +zh_hant.ReadyMemo_ExecProfileDir=與可執行文件相同 en.ReadyMemo_VirtualStoreEnable=Enable ja.ReadyMemo_VirtualStoreEnable=有効 From 9e3cfca25ccd369ca995effabd61256c9b7164fe Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sun, 6 Dec 2020 19:10:00 +0900 Subject: [PATCH 0279/1024] =?UTF-8?q?=E6=96=87=E5=AD=97=E5=88=97=E5=8F=96?= =?UTF-8?q?=E5=BE=97=E3=81=AE=E3=82=BF=E3=82=A4=E3=83=9F=E3=83=B3=E3=82=B0?= =?UTF-8?q?=E8=AA=A4=E3=82=8A=E3=81=AB=E3=82=88=E3=81=A3=E3=81=A6=E5=88=9D?= =?UTF-8?q?=E6=9C=9F=E5=8C=96=E3=81=95=E3=82=8C=E3=81=AA=E3=81=84=E5=80=A4?= =?UTF-8?q?=E3=81=8C=E4=BD=BF=E3=82=8F=E3=82=8C=E3=82=8B=E5=8F=AF=E8=83=BD?= =?UTF-8?q?=E6=80=A7=E3=81=AB=E5=AF=BE=E5=87=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/prop/CPropComFileName.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sakura_core/prop/CPropComFileName.cpp b/sakura_core/prop/CPropComFileName.cpp index 53006e6df5..e074ac34ba 100644 --- a/sakura_core/prop/CPropComFileName.cpp +++ b/sakura_core/prop/CPropComFileName.cpp @@ -229,14 +229,14 @@ INT_PTR CPropFileName::DispatchEvent( HWND hwndDlg, UINT uMsg, WPARAM wParam, LP break; case IDC_BUTTON_FNAME_UPD: // 更新 + ::DlgItem_GetText( hwndDlg, IDC_EDIT_FNAME_FROM, szFrom, _MAX_PATH ); + ::DlgItem_GetText( hwndDlg, IDC_EDIT_FNAME_TO, szTo, _MAX_PATH ); if( -1 != nIndex ){ - ::DlgItem_GetText( hwndDlg, IDC_EDIT_FNAME_FROM, szFrom, _MAX_PATH ); - ::DlgItem_GetText( hwndDlg, IDC_EDIT_FNAME_TO, szTo, _MAX_PATH ); if( -1 != SetListViewItem_FILENAME( hListView, nIndex, szFrom, szTo, false ) ){ return TRUE; } }else{ - // 未選択でリストにひとつも項目がない場合は追加しておく + // 項目を選択していない理由が「リストに項目がない」であれば、更新ボタンで項目を追加できるようにする if( 0 == ListView_GetItemCount( hListView ) ){ if( -1 != SetListViewItem_FILENAME( hListView, 0, szFrom, szTo, true ) ){ return TRUE; From eeb9b8b2991ea6ff5f7356b0d31eba4ec3082c4e Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Mon, 7 Dec 2020 22:43:10 +0900 Subject: [PATCH 0280/1024] =?UTF-8?q?'=E7=84=A1=E9=A1=8C'=E3=81=AE?= =?UTF-8?q?=E7=9B=B4=E5=BE=8C=E3=81=AE=E9=80=A3=E7=95=AA=E3=82=92=E5=BE=A9?= =?UTF-8?q?=E6=B4=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/doc/CDocFileOperation.cpp | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/sakura_core/doc/CDocFileOperation.cpp b/sakura_core/doc/CDocFileOperation.cpp index d60dbe1876..2f4f782785 100644 --- a/sakura_core/doc/CDocFileOperation.cpp +++ b/sakura_core/doc/CDocFileOperation.cpp @@ -269,15 +269,12 @@ bool CDocFileOperation::SaveFileDialog( if( pSaveInfo->cFilePath[0] == L'\0' ){ SYSTEMTIME localTime = {}; ::GetLocalTime( &localTime ); - TCHAR format[40] = {}; - auto_sprintf_s( format, _countof(format), _T("%s_%%Y%%m%%d_%%H%%M%%S"), LS(STR_NO_TITLE2) ); - if( !GetDateTimeFormat( pSaveInfo->cFilePath, pSaveInfo->cFilePath.GetBufferCount(), format, localTime ) ){ - // 失敗したら日時の代わりに連番を付与 - const EditNode* node = CAppNodeManager::getInstance()->GetEditNode( m_pcDocRef->m_pcEditWnd->GetHwnd() ); - if( 0 < node->m_nId ){ - auto_sprintf_s( pSaveInfo->cFilePath, pSaveInfo->cFilePath.GetBufferCount(), _T("%s%d"), LS(STR_NO_TITLE2), node->m_nId ); - } - } + TCHAR dateTimeString[20] = {}; + GetDateTimeFormat( dateTimeString, _countof(dateTimeString), _T("_%Y%m%d_%H%M%S"), localTime ); + + const EditNode* node = CAppNodeManager::getInstance()->GetEditNode( m_pcDocRef->m_pcEditWnd->GetHwnd() ); + const int nId = (node != NULL && 0 < node->m_nId) ? node->m_nId : 0; + auto_sprintf_s( pSaveInfo->cFilePath, pSaveInfo->cFilePath.GetBufferCount(), _T("%s%.0d_%s"), LS(STR_NO_TITLE2), nId, dateTimeString ); } // ダイアログを表示 From 271045eb49442d6a710c016347eb85e13714770b Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Mon, 7 Dec 2020 22:49:34 +0900 Subject: [PATCH 0281/1024] =?UTF-8?q?=E6=97=A5=E6=99=82=E4=BB=98=E5=8A=A0?= =?UTF-8?q?=E3=81=AB=E9=96=A2=E3=81=99=E3=82=8B=E8=A8=98=E8=BF=B0=E3=82=92?= =?UTF-8?q?=E3=83=98=E3=83=AB=E3=83=97=E3=81=AB=E8=A8=98=E8=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- help/sakura/res/HLP000021.html | 1 + help/sakura/res/images/FileSave.png | Bin 22336 -> 23195 bytes 2 files changed, 1 insertion(+) diff --git a/help/sakura/res/HLP000021.html b/help/sakura/res/HLP000021.html index 8ccf23b626..ef499c4319 100644 --- a/help/sakura/res/HLP000021.html +++ b/help/sakura/res/HLP000021.html @@ -15,6 +15,7 @@

    名前を付けて保存

    現在編集しているテキストにファイル名を付けて保存します。
    フォルダの初期値はカレントディレクトリ/MRUの1番目/指定フォルダを共通設定 『編集』で指定可能です。(2.0.6.0 以降)
    +無題のファイル名には現在の日時を示す文字列が付加されます。(2.x.x.x 以降)



    diff --git a/help/sakura/res/images/FileSave.png b/help/sakura/res/images/FileSave.png index ea05f0a776ab182abf109f0be60f64189fa45a3f..81bb19d81211de7c3eabbcff1af48a5d2a63d9f8 100644 GIT binary patch literal 23195 zcmbrmWmuGZ)IN$yi6AK;pro`kf`A|)EgeG*9RogLk$fwbTN>fVg04g8GIP@`G@hE@FXR#rExOue(}?QMa&u37ZZu*Z+V
  • ES(z?@xWGzZu*k6wNyMMfm99y)2pN89{1_hxZuwulm2eGVb2m8giaH@bc7y z30j-En5_!U&X$wx@8rD1@Og>xt3#{Yd=R@wR?o`=Co_JF_my!=LrK`x5- zQ1p~>i|R_A==Lq%BTT=r+rQ!Q-hM=Gw!^XRIn88AD4j1Xusud#R!0(?Ko}p4;S?!g z#8OOsKG?C>_UxhPcT#3Z!m&_<2}^>1FUp!z%k71KZ)pm(G&0IGm4YSrc18GiL;dHi zBN!kXsqis!sR;Xopy~5?CX1aZ;@gw@v07RUwzD9J)h^c9II%$;1xAiY%}XY=4IRCp z`Y2*S+Ab^LfX38*y`C(Lh&WX$+0vJ?i)F}HTD;guf7bk!34Q;I87m|iaFIw_NL)=q zy>zndhZ=}fumfZG1PC@!iI%yeO<4;wNkKf1u=xPo*EA6(QQvJs1s^GCa~wz*$tc%! zWUd&B74R>?PFmb?z7tTwCvXJFzt@C;qa7>h;vt>WixaG*tXwLoU>e}yrC6Y`;Tn2N zDqdh=f#0BKeyqb_tH0d9m8jK_oNCBLj~IRumGF{BAo`>5J&5g~)-wOWoqRbP5UH8i zIk1>KF^VjOZ>ZjBE5|sJC?j&8Zs@HxUP4-HhDh&pC5GT#?lA{YD=Zjxh$Bo?sG{T1khrk+<`@s9` z7yrD!wj)3@sEb^W=O^%Eb&r;Mh>&~ySN6C}rh8H1NNrMMvH+>n@Yp)5byLZgU_tD-X38*1w;k;CO zMi^>H!y6gh%8z**e%GbM=bQy{KYK`DL8QZ96o-kj5kzV)U^~Us#J+UKeoqN@d8-nC zRJm{c1I$K#snAeLj(CiB{16kgGu-Sq*{pThD_Xg*-B%L#Tuv`rc00O>M~EE%BglNfqY zY1WEeJK%E$!p}dh8-8E>H*YQd(Lwv@X{EZl`Y&P1dL@=g|K+BR#X;{@1p+iL%%pk> zn=J(8qMDW@lhNSYB|WgLwZRDn7c#~8WTsGdsDV^f!sue*Pts3M&0{0*~9`=x5 zv9%2xtvoS~klA1PDvZwHJ8NlSfqCWCA`Bdb794VgLQH(gL71{XBoal6nZ_DX@pfxw zv@e(9g2L(TknWNgprN>8q=_s&*nvvZ(m#d4jpRriqn7^AS2ey7&rP{F1^KS-O2YJz zxc`F)5k8z&F@h~p!h|Ik5y$-q?esMyPVBRNVoUG`f1x-}qz)4#*NWk7VoM~c2Dlq# z*;^v5W0_xpEPTj@=u7(I+gCb$t@OO)<0ol8P*CTGkmKLDKbo9(XILj`*)olDdr`{% zy?PZ7{?LGB&#e_&M9rd1gN^)IbFDqLh>pd%gK4-vBBy07*#r%$eyc{cw(BDIx0@Ae z4r{{&Jio%Ma9T5mVAM;#-H#iM{3u9C84oWa^Yo5WCh&NF%pgq9NLS?7Ep&DI*2#*o zKn?VJW}bF2r=hm^tH`JSry+||@hm*h-MFoWQYsKKTfk94rpkcOf7>oG#le4d;>zlVkv+Vc%sUG&EC|OM+wnrR%xrhCc;1 zH&6=U;9g2QT%C+Ow!m2aN2~gOyGu{x1XmLsk7W=alRe6~xw)S_d2&hzX&cLE%n^ha zXJ=-9bb`ydB%uR)(YP`~OchdvJq6yp85kdL=ik~}Y)?r^+1}n}Wn~Qu3&X*|!KHln zyRfh@FE8)+@2aF^v&GnQt8umuA3ii-Tv&kw!?9YEFQGBZvV5%9gkFac>86d1rkCDw z6R4@F5dY`Ek?(sD@d_#i{`UT!`eb0ytBcX1dRRWNk8WqC9weH~s)n>6F;m&qa)%rg zdL+GUCIL1}V8v%?K|^~(FqZ`j3<%Ji88QcnxQm^HfQm*3nx--#q&YA9;+VEn1GPpx zLN|Kx`|H_as)mcjL07B`$h793>pvqCaz6y1OZ5@l!MGx>^Q4E{+5037lI7iNgZ=@4 z2HsTsRYoeN3CA9K`9V-KvZRmX*{aLglH>Gq6hmzpeaf=11SfXn^EeF-dyYp(lQ_Jm zE4+F}CTLK8p|beNLhc5y+M|O|do;jW5?{O#&L2HE`T1WT_XbVYWF-yllaYdMx^i!F za;Cf>>K8L?#f&a+RWP<{O3ofc5uTCxPFmIUy5_~{{MQHQlEU|hFTSbwXN0lA>m(y_ z(9pg;xbd_0&Vd>jygy6{s&E=MV*0(l|F;@CcobgY5S3sw8A-#@9nU^KGNNh>o-Of= z9a4J;EhXhUNhL};Uc-@_WwxBv(9obd!^^}1mAl8Ox;;Qc`}F#hVe7z7_v#AKo+4d( zEw>0W6nRH#pkQQP$%(&Z7)>B+u*6)uOMx07Eml#+t-qoKVf1S~tDBW^xAf?_y}u4ZUv zHO_nBsH&>!_wV0He6}@JRhl4uy+*I@9aL>tXegmNQYns|0};-DZ1xp)z}-SWzO0*F zobhdF%@etQPv`;KmxX2#a9YFQ8Q|IN4lVdrnTy{1e8^%q&$Dj&FSW zt8s?i)A73fU_cR7;k9Ky7pO7Puv>7hn+-RG)LV`+IXF15v;#)AJ)Z_s)b)Pj;ja+v z?__MJtc=g~-pR?y)wsM~3h8gf==>G)xCxWDXuMC)@%ZSd-eI*bmRUnpRrSZdukbI%;ie69~v| zk2@N5QJQ@@INIttk$Q$A9PD{6bcJM``u-h{kFU~t3Z9#rD_>exts|Rk$E#vS^6>%R zqkCvyNbdv7u7k!VCPqa*j(>ZI$wo*E`{J?R!2wUrEhGh@znNy-dEsfU4QJpXh7+Km zG9@X5s)L?~BU-q)5yLr(#h}XY+%kqT>lc;d4}n^M8PF(4|F3YV6vfA{tK*_9U#AD` zs1K(weJ!i^p&m$#F=a4$M+huqoXdv*{o@v#}k=E z6EFNzcK8{#7jC0br?ai0J`WmN&*xJHNHq2dS>n_b^if`T@h_xIjjpK8Nv859nm$e&^;ghQk^g z=#CwBkPV4ZQPhEDcFRg=Xg?_bDk3FU2{w}^6Km7>0=OzFyc^~qMPI&rLC2-ksfruY zPMsOn>hG~;R%+!^gSNHV%rG&viR4-pAV{?!|UYR<_lLjylR`*R4yy|K#Rd~0)S z_scqXc+pSL@_n$BgoKHi+0-NYLv+Y5?yvLOsS`Cp9f-lf@o|^lL>`BRwrM`04FAU! zcuO^g& z?3lKUYx#1!<|a@zv?{i3mv-al94cnGF5j0d5I9vpX?p``JFrKr+cJr1%D?!dJA&~w z4NY@rCu3D9-(K+C#%r4DQAs|shvoO^ zqi$sV$Hsy(UD4tuE5+Skslul(9{|YXi^Y>0zd{p2RUMS(;Bg&Xp@1lPnn+y?{_5=B zy?d`-y)wJ{_54G-Ge(hEm#aX5-cL*VrqLx`YM7H){hu)*#m+0en)GyQSJzf@+qx3h zJ;TXQOwxs9phq}5xPofZ--=I=H;D;xaPX4x?XV)&8Bz92& zH~ysaXxEc(8*6H6-K{G#7%R|9^S-VY)0KVKwNEFB1Pqe}&p9;!xl~ivedwgBL^cr! zpaugnAmi<-G;VAq6A`NR;&X9vF)-v1FesQ)3V1AKhP9gT9dxsqD#S-5!@;W7*4wdB z`z;f1ooDLKY#Yv2^3?KwP^+cyjHzj9y|s6W0kGKBk=J_0fkGtLCsxJvywKwsi`qBgl#PwLk0ohfEN2FXlTQfl$4Iy z>3e(aRE^E|Ouf_#G;<5;Wc6neNaW<7xusMg^msPiz4OiD#-lM1HVNB{27+VSsmYkB ziWX8cE+^-&+@DqO01JBsSlHvok3-8&>=7ZYu}9gJ~~kIe>H8+UdYjEER0-MaGyvvM|!c-nV< zn4J1+RE(m0w@zvWTqRverTB|W`Q15qg>$R3tUv!{BsK(&jVTuZYi)oHphdMAlFDsq zMt!%K3r?jc0ngSYq^S)=QPzlTdZ{Q`8i;F}n#o$6UHxvlo`DB2Y4ra*AVK9@ZCsq6 zm*4@Kku!+$>#gtZNS00vM^ z>>!9Qc-!)U`pTP-Y#VB1}@er3tvE_b+Oar5V@ z8Ra7E9aER|>^MBEdne^e>o}Hb8J$f=L4o*U;#+;u=^7gg?%I?K&a?WLZ@u0Ee%mSM z>MuXdEjh$3H_Zf*rf4rU(_YJBC`7QWuZ89AG-yo{f%dBEGG-O8##1UqtZOS+y1fh2 zCP30TUU3Eovqe&RJbaaSSMQOw{dDSWw4zAEqbFv7LTI^25pjMVh`15|Zf=uO9?z*> zT5Iet{PEW>{B=hLp&VI9#&U~c3w_@&rTjUHfVJ~$;jmYi+seBd--K>{tX#IOv|>9t zJ!$c(GZYf45hso<0U-VmAz-$0WYM}{g8T^SQbGx6BsWfUXxM5?;W~84FJ*j?Tnj~^ zJxQc>&3^^99lG++SWbiHvs>12%x?bCXS2R6jBc~a7e+bGC;MjFYCsNJaCsOBLZzYG%6!cvegkOioG0aP(km5p%+h^Eq zx6Aae76SZl&i|&gf`rdc|BBX^$8Zns#)i00xR`zbob2Z(xgk+AF)|v9Wu96ZX=56L z&}E(y^&WeSq^tVRgvVFmGfUyuOJfbweb);`U$b*QP>7?%J;hhqs;o6;R?S@)sc8!u zcD^EukFr7E3TA zgRdk*B)y{8<8zRmJ%JMW;NOG^5;iDlqE=3JrijO<*n?SH6C|_fMt!1xBQbQ z9lr4hIj^x!gmTL{h8D6~v%Rf-^e|8&$7FeQOvqyz&+(4W3|!@;4%4{m%vEB+AUc4NX}ab(vR~wm`?)CHMI0xDID~*3GhyJJSoGnxr$*l6Dl0VZ zw=-4&L;j)7Vr@!V&6u}q$qMs{JL@dj)LI*Iq3?J{l%6WJST*9sNH`t6od4B+@+hd% zhUd+jACKi1SjKUw+?dwyNh3wW^K*d8i29ER_{J(Mqw`26a3t=x`u^|id?I77V%zbf zW5uE|_OfCv@9IgG%rV|`QHT-<>Vk`N6dbUAU8*&>ljM7mVNsN7h<&k{=gv)o%9`ob zE@y8CS$-SkN(Qc?f^p+lzhRImMVC9B&HBuz0CNN6oy!7;xvg2?o*1iD)?27`hF)if z|H200M=?PL*~DDdqVn9P)3MRe2=Rat+-dn!G`BXz`8#hecI(ZJ=kAlOQOFv~sV(7U z(G}G@Di{Ua1 zU5NTzqTn3-i%kOt?Q5!zj%{PYyzTAHv{$P3jMN8?+TPXfKZU@?9r>6Q zjbmNsjas#1MY{PJ8Oi82YpCI*f+d`y2i-avVvI8SJbC#^Y5oF6|7sEHFHKlD<#p^bc+!pBH zx^=-3!u_&i|4SjF{rm!~9-<}|kv-6@cbKQ91u|_ zp)K0fRo@=bc)4F6;k|m5M71+pr3A1fk<5_XTkh?R?tB*PXkop5<){)nFYqy$q**!4 zAEG-Z$#&N7j~dhRKC)@mKin-It51xHF+PfKT(Uh=8QHqIvOnIcho0J70q@w#)J@JAIu=O$GaT?)>##)orMIJa@X(29A{o_ zgl+FOTmG@-{Jy(x0>c%$%hFzKrB0ErCl-p#YS^U69 zXpE$v{-n@Q!9cwx%Tfi%Vi+j7R=vU1^Ewk|BnRkFSw92@sADXT9^QDK5Vg~U>s=gw zqk&rDlQ;Us6(t$5ALq2Ecx`>z$&mI!z_G)zbdGwfuC7MKJx^HOVJloKK;Kmjgc9oT zYRvaF^NY9hJ75aQATe5uP6SOpMo%+*1(ZYyXg7XWJ2eDW5Lx0B6F=RTgp$aNTf&8& zvHUNYTb8O`7^}0)HpsjBTspRSP3gz_rEA>a{&IH$7AW1%^8f&@qO$I5*98~y61iWW zffG_#vzAXX9$!GG$ntcAeEakri;Hr1H#ghG0MN^I4~S~Zorr#R&YE5lESjy2a9c=< zvQ%&dx5)RE^Jp#nM5<*$s!x{BhwisG7z zV(-u9r-D|N79x%d2!R2+`0x^2w}c=e{)ucV^tq2X@cWj4&ite1VZ%g`{mwq*Yi7qX(BQ+y%^B; zHj|USYnF?yi2Vm7bPNm;9w{v2`2S>ss*L!|;RZVSgl@nb(Tx4$5!b`VKlCYkD7P9I z0K*8)lbV{O_UAUNsjyi|3&*IkyD&!yjWXaCaejE5oyoW@r!<+`A`bS~9U3H8L3x&y zGs73`+@u=Q&WiMU(+I4*TdXSHOrr>taZ>=-VL zr1>7ws2&6UVCu@aB?1Y#_SL(dTQt7);$Ug6#U?crbAPj(Y%GXl{O*#H!Tz)>Z#ZSw>c6!9WA? zv5S0&=fytie`WzLm3{UJo;t2th~$>9=ev-v1(6E9@42E)`WqwB9u*^ut)ab=bC^1H zVhXys4s&AGC>jCy6K?RT)1jogOJJO{M4X6%H!{glWLE8Lb!H=k%(mx5;BUMvx%Xz~ z-ejI4pDzFEn{#p#+w7HFz)IxFa=4)!2rz~((E-LVIJh$+?&4aRPI^5gs4_IVJ8$=? zV{1faBP--kCEM1({#Srh7j>CyR=+J1EAA)lx$}(5CpRbZu_E===lVB#{I)Z7S+emq zQ}FGMNSbf-|3`SYe113T4)1m|K)8c%!9M^bxGoJ6`V}i%F}G@|*GQOLGInQ4*J_0D zSJv16wkTTTUl))SmT%My;qTs@N1zmE-d%3;IbR<25|x?td!3+MNTt2c*K_o}&X)U9 z1V=|lfzpa$yC!qm-?K4;uR24dx`Ms3tg*`K=lc35bR|9|s=;b(o2l57x0AZxFfj9r zp>Ot`N-K2s*Sw7>gRS$(ZCqkKg;{17`ub{hC}M{5a&)tcz5Z+v zR5lCNEH&-~_zGSK5@yu?R837yUS6Jpg5tpg-%gh7cIquCMg5t0tN5}wkNA;zZ-3wZ z2EHnCXKa-%K2H7k@Nj5gAXLxq9-4vaA6f7XctR_Shc9M@-^+GPIy>~bk&n0Woz*(P zA9k!vT`QfcsTx6;lWVAa@- z4SpD&Yk}8G37>nMgkL=t{>n!w4557f{Lgl{$uSq2sEinjgAvNjEeD?m9wV-;xpz zBl8t@eOlH)7^`QupFN@xfvErDHgNeHxBHg6czwzQ(QDR48a8re*V?!a?=uHrB^zNUL8zQ zbV@|5VSm%menm#F;;KX_O(L;sf6w8#HVy#g_YoKLcK8figB<`U?l;Hszgp^yK2C4@ zaFn*Rw8T=WeY*OSq(6JM&`sRLT6I89DL10xP;o}OYwp@p5ehDwo)m|;042&FlI$E< zmT+9|es-=E{_grZhtHw@Ggc}c0Ufu z-Xg-8^fe;hlCG%C?LYL9SkP1J5R`=cH-;^EcwZO1O(f0r!umw5E3T0>Xle`STG{Pw zyXJT^j1BaT^bI0R8wKO!D#v4JRoN&c7!dX(?BQii%UN2yDw@Jn|41ShCVjkO7d2+8 zuxM?ygWz@PwuP*lZ>MiO?drw$c69MH+ouGYJ!s7&Tx{1a9?80{GCAh{tcQ<6W~^lM z+K{_rbON5z?6d+}Y|9lRwH`7X9d?569pPG%K)bp1YdeD8BG5OIJH=sLR)qn=wOUZq z1`lXgJqTK`)nTtI{V8OP@ zG*d=*L$<6D3&0pZc>k&)X)gwiX=`B?_aVKyNXcWy*dx~FcE42~rRlT&x|6G4uONCc zO~qGEdgaxqXC9Tlz}Qq)2ojxu6~Y!PAU$RCedHN{|K)56wUI5=8+6b32v!fu7$(N1 z{R?fOIpx_Fr%%|LIOgBt(1Uy9`K}EQvXtwYbA_uFuNDQXs2tl2MbjGy#%b9E;*ccx z6amXsT)DOhnu>$BohuK~boONGK%M31k+jL3)&k(qgz&y#&{-@_^Q{d8^AKuCcvbse zyD1hEMd?$XwZKDogPA#%i_L(6w)gl|ai@fTl#qep0cP=I5%8lzdo1>JFbKNx-Arz3 zMK`dSW|6@mc;23(1T%4jzkwU5*q>s6?EDMC&mG^wPNNi?B#Ni8Dc^<{t&KxC? znxgRVr|f>79)xywb~N$}H1O0QPb4R1lI-jr1pt&yIfvzuD`Uq>)f6l{62svU%HC;sbzyaKvLj+(Zr*V_+=UGK(TX@UWDk*0>-8eROJDx5 zWzD5&^Oc7UkOCT>i8khin7Jsl|5HC&Smq+;+3Ii@ep76visd6kazXSk3LBs^J`QxP zoBZYbxp`S2ulj?Dc%^xZ3f$wkzr6l^D}MVQ!U(u?z3$9N|7$nLUtNq2fxgs9Tj`I~!SP+pw`FaKwgOA_?oTw{p!dvaqqf=sE zWLB?K8%=FR6gpJ8?;etNmw(&IwjoPd(zfr<9x&YR%=&pBi{)k7yBZa`wOGyR3fXQk z6%_}Wr(^)n-V7%W()#O(d5tkTO*2aejjsB{ew>(8D}2`)dg02lrCO=QDiJS8)k3(! z@NmY8-6CtU&o)X=QG=5)Z|h8dSEoju)|}FeGIIp;aZs1dY$2GFj=|lI@E8^=^^^}f zzv-h10Si635H-uF{qC31Be{F9;;IZVuTO6KT_w#L;M$b)-(|=2I2;a6^_Bf7-l{cw z`ei;Px7wEzI4$q$)fB?leHwcfld^nJ$R_`#_#2Ps^hM811XZ~iZp7Ko{I2TqvPlAx z+QIw)d{F}6OM5tFXDvMDd^6}p;PAkbJ6n0OlD$pz%N}1C{@0wq8_5_U?=APVp^aSF zvfD4_H9xby;}j^+yC>2|9@c@A3;*LGQWQNVwMgIl@=5y1KRCwCXV*T{a5cu}?ui-f z@%<@gU(J5njTET!OXgzC)cng=tMvVpsU}9?x7Uc-`cM|orodv}0-ND_gZj&_3OWJ` z0qqAg$%3aSQA1kuAAGN8F_Josl6s)=);8SdE0~E*3Di@}QlDcIpzxn`$$Q)f;~ctk z>*aaJBU?yvKI>vP3M^qRhMsj5spyH@4hWnpDFjBRJNi&#?;%hrW7_)bu1E^)94<{) z4tcOFhBvRn0=?XP4ytr^qotlcLWSW(RFgfkab7(?E^saDLT(?en{LN8r5u$sQ#Bdr z*QT}J*v!-=*ufWWtqb5Z+5J7+JglJCq#K{J!=n+o1K2p9g`xSZFVn>Ar=mSbDhc&X zrh7Eq41xqwl^0)*K2a8@8+AE;cJwA!T3JK)rd=&x-NMT1mTN{MBxt~@z22d;zkSA zvY%;uSE2Xk`(zyQQgoE?yWTLLrj%-PrtsCzws`i2o9l~5gIc*SWSxG(T501k!zEM$C#Rs|TPV#abp7jbZ*9Y81eXKf;uA}=nnSTw< zXX;#e+xDN01DKD&8lCsH_J05L)O|kY9NDXCpU8Q_ky}?1^E=|T?;3q%|G|@*hIDo0zUzuNfl4LrP8J|`f< zCtM;h=$GK8Vw(ERM4j7#^Un0!&dTQK5-7qnt zVkr%)muZ`sE5imP8jtW5f7P09>v4E33sjcx9M`_DFWm>CGTL{d2CR$lZuAFkE3A>S z54Y#9s^#c<b2^<|9^m5;6)3-gPeX{3}zYEzO+Di!vPM2YSRh zuma{#ZPu*JnXRODH?r80U2CnQK%icb-&bq7liPli1~_o)xmD#k)mYMdt1LFul2lsr!EX{hNR08-1 zG#@~qq`mUU$jJ4We|1EOUCUxGZ?a^W4&QN^^>jJgUj{~kP;l!cU`8!2E-pMgyrJRR zSkH~{E^O`q+vmvhk>;_U&RtcDS)%|+{a61a=Mmf99`a8W5cj!+XBxe4fZhU8Uf~^s z^hOl;Zr$VCWnMCWV}qi_(E&S|S%F-QvL=u;IM49oF45;96OK7l@1{Uirx{K;&Qe zu?iqRl1OJncpXIPMe=Km>Z}mlUBWqA5=mR_N0G{!z_b;q)bjMrzIrubdlY@^j6vV+ zJUnm(%^#&$NiDHuwB28gXnW6_J0=rZhc#)(BW>=SOe>*_esBKmcj(C*Y34}jqQ%ya z+93kRw|4)-BiogVH>?uY&hKd$E7a*_{NnD4IzP^R`+`8Mf|$1uJ*Aru_jaW(C0u2G ztj9D4CncGBcfaU-IF6ro|DOS>`{27PxuW^u+%7$L5AQDUd_jMYygLRZ+W*@Je~E-t2YSa7GJ zLeaM{R-C5|yF01&Tbf846WNM-bfOkuKp7Cb7C=M;BMGdmg$gO}tZjGK771QZq`2z240sOa4TY*nlpKDQkZ?j&Lvikoa<@WcIhVz;*=n3y({mF<81imI=(nMArK3vWAZ#8mpqW`a)Z|3K-|m*x4W zqP@v=EnenZ(T$DS4Gu0hV?OEG`}@(sIUFu9Z~fCY$E5`zAEsOGF8Z?y=v<5!2lDdr zPEF{(^}gPiC@WgkMX&|XRx=R!$M9tfXF1~gx#3;-iPd)G#IlKGs<@E#B};eo+2AFW zmjm-}V(i6)pd_?@*;vF)7)l8*P$qe4+pwYWI9i(}Naai{v-?e7D`Y8tHE!eag1 zGBH?Nj)A$OL49DYS9NHdaxkp@zBO0gQ*XH@iY1g-Jo%ajt5)oABu!;hbUr5+RZMIJ zH?K256Bp)f>>m{Z0$=^}b!7f`ZflSCHrId4Qwdonr0FkHI%+h2VUbyPB+~tzk&m-9 zD&}QPh-AY!_`+CA8Ywsu=|q-9R3N^_vYsf!=xtt7CRn;|D zlH;yoCHKBQGk!FoK3q-qH8bH2E+oGrPwW$j3vN16WRkSH5(kU{K`)-L7Q&hXJ;SLY z96x__a+Kra!X6z9zpaMQUenjreg4+F-fdwKE6~(xsdb-pljOTa$@{4|6USdV-xp1c z^OllA8O+@r$L7^}oj@UWfH1$t(f%Ag6LCu4GaSozj`M*`QIF{juY!mhXM2CKxj53x zORGIX-{_s^rEBKbue*DTO+6~CtQ!9+R0Ev!JgKJIWT%|j_3f8yB5_-t46X6tNWSPt z>58MjDATZWYd^nQ?T8#v$>HozQ#{%4qV&w-^1hL?+O%?a-+{x&dwZ{VxQl-039PSG ziT)2DPHO67JO8P>LshrdFMOyWa$YM^h(YD}aee=35x*O!)$WX6Z&Jp|Zewh!9tDX8 z8Q%BRt>pQonECYt3c?ugZS9%X5O90=S#G`{R~|3VQE4UaTPG&Gf1O1W*&cB=IZ1yL z!Cb%ep(gl2I_b8saI2(b?#6~R6H{)jbJlBShP*s_PK1Jdq1?yU5fSW0-ykk07vbUS zp>?E+TpU~nb*_7fWe!0`X^CNBBLC{C1jgFq`QpV88?6&PozQ2;9u5xa@)GHi3i;tt zdBfzw?6`uw#2VY#dU8H2Nk5@!T1sN|we1umo1OV3LdT33JP_7G^Hv zC?Ot!8dqbg<1%GIb6RI-uiDB4_Jmru!L5q_A~7$QATi$ep~=Z}fGYX*YvuU39U!Rz zPz~_*92^s&saKb!I5;$iM>G*Hs}HVtBj;T6Dg~ z6|QBn);WA1-GL9HQ!i`1EBapuO-ia&RUd;_R2&^1K6&~Sm?IZ*KLo~xgP%F;=>^w& zUZQH3r6Tlzz{A0V!^8U&Fp$6dT{W&8T4%Cl6;!*(L;vuG@Q@@>Vp3At%=`gWeI<0y zd#v#6qn1-;-1V~$1OzJoZI&iTqN<@W4h+aoOiZ9qy(1IA(;~Q3!UcJGOiWA;pMyF( zbDbPRVdaM+&MX56>W)^r)?o)tsP(`@gz@o?8(l^$mk$n z3ZdE^nppDnM)1C=(pFa1)7S6kPs%L=fk5QsaLBJ72FA>_u+w&5sgvXz=hh=9aL^QRCBfk=@@l~u{*GUA=hFT z#P|uDiXxZOv9B4xcf`bNyjga#v5^)RUpd;e*xSQg?bGGps5UfTTU<|=-$^z3x!ZWS zT^!S>YT_sKj-qW?G9Y@#@=hc=Kn4#rA3f1>b#LROJNhgm(}jio2;SGl)ZkLw(YX#! zNQkI*gGH-&7#P38rPrrf! zL|xs`)>c%H+}FbBD6GW=EE`l;qaDq7J45dfC#3sv2%Q5T7ks8twj0^uy5V$(!M;;8 z=<)m8!8dFQozk|h3}fLn8>HPv4J7Q60{r6035jGumxG_#!+pgHUNt%)N=N7p8gQ5A^)uKfKq?GXQV}SH|U`qJtughW5k`$%5A~m~zjmXN% zFz>)Fquf`3ILC6KC=FGJ!jU1MfgD%fj+Uc6Cn3y2&_A1sWZ|WIMk?!xNw!OG=W`oh z<(^}`g5aB3MQI?T+y}?iD%M)0ys7sqO76^uJ|_1Wue3VqFC;7rVfqX{ViDyhkN&C! zo=cf4gLhRUf|YQChwAXmjm=q{bQ~P4 zxXKQ)>7NEXHqFldr`~S$n?=AKoQ{5X39D?ID_Me7vMkg~OoW0&ExrtzqnH7qL&Q*ofqtsj~t(25b zqN2VH4d*MXFlS_7UtXzDys*&%1yTvQ_x7+DPsOi5T`UuyCyCwVC_JD>m(dwwP||p6 zTv%4beP~lnHW}+wCOBQmbK{!OH29_>fAA>>hu!-6+pH`eCnr`nH#IxElLrrWtE$9P z->o|=_@!lKHKu^-j9ian56@+@P;rzeeBO4B-P%Mn4~+f|Y5*%%U1MpSSk!pIzCFDR zA4RVRZ5g^}*gDN(?S_74bB+iL+uZhyN=|-;_jz$aqL|BU8e)x7OgnZw3_lL~W zEz@O>jEQEeY)?itnw?j~XeUxo&dbtc5Ta3siMbC_MUH>UC9?z9Q8JP&O z$f)U%cdnb-fA}!92V*(F7toam$L+{SxIeYtX7p``h;XdL(=k8rx&K9Fq%6(bkw_Ee zDe(3H5jNkQ#S;=xVqG}b3^gHk6NwsD8kaKG8a)$E&r=WGF1Sd3n>OUfdw2f)a(KUt zjGQWEufbYJoS|#oqg6Z)4UJ6Z_WuRY!Fek}3)CX!Brzjk-TP|#P;oEor5W1S#r>+o zB|i6bQEROZW9u7h|Lg}0w}DP1gNMHA&|P)SRFP;Ah#WPquA#s*>5hpLPYB8w&FGTE{C>LcJ-bp3k+vCZbW9uE^JR# z2O5&$ni4ERBs<%?*Hq~yR58i^kSeAX;cH%MCj5k(V%Zf!hThrT44XWzt<3*VS{Je> z)LBQBF>nUVWX~$`&eyAgaq*1~J4RU!yNoHiKaG|0jL!{H)Wj?;vz$NeH9Ywm>U7ZY z`_s?u3_8bx7#5k%0`Z@gzW0YZ>B25DqZBTZ^T)mH?KjUo?~M4iwwzgs$poeo{!DZQ z%j9XvB%aAkw#sBn%H+hvD7S`Buep%-n#P_Bo0>IzxC z(&fi&g$Le;qo%X{an`!x6wx(W;vtuCrMk`GkQ?8g$i|Ht!!HBVAu0=WaCA?yjS19W$XkSs%4W2sgH?6e_i-Q{hW5G(Yfb*X6EL)n7tAsmF-~479Rl8 z$Ma#=xEaBN$2oR~Ztpzp0)HeXMINrYJfzmAkY%(h!`5H^ z?hj=KoJ$r{_MaW?f1&DWJWp{cdd>P-O?&Mc6sy%Zxxem0{FXy8A)MLy6#el^(O(<4 zlK`Ni5g!b!T+1-men!)=Z~iqWAsm}#t!zL~XxH+?L4h?0u~J`3_U{%)HoE9fldk(- zpTx3LUmq&X6_Y@(7Ca-~GBGu3ZyYx6LN8Yyq{XX0W}hIV#QR>`m%dbJ#mx}2;*V*$ z_K2^s4@djOwWIB62AA+MF>!(*+~2c&;PdsS)d1~NAVqS_?_R-rRY$_E)5#7?wU42o zg;nd&GtFhhG!Ea)+5Rztb+6lnwpgXx(Ww{d)iAevec1oroi%8tO43%iyDdm~3aL&K zf1e=wFl_TOzDEu8w=FSt*H(R|eD`lU&A;~Ah~VYn;TRS8S!R4t63+{5EQk`&;IYDt zt|ygM9lEJtJdVKbe^C}XB9L|gQasP#yP61`c|tZ+e?ZGpGC0VwJJ+<7BDh7Je!R_G7@#NQ(tM;U!NkVGUmB+uy+BXUrnXD zJAd_jEi6rKvMu|uyQILR`^Lr7?WwG4mz?YkN>(9Mh8d)JdwclZLgM`gvOPUfY{2xxgjI)00-|ofBh{5ZhtQ9)i%W|62;K}OLx||-2cmYuLI+{k+}b)d(QIVOM^)n4##D#1y?u|d z@mXUd`XLP#@HCr_Zk}uyIAD<8ZcBkLtWOO~(~;S6r=G7!gTZ5Ceq9 zCQ>LK%^x0?S*CS-_;3k}#ey5jr?%7M@sDCnfltrPo1^Y)<+-7uxle}z&cP1vn~Q(z zxiwCwZt+QW;!O7V)g-vOmKbSUTUxFUzhcknD=I2N$;&G$D73yg9`T^%+fU=j7!$RC zwbF)P@tK&AfPi`1`jo&+T|et9yWK4Ew{a%COLjN@!q?a~ZIs^C3k*~mb(EEnxfL3k z{jd;?j>2N2o;-0C*PeE86dswOiXBP{SoKi8Iir7KWC5hVbWw0$;SY=qbiwjyYSOf*l3h8l+&9sU=YJDtpS&ne+3bm#+;I7% zSseJ*$L}Ylm{v5@`gh-@q4Q^oJi}Pj9`r?cFV_|z#z>X*kAC=0 zd8(bm8P+`BN78l?v;~*_Xc=cn=p|bADm) zXq`pRmEcEMnf>pScU#yB(ZPMfa3ZA6t-cX*A96^5EUu`Qnm?*59MH{^jg|B%rx{!i zMLIqY1&kNAoH(fZcY01Zgn4(=i$|$e%3{wW4M{gSd`TY&j82m2O>I3H;l;5^qJ1%$ z8bL86C6`Ck<_yPPbFO28u%f?O4?e3%f>AAMdvZvSfF67q+3qox2%F0OwO_pncrnz( zH>PCd$#N4j9qV{B6Wt0TEC)m8g@y^i0^Plt z@^}>ZrsIjKX`VtSkOyo{$&Mbr&)kJ*AHsR~jbY~Q#vi;YM64uZXV|(EFFipyNjjpm zu6yinKLtQ=sm&Hcy;81&Wkn65q*}@1yFb#7PlmMH^@SJSquVcx_;6C!4IgZNID&7u z0xQfUJ6hn%JimNqJN~1?*b?{t&*p5ppv&`wOnQQ2|D`-=)dqK05f{;j!jXTCs!3yT zT#l65fb4cLqO(@(3}vi2DCx3NDAGWy>oQEa&JQmewU$hfAO{lEgi;zPJg$+IwcntG z`bmN4oO3H~#Tt8pw|r42W^0C(#prWTq7fsH{s=T9FSvJ;0HA23|y( z-|P)XF5TurQNt-q4&Ooa6TvPoFQR{k)#&ZpDNq2+tiQcMh--}6IH=OfeM~p{&2go(4eV;^0h3WK!`Mtg#CnwGihPN#z1+Hu1m!{*Y ztZjF{if;#F&qb7+aLMS&;H71#M#!&>{Jmn6_}sw%;oC2nvS8=nzUOb;gCv-a4G(Tc z?_;Zls*4+r-~l^@#cpDOTa+v4X>aDXs-W-y-l9C0EQeD}SpY_#2QYbh|rOaxF7m% zKjnUyb@px!%riN0>?c;~6KYvsAKMuEFNPw$e8_wv#R8%v?Lt7=8Z5*BcKr0wLa`q!@OxJYP@wp_o7Fa32ako!t>*ap|Nx9oWxI0n~Nzb+rYQPDPX*N(^XfYM_Ae#200wqrO$0^fsiFf26shT1#}V z!d4HPI_`MH$Q!KQbmU3AQW1li(ci7mXVxkIwnL81M-IPa?a`G3oSV6IET{~NF(l!X zTC*2ed{cD6TL1G%ayCi{;M*?aCJl5ZbQ|^(--aUJq*#&KZVfDGKQ_vP4Eip5lm7x7 zug6fY>WADjacYcf?&^Tc_LB?u{s^wsGxD)NU2st0MsF~Z_Ik4Ej6+-$4;E;9@h&&Fb#1)TQFvXnJ zWsiN@#Kv)tI1Da0 zlm77WJdK}X2Q_ocpaqE|EkBMCgo2Azlfc#``W0PcW8>R#O>u934gxGAmi7fq%3CnE ze^QoZd8+_q{-O7=QhL;Ii@zVCQ)~O_u^Pzq&$Gbzyxjo%meRA;JFwLeM2eK3_l<=0 z-7!6dBv!{*%%+4hC5-_X9`vI5Z9Rj*|CHJ`D|{B%30`H9|2X++e>;zV&o{R$LlCW= z?BDJpt4jbFb%wWzmv$w990lnge*d5Mv9NCe#;=S@B?|v{^`#`dHksbuc*bFyjAuhn zaB}Zph`9Vyq2={nOA0oWaJsBNrD=i50Ct*fL6EsLnFtFC{U~}{c;&88ZJTZ(u5FpY zWF6Zs-!jLuAXKa)jU}Dk1mf`8KL?%ud&zJ6Sf?aV;Z}e)xRqg@n=GA9)&gFEsyMdF zfcL>JyIrk{A~R{wzb{+(=%!!AJcV{x$l4afSw8Cn0kiS54pf12uU5*kj7 z8eUdD8>q;uLSLV4OWqe)jR;gkPc8$sxz2V+$4T9sO2zV>mme+eEZn(L|80czKzTA$ z$mUQYPIm4S!#hPGU_2?=v3lo-+SoUu&_UY3coUbc6fM)pHhQ2;LfWgOo}>|Z5jT?X zC1PEeyinN~(EN=U48?LtH9B0>T z4hWID&Tz*cg41e$xj)M-En>X>RiHOi0PB1E2R#%CiuubnbrcUNNWA0EB8dB%&SlCk z&V!M+vpjR2QZk?~XG_v1$Um^&5&i3sMYm37c&x_Tav_zdCpmhst_cQ@ync>L*zaNV ztirj+pQ6D3fa)I3%tYSj@{$sKQ92+(n{)Hl8MuZ2W4Fi*^Y_r_!C|$?v!?uM*=?Op zvCQ0anF$#uZ>+C!ocLxfTG43``bdu1h~9I5L>$$V7b?Ut7ddW7h0Hc}8!T60zc4wR z3eMIN=N4MO_T@c#=-ls({^Lxe-s=O=Iz`&&e(}cgTyT-7ZTlki^YNf}(+fW-9N&^9 zY4F-rv#ac}*1;_rLX4VGc|qZu4-lF!%AQU?LugjWd|W#2LbnlZE?nq+OLQ? zmlgHm$*(1I8RkYV9+O3&HaZ>hm!Hquyh)d3dUMwL9<8rxeK8%jD4z1QL$bBtAmMDN z=+{5)j}qe$n!hVGea~-*;DU->@@|Wvm@S0QTD;m>+Bt%qSe%f(>0YVRPQ<>W4s zb-xYbaCGJ!LmwYx17@h(GTSEd_i~=Z!WB1)5Mcq?a}7>@v5p1ex|zbQJq6__Q@_s*nK6b}$wh!S|uPrVq;Dhv2(Eu!fb_es6kf}V*8v>7MSfF~|Z%Wwne zAVE(Herj{L^bBm$xw+L+2YkX!H2MeI2Cr8;Ikk+_i<}fm(MkeKczV(GmPZyNn+zz5 zV=QnU{T07lsdNc$O)q1vh1P3_)%!XA9Gi510aZ4(d-D@MDKQJgQ;$J?A*M& z-!-;3q8j8szoQOz(f)WIm6SH56%y|}X+hpRJuqZ*&12AI_wo62VXsE#W$^UokF^Tg zq30XeYrOn4(pNAd7rr}LRnWcNG+kz8DxTI1rfwFhd!|1B7z3ka@x%61MO^>E^m<;E zbaste_Q;{$MCe(4T^=a#{FAR~6a2Uhq;w$s8OV7ZRi2nwE<|sx?@zm3{lUhj6HF=_ z8|x;EWshN9d~D^T6Y&j_l6UQ^t_C3vdk+oqA4o=G%;O<J_ov&$DJLHgA4a$lwpC zA8p;`y+;b@?#w+>u0bnLJ@?Gvt`vTTC8?19*b`pb-rDxJ$&=Wa@O_v`FUwj#_Eck7 z(&Hk+(xu*Z-8GyXb@pxS+2MS%kS6auN%3P$dlx?1gC~6SK%%c`hm(Dk=FO>LN>oA{ z;?z%MWXN|p{DErg24u3L7h)Z$PoP4Y9I*H4zs<#a_Vz!jdN80WZ)jiRN)Pl1O;xqk z>pV-cCi2$j&8dDh(sNBMl);7{;9L);e-_I|`FSq8|K6wwGjOVK?j-O(f%NSt%I@cdJ%PTG4iQ?YVzoyFQQuQ)ok8O z@qw*AH`neF2(yii-jZD9PatOq?{>2B_0D|>{5|j>rAl1oL+$FC3|kU#eEa3ZBPrR% zGRgah{*O7k2L&JAnzQCC^o{z}$OrEdnjEcP625y)KX@RLnpYG7?VtZa$&#P4v+23-_Ygun-XR~oCCd2WKEy*hpOJ7=L<{rI1a|rs3MTm zDBjI*BL4_I(8r~IEx(v{?_MCUSkk{pav`cJS)Bg^>oa464LDj}kLZmH*^6GvYDQ)f6IbT6+hG!*v!e z7UQuME;6^_V3d5%b#_RLKxj668!`Rf{)$xreHI?ue7{uwRpt)LEB=MlQ5zve`_8g& zqeob)nG~(cjoepv@-X;I>Z@H}b^$8`$ewaPjZgRf{?m}{#L>)xH4ARs=;zrpdUk#L zzK-j}gU=a&3o%}tOjiTBJ3N+rz#fe4U+YlL`q3%=^Tu3lz@zG>5UQ6-QB<8`}2ML z{u%7`dhOnG&-0w;iF;pBS{h0(uqd$5(9m8ezm?ZPLwo!c4eikq#$(i#Ka-AHXlRD$ z%JQ;$zB4;n0cs=&>K^-XL3Lqf^%+60W_9GyS(>1_?)_*HW~};6kC1v9vS6-LeZq*u zV)7+m;&&OJ-h^e)tGA<}lRu?K*?YN(pXHdPgnlmRl{Jbq2hYo~>_92x_>9|Y2&V0(9Zs$)r^cr0IrK`wOi109G zH_rHmqr1Mliw74CE#Ckh*PY!`v1$ara`v!ZeTju!lIT){+lsqT$LXP=g;D3i!yq{E z5HoRpQT2>|x^ zrZmK{NuIqE*Qx3$Z;5R#YdprFL_=E=jG$hiEH+9i6C-NlV$QPH*qZuvnZE6Tk+tv) zH5;^T&+|D-*#t0+QH=(OSw%SH5gM9l!UnJT)EksIXbfm!FHmwPgrh#uf}i{!Bxo`Z zHy>s|dw}g9OsFUK7M$OF)_jwXjzI~UcYf0giB!bH7lOCVeZeQ(7P(@Kdk&;*TOq&~ zq657Nd<7a}lB4Yax||S3bmLvWqnvRKi-k<0H(SuIbjMPDl=*O$icbccx_^o5lFxFa z%RX@+6%x~k>m|fGu(2>q0gR^y;@#OHvuieKN#k(owy7Z^se*fUo#iy)TnV`Mj$Lup ztE;Ob8D9xrfebWYsW5+r7b{=JA07T`qU zz|Q++I}3xWnKxc$FHtCDnI7a*J0!=YC?8IJItq2-E9ax9;ld6=kHze#B7q5cSXXE~ z_Y$%MEGbFY2c+Pi;{1+?Sk zkO}>SRBzSSuU`orxSs=XmJ=}olCY42Kd z6`a6`WT#ilpXE%I#?seoN5g|`eo9QGGD?PQxoKMKdfNSz*f9|m;^G?GSUyO!Toxde z#<`=qd+C)C7Q+byoOk$20~YSu8Z z07vI(_--XE*xxT#;>@$?1$7_p^3FcZxzmseP4oLv`r0kTMSC>6l>kubc6JHG@6G{= ze)9(p7ROs2%?FD937eiI@9-XFiUTW!LxzR}^JxHaVc<51Q#e>unacp?%>CV0>O4bb zwLE)ByYcw0N}4s8BjoTq1~9`t!UEV? zejVp_d+9|2-8Od|;&wxtZ33hWOK|>iVfR>-HBM{wV z3g7F7aCrZk@!Qsv1=e%M!-iI0D6#Z&x)FE-fw{q85LKGc-3JI};&8-j4R@Aflchee zd7F^dH`#b8zg5-rzU)16lx#bs>uiZTI^3yB(nDC2zYH>B+eTV1KIq$7GnY|#%JLR5b(3Zcoo)gLE&Ww z(_qYY>HUp-i}9*+ZYVGlGh>`K3yzf$ZGrhJ?Bzbz2MB@Ct1$d9^;xWIowbH&WJqA} zcKopO-QrM&Fs-D2=b;M5D~y0ni~uC!PHr*?o&Cu*kLMnj%K%49OL>Xgdi7O>Txxv_ zppof*smP3kT-5G)-;817yY|qPm6dNyplYv+dtF5LevY`$@Dw7h)hQeQ4F)W(3Sy&~ zEfsWiak$*tD&+?6h{S7dY7!F@n?WM?=bC-a_vVoGF7}+m3#{YgA#J*!U zl5Ib8wQPR6IC<7Fw1u}{UO%03)ro+@QrsLTp^86?Qe3WNpB8Sn0W#0J`(7`Iq+F#> zAVMb)pW3e9rTT6}hJ7r_HCx5Z>AX<8*diD}ty~r!7tVFNm=4|B(7rEi$pL_iXbcnM zN-QcQR?+Q{SOD9!(r)X~+Q|?z$1;hVpivGTJ0%imcr8N#js9784hl6o5IVwS{(7a4 zNF7j*KGBsPV7bj>a~f}a|2KIeC1)5eurmxL@z$Drjs0A)Mqp@zD+EB}u^!@lcXMe= z0!830KC4skQ~#!p0u~trO?qbClvV`Zm)83^H0Kwf>9U}ol5O@a-OmkCbIz=uUgx^_ zMj9Ki7FMoW8_IxKvLzpkQ&c*1S((f%7#YqG*0g|kZy_p(1_xmr~?cYAxA4sD$) zboMIE*bVYJzhVdEBu$jXQo5*r=LHUDiUyNHarB}g=uMphpFSZ*-*a6Q{z{iz7nl!s zs(^eGepq5vAM4)N^2QUVId~}rO-cD~S*4j-i6NkVoRSh#sxXbzh zp-jwo4_X*mouqENuVVm~zc*XbHY}FT#D9YiExsv)NO~T+tucvzadAcjINY~06c!dL zC@8RKWcCgXscSA=u4TCN@t%Dl;RxgaHO`xaap|^yf>j#hCvVN>^p>a9N|8uK>~e3U zp~myxslBuCk%Kw!Vom)S$|@_>o!iiwmeM)ZQLHbWx!$@-o|03-+S=Ok4+v;(Zr=C>p5#JSRlx1d`Msx8*Y_7)Evju_+k9gN zF;k6g`JK5W7j*#9U>42nUk;P(aaIrZ(@J#K#85BivmwY;fn8;wr`P*fU0uBgJGy>_ z8tHv8yY|EmN+nhcoL-FCMO>fla&T}A^!25^c1%es=4qXPl0a`l-5GTF4kem<`D++^ z_#V`~fGNKFPL~ehlbM&{YGxDrH`%>}goMFRRi^1{lV<%K(`RS(Ij8!o7Puve zPL?OCj#Ew&{wEuIbIrx-87WCgC!twj4<0u+=mg@Y_oAvS#;d2mYdyH*x!L~KR*JE0 zUjU;2y`&fZ*B4^lq<#7)K^XwgX8L8{xGLJodGR@YjNjdrT^Q@M2tz3B1uV1F1 zIlG4XFB7@RDp?_UQ!Rk6N$J6V72j=sNvf#etUgU*(@o(t4uw2;($04qedi%1YBTp| z)9;+PZt}&9%m+9H$m>(G4-RHb_ADv1$`ne=kFt_goWx9coo5>shE*kJ3fwukc>qvO z2CKwb6`QM*O`e@IJB$qcH@yQqI}2(-Q?>w6lPEIor&eu%;9e@(}_R6-&v8qxKLoWNDY z7T?xYBmx+*ym|bj5X-~=cg6MX$_u{1__S9ygLc{HLAYGgfcVa->8;H`61QiDN=i!R z<}^8g_#1y}`62lia?ncpFND(7r;X^HhN}{JJU5S*mPZSCxyDU+MP+-?ED;p)uPUr*0e=J&kc@tWIN+A_xV=Gz?>*IJ$7=OK^m@{d^` z0v8d(&YbqM{;4yexx^vYIIu2zxC8gFfTOeX8Wy*@ld@)U!U8y=#QE){GGQOe5VA5e zNx6Jtd)YxXC4F z{*jJPdhY?3G)=&Lh?-%$t}xus4O8&E#o_#p>eFPg{&JGAp_ai0ajagGQt5eTW&tO(D zva_%=sU!{<`hzU?$%4y5xhIHRqHMd!)WNKa`Dl30pjSyRI-gDRd4lBWEaieKJMaC*k{Sa_2uS3!aP`PllMtgv$(m)X@J ziqEOnaR6FB2Lm=3#b;)>xLlX3W=#UEFVG(fCw%A=%z*7Zy~ZU1%|WU-Fg8W_Qf0+8 zahh?TpWUqMiPn*gP@O!7=PMgcJGN)~$11vi(yl|nF6_?$=QvtRSqWy%^tH9yMQUkF zJ3Bif#!Hz*!{be1i6CzQTH6eh_^OH(B|rS$USIWxS_~Cm38D2NM=e*R*)BmDPf%*jR zH3R6i1N_3(vLz6?Tae2i>EV)fOf+0ns0mdLBX3yacS9c%H<-6PFyJ!#+hnOCB0Yas zO;o{lT3%7HsJIw?2Umq%cctWQWih&>US83c{CoQpl^1ed2x`UlsmdJZCf8gYMs^^; zLw!2p1tnGSIJu!~HH2v~ge2^i_s@#ItFx4JznqX#nEG2Wl#eiP>qKF;HsTIudW`O&Z>r`SI-jj>PujvDiE8f z8J{#3Qd;YRz9A$*nX=I5iyc(SdY+ytAN-fgZy`RM2bSy?4`5B?UZTMXyy!y>1~ zi`17j3Of=ZJ%}lxGeSE%k4!V07dX#QkYXTZ!-s}?;fM^U-*a<8lV$qc+}u018XT0+ zi`hmGGH%n}va^E&c(qlJ?_QYIFJ_eY)3_Lq(IW{}Nc9Sf}%Rd&Z>KhSmt11PeK6gXh5 zzHs3p8t`|H!D4?z>TcM(s&gVg`>-d$T|u_7TJ=qv*sI3ia`n0S1?dkNFHuInW5@tX z>+Kl$e$=}gWJp6tS+wm_4Dd1e72%S!%N-iay2-=wPh6; zsN*mZC9m*l>>ckCGpZ!PxK74Ip6!1ZysDixn!LZjK*ESjg17)-S;;~5%H>t#6ppVW zA}Kz-vEn_$!@aKoZ}lL(_YeVpODc5cC+8$ZcrPqN0z9?;>9G|9Ns2^R22onvcFlh` z%Mmpj`YKCs~~J z-8vC_|1=26d+Wh_KdRtoXKT~ba&s|UK9D|^Wm01|oq3rdv8mZrt$VjCG3}!CqY(pX zI_RX)y+#l67(sdU-`H3P*EKwpxJSxbzr%WcO%wq=m2`%s*q^2ni@B*!7tZVvCf^zO z+5AHCjQF zg`Z^u+CG4Hhhl2CkHcbNm4CJhvlL6GjLPi14g;AZG0Qz(8#3?Yaq{i^>>#I&Zf*F%jP+RBGxB(UV!#q= zRNW}ZkUc1=7tEZLmRQ$U%ybMuSmjKa1KI*lT=F5RKd&Bx4~x3BkkY*x&P)z06qSQg zG%PbDgu%@v@{<)iqnob(xFyzniD+CkGdxJCyoxb_Xp-#!$6yrvE&mO{5l21AHzLAJZXyMEL=3u8wH8p=E3zGPatssFe#QSyimGyNz zS@>VyhbSbp7}nBdcQ01Yo177wHOzC^2&8_)ki#aawk*%*=VS3BY5o1)@E9$Zu+u_o z)|*^>4S3EE!+-tq50HCQU_Qj~nIRPmdF{3KMGij1yw~Tgch#+1$U^=rI{w1=G4V9r z3#-pmRmY^+YZrE^9h+~H6#`U?2hBIPwyvb2cV1yoZW}Y%Pd@tB;0?Qdgn^6;eE0FT zz0@GmPBdG1KGTv?!$;JdLi=|#+p-zA2?Z_SNzPhH2XaioX^rIWX-D+U(U)gKO!SKC&~A%FuUS?-M* z2rUd8q#S6LZb5Lx=SR1o0G;CuDAL229A_jRO%DiFy-Km^SJS-)^ZyyP^sFWgPoe+y zj+=}aH!g+?M6)||b$w3h^HyUgk4dCwxbZi;Hdl zC)JlJnZYTb&KqyY5N%k^s-4j-3)YZYm>6A(MzQV-9C#d2O>C=?m35uXKnk9Z@&goT zK%%$s<=`&|BTC$4@Y@$z+)-eVZn1#JsqY_Ex%ZOo~E)V?I}P0 z^us+9``Khx=yQqix@zB~#i>HoRR2Z3{qpccK20CZUs9e@Ol z);;z|Z&S_Ph>S*YG+LOtJaEM9^!TXPKheqvK8aeALH%imfjltpS-sZdL?YF4aR6tR zaMr1$Xra`zkYT%peLi8~9ulG4u&i(Gw))4a)9MElZhB%#5Ljsi<)_M~ zfk#mr1GB{vrFzfFP!R+L#t#@&#Hf~@Vmk$l0;2LD8JxydQbInY{HE6V2fkR7@h5Yv z>&c|e#bhJ6t*vc#c6J!y+3txF*Bj+TttmKL&=}jQw~7r`;g+!DI(FcbPjaQ&`a4Z~ z*)%q7I`<2d&ibh6f(C430RlwAxp3^Nq&f^v3>=tr|=# z3k-1{vOkouYrt_=-Z8XUBFE!bEK?LAkk_EBxz9R|qr(ADz*X_Q`Y@?dirIF%puGWl zziLblP@I+yN0Ppe%C>l+dX`SO|kvAXNQsD z3iF*-r`h)Hx?3^nRx4q+&Kko=yun(8Lpu`Rk>14`N&UgviIgn;fGKxJS;wmo8jD*Wvzv2p(>JdCaZxc~5e|R>itqwL_|AE`gjlY*W1r3|0BgbX9J6o`aAh65@>dmyj(C<_uNdPKt*7 zZdFZ?W?2|1ZD83Sro;*MV{GYV&O69Ky1z|fE6Az5vtR2YhzQOv2H$tPVmcpv^ug^( zfL2!<*V+z6+*kV)$!gmeQl;XhDBpZd*Ry0wE-XqYV@y`zr-<#C5Mj1@*@MTZSnjIx zDJ8G>M;?DaKV5VK8vCcbPZ*Es>FDXAYhHW_{SdkY!>!?|5qw+!LNFj_R*7MJ>|}cy zG$(l%;i`z2}$MVQLc*7GFbAM%G3H_`Z_syw=W zog#?pHH|I#o?GKJ!_nPlc3sdz`J#LYB}>)e92n369gDJ4-Q$>1OSLIdTI0}zJ5 z;Rrp$=>h9o#?)o8hw2qT8-81^c@ra4Kmo=uZP;N{%@4UVJeKAZFs`@cG}$bb)|9@0$bNXq)|vmz0#X!ZudFh6V@WzxfovNR$sD5XS5F zCph7A6SJhG$#qVt$K68#L(mzMT^}FUhP)48U2%X6 zrcjm#40l#l9gqw-qY`ob5KCb--hxYs@%Z{*-4VeBipa>I6c9wx2+2IfLT;N36&%EY z#Ywe?y~QkEEX|nyLyXrO5{0u`G@A<^aJ;VP&84J;uE~ydG&q)^tI-Z&V zr@|!#J8eeta>*X$8V16+nT2hCC20f6$@qk?XEhno!@BkKCb92BMy@EB#Y~A6=JGb) zkn*nYo1kXLKQm=okf@n9fZr^TtQo_fJb7a2*V8@~LPkaw;%|A{e5iVZ<&kc#tuCDG zqoXLhpE}I4KNo@nOuVw0d1x4;_UK_#4ORMU>P;L`1J?ZUl_ONhX^SAzqk!`Tu2#tV z(XMdO*!;n%iesO(_!H`sRgZKH?WbWk z7Z*=+jSsZ$O6R14O%l)7rI~MSCv(+HlRphk#hYs>0!P-xcM`^HlOzkAx!hjmrMoM* z-5v4Yk1gF`XOw5FERzdjWmvS7(LQWA%fLO7Ww14?iU%Pq_5kBaf7Tu6sJhnXWiuD6 zWsGqr^ETEIemoo;wYGPeL5D7W>PZH4`lLc3KAhkg$1Li5u$v3Bw}BdHqrz}vBP^`W2MxvSboPOEoJ-u@=WzHbc1i-zPWL$(pX#o zy{ClPE_EhxGNg-%^Z4$Z%_syw*~8gy#vEhKq{1;WEXMu~nr#S7ELwa=;U!g^*lx=W zivL^8MLoCM(y5qcQ_QR%R!O*E4#;YNGG3(m*^%amtR*C!J0w8-2z9~ypjg=W1!3&M zlc%;@GgyGP1}{)nO1E=KBxEn04x)f%V*{|spyeUKL5``GYQCkPYld&nw<>*R5*J29 zPHK%JnOc1qF+~aQ5=2HAboT~-Lc*=LDB6S{HtaC~`(a!X+xlJtnAtg!BT!Oq(E9j! zS%&-+VtPUov$L8L8WbNLr=t6s!=&qC z?Y;=1+T$M}cEBGOf-7RNWC`hMvtkzM6YbXq#zD=nDUg~7rA^AD3?CCibzy!K39+uq zs83fJlUtDDvOhB_z~b?ar+%5@b4q}%sMh-aTEo$Ra@qsP!7^oRrM9DHnE)v^HOiO} zY%(y@59n7T`>&gsawxJ!5?pLAuhIXCGEY^Ltv*V=WkQ(sTr<$N#V#j0I$G8mu4YAK znN4^`9AZ*Y=5WVNCm~wjq(ND>fM)B9>X(1mZ-hK?PKma0NARkLS%0t`U_BMBKk^P1 zIJb)Q?A#4Z|M~N0d3ia?$aDF^AuN8*D!}8Hh5*TtkTV>Vu74xxK{*3H4hnK=ef{6G zRWV6S84cZD2pD0<4og`^ie7f3YP^kp#0*x3>QBVo_i5%6A#IYJ8p`z*DkZO=JSm+x^dVwxdEs)_rm&@fO@C2^)UlT5d!@h1 zXa;!V5i>Je)_)odU%dDH+*|n#z9s&FH}|HM84z zT_YAcwI|K2pu#^aN!kLfEhcZGl1=?GcUS6N(XEN2eD-{%`{a2(!VHZ3EE^D^)0l@z zQ9s?gIZa2(@&}Xl{jf8Wp8Yd1aLR%1cEON6qg@VrX$bF<=Np?|B6cEe@OSJfx%AuK zCZ*ag1$fGCvA#!rwXu^#5$NV6Y3jHmGz2JqPt;PxvU6CGPRiQ9%!?|-QE`!bXIZJ0 zU0pCYmo!gCp)Q&`r^R?6$&`L6beB=a*nvU7G2v&?YDa~_~aGw5lo@^OSZGftE zuXsQdJTb>M56(abk|gwoocr4cQNKZBz=mjnmL-b0BjWPu|MT(w^P z9$3L|gv%P7w9&~BFNpPcYtG-+q0W&ur-AEX1|opN1&Z-Aql6cL2X_MB!=!?&YwNhv z6)oF{grdzCSn%Wmb;T=_-ECY`td&SS@(1A!0tT3N*|q?KS9aOK6Lj3HO&RIlVtiZg zU}+?MWYg$PJU*VDne`cnH(_9BeWHpbOjMkN%3?M%XIc{ox}L>uNZeh_Usfd|;W*qv z@zEr|8KT*w)}2+>3QvgR1C&WMYbCe#P3lPfKW`HifPF|pLchtn4OZuT&&Uw4+jgpd zsKfE0iz)GK@O=XxQ}Q`hf`zs-H^WJ$HCx+Nps2E9sa06I zB5O;wN#Q4Xep2=G^S${KM_pZAAxkRQopgW?&4hJukK0X^hMicJw>NY=YqNTM&$DUH z8@Yv(&)HOHzFY~N(3oQzXe#N-r#EaM<;{F#`2n9m_K^OAd=g!MVY~bR+T+C-M$?aU zmLf5EbmbU(^=-u_-ENPx$A7FGr|;9gl6iZxzPo=e;fFf0iveZ&l5g8}gG4nZx__tp9N%czcuMY+|3ak&ISjE&XF%=*5+5u+9A zNZyWRxAQhiC%J0l`4VK38r5Cy7=Vtjyi(&K+k8VLd?~r}`|K0&)8~@q!;CBWoQ&`vg)U0FX<~gR%?CKL{dtU$? zXe$^Jl@-Bv@-IMxPTHZnE}|kLkdeoj*w}IpKHd)H?bz&EsKcP0Y?y01(u6+Jm{9b* zK#*%v3v?-O@7rxEch7&ElbJd55NwK^F@hilw6|CH?=SN$#6?AocRdCEX^aEz)Yz8w z9&!5v)>ze>on@>TukxPW>q{f0%O0Eqe4ReowBx{as^sPay&_4h4eegK;!K}q#;7Zzi1P)kQvWlkHumuush=1 z=BUli&aU2moSB2CiU5@+LUP}wQrCpQJB9lf*13&@bmZ&9M##_ZcKVP*^W8P^!Z)jS z~&6jx>d-Vs&?HJMoLhx&9YL=UEKKq9!4peW0*Yi*S zH2{S~UnQ;7s#@J~#C9t$o3!)5ZMei%vt<>n^L3AA3eW8a>Ly#w$;nACjg)B&R3wCJ zK?J;cHrY)2TSC31&V|7DLq^L6$6cBMUv^Ir`;hVeH$wNllbdt#q_@GNc?vt5V6)~F zGl9T?6fSdf^NJ~tnqU7QhzQMMGjY%p8^1O8evWwmb3mpvU-pi}YX*S+xOIQ|XxJ{N zwFg%li9}YJHoDI>c|8bm`S4D<-G5LD-{W{~sA|$&I23i10pslE<2zIc4a63@&QG~bnarknxC|xS zN%Ii7oa+(JzFRcJITMJFK|S?>>v=#^v1R)^>7aE_JgEVkkt0z$)WGkEICfl8_w^0x zd8RivY0@}b&f^{ir6k{BbCk?@7joUhyq~r=T?`nP4jS1poa8xQc>I9ye9XHMNLY}w zTk$Mm@uts2F~CXloP(#XCge)Otyt{sUZt_3zr= zQ`lWT(UfLxnYgq(`9lDqt=b(5vlaMCE=%`TS-CG&Wq>ikqg{5CVDZ1Z9%MTk?}4buqxC&0#an`-yy3?W zlfp55eXrDHua$LSTboiV%P&x8LjN1&`D^=s^BhaVAAgi#CGP5p($yJrcRxz*|B_D8 zV&DjJ+^#C!uva&ZbC@O5g*luIw$+;Rk75XjE$bWtXiEZzSs9QN4y-KOr-mR zpuG2=va+(~CT*xFnvj!|f-O;L#R_v%q+z$ zOg4q}Io1G~aE2t0=(rQ@o5DNEfJ(vFr<$S^>Mr*7(P~90 zjQyWJUHqpiQr8WwtG|D>0^?Ll_7XkEWr=JS3T~PUUKSqlHSrI>Xm)c>(wNJ&5@y?d z9#!V7AYXEIrC3DOayNxK`1l5R97j!d*L0)$U|jehY&e&iU`FJ!z=%SfwkcVm>AFx0 zLgnhjjJ>hPCZn+Ff@XCgciC2KOtWuVc|uuMb{%2={`6EB=lSvP-@O+X`Fnfch*+8| zt$v!DPsaCj$gLhMiv4fs&tC|)Jm-vyxg$5&nm%>T)wQLLT`SubCDyaKe5UmN#MNxv zs~f=9{x;Mb3rCNHctgJoH#`qqQ1F_q^kYwXIu&gWM|L)oxw*=%0ReYNo?I* zrsw6Ugm8sJwPHRx3IXhDTigsbVq~4+FV0q5w;6@pwb$#lWCG>Pvz__jeSN2o9+7~4 zwM4i4(ufG_ZM)if8gKaJpY1xaeKR%=UtJw~ME3k~rTdVrvTeX}f@58MWV9ekKI(Z= zFE>X=1IHBa>;h2%U2*cAq$Dw#Dpoo=79oRg=_Xkz29)H+8~ar<|3$d(@`nVm-7mi{ ztd0Ke`o0@myNuvOzIn2{x57Ln6N-!FQixA|X>V^QxhvuBbblAo_s-5*@W|H>6Vrxs zlCX~{#ffz1_wU;OU``Q_p-w9qJ$Xvw=vtmj?X@!g7F0@I!O)rw(5yui7SmB*S}^S^ z?xEl5s{;yz2?@8DQ5HP6vd&_cwRTu@b8AEYjbBhuTBPCWgX2C$x+_(8TcWNTZ+?Gi=9C3}*RQSw_^8v>WQ}28!=64~48}~rcnafsj?ee# zk*t}#41r#gx2C3bgjX4>Wr5>O(AuxJYDaWct(nJ}>wVHMR;(jm&wKtsKiRAnaxX|0 zF=xI`@6A49QL~+PhuG9`;6x-0gExN+nTtgZ*&6=GM@Sv_8XflCS>0+#^XSZS$i`<~ z0XOGr()2hvuBqY^+D+Ay7r3X^fER~ndq%iWQ)iqP`kYxE<`jZ(Q)kitmag9Rn32D> zuFfU?X5Q}g6wUsGQOC_HQ%!N7*v6A9PrD}wbEOT+R)aabeyXFhJD~EflHT6MBu?}U zDGbbS$CnQO`3Ar;vZs9V$?)cy`s#{i^2*4hwd0FR$6dTnQnvx8ZN{sKZfQ?I-iD^8 zRd4tjs6gScm(*s8;_A~KX@hwi8#-5lbab@;!3w<|7O`}T&v^H@zRUX4mz&lYkRB0* zix|}4rl&qwsxXjVvPGD&6Q6b=F@1(9IX$~=JWU6Y_*ILP!sKgG!P;Tc-JPhEl(F5& zm;ZvKlN#Nhr&w3P+)T86eO1IO!YVb*TcwcO+=>%L)6CI<@~$ogk1ahp!|Cq^j%?g} zBg1>c{aZz3o~3$*1N~PDdHp4<;W-vU>aQai)Kxj+<9THNbC2qclDvWfXwFJv{A$?f zm6^hMg=w&)#O&Yo;`0;1hUWU_Cg{~g-Pk)y90o3~4zW4>ENe1i(_9v?{V)6C&A;y0 z3VAg}#R)_t_*^MA7<` zqy|cDPcqv7uqHD{6+{l{QQdv1oGbbNNc;5^SK?-5;q7~zpJK`X zr`5g_F&As=KwI0j(R?M%94SWN+WJwzk;&_H_$3R-~MZxdBtM zw`!r{x00b#jOoLHL6LGQEz~Vh%gchot?$mSxls%FBV|%fY*3&`M8#0lRE`K(?EOHv5 zP$lr*#HNXkjypZQyAh`!5a=WO@f&&3?BS-{G=r2Ne4ySO(+(U^{s85LOsKlt_WBSH zCn!&Ms}LxJXVz>B{yFN~l5fS!u}zrDv3{shTjR;Ze{khU&s{__(fNAR@8xC1%`MWun^dEaUlA78Rk z*5!#mmx-gxIa<@p;l=+rtcq*~)KrDEubOU`lns{Z6{<5%HV$s_z-#va?2#5fE6%FZEgJYxvm}&7Ii`#khJKNQv-x{ zinHd|U1M717x0_Rryc)?I^KhG>~O(PB3ttvW>$I~#W5Zn&zodNcxbVF;r^yvHGZKL z@o#xf5W}mg3aQAdiwh2{tGLkHEsIAF9Mzl-Y%^*WF58Ue3*L>VgPId6J*4i#pKixY zszl)&Ep-y*!H0i2h7$V9rr{5=LOR~H(R&R{29mW0@A4U5jW34$@-(A<7)(49*jDFZ ztM!XYzVGWo4BJWroO)il1jqR~wKKak zM8u=4;&%Y)&ZNs$@Oa{qwK{Tm8h__?;6sf3fJYDKxm7oqd2}~3P-G}J1K{5LXPk!Z z-7WtrGa1N#UQGb{k24-V(b^wM8npK3|Nj#H&N(OCz9#QvpqtT3Jb%GcMtFT1zF}w{ z!ra1`*%iEN=lAO=w{SAiD{H<+DqOOMbv;F%J-xh4(AGUNdcFYDq>}7-O?$c_u{3+s z?DV?rMt&InT{?)<{4x-Fd1E9c&Bw0tH7%Dgno_Tc%t)aADi0O{qX>)o? z?SK2uaJrdjNXlv{0^TlW6S;RIixW=t4$G8Hu8?R9FxDa^vWcX}T0@Y7I5g?oKc2E@#k-*ZlW*!CPoD^`~FiV6rs`(g14@99Py*oOxfyVO+aXOPkKan zL|Nm^&h|5P^_iadoVuT0WMqcX@?$I3ZaO;cm&f7c{IM0)#d$6T_U_Q*fIKtCWIW|j z!A9T6&J^Q72_CV1p9jlB^&-q5Ra-)aH=wpNqJ?a*!~kZyZ?b!lGGFri<%YxN?c&z+ z-HnYfnXieAr7c>BS7Ug}oB||xeT6IqyKI{m^I|4#3@_rN{Nvv4e;Y)uWIB%_8GLd& z4*%ej{uh><&ca;OGA>G4EtPJ2xUZz2ey3`%J-;AOocN>M+9eQ@U_DtEbiJ$QS@_M4 zd0k1ln~Oe;o~gFLKl?omfMrTOx?qtY7t?U~>n~;c%nP0XyT=pO{ymGWm2(>6$URR( zq+78D65LaH3jZ{zKtQY@O02-d8cC-IW5Za)@ZrVS^8XMDA$ayJL(aE-Tk!C{ z2l;Awc!GowUOAv`Jk1hL?vw!1Q$IoNDNxGFP?jh1S<^CoJsK*-u5zmV66xh$`rgI|eD%^dt!*J@JeVyxxX{*CWOU$;nxJ38C3Nrd zRDC8c{)Mi2t~xuqT2tT!XticYXaz{EH!G`v#XY(6%*932OI-ERYr@T9q^uAC_KkZW zY_z91|!naTYLfOy05(LhdDn{l2B*R-VM_swy?Gjan zR3{$MQ>QiPf?A5}$IK>S?e*tPcQ|GMb*FQSMXvZ2uAl#!eJG)S2U*MqaCm$kC8*I+ zHdzs`ZL>fQ^vgYKR+DWxmp}%cgzxjF zLf%^8?qflELzqLprGt*j5POLqiLfGI`bM+d!NFWvePHv5us@DVxc^uEl!Tn7$Ls%@ zIVQciUVA`yWMAe}e(7+|Vfu*3zA>wPc<`M^q(y6OcS3VX>LL}Vs)kf8>;7WioBo=X zim*!7LXH8}j7H-E!z8y?!cqz^qD##mWwGR^H%^Qm)>S^o`=5nGptb#G%NU6@%RG%n zpex$%v6w{3i`!G(AM>RQC=Mk;qIXoDAk|9soWEYpWlB``U~7yiJkx9YNpFP76o84j{^`@UL5A(tu;*yHvt@}D@c;F3<>63v?_Y1q zn)Q`ej4jKXwNhjlDkKTLgc#e?LKsV!88R~}CW;b~>=hEi6Iln7sVoUm7{(acnK7~r zvV9-*{;uo$$M^dEcb@0m&wZWqxzFc5%X8o73VUjNI`&`Qp9^eh+Ba0YACN=lT2J(K zg!p{B2LHxfU~c&keCjwQ;16+WY+JMP*ZG1a8}E=a9ATqt!VeueA3q)s54}k1Po57| zU0QB%Jsj&5P~J#u(>^SJ7O@?;gUh?K{G3sJ%9^bdRAJLl&(R=nt9y};bA5?R3DTK*b(`eb1a-bS9@Al_yL8@Rv_uh`!CA0HEE=PMo_4P^59zYV9E$VaLDNlD*CWHE#N zLzakk2U(Qzb}O_WH!pjyNfrI>4F%u;jSUgoTRGC@i12`h66raMJmZ-Ma@$ zbQkKV(x$$6#7%q=E0K15ozx8CSD~m+IK0-`8E$KCIxH1?}{UCp@G z_%KdmTvH-Vil#t?`Xq`%%P;X6hyM68JwH4=yx%{=iiVPcVqVEWq0WGa>r(*cOaJZNXj%5XVB=Azl97YIwH&W+YfB{`B4oeL%gaQk6ihTR?yt<;?w6~pJ`T*V0}gwG+xt^5iJ+kDe%{KoACh}tmj_}e zA|9tX+u9vWX_K(By8rWLNpEs;v9j`{0Kaok@VJ;o!QV=4AKsb!)*dQ49=?0!k({y+ z1jNH<9y)()M!Lu#+T&nWf{4CS+6+_q-UEcF_(58^xyn$|^n^^kXL8HQ<}kM4*F8F6 z6Y8vf)TT_AyDW^m#~oAA=*lRILl0cS z7E5&A&P&6)O-cv7)PY(Z_+iibgFTIRMNXd>ywlz=r9R~GMUQ|Nj`1*obUHN3o)vOG zLe+*R3*JGXvKqK<^&L4^uuWU@8b0E)kMmBtKq)%Xk`)}esU{`sG9ijOzTLpbbwR;o zSv;=7Cn`HBDfUeoRC&lg?4CP<8d)uQr+C6+bnHEsAbaqeF{ULF(cMQkk!4Bx74l$L z@+Gr3##3K5Of{X8{hm*7<%a%J4HvI}X}bMmOq#z@)~V4Uu{Pf(_EbPkw#9OM^ze2k z$5IugObg$U^q_Kw4>K;jKS;G{Tj_R;N!GJ%-RE|*xyqA5@aGU_?yi}kA<+@QqtN-1({zYV)btmpkh{<+0pcjRex2&F=f^`U}h&Y#7W~ zAv#pK1UI+Yjb73zkZmdIQZr_47_;cNgL2?vXTBQ_7!EY74HjFuN(#K{5u@B%-GU!a zzJX#XosE9Ny;MI_N3ZXEJ-=&$?GG~~cmXL3^X%?M8c!8N8KuBdVtfc9A(OP)khbWbCyJ;`K54MO1AKb_7%v!%aI(FgZ8Q*q!r=Jml~ zDyc~GXmoVm8Y^D|ULPY5mc4LFpp!?dPA|VqdpskZVTjZ&@(*hH!dqrbYIj11OOZI zlm>&?z;qso%G75*Lw~o3jHBalkAcC~ zk^9o`ejs&?3IL?FX#RBY`-GfgzJLJ(FRBZO>+&MU(l)$5S5OG$2E6G|BP!khIGj-w zwK=)0fTCp8AVm`%@9hpKOPuh7p7(N{KhkMMg#w7=cOIb30%G21|Iyd?rod9?itAhpaVY9CfTtp@Pw5Mb_Q0eRD z==gilpNc+)G*Gs-j@j5!dGKE~*FRU^3`(m*cR9T@t%Qga$ys#<fN%l0u0l6YZi({i>X(LC@J2T{j4!ssb3dlJ%Z1Uh z$c{rd?=51Jzvo$yUl;ihVHrz3KP?ur9(JmbzppV)Q%fq&Q%jVG0^v^Capr#cNNTf9 zyN|0u<$7Va*nH^bK*8qmUE&ZgDy!F`(<5R;b|?Zwf@WuU|C=y|Qv~YLDQIYygPUTv z^zYM+7v^?}1LB+v`u&)UV~-w&KRhI+3x)qcjN0{^D!(-SCJYxv1;rKE-5hD1rnLvZ|pQ2N@s)I#_o5BDA%4z5g>r4lMiaoEpXkdG%|VUP0ix9 zW51+0tKx5dLXb*9E$%=Rt7qM}9)M^JsVo64tzE5*CvEs>5|sk^P>7@mXVsQ;Yzpy- z1dU869?5aRj`z2c*k3N;zq=3`4^Bt!=wWxrt-1fgLMJX20`y;CR@1=EG7V@J8+4^c zNv^OMluYo8g} zcx4uQVPulQGNLZ!PjCIDUNA@ST^_~=OwPWaJpMk?Pj$O-N9`e3lZ@|kTk9W#+URqM z7lT?wqB2qUlmRTNZV5X_lQWXjc&5a%7bboCG1D0T(Q(^vwi%P&!-=NT(apL|SHlPK zD`U;PoJZUK&ws8?S}kgmgTob2Z_y&kQdr3X8&S>;br$AioBNe7>l)d1_|_$g&{)Vl z&~bZ{dJ}o3R1hBsA`V|JlI+}%!DfSlCWWxBPakO7i4>!XYofYZuZka|F}54;#|Pfd z&%AT3z)g#D3f*H!$??T=7nBFBs8DP&5-82u2)pXN)Jf(c!jg)6-cKzKT$vC~2+Qe~ zEu+a8*=qOW9XE<3p)pT3qvGw+cE=y-|2g%S0ev<5(V~2fEKZ=MDcRgUJRR zgQ*rk=@#OIlC1FIw`yyl;V3c8h89h zUCPhQP1F{}_(D*-L^$_JQT*Yiul$3bDL6aUW3)4B0?*ckByq;=M;!UW(Ph0s`vyvC z;sp%!hnL2i3~*ijY=GVS$;#41OA=!T>4+-;=TulP9|$@r6L3N#xWdXaGcOYP!EK5x z`Uzbsm`Ym&Q-lc(Mp~>{a8aB{KNg+oB)?w+PSbtiI-h+r5SLpoqC4=UmK*jVA-IBk zh!u)6C||{WBigC#=k!kk*frfaE4CPQ0Rg~-CnTp@PWP=ORC&aU zXDsE}`04O43kWVl((Jt_0<+`FJD)-R5ZcT^M`=3&+P}-8t!#D0piaRmHDGkUIbBf^ z+a~3pj52hicBo4vAT#T&sCNI+J&G&Ts3~dMt^tw;WVQms$x2576snG6X_QR zo;1iFm4PuUmq+)7=mN34z-Up$av_H<1api|(y<#Znp26Lvo$liK&20;pr8v7aXEDz z*N^|j781-H4C*PneZkV$3?1l3)KrY$k8zn1;UMorOKCY74+cKR2S2EWG8s`kYDI*F z(4!E+L|D4^!D$7Gf2L_b;kqVVJfZdO2g|Q9QHbYYRrxpjcs2o#+jMSLtmw7r))TO% zDh45el%HCZtUyCt-k48VX5GVcxLS;RYPu+fS$0&?S~MYFfcB!iuhqb9EZH~~erXgR z$X`?YZnltFDq0Cmd4cWrmm#p-84Q!pge(<0sw59Nh+F)fHIT~go>-prJ}KOeozfK+N{ zZaU_mdRL*npE^-!t=zj5}tSpX2Q|_wOJr z&Uql{h*xTeUXof#_3!b~V9g3A_UZqwDpqIpE`+R`O}nPmHIVvy#cG!Ne|N*{6XjASCdN-Duhz! z%ImCsD&Bud)$}^kW+{gr@9PGl_>rcbFfr}+!(#s$PtHTz3gvYy!(9%tz|jYwB}@|N zbOBV0sEbiBL36MB>+BoLV`p~*u`LK9w0J>A)o13F+T~7>$kx+L$y~5&O`I; zt@K_c^5YR`QU6W{1x@N)g9E)2JJ!5ayblUE{K19X{+b1Y?zG)~O0Znl`?1l)2>+q^ zz#jqNF8T7_z0zDS`v!!ix&H8-RTAR5U7<_mdgSCAxsPifRAn29SGMR5i~!@6EYjw7 Z#jFTS-CaAO2pyzyS(sUymYnvu^B)?sfW!a* From ad6572e7ea014fbfb1cc9cbb5265234c7b5ccf05 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Tue, 8 Dec 2020 00:07:43 +0900 Subject: [PATCH 0282/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C=EF=BC=9ATCHAR->WCHAR?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/doc/CDocFileOperation.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sakura_core/doc/CDocFileOperation.cpp b/sakura_core/doc/CDocFileOperation.cpp index 2f4f782785..f4ed0e9537 100644 --- a/sakura_core/doc/CDocFileOperation.cpp +++ b/sakura_core/doc/CDocFileOperation.cpp @@ -269,12 +269,12 @@ bool CDocFileOperation::SaveFileDialog( if( pSaveInfo->cFilePath[0] == L'\0' ){ SYSTEMTIME localTime = {}; ::GetLocalTime( &localTime ); - TCHAR dateTimeString[20] = {}; - GetDateTimeFormat( dateTimeString, _countof(dateTimeString), _T("_%Y%m%d_%H%M%S"), localTime ); + WCHAR dateTimeString[20] = {}; + GetDateTimeFormat( dateTimeString, _countof(dateTimeString), L"_%Y%m%d_%H%M%S", localTime ); const EditNode* node = CAppNodeManager::getInstance()->GetEditNode( m_pcDocRef->m_pcEditWnd->GetHwnd() ); const int nId = (node != NULL && 0 < node->m_nId) ? node->m_nId : 0; - auto_sprintf_s( pSaveInfo->cFilePath, pSaveInfo->cFilePath.GetBufferCount(), _T("%s%.0d_%s"), LS(STR_NO_TITLE2), nId, dateTimeString ); + auto_sprintf_s( pSaveInfo->cFilePath, pSaveInfo->cFilePath.GetBufferCount(), L"%s%.0d%s", LS(STR_NO_TITLE2), nId, dateTimeString ); } // ダイアログを表示 From ce1734f922297287c3aad7449c8410a48d9c2e2b Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Tue, 8 Dec 2020 00:11:02 +0900 Subject: [PATCH 0283/1024] =?UTF-8?q?GetDateTimeFormat=E3=81=AE=E6=88=BB?= =?UTF-8?q?=E3=82=8A=E5=80=A4=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/doc/CDocFileOperation.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sakura_core/doc/CDocFileOperation.cpp b/sakura_core/doc/CDocFileOperation.cpp index f4ed0e9537..36bd79dbfa 100644 --- a/sakura_core/doc/CDocFileOperation.cpp +++ b/sakura_core/doc/CDocFileOperation.cpp @@ -270,7 +270,9 @@ bool CDocFileOperation::SaveFileDialog( SYSTEMTIME localTime = {}; ::GetLocalTime( &localTime ); WCHAR dateTimeString[20] = {}; - GetDateTimeFormat( dateTimeString, _countof(dateTimeString), L"_%Y%m%d_%H%M%S", localTime ); + if( !GetDateTimeFormat( dateTimeString, _countof(dateTimeString), L"_%Y%m%d_%H%M%S", localTime ) ){ + dateTimeString[0] = L'\0'; + } const EditNode* node = CAppNodeManager::getInstance()->GetEditNode( m_pcDocRef->m_pcEditWnd->GetHwnd() ); const int nId = (node != NULL && 0 < node->m_nId) ? node->m_nId : 0; From 68db45c18dbfd35180a6812c4a725479b0599a14 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Tue, 8 Dec 2020 22:18:52 +0900 Subject: [PATCH 0284/1024] =?UTF-8?q?=E9=9D=99=E7=9A=84=E8=A7=A3=E6=9E=90?= =?UTF-8?q?=E3=81=AE=E5=AF=BE=E8=B1=A1=E3=83=93=E3=83=AB=E3=83=89=E3=82=92?= =?UTF-8?q?1=E7=92=B0=E5=A2=83=E3=81=AB=E7=B5=9E=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ci/azure-pipelines/template.job.SonarQube.yml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/ci/azure-pipelines/template.job.SonarQube.yml b/ci/azure-pipelines/template.job.SonarQube.yml index 6f88468423..6cc15e867f 100644 --- a/ci/azure-pipelines/template.job.SonarQube.yml +++ b/ci/azure-pipelines/template.job.SonarQube.yml @@ -15,15 +15,6 @@ jobs: strategy: maxParallel: 4 matrix: - Win32_Debug: - BuildPlatform: 'Win32' - Configuration: 'Debug' - Win32_Release: - BuildPlatform: 'Win32' - Configuration: 'Release' - Win64_Debug: - BuildPlatform: 'x64' - Configuration: 'Debug' Win64_Release: BuildPlatform: 'x64' Configuration: 'Release' From df44223ecb360c9d2a2edcd6fd7ce4adc86b6588 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Wed, 9 Dec 2020 21:44:16 +0900 Subject: [PATCH 0285/1024] =?UTF-8?q?CBS=5FDROPDOWNLIST=E3=81=A7=E3=81=82?= =?UTF-8?q?=E3=82=8B=E3=82=B3=E3=83=B3=E3=83=9C=E3=83=9C=E3=83=83=E3=82=AF?= =?UTF-8?q?=E3=82=B9=E3=82=92=E3=82=B5=E3=83=96=E3=82=AF=E3=83=A9=E3=82=B9?= =?UTF-8?q?=E5=8C=96=E3=81=97=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDialog.cpp | 2 ++ sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp | 3 --- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/sakura_core/dlg/CDialog.cpp b/sakura_core/dlg/CDialog.cpp index 7ec031ba25..05510a80aa 100644 --- a/sakura_core/dlg/CDialog.cpp +++ b/sakura_core/dlg/CDialog.cpp @@ -809,9 +809,11 @@ LRESULT CALLBACK SubEditProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, void CDialog::SetComboBoxDeleter(HWND hwndCtl, CRecent* pRecent) { assert(pRecent); + assert((::GetWindowLongPtr(hwndCtl, GWL_STYLE) & 0b11) != CBS_DROPDOWNLIST); COMBOBOXINFO info = { sizeof(COMBOBOXINFO) }; if (!::GetComboBoxInfo(hwndCtl, &info)) return; + assert(info.hwndCombo != info.hwndItem); ::SetWindowSubclass(info.hwndItem, SubEditProc, 0, (DWORD_PTR)pRecent); } diff --git a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp index 2605579771..285255e562 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp @@ -370,9 +370,6 @@ UINT_PTR CALLBACK OFNHookProc( /* ビューモードの初期値セット */ ::CheckDlgButton( pData->m_hwndOpenDlg, chx1, pData->m_bViewMode ); - - CDialog::SetComboBoxDeleter(pData->m_hwndComboMRU, &pData->m_cRecentFile); - CDialog::SetComboBoxDeleter(pData->m_hwndComboOPENFOLDER, &pData->m_cRecentFolder); } break; From e7267261ee058e7146077e0b0cb883f179a80dbc Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Fri, 11 Dec 2020 18:28:55 +0900 Subject: [PATCH 0286/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E3=81=AB=E5=AF=BE=E5=BF=9C:=20assert?= =?UTF-8?q?=E3=82=92=E9=99=A4=E5=8E=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDialog.cpp | 6 ++---- sakura_core/dlg/CDialog.h | 5 +++++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/sakura_core/dlg/CDialog.cpp b/sakura_core/dlg/CDialog.cpp index 05510a80aa..ee7ac7fa69 100644 --- a/sakura_core/dlg/CDialog.cpp +++ b/sakura_core/dlg/CDialog.cpp @@ -808,12 +808,10 @@ LRESULT CALLBACK SubEditProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, void CDialog::SetComboBoxDeleter(HWND hwndCtl, CRecent* pRecent) { - assert(pRecent); - assert((::GetWindowLongPtr(hwndCtl, GWL_STYLE) & 0b11) != CBS_DROPDOWNLIST); - + if (!pRecent || (::GetWindowLongPtr(hwndCtl, GWL_STYLE) & 0b11) == CBS_DROPDOWNLIST) + return; COMBOBOXINFO info = { sizeof(COMBOBOXINFO) }; if (!::GetComboBoxInfo(hwndCtl, &info)) return; - assert(info.hwndCombo != info.hwndItem); ::SetWindowSubclass(info.hwndItem, SubEditProc, 0, (DWORD_PTR)pRecent); } diff --git a/sakura_core/dlg/CDialog.h b/sakura_core/dlg/CDialog.h index 54df51a35d..a81d8fddbc 100644 --- a/sakura_core/dlg/CDialog.h +++ b/sakura_core/dlg/CDialog.h @@ -115,6 +115,11 @@ class CDialog void ResizeItem( HWND hTarget, const POINT& ptDlgDefalut, const POINT& ptDlgNew, const RECT& rcItemDefault, EAnchorStyle anchor, bool bUpdate = true); void GetItemClientRect( int wID, RECT& rc ); + + //! @brief コンボボックスに履歴削除・単語削除の機能を追加する + //! + //! @param hwndCtl コンボボックスのハンドル。CBS_DROPDOWNLISTスタイルのコンボボックスには対応していません。 + //! @param pRecent 紐づけるCRecentへのポインタ。nullptrは指定できません。 static void SetComboBoxDeleter( HWND hwndCtl, CRecent* pRecent ); public: From df4f4c90a50aa69d0f927b943bf31d9f724d5dd2 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sat, 12 Dec 2020 02:39:01 +0900 Subject: [PATCH 0287/1024] =?UTF-8?q?=E3=83=98=E3=83=AB=E3=83=97=E4=B8=AD?= =?UTF-8?q?=E3=81=AE=E3=83=90=E3=83=BC=E3=82=B8=E3=83=A7=E3=83=B3=E8=A1=A8?= =?UTF-8?q?=E8=A8=98=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- help/sakura/res/HLP000021.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/help/sakura/res/HLP000021.html b/help/sakura/res/HLP000021.html index ef499c4319..371fc42e1b 100644 --- a/help/sakura/res/HLP000021.html +++ b/help/sakura/res/HLP000021.html @@ -15,7 +15,7 @@

    名前を付けて保存

    現在編集しているテキストにファイル名を付けて保存します。
    フォルダの初期値はカレントディレクトリ/MRUの1番目/指定フォルダを共通設定 『編集』で指定可能です。(2.0.6.0 以降)
    -無題のファイル名には現在の日時を示す文字列が付加されます。(2.x.x.x 以降)
    +無題のファイル名には現在の日時を示す文字列が付加されます。(2.4.2 以降)



    From 125b9c9f4b0f3f6c44d5e8e890f3bd640c94f78c Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sat, 12 Dec 2020 03:03:19 +0900 Subject: [PATCH 0288/1024] =?UTF-8?q?GetDateTimeFormat=E3=81=AE=E5=87=BA?= =?UTF-8?q?=E5=8A=9B=E3=83=90=E3=83=83=E3=83=95=E3=82=A1=E3=82=B5=E3=82=A4?= =?UTF-8?q?=E3=82=BA=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF=E3=82=92=E5=AE=9F?= =?UTF-8?q?=E8=A3=85=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/format.cpp | 80 +++++++++++++++++++++---------------- sakura_core/util/format.h | 2 +- 2 files changed, 47 insertions(+), 35 deletions(-) diff --git a/sakura_core/util/format.cpp b/sakura_core/util/format.cpp index 00aa3445bf..f49df70c71 100644 --- a/sakura_core/util/format.cpp +++ b/sakura_core/util/format.cpp @@ -28,76 +28,88 @@ /*! 日時をフォーマット - @param[out] 書式変換後の文字列 - @param[in] バッファサイズ + @param[out] szResult 書式変換後の文字列 + @param[in] size szResultに格納可能な文字数(ヌル文字を含む) @param[in] format 書式 @param[in] systime 書式化したい日時 - @return bool true + @retval true 書式文字列の変換が完了 + @retval false 書式文字列の変換が一部または全部失敗 @note %Y %y %m %d %H %M %S の変換に対応 @author aroka @date 2005.11.21 新規 - - @todo 出力バッファのサイズチェックを行う */ -bool GetDateTimeFormat( WCHAR* szResult, int size, const WCHAR* format, const SYSTEMTIME& systime ) +bool GetDateTimeFormat( WCHAR* szResult, size_t size, const WCHAR* format, const SYSTEMTIME& systime ) { - WCHAR szTime[10]; + WCHAR szTime[10] = {}; const WCHAR *p = format; WCHAR *q = szResult; - int len; - + bool ret = false; + + if( szResult == NULL || size == 0 || format == NULL ){ + return false; + } + while( *p ){ + const size_t remains = (size - 1) - (q - szResult); + if( remains <= 0 ){ + break; + } + + int timeLen = -1; if( *p == L'%' ){ ++p; - switch(*p){ + switch( *p ){ case L'Y': - len = wsprintf(szTime,L"%d",systime.wYear); - wcscpy( q, szTime ); + timeLen = wsprintf( szTime, L"%d", systime.wYear ); break; case L'y': - len = wsprintf(szTime,L"%02d",(systime.wYear%100)); - wcscpy( q, szTime ); + timeLen = wsprintf( szTime, L"%02d", (systime.wYear % 100) ); break; case L'm': - len = wsprintf(szTime,L"%02d",systime.wMonth); - wcscpy( q, szTime ); + timeLen = wsprintf( szTime, L"%02d", systime.wMonth ); break; case L'd': - len = wsprintf(szTime,L"%02d",systime.wDay); - wcscpy( q, szTime ); + timeLen = wsprintf( szTime, L"%02d", systime.wDay ); break; case L'H': - len = wsprintf(szTime,L"%02d",systime.wHour); - wcscpy( q, szTime ); + timeLen = wsprintf( szTime, L"%02d", systime.wHour ); break; case L'M': - len = wsprintf(szTime,L"%02d",systime.wMinute); - wcscpy( q, szTime ); + timeLen = wsprintf( szTime, L"%02d", systime.wMinute ); break; case L'S': - len = wsprintf(szTime,L"%02d",systime.wSecond); - wcscpy( q, szTime ); + timeLen = wsprintf( szTime, L"%02d", systime.wSecond ); break; // A Z case L'%': default: - *q = *p; - len = 1; break; } - q+=len;//q += strlen(szTime); - ++p; } - else{ - *q = *p; - q++; - p++; + + if( 0 <= timeLen ){ + if( remains < timeLen ){ + break; + } + wcscpy( q, szTime ); + ++p; + q += timeLen; + }else{ + if( *p != L'\0' ){ + *q++ = *p++; + } } } - *q = *p; - return true; + + *q = L'\0'; + + if( *p == L'\0' ){ + ret = true; + } + + return ret; } /*! バージョン番号の解析 diff --git a/sakura_core/util/format.h b/sakura_core/util/format.h index f158846508..fb057e2e32 100644 --- a/sakura_core/util/format.h +++ b/sakura_core/util/format.h @@ -28,7 +28,7 @@ #pragma once // 20051121 aroka -bool GetDateTimeFormat( WCHAR* szResult, int size, const WCHAR* format, const SYSTEMTIME& systime ); +bool GetDateTimeFormat( WCHAR* szResult, size_t size, const WCHAR* format, const SYSTEMTIME& systime ); UINT32 ParseVersion( const WCHAR* ver ); //バージョン番号の解析 int CompareVersion( const WCHAR* verA, const WCHAR* verB ); //バージョン番号の比較 #endif /* SAKURA_FORMAT_A006AC9B_ADE2_499D_9CC6_00A649F32B4F_H_ */ From 1dcb2429b609c894be0449a8c154d6c7bdd1d850 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 12 Dec 2020 10:16:26 +0900 Subject: [PATCH 0289/1024] =?UTF-8?q?SonarScanner=E3=81=AE=E5=AE=9F?= =?UTF-8?q?=E8=A1=8C=E7=92=B0=E5=A2=83=E3=81=ABJDK11=E3=82=92=E4=BD=BF?= =?UTF-8?q?=E3=81=86=E3=82=88=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ci/azure-pipelines/template.job.SonarQube.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ci/azure-pipelines/template.job.SonarQube.yml b/ci/azure-pipelines/template.job.SonarQube.yml index 6cc15e867f..e2deb02790 100644 --- a/ci/azure-pipelines/template.job.SonarQube.yml +++ b/ci/azure-pipelines/template.job.SonarQube.yml @@ -37,6 +37,13 @@ jobs: - script: choco install "msbuild-sonarqube-runner" -y displayName: install msbuild-sonarqube-runner + # specify java version. + - task: JavaToolInstaller@0 + inputs: + versionSpec: '11' + jdkArchitectureOption: 'x64' + jdkSourceOption: 'PreInstalled' + # Build solution with SonarQube - script: build-sln.bat $(BuildPlatform) $(Configuration) displayName: Build solution with SonarQube From 2cb0a590ec2c308944db0fa81e8c500816449f30 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 12 Dec 2020 12:55:27 +0900 Subject: [PATCH 0290/1024] =?UTF-8?q?SonarQube=E3=81=AEJava=E3=81=AB?= =?UTF-8?q?=E9=96=A2=E3=81=99=E3=82=8B=E8=A8=98=E8=BF=B0=E3=82=92=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SonarQube.md | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/SonarQube.md b/SonarQube.md index d333f62f81..8675577fbb 100644 --- a/SonarQube.md +++ b/SonarQube.md @@ -94,19 +94,26 @@ https://sonarcloud.io/account/security/ のページでいつでも Access Token ### ローカルで実行する場合の環境設定 (事前準備) -1. Oracle JRE8 の **64bit 版のランタイム** をダウンロードしてインストールする - 1. Oracle JRE8 https://java.com/ja/download/manual.jsp (2019/05/02 現在) - 1. Open JRE8 は Windows 版はダウンロードできなさそう。 - 1. 参考: [Prerequisites and Overview (Supported Platforms)](https://docs.sonarqube.org/latest/requirements/requirements/#header-3) - 1. 参考: [SonarQubeの Java 11 対応状況](https://qiita.com/hayao_k/items/2cd81161f8dffd3a178b) - -1. `JAVA_HOME` の環境変数を設定する +1. chocolatey をインストールする + https://chocolatey.org/install#install-with-cmdexe を参考にインストールする。 + ※powershellコンソールを「管理者として実行」して、サイトにあるスクリプトをコピペ実行するだけです。 + +3. SonnarScanner実行環境として Java 11 をインストールする + 1. JDKを使う場合 https://chocolatey.org/packages/openjdk11 + 2. JREを使う場合 https://chocolatey.org/packages/openjdk11jre + 3. Oracleに開発者登録している場合 Oracle JDK/JRE で代替してもよいです。 + 1. 普通のJava Runtime Envirionment(jre8)は使えません。 + https://java.com/ja/download/manual.jsp (2019/05/02 現在) + 2. 参考: [Prerequisites and Overview (Supported Platforms)](https://docs.sonarqube.org/latest/requirements/requirements/#header-3) + 3. 参考: [SonarQubeの Java 11 対応状況](https://qiita.com/hayao_k/items/2cd81161f8dffd3a178b) + 4. SonarSource(=SonarQubeの開発元)が方針転換してJava8を使った静的解析ができなくなりました。 + +4. `JAVA_HOME` の環境変数を設定する + ※コマンドプロンプトで `set J` して `JAVA_HOME` が表示されない場合のみ 例 - `set JAVA_HOME=C:\Program Files\Java\jre1.8.0_211` - -1. https://chocolatey.org/install#install-with-cmdexe を参考に chocolatey をインストールする。 + `set JAVA_HOME=C:\Program Files\Java\jdk11.0.9` ### 解析手順の流れ (一般論) From 790090c48c0148e408d6e1a6d2a72ec06557b63a Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 12 Dec 2020 14:29:48 +0900 Subject: [PATCH 0291/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98(typo=E4=BF=AE=E6=AD=A3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SonarQube.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SonarQube.md b/SonarQube.md index 8675577fbb..d51047168c 100644 --- a/SonarQube.md +++ b/SonarQube.md @@ -98,7 +98,7 @@ https://sonarcloud.io/account/security/ のページでいつでも Access Token https://chocolatey.org/install#install-with-cmdexe を参考にインストールする。 ※powershellコンソールを「管理者として実行」して、サイトにあるスクリプトをコピペ実行するだけです。 -3. SonnarScanner実行環境として Java 11 をインストールする +3. SonarScanner実行環境として Java 11 をインストールする 1. JDKを使う場合 https://chocolatey.org/packages/openjdk11 2. JREを使う場合 https://chocolatey.org/packages/openjdk11jre 3. Oracleに開発者登録している場合 Oracle JDK/JRE で代替してもよいです。 From 976e215b546055bab8e7507f8fdc87e1e4b2c84c Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 12 Dec 2020 16:04:44 +0900 Subject: [PATCH 0292/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E3=81=AB=E3=82=88=E3=82=8A=E3=82=B3=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=88=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ci/azure-pipelines/template.job.SonarQube.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/ci/azure-pipelines/template.job.SonarQube.yml b/ci/azure-pipelines/template.job.SonarQube.yml index e2deb02790..7089651dcc 100644 --- a/ci/azure-pipelines/template.job.SonarQube.yml +++ b/ci/azure-pipelines/template.job.SonarQube.yml @@ -37,7 +37,6 @@ jobs: - script: choco install "msbuild-sonarqube-runner" -y displayName: install msbuild-sonarqube-runner - # specify java version. - task: JavaToolInstaller@0 inputs: versionSpec: '11' From 4d45df2a2138cdf215e23c0956baac3c5622c9b2 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sun, 13 Dec 2020 01:27:36 +0900 Subject: [PATCH 0293/1024] =?UTF-8?q?GetDateTimeFormat=E3=81=AE=E5=8D=98?= =?UTF-8?q?=E4=BD=93=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-format.cpp | 123 +++++++++++++++++++++++++ tests/unittests/tests1.vcxproj | 1 + tests/unittests/tests1.vcxproj.filters | 3 + 3 files changed, 127 insertions(+) create mode 100644 tests/unittests/test-format.cpp diff --git a/tests/unittests/test-format.cpp b/tests/unittests/test-format.cpp new file mode 100644 index 0000000000..0072c55ee9 --- /dev/null +++ b/tests/unittests/test-format.cpp @@ -0,0 +1,123 @@ +/*! @file */ +/* + Copyright (C) 2018-2020 Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include +#include +#include "util/format.h" + +/*! + * @brief 入力の妥当性判定に関するテスト + */ +TEST( format, CheckInputValidity ) +{ + SYSTEMTIME time = {}; + time.wYear = 123; + WCHAR buffer[5] = {}; + EXPECT_FALSE( GetDateTimeFormat( NULL, 0, L"", time ) ); + EXPECT_FALSE( GetDateTimeFormat( buffer, 0, L"", time ) ); + EXPECT_FALSE( GetDateTimeFormat( buffer, _countof(buffer), NULL, time ) ); + EXPECT_FALSE( GetDateTimeFormat( buffer, 3, L"%Y", time ) ); + EXPECT_TRUE( GetDateTimeFormat( buffer, 4, L"%Y", time ) ); +} + +/*! + * @brief バッファ書き込み範囲のテスト + */ +TEST( format, BufferWriteRange ) +{ + SYSTEMTIME time = {}; + time.wYear = 1; + + WCHAR buffer1[] = { L'X', L'X', L'X' }; + EXPECT_TRUE( GetDateTimeFormat( buffer1, _countof(buffer1), L"", time ) ); + EXPECT_EQ( L'\0', buffer1[0] ); + EXPECT_EQ( L'X', buffer1[1] ); + + WCHAR buffer2[] = { L'X', L'X', L'X' }; + EXPECT_TRUE( GetDateTimeFormat( buffer2, _countof(buffer2), L"%", time ) ); + EXPECT_EQ( L'\0', buffer2[0] ); + EXPECT_EQ( L'X', buffer2[1] ); + + WCHAR buffer3[] = { L'X', L'X', L'X' }; + EXPECT_TRUE( GetDateTimeFormat( buffer3, _countof(buffer3), L"%Y", time ) ); + EXPECT_EQ( L'1', buffer3[0] ); + EXPECT_EQ( L'\0', buffer3[1] ); + EXPECT_EQ( L'X', buffer3[2] ); + + WCHAR buffer4[] = { L'X', L'X', L'X' }; + EXPECT_FALSE( GetDateTimeFormat( buffer4, _countof(buffer4), L"_%y", time ) ); + EXPECT_EQ( L'_', buffer4[0] ); + EXPECT_EQ( L'\0', buffer4[1] ); + EXPECT_EQ( L'X', buffer4[2] ); + + WCHAR buffer5[] = { L'X', L'X', L'X' }; + EXPECT_TRUE( GetDateTimeFormat( buffer5, _countof(buffer5), L"1", time ) ); + EXPECT_EQ( L'1', buffer5[0] ); + EXPECT_EQ( L'\0', buffer5[1] ); + EXPECT_EQ( L'X', buffer5[2] ); + + WCHAR buffer6[] = { L'X', L'X', L'X' }; + EXPECT_TRUE( GetDateTimeFormat( buffer6, _countof(buffer6), L"11", time ) ); + EXPECT_EQ( L'1', buffer6[0] ); + EXPECT_EQ( L'1', buffer6[1] ); + EXPECT_EQ( L'\0', buffer6[2] ); + + WCHAR buffer7[] = { L'X', L'X', L'X' }; + EXPECT_FALSE( GetDateTimeFormat( buffer7, _countof(buffer7), L"111", time ) ); + EXPECT_EQ( L'1', buffer7[0] ); + EXPECT_EQ( L'1', buffer7[1] ); + EXPECT_EQ( L'\0', buffer7[2] ); +} + +/*! + * @brief 書式変換のテスト + */ +TEST( format, Formatting ) +{ + SYSTEMTIME time = {}; + + WCHAR buffer1[5] = {}; + EXPECT_TRUE( GetDateTimeFormat( buffer1, _countof(buffer1), L"%%-%1-%", time ) ); + ASSERT_STREQ( L"%-1-", buffer1 ); + + time.wYear = 1; + time.wMonth = 2; + time.wDay = 3; + time.wHour = 1; + time.wMinute = 2; + time.wSecond = 3; + WCHAR buffer2[20] = {}; + EXPECT_TRUE( GetDateTimeFormat( buffer2, _countof(buffer2), L"%Y-%y-%m-%d %H:%M:%S", time ) ); + ASSERT_STREQ( L"1-01-02-03 01:02:03", buffer2 ); + + time.wYear = 12345; + time.wMonth = 12; + time.wDay = 23; + time.wHour = 12; + time.wMinute = 34; + time.wSecond = 56; + WCHAR buffer3[24] = {}; + EXPECT_TRUE( GetDateTimeFormat( buffer3, _countof(buffer3), L"%Y-%y-%m-%d %H:%M:%S", time ) ); + ASSERT_STREQ( L"12345-45-12-23 12:34:56", buffer3 ); +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index 6122107071..0cc2e76220 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -114,6 +114,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index aa11df76bf..aad8dea532 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -83,6 +83,9 @@ Test Files + + Test Files + From 637a128ebf33e30d5e3b83a69c35e43aa015882f Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sun, 13 Dec 2020 01:34:31 +0900 Subject: [PATCH 0294/1024] =?UTF-8?q?=E5=8D=98=E4=BD=93=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=A8=E3=83=A9=E3=83=BC=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/format.cpp | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/sakura_core/util/format.cpp b/sakura_core/util/format.cpp index f49df70c71..85779883e5 100644 --- a/sakura_core/util/format.cpp +++ b/sakura_core/util/format.cpp @@ -52,11 +52,6 @@ bool GetDateTimeFormat( WCHAR* szResult, size_t size, const WCHAR* format, const } while( *p ){ - const size_t remains = (size - 1) - (q - szResult); - if( remains <= 0 ){ - break; - } - int timeLen = -1; if( *p == L'%' ){ ++p; @@ -82,24 +77,24 @@ bool GetDateTimeFormat( WCHAR* szResult, size_t size, const WCHAR* format, const case L'S': timeLen = wsprintf( szTime, L"%02d", systime.wSecond ); break; - // A Z - case L'%': default: break; } } + const size_t remains = (size - 1) - (q - szResult); if( 0 <= timeLen ){ - if( remains < timeLen ){ + if( remains < timeLen || timeLen == 0 ){ break; } wcscpy( q, szTime ); ++p; q += timeLen; }else{ - if( *p != L'\0' ){ - *q++ = *p++; + if( remains <= 0 || *p == L'\0' ){ + break; } + *q++ = *p++; } } From 42fb34324a975410c0dd9dccc8bdffdfcbaf2862 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Mon, 14 Dec 2020 07:40:59 +0900 Subject: [PATCH 0295/1024] =?UTF-8?q?(GHA)=20if=E6=9D=A1=E4=BB=B6=E3=81=AE?= =?UTF-8?q?=E5=BC=8F=E6=A7=8B=E6=96=87=E3=81=8C=E6=AD=A3=E3=81=97=E3=81=8F?= =?UTF-8?q?=E3=81=AA=E3=81=84=E5=95=8F=E9=A1=8C=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build-sakura.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build-sakura.yml b/.github/workflows/build-sakura.yml index 1fd5a389e0..f93b306441 100644 --- a/.github/workflows/build-sakura.yml +++ b/.github/workflows/build-sakura.yml @@ -72,55 +72,55 @@ jobs: - name: zipArtifacts run: zipArtifacts.bat ${{ matrix.platform }} ${{ matrix.config }} - if: ${{ matrix.config }} == 'Release' + if: ${{ matrix.config == 'Release' }} shell: cmd ## see https://github.com/actions/upload-artifact - name: Upload Installer uses: actions/upload-artifact@v2 - if: ${{ matrix.config }} == 'Release' + if: ${{ matrix.config == 'Release' }} with: name: Installer ${{ matrix.platform }} ${{ matrix.config }} path: 'sakura-*-Installer.zip' - name: Upload Installer MD5 uses: actions/upload-artifact@v2 - if: ${{ matrix.config }} == 'Release' + if: ${{ matrix.config == 'Release' }} with: name: Installer MD5 ${{ matrix.platform }} ${{ matrix.config }} path: 'sakura-*-Installer.zip.md5' - name: Upload Exe uses: actions/upload-artifact@v2 - if: ${{ matrix.config }} == 'Release' + if: ${{ matrix.config == 'Release' }} with: name: Exe ${{ matrix.platform }} ${{ matrix.config }} path: 'sakura-*-Exe.zip' - name: Upload Exe MD5 uses: actions/upload-artifact@v2 - if: ${{ matrix.config }} == 'Release' + if: ${{ matrix.config == 'Release' }} with: name: Exe MD5 ${{ matrix.platform }} ${{ matrix.config }} path: 'sakura-*-Exe.zip.md5' - name: Upload Log uses: actions/upload-artifact@v2 - if: ${{ matrix.config }} == 'Release' + if: ${{ matrix.config == 'Release' }} with: name: Log ${{ matrix.platform }} ${{ matrix.config }} path: 'sakura-*-Log.zip' - name: Upload Asm uses: actions/upload-artifact@v2 - if: ${{ matrix.config }} == 'Release' + if: ${{ matrix.config == 'Release' }} with: name: Asm ${{ matrix.platform }} ${{ matrix.config }} path: 'sakura-*-Asm.zip' - name: Upload Dev uses: actions/upload-artifact@v2 - if: ${{ matrix.config }} == 'Release' + if: ${{ matrix.config == 'Release' }} with: name: Dev ${{ matrix.platform }} ${{ matrix.config }} path: 'sakura-*-Dev.zip' From 1381dc34d05bfd5b50cb097a0df509986d10ccc7 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Mon, 14 Dec 2020 19:02:37 +0900 Subject: [PATCH 0296/1024] =?UTF-8?q?=E6=9B=B8=E5=BC=8F=E6=96=87=E5=AD=97?= =?UTF-8?q?=E5=88=97=E3=81=AE=E6=9C=AB=E5=B0=BE=E3=81=8C'%'=E3=81=AE?= =?UTF-8?q?=E5=A0=B4=E5=90=88=E7=94=A8=E3=81=AE=E5=88=A4=E5=AE=9A=E3=82=92?= =?UTF-8?q?=E8=A6=8B=E7=9B=B4=E3=81=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/format.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/sakura_core/util/format.cpp b/sakura_core/util/format.cpp index 85779883e5..8b84aea930 100644 --- a/sakura_core/util/format.cpp +++ b/sakura_core/util/format.cpp @@ -55,6 +55,11 @@ bool GetDateTimeFormat( WCHAR* szResult, size_t size, const WCHAR* format, const int timeLen = -1; if( *p == L'%' ){ ++p; + + if( *p == L'\0' ){ + break; + } + switch( *p ){ case L'Y': timeLen = wsprintf( szTime, L"%d", systime.wYear ); @@ -84,14 +89,14 @@ bool GetDateTimeFormat( WCHAR* szResult, size_t size, const WCHAR* format, const const size_t remains = (size - 1) - (q - szResult); if( 0 <= timeLen ){ - if( remains < timeLen || timeLen == 0 ){ + if( remains < (size_t)timeLen ){ break; } wcscpy( q, szTime ); ++p; q += timeLen; }else{ - if( remains <= 0 || *p == L'\0' ){ + if( remains == 0 ){ break; } *q++ = *p++; From 0bbff19aa6f0e94614fb409460f1c19cc7523cfb Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Thu, 17 Dec 2020 11:33:06 +0900 Subject: [PATCH 0297/1024] =?UTF-8?q?CWordParse=20=E3=81=AE=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-cwordparse.cpp | 310 +++++++++++++++++++++++++ tests/unittests/tests1.vcxproj | 1 + tests/unittests/tests1.vcxproj.filters | 3 + 3 files changed, 314 insertions(+) create mode 100644 tests/unittests/test-cwordparse.cpp diff --git a/tests/unittests/test-cwordparse.cpp b/tests/unittests/test-cwordparse.cpp new file mode 100644 index 0000000000..36c3afc18b --- /dev/null +++ b/tests/unittests/test-cwordparse.cpp @@ -0,0 +1,310 @@ +/*! @file */ +/* + Copyright (C) 2018-2020 Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original + software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ + +#include +#include "parse/CWordParse.h" + +#include +#include +#include +#include "charset/charcode.h" + +std::ostream& operator<<(std::ostream& os, ECharKind kind) +{ + static const char* s[] = {"CK_NUL", "CK_TAB", "CK_CR", "CK_LF", "CK_CTR", "CK_SPACE", + "CK_CSYM", "CK_KATA", "CK_LATIN", "CK_UDEF", "CK_ETC", "CK_ZEN_SPACE", + "CK_ZEN_NOBASU", "CK_ZEN_DAKU", "CK_ZEN_CSYM", "CK_ZEN_KIGO", "CK_HIRA", + "CK_ZEN_KATA", "CK_GREEK", "CK_ZEN_ROS", "CK_ZEN_SKIGO", "CK_ZEN_ETC"}; + return os << s[kind]; +} + +ECharKind WhatKindOfChar(wchar_t ch) +{ + return CWordParse::WhatKindOfChar(&ch, 1, 0); +} + +void ExpectEqualForEachChars(ECharKind kind, std::wstring_view s) +{ + for (wchar_t ch : s) { + EXPECT_EQ(kind, WhatKindOfChar(ch)); + } +} + +TEST(WhatKindOfChar, Null) +{ + EXPECT_EQ(CK_NULL, CWordParse::WhatKindOfChar(L"", 0, 0)); +} + +TEST(WhatKindOfChar, AsciiChars) +{ + ExpectEqualForEachChars(CK_CTRL, L"\x01\x02\x03\x04\x05\x06\x07\x08\x0b\x0c\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x7f"); + EXPECT_EQ(CK_TAB, WhatKindOfChar(L'\t')); + EXPECT_EQ(CK_LF, WhatKindOfChar(L'\n')); + EXPECT_EQ(CK_CR, WhatKindOfChar(L'\r')); + EXPECT_EQ(CK_SPACE, WhatKindOfChar(L' ')); + ExpectEqualForEachChars(CK_ETC, L"!\"%&'()*+,-./:;<=>?[]^`{|}~"); + ExpectEqualForEachChars(CK_UDEF, L"#$@\\"); + ExpectEqualForEachChars(CK_CSYM, L"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"); +} + +TEST(WhatKindOfChar, HankakuKana) +{ + ExpectEqualForEachChars(CK_KATA, L"。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚"); +} + +TEST(WhatKindOfChar, Latin1) +{ + ExpectEqualForEachChars(CK_LATIN, L"ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžſ"); +} + +TEST(WhatKindOfChar, ZenkakuSpace) +{ + EXPECT_EQ(CK_ZEN_SPACE, WhatKindOfChar(L' ')); +} + +TEST(WhatKindOfChar, Nobasu) +{ + EXPECT_EQ(CK_ZEN_NOBASU, WhatKindOfChar(L'ー')); +} + +TEST(WhatKindOfChar, Dakuten) +{ + EXPECT_EQ(CK_ZEN_DAKU, WhatKindOfChar(L'゛')); + EXPECT_EQ(CK_ZEN_DAKU, WhatKindOfChar(L'゜')); +} + +TEST(WhatKindOfChar, ZenkakuSymbols) +{ + ExpectEqualForEachChars(CK_ZEN_CSYM, L"_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqtstuvwxyz"); +} + +TEST(WhatKindOfChar, ZenkakuKigou) +{ + ExpectEqualForEachChars(CK_ZEN_KIGO, L"、。,.・:;?!´`¨^ ̄〃―‐/\~∥|…‥‘’“”()〔〕[]{}〈〉《》「」『』【】+-±×÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓∈∋⊆⊇⊂⊃∪∩∧∨¬⇒⇔∀∃∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬ʼn♯♭♪†‡¶◯"); +} + +TEST(WhatKindOfChar, Hiragana) +{ + ExpectEqualForEachChars(CK_HIRA, L"ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをんゔゕゖゝゞ"); +} + +TEST(WhatKindOfChar, Katakana) +{ + ExpectEqualForEachChars(CK_ZEN_KATA, L"ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶヷヸヹヺヽヾ"); +} + +TEST(WhatKindOfChar, Greek) +{ + ExpectEqualForEachChars(CK_GREEK, L"ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψω"); +} + +TEST(WhatKindOfChar, Cyrillic) +{ + ExpectEqualForEachChars(CK_ZEN_ROS, L"ЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяѐёђѓєѕіїјљњћќѝўџѠѡѢѣѤѥѦѧѨѩѪѫѬѭѮѯѰѱѲѳѴѵѶѷѸѹѺѻѼѽѾѿҀҁ҂҃҄҅҆҇҈҉ҊҋҌҍҎҏҐґҒғҔҕҖҗҘҙҚқҜҝҞҟҠҡҢңҤҥҦҧҨҩҪҫҬҭҮүҰұҲҳҴҵҶҷҸҹҺһҼҽҾҿӀӁӂӃӄӅӆӇӈӉӊӋӌӍӎӏӐӑӒӓӔӕӖӗӘәӚӛӜӝӞӟӠӡӢӣӤӥӦӧӨөӪӫӬӭӮӯӰӱӲӳӴӵӶӷӸӹӺӻӼӽӾӿԀԁԂԃԄԅԆԇԈԉԊԋԌԍԎԏԐԑԒԓԔԕԖԗԘԙԚԛԜԝԞԟԠԡԢԣԤԥԦԧԨԩԪԫԬԭԮԯ"); + ExpectEqualForEachChars(CK_ZEN_ROS, L"\x2de0\x2de1\x2de2\x2de3\x2de4\x2de5\x2de6\x2de7\x2de8\x2de9\x2dea\x2deb\x2dec\x2ded\x2dee\x2def\x2df0\x2df1\x2df2\x2df3\x2df4\x2df5\x2df6\x2df7\x2df8\x2df9\x2dfa\x2dfb\x2dfc\x2dfd\x2dfe\x2dff"); + ExpectEqualForEachChars(CK_ZEN_ROS, L"ꙀꙁꙂꙃꙄꙅꙆꙇꙈꙉꙊꙋꙌꙍꙎꙏꙐꙑꙒꙓꙔꙕꙖꙗꙘꙙꙚꙛꙜꙝꙞꙟꙠꙡꙢꙣꙤꙥꙦꙧꙨꙩꙪꙫꙬꙭꙮ꙯꙰꙱꙲꙳ꙴꙵꙶꙷꙸꙹꙺꙻ꙼꙽꙾ꙿꚀꚁꚂꚃꚄꚅꚆꚇꚈꚉꚊꚋꚌꚍꚎꚏꚐꚑꚒꚓꚔꚕꚖꚗꚘꚙꚚꚛꚜꚝꚞꚟ"); +} + +TEST(WhatKindOfChar, BoxDrawing) +{ + ExpectEqualForEachChars(CK_ZEN_SKIGO, L"─━│┃┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋╌╍╎╏═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╪╫╬╭╮╯╰╱╲╳╴╵╶╷╸╹╺╻╼╽╾╿"); +} + +TEST(WhatKindOfChar, SurrogatePairs) +{ + EXPECT_EQ(CK_ETC, CWordParse::WhatKindOfChar(L"🌸", 2, 0)); + EXPECT_EQ(CK_ZEN_ETC, CWordParse::WhatKindOfChar(L"𠮷", 2, 0)); +} + +TEST(WhatKindOfTwoChars, ReturnsSameKindIfTwoKindsAreIdentical) +{ + EXPECT_EQ(CK_HIRA, CWordParse::WhatKindOfTwoChars(CK_HIRA, CK_HIRA)); + EXPECT_EQ(CK_LATIN, CWordParse::WhatKindOfTwoChars(CK_LATIN, CK_LATIN)); + EXPECT_EQ(CK_UDEF, CWordParse::WhatKindOfTwoChars(CK_UDEF, CK_UDEF)); + EXPECT_EQ(CK_CTRL, CWordParse::WhatKindOfTwoChars(CK_CTRL, CK_CTRL)); +} + +TEST(WhatKindOfTwoChars, MergesZenkakuNobasuIntoKanas) +{ + EXPECT_EQ(CK_HIRA, CWordParse::WhatKindOfTwoChars(CK_ZEN_NOBASU, CK_HIRA)); + EXPECT_EQ(CK_HIRA, CWordParse::WhatKindOfTwoChars(CK_HIRA, CK_ZEN_NOBASU)); + EXPECT_EQ(CK_ZEN_KATA, CWordParse::WhatKindOfTwoChars(CK_ZEN_NOBASU, CK_ZEN_KATA)); + EXPECT_EQ(CK_ZEN_KATA, CWordParse::WhatKindOfTwoChars(CK_ZEN_KATA, CK_ZEN_NOBASU)); +} + +TEST(WhatKindOfTwoChars, MergesZenkakuDakutenIntoKanas) +{ + EXPECT_EQ(CK_HIRA, CWordParse::WhatKindOfTwoChars(CK_ZEN_DAKU, CK_HIRA)); + EXPECT_EQ(CK_HIRA, CWordParse::WhatKindOfTwoChars(CK_HIRA, CK_ZEN_DAKU)); + EXPECT_EQ(CK_ZEN_KATA, CWordParse::WhatKindOfTwoChars(CK_ZEN_DAKU, CK_ZEN_KATA)); + EXPECT_EQ(CK_ZEN_KATA, CWordParse::WhatKindOfTwoChars(CK_ZEN_KATA, CK_ZEN_DAKU)); +} + +TEST(WhatKindOfTwoChars, MergesNobasuAndDakutenTogether) +{ + EXPECT_EQ(CK_ZEN_NOBASU, CWordParse::WhatKindOfTwoChars(CK_ZEN_DAKU, CK_ZEN_NOBASU)); + EXPECT_EQ(CK_ZEN_DAKU, CWordParse::WhatKindOfTwoChars(CK_ZEN_NOBASU, CK_ZEN_DAKU)); +} + +TEST(WhatKindOfTwoChars, TreatsLatinAsAlphanumeric) +{ + EXPECT_EQ(CK_CSYM, CWordParse::WhatKindOfTwoChars(CK_CSYM, CK_LATIN)); + EXPECT_EQ(CK_CSYM, CWordParse::WhatKindOfTwoChars(CK_LATIN, CK_CSYM)); +} + +TEST(WhatKindOfTwoChars, TreatsUserDefinedAsEtc) +{ + EXPECT_EQ(CK_ETC, CWordParse::WhatKindOfTwoChars(CK_ETC, CK_UDEF)); + EXPECT_EQ(CK_ETC, CWordParse::WhatKindOfTwoChars(CK_UDEF, CK_ETC)); +} + +TEST(WhatKindOfTwoChars, TreatsControlCharsAsEtc) +{ + EXPECT_EQ(CK_ETC, CWordParse::WhatKindOfTwoChars(CK_ETC, CK_CTRL)); + EXPECT_EQ(CK_ETC, CWordParse::WhatKindOfTwoChars(CK_CTRL, CK_ETC)); +} + +TEST(WhatKindOfTwoChars, ReturnsNullOnIncompatibleKinds) +{ + EXPECT_EQ(CK_NULL, CWordParse::WhatKindOfTwoChars(CK_HIRA, CK_LATIN)); +} + +TEST(WhatKindOfTwoChars4KW, ReturnsSameKindIfTwoKindsAreIdentical) +{ + EXPECT_EQ(CK_HIRA, CWordParse::WhatKindOfTwoChars4KW(CK_HIRA, CK_HIRA)); + EXPECT_EQ(CK_LATIN, CWordParse::WhatKindOfTwoChars4KW(CK_LATIN, CK_LATIN)); + EXPECT_EQ(CK_UDEF, CWordParse::WhatKindOfTwoChars4KW(CK_UDEF, CK_UDEF)); + EXPECT_EQ(CK_CTRL, CWordParse::WhatKindOfTwoChars4KW(CK_CTRL, CK_CTRL)); +} + +TEST(WhatKindOfTwoChars4KW, MergesZenkakuNobasuIntoKanas) +{ + EXPECT_EQ(CK_HIRA, CWordParse::WhatKindOfTwoChars4KW(CK_ZEN_NOBASU, CK_HIRA)); + EXPECT_EQ(CK_HIRA, CWordParse::WhatKindOfTwoChars4KW(CK_HIRA, CK_ZEN_NOBASU)); + EXPECT_EQ(CK_ZEN_KATA, CWordParse::WhatKindOfTwoChars4KW(CK_ZEN_NOBASU, CK_ZEN_KATA)); + EXPECT_EQ(CK_ZEN_KATA, CWordParse::WhatKindOfTwoChars4KW(CK_ZEN_KATA, CK_ZEN_NOBASU)); +} + +TEST(WhatKindOfTwoChars4KW, MergesZenkakuDakutenIntoKanas) +{ + EXPECT_EQ(CK_HIRA, CWordParse::WhatKindOfTwoChars4KW(CK_ZEN_DAKU, CK_HIRA)); + EXPECT_EQ(CK_HIRA, CWordParse::WhatKindOfTwoChars4KW(CK_HIRA, CK_ZEN_DAKU)); + EXPECT_EQ(CK_ZEN_KATA, CWordParse::WhatKindOfTwoChars4KW(CK_ZEN_DAKU, CK_ZEN_KATA)); + EXPECT_EQ(CK_ZEN_KATA, CWordParse::WhatKindOfTwoChars4KW(CK_ZEN_KATA, CK_ZEN_DAKU)); +} + +TEST(WhatKindOfTwoChars4KW, MergesNobasuAndDakutenTogether) +{ + EXPECT_EQ(CK_ZEN_NOBASU, CWordParse::WhatKindOfTwoChars4KW(CK_ZEN_DAKU, CK_ZEN_NOBASU)); + EXPECT_EQ(CK_ZEN_DAKU, CWordParse::WhatKindOfTwoChars4KW(CK_ZEN_NOBASU, CK_ZEN_DAKU)); +} + +TEST(WhatKindOfTwoChars4KW, TreatsLatinAsAlphanumeric) +{ + EXPECT_EQ(CK_CSYM, CWordParse::WhatKindOfTwoChars4KW(CK_CSYM, CK_LATIN)); + EXPECT_EQ(CK_CSYM, CWordParse::WhatKindOfTwoChars4KW(CK_LATIN, CK_CSYM)); +} + +TEST(WhatKindOfTwoChars4KW, TreatsUserDefinedAsAlphanumeric) +{ + EXPECT_EQ(CK_CSYM, CWordParse::WhatKindOfTwoChars4KW(CK_CSYM, CK_UDEF)); + EXPECT_EQ(CK_CSYM, CWordParse::WhatKindOfTwoChars4KW(CK_UDEF, CK_CSYM)); +} + +TEST(WhatKindOfTwoChars4KW, LeavesControlCharsAsIs) +{ + EXPECT_EQ(CK_NULL, CWordParse::WhatKindOfTwoChars4KW(CK_ETC, CK_CTRL)); + EXPECT_EQ(CK_NULL, CWordParse::WhatKindOfTwoChars4KW(CK_CTRL, CK_ETC)); +} + +TEST(WhatKindOfTwoChars4KW, ReturnsNullOnIncompatibleKinds) +{ + EXPECT_EQ(CK_NULL, CWordParse::WhatKindOfTwoChars4KW(CK_HIRA, CK_LATIN)); +} + +TEST(SearchPrevWordPosition, ReturnsFalseWhenIndexIsZero) +{ + EXPECT_FALSE(CWordParse::SearchPrevWordPosition(L"", + CLogicInt(0), CLogicInt(0), nullptr, FALSE)); +} + +TEST(SearchPrevWordPosition, RespectsBooleanArgument) +{ + CLogicInt columnNew; + bool result; + result = CWordParse::SearchPrevWordPosition(L" sakura !", + CLogicInt(9), CLogicInt(8), &columnNew, FALSE); + EXPECT_TRUE(result); + EXPECT_EQ(1, columnNew); + + result = CWordParse::SearchPrevWordPosition(L" sakura !", + CLogicInt(9), CLogicInt(8), &columnNew, TRUE); + EXPECT_TRUE(result); + EXPECT_EQ(7, columnNew); +} + +TEST(SearchNextWordPosition, ReturnsFalseWhenIndexIsAtEndOfString) +{ + EXPECT_FALSE(CWordParse::SearchNextWordPosition(L"", + CLogicInt(0), CLogicInt(0), nullptr, FALSE)); +} + +TEST(SearchNextWordPosition, StopsAtIncompatibleKinds) +{ + CLogicInt columnNew; + EXPECT_TRUE(CWordParse::SearchNextWordPosition(L"sakura!", + CLogicInt(7), CLogicInt(0), &columnNew, FALSE)); + EXPECT_EQ(6, columnNew); +} + +TEST(SearchNextWordPosition, RespectsBooleanArgument) +{ + CLogicInt columnNew; + bool result; + result = CWordParse::SearchNextWordPosition(L"sakura editor", + CLogicInt(13), CLogicInt(0), &columnNew, FALSE); + EXPECT_TRUE(result); + EXPECT_EQ(7, columnNew); + + result = CWordParse::SearchNextWordPosition(L"sakura editor", + CLogicInt(13), CLogicInt(0), &columnNew, TRUE); + EXPECT_TRUE(result); + EXPECT_EQ(6, columnNew); +} + +TEST(SearchNextWordPosition4KW, ReturnsFalseWhenIndexIsAtEndOfString) +{ + EXPECT_FALSE(CWordParse::SearchNextWordPosition4KW(L"", + CLogicInt(0), CLogicInt(0), nullptr, FALSE)); +} + +TEST(SearchNextWordPosition4KW, StopsAtIncompatibleKinds) +{ + CLogicInt columnNew; + EXPECT_TRUE(CWordParse::SearchNextWordPosition4KW(L"@sakura!", + CLogicInt(8), CLogicInt(0), &columnNew, FALSE)); + EXPECT_EQ(7, columnNew); +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index 6122107071..e634aed72d 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -112,6 +112,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index aa11df76bf..514cc10876 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -83,6 +83,9 @@ Test Files + + Test Files + From 81f6103b60610e76678ee626cd94a0ddea7f43b4 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Wed, 16 Dec 2020 23:55:10 +0900 Subject: [PATCH 0298/1024] =?UTF-8?q?MinGW=E5=AF=BE=E7=AD=96=E3=80=82?= =?UTF-8?q?=E3=82=B5=E3=83=AD=E3=82=B2=E3=83=BC=E3=83=88=E3=82=9216?= =?UTF-8?q?=E9=80=B2=E6=95=B0=E3=81=A7=E8=A1=A8=E8=A8=98=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-cwordparse.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tests/unittests/test-cwordparse.cpp b/tests/unittests/test-cwordparse.cpp index 36c3afc18b..a49b3ae41c 100644 --- a/tests/unittests/test-cwordparse.cpp +++ b/tests/unittests/test-cwordparse.cpp @@ -135,8 +135,11 @@ TEST(WhatKindOfChar, BoxDrawing) TEST(WhatKindOfChar, SurrogatePairs) { - EXPECT_EQ(CK_ETC, CWordParse::WhatKindOfChar(L"🌸", 2, 0)); - EXPECT_EQ(CK_ZEN_ETC, CWordParse::WhatKindOfChar(L"𠮷", 2, 0)); +// EXPECT_EQ(CK_ETC, CWordParse::WhatKindOfChar(L"🌸", 2, 0)); +// EXPECT_EQ(CK_ZEN_ETC, CWordParse::WhatKindOfChar(L"𠮷", 2, 0)); + EXPECT_EQ(CK_ETC, CWordParse::WhatKindOfChar(L"\xd83c\xdf38", 2, 0)); + EXPECT_EQ(CK_ZEN_ETC, CWordParse::WhatKindOfChar(L"\xd842\xdfb7", 2, 0)); + } TEST(WhatKindOfTwoChars, ReturnsSameKindIfTwoKindsAreIdentical) From ffc11c910795dec515d151737bb1d6ce36eff105 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Wed, 16 Dec 2020 19:40:53 +0900 Subject: [PATCH 0299/1024] =?UTF-8?q?CWordParse::WhereCurrentWord=5F2=20?= =?UTF-8?q?=E3=82=92=E5=85=B1=E6=9C=89=E3=83=87=E3=83=BC=E3=82=BF=E3=81=8B?= =?UTF-8?q?=E3=82=89=E5=88=87=E3=82=8A=E9=9B=A2=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CSearchAgent.cpp | 6 +++--- sakura_core/parse/CWordParse.cpp | 3 ++- sakura_core/parse/CWordParse.h | 3 ++- sakura_core/view/CEditView_Search.cpp | 4 ++-- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/sakura_core/CSearchAgent.cpp b/sakura_core/CSearchAgent.cpp index 03ad26b49f..e340ce229a 100644 --- a/sakura_core/CSearchAgent.cpp +++ b/sakura_core/CSearchAgent.cpp @@ -296,7 +296,7 @@ void CSearchAgent::CreateWordList( { for( CLogicInt pos = CLogicInt(0); pos < nPatternLen; ) { CLogicInt begin, end; // 検索語に含まれる単語?の posを基準とした相対位置。WhereCurrentWord_2()の仕様では空白文字列も単語に含まれる。 - if( CWordParse::WhereCurrentWord_2( pszPattern + pos, nPatternLen - pos, CLogicInt(0), &begin, &end, NULL, NULL ) + if( CWordParse::WhereCurrentWord_2( pszPattern + pos, nPatternLen - pos, CLogicInt(0), GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol, &begin, &end, NULL, NULL ) && begin == 0 && begin < end ) { if( ! WCODE::IsWordDelimiter( pszPattern[pos] ) ) { @@ -324,7 +324,7 @@ const wchar_t* CSearchAgent::SearchStringWord( CLogicInt nNextWordFrom = CLogicInt(nIdxPos); CLogicInt nNextWordFrom2; CLogicInt nNextWordTo2; - while( CWordParse::WhereCurrentWord_2( pLine, CLogicInt(nLineLen), nNextWordFrom, &nNextWordFrom2, &nNextWordTo2, NULL, NULL ) ){ + while( CWordParse::WhereCurrentWord_2( pLine, CLogicInt(nLineLen), nNextWordFrom, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol, &nNextWordFrom2, &nNextWordTo2, NULL, NULL ) ){ size_t nSize = searchWords.size(); for( size_t iSW = 0; iSW < nSize; ++iSW ) { if( searchWords[iSW].second == nNextWordTo2 - nNextWordFrom2 ){ @@ -368,7 +368,7 @@ bool CSearchAgent::WhereCurrentWord( const wchar_t* pLine = pDocLine->GetDocLineStrWithEOL( &nLineLen ); /* 現在位置の単語の範囲を調べる */ - return CWordParse::WhereCurrentWord_2( pLine, nLineLen, nIdx, pnIdxFrom, pnIdxTo, pcmcmWord, pcmcmWordLeft ); + return CWordParse::WhereCurrentWord_2( pLine, nLineLen, nIdx, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol, pnIdxFrom, pnIdxTo, pcmcmWord, pcmcmWordLeft ); } // 現在位置の左右の単語の先頭位置を調べる diff --git a/sakura_core/parse/CWordParse.cpp b/sakura_core/parse/CWordParse.cpp index 9ea9043a99..562cea165b 100644 --- a/sakura_core/parse/CWordParse.cpp +++ b/sakura_core/parse/CWordParse.cpp @@ -14,6 +14,7 @@ bool CWordParse::WhereCurrentWord_2( const wchar_t* pLine, //!< [in] 調べるメモリ全体の先頭アドレス CLogicInt nLineLen, //!< [in] 調べるメモリ全体の有効長 CLogicInt nIdx, //!< [in] 調査開始地点:pLineからの相対的な位置 + bool bEnableExtEol, //!< [in] Unicode改行文字を改行とみなすかどうか CLogicInt* pnIdxFrom, //!< [out] 単語が見つかった場合は、単語の先頭インデックスを返す。 CLogicInt* pnIdxTo, //!< [out] 単語が見つかった場合は、単語の終端の次のバイトの先頭インデックスを返す。 CNativeW* pcmcmWord, //!< [out] 単語が見つかった場合は、現在単語を切り出して指定されたCMemoryオブジェクトに格納する。情報が不要な場合はNULLを指定する。 @@ -33,7 +34,7 @@ bool CWordParse::WhereCurrentWord_2( } // 現在位置の文字の種類によっては選択不可 - if( WCODE::IsLineDelimiter(pLine[nIdx], GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol) ){ + if( WCODE::IsLineDelimiter(pLine[nIdx], bEnableExtEol) ){ return false; } diff --git a/sakura_core/parse/CWordParse.h b/sakura_core/parse/CWordParse.h index 6ad031a347..b05b4ced38 100644 --- a/sakura_core/parse/CWordParse.h +++ b/sakura_core/parse/CWordParse.h @@ -72,7 +72,8 @@ class CWordParse{ static bool WhereCurrentWord_2( const wchar_t* pLine, //[in] 調べるメモリ全体の先頭アドレス CLogicInt nLineLen, //[in] 調べるメモリ全体の有効長 - CLogicInt nIdx, //[out] 調査開始地点:pLineからの相対的な位置 + CLogicInt nIdx, //[in] 調査開始地点:pLineからの相対的な位置 + bool bEnableExtEol, //[in] Unicode改行文字を改行とみなすかどうか CLogicInt* pnIdxFrom, //[out] 単語が見つかった場合は、単語の先頭インデックスを返す。 CLogicInt* pnIdxTo, //[out] 単語が見つかった場合は、単語の終端の次のバイトの先頭インデックスを返す。 CNativeW* pcmcmWord, //[out] 単語が見つかった場合は、現在単語を切り出して指定されたCMemoryオブジェクトに格納する。情報が不要な場合はNULLを指定する。 diff --git a/sakura_core/view/CEditView_Search.cpp b/sakura_core/view/CEditView_Search.cpp index e628162404..2c3001e3e8 100644 --- a/sakura_core/view/CEditView_Search.cpp +++ b/sakura_core/view/CEditView_Search.cpp @@ -464,7 +464,7 @@ int CEditView::IsSearchString( else if( m_sCurSearchOption.bWordOnly ) { // 単語検索 /* 指定位置の単語の範囲を調べる */ CLogicInt posWordHead, posWordEnd; - if( ! CWordParse::WhereCurrentWord_2( cStr.GetPtr(), CLogicInt(cStr.GetLength()), nPos, &posWordHead, &posWordEnd, NULL, NULL ) ) { + if( ! CWordParse::WhereCurrentWord_2( cStr.GetPtr(), CLogicInt(cStr.GetLength()), nPos, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol, &posWordHead, &posWordEnd, NULL, NULL ) ) { return 0; // 指定位置に単語が見つからなかった。 } if( nPos != posWordHead ) { @@ -481,7 +481,7 @@ int CEditView::IsSearchString( const wchar_t* const searchKeyEnd = m_strCurSearchKey.data() + m_strCurSearchKey.size(); for( const wchar_t* p = m_strCurSearchKey.data(); p < searchKeyEnd; ) { CLogicInt begin, end; // 検索語に含まれる単語?の位置。WhereCurrentWord_2()の仕様では空白文字列も単語に含まれる。 - if( CWordParse::WhereCurrentWord_2( p, CLogicInt(searchKeyEnd - p), CLogicInt(0), &begin, &end, NULL, NULL ) + if( CWordParse::WhereCurrentWord_2( p, CLogicInt(searchKeyEnd - p), CLogicInt(0), GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol, &begin, &end, NULL, NULL ) && begin == 0 && begin < end ) { if( ! WCODE::IsWordDelimiter( *p ) ) { From a7845dbd47952453c49e280f72f887c4397d2e63 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Thu, 17 Dec 2020 11:52:35 +0900 Subject: [PATCH 0300/1024] =?UTF-8?q?CWordParse::WhereCurrentWord=5F2=20?= =?UTF-8?q?=E3=81=AE=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-cwordparse.cpp | 41 ++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/tests/unittests/test-cwordparse.cpp b/tests/unittests/test-cwordparse.cpp index a49b3ae41c..b11518027d 100644 --- a/tests/unittests/test-cwordparse.cpp +++ b/tests/unittests/test-cwordparse.cpp @@ -31,6 +31,7 @@ #include #include #include "charset/charcode.h" +#include "mem/CNativeW.h" std::ostream& operator<<(std::ostream& os, ECharKind kind) { @@ -139,7 +140,6 @@ TEST(WhatKindOfChar, SurrogatePairs) // EXPECT_EQ(CK_ZEN_ETC, CWordParse::WhatKindOfChar(L"𠮷", 2, 0)); EXPECT_EQ(CK_ETC, CWordParse::WhatKindOfChar(L"\xd83c\xdf38", 2, 0)); EXPECT_EQ(CK_ZEN_ETC, CWordParse::WhatKindOfChar(L"\xd842\xdfb7", 2, 0)); - } TEST(WhatKindOfTwoChars, ReturnsSameKindIfTwoKindsAreIdentical) @@ -311,3 +311,42 @@ TEST(SearchNextWordPosition4KW, StopsAtIncompatibleKinds) CLogicInt(8), CLogicInt(0), &columnNew, FALSE)); EXPECT_EQ(7, columnNew); } + +TEST(WhereCurrentWord_2, ReturnsFalseIfIndexIsAtNewLineOrEOS) +{ + CLogicInt from, to; + EXPECT_FALSE(CWordParse::WhereCurrentWord_2(L"sakura", CLogicInt(6), + CLogicInt(6), false, &from, &to, nullptr, nullptr)); + EXPECT_EQ(6, from); + EXPECT_EQ(6, to); + EXPECT_FALSE(CWordParse::WhereCurrentWord_2(L"sakura\n", CLogicInt(7), + CLogicInt(6), false, &from, &to, nullptr, nullptr)); + EXPECT_EQ(6, from); + EXPECT_EQ(6, to); +} + +TEST(WhereCurrentWord_2, RespectsExtEolFlag) +{ + CLogicInt from, to; + EXPECT_FALSE(CWordParse::WhereCurrentWord_2(L"sakura\x85", CLogicInt(7), + CLogicInt(6), true, &from, &to, nullptr, nullptr)); + EXPECT_EQ(6, from); + EXPECT_EQ(6, to); + EXPECT_TRUE(CWordParse::WhereCurrentWord_2(L"sakura\x85", CLogicInt(7), + CLogicInt(6), false, &from, &to, nullptr, nullptr)); + EXPECT_EQ(6, from); + EXPECT_EQ(7, to); +} + +TEST(WhereCurrentWord_2, ReturnsCMemoryIfSpecified) +{ + CLogicInt from, to; + CNativeW word, wordLeft; + bool result = CWordParse::WhereCurrentWord_2(L"sakura editor", + CLogicInt(13), CLogicInt(10), false, &from, &to, &word, &wordLeft); + EXPECT_TRUE(result); + EXPECT_EQ(7, from); + EXPECT_EQ(13, to); + EXPECT_EQ(word, L"editor"); + EXPECT_EQ(wordLeft, L"edi"); +} From 7769b384bf3151d543a3adc076a5386afb58b2d4 Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Sat, 19 Dec 2020 10:34:19 +0800 Subject: [PATCH 0301/1024] Create info_zh_hans.txt --- installer/instmaterials/info_zh_hans.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 installer/instmaterials/info_zh_hans.txt diff --git a/installer/instmaterials/info_zh_hans.txt b/installer/instmaterials/info_zh_hans.txt new file mode 100644 index 0000000000..c25248cf68 --- /dev/null +++ b/installer/instmaterials/info_zh_hans.txt @@ -0,0 +1,3 @@ +该软件被重命名为“文本编辑器(共同开发版本)”。 +您可以免费用于商业和非商业用途,但源代码的版权由各部分所有者保留。 +该软件无法保证完整性。 From c9876e06d9116d1809abc0aeb5da1e5a970fb4b9 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sun, 20 Dec 2020 02:36:25 +0900 Subject: [PATCH 0302/1024] =?UTF-8?q?GetDateTimeFormat=E3=81=AE=E5=85=A5?= =?UTF-8?q?=E5=87=BA=E5=8A=9B=E3=82=92WCHAR*=E3=81=8B=E3=82=89std::wstring?= =?UTF-8?q?(=5Fview)=E3=81=AB=E5=A4=89=E6=9B=B4=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CBackupAgent.cpp | 13 +-- sakura_core/doc/CDocFileOperation.cpp | 8 +- sakura_core/util/format.cpp | 120 ++++++++++---------------- sakura_core/util/format.h | 5 +- tests/unittests/test-format.cpp | 79 ++++------------- 5 files changed, 73 insertions(+), 152 deletions(-) diff --git a/sakura_core/CBackupAgent.cpp b/sakura_core/CBackupAgent.cpp index e1d3c465c4..bb39f30cdb 100644 --- a/sakura_core/CBackupAgent.cpp +++ b/sakura_core/CBackupAgent.cpp @@ -445,7 +445,7 @@ bool CBackupAgent::FormatBackUpPath( } }else{ // 詳細設定使用する - WCHAR szFormat[1024]; + std::optional dateTimeString; switch( bup_setting.GetBackupTypeAdv() ){ case 4: // ファイルの日付,時刻 @@ -453,7 +453,8 @@ bool CBackupAgent::FormatBackUpPath( // 2005.10.20 ryoji FindFirstFileを使うように変更 CFileTime ctimeLastWrite; GetLastWriteTimestamp( target_file, &ctimeLastWrite ); - if( !GetDateTimeFormat( szFormat, _countof(szFormat), bup_setting.m_szBackUpPathAdvanced , ctimeLastWrite.GetSYSTEMTIME() ) ){ + dateTimeString = GetDateTimeFormat( (const WCHAR*)bup_setting.m_szBackUpPathAdvanced, ctimeLastWrite.GetSYSTEMTIME() ); + if( !dateTimeString ){ return false; } } @@ -465,8 +466,8 @@ bool CBackupAgent::FormatBackUpPath( SYSTEMTIME SystemTime; // 2016.07.28 UTC→ローカル時刻に変更 ::GetLocalTime(&SystemTime); // 現在時刻を取得 - - if( !GetDateTimeFormat( szFormat, _countof(szFormat), bup_setting.m_szBackUpPathAdvanced , SystemTime ) ){ + dateTimeString = GetDateTimeFormat( (const WCHAR*)bup_setting.m_szBackUpPathAdvanced, SystemTime ); + if( !dateTimeString ){ return false; } } @@ -503,8 +504,8 @@ bool CBackupAgent::FormatBackUpPath( { // $0-$9を置換 //wcscpy( szNewPath, L"" ); - WCHAR *q= szFormat; - WCHAR *q2 = szFormat; + WCHAR *q = dateTimeString.value().data(); + WCHAR *q2 = q; while( *q ){ if( *q==L'$' ){ ++q; diff --git a/sakura_core/doc/CDocFileOperation.cpp b/sakura_core/doc/CDocFileOperation.cpp index 36bd79dbfa..6e6eb0cb63 100644 --- a/sakura_core/doc/CDocFileOperation.cpp +++ b/sakura_core/doc/CDocFileOperation.cpp @@ -269,14 +269,10 @@ bool CDocFileOperation::SaveFileDialog( if( pSaveInfo->cFilePath[0] == L'\0' ){ SYSTEMTIME localTime = {}; ::GetLocalTime( &localTime ); - WCHAR dateTimeString[20] = {}; - if( !GetDateTimeFormat( dateTimeString, _countof(dateTimeString), L"_%Y%m%d_%H%M%S", localTime ) ){ - dateTimeString[0] = L'\0'; - } - + auto dateTimeString = GetDateTimeFormat( L"_%Y%m%d_%H%M%S", localTime ).value_or( L"" ); const EditNode* node = CAppNodeManager::getInstance()->GetEditNode( m_pcDocRef->m_pcEditWnd->GetHwnd() ); const int nId = (node != NULL && 0 < node->m_nId) ? node->m_nId : 0; - auto_sprintf_s( pSaveInfo->cFilePath, pSaveInfo->cFilePath.GetBufferCount(), L"%s%.0d%s", LS(STR_NO_TITLE2), nId, dateTimeString ); + auto_sprintf_s( pSaveInfo->cFilePath, pSaveInfo->cFilePath.GetBufferCount(), L"%s%.0d%s", LS(STR_NO_TITLE2), nId, dateTimeString.c_str() ); } // ダイアログを表示 diff --git a/sakura_core/util/format.cpp b/sakura_core/util/format.cpp index 8b84aea930..81ef31cada 100644 --- a/sakura_core/util/format.cpp +++ b/sakura_core/util/format.cpp @@ -26,90 +26,60 @@ #include "StdAfx.h" #include "format.h" -/*! 日時をフォーマット +/*! 書式文字列に従い日時を変換 - @param[out] szResult 書式変換後の文字列 - @param[in] size szResultに格納可能な文字数(ヌル文字を含む) - @param[in] format 書式 + @param[in] format 書式文字列 @param[in] systime 書式化したい日時 - @retval true 書式文字列の変換が完了 - @retval false 書式文字列の変換が一部または全部失敗 - - @note %Y %y %m %d %H %M %S の変換に対応 - - @author aroka - @date 2005.11.21 新規 + @return 書式変換後の文字列 + + @note 書式文字列で使用できる変換指定子 + @li "%Y" 西暦 + @li "%y" 下2桁の西暦 + @li "%m" 2桁の月 + @li "%d" 2桁の日 + @li "%H" 2桁の時 + @li "%M" 2桁の分 + @li "%S" 2桁の秒 */ -bool GetDateTimeFormat( WCHAR* szResult, size_t size, const WCHAR* format, const SYSTEMTIME& systime ) +std::optional GetDateTimeFormat( std::wstring_view format, const SYSTEMTIME& systime ) { - WCHAR szTime[10] = {}; - const WCHAR *p = format; - WCHAR *q = szResult; - bool ret = false; - - if( szResult == NULL || size == 0 || format == NULL ){ - return false; - } - - while( *p ){ - int timeLen = -1; - if( *p == L'%' ){ - ++p; - - if( *p == L'\0' ){ - break; - } - - switch( *p ){ - case L'Y': - timeLen = wsprintf( szTime, L"%d", systime.wYear ); - break; - case L'y': - timeLen = wsprintf( szTime, L"%02d", (systime.wYear % 100) ); - break; - case L'm': - timeLen = wsprintf( szTime, L"%02d", systime.wMonth ); - break; - case L'd': - timeLen = wsprintf( szTime, L"%02d", systime.wDay ); - break; - case L'H': - timeLen = wsprintf( szTime, L"%02d", systime.wHour ); - break; - case L'M': - timeLen = wsprintf( szTime, L"%02d", systime.wMinute ); - break; - case L'S': - timeLen = wsprintf( szTime, L"%02d", systime.wSecond ); - break; - default: - break; + std::wstring result; + wchar_t str[6] = {}; + bool esc = false; + + result.reserve( format.length() * 2 ); + + for( const auto f : format ){ + if( esc ){ + esc = false; + if( f == L'Y' ){ + (void)wsprintf( str, L"%d", systime.wYear ); + }else if( f == L'y' ){ + (void)wsprintf( str, L"%02d", systime.wYear % 100 ); + }else if( f == L'm' ){ + (void)wsprintf( str, L"%02d", systime.wMonth ); + }else if( f == L'd' ){ + (void)wsprintf( str, L"%02d", systime.wDay ); + }else if( f == L'H' ){ + (void)wsprintf( str, L"%02d", systime.wHour ); + }else if( f == L'M' ){ + (void)wsprintf( str, L"%02d", systime.wMinute ); + }else if( f == L'S' ){ + (void)wsprintf( str, L"%02d", systime.wSecond ); + }else{ + (void)wsprintf( str, L"%c", f ); } - } - - const size_t remains = (size - 1) - (q - szResult); - if( 0 <= timeLen ){ - if( remains < (size_t)timeLen ){ - break; - } - wcscpy( q, szTime ); - ++p; - q += timeLen; + result.append( str ); + }else if( f == L'%' ){ + esc = true; + }else if( f == L'\0' ){ + break; }else{ - if( remains == 0 ){ - break; - } - *q++ = *p++; + result.push_back( f ); } } - *q = L'\0'; - - if( *p == L'\0' ){ - ret = true; - } - - return ret; + return result; } /*! バージョン番号の解析 diff --git a/sakura_core/util/format.h b/sakura_core/util/format.h index fb057e2e32..9211494417 100644 --- a/sakura_core/util/format.h +++ b/sakura_core/util/format.h @@ -27,8 +27,11 @@ #define SAKURA_FORMAT_A006AC9B_ADE2_499D_9CC6_00A649F32B4F_H_ #pragma once +#include +#include + // 20051121 aroka -bool GetDateTimeFormat( WCHAR* szResult, size_t size, const WCHAR* format, const SYSTEMTIME& systime ); +std::optional GetDateTimeFormat( std::wstring_view format, const SYSTEMTIME& systime ); UINT32 ParseVersion( const WCHAR* ver ); //バージョン番号の解析 int CompareVersion( const WCHAR* verA, const WCHAR* verB ); //バージョン番号の比較 #endif /* SAKURA_FORMAT_A006AC9B_ADE2_499D_9CC6_00A649F32B4F_H_ */ diff --git a/tests/unittests/test-format.cpp b/tests/unittests/test-format.cpp index 0072c55ee9..867bdc4af0 100644 --- a/tests/unittests/test-format.cpp +++ b/tests/unittests/test-format.cpp @@ -33,61 +33,8 @@ TEST( format, CheckInputValidity ) { SYSTEMTIME time = {}; time.wYear = 123; - WCHAR buffer[5] = {}; - EXPECT_FALSE( GetDateTimeFormat( NULL, 0, L"", time ) ); - EXPECT_FALSE( GetDateTimeFormat( buffer, 0, L"", time ) ); - EXPECT_FALSE( GetDateTimeFormat( buffer, _countof(buffer), NULL, time ) ); - EXPECT_FALSE( GetDateTimeFormat( buffer, 3, L"%Y", time ) ); - EXPECT_TRUE( GetDateTimeFormat( buffer, 4, L"%Y", time ) ); -} - -/*! - * @brief バッファ書き込み範囲のテスト - */ -TEST( format, BufferWriteRange ) -{ - SYSTEMTIME time = {}; - time.wYear = 1; - - WCHAR buffer1[] = { L'X', L'X', L'X' }; - EXPECT_TRUE( GetDateTimeFormat( buffer1, _countof(buffer1), L"", time ) ); - EXPECT_EQ( L'\0', buffer1[0] ); - EXPECT_EQ( L'X', buffer1[1] ); - - WCHAR buffer2[] = { L'X', L'X', L'X' }; - EXPECT_TRUE( GetDateTimeFormat( buffer2, _countof(buffer2), L"%", time ) ); - EXPECT_EQ( L'\0', buffer2[0] ); - EXPECT_EQ( L'X', buffer2[1] ); - - WCHAR buffer3[] = { L'X', L'X', L'X' }; - EXPECT_TRUE( GetDateTimeFormat( buffer3, _countof(buffer3), L"%Y", time ) ); - EXPECT_EQ( L'1', buffer3[0] ); - EXPECT_EQ( L'\0', buffer3[1] ); - EXPECT_EQ( L'X', buffer3[2] ); - - WCHAR buffer4[] = { L'X', L'X', L'X' }; - EXPECT_FALSE( GetDateTimeFormat( buffer4, _countof(buffer4), L"_%y", time ) ); - EXPECT_EQ( L'_', buffer4[0] ); - EXPECT_EQ( L'\0', buffer4[1] ); - EXPECT_EQ( L'X', buffer4[2] ); - - WCHAR buffer5[] = { L'X', L'X', L'X' }; - EXPECT_TRUE( GetDateTimeFormat( buffer5, _countof(buffer5), L"1", time ) ); - EXPECT_EQ( L'1', buffer5[0] ); - EXPECT_EQ( L'\0', buffer5[1] ); - EXPECT_EQ( L'X', buffer5[2] ); - - WCHAR buffer6[] = { L'X', L'X', L'X' }; - EXPECT_TRUE( GetDateTimeFormat( buffer6, _countof(buffer6), L"11", time ) ); - EXPECT_EQ( L'1', buffer6[0] ); - EXPECT_EQ( L'1', buffer6[1] ); - EXPECT_EQ( L'\0', buffer6[2] ); - - WCHAR buffer7[] = { L'X', L'X', L'X' }; - EXPECT_FALSE( GetDateTimeFormat( buffer7, _countof(buffer7), L"111", time ) ); - EXPECT_EQ( L'1', buffer7[0] ); - EXPECT_EQ( L'1', buffer7[1] ); - EXPECT_EQ( L'\0', buffer7[2] ); + EXPECT_TRUE( GetDateTimeFormat( L"", time ) ); + EXPECT_TRUE( GetDateTimeFormat( L"%Y", time ) ); } /*! @@ -97,9 +44,9 @@ TEST( format, Formatting ) { SYSTEMTIME time = {}; - WCHAR buffer1[5] = {}; - EXPECT_TRUE( GetDateTimeFormat( buffer1, _countof(buffer1), L"%%-%1-%", time ) ); - ASSERT_STREQ( L"%-1-", buffer1 ); + auto result1 = GetDateTimeFormat( L"%%-%1-%", time ); + EXPECT_TRUE( result1 ); + ASSERT_STREQ( L"%-1-", result1.value().c_str() ); time.wYear = 1; time.wMonth = 2; @@ -107,9 +54,9 @@ TEST( format, Formatting ) time.wHour = 1; time.wMinute = 2; time.wSecond = 3; - WCHAR buffer2[20] = {}; - EXPECT_TRUE( GetDateTimeFormat( buffer2, _countof(buffer2), L"%Y-%y-%m-%d %H:%M:%S", time ) ); - ASSERT_STREQ( L"1-01-02-03 01:02:03", buffer2 ); + auto result2 = GetDateTimeFormat( L"%Y-%y-%m-%d %H:%M:%S", time ); + EXPECT_TRUE( result2 ); + ASSERT_STREQ( L"1-01-02-03 01:02:03", result2.value().c_str() ); time.wYear = 12345; time.wMonth = 12; @@ -117,7 +64,11 @@ TEST( format, Formatting ) time.wHour = 12; time.wMinute = 34; time.wSecond = 56; - WCHAR buffer3[24] = {}; - EXPECT_TRUE( GetDateTimeFormat( buffer3, _countof(buffer3), L"%Y-%y-%m-%d %H:%M:%S", time ) ); - ASSERT_STREQ( L"12345-45-12-23 12:34:56", buffer3 ); + auto result3 = GetDateTimeFormat( L"%Y-%y-%m-%d %H:%M:%S", time ); + EXPECT_TRUE( result3 ); + ASSERT_STREQ( L"12345-45-12-23 12:34:56", result3.value().c_str() ); + + auto result4 = GetDateTimeFormat( L"%Y-%y-%m-%d\0%H:%M:%S", time ); + EXPECT_TRUE( result4 ); + ASSERT_STREQ( L"12345-45-12-23", result4.value().c_str() ); } From 36ecbf59b4ff5100b9659f8b7aa8259797456a81 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Mon, 21 Dec 2020 00:28:18 +0900 Subject: [PATCH 0303/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * (const WCHAR*) -> c_str() * GetDateTimeFormatの戻り値をstd::wstringに変更 * string_viewのincludeを追加 * esc -> inSpec * wsprintf -> swprintf * (void) * 書式文字列途中にnull文字がある場合の振る舞いをコメントに明記 * 単体テスト整理 --- sakura_core/CBackupAgent.cpp | 19 ++++++---------- sakura_core/doc/CDocFileOperation.cpp | 2 +- sakura_core/util/format.cpp | 29 +++++++++++++------------ sakura_core/util/format.h | 4 ++-- tests/unittests/test-format.cpp | 31 +++++++++------------------ 5 files changed, 34 insertions(+), 51 deletions(-) diff --git a/sakura_core/CBackupAgent.cpp b/sakura_core/CBackupAgent.cpp index bb39f30cdb..a23281237f 100644 --- a/sakura_core/CBackupAgent.cpp +++ b/sakura_core/CBackupAgent.cpp @@ -445,35 +445,28 @@ bool CBackupAgent::FormatBackUpPath( } }else{ // 詳細設定使用する - std::optional dateTimeString; - + SYSTEMTIME time = {}; switch( bup_setting.GetBackupTypeAdv() ){ case 4: // ファイルの日付,時刻 { // 2005.10.20 ryoji FindFirstFileを使うように変更 CFileTime ctimeLastWrite; GetLastWriteTimestamp( target_file, &ctimeLastWrite ); - dateTimeString = GetDateTimeFormat( (const WCHAR*)bup_setting.m_szBackUpPathAdvanced, ctimeLastWrite.GetSYSTEMTIME() ); - if( !dateTimeString ){ - return false; - } + time = ctimeLastWrite.GetSYSTEMTIME(); } break; case 2: // 現在の日付,時刻 default: { // 2012.12.26 aroka 詳細設定のファイル保存日時と現在時刻で書式を合わせる - SYSTEMTIME SystemTime; // 2016.07.28 UTC→ローカル時刻に変更 - ::GetLocalTime(&SystemTime); // 現在時刻を取得 - dateTimeString = GetDateTimeFormat( (const WCHAR*)bup_setting.m_szBackUpPathAdvanced, SystemTime ); - if( !dateTimeString ){ - return false; - } + ::GetLocalTime( &time ); // 現在時刻を取得 } break; } + std::wstring formatString = GetDateTimeFormat( bup_setting.m_szBackUpPathAdvanced.c_str(), time ); + { // make keys // $0-$9に対応するフォルダ名を切り出し @@ -504,7 +497,7 @@ bool CBackupAgent::FormatBackUpPath( { // $0-$9を置換 //wcscpy( szNewPath, L"" ); - WCHAR *q = dateTimeString.value().data(); + WCHAR *q = formatString.data(); WCHAR *q2 = q; while( *q ){ if( *q==L'$' ){ diff --git a/sakura_core/doc/CDocFileOperation.cpp b/sakura_core/doc/CDocFileOperation.cpp index 6e6eb0cb63..5052aa3ee7 100644 --- a/sakura_core/doc/CDocFileOperation.cpp +++ b/sakura_core/doc/CDocFileOperation.cpp @@ -269,7 +269,7 @@ bool CDocFileOperation::SaveFileDialog( if( pSaveInfo->cFilePath[0] == L'\0' ){ SYSTEMTIME localTime = {}; ::GetLocalTime( &localTime ); - auto dateTimeString = GetDateTimeFormat( L"_%Y%m%d_%H%M%S", localTime ).value_or( L"" ); + auto dateTimeString = GetDateTimeFormat( L"_%Y%m%d_%H%M%S", localTime ); const EditNode* node = CAppNodeManager::getInstance()->GetEditNode( m_pcDocRef->m_pcEditWnd->GetHwnd() ); const int nId = (node != NULL && 0 < node->m_nId) ? node->m_nId : 0; auto_sprintf_s( pSaveInfo->cFilePath, pSaveInfo->cFilePath.GetBufferCount(), L"%s%.0d%s", LS(STR_NO_TITLE2), nId, dateTimeString.c_str() ); diff --git a/sakura_core/util/format.cpp b/sakura_core/util/format.cpp index 81ef31cada..99786ed25a 100644 --- a/sakura_core/util/format.cpp +++ b/sakura_core/util/format.cpp @@ -32,7 +32,7 @@ @param[in] systime 書式化したい日時 @return 書式変換後の文字列 - @note 書式文字列で使用できる変換指定子 + @note 書式文字列では以下の変換指定子が使用できます。 @li "%Y" 西暦 @li "%y" 下2桁の西暦 @li "%m" 2桁の月 @@ -40,38 +40,39 @@ @li "%H" 2桁の時 @li "%M" 2桁の分 @li "%S" 2桁の秒 + @note 書式文字列は末尾または最初のnull文字までを変換対象とします。 */ -std::optional GetDateTimeFormat( std::wstring_view format, const SYSTEMTIME& systime ) +std::wstring GetDateTimeFormat( std::wstring_view format, const SYSTEMTIME& systime ) { std::wstring result; wchar_t str[6] = {}; - bool esc = false; + bool inSpecifier = false; result.reserve( format.length() * 2 ); for( const auto f : format ){ - if( esc ){ - esc = false; + if( inSpecifier ){ + inSpecifier = false; if( f == L'Y' ){ - (void)wsprintf( str, L"%d", systime.wYear ); + swprintf( str, _countof(str), L"%d", systime.wYear ); }else if( f == L'y' ){ - (void)wsprintf( str, L"%02d", systime.wYear % 100 ); + swprintf( str, _countof(str), L"%02d", systime.wYear % 100 ); }else if( f == L'm' ){ - (void)wsprintf( str, L"%02d", systime.wMonth ); + swprintf( str, _countof(str), L"%02d", systime.wMonth ); }else if( f == L'd' ){ - (void)wsprintf( str, L"%02d", systime.wDay ); + swprintf( str, _countof(str), L"%02d", systime.wDay ); }else if( f == L'H' ){ - (void)wsprintf( str, L"%02d", systime.wHour ); + swprintf( str, _countof(str), L"%02d", systime.wHour ); }else if( f == L'M' ){ - (void)wsprintf( str, L"%02d", systime.wMinute ); + swprintf( str, _countof(str), L"%02d", systime.wMinute ); }else if( f == L'S' ){ - (void)wsprintf( str, L"%02d", systime.wSecond ); + swprintf( str, _countof(str), L"%02d", systime.wSecond ); }else{ - (void)wsprintf( str, L"%c", f ); + swprintf( str, _countof(str), L"%c", f ); } result.append( str ); }else if( f == L'%' ){ - esc = true; + inSpecifier = true; }else if( f == L'\0' ){ break; }else{ diff --git a/sakura_core/util/format.h b/sakura_core/util/format.h index 9211494417..c1f10ab08a 100644 --- a/sakura_core/util/format.h +++ b/sakura_core/util/format.h @@ -27,11 +27,11 @@ #define SAKURA_FORMAT_A006AC9B_ADE2_499D_9CC6_00A649F32B4F_H_ #pragma once -#include #include +#include // 20051121 aroka -std::optional GetDateTimeFormat( std::wstring_view format, const SYSTEMTIME& systime ); +std::wstring GetDateTimeFormat( std::wstring_view format, const SYSTEMTIME& systime ); UINT32 ParseVersion( const WCHAR* ver ); //バージョン番号の解析 int CompareVersion( const WCHAR* verA, const WCHAR* verB ); //バージョン番号の比較 #endif /* SAKURA_FORMAT_A006AC9B_ADE2_499D_9CC6_00A649F32B4F_H_ */ diff --git a/tests/unittests/test-format.cpp b/tests/unittests/test-format.cpp index 867bdc4af0..fc7563d288 100644 --- a/tests/unittests/test-format.cpp +++ b/tests/unittests/test-format.cpp @@ -27,27 +27,17 @@ #include "util/format.h" /*! - * @brief 入力の妥当性判定に関するテスト + * @brief GetDateTimeFormatのテスト */ -TEST( format, CheckInputValidity ) -{ - SYSTEMTIME time = {}; - time.wYear = 123; - EXPECT_TRUE( GetDateTimeFormat( L"", time ) ); - EXPECT_TRUE( GetDateTimeFormat( L"%Y", time ) ); -} - -/*! - * @brief 書式変換のテスト - */ -TEST( format, Formatting ) +TEST( format, GetDateTimeFormat ) { SYSTEMTIME time = {}; + // 変換指定子の解釈 auto result1 = GetDateTimeFormat( L"%%-%1-%", time ); - EXPECT_TRUE( result1 ); - ASSERT_STREQ( L"%-1-", result1.value().c_str() ); + ASSERT_STREQ( L"%-1-", result1.c_str() ); + // 数字桁数少 time.wYear = 1; time.wMonth = 2; time.wDay = 3; @@ -55,9 +45,9 @@ TEST( format, Formatting ) time.wMinute = 2; time.wSecond = 3; auto result2 = GetDateTimeFormat( L"%Y-%y-%m-%d %H:%M:%S", time ); - EXPECT_TRUE( result2 ); - ASSERT_STREQ( L"1-01-02-03 01:02:03", result2.value().c_str() ); + ASSERT_STREQ( L"1-01-02-03 01:02:03", result2.c_str() ); + // 数字桁数多 time.wYear = 12345; time.wMonth = 12; time.wDay = 23; @@ -65,10 +55,9 @@ TEST( format, Formatting ) time.wMinute = 34; time.wSecond = 56; auto result3 = GetDateTimeFormat( L"%Y-%y-%m-%d %H:%M:%S", time ); - EXPECT_TRUE( result3 ); - ASSERT_STREQ( L"12345-45-12-23 12:34:56", result3.value().c_str() ); + ASSERT_STREQ( L"12345-45-12-23 12:34:56", result3.c_str() ); + // 途中にnull文字 auto result4 = GetDateTimeFormat( L"%Y-%y-%m-%d\0%H:%M:%S", time ); - EXPECT_TRUE( result4 ); - ASSERT_STREQ( L"12345-45-12-23", result4.value().c_str() ); + ASSERT_STREQ( L"12345-45-12-23", result4.c_str() ); } From 6b2c49c0176ce68cf09251dc28ac70d2d37bd558 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Mon, 21 Dec 2020 21:22:31 +0900 Subject: [PATCH 0304/1024] =?UTF-8?q?null=E6=96=87=E5=AD=97=E7=AA=81?= =?UTF-8?q?=E7=A0=B4=E3=83=90=E3=82=B0=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CBackupAgent.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/sakura_core/CBackupAgent.cpp b/sakura_core/CBackupAgent.cpp index a23281237f..b2284761c2 100644 --- a/sakura_core/CBackupAgent.cpp +++ b/sakura_core/CBackupAgent.cpp @@ -457,11 +457,9 @@ bool CBackupAgent::FormatBackUpPath( break; case 2: // 現在の日付,時刻 default: - { - // 2012.12.26 aroka 詳細設定のファイル保存日時と現在時刻で書式を合わせる - // 2016.07.28 UTC→ローカル時刻に変更 - ::GetLocalTime( &time ); // 現在時刻を取得 - } + // 2012.12.26 aroka 詳細設定のファイル保存日時と現在時刻で書式を合わせる + // 2016.07.28 UTC→ローカル時刻に変更 + ::GetLocalTime( &time ); // 現在時刻を取得 break; } @@ -502,6 +500,9 @@ bool CBackupAgent::FormatBackUpPath( while( *q ){ if( *q==L'$' ){ ++q; + if( *q == L'\0' ){ + break; + } if( isdigit(*q) ){ q[-1] = L'\0'; wcscat( szNewPath, q2 ); From 4e69c77c008d00dac25e94d7ce211e4e79ea4df7 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sun, 20 Dec 2020 15:53:28 +0900 Subject: [PATCH 0305/1024] =?UTF-8?q?=E3=82=B9=E3=83=86=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E3=82=B9=E3=83=90=E3=83=BC=E3=81=AB=E3=83=95=E3=82=A9=E3=83=B3?= =?UTF-8?q?=E3=83=88=E3=82=B5=E3=82=A4=E3=82=BA=E5=80=8D=E7=8E=87=E3=82=92?= =?UTF-8?q?=E8=A1=A8=E7=A4=BA=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/String_define.h | 3 ++- sakura_core/sakura_rc.rc | 1 + sakura_core/view/CCaret.cpp | 33 ++++++++++++++++------------- sakura_core/window/CEditWnd.cpp | 6 +++--- sakura_lang_en_US/sakura_lang_rc.rc | 1 + 5 files changed, 25 insertions(+), 19 deletions(-) diff --git a/sakura_core/String_define.h b/sakura_core/String_define.h index 72f4057e2b..b65e266c0d 100644 --- a/sakura_core/String_define.h +++ b/sakura_core/String_define.h @@ -428,6 +428,7 @@ #define STR_MENU_KEYWORDINFO 34340 #define STR_MENU_OPENKEYWORDDIC 34341 #define STR_STATUS_ROW_COL 34342 +#define STR_STATUS_FONTSIZE 35043 #define STR_INS_MODE_INS 34343 #define STR_INS_MODE_OVR 34344 #define STR_GREP_SEARCH_CONDITION 34345 @@ -1299,4 +1300,4 @@ #define STR_FILEDIALOG_MRU 35040 #define STR_FILEDIALOG_OPENFOLDER 35041 -// Now using max number 35042 by STR_IMPEXP_REGEX4 +// Now using max number 35043 by STR_STATUS_FONTSIZE diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index b4c667b36d..32bcb2ba45 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -3409,6 +3409,7 @@ BEGIN STR_ERR_DLGEDITVW6 "■" STR_MENU_KEYWORDINFO "キーワードの説明をクリップボードにコピー" STR_MENU_OPENKEYWORDDIC "キーワード辞書を開く" + STR_STATUS_FONTSIZE "%4d %%" STR_STATUS_ROW_COL "%5d 行 %4d 桁" STR_INS_MODE_INS "挿入" STR_INS_MODE_OVR "上書" diff --git a/sakura_core/view/CCaret.cpp b/sakura_core/view/CCaret.cpp index 1b62d7e0e3..0eb4b763be 100644 --- a/sakura_core/view/CCaret.cpp +++ b/sakura_core/view/CCaret.cpp @@ -825,31 +825,34 @@ void CCaret::ShowCaretPosInfo() } // ステータスバーに状態を書き出す else{ - WCHAR szText_1[64]; - auto_sprintf( szText_1, LS( STR_STATUS_ROW_COL ), ptCaret.y, ptCaret.x ); //Oct. 30, 2000 JEPRO 千万行も要らん + WCHAR szRowCol[64]; + auto_sprintf( szRowCol, LS( STR_STATUS_ROW_COL ), ptCaret.y, ptCaret.x ); //Oct. 30, 2000 JEPRO 千万行も要らん - WCHAR szText_6[16]; + WCHAR szInsMode[16]; if( m_pEditView->IsInsMode() /* Oct. 2, 2005 genta */ ){ - wcscpy( szText_6, LS( STR_INS_MODE_INS ) ); // "挿入" + wcscpy( szInsMode, LS( STR_INS_MODE_INS ) ); // "挿入" }else{ - wcscpy( szText_6, LS( STR_INS_MODE_OVR ) ); // "上書" + wcscpy( szInsMode, LS( STR_INS_MODE_OVR ) ); // "上書" } + WCHAR szFontSize[16]; + int currentPointSize = m_pEditDoc->m_pcEditWnd->GetFontPointSize( true ); + int originalPointSize = m_pEditDoc->m_pcEditWnd->GetFontPointSize( false ); + auto_sprintf( szFontSize, LS( STR_STATUS_FONTSIZE ), 100 * currentPointSize / originalPointSize ); + auto& statusBar = m_pEditDoc->m_pcEditWnd->m_cStatusBar; if( m_bClearStatus ){ statusBar.SetStatusText( 0, SBT_NOBORDERS, L"" ); } - statusBar.SetStatusText( 1, 0, szText_1 ); - // May 12, 2000 genta - // 改行コードの表示を追加.後ろの番号を1つずつずらす - // From Here - statusBar.SetStatusText( 2, 0, szEolMode ); - // To Here - statusBar.SetStatusText( 3, 0, szCaretChar ); - statusBar.SetStatusText( 4, 0, pszCodeName ); - statusBar.SetStatusText( 5, SBT_OWNERDRAW, L"" ); - statusBar.SetStatusText( 6, 0, szText_6 ); + int nIndex = 1; + statusBar.SetStatusText( nIndex++, 0, szRowCol ); + statusBar.SetStatusText( nIndex++, 0, szEolMode ); + statusBar.SetStatusText( nIndex++, 0, szCaretChar ); + statusBar.SetStatusText( nIndex++, 0, pszCodeName ); + statusBar.SetStatusText( nIndex++, SBT_OWNERDRAW, L"" ); + statusBar.SetStatusText( nIndex++, 0, szInsMode ); + statusBar.SetStatusText( nIndex++, 0, szFontSize ); } } diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index ec62dbe04f..145b0b3510 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -3087,13 +3087,13 @@ LRESULT CEditWnd::OnSize2( WPARAM wParam, LPARAM lParam, bool bUpdateStatus ) // May 12, 2000 genta // 2カラム目に改行コードの表示を挿入 // From Here - int nStArr[8]; // 2003.08.26 Moca CR0LF0廃止に従い、適当に調整 // 2004-02-28 yasu 文字列を出力時の書式に合わせる // 幅を変えた場合にはCEditView::ShowCaretPosInfo()での表示方法を見直す必要あり. // ※pszLabel[3]: ステータスバー文字コード表示領域は大きめにとっておく - const WCHAR* pszLabel[7] = { L"", L"99999 行 9999 列", L"CRLF", L"AAAAAAAAAAAA", L"UTF-16 BOM付", L"REC", L"上書" }; //Oct. 30, 2000 JEPRO 千万行も要らん 文字コード枠を広げる 2008/6/21 Uchi - int nStArrNum = 7; + const WCHAR* pszLabel[] = { L"", L"99999 行 9999 列", L"CRLF", L"AAAAAAAAAAAA", L"UTF-16 BOM付", L"REC", L"上書", L"9999 %" }; //Oct. 30, 2000 JEPRO 千万行も要らん 文字コード枠を広げる 2008/6/21 Uchi + const size_t nStArrNum = _countof(pszLabel); + int nStArr[_countof(pszLabel)] = {}; // To Here int nAllWidth = rc.right - rc.left; int nSbxWidth = ::GetSystemMetrics(SM_CXVSCROLL) + ::GetSystemMetrics(SM_CXEDGE); // サイズボックスの幅 diff --git a/sakura_lang_en_US/sakura_lang_rc.rc b/sakura_lang_en_US/sakura_lang_rc.rc index 2ab156380a..c09cf6064e 100644 --- a/sakura_lang_en_US/sakura_lang_rc.rc +++ b/sakura_lang_en_US/sakura_lang_rc.rc @@ -3460,6 +3460,7 @@ BEGIN STR_ERR_DLGEDITVW6 "■" STR_MENU_KEYWORDINFO "Copy Keyword description to clipboard" STR_MENU_OPENKEYWORDDIC "Open keyword dictionary" + STR_STATUS_FONTSIZE "%4d %%" STR_STATUS_ROW_COL "%5d Ln %4d Col" STR_INS_MODE_INS "INS" STR_INS_MODE_OVR "OVR" From c3c324fa8c527cb96fbfae0633723eda77ede5d7 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 26 Dec 2020 12:00:53 +0900 Subject: [PATCH 0306/1024] =?UTF-8?q?resolves=20#1492;=20Visual=20Studio?= =?UTF-8?q?=20Community=202019=20=E3=81=A7=20tests1=20=E3=82=92=E7=B7=A8?= =?UTF-8?q?=E9=9B=86=E3=81=99=E3=82=8B=E3=81=A8=E6=84=8F=E5=9B=B3=E3=81=97?= =?UTF-8?q?=E3=81=AA=E3=81=84=E5=A4=89=E6=9B=B4=E3=81=8C=E6=8C=BF=E5=85=A5?= =?UTF-8?q?=E3=81=95=E3=82=8C=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/tests1.vcxproj.filters | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index aad8dea532..5f4f7bd9b5 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -11,6 +11,11 @@ {0eefa0df-ca7f-489c-9844-9a182e1dba18} + + + Other Files + + Other Files @@ -56,9 +61,6 @@ Test Files - - Other Files - Test Files From df4919f6eb28ff9c750ef71809026e660e951ab8 Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Sat, 2 Jan 2021 09:30:03 +0800 Subject: [PATCH 0307/1024] Create info_zh_hant.txt --- installer/instmaterials/info_zh_hant.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 installer/instmaterials/info_zh_hant.txt diff --git a/installer/instmaterials/info_zh_hant.txt b/installer/instmaterials/info_zh_hant.txt new file mode 100644 index 0000000000..a8fe2cf499 --- /dev/null +++ b/installer/instmaterials/info_zh_hant.txt @@ -0,0 +1,3 @@ +該軟件被重命名為“文本編輯器(共同開發版本)”。 +您可以免費用於商業和非商業用途,但源代碼的版權由各部分所有者保留。 +該軟件無法保證完整性。 From 383b01c26c95ef59301c9da8d5342101665d3eca Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Sat, 2 Jan 2021 09:30:44 +0800 Subject: [PATCH 0308/1024] Add files via upload --- installer/instmaterials/sakura-common.iss | 597 ++++++++++++++++++++++ 1 file changed, 597 insertions(+) create mode 100644 installer/instmaterials/sakura-common.iss diff --git a/installer/instmaterials/sakura-common.iss b/installer/instmaterials/sakura-common.iss new file mode 100644 index 0000000000..8f98f67046 --- /dev/null +++ b/installer/instmaterials/sakura-common.iss @@ -0,0 +1,597 @@ +#if VER < EncodeVer(5,6,1) + #define MySendTo "{sendto}" +#else + #define MySendTo "{usersendto}" +#endif +#define MyAppVer GetFileVersion("sakura\sakura.exe") +#define MyAppVerH StringChange(MyAppVer, ".", "-") + +[Setup] +#if MyArchitecture != "x86" +ArchitecturesInstallIn64BitMode={#MyArchitecture} +ArchitecturesAllowed={#MyArchitecture} +#endif +AppName={cm:AppName} +AppId=sakura editor +AppVersion={#MyAppVer} +AppVerName={cm:AppVerName} {#MyAppVer} ({#MyArchitecture}) +AppMutex=MutexSakuraEditor +AppPublisher={cm:AppPublisher} +AppPublisherURL=https://sakura-editor.github.io/ +AppSupportURL=https://github.com/sakura-editor/sakura/issues +AppUpdatesURL=https://github.com/sakura-editor/sakura/releases +DefaultDirName={code:getDefautDirName|sakura} +DefaultGroupName={cm:AppName} +UninstallDisplayIcon={app}\sakura.exe +InfoBeforeFile="instmaterials\info.txt" +LanguageDetectionMethod=uilanguage +SolidCompression=yes + +WizardImageFile="instmaterials\SetupModern20.bmp" +WizardSmallImageFile="instmaterials\SetupModernSmall20.bmp" +DisableStartupPrompt=yes +DisableWelcomePage=no + +PrivilegesRequired=None + +; 出力先ディレクトリ +OutputDir=Output-{#OutputSuffix} + +; エディタのバージョンに応じて書き換える場所 +OutputBaseFilename=sakura_install{#MyAppVerH}-{#MyArchitecture} +VersionInfoVersion={#MyAppVer} +VersionInfoProductVersion={#MyAppVer} + +; OSバージョン制限(Windows 7 以降に対応) +MinVersion=6.1 + +[Languages] +Name: "ja"; MessagesFile: "compiler:Languages\Japanese.isl" +Name: "en"; MessagesFile: "compiler:Default.isl"; InfoBeforeFile: "instmaterials\info_us.txt" +Name: "zh_hans"; MessagesFile: "compiler:Languages\ChineseSimplified.isl"; InfoBeforeFile: "instmaterials\info_zh_hans.txt" +Name: "zh_hant"; MessagesFile: "compiler:Languages\ChineseTraditional.isl"; InfoBeforeFile: "instmaterials\info_zh_hant.txt" + +[CustomMessages] +en.InfoBeforeFile=instmaterials\info_en.txt +ja.InfoBeforeFile=instmaterials\info.txt +zh_hans.InfoBeforeFile=instmaterials\info_zh_hans.txt +zh_hant.InfoBeforeFile=instmaterials\info_zh_hant.txt + +en.AppName=SAKURA Editor +ja.AppName=サクラエディタ +zh_hans.AppName=樱花编辑器 +zh_hant.AppName=櫻花編輯器 + +en.AppVerName=SAKURA Editor +ja.AppVerName=SAKURA Editor(サクラエディタ) +zh_hans.AppVerName=樱花编辑器 +zh_hant.AppVerName=櫻花編輯器 + +en.AppPublisher=SAKURA Editor developers +ja.AppPublisher=サクラエディタ開発チーム +zh_hans.AppPublisher=樱花编辑器 开发者 +zh_hant.AppPublisher=櫻花編輯器 開發者 + +en.TypesAll=All +ja.TypesAll=すべて +zh_hans.TypesAll=全部安装 +zh_hant.TypesAll==全部安裝 + +en.TypesEditorWithHelp=Editor with Help +ja.TypesEditorWithHelp=本体とヘルプ +zh_hans.TypesEditorWithHelp=本体与帮助文件 +zh_hant.TypesEditorWithHelp=本體與幫助檔 + +en.TypesEditorOnly=Editor Only +ja.TypesEditorOnly=本体のみ +zh_hans.TypesEditorOnly=仅安装本体 +zh_hant.TypesEditorOnly=僅安裝本體 + +en.TypesCustom=Custom +ja.TypesCustom=カスタム +zh_hans.TypesCustom=自定义 +zh_hant.TypesCustom=自定義 + +en.ComponentsMain=SAKURA Editor itself +ja.ComponentsMain=サクラエディタ本体 +zh_hans.ComponentsMain=樱花编辑器 +zh_hant.ComponentsMain=櫻花編輯器本体 + +en.ComponentsHelp=help files +ja.ComponentsHelp=ヘルプファイル +zh_hans.ComponentsHelp=帮助文件 +zh_hant.ComponentsHelp=幫助檔 + +en.ComponentsKeyword=KeyWord files +ja.ComponentsKeyword=KeyWordファイル +zh_hans.ComponentsKeyword=语法提示文件 +zh_hant.ComponentsKeyword=語法提示檔案 + +en.startmenu=Create &Start Menu +ja.startmenu=スタートメニューを作成(&S) +zh_hans.startmenu=添加到开始菜单(&S) +zh_hant.startmenu=添加到開始菜單(&S) + +en.proglist=Add &Program List +ja.proglist=プログラム一覧に追加(&P) +zh_hans.proglist=添加到程序列表(&P) +zh_hant.proglist=添加到程式清單(&P) + +en.fileassoc=Add "Open with SAKURA &Editor" +ja.fileassoc=「SAKURA Editorで開く」メニューの追加(&E) +zh_hans.fileassoc=添加"用 樱花编辑器 打开"(&E) +zh_hant.fileassoc=添加“用 櫻花編輯器 打開”(&E) + +en.sendto=Add to Send&To Menu +ja.sendto=送るに追加(&T) +zh_hans.sendto=添加到"发送到"菜单(&T) +zh_hant.sendto=添加到“發送到”選單(&T) + +en.sakuragrep=Add "&Grep with SAKURA Editor" +ja.sakuragrep=「SAKURA EditorでGrep」メニューの追加(&G) +zh_hans.sakuragrep=添加到 "Grep with SAKURA Editor"(&G) +zh_hant.sakuragrep=添加到 “Grep with SAKURA Editor”(&G) + +en.fileassocMenu=Open with SAKURA &Editor +ja.fileassocMenu=SAKURA Editorで開く(&E) +zh_hans.fileassocMenu=用 樱花编辑器 打开(&E) +zh_hant.fileassocMenu=用 櫻花編輯器 打開く(&E) + +en.sakuragrepMenu=&Grep with SAKURA Editor +ja.sakuragrepMenu=SAKURA EditorでGrep(&G) +zh_hans.sakuragrepMenu=Grep with SAKURA Editor(&G) +zh_hant.sakuragrepMenu=Grep with SAKURA Editor(&G) + +en.residentStartup=&Resident at startup +ja.residentStartup=起動時に常駐(&R) +zh_hans.residentStartup=开机时启动(&R) +zh_hant.residentStartup=開機時啟動(&R) + +en.IconPreferencefolder=Preference folder +ja.IconPreferencefolder=設定フォルダ +zh_hans.IconPreferencefolder=文件夹设置 +zh_hant.IconPreferencefolder=資料夾設定 + +en.StartNow=Start now +ja.StartNow=今すぐサクラエディタを起動 +zh_hans.StartNow=现在启动 +zh_hant.StartNow=現在啟動 + +en.MultiUser=Install in compatibility mode. When editing system files and programs with user authority, editing results may not be accessible from other applications. (VirtualStore function) +ja.MultiUser=互換モードでインストールします.システムファイルおよびプログラムをユーザ権限で編集すると編集結果が他のアプリケーションから参照できないことがあります.(VirtualStore機能) +zh_hans.MultiUser=软件将会以兼容模式安装。使用非管理员用户编辑配置文件时,文件可能无法被管理员用户访问。(VirtualStore功能) +zh_hant.MultiUser=軟件將會以相容模式安裝。使用非管理員用戶編輯設定檔時,檔案可能無法被管理員用戶訪問。(VirtualStore功能) + +en.InitWiz_Title=Selection of Preference preservation method +ja.InitWiz_Title=設定保存方法の選択 +zh_hans.InitWiz_Title=配置文件保存位置 +zh_hant.InitWiz_Title=設定檔保存位置 + +en.InitWiz_SubTitle=Please choose whether you want to save the settings for each user or to the location of the executable file +ja.InitWiz_SubTitle=設定をユーザ毎に保存するか実行ファイルの場所へ保存するかを選択してください +zh_hans.InitWiz_SubTitle=选择将Sukura配置文件保存至当前用户或软件目录内 +zh_hant.InitWiz_SubTitle=選擇將Sukura設定檔保存至當前用戶或軟件目錄內 + +en.InitWiz_Comment=Please do not change if you are unsure about this +ja.InitWiz_Comment=よくわからない場合は変更しないでください +zh_hans.InitWiz_Comment=若您不清楚此选项,请不要修改 +zh_hant.InitWiz_Comment=若您不清楚此選項,請不要修改 + +en.InitWiz_Check=Manage Preference individually for each user +ja.InitWiz_Check=設定をユーザ毎に個別に管理する +zh_hans.InitWiz_Check=将每个用户的配置文件单独保存 +zh_hant.InitWiz_Check=將每個用戶的設定檔單獨保存 + +en.ReadyMemo_SaveLocation=Preference file etc. save location +ja.ReadyMemo_SaveLocation=設定ファイル等格納場所 +zh_hans.ReadyMemo_SaveLocation=设定文件保存位置 +zh_hant.ReadyMemo_SaveLocation=設定檔案保存位置 + +en.ReadyMemo_UserProfileDir=User-Profile directory +ja.ReadyMemo_UserProfileDir=ユーザ個別ディレクトリ +zh_hans.ReadyMemo_UserProfileDir=用户配置文件目录 +zh_hant.ReadyMemo_UserProfileDir=用戶設定檔目錄 + +en.ReadyMemo_VirtualStoreDisable=Disable +ja.ReadyMemo_VirtualStoreDisable=無効 +zh_hans.ReadyMemo_VirtualStoreDisable=无效 +zh_hant.ReadyMemo_VirtualStoreDisable=無效 + +en.ReadyMemo_ExecProfileDir=Same as the executable file +ja.ReadyMemo_ExecProfileDir=実行ファイルと同一ディレクトリ +zh_hans.ReadyMemo_ExecProfileDir=与可执行文件相同 +zh_hant.ReadyMemo_ExecProfileDir=與可執行文件相同 + +en.ReadyMemo_VirtualStoreEnable=Enable +ja.ReadyMemo_VirtualStoreEnable=有効 +zh_hans.ReadyMemo_VirtualStoreEnable=生效 +zh_hant.ReadyMemo_VirtualStoreEnable=生效 + + + + +[Types] +Name: all; Description: "{cm:TypesAll}" +Name: TypesEditorWithHelp; Description: "{cm:TypesEditorWithHelp}" +Name: TypesEditorOnly; Description: "{cm:TypesEditorOnly}" +Name: custom; Description: "{cm:TypesCustom}"; Flags: iscustom + +[Components] +Name: main; Description: "{cm:ComponentsMain}"; Types: all TypesEditorWithHelp TypesEditorOnly custom; Flags: fixed +Name: help; Description: "{cm:ComponentsHelp}"; Types: all TypesEditorWithHelp +Name: keyword; Description: "{cm:ComponentsKeyword}"; Types: all + +[Tasks] +Name: startmenu; Description: "{cm:startmenu}"; Components: main; +Name: quicklaunch; Description: "{cm:CreateQuickLaunchIcon}"; Components: main; +Name: proglist; Description: "{cm:proglist}"; Components: main; +Name: desktopicon; Description: "{cm:CreateDesktopIcon}"; Components: main; Flags: unchecked; +Name: fileassoc; Description: "{cm:fileassoc}"; Components: main; Flags: unchecked; +Name: startup; Description: "{cm:residentStartup}"; Components: main; Flags: unchecked; +Name: sendto; Description: "{cm:sendto}"; Components: main; Flags: unchecked; +Name: sakuragrep; Description: "{cm:sakuragrep}"; Components: main; Flags: unchecked; + +[Files] +Source: "sakura\sakura.exe"; DestDir: "{app}"; Components: main; Flags: ignoreversion; +Source: "sakura\sakura_lang_en_US.dll";DestDir: "{app}"; Components: main; Flags: ignoreversion; +Source: "sakura\license\LICENSE"; DestDir: "{app}\license"; Components: main +Source: "sakura\bregonig.dll"; DestDir: "{app}"; Components: main +Source: "sakura\license\bregonig\*"; DestDir: "{app}\license\bregonig"; Components: main +Source: "sakura\ctags.exe"; DestDir: "{app}"; Components: main +Source: "sakura\license\ctags\*"; DestDir: "{app}\license\ctags"; Components: main +Source: "sakura\sakura.exe.manifest.x";DestDir: "{app}"; Components: main; DestName: "sakura.exe.manifest"; Check: isMultiUserDisabled; Flags: onlyifdoesntexist; +Source: "sakura\sakura.exe.manifest.v";DestDir: "{app}"; Components: main; DestName: "sakura.exe.manifest"; Check: isMultiUserEnabled; Flags: onlyifdoesntexist; +Source: "sakura\sakura.chm"; DestDir: "{app}"; Components: help +Source: "sakura\macro.chm"; DestDir: "{app}"; Components: help +Source: "sakura\plugin.chm"; DestDir: "{app}"; Components: help +Source: "sakura\sakura.exe.ini"; DestDir: "{app}"; Components: main; Check: isMultiUserEnabled; Flags: onlyifdoesntexist; + +Source: "sakura\keyword\*"; DestDir: "{app}\keyword"; Components: keyword; Flags: recursesubdirs + +[Registry] +; registry for all user (Admin only) +Root: HKLM; Subkey: "SOFTWARE\Classes\*\shell\sakuraeditor"; ValueType: string; ValueName: ""; ValueData: "{cm:fileassocMenu}"; Tasks: fileassoc; Flags: uninsdeletekey; Check: CheckPrivilege(true) +Root: HKLM; Subkey: "SOFTWARE\Classes\*\shell\sakuraeditor"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\sakura.exe"""; Tasks: fileassoc; Flags: uninsdeletekey; Check: CheckPrivilege(true) +Root: HKLM; Subkey: "SOFTWARE\Classes\*\shell\sakuraeditor\command"; ValueType: string; ValueName: ""; ValueData: """{app}\sakura.exe"" ""%1"""; Tasks: fileassoc; Flags: uninsdeletekey; Check: CheckPrivilege(true) +Root: HKLM; Subkey: "SOFTWARE\Classes\Applications\sakura.exe\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\sakura.exe"" ""%1"""; Tasks: proglist; Flags: uninsdeletekey; Check: CheckPrivilege(true) + +Root: HKLM; Subkey: "SOFTWARE\Classes\directory\shell\sakuraGrep"; ValueType: string; ValueName: ""; ValueData: "{cm:sakuragrepMenu}"; Tasks: sakuragrep; Flags: uninsdeletekey; Check: CheckPrivilege(true) +Root: HKLM; Subkey: "SOFTWARE\Classes\directory\shell\sakuraGrep"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\sakura.exe"""; Tasks: sakuragrep; Flags: uninsdeletekey; Check: CheckPrivilege(true) +Root: HKLM; Subkey: "SOFTWARE\Classes\directory\shell\sakuraGrep\command"; ValueType: string; ValueName: ""; ValueData: """{app}\sakura.exe"" -GREPDLG -GREPMODE -GFOLDER=""%1"" -GOPT=""SP"" -GCODE=99 "; Tasks: sakuragrep; Flags: uninsdeletekey; Check: CheckPrivilege(true) + +Root: HKLM; Subkey: "SOFTWARE\Classes\directory\BackGround\shell\sakuraGrep"; ValueType: string; ValueName: ""; ValueData: "{cm:sakuragrepMenu}"; Tasks: sakuragrep; Flags: uninsdeletekey; Check: CheckPrivilege(true) +Root: HKLM; Subkey: "SOFTWARE\Classes\directory\BackGround\shell\sakuraGrep"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\sakura.exe"""; Tasks: sakuragrep; Flags: uninsdeletekey; Check: CheckPrivilege(true) +Root: HKLM; Subkey: "SOFTWARE\Classes\directory\BackGround\shell\sakuraGrep\command"; ValueType: string; ValueName: ""; ValueData: """{app}\sakura.exe"" -GREPDLG -GREPMODE -GFOLDER=""%V"" -GOPT=""SP"" -GCODE=99 "; Tasks: sakuragrep; Flags: uninsdeletekey; Check: CheckPrivilege(true) + +; add ProgID +; see https://www.glamenv-septzen.net/view/14#idf5215e +; see https://docs.microsoft.com/en-us/visualstudio/extensibility/registering-verbs-for-file-name-extensions?view=vs-2017 +Root: HKLM; Subkey: "SOFTWARE\Classes\SakuraEditor.Document"; ValueType: string; ValueName: ""; ValueData: ""; Flags: uninsdeletekey; Check: CheckPrivilege(true) +Root: HKLM; Subkey: "SOFTWARE\Classes\SakuraEditor.Document\shell"; ValueType: string; ValueName: ""; ValueData: ""; Flags: uninsdeletekey; Check: CheckPrivilege(true) +Root: HKLM; Subkey: "SOFTWARE\Classes\SakuraEditor.Document\shell\open"; ValueType: string; ValueName: ""; ValueData: ""; Flags: uninsdeletekey; Check: CheckPrivilege(true) +Root: HKLM; Subkey: "SOFTWARE\Classes\SakuraEditor.Document\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\sakura.exe"" ""%1"""; Flags: uninsdeletekey; Check: CheckPrivilege(true) + +; add File Handlers to each extensions +; see https://docs.microsoft.com/en-us/visualstudio/extensibility/specifying-file-handlers-for-file-name-extensions?view=vs-2017 +Root: HKLM; Subkey: "SOFTWARE\Classes\.txt\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(true) +Root: HKLM; Subkey: "SOFTWARE\Classes\.log\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(true) +Root: HKLM; Subkey: "SOFTWARE\Classes\.c\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(true) +Root: HKLM; Subkey: "SOFTWARE\Classes\.cpp\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(true) +Root: HKLM; Subkey: "SOFTWARE\Classes\.cs\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(true) +Root: HKLM; Subkey: "SOFTWARE\Classes\.h\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(true) +Root: HKLM; Subkey: "SOFTWARE\Classes\.md\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(true) +Root: HKLM; Subkey: "SOFTWARE\Classes\.ini\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(true) +Root: HKLM; Subkey: "SOFTWARE\Classes\.java\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(true) +Root: HKLM; Subkey: "SOFTWARE\Classes\.rst\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(true) + +; registry for each user (non-Admin only) +Root: HKCU; Subkey: "SOFTWARE\Classes\*\shell\sakuraeditor"; ValueType: string; ValueName: ""; ValueData: "{cm:fileassocMenu}"; Tasks: fileassoc; Flags: uninsdeletekey; Check: CheckPrivilege(false) +Root: HKCU; Subkey: "SOFTWARE\Classes\*\shell\sakuraeditor"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\sakura.exe"""; Tasks: fileassoc; Flags: uninsdeletekey; Check: CheckPrivilege(false) +Root: HKCU; Subkey: "SOFTWARE\Classes\*\shell\sakuraeditor\command"; ValueType: string; ValueName: ""; ValueData: """{app}\sakura.exe"" ""%1"""; Tasks: fileassoc; Flags: uninsdeletekey; Check: CheckPrivilege(false) +Root: HKCU; Subkey: "SOFTWARE\Classes\Applications\sakura.exe\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\sakura.exe"" ""%1"""; Tasks: proglist; Flags: uninsdeletekey; Check: CheckPrivilege(false) + +Root: HKLM; Subkey: "SOFTWARE\Classes\directory\shell\sakuraGrep"; ValueType: string; ValueName: ""; ValueData: "{cm:sakuragrepMenu}"; Tasks: sakuragrep; Flags: uninsdeletekey; Check: CheckPrivilege(false) +Root: HKLM; Subkey: "SOFTWARE\Classes\directory\shell\sakuraGrep"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\sakura.exe"""; Tasks: sakuragrep; Flags: uninsdeletekey; Check: CheckPrivilege(false) +Root: HKLM; Subkey: "SOFTWARE\Classes\directory\shell\sakuraGrep\command"; ValueType: string; ValueName: ""; ValueData: """{app}\sakura.exe"" -GREPDLG -GREPMODE -GFOLDER=""%1"" -GOPT=""SP"" -GCODE=99 "; Tasks: sakuragrep; Flags: uninsdeletekey; Check: CheckPrivilege(false) + +Root: HKLM; Subkey: "SOFTWARE\Classes\directory\BackGround\shell\sakuraGrep"; ValueType: string; ValueName: ""; ValueData: "{cm:sakuragrepMenu}"; Tasks: sakuragrep; Flags: uninsdeletekey; Check: CheckPrivilege(false) +Root: HKLM; Subkey: "SOFTWARE\Classes\directory\BackGround\shell\sakuraGrep"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\sakura.exe"""; Tasks: sakuragrep; Flags: uninsdeletekey; Check: CheckPrivilege(false) +Root: HKLM; Subkey: "SOFTWARE\Classes\directory\BackGround\shell\sakuraGrep\command"; ValueType: string; ValueName: ""; ValueData: """{app}\sakura.exe"" -GREPDLG -GREPMODE -GFOLDER=""%V"" -GOPT=""SP"" -GCODE=99 "; Tasks: sakuragrep; Flags: uninsdeletekey; Check: CheckPrivilege(false) + +; add ProgID +; see https://www.glamenv-septzen.net/view/14#idf5215e +; see https://docs.microsoft.com/en-us/visualstudio/extensibility/registering-verbs-for-file-name-extensions?view=vs-2017 +Root: HKLM; Subkey: "SOFTWARE\Classes\SakuraEditor.Document"; ValueType: string; ValueName: ""; ValueData: ""; Flags: uninsdeletekey; Check: CheckPrivilege(false) +Root: HKLM; Subkey: "SOFTWARE\Classes\SakuraEditor.Document\shell"; ValueType: string; ValueName: ""; ValueData: ""; Flags: uninsdeletekey; Check: CheckPrivilege(false) +Root: HKLM; Subkey: "SOFTWARE\Classes\SakuraEditor.Document\shell\open"; ValueType: string; ValueName: ""; ValueData: ""; Flags: uninsdeletekey; Check: CheckPrivilege(false) +Root: HKLM; Subkey: "SOFTWARE\Classes\SakuraEditor.Document\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\sakura.exe"" ""%1"""; Flags: uninsdeletekey; Check: CheckPrivilege(false) + +; add File Handlers to each extensions +; see https://docs.microsoft.com/en-us/visualstudio/extensibility/specifying-file-handlers-for-file-name-extensions?view=vs-2017 +Root: HKLM; Subkey: "SOFTWARE\Classes\.txt\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(false) +Root: HKLM; Subkey: "SOFTWARE\Classes\.log\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(false) +Root: HKLM; Subkey: "SOFTWARE\Classes\.c\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(false) +Root: HKLM; Subkey: "SOFTWARE\Classes\.cpp\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(false) +Root: HKLM; Subkey: "SOFTWARE\Classes\.cs\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(false) +Root: HKLM; Subkey: "SOFTWARE\Classes\.h\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(false) +Root: HKLM; Subkey: "SOFTWARE\Classes\.md\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(false) +Root: HKLM; Subkey: "SOFTWARE\Classes\.ini\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(false) +Root: HKLM; Subkey: "SOFTWARE\Classes\.java\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(false) +Root: HKLM; Subkey: "SOFTWARE\Classes\.rst\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(false) + +[Icons] +Name: "{group}\{cm:AppName}"; Filename: "{app}\sakura.exe"; Components: main; Check: InTopMenu(false); Tasks: startmenu; +Name: "{userstartmenu}\{cm:AppName}"; Filename: "{app}\sakura.exe"; Components: main; Check: InTopMenu(true); Tasks: startmenu; +Name: "{group}\{cm:ComponentsHelp}"; Filename: "{app}\sakura.chm"; Components: help; Tasks: startmenu; +Name: "{group}\{cm:IconPreferencefolder}"; Filename: "%APPDATA%\sakura"; Components: main; Check: isMultiUserEnabled; Tasks: startmenu; +Name: "{userdesktop}\{cm:AppName}"; Filename: "{app}\sakura.exe"; Components: main; Tasks: desktopicon; +Name: "{group}\{cm:UninstallProgram,{cm:AppName}}"; Filename: "{uninstallexe}"; Tasks: startmenu; +Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{cm:AppName}"; Filename: "{app}\sakura.exe"; Components: main; Tasks: quicklaunch; +Name: "{userstartup}\{cm:residentStartup}"; Filename: "{app}\sakura.exe"; Parameters: "-NOWIN"; Components: main; Tasks: startup; +Name: "{#MySendTo}\{cm:AppName}"; Filename: "{app}\sakura.exe"; Components: main; Tasks: sendto; + +[Run] +FileName: "{app}\sakura.exe"; Description: "{cm:StartNow}"; WorkingDir: "{app}"; Flags: postinstall nowait skipifsilent; Check: CheckPrivilege(false); + +[UninstallDelete] +;Uninstall時に確認無く消されるのでコメントアウト +;Type: files; Name: "{app}\sakura.ini" +;Type: files; Name: "{userappdata}\sakura\sakura.ini"; Check: isMultiUserEnabled +;Type: files; Name: "{app}\sakura.ini"; Check: isMultiUserDisabled + +[Dirs] +Name: "{userappdata}\sakura"; Components: main; Tasks: startmenu; Check: isMultiUserEnabled + +[Code] +var + MultiUserPage: TInputOptionWizardPage; + MultiUserPageEnabled : Boolean; + +{ ********************************** + Utility Functions + ********************************** } + +function isMultiUserEnabled : Boolean; +begin + Result := False; + if MultiUserPageEnabled then + Result := MultiUserPage.Values[0]; +end; + +function isMultiUserDisabled : Boolean; +begin + Result := not isMultiUserEnabled; +end; + +function CheckPrivilege( admin: Boolean ) : Boolean; +begin + if admin then + begin + Result := IsAdminLoggedOn; + end + else + begin + Result := not IsAdminLoggedOn; + end; +end; + +{ + default installation target directory + Admin: Program Files\sakura + User: \sakura +} +function getDefautDirName( progdir : String ) : String; +var + basedir : String; +begin + if IsAdminLoggedOn then + begin + basedir := ExpandConstant( '{pf}' ); + end + else + begin + basedir := ExpandConstant( '{userappdata}' ); + end; + Result := basedir + '\' + progdir; +end; + +function IsVistaOrLater : Boolean; +begin + Result := UsingWinNT and (( GetWindowsVersion shr 24) >= 6 ); +end; + +function IsWin2kOrLater : Boolean; +begin + Result := UsingWinNT and (( GetWindowsVersion shr 24) >= 5 ); +end; + +function IsWin10OrLater : Boolean; +var + Version: TWindowsVersion; +begin + GetWindowsVersionEx(Version); + if (Version.Major >= 10) then + begin + Result := True; + end else begin + Result := False; + end; +end; +function InTopMenu( TopMenu : Boolean ) : Boolean; +begin + if TopMenu then + begin + if IsWin10OrLater then + begin + Result := True; + end else begin + Result := False; + end + end else begin + Result := True; + end; +end; +{ ********************************** + Custom Wizard Page + ********************************** } + +{ Callback event functions } + +function NextButtonClickMultiUser( Sender : TWizardPage): Boolean; +var + selected: Integer; +{ t : String;} +begin + Result := True; + if MultiUserPageEnabled then + begin + +{ DEBUG CODE + t := 'MultiUser Setting :'; + if IsAdminLoggedOn then + t := t + 'Administrator '; + if ((GetWindowsVersion shr 24) >= 6 ) then + t := t + 'Vista '; + if MultiUserPage.Values[0] = False then + t := t + 'SingleUser '; + t := t + Format( 'WinVer: %.8x', [GetWindowsVersion] ); + MsgBox( t, mbConfirmation, MB_OK); +} + + { Alert if admin mode && multi user = False } + if IsAdminLoggedOn and + IsVistaOrLater and + ( MultiUserPage.Values[0] = False ) then + begin +{ + Program Files等のシステムフォルダへインストールする場合はUACを無効にしないと設定が保存できません。 +} + selected := MsgBox( + CustomMessage('MultiUser'), + mbConfirmation, + ( MB_OKCANCEL )); + if selected = IDCANCEL then + Result := False; + end; + end; +end; + +function ShoudSkipMultiUser(Sender : TWizardPage ): Boolean; +var + selectdir : String; + prev_version_h, prev_version_l : Cardinal; +begin + Result := False; + if ( not MultiUserPageEnabled ) then + Result := True + else + begin + selectdir := AddBackslash(ExpandConstant( '{app}' )); + if FileExists( selectdir + 'sakura.exe' ) then + begin + Result := True; + if GetIniInt( 'Settings', 'MultiUser', 0, 0, 1, selectdir + 'sakura.exe.ini' ) = 1 then + MultiUserPage.Values[0] := True + else + MultiUserPage.Values[0] := False; + end; + end; +end; + +{ ********************************** + System Event Functions + ********************************** } + +{ Add multi user selection page if supported } +procedure InitializeWizard; +begin + { Create multi user page } + MultiUserPage := CreateInputOptionPage( wpSelectComponents, CustomMessage('InitWiz_Title'), + CustomMessage('InitWiz_SubTitle'), + CustomMessage('InitWiz_Comment'), False, False ); + MultiUserPage.Add( CustomMessage('InitWiz_Check') ); + MultiUserPage.Values[0] := False; + MultiUserPage.OnShouldSkipPage := @ShoudSkipMultiUser; + MultiUserPage.OnNextButtonClick := @NextButtonClickMultiUser; + MultiUserPageEnabled := False; + {Show multiuser mode configuration only in case of Win2K or later } + if IsWin2kOrLater then + begin + { multi user mode is supported } + MultiUserPageEnabled := True; + + { + default multi user mode + User: OFF because installation target is also local + Admin: + Vista or later: ON + Other: OFF + } + if IsVistaOrLater and + IsAdminLoggedOn then + MultiUserPage.Values[0] := True + else + MultiUserPage.Values[0] := False; + end; +end; + +{ Build List of installation configuration for ready page } +function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, + MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String; +var + MemoMuitiUser, MemoVirtualStore : String; +begin + MemoMuitiUser := CustomMessage('ReadyMemo_SaveLocation') + NewLine + Space; + MemoVirtualStore := 'VirtualStore' + NewLine + Space; + + if isMultiUserEnabled then + begin + MemoMuitiUser := MemoMuitiUser + CustomMessage('ReadyMemo_UserProfileDir'); + MemoVirtualStore := MemoVirtualStore + CustomMessage('ReadyMemo_VirtualStoreDisable'); + end + else + begin + MemoMuitiUser := MemoMuitiUser + CustomMessage('ReadyMemo_ExecProfileDir'); + MemoVirtualStore := MemoVirtualStore + CustomMessage('ReadyMemo_VirtualStoreEnable'); + end; + + if IsVistaOrLater then + MemoVirtualStore := MemoVirtualStore + NewLine + NewLine + else + MemoVirtualStore := ''; + + Result := MemoDirInfo + NewLine + NewLine + + MemoMuitiUser + NewLine + NewLine + + MemoVirtualStore + + MemoComponentsInfo + NewLine + NewLine + + MemoGroupInfo + NewLine + NewLine + + MemoTasksInfo; +end; + + +{ ********************************** + Sample codes (not used at this moment + ********************************** } + +{ +Const + UAC_SUPPORT_LOWEST_VERSION_H = $00010005; 1.5. + UAC_SUPPORT_LOWEST_VERSION_L = $000f00c8; .15.200 + + if GetVersionNumbers( selectdir + 'sakura.exe', prev_version_h, prev_version_l ) then + begin + Result := False; + MsgBox( Format( 'existing version at %s : %d.%d.%d.%d', [ + selectdir + 'sakura.exe', + (prev_version_h shr 16 ), + (prev_version_h and $ffff ), + (prev_version_l shr 16 ), + (prev_version_l and $ffff )] ), + mbConfirmation, MB_OK); + if ( prev_version_h < UAC_SUPPORT_LOWEST_VERSION_H ) or + (( prev_version_h = UAC_SUPPORT_LOWEST_VERSION_H ) + and ( prev_version_l < UAC_SUPPORT_LOWEST_VERSION_L )) then + begin + end + end +} From 08d48f1e1ec7e89df2bb74f06d0b7750fe40ac9a Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Sat, 2 Jan 2021 09:33:30 +0800 Subject: [PATCH 0309/1024] Add files via upload --- installer/sakura-common.iss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/installer/sakura-common.iss b/installer/sakura-common.iss index 24a4987bb7..8f98f67046 100644 --- a/installer/sakura-common.iss +++ b/installer/sakura-common.iss @@ -54,8 +54,8 @@ Name: "zh_hant"; MessagesFile: "compiler:Languages\ChineseTraditional.isl"; Info [CustomMessages] en.InfoBeforeFile=instmaterials\info_en.txt ja.InfoBeforeFile=instmaterials\info.txt -zh_hans.InfoBeforeFile=instmaterials\info.txt -zh_hant.InfoBeforeFile=instmaterials\info.txt +zh_hans.InfoBeforeFile=instmaterials\info_zh_hans.txt +zh_hant.InfoBeforeFile=instmaterials\info_zh_hant.txt en.AppName=SAKURA Editor ja.AppName=サクラエディタ From dbfef6e60387ed537eeba9606fa7355658f15e9c Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Sat, 2 Jan 2021 09:38:18 +0800 Subject: [PATCH 0310/1024] Create ChineseSimplified.isl --- installer/Languages/ChineseSimplified.isl | 1 + 1 file changed, 1 insertion(+) create mode 100644 installer/Languages/ChineseSimplified.isl diff --git a/installer/Languages/ChineseSimplified.isl b/installer/Languages/ChineseSimplified.isl new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/installer/Languages/ChineseSimplified.isl @@ -0,0 +1 @@ + From 6fe037134dca82184f9f96a0fa0f226be867ce19 Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Sat, 2 Jan 2021 09:52:36 +0800 Subject: [PATCH 0311/1024] languagefile --- .../Languages/ChineseSimplified(old).isl | 324 ++++++++++++++ installer/Languages/ChineseSimplified.isl | 395 +++++++++++++++++- .../Languages/ChineseTraditional(old).isl | 325 ++++++++++++++ installer/Languages/ChineseTraditional.isl | 359 ++++++++++++++++ installer/Languages/Default.isl | 384 +++++++++++++++++ installer/Languages/Japanese.isl | 367 ++++++++++++++++ 6 files changed, 2153 insertions(+), 1 deletion(-) create mode 100644 installer/Languages/ChineseSimplified(old).isl create mode 100644 installer/Languages/ChineseTraditional(old).isl create mode 100644 installer/Languages/ChineseTraditional.isl create mode 100644 installer/Languages/Default.isl create mode 100644 installer/Languages/Japanese.isl diff --git a/installer/Languages/ChineseSimplified(old).isl b/installer/Languages/ChineseSimplified(old).isl new file mode 100644 index 0000000000..3bb0fce292 --- /dev/null +++ b/installer/Languages/ChineseSimplified(old).isl @@ -0,0 +1,324 @@ +; *** Inno Setup version 5.1.11+ ChineseSimplified(old).isl *** +; +; To download user-contributed translations of this file, go to: +; http://www.jrsoftware.org/files/istrans/ +; +; EldersJavas@gmail.com edited at 2021.01.02. +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=<7B80><4F53><4E2D><6587> +LanguageID=$0804 +LanguageCodePage=936 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +SetupAppTitle=安裝 +SetupWindowTitle=安裝 - %1 +UninstallAppTitle=卸載 +UninstallAppFullTitle=%1 卸載 + +; *** Misc. common +InformationTitle=信息 +ConfirmTitle=確認 +ErrorTitle=錯誤 + +; *** SetupLdr messages +SetupLdrStartupMessage=現在將安裝 %1。您想要繼續嗎? +LdrCannotCreateTemp=不能創建臨時文件。安裝中斷。 +LdrCannotExecTemp=不能執行臨時目錄中的文件。安裝中斷。 + +; *** Startup error messages +LastErrorMessage=%1.%n%n錯誤 %2: %3 +SetupFileMissing=安裝目錄中的文件 %1 丟失。請修正這個問題或獲取一個新的程序副本。 +SetupFileCorrupt=安裝文件被破壞。請獲取一個新的程序副本。 +SetupFileCorruptOrWrongVer=安裝文件被破壞,或是與這個安裝程序的版本不兼容。請修正這個問題或獲取新的程序副本。 +NotOnThisPlatform=這個程序將不能運行於 %1。 +OnlyOnThisPlatform=這個程序必須運行於 %1。 +OnlyOnTheseArchitectures=這個程序只能在為下列處理器結構設計的 Windows 版本中進行安裝:%n%n%1 +MissingWOW64APIs=你正在運行的 Windows 版不包含執行 64 位安裝程序所需的功能。要修正這個問題,請安裝 Service Pack %1。 +WinVersionTooLowError=這個程序需要 %1 版本 %2 或更高。 +WinVersionTooHighError=這個程序不能安裝於 %1 版本 %2 或更高。 +AdminPrivilegesRequired=在安裝這個程序時您必須以管理員身份登錄。 +PowerUserPrivilegesRequired=在安裝這個程序時您必須以管理員身份或有權限的用戶組身份登錄。 +SetupAppRunningError=安裝程序發現 %1 當前正在運行。 %n%n請先關閉所有運行的窗口,然後單擊“確定”繼續,或按“取消”退出。 +UninstallAppRunningError=卸載程序發現 %1 當前正在運行。 %n%n請先關閉所有運行的窗口,然後單擊“確定”繼續,或按“取消”退出。 + +; *** Misc. errors +ErrorCreatingDir=安裝程序不能創建目錄“%1”。 +ErrorTooManyFilesInDir=不能在目錄“%1”中創建文件,因為裡面的文件太多 + +; *** Setup common messages +ExitSetupTitle=退出安裝程序 +ExitSetupMessage=安裝程序未完成安裝。如果您現在退出,您的程序將不能安裝。 %n%n您可以以後再運行安裝程序完成安裝。 %n%n退出安裝程序嗎? +AboutSetupMenuItem=關於安裝程序(&A)... +AboutSetupTitle=關於安裝程序 +AboutSetupMessage=%1 版本 %2%n%3%n%n%1 主頁:%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< 上一步(&B) +ButtonNext=下一步(&N) > +ButtonInstall=安裝(&I) +ButtonOK=確定 +ButtonCancel=取消 +ButtonYes=是(&Y) +ButtonYesToAll=全部是(&A) +ButtonNo=否(&N) +ButtonNoToAll=全部否(&O) +ButtonFinish=完成(&F) +ButtonBrowse=瀏覽(&B)... +ButtonWizardBrowse=瀏覽(&R)... +ButtonNewFolder=新建文件夾(&M) + +; *** "Select Language" dialog messages +SelectLanguageTitle=選擇安裝語言 +SelectLanguageLabel=選擇安裝時要使用的語言: + +; *** Common wizard text +ClickNext=單擊“下一步”繼續,或單擊“取消”退出安裝程序。 +BeveledLabel= +BrowseDialogTitle=瀏覽文件夾 +BrowseDialogLabel=在下列列表中選擇一個文件夾,然後單擊“確定”。 +NewFolderName=新建文件夾 + +; *** "Welcome" wizard page +WelcomeLabel1=歡迎使用 [name] 安裝嚮導 +WelcomeLabel2=現在將安裝 [name/ver] 到您的電腦中。 %n%n推薦您在繼續安裝前關閉所有其它應用程序。 + +; *** "Password" wizard page +WizardPassword=密碼 +PasswordLabel1=這個安裝程序有密碼保護。 +PasswordLabel3=請輸入密碼,然後單擊“下一步”繼續。密碼區分大小寫。 +PasswordEditLabel=密碼(&P): +IncorrectPassword=您輸入的密碼不正確,請重試。 + +; *** "License Agreement" wizard page +WizardLicense=許可協議 +LicenseLabel=繼續安裝前請閱讀下列重要信息。 +LicenseLabel3=請仔細閱讀下列許可協議。您在繼續安裝前必須同意這些協議條款。 +LicenseAccepted=我同意此協議(&A) +LicenseNotAccepted=我不同意此協議(&D) + +; *** "Information" wizard pages +WizardInfoBefore=信息 +InfoBeforeLabel=請在繼續安裝前閱讀下列重要信息。 +InfoBeforeClickLabel=如果您想繼續安裝,單擊“下一步”。 +WizardInfoAfter=信息 +InfoAfterLabel=請在繼續安裝前閱讀下列重要信息。 +InfoAfterClickLabel=如果您想繼續安裝,單擊“下一步”。 + +; *** "User Information" wizard page +WizardUserInfo=用戶信息 +UserInfoDesc=請輸入您的信息。 +UserInfoName=用戶名(&U): +UserInfoOrg=組織(&O): +UserInfoSerial=序列號(&S): +UserInfoNameRequired=您必須輸入名字。 + +; *** "Select Destination Location" wizard page +WizardSelectDir=選擇目標位置 +SelectDirDesc=您想將 [name] 安裝在什麼地方? +SelectDirLabel3=安裝程序將安裝 [name] 到下列文件夾中。 +SelectDirBrowseLabel=單擊“下一步”繼續。如果您想選擇其它文件夾,單擊“瀏覽”。 +DiskSpaceMBLabel=至少需要有 [mb] MB 的可用磁盤空間。 +ToUNCPathname=安裝程序不能安裝到一個 UNC 路徑名。如果您正在嘗試安裝到網絡,您需要映射一個網絡驅動器。 +InvalidPath=您必須輸入一個帶驅動器卷標的完整路徑,例如:%n%nC:/APP%n%n或下列形式的 UNC 路徑:%n%n//server/share +InvalidDrive=您選定的驅動器或 UNC 共享不存在或不能訪問。請選選擇其它位置。 +DiskSpaceWarningTitle=沒有足夠的磁盤空間 +DiskSpaceWarning=itle=沒有足夠的磁盤空間 +DirNameTooLong=文件夾名或路徑太長。 +InvalidDirName=文件夾名是無效的。 +BadDirName32=文件夾名不能包含下列任何字符:%n%n%1 +DirExists=文件夾存在,繼續嗎? +DirExistsTitle=金思維 + +DirDoesntExist=文件夾不存在,繼續嗎? +DirDoesntExistTitle=金思維 +; *** "Select Components" wizard page +WizardSelectComponents=選擇組件 +SelectComponentsDesc=您想安裝哪些程序的組件? +SelectComponentsLabel2=選擇您想要安裝的組件;清除您不想安裝的組件。就緒後單擊“下一步”繼續。 +FullInstallation=完全安裝 +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=簡潔安裝 +CustomInstallation=自定義安裝 +NoUninstallWarningTitle=組件存在 +NoUninstallWarning=itle=組件存在 +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceMBLabel=當前選擇的組件至少需要 [mb] MB 的磁盤空間。 + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=選擇附加任務 +SelectTasksDesc=您想要安裝程序執行哪些附加任務? +SelectTasksLabel2=選擇您想要安裝程序在安裝 [name] 時執行的附加任務,然後單擊“下一步”。 + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=選擇開始菜單文件夾 +SelectStartMenuFolderDesc=您想在哪裡放置程序的快捷方式? +SelectStartMenuFolderLabel3=安裝程序現在將在下列開始菜單文件夾中創建程序的快捷方式。 +SelectStartMenuFolderBrowseLabel=單擊“下一步”繼續。如果您想選擇其它文件夾,單擊“瀏覽”。 +MustEnterGroupName=您必須輸入一個文件夾名。 +GroupNameTooLong=文件夾名或路徑太長。 +InvalidGroupName=文件夾名是無效的。 +BadGroupName=文件夾名不能包含下列任何字符:%n%n%1 +NoProgramGroupCheck2=不創建開始菜單文件夾(&D) + +; *** "Ready to Install" wizard page +WizardReady=準備安裝 +ReadyLabel1=安裝程序現在準備開始安裝 [name] 到您的電腦中。 +ReadyLabel2a=單擊“安裝”繼續此安裝程序。如果您想要回顧或改變設置,請單擊“上一步”。 +ReadyLabel2b=單擊“安裝”繼續此安裝程序? +ReadyMemoUserInfo=用戶信息: +ReadyMemoDir=目標位置: +ReadyMemoType=安裝類型: +ReadyMemoComponents=選定組件: +ReadyMemoGroup=開始菜單文件夾: +ReadyMemoTasks=附加任務: + +; *** "Preparing to Install" wizard page +WizardPreparing=正在準備安裝 +PreparingDesc=安裝程序正在準備安裝 [name] 到您的電腦中。 +PreviousInstallNotCompleted=先前程序的安裝/卸載未完成。您需要重新啟動您的電腦才能完成安裝。 %n%n在重新啟動電腦後,再運行安裝完成 [name] 的安裝。 +CannotContinue=安裝程序不能繼續。請單擊“取消”退出。 + +; *** "Installing" wizard page +WizardInstalling=正在安裝 +InstallingLabel=安裝程序正在安裝 [name] 到您的電腦中,請等待。 + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=[name] 安裝嚮導完成 +FinishedLabelNoIcons=安裝程序已在您的電腦中安裝了 [name]。 +FinishedLabel=oIcons=安裝程序已在您的電腦中安裝了 [name]。 +ClickFinish=單擊“完成”退出安裝程序。 +FinishedRestartLabel=要完成 [name] 的安裝,安裝程序必須重新啟動您的電腦。您想現在重新啟動嗎? +FinishedRestartMessage=要完成 [name] 的安裝,安裝程序必須重新啟動您的電腦。 %n%n您想現在重新啟動嗎? +ShowReadmeCheck=是,您想查閱自述文件 +YesRadio=是,立即重新啟動電腦(&Y) +NoRadio=否,稍後重新啟動電腦(&N) +; used for example as 'Run MyProg.exe' +RunEntryExec=運行 %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=查閱 %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=安裝程序需要下一張磁盤 +SelectDiskLabel2=請插入磁盤 %1 並單擊“確定”。 %n%n如果這個磁盤中的文件不能在不同於下列顯示的文件夾中找到,輸入正確的路徑或單擊“瀏覽”。 +PathLabel=路徑(&P): +FileNotInDir2=文件“%1”不能在“%2”定位。請插入正確的磁盤或選擇其它文件夾。 +SelectDirectoryLabel=請指定下一張磁盤的位置。 + +; *** Installation phase messages +SetupAborted=安裝程序未完成安裝。 %n%n請修正這個問題並重新運行安裝程序。 +EntryAbortRetryIgnore=單擊“重試”進行重試,單擊“忽略”繼續,或單擊“中斷”取消安裝。 + +; *** Installation status messages +StatusCreateDirs=正在創建目錄... +StatusExtractFiles=正在解壓縮文件... +StatusCreateIcons=正在創建快捷方式... +StatusCreateIniEntries=正在創建 INI 條目... +StatusCreateRegistryEntries=正在創建註冊表條目... +StatusRegisterFiles=正在註冊文件... +StatusSavingUninstall=正在保存卸載信息... +StatusRunProgram=正在完成安裝... +StatusRollback=正在設置改變... + +; *** Misc. errors +ErrorInternal2=內部錯誤: %1 +ErrorFunctionFailedNoCode=%1 失敗 +ErrorFunctionFailed=oCode=%1 失敗 +ErrorFunctionFailedWithMessage=%1 失敗;代碼 %2.%n%3 +ErrorExecutingProgram=不能執行文件:%n%1 + +; *** Registry errors +ErrorRegOpenKey=錯誤打開註冊表鍵:%n%1/%2 +ErrorRegCreateKey=錯誤創建註冊表鍵:%n%1/%2 +ErrorRegWriteKey=錯誤寫入註冊表鍵:%n%1/%2 + +; *** INI errors +ErrorIniEntry=在文件“%1”創建 INI 條目錯誤。 + +; *** File copying errors +FileAbortRetryIgnore=單擊“重試”進行重試,單擊“忽略”跳過這個文件 (不推薦),或單擊“中斷”取消安裝。 +FileAbortRetryIgnore2=單擊“重試”進行重試,單擊“忽略”繼續處理 (不推薦),或單擊“中斷”取消安裝。 +SourceIsCorrupted=源文件被破壞 +SourceDoesntExist=源文件“%1”不存在 +ExistingFileReadOnly=現有的文件標記為只讀。 %n%n單擊“重試”刪除只讀屬性後再試,單擊“忽略”跳過這個文件,或單擊“取消”退出安裝。 +ErrorReadingExistingDest=嘗試讀了現有的文件時發生一個錯誤: +FileExists=文件已經存在。 %n%n您想要安裝程序覆蓋它嗎? +ExistingFileNewer=現有的文件新與安裝程序要安裝的文件。推薦您保留現有文件。 %n%n您想要保留現有的文件嗎? +ErrorChangingAttr=嘗試改變下列現有的文件的屬性時發生一個錯誤: +ErrorCreatingTemp=嘗試在目標目錄創建文件時發生一個錯誤: +ErrorReadingSource=嘗試讀取下列源文件時發生一個錯誤: +ErrorCopying=嘗試複製下列文件時發生一個錯誤: +ErrorReplacingExistingFile=嘗試替換現有的文件時發生錯誤: +ErrorRestartReplace=RestartReplace 失敗: +ErrorRenamingTemp=嘗試重新命名以下目標目錄中的一個文件時發生錯誤: +ErrorRegisterServer=不能註冊 DLL/OCX: %1 +ErrorRegSvr32Failed=RegSvr32 failed with exit code %1 +ErrorRegisterTypeLib=不能註冊類型庫: %1 + +; *** Post-installation errors +ErrorOpeningReadme=當嘗試打開自述文件時發生一個錯誤。 +ErrorRestartingComputer=安裝程序不能重新啟動電腦,請手動重啟。 + +; *** Uninstaller messages +UninstallNotFound=文件“%1”不存在。不能卸載。 +UninstallOpenError=文件“%1”不能打開。不能卸載 +UninstallUnsupportedVer=卸載日誌文件“%1”有未被這個版本的卸載器承認的格式。不能卸載 +UninstallUnknownEntry=在卸載日誌中遇到一個未知的條目 (%1) +ConfirmUninstall=您確認想要完全刪除 %1 及它的所有組件嗎? +UninstallOnlyOnWin64=這個安裝程序只能在 64 位 Windows 中進行卸載。 +OnlyAdminCanUninstall=這個安裝的程序只能是有管理員權限的用戶才能卸載。 +UninstallStatusLabel=正在從您的電腦中刪除 %1,請等待。 +UninstalledAll=%1 已順利地從您的電腦中刪除。 +UninstalledMost=%1 卸載完成。 %n%n有一些內容不能被刪除。您可以手工刪除它們。 +UninstalledAndNeedsRestart=要完成 %1 的卸載,您的電腦必須重新啟動。 %n%n您現在想重新啟動電腦嗎? +UninstallDataCorrupted=“%1”文件被破壞,不能卸載 + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=刪除共享文件嗎? +ConfirmDeleteSharedFile2=系統中包含的下列共享文件已經不被其它程序使用。您想要卸載程序刪除這些共享文件嗎? %n%n如果這些文件被刪除,但還有程序正在使用這些文件,這些程序可能不能正確執行。如果您不能確定,選擇“否”。把這些文件保留在系統中以免引起問題。 +SharedFileNameLabel=文件名: +SharedFileLocationLabel=位置: +WizardUninstalling=卸載狀態 +StatusUninstalling=正在卸載 %1... + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 版本 %2 +AdditionalIcons=附加快捷方式: +CreateDesktopIcon=創建桌面快捷方式(&D) +CreateQuickLaunchIcon=創建快速運行欄快捷方式(&Q) +ProgramOnTheWeb=%1 網站 +UninstallProgram=卸載 %1 +LaunchProgram=運行 %1 +AssocFileExtension=將 %2 文件擴展名與 %1 建立關聯(&A) +AssocingFileExtension=正在將 %2 文件擴展名與 %1 建立關聯... + + + + + + \ No newline at end of file diff --git a/installer/Languages/ChineseSimplified.isl b/installer/Languages/ChineseSimplified.isl index 8b13789179..df711d51d9 100644 --- a/installer/Languages/ChineseSimplified.isl +++ b/installer/Languages/ChineseSimplified.isl @@ -1 +1,394 @@ - +; *** Inno Setup version 6.1.0+ Chinese Simplified messages *** +; +; To download user-contributed translations of this file, go to: +; https://jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). +; +; Maintained by Zhenghan Yang +; Email: 847320916@QQ.com +; Translation based on network resource +; The latest Translation is on https://github.com/kira-96/Inno-Setup-Chinese-Simplified-Translation +; + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=简体中文 +; If Language Name display incorrect, uncomment next line +; LanguageName=<7B80><4F53><4E2D><6587> +; About LanguageID, to reference link: +; https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-lcid/a9eac961-e77d-41a6-90a5-ce1a8b0cdb9c +LanguageID=$0804 +LanguageCodePage=936 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** 应用程序标题 +SetupAppTitle=安装 +SetupWindowTitle=安装 - %1 +UninstallAppTitle=卸载 +UninstallAppFullTitle=%1 卸载 + +; *** Misc. common +InformationTitle=信息 +ConfirmTitle=确认 +ErrorTitle=错误 + +; *** SetupLdr messages +SetupLdrStartupMessage=现在将安装 %1。您想要继续吗? +LdrCannotCreateTemp=不能创建临时文件。安装中断。 +LdrCannotExecTemp=不能执行临时目录中的文件。安装中断。 +HelpTextNote= + +; *** 启动错误消息 +LastErrorMessage=%1.%n%n错误 %2: %3 +SetupFileMissing=安装目录中的文件 %1 丢失。请修正这个问题或者获取程序的新副本。 +SetupFileCorrupt=安装文件已损坏。请获取程序的新副本。 +SetupFileCorruptOrWrongVer=安装文件已损坏,或是与这个安装程序的版本不兼容。请修正这个问题或获取新的程序副本。 +InvalidParameter=无效的命令行参数:%n%n%1 +SetupAlreadyRunning=安装程序正在运行。 +WindowsVersionNotSupported=这个程序不支持当前计算机运行的Windows版本。 +WindowsServicePackRequired=这个程序需要 %1 服务包 %2 或更高。 +NotOnThisPlatform=这个程序将不能运行于 %1。 +OnlyOnThisPlatform=这个程序必须运行于 %1。 +OnlyOnTheseArchitectures=这个程序只能在为下列处理器结构设计的Windows版本中进行安装:%n%n%1 +WinVersionTooLowError=这个程序需要 %1 版本 %2 或更高。 +WinVersionTooHighError=这个程序不能安装于 %1 版本 %2 或更高。 +AdminPrivilegesRequired=在安装这个程序时您必须以管理员身份登录。 +PowerUserPrivilegesRequired=在安装这个程序时您必须以管理员身份或有权限的用户组身份登录。 +SetupAppRunningError=安装程序发现 %1 当前正在运行。%n%n请先关闭所有运行的窗口,然后点击“确定”继续,或按“取消”退出。 +UninstallAppRunningError=卸载程序发现 %1 当前正在运行。%n%n请先关闭所有运行的窗口,然后点击“确定”继续,或按“取消”退出。 + +; *** 启动问题 +PrivilegesRequiredOverrideTitle=选择安装程序模式 +PrivilegesRequiredOverrideInstruction=选择安装模式 +PrivilegesRequiredOverrideText1=%1 可以为所有用户安装(需要管理员权限),或仅为您安装。 +PrivilegesRequiredOverrideText2=%1 只能为您安装,或为所有用户安装(需要管理员权限)。 +PrivilegesRequiredOverrideAllUsers=为所有用户安装(&A) +PrivilegesRequiredOverrideAllUsersRecommended=为所有用户安装(&A) (建议选项) +PrivilegesRequiredOverrideCurrentUser=只为我安装(&M) +PrivilegesRequiredOverrideCurrentUserRecommended=只为我安装(&M) (建议选项) + +; *** 其它错误 +ErrorCreatingDir=安装程序不能创建目录“%1”。 +ErrorTooManyFilesInDir=不能在目录“%1”中创建文件,因为里面的文件太多 + +; *** 安装程序公共消息 +ExitSetupTitle=退出安装程序 +ExitSetupMessage=安装程序还未完成安装。如果您现在退出,程序将不能安装。%n%n您可以以后再运行安装程序完成安装。%n%n现在退出安装程序吗? +AboutSetupMenuItem=关于安装程序(&A)... +AboutSetupTitle=关于安装程序 +AboutSetupMessage=%1 版本 %2%n%3%n%n%1 主页:%n%4 +AboutSetupNote= +TranslatorNote= + +; *** 按钮 +ButtonBack=< 上一步(&B) +ButtonNext=下一步(&N) > +ButtonInstall=安装(&I) +ButtonOK=确定 +ButtonCancel=取消 +ButtonYes=是(&Y) +ButtonYesToAll=全是(&A) +ButtonNo=否(&N) +ButtonNoToAll=全否(&O) +ButtonFinish=完成(&F) +ButtonBrowse=浏览(&B)... +ButtonWizardBrowse=浏览(&R)... +ButtonNewFolder=新建文件夹(&M) + +; *** “选择语言”对话框消息 +SelectLanguageTitle=选择安装语言 +SelectLanguageLabel=选择安装时要使用的语言。 + +; *** 公共向导文字 +ClickNext=点击“下一步”继续,或点击“取消”退出安装程序。 +BeveledLabel= +BrowseDialogTitle=浏览文件夹 +BrowseDialogLabel=在下列列表中选择一个文件夹,然后点击“确定”。 +NewFolderName=新建文件夹 + +; *** “欢迎”向导页 +WelcomeLabel1=欢迎使用 [name] 安装向导 +WelcomeLabel2=现在将安装 [name/ver] 到您的电脑中。%n%n推荐您在继续安装前关闭所有其它应用程序。 + +; *** “密码”向导页 +WizardPassword=密码 +PasswordLabel1=这个安装程序有密码保护。 +PasswordLabel3=请输入密码,然后点击“下一步”继续。密码区分大小写。 +PasswordEditLabel=密码(&P): +IncorrectPassword=您所输入的密码不正确,请重试。 + +; *** “许可协议”向导页 +WizardLicense=许可协议 +LicenseLabel=继续安装前请阅读下列重要信息。 +LicenseLabel3=请仔细阅读下列许可协议。您在继续安装前必须同意这些协议条款。 +LicenseAccepted=我同意此协议(&A) +LicenseNotAccepted=我不同意此协议(&D) + +; *** “信息”向导页 +WizardInfoBefore=信息 +InfoBeforeLabel=请在继续安装前阅读下列重要信息。 +InfoBeforeClickLabel=如果您想继续安装,点击“下一步”。 +WizardInfoAfter=信息 +InfoAfterLabel=请在继续安装前阅读下列重要信息。 +InfoAfterClickLabel=如果您想继续安装,点击“下一步”。 + +; *** “用户信息”向导页 +WizardUserInfo=用户信息 +UserInfoDesc=请输入您的信息。 +UserInfoName=用户名(&U): +UserInfoOrg=组织(&O): +UserInfoSerial=序列号(&S): +UserInfoNameRequired=您必须输入用户名。 + +; *** “选择目标目录”向导页 +WizardSelectDir=选择目标位置 +SelectDirDesc=您想将 [name] 安装在哪里? +SelectDirLabel3=安装程序将安装 [name] 到下列文件夹中。 +SelectDirBrowseLabel=点击“下一步”继续。如果您想选择其它文件夹,点击“浏览”。 +DiskSpaceGBLabel=至少需要有 [gb] GB 的可用磁盘空间。 +DiskSpaceMBLabel=至少需要有 [mb] MB 的可用磁盘空间。 +CannotInstallToNetworkDrive=安装程序无法安装到一个网络驱动器。 +CannotInstallToUNCPath=安装程序无法安装到一个UNC路径。 +InvalidPath=您必须输入一个带驱动器卷标的完整路径,例如:%n%nC:\APP%n%n或下列形式的UNC路径:%n%n\\server\share +InvalidDrive=您选定的驱动器或 UNC 共享不存在或不能访问。请选选择其它位置。 +DiskSpaceWarningTitle=没有足够的磁盘空间 +DiskSpaceWarning=安装程序至少需要 %1 KB 的可用空间才能安装,但选定驱动器只有 %2 KB 的可用空间。%n%n您一定要继续吗? +DirNameTooLong=文件夹名称或路径太长。 +InvalidDirName=文件夹名称无效。 +BadDirName32=文件夹名称不能包含下列任何字符:%n%n%1 +DirExistsTitle=文件夹已存在 +DirExists=文件夹:%n%n%1%n%n已经存在。您一定要安装到这个文件夹中吗? +DirDoesntExistTitle=文件夹不存在 +DirDoesntExist=文件夹:%n%n%1%n%n不存在。您想要创建此文件夹吗? + +; *** “选择组件”向导页 +WizardSelectComponents=选择组件 +SelectComponentsDesc=您想安装哪些程序的组件? +SelectComponentsLabel2=选择您想要安装的组件;清除您不想安装的组件。然后点击“下一步”继续。 +FullInstallation=完全安装 +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=简洁安装 +CustomInstallation=自定义安装 +NoUninstallWarningTitle=组件已存在 +NoUninstallWarning=安装程序检测到下列组件已在您的电脑中安装:%n%n%1%n%n取消选定这些组件将不能卸载它们。%n%n您一定要继续吗? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=当前选择的组件至少需要 [gb] GB 的磁盘空间。 +ComponentsDiskSpaceMBLabel=当前选择的组件至少需要 [mb] MB 的磁盘空间。 + +; *** “选择附加任务”向导页 +WizardSelectTasks=选择附加任务 +SelectTasksDesc=您想要安装程序执行哪些附加任务? +SelectTasksLabel2=选择您想要安装程序在安装 [name] 时执行的附加任务,然后点击“下一步”。 + +; *** “选择开始菜单文件夹”向导页 +WizardSelectProgramGroup=选择开始菜单文件夹 +SelectStartMenuFolderDesc=安装程序应该在哪里放置程序的快捷方式? +SelectStartMenuFolderLabel3=安装程序现在将在下列开始菜单文件夹中创建程序的快捷方式。 +SelectStartMenuFolderBrowseLabel=点击“下一步”继续。如果您想选择其它文件夹,点击“浏览”。 +MustEnterGroupName=您必须输入一个文件夹名。 +GroupNameTooLong=文件夹名或路径太长。 +InvalidGroupName=文件夹名是无效的。 +BadGroupName=文件夹名不能包含下列任何字符:%n%n%1 +NoProgramGroupCheck2=不创建开始菜单文件夹(&D) + +; *** “准备安装”向导页 +WizardReady=准备安装 +ReadyLabel1=安装程序现在准备开始安装 [name] 到您的电脑中。 +ReadyLabel2a=点击“安装”继续此安装程序。如果您想要回顾或修改设置,请点击“上一步”。 +ReadyLabel2b=点击“安装”继续此安装程序? +ReadyMemoUserInfo=用户信息: +ReadyMemoDir=目标位置: +ReadyMemoType=安装类型: +ReadyMemoComponents=选定组件: +ReadyMemoGroup=开始菜单文件夹: +ReadyMemoTasks=附加任务: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=正在下载附加文件... +ButtonStopDownload=停止下载(&S) +StopDownload=您确定要停止下载吗? +ErrorDownloadAborted=下载已中止 +ErrorDownloadFailed=下载失败:%1 %2 +ErrorDownloadSizeFailed=获取下载大小失败:%1 %2 +ErrorFileHash1=校验文件哈希失败:%1 +ErrorFileHash2=无效的文件哈希:预期 %1,实际 %2 +ErrorProgress=无效的进度:%1,总共%2 +ErrorFileSize=文件大小错误:预期 %1,实际 %2 + +; *** “正在准备安装”向导页 +WizardPreparing=正在准备安装 +PreparingDesc=安装程序正在准备安装 [name] 到您的电脑中。 +PreviousInstallNotCompleted=先前程序的安装/卸载未完成。您需要重新启动您的电脑才能完成安装。%n%n在重新启动电脑后,再运行安装完成 [name] 的安装。 +CannotContinue=安装程序不能继续。请点击“取消”退出。 +ApplicationsFound=下列应用程序正在使用的文件需要更新设置。它是建议您允许安装程序自动关闭这些应用程序。 +ApplicationsFound2=下列应用程序正在使用的文件需要更新设置。它是建议您允许安装程序自动关闭这些应用程序。安装完成后,安装程序将尝试重新启动应用程序。 +CloseApplications=自动关闭该应用程序(&A) +DontCloseApplications=不要关闭该应用程序(&D) +ErrorCloseApplications=安装程序无法自动关闭所有应用程序。在继续之前,我们建议您关闭所有使用需要更新的安装程序文件。 +PrepareToInstallNeedsRestart=安装程序必须重新启动计算机。重新启动计算机后,请再次运行安装程序以完成 [name] 的安装。%n%n是否立即重新启动? + +; *** “正在安装”向导页 +WizardInstalling=正在安装 +InstallingLabel=安装程序正在安装 [name] 到您的电脑中,请稍等。 + +; *** “安装完成”向导页 +FinishedHeadingLabel=[name] 安装完成 +FinishedLabelNoIcons=安装程序已在您的电脑中安装了 [name]。 +FinishedLabel=安装程序已在您的电脑中安装了 [name]。此应用程序可以通过选择安装的快捷方式运行。 +ClickFinish=点击“完成”退出安装程序。 +FinishedRestartLabel=要完成 [name] 的安装,安装程序必须重新启动您的电脑。您想要立即重新启动吗? +FinishedRestartMessage=要完成 [name] 的安装,安装程序必须重新启动您的电脑。%n%n您想要立即重新启动吗? +ShowReadmeCheck=是,我想查阅自述文件 +YesRadio=是,立即重新启动电脑(&Y) +NoRadio=否,稍后重新启动电脑(&N) +; used for example as 'Run MyProg.exe' +RunEntryExec=运行 %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=查阅 %1 + +; *** “安装程序需要下一张磁盘”提示 +ChangeDiskTitle=安装程序需要下一张磁盘 +SelectDiskLabel2=请插入磁盘 %1 并点击“确定”。%n%n如果这个磁盘中的文件可以在下列文件夹之外的文件夹中找到,请输入正确的路径或点击“浏览”。 +PathLabel=路径(&P): +FileNotInDir2=文件“%1”不能在“%2”定位。请插入正确的磁盘或选择其它文件夹。 +SelectDirectoryLabel=请指定下一张磁盘的位置。 + +; *** 安装状态消息 +SetupAborted=安装程序未完成安装。%n%n请修正这个问题并重新运行安装程序。 +AbortRetryIgnoreSelectAction=选择操作 +AbortRetryIgnoreRetry=重试(&T) +AbortRetryIgnoreIgnore=忽略错误并继续(&I) +AbortRetryIgnoreCancel=关闭安装程序 + +; *** 安装状态消息 +StatusClosingApplications=正在关闭应用程序... +StatusCreateDirs=正在创建目录... +StatusExtractFiles=正在解压缩文件... +StatusCreateIcons=正在创建快捷方式... +StatusCreateIniEntries=正在创建 INI 条目... +StatusCreateRegistryEntries=正在创建注册表条目... +StatusRegisterFiles=正在注册文件... +StatusSavingUninstall=正在保存卸载信息... +StatusRunProgram=正在完成安装... +StatusRestartingApplications=正在重启应用程序... +StatusRollback=正在撤销更改... + +; *** 其它错误 +ErrorInternal2=内部错误:%1 +ErrorFunctionFailedNoCode=%1 失败 +ErrorFunctionFailed=%1 失败;错误代码 %2 +ErrorFunctionFailedWithMessage=%1 失败;错误代码 %2.%n%3 +ErrorExecutingProgram=不能执行文件:%n%1 + +; *** 注册表错误 +ErrorRegOpenKey=打开注册表项时出错:%n%1\%2 +ErrorRegCreateKey=创建注册表项时出错:%n%1\%2 +ErrorRegWriteKey=写入注册表项时出错:%n%1\%2 + +; *** INI 错误 +ErrorIniEntry=在文件“%1”中创建INI条目时出错。 + +; *** 文件复制错误 +FileAbortRetryIgnoreSkipNotRecommended=跳过这个文件(&S) (不推荐) +FileAbortRetryIgnoreIgnoreNotRecommended=忽略错误并继续(&I) (不推荐) +SourceIsCorrupted=源文件已损坏 +SourceDoesntExist=源文件“%1”不存在 +ExistingFileReadOnly2=无法替换现有文件,因为它是只读的。 +ExistingFileReadOnlyRetry=移除只读属性并重试(&R) +ExistingFileReadOnlyKeepExisting=保留现有文件(&K) +ErrorReadingExistingDest=尝试读取现有文件时出错: +FileExistsSelectAction=选择操作 +FileExists2=文件已经存在。 +FileExistsOverwriteExisting=覆盖已经存在的文件(&O) +FileExistsKeepExisting=保留现有的文件(&K) +FileExistsOverwriteOrKeepAll=为所有的冲突文件执行此操作(&D) +ExistingFileNewerSelectAction=选择操作 +ExistingFileNewer2=现有的文件比安装程序将要安装的文件更新。 +ExistingFileNewerOverwriteExisting=覆盖已经存在的文件(&O) +ExistingFileNewerKeepExisting=保留现有的文件(&K) (推荐) +ExistingFileNewerOverwriteOrKeepAll=为所有的冲突文件执行此操作(&D) +ErrorChangingAttr=尝试改变下列现有的文件的属性时出错: +ErrorCreatingTemp=尝试在目标目录创建文件时出错: +ErrorReadingSource=尝试读取下列源文件时出错: +ErrorCopying=尝试复制下列文件时出错: +ErrorReplacingExistingFile=尝试替换现有的文件时出错: +ErrorRestartReplace=重新启动替换失败: +ErrorRenamingTemp=尝试重新命名以下目标目录中的一个文件时出错: +ErrorRegisterServer=无法注册 DLL/OCX:%1 +ErrorRegSvr32Failed=RegSvr32 失败;退出代码 %1 +ErrorRegisterTypeLib=无法注册类型库:%1 + +; *** 卸载显示名字标记 +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32位 +UninstallDisplayNameMark64Bit=64位 +UninstallDisplayNameMarkAllUsers=所有用户 +UninstallDisplayNameMarkCurrentUser=当前用户 + +; *** 安装后错误 +ErrorOpeningReadme=尝试打开自述文件时出错。 +ErrorRestartingComputer=安装程序不能重新启动电脑,请手动重启。 + +; *** 卸载消息 +UninstallNotFound=文件“%1”不存在。无法卸载。 +UninstallOpenError=文件“%1”不能打开。无法卸载。 +UninstallUnsupportedVer=此版本的卸载程序无法识别卸载日志文件“%1”的格式。无法卸载 +UninstallUnknownEntry=在卸载日志中遇到一个未知的条目 (%1) +ConfirmUninstall=您确认想要完全删除 %1 及它的所有组件吗? +UninstallOnlyOnWin64=这个安装程序只能在64位Windows中进行卸载。 +OnlyAdminCanUninstall=这个安装的程序需要有管理员权限的用户才能卸载。 +UninstallStatusLabel=正在从您的电脑中删除 %1,请稍等。 +UninstalledAll=%1 已顺利地从您的电脑中删除。 +UninstalledMost=%1 卸载完成。%n%n有一些内容无法被删除。您可以手动删除它们。 +UninstalledAndNeedsRestart=要完成 %1 的卸载,您的电脑必须重新启动。%n%n您想立即重新启动电脑吗? +UninstallDataCorrupted=文件“%1”已损坏,无法卸载 + +; *** 卸载状态消息 +ConfirmDeleteSharedFileTitle=删除共享文件吗? +ConfirmDeleteSharedFile2=系统中包含的下列共享文件已经不再被其它程序使用。您想要卸载程序删除这些共享文件吗?%n%n如果这些文件被删除,但还有程序正在使用这些文件,这些程序可能不能正确执行。如果您不能确定,选择“否”。把这些文件保留在系统中以免引起问题。 +SharedFileNameLabel=文件名: +SharedFileLocationLabel=位置: +WizardUninstalling=卸载状态 +StatusUninstalling=正在卸载 %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=正在安装 %1。 +ShutdownBlockReasonUninstallingApp=正在卸载 %1。 + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 版本 %2 +AdditionalIcons=附加快捷方式: +CreateDesktopIcon=创建桌面快捷方式(&D) +CreateQuickLaunchIcon=创建快速运行栏快捷方式(&Q) +ProgramOnTheWeb=%1 网站 +UninstallProgram=卸载 %1 +LaunchProgram=运行 %1 +AssocFileExtension=将 %2 文件扩展名与 %1 建立关联(&A) +AssocingFileExtension=正在将 %2 文件扩展名与 %1 建立关联... +AutoStartProgramGroupDescription=启动组: +AutoStartProgram=自动启动 %1 +AddonHostProgramNotFound=%1无法找到您所选择的文件夹。%n%n您想要继续吗? diff --git a/installer/Languages/ChineseTraditional(old).isl b/installer/Languages/ChineseTraditional(old).isl new file mode 100644 index 0000000000..2638486226 --- /dev/null +++ b/installer/Languages/ChineseTraditional(old).isl @@ -0,0 +1,325 @@ +; *** Inno Setup version 5.1.11+ ChineseSimplified(old).isl *** +; +; To download user-contributed translations of this file, go to: +; http://www.jrsoftware.org/files/istrans/ +; +; EldersJavas@gmail.com edited at 2021.01.02. +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=<7B80><4F53><4E2D><6587> +LanguageID=$0804 +LanguageCodePage=936 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=安装 +SetupWindowTitle=安装 - %1 +UninstallAppTitle=卸载 +UninstallAppFullTitle=%1 卸载 + +; *** Misc. common +InformationTitle=信息 +ConfirmTitle=确认 +ErrorTitle=错误 + +; *** SetupLdr messages +SetupLdrStartupMessage=现在将安装 %1。您想要继续吗? +LdrCannotCreateTemp=不能创建临时文件。安装中断。 +LdrCannotExecTemp=不能执行临时目录中的文件。安装中断。 + +; *** Startup error messages +LastErrorMessage=%1.%n%n错误 %2: %3 +SetupFileMissing=安装目录中的文件 %1 丢失。请修正这个问题或获取一个新的程序副本。 +SetupFileCorrupt=安装文件被破坏。请获取一个新的程序副本。 +SetupFileCorruptOrWrongVer=安装文件被破坏,或是与这个安装程序的版本不兼容。请修正这个问题或获取新的程序副本。 +NotOnThisPlatform=这个程序将不能运行于 %1。 +OnlyOnThisPlatform=这个程序必须运行于 %1。 +OnlyOnTheseArchitectures=这个程序只能在为下列处理器结构设计的 Windows 版本中进行安装:%n%n%1 +MissingWOW64APIs=你正在运行的 Windows 版不包含执行 64 位安装程序所需的功能。要修正这个问题,请安装 Service Pack %1。 +WinVersionTooLowError=这个程序需要 %1 版本 %2 或更高。 +WinVersionTooHighError=这个程序不能安装于 %1 版本 %2 或更高。 +AdminPrivilegesRequired=在安装这个程序时您必须以管理员身份登录。 +PowerUserPrivilegesRequired=在安装这个程序时您必须以管理员身份或有权限的用户组身份登录。 +SetupAppRunningError=安装程序发现 %1 当前正在运行。%n%n请先关闭所有运行的窗口,然后单击“确定”继续,或按“取消”退出。 +UninstallAppRunningError=卸载程序发现 %1 当前正在运行。%n%n请先关闭所有运行的窗口,然后单击“确定”继续,或按“取消”退出。 + +; *** Misc. errors +ErrorCreatingDir=安装程序不能创建目录“%1”。 +ErrorTooManyFilesInDir=不能在目录“%1”中创建文件,因为里面的文件太多 + +; *** Setup common messages +ExitSetupTitle=退出安装程序 +ExitSetupMessage=安装程序未完成安装。如果您现在退出,您的程序将不能安装。%n%n您可以以后再运行安装程序完成安装。%n%n退出安装程序吗? +AboutSetupMenuItem=关于安装程序(&A)... +AboutSetupTitle=关于安装程序 +AboutSetupMessage=%1 版本 %2%n%3%n%n%1 主页:%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< 上一步(&B) +ButtonNext=下一步(&N) > +ButtonInstall=安装(&I) +ButtonOK=确定 +ButtonCancel=取消 +ButtonYes=是(&Y) +ButtonYesToAll=全部是(&A) +ButtonNo=否(&N) +ButtonNoToAll=全部否(&O) +ButtonFinish=完成(&F) +ButtonBrowse=浏览(&B)... +ButtonWizardBrowse=浏览(&R)... +ButtonNewFolder=新建文件夹(&M) + +; *** "Select Language" dialog messages +SelectLanguageTitle=选择安装语言 +SelectLanguageLabel=选择安装时要使用的语言: + +; *** Common wizard text +ClickNext=单击“下一步”继续,或单击“取消”退出安装程序。 +BeveledLabel= +BrowseDialogTitle=浏览文件夹 +BrowseDialogLabel=在下列列表中选择一个文件夹,然后单击“确定”。 +NewFolderName=新建文件夹 + +; *** "Welcome" wizard page +WelcomeLabel1=欢迎使用 [name] 安装向导 +WelcomeLabel2=现在将安装 [name/ver] 到您的电脑中。%n%n推荐您在继续安装前关闭所有其它应用程序。 + +; *** "Password" wizard page +WizardPassword=密码 +PasswordLabel1=这个安装程序有密码保护。 +PasswordLabel3=请输入密码,然后单击“下一步”继续。密码区分大小写。 +PasswordEditLabel=密码(&P): +IncorrectPassword=您输入的密码不正确,请重试。 + +; *** "License Agreement" wizard page +WizardLicense=许可协议 +LicenseLabel=继续安装前请阅读下列重要信息。 +LicenseLabel3=请仔细阅读下列许可协议。您在继续安装前必须同意这些协议条款。 +LicenseAccepted=我同意此协议(&A) +LicenseNotAccepted=我不同意此协议(&D) + +; *** "Information" wizard pages +WizardInfoBefore=信息 +InfoBeforeLabel=请在继续安装前阅读下列重要信息。 +InfoBeforeClickLabel=如果您想继续安装,单击“下一步”。 +WizardInfoAfter=信息 +InfoAfterLabel=请在继续安装前阅读下列重要信息。 +InfoAfterClickLabel=如果您想继续安装,单击“下一步”。 + +; *** "User Information" wizard page +WizardUserInfo=用户信息 +UserInfoDesc=请输入您的信息。 +UserInfoName=用户名(&U): +UserInfoOrg=组织(&O): +UserInfoSerial=序列号(&S): +UserInfoNameRequired=您必须输入名字。 + +; *** "Select Destination Location" wizard page +WizardSelectDir=选择目标位置 +SelectDirDesc=您想将 [name] 安装在什么地方? +SelectDirLabel3=安装程序将安装 [name] 到下列文件夹中。 +SelectDirBrowseLabel=单击“下一步”继续。如果您想选择其它文件夹,单击“浏览”。 +DiskSpaceMBLabel=至少需要有 [mb] MB 的可用磁盘空间。 +ToUNCPathname=安装程序不能安装到一个 UNC 路径名。如果您正在尝试安装到网络,您需要映射一个网络驱动器。 +InvalidPath=您必须输入一个带驱动器卷标的完整路径,例如:%n%nC:/APP%n%n或下列形式的 UNC 路径:%n%n//server/share +InvalidDrive=您选定的驱动器或 UNC 共享不存在或不能访问。请选选择其它位置。 +DiskSpaceWarningTitle=没有足够的磁盘空间 +DiskSpaceWarning=itle=没有足够的磁盘空间 +DirNameTooLong=文件夹名或路径太长。 +InvalidDirName=文件夹名是无效的。 +BadDirName32=文件夹名不能包含下列任何字符:%n%n%1 +DirExists=文件夹存在,继续吗? +DirExistsTitle=金思维 + +DirDoesntExist=文件夹不存在,继续吗? +DirDoesntExistTitle=金思维 +; *** "Select Components" wizard page +WizardSelectComponents=选择组件 +SelectComponentsDesc=您想安装哪些程序的组件? +SelectComponentsLabel2=选择您想要安装的组件;清除您不想安装的组件。就绪后单击“下一步”继续。 +FullInstallation=完全安装 +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=简洁安装 +CustomInstallation=自定义安装 +NoUninstallWarningTitle=组件存在 +NoUninstallWarning=itle=组件存在 +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceMBLabel=当前选择的组件至少需要 [mb] MB 的磁盘空间。 + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=选择附加任务 +SelectTasksDesc=您想要安装程序执行哪些附加任务? +SelectTasksLabel2=选择您想要安装程序在安装 [name] 时执行的附加任务,然后单击“下一步”。 + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=选择开始菜单文件夹 +SelectStartMenuFolderDesc=您想在哪里放置程序的快捷方式? +SelectStartMenuFolderLabel3=安装程序现在将在下列开始菜单文件夹中创建程序的快捷方式。 +SelectStartMenuFolderBrowseLabel=单击“下一步”继续。如果您想选择其它文件夹,单击“浏览”。 +MustEnterGroupName=您必须输入一个文件夹名。 +GroupNameTooLong=文件夹名或路径太长。 +InvalidGroupName=文件夹名是无效的。 +BadGroupName=文件夹名不能包含下列任何字符:%n%n%1 +NoProgramGroupCheck2=不创建开始菜单文件夹(&D) + +; *** "Ready to Install" wizard page +WizardReady=准备安装 +ReadyLabel1=安装程序现在准备开始安装 [name] 到您的电脑中。 +ReadyLabel2a=单击“安装”继续此安装程序。如果您想要回顾或改变设置,请单击“上一步”。 +ReadyLabel2b=单击“安装”继续此安装程序? +ReadyMemoUserInfo=用户信息: +ReadyMemoDir=目标位置: +ReadyMemoType=安装类型: +ReadyMemoComponents=选定组件: +ReadyMemoGroup=开始菜单文件夹: +ReadyMemoTasks=附加任务: + +; *** "Preparing to Install" wizard page +WizardPreparing=正在准备安装 +PreparingDesc=安装程序正在准备安装 [name] 到您的电脑中。 +PreviousInstallNotCompleted=先前程序的安装/卸载未完成。您需要重新启动您的电脑才能完成安装。%n%n在重新启动电脑后,再运行安装完成 [name] 的安装。 +CannotContinue=安装程序不能继续。请单击“取消”退出。 + +; *** "Installing" wizard page +WizardInstalling=正在安装 +InstallingLabel=安装程序正在安装 [name] 到您的电脑中,请等待。 + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=[name] 安装向导完成 +FinishedLabelNoIcons=安装程序已在您的电脑中安装了 [name]。 +FinishedLabel=oIcons=安装程序已在您的电脑中安装了 [name]。 +ClickFinish=单击“完成”退出安装程序。 +FinishedRestartLabel=要完成 [name] 的安装,安装程序必须重新启动您的电脑。您想现在重新启动吗? +FinishedRestartMessage=要完成 [name] 的安装,安装程序必须重新启动您的电脑。%n%n您想现在重新启动吗? +ShowReadmeCheck=是,您想查阅自述文件 +YesRadio=是,立即重新启动电脑(&Y) +NoRadio=否,稍后重新启动电脑(&N) +; used for example as 'Run MyProg.exe' +RunEntryExec=运行 %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=查阅 %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=安装程序需要下一张磁盘 +SelectDiskLabel2=请插入磁盘 %1 并单击“确定”。%n%n如果这个磁盘中的文件不能在不同于下列显示的文件夹中找到,输入正确的路径或单击“浏览”。 +PathLabel=路径(&P): +FileNotInDir2=文件“%1”不能在“%2”定位。请插入正确的磁盘或选择其它文件夹。 +SelectDirectoryLabel=请指定下一张磁盘的位置。 + +; *** Installation phase messages +SetupAborted=安装程序未完成安装。%n%n请修正这个问题并重新运行安装程序。 +EntryAbortRetryIgnore=单击“重试”进行重试,单击“忽略”继续,或单击“中断”取消安装。 + +; *** Installation status messages +StatusCreateDirs=正在创建目录... +StatusExtractFiles=正在解压缩文件... +StatusCreateIcons=正在创建快捷方式... +StatusCreateIniEntries=正在创建 INI 条目... +StatusCreateRegistryEntries=正在创建注册表条目... +StatusRegisterFiles=正在注册文件... +StatusSavingUninstall=正在保存卸载信息... +StatusRunProgram=正在完成安装... +StatusRollback=正在设置改变... + +; *** Misc. errors +ErrorInternal2=内部错误: %1 +ErrorFunctionFailedNoCode=%1 失败 +ErrorFunctionFailed=oCode=%1 失败 +ErrorFunctionFailedWithMessage=%1 失败;代码 %2.%n%3 +ErrorExecutingProgram=不能执行文件:%n%1 + +; *** Registry errors +ErrorRegOpenKey=错误打开注册表键:%n%1/%2 +ErrorRegCreateKey=错误创建注册表键:%n%1/%2 +ErrorRegWriteKey=错误写入注册表键:%n%1/%2 + +; *** INI errors +ErrorIniEntry=在文件“%1”创建 INI 条目错误。 + +; *** File copying errors +FileAbortRetryIgnore=单击“重试”进行重试,单击“忽略”跳过这个文件 (不推荐),或单击“中断”取消安装。 +FileAbortRetryIgnore2=单击“重试”进行重试,单击“忽略”继续处理 (不推荐),或单击“中断”取消安装。 +SourceIsCorrupted=源文件被破坏 +SourceDoesntExist=源文件“%1”不存在 +ExistingFileReadOnly=现有的文件标记为只读。%n%n单击“重试”删除只读属性后再试,单击“忽略”跳过这个文件,或单击“取消”退出安装。 +ErrorReadingExistingDest=尝试读了现有的文件时发生一个错误: +FileExists=文件已经存在。%n%n您想要安装程序覆盖它吗? +ExistingFileNewer=现有的文件新与安装程序要安装的文件。推荐您保留现有文件。%n%n您想要保留现有的文件吗? +ErrorChangingAttr=尝试改变下列现有的文件的属性时发生一个错误: +ErrorCreatingTemp=尝试在目标目录创建文件时发生一个错误: +ErrorReadingSource=尝试读取下列源文件时发生一个错误: +ErrorCopying=尝试复制下列文件时发生一个错误: +ErrorReplacingExistingFile=尝试替换现有的文件时发生错误: +ErrorRestartReplace=RestartReplace 失败: +ErrorRenamingTemp=尝试重新命名以下目标目录中的一个文件时发生错误: +ErrorRegisterServer=不能注册 DLL/OCX: %1 +ErrorRegSvr32Failed=RegSvr32 failed with exit code %1 +ErrorRegisterTypeLib=不能注册类型库: %1 + +; *** Post-installation errors +ErrorOpeningReadme=当尝试打开自述文件时发生一个错误。 +ErrorRestartingComputer=安装程序不能重新启动电脑,请手动重启。 + +; *** Uninstaller messages +UninstallNotFound=文件“%1”不存在。不能卸载。 +UninstallOpenError=文件“%1”不能打开。不能卸载 +UninstallUnsupportedVer=卸载日志文件“%1”有未被这个版本的卸载器承认的格式。不能卸载 +UninstallUnknownEntry=在卸载日志中遇到一个未知的条目 (%1) +ConfirmUninstall=您确认想要完全删除 %1 及它的所有组件吗? +UninstallOnlyOnWin64=这个安装程序只能在 64 位 Windows 中进行卸载。 +OnlyAdminCanUninstall=这个安装的程序只能是有管理员权限的用户才能卸载。 +UninstallStatusLabel=正在从您的电脑中删除 %1,请等待。 +UninstalledAll=%1 已顺利地从您的电脑中删除。 +UninstalledMost=%1 卸载完成。%n%n有一些内容不能被删除。您可以手工删除它们。 +UninstalledAndNeedsRestart=要完成 %1 的卸载,您的电脑必须重新启动。%n%n您现在想重新启动电脑吗? +UninstallDataCorrupted=“%1”文件被破坏,不能卸载 + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=删除共享文件吗? +ConfirmDeleteSharedFile2=系统中包含的下列共享文件已经不被其它程序使用。您想要卸载程序删除这些共享文件吗?%n%n如果这些文件被删除,但还有程序正在使用这些文件,这些程序可能不能正确执行。如果您不能确定,选择“否”。把这些文件保留在系统中以免引起问题。 +SharedFileNameLabel=文件名: +SharedFileLocationLabel=位置: +WizardUninstalling=卸载状态 +StatusUninstalling=正在卸载 %1... + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 版本 %2 +AdditionalIcons=附加快捷方式: +CreateDesktopIcon=创建桌面快捷方式(&D) +CreateQuickLaunchIcon=创建快速运行栏快捷方式(&Q) +ProgramOnTheWeb=%1 网站 +UninstallProgram=卸载 %1 +LaunchProgram=运行 %1 +AssocFileExtension=将 %2 文件扩展名与 %1 建立关联(&A) +AssocingFileExtension=正在将 %2 文件扩展名与 %1 建立关联... + + + + + + \ No newline at end of file diff --git a/installer/Languages/ChineseTraditional.isl b/installer/Languages/ChineseTraditional.isl new file mode 100644 index 0000000000..9c692956e8 --- /dev/null +++ b/installer/Languages/ChineseTraditional.isl @@ -0,0 +1,359 @@ +; *** Inno Setup version 6.0.0+ Chinese Traditional messages *** +; +; Name: John Wu, mr.johnwu@gmail.com +; Base on 5.5.3+ translations by Samuel Lee, Email: 751555749@qq.com +; Translation based on network resource +; + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +; If Language Name display incorrect, uncomment next line +LanguageName=<7e41><9ad4><4e2d><6587> +LanguageID=$0404 +LanguageCodepage=950 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +DialogFontName=新細明體 +DialogFontSize=9 +TitleFontName=Arial +TitleFontSize=28 +WelcomeFontName=新細明體 +WelcomeFontSize=12 +CopyrightFontName=新細明體 +CopyrightFontSize=9 + +[Messages] + +; *** Application titles +SetupAppTitle=安裝程式 +SetupWindowTitle=%1 安裝程式 +UninstallAppTitle=解除安裝 +UninstallAppFullTitle=解除安裝 %1 + +; *** Misc. common +InformationTitle=訊息 +ConfirmTitle=確認 +ErrorTitle=錯誤 + +; *** SetupLdr messages +SetupLdrStartupMessage=這將會安裝 %1。您想要繼續嗎? +LdrCannotCreateTemp=無法建立暫存檔案。安裝程式將會結束。 +LdrCannotExecTemp=無法執行暫存檔案。安裝程式將會結束。 +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1%n%n錯誤 %2: %3 +SetupFileMissing=安裝資料夾中遺失檔案 %1。請修正此問題或重新取得此軟體。 +SetupFileCorrupt=安裝檔案已經損毀。請重新取得此軟體。 +SetupFileCorruptOrWrongVer=安裝檔案已經損毀,或與安裝程式的版本不符。請重新取得此軟體。 +InvalidParameter=某個無效的變量已被傳遞到了命令列:%n%n%1 +SetupAlreadyRunning=安裝程式已經在執行。 +WindowsVersionNotSupported=本安裝程式並不支援目前在電腦所運行的 Windows 版本。 +WindowsServicePackRequired=本安裝程式需要 %1 Service Pack %2 或更新。 +NotOnThisPlatform=這個程式無法在 %1 執行。 +OnlyOnThisPlatform=這個程式必須在 %1 執行。 +OnlyOnTheseArchitectures=這個程式只能在專門為以下處理器架構而設計的 Windows 上安裝:%n%n%1 +WinVersionTooLowError=這個程式必須在 %1 版本 %2 或以上的系統執行。 +WinVersionTooHighError=這個程式無法安裝在 %1 版本 %2 或以上的系統。 +AdminPrivilegesRequired=您必須登入成系統管理員以安裝這個程式。 +PowerUserPrivilegesRequired=您必須登入成具有系統管理員或 Power User 權限的使用者以安裝這個程式。 +SetupAppRunningError=安裝程式偵測到 %1 正在執行。%n%n請關閉該程式後按 [確定] 繼續,或按 [取消] 離開。 +UninstallAppRunningError=解除安裝程式偵測到 %1 正在執行。%n%n請關閉該程式後按 [確定] 繼續,或按 [取消] 離開。 + +; *** Startup questions +PrivilegesRequiredOverrideTitle=選擇安裝程式安裝模式 +PrivilegesRequiredOverrideInstruction=選擇安裝模式 +PrivilegesRequiredOverrideText1=可以為所有使用者安裝 %1 (需要系統管理權限),或是僅為您安裝。 +PrivilegesRequiredOverrideText2=可以僅為您安裝 %1,或是為所有使用者安裝 (需要系統管理權限)。 +PrivilegesRequiredOverrideAllUsers=為所有使用者安裝 (&A) +PrivilegesRequiredOverrideAllUsersRecommended=為所有使用者安裝 (建議選項) (&A) +PrivilegesRequiredOverrideCurrentUser=僅為我安裝 (&M) +PrivilegesRequiredOverrideCurrentUserRecommended=僅為我安裝 (建議選項) (&M) + +; *** Misc. errors +ErrorCreatingDir=安裝程式無法建立資料夾“%1”。 +ErrorTooManyFilesInDir=無法在資料夾“%1”內建立檔案,因為資料夾內有太多的檔案。 + +; *** Setup common messages +ExitSetupTitle=結束安裝程式 +ExitSetupMessage=安裝尚未完成。如果您現在結束安裝程式,這個程式將不會被安裝。%n%n您可以稍後再執行安裝程式以完成安裝程序。您現在要結束安裝程式嗎? +AboutSetupMenuItem=關於安裝程式(&A)... +AboutSetupTitle=關於安裝程式 +AboutSetupMessage=%1 版本 %2%n%3%n%n%1 網址:%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< 上一步(&B) +ButtonInstall=安裝(&I) +ButtonNext=下一步(&N) > +ButtonOK=確定 +ButtonCancel=取消 +ButtonYes=是(&Y) +ButtonYesToAll=全部皆是(&A) +ButtonNo=否(&N) +ButtonNoToAll=全部皆否(&O) +ButtonFinish=完成(&F) +ButtonBrowse=瀏覽(&B)... +ButtonWizardBrowse=瀏覽(&R)... +ButtonNewFolder=建立新資料夾(&M) + +; *** "Select Language" dialog messages +SelectLanguageTitle=選擇安裝語言 +SelectLanguageLabel=選擇在安裝過程中使用的語言: + +; *** Common wizard text +ClickNext=按 [下一步] 繼續安裝,或按 [取消] 結束安裝程式。 +BeveledLabel= +BrowseDialogTitle=瀏覽資料夾 +BrowseDialogLabel=在下面的資料夾列表中選擇一個資料夾,然後按 [確定]。 +NewFolderName=新資料夾 + +; *** "Welcome" wizard page +WelcomeLabel1=歡迎使用 [name] 安裝程式 +WelcomeLabel2=這個安裝程式將會安裝 [name/ver] 到您的電腦。%n%n我們強烈建議您在安裝過程中關閉其它的應用程式,以避免與安裝程式發生沖突。 + +; *** "Password" wizard page +WizardPassword=密碼 +PasswordLabel1=這個安裝程式具有密碼保護。 +PasswordLabel3=請輸入密碼,然後按 [下一步] 繼續。密碼是區分大小寫的。 +PasswordEditLabel=密碼(&P): +IncorrectPassword=您輸入的密碼不正確,請重新輸入。 + +; *** "License Agreement" wizard page +WizardLicense=授權合約 +LicenseLabel=請閱讀以下授權合約。 +LicenseLabel3=請閱讀以下授權合約,您必須接受合約的各項條款才能繼續安裝。 +LicenseAccepted=我同意(&A) +LicenseNotAccepted=我不同意(&D) + +; *** "Information" wizard pages +WizardInfoBefore=訊息 +InfoBeforeLabel=在繼續安裝之前請閱讀以下重要資訊。 +InfoBeforeClickLabel=當您準備好繼續安裝,請按 [下一步]。 +WizardInfoAfter=訊息 +InfoAfterLabel=在繼續安裝之前請閱讀以下重要資訊。 +InfoAfterClickLabel=當您準備好繼續安裝,請按 [下一步]。 + +; *** "User Information" wizard page +WizardUserInfo=使用者資訊 +UserInfoDesc=請輸入您的資料。 +UserInfoName=使用者名稱(&U): +UserInfoOrg=組織(&O): +UserInfoSerial=序號(&S): +UserInfoNameRequired=您必須輸入您的名稱。 + +; *** "Select Destination Location" wizard page +WizardSelectDir=選擇目的資料夾 +SelectDirDesc=選擇安裝程式安裝 [name] 的位置。 +SelectDirLabel3=安裝程式將會把 [name] 安裝到下面的資料夾。 +SelectDirBrowseLabel=按 [下一步] 繼續,如果您想選擇另一個資料夾,請按 [瀏覽]。 +DiskSpaceMBLabel=最少需要 [mb] MB 磁碟空間。 +CannotInstallToNetworkDrive=安裝程式無法安裝於網絡磁碟機。 +CannotInstallToUNCPath=安裝程式無法安裝於 UNC 路徑。 +InvalidPath=您必須輸入完整的路徑名稱及磁碟機代碼。%n%n例如 C:\App 或 UNC 路徑格式 \\伺服器\共用資料夾。 +InvalidDrive=您選取的磁碟機或 UNC 名稱不存在或無法存取,請選擇其他的目的地。 +DiskSpaceWarningTitle=磁碟空間不足 +DiskSpaceWarning=安裝程式需要至少 %1 KB 的磁碟空間,您所選取的磁碟只有 %2 KB 可用空間。%n%n您要繼續安裝嗎? +DirNameTooLong=資料夾名稱或路徑太長。 +InvalidDirName=資料夾名稱不正確。 +BadDirName32=資料夾名稱不得包含以下特殊字元:%n%n%1 +DirExistsTitle=資料夾已經存在 +DirExists=資料夾:%n%n%1%n%n 已經存在。仍要安裝到該資料夾嗎? +DirDoesntExistTitle=資料夾不存在 +DirDoesntExist=資料夾:%n%n%1%n%n 不存在。要建立該資料夾嗎? + +; *** "Select Components" wizard page +WizardSelectComponents=選擇元件 +SelectComponentsDesc=選擇將會被安裝的元件。 +SelectComponentsLabel2=選擇您想要安裝的元件;清除您不想安裝的元件。然後按 [下一步] 繼續安裝。 +FullInstallation=完整安裝 +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=最小安裝 +CustomInstallation=自訂安裝 +NoUninstallWarningTitle=元件已存在 +NoUninstallWarning=安裝程式偵測到以下元件已經安裝在您的電腦上:%n%n%1%n%n取消選擇這些元件將不會移除它們。%n%n您仍然要繼續嗎? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceMBLabel=目前的選擇需要至少 [mb] MB 磁碟空間。 + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=選擇附加的工作 +SelectTasksDesc=選擇要執行的附加工作。 +SelectTasksLabel2=選擇安裝程式在安裝 [name] 時要執行的附加工作,然後按 [下一步]。 + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=選擇「開始」功能表的資料夾 +SelectStartMenuFolderDesc=選擇安裝程式建立程式的捷徑的位置。 +SelectStartMenuFolderLabel3=安裝程式將會把程式的捷徑建立在下面的「開始」功能表資料夾。 +SelectStartMenuFolderBrowseLabel=按 [下一步] 繼續,如果您想選擇另一個資料夾,請按 [瀏覽]。 +MustEnterGroupName=您必須輸入一個資料夾的名稱。 +GroupNameTooLong=資料夾名稱或路徑太長。 +InvalidGroupName=資料夾名稱不正確。 +BadGroupName=資料夾名稱不得包含下列字元:%n%n%1 +NoProgramGroupCheck2=不要在「開始」功能表中建立資料夾(&D) + +; *** "Ready to Install" wizard page +WizardReady=準備安裝 +ReadyLabel1=安裝程式將開始安裝 [name] 到您的電腦中。 +ReadyLabel2a=按下 [安裝] 繼續安裝,或按 [上一步] 重新檢視或設定各選項的內容。 +ReadyLabel2b=按下 [安裝] 繼續安裝。 +ReadyMemoUserInfo=使用者資訊 +ReadyMemoDir=目的資料夾: +ReadyMemoType=安裝型態: +ReadyMemoComponents=選擇的元件: +ReadyMemoGroup=「開始」功能表資料夾: +ReadyMemoTasks=附加工作: + +; *** "Preparing to Install" wizard page +WizardPreparing=準備安裝程式 +PreparingDesc=安裝程式準備將 [name] 安裝到您的電腦上。 +PreviousInstallNotCompleted=先前的安裝/ 解除安裝尚未完成,您必須重新啟動電腦以完成該安裝。%n%n在重新啟動電腦之後,請再執行這個程式來安裝 [name]。 +CannotContinue=安裝程式無法繼續。請按 [取消] 離開。 +ApplicationsFound=下面的應用程式正在使用安裝程式所需要更新的文檔。建議您允許安裝程式自動關閉這些應用程式。 +ApplicationsFound2=下面的應用程式正在使用安裝程式所需要更新的文檔。建議您允許安裝程式自動關閉這些應用程式。當安裝過程結束後,本安裝程式將會嘗試重新開啟該應用程式。 +CloseApplications=關閉應用程式(&A) +DontCloseApplications=不要關閉應用程式 (&D) +ErrorCloseApplications=安裝程式無法自動關閉所有應用程式。建議您在繼續前先關閉所有應用程式使用的檔案。 + +; *** "Installing" wizard page +WizardInstalling=正在安裝 +InstallingLabel=請稍候,安裝程式正在將 [name] 安裝到您的電腦上 + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=安裝完成 +FinishedLabelNoIcons=安裝程式已經將 [name] 安裝在您的電腦上。 +FinishedLabel=安裝程式已經將 [name] 安裝在您的電腦中,您可以選擇程式的圖示來執行該應用程式。 +ClickFinish=按 [完成] 以結束安裝程式。 +FinishedRestartLabel=要完成 [name] 的安裝,安裝程式必須重新啟動您的電腦。您想要現在重新啟動電腦嗎? +FinishedRestartMessage=要完成 [name] 的安裝,安裝程式必須重新啟動您的電腦。%n%n您想要現在重新啟動電腦嗎? +ShowReadmeCheck=是,我要閱讀讀我檔案。 +YesRadio=是,立即重新啟動電腦(&Y) +NoRadio=否,我稍後重新啟動電腦(&N) +; used for example as 'Run MyProg.exe' +RunEntryExec=執行 %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=檢視 %1 + +; *** "Setup Needs the Next Disk" +ChangeDiskTitle=安裝程式需要下一張磁片 +SelectDiskLabel2=請插入磁片 %1,然後按 [確定]。%n%n如果檔案不在以下所顯示的資料夾之中,請輸入正確的資料夾名稱或按 [瀏覽] 選取。 +PathLabel=路徑(&P): +FileNotInDir2=檔案“%1”無法在“%2”找到。請插入正確的磁片或選擇其它的資料夾。 +SelectDirectoryLabel=請指定下一張磁片的位置。 + +; *** Installation phase messages +SetupAborted=安裝沒有完成。%n%n請更正問題後重新安裝一次。 +AbortRetryIgnoreSelectAction=選取動作 +AbortRetryIgnoreRetry=請再試一次 (&T) +AbortRetryIgnoreIgnore=略過錯誤並繼續 (&I) +AbortRetryIgnoreCancel=取消安裝 + +; *** Installation status messages +StatusClosingApplications=正在關閉應用程式... +StatusCreateDirs=正在建立資料夾... +StatusExtractFiles=正在解壓縮檔案... +StatusCreateIcons=正在建立程式集圖示... +StatusCreateIniEntries=寫入 INI 檔案的項目... +StatusCreateRegistryEntries=正在更新系統登錄... +StatusRegisterFiles=正在登錄檔案... +StatusSavingUninstall=儲存解除安裝資訊... +StatusRunProgram=正在完成安裝... +StatusRestartingApplications=正在重新開啟應用程式... +StatusRollback=正在復原變更... + +; *** Misc. errors +ErrorInternal2=內部錯誤: %1 +ErrorFunctionFailedNoCode=%1 失敗 +ErrorFunctionFailed=%1 失敗;代碼 %2 +ErrorFunctionFailedWithMessage=%1 失敗;代碼 %2.%n%3 +ErrorExecutingProgram=無法執行檔案:%n%1 + +; *** Registry errors +ErrorRegOpenKey=無法開啟登錄鍵:%n%1\%2 +ErrorRegCreateKey=無法建立登錄項目:%n%1\%2 +ErrorRegWriteKey=無法變更登錄項目:%n%1\%2 + +; *** INI errors +ErrorIniEntry=在檔案“%1”建立 INI 項目錯誤。 + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=略過這個檔案 (不建議) (&S) +FileAbortRetryIgnoreIgnoreNotRecommended=略過錯誤並繼續 (不建議) (&I) +SourceDoesntExist=來源檔案“%1”不存在。 +SourceIsCorrupted=來源檔案已經損毀。 +ExistingFileReadOnly2=無法取代現有檔案,因為檔案已標示為唯讀。 +ExistingFileReadOnlyRetry=移除唯讀屬性並重試 (&R) +ExistingFileReadOnlyKeepExisting=保留現有檔案 (&K) +ErrorReadingExistingDest=讀取一個已存在的檔案時發生錯誤: +FileExists=檔案已經存在。%n%n 要讓安裝程式加以覆寫嗎? +ExistingFileNewer=存在的檔案版本比較新,建議您保留目前已存在的檔案。%n%n您要保留目前已存在的檔案嗎? +ErrorChangingAttr=在變更檔案屬性時發生錯誤: +ErrorCreatingTemp=在目的資料夾中建立檔案時發生錯誤: +ErrorReadingSource=讀取原始檔案時發生錯誤: +ErrorCopying=復制檔案時發生錯誤: +ErrorReplacingExistingFile=取代檔案時發生錯誤: +ErrorRestartReplace=重新啟動電腦後取代檔案失敗: +ErrorRenamingTemp=在目的資料夾變更檔案名稱時發生錯誤: +ErrorRegisterServer=無法注冊 DLL/OCX 檔案: %1。 +ErrorRegSvr32Failed=RegSvr32 失敗;退出代碼 %1 +ErrorRegisterTypeLib=無法注冊類型庫: %1。 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bit +UninstallDisplayNameMark64Bit=64-bit +UninstallDisplayNameMarkAllUsers=所有使用者 +UninstallDisplayNameMarkCurrentUser=目前使用者 + +; *** Post-installation errors +ErrorOpeningReadme=開啟讀我檔案時發生錯誤。 +ErrorRestartingComputer=安裝程式無法重新啟動電腦,請以手動方式自行重新啟動電腦。 + +; *** Uninstaller messages +UninstallNotFound=檔案“%1”不存在,無法移除程式。 +UninstallOpenError=無法開啟檔案“%1”,無法移除程式。 +UninstallUnsupportedVer=這個版本的解除安裝程式無法辨識記錄檔 “%1” 之格式,無法解除安裝。 +UninstallUnknownEntry=解除安裝記錄檔中發現未知的記錄 (%1)。 +ConfirmUninstall=您確定要完全移除 %1 及其相關的檔案嗎? +UninstallOnlyOnWin64=這個程式只能在 64 位元的 Windows 上解除安裝。 +OnlyAdminCanUninstall=這個程式要具備系統管理員權限的使用者方可解除安裝。 +UninstallStatusLabel=正在從您的電腦移除 %1 中,請稍候... +UninstalledAll=%1 已經成功從您的電腦中移除。 +UninstalledMost=%1 解除安裝完成。%n%n某些檔案及元件無法移除,您可以自行刪除這些檔案。 +UninstalledAndNeedsRestart=要完成 %1 的解除安裝程序,您必須重新啟動電腦。%n%n您想要現在重新啟動電腦嗎? +UninstallDataCorrupted=檔案“%1”已經損毀,無法解除安裝。 + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=移除共用檔案 +ConfirmDeleteSharedFile2=系統顯示下列共用檔案已不再被任何程式所使用,您要移除這些檔案嗎?%n%n%1%n%n倘若您移除了以上檔案但仍有程式需要使用它們,將造成這些程式無法正常執行,因此您若無法確定請選擇 [否]。保留這些檔案在您的系統中不會造成任何損害。 +SharedFileNameLabel=檔案名稱: +SharedFileLocationLabel=位置: +WizardUninstalling=解除安裝狀態 +StatusUninstalling=正在解除安裝 %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=正在安裝 %1. +ShutdownBlockReasonUninstallingApp=正在解除安裝 %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 版本 %2 +AdditionalIcons=附加圖示: +CreateDesktopIcon=建立桌面圖示(&D) +CreateQuickLaunchIcon=建立快速啟動圖示(&Q) +ProgramOnTheWeb=%1 的網站 +UninstallProgram=解除安裝 %1 +LaunchProgram=啟動 %1 +AssocFileExtension=將 %1 與檔案副檔名 %2 產生關聯(&A) +AssocingFileExtension=正在將 %1 與檔案副檔名 %2 產生關聯... +AutoStartProgramGroupDescription=開啟: +AutoStartProgram=自動開啟 %1 +AddonHostProgramNotFound=%1 無法在您所選的資料夾中找到。%n%n您是否還要繼續? diff --git a/installer/Languages/Default.isl b/installer/Languages/Default.isl new file mode 100644 index 0000000000..0b503314f6 --- /dev/null +++ b/installer/Languages/Default.isl @@ -0,0 +1,384 @@ +; *** Inno Setup version 6.1.0+ English messages *** +; +; To download user-contributed translations of this file, go to: +; https://jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=English +LanguageID=$0409 +LanguageCodePage=0 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=Setup +SetupWindowTitle=Setup - %1 +UninstallAppTitle=Uninstall +UninstallAppFullTitle=%1 Uninstall + +; *** Misc. common +InformationTitle=Information +ConfirmTitle=Confirm +ErrorTitle=Error + +; *** SetupLdr messages +SetupLdrStartupMessage=This will install %1. Do you wish to continue? +LdrCannotCreateTemp=Unable to create a temporary file. Setup aborted +LdrCannotExecTemp=Unable to execute file in the temporary directory. Setup aborted +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nError %2: %3 +SetupFileMissing=The file %1 is missing from the installation directory. Please correct the problem or obtain a new copy of the program. +SetupFileCorrupt=The setup files are corrupted. Please obtain a new copy of the program. +SetupFileCorruptOrWrongVer=The setup files are corrupted, or are incompatible with this version of Setup. Please correct the problem or obtain a new copy of the program. +InvalidParameter=An invalid parameter was passed on the command line:%n%n%1 +SetupAlreadyRunning=Setup is already running. +WindowsVersionNotSupported=This program does not support the version of Windows your computer is running. +WindowsServicePackRequired=This program requires %1 Service Pack %2 or later. +NotOnThisPlatform=This program will not run on %1. +OnlyOnThisPlatform=This program must be run on %1. +OnlyOnTheseArchitectures=This program can only be installed on versions of Windows designed for the following processor architectures:%n%n%1 +WinVersionTooLowError=This program requires %1 version %2 or later. +WinVersionTooHighError=This program cannot be installed on %1 version %2 or later. +AdminPrivilegesRequired=You must be logged in as an administrator when installing this program. +PowerUserPrivilegesRequired=You must be logged in as an administrator or as a member of the Power Users group when installing this program. +SetupAppRunningError=Setup has detected that %1 is currently running.%n%nPlease close all instances of it now, then click OK to continue, or Cancel to exit. +UninstallAppRunningError=Uninstall has detected that %1 is currently running.%n%nPlease close all instances of it now, then click OK to continue, or Cancel to exit. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Select Setup Install Mode +PrivilegesRequiredOverrideInstruction=Select install mode +PrivilegesRequiredOverrideText1=%1 can be installed for all users (requires administrative privileges), or for you only. +PrivilegesRequiredOverrideText2=%1 can be installed for you only, or for all users (requires administrative privileges). +PrivilegesRequiredOverrideAllUsers=Install for &all users +PrivilegesRequiredOverrideAllUsersRecommended=Install for &all users (recommended) +PrivilegesRequiredOverrideCurrentUser=Install for &me only +PrivilegesRequiredOverrideCurrentUserRecommended=Install for &me only (recommended) + +; *** Misc. errors +ErrorCreatingDir=Setup was unable to create the directory "%1" +ErrorTooManyFilesInDir=Unable to create a file in the directory "%1" because it contains too many files + +; *** Setup common messages +ExitSetupTitle=Exit Setup +ExitSetupMessage=Setup is not complete. If you exit now, the program will not be installed.%n%nYou may run Setup again at another time to complete the installation.%n%nExit Setup? +AboutSetupMenuItem=&About Setup... +AboutSetupTitle=About Setup +AboutSetupMessage=%1 version %2%n%3%n%n%1 home page:%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< &Back +ButtonNext=&Next > +ButtonInstall=&Install +ButtonOK=OK +ButtonCancel=Cancel +ButtonYes=&Yes +ButtonYesToAll=Yes to &All +ButtonNo=&No +ButtonNoToAll=N&o to All +ButtonFinish=&Finish +ButtonBrowse=&Browse... +ButtonWizardBrowse=B&rowse... +ButtonNewFolder=&Make New Folder + +; *** "Select Language" dialog messages +SelectLanguageTitle=Select Setup Language +SelectLanguageLabel=Select the language to use during the installation. + +; *** Common wizard text +ClickNext=Click Next to continue, or Cancel to exit Setup. +BeveledLabel= +BrowseDialogTitle=Browse For Folder +BrowseDialogLabel=Select a folder in the list below, then click OK. +NewFolderName=New Folder + +; *** "Welcome" wizard page +WelcomeLabel1=Welcome to the [name] Setup Wizard +WelcomeLabel2=This will install [name/ver] on your computer.%n%nIt is recommended that you close all other applications before continuing. + +; *** "Password" wizard page +WizardPassword=Password +PasswordLabel1=This installation is password protected. +PasswordLabel3=Please provide the password, then click Next to continue. Passwords are case-sensitive. +PasswordEditLabel=&Password: +IncorrectPassword=The password you entered is not correct. Please try again. + +; *** "License Agreement" wizard page +WizardLicense=License Agreement +LicenseLabel=Please read the following important information before continuing. +LicenseLabel3=Please read the following License Agreement. You must accept the terms of this agreement before continuing with the installation. +LicenseAccepted=I &accept the agreement +LicenseNotAccepted=I &do not accept the agreement + +; *** "Information" wizard pages +WizardInfoBefore=Information +InfoBeforeLabel=Please read the following important information before continuing. +InfoBeforeClickLabel=When you are ready to continue with Setup, click Next. +WizardInfoAfter=Information +InfoAfterLabel=Please read the following important information before continuing. +InfoAfterClickLabel=When you are ready to continue with Setup, click Next. + +; *** "User Information" wizard page +WizardUserInfo=User Information +UserInfoDesc=Please enter your information. +UserInfoName=&User Name: +UserInfoOrg=&Organization: +UserInfoSerial=&Serial Number: +UserInfoNameRequired=You must enter a name. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Select Destination Location +SelectDirDesc=Where should [name] be installed? +SelectDirLabel3=Setup will install [name] into the following folder. +SelectDirBrowseLabel=To continue, click Next. If you would like to select a different folder, click Browse. +DiskSpaceGBLabel=At least [gb] GB of free disk space is required. +DiskSpaceMBLabel=At least [mb] MB of free disk space is required. +CannotInstallToNetworkDrive=Setup cannot install to a network drive. +CannotInstallToUNCPath=Setup cannot install to a UNC path. +InvalidPath=You must enter a full path with drive letter; for example:%n%nC:\APP%n%nor a UNC path in the form:%n%n\\server\share +InvalidDrive=The drive or UNC share you selected does not exist or is not accessible. Please select another. +DiskSpaceWarningTitle=Not Enough Disk Space +DiskSpaceWarning=Setup requires at least %1 KB of free space to install, but the selected drive only has %2 KB available.%n%nDo you want to continue anyway? +DirNameTooLong=The folder name or path is too long. +InvalidDirName=The folder name is not valid. +BadDirName32=Folder names cannot include any of the following characters:%n%n%1 +DirExistsTitle=Folder Exists +DirExists=The folder:%n%n%1%n%nalready exists. Would you like to install to that folder anyway? +DirDoesntExistTitle=Folder Does Not Exist +DirDoesntExist=The folder:%n%n%1%n%ndoes not exist. Would you like the folder to be created? + +; *** "Select Components" wizard page +WizardSelectComponents=Select Components +SelectComponentsDesc=Which components should be installed? +SelectComponentsLabel2=Select the components you want to install; clear the components you do not want to install. Click Next when you are ready to continue. +FullInstallation=Full installation +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Compact installation +CustomInstallation=Custom installation +NoUninstallWarningTitle=Components Exist +NoUninstallWarning=Setup has detected that the following components are already installed on your computer:%n%n%1%n%nDeselecting these components will not uninstall them.%n%nWould you like to continue anyway? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=Current selection requires at least [gb] GB of disk space. +ComponentsDiskSpaceMBLabel=Current selection requires at least [mb] MB of disk space. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Select Additional Tasks +SelectTasksDesc=Which additional tasks should be performed? +SelectTasksLabel2=Select the additional tasks you would like Setup to perform while installing [name], then click Next. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Select Start Menu Folder +SelectStartMenuFolderDesc=Where should Setup place the program's shortcuts? +SelectStartMenuFolderLabel3=Setup will create the program's shortcuts in the following Start Menu folder. +SelectStartMenuFolderBrowseLabel=To continue, click Next. If you would like to select a different folder, click Browse. +MustEnterGroupName=You must enter a folder name. +GroupNameTooLong=The folder name or path is too long. +InvalidGroupName=The folder name is not valid. +BadGroupName=The folder name cannot include any of the following characters:%n%n%1 +NoProgramGroupCheck2=&Don't create a Start Menu folder + +; *** "Ready to Install" wizard page +WizardReady=Ready to Install +ReadyLabel1=Setup is now ready to begin installing [name] on your computer. +ReadyLabel2a=Click Install to continue with the installation, or click Back if you want to review or change any settings. +ReadyLabel2b=Click Install to continue with the installation. +ReadyMemoUserInfo=User information: +ReadyMemoDir=Destination location: +ReadyMemoType=Setup type: +ReadyMemoComponents=Selected components: +ReadyMemoGroup=Start Menu folder: +ReadyMemoTasks=Additional tasks: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Downloading additional files... +ButtonStopDownload=&Stop download +StopDownload=Are you sure you want to stop the download? +ErrorDownloadAborted=Download aborted +ErrorDownloadFailed=Download failed: %1 %2 +ErrorDownloadSizeFailed=Getting size failed: %1 %2 +ErrorFileHash1=File hash failed: %1 +ErrorFileHash2=Invalid file hash: expected %1, found %2 +ErrorProgress=Invalid progress: %1 of %2 +ErrorFileSize=Invalid file size: expected %1, found %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Preparing to Install +PreparingDesc=Setup is preparing to install [name] on your computer. +PreviousInstallNotCompleted=The installation/removal of a previous program was not completed. You will need to restart your computer to complete that installation.%n%nAfter restarting your computer, run Setup again to complete the installation of [name]. +CannotContinue=Setup cannot continue. Please click Cancel to exit. +ApplicationsFound=The following applications are using files that need to be updated by Setup. It is recommended that you allow Setup to automatically close these applications. +ApplicationsFound2=The following applications are using files that need to be updated by Setup. It is recommended that you allow Setup to automatically close these applications. After the installation has completed, Setup will attempt to restart the applications. +CloseApplications=&Automatically close the applications +DontCloseApplications=&Do not close the applications +ErrorCloseApplications=Setup was unable to automatically close all applications. It is recommended that you close all applications using files that need to be updated by Setup before continuing. +PrepareToInstallNeedsRestart=Setup must restart your computer. After restarting your computer, run Setup again to complete the installation of [name].%n%nWould you like to restart now? + +; *** "Installing" wizard page +WizardInstalling=Installing +InstallingLabel=Please wait while Setup installs [name] on your computer. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Completing the [name] Setup Wizard +FinishedLabelNoIcons=Setup has finished installing [name] on your computer. +FinishedLabel=Setup has finished installing [name] on your computer. The application may be launched by selecting the installed shortcuts. +ClickFinish=Click Finish to exit Setup. +FinishedRestartLabel=To complete the installation of [name], Setup must restart your computer. Would you like to restart now? +FinishedRestartMessage=To complete the installation of [name], Setup must restart your computer.%n%nWould you like to restart now? +ShowReadmeCheck=Yes, I would like to view the README file +YesRadio=&Yes, restart the computer now +NoRadio=&No, I will restart the computer later +; used for example as 'Run MyProg.exe' +RunEntryExec=Run %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=View %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Setup Needs the Next Disk +SelectDiskLabel2=Please insert Disk %1 and click OK.%n%nIf the files on this disk can be found in a folder other than the one displayed below, enter the correct path or click Browse. +PathLabel=&Path: +FileNotInDir2=The file "%1" could not be located in "%2". Please insert the correct disk or select another folder. +SelectDirectoryLabel=Please specify the location of the next disk. + +; *** Installation phase messages +SetupAborted=Setup was not completed.%n%nPlease correct the problem and run Setup again. +AbortRetryIgnoreSelectAction=Select action +AbortRetryIgnoreRetry=&Try again +AbortRetryIgnoreIgnore=&Ignore the error and continue +AbortRetryIgnoreCancel=Cancel installation + +; *** Installation status messages +StatusClosingApplications=Closing applications... +StatusCreateDirs=Creating directories... +StatusExtractFiles=Extracting files... +StatusCreateIcons=Creating shortcuts... +StatusCreateIniEntries=Creating INI entries... +StatusCreateRegistryEntries=Creating registry entries... +StatusRegisterFiles=Registering files... +StatusSavingUninstall=Saving uninstall information... +StatusRunProgram=Finishing installation... +StatusRestartingApplications=Restarting applications... +StatusRollback=Rolling back changes... + +; *** Misc. errors +ErrorInternal2=Internal error: %1 +ErrorFunctionFailedNoCode=%1 failed +ErrorFunctionFailed=%1 failed; code %2 +ErrorFunctionFailedWithMessage=%1 failed; code %2.%n%3 +ErrorExecutingProgram=Unable to execute file:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Error opening registry key:%n%1\%2 +ErrorRegCreateKey=Error creating registry key:%n%1\%2 +ErrorRegWriteKey=Error writing to registry key:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Error creating INI entry in file "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Skip this file (not recommended) +FileAbortRetryIgnoreIgnoreNotRecommended=&Ignore the error and continue (not recommended) +SourceIsCorrupted=The source file is corrupted +SourceDoesntExist=The source file "%1" does not exist +ExistingFileReadOnly2=The existing file could not be replaced because it is marked read-only. +ExistingFileReadOnlyRetry=&Remove the read-only attribute and try again +ExistingFileReadOnlyKeepExisting=&Keep the existing file +ErrorReadingExistingDest=An error occurred while trying to read the existing file: +FileExistsSelectAction=Select action +FileExists2=The file already exists. +FileExistsOverwriteExisting=&Overwrite the existing file +FileExistsKeepExisting=&Keep the existing file +FileExistsOverwriteOrKeepAll=&Do this for the next conflicts +ExistingFileNewerSelectAction=Select action +ExistingFileNewer2=The existing file is newer than the one Setup is trying to install. +ExistingFileNewerOverwriteExisting=&Overwrite the existing file +ExistingFileNewerKeepExisting=&Keep the existing file (recommended) +ExistingFileNewerOverwriteOrKeepAll=&Do this for the next conflicts +ErrorChangingAttr=An error occurred while trying to change the attributes of the existing file: +ErrorCreatingTemp=An error occurred while trying to create a file in the destination directory: +ErrorReadingSource=An error occurred while trying to read the source file: +ErrorCopying=An error occurred while trying to copy a file: +ErrorReplacingExistingFile=An error occurred while trying to replace the existing file: +ErrorRestartReplace=RestartReplace failed: +ErrorRenamingTemp=An error occurred while trying to rename a file in the destination directory: +ErrorRegisterServer=Unable to register the DLL/OCX: %1 +ErrorRegSvr32Failed=RegSvr32 failed with exit code %1 +ErrorRegisterTypeLib=Unable to register the type library: %1 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bit +UninstallDisplayNameMark64Bit=64-bit +UninstallDisplayNameMarkAllUsers=All users +UninstallDisplayNameMarkCurrentUser=Current user + +; *** Post-installation errors +ErrorOpeningReadme=An error occurred while trying to open the README file. +ErrorRestartingComputer=Setup was unable to restart the computer. Please do this manually. + +; *** Uninstaller messages +UninstallNotFound=File "%1" does not exist. Cannot uninstall. +UninstallOpenError=File "%1" could not be opened. Cannot uninstall +UninstallUnsupportedVer=The uninstall log file "%1" is in a format not recognized by this version of the uninstaller. Cannot uninstall +UninstallUnknownEntry=An unknown entry (%1) was encountered in the uninstall log +ConfirmUninstall=Are you sure you want to completely remove %1 and all of its components? +UninstallOnlyOnWin64=This installation can only be uninstalled on 64-bit Windows. +OnlyAdminCanUninstall=This installation can only be uninstalled by a user with administrative privileges. +UninstallStatusLabel=Please wait while %1 is removed from your computer. +UninstalledAll=%1 was successfully removed from your computer. +UninstalledMost=%1 uninstall complete.%n%nSome elements could not be removed. These can be removed manually. +UninstalledAndNeedsRestart=To complete the uninstallation of %1, your computer must be restarted.%n%nWould you like to restart now? +UninstallDataCorrupted="%1" file is corrupted. Cannot uninstall + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Remove Shared File? +ConfirmDeleteSharedFile2=The system indicates that the following shared file is no longer in use by any programs. Would you like for Uninstall to remove this shared file?%n%nIf any programs are still using this file and it is removed, those programs may not function properly. If you are unsure, choose No. Leaving the file on your system will not cause any harm. +SharedFileNameLabel=File name: +SharedFileLocationLabel=Location: +WizardUninstalling=Uninstall Status +StatusUninstalling=Uninstalling %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Installing %1. +ShutdownBlockReasonUninstallingApp=Uninstalling %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 version %2 +AdditionalIcons=Additional shortcuts: +CreateDesktopIcon=Create a &desktop shortcut +CreateQuickLaunchIcon=Create a &Quick Launch shortcut +ProgramOnTheWeb=%1 on the Web +UninstallProgram=Uninstall %1 +LaunchProgram=Launch %1 +AssocFileExtension=&Associate %1 with the %2 file extension +AssocingFileExtension=Associating %1 with the %2 file extension... +AutoStartProgramGroupDescription=Startup: +AutoStartProgram=Automatically start %1 +AddonHostProgramNotFound=%1 could not be located in the folder you selected.%n%nDo you want to continue anyway? diff --git a/installer/Languages/Japanese.isl b/installer/Languages/Japanese.isl new file mode 100644 index 0000000000..df7f8450d9 --- /dev/null +++ b/installer/Languages/Japanese.isl @@ -0,0 +1,367 @@ +; *** Inno Setup version 6.1.0+ Japanese messages *** +; +; Maintained by Koichi Shirasuka (shirasuka@eugrid.co.jp) +; +; Translation based on Ryou Minakami (ryou32jp@yahoo.co.jp) +; +; $jrsoftware: issrc/Files/Languages/Japanese.isl,v 1.6 2010/03/08 07:50:01 mlaan Exp $ + +[LangOptions] +LanguageName=<65E5><672C><8A9E> +LanguageID=$0411 +LanguageCodePage=932 + +[Messages] + +; *** Application titles +SetupAppTitle=ZbgAbv +SetupWindowTitle=%1 ZbgAbv +UninstallAppTitle=ACXg[ +UninstallAppFullTitle=%1 ACXg[ + +; *** Misc. common +InformationTitle= +ConfirmTitle=mF +ErrorTitle=G[ + +; *** SetupLdr messages +SetupLdrStartupMessage=%1 CXg[܂Bs܂H +LdrCannotCreateTemp=ꎞt@C쐬ł܂BZbgAbv𒆎~܂B +LdrCannotExecTemp=ꎞtH_[̃t@Csł܂BZbgAbv𒆎~܂B + +; *** Startup error messages +LastErrorMessage=%1.%n%nG[ %2: %3 +SetupFileMissing=t@C %1 ‚܂B邩VZbgAbvvO肵ĂB +SetupFileCorrupt=ZbgAbvt@CĂ܂BVZbgAbvvO肵ĂB +SetupFileCorruptOrWrongVer=ZbgAbvt@CĂ邩Ão[W̃ZbgAbvƌ݊܂B邩VZbgAbvvO肵ĂB +InvalidParameter=R}hCɕsȃp[^[n܂:%n%n%1 +SetupAlreadyRunning=ZbgAbv͊ɎsłB +WindowsVersionNotSupported=̃vO͂g̃o[W Windows T|[gĂ܂B +WindowsServicePackRequired=̃vO̎sɂ %1 Service Pack %2 ȍ~KvłB +NotOnThisPlatform=̃vO %1 ł͓삵܂B +OnlyOnThisPlatform=̃vO̎sɂ %1 KvłB +OnlyOnTheseArchitectures=̃vO%n%n%1vZbT[ Windows ɂCXg[ł܂B +WinVersionTooLowError=̃vO̎sɂ %1 %2 ȍ~KvłB +WinVersionTooHighError=̃vO %1 %2 ȍ~ł͓삵܂B +AdminPrivilegesRequired=̃vOCXg[邽߂ɂ͊Ǘ҂ƂăOCKv܂B +PowerUserPrivilegesRequired=̃vOCXg[邽߂ɂ͊Ǘ҂܂̓p[[U[ƂăOCKv܂B +SetupAppRunningError=ZbgAbv͎s %1 o܂B%n%nJĂAvP[Vׂĕ‚ĂuOKvNbNĂBuLZvNbNƁAZbgAbvI܂B +UninstallAppRunningError=ACXg[͎s %1 o܂B%n%nJĂAvP[Vׂĕ‚ĂuOKvNbNĂBuLZvNbNƁAZbgAbvI܂B + +; *** Startup questions +PrivilegesRequiredOverrideTitle=CXg[[h̑I +PrivilegesRequiredOverrideInstruction=CXg[[hIĂ +PrivilegesRequiredOverrideText1=%1 ׂ͂Ẵ[U[ (ǗҌKvł) ܂݂͌̃[U[pɃCXg[ł܂B +PrivilegesRequiredOverrideText2=%1 ݂͌̃[U[܂ׂ͂Ẵ[U[p (ǗҌKvł) ɃCXg[ł܂B +PrivilegesRequiredOverrideAllUsers=ׂẴ[U[pɃCXg[(&A) +PrivilegesRequiredOverrideAllUsersRecommended=ׂẴ[U[pɃCXg[(&A) () +PrivilegesRequiredOverrideCurrentUser=݂̃[U[pɃCXg[(&M) +PrivilegesRequiredOverrideCurrentUserRecommended=݂̃[U[pɃCXg[(&M) () + +; *** Misc. errors +ErrorCreatingDir=fBNg %1 쐬ɃG[܂B +ErrorTooManyFilesInDir=fBNg %1 Ƀt@C쐬ɃG[܂Bt@C̐܂B + +; *** Setup common messages +ExitSetupTitle=ZbgAbvI +ExitSetupMessage=ZbgAbvƂ͊Ă܂BŃZbgAbv𒆎~ƃvO̓CXg[܂B%n%n߂ăCXg[ꍇ́AxZbgAbvsĂB%n%nZbgAbvI܂H +AboutSetupMenuItem=ZbgAbvɂ‚(&A)... +AboutSetupTitle=ZbgAbvɂ‚ +AboutSetupMessage=%1 %2%n%3%n%n%1 z[y[W:%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< ߂(&B) +ButtonNext=(&N) > +ButtonInstall=CXg[(&I) +ButtonOK=OK +ButtonCancel=LZ +ButtonYes=͂(&Y) +ButtonYesToAll=ׂĂ͂(&A) +ButtonNo=(&N) +ButtonNoToAll=ׂĂ(&O) +ButtonFinish=(&F) +ButtonBrowse=Q(&B)... +ButtonWizardBrowse=Q(&R) +ButtonNewFolder=VtH_[(&M) + +; *** "Select Language" dialog messages +SelectLanguageTitle=ZbgAbvɎgp錾̑I +SelectLanguageLabel=CXg[ɗp錾IłB + +; *** Common wizard text +ClickNext=sɂ́uցvAZbgAbvIɂ́uLZvNbNĂB +BeveledLabel= +BrowseDialogTitle=tH_[Q +BrowseDialogLabel=XgtH_[I OK ĂB +NewFolderName=VtH_[ + +; *** "Welcome" wizard page +WelcomeLabel1=[name] ZbgAbvEBU[h̊Jn +WelcomeLabel2=̃vO͂gp̃Rs[^[ [name/ver] CXg[܂B%n%nsOɑ̃AvP[VׂďIĂB + +; *** "Password" wizard page +WizardPassword=pX[h +PasswordLabel1=̃CXg[vO̓pX[hɂĕی삳Ă܂B +PasswordLabel3=pX[h͂āuցvNbNĂBpX[h͑啶Əʂ܂B +PasswordEditLabel=pX[h(&P): +IncorrectPassword=͂ꂽpX[h܂Bx͂ȂĂB + +; *** "License Agreement" wizard page +WizardLicense=gp_񏑂̓ +LicenseLabel=sOɈȉ̏dvȏǂ݂B +LicenseLabel3=ȉ̎gp_񏑂ǂ݂BCXg[𑱍sɂ͂̌_񏑂ɓӂKv܂B +LicenseAccepted=ӂ(&A) +LicenseNotAccepted=ӂȂ(&D) + +; *** "Information" wizard pages +WizardInfoBefore= +InfoBeforeLabel=sOɈȉ̏dvȏǂ݂B +InfoBeforeClickLabel=ZbgAbv𑱍sɂ́uցvNbNĂB +WizardInfoAfter= +InfoAfterLabel=sOɈȉ̏dvȏǂ݂B +InfoAfterClickLabel=ZbgAbv𑱍sɂ́uցvNbNĂB + +; *** "User Information" wizard page +WizardUserInfo=[U[ +UserInfoDesc=[U[͂ĂB +UserInfoName=[U[(&U): +UserInfoOrg=gD(&O): +UserInfoSerial=VAԍ(&S): +UserInfoNameRequired=[U[͂ĂB + +; *** "Select Destination Location" wizard page +WizardSelectDir=CXg[̎w +SelectDirDesc=[name] ̃CXg[w肵ĂB +SelectDirLabel3=[name] CXg[tH_w肵āAuցvNbNĂB +SelectDirBrowseLabel=ɂ́uցvNbNĂBʂ̃tH_[Iɂ́uQƁvNbNĂB +DiskSpaceGBLabel=̃vO͍Œ [gb] GB ̃fBXN󂫗̈KvƂ܂B +DiskSpaceMBLabel=̃vO͍Œ [mb] MB ̃fBXN󂫗̈KvƂ܂B +CannotInstallToNetworkDrive=lbg[NhCuɃCXg[邱Ƃ͂ł܂B +CannotInstallToUNCPath=UNC pXɃCXg[邱Ƃ͂ł܂B +InvalidPath=hCu܂ފSȃpX͂ĂB%n%nFC:\APP%n%n܂ UNC `̃pX͂ĂB%n%nF\\server\share +InvalidDrive=w肵hCu܂ UNC pX‚ȂANZXł܂Bʂ̃pXw肵ĂB +DiskSpaceWarningTitle=fBXN󂫗̈̕s +DiskSpaceWarning=CXg[ɂ͍Œ %1 KB ̃fBXN󂫗̈悪KvłAw肳ꂽhCuɂ %2 KB ̋󂫗̈悵܂B%n%n̂܂ܑs܂H +DirNameTooLong=hCu܂̓pX߂܂B +InvalidDirName=tH_[łB +BadDirName32=ȉ̕܂ރtH_[͎wł܂B:%n%n%1 +DirExistsTitle=̃tH_[ +DirExists=tH_[ %n%n%1%n%nɑ݂܂B̂܂܂̃tH_[փCXg[܂H +DirDoesntExistTitle=tH_[‚܂B +DirDoesntExist=tH_[ %n%n%1%n%n‚܂BVtH_[쐬܂H + +; *** "Select Components" wizard page +WizardSelectComponents=R|[lg̑I +SelectComponentsDesc=CXg[R|[lgIĂB +SelectComponentsLabel2=CXg[R|[lgIĂBCXg[Kv̂ȂR|[lg̓`FbNOĂBsɂ́uցvNbNĂB +FullInstallation=tCXg[ +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=RpNgCXg[ +CustomInstallation=JX^CXg[ +NoUninstallWarningTitle=̃R|[lg +NoUninstallWarning=ZbgAbv͈ȉ̃R|[lgɃCXg[Ă邱Ƃo܂B%n%n%1%n%ñR|[lg̑IĂACXg[͂܂B%n%n̂܂ܑs܂H +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=݂̑I͍Œ [gb] GB ̃fBXN󂫗̈KvƂ܂B +ComponentsDiskSpaceMBLabel=݂̑I͍Œ [mb] MB ̃fBXN󂫗̈KvƂ܂B + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=lj^XN̑I +SelectTasksDesc=slj^XNIĂB +SelectTasksLabel2=[name] CXg[Ɏslj^XNIāAuցvNbNĂB + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=X^[gj[tH_[̎w +SelectStartMenuFolderDesc=vÕV[gJbg쐬ꏊw肵ĂB +SelectStartMenuFolderLabel3=ZbgAbṽ͎X^[gj[tH_[ɃvÕV[gJbg쐬܂B +SelectStartMenuFolderBrowseLabel=ɂ́uցvNbNĂBႤtH_[Iɂ́uQƁvNbNĂB +MustEnterGroupName=tH_[w肵ĂB +GroupNameTooLong=tH_[܂̓pX߂܂B +InvalidGroupName=tH_[łB +BadGroupName=̕܂ރtH_[͎wł܂:%n%n%1 +NoProgramGroupCheck2=X^[gj[tH_[쐬Ȃ(&D) + +; *** "Ready to Install" wizard page +WizardReady=CXg[ +ReadyLabel1=gp̃Rs[^ [name] CXg[鏀ł܂B +ReadyLabel2a=CXg[𑱍sɂ́uCXg[vAݒ̊mFύXsɂ́u߂vNbNĂB +ReadyLabel2b=CXg[𑱍sɂ́uCXg[vNbNĂB +ReadyMemoUserInfo=[U[: +ReadyMemoDir=CXg[: +ReadyMemoType=ZbgAbv̎: +ReadyMemoComponents=IR|[lg: +ReadyMemoGroup=X^[gj[tH_[: +ReadyMemoTasks=lj^XNꗗ: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=lj̃t@C_E[hĂ܂... +ButtonStopDownload=_E[h𒆎~(&S) +StopDownload=_E[h𒆎~Ă낵łH +ErrorDownloadAborted=_E[h𒆎~܂ +ErrorDownloadFailed=_E[hɎs܂: %1 %2 +ErrorDownloadSizeFailed=TCY̎擾Ɏs܂: %1 %2 +ErrorFileHash1=t@C̃nbVɎs܂: %1 +ErrorFileHash2=ȃt@CnbV: \ꂽl %1, ۂ̒l %2 +ErrorProgress=Ȑis: %1 / %2 +ErrorFileSize=ȃt@CTCY: \ꂽl %1, ۂ̒l %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=CXg[ +PreparingDesc=gp̃Rs[^[ [name] CXg[鏀Ă܂B +PreviousInstallNotCompleted=OsAvP[ṼCXg[܂͍폜Ă܂Bɂ̓Rs[^[ċNKv܂B%n%n[name] ̃CXg[邽߂ɂ́AċNɂxZbgAbvsĂB +CannotContinue=ZbgAbv𑱍sł܂BuLZvNbNăZbgAbvIĂB +ApplicationsFound=ȉ̃AvP[VZbgAbvɕKvȃt@CgpĂ܂BZbgAbvɎIɃAvP[VI邱Ƃ𐄏܂B +ApplicationsFound2=ȉ̃AvP[VZbgAbvɕKvȃt@CgpĂ܂BZbgAbvɎIɃAvP[VI邱Ƃ𐄏܂BCXg[̊AZbgAbv̓AvP[V̍ċN݂܂B +CloseApplications=IɃAvP[VI(&A) +DontCloseApplications=AvP[VIȂ(&D) +ErrorCloseApplications=ZbgAbvׂ͂ẴAvP[VIɏI邱Ƃł܂łBZbgAbv𑱍sOɁAXV̕Kvȃt@CgpĂ邷ׂẴAvP[VI邱Ƃ𐄏܂B +PrepareToInstallNeedsRestart=ZbgAbv̓Rs[^[ċNKv܂BRs[^[ċNAZbgAbvēxs [name] ̃CXg[ĂB%n%nɍċN܂H? + +; *** "Installing" wizard page +WizardInstalling=CXg[ +InstallingLabel=gp̃Rs[^[ [name] CXg[Ă܂B΂炭҂B + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=[name] ZbgAbvEBU[h̊ +FinishedLabelNoIcons=gp̃Rs[^[ [name] ZbgAbv܂B +FinishedLabel=gp̃Rs[^[ [name] ZbgAbv܂BAvP[Vsɂ̓CXg[ꂽV[gJbgIĂB +ClickFinish=ZbgAbvIɂ́uvNbNĂB +FinishedRestartLabel=[name] ̃CXg[邽߂ɂ́ARs[^[ċNKv܂BɍċN܂H +FinishedRestartMessage=[name] ̃CXg[邽߂ɂ́ARs[^[ċNKv܂B%n%nɍċN܂H +ShowReadmeCheck=README t@C\B +YesRadio=ɍċN(&Y) +NoRadio=Ŏ蓮ōċN(&N) +; used for example as 'Run MyProg.exe' +RunEntryExec=%1 ̎s +; used for example as 'View Readme.txt' +RunEntryShellExec=%1 ̕\ + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=fBXN̑} +SelectDiskLabel2=fBXN %1 }AuOKvNbNĂB%n%ñfBXÑt@Cɕ\ĂtH_[ȊȌꏊɂꍇ́ApX͂邩uQƁv{^NbNĂB +PathLabel=pX(&P): +FileNotInDir2=t@C %1 %2 Ɍ‚܂BfBXN}邩Aʂ̃tH_[w肵ĂB +SelectDirectoryLabel=̃fBXN̂ꏊw肵ĂB + +; *** Installation phase messages +SetupAborted=ZbgAbv͊Ă܂B%n%nĂAxZbgAbvsĂB +AbortRetryIgnoreSelectAction=ANVIĂ +AbortRetryIgnoreRetry=Ďs(&T) +AbortRetryIgnoreIgnore=G[𖳎đs(&I) +AbortRetryIgnoreCancel=CXg[LZ + +; *** Installation status messages +StatusClosingApplications=AvP[VIĂ܂... +StatusCreateDirs=tH_[쐬Ă܂... +StatusExtractFiles=t@CWJĂ܂... +StatusCreateIcons=V|gJbg쐬Ă܂... +StatusCreateIniEntries=INIt@Cݒ肵Ă܂... +StatusCreateRegistryEntries=WXgݒ肵Ă܂... +StatusRegisterFiles=t@Co^Ă܂... +StatusSavingUninstall=ACXg[ۑĂ܂... +StatusRunProgram=CXg[Ă܂... +StatusRestartingApplications=AvP[VċNĂ܂... +StatusRollback=ύXɖ߂Ă܂... + +; *** Misc. errors +ErrorInternal2=G[: %1 +ErrorFunctionFailedNoCode=%1 G[ +ErrorFunctionFailed=%1 G[: R[h %2 +ErrorFunctionFailedWithMessage=%1 G[: R[h %2.%n%3 +ErrorExecutingProgram=t@CsG[:%n%1 + +; *** Registry errors +ErrorRegOpenKey=WXgL[I[vG[:%n%1\%2 +ErrorRegCreateKey=WXgL[쐬G[:%n%1\%2 +ErrorRegWriteKey=WXgL[݃G[:%n%1\%2 + +; *** INI errors +ErrorIniEntry=INIt@CGg쐬G[: t@C %1 + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=̃t@CXLbv(&S) (܂) +FileAbortRetryIgnoreIgnoreNotRecommended=G[𖳎đs(&I) (܂) +SourceIsCorrupted=Rs[̃t@CĂ܂B +SourceDoesntExist=Rs[̃t@C %1 ‚܂B +ExistingFileReadOnly2=̃t@C͓ǂݎp̂ߒuł܂B +ExistingFileReadOnlyRetry=ǂݎpĂxȂ(&R) +ExistingFileReadOnlyKeepExisting=̃t@Cc(&K) +ErrorReadingExistingDest=̃t@CǂݍݒɃG[܂: +FileExistsSelectAction=ANVIĂ +FileExists2=t@C͊ɑ݂܂B +FileExistsOverwriteExisting=̃t@C㏑(&O) +FileExistsKeepExisting=̃t@Cێ(&K) +FileExistsOverwriteOrKeepAll=ȍ~̋ɓs(&D) +ExistingFileNewerSelectAction=ANVIĂ +ExistingFileNewer2=ZbgAbvCXg[悤ƂĂ̂Vt@C܂B +ExistingFileNewerOverwriteExisting=̃t@C㏑(&O) +ExistingFileNewerKeepExisting=̃t@Cێ(&K) () +ExistingFileNewerOverwriteOrKeepAll=ȍ~̋ɓs(&D) +ErrorChangingAttr=t@C̑ύXɃG[܂: +ErrorCreatingTemp=Rs[̃tH_[Ƀt@C쐬ɃG[܂: +ErrorReadingSource=Rs[̃t@CǂݍݒɃG[܂: +ErrorCopying=t@CRs[ɃG[܂: +ErrorReplacingExistingFile=̃t@CuɃG[܂: +ErrorRestartReplace=ċNɂu̎sɎs܂: +ErrorRenamingTemp=Rs[tH_[̃t@CύXɃG[܂: +ErrorRegisterServer=DLL/OCX̓o^Ɏs܂: %1 +ErrorRegSvr32Failed=RegSvr32͏IR[h %1 ɂ莸s܂ +ErrorRegisterTypeLib=^CvCuւ̓o^Ɏs܂: %1 + +; *** Uninstall display name markings +UninstallDisplayNameMark=%1 (%2) +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32 rbg +UninstallDisplayNameMark64Bit=64 rbg +UninstallDisplayNameMarkAllUsers=ׂẴ[U[ +UninstallDisplayNameMarkCurrentUser=݂̃[U[ + +; *** Post-installation errors +ErrorOpeningReadme=README t@C̃I[vɎs܂B +ErrorRestartingComputer=Rs[^[̍ċNɎs܂B蓮ōċNĂB + +; *** Uninstaller messages +UninstallNotFound=t@C "%1" ‚܂BACXg[sł܂B +UninstallOpenError=t@C "%1" JƂł܂BACXg[sł܂B +UninstallUnsupportedVer=ACXg[Ot@C "%1" ́Ão[W̃ACXg[vOFłȂ`łBACXg[sł܂B +UninstallUnknownEntry=ACXg[Oɕs̃Gg (%1) ‚܂B +ConfirmUninstall=%1 Ƃ̊֘AR|[lgׂč폜܂B낵łH +UninstallOnlyOnWin64=̃vO64 rbgWindowsł̂݃ACXg[邱Ƃł܂B +OnlyAdminCanUninstall=ACXg[邽߂ɂ͊ǗҌKvłB +UninstallStatusLabel=gp̃Rs[^[ %1 폜Ă܂B΂炭҂B +UninstalledAll=%1 ͂gp̃Rs[^[琳ɍ폜܂B +UninstalledMost=%1 ̃ACXg[܂B%n%n‚̍ڂ폜ł܂łB蓮ō폜ĂB +UninstalledAndNeedsRestart=%1 ̍폜邽߂ɂ́ARs[^[ċNKv܂BɍċN܂H +UninstallDataCorrupted=t@C "%1" Ă܂BACXg[sł܂B + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Lt@C̍폜 +ConfirmDeleteSharedFile2=VXeŁA̋Lt@C͂ǂ̃vOłgpĂ܂B̋Lt@C폜܂H%n%ñvO܂̃t@CgpꍇA폜ƃvO삵ȂȂ鋰ꂪ܂B܂młȂꍇ́uvIĂBVXeɃt@CcĂNƂ͂܂B +SharedFileNameLabel=t@C: +SharedFileLocationLabel=ꏊ: +WizardUninstalling=ACXg[ +StatusUninstalling=%1 ACXg[Ă܂... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=%1 CXg[łB +ShutdownBlockReasonUninstallingApp=%1 ACXg[łB + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 o[W %2 +AdditionalIcons=ACRlj: +CreateDesktopIcon=fXNgbvɃACR쐬(&D) +CreateQuickLaunchIcon=NCbNNACR쐬(&Q) +ProgramOnTheWeb=%1 on the Web +UninstallProgram=%1 ACXg[ +LaunchProgram=%1 s +AssocFileExtension=t@Cgq %2 %1 ֘At܂B +AssocingFileExtension=t@Cgq %2 %1 ֘AtĂ܂... +AutoStartProgramGroupDescription=X^[gAbv: +AutoStartProgram=%1 IɊJn +AddonHostProgramNotFound=IꂽtH_[ %1 ‚܂łB%n%n̂܂ܑs܂H \ No newline at end of file From a2d6482331e88e39786fc030863e6621af0340e8 Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Sat, 2 Jan 2021 09:56:17 +0800 Subject: [PATCH 0312/1024] Create README.md --- installer/Languages/README.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 installer/Languages/README.md diff --git a/installer/Languages/README.md b/installer/Languages/README.md new file mode 100644 index 0000000000..f445bb1cda --- /dev/null +++ b/installer/Languages/README.md @@ -0,0 +1,5 @@ +# Language Files + +### All language files used in inno are archived here. + +If the file name has `(old)` at the end, this language file can be used for `inno setup 5`. From 1119ee6f2f5d8688ab0cb658e50bebadbde4f1fe Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Mon, 4 Jan 2021 22:05:58 +0800 Subject: [PATCH 0313/1024] add Fetch ChineseSimplified.isl step #1469 by berryzplus's advice --- .github/workflows/build-sakura.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/build-sakura.yml b/.github/workflows/build-sakura.yml index f93b306441..a921cc39ab 100644 --- a/.github/workflows/build-sakura.yml +++ b/.github/workflows/build-sakura.yml @@ -66,6 +66,10 @@ jobs: run: build-chm.bat shell: cmd + - name: Fetch ChineseSimplified.isl + run: | + Invoke-WebRequest -OutFile "C:\Program Files (x86)\inno setup 6\Languages\ChineseSimplified.isl" https://raw.githubusercontent.com/jrsoftware/issrc/main/Files/Languages/Unofficial/ChineseSimplified.isl + - name: Build installer with Inno Setup run: build-installer.bat ${{ matrix.platform }} ${{ matrix.config }} shell: cmd From 651530497cc87952583204c127bf8185decd1e0a Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Tue, 5 Jan 2021 22:06:01 +0800 Subject: [PATCH 0314/1024] Update build-sakura.yml --- .github/workflows/build-sakura.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-sakura.yml b/.github/workflows/build-sakura.yml index a921cc39ab..5bbd2b8f69 100644 --- a/.github/workflows/build-sakura.yml +++ b/.github/workflows/build-sakura.yml @@ -66,9 +66,11 @@ jobs: run: build-chm.bat shell: cmd - - name: Fetch ChineseSimplified.isl + - name: Fetch .isl files run: | Invoke-WebRequest -OutFile "C:\Program Files (x86)\inno setup 6\Languages\ChineseSimplified.isl" https://raw.githubusercontent.com/jrsoftware/issrc/main/Files/Languages/Unofficial/ChineseSimplified.isl + Invoke-WebRequest -OutFile "C:\program files (x86)\inno setup 6\Languages\ChineseTraditional.isl" https://raw.githubusercontent.com/jrsoftware/issrc/main/Files/Languages/Unofficial/ChineseTraditional.isl + - name: Build installer with Inno Setup run: build-installer.bat ${{ matrix.platform }} ${{ matrix.config }} From 8d6844dbb168de2c28abe814cf521615357c12c9 Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Tue, 5 Jan 2021 22:06:29 +0800 Subject: [PATCH 0315/1024] Update build-sakura.yml From 0a7e5c74063f9d290c8b7d641a01dc06c056fe70 Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Wed, 6 Jan 2021 21:58:12 +0800 Subject: [PATCH 0316/1024] Update installer/sakura-common.iss Co-authored-by: berryzplus --- installer/sakura-common.iss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/installer/sakura-common.iss b/installer/sakura-common.iss index 8f98f67046..ec95fee5f5 100644 --- a/installer/sakura-common.iss +++ b/installer/sakura-common.iss @@ -48,7 +48,7 @@ MinVersion=6.1 [Languages] Name: "ja"; MessagesFile: "compiler:Languages\Japanese.isl" Name: "en"; MessagesFile: "compiler:Default.isl"; InfoBeforeFile: "instmaterials\info_us.txt" -Name: "zh_hans"; MessagesFile: "compiler:Languages\ChineseSimplified.isl"; InfoBeforeFile: "instmaterials\info_zh_hans.txt" +Name: "zh_hans"; MessagesFile: "Languages\ChineseSimplified.isl"; InfoBeforeFile: "instmaterials\info_zh_hans.txt" Name: "zh_hant"; MessagesFile: "compiler:Languages\ChineseTraditional.isl"; InfoBeforeFile: "instmaterials\info_zh_hant.txt" [CustomMessages] From 31efda079b3b670f7c87484280f1e4628b1dc548 Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Wed, 6 Jan 2021 22:00:13 +0800 Subject: [PATCH 0317/1024] Update build-sakura.yml --- .github/workflows/build-sakura.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.github/workflows/build-sakura.yml b/.github/workflows/build-sakura.yml index 5bbd2b8f69..f93b306441 100644 --- a/.github/workflows/build-sakura.yml +++ b/.github/workflows/build-sakura.yml @@ -66,12 +66,6 @@ jobs: run: build-chm.bat shell: cmd - - name: Fetch .isl files - run: | - Invoke-WebRequest -OutFile "C:\Program Files (x86)\inno setup 6\Languages\ChineseSimplified.isl" https://raw.githubusercontent.com/jrsoftware/issrc/main/Files/Languages/Unofficial/ChineseSimplified.isl - Invoke-WebRequest -OutFile "C:\program files (x86)\inno setup 6\Languages\ChineseTraditional.isl" https://raw.githubusercontent.com/jrsoftware/issrc/main/Files/Languages/Unofficial/ChineseTraditional.isl - - - name: Build installer with Inno Setup run: build-installer.bat ${{ matrix.platform }} ${{ matrix.config }} shell: cmd From ed94086cb1a920a2c00d05f97ce9b42ded4dfe8e Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Wed, 6 Jan 2021 22:01:30 +0800 Subject: [PATCH 0318/1024] Update sakura-common.iss --- installer/sakura-common.iss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/installer/sakura-common.iss b/installer/sakura-common.iss index ec95fee5f5..a447e1dfc9 100644 --- a/installer/sakura-common.iss +++ b/installer/sakura-common.iss @@ -49,7 +49,7 @@ MinVersion=6.1 Name: "ja"; MessagesFile: "compiler:Languages\Japanese.isl" Name: "en"; MessagesFile: "compiler:Default.isl"; InfoBeforeFile: "instmaterials\info_us.txt" Name: "zh_hans"; MessagesFile: "Languages\ChineseSimplified.isl"; InfoBeforeFile: "instmaterials\info_zh_hans.txt" -Name: "zh_hant"; MessagesFile: "compiler:Languages\ChineseTraditional.isl"; InfoBeforeFile: "instmaterials\info_zh_hant.txt" +Name: "zh_hant"; MessagesFile: "Languages\ChineseTraditional.isl"; InfoBeforeFile: "instmaterials\info_zh_hant.txt" [CustomMessages] en.InfoBeforeFile=instmaterials\info_en.txt From 44c810a5fa0c77ae051cfe098ff52096ae4309f6 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Fri, 8 Jan 2021 14:52:21 +0900 Subject: [PATCH 0319/1024] =?UTF-8?q?RECONVERTSTRING=20=E3=81=AE=E7=8B=AC?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E7=BE=A9=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CEditView.h | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/sakura_core/view/CEditView.h b/sakura_core/view/CEditView.h index e237f43adc..a1374d02d9 100644 --- a/sakura_core/view/CEditView.h +++ b/sakura_core/view/CEditView.h @@ -93,19 +93,6 @@ class CColor_Found; #define IDM_JUMPDICT 2001 // 2006.04.10 fon #endif -#if !defined(RECONVERTSTRING) && (WINVER < 0x040A) -typedef struct tagRECONVERTSTRING { - DWORD dwSize; - DWORD dwVersion; - DWORD dwStrLen; - DWORD dwStrOffset; - DWORD dwCompStrLen; - DWORD dwCompStrOffset; - DWORD dwTargetStrLen; - DWORD dwTargetStrOffset; -} RECONVERTSTRING, *PRECONVERTSTRING; -#endif // RECONVERTSTRING - /// マウスからコマンドが実行された場合の上位ビット /// @date 2006.05.19 genta const int CMD_FROM_MOUSE = 2; From 9c39c53d1268ac5eeb020d7a210e7588f2534ee3 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Fri, 8 Jan 2021 14:58:43 +0900 Subject: [PATCH 0320/1024] =?UTF-8?q?tchar=5Fto=5Fwchar=20=E5=89=8A?= =?UTF-8?q?=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CEditView.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index 6dd8ed1916..6c48d3f8ca 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -420,12 +420,6 @@ void CEditView::Close() // イベント // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -//WCHAR→WCHAR変換。 -inline wchar_t tchar_to_wchar(WCHAR tc) -{ - return tc; -} - /* || メッセージディスパッチャ */ From 0488c1579541a9e0da44adf0065a5ea0967bff67 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Mon, 11 Jan 2021 13:19:24 +0900 Subject: [PATCH 0321/1024] =?UTF-8?q?Azure=20Pipelines=E3=81=AEPR=E3=83=93?= =?UTF-8?q?=E3=83=AB=E3=83=89=E3=81=AE=E9=99=A4=E5=A4=96=E3=83=91=E3=82=B9?= =?UTF-8?q?=E3=81=8C=E6=BC=8F=E3=82=8C=E3=81=A6=E3=81=84=E3=81=9F=E3=81=AE?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- azure-pipelines.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 00bfdfd214..af46ffdbaf 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -33,6 +33,7 @@ pr: paths: exclude: - '**/*.md' + - .github/workflows/*.yml - .gitignore - .travis.yml - appveyor.yml From 93ad2bcd534693865b57ef9c0d573ddfaf5a0539 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Mon, 11 Jan 2021 17:25:59 +0900 Subject: [PATCH 0322/1024] =?UTF-8?q?GitHub=E3=81=AE=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=A4=E3=83=AB=E3=82=92Azure=20Pipelines=E3=81=AE=E9=99=A4?= =?UTF-8?q?=E5=A4=96=E3=83=91=E3=82=B9=E3=81=AB=E5=90=AB=E3=82=81=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- azure-pipelines.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index af46ffdbaf..72af482a2d 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -13,7 +13,7 @@ trigger: paths: exclude: - '**/*.md' - - .github/workflows/*.yml + - .github/* - .gitignore - .travis.yml - appveyor.yml @@ -33,7 +33,7 @@ pr: paths: exclude: - '**/*.md' - - .github/workflows/*.yml + - .github/* - .gitignore - .travis.yml - appveyor.yml From a61ccca5e0a14ba648a1c490b140920facb60c97 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 11 Jan 2021 14:36:20 +0900 Subject: [PATCH 0323/1024] =?UTF-8?q?=E9=9D=99=E7=9A=84=E8=A7=A3=E6=9E=90S?= =?UTF-8?q?onarCloud=E3=82=92GitHub=20Actions=E3=81=A7=E5=AE=9F=E8=A1=8C?= =?UTF-8?q?=E3=81=95=E3=81=9B=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/sonarscan.yml | 150 ++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 .github/workflows/sonarscan.yml diff --git a/.github/workflows/sonarscan.yml b/.github/workflows/sonarscan.yml new file mode 100644 index 0000000000..a96bbc9fd0 --- /dev/null +++ b/.github/workflows/sonarscan.yml @@ -0,0 +1,150 @@ +name: SonarCloud + +# Controls when the action will run. Triggers the workflow on push or pull request +# events but only for the master branch +on: + push: + paths-ignore: + - '**/*.md' + - 'ci/**/*' + - .gitignore + - .editorconfig + - appveyor.yml + - azure-pipelines.yml + pull_request_target: + types: [opened, synchronize] + paths-ignore: + - '**/*.md' + - 'ci/**/*' + - .gitignore + - .editorconfig + - appveyor.yml + - azure-pipelines.yml + schedule: + - cron: '45 7 * * FRI' + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + sonar: + name: Scan + runs-on: windows-latest + + env: + BUILD_PLATFORM: x64 + BUILD_CONFIGURATION: Release + SONAR_QUBE_VERSION: '4.5.0.2216' + + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + ref: '${{ github.event.pull_request.head.sha }}' + fetch-depth: 0 + + - name: Setup environment variables + run: | + echo "SONAR_USER_HOME=${{ github.workspace }}" >> $env:GITHUB_ENV + if ('${{ env.GITHUB_BASE_REF }}' -ne '') + { + echo "BASE_SHA=$(git show -s --format=%H ${{ env.GITHUB_BASE_REF }})" >> $env:GITHUB_ENV + } + New-Item -Path .sonar -ItemType Directory + + - name: Cache Sonar Analysis + uses: actions/cache@v2 + with: + path: | + .sonar\cache + .sonar\analysis-cache + key: + sonar-cache-${{ env.SONAR_QUBE_VERSION }}-${{ github.sha }} + restore-keys: + sonar-cache-${{ env.SONAR_QUBE_VERSION }}-${{ env.BASE_SHA }} + + - name: Setup MSBuild + uses: microsoft/setup-msbuild@v1 + + - name: Fetch Build-Wrapper + working-directory: ${{ github.workspace }}\.sonar + run: | + Invoke-WebRequest -OutFile build-wrapper-win-x86.zip https://sonarcloud.io/static/cpp/build-wrapper-win-x86.zip + 7z rn build-wrapper-win-x86.zip build-wrapper-win-x86 build-wrapper + 7z x build-wrapper-win-x86.zip + + - name: Build with Build-Wrapper + env: + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + if: env.SONAR_TOKEN + run: .sonar\build-wrapper\build-wrapper-win-x86-64.exe + --out-dir bw-output + MsBuild.exe + /p:Platform=${{ env.BUILD_PLATFORM }} + /p:Configuration=${{ env.BUILD_CONFIGURATION }} + /t:ReBuild + + - name: Install OpenCppCoverage with XmlExporter + env: + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + if: env.SONAR_TOKEN + working-directory: ${{ runner.temp }} + run: | + choco install OpenCppCoverage -y + Invoke-WebRequest -OutFile XmlExporter-x64.zip https://github.com/berryzplus/XmlExporter/releases/download/v1.0.0/XmlExporter-x64.zip + 7z e XmlExporter-x64.zip + Move-Item -Path XmlExporter.dll -Destination "C:\Program Files\OpenCppCoverage\Plugins\Exporter\xml.dll" + echo "C:\Program Files\OpenCppCoverage" >> $env:GITHUB_PATH + + - name: Run Tests + env: + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + if: env.SONAR_TOKEN + shell: cmd + run: OpenCppCoverage.exe + --export_type xml:tests1-coverage.xml + --modules ${{ github.workspace }}\tests\build\${{ env.BUILD_PLATFORM }}\${{ env.BUILD_CONFIGURATION }}\unittests\tests1.exe + --sources ${{ github.workspace }} + --excluded_sources ${{ github.workspace }}\tests\googletest + --working_dir .\${{ env.BUILD_PLATFORM }}\${{ env.BUILD_CONFIGURATION }} + --cover_children + -- + .\tests\build\${{ env.BUILD_PLATFORM }}\${{ env.BUILD_CONFIGURATION }}\unittests\tests1.exe + --gtest_output=xml:tests1-googletest.xml + + - name: Set up JDK 11 + uses: actions/setup-java@v1 + with: + java-version: 11 + + - name: Fetch SonarScanner + working-directory: ${{ github.workspace }}\.sonar + run: | + Invoke-WebRequest -OutFile sonar-scanner.zip https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-${{ env.SONAR_QUBE_VERSION }}.zip + 7z rn sonar-scanner.zip sonar-scanner-${{ env.SONAR_QUBE_VERSION }} scanner + 7z x sonar-scanner.zip + + - name: Analyze with SonarScanner + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + if: env.SONAR_TOKEN + run: | + if ('${{ github.event_name }}' -eq 'pull_request_target') + { + $env:GITHUB_EVENT_NAME = 'pull_request' + $env:GITHUB_SHA = $(git show -s --format=%H) + $env:GITHUB_REF = 'refs/pull/${{ github.event.number }}/merge' + } + .\.sonar\scanner\bin\sonar-scanner.bat ` + -D"sonar.organization=${{ github.repository_owner }}" ` + -D"sonar.projectKey=$('${{ github.repository }}' -replace '/', '_')" ` + -D"sonar.host.url=https://sonarcloud.io" ` + -D"sonar.sourceEncoding=UTF-8" ` + -D"sonar.sources=." ` + -D"sonar.cfamily.build-wrapper-output=bw-output" ` + -D"sonar.cfamily.cache.enabled=true" ` + -D"sonar.cfamily.cache.path=.sonar\analysis-cache" ` + -D"sonar.cfamily.cppunit.reportPath=tests1-googletest.xml" ` + -D"sonar.cfamily.threads=2" ` + -D"sonar.coverage.exclusions=help\**\*.js,tools\**\*.js" ` + -D"sonar.coverageReportPaths=tests1-coverage.xml" ` + -D"sonar.exclusions=.sonar\**\*,bw-output\**\*,HeaderMake\**\*,tests\build\**\*,tests\googletest\**\*,**\test-*" From 9ac48409927fd148aeba75d03760b59ae979c3f7 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Tue, 12 Jan 2021 12:40:40 +0900 Subject: [PATCH 0324/1024] =?UTF-8?q?HTML=E3=83=98=E3=83=83=E3=83=80?= =?UTF-8?q?=E3=81=AE=E5=85=A8=E7=BD=AE=E6=8F=9B(365=E7=AE=87=E6=89=80)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ・DOCTYPE宣言を付加する。 ・lang="ja"を指定する。 ・適切に改行する(インデントは付加しない)。 --- help/macro/source/gfdl.html | 5 ++++- help/macro/source/index.html | 5 ++++- help/macro/source/reference/block/S_1PageDown_BoxSel.html | 5 ++++- help/macro/source/reference/block/S_1PageUp_BoxSel.html | 5 ++++- help/macro/source/reference/block/S_BeginBoxSelect.html | 5 ++++- help/macro/source/reference/block/S_Down2_BoxSel.html | 5 ++++- help/macro/source/reference/block/S_Down_BoxSel.html | 5 ++++- help/macro/source/reference/block/S_GoFileEnd_BoxSel.html | 5 ++++- help/macro/source/reference/block/S_GoFileTop_BoxSel.html | 5 ++++- help/macro/source/reference/block/S_GoLineEnd_BoxSel.html | 5 ++++- help/macro/source/reference/block/S_GoLineTop_BoxSel.html | 5 ++++- .../source/reference/block/S_GoLogicalLineTop_BoxSel.html | 5 ++++- help/macro/source/reference/block/S_HalfPageDown_BoxSel.html | 5 ++++- help/macro/source/reference/block/S_HalfPageUp_BoxSel.html | 5 ++++- help/macro/source/reference/block/S_Left_BoxSel.html | 5 ++++- help/macro/source/reference/block/S_PageDown_BoxSel.html | 5 ++++- help/macro/source/reference/block/S_PageUp_BoxSel.html | 5 ++++- help/macro/source/reference/block/S_Right_BoxSel.html | 5 ++++- help/macro/source/reference/block/S_Up2_BoxSel.html | 5 ++++- help/macro/source/reference/block/S_Up_BoxSel.html | 5 ++++- help/macro/source/reference/block/S_WordLeft_BoxSel.html | 5 ++++- help/macro/source/reference/block/S_WordRight_BoxSel.html | 5 ++++- help/macro/source/reference/block/index.html | 5 ++++- help/macro/source/reference/change/S_AutoToSJIS.html | 5 ++++- help/macro/source/reference/change/S_Base64Decode.html | 5 ++++- .../source/reference/change/S_CodeCnvUNICODEBEtoSJIS.html | 5 ++++- .../source/reference/change/S_CodeCnvUNICODEtoSJIS.html | 5 ++++- help/macro/source/reference/change/S_EUCtoSJIS.html | 5 ++++- help/macro/source/reference/change/S_HanKataToZenHira.html | 5 ++++- help/macro/source/reference/change/S_HanKataToZenKata.html | 5 ++++- help/macro/source/reference/change/S_JIStoSJIS.html | 5 ++++- help/macro/source/reference/change/S_SJIStoEUC.html | 5 ++++- help/macro/source/reference/change/S_SJIStoJIS.html | 5 ++++- help/macro/source/reference/change/S_SJIStoUTF7.html | 5 ++++- help/macro/source/reference/change/S_SJIStoUTF8.html | 5 ++++- help/macro/source/reference/change/S_SPACEToTAB.html | 5 ++++- help/macro/source/reference/change/S_TABToSPACE.html | 5 ++++- help/macro/source/reference/change/S_ToHanEi.html | 5 ++++- help/macro/source/reference/change/S_ToHankaku.html | 5 ++++- help/macro/source/reference/change/S_ToHankata.html | 5 ++++- help/macro/source/reference/change/S_ToLower.html | 5 ++++- help/macro/source/reference/change/S_ToUpper.html | 5 ++++- help/macro/source/reference/change/S_ToZenEi.html | 5 ++++- help/macro/source/reference/change/S_ToZenHira.html | 5 ++++- help/macro/source/reference/change/S_ToZenKata.html | 5 ++++- help/macro/source/reference/change/S_UTF7toSJIS.html | 5 ++++- help/macro/source/reference/change/S_UTF8toSJIS.html | 5 ++++- help/macro/source/reference/change/S_Uudecode.html | 5 ++++- help/macro/source/reference/change/index.html | 5 ++++- help/macro/source/reference/clipboard/S_AddTail.html | 5 ++++- help/macro/source/reference/clipboard/S_Copy.html | 5 ++++- help/macro/source/reference/clipboard/S_CopyAddCRLF.html | 5 ++++- help/macro/source/reference/clipboard/S_CopyCRLF.html | 5 ++++- help/macro/source/reference/clipboard/S_CopyColorHtml.html | 5 ++++- .../reference/clipboard/S_CopyColorHtmlWithLineNumber.html | 5 ++++- help/macro/source/reference/clipboard/S_CopyDirPath.html | 5 ++++- help/macro/source/reference/clipboard/S_CopyFilename.html | 5 ++++- help/macro/source/reference/clipboard/S_CopyKeyBindList.html | 5 ++++- help/macro/source/reference/clipboard/S_CopyLines.html | 5 ++++- .../source/reference/clipboard/S_CopyLinesAsPassage.html | 5 ++++- .../reference/clipboard/S_CopyLinesWithLineNumber.html | 5 ++++- help/macro/source/reference/clipboard/S_CopyPath.html | 5 ++++- help/macro/source/reference/clipboard/S_CopyTag.html | 5 ++++- help/macro/source/reference/clipboard/S_Cut.html | 5 ++++- help/macro/source/reference/clipboard/S_InsBoxText.html | 5 ++++- help/macro/source/reference/clipboard/S_InsText.html | 5 ++++- help/macro/source/reference/clipboard/S_Paste.html | 5 ++++- help/macro/source/reference/clipboard/S_PasteBox.html | 5 ++++- help/macro/source/reference/clipboard/index.html | 5 ++++- help/macro/source/reference/config/S_ChangeType.html | 5 ++++- help/macro/source/reference/config/S_ExecCommand.html | 5 ++++- help/macro/source/reference/config/S_ExecCommandDialog.html | 5 ++++- help/macro/source/reference/config/S_OptionCommon.html | 5 ++++- help/macro/source/reference/config/S_OptionFavorite.html | 5 ++++- help/macro/source/reference/config/S_OptionType.html | 5 ++++- help/macro/source/reference/config/S_SelectCountMode.html | 5 ++++- help/macro/source/reference/config/S_SelectFont.html | 5 ++++- help/macro/source/reference/config/S_SetFontSize.html | 5 ++++- help/macro/source/reference/config/S_SetMsgQuoteStr.html | 5 ++++- help/macro/source/reference/config/S_ShowFunckey.html | 5 ++++- help/macro/source/reference/config/S_ShowStatusbar.html | 5 ++++- help/macro/source/reference/config/S_ShowTab.html | 5 ++++- help/macro/source/reference/config/S_ShowToolbar.html | 5 ++++- help/macro/source/reference/config/S_TextWrapMethod.html | 5 ++++- help/macro/source/reference/config/S_TypeList.html | 5 ++++- help/macro/source/reference/config/S_WrapWindowWidth.html | 5 ++++- help/macro/source/reference/config/index.html | 5 ++++- help/macro/source/reference/cursor/S_1PageDown.html | 5 ++++- help/macro/source/reference/cursor/S_1PageUp.html | 5 ++++- help/macro/source/reference/cursor/S_CurLineCenter.html | 5 ++++- help/macro/source/reference/cursor/S_Down.html | 5 ++++- help/macro/source/reference/cursor/S_Down2.html | 5 ++++- help/macro/source/reference/cursor/S_F_WndScrollDown.html | 5 ++++- help/macro/source/reference/cursor/S_F_WndScrollUp.html | 5 ++++- help/macro/source/reference/cursor/S_GoFileEnd.html | 5 ++++- help/macro/source/reference/cursor/S_GoFileTop.html | 5 ++++- help/macro/source/reference/cursor/S_GoLineEnd.html | 5 ++++- help/macro/source/reference/cursor/S_GoLineTop.html | 5 ++++- help/macro/source/reference/cursor/S_GoNextParagraph.html | 5 ++++- help/macro/source/reference/cursor/S_GoPrevParagraph.html | 5 ++++- help/macro/source/reference/cursor/S_HalfPageDown.html | 5 ++++- help/macro/source/reference/cursor/S_HalfPageUp.html | 5 ++++- help/macro/source/reference/cursor/S_Left.html | 5 ++++- help/macro/source/reference/cursor/S_MoveCursor.html | 5 ++++- help/macro/source/reference/cursor/S_MoveCursorLayout.html | 5 ++++- help/macro/source/reference/cursor/S_MoveHistNext.html | 5 ++++- help/macro/source/reference/cursor/S_MoveHistPrev.html | 5 ++++- help/macro/source/reference/cursor/S_MoveHistSet.html | 5 ++++- help/macro/source/reference/cursor/S_PageDown.html | 5 ++++- help/macro/source/reference/cursor/S_PageUp.html | 5 ++++- help/macro/source/reference/cursor/S_Right.html | 5 ++++- help/macro/source/reference/cursor/S_Up.html | 5 ++++- help/macro/source/reference/cursor/S_Up2.html | 5 ++++- help/macro/source/reference/cursor/S_WheelDown.html | 5 ++++- help/macro/source/reference/cursor/S_WheelLeft.html | 5 ++++- help/macro/source/reference/cursor/S_WheelPageDown.html | 5 ++++- help/macro/source/reference/cursor/S_WheelPageLeft.html | 5 ++++- help/macro/source/reference/cursor/S_WheelPageRight.html | 5 ++++- help/macro/source/reference/cursor/S_WheelPageUp.html | 5 ++++- help/macro/source/reference/cursor/S_WheelRight.html | 5 ++++- help/macro/source/reference/cursor/S_WheelUp.html | 5 ++++- help/macro/source/reference/cursor/S_WordLeft.html | 5 ++++- help/macro/source/reference/cursor/S_WordRight.html | 5 ++++- help/macro/source/reference/cursor/index.html | 5 ++++- help/macro/source/reference/custom/S_CustMenu1.html | 5 ++++- help/macro/source/reference/custom/S_CustMenu10.html | 5 ++++- help/macro/source/reference/custom/S_CustMenu11.html | 5 ++++- help/macro/source/reference/custom/S_CustMenu12.html | 5 ++++- help/macro/source/reference/custom/S_CustMenu13.html | 5 ++++- help/macro/source/reference/custom/S_CustMenu14.html | 5 ++++- help/macro/source/reference/custom/S_CustMenu15.html | 5 ++++- help/macro/source/reference/custom/S_CustMenu16.html | 5 ++++- help/macro/source/reference/custom/S_CustMenu17.html | 5 ++++- help/macro/source/reference/custom/S_CustMenu18.html | 5 ++++- help/macro/source/reference/custom/S_CustMenu19.html | 5 ++++- help/macro/source/reference/custom/S_CustMenu2.html | 5 ++++- help/macro/source/reference/custom/S_CustMenu20.html | 5 ++++- help/macro/source/reference/custom/S_CustMenu21.html | 5 ++++- help/macro/source/reference/custom/S_CustMenu22.html | 5 ++++- help/macro/source/reference/custom/S_CustMenu23.html | 5 ++++- help/macro/source/reference/custom/S_CustMenu24.html | 5 ++++- help/macro/source/reference/custom/S_CustMenu3.html | 5 ++++- help/macro/source/reference/custom/S_CustMenu4.html | 5 ++++- help/macro/source/reference/custom/S_CustMenu5.html | 5 ++++- help/macro/source/reference/custom/S_CustMenu6.html | 5 ++++- help/macro/source/reference/custom/S_CustMenu7.html | 5 ++++- help/macro/source/reference/custom/S_CustMenu8.html | 5 ++++- help/macro/source/reference/custom/S_CustMenu9.html | 5 ++++- help/macro/source/reference/custom/S_RMenu.html | 5 ++++- help/macro/source/reference/custom/index.html | 5 ++++- help/macro/source/reference/edit/S_Char.html | 5 ++++- help/macro/source/reference/edit/S_CharIme.html | 5 ++++- help/macro/source/reference/edit/S_CutLine.html | 5 ++++- help/macro/source/reference/edit/S_Delete.html | 5 ++++- help/macro/source/reference/edit/S_DeleteBack.html | 5 ++++- help/macro/source/reference/edit/S_DeleteLine.html | 5 ++++- help/macro/source/reference/edit/S_DuplicateLine.html | 5 ++++- help/macro/source/reference/edit/S_IndentSpace.html | 5 ++++- help/macro/source/reference/edit/S_IndentTab.html | 5 ++++- help/macro/source/reference/edit/S_LTrim.html | 5 ++++- help/macro/source/reference/edit/S_LineCutToEnd.html | 5 ++++- help/macro/source/reference/edit/S_LineCutToStart.html | 5 ++++- help/macro/source/reference/edit/S_LineDeleteToEnd.html | 5 ++++- help/macro/source/reference/edit/S_LineDeleteToStart.html | 5 ++++- help/macro/source/reference/edit/S_Merge.html | 5 ++++- help/macro/source/reference/edit/S_RTrim.html | 5 ++++- help/macro/source/reference/edit/S_Redo.html | 5 ++++- help/macro/source/reference/edit/S_SortAsc.html | 5 ++++- help/macro/source/reference/edit/S_SortDesc.html | 5 ++++- help/macro/source/reference/edit/S_Undo.html | 5 ++++- help/macro/source/reference/edit/S_UnindentSpace.html | 5 ++++- help/macro/source/reference/edit/S_UnindentTab.html | 5 ++++- help/macro/source/reference/edit/S_WordCut.html | 5 ++++- help/macro/source/reference/edit/S_WordDelete.html | 5 ++++- help/macro/source/reference/edit/S_WordDeleteToEnd.html | 5 ++++- help/macro/source/reference/edit/S_WordDeleteToStart.html | 5 ++++- help/macro/source/reference/edit/index.html | 5 ++++- help/macro/source/reference/file/S_ActivateSQLPLUS.html | 5 ++++- help/macro/source/reference/file/S_Browse.html | 5 ++++- help/macro/source/reference/file/S_ExecSQLPLUS.html | 5 ++++- help/macro/source/reference/file/S_ExitAll.html | 5 ++++- help/macro/source/reference/file/S_ExitAllEditors.html | 5 ++++- help/macro/source/reference/file/S_FileClose.html | 5 ++++- help/macro/source/reference/file/S_FileCloseOpen.html | 5 ++++- help/macro/source/reference/file/S_FileNew.html | 5 ++++- help/macro/source/reference/file/S_FileOpen.html | 5 ++++- help/macro/source/reference/file/S_FileReopen.html | 5 ++++- help/macro/source/reference/file/S_FileReopenCESU8.html | 5 ++++- help/macro/source/reference/file/S_FileReopenEUC.html | 5 ++++- help/macro/source/reference/file/S_FileReopenJIS.html | 5 ++++- help/macro/source/reference/file/S_FileReopenLatin1.html | 5 ++++- help/macro/source/reference/file/S_FileReopenSJIS.html | 5 ++++- help/macro/source/reference/file/S_FileReopenUNICODE.html | 5 ++++- help/macro/source/reference/file/S_FileReopenUNICODEBE.html | 5 ++++- help/macro/source/reference/file/S_FileReopenUTF7.html | 5 ++++- help/macro/source/reference/file/S_FileReopenUTF8.html | 5 ++++- help/macro/source/reference/file/S_FileSave.html | 5 ++++- help/macro/source/reference/file/S_FileSaveAll.html | 5 ++++- help/macro/source/reference/file/S_FileSaveAs.html | 5 ++++- help/macro/source/reference/file/S_InsFile.html | 5 ++++- help/macro/source/reference/file/S_OpenHfromtoC.html | 5 ++++- help/macro/source/reference/file/S_Print.html | 5 ++++- help/macro/source/reference/file/S_PrintPageSetup.html | 5 ++++- help/macro/source/reference/file/S_PrintPreview.html | 5 ++++- help/macro/source/reference/file/S_PropertyFile.html | 5 ++++- help/macro/source/reference/file/S_PutFile.html | 5 ++++- help/macro/source/reference/file/S_ReadOnly.html | 5 ++++- help/macro/source/reference/file/S_ViewMode.html | 5 ++++- help/macro/source/reference/file/index.html | 5 ++++- help/macro/source/reference/find/S_BookmarkNext.html | 5 ++++- help/macro/source/reference/find/S_BookmarkPattern.html | 5 ++++- help/macro/source/reference/find/S_BookmarkPrev.html | 5 ++++- help/macro/source/reference/find/S_BookmarkReset.html | 5 ++++- help/macro/source/reference/find/S_BookmarkSet.html | 5 ++++- help/macro/source/reference/find/S_BookmarkView.html | 5 ++++- help/macro/source/reference/find/S_BracketPair.html | 5 ++++- help/macro/source/reference/find/S_Compare.html | 5 ++++- help/macro/source/reference/find/S_Diff.html | 5 ++++- help/macro/source/reference/find/S_DiffDialog.html | 5 ++++- help/macro/source/reference/find/S_DiffNext.html | 5 ++++- help/macro/source/reference/find/S_DiffPrev.html | 5 ++++- help/macro/source/reference/find/S_DiffReset.html | 5 ++++- help/macro/source/reference/find/S_DirectTagJump.html | 5 ++++- help/macro/source/reference/find/S_Grep.html | 5 ++++- help/macro/source/reference/find/S_Jump.html | 5 ++++- help/macro/source/reference/find/S_KeywordTagJump.html | 5 ++++- help/macro/source/reference/find/S_Outline.html | 5 ++++- help/macro/source/reference/find/S_Replace.html | 5 ++++- help/macro/source/reference/find/S_ReplaceAll.html | 5 ++++- help/macro/source/reference/find/S_ReplaceDialog.html | 5 ++++- help/macro/source/reference/find/S_SearchClearMark.html | 5 ++++- help/macro/source/reference/find/S_SearchDialog.html | 5 ++++- help/macro/source/reference/find/S_SearchNext.html | 5 ++++- help/macro/source/reference/find/S_SearchPrev.html | 5 ++++- help/macro/source/reference/find/S_SearchStartPos.html | 5 ++++- help/macro/source/reference/find/S_TagJump.html | 5 ++++- help/macro/source/reference/find/S_TagJumpBack.html | 5 ++++- help/macro/source/reference/find/S_TagMake.html | 5 ++++- help/macro/source/reference/find/index.html | 5 ++++- help/macro/source/reference/index.html | 5 ++++- help/macro/source/reference/insert/S_CtrlCode.html | 5 ++++- help/macro/source/reference/insert/S_CtrlCodeDialog.html | 5 ++++- help/macro/source/reference/insert/S_InsertDate.html | 5 ++++- help/macro/source/reference/insert/S_InsertTime.html | 5 ++++- help/macro/source/reference/insert/index.html | 5 ++++- help/macro/source/reference/mode/S_CancelMode.html | 5 ++++- help/macro/source/reference/mode/S_ChgCharSet.html | 5 ++++- help/macro/source/reference/mode/S_ChgmodEOL.html | 5 ++++- help/macro/source/reference/mode/S_ChgmodINS.html | 5 ++++- help/macro/source/reference/mode/index.html | 5 ++++- help/macro/source/reference/other/S_ChangeTabWidth.html | 5 ++++- help/macro/source/reference/other/S_ExpandParameter.html | 5 ++++- help/macro/source/reference/other/S_GetCharCode.html | 5 ++++- help/macro/source/reference/other/S_GetFilename.html | 5 ++++- help/macro/source/reference/other/S_GetLineCode.html | 5 ++++- help/macro/source/reference/other/S_GetLineCount.html | 5 ++++- help/macro/source/reference/other/S_GetLineStr.html | 5 ++++- help/macro/source/reference/other/S_GetSelectColmFrom.html | 5 ++++- help/macro/source/reference/other/S_GetSelectColmTo.html | 5 ++++- help/macro/source/reference/other/S_GetSelectLineFrom.html | 5 ++++- help/macro/source/reference/other/S_GetSelectLineTo.html | 5 ++++- help/macro/source/reference/other/S_GetSelectedString.html | 5 ++++- help/macro/source/reference/other/S_IsInsMode.html | 5 ++++- help/macro/source/reference/other/S_IsPossibleRedo.html | 5 ++++- help/macro/source/reference/other/S_IsPossibleUndo.html | 5 ++++- help/macro/source/reference/other/S_IsTextSelected.html | 5 ++++- help/macro/source/reference/other/S_TraceOut.html | 5 ++++- help/macro/source/reference/other/index.html | 5 ++++- help/macro/source/reference/select/S_1PageDown_Sel.html | 5 ++++- help/macro/source/reference/select/S_1PageUp_Sel.html | 5 ++++- help/macro/source/reference/select/S_BeginSelect.html | 5 ++++- help/macro/source/reference/select/S_Down2_Sel.html | 5 ++++- help/macro/source/reference/select/S_Down_Sel.html | 5 ++++- help/macro/source/reference/select/S_GoFileEnd_Sel.html | 5 ++++- help/macro/source/reference/select/S_GoFileTop_Sel.html | 5 ++++- help/macro/source/reference/select/S_GoLineEnd_Sel.html | 5 ++++- help/macro/source/reference/select/S_GoLineTop_Sel.html | 5 ++++- .../macro/source/reference/select/S_GoNextParagraph_Sel.html | 5 ++++- .../macro/source/reference/select/S_GoPrevParagraph_Sel.html | 5 ++++- help/macro/source/reference/select/S_HalfPageDown_Sel.html | 5 ++++- help/macro/source/reference/select/S_HalfPageUp_Sel.html | 5 ++++- help/macro/source/reference/select/S_Left_Sel.html | 5 ++++- help/macro/source/reference/select/S_PageDown_Sel.html | 5 ++++- help/macro/source/reference/select/S_PageUp_Sel.html | 5 ++++- help/macro/source/reference/select/S_Right_Sel.html | 5 ++++- help/macro/source/reference/select/S_SelectAll.html | 5 ++++- help/macro/source/reference/select/S_SelectLine.html | 5 ++++- help/macro/source/reference/select/S_SelectWord.html | 5 ++++- help/macro/source/reference/select/S_Up2_Sel.html | 5 ++++- help/macro/source/reference/select/S_Up_Sel.html | 5 ++++- help/macro/source/reference/select/S_WordLeft_Sel.html | 5 ++++- help/macro/source/reference/select/S_WordRight_Sel.html | 5 ++++- help/macro/source/reference/select/index.html | 5 ++++- help/macro/source/reference/support/S_About.html | 5 ++++- help/macro/source/reference/support/S_CommandList.html | 5 ++++- help/macro/source/reference/support/S_Complete.html | 5 ++++- help/macro/source/reference/support/S_ExtHelp1.html | 5 ++++- help/macro/source/reference/support/S_ExtHtmlHelp.html | 5 ++++- help/macro/source/reference/support/S_HelpContents.html | 5 ++++- help/macro/source/reference/support/S_HelpSearch.html | 5 ++++- .../source/reference/support/S_ToggleKeyHelpSearch.html | 5 ++++- help/macro/source/reference/support/index.html | 5 ++++- help/macro/source/reference/window/S_ActivateWinOutput.html | 5 ++++- help/macro/source/reference/window/S_CascadeWin.html | 5 ++++- help/macro/source/reference/window/S_GroupClose.html | 5 ++++- help/macro/source/reference/window/S_MaximizeH.html | 5 ++++- help/macro/source/reference/window/S_MaximizeV.html | 5 ++++- help/macro/source/reference/window/S_MinimizeAll.html | 5 ++++- help/macro/source/reference/window/S_NextGroup.html | 5 ++++- help/macro/source/reference/window/S_NextWindow.html | 5 ++++- help/macro/source/reference/window/S_PrevGroup.html | 5 ++++- help/macro/source/reference/window/S_PrevWindow.html | 5 ++++- help/macro/source/reference/window/S_ReDraw.html | 5 ++++- help/macro/source/reference/window/S_SplitWinH.html | 5 ++++- help/macro/source/reference/window/S_SplitWinV.html | 5 ++++- help/macro/source/reference/window/S_SplitWinVH.html | 5 ++++- help/macro/source/reference/window/S_TabCloseLeft.html | 5 ++++- help/macro/source/reference/window/S_TabCloseOther.html | 5 ++++- help/macro/source/reference/window/S_TabCloseRight.html | 5 ++++- help/macro/source/reference/window/S_TabJointNext.html | 5 ++++- help/macro/source/reference/window/S_TabJointPrev.html | 5 ++++- help/macro/source/reference/window/S_TabMoveLeft.html | 5 ++++- help/macro/source/reference/window/S_TabMoveRight.html | 5 ++++- help/macro/source/reference/window/S_TabSeparate.html | 5 ++++- help/macro/source/reference/window/S_TileWinH.html | 5 ++++- help/macro/source/reference/window/S_TileWinV.html | 5 ++++- help/macro/source/reference/window/S_TraceOut.html | 5 ++++- help/macro/source/reference/window/S_WinClose.html | 5 ++++- help/macro/source/reference/window/S_WinCloseAll.html | 5 ++++- help/macro/source/reference/window/S_WindowList.html | 5 ++++- help/macro/source/reference/window/S_WindowTopMost.html | 5 ++++- help/macro/source/reference/window/index.html | 5 ++++- help/macro/source/right.html | 5 ++++- help/macro/source/sample/SampleBookmarkPattern.html | 5 ++++- help/macro/source/sample/SampleChangeTabWidth.html | 5 ++++- help/macro/source/sample/SampleChar.html | 5 ++++- help/macro/source/sample/SampleExpandParameter.html | 5 ++++- help/macro/source/sample/SampleFileSaveAs.html | 5 ++++- help/macro/source/sample/SampleGetCharCode.html | 5 ++++- help/macro/source/sample/SampleGetFilename.html | 5 ++++- help/macro/source/sample/SampleGetLineCode.html | 5 ++++- help/macro/source/sample/SampleGetLineCount.html | 5 ++++- help/macro/source/sample/SampleGetLineStr.html | 5 ++++- help/macro/source/sample/SampleGetSelectedString.html | 5 ++++- help/macro/source/sample/SampleGetSelectxxx.html | 5 ++++- help/macro/source/sample/SampleGoLineTop.html | 5 ++++- help/macro/source/sample/SampleGrep.html | 5 ++++- help/macro/source/sample/SampleIsInsMode.html | 5 ++++- help/macro/source/sample/SampleIsPossibleUndo.html | 5 ++++- help/macro/source/sample/SampleIsTextSelected.html | 5 ++++- help/macro/source/sample/SampleReplaceAll.html | 5 ++++- help/macro/source/sample/SampleSearchNext.html | 5 ++++- help/macro/source/search.html | 5 ++++- help/macro/source/usage/BuildMacro.html | 5 ++++- help/macro/source/usage/ExecMacro.html | 5 ++++- help/macro/source/usage/MacroType.html | 5 ++++- help/macro/source/usage/MessageBox.html | 5 ++++- help/macro/source/usage/clipmacro.html | 5 ++++- help/macro/source/usage/func_name.html | 5 ++++- help/macro/source/usage/index.html | 5 ++++- help/macro/source/usage/keymacro.html | 5 ++++- help/macro/source/usage/perlscript.html | 5 ++++- help/macro/source/usage/popup.html | 5 ++++- help/macro/source/usage/scriptcontrol.html | 5 ++++- help/macro/source/usage/wsc.html | 5 ++++- 365 files changed, 1460 insertions(+), 365 deletions(-) diff --git a/help/macro/source/gfdl.html b/help/macro/source/gfdl.html index 2ac48d4d9c..108a2a6eba 100644 --- a/help/macro/source/gfdl.html +++ b/help/macro/source/gfdl.html @@ -1,4 +1,7 @@ -このヘルプファイルについて + + + +このヘルプファイルについて diff --git a/help/macro/source/index.html b/help/macro/source/index.html index f19c038edd..93a3a53b08 100644 --- a/help/macro/source/index.html +++ b/help/macro/source/index.html @@ -1,4 +1,7 @@ -サクラエディタマクロ + + + +サクラエディタマクロ diff --git a/help/macro/source/reference/block/S_1PageDown_BoxSel.html b/help/macro/source/reference/block/S_1PageDown_BoxSel.html index 2adebc9196..a199c842bd 100644 --- a/help/macro/source/reference/block/S_1PageDown_BoxSel.html +++ b/help/macro/source/reference/block/S_1PageDown_BoxSel.html @@ -1,4 +1,7 @@ -S_1PageDown_BoxSel + + + +S_1PageDown_BoxSel diff --git a/help/macro/source/reference/block/S_1PageUp_BoxSel.html b/help/macro/source/reference/block/S_1PageUp_BoxSel.html index dde630a4cf..85740e1380 100644 --- a/help/macro/source/reference/block/S_1PageUp_BoxSel.html +++ b/help/macro/source/reference/block/S_1PageUp_BoxSel.html @@ -1,4 +1,7 @@ -S_1PageUp_BoxSel + + + +S_1PageUp_BoxSel diff --git a/help/macro/source/reference/block/S_BeginBoxSelect.html b/help/macro/source/reference/block/S_BeginBoxSelect.html index 9e6c9bdee5..98e813e5a4 100644 --- a/help/macro/source/reference/block/S_BeginBoxSelect.html +++ b/help/macro/source/reference/block/S_BeginBoxSelect.html @@ -1,4 +1,7 @@ -S_BeginBoxSelect + + + +S_BeginBoxSelect diff --git a/help/macro/source/reference/block/S_Down2_BoxSel.html b/help/macro/source/reference/block/S_Down2_BoxSel.html index 8f91d2dc80..6760e8dea5 100644 --- a/help/macro/source/reference/block/S_Down2_BoxSel.html +++ b/help/macro/source/reference/block/S_Down2_BoxSel.html @@ -1,4 +1,7 @@ -S_Down2_BoxSel + + + +S_Down2_BoxSel diff --git a/help/macro/source/reference/block/S_Down_BoxSel.html b/help/macro/source/reference/block/S_Down_BoxSel.html index 19214c104e..dec19ecbd4 100644 --- a/help/macro/source/reference/block/S_Down_BoxSel.html +++ b/help/macro/source/reference/block/S_Down_BoxSel.html @@ -1,4 +1,7 @@ -S_Down_BoxSel + + + +S_Down_BoxSel diff --git a/help/macro/source/reference/block/S_GoFileEnd_BoxSel.html b/help/macro/source/reference/block/S_GoFileEnd_BoxSel.html index 9df6d9dc15..e12c8f09e6 100644 --- a/help/macro/source/reference/block/S_GoFileEnd_BoxSel.html +++ b/help/macro/source/reference/block/S_GoFileEnd_BoxSel.html @@ -1,4 +1,7 @@ -S_GoFileEnd_BoxSel + + + +S_GoFileEnd_BoxSel diff --git a/help/macro/source/reference/block/S_GoFileTop_BoxSel.html b/help/macro/source/reference/block/S_GoFileTop_BoxSel.html index 930f2cb296..6e7bf9a683 100644 --- a/help/macro/source/reference/block/S_GoFileTop_BoxSel.html +++ b/help/macro/source/reference/block/S_GoFileTop_BoxSel.html @@ -1,4 +1,7 @@ -S_GoFileTop_BoxSel + + + +S_GoFileTop_BoxSel diff --git a/help/macro/source/reference/block/S_GoLineEnd_BoxSel.html b/help/macro/source/reference/block/S_GoLineEnd_BoxSel.html index 01b8b5087f..852f8de8d1 100644 --- a/help/macro/source/reference/block/S_GoLineEnd_BoxSel.html +++ b/help/macro/source/reference/block/S_GoLineEnd_BoxSel.html @@ -1,4 +1,7 @@ -S_GoLineEnd_BoxSel + + + +S_GoLineEnd_BoxSel diff --git a/help/macro/source/reference/block/S_GoLineTop_BoxSel.html b/help/macro/source/reference/block/S_GoLineTop_BoxSel.html index 593cadb501..a0318d074d 100644 --- a/help/macro/source/reference/block/S_GoLineTop_BoxSel.html +++ b/help/macro/source/reference/block/S_GoLineTop_BoxSel.html @@ -1,4 +1,7 @@ -S_GoLineTop_BoxSel + + + +S_GoLineTop_BoxSel diff --git a/help/macro/source/reference/block/S_GoLogicalLineTop_BoxSel.html b/help/macro/source/reference/block/S_GoLogicalLineTop_BoxSel.html index bebeb9527e..ae4042ea93 100644 --- a/help/macro/source/reference/block/S_GoLogicalLineTop_BoxSel.html +++ b/help/macro/source/reference/block/S_GoLogicalLineTop_BoxSel.html @@ -1,4 +1,7 @@ -S_GoLogicalLineTop_BoxSel + + + +S_GoLogicalLineTop_BoxSel diff --git a/help/macro/source/reference/block/S_HalfPageDown_BoxSel.html b/help/macro/source/reference/block/S_HalfPageDown_BoxSel.html index b0f6d7fb7c..d95c2a70b3 100644 --- a/help/macro/source/reference/block/S_HalfPageDown_BoxSel.html +++ b/help/macro/source/reference/block/S_HalfPageDown_BoxSel.html @@ -1,4 +1,7 @@ -S_HalfPageDown_BoxSel + + + +S_HalfPageDown_BoxSel diff --git a/help/macro/source/reference/block/S_HalfPageUp_BoxSel.html b/help/macro/source/reference/block/S_HalfPageUp_BoxSel.html index 1137da01fa..1c96546f6d 100644 --- a/help/macro/source/reference/block/S_HalfPageUp_BoxSel.html +++ b/help/macro/source/reference/block/S_HalfPageUp_BoxSel.html @@ -1,4 +1,7 @@ -S_HalfPageUp_BoxSel + + + +S_HalfPageUp_BoxSel diff --git a/help/macro/source/reference/block/S_Left_BoxSel.html b/help/macro/source/reference/block/S_Left_BoxSel.html index bbf227527f..145cb9b71a 100644 --- a/help/macro/source/reference/block/S_Left_BoxSel.html +++ b/help/macro/source/reference/block/S_Left_BoxSel.html @@ -1,4 +1,7 @@ -S_Left_BoxSel + + + +S_Left_BoxSel diff --git a/help/macro/source/reference/block/S_PageDown_BoxSel.html b/help/macro/source/reference/block/S_PageDown_BoxSel.html index 4658302593..8a06b9290b 100644 --- a/help/macro/source/reference/block/S_PageDown_BoxSel.html +++ b/help/macro/source/reference/block/S_PageDown_BoxSel.html @@ -1,4 +1,7 @@ -S_PageDown_BoxSel + + + +S_PageDown_BoxSel diff --git a/help/macro/source/reference/block/S_PageUp_BoxSel.html b/help/macro/source/reference/block/S_PageUp_BoxSel.html index 8b9a7726ae..49b0444c89 100644 --- a/help/macro/source/reference/block/S_PageUp_BoxSel.html +++ b/help/macro/source/reference/block/S_PageUp_BoxSel.html @@ -1,4 +1,7 @@ -S_PageUp_BoxSel + + + +S_PageUp_BoxSel diff --git a/help/macro/source/reference/block/S_Right_BoxSel.html b/help/macro/source/reference/block/S_Right_BoxSel.html index daed8f63e2..94565a3178 100644 --- a/help/macro/source/reference/block/S_Right_BoxSel.html +++ b/help/macro/source/reference/block/S_Right_BoxSel.html @@ -1,4 +1,7 @@ -S_Right_BoxSel + + + +S_Right_BoxSel diff --git a/help/macro/source/reference/block/S_Up2_BoxSel.html b/help/macro/source/reference/block/S_Up2_BoxSel.html index 25b1b45e74..6ff458e48a 100644 --- a/help/macro/source/reference/block/S_Up2_BoxSel.html +++ b/help/macro/source/reference/block/S_Up2_BoxSel.html @@ -1,4 +1,7 @@ -S_Up2_BoxSel + + + +S_Up2_BoxSel diff --git a/help/macro/source/reference/block/S_Up_BoxSel.html b/help/macro/source/reference/block/S_Up_BoxSel.html index 18cfb7c13f..2955d8e581 100644 --- a/help/macro/source/reference/block/S_Up_BoxSel.html +++ b/help/macro/source/reference/block/S_Up_BoxSel.html @@ -1,4 +1,7 @@ -S_Up_BoxSel + + + +S_Up_BoxSel diff --git a/help/macro/source/reference/block/S_WordLeft_BoxSel.html b/help/macro/source/reference/block/S_WordLeft_BoxSel.html index efa1c73c21..84380dc372 100644 --- a/help/macro/source/reference/block/S_WordLeft_BoxSel.html +++ b/help/macro/source/reference/block/S_WordLeft_BoxSel.html @@ -1,4 +1,7 @@ -S_WordLeft_BoxSel + + + +S_WordLeft_BoxSel diff --git a/help/macro/source/reference/block/S_WordRight_BoxSel.html b/help/macro/source/reference/block/S_WordRight_BoxSel.html index 713d751031..23d7d5cdd8 100644 --- a/help/macro/source/reference/block/S_WordRight_BoxSel.html +++ b/help/macro/source/reference/block/S_WordRight_BoxSel.html @@ -1,4 +1,7 @@ -S_WordRight_BoxSel + + + +S_WordRight_BoxSel diff --git a/help/macro/source/reference/block/index.html b/help/macro/source/reference/block/index.html index 8a00bb63c2..15d2bd404e 100644 --- a/help/macro/source/reference/block/index.html +++ b/help/macro/source/reference/block/index.html @@ -1,4 +1,7 @@ -矩形選択 + + + +矩形選択 diff --git a/help/macro/source/reference/change/S_AutoToSJIS.html b/help/macro/source/reference/change/S_AutoToSJIS.html index c05bd886ab..3e738a087d 100644 --- a/help/macro/source/reference/change/S_AutoToSJIS.html +++ b/help/macro/source/reference/change/S_AutoToSJIS.html @@ -1,4 +1,7 @@ -S_AutoToSJIS + + + +S_AutoToSJIS diff --git a/help/macro/source/reference/change/S_Base64Decode.html b/help/macro/source/reference/change/S_Base64Decode.html index 2e43b4f04b..73c6e5b9bd 100644 --- a/help/macro/source/reference/change/S_Base64Decode.html +++ b/help/macro/source/reference/change/S_Base64Decode.html @@ -1,4 +1,7 @@ -S_Base64Decode + + + +S_Base64Decode diff --git a/help/macro/source/reference/change/S_CodeCnvUNICODEBEtoSJIS.html b/help/macro/source/reference/change/S_CodeCnvUNICODEBEtoSJIS.html index 3bee2ee21e..cb7dfe65b0 100644 --- a/help/macro/source/reference/change/S_CodeCnvUNICODEBEtoSJIS.html +++ b/help/macro/source/reference/change/S_CodeCnvUNICODEBEtoSJIS.html @@ -1,4 +1,7 @@ -S_CodeCnvUNICODEBEtoSJIS + + + +S_CodeCnvUNICODEBEtoSJIS diff --git a/help/macro/source/reference/change/S_CodeCnvUNICODEtoSJIS.html b/help/macro/source/reference/change/S_CodeCnvUNICODEtoSJIS.html index fd0057ca69..24830e6577 100644 --- a/help/macro/source/reference/change/S_CodeCnvUNICODEtoSJIS.html +++ b/help/macro/source/reference/change/S_CodeCnvUNICODEtoSJIS.html @@ -1,4 +1,7 @@ -S_CodeCnvUNICODEtoSJIS + + + +S_CodeCnvUNICODEtoSJIS diff --git a/help/macro/source/reference/change/S_EUCtoSJIS.html b/help/macro/source/reference/change/S_EUCtoSJIS.html index 60fcb6ff65..3102362ba6 100644 --- a/help/macro/source/reference/change/S_EUCtoSJIS.html +++ b/help/macro/source/reference/change/S_EUCtoSJIS.html @@ -1,4 +1,7 @@ -S_EUCtoSJIS + + + +S_EUCtoSJIS diff --git a/help/macro/source/reference/change/S_HanKataToZenHira.html b/help/macro/source/reference/change/S_HanKataToZenHira.html index 76dfbb9dd4..34fb222876 100644 --- a/help/macro/source/reference/change/S_HanKataToZenHira.html +++ b/help/macro/source/reference/change/S_HanKataToZenHira.html @@ -1,4 +1,7 @@ -S_HanKataToZenHira + + + +S_HanKataToZenHira diff --git a/help/macro/source/reference/change/S_HanKataToZenKata.html b/help/macro/source/reference/change/S_HanKataToZenKata.html index c46856bb65..4d8d6c912f 100644 --- a/help/macro/source/reference/change/S_HanKataToZenKata.html +++ b/help/macro/source/reference/change/S_HanKataToZenKata.html @@ -1,4 +1,7 @@ -S_HanKataToZenKata + + + +S_HanKataToZenKata diff --git a/help/macro/source/reference/change/S_JIStoSJIS.html b/help/macro/source/reference/change/S_JIStoSJIS.html index c0b720e4e3..a8bbd24090 100644 --- a/help/macro/source/reference/change/S_JIStoSJIS.html +++ b/help/macro/source/reference/change/S_JIStoSJIS.html @@ -1,4 +1,7 @@ -S_JIStoSJIS + + + +S_JIStoSJIS diff --git a/help/macro/source/reference/change/S_SJIStoEUC.html b/help/macro/source/reference/change/S_SJIStoEUC.html index 15e360ef01..746d0c9a6b 100644 --- a/help/macro/source/reference/change/S_SJIStoEUC.html +++ b/help/macro/source/reference/change/S_SJIStoEUC.html @@ -1,4 +1,7 @@ -S_SJIStoEUC + + + +S_SJIStoEUC diff --git a/help/macro/source/reference/change/S_SJIStoJIS.html b/help/macro/source/reference/change/S_SJIStoJIS.html index 3bc00cb492..b561ea4202 100644 --- a/help/macro/source/reference/change/S_SJIStoJIS.html +++ b/help/macro/source/reference/change/S_SJIStoJIS.html @@ -1,4 +1,7 @@ -S_SJIStoJIS + + + +S_SJIStoJIS diff --git a/help/macro/source/reference/change/S_SJIStoUTF7.html b/help/macro/source/reference/change/S_SJIStoUTF7.html index 9b06b7dc48..8731a128c7 100644 --- a/help/macro/source/reference/change/S_SJIStoUTF7.html +++ b/help/macro/source/reference/change/S_SJIStoUTF7.html @@ -1,4 +1,7 @@ -S_SJIStoUTF7 + + + +S_SJIStoUTF7 diff --git a/help/macro/source/reference/change/S_SJIStoUTF8.html b/help/macro/source/reference/change/S_SJIStoUTF8.html index 373e3ebc1c..897ffa88ea 100644 --- a/help/macro/source/reference/change/S_SJIStoUTF8.html +++ b/help/macro/source/reference/change/S_SJIStoUTF8.html @@ -1,4 +1,7 @@ -S_SJIStoUTF8 + + + +S_SJIStoUTF8 diff --git a/help/macro/source/reference/change/S_SPACEToTAB.html b/help/macro/source/reference/change/S_SPACEToTAB.html index 786669b4ce..e17b3aabf9 100644 --- a/help/macro/source/reference/change/S_SPACEToTAB.html +++ b/help/macro/source/reference/change/S_SPACEToTAB.html @@ -1,4 +1,7 @@ -S_SPACEToTAB + + + +S_SPACEToTAB diff --git a/help/macro/source/reference/change/S_TABToSPACE.html b/help/macro/source/reference/change/S_TABToSPACE.html index 57fdd5b768..b7d5bed028 100644 --- a/help/macro/source/reference/change/S_TABToSPACE.html +++ b/help/macro/source/reference/change/S_TABToSPACE.html @@ -1,4 +1,7 @@ -S_TABToSPACE + + + +S_TABToSPACE diff --git a/help/macro/source/reference/change/S_ToHanEi.html b/help/macro/source/reference/change/S_ToHanEi.html index c00191df50..dd43249276 100644 --- a/help/macro/source/reference/change/S_ToHanEi.html +++ b/help/macro/source/reference/change/S_ToHanEi.html @@ -1,4 +1,7 @@ -S_ToHanEi + + + +S_ToHanEi diff --git a/help/macro/source/reference/change/S_ToHankaku.html b/help/macro/source/reference/change/S_ToHankaku.html index 9525d2e0d1..9e61c4f1ee 100644 --- a/help/macro/source/reference/change/S_ToHankaku.html +++ b/help/macro/source/reference/change/S_ToHankaku.html @@ -1,4 +1,7 @@ -S_ToHankaku + + + +S_ToHankaku diff --git a/help/macro/source/reference/change/S_ToHankata.html b/help/macro/source/reference/change/S_ToHankata.html index 0205e8f1a4..425ef741cd 100644 --- a/help/macro/source/reference/change/S_ToHankata.html +++ b/help/macro/source/reference/change/S_ToHankata.html @@ -1,4 +1,7 @@ -S_ToHankata + + + +S_ToHankata diff --git a/help/macro/source/reference/change/S_ToLower.html b/help/macro/source/reference/change/S_ToLower.html index 3942282745..5756ee8244 100644 --- a/help/macro/source/reference/change/S_ToLower.html +++ b/help/macro/source/reference/change/S_ToLower.html @@ -1,4 +1,7 @@ -S_ToLower + + + +S_ToLower diff --git a/help/macro/source/reference/change/S_ToUpper.html b/help/macro/source/reference/change/S_ToUpper.html index 79cd871ba2..cc488e6125 100644 --- a/help/macro/source/reference/change/S_ToUpper.html +++ b/help/macro/source/reference/change/S_ToUpper.html @@ -1,4 +1,7 @@ -S_ToUpper + + + +S_ToUpper diff --git a/help/macro/source/reference/change/S_ToZenEi.html b/help/macro/source/reference/change/S_ToZenEi.html index cede3c2c01..68fc3cd23e 100644 --- a/help/macro/source/reference/change/S_ToZenEi.html +++ b/help/macro/source/reference/change/S_ToZenEi.html @@ -1,4 +1,7 @@ -S_ToZenEi + + + +S_ToZenEi diff --git a/help/macro/source/reference/change/S_ToZenHira.html b/help/macro/source/reference/change/S_ToZenHira.html index c997db6601..068bb759ea 100644 --- a/help/macro/source/reference/change/S_ToZenHira.html +++ b/help/macro/source/reference/change/S_ToZenHira.html @@ -1,4 +1,7 @@ -S_ToZenHira + + + +S_ToZenHira diff --git a/help/macro/source/reference/change/S_ToZenKata.html b/help/macro/source/reference/change/S_ToZenKata.html index a2fa31e070..d3623df534 100644 --- a/help/macro/source/reference/change/S_ToZenKata.html +++ b/help/macro/source/reference/change/S_ToZenKata.html @@ -1,4 +1,7 @@ -S_ToZenKata + + + +S_ToZenKata diff --git a/help/macro/source/reference/change/S_UTF7toSJIS.html b/help/macro/source/reference/change/S_UTF7toSJIS.html index f88b344513..e68a729ec4 100644 --- a/help/macro/source/reference/change/S_UTF7toSJIS.html +++ b/help/macro/source/reference/change/S_UTF7toSJIS.html @@ -1,4 +1,7 @@ -S_UTF7toSJIS + + + +S_UTF7toSJIS diff --git a/help/macro/source/reference/change/S_UTF8toSJIS.html b/help/macro/source/reference/change/S_UTF8toSJIS.html index f8c9aba343..5700d833bb 100644 --- a/help/macro/source/reference/change/S_UTF8toSJIS.html +++ b/help/macro/source/reference/change/S_UTF8toSJIS.html @@ -1,4 +1,7 @@ -S_UTF8toSJIS + + + +S_UTF8toSJIS diff --git a/help/macro/source/reference/change/S_Uudecode.html b/help/macro/source/reference/change/S_Uudecode.html index 1c0d8938d1..8f5911b1fc 100644 --- a/help/macro/source/reference/change/S_Uudecode.html +++ b/help/macro/source/reference/change/S_Uudecode.html @@ -1,4 +1,7 @@ -S_Uudecode + + + +S_Uudecode diff --git a/help/macro/source/reference/change/index.html b/help/macro/source/reference/change/index.html index 38f38b1fe7..b6530322a9 100644 --- a/help/macro/source/reference/change/index.html +++ b/help/macro/source/reference/change/index.html @@ -1,4 +1,7 @@ -変換 + + + +変換 diff --git a/help/macro/source/reference/clipboard/S_AddTail.html b/help/macro/source/reference/clipboard/S_AddTail.html index 9758edf4ac..ba8c21715f 100644 --- a/help/macro/source/reference/clipboard/S_AddTail.html +++ b/help/macro/source/reference/clipboard/S_AddTail.html @@ -1,4 +1,7 @@ -S_AddTail + + + +S_AddTail diff --git a/help/macro/source/reference/clipboard/S_Copy.html b/help/macro/source/reference/clipboard/S_Copy.html index e56963a93b..585d1d62b7 100644 --- a/help/macro/source/reference/clipboard/S_Copy.html +++ b/help/macro/source/reference/clipboard/S_Copy.html @@ -1,4 +1,7 @@ -S_Copy + + + +S_Copy diff --git a/help/macro/source/reference/clipboard/S_CopyAddCRLF.html b/help/macro/source/reference/clipboard/S_CopyAddCRLF.html index 8b6eab9491..e249838a67 100644 --- a/help/macro/source/reference/clipboard/S_CopyAddCRLF.html +++ b/help/macro/source/reference/clipboard/S_CopyAddCRLF.html @@ -1,4 +1,7 @@ -S_CopyAddCRLF + + + +S_CopyAddCRLF diff --git a/help/macro/source/reference/clipboard/S_CopyCRLF.html b/help/macro/source/reference/clipboard/S_CopyCRLF.html index 0e4844b618..d484ba65a3 100644 --- a/help/macro/source/reference/clipboard/S_CopyCRLF.html +++ b/help/macro/source/reference/clipboard/S_CopyCRLF.html @@ -1,4 +1,7 @@ -S_CopyCRLF + + + +S_CopyCRLF diff --git a/help/macro/source/reference/clipboard/S_CopyColorHtml.html b/help/macro/source/reference/clipboard/S_CopyColorHtml.html index 7d7819a42d..37283387b7 100644 --- a/help/macro/source/reference/clipboard/S_CopyColorHtml.html +++ b/help/macro/source/reference/clipboard/S_CopyColorHtml.html @@ -1,4 +1,7 @@ -S_CopyColorHtml + + + +S_CopyColorHtml diff --git a/help/macro/source/reference/clipboard/S_CopyColorHtmlWithLineNumber.html b/help/macro/source/reference/clipboard/S_CopyColorHtmlWithLineNumber.html index c7df80b713..1bbc0c5b7e 100644 --- a/help/macro/source/reference/clipboard/S_CopyColorHtmlWithLineNumber.html +++ b/help/macro/source/reference/clipboard/S_CopyColorHtmlWithLineNumber.html @@ -1,4 +1,7 @@ -S_CopyColorHtmlWithLineNumber + + + +S_CopyColorHtmlWithLineNumber diff --git a/help/macro/source/reference/clipboard/S_CopyDirPath.html b/help/macro/source/reference/clipboard/S_CopyDirPath.html index 62985f1276..599d6bb620 100644 --- a/help/macro/source/reference/clipboard/S_CopyDirPath.html +++ b/help/macro/source/reference/clipboard/S_CopyDirPath.html @@ -1,4 +1,7 @@ -S_CopyFolder + + + +S_CopyFolder diff --git a/help/macro/source/reference/clipboard/S_CopyFilename.html b/help/macro/source/reference/clipboard/S_CopyFilename.html index a565dcae6b..adaeee322b 100644 --- a/help/macro/source/reference/clipboard/S_CopyFilename.html +++ b/help/macro/source/reference/clipboard/S_CopyFilename.html @@ -1,4 +1,7 @@ -S_CopyFilename + + + +S_CopyFilename diff --git a/help/macro/source/reference/clipboard/S_CopyKeyBindList.html b/help/macro/source/reference/clipboard/S_CopyKeyBindList.html index 0bf5de0246..8e3c53f02e 100644 --- a/help/macro/source/reference/clipboard/S_CopyKeyBindList.html +++ b/help/macro/source/reference/clipboard/S_CopyKeyBindList.html @@ -1,4 +1,7 @@ -S_CopyKeyBindList + + + +S_CopyKeyBindList diff --git a/help/macro/source/reference/clipboard/S_CopyLines.html b/help/macro/source/reference/clipboard/S_CopyLines.html index 8ad26a70dc..b5171786a3 100644 --- a/help/macro/source/reference/clipboard/S_CopyLines.html +++ b/help/macro/source/reference/clipboard/S_CopyLines.html @@ -1,4 +1,7 @@ -S_CopyLines + + + +S_CopyLines diff --git a/help/macro/source/reference/clipboard/S_CopyLinesAsPassage.html b/help/macro/source/reference/clipboard/S_CopyLinesAsPassage.html index 3b43a94015..06d8dc19cf 100644 --- a/help/macro/source/reference/clipboard/S_CopyLinesAsPassage.html +++ b/help/macro/source/reference/clipboard/S_CopyLinesAsPassage.html @@ -1,4 +1,7 @@ -S_CopyLinesAsPassage + + + +S_CopyLinesAsPassage diff --git a/help/macro/source/reference/clipboard/S_CopyLinesWithLineNumber.html b/help/macro/source/reference/clipboard/S_CopyLinesWithLineNumber.html index 7350d85a97..4d19b4b782 100644 --- a/help/macro/source/reference/clipboard/S_CopyLinesWithLineNumber.html +++ b/help/macro/source/reference/clipboard/S_CopyLinesWithLineNumber.html @@ -1,4 +1,7 @@ -S_CopyLinesWithLineNumber + + + +S_CopyLinesWithLineNumber diff --git a/help/macro/source/reference/clipboard/S_CopyPath.html b/help/macro/source/reference/clipboard/S_CopyPath.html index ba6bd70f34..d7eab71131 100644 --- a/help/macro/source/reference/clipboard/S_CopyPath.html +++ b/help/macro/source/reference/clipboard/S_CopyPath.html @@ -1,4 +1,7 @@ -S_CopyPath + + + +S_CopyPath diff --git a/help/macro/source/reference/clipboard/S_CopyTag.html b/help/macro/source/reference/clipboard/S_CopyTag.html index 02417cfdc7..e3adee080e 100644 --- a/help/macro/source/reference/clipboard/S_CopyTag.html +++ b/help/macro/source/reference/clipboard/S_CopyTag.html @@ -1,4 +1,7 @@ -S_CopyTag + + + +S_CopyTag diff --git a/help/macro/source/reference/clipboard/S_Cut.html b/help/macro/source/reference/clipboard/S_Cut.html index e7fc313696..e277c16bf6 100644 --- a/help/macro/source/reference/clipboard/S_Cut.html +++ b/help/macro/source/reference/clipboard/S_Cut.html @@ -1,4 +1,7 @@ -S_Cut + + + +S_Cut diff --git a/help/macro/source/reference/clipboard/S_InsBoxText.html b/help/macro/source/reference/clipboard/S_InsBoxText.html index 7443bafc6d..0cb43c5f92 100644 --- a/help/macro/source/reference/clipboard/S_InsBoxText.html +++ b/help/macro/source/reference/clipboard/S_InsBoxText.html @@ -1,4 +1,7 @@ -S_InsBoxText + + + +S_InsBoxText diff --git a/help/macro/source/reference/clipboard/S_InsText.html b/help/macro/source/reference/clipboard/S_InsText.html index d90eb38079..610fe517d3 100644 --- a/help/macro/source/reference/clipboard/S_InsText.html +++ b/help/macro/source/reference/clipboard/S_InsText.html @@ -1,4 +1,7 @@ -S_InsText + + + +S_InsText diff --git a/help/macro/source/reference/clipboard/S_Paste.html b/help/macro/source/reference/clipboard/S_Paste.html index a3fe98405b..aa8520dc99 100644 --- a/help/macro/source/reference/clipboard/S_Paste.html +++ b/help/macro/source/reference/clipboard/S_Paste.html @@ -1,4 +1,7 @@ -S_Paste + + + +S_Paste diff --git a/help/macro/source/reference/clipboard/S_PasteBox.html b/help/macro/source/reference/clipboard/S_PasteBox.html index b0e105438a..eaa7ea09e2 100644 --- a/help/macro/source/reference/clipboard/S_PasteBox.html +++ b/help/macro/source/reference/clipboard/S_PasteBox.html @@ -1,4 +1,7 @@ -S_PasteBox + + + +S_PasteBox diff --git a/help/macro/source/reference/clipboard/index.html b/help/macro/source/reference/clipboard/index.html index ed6eb7a180..5e01b70e0a 100644 --- a/help/macro/source/reference/clipboard/index.html +++ b/help/macro/source/reference/clipboard/index.html @@ -1,4 +1,7 @@ -クリップボード + + + +クリップボード diff --git a/help/macro/source/reference/config/S_ChangeType.html b/help/macro/source/reference/config/S_ChangeType.html index 8d3d1ccd75..1e6f00f233 100644 --- a/help/macro/source/reference/config/S_ChangeType.html +++ b/help/macro/source/reference/config/S_ChangeType.html @@ -1,4 +1,7 @@ -S_ChangeType + + + +S_ChangeType diff --git a/help/macro/source/reference/config/S_ExecCommand.html b/help/macro/source/reference/config/S_ExecCommand.html index 925965826e..c25a9af33e 100644 --- a/help/macro/source/reference/config/S_ExecCommand.html +++ b/help/macro/source/reference/config/S_ExecCommand.html @@ -1,4 +1,7 @@ -S_ExecCommand + + + +S_ExecCommand diff --git a/help/macro/source/reference/config/S_ExecCommandDialog.html b/help/macro/source/reference/config/S_ExecCommandDialog.html index 6169bffcad..b7be3ef29d 100644 --- a/help/macro/source/reference/config/S_ExecCommandDialog.html +++ b/help/macro/source/reference/config/S_ExecCommandDialog.html @@ -1,4 +1,7 @@ -S_ExecCommandDialog + + + +S_ExecCommandDialog diff --git a/help/macro/source/reference/config/S_OptionCommon.html b/help/macro/source/reference/config/S_OptionCommon.html index 07333c00de..642f403884 100644 --- a/help/macro/source/reference/config/S_OptionCommon.html +++ b/help/macro/source/reference/config/S_OptionCommon.html @@ -1,4 +1,7 @@ -S_OptionCommon + + + +S_OptionCommon diff --git a/help/macro/source/reference/config/S_OptionFavorite.html b/help/macro/source/reference/config/S_OptionFavorite.html index dd809e8186..d5dc40041d 100644 --- a/help/macro/source/reference/config/S_OptionFavorite.html +++ b/help/macro/source/reference/config/S_OptionFavorite.html @@ -1,4 +1,7 @@ -S_OptionFavorite + + + +S_OptionFavorite diff --git a/help/macro/source/reference/config/S_OptionType.html b/help/macro/source/reference/config/S_OptionType.html index c9fa392ebf..dd546aed9e 100644 --- a/help/macro/source/reference/config/S_OptionType.html +++ b/help/macro/source/reference/config/S_OptionType.html @@ -1,4 +1,7 @@ -S_OptionType + + + +S_OptionType diff --git a/help/macro/source/reference/config/S_SelectCountMode.html b/help/macro/source/reference/config/S_SelectCountMode.html index df900ef793..23dcf2abd6 100644 --- a/help/macro/source/reference/config/S_SelectCountMode.html +++ b/help/macro/source/reference/config/S_SelectCountMode.html @@ -1,4 +1,7 @@ -S_SelectCountMode + + + +S_SelectCountMode diff --git a/help/macro/source/reference/config/S_SelectFont.html b/help/macro/source/reference/config/S_SelectFont.html index 4be5c99c1e..dcf18c41a0 100644 --- a/help/macro/source/reference/config/S_SelectFont.html +++ b/help/macro/source/reference/config/S_SelectFont.html @@ -1,4 +1,7 @@ -S_SelectFont + + + +S_SelectFont diff --git a/help/macro/source/reference/config/S_SetFontSize.html b/help/macro/source/reference/config/S_SetFontSize.html index 3a3e80526b..5d7c710390 100644 --- a/help/macro/source/reference/config/S_SetFontSize.html +++ b/help/macro/source/reference/config/S_SetFontSize.html @@ -1,4 +1,7 @@ -S_SetFontSize + + + +S_SetFontSize diff --git a/help/macro/source/reference/config/S_SetMsgQuoteStr.html b/help/macro/source/reference/config/S_SetMsgQuoteStr.html index 4df1edc4ca..14dfb979f8 100644 --- a/help/macro/source/reference/config/S_SetMsgQuoteStr.html +++ b/help/macro/source/reference/config/S_SetMsgQuoteStr.html @@ -1,4 +1,7 @@ -S_SetMsgQuoteStr + + + +S_SetMsgQuoteStr diff --git a/help/macro/source/reference/config/S_ShowFunckey.html b/help/macro/source/reference/config/S_ShowFunckey.html index 38309be9b8..7c903c1481 100644 --- a/help/macro/source/reference/config/S_ShowFunckey.html +++ b/help/macro/source/reference/config/S_ShowFunckey.html @@ -1,4 +1,7 @@ -S_ShowFunckey + + + +S_ShowFunckey diff --git a/help/macro/source/reference/config/S_ShowStatusbar.html b/help/macro/source/reference/config/S_ShowStatusbar.html index 0d04db3cb9..4821bb83df 100644 --- a/help/macro/source/reference/config/S_ShowStatusbar.html +++ b/help/macro/source/reference/config/S_ShowStatusbar.html @@ -1,4 +1,7 @@ -S_ShowStatusbar + + + +S_ShowStatusbar diff --git a/help/macro/source/reference/config/S_ShowTab.html b/help/macro/source/reference/config/S_ShowTab.html index f66694a5e1..1128e72229 100644 --- a/help/macro/source/reference/config/S_ShowTab.html +++ b/help/macro/source/reference/config/S_ShowTab.html @@ -1,4 +1,7 @@ -S_ShowTab + + + +S_ShowTab diff --git a/help/macro/source/reference/config/S_ShowToolbar.html b/help/macro/source/reference/config/S_ShowToolbar.html index 07b2c81304..48e90469c1 100644 --- a/help/macro/source/reference/config/S_ShowToolbar.html +++ b/help/macro/source/reference/config/S_ShowToolbar.html @@ -1,4 +1,7 @@ -S_ShowToolbar + + + +S_ShowToolbar diff --git a/help/macro/source/reference/config/S_TextWrapMethod.html b/help/macro/source/reference/config/S_TextWrapMethod.html index 514706315b..543d785889 100644 --- a/help/macro/source/reference/config/S_TextWrapMethod.html +++ b/help/macro/source/reference/config/S_TextWrapMethod.html @@ -1,4 +1,7 @@ -S_TextWrapMethod + + + +S_TextWrapMethod diff --git a/help/macro/source/reference/config/S_TypeList.html b/help/macro/source/reference/config/S_TypeList.html index 8cffc9be42..95000f5199 100644 --- a/help/macro/source/reference/config/S_TypeList.html +++ b/help/macro/source/reference/config/S_TypeList.html @@ -1,4 +1,7 @@ -S_TypeList + + + +S_TypeList diff --git a/help/macro/source/reference/config/S_WrapWindowWidth.html b/help/macro/source/reference/config/S_WrapWindowWidth.html index bc5412e76c..7c4239060a 100644 --- a/help/macro/source/reference/config/S_WrapWindowWidth.html +++ b/help/macro/source/reference/config/S_WrapWindowWidth.html @@ -1,4 +1,7 @@ -S_WrapWindowWidth + + + +S_WrapWindowWidth diff --git a/help/macro/source/reference/config/index.html b/help/macro/source/reference/config/index.html index bf2880c3a8..ec21f95bad 100644 --- a/help/macro/source/reference/config/index.html +++ b/help/macro/source/reference/config/index.html @@ -1,4 +1,7 @@ -設定 + + + +設定 diff --git a/help/macro/source/reference/cursor/S_1PageDown.html b/help/macro/source/reference/cursor/S_1PageDown.html index de7364c389..3f0ea77e2b 100644 --- a/help/macro/source/reference/cursor/S_1PageDown.html +++ b/help/macro/source/reference/cursor/S_1PageDown.html @@ -1,4 +1,7 @@ -S_1PageDown + + + +S_1PageDown diff --git a/help/macro/source/reference/cursor/S_1PageUp.html b/help/macro/source/reference/cursor/S_1PageUp.html index 124969ee40..b020d9e99e 100644 --- a/help/macro/source/reference/cursor/S_1PageUp.html +++ b/help/macro/source/reference/cursor/S_1PageUp.html @@ -1,4 +1,7 @@ -S_1PageUp + + + +S_1PageUp diff --git a/help/macro/source/reference/cursor/S_CurLineCenter.html b/help/macro/source/reference/cursor/S_CurLineCenter.html index e4f326f241..2cbc9c7690 100644 --- a/help/macro/source/reference/cursor/S_CurLineCenter.html +++ b/help/macro/source/reference/cursor/S_CurLineCenter.html @@ -1,4 +1,7 @@ -S_CurLineCenter + + + +S_CurLineCenter diff --git a/help/macro/source/reference/cursor/S_Down.html b/help/macro/source/reference/cursor/S_Down.html index 8c974abd24..eba79df029 100644 --- a/help/macro/source/reference/cursor/S_Down.html +++ b/help/macro/source/reference/cursor/S_Down.html @@ -1,4 +1,7 @@ -S_Down + + + +S_Down diff --git a/help/macro/source/reference/cursor/S_Down2.html b/help/macro/source/reference/cursor/S_Down2.html index 2c69f02da9..4a65e6bf3a 100644 --- a/help/macro/source/reference/cursor/S_Down2.html +++ b/help/macro/source/reference/cursor/S_Down2.html @@ -1,4 +1,7 @@ -S_Down2 + + + +S_Down2 diff --git a/help/macro/source/reference/cursor/S_F_WndScrollDown.html b/help/macro/source/reference/cursor/S_F_WndScrollDown.html index 8cafabbac5..8d33167f97 100644 --- a/help/macro/source/reference/cursor/S_F_WndScrollDown.html +++ b/help/macro/source/reference/cursor/S_F_WndScrollDown.html @@ -1,4 +1,7 @@ -S_F_WndScrollDown + + + +S_F_WndScrollDown diff --git a/help/macro/source/reference/cursor/S_F_WndScrollUp.html b/help/macro/source/reference/cursor/S_F_WndScrollUp.html index 4e96841f34..6f96176afb 100644 --- a/help/macro/source/reference/cursor/S_F_WndScrollUp.html +++ b/help/macro/source/reference/cursor/S_F_WndScrollUp.html @@ -1,4 +1,7 @@ -S_F_WndScrollUp + + + +S_F_WndScrollUp diff --git a/help/macro/source/reference/cursor/S_GoFileEnd.html b/help/macro/source/reference/cursor/S_GoFileEnd.html index 079d66d2ff..e1936d9f95 100644 --- a/help/macro/source/reference/cursor/S_GoFileEnd.html +++ b/help/macro/source/reference/cursor/S_GoFileEnd.html @@ -1,4 +1,7 @@ -S_GoFileEnd + + + +S_GoFileEnd diff --git a/help/macro/source/reference/cursor/S_GoFileTop.html b/help/macro/source/reference/cursor/S_GoFileTop.html index dfc90ed3ff..90cbfb7cdf 100644 --- a/help/macro/source/reference/cursor/S_GoFileTop.html +++ b/help/macro/source/reference/cursor/S_GoFileTop.html @@ -1,4 +1,7 @@ -S_GoFileTop + + + +S_GoFileTop diff --git a/help/macro/source/reference/cursor/S_GoLineEnd.html b/help/macro/source/reference/cursor/S_GoLineEnd.html index 890d2c47b4..99ed95d02d 100644 --- a/help/macro/source/reference/cursor/S_GoLineEnd.html +++ b/help/macro/source/reference/cursor/S_GoLineEnd.html @@ -1,4 +1,7 @@ -S_GoLineEnd + + + +S_GoLineEnd diff --git a/help/macro/source/reference/cursor/S_GoLineTop.html b/help/macro/source/reference/cursor/S_GoLineTop.html index 6d3a1309ba..cea6d97b58 100644 --- a/help/macro/source/reference/cursor/S_GoLineTop.html +++ b/help/macro/source/reference/cursor/S_GoLineTop.html @@ -1,4 +1,7 @@ -S_GoLineTop + + + +S_GoLineTop diff --git a/help/macro/source/reference/cursor/S_GoNextParagraph.html b/help/macro/source/reference/cursor/S_GoNextParagraph.html index 5b6a37567f..789a9e65b1 100644 --- a/help/macro/source/reference/cursor/S_GoNextParagraph.html +++ b/help/macro/source/reference/cursor/S_GoNextParagraph.html @@ -1,4 +1,7 @@ -S_GoNextParagraph + + + +S_GoNextParagraph diff --git a/help/macro/source/reference/cursor/S_GoPrevParagraph.html b/help/macro/source/reference/cursor/S_GoPrevParagraph.html index 58ce0bbdc3..1444a04b37 100644 --- a/help/macro/source/reference/cursor/S_GoPrevParagraph.html +++ b/help/macro/source/reference/cursor/S_GoPrevParagraph.html @@ -1,4 +1,7 @@ -S_GoPrevParagraph + + + +S_GoPrevParagraph diff --git a/help/macro/source/reference/cursor/S_HalfPageDown.html b/help/macro/source/reference/cursor/S_HalfPageDown.html index f9be87b3f6..c5c0da3230 100644 --- a/help/macro/source/reference/cursor/S_HalfPageDown.html +++ b/help/macro/source/reference/cursor/S_HalfPageDown.html @@ -1,4 +1,7 @@ -S_HalfPageDown + + + +S_HalfPageDown diff --git a/help/macro/source/reference/cursor/S_HalfPageUp.html b/help/macro/source/reference/cursor/S_HalfPageUp.html index f124652b38..01b329acbc 100644 --- a/help/macro/source/reference/cursor/S_HalfPageUp.html +++ b/help/macro/source/reference/cursor/S_HalfPageUp.html @@ -1,4 +1,7 @@ -S_HalfPageUp + + + +S_HalfPageUp diff --git a/help/macro/source/reference/cursor/S_Left.html b/help/macro/source/reference/cursor/S_Left.html index b3dbfa50fa..f093557c39 100644 --- a/help/macro/source/reference/cursor/S_Left.html +++ b/help/macro/source/reference/cursor/S_Left.html @@ -1,4 +1,7 @@ -S_Left + + + +S_Left diff --git a/help/macro/source/reference/cursor/S_MoveCursor.html b/help/macro/source/reference/cursor/S_MoveCursor.html index 7986d637de..2991a79945 100644 --- a/help/macro/source/reference/cursor/S_MoveCursor.html +++ b/help/macro/source/reference/cursor/S_MoveCursor.html @@ -1,4 +1,7 @@ -S_MoveCursor + + + +S_MoveCursor diff --git a/help/macro/source/reference/cursor/S_MoveCursorLayout.html b/help/macro/source/reference/cursor/S_MoveCursorLayout.html index b14ff7fb7e..771b14f35c 100644 --- a/help/macro/source/reference/cursor/S_MoveCursorLayout.html +++ b/help/macro/source/reference/cursor/S_MoveCursorLayout.html @@ -1,4 +1,7 @@ -S_MoveCursorLayout + + + +S_MoveCursorLayout diff --git a/help/macro/source/reference/cursor/S_MoveHistNext.html b/help/macro/source/reference/cursor/S_MoveHistNext.html index 3e317a6c81..304ebd34bb 100644 --- a/help/macro/source/reference/cursor/S_MoveHistNext.html +++ b/help/macro/source/reference/cursor/S_MoveHistNext.html @@ -1,4 +1,7 @@ -S_MoveHistNext + + + +S_MoveHistNext diff --git a/help/macro/source/reference/cursor/S_MoveHistPrev.html b/help/macro/source/reference/cursor/S_MoveHistPrev.html index 48cddbd1f4..5fa4ce7ae8 100644 --- a/help/macro/source/reference/cursor/S_MoveHistPrev.html +++ b/help/macro/source/reference/cursor/S_MoveHistPrev.html @@ -1,4 +1,7 @@ -S_MoveHistPrev + + + +S_MoveHistPrev diff --git a/help/macro/source/reference/cursor/S_MoveHistSet.html b/help/macro/source/reference/cursor/S_MoveHistSet.html index 241c975c9d..cb164e60bb 100644 --- a/help/macro/source/reference/cursor/S_MoveHistSet.html +++ b/help/macro/source/reference/cursor/S_MoveHistSet.html @@ -1,4 +1,7 @@ -S_MoveHistSet + + + +S_MoveHistSet diff --git a/help/macro/source/reference/cursor/S_PageDown.html b/help/macro/source/reference/cursor/S_PageDown.html index cdf98e8546..ca9f230e36 100644 --- a/help/macro/source/reference/cursor/S_PageDown.html +++ b/help/macro/source/reference/cursor/S_PageDown.html @@ -1,4 +1,7 @@ -S_PageDown + + + +S_PageDown diff --git a/help/macro/source/reference/cursor/S_PageUp.html b/help/macro/source/reference/cursor/S_PageUp.html index 6f3a4b661b..c5740a8809 100644 --- a/help/macro/source/reference/cursor/S_PageUp.html +++ b/help/macro/source/reference/cursor/S_PageUp.html @@ -1,4 +1,7 @@ -S_PageUp + + + +S_PageUp diff --git a/help/macro/source/reference/cursor/S_Right.html b/help/macro/source/reference/cursor/S_Right.html index fadabd6d0d..0657f550c6 100644 --- a/help/macro/source/reference/cursor/S_Right.html +++ b/help/macro/source/reference/cursor/S_Right.html @@ -1,4 +1,7 @@ -S_Right + + + +S_Right diff --git a/help/macro/source/reference/cursor/S_Up.html b/help/macro/source/reference/cursor/S_Up.html index 5954b424df..07a8993305 100644 --- a/help/macro/source/reference/cursor/S_Up.html +++ b/help/macro/source/reference/cursor/S_Up.html @@ -1,4 +1,7 @@ -S_Up + + + +S_Up diff --git a/help/macro/source/reference/cursor/S_Up2.html b/help/macro/source/reference/cursor/S_Up2.html index ecd300ff1e..75203f1ea4 100644 --- a/help/macro/source/reference/cursor/S_Up2.html +++ b/help/macro/source/reference/cursor/S_Up2.html @@ -1,4 +1,7 @@ -S_Up2 + + + +S_Up2 diff --git a/help/macro/source/reference/cursor/S_WheelDown.html b/help/macro/source/reference/cursor/S_WheelDown.html index 6cc0241bcd..0307cc7e58 100644 --- a/help/macro/source/reference/cursor/S_WheelDown.html +++ b/help/macro/source/reference/cursor/S_WheelDown.html @@ -1,4 +1,7 @@ -S_WheelDown + + + +S_WheelDown diff --git a/help/macro/source/reference/cursor/S_WheelLeft.html b/help/macro/source/reference/cursor/S_WheelLeft.html index 1c4560a0c7..ea6a9dde86 100644 --- a/help/macro/source/reference/cursor/S_WheelLeft.html +++ b/help/macro/source/reference/cursor/S_WheelLeft.html @@ -1,4 +1,7 @@ -S_WheelLeft + + + +S_WheelLeft diff --git a/help/macro/source/reference/cursor/S_WheelPageDown.html b/help/macro/source/reference/cursor/S_WheelPageDown.html index c9f49f0f11..fbdbb469ef 100644 --- a/help/macro/source/reference/cursor/S_WheelPageDown.html +++ b/help/macro/source/reference/cursor/S_WheelPageDown.html @@ -1,4 +1,7 @@ -S_WheelPageDown + + + +S_WheelPageDown diff --git a/help/macro/source/reference/cursor/S_WheelPageLeft.html b/help/macro/source/reference/cursor/S_WheelPageLeft.html index f37339a1ab..8e8d398c86 100644 --- a/help/macro/source/reference/cursor/S_WheelPageLeft.html +++ b/help/macro/source/reference/cursor/S_WheelPageLeft.html @@ -1,4 +1,7 @@ -S_WheelPageLeft + + + +S_WheelPageLeft diff --git a/help/macro/source/reference/cursor/S_WheelPageRight.html b/help/macro/source/reference/cursor/S_WheelPageRight.html index 1339eaaae5..e8c60a37d3 100644 --- a/help/macro/source/reference/cursor/S_WheelPageRight.html +++ b/help/macro/source/reference/cursor/S_WheelPageRight.html @@ -1,4 +1,7 @@ -S_WheelPageRight + + + +S_WheelPageRight diff --git a/help/macro/source/reference/cursor/S_WheelPageUp.html b/help/macro/source/reference/cursor/S_WheelPageUp.html index 850310d72e..d5ab3dbaa8 100644 --- a/help/macro/source/reference/cursor/S_WheelPageUp.html +++ b/help/macro/source/reference/cursor/S_WheelPageUp.html @@ -1,4 +1,7 @@ -S_WheelPageUp + + + +S_WheelPageUp diff --git a/help/macro/source/reference/cursor/S_WheelRight.html b/help/macro/source/reference/cursor/S_WheelRight.html index f4c16d9251..70b3fdcb2a 100644 --- a/help/macro/source/reference/cursor/S_WheelRight.html +++ b/help/macro/source/reference/cursor/S_WheelRight.html @@ -1,4 +1,7 @@ -S_WheelRight + + + +S_WheelRight diff --git a/help/macro/source/reference/cursor/S_WheelUp.html b/help/macro/source/reference/cursor/S_WheelUp.html index be15fa2a37..c8d7a957c5 100644 --- a/help/macro/source/reference/cursor/S_WheelUp.html +++ b/help/macro/source/reference/cursor/S_WheelUp.html @@ -1,4 +1,7 @@ -S_WheelUp + + + +S_WheelUp diff --git a/help/macro/source/reference/cursor/S_WordLeft.html b/help/macro/source/reference/cursor/S_WordLeft.html index 28716e3cbb..0687aba59d 100644 --- a/help/macro/source/reference/cursor/S_WordLeft.html +++ b/help/macro/source/reference/cursor/S_WordLeft.html @@ -1,4 +1,7 @@ -S_WordLeft + + + +S_WordLeft diff --git a/help/macro/source/reference/cursor/S_WordRight.html b/help/macro/source/reference/cursor/S_WordRight.html index 3839278fb3..97b6fdc1f5 100644 --- a/help/macro/source/reference/cursor/S_WordRight.html +++ b/help/macro/source/reference/cursor/S_WordRight.html @@ -1,4 +1,7 @@ -S_WordRight + + + +S_WordRight diff --git a/help/macro/source/reference/cursor/index.html b/help/macro/source/reference/cursor/index.html index 963bb1da5d..c6e598a4a7 100644 --- a/help/macro/source/reference/cursor/index.html +++ b/help/macro/source/reference/cursor/index.html @@ -1,4 +1,7 @@ -カーソル移動 + + + +カーソル移動 diff --git a/help/macro/source/reference/custom/S_CustMenu1.html b/help/macro/source/reference/custom/S_CustMenu1.html index 73886471cc..f3e250ddd1 100644 --- a/help/macro/source/reference/custom/S_CustMenu1.html +++ b/help/macro/source/reference/custom/S_CustMenu1.html @@ -1,4 +1,7 @@ -S_CustMenu1 + + + +S_CustMenu1 diff --git a/help/macro/source/reference/custom/S_CustMenu10.html b/help/macro/source/reference/custom/S_CustMenu10.html index 497fb0bb12..3714c8b485 100644 --- a/help/macro/source/reference/custom/S_CustMenu10.html +++ b/help/macro/source/reference/custom/S_CustMenu10.html @@ -1,4 +1,7 @@ -S_CustMenu10 + + + +S_CustMenu10 diff --git a/help/macro/source/reference/custom/S_CustMenu11.html b/help/macro/source/reference/custom/S_CustMenu11.html index 6066c0ac20..b9a6b57a54 100644 --- a/help/macro/source/reference/custom/S_CustMenu11.html +++ b/help/macro/source/reference/custom/S_CustMenu11.html @@ -1,4 +1,7 @@ -S_CustMenu11 + + + +S_CustMenu11 diff --git a/help/macro/source/reference/custom/S_CustMenu12.html b/help/macro/source/reference/custom/S_CustMenu12.html index c39057b670..23d83ccb97 100644 --- a/help/macro/source/reference/custom/S_CustMenu12.html +++ b/help/macro/source/reference/custom/S_CustMenu12.html @@ -1,4 +1,7 @@ -S_CustMenu12 + + + +S_CustMenu12 diff --git a/help/macro/source/reference/custom/S_CustMenu13.html b/help/macro/source/reference/custom/S_CustMenu13.html index fd662ca8ba..577b35bcb4 100644 --- a/help/macro/source/reference/custom/S_CustMenu13.html +++ b/help/macro/source/reference/custom/S_CustMenu13.html @@ -1,4 +1,7 @@ -S_CustMenu13 + + + +S_CustMenu13 diff --git a/help/macro/source/reference/custom/S_CustMenu14.html b/help/macro/source/reference/custom/S_CustMenu14.html index 6c30968410..f7ed28ba3a 100644 --- a/help/macro/source/reference/custom/S_CustMenu14.html +++ b/help/macro/source/reference/custom/S_CustMenu14.html @@ -1,4 +1,7 @@ -S_CustMenu14 + + + +S_CustMenu14 diff --git a/help/macro/source/reference/custom/S_CustMenu15.html b/help/macro/source/reference/custom/S_CustMenu15.html index 30e79bd8af..c1a6be305c 100644 --- a/help/macro/source/reference/custom/S_CustMenu15.html +++ b/help/macro/source/reference/custom/S_CustMenu15.html @@ -1,4 +1,7 @@ -S_CustMenu15 + + + +S_CustMenu15 diff --git a/help/macro/source/reference/custom/S_CustMenu16.html b/help/macro/source/reference/custom/S_CustMenu16.html index a8d6167876..0c7cc175ab 100644 --- a/help/macro/source/reference/custom/S_CustMenu16.html +++ b/help/macro/source/reference/custom/S_CustMenu16.html @@ -1,4 +1,7 @@ -S_CustMenu16 + + + +S_CustMenu16 diff --git a/help/macro/source/reference/custom/S_CustMenu17.html b/help/macro/source/reference/custom/S_CustMenu17.html index 6234334d9a..03c3ec5a5e 100644 --- a/help/macro/source/reference/custom/S_CustMenu17.html +++ b/help/macro/source/reference/custom/S_CustMenu17.html @@ -1,4 +1,7 @@ -S_CustMenu17 + + + +S_CustMenu17 diff --git a/help/macro/source/reference/custom/S_CustMenu18.html b/help/macro/source/reference/custom/S_CustMenu18.html index 5391525974..c133f9c75a 100644 --- a/help/macro/source/reference/custom/S_CustMenu18.html +++ b/help/macro/source/reference/custom/S_CustMenu18.html @@ -1,4 +1,7 @@ -S_CustMenu18 + + + +S_CustMenu18 diff --git a/help/macro/source/reference/custom/S_CustMenu19.html b/help/macro/source/reference/custom/S_CustMenu19.html index 33ecca5354..969ed12786 100644 --- a/help/macro/source/reference/custom/S_CustMenu19.html +++ b/help/macro/source/reference/custom/S_CustMenu19.html @@ -1,4 +1,7 @@ -S_CustMenu19 + + + +S_CustMenu19 diff --git a/help/macro/source/reference/custom/S_CustMenu2.html b/help/macro/source/reference/custom/S_CustMenu2.html index bcba2a1523..0ce865c8c9 100644 --- a/help/macro/source/reference/custom/S_CustMenu2.html +++ b/help/macro/source/reference/custom/S_CustMenu2.html @@ -1,4 +1,7 @@ -S_CustMenu2 + + + +S_CustMenu2 diff --git a/help/macro/source/reference/custom/S_CustMenu20.html b/help/macro/source/reference/custom/S_CustMenu20.html index a341150636..8dd00ac0b0 100644 --- a/help/macro/source/reference/custom/S_CustMenu20.html +++ b/help/macro/source/reference/custom/S_CustMenu20.html @@ -1,4 +1,7 @@ -S_CustMenu20 + + + +S_CustMenu20 diff --git a/help/macro/source/reference/custom/S_CustMenu21.html b/help/macro/source/reference/custom/S_CustMenu21.html index 53f8b1c0a7..a38c0034d5 100644 --- a/help/macro/source/reference/custom/S_CustMenu21.html +++ b/help/macro/source/reference/custom/S_CustMenu21.html @@ -1,4 +1,7 @@ -S_CustMenu21 + + + +S_CustMenu21 diff --git a/help/macro/source/reference/custom/S_CustMenu22.html b/help/macro/source/reference/custom/S_CustMenu22.html index 6d4cad4041..ce12fb53a6 100644 --- a/help/macro/source/reference/custom/S_CustMenu22.html +++ b/help/macro/source/reference/custom/S_CustMenu22.html @@ -1,4 +1,7 @@ -S_CustMenu22 + + + +S_CustMenu22 diff --git a/help/macro/source/reference/custom/S_CustMenu23.html b/help/macro/source/reference/custom/S_CustMenu23.html index 27f0568e29..9193e3c01c 100644 --- a/help/macro/source/reference/custom/S_CustMenu23.html +++ b/help/macro/source/reference/custom/S_CustMenu23.html @@ -1,4 +1,7 @@ -S_CustMenu23 + + + +S_CustMenu23 diff --git a/help/macro/source/reference/custom/S_CustMenu24.html b/help/macro/source/reference/custom/S_CustMenu24.html index 4c6217f2bc..5507262c97 100644 --- a/help/macro/source/reference/custom/S_CustMenu24.html +++ b/help/macro/source/reference/custom/S_CustMenu24.html @@ -1,4 +1,7 @@ -S_CustMenu24 + + + +S_CustMenu24 diff --git a/help/macro/source/reference/custom/S_CustMenu3.html b/help/macro/source/reference/custom/S_CustMenu3.html index 76fa4224cc..df36e55879 100644 --- a/help/macro/source/reference/custom/S_CustMenu3.html +++ b/help/macro/source/reference/custom/S_CustMenu3.html @@ -1,4 +1,7 @@ -S_CustMenu3 + + + +S_CustMenu3 diff --git a/help/macro/source/reference/custom/S_CustMenu4.html b/help/macro/source/reference/custom/S_CustMenu4.html index 71f0cb4ea5..3ec276d64f 100644 --- a/help/macro/source/reference/custom/S_CustMenu4.html +++ b/help/macro/source/reference/custom/S_CustMenu4.html @@ -1,4 +1,7 @@ -S_CustMenu4 + + + +S_CustMenu4 diff --git a/help/macro/source/reference/custom/S_CustMenu5.html b/help/macro/source/reference/custom/S_CustMenu5.html index 983184b9da..d6a9660e15 100644 --- a/help/macro/source/reference/custom/S_CustMenu5.html +++ b/help/macro/source/reference/custom/S_CustMenu5.html @@ -1,4 +1,7 @@ -S_CustMenu5 + + + +S_CustMenu5 diff --git a/help/macro/source/reference/custom/S_CustMenu6.html b/help/macro/source/reference/custom/S_CustMenu6.html index f63a16bda8..b6723af5c0 100644 --- a/help/macro/source/reference/custom/S_CustMenu6.html +++ b/help/macro/source/reference/custom/S_CustMenu6.html @@ -1,4 +1,7 @@ -S_CustMenu6 + + + +S_CustMenu6 diff --git a/help/macro/source/reference/custom/S_CustMenu7.html b/help/macro/source/reference/custom/S_CustMenu7.html index 309c55c11e..708a4d7ec5 100644 --- a/help/macro/source/reference/custom/S_CustMenu7.html +++ b/help/macro/source/reference/custom/S_CustMenu7.html @@ -1,4 +1,7 @@ -S_CustMenu7 + + + +S_CustMenu7 diff --git a/help/macro/source/reference/custom/S_CustMenu8.html b/help/macro/source/reference/custom/S_CustMenu8.html index 1b358a4d9d..0f74e819ab 100644 --- a/help/macro/source/reference/custom/S_CustMenu8.html +++ b/help/macro/source/reference/custom/S_CustMenu8.html @@ -1,4 +1,7 @@ -S_CustMenu8 + + + +S_CustMenu8 diff --git a/help/macro/source/reference/custom/S_CustMenu9.html b/help/macro/source/reference/custom/S_CustMenu9.html index 260a39f756..780870975b 100644 --- a/help/macro/source/reference/custom/S_CustMenu9.html +++ b/help/macro/source/reference/custom/S_CustMenu9.html @@ -1,4 +1,7 @@ -S_CustMenu9 + + + +S_CustMenu9 diff --git a/help/macro/source/reference/custom/S_RMenu.html b/help/macro/source/reference/custom/S_RMenu.html index 75d08875c8..ae6a987c07 100644 --- a/help/macro/source/reference/custom/S_RMenu.html +++ b/help/macro/source/reference/custom/S_RMenu.html @@ -1,4 +1,7 @@ -S_RMenu + + + +S_RMenu diff --git a/help/macro/source/reference/custom/index.html b/help/macro/source/reference/custom/index.html index 109aacf7eb..b18c09386d 100644 --- a/help/macro/source/reference/custom/index.html +++ b/help/macro/source/reference/custom/index.html @@ -1,4 +1,7 @@ -カスタムメニュー + + + +カスタムメニュー diff --git a/help/macro/source/reference/edit/S_Char.html b/help/macro/source/reference/edit/S_Char.html index 6a5293c2e0..fac680c7e1 100644 --- a/help/macro/source/reference/edit/S_Char.html +++ b/help/macro/source/reference/edit/S_Char.html @@ -1,4 +1,7 @@ -S_Char + + + +S_Char diff --git a/help/macro/source/reference/edit/S_CharIme.html b/help/macro/source/reference/edit/S_CharIme.html index f57ef9595a..ea53b8e56e 100644 --- a/help/macro/source/reference/edit/S_CharIme.html +++ b/help/macro/source/reference/edit/S_CharIme.html @@ -1,4 +1,7 @@ -S_CharIme + + + +S_CharIme diff --git a/help/macro/source/reference/edit/S_CutLine.html b/help/macro/source/reference/edit/S_CutLine.html index c25b8fb3b9..d15bdc47bb 100644 --- a/help/macro/source/reference/edit/S_CutLine.html +++ b/help/macro/source/reference/edit/S_CutLine.html @@ -1,4 +1,7 @@ -S_CutLine + + + +S_CutLine diff --git a/help/macro/source/reference/edit/S_Delete.html b/help/macro/source/reference/edit/S_Delete.html index abc97cb5a8..9450ea2e3d 100644 --- a/help/macro/source/reference/edit/S_Delete.html +++ b/help/macro/source/reference/edit/S_Delete.html @@ -1,4 +1,7 @@ -S_Delete + + + +S_Delete diff --git a/help/macro/source/reference/edit/S_DeleteBack.html b/help/macro/source/reference/edit/S_DeleteBack.html index cc861f7c6a..f937afe693 100644 --- a/help/macro/source/reference/edit/S_DeleteBack.html +++ b/help/macro/source/reference/edit/S_DeleteBack.html @@ -1,4 +1,7 @@ -S_DeleteBack + + + +S_DeleteBack diff --git a/help/macro/source/reference/edit/S_DeleteLine.html b/help/macro/source/reference/edit/S_DeleteLine.html index 51d6e5107d..3f5e32ad3d 100644 --- a/help/macro/source/reference/edit/S_DeleteLine.html +++ b/help/macro/source/reference/edit/S_DeleteLine.html @@ -1,4 +1,7 @@ -S_DeleteLine + + + +S_DeleteLine diff --git a/help/macro/source/reference/edit/S_DuplicateLine.html b/help/macro/source/reference/edit/S_DuplicateLine.html index 6849b1afa3..cf5c391ff9 100644 --- a/help/macro/source/reference/edit/S_DuplicateLine.html +++ b/help/macro/source/reference/edit/S_DuplicateLine.html @@ -1,4 +1,7 @@ -S_DuplicateLine + + + +S_DuplicateLine diff --git a/help/macro/source/reference/edit/S_IndentSpace.html b/help/macro/source/reference/edit/S_IndentSpace.html index 893d25aa0a..f729e315ba 100644 --- a/help/macro/source/reference/edit/S_IndentSpace.html +++ b/help/macro/source/reference/edit/S_IndentSpace.html @@ -1,4 +1,7 @@ -S_IndentSpace + + + +S_IndentSpace diff --git a/help/macro/source/reference/edit/S_IndentTab.html b/help/macro/source/reference/edit/S_IndentTab.html index 279d9682e8..f00b5596ff 100644 --- a/help/macro/source/reference/edit/S_IndentTab.html +++ b/help/macro/source/reference/edit/S_IndentTab.html @@ -1,4 +1,7 @@ -S_IndentTab + + + +S_IndentTab diff --git a/help/macro/source/reference/edit/S_LTrim.html b/help/macro/source/reference/edit/S_LTrim.html index 9f0b28e1b7..de04f95dd6 100644 --- a/help/macro/source/reference/edit/S_LTrim.html +++ b/help/macro/source/reference/edit/S_LTrim.html @@ -1,4 +1,7 @@ -S_LTrim + + + +S_LTrim diff --git a/help/macro/source/reference/edit/S_LineCutToEnd.html b/help/macro/source/reference/edit/S_LineCutToEnd.html index 13bd41fb4e..2a32f21e23 100644 --- a/help/macro/source/reference/edit/S_LineCutToEnd.html +++ b/help/macro/source/reference/edit/S_LineCutToEnd.html @@ -1,4 +1,7 @@ -S_LineCutToEnd + + + +S_LineCutToEnd diff --git a/help/macro/source/reference/edit/S_LineCutToStart.html b/help/macro/source/reference/edit/S_LineCutToStart.html index 7e2f59a3b6..575bb32ef2 100644 --- a/help/macro/source/reference/edit/S_LineCutToStart.html +++ b/help/macro/source/reference/edit/S_LineCutToStart.html @@ -1,4 +1,7 @@ -S_LineCutToStart + + + +S_LineCutToStart diff --git a/help/macro/source/reference/edit/S_LineDeleteToEnd.html b/help/macro/source/reference/edit/S_LineDeleteToEnd.html index 4ffa1215ec..624d29b39c 100644 --- a/help/macro/source/reference/edit/S_LineDeleteToEnd.html +++ b/help/macro/source/reference/edit/S_LineDeleteToEnd.html @@ -1,4 +1,7 @@ -S_LineDeleteToEnd + + + +S_LineDeleteToEnd diff --git a/help/macro/source/reference/edit/S_LineDeleteToStart.html b/help/macro/source/reference/edit/S_LineDeleteToStart.html index 191448cc8a..789bb9511a 100644 --- a/help/macro/source/reference/edit/S_LineDeleteToStart.html +++ b/help/macro/source/reference/edit/S_LineDeleteToStart.html @@ -1,4 +1,7 @@ -S_LineDeleteToStart + + + +S_LineDeleteToStart diff --git a/help/macro/source/reference/edit/S_Merge.html b/help/macro/source/reference/edit/S_Merge.html index 76bb7a900f..e7a2d475ac 100644 --- a/help/macro/source/reference/edit/S_Merge.html +++ b/help/macro/source/reference/edit/S_Merge.html @@ -1,4 +1,7 @@ -S_Merge + + + +S_Merge diff --git a/help/macro/source/reference/edit/S_RTrim.html b/help/macro/source/reference/edit/S_RTrim.html index 39a5329a02..a91b9b2770 100644 --- a/help/macro/source/reference/edit/S_RTrim.html +++ b/help/macro/source/reference/edit/S_RTrim.html @@ -1,4 +1,7 @@ -S_RTrim + + + +S_RTrim diff --git a/help/macro/source/reference/edit/S_Redo.html b/help/macro/source/reference/edit/S_Redo.html index 86da22a8ea..050a6fabc6 100644 --- a/help/macro/source/reference/edit/S_Redo.html +++ b/help/macro/source/reference/edit/S_Redo.html @@ -1,4 +1,7 @@ -S_Redo + + + +S_Redo diff --git a/help/macro/source/reference/edit/S_SortAsc.html b/help/macro/source/reference/edit/S_SortAsc.html index 9c1a5a5e0c..214e91b3e2 100644 --- a/help/macro/source/reference/edit/S_SortAsc.html +++ b/help/macro/source/reference/edit/S_SortAsc.html @@ -1,4 +1,7 @@ -S_SortAsc + + + +S_SortAsc diff --git a/help/macro/source/reference/edit/S_SortDesc.html b/help/macro/source/reference/edit/S_SortDesc.html index 2a54e53fa9..2690635fdf 100644 --- a/help/macro/source/reference/edit/S_SortDesc.html +++ b/help/macro/source/reference/edit/S_SortDesc.html @@ -1,4 +1,7 @@ -S_SortDesc + + + +S_SortDesc diff --git a/help/macro/source/reference/edit/S_Undo.html b/help/macro/source/reference/edit/S_Undo.html index cd58f4ba79..0facea5b83 100644 --- a/help/macro/source/reference/edit/S_Undo.html +++ b/help/macro/source/reference/edit/S_Undo.html @@ -1,4 +1,7 @@ -S_Undo + + + +S_Undo diff --git a/help/macro/source/reference/edit/S_UnindentSpace.html b/help/macro/source/reference/edit/S_UnindentSpace.html index 3c28cfad95..936863e291 100644 --- a/help/macro/source/reference/edit/S_UnindentSpace.html +++ b/help/macro/source/reference/edit/S_UnindentSpace.html @@ -1,4 +1,7 @@ -S_UnindentSpace + + + +S_UnindentSpace diff --git a/help/macro/source/reference/edit/S_UnindentTab.html b/help/macro/source/reference/edit/S_UnindentTab.html index 92f750c33b..dcff6ceaf7 100644 --- a/help/macro/source/reference/edit/S_UnindentTab.html +++ b/help/macro/source/reference/edit/S_UnindentTab.html @@ -1,4 +1,7 @@ -S_UnindentTab + + + +S_UnindentTab diff --git a/help/macro/source/reference/edit/S_WordCut.html b/help/macro/source/reference/edit/S_WordCut.html index 6ce40b1947..33214d8d99 100644 --- a/help/macro/source/reference/edit/S_WordCut.html +++ b/help/macro/source/reference/edit/S_WordCut.html @@ -1,4 +1,7 @@ -S_WordCut + + + +S_WordCut diff --git a/help/macro/source/reference/edit/S_WordDelete.html b/help/macro/source/reference/edit/S_WordDelete.html index a4f9f2b92e..17c13e0b9e 100644 --- a/help/macro/source/reference/edit/S_WordDelete.html +++ b/help/macro/source/reference/edit/S_WordDelete.html @@ -1,4 +1,7 @@ -S_WordDelete + + + +S_WordDelete diff --git a/help/macro/source/reference/edit/S_WordDeleteToEnd.html b/help/macro/source/reference/edit/S_WordDeleteToEnd.html index 9653a4f81e..a8174b5eb7 100644 --- a/help/macro/source/reference/edit/S_WordDeleteToEnd.html +++ b/help/macro/source/reference/edit/S_WordDeleteToEnd.html @@ -1,4 +1,7 @@ -S_WordDeleteToEnd + + + +S_WordDeleteToEnd diff --git a/help/macro/source/reference/edit/S_WordDeleteToStart.html b/help/macro/source/reference/edit/S_WordDeleteToStart.html index 79747b44f8..219d542378 100644 --- a/help/macro/source/reference/edit/S_WordDeleteToStart.html +++ b/help/macro/source/reference/edit/S_WordDeleteToStart.html @@ -1,4 +1,7 @@ -S_WordDeleteToStart + + + +S_WordDeleteToStart diff --git a/help/macro/source/reference/edit/index.html b/help/macro/source/reference/edit/index.html index 096bcccd77..ea0af3c557 100644 --- a/help/macro/source/reference/edit/index.html +++ b/help/macro/source/reference/edit/index.html @@ -1,4 +1,7 @@ -編集 + + + +編集 diff --git a/help/macro/source/reference/file/S_ActivateSQLPLUS.html b/help/macro/source/reference/file/S_ActivateSQLPLUS.html index 1dd6a4869c..1361aa2bf9 100644 --- a/help/macro/source/reference/file/S_ActivateSQLPLUS.html +++ b/help/macro/source/reference/file/S_ActivateSQLPLUS.html @@ -1,4 +1,7 @@ -S_ActivateSQLPLUS + + + +S_ActivateSQLPLUS diff --git a/help/macro/source/reference/file/S_Browse.html b/help/macro/source/reference/file/S_Browse.html index 61e485cc3b..d7a81da64e 100644 --- a/help/macro/source/reference/file/S_Browse.html +++ b/help/macro/source/reference/file/S_Browse.html @@ -1,4 +1,7 @@ -S_Browse + + + +S_Browse diff --git a/help/macro/source/reference/file/S_ExecSQLPLUS.html b/help/macro/source/reference/file/S_ExecSQLPLUS.html index d4a018a860..75bb9a34a6 100644 --- a/help/macro/source/reference/file/S_ExecSQLPLUS.html +++ b/help/macro/source/reference/file/S_ExecSQLPLUS.html @@ -1,4 +1,7 @@ -S_ExecSQLPLUS + + + +S_ExecSQLPLUS diff --git a/help/macro/source/reference/file/S_ExitAll.html b/help/macro/source/reference/file/S_ExitAll.html index 94c67aad84..2f2e1bb3bc 100644 --- a/help/macro/source/reference/file/S_ExitAll.html +++ b/help/macro/source/reference/file/S_ExitAll.html @@ -1,4 +1,7 @@ -S_ExitAll + + + +S_ExitAll diff --git a/help/macro/source/reference/file/S_ExitAllEditors.html b/help/macro/source/reference/file/S_ExitAllEditors.html index d5804cdd54..8339678365 100644 --- a/help/macro/source/reference/file/S_ExitAllEditors.html +++ b/help/macro/source/reference/file/S_ExitAllEditors.html @@ -1,4 +1,7 @@ -S_ExitAllEditors + + + +S_ExitAllEditors diff --git a/help/macro/source/reference/file/S_FileClose.html b/help/macro/source/reference/file/S_FileClose.html index 3174da0efc..b5a9579f81 100644 --- a/help/macro/source/reference/file/S_FileClose.html +++ b/help/macro/source/reference/file/S_FileClose.html @@ -1,4 +1,7 @@ -S_FileClose + + + +S_FileClose diff --git a/help/macro/source/reference/file/S_FileCloseOpen.html b/help/macro/source/reference/file/S_FileCloseOpen.html index c2d929a534..516430f861 100644 --- a/help/macro/source/reference/file/S_FileCloseOpen.html +++ b/help/macro/source/reference/file/S_FileCloseOpen.html @@ -1,4 +1,7 @@ -S_FileCloseOpen + + + +S_FileCloseOpen diff --git a/help/macro/source/reference/file/S_FileNew.html b/help/macro/source/reference/file/S_FileNew.html index 776241518d..d7b00c5155 100644 --- a/help/macro/source/reference/file/S_FileNew.html +++ b/help/macro/source/reference/file/S_FileNew.html @@ -1,4 +1,7 @@ -S_FileNew + + + +S_FileNew diff --git a/help/macro/source/reference/file/S_FileOpen.html b/help/macro/source/reference/file/S_FileOpen.html index d880f307b7..ef199cd3d4 100644 --- a/help/macro/source/reference/file/S_FileOpen.html +++ b/help/macro/source/reference/file/S_FileOpen.html @@ -1,4 +1,7 @@ -S_FileOpen + + + +S_FileOpen diff --git a/help/macro/source/reference/file/S_FileReopen.html b/help/macro/source/reference/file/S_FileReopen.html index 670f1a08c1..165fe28d28 100644 --- a/help/macro/source/reference/file/S_FileReopen.html +++ b/help/macro/source/reference/file/S_FileReopen.html @@ -1,4 +1,7 @@ -S_FileReopen + + + +S_FileReopen diff --git a/help/macro/source/reference/file/S_FileReopenCESU8.html b/help/macro/source/reference/file/S_FileReopenCESU8.html index 7b324cae13..d91d80178d 100644 --- a/help/macro/source/reference/file/S_FileReopenCESU8.html +++ b/help/macro/source/reference/file/S_FileReopenCESU8.html @@ -1,4 +1,7 @@ -S_FileReopenCESU8 + + + +S_FileReopenCESU8 diff --git a/help/macro/source/reference/file/S_FileReopenEUC.html b/help/macro/source/reference/file/S_FileReopenEUC.html index a8258be471..54abb05d4c 100644 --- a/help/macro/source/reference/file/S_FileReopenEUC.html +++ b/help/macro/source/reference/file/S_FileReopenEUC.html @@ -1,4 +1,7 @@ -S_FileReopenEUC + + + +S_FileReopenEUC diff --git a/help/macro/source/reference/file/S_FileReopenJIS.html b/help/macro/source/reference/file/S_FileReopenJIS.html index e47ee247ac..bca5ca6380 100644 --- a/help/macro/source/reference/file/S_FileReopenJIS.html +++ b/help/macro/source/reference/file/S_FileReopenJIS.html @@ -1,4 +1,7 @@ -S_FileReopenJIS + + + +S_FileReopenJIS diff --git a/help/macro/source/reference/file/S_FileReopenLatin1.html b/help/macro/source/reference/file/S_FileReopenLatin1.html index 40db2af85b..b7b836f0e7 100644 --- a/help/macro/source/reference/file/S_FileReopenLatin1.html +++ b/help/macro/source/reference/file/S_FileReopenLatin1.html @@ -1,4 +1,7 @@ -S_FileReopenLatin1 + + + +S_FileReopenLatin1 diff --git a/help/macro/source/reference/file/S_FileReopenSJIS.html b/help/macro/source/reference/file/S_FileReopenSJIS.html index 67ae5ab832..3685222429 100644 --- a/help/macro/source/reference/file/S_FileReopenSJIS.html +++ b/help/macro/source/reference/file/S_FileReopenSJIS.html @@ -1,4 +1,7 @@ -S_FileReopenSJIS + + + +S_FileReopenSJIS diff --git a/help/macro/source/reference/file/S_FileReopenUNICODE.html b/help/macro/source/reference/file/S_FileReopenUNICODE.html index 7949e0d1ad..b988fd41b8 100644 --- a/help/macro/source/reference/file/S_FileReopenUNICODE.html +++ b/help/macro/source/reference/file/S_FileReopenUNICODE.html @@ -1,4 +1,7 @@ -S_FileReopenUNICODE + + + +S_FileReopenUNICODE diff --git a/help/macro/source/reference/file/S_FileReopenUNICODEBE.html b/help/macro/source/reference/file/S_FileReopenUNICODEBE.html index 55f8dd10c0..9b79d7960b 100644 --- a/help/macro/source/reference/file/S_FileReopenUNICODEBE.html +++ b/help/macro/source/reference/file/S_FileReopenUNICODEBE.html @@ -1,4 +1,7 @@ -S_FileReopenUNICODEBE + + + +S_FileReopenUNICODEBE diff --git a/help/macro/source/reference/file/S_FileReopenUTF7.html b/help/macro/source/reference/file/S_FileReopenUTF7.html index 3d942d5725..ace3b835bb 100644 --- a/help/macro/source/reference/file/S_FileReopenUTF7.html +++ b/help/macro/source/reference/file/S_FileReopenUTF7.html @@ -1,4 +1,7 @@ -S_FileReopenUTF7 + + + +S_FileReopenUTF7 diff --git a/help/macro/source/reference/file/S_FileReopenUTF8.html b/help/macro/source/reference/file/S_FileReopenUTF8.html index bdfe287f59..d78ce05654 100644 --- a/help/macro/source/reference/file/S_FileReopenUTF8.html +++ b/help/macro/source/reference/file/S_FileReopenUTF8.html @@ -1,4 +1,7 @@ -S_FileReopenUTF8 + + + +S_FileReopenUTF8 diff --git a/help/macro/source/reference/file/S_FileSave.html b/help/macro/source/reference/file/S_FileSave.html index d1646e25bd..9cb2334051 100644 --- a/help/macro/source/reference/file/S_FileSave.html +++ b/help/macro/source/reference/file/S_FileSave.html @@ -1,4 +1,7 @@ -S_FileSave + + + +S_FileSave diff --git a/help/macro/source/reference/file/S_FileSaveAll.html b/help/macro/source/reference/file/S_FileSaveAll.html index 23d5f90021..eb7fec1123 100644 --- a/help/macro/source/reference/file/S_FileSaveAll.html +++ b/help/macro/source/reference/file/S_FileSaveAll.html @@ -1,4 +1,7 @@ -S_FileSaveAll + + + +S_FileSaveAll diff --git a/help/macro/source/reference/file/S_FileSaveAs.html b/help/macro/source/reference/file/S_FileSaveAs.html index 22da777a9d..a29c5bf386 100644 --- a/help/macro/source/reference/file/S_FileSaveAs.html +++ b/help/macro/source/reference/file/S_FileSaveAs.html @@ -1,4 +1,7 @@ -S_FileSaveAs + + + +S_FileSaveAs diff --git a/help/macro/source/reference/file/S_InsFile.html b/help/macro/source/reference/file/S_InsFile.html index ebc5f4b763..f20164a14b 100644 --- a/help/macro/source/reference/file/S_InsFile.html +++ b/help/macro/source/reference/file/S_InsFile.html @@ -1,4 +1,7 @@ -S_InsFile + + + +S_InsFile diff --git a/help/macro/source/reference/file/S_OpenHfromtoC.html b/help/macro/source/reference/file/S_OpenHfromtoC.html index 97f88b3492..acce796eff 100644 --- a/help/macro/source/reference/file/S_OpenHfromtoC.html +++ b/help/macro/source/reference/file/S_OpenHfromtoC.html @@ -1,4 +1,7 @@ -S_OpenHfromtoC + + + +S_OpenHfromtoC diff --git a/help/macro/source/reference/file/S_Print.html b/help/macro/source/reference/file/S_Print.html index 94de0afa3b..a3d3eca0b9 100644 --- a/help/macro/source/reference/file/S_Print.html +++ b/help/macro/source/reference/file/S_Print.html @@ -1,4 +1,7 @@ -S_Print + + + +S_Print diff --git a/help/macro/source/reference/file/S_PrintPageSetup.html b/help/macro/source/reference/file/S_PrintPageSetup.html index 6145446acd..a9687ec5e3 100644 --- a/help/macro/source/reference/file/S_PrintPageSetup.html +++ b/help/macro/source/reference/file/S_PrintPageSetup.html @@ -1,4 +1,7 @@ -S_PrintPageSetup + + + +S_PrintPageSetup diff --git a/help/macro/source/reference/file/S_PrintPreview.html b/help/macro/source/reference/file/S_PrintPreview.html index 1bea763543..e1d4723452 100644 --- a/help/macro/source/reference/file/S_PrintPreview.html +++ b/help/macro/source/reference/file/S_PrintPreview.html @@ -1,4 +1,7 @@ -S_PrintPreview + + + +S_PrintPreview diff --git a/help/macro/source/reference/file/S_PropertyFile.html b/help/macro/source/reference/file/S_PropertyFile.html index 019f07a2ac..828d3ce0e4 100644 --- a/help/macro/source/reference/file/S_PropertyFile.html +++ b/help/macro/source/reference/file/S_PropertyFile.html @@ -1,4 +1,7 @@ -S_PropertyFile + + + +S_PropertyFile diff --git a/help/macro/source/reference/file/S_PutFile.html b/help/macro/source/reference/file/S_PutFile.html index 3803e9245f..4f9b2324a6 100644 --- a/help/macro/source/reference/file/S_PutFile.html +++ b/help/macro/source/reference/file/S_PutFile.html @@ -1,4 +1,7 @@ -S_PutFile + + + +S_PutFile diff --git a/help/macro/source/reference/file/S_ReadOnly.html b/help/macro/source/reference/file/S_ReadOnly.html index 8cdda1dd86..e7e65bb4be 100644 --- a/help/macro/source/reference/file/S_ReadOnly.html +++ b/help/macro/source/reference/file/S_ReadOnly.html @@ -1,4 +1,7 @@ -S_ReadOnly + + + +S_ReadOnly diff --git a/help/macro/source/reference/file/S_ViewMode.html b/help/macro/source/reference/file/S_ViewMode.html index bd375023e0..228e7098fd 100644 --- a/help/macro/source/reference/file/S_ViewMode.html +++ b/help/macro/source/reference/file/S_ViewMode.html @@ -1,4 +1,7 @@ -S_ViewMode + + + +S_ViewMode diff --git a/help/macro/source/reference/file/index.html b/help/macro/source/reference/file/index.html index 14f54a8333..e81182e292 100644 --- a/help/macro/source/reference/file/index.html +++ b/help/macro/source/reference/file/index.html @@ -1,4 +1,7 @@ -ファイル操作 + + + +ファイル操作 diff --git a/help/macro/source/reference/find/S_BookmarkNext.html b/help/macro/source/reference/find/S_BookmarkNext.html index a4c8c1afd7..d54ec76ec1 100644 --- a/help/macro/source/reference/find/S_BookmarkNext.html +++ b/help/macro/source/reference/find/S_BookmarkNext.html @@ -1,4 +1,7 @@ -S_BookmarkNext + + + +S_BookmarkNext diff --git a/help/macro/source/reference/find/S_BookmarkPattern.html b/help/macro/source/reference/find/S_BookmarkPattern.html index f00a81db49..f6d7e280f9 100644 --- a/help/macro/source/reference/find/S_BookmarkPattern.html +++ b/help/macro/source/reference/find/S_BookmarkPattern.html @@ -1,4 +1,7 @@ -S_BookmarkPattern + + + +S_BookmarkPattern diff --git a/help/macro/source/reference/find/S_BookmarkPrev.html b/help/macro/source/reference/find/S_BookmarkPrev.html index 1101eddd02..7e4f13b727 100644 --- a/help/macro/source/reference/find/S_BookmarkPrev.html +++ b/help/macro/source/reference/find/S_BookmarkPrev.html @@ -1,4 +1,7 @@ -S_BookmarkPrev + + + +S_BookmarkPrev diff --git a/help/macro/source/reference/find/S_BookmarkReset.html b/help/macro/source/reference/find/S_BookmarkReset.html index e48bcbe3c4..9150589978 100644 --- a/help/macro/source/reference/find/S_BookmarkReset.html +++ b/help/macro/source/reference/find/S_BookmarkReset.html @@ -1,4 +1,7 @@ -S_BookmarkReset + + + +S_BookmarkReset diff --git a/help/macro/source/reference/find/S_BookmarkSet.html b/help/macro/source/reference/find/S_BookmarkSet.html index 2664c37eea..eaa8b8392b 100644 --- a/help/macro/source/reference/find/S_BookmarkSet.html +++ b/help/macro/source/reference/find/S_BookmarkSet.html @@ -1,4 +1,7 @@ -S_BookmarkSet + + + +S_BookmarkSet diff --git a/help/macro/source/reference/find/S_BookmarkView.html b/help/macro/source/reference/find/S_BookmarkView.html index 83aff8d159..b16e89f220 100644 --- a/help/macro/source/reference/find/S_BookmarkView.html +++ b/help/macro/source/reference/find/S_BookmarkView.html @@ -1,4 +1,7 @@ -S_BookmarkView + + + +S_BookmarkView diff --git a/help/macro/source/reference/find/S_BracketPair.html b/help/macro/source/reference/find/S_BracketPair.html index 33d653f236..ae96c00a93 100644 --- a/help/macro/source/reference/find/S_BracketPair.html +++ b/help/macro/source/reference/find/S_BracketPair.html @@ -1,4 +1,7 @@ -S_BracketPair + + + +S_BracketPair diff --git a/help/macro/source/reference/find/S_Compare.html b/help/macro/source/reference/find/S_Compare.html index 1d1f5350e5..f1b7e805fe 100644 --- a/help/macro/source/reference/find/S_Compare.html +++ b/help/macro/source/reference/find/S_Compare.html @@ -1,4 +1,7 @@ -S_Compare + + + +S_Compare diff --git a/help/macro/source/reference/find/S_Diff.html b/help/macro/source/reference/find/S_Diff.html index 303c80039c..8be4928144 100644 --- a/help/macro/source/reference/find/S_Diff.html +++ b/help/macro/source/reference/find/S_Diff.html @@ -1,4 +1,7 @@ -S_Diff + + + +S_Diff diff --git a/help/macro/source/reference/find/S_DiffDialog.html b/help/macro/source/reference/find/S_DiffDialog.html index 27c70d5d0b..b503a4f1a0 100644 --- a/help/macro/source/reference/find/S_DiffDialog.html +++ b/help/macro/source/reference/find/S_DiffDialog.html @@ -1,4 +1,7 @@ -S_DiffDialog + + + +S_DiffDialog diff --git a/help/macro/source/reference/find/S_DiffNext.html b/help/macro/source/reference/find/S_DiffNext.html index 8971b8b411..255ce33122 100644 --- a/help/macro/source/reference/find/S_DiffNext.html +++ b/help/macro/source/reference/find/S_DiffNext.html @@ -1,4 +1,7 @@ -S_DiffNext + + + +S_DiffNext diff --git a/help/macro/source/reference/find/S_DiffPrev.html b/help/macro/source/reference/find/S_DiffPrev.html index d2e692c369..87f45509eb 100644 --- a/help/macro/source/reference/find/S_DiffPrev.html +++ b/help/macro/source/reference/find/S_DiffPrev.html @@ -1,4 +1,7 @@ -S_DiffPrev + + + +S_DiffPrev diff --git a/help/macro/source/reference/find/S_DiffReset.html b/help/macro/source/reference/find/S_DiffReset.html index c43c6a7904..c3f3fdce61 100644 --- a/help/macro/source/reference/find/S_DiffReset.html +++ b/help/macro/source/reference/find/S_DiffReset.html @@ -1,4 +1,7 @@ -S_DiffReset + + + +S_DiffReset diff --git a/help/macro/source/reference/find/S_DirectTagJump.html b/help/macro/source/reference/find/S_DirectTagJump.html index 6e4f54afd4..3e3826431b 100644 --- a/help/macro/source/reference/find/S_DirectTagJump.html +++ b/help/macro/source/reference/find/S_DirectTagJump.html @@ -1,4 +1,7 @@ -S_DirectTagJump + + + +S_DirectTagJump diff --git a/help/macro/source/reference/find/S_Grep.html b/help/macro/source/reference/find/S_Grep.html index 58ab214628..e7d56ef670 100644 --- a/help/macro/source/reference/find/S_Grep.html +++ b/help/macro/source/reference/find/S_Grep.html @@ -1,4 +1,7 @@ -S_Grep + + + +S_Grep diff --git a/help/macro/source/reference/find/S_Jump.html b/help/macro/source/reference/find/S_Jump.html index a174169b0d..7ea33ac92d 100644 --- a/help/macro/source/reference/find/S_Jump.html +++ b/help/macro/source/reference/find/S_Jump.html @@ -1,4 +1,7 @@ -S_Jump + + + +S_Jump diff --git a/help/macro/source/reference/find/S_KeywordTagJump.html b/help/macro/source/reference/find/S_KeywordTagJump.html index 06b07d3aa3..eb3a332087 100644 --- a/help/macro/source/reference/find/S_KeywordTagJump.html +++ b/help/macro/source/reference/find/S_KeywordTagJump.html @@ -1,4 +1,7 @@ -S_KeywordTagJump + + + +S_KeywordTagJump diff --git a/help/macro/source/reference/find/S_Outline.html b/help/macro/source/reference/find/S_Outline.html index fcf7aff5ce..875afcadc4 100644 --- a/help/macro/source/reference/find/S_Outline.html +++ b/help/macro/source/reference/find/S_Outline.html @@ -1,4 +1,7 @@ -S_Outline + + + +S_Outline diff --git a/help/macro/source/reference/find/S_Replace.html b/help/macro/source/reference/find/S_Replace.html index a057ad4ba1..980d782f79 100644 --- a/help/macro/source/reference/find/S_Replace.html +++ b/help/macro/source/reference/find/S_Replace.html @@ -1,4 +1,7 @@ -S_Replace + + + +S_Replace diff --git a/help/macro/source/reference/find/S_ReplaceAll.html b/help/macro/source/reference/find/S_ReplaceAll.html index 0e5f245e95..17be202a94 100644 --- a/help/macro/source/reference/find/S_ReplaceAll.html +++ b/help/macro/source/reference/find/S_ReplaceAll.html @@ -1,4 +1,7 @@ -S_ReplaceAll + + + +S_ReplaceAll diff --git a/help/macro/source/reference/find/S_ReplaceDialog.html b/help/macro/source/reference/find/S_ReplaceDialog.html index 9e26e1c9fe..1f9d2ee4c0 100644 --- a/help/macro/source/reference/find/S_ReplaceDialog.html +++ b/help/macro/source/reference/find/S_ReplaceDialog.html @@ -1,4 +1,7 @@ -S_ReplaceDialog + + + +S_ReplaceDialog diff --git a/help/macro/source/reference/find/S_SearchClearMark.html b/help/macro/source/reference/find/S_SearchClearMark.html index 12a145a324..ae90a94e9c 100644 --- a/help/macro/source/reference/find/S_SearchClearMark.html +++ b/help/macro/source/reference/find/S_SearchClearMark.html @@ -1,4 +1,7 @@ -S_SearchClearMark + + + +S_SearchClearMark diff --git a/help/macro/source/reference/find/S_SearchDialog.html b/help/macro/source/reference/find/S_SearchDialog.html index e6cdc33bb1..12cee7005e 100644 --- a/help/macro/source/reference/find/S_SearchDialog.html +++ b/help/macro/source/reference/find/S_SearchDialog.html @@ -1,4 +1,7 @@ -S_SearchDialog + + + +S_SearchDialog diff --git a/help/macro/source/reference/find/S_SearchNext.html b/help/macro/source/reference/find/S_SearchNext.html index a56793b570..e04603ebb9 100644 --- a/help/macro/source/reference/find/S_SearchNext.html +++ b/help/macro/source/reference/find/S_SearchNext.html @@ -1,4 +1,7 @@ -S_SearchNext + + + +S_SearchNext diff --git a/help/macro/source/reference/find/S_SearchPrev.html b/help/macro/source/reference/find/S_SearchPrev.html index 56abb26b37..9145fe4646 100644 --- a/help/macro/source/reference/find/S_SearchPrev.html +++ b/help/macro/source/reference/find/S_SearchPrev.html @@ -1,4 +1,7 @@ -S_SearchPrev + + + +S_SearchPrev diff --git a/help/macro/source/reference/find/S_SearchStartPos.html b/help/macro/source/reference/find/S_SearchStartPos.html index 436bc684f3..acd4f66d4b 100644 --- a/help/macro/source/reference/find/S_SearchStartPos.html +++ b/help/macro/source/reference/find/S_SearchStartPos.html @@ -1,4 +1,7 @@ -S_SearchStartPos + + + +S_SearchStartPos diff --git a/help/macro/source/reference/find/S_TagJump.html b/help/macro/source/reference/find/S_TagJump.html index b20a97b953..8b692fcef2 100644 --- a/help/macro/source/reference/find/S_TagJump.html +++ b/help/macro/source/reference/find/S_TagJump.html @@ -1,4 +1,7 @@ -S_TagJump + + + +S_TagJump diff --git a/help/macro/source/reference/find/S_TagJumpBack.html b/help/macro/source/reference/find/S_TagJumpBack.html index 2bea5bf077..228d8c61c8 100644 --- a/help/macro/source/reference/find/S_TagJumpBack.html +++ b/help/macro/source/reference/find/S_TagJumpBack.html @@ -1,4 +1,7 @@ -S_TagJumpBack + + + +S_TagJumpBack diff --git a/help/macro/source/reference/find/S_TagMake.html b/help/macro/source/reference/find/S_TagMake.html index 94b9aa0d1c..39e0b1500a 100644 --- a/help/macro/source/reference/find/S_TagMake.html +++ b/help/macro/source/reference/find/S_TagMake.html @@ -1,4 +1,7 @@ -S_TagMake + + + +S_TagMake diff --git a/help/macro/source/reference/find/index.html b/help/macro/source/reference/find/index.html index 7ca261e47e..353a392e29 100644 --- a/help/macro/source/reference/find/index.html +++ b/help/macro/source/reference/find/index.html @@ -1,4 +1,7 @@ -検索 + + + +検索 diff --git a/help/macro/source/reference/index.html b/help/macro/source/reference/index.html index 38c6a4f99f..99926ab003 100644 --- a/help/macro/source/reference/index.html +++ b/help/macro/source/reference/index.html @@ -1,4 +1,7 @@ -関数 + + + +関数 diff --git a/help/macro/source/reference/insert/S_CtrlCode.html b/help/macro/source/reference/insert/S_CtrlCode.html index 33a8c73a2b..4ebc85fa49 100644 --- a/help/macro/source/reference/insert/S_CtrlCode.html +++ b/help/macro/source/reference/insert/S_CtrlCode.html @@ -1,4 +1,7 @@ -S_CtrlCode + + + +S_CtrlCode diff --git a/help/macro/source/reference/insert/S_CtrlCodeDialog.html b/help/macro/source/reference/insert/S_CtrlCodeDialog.html index 564f9ed05d..a17dc8dcac 100644 --- a/help/macro/source/reference/insert/S_CtrlCodeDialog.html +++ b/help/macro/source/reference/insert/S_CtrlCodeDialog.html @@ -1,4 +1,7 @@ -S_CtrlCodeDialog + + + +S_CtrlCodeDialog diff --git a/help/macro/source/reference/insert/S_InsertDate.html b/help/macro/source/reference/insert/S_InsertDate.html index ec7dcef3c9..693c309fad 100644 --- a/help/macro/source/reference/insert/S_InsertDate.html +++ b/help/macro/source/reference/insert/S_InsertDate.html @@ -1,4 +1,7 @@ -S_InsertDate + + + +S_InsertDate diff --git a/help/macro/source/reference/insert/S_InsertTime.html b/help/macro/source/reference/insert/S_InsertTime.html index 8fe96c8107..7516ac3e8c 100644 --- a/help/macro/source/reference/insert/S_InsertTime.html +++ b/help/macro/source/reference/insert/S_InsertTime.html @@ -1,4 +1,7 @@ -S_InsertTime + + + +S_InsertTime diff --git a/help/macro/source/reference/insert/index.html b/help/macro/source/reference/insert/index.html index 53f4b64501..195f56d50f 100644 --- a/help/macro/source/reference/insert/index.html +++ b/help/macro/source/reference/insert/index.html @@ -1,4 +1,7 @@ -挿入 + + + +挿入 diff --git a/help/macro/source/reference/mode/S_CancelMode.html b/help/macro/source/reference/mode/S_CancelMode.html index 857d73ed08..b51d214d7c 100644 --- a/help/macro/source/reference/mode/S_CancelMode.html +++ b/help/macro/source/reference/mode/S_CancelMode.html @@ -1,4 +1,7 @@ -S_CancelMode + + + +S_CancelMode diff --git a/help/macro/source/reference/mode/S_ChgCharSet.html b/help/macro/source/reference/mode/S_ChgCharSet.html index cbd57e865f..3e2b0d5f8b 100644 --- a/help/macro/source/reference/mode/S_ChgCharSet.html +++ b/help/macro/source/reference/mode/S_ChgCharSet.html @@ -1,4 +1,7 @@ -S_ChgCharSet + + + +S_ChgCharSet diff --git a/help/macro/source/reference/mode/S_ChgmodEOL.html b/help/macro/source/reference/mode/S_ChgmodEOL.html index 7f3662c4e0..fd8bbb42aa 100644 --- a/help/macro/source/reference/mode/S_ChgmodEOL.html +++ b/help/macro/source/reference/mode/S_ChgmodEOL.html @@ -1,4 +1,7 @@ -S_ChgmodEOL + + + +S_ChgmodEOL diff --git a/help/macro/source/reference/mode/S_ChgmodINS.html b/help/macro/source/reference/mode/S_ChgmodINS.html index 3840c6d9f6..c96e79447e 100644 --- a/help/macro/source/reference/mode/S_ChgmodINS.html +++ b/help/macro/source/reference/mode/S_ChgmodINS.html @@ -1,4 +1,7 @@ -S_ChgmodINS + + + +S_ChgmodINS diff --git a/help/macro/source/reference/mode/index.html b/help/macro/source/reference/mode/index.html index 48b5d3ffc0..5530056728 100644 --- a/help/macro/source/reference/mode/index.html +++ b/help/macro/source/reference/mode/index.html @@ -1,4 +1,7 @@ -モード切替 + + + +モード切替 diff --git a/help/macro/source/reference/other/S_ChangeTabWidth.html b/help/macro/source/reference/other/S_ChangeTabWidth.html index 5770b5e74b..127fb390b5 100644 --- a/help/macro/source/reference/other/S_ChangeTabWidth.html +++ b/help/macro/source/reference/other/S_ChangeTabWidth.html @@ -1,4 +1,7 @@ -S_ChangeTabWidth + + + +S_ChangeTabWidth diff --git a/help/macro/source/reference/other/S_ExpandParameter.html b/help/macro/source/reference/other/S_ExpandParameter.html index 5ee2d70b39..7c6fbf71c8 100644 --- a/help/macro/source/reference/other/S_ExpandParameter.html +++ b/help/macro/source/reference/other/S_ExpandParameter.html @@ -1,4 +1,7 @@ -S_ExpandParameter + + + +S_ExpandParameter diff --git a/help/macro/source/reference/other/S_GetCharCode.html b/help/macro/source/reference/other/S_GetCharCode.html index f1b5ffc8bf..66ef7da148 100644 --- a/help/macro/source/reference/other/S_GetCharCode.html +++ b/help/macro/source/reference/other/S_GetCharCode.html @@ -1,4 +1,7 @@ -S_GetCharCode + + + +S_GetCharCode diff --git a/help/macro/source/reference/other/S_GetFilename.html b/help/macro/source/reference/other/S_GetFilename.html index 2de95552f3..18de5755a7 100644 --- a/help/macro/source/reference/other/S_GetFilename.html +++ b/help/macro/source/reference/other/S_GetFilename.html @@ -1,4 +1,7 @@ -S_GetFilename + + + +S_GetFilename diff --git a/help/macro/source/reference/other/S_GetLineCode.html b/help/macro/source/reference/other/S_GetLineCode.html index 89ee977c8f..c94f8a49da 100644 --- a/help/macro/source/reference/other/S_GetLineCode.html +++ b/help/macro/source/reference/other/S_GetLineCode.html @@ -1,4 +1,7 @@ -S_GetLineCode + + + +S_GetLineCode diff --git a/help/macro/source/reference/other/S_GetLineCount.html b/help/macro/source/reference/other/S_GetLineCount.html index 60a537faf8..ed228dff34 100644 --- a/help/macro/source/reference/other/S_GetLineCount.html +++ b/help/macro/source/reference/other/S_GetLineCount.html @@ -1,4 +1,7 @@ -S_GetLineCount + + + +S_GetLineCount diff --git a/help/macro/source/reference/other/S_GetLineStr.html b/help/macro/source/reference/other/S_GetLineStr.html index e005dc08cf..6f7583516f 100644 --- a/help/macro/source/reference/other/S_GetLineStr.html +++ b/help/macro/source/reference/other/S_GetLineStr.html @@ -1,4 +1,7 @@ -S_GetLineStr + + + +S_GetLineStr diff --git a/help/macro/source/reference/other/S_GetSelectColmFrom.html b/help/macro/source/reference/other/S_GetSelectColmFrom.html index 888dc1dcad..d8258972c2 100644 --- a/help/macro/source/reference/other/S_GetSelectColmFrom.html +++ b/help/macro/source/reference/other/S_GetSelectColmFrom.html @@ -1,4 +1,7 @@ -S_GetSelectColmFrom + + + +S_GetSelectColmFrom diff --git a/help/macro/source/reference/other/S_GetSelectColmTo.html b/help/macro/source/reference/other/S_GetSelectColmTo.html index 5f4fe33e8d..cecb5dd68d 100644 --- a/help/macro/source/reference/other/S_GetSelectColmTo.html +++ b/help/macro/source/reference/other/S_GetSelectColmTo.html @@ -1,4 +1,7 @@ -S_GetSelectColmTo + + + +S_GetSelectColmTo diff --git a/help/macro/source/reference/other/S_GetSelectLineFrom.html b/help/macro/source/reference/other/S_GetSelectLineFrom.html index 1e6343378a..ea4865f080 100644 --- a/help/macro/source/reference/other/S_GetSelectLineFrom.html +++ b/help/macro/source/reference/other/S_GetSelectLineFrom.html @@ -1,4 +1,7 @@ -S_GetSelectLineFrom + + + +S_GetSelectLineFrom diff --git a/help/macro/source/reference/other/S_GetSelectLineTo.html b/help/macro/source/reference/other/S_GetSelectLineTo.html index 10b4cc16e8..21558c9854 100644 --- a/help/macro/source/reference/other/S_GetSelectLineTo.html +++ b/help/macro/source/reference/other/S_GetSelectLineTo.html @@ -1,4 +1,7 @@ -S_GetSelectLineTo + + + +S_GetSelectLineTo diff --git a/help/macro/source/reference/other/S_GetSelectedString.html b/help/macro/source/reference/other/S_GetSelectedString.html index 5dc29c85a2..30e612b721 100644 --- a/help/macro/source/reference/other/S_GetSelectedString.html +++ b/help/macro/source/reference/other/S_GetSelectedString.html @@ -1,4 +1,7 @@ -S_GetSelectedString + + + +S_GetSelectedString diff --git a/help/macro/source/reference/other/S_IsInsMode.html b/help/macro/source/reference/other/S_IsInsMode.html index 3ac57413da..c5a6d7784c 100644 --- a/help/macro/source/reference/other/S_IsInsMode.html +++ b/help/macro/source/reference/other/S_IsInsMode.html @@ -1,4 +1,7 @@ -S_IsInsMode + + + +S_IsInsMode diff --git a/help/macro/source/reference/other/S_IsPossibleRedo.html b/help/macro/source/reference/other/S_IsPossibleRedo.html index 2e950f8560..f46a6a543f 100644 --- a/help/macro/source/reference/other/S_IsPossibleRedo.html +++ b/help/macro/source/reference/other/S_IsPossibleRedo.html @@ -1,4 +1,7 @@ -S_IsPossibleRedo + + + +S_IsPossibleRedo diff --git a/help/macro/source/reference/other/S_IsPossibleUndo.html b/help/macro/source/reference/other/S_IsPossibleUndo.html index b024c7218a..97fc2c170d 100644 --- a/help/macro/source/reference/other/S_IsPossibleUndo.html +++ b/help/macro/source/reference/other/S_IsPossibleUndo.html @@ -1,4 +1,7 @@ -S_IsPossibleUndo + + + +S_IsPossibleUndo diff --git a/help/macro/source/reference/other/S_IsTextSelected.html b/help/macro/source/reference/other/S_IsTextSelected.html index 881c2bf763..c546330518 100644 --- a/help/macro/source/reference/other/S_IsTextSelected.html +++ b/help/macro/source/reference/other/S_IsTextSelected.html @@ -1,4 +1,7 @@ -S_IsTextSelected + + + +S_IsTextSelected diff --git a/help/macro/source/reference/other/S_TraceOut.html b/help/macro/source/reference/other/S_TraceOut.html index 59056c34e4..26149a705d 100644 --- a/help/macro/source/reference/other/S_TraceOut.html +++ b/help/macro/source/reference/other/S_TraceOut.html @@ -1,4 +1,7 @@ -S_TraceOut + + + +S_TraceOut diff --git a/help/macro/source/reference/other/index.html b/help/macro/source/reference/other/index.html index f3a7426bd6..2b22816ee9 100644 --- a/help/macro/source/reference/other/index.html +++ b/help/macro/source/reference/other/index.html @@ -1,4 +1,7 @@ -その他 + + + +その他 diff --git a/help/macro/source/reference/select/S_1PageDown_Sel.html b/help/macro/source/reference/select/S_1PageDown_Sel.html index 5cc4bb3101..6e7eaaf34a 100644 --- a/help/macro/source/reference/select/S_1PageDown_Sel.html +++ b/help/macro/source/reference/select/S_1PageDown_Sel.html @@ -1,4 +1,7 @@ -S_1PageDown_Sel + + + +S_1PageDown_Sel diff --git a/help/macro/source/reference/select/S_1PageUp_Sel.html b/help/macro/source/reference/select/S_1PageUp_Sel.html index 6729daa1bb..1a965d40f2 100644 --- a/help/macro/source/reference/select/S_1PageUp_Sel.html +++ b/help/macro/source/reference/select/S_1PageUp_Sel.html @@ -1,4 +1,7 @@ -S_1PageUp_Sel + + + +S_1PageUp_Sel diff --git a/help/macro/source/reference/select/S_BeginSelect.html b/help/macro/source/reference/select/S_BeginSelect.html index 1f782bb8c8..e5e0bcc11f 100644 --- a/help/macro/source/reference/select/S_BeginSelect.html +++ b/help/macro/source/reference/select/S_BeginSelect.html @@ -1,4 +1,7 @@ -S_BeginSelect + + + +S_BeginSelect diff --git a/help/macro/source/reference/select/S_Down2_Sel.html b/help/macro/source/reference/select/S_Down2_Sel.html index 5d777197f8..9dc5717c23 100644 --- a/help/macro/source/reference/select/S_Down2_Sel.html +++ b/help/macro/source/reference/select/S_Down2_Sel.html @@ -1,4 +1,7 @@ -S_Down2_Sel + + + +S_Down2_Sel diff --git a/help/macro/source/reference/select/S_Down_Sel.html b/help/macro/source/reference/select/S_Down_Sel.html index 064f99e5c3..7d47c79768 100644 --- a/help/macro/source/reference/select/S_Down_Sel.html +++ b/help/macro/source/reference/select/S_Down_Sel.html @@ -1,4 +1,7 @@ -S_Down_Sel + + + +S_Down_Sel diff --git a/help/macro/source/reference/select/S_GoFileEnd_Sel.html b/help/macro/source/reference/select/S_GoFileEnd_Sel.html index 1672e023a6..a2406d7492 100644 --- a/help/macro/source/reference/select/S_GoFileEnd_Sel.html +++ b/help/macro/source/reference/select/S_GoFileEnd_Sel.html @@ -1,4 +1,7 @@ -S_GoFileEnd_Sel + + + +S_GoFileEnd_Sel diff --git a/help/macro/source/reference/select/S_GoFileTop_Sel.html b/help/macro/source/reference/select/S_GoFileTop_Sel.html index fea47fbde8..62eb56bcfc 100644 --- a/help/macro/source/reference/select/S_GoFileTop_Sel.html +++ b/help/macro/source/reference/select/S_GoFileTop_Sel.html @@ -1,4 +1,7 @@ -S_GoFileTop_Sel + + + +S_GoFileTop_Sel diff --git a/help/macro/source/reference/select/S_GoLineEnd_Sel.html b/help/macro/source/reference/select/S_GoLineEnd_Sel.html index d47e5d80ac..8a3d45c13c 100644 --- a/help/macro/source/reference/select/S_GoLineEnd_Sel.html +++ b/help/macro/source/reference/select/S_GoLineEnd_Sel.html @@ -1,4 +1,7 @@ -S_GoLineEnd_Sel + + + +S_GoLineEnd_Sel diff --git a/help/macro/source/reference/select/S_GoLineTop_Sel.html b/help/macro/source/reference/select/S_GoLineTop_Sel.html index 7cc9d90ac4..b8e32f1e76 100644 --- a/help/macro/source/reference/select/S_GoLineTop_Sel.html +++ b/help/macro/source/reference/select/S_GoLineTop_Sel.html @@ -1,4 +1,7 @@ -S_GoLineTop_Sel + + + +S_GoLineTop_Sel diff --git a/help/macro/source/reference/select/S_GoNextParagraph_Sel.html b/help/macro/source/reference/select/S_GoNextParagraph_Sel.html index a3c20f90c4..6429172c8b 100644 --- a/help/macro/source/reference/select/S_GoNextParagraph_Sel.html +++ b/help/macro/source/reference/select/S_GoNextParagraph_Sel.html @@ -1,4 +1,7 @@ -S_GoNextParagraph_Sel + + + +S_GoNextParagraph_Sel diff --git a/help/macro/source/reference/select/S_GoPrevParagraph_Sel.html b/help/macro/source/reference/select/S_GoPrevParagraph_Sel.html index d1f5c4fa4c..7019dbddf7 100644 --- a/help/macro/source/reference/select/S_GoPrevParagraph_Sel.html +++ b/help/macro/source/reference/select/S_GoPrevParagraph_Sel.html @@ -1,4 +1,7 @@ -S_GoPrevParagraph_Sel + + + +S_GoPrevParagraph_Sel diff --git a/help/macro/source/reference/select/S_HalfPageDown_Sel.html b/help/macro/source/reference/select/S_HalfPageDown_Sel.html index ea4a13bf97..af1ee38f27 100644 --- a/help/macro/source/reference/select/S_HalfPageDown_Sel.html +++ b/help/macro/source/reference/select/S_HalfPageDown_Sel.html @@ -1,4 +1,7 @@ -S_HalfPageDown_Sel + + + +S_HalfPageDown_Sel diff --git a/help/macro/source/reference/select/S_HalfPageUp_Sel.html b/help/macro/source/reference/select/S_HalfPageUp_Sel.html index 2b84018cd8..b1663d5e68 100644 --- a/help/macro/source/reference/select/S_HalfPageUp_Sel.html +++ b/help/macro/source/reference/select/S_HalfPageUp_Sel.html @@ -1,4 +1,7 @@ -S_HalfPageUp_Sel + + + +S_HalfPageUp_Sel diff --git a/help/macro/source/reference/select/S_Left_Sel.html b/help/macro/source/reference/select/S_Left_Sel.html index 5520ac1441..681adf956f 100644 --- a/help/macro/source/reference/select/S_Left_Sel.html +++ b/help/macro/source/reference/select/S_Left_Sel.html @@ -1,4 +1,7 @@ -S_Left_Sel + + + +S_Left_Sel diff --git a/help/macro/source/reference/select/S_PageDown_Sel.html b/help/macro/source/reference/select/S_PageDown_Sel.html index a0f7101ac9..4862cf979a 100644 --- a/help/macro/source/reference/select/S_PageDown_Sel.html +++ b/help/macro/source/reference/select/S_PageDown_Sel.html @@ -1,4 +1,7 @@ -S_PageDown_Sel + + + +S_PageDown_Sel diff --git a/help/macro/source/reference/select/S_PageUp_Sel.html b/help/macro/source/reference/select/S_PageUp_Sel.html index 288714795f..2b8b495fba 100644 --- a/help/macro/source/reference/select/S_PageUp_Sel.html +++ b/help/macro/source/reference/select/S_PageUp_Sel.html @@ -1,4 +1,7 @@ -S_PageUp_Sel + + + +S_PageUp_Sel diff --git a/help/macro/source/reference/select/S_Right_Sel.html b/help/macro/source/reference/select/S_Right_Sel.html index e12cb01c4e..6d12922a2c 100644 --- a/help/macro/source/reference/select/S_Right_Sel.html +++ b/help/macro/source/reference/select/S_Right_Sel.html @@ -1,4 +1,7 @@ -S_Right_Sel + + + +S_Right_Sel diff --git a/help/macro/source/reference/select/S_SelectAll.html b/help/macro/source/reference/select/S_SelectAll.html index 82ce394676..3e47a45d65 100644 --- a/help/macro/source/reference/select/S_SelectAll.html +++ b/help/macro/source/reference/select/S_SelectAll.html @@ -1,4 +1,7 @@ -S_SelectAll + + + +S_SelectAll diff --git a/help/macro/source/reference/select/S_SelectLine.html b/help/macro/source/reference/select/S_SelectLine.html index ee109d7a22..305836ebbb 100644 --- a/help/macro/source/reference/select/S_SelectLine.html +++ b/help/macro/source/reference/select/S_SelectLine.html @@ -1,4 +1,7 @@ -S_SelectLine + + + +S_SelectLine diff --git a/help/macro/source/reference/select/S_SelectWord.html b/help/macro/source/reference/select/S_SelectWord.html index 054dd2df3f..21b8f7a6d2 100644 --- a/help/macro/source/reference/select/S_SelectWord.html +++ b/help/macro/source/reference/select/S_SelectWord.html @@ -1,4 +1,7 @@ -S_SelectWord + + + +S_SelectWord diff --git a/help/macro/source/reference/select/S_Up2_Sel.html b/help/macro/source/reference/select/S_Up2_Sel.html index d3c1680da1..3a2dd9fe7f 100644 --- a/help/macro/source/reference/select/S_Up2_Sel.html +++ b/help/macro/source/reference/select/S_Up2_Sel.html @@ -1,4 +1,7 @@ -S_Up2_Sel + + + +S_Up2_Sel diff --git a/help/macro/source/reference/select/S_Up_Sel.html b/help/macro/source/reference/select/S_Up_Sel.html index 058a96077d..e096148a3b 100644 --- a/help/macro/source/reference/select/S_Up_Sel.html +++ b/help/macro/source/reference/select/S_Up_Sel.html @@ -1,4 +1,7 @@ -S_Up_Sel + + + +S_Up_Sel diff --git a/help/macro/source/reference/select/S_WordLeft_Sel.html b/help/macro/source/reference/select/S_WordLeft_Sel.html index 85aed4993a..d39c651328 100644 --- a/help/macro/source/reference/select/S_WordLeft_Sel.html +++ b/help/macro/source/reference/select/S_WordLeft_Sel.html @@ -1,4 +1,7 @@ -S_WordLeft_Sel + + + +S_WordLeft_Sel diff --git a/help/macro/source/reference/select/S_WordRight_Sel.html b/help/macro/source/reference/select/S_WordRight_Sel.html index a8a779a082..25c18c799e 100644 --- a/help/macro/source/reference/select/S_WordRight_Sel.html +++ b/help/macro/source/reference/select/S_WordRight_Sel.html @@ -1,4 +1,7 @@ -S_WordRight_Sel + + + +S_WordRight_Sel diff --git a/help/macro/source/reference/select/index.html b/help/macro/source/reference/select/index.html index 6c354744aa..6c2817497e 100644 --- a/help/macro/source/reference/select/index.html +++ b/help/macro/source/reference/select/index.html @@ -1,4 +1,7 @@ -選択 + + + +選択 diff --git a/help/macro/source/reference/support/S_About.html b/help/macro/source/reference/support/S_About.html index 54f6eb65c1..6b56e5157a 100644 --- a/help/macro/source/reference/support/S_About.html +++ b/help/macro/source/reference/support/S_About.html @@ -1,4 +1,7 @@ -S_About + + + +S_About diff --git a/help/macro/source/reference/support/S_CommandList.html b/help/macro/source/reference/support/S_CommandList.html index f8e8e7b92e..d2e0651d9f 100644 --- a/help/macro/source/reference/support/S_CommandList.html +++ b/help/macro/source/reference/support/S_CommandList.html @@ -1,4 +1,7 @@ -S_CommandList + + + +S_CommandList diff --git a/help/macro/source/reference/support/S_Complete.html b/help/macro/source/reference/support/S_Complete.html index 9946bdda6a..acacc45b50 100644 --- a/help/macro/source/reference/support/S_Complete.html +++ b/help/macro/source/reference/support/S_Complete.html @@ -1,4 +1,7 @@ -S_Complete + + + +S_Complete diff --git a/help/macro/source/reference/support/S_ExtHelp1.html b/help/macro/source/reference/support/S_ExtHelp1.html index 6c9ad97849..a3008828e1 100644 --- a/help/macro/source/reference/support/S_ExtHelp1.html +++ b/help/macro/source/reference/support/S_ExtHelp1.html @@ -1,4 +1,7 @@ -S_ExtHelp1 + + + +S_ExtHelp1 diff --git a/help/macro/source/reference/support/S_ExtHtmlHelp.html b/help/macro/source/reference/support/S_ExtHtmlHelp.html index af946d6694..ba5efde2c6 100644 --- a/help/macro/source/reference/support/S_ExtHtmlHelp.html +++ b/help/macro/source/reference/support/S_ExtHtmlHelp.html @@ -1,4 +1,7 @@ -S_ExtHtmlHelp + + + +S_ExtHtmlHelp diff --git a/help/macro/source/reference/support/S_HelpContents.html b/help/macro/source/reference/support/S_HelpContents.html index 039112b195..1ecfd08e88 100644 --- a/help/macro/source/reference/support/S_HelpContents.html +++ b/help/macro/source/reference/support/S_HelpContents.html @@ -1,4 +1,7 @@ -S_HelpContents + + + +S_HelpContents diff --git a/help/macro/source/reference/support/S_HelpSearch.html b/help/macro/source/reference/support/S_HelpSearch.html index b82e7098d1..fb6d41916d 100644 --- a/help/macro/source/reference/support/S_HelpSearch.html +++ b/help/macro/source/reference/support/S_HelpSearch.html @@ -1,4 +1,7 @@ -S_HelpSearch + + + +S_HelpSearch diff --git a/help/macro/source/reference/support/S_ToggleKeyHelpSearch.html b/help/macro/source/reference/support/S_ToggleKeyHelpSearch.html index 1ff41664d0..1e1b4d4a66 100644 --- a/help/macro/source/reference/support/S_ToggleKeyHelpSearch.html +++ b/help/macro/source/reference/support/S_ToggleKeyHelpSearch.html @@ -1,4 +1,7 @@ -S_ToggleKeyHelpSearch + + + +S_ToggleKeyHelpSearch diff --git a/help/macro/source/reference/support/index.html b/help/macro/source/reference/support/index.html index c1b65e95df..a4f407f7be 100644 --- a/help/macro/source/reference/support/index.html +++ b/help/macro/source/reference/support/index.html @@ -1,4 +1,7 @@ -支援 + + + +支援 diff --git a/help/macro/source/reference/window/S_ActivateWinOutput.html b/help/macro/source/reference/window/S_ActivateWinOutput.html index a240e58be7..ca7c28c0a9 100644 --- a/help/macro/source/reference/window/S_ActivateWinOutput.html +++ b/help/macro/source/reference/window/S_ActivateWinOutput.html @@ -1,4 +1,7 @@ -S_ActivateWinOutput + + + +S_ActivateWinOutput diff --git a/help/macro/source/reference/window/S_CascadeWin.html b/help/macro/source/reference/window/S_CascadeWin.html index c3954bf5b5..05b0052af8 100644 --- a/help/macro/source/reference/window/S_CascadeWin.html +++ b/help/macro/source/reference/window/S_CascadeWin.html @@ -1,4 +1,7 @@ -S_CascadeWin + + + +S_CascadeWin diff --git a/help/macro/source/reference/window/S_GroupClose.html b/help/macro/source/reference/window/S_GroupClose.html index 0960ba0531..d75020bf12 100644 --- a/help/macro/source/reference/window/S_GroupClose.html +++ b/help/macro/source/reference/window/S_GroupClose.html @@ -1,4 +1,7 @@ -S_GroupClose + + + +S_GroupClose diff --git a/help/macro/source/reference/window/S_MaximizeH.html b/help/macro/source/reference/window/S_MaximizeH.html index 8c5bca8ed5..ab5cd7abc4 100644 --- a/help/macro/source/reference/window/S_MaximizeH.html +++ b/help/macro/source/reference/window/S_MaximizeH.html @@ -1,4 +1,7 @@ -S_MaximizeH + + + +S_MaximizeH diff --git a/help/macro/source/reference/window/S_MaximizeV.html b/help/macro/source/reference/window/S_MaximizeV.html index 24f41a0fe7..68d9a7f6ef 100644 --- a/help/macro/source/reference/window/S_MaximizeV.html +++ b/help/macro/source/reference/window/S_MaximizeV.html @@ -1,4 +1,7 @@ -S_MaximizeV + + + +S_MaximizeV diff --git a/help/macro/source/reference/window/S_MinimizeAll.html b/help/macro/source/reference/window/S_MinimizeAll.html index d60db31f43..9cc2216295 100644 --- a/help/macro/source/reference/window/S_MinimizeAll.html +++ b/help/macro/source/reference/window/S_MinimizeAll.html @@ -1,4 +1,7 @@ -S_MinimizeAll + + + +S_MinimizeAll diff --git a/help/macro/source/reference/window/S_NextGroup.html b/help/macro/source/reference/window/S_NextGroup.html index dce711588d..76660d6ec2 100644 --- a/help/macro/source/reference/window/S_NextGroup.html +++ b/help/macro/source/reference/window/S_NextGroup.html @@ -1,4 +1,7 @@ -S_NextGroup + + + +S_NextGroup diff --git a/help/macro/source/reference/window/S_NextWindow.html b/help/macro/source/reference/window/S_NextWindow.html index bc3fec8685..b8eab0d230 100644 --- a/help/macro/source/reference/window/S_NextWindow.html +++ b/help/macro/source/reference/window/S_NextWindow.html @@ -1,4 +1,7 @@ -S_NextWindow + + + +S_NextWindow diff --git a/help/macro/source/reference/window/S_PrevGroup.html b/help/macro/source/reference/window/S_PrevGroup.html index cf8b4ca8ea..1c013f04cb 100644 --- a/help/macro/source/reference/window/S_PrevGroup.html +++ b/help/macro/source/reference/window/S_PrevGroup.html @@ -1,4 +1,7 @@ -S_PrevGroup + + + +S_PrevGroup diff --git a/help/macro/source/reference/window/S_PrevWindow.html b/help/macro/source/reference/window/S_PrevWindow.html index 935c9be52f..4014f632ca 100644 --- a/help/macro/source/reference/window/S_PrevWindow.html +++ b/help/macro/source/reference/window/S_PrevWindow.html @@ -1,4 +1,7 @@ -S_PrevWindow + + + +S_PrevWindow diff --git a/help/macro/source/reference/window/S_ReDraw.html b/help/macro/source/reference/window/S_ReDraw.html index 6c4ec5cc67..35e469c9c8 100644 --- a/help/macro/source/reference/window/S_ReDraw.html +++ b/help/macro/source/reference/window/S_ReDraw.html @@ -1,4 +1,7 @@ -S_ReDraw + + + +S_ReDraw diff --git a/help/macro/source/reference/window/S_SplitWinH.html b/help/macro/source/reference/window/S_SplitWinH.html index 4a9bbc448e..69b9e600dc 100644 --- a/help/macro/source/reference/window/S_SplitWinH.html +++ b/help/macro/source/reference/window/S_SplitWinH.html @@ -1,4 +1,7 @@ -S_SplitWinH + + + +S_SplitWinH diff --git a/help/macro/source/reference/window/S_SplitWinV.html b/help/macro/source/reference/window/S_SplitWinV.html index 3f841bd28b..daa5ac1a15 100644 --- a/help/macro/source/reference/window/S_SplitWinV.html +++ b/help/macro/source/reference/window/S_SplitWinV.html @@ -1,4 +1,7 @@ -S_SplitWinV + + + +S_SplitWinV diff --git a/help/macro/source/reference/window/S_SplitWinVH.html b/help/macro/source/reference/window/S_SplitWinVH.html index 142abb06bb..f36de38cf4 100644 --- a/help/macro/source/reference/window/S_SplitWinVH.html +++ b/help/macro/source/reference/window/S_SplitWinVH.html @@ -1,4 +1,7 @@ -S_SplitWinVH + + + +S_SplitWinVH diff --git a/help/macro/source/reference/window/S_TabCloseLeft.html b/help/macro/source/reference/window/S_TabCloseLeft.html index 126c6330a5..3b71163daa 100644 --- a/help/macro/source/reference/window/S_TabCloseLeft.html +++ b/help/macro/source/reference/window/S_TabCloseLeft.html @@ -1,4 +1,7 @@ -S_TabCloseLeft + + + +S_TabCloseLeft diff --git a/help/macro/source/reference/window/S_TabCloseOther.html b/help/macro/source/reference/window/S_TabCloseOther.html index 967bd7826f..e95224ae85 100644 --- a/help/macro/source/reference/window/S_TabCloseOther.html +++ b/help/macro/source/reference/window/S_TabCloseOther.html @@ -1,4 +1,7 @@ -S_TabCloseOther + + + +S_TabCloseOther diff --git a/help/macro/source/reference/window/S_TabCloseRight.html b/help/macro/source/reference/window/S_TabCloseRight.html index 85807ee35d..3aed4e2b0e 100644 --- a/help/macro/source/reference/window/S_TabCloseRight.html +++ b/help/macro/source/reference/window/S_TabCloseRight.html @@ -1,4 +1,7 @@ -S_TabCloseRight + + + +S_TabCloseRight diff --git a/help/macro/source/reference/window/S_TabJointNext.html b/help/macro/source/reference/window/S_TabJointNext.html index 6a456f083d..2930948101 100644 --- a/help/macro/source/reference/window/S_TabJointNext.html +++ b/help/macro/source/reference/window/S_TabJointNext.html @@ -1,4 +1,7 @@ -S_TabJointNext + + + +S_TabJointNext diff --git a/help/macro/source/reference/window/S_TabJointPrev.html b/help/macro/source/reference/window/S_TabJointPrev.html index 115d991f63..1242dae2aa 100644 --- a/help/macro/source/reference/window/S_TabJointPrev.html +++ b/help/macro/source/reference/window/S_TabJointPrev.html @@ -1,4 +1,7 @@ -S_TabJointPrev + + + +S_TabJointPrev diff --git a/help/macro/source/reference/window/S_TabMoveLeft.html b/help/macro/source/reference/window/S_TabMoveLeft.html index 1fcf6e33b6..18180aada4 100644 --- a/help/macro/source/reference/window/S_TabMoveLeft.html +++ b/help/macro/source/reference/window/S_TabMoveLeft.html @@ -1,4 +1,7 @@ -S_TabMoveLeft + + + +S_TabMoveLeft diff --git a/help/macro/source/reference/window/S_TabMoveRight.html b/help/macro/source/reference/window/S_TabMoveRight.html index 09b043293c..38e8be81f7 100644 --- a/help/macro/source/reference/window/S_TabMoveRight.html +++ b/help/macro/source/reference/window/S_TabMoveRight.html @@ -1,4 +1,7 @@ -S_TabMoveRight + + + +S_TabMoveRight diff --git a/help/macro/source/reference/window/S_TabSeparate.html b/help/macro/source/reference/window/S_TabSeparate.html index beeac3f581..5f366b75d9 100644 --- a/help/macro/source/reference/window/S_TabSeparate.html +++ b/help/macro/source/reference/window/S_TabSeparate.html @@ -1,4 +1,7 @@ -S_TabSeparate + + + +S_TabSeparate diff --git a/help/macro/source/reference/window/S_TileWinH.html b/help/macro/source/reference/window/S_TileWinH.html index 90125f2b21..c771a5a145 100644 --- a/help/macro/source/reference/window/S_TileWinH.html +++ b/help/macro/source/reference/window/S_TileWinH.html @@ -1,4 +1,7 @@ -S_TileWinH + + + +S_TileWinH diff --git a/help/macro/source/reference/window/S_TileWinV.html b/help/macro/source/reference/window/S_TileWinV.html index a52606e5a0..2b7876bd90 100644 --- a/help/macro/source/reference/window/S_TileWinV.html +++ b/help/macro/source/reference/window/S_TileWinV.html @@ -1,4 +1,7 @@ -S_TileWinV + + + +S_TileWinV diff --git a/help/macro/source/reference/window/S_TraceOut.html b/help/macro/source/reference/window/S_TraceOut.html index 03d9b4b9e6..c1cd1127b9 100644 --- a/help/macro/source/reference/window/S_TraceOut.html +++ b/help/macro/source/reference/window/S_TraceOut.html @@ -1,4 +1,7 @@ -S_TraceOut + + + +S_TraceOut diff --git a/help/macro/source/reference/window/S_WinClose.html b/help/macro/source/reference/window/S_WinClose.html index a75e209225..b82733205f 100644 --- a/help/macro/source/reference/window/S_WinClose.html +++ b/help/macro/source/reference/window/S_WinClose.html @@ -1,4 +1,7 @@ -S_WinClose + + + +S_WinClose diff --git a/help/macro/source/reference/window/S_WinCloseAll.html b/help/macro/source/reference/window/S_WinCloseAll.html index a4980cf579..b76cab2526 100644 --- a/help/macro/source/reference/window/S_WinCloseAll.html +++ b/help/macro/source/reference/window/S_WinCloseAll.html @@ -1,4 +1,7 @@ -S_WinCloseAll + + + +S_WinCloseAll diff --git a/help/macro/source/reference/window/S_WindowList.html b/help/macro/source/reference/window/S_WindowList.html index df6181079c..a09b0188c4 100644 --- a/help/macro/source/reference/window/S_WindowList.html +++ b/help/macro/source/reference/window/S_WindowList.html @@ -1,4 +1,7 @@ -S_WindowList + + + +S_WindowList diff --git a/help/macro/source/reference/window/S_WindowTopMost.html b/help/macro/source/reference/window/S_WindowTopMost.html index 32fe0f479a..62ae652e20 100644 --- a/help/macro/source/reference/window/S_WindowTopMost.html +++ b/help/macro/source/reference/window/S_WindowTopMost.html @@ -1,4 +1,7 @@ -S_WindowTopMost + + + +S_WindowTopMost diff --git a/help/macro/source/reference/window/index.html b/help/macro/source/reference/window/index.html index 7921a9f933..429af79ede 100644 --- a/help/macro/source/reference/window/index.html +++ b/help/macro/source/reference/window/index.html @@ -1,4 +1,7 @@ -ウインドウ + + + +ウインドウ diff --git a/help/macro/source/right.html b/help/macro/source/right.html index 2816146072..311a716e2d 100644 --- a/help/macro/source/right.html +++ b/help/macro/source/right.html @@ -1,4 +1,7 @@ -サクラエディタマクロ + + + +サクラエディタマクロ diff --git a/help/macro/source/sample/SampleBookmarkPattern.html b/help/macro/source/sample/SampleBookmarkPattern.html index 5c2798777b..734518fa5a 100644 --- a/help/macro/source/sample/SampleBookmarkPattern.html +++ b/help/macro/source/sample/SampleBookmarkPattern.html @@ -1,4 +1,7 @@ -S_BookmarkPatternの使用例 + + + +S_BookmarkPatternの使用例 diff --git a/help/macro/source/sample/SampleChangeTabWidth.html b/help/macro/source/sample/SampleChangeTabWidth.html index 0d4679fe36..643610ae4e 100644 --- a/help/macro/source/sample/SampleChangeTabWidth.html +++ b/help/macro/source/sample/SampleChangeTabWidth.html @@ -1,4 +1,7 @@ -S_ChangeTabWidthの使用例 + + + +S_ChangeTabWidthの使用例 diff --git a/help/macro/source/sample/SampleChar.html b/help/macro/source/sample/SampleChar.html index f6ee52e97c..1338f01758 100644 --- a/help/macro/source/sample/SampleChar.html +++ b/help/macro/source/sample/SampleChar.html @@ -1,4 +1,7 @@ -文字の書き出し例 + + + +文字の書き出し例 diff --git a/help/macro/source/sample/SampleExpandParameter.html b/help/macro/source/sample/SampleExpandParameter.html index 8a94cac1fd..47111b213e 100644 --- a/help/macro/source/sample/SampleExpandParameter.html +++ b/help/macro/source/sample/SampleExpandParameter.html @@ -1,4 +1,7 @@ -S_ExpandParameterの使用例 + + + +S_ExpandParameterの使用例 diff --git a/help/macro/source/sample/SampleFileSaveAs.html b/help/macro/source/sample/SampleFileSaveAs.html index 1a04c65536..3ecbd3118d 100644 --- a/help/macro/source/sample/SampleFileSaveAs.html +++ b/help/macro/source/sample/SampleFileSaveAs.html @@ -1,4 +1,7 @@ -S_FileSaveAsの使用例 + + + +S_FileSaveAsの使用例 diff --git a/help/macro/source/sample/SampleGetCharCode.html b/help/macro/source/sample/SampleGetCharCode.html index 193dc4d3bd..962a4f8ea3 100644 --- a/help/macro/source/sample/SampleGetCharCode.html +++ b/help/macro/source/sample/SampleGetCharCode.html @@ -1,4 +1,7 @@ -S_GetCharCodeの使用例 + + + +S_GetCharCodeの使用例 diff --git a/help/macro/source/sample/SampleGetFilename.html b/help/macro/source/sample/SampleGetFilename.html index 7e3b2b971c..bfceed6f5a 100644 --- a/help/macro/source/sample/SampleGetFilename.html +++ b/help/macro/source/sample/SampleGetFilename.html @@ -1,4 +1,7 @@ -S_GetFilenameの使用例 + + + +S_GetFilenameの使用例 diff --git a/help/macro/source/sample/SampleGetLineCode.html b/help/macro/source/sample/SampleGetLineCode.html index 6d5c37df2f..cf37618b9a 100644 --- a/help/macro/source/sample/SampleGetLineCode.html +++ b/help/macro/source/sample/SampleGetLineCode.html @@ -1,4 +1,7 @@ -S_GetLineCodeの使用例 + + + +S_GetLineCodeの使用例 diff --git a/help/macro/source/sample/SampleGetLineCount.html b/help/macro/source/sample/SampleGetLineCount.html index 0c043d25cd..12811e98d9 100644 --- a/help/macro/source/sample/SampleGetLineCount.html +++ b/help/macro/source/sample/SampleGetLineCount.html @@ -1,4 +1,7 @@ -S_GetLineCountの使用例 + + + +S_GetLineCountの使用例 diff --git a/help/macro/source/sample/SampleGetLineStr.html b/help/macro/source/sample/SampleGetLineStr.html index f07c3bfe03..a933c0af72 100644 --- a/help/macro/source/sample/SampleGetLineStr.html +++ b/help/macro/source/sample/SampleGetLineStr.html @@ -1,4 +1,7 @@ -S_GetLineStrの使用例 + + + +S_GetLineStrの使用例 diff --git a/help/macro/source/sample/SampleGetSelectedString.html b/help/macro/source/sample/SampleGetSelectedString.html index cb343944d3..5a7c739ffa 100644 --- a/help/macro/source/sample/SampleGetSelectedString.html +++ b/help/macro/source/sample/SampleGetSelectedString.html @@ -1,4 +1,7 @@ -S_GetSelectedStringの使用例 + + + +S_GetSelectedStringの使用例 diff --git a/help/macro/source/sample/SampleGetSelectxxx.html b/help/macro/source/sample/SampleGetSelectxxx.html index 4906ed3661..8b145d9546 100644 --- a/help/macro/source/sample/SampleGetSelectxxx.html +++ b/help/macro/source/sample/SampleGetSelectxxx.html @@ -1,4 +1,7 @@ -S_GetSelectxxxの使用例 + + + +S_GetSelectxxxの使用例 diff --git a/help/macro/source/sample/SampleGoLineTop.html b/help/macro/source/sample/SampleGoLineTop.html index 4712bf695e..dd167e9dad 100644 --- a/help/macro/source/sample/SampleGoLineTop.html +++ b/help/macro/source/sample/SampleGoLineTop.html @@ -1,4 +1,7 @@ -S_GoLineTopの使用例 + + + +S_GoLineTopの使用例 diff --git a/help/macro/source/sample/SampleGrep.html b/help/macro/source/sample/SampleGrep.html index db12984b36..c9a5e2a92a 100644 --- a/help/macro/source/sample/SampleGrep.html +++ b/help/macro/source/sample/SampleGrep.html @@ -1,4 +1,7 @@ -S_Grepの使用例 + + + +S_Grepの使用例 diff --git a/help/macro/source/sample/SampleIsInsMode.html b/help/macro/source/sample/SampleIsInsMode.html index 4cc0ca4949..8fd29d3f2e 100644 --- a/help/macro/source/sample/SampleIsInsMode.html +++ b/help/macro/source/sample/SampleIsInsMode.html @@ -1,4 +1,7 @@ -S_IsInsModeの使用例 + + + +S_IsInsModeの使用例 diff --git a/help/macro/source/sample/SampleIsPossibleUndo.html b/help/macro/source/sample/SampleIsPossibleUndo.html index 34678c0ed3..46d78c097d 100644 --- a/help/macro/source/sample/SampleIsPossibleUndo.html +++ b/help/macro/source/sample/SampleIsPossibleUndo.html @@ -1,4 +1,7 @@ -S_IsPossibleUndoの使用例 + + + +S_IsPossibleUndoの使用例 diff --git a/help/macro/source/sample/SampleIsTextSelected.html b/help/macro/source/sample/SampleIsTextSelected.html index 12ba2ba405..a881ead5b2 100644 --- a/help/macro/source/sample/SampleIsTextSelected.html +++ b/help/macro/source/sample/SampleIsTextSelected.html @@ -1,4 +1,7 @@ -S_IsTextSelectedの使用例 + + + +S_IsTextSelectedの使用例 diff --git a/help/macro/source/sample/SampleReplaceAll.html b/help/macro/source/sample/SampleReplaceAll.html index 99caef8dbd..6f75b2a9f7 100644 --- a/help/macro/source/sample/SampleReplaceAll.html +++ b/help/macro/source/sample/SampleReplaceAll.html @@ -1,4 +1,7 @@ -S_ReplaceAllの使用例 + + + +S_ReplaceAllの使用例 diff --git a/help/macro/source/sample/SampleSearchNext.html b/help/macro/source/sample/SampleSearchNext.html index b706bb05c9..3819a51cbc 100644 --- a/help/macro/source/sample/SampleSearchNext.html +++ b/help/macro/source/sample/SampleSearchNext.html @@ -1,4 +1,7 @@ -S_SearchNextの使用例 + + + +S_SearchNextの使用例 diff --git a/help/macro/source/search.html b/help/macro/source/search.html index 72fee0e78b..14af79c15a 100644 --- a/help/macro/source/search.html +++ b/help/macro/source/search.html @@ -1,4 +1,7 @@ -マクロ関数検索 + + + +マクロ関数検索 - @@ -27,6 +27,7 @@

    利用可能な正規表現

    基本要素

    + - + diff --git a/help/plugin/Text/index.html b/help/plugin/Text/index.html index 46987fc6e6..fb554bbf0f 100644 --- a/help/plugin/Text/index.html +++ b/help/plugin/Text/index.html @@ -44,7 +44,7 @@

    プラグイン仕様

    プラグイン定義ファイル(plugin.def)
    ReadMeファイル
    ZIPプラグイン
    - ●インタフェースオブジェクト
    + ●インターフェースオブジェクト
    Editor
    Plugin
    diff --git a/help/plugin/Text/overview.html b/help/plugin/Text/overview.html index 0b25d71ba1..82f656523d 100644 --- a/help/plugin/Text/overview.html +++ b/help/plugin/Text/overview.html @@ -122,7 +122,7 @@

    ジャック一覧

    無題
    \ 退避修飾(エスケープ)
    正規表現記号の有効/無効の制御
    @@ -41,6 +42,7 @@

    文字集合(キャラクタクラス)

    [...] の中に以下のものが指定可能です。
    + @@ -56,6 +58,7 @@

    文字集合(キャラクタクラス)

    量指定子(数量子)

    無題
    ...
    [ABC]はAかBかCのどれかにマッチします。
    ^...否定
    [^ABC]はAとBとC以外の任意の1文字にマッチします。
    x-y範囲
    [A-Z]は、「A」から「Z」までの文字のどれか1つとマッチします。
    + @@ -74,6 +77,7 @@

    量指定子(数量子)

    文字

    無題
    最小一致
    (無欲)
    最大一致
    (欲張り)
    *? * 直前のパターンの0回以上の繰り返し
    +? + 直前のパターンの1回以上の繰り返し
    + @@ -93,6 +97,7 @@

    文字

    文字種

    無題
    \t水平タブコード(HT,TAB)
    \nラインフィード(LF)
    \rキャリッジリターン(CR)
    + @@ -111,6 +116,7 @@

    文字種

    位置(錨)

    無題
    .\nを除く任意の1文字 [^\n]と同じ
    (Unicode版) 改行を除く任意の1文字。[^\r\n]と同じ *1
    + @@ -124,8 +130,10 @@

    位置(錨)

    後方参照と部分式呼び出し

    無題
    ^行頭
    $行末
    \b単語の境界
    [ ]の中ではバックスペースの意味になります
    - - + + + + - - + +
    \n番号指定による後方参照
    ( )でグループ化した文字列を、\n(nは1以上の整数)で参照します。
    \k<name>
    \k'name'
    (鬼) 名前指定による後方参照
    無題
    \n番号指定による後方参照
    ( )でグループ化した文字列を、\n(nは1以上の整数)で参照します。
    \k<name>
    \k'name'
    (鬼) 名前指定による後方参照
    \k<name+n>
    \k<name-n>
    @@ -140,6 +148,7 @@

    後方参照と部分式呼び出し

    拡張式集合

    + @@ -158,8 +167,10 @@

    拡張式集合

    置換で使える参照

    「置換後」に指定して使います。
    無題
    (?#...)注釈
    ()捕獲式集合
    (?:)非捕獲式集合 (グループ化のみ)
    - - + + + + diff --git a/help/sakura/res/HLP000104.html b/help/sakura/res/HLP000104.html index 7b0d77e287..c5f4f7906b 100644 --- a/help/sakura/res/HLP000104.html +++ b/help/sakura/res/HLP000104.html @@ -106,9 +106,9 @@

    候補の補完動作

  • \hを入力して単語ファイルから\hogehogeをサーチすることはできません。記号は単語の区切りとして認識されるためです。
  • $n番号指定参照
    ( )でグループ化した文字列を、$n(nは1以上の整数)で参照します。
    サクラエディタでは$nの代わりに\nも使用できます。
    ${n}(鬼) (安全な)番号指定参照
    後ろにそのまま続けて数字を書くことができます。
    無題
    $n番号指定参照
    ( )でグループ化した文字列を、$n(nは1以上の整数)で参照します。
    サクラエディタでは$nの代わりに\nも使用できます。
    ${n}(鬼) (安全な)番号指定参照
    後ろにそのまま続けて数字を書くことができます。
    $&マッチした文字列全体
    $+(鬼) 最後にマッチした部分文字列
    $+{name}
    $-{name}[n]
    (鬼) 名前指定参照(Perl 5.10 互換、推奨)
    - - - + + + diff --git a/help/sakura/res/HLP000107.html b/help/sakura/res/HLP000107.html index 961b741a3e..368f6a16ae 100644 --- a/help/sakura/res/HLP000107.html +++ b/help/sakura/res/HLP000107.html @@ -21,7 +21,7 @@

    キー割り当て一覧


    無題
    登録単語入力文字候補表示
    無題
    登録単語入力文字候補表示
    \hogehoge\\で始まる単語をサーチし\hogehogeを候補表示
    - + diff --git a/help/sakura/res/HLP000109.html b/help/sakura/res/HLP000109.html index 5879b801eb..d1f4dbcce5 100644 --- a/help/sakura/res/HLP000109.html +++ b/help/sakura/res/HLP000109.html @@ -35,6 +35,7 @@

    コマンドラインオプション

    ファイルオープンに関するオプション

    無題
    キー機能名記録
    キー機能名記録
    ダブルクリック現在位置の単語選択
    右クリック右クリックメニュー×
    トリプルクリック1行選択
    + @@ -67,6 +68,7 @@

    ファイルオープンに関するオプション

    単独で使用するオプション

    無題
    ファイル名編集するファイルを指定。一つだけ指定可能。
    ""で囲ったほうがいいです。
    -X= ファイルを開いたときのカーソルの桁位置を指定
    -Y= ファイルを開いたときのカーソルの行位置を指定
    +
    無題
    -NOWIN タスクトレイのみ起動。既にサクラエディタが起動している場合は無効
    -DEBUGMODE アウトプット用のウィンドウとして起動
    @@ -79,6 +81,7 @@

    Grepに関するオプション

    -GREPMODE と同時に指定します + @@ -92,6 +95,7 @@

    Grepに関するオプション

    -GOPTのオプション
    無題
    -GREPMODEGrep実行モードで起動
    -GKEY=Grepの検索文字列
    "'で囲む。条件中の'"'は二つの連続した'"'にする
    (例) -GKEY="printf("        「printf(」を検索
    (例) -GKEY="printf( ""%s"    「printf( "%s」を検索
    -GREPR=Grepの置換文字列 (sakura:2.2.0.0以降)
    これを指定すると置換になる
    '"'で囲む。条件中の'"'は二つの連続した'"'にする
    + @@ -115,6 +119,7 @@

    プロファイルに関するオプション

    プロファイルのオプションは他のオプションと同時に指定できます。
    無題
    Sサブフォルダからも検索
    L大文字と小文字を区別
    R正規表現
    + diff --git a/help/sakura/res/HLP000145.html b/help/sakura/res/HLP000145.html index b46cb7be03..5b78ec53cf 100644 --- a/help/sakura/res/HLP000145.html +++ b/help/sakura/res/HLP000145.html @@ -76,6 +76,7 @@

    共通設定 『バックアップ』プロパティ

    バックアップファイルの作成場所
    無題
    -PROFMGRプロファイルマネージャを起動時に表示 (sakura:2.2.0.0以降)
    -PROF=プロファイルを選択(sakura:2.2.0.0以降)
    ""でデフォルトを選択
    + @@ -100,6 +101,7 @@

    共通設定 『バックアップ』プロパティ

    バックアップファイル名として以下の文字展開が行われます。
    無題
    ローカルドライブにあるファイルリムーバブルメディアにあるファイル
    □指定フォルダに作成する
    □リムーバブルメディアのみ
    □バックアップファイルをごみ箱に放り込む
    編集中のファイルのあるフォルダ編集中のファイルのあるフォルダ
    ■指定フォルダに作成する
    □リムーバブルメディアのみ
    □バックアップファイルをごみ箱に放り込む
    指定フォルダ指定フォルダ
    + diff --git a/help/sakura/res/HLP000193.html b/help/sakura/res/HLP000193.html index 8b810b9dde..c3d9e6bab6 100644 --- a/help/sakura/res/HLP000193.html +++ b/help/sakura/res/HLP000193.html @@ -20,6 +20,7 @@

    コマンド一覧 (機能別)

    [ファイル操作系]
    無題
    $0ファイル名
    $1 .. $9上位階層へx個移動したところにあるフォルダ名
    *拡張子
    + @@ -58,6 +59,7 @@

    コマンド一覧 (機能別)

    [編集系]
    無題
    新規作成Ctrl+N
    新規ウインドウを開く
    開くCtrl+O
    + @@ -88,6 +90,7 @@

    コマンド一覧 (機能別)

    [カーソル移動系]
    無題
    元に戻すCtrl+Z, Ctrl+_, Ctrl+_(PC-98)
    やり直しCtrl+Y
    削除Del
    + @@ -130,6 +133,7 @@

    コマンド一覧 (機能別)

    [選択系]
    無題
    カーソル上移動
    カーソル下移動
    カーソル左移動
    + @@ -171,6 +175,7 @@

    コマンド一覧 (機能別)

    [矩形選択系]
    無題
    現在位置の単語選択ダブルクリック, Shift+ダブルクリック,
    Ctrl+ダブルクリック, Ctrl+W,
    Shift+Ctrl+ダブルクリック,
    + @@ -195,6 +200,7 @@

    コマンド一覧 (機能別)

    [クリップボード系]
    無題
    矩形範囲択開始Shift+F6
    Alt+↑, Alt+↓, Alt+←, Alt+→
    (矩形選択)カーソル上移動
    + @@ -213,6 +219,7 @@

    コマンド一覧 (機能別)

    [挿入系]
    無題
    切り取りF7, Shift+Del, Ctrl+X
    コピーF8, Ctrl+C, Ctrl+Ins
    折り返し位置に改行をつけてコピー
    + @@ -221,6 +228,7 @@

    コマンド一覧 (機能別)

    [変換系]
    無題
    日付挿入Alt+;
    時刻挿入Alt+:
    コントロールコードの入力
    + @@ -251,6 +259,7 @@

    コマンド一覧 (機能別)

    [検索系]
    無題
    小文字Ctrl+F6, Ctrl+Alt+L
    大文字Ctrl+F7, Shift+Ctrl+Alt+L
    全角→半角Ctrl+F8
    + @@ -294,6 +303,7 @@

    コマンド一覧 (機能別)

    [モード切り替え系]
    無題
    検索Ctrl+F
    検索(ボックス)
    次を検索F3
    + @@ -305,6 +315,7 @@

    コマンド一覧 (機能別)

    [設定系]
    無題
    挿入/上書きモード切り替えIns
    入力改行コード指定(CRLF)
    入力改行コード指定(LF)
    + @@ -326,6 +337,7 @@

    コマンド一覧 (機能別)

    [マクロ系]
    無題
    ツールバーの表示/非表示Ctrl+1
    ファンクションキーの表示/非表示Ctrl+2
    タブバーの表示/非表示
    + @@ -337,6 +349,7 @@

    コマンド一覧 (機能別)

    [ウィンドウ系]
    無題
    キーマクロの記録開始/終了Shift+Ctrl+M
    キーマクロの保存Ctrl+M
    キーマクロの読み込みCtrl+L
    + @@ -373,6 +386,7 @@

    コマンド一覧 (機能別)

    [支援]
    無題
    上下に分割/分割解除F4, Shift+Ctrl+-
    左右に分割/分割解除Shift+F4, Shift+Ctrl+\
    縦横に分割/分割解除Shift+Ctrl+;
    + @@ -386,13 +400,14 @@

    コマンド一覧 (機能別)

    [外部マクロ]
    無題
    入力補完Ctrl+Space, Ctrl+/
    キーワードヘルプ自動表示
    ヘルプ目次Alt+F1
    +
    無題
    登録済みマクロ
    [カスタムメニュー] - + diff --git a/help/sakura/res/HLP000204.html b/help/sakura/res/HLP000204.html index 584a7e52eb..132c77766e 100644 --- a/help/sakura/res/HLP000204.html +++ b/help/sakura/res/HLP000204.html @@ -22,7 +22,7 @@

    拡張子

     
    無題
    右クリックメニュー右クリック, アプリキー
    右クリックメニュー右クリック, アプリキー
    Shift+右クリック, Shift+アプリキー,
    Ctrl+右クリック , Ctrl+アプリキー,
    Shift+Ctrl+右クリック,
    - + diff --git a/help/sakura/res/HLP000261.html b/help/sakura/res/HLP000261.html index 23163f29f2..38199045b0 100644 --- a/help/sakura/res/HLP000261.html +++ b/help/sakura/res/HLP000261.html @@ -22,6 +22,7 @@

    あると便利なツール、ファイル

    利用時に参照するファイル

    無題
    拡張子種類
    拡張子種類
    macキーマクロ
    ppaPPAマクロ
    jsWSH:Jscriptマクロ
    + @@ -44,6 +45,7 @@

    インポート・エクスポートするもの

    一度インポートすれば、設定ファイルに書きこまれます。
    無題
    b*ヘルプファイル(sakura.chm)
    b DIFF差分表示(diff.exe)
    b*正規表現ライブラリ(bregonig.dll or bregxp.dll)
    + diff --git a/help/sakura/res/HLP000268.html b/help/sakura/res/HLP000268.html index c39c19408a..71384daf8f 100644 --- a/help/sakura/res/HLP000268.html +++ b/help/sakura/res/HLP000268.html @@ -476,7 +476,7 @@

    マクロ専用関数/変数

        以下の値を足したものを指定します。
    無題
    t*強調キーワードファイル(*.kwd / *.*)
    i 正規表現キーワード(*.rkw / *.*)
    i 色設定ファイル(*.col / *.*)
    - + @@ -503,6 +503,7 @@

    マクロ専用関数/変数

    押されたボタンの番号を返します。
    無題
    表示するボタン
    表示するボタン 0x0OK
    0x1OK/キャンセル
    0x2中止/再試行/無視
    + @@ -528,7 +529,8 @@

    マクロ専用関数/変数

    解説
    それぞれ以下のMessageBox関数と等価です。
    無題
    0x1OK
    0x2キャンセル
    0x3中止
    - + + diff --git a/help/sakura/res/HLP000272.html b/help/sakura/res/HLP000272.html index e924295e20..7b3d9ee644 100644 --- a/help/sakura/res/HLP000272.html +++ b/help/sakura/res/HLP000272.html @@ -33,7 +33,7 @@

    メタ文字列の仕様

     
    無題無題
    ErrorMsg「エラーアイコン」+「OKボタン」
    WarnMsg「警告アイコン」+「OKボタン」
    InfoMsg「情報アイコン」+「OKボタン」
    - + diff --git a/help/sakura/res/HLP000300.html b/help/sakura/res/HLP000300.html index fe375966b0..ecdd38e60d 100644 --- a/help/sakura/res/HLP000300.html +++ b/help/sakura/res/HLP000300.html @@ -18,7 +18,7 @@

    タイプ (ファイルタイプ, 文書タイプ)

     
    無題
    エイリアス名メタ文字列意味
    エイリアス名メタ文字列意味
    %MyDoc%%Personal%マイドキュメント
    %MyPict%%My Pictures%マイピクチャ
    %MyMusic%%My Music%マイミュージック
    - + From fb4e04924ee7aa0b58de13000d5011b8b9fee898 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Thu, 14 Jan 2021 20:43:48 +0900 Subject: [PATCH 0344/1024] =?UTF-8?q?target=3D=5Fblank=E3=81=AAa=E3=82=BF?= =?UTF-8?q?=E3=82=B0=E3=81=ABrel=3Dnoopener=E3=82=92=E4=BB=98=E3=81=91?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- help/macro/source/usage/MacroType.html | 4 ++-- help/macro/source/usage/perlscript.html | 2 +- help/macro/source/usage/scriptcontrol.html | 2 +- help/plugin/Text/index.html | 4 ++-- help/plugin/Text/reference.html | 8 ++++---- help/sakura/res/HLP000001.html | 2 +- help/sakura/res/HLP000003.html | 2 +- help/sakura/res/HLP000006.html | 2 +- help/sakura/res/HLP000008.html | 4 ++-- help/sakura/res/HLP000010.html | 2 +- help/sakura/res/HLP000089.html | 8 ++++---- help/sakura/res/HLP000112.html | 8 ++++---- help/sakura/res/HLP000251.html | 2 +- help/sakura/res/HLP000269.html | 2 +- help/sakura/res/HLP000278.html | 6 +++--- help/sakura/res/HLP000374.html | 2 +- help/sakura/res/HLP000375.html | 22 +++++++++++----------- help/sakura/res/HLP_HISTORY.html | 4 ++-- help/sakura/res/HLP_UR000.html | 2 +- help/sakura/res/HLP_UR010.html | 2 +- 20 files changed, 45 insertions(+), 45 deletions(-) diff --git a/help/macro/source/usage/MacroType.html b/help/macro/source/usage/MacroType.html index 8fd840bd4f..3e2d938277 100644 --- a/help/macro/source/usage/MacroType.html +++ b/help/macro/source/usage/MacroType.html @@ -31,7 +31,7 @@

    PPAマクロ

    1.2.106.1以降
    説明
    - 別途ppa.dllが必要
    + 別途ppa.dllが必要
    実行環境に左右されず一定の動作が期待できる
    @@ -59,7 +59,7 @@

    (WSH)Perl/Python/Rubyその他

    説明
    Win95系OSでは動作が微妙
    - 対象の言語エンジンが必要。 + 対象の言語エンジンが必要。
    diff --git a/help/macro/source/usage/perlscript.html b/help/macro/source/usage/perlscript.html index a2eb330042..983a0645e7 100644 --- a/help/macro/source/usage/perlscript.html +++ b/help/macro/source/usage/perlscript.html @@ -32,7 +32,7 @@

    日本語の使用

    -この問題についての詳細 +この問題についての詳細

    MsgBox関数

    Perlには非公式にMsgBox関数がありますので、WScript.ShellのPupupよりもお手軽です。 diff --git a/help/macro/source/usage/scriptcontrol.html b/help/macro/source/usage/scriptcontrol.html index 933ec582f0..560c6c6835 100644 --- a/help/macro/source/usage/scriptcontrol.html +++ b/help/macro/source/usage/scriptcontrol.html @@ -12,7 +12,7 @@

    ScriptControlの使用

    WSHマクロにおいてScriptControlを使用することで 各種スクリプトを混在で利用できます。

    -Script Control - Microsoft Scripting Technologies +Script Control - Microsoft Scripting Technologies

    JScriptサンプル

    diff --git a/help/plugin/Text/index.html b/help/plugin/Text/index.html
    index 76132a61fc..46987fc6e6 100644
    --- a/help/plugin/Text/index.html
    +++ b/help/plugin/Text/index.html
    @@ -17,8 +17,8 @@
     
    サクラエディタ プラグイン開発ガイド
    最終更新日 2015/02/28
    - - + +
     本ヘルプは、サクラエディタのプラグインを開発する為のガイドです。

    diff --git a/help/plugin/Text/reference.html b/help/plugin/Text/reference.html index 7ed5fdbb70..b059ca0c7e 100644 --- a/help/plugin/Text/reference.html +++ b/help/plugin/Text/reference.html @@ -15,10 +15,10 @@ -->

    5. 参考


    -・プラグイン対応アプリケーションについて http://hp.vector.co.jp/authors/VA041250/doc/plugin/Reference
    -・COM研究室 http://www5.plala.or.jp/atata/com/Reference
    -・Firefox 全般的に参考とした https://developer.mozilla.org/ja/BundlesReference
    -・Eclipse 全般的に参考とした2 http://www.genpaku.org/other/eclipse/plugin_architecturej/plugin_architecture.htmlReference
    +・プラグイン対応アプリケーションについて http://hp.vector.co.jp/authors/VA041250/doc/plugin/Reference
    +・COM研究室 http://www5.plala.or.jp/atata/com/Reference
    +・Firefox 全般的に参考とした https://developer.mozilla.org/ja/BundlesReference
    +・Eclipse 全般的に参考とした2 http://www.genpaku.org/other/eclipse/plugin_architecturej/plugin_architecture.htmlReference
    ・Meryのコマンド追加機能
    ・Poderosaのプラグイン機構

    diff --git a/help/sakura/res/HLP000001.html b/help/sakura/res/HLP000001.html index f91f8092fd..b275f57004 100644 --- a/help/sakura/res/HLP000001.html +++ b/help/sakura/res/HLP000001.html @@ -17,7 +17,7 @@
    サクラエディタ Ver 2.4.2 (開発版)
    ヘルプファイル最終更新日 2020/05/30
    - +
    サクラエディタ(旧称:テキストエディタ)は、「たけ(竹パンダ)」さんのテキストエディタSAKURAの公開ソース(2000/02/21付)を元に不具合修正および機能拡張を行ったものです。
    本ヘルプは、オリジナルのヘルプを元に、共同開発版で修正・変更された点について記述を加えています。
    diff --git a/help/sakura/res/HLP000003.html b/help/sakura/res/HLP000003.html index efc90ab85a..6accc20974 100644 --- a/help/sakura/res/HLP000003.html +++ b/help/sakura/res/HLP000003.html @@ -21,7 +21,7 @@

    動作環境

    ただし機能的違いは一切ありません。
    また、32ビットDLLのPPA/Migemoは利用できません。

    note注意
    diff --git a/help/sakura/res/HLP000006.html b/help/sakura/res/HLP000006.html index 42cff34867..5ac9e60812 100644 --- a/help/sakura/res/HLP000006.html +++ b/help/sakura/res/HLP000006.html @@ -22,7 +22,7 @@

    Perl5互換の正規表現

    bregonig.dll
    正規表現エンジンに鬼車を使用したBREGEXP.DLL互換の正規表現ライブラリです。
    - +
    ※パッケージ版に同梱されています
    diff --git a/help/sakura/res/HLP000008.html b/help/sakura/res/HLP000008.html index 25818091b4..778ac2df93 100644 --- a/help/sakura/res/HLP000008.html +++ b/help/sakura/res/HLP000008.html @@ -33,11 +33,11 @@

    インクリメンタルサーチについて

    ■Migemoについて
    Migemoとは、ローマ字のままアルファベット・日本語をインクリメンタルサーチできる機能です。
    例えば、「桜」を検索したい場合は「sak」「sakur」等で目的の場所に移動できます。
    -詳しい説明は、http://namazu.org/~satoru/migemo/に書いてあります。
    +詳しい説明は、http://namazu.org/~satoru/migemo/に書いてあります。
    サクラエディタは行をまたぐ検索ができません。

    ■Migemoの設定
    -C/Migemoのバイナリをhttp://www.kaoriya.netからダウンロード
    +C/Migemoのバイナリをhttp://www.kaoriya.netからダウンロード
    サクラエディタだけで使う方はmigemo.dllとdictディレクトリをsakura.exeと同じ場所に置いてください。
    他のソフトと共有する等の理由で別の場所に置く場合は、共通設定 『支援』プロパティでパスを指定してください。また、正規表現ライブラリも必要です。
    diff --git a/help/sakura/res/HLP000010.html b/help/sakura/res/HLP000010.html index 4c2427ae4d..7e17cf56f3 100644 --- a/help/sakura/res/HLP000010.html +++ b/help/sakura/res/HLP000010.html @@ -33,7 +33,7 @@

    アイコンファイルの作成について

    hintヒント
    サクラエディタのツールバーアイコンファイル生成ソフトとしてToolIconMaker(Copyright (C) 2001, MIK)が以下より配布されています。

    diff --git a/help/sakura/res/HLP000089.html b/help/sakura/res/HLP000089.html index 54ce08e842..cf6869b6c9 100644 --- a/help/sakura/res/HLP000089.html +++ b/help/sakura/res/HLP000089.html @@ -48,8 +48,8 @@

    文字集合(キャラクタクラス)

    - - + +
    無題
    タイプ名拡張子
    タイプ名拡張子
    基本なし
    テキストtxt,log,1st,err,ps
    C/C++c,cpp,cxx,cc,cp,c++,h,hpp,hxx,hh,hp,h++,rc,hm
    x-y範囲
    [A-Z]は、「A」から「Z」までの文字のどれか1つとマッチします。
    [...](鬼) 文字集合内文字集合
    ..&&..(鬼) 積演算
    [:xxxxx:](鬼) POSIXブラケット
    [:^xxxxx:](鬼) POSIXブラケット(否定)
    [:xxxxx:](鬼) POSIXブラケット
    [:^xxxxx:](鬼) POSIXブラケット(否定)
    (鬼) はbregonig.dllのみ

    @@ -107,8 +107,8 @@

    文字種

    \S空白類文字以外
    \d10進数字
    (Unicode版) 2バイト文字=全角数字も含む
    \D10進数字以外
    \p{property-name}(鬼) キャラクタプロパティ
    \p{^property-name}
    \P{property-name}
    (鬼) キャラクタプロパティ(否定)
    \p{property-name}(鬼) キャラクタプロパティ
    \p{^property-name}
    \P{property-name}
    (鬼) キャラクタプロパティ(否定)
    (鬼) はbregonig.dllのみ
    (Unicode版) はUnicode版のサクラエディタ
    diff --git a/help/sakura/res/HLP000112.html b/help/sakura/res/HLP000112.html index 0fe7a9d2da..6f8cbc69d2 100644 --- a/help/sakura/res/HLP000112.html +++ b/help/sakura/res/HLP000112.html @@ -14,18 +14,18 @@

    最新バージョンのダウンロード

    サクラエディタの最新バージョン及びソースは、以下のWebページから入手可能です。
    ・Project Sakura-Editor
    -    https://sakura-editor.github.io/
    +    https://sakura-editor.github.io/

    サクラエディタはまだまだ発展途上のソフトウェアです。ユーザーの皆様により良いものを提供するため、改良や修正を続けています。

    ソースコード公開
    -開発中のソースをここからすべて無償で入手できます。
    -ZIP 形式でも取得できますが、git を使って入手することをおすすめします。
    +開発中のソースをここからすべて無償で入手できます。
    +ZIP 形式でも取得できますが、git を使って入手することをおすすめします。

    ソースから実行ファイルをビルドするには、以下を参照してください

    diff --git a/help/sakura/res/HLP000251.html b/help/sakura/res/HLP000251.html index 01ab1b7a62..5021bbeea8 100644 --- a/help/sakura/res/HLP000251.html +++ b/help/sakura/res/HLP000251.html @@ -21,7 +21,7 @@

    DIFF差分表示

    note注意
    GNU DIFF 2.5/2.7が必要です.WinCVS 1.2付属のdiffはパス中のスペースを正しく扱えないので使わないでください.

    -入手先:http://w32tex.org/index-ja.html
    +入手先:http://w32tex.org/index-ja.html
    「W32 utilities」のページから、patch-diff-w32.zip をダウンロードします。

    差分表示を行うと行番号の左側に差分状態が表示されます。
    diff --git a/help/sakura/res/HLP000269.html b/help/sakura/res/HLP000269.html index 99773366c8..b03094017b 100644 --- a/help/sakura/res/HLP000269.html +++ b/help/sakura/res/HLP000269.html @@ -39,7 +39,7 @@

    PPAマクロ


    ダウンロードは以下のサイトから可能です。
    サクラエディタのマクロ関数は、「S_関数名」と、S_をつけてください。
    diff --git a/help/sakura/res/HLP000278.html b/help/sakura/res/HLP000278.html index f6401c8fb5..e7f6f80767 100644 --- a/help/sakura/res/HLP000278.html +++ b/help/sakura/res/HLP000278.html @@ -15,7 +15,7 @@

    ダイレクトタグジャンプの使い方

    ver 2.4.0.0 以降の場合
    -
    Universal Ctags がインストーラパッケージおよび appveyor の成果物に同梱されています。
    +
    Universal Ctags がインストーラパッケージおよび appveyor の成果物に同梱されています。
    同梱されているバージョンと異なるバージョンを使いたい場合以外何もする必要はありません。

    @@ -25,8 +25,8 @@

    ダイレクトタグジャンプの使い方

    以下のいずれかの ctags をダウンロードして ctags.exeを sakura.exe と同一フォルダに置きます。
    Universal Ctags には x86版 (32bit)と x64版(64bit) があります。sakura.exe と同じタイプ(x86版 or x64版)をダウンロードします。
    diff --git a/help/sakura/res/HLP000374.html b/help/sakura/res/HLP000374.html index 7578fd3f08..e0992199a6 100644 --- a/help/sakura/res/HLP000374.html +++ b/help/sakura/res/HLP000374.html @@ -20,7 +20,7 @@

    Windows 10 でのファイル拡張子関連付け

    準備が必要な条件

    -ver 2.4.0.0 以降(正確には PR #596) のサクラエディタのインストーラを使ってインストールした場合は不要です。
    +ver 2.4.0.0 以降(正確には PR #596) のサクラエディタのインストーラを使ってインストールした場合は不要です。
    それ以前のインストーラを使ってインストールした場合またはインストーラを使わなかった場合にこちらの準備が必要になります。

    ただし ver 2.4.0.0 以降のインストーラを使った場合でも、サクラエディタが標準で対応しない拡張子への関連付けを行う場合には
    diff --git a/help/sakura/res/HLP000375.html b/help/sakura/res/HLP000375.html index e4fede243a..c757575e07 100644 --- a/help/sakura/res/HLP000375.html +++ b/help/sakura/res/HLP000375.html @@ -14,7 +14,7 @@

    Windows 10 でのファイル拡張子関連付けのための準備作業準備が必要な条件

    -ver 2.4.0.0 以降(正確には PR #596) のサクラエディタのインストーラを使ってインストールした場合は不要です。
    +ver 2.4.0.0 以降(正確には PR #596) のサクラエディタのインストーラを使ってインストールした場合は不要です。
    それ以前のインストーラを使ってインストールした場合またはインストーラを使わなかった場合にこのページの手順が必要になります。

    ただし ver 2.4.0.0 以降のインストーラを使った場合でも、サクラエディタが標準で対応しない拡張子への関連付けを行う場合には
    @@ -49,12 +49,12 @@

    Applications

    参考サイト

    Verb

    -コマンドを ShellExecute を起動するときの Verb を登録します。
    +コマンドを ShellExecute を起動するときの Verb を登録します。

    以下の内容で reg ファイルを作成してダブルクリックして適用します。
    @@ -76,8 +76,8 @@

    Verb

    参考サイト

    @@ -99,17 +99,17 @@

    OpenWithProgids (拡張子ごとに設定する)

    参考サイト

    リンク

    diff --git a/help/sakura/res/HLP_HISTORY.html b/help/sakura/res/HLP_HISTORY.html index b5b85f9f49..89dc939926 100644 --- a/help/sakura/res/HLP_HISTORY.html +++ b/help/sakura/res/HLP_HISTORY.html @@ -11,8 +11,8 @@

    ヘルプファイル更新履歴

    -下記より新しい更新は、GitHub で管理されています。
    -helpのコンパイル前の最新は https://github.com/sakura-editor/sakura/tree/master/help/sakura/res より閲覧できます。
    +下記より新しい更新は、GitHub で管理されています。
    +helpのコンパイル前の最新は https://github.com/sakura-editor/sakura/tree/master/help/sakura/res より閲覧できます。

    2006-10-21 1.5.12.0
    diff --git a/help/sakura/res/HLP_UR000.html b/help/sakura/res/HLP_UR000.html index 631b2289a2..1d0b4fee79 100644 --- a/help/sakura/res/HLP_UR000.html +++ b/help/sakura/res/HLP_UR000.html @@ -15,7 +15,7 @@

    プロジェクト連絡先

    サクラエディタの最新版及びそのソースを以下のサイトで公開しています。

    -    https://sakura-editor.github.io/
    +    https://sakura-editor.github.io/

    不具合や改善要望、質問等がありましたら、上記サイトの掲示板までお気軽にご連絡下さい。
    連絡をいただいた場合、できる限りの対応をいたします。
    diff --git a/help/sakura/res/HLP_UR010.html b/help/sakura/res/HLP_UR010.html index 2ec197813d..9434db0615 100644 --- a/help/sakura/res/HLP_UR010.html +++ b/help/sakura/res/HLP_UR010.html @@ -107,7 +107,7 @@

    変更履歴(2003/01/14~)

    ダイレクトタグジャンプの使い方
    あらかじめctagsを使ってタグファイルを作る必要があります.

    -Exuberant Ctags 日本語対応版
    +Exuberant Ctags 日本語対応版

    上のリンクからctags.exeを取得し,それをsakura.exeと同一フォルダに置きます.次にctagsを作成したいディレクトリを開き,検索メニュー→タグファイルの作成でタグファイルを作成します.カレントフォルダのみのタグファイルを作成します.サブディレクトリのファイルも含んだタグファイルを作成したい場合はコマンドラインからctagsを直接実行してください.手動で作成するときは, ctags.exe --excmd=n -R * のように指定してください.カレントディレクトリ以外のtagsは参照されません.

    From 05501236937326c38d4b8574a8fc28005d2f1063 Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Fri, 15 Jan 2021 22:15:41 +0800 Subject: [PATCH 0345/1024] Update appveyor.yml --- appveyor.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/appveyor.yml b/appveyor.yml index 2ba1a88f5c..c28ad1ff56 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -26,6 +26,7 @@ skip_commits: install: - cmd: | pip install openpyxl --user + cinst innosetup # to run our custom scripts instead of automatic MSBuild build_script: From fe4ee10c1001dbfce789607274e5a0286f821643 Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Sat, 16 Jan 2021 10:26:52 +0800 Subject: [PATCH 0346/1024] Update appveyor.yml --- appveyor.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index c28ad1ff56..b9d454ffb1 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -31,8 +31,10 @@ install: # to run our custom scripts instead of automatic MSBuild build_script: - cmd: cup vswhere - - cmd: build-all.bat %PLATFORM% %CONFIGURATION% - + - cmd: | + type C:\projects\sakura\installer\Languages\ChineseSimplified.isl + build-all.bat %PLATFORM% %CONFIGURATION% + # to run our custom scripts instead of automatic tests test_script: - cmd: tests\run-tests.bat %PLATFORM% %CONFIGURATION% From 6de535931a6d61d8d7df1b0ca0dd796511d7a843 Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Sat, 16 Jan 2021 10:30:22 +0800 Subject: [PATCH 0347/1024] Update appveyor.yml --- appveyor.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index b9d454ffb1..c88f7b9cdc 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -31,10 +31,9 @@ install: # to run our custom scripts instead of automatic MSBuild build_script: - cmd: cup vswhere - - cmd: | - type C:\projects\sakura\installer\Languages\ChineseSimplified.isl - build-all.bat %PLATFORM% %CONFIGURATION% - + - cmd: type C:\projects\sakura\installer\Languages\ChineseSimplified.isl + - cmd: build-all.bat %PLATFORM% %CONFIGURATION% + # to run our custom scripts instead of automatic tests test_script: - cmd: tests\run-tests.bat %PLATFORM% %CONFIGURATION% From f1f7d8ec417e38cb81e5414202d672e40a70548c Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Sat, 16 Jan 2021 10:38:23 +0800 Subject: [PATCH 0348/1024] Update appveyor.yml --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index c88f7b9cdc..fc0514392e 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -26,7 +26,7 @@ skip_commits: install: - cmd: | pip install openpyxl --user - cinst innosetup + choco install innosetup # to run our custom scripts instead of automatic MSBuild build_script: From 576e9e13d3f87d7a408f6012ef8853ca817a67b3 Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Sat, 16 Jan 2021 13:13:07 +0800 Subject: [PATCH 0349/1024] Update appveyor.yml --- appveyor.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index fc0514392e..0f063b968b 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -25,8 +25,10 @@ skip_commits: install: - cmd: | - pip install openpyxl --user - choco install innosetup + py -m pip install --upgrade pip + py -m pip install openpyxl --user + cup innosetup + C:\ProgramData\chocolatey\tools\shimgen.exe --output=C:\ProgramData\chocolatey\bin\ISCC.exe --path="C:\Program Files (x86)\Inno Setup 6\ISCC.exe" # to run our custom scripts instead of automatic MSBuild build_script: From 7bfc3e64eb1986c61a14e01e3f2a2f4934312baa Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Sat, 16 Jan 2021 13:40:03 +0800 Subject: [PATCH 0350/1024] Update appveyor.yml --- appveyor.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 0f063b968b..3f607d9d11 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -33,7 +33,6 @@ install: # to run our custom scripts instead of automatic MSBuild build_script: - cmd: cup vswhere - - cmd: type C:\projects\sakura\installer\Languages\ChineseSimplified.isl - cmd: build-all.bat %PLATFORM% %CONFIGURATION% # to run our custom scripts instead of automatic tests From fe3ef35d5b084f01c0c1133f72637c98fd9678ad Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 16 Jan 2021 19:03:46 +0900 Subject: [PATCH 0351/1024] =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E7=B5=90?= =?UTF-8?q?=E6=9E=9CXML=E3=81=AE=E5=87=BA=E5=8A=9B=E5=85=88=E3=82=92?= =?UTF-8?q?=E5=A4=89=E6=9B=B4=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/sonarscan.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/sonarscan.yml b/.github/workflows/sonarscan.yml index a96bbc9fd0..5769b0ffcf 100644 --- a/.github/workflows/sonarscan.yml +++ b/.github/workflows/sonarscan.yml @@ -108,7 +108,7 @@ jobs: --cover_children -- .\tests\build\${{ env.BUILD_PLATFORM }}\${{ env.BUILD_CONFIGURATION }}\unittests\tests1.exe - --gtest_output=xml:tests1-googletest.xml + --gtest_output=xml:${{ github.workspace }}\tests1-googletest.xml - name: Set up JDK 11 uses: actions/setup-java@v1 From 5b4a5c844f723e54add8a00701b8f6c8ca0db6d3 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 16 Jan 2021 19:30:48 +0900 Subject: [PATCH 0352/1024] =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=AB?= =?UTF-8?q?=E3=83=90=E3=83=AC=E3=83=83=E3=82=B8=E3=81=AE=E7=B5=90=E6=9E=9C?= =?UTF-8?q?XML=E3=82=92=E8=A7=A3=E6=9E=90=E5=AF=BE=E8=B1=A1=E3=81=8B?= =?UTF-8?q?=E3=82=89=E9=99=A4=E5=A4=96=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/sonarscan.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/sonarscan.yml b/.github/workflows/sonarscan.yml index 5769b0ffcf..0fb7052216 100644 --- a/.github/workflows/sonarscan.yml +++ b/.github/workflows/sonarscan.yml @@ -147,4 +147,4 @@ jobs: -D"sonar.cfamily.threads=2" ` -D"sonar.coverage.exclusions=help\**\*.js,tools\**\*.js" ` -D"sonar.coverageReportPaths=tests1-coverage.xml" ` - -D"sonar.exclusions=.sonar\**\*,bw-output\**\*,HeaderMake\**\*,tests\build\**\*,tests\googletest\**\*,**\test-*" + -D"sonar.exclusions=.sonar\**\*,bw-output\**\*,HeaderMake\**\*,tests\build\**\*,tests\googletest\**\*,**\test-*,tests*-*.xml" From c3c8c4c17594481a990aa6669f4891a5c2693b17 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 16 Jan 2021 19:51:10 +0900 Subject: [PATCH 0353/1024] =?UTF-8?q?=E3=83=91=E3=82=B9=E5=8C=BA=E5=88=87?= =?UTF-8?q?=E3=82=8A=E6=96=87=E5=AD=97=E3=82=92/=E3=81=AB=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/coverage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unittests/coverage.cpp b/tests/unittests/coverage.cpp index 35f6a9969c..2eff9d799c 100644 --- a/tests/unittests/coverage.cpp +++ b/tests/unittests/coverage.cpp @@ -22,7 +22,7 @@ 3. This notice may not be removed or altered from any source distribution. */ -#include +#include // Exclude all the code from a particular files: // see https://docs.microsoft.com/ja-jp/visualstudio/test/using-code-coverage-to-determine-how-much-code-is-being-tested From 66146d19df22289b043c593a55875daf28b9f0b2 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 16 Jan 2021 20:02:01 +0900 Subject: [PATCH 0354/1024] =?UTF-8?q?=E3=82=AB=E3=83=90=E3=83=AC=E3=83=83?= =?UTF-8?q?=E3=82=B8=E9=99=A4=E5=A4=96=E3=83=91=E3=82=B9=E3=81=AE=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6=E3=82=92=E7=B7=A9=E5=92=8C=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/coverage.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/unittests/coverage.cpp b/tests/unittests/coverage.cpp index 2eff9d799c..4dafbbf91b 100644 --- a/tests/unittests/coverage.cpp +++ b/tests/unittests/coverage.cpp @@ -27,6 +27,6 @@ // Exclude all the code from a particular files: // see https://docs.microsoft.com/ja-jp/visualstudio/test/using-code-coverage-to-determine-how-much-code-is-being-tested ExcludeSourceFromCodeCoverage(Exclusion1, L"*\\tests\\unittests\\*"); -ExcludeSourceFromCodeCoverage(Exclusion2, L"*\\tests\\googletest\\googletest\\*"); -ExcludeSourceFromCodeCoverage(Exclusion3, L"*\\Windows Kits\\10\\Include\\*\\winrt\\wrl\\client.h"); +ExcludeSourceFromCodeCoverage(Exclusion2, L"*\\googletest\\*"); +ExcludeSourceFromCodeCoverage(Exclusion3, L"*\\Windows Kits\\10\\Include\\*"); ExcludeSourceFromCodeCoverage(Exclusion4, L"*\\VC\\Tools\\MSVC\\*\\include\\*"); From 2c8c2522da5a500b07559c62660d51cdd1877b98 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 16 Jan 2021 20:10:42 +0900 Subject: [PATCH 0355/1024] =?UTF-8?q?coverage.cpp=E3=82=92=E3=82=AB?= =?UTF-8?q?=E3=83=90=E3=83=AC=E3=83=83=E3=82=B8=E8=A8=88=E6=B8=AC=E5=AF=BE?= =?UTF-8?q?=E8=B1=A1=E3=81=8B=E3=82=89=E9=99=A4=E5=A4=96=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/sonarscan.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/sonarscan.yml b/.github/workflows/sonarscan.yml index 0fb7052216..360a7d04f8 100644 --- a/.github/workflows/sonarscan.yml +++ b/.github/workflows/sonarscan.yml @@ -145,6 +145,6 @@ jobs: -D"sonar.cfamily.cache.path=.sonar\analysis-cache" ` -D"sonar.cfamily.cppunit.reportPath=tests1-googletest.xml" ` -D"sonar.cfamily.threads=2" ` - -D"sonar.coverage.exclusions=help\**\*.js,tools\**\*.js" ` + -D"sonar.coverage.exclusions=help\**\*.js,tests\unittests\coverage.cpp,tools\**\*.js" ` -D"sonar.coverageReportPaths=tests1-coverage.xml" ` -D"sonar.exclusions=.sonar\**\*,bw-output\**\*,HeaderMake\**\*,tests\build\**\*,tests\googletest\**\*,**\test-*,tests*-*.xml" From 841427380d6d24a67fc76b190f1a143bbd6e2a49 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 16 Jan 2021 20:25:10 +0900 Subject: [PATCH 0356/1024] =?UTF-8?q?=E3=83=95=E3=82=A9=E3=83=BC=E3=83=9E?= =?UTF-8?q?=E3=83=83=E3=83=88=E6=96=87=E5=AD=97=E5=88=97=E3=81=AE=E9=80=94?= =?UTF-8?q?=E4=B8=AD=E3=81=ABNUL=E3=81=8C=E5=90=AB=E3=81=BE=E3=82=8C?= =?UTF-8?q?=E3=82=8B=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit std::wstring_viewのコンストラクタに長さを指定しない場合、 最初に現れたNULの手前までの長さの文字列になるので希望するテストができていなかった。 --- tests/unittests/test-format.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/unittests/test-format.cpp b/tests/unittests/test-format.cpp index fc7563d288..30fa37b04b 100644 --- a/tests/unittests/test-format.cpp +++ b/tests/unittests/test-format.cpp @@ -58,6 +58,7 @@ TEST( format, GetDateTimeFormat ) ASSERT_STREQ( L"12345-45-12-23 12:34:56", result3.c_str() ); // 途中にnull文字 - auto result4 = GetDateTimeFormat( L"%Y-%y-%m-%d\0%H:%M:%S", time ); + constexpr const wchar_t format4[] = L"%Y-%y-%m-%d\0%H:%M:%S"; + auto result4 = GetDateTimeFormat( std::wstring_view(format4, _countof(format4) - 1), time ); ASSERT_STREQ( L"12345-45-12-23", result4.c_str() ); } From 8783ae8362f071fc5e5cc567309c10dfdd1ec282 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 17 Jan 2021 13:56:58 +0900 Subject: [PATCH 0357/1024] =?UTF-8?q?CompareVersion=E3=81=AE=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-format.cpp | 91 +++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/tests/unittests/test-format.cpp b/tests/unittests/test-format.cpp index 30fa37b04b..909a809078 100644 --- a/tests/unittests/test-format.cpp +++ b/tests/unittests/test-format.cpp @@ -62,3 +62,94 @@ TEST( format, GetDateTimeFormat ) auto result4 = GetDateTimeFormat( std::wstring_view(format4, _countof(format4) - 1), time ); ASSERT_STREQ( L"12345-45-12-23", result4.c_str() ); } + +/*! + * @brief CompareVersionのテスト + * 戻り値が 0ならば: バージョンは等しい + */ +TEST(format, CompareVersion_SameVersion) +{ + // 2つのバージョン文字列を比較します。 + // バージョンは4個までの数字を「.」「-」「_」「+」でつなげたものとし、ほかに以下の記号を認識します。 + // 「a」「alpha」 < 「b」「beta」 < 「rc」「RC」 < (記号なし) < 「p」「pl」 + ASSERT_EQ(0, CompareVersion(L"2.4.1.0", L"2.4.1.0")); + + // 1つ目の区切り文字マトリックス + ASSERT_EQ(0, CompareVersion(L"2.4.1.0", L"2.4.1.0")); + ASSERT_EQ(0, CompareVersion(L"2.4.1.0", L"2-4.1.0")); + ASSERT_EQ(0, CompareVersion(L"2.4.1.0", L"2_4.1.0")); + ASSERT_EQ(0, CompareVersion(L"2.4.1.0", L"2+4.1.0")); + + // 2つ目の区切り文字マトリックス + ASSERT_EQ(0, CompareVersion(L"2.4.1.0", L"2.4.1.0")); + ASSERT_EQ(0, CompareVersion(L"2.4.1.0", L"2.4-1.0")); + ASSERT_EQ(0, CompareVersion(L"2.4.1.0", L"2.4_1.0")); + ASSERT_EQ(0, CompareVersion(L"2.4.1.0", L"2.4+1.0")); + + // 3つ目の区切り文字マトリックス + ASSERT_EQ(0, CompareVersion(L"2.4.1.0", L"2.4.1.0")); + ASSERT_EQ(0, CompareVersion(L"2.4.1.0", L"2.4.1-0")); + ASSERT_EQ(0, CompareVersion(L"2.4.1.0", L"2.4.1_0")); + ASSERT_EQ(0, CompareVersion(L"2.4.1.0", L"2.4.1+0")); + + // 5つ目の値が異なっていても影響を受けない + ASSERT_EQ(0, CompareVersion(L"2.4.1.0.1", L"2.4.1.0.2")); + + // リビジョン記号は数値扱いなので数値4つ+記号だと影響を受けない + ASSERT_EQ(0, CompareVersion(L"2.4.1.0alpha", L"2.4.1.0beta")); + + // 数値に指定できるのは2桁までで、区切り文字を省略できる + ASSERT_EQ(0, CompareVersion(L"2.4.1", L"2.0401")); + + // 数値とリビジョン記号のあ緯度の区切り文字はあってもなくてもよい + ASSERT_EQ(0, CompareVersion(L"2.4.1alpha", L"2.4.1.alpha")); + + // リビジョン記号の2文字目以降にtypoがあっても先頭文字に一致するレビジョンとして認識される + ASSERT_EQ(0, CompareVersion(L"2.4.1a", L"2.4.1alfa")); + ASSERT_EQ(0, CompareVersion(L"2.4.1b", L"2.4.1bete")); + ASSERT_EQ(0, CompareVersion(L"2.4.1r", L"2.4.1rp")); + ASSERT_EQ(0, CompareVersion(L"2.4.1p", L"2.4.1pp")); + + // リビジョン記号の一覧にない文字を指定した場合はalpha未満と看做す + ASSERT_TRUE(-1 >= CompareVersion(L"2.4.0x", L"2.4.0a")); + + // リビジョン記号の一覧にない文字は文字が異なっても同一と看做す + ASSERT_EQ(0, CompareVersion(L"2.4.1x", L"2.4.1y")); +} + +/*! + * @brief CompareVersionのテスト + * 戻り値が 1以上ならば: Aが新しい + */ +TEST(format, CompareVersion_NewerIsA) +{ + ASSERT_TRUE(1 <= CompareVersion(L"2.4.1.0", L"2.4.0.0")); +} + +/*! + * @brief CompareVersionのテスト + * 戻り値が -1以下ならば: Bが新しい + */ +TEST(format, CompareVersion_NewerIsB) +{ + ASSERT_TRUE(-1 >= CompareVersion(L"2.4.0.0", L"2.4.1.0")); + + ASSERT_TRUE(-1 >= CompareVersion(L"2.4.0x", L"2.4.0a")); + ASSERT_TRUE(-1 >= CompareVersion(L"2.4.0x", L"2.4.0alpha")); + + ASSERT_TRUE(-1 >= CompareVersion(L"2.4.0a", L"2.4.0b")); + ASSERT_TRUE(-1 >= CompareVersion(L"2.4.0alpha", L"2.4.0b")); + ASSERT_TRUE(-1 >= CompareVersion(L"2.4.0a", L"2.4.0beta")); + ASSERT_TRUE(-1 >= CompareVersion(L"2.4.0alpha", L"2.4.0beta")); + + ASSERT_TRUE(-1 >= CompareVersion(L"2.4.0b", L"2.4.0rc")); + ASSERT_TRUE(-1 >= CompareVersion(L"2.4.0beta", L"2.4.0rc")); + ASSERT_TRUE(-1 >= CompareVersion(L"2.4.0b", L"2.4.0RC")); + ASSERT_TRUE(-1 >= CompareVersion(L"2.4.0beta", L"2.4.0RC")); + + ASSERT_TRUE(-1 >= CompareVersion(L"2.4.0rc", L"2.4.0")); + ASSERT_TRUE(-1 >= CompareVersion(L"2.4.0RC", L"2.4.0")); + + ASSERT_TRUE(-1 >= CompareVersion(L"2.4.0", L"2.4.0p")); + ASSERT_TRUE(-1 >= CompareVersion(L"2.4.0", L"2.4.0pl")); +} From 7dda3a540165c9bff7f4ffd3b3b927d412572df9 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 18 Jan 2021 18:40:46 +0900 Subject: [PATCH 0358/1024] =?UTF-8?q?HTML=E3=83=98=E3=83=AB=E3=83=97?= =?UTF-8?q?=E3=81=AE=E3=83=93=E3=83=AB=E3=83=89=E3=81=ABpowershell?= =?UTF-8?q?=E3=82=92=E4=BD=BF=E3=81=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitattributes | 1 + build-chm.bat | 30 +------ help/CompileChm.ps1 | 203 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 207 insertions(+), 27 deletions(-) create mode 100644 help/CompileChm.ps1 diff --git a/.gitattributes b/.gitattributes index 020fa30df0..3c472d19d2 100644 --- a/.gitattributes +++ b/.gitattributes @@ -6,6 +6,7 @@ Makefile text eol=lf sakura_rc.h text eol=crlf *.rc text working-tree-encoding=utf-16le-bom eol=crlf *.rc2 text working-tree-encoding=utf-16le-bom eol=crlf +*.ps1 text working-tree-encoding=utf-16le-bom eol=crlf *.config text eol=crlf *.csproj text eol=crlf *.filters text eol=crlf diff --git a/build-chm.bat b/build-chm.bat index a4e770efcc..08bc782b9c 100644 --- a/build-chm.bat +++ b/build-chm.bat @@ -68,33 +68,9 @@ exit /b 0 :BuildChm set PROJECT_HHP=%1 set PROJECT_CHM=%2 -set PROJECT_LOG=%~dp2\Compile.log - -if exist "%PROJECT_CHM%" del /F "%PROJECT_CHM%" -if exist "%PROJECT_LOG%" del /F "%PROJECT_LOG%" - -if defined CMD_LEPROC ( - for /L %%i in (1,1,2) do ( - "%CMD_LEPROC%" %COMSPEC% /c """%CMD_HHC%"" %PROJECT_HHP%" - @rem wait to create chm - for /L %%j in (1,1,30) do ( - ping -n 2 localhost > NUL - copy "%PROJECT_LOG%" nul > NUL 2>&1 - if not errorlevel 1 exit /b 0 - ) - echo retry creating %PROJECT_CHM% - ) - echo fail to create %PROJECT_CHM% -) else ( - for /L %%i in (1,1,2) do ( - @rem hhc.exe returns 1 on success, and returns 0 on failure - "%CMD_HHC%" %PROJECT_HHP% - if errorlevel 1 exit /b 0 - echo error %PROJECT_HHP% errorlevel %errorlevel% - del /F "%PROJECT_CHM%" - ) -) -exit /b 1 + +powershell.exe -ExecutionPolicy RemoteSigned -File %~dp0help\CompileChm.ps1 %PROJECT_HHP% %PROJECT_CHM% +exit /b 0 :download_archive pwsh.exe -ExecutionPolicy RemoteSigned -File %SRC_HELP%\extract-chm-from-artifact.ps1 diff --git a/help/CompileChm.ps1 b/help/CompileChm.ps1 new file mode 100644 index 0000000000..db8a87d762 --- /dev/null +++ b/help/CompileChm.ps1 @@ -0,0 +1,203 @@ +#CompileChm.ps1 +Param( + [Parameter(Mandatory)] + [string]$HtmlHelpProject, + [Parameter(Mandatory)] + [string]$Destination +) + +# ファイル存在チェック +# Path Is Existing と読めるように作成 +function Is-Existing +{ + [CmdletBinding()] + Param( + [Parameter(Mandatory, ValueFromPipeline)] + [string]$Path + ) + + return Test-Path -Path $Path +} + +# ファイル不存在チェック +# Path Is Missing と読めるように作成 +function Is-Missing +{ + [CmdletBinding()] + Param( + [Parameter(Mandatory, ValueFromPipeline)] + [string]$Path + ) + + return -not($Path | Is-Existing) +} + +# ファイルロックチェック +# Path Is Locked と読めるように作成 +function Is-Locked +{ + [CmdletBinding()] + Param( + [Parameter(Mandatory, ValueFromPipeline)] + [string]$Path + ) + + if ($Path | Is-Missing) { + return $false + } + + try + { + $File = New-Object System.IO.FileInfo $Path + $Stream = $File.Open( + [System.IO.FileMode]::Open, + [System.IO.FileAccess]::ReadWrite, + [System.IO.FileShare]::None) + + return $false + } + catch [System.IO.IOException] + { + echo "file is locked by a process." + return $true + } + finally + { + if ($Stream -ne $null) + { + $Stream.Close() + } + } +} + +# コンパイル済みHTMLのコピー処理 +# Azure Pipelinesがたまにコピー失敗する対策として作成 +function Copy-Chm +{ + [CmdletBinding()] + Param( + [Parameter(Mandatory)] + [string]$Path, + [Parameter(Mandatory)] + [string]$Destination + ) + + if ($Path | Is-Missing) + { + return $false + } + + if ($Destination.EndsWith([System.IO.Path]::DirectorySeparatorChar)) + { + if ($Destination | Is-Missing) + { + New-Item -Path $Destination -ItemType Directory + } + + $Destination = [System.IO.Path]::Combine($Destination, [System.IO.Path]::GetFileName($Path)) + } + + if ($Path -like $Destination) + { + echo "Copy is not required." + return $true + } + + try + { + echo "`$CompiledHelp is: $Path" + echo "`$Destination is: $Destination" + Copy-Item -Path $Path -Destination $Destination + } + catch #[System.IO.IOException] + { + echo "Copy Chm error [$($PSItem.Exception)]: $($PSItem.ToString())" + return $false + } + + return $true +} + +$HtmlHelpProject = Convert-Path $HtmlHelpProject + +if (-not($HtmlHelpProject -imatch '\.hhp$')) +{ + throw [System.ArgumentException]::new("Bad filename of `$HtmlHelpProject: $HtmlHelpProject") +} + +if ([string]::IsNullOrEmpty($env:CMD_HHC) -or ($env:CMD_HHC | Is-Missing)) +{ + $env:CMD_HHC = 'C:\Program Files (x86)\HTML Help Workshop\hhc.exe' +} + +$hhc = $env:CMD_HHC -replace '(.+)', '""$1""' +$CompiledHelp = $HtmlHelpProject -ireplace '\.hhp$', '.chm' +$CompileLog = "$([System.IO.Path]::GetDirectoryName($HtmlHelpProject))\Compile.Log" + +if ($CompileLog | Is-Existing) +{ + rm $CompileLog +} + +if ($CompiledHelp | Is-Existing) +{ + rm $CompiledHelp +} + +if ($Destination | Is-Existing) +{ + rm $Destination +} + +while ($true) +{ + try + { + if ([string]::IsNullOrEmpty($env:CMD_LEPROC)) + { + #kick cmd.exe for a legacy command. + Start-Process $env:CMD_HHC $HtmlHelpProject + } + else + { + #kick LEProc.exe for a legacy command. + Start-Process $env:CMD_LEPROC "$env:COMSPEC /C `"$hhc $HtmlHelpProject`"" + } + + #wait for complete + for ($count = 0; $count -lt 30; $count++) + { + if ($CompiledHelp | Is-Missing) + { + echo "`$CompiledHelp is missing: $CompiledHelp" + } + elseif ($CompiledHelp | Is-Locked) + { + echo "`$CompiledHelp is still locked: $CompiledHelp" + } + elseif ($CompileLog | Is-Missing) + { + echo "`$CompileLog is missing: $CompileLog" + } + elseif ($CompileLog | Is-Locked) + { + echo "`$CompileLog is still locked: $CompileLog" + } + elseif (Copy-Chm $CompiledHelp $Destination) + { + return + } + else + { + echo "Copy `$CompiledHelp has failed" + break + } + + Start-Sleep -Second 1 + } + } + catch [System.AccessViolationException] + { + echo "LEProc.exe has crashed" + } +} From 5cbc57c4ebadaceed3b6209f653a45b69b0b8f1a Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 17 Jan 2021 21:10:39 +0900 Subject: [PATCH 0359/1024] =?UTF-8?q?appveyor=E3=81=AE=E7=96=91=E4=BC=BC?= =?UTF-8?q?=E3=83=91=E3=82=A4=E3=83=97=E3=83=A9=E3=82=A4=E3=83=B3=E3=82=92?= =?UTF-8?q?=E8=BE=9E=E3=82=81=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- appveyor.yml | 34 ++------------- build-chm.bat | 12 ------ help/extract-chm-from-artifact.ps1 | 67 ------------------------------ 3 files changed, 3 insertions(+), 110 deletions(-) delete mode 100644 help/extract-chm-from-artifact.ps1 diff --git a/appveyor.yml b/appveyor.yml index 2ba1a88f5c..95bb939f0a 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -6,7 +6,6 @@ configuration: - Debug platform: - - BuildChm - Win32 - x64 @@ -25,46 +24,19 @@ skip_commits: install: - cmd: | - pip install openpyxl --user + cinst locale-emulator -y + cup vswhere + py.exe -m pip install openpyxl --user # to run our custom scripts instead of automatic MSBuild build_script: - - cmd: cup vswhere - cmd: build-all.bat %PLATFORM% %CONFIGURATION% # to run our custom scripts instead of automatic tests test_script: - cmd: tests\run-tests.bat %PLATFORM% %CONFIGURATION% -matrix: - exclude: - - platform: BuildChm - configuration: Debug - for: -- - matrix: - only: - - platform: BuildChm - configuration: Release - - install: - - ps: Set-WinSystemLocale ja-JP - - ps: Start-Sleep -s 10 - - ps: Restart-Computer - - ps: Start-Sleep -s 10 - - build_script: - - cmd: cup vswhere - - cmd: build-chm.bat - - cmd: help\make-artifacts.bat - - test_script: - - cmd: echo This Platform has no tests. - - artifacts: - - path: 'sakura-*-Chm.zip*' - # run only for Release - matrix: diff --git a/build-chm.bat b/build-chm.bat index 08bc782b9c..4e1c7e303d 100644 --- a/build-chm.bat +++ b/build-chm.bat @@ -32,13 +32,6 @@ set CHM_MACRO=%TMP_HELP%\macro\macro.chm set CHM_PLUGIN=%TMP_HELP%\plugin\plugin.chm set CHM_SAKURA=%TMP_HELP%\sakura\sakura.chm -if defined APPVEYOR ( - if "%PLATFORM%" neq "BuildChm" ( - goto :download_archive - exit /b 0 - ) -) - set "TOOL_SLN_FILE=%~dp0tools\ChmSourceConverter\ChmSourceConverter.sln" @echo "%CMD_MSBUILD%" %TOOL_SLN_FILE% "/p:Platform=Any CPU" /p:Configuration=Release /t:"Build" /v:q "%CMD_MSBUILD%" %TOOL_SLN_FILE% "/p:Platform=Any CPU" /p:Configuration=Release /t:"Build" /v:q @@ -71,8 +64,3 @@ set PROJECT_CHM=%2 powershell.exe -ExecutionPolicy RemoteSigned -File %~dp0help\CompileChm.ps1 %PROJECT_HHP% %PROJECT_CHM% exit /b 0 - -:download_archive -pwsh.exe -ExecutionPolicy RemoteSigned -File %SRC_HELP%\extract-chm-from-artifact.ps1 -if errorlevel 1 exit /b 1 -exit /b 0 diff --git a/help/extract-chm-from-artifact.ps1 b/help/extract-chm-from-artifact.ps1 deleted file mode 100644 index 5efd96cc94..0000000000 --- a/help/extract-chm-from-artifact.ps1 +++ /dev/null @@ -1,67 +0,0 @@ -# this script was designed to run only for appveyor. -# https://www.appveyor.com/docs/api/samples/download-artifacts-ps/ -# -$apiUrl = 'https://ci.appveyor.com/api' -$accountName = $env:APPVEYOR_ACCOUNT_NAME -$projectSlug = $env:APPVEYOR_PROJECT_SLUG -$buildId = $env:APPVEYOR_BUILD_ID - -# appveyor REST API requires Bearer token. -# https://www.appveyor.com/docs/api/#Authentication -# Because the Bearer token can be empty, we won't define the variable named `READONLY_TOKEN`. -# To be ease of testing, you can define it from the outside of this script. -$token = $env:READONLY_TOKEN -$headers = @{ - "Authorization" = "Bearer $token" - "Content-type" = "application/json" -} - -try { - # get project with current build details - Write-Output "checking $env:APPVEYOR_URL/projects/$accountName/$projectSlug/builds/$buildId" - $project = Invoke-RestMethod -Method Get -Uri "$apiUrl/projects/$accountName/$projectSlug/builds/$buildId" -Headers $headers ` - -MaximumRetryCount 3 -RetryIntervalSec 20 -ErrorAction Stop - - $chmJob = $project.build.jobs | Where-Object name -eq 'Configuration: Release; Platform: BuildChm' - $jobId = $chmJob.jobId - - # get job artifacts (just to see what we've got) - $artifacts = Invoke-RestMethod -Method Get -Uri "$apiUrl/buildjobs/$jobId/artifacts" -Headers $headers ` - -MaximumRetryCount 3 -RetryIntervalSec 20 -ErrorAction Stop - - # here we just take the first artifact, but you could specify its file name - # $artifactFileName = 'sakura-Chm.zip' - $artifactFileName = $artifacts[0].fileName - if ($artifactFileName -notmatch '^sakura-.*-Chm.zip$') { - throw "unexpected file name $artifactFileName." - } - - # artifact will be downloaded as - $localArtifactPath = "$PSScriptRoot\$artifactFileName" - - # download artifact - # -OutFile - is local file name where artifact will be downloaded into - # the Headers in this call should only contain the bearer token, and no Content-type, otherwise it will fail! - Invoke-RestMethod -Method Get -Uri "$apiUrl/buildjobs/$jobId/artifacts/$artifactFileName" ` - -OutFile $localArtifactPath -Headers @{ "Authorization" = "Bearer $token" } ` - -MaximumRetryCount 3 -RetryIntervalSec 20 -ErrorAction Stop - - $unzipErrorFile = "$PSScriptRoot\unzip.err" - Start-Process -FilePath $env:CMD_7Z -ArgumentList "x -y $localArtifactPath" ` - -NoNewWindow ` - -WorkingDirectory $PSScriptRoot ` - -RedirectStandardError $unzipErrorFile ` - -Wait - - $unzipResult = Get-Content -Path $unzipErrorFile -TotalCount 3 - if ($unzipResult -is [array]) { - throw "$unzipResult" - } - - Remove-Item $unzipErrorFile - -} catch { - Write-Output 'caught an error.' - Write-Output $error[0] - exit 1 -} From 1fc1294cbd8e1871847f5872da5ed9b456190b11 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 2 Dec 2020 01:22:26 +0900 Subject: [PATCH 0360/1024] Division by zero --- sakura_core/cmd/CViewCommander_Window.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sakura_core/cmd/CViewCommander_Window.cpp b/sakura_core/cmd/CViewCommander_Window.cpp index db3b6dca80..809e1293a5 100644 --- a/sakura_core/cmd/CViewCommander_Window.cpp +++ b/sakura_core/cmd/CViewCommander_Window.cpp @@ -296,6 +296,11 @@ void CViewCommander::Command_TILE_V( void ) // To Here Jul. 28, 2002 genta count++; } + if( count == 0 ){ + delete[] phwndArr; + delete[] pEditNodeArr; + return; + } int height = (rcDesktop.bottom - rcDesktop.top ) / count; for(i = 0; i < count; ++i ){ // Jul. 21, 2002 genta From bb3be3d10db5fde8162f106eb27fea660ba380bf Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 2 Dec 2020 01:23:26 +0900 Subject: [PATCH 0361/1024] Division by zero --- sakura_core/cmd/CViewCommander_Window.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sakura_core/cmd/CViewCommander_Window.cpp b/sakura_core/cmd/CViewCommander_Window.cpp index 809e1293a5..c21d446ad9 100644 --- a/sakura_core/cmd/CViewCommander_Window.cpp +++ b/sakura_core/cmd/CViewCommander_Window.cpp @@ -355,6 +355,11 @@ void CViewCommander::Command_TILE_H( void ) // To Here Jul. 28, 2002 genta count++; } + if (count == 0) { + delete[] phwndArr; + delete[] pEditNodeArr; + return; + } int width = (rcDesktop.right - rcDesktop.left ) / count; for(i = 0; i < count; ++i ){ // Jul. 21, 2002 genta From af0eca6486ca3ede50229af746b8bb9117e77a30 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 24 Jan 2021 11:38:40 +0900 Subject: [PATCH 0362/1024] =?UTF-8?q?exe=E3=83=95=E3=82=A1=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E3=83=91=E3=82=B9=E3=82=92=E5=8F=96=E5=BE=97=E3=81=99?= =?UTF-8?q?=E3=82=8B=E9=96=A2=E6=95=B0=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/env/CSakuraEnvironment.cpp | 6 +- sakura_core/util/file.cpp | 42 +++++++++---- sakura_core/util/file.h | 5 ++ tests/unittests/test-file.cpp | 83 ++++++++++++++++++++++++++ 4 files changed, 121 insertions(+), 15 deletions(-) diff --git a/sakura_core/env/CSakuraEnvironment.cpp b/sakura_core/env/CSakuraEnvironment.cpp index 26d7e1c8a9..caa189687d 100644 --- a/sakura_core/env/CSakuraEnvironment.cpp +++ b/sakura_core/env/CSakuraEnvironment.cpp @@ -467,10 +467,8 @@ void CSakuraEnvironment::ExpandParameter(const wchar_t* pszSource, wchar_t* pszB case L'S': // Sep. 15, 2005 FILE // サクラエディタのフルパス { - SFilePath szPath; - - ::GetModuleFileName( NULL, szPath, _countof2(szPath) ); - q = wcs_pushW( q, q_max - q, szPath ); + auto exePath = GetExeFileName(); + q = wcs_pushW( q, q_max - q, exePath.c_str() ); ++p; } break; diff --git a/sakura_core/util/file.cpp b/sakura_core/util/file.cpp index 26618445d2..1445bec0ea 100644 --- a/sakura_core/util/file.cpp +++ b/sakura_core/util/file.cpp @@ -466,6 +466,29 @@ int CalcDirectoryDepth( return depth; } +/*! + @brief exeファイルパスを取得する + */ +std::filesystem::path GetExeFileName() +{ + // メモリ確保 + constexpr const size_t cchPath = _MAX_PATH - 1; + std::wstring path(cchPath, L'\0'); + + // sakura.exe のパスを取得して返却 + ::GetModuleFileName(nullptr, path.data(), (DWORD)path.capacity()); + return path.data(); +} + +/*! + @brief exeがあるフォルダのフルパス、またはexe基準のファイルパス(フルパス)を返す. +*/ +std::filesystem::path GetExePath(const std::wstring_view& filename) +{ + // sakura.exe のパスのファイル名を指定された文字列で置換 + return GetExeFileName().replace_filename(filename.data()); +} + /*! @brief exeファイルのあるディレクトリ,または指定されたファイル名のフルパスを返す. @@ -481,18 +504,15 @@ void GetExedir( { if( pDir == NULL ) return; - - WCHAR szPath[_MAX_PATH]; - // sakura.exe のパスを取得 - ::GetModuleFileName( NULL, szPath, _countof(szPath) ); - if( szFile == NULL ){ - SplitPath_FolderAndFile( szPath, pDir, NULL ); - } - else { - WCHAR szDir[_MAX_PATH]; - SplitPath_FolderAndFile( szPath, szDir, NULL ); - auto_snprintf_s( pDir, _MAX_PATH, L"%s\\%s", szDir, szFile ); + + std::wstring_view filename(L""); + if (szFile != nullptr) { + filename = szFile; } + + // exeフォルダのフルパス、またはexe基準のファイルパスを取得 + auto path = GetExePath(filename); + ::wcsncpy_s(pDir, _MAX_PATH - 1, path.c_str(), _TRUNCATE); } /*! diff --git a/sakura_core/util/file.h b/sakura_core/util/file.h index afc93c08a0..98c8a19a84 100644 --- a/sakura_core/util/file.h +++ b/sakura_core/util/file.h @@ -28,6 +28,8 @@ #pragma once #include +#include +#include bool fexist(LPCWSTR pszPath); //!< ファイルまたはディレクトリが存在すればtrue @@ -58,6 +60,9 @@ BOOL CheckEXT( const WCHAR* pszPath, const WCHAR* pszExt ); /* 拡張子を const WCHAR* GetFileTitlePointer(const WCHAR* pszPath); //!< ファイルフルパス内のファイル名を指すポインタを取得。2007.09.20 kobake 作成 bool _IS_REL_PATH(const WCHAR* path); //!< 相対パスか判定する。2003.06.23 Moca +std::filesystem::path GetExeFileName(); +std::filesystem::path GetExePath(const std::wstring_view& filename); + //※サクラ依存 void GetExedir( LPWSTR pDir, LPCWSTR szFile = NULL ); void GetInidir( LPWSTR pDir, LPCWSTR szFile = NULL ); // 2007.05.19 ryoji diff --git a/tests/unittests/test-file.cpp b/tests/unittests/test-file.cpp index d5039ebe5e..b283285b41 100644 --- a/tests/unittests/test-file.cpp +++ b/tests/unittests/test-file.cpp @@ -58,3 +58,86 @@ TEST( file, IsInvalidFilenameChars ) EXPECT_TRUE(IsInvalidFilenameChars(L"test>.txt")); EXPECT_TRUE(IsInvalidFilenameChars(L"test|.txt")); } + +/*! + * @brief exeファイルパスの取得 + */ +TEST(file, GetExeFileName) +{ + // 標準的なコードでexeファイルのパスを取得 + std::wstring path(_MAX_PATH, L'\0'); + ::GetModuleFileName(nullptr, path.data(), path.capacity()); + + // 関数戻り値が、標準的なコードで取得した結果と一致すること + auto exePath = GetExeFileName(); + ASSERT_STREQ(path.data(), exePath.c_str()); +} + +/*! + * @brief exeフォルダのフルパスの取得 + */ +TEST(file, GetExePath_Directory) +{ + // テスト対象関数呼び出し + auto exeDir = GetExePath(L""); + + // 戻り値はファイル名を含まない + ASSERT_FALSE(exeDir.has_filename()); + + // パスコンポーネントの最終要素は空になる(\で終わっている) + auto lastComponent = *(--exeDir.end()); + ASSERT_STREQ(L"", lastComponent.c_str()); + + // 戻り値はexeファイルパスからファイル名を取り除いたものになる + auto exePath = GetExeFileName(); + ASSERT_STREQ(exePath.remove_filename().c_str(), exeDir.c_str()); +} + +/*! + * @brief exe基準のファイルパス(フルパス)の取得 + */ +TEST(file, GetExePath_FileName) +{ + // テストに使うファイル名(空でなければなんでもいい) + constexpr const auto filename = L"README.txt"; + + // テスト対象関数呼び出し + auto exeBasePath = GetExePath(filename); + + // 戻り値はファイル名を含む + ASSERT_TRUE(exeBasePath.has_filename()); + + // 戻り値のファイル名は指定したものになっている + ASSERT_STREQ(filename, exeBasePath.filename().c_str()); + + // 戻り値の親フォルダはexeファイルパスの親フォルダと等しい + auto exePath = GetExeFileName(); + ASSERT_STREQ(exePath.parent_path().c_str(), exeBasePath.parent_path().c_str()); +} + +/*! + * @brief 既存コード互換用に残しておく関数のリグレッション + */ +TEST(file, Deprecated_GetExedir) +{ + // テストに使うファイル名(空でなければなんでもいい) + constexpr const auto filename = L"README.txt"; + + // 比較用関数呼び出し + auto exeBasePath = GetExePath(filename); + + // 戻り値取得用のバッファ + WCHAR szBuf[_MAX_PATH]; + + // exeフォルダの取得 + GetExedir(szBuf); + ::wcscat_s(szBuf, filename); + ASSERT_STREQ(exeBasePath.c_str(), szBuf); + + // 一旦クリアする + ::wcscpy_s(szBuf, L""); + + // exe基準ファイルパスの取得 + GetExedir(szBuf, filename); + ASSERT_STREQ(exeBasePath.c_str(), szBuf); +} From b1103870e8eef70260805bd2c862d6e455888964 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Thu, 21 Jan 2021 19:37:01 +0900 Subject: [PATCH 0363/1024] =?UTF-8?q?Revert=20"CShareData::IsPrivateSettin?= =?UTF-8?q?gs=E5=BB=83=E6=AD=A2"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 673818249f5b77eec2febf517a4eb7c92d2b02a5. --- sakura_core/env/CShareData.cpp | 5 +++++ sakura_core/env/CShareData.h | 2 ++ sakura_core/util/file.cpp | 2 +- sakura_core/util/shell.cpp | 2 +- 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/sakura_core/env/CShareData.cpp b/sakura_core/env/CShareData.cpp index 7f540a43b1..ae37597b48 100644 --- a/sakura_core/env/CShareData.cpp +++ b/sakura_core/env/CShareData.cpp @@ -1092,6 +1092,11 @@ bool CShareData::OpenDebugWindow( HWND hwnd, bool bAllwaysActive ) return ret; } +/* iniファイルの保存先がユーザ別設定フォルダかどうか */ // 2007.05.25 ryoji +BOOL CShareData::IsPrivateSettings( void ){ + return CFileNameManager::getInstance()->IsPrivateSettings(); +} + /* CShareData::CheckMRUandOPENFOLDERList MRUとOPENFOLDERリストの存在チェックなど diff --git a/sakura_core/env/CShareData.h b/sakura_core/env/CShareData.h index 7ceb1e96f0..c67be76bb7 100644 --- a/sakura_core/env/CShareData.h +++ b/sakura_core/env/CShareData.h @@ -79,6 +79,8 @@ class CShareData : public TSingleton void SetTraceOutSource( HWND hwnd ){ m_hwndTraceOutSource = hwnd; } /* TraceOut起動元ウィンドウの設定 */ bool OpenDebugWindow( HWND hwnd, bool bAllwaysActive ); //!< デバッグウィンドウを開く + BOOL IsPrivateSettings( void ); + //マクロ関連 int GetMacroFilename( int idx, WCHAR* pszPath, int nBufLen ); // idxで指定したマクロファイル名(フルパス)を取得する // Jun. 14, 2003 genta 引数追加.書式変更 bool BeReloadWhenExecuteMacro( int idx ); // idxで指定したマクロは、実行するたびにファイルを読み込む設定か? diff --git a/sakura_core/util/file.cpp b/sakura_core/util/file.cpp index 1445bec0ea..bcc807c4bd 100644 --- a/sakura_core/util/file.cpp +++ b/sakura_core/util/file.cpp @@ -574,7 +574,7 @@ void GetInidirOrExedir( } // EXE基準のフルパスが実在すればそのパスを返す - if( CFileNameManager::getInstance()->IsPrivateSettings() ){ // INIとEXEでパスが異なる場合 + if( CShareData::getInstance()->IsPrivateSettings() ){ // INIとEXEでパスが異なる場合 GetExedir( szExedir, szFile ); if( fexist(szExedir) ){ ::lstrcpy( pDir, szExedir ); diff --git a/sakura_core/util/shell.cpp b/sakura_core/util/shell.cpp index ae43c60c78..6435f8b832 100644 --- a/sakura_core/util/shell.cpp +++ b/sakura_core/util/shell.cpp @@ -262,7 +262,7 @@ static int CALLBACK PropSheetProc( HWND hwndDlg, UINT uMsg, LPARAM lParam ) // システムフォント設定は言語設定に関係なく実施(force=TRUE) HFONT hFont = UpdateDialogFont( hwndDlg, TRUE ); - if( CFileNameManager::getInstance()->IsPrivateSettings() ){ + if( CShareData::getInstance()->IsPrivateSettings() ){ // 個人設定フォルダを使用するときは「設定フォルダ」ボタンを追加する s_pOldPropSheetWndProc = (WNDPROC)::SetWindowLongPtr( hwndDlg, GWLP_WNDPROC, (LONG_PTR)PropSheetWndProc ); HINSTANCE hInstance = (HINSTANCE)::GetModuleHandle( NULL ); From 72f5926b7736b0f85b1056d57d6ad69552d356d6 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Thu, 21 Jan 2021 19:38:47 +0900 Subject: [PATCH 0364/1024] =?UTF-8?q?Revert=20"CFileNameManager::IsPrivate?= =?UTF-8?q?Settings()=E8=BF=BD=E5=8A=A0"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit d599793940403c6dc3ca7a4f8fb21e36d6877077. --- sakura_core/env/CFileNameManager.cpp | 10 ++-------- sakura_core/env/CFileNameManager.h | 1 - sakura_core/env/CShareData.cpp | 2 +- 3 files changed, 3 insertions(+), 10 deletions(-) diff --git a/sakura_core/env/CFileNameManager.cpp b/sakura_core/env/CFileNameManager.cpp index ab94466641..1ead10e4c7 100644 --- a/sakura_core/env/CFileNameManager.cpp +++ b/sakura_core/env/CFileNameManager.cpp @@ -551,13 +551,6 @@ void CFileNameManager::GetIniFileNameDirect( LPWSTR pszPrivateIniFile, LPWSTR ps } } -/* iniファイルの保存先がユーザ別設定フォルダかどうか */ -bool CFileNameManager::IsPrivateSettings() const -{ - const auto &iniFolder = m_pShareData->m_sFileNameManagement.m_IniFolder; - return iniFolder.m_szPrivateIniFile[0] != L'\0'; -} - /** iniファイル名の取得 @@ -571,7 +564,8 @@ bool CFileNameManager::IsPrivateSettings() const void CFileNameManager::GetIniFileName( LPWSTR pszIniFileName ) const { const auto &iniFolder = m_pShareData->m_sFileNameManagement.m_IniFolder; + const bool bPrivate = iniFolder.m_szPrivateIniFile[0] != L'\0'; const auto& szPrivateIniFile = iniFolder.m_szPrivateIniFile; const auto& szIniFile = iniFolder.m_szIniFile; - ::wcscpy_s( pszIniFileName, _MAX_PATH, IsPrivateSettings() ? szPrivateIniFile : szIniFile ); + ::wcscpy_s( pszIniFileName, _MAX_PATH, bPrivate ? szPrivateIniFile : szIniFile ); } diff --git a/sakura_core/env/CFileNameManager.h b/sakura_core/env/CFileNameManager.h index 46bb612549..305d749281 100644 --- a/sakura_core/env/CFileNameManager.h +++ b/sakura_core/env/CFileNameManager.h @@ -87,7 +87,6 @@ class CFileNameManager : public TSingleton{ static WCHAR GetAccessKeyByIndex(int index, bool bZeroOrigin); static void GetIniFileNameDirect( LPWSTR pszPrivateIniFile, LPWSTR pszIniFile, LPCWSTR pszProfName ); /* 構成設定ファイルからiniファイル名を取得する */ // 2007.09.04 ryoji - bool IsPrivateSettings() const; void GetIniFileName( LPWSTR pszIniFileName ) const; //!< iniファイル名の取得 private: diff --git a/sakura_core/env/CShareData.cpp b/sakura_core/env/CShareData.cpp index ae37597b48..7e81495eb6 100644 --- a/sakura_core/env/CShareData.cpp +++ b/sakura_core/env/CShareData.cpp @@ -1094,7 +1094,7 @@ bool CShareData::OpenDebugWindow( HWND hwnd, bool bAllwaysActive ) /* iniファイルの保存先がユーザ別設定フォルダかどうか */ // 2007.05.25 ryoji BOOL CShareData::IsPrivateSettings( void ){ - return CFileNameManager::getInstance()->IsPrivateSettings(); + return m_pShareData->m_sFileNameManagement.m_IniFolder.m_szPrivateIniFile[0] != L'\0'; } /* From 1f1b98c3488cf88244b850f61f0fd658ca197b93 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 24 Jan 2021 11:39:16 +0900 Subject: [PATCH 0365/1024] =?UTF-8?q?ini=E3=83=95=E3=82=A1=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E3=83=91=E3=82=B9=E3=81=AE=E5=8F=96=E5=BE=97=E9=96=A2?= =?UTF-8?q?=E6=95=B0=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/_main/CControlProcess.cpp | 72 ++++ sakura_core/_main/CControlProcess.h | 7 + sakura_core/_main/CProcess.cpp | 12 + sakura_core/_main/CProcess.h | 8 + sakura_core/config/system_constants.h | 4 +- sakura_core/dlg/CDlgProfileMgr.cpp | 56 +-- sakura_core/dlg/CDlgProfileMgr.h | 7 + sakura_core/env/CFileNameManager.cpp | 90 ----- sakura_core/env/CFileNameManager.h | 14 - sakura_core/env/CSakuraEnvironment.cpp | 5 +- sakura_core/env/CShareData.cpp | 37 +- sakura_core/env/CShareData.h | 2 +- sakura_core/env/CShareData_IO.cpp | 21 +- sakura_core/env/DLLSHAREDATA.h | 4 +- sakura_core/util/file.cpp | 55 ++- sakura_core/util/file.h | 2 + tests/unittests/test-cdlgprofilemgr.cpp | 146 ++++++- tests/unittests/test-csakuraenvironment.cpp | 63 +++ tests/unittests/test-file.cpp | 401 ++++++++++++++++++++ tests/unittests/test-winmain.cpp | 18 +- tests/unittests/tests1.vcxproj | 1 + tests/unittests/tests1.vcxproj.filters | 4 + 22 files changed, 831 insertions(+), 198 deletions(-) create mode 100644 tests/unittests/test-csakuraenvironment.cpp diff --git a/sakura_core/_main/CControlProcess.cpp b/sakura_core/_main/CControlProcess.cpp index 0e96fd3d6f..b746ebac90 100644 --- a/sakura_core/_main/CControlProcess.cpp +++ b/sakura_core/_main/CControlProcess.cpp @@ -25,6 +25,78 @@ //------------------------------------------------- +/*! + @brief iniファイルパスを取得する + */ +std::filesystem::path CControlProcess::GetIniFileName() const +{ + if (GetShareDataPtr()->IsPrivateSettings()) { + return CProcess::GetIniFileName(); + } + + // exe基準のiniファイルパスを得る + auto iniPath = GetExeFileName().replace_extension(L".ini"); + + // マルチユーザ用のiniファイルパス + // exeと同じフォルダに置かれたマルチユーザ構成設定ファイル(sakura.exe.ini)の内容 + // に従ってマルチユーザ用のiniファイルパスを決める + auto exeIniPath = GetExeFileName().concat(L".ini"); + if (bool isMultiUserSeggings = ::GetPrivateProfileInt(L"Settings", L"MultiUser", 0, exeIniPath.c_str()); isMultiUserSeggings) { + return GetPrivateIniFileName(exeIniPath, iniPath.filename()); + } + + const auto filename = iniPath.filename(); + iniPath.remove_filename(); + + if (const auto* pCommandLine = CCommandLine::getInstance(); pCommandLine->IsSetProfile() && *pCommandLine->GetProfileName()) { + iniPath.append(pCommandLine->GetProfileName()); + } + + return iniPath.append(filename.c_str()); +} + +/*! + @brief マルチユーザ用のiniファイルパスを取得する + */ +std::filesystem::path CControlProcess::GetPrivateIniFileName(const std::wstring& exeIniPath, const std::wstring& filename) const +{ + KNOWNFOLDERID refFolderId; + switch (int nFolder = ::GetPrivateProfileInt(L"Settings", L"UserRootFolder", 0, exeIniPath.c_str())) { + case 1: + refFolderId = FOLDERID_Profile; // ユーザのルートフォルダ + break; + case 2: + refFolderId = FOLDERID_Documents; // ユーザのドキュメントフォルダ + break; + case 3: + refFolderId = FOLDERID_Desktop; // ユーザのデスクトップフォルダ + break; + default: + refFolderId = FOLDERID_RoamingAppData; // ユーザのアプリケーションデータフォルダ + break; + } + + PWSTR pFolderPath = nullptr; + ::SHGetKnownFolderPath(refFolderId, KF_FLAG_DEFAULT, nullptr, &pFolderPath); + std::filesystem::path privateIniPath(pFolderPath); + ::CoTaskMemFree(pFolderPath); + + std::wstring subFolder(_MAX_DIR, L'\0'); + ::GetPrivateProfileString(L"Settings", L"UserSubFolder", L"sakura", subFolder.data(), (DWORD)subFolder.capacity(), exeIniPath.c_str()); + subFolder.assign(subFolder.data()); + if (subFolder.empty()) + { + subFolder = L"sakura"; + } + privateIniPath.append(subFolder); + + if (const auto* pCommandLine = CCommandLine::getInstance(); pCommandLine->IsSetProfile() && *pCommandLine->GetProfileName()) { + privateIniPath.append(pCommandLine->GetProfileName()); + } + + return privateIniPath.append(filename.c_str()); +} + /*! @brief コントロールプロセスを初期化する diff --git a/sakura_core/_main/CControlProcess.h b/sakura_core/_main/CControlProcess.h index 433a7ea1a5..c7927d1e62 100644 --- a/sakura_core/_main/CControlProcess.h +++ b/sakura_core/_main/CControlProcess.h @@ -16,6 +16,8 @@ #define SAKURA_CCONTROLPROCESS_AFB90808_4287_4A11_B7FB_9CD21CF8BFD6_H_ #pragma once +#include + #include "global.h" #include "CProcess.h" @@ -43,6 +45,9 @@ class CControlProcess final : public CProcess { {} ~CControlProcess(); + + std::filesystem::path GetIniFileName() const override; + protected: CControlProcess(); bool InitializeProcess() override; @@ -50,6 +55,8 @@ class CControlProcess final : public CProcess { void OnExitProcess() override; private: + std::filesystem::path GetPrivateIniFileName(const std::wstring& exeIniPath, const std::wstring& filename) const; + HANDLE m_hMutex; //!< アプリケーション実行検出用ミューテックス HANDLE m_hMutexCP; //!< コントロールプロセスミューテックス HANDLE m_hEventCPInitialized; //!< コントロールプロセス初期化完了イベント 2006.04.10 ryoji diff --git a/sakura_core/_main/CProcess.cpp b/sakura_core/_main/CProcess.cpp index 2e9af9e9e8..40dda84d59 100644 --- a/sakura_core/_main/CProcess.cpp +++ b/sakura_core/_main/CProcess.cpp @@ -37,6 +37,18 @@ CProcess::CProcess( m_pcShareData = CShareData::getInstance(); } +/*! + @brief iniファイルパスを取得する + */ +std::filesystem::path CProcess::GetIniFileName() const +{ + if (m_pcShareData->IsPrivateSettings()) { + const DLLSHAREDATA *pShareData = &GetDllShareData(); + return pShareData->m_szPrivateIniFile.c_str(); + } + return GetExeFileName().replace_extension(L".ini"); +} + /*! @brief プロセスを初期化する diff --git a/sakura_core/_main/CProcess.h b/sakura_core/_main/CProcess.h index 41b474a6e9..b59f95c47b 100644 --- a/sakura_core/_main/CProcess.h +++ b/sakura_core/_main/CProcess.h @@ -16,7 +16,10 @@ #define SAKURA_CPROCESS_FECC5450_9096_4EAD_A6DA_C8B12C3A31B5_H_ #pragma once +#include + #include "global.h" +#include "util/design_template.h" #include "env/CShareData.h" #include "env/DLLSHAREDATA.h" @@ -36,6 +39,9 @@ class CProcess : public TSingleInstance { bool Run(); virtual ~CProcess(){} virtual void RefreshString(); + + virtual std::filesystem::path GetIniFileName() const; + protected: CProcess(); virtual bool InitializeProcess(); @@ -52,6 +58,8 @@ class CProcess : public TSingleInstance { CShareData& GetShareData() { return *m_pcShareData; } HWND GetMainWindow() const{ return m_hWnd; } + [[nodiscard]] const CShareData* GetShareDataPtr() const { return m_pcShareData; } + private: HINSTANCE m_hInstance; HWND m_hWnd; diff --git a/sakura_core/config/system_constants.h b/sakura_core/config/system_constants.h index 6d06f142c2..42556e201f 100644 --- a/sakura_core/config/system_constants.h +++ b/sakura_core/config/system_constants.h @@ -547,14 +547,14 @@ MYDEVMODE の未使用メンバを削除した為、PRINTSETTING や DLLSHAREDATA のメモリレイアウトが変更 Version 177: - WriteQuit廃止に伴い未使用となった IniFolder のメンバを削除した為、DLLSHAREDATA のメモリレイアウトが変更 + WriteQuit廃止に伴い未使用となった IniFolder のメンバを削除した為、DLLSHAREDATA のメモリレイアウトを変更 -- 統合されたので元に戻す(1000~1023が使用済み) 2008.11.16 nasukoji -- Version 1000: -- バージョン1000以降を本家統合までの間、使わせてください。かなり頻繁に構成が変更されると思われるので。by kobake 2008.03.02 */ -#define N_SHAREDATA_VERSION 177 +constexpr unsigned N_SHAREDATA_VERSION = 177; #define STR_SHAREDATA_VERSION NUM_TO_STR(N_SHAREDATA_VERSION) #define GSTR_SHAREDATA (L"SakuraShareData" _T(CON_SKR_MACHINE_SUFFIX_) _T(_CODE_SUFFIX_) _T(_DEBUG_SUFFIX_) _T(STR_SHAREDATA_VERSION)) diff --git a/sakura_core/dlg/CDlgProfileMgr.cpp b/sakura_core/dlg/CDlgProfileMgr.cpp index c339a0be4c..ba26c244d7 100644 --- a/sakura_core/dlg/CDlgProfileMgr.cpp +++ b/sakura_core/dlg/CDlgProfileMgr.cpp @@ -93,36 +93,38 @@ int CDlgProfileMgr::DoModal( HINSTANCE hInstance, HWND hwndParent, LPARAM lParam return (int)CDialog::DoModal( hInstance, hwndParent, IDD_PROFILEMGR, lParam ); } -static std::wstring GetProfileMgrFileName(LPCWSTR profName = NULL) +/*! + @brief プロファイルマネージャ設定ファイルパスを取得する + */ +std::filesystem::path GetProfileMgrFileName() { - static WCHAR szPath[_MAX_PATH]; - static WCHAR szPath2[_MAX_PATH]; - static WCHAR* pszPath; - static bool bSet = false; - if( bSet == false ){ - pszPath = szPath; - CFileNameManager::GetIniFileNameDirect( szPath, szPath2, L"" ); - if( szPath[0] == L'\0' ){ - pszPath = szPath2; - } - bSet = true; - } - - WCHAR szDir[_MAX_PATH]; - SplitPath_FolderAndFile( pszPath, szDir, NULL ); - - WCHAR szIniFile[_MAX_PATH]; - if( profName == NULL ){ - WCHAR szExePath[_MAX_PATH]; - WCHAR szFname[_MAX_FNAME]; - ::GetModuleFileName( NULL, szExePath, _countof(szExePath) ); - _wsplitpath( szExePath, NULL, NULL, szFname, NULL ); - auto_snprintf_s( szIniFile, _MAX_PATH - 1, L"%s\\%s_prof%s", szDir, szFname, L".ini" ); - }else{ - auto_snprintf_s( szIniFile, _MAX_PATH - 1, L"%s\\%s", szDir, profName ); + auto privateIniPath = GetIniFileName(); + if (const auto* pCommandLine = CCommandLine::getInstance(); pCommandLine->IsSetProfile() && *pCommandLine->GetProfileName()) { + auto filename = privateIniPath.filename(); + privateIniPath = privateIniPath.parent_path().parent_path().append(filename.c_str()); + } + return privateIniPath.replace_extension().concat(L"_prof.ini"); +} + +/*! + 指定したプロファイルの設定保存先ディレクトリを取得する + */ +std::filesystem::path GetProfileDirectory(const std::wstring& name) +{ + auto privateIniDir = GetIniFileName().parent_path(); + if (const auto* pCommandLine = CCommandLine::getInstance(); pCommandLine->IsSetProfile() && *pCommandLine->GetProfileName()) { + privateIniDir = privateIniDir.parent_path(); } + return privateIniDir.append(name).append(L"a.txt").remove_filename(); +} - return szIniFile; +/*! + 既存コード互換用関数 + 指定したプロファイルの設定保存先ディレクトリを返す。 + */ +[[nodiscard]] std::wstring GetProfileMgrFileName(const std::wstring_view& name) +{ + return GetProfileDirectory(name.data()); } /*! ダイアログデータの設定 */ diff --git a/sakura_core/dlg/CDlgProfileMgr.h b/sakura_core/dlg/CDlgProfileMgr.h index 31f512af14..847da7295f 100644 --- a/sakura_core/dlg/CDlgProfileMgr.h +++ b/sakura_core/dlg/CDlgProfileMgr.h @@ -34,6 +34,7 @@ #include "dlg/CDialog.h" #include "_main/CCommandLine.h" #include +#include #include struct SProfileSettings @@ -82,4 +83,10 @@ class CDlgProfileMgr final : public CDialog static bool ReadProfSettings(SProfileSettings& settings); static bool WriteProfSettings(SProfileSettings& settings); }; + +std::filesystem::path GetProfileMgrFileName(); +std::filesystem::path GetProfileDirectory(const std::wstring& name); + +[[nodiscard]] std::wstring GetProfileMgrFileName(const std::wstring_view& name); + #endif /* SAKURA_CDLGPROFILEMGR_E77A329C_4D06_436A_84E3_01B4D8F34A9A_H_ */ diff --git a/sakura_core/env/CFileNameManager.cpp b/sakura_core/env/CFileNameManager.cpp index 1ead10e4c7..c3366c97d2 100644 --- a/sakura_core/env/CFileNameManager.cpp +++ b/sakura_core/env/CFileNameManager.cpp @@ -27,7 +27,6 @@ */ #include "StdAfx.h" -#include //CSIDL_PROFILE等 #include "DLLSHAREDATA.h" #include "CFileNameManager.h" @@ -38,7 +37,6 @@ #include "util/string_ex2.h" #include "util/file.h" #include "util/window.h" -#include "_main/CCommandLine.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // ファイル名管理 // @@ -481,91 +479,3 @@ bool CFileNameManager::GetMenuFullLabel( ); return 0 < ret; } - -/** - 構成設定ファイルからiniファイル名を取得する - - sakura.exe.iniからsakura.iniの格納フォルダを取得し、フルパス名を返す - - @param[out] pszPrivateIniFile マルチユーザ用のiniファイルパス - @param[out] pszIniFile EXE基準のiniファイルパス - - @author ryoji - @date 2007.09.04 ryoji 新規作成 - @date 2008.05.05 novice GetModuleHandle(NULL)→NULLに変更 -*/ -void CFileNameManager::GetIniFileNameDirect( LPWSTR pszPrivateIniFile, LPWSTR pszIniFile, LPCWSTR pszProfName ) -{ - WCHAR szPath[_MAX_PATH]; - WCHAR szDrive[_MAX_DRIVE]; - WCHAR szDir[_MAX_DIR]; - WCHAR szFname[_MAX_FNAME]; - WCHAR szExt[_MAX_EXT]; - - ::GetModuleFileName( - NULL, - szPath, _countof(szPath) - ); - _wsplitpath( szPath, szDrive, szDir, szFname, szExt ); - - if( pszProfName[0] == '\0' ){ - auto_snprintf_s( pszIniFile, _MAX_PATH - 1, L"%s%s%s%s", szDrive, szDir, szFname, L".ini" ); - }else{ - auto_snprintf_s( pszIniFile, _MAX_PATH - 1, L"%s%s%s\\%s%s", szDrive, szDir, pszProfName, szFname, L".ini" ); - } - - // マルチユーザ用のiniファイルパス - // exeと同じフォルダに置かれたマルチユーザ構成設定ファイル(sakura.exe.ini)の内容 - // に従ってマルチユーザ用のiniファイルパスを決める - pszPrivateIniFile[0] = L'\0'; - { - auto_snprintf_s( szPath, _MAX_PATH - 1, L"%s%s%s%s", szDrive, szDir, szFname, L".exe.ini" ); - int nEnable = ::GetPrivateProfileInt(L"Settings", L"MultiUser", 0, szPath ); - if( nEnable ){ - int nFolder = ::GetPrivateProfileInt(L"Settings", L"UserRootFolder", 0, szPath ); - switch( nFolder ){ - case 1: - nFolder = CSIDL_PROFILE; // ユーザのルートフォルダ - break; - case 2: - nFolder = CSIDL_PERSONAL; // ユーザのドキュメントフォルダ - break; - case 3: - nFolder = CSIDL_DESKTOPDIRECTORY; // ユーザのデスクトップフォルダ - break; - default: - nFolder = CSIDL_APPDATA; // ユーザのアプリケーションデータフォルダ - break; - } - ::GetPrivateProfileString(L"Settings", L"UserSubFolder", L"sakura", szDir, _MAX_DIR, szPath ); - if( szDir[0] == L'\0' ) - ::lstrcpy( szDir, L"sakura" ); - if( GetSpecialFolderPath( nFolder, szPath ) ){ - if( pszProfName[0] == '\0' ){ - auto_snprintf_s( pszPrivateIniFile, _MAX_PATH - 1, L"%s\\%s\\%s%s", szPath, szDir, szFname, L".ini" ); - }else{ - auto_snprintf_s( pszPrivateIniFile, _MAX_PATH - 1, L"%s\\%s\\%s\\%s%s", szPath, szDir, pszProfName, szFname, L".ini" ); - } - } - } - } -} - -/** - iniファイル名の取得 - - 共有データからsakura.iniの格納フォルダを取得し、フルパス名を返す - - @param[out] pszIniFileName iniファイル名(フルパス)。予め_MAX_PATHのバッファを用意しておくこと - - @author ryoji - @date 2007.05.19 ryoji 新規作成 -*/ -void CFileNameManager::GetIniFileName( LPWSTR pszIniFileName ) const -{ - const auto &iniFolder = m_pShareData->m_sFileNameManagement.m_IniFolder; - const bool bPrivate = iniFolder.m_szPrivateIniFile[0] != L'\0'; - const auto& szPrivateIniFile = iniFolder.m_szPrivateIniFile; - const auto& szIniFile = iniFolder.m_szIniFile; - ::wcscpy_s( pszIniFileName, _MAX_PATH, bPrivate ? szPrivateIniFile : szIniFile ); -} diff --git a/sakura_core/env/CFileNameManager.h b/sakura_core/env/CFileNameManager.h index 305d749281..c1720d3475 100644 --- a/sakura_core/env/CFileNameManager.h +++ b/sakura_core/env/CFileNameManager.h @@ -37,17 +37,6 @@ struct EditInfo; -//! iniフォルダ設定 // 2007.05.31 ryoji -struct IniFolder { - WCHAR m_szIniFile[_MAX_PATH]; // EXE基準のiniファイルパス - WCHAR m_szPrivateIniFile[_MAX_PATH]; // マルチユーザ用のiniファイルパス -}; /* iniフォルダ設定 */ - -//共有メモリ内構造体 -struct SShare_FileNameManagement{ - IniFolder m_IniFolder; /**** iniフォルダ設定 ****/ -}; - //!ファイル名管理 class CFileNameManager : public TSingleton{ friend class TSingleton; @@ -86,9 +75,6 @@ class CFileNameManager : public TSingleton{ static WCHAR GetAccessKeyByIndex(int index, bool bZeroOrigin); - static void GetIniFileNameDirect( LPWSTR pszPrivateIniFile, LPWSTR pszIniFile, LPCWSTR pszProfName ); /* 構成設定ファイルからiniファイル名を取得する */ // 2007.09.04 ryoji - void GetIniFileName( LPWSTR pszIniFileName ) const; //!< iniファイル名の取得 - private: DLLSHAREDATA* m_pShareData; diff --git a/sakura_core/env/CSakuraEnvironment.cpp b/sakura_core/env/CSakuraEnvironment.cpp index caa189687d..03e46931e2 100644 --- a/sakura_core/env/CSakuraEnvironment.cpp +++ b/sakura_core/env/CSakuraEnvironment.cpp @@ -475,9 +475,8 @@ void CSakuraEnvironment::ExpandParameter(const wchar_t* pszSource, wchar_t* pszB case 'I': // May. 19, 2007 ryoji // iniファイルのフルパス { - WCHAR szPath[_MAX_PATH + 1]; - CFileNameManager::getInstance()->GetIniFileName( szPath ); - q = wcs_pushW( q, q_max - q, szPath ); + auto privateIniPath = GetIniFileName(); + q = wcs_pushW( q, q_max - q, privateIniPath.c_str() ); ++p; } break; diff --git a/sakura_core/env/CShareData.cpp b/sakura_core/env/CShareData.cpp index 7e81495eb6..1c288565d3 100644 --- a/sakura_core/env/CShareData.cpp +++ b/sakura_core/env/CShareData.cpp @@ -29,6 +29,7 @@ #include "env/CShareData_IO.h" #include "env/CSakuraEnvironment.h" #include "doc/CDocListener.h" // SLoadInfo +#include "_main/CControlProcess.h" #include "_main/CControlTray.h" #include "_main/CCommandLine.h" #include "_main/CMutex.h" @@ -146,19 +147,6 @@ bool CShareData::InitShareData() CreateTypeSettings(); SetDllShareData( m_pShareData ); - // IniFolder構造体を初期化する - { - const auto pszProfileName = CCommandLine::getInstance()->GetProfileName(); - auto& iniFolder = m_pShareData->m_sFileNameManagement.m_IniFolder; - auto& szPrivateIniFile = iniFolder.m_szPrivateIniFile; - auto& szIniFile = iniFolder.m_szIniFile; - CFileNameManager::GetIniFileNameDirect( szPrivateIniFile, szIniFile, pszProfileName ); - } - - // 2007.05.19 ryoji 実行ファイルフォルダ->設定ファイルフォルダに変更 - WCHAR szIniFolder[_MAX_PATH]; - GetInidir( szIniFolder, NULL ); - m_pShareData->m_vStructureVersion = uShareDataVersion; m_pShareData->m_nSize = sizeof(*m_pShareData); @@ -183,6 +171,18 @@ bool CShareData::InitShareData() m_pShareData->m_dwCustColors[i] = RGB( 255, 255, 255 ); } + // マルチユーザ用のiniファイルパス(exe基準の初期化よりも先に行う必要がある) + auto privateIniPath = GetIniFileName(); + m_pShareData->m_szPrivateIniFile = privateIniPath.c_str(); + + // exe基準のiniファイルパス + auto iniPath = GetExeFileName().replace_extension(L".ini"); + m_pShareData->m_szIniFile = iniPath.c_str(); + + // 設定ファイルフォルダ + WCHAR szIniFolder[_MAX_PATH]; + GetInidir(szIniFolder); + //@@@ 2001.12.26 YAZAKI MRUリストは、CMRUに依頼する CMRUFile cMRU; cMRU.ClearAll(); @@ -1092,9 +1092,14 @@ bool CShareData::OpenDebugWindow( HWND hwnd, bool bAllwaysActive ) return ret; } -/* iniファイルの保存先がユーザ別設定フォルダかどうか */ // 2007.05.25 ryoji -BOOL CShareData::IsPrivateSettings( void ){ - return m_pShareData->m_sFileNameManagement.m_IniFolder.m_szPrivateIniFile[0] != L'\0'; +/*! + 設定フォルダがEXEフォルダと別かどうかを返す + + iniファイルの保存先がユーザ別設定フォルダかどうか 2007.05.25 ryoji +*/ +[[nodiscard]] bool CShareData::IsPrivateSettings( void ) const noexcept +{ + return m_pShareData != nullptr && 0 != ::wcscmp(m_pShareData->m_szPrivateIniFile, m_pShareData->m_szIniFile); } /* diff --git a/sakura_core/env/CShareData.h b/sakura_core/env/CShareData.h index c67be76bb7..0be89236c3 100644 --- a/sakura_core/env/CShareData.h +++ b/sakura_core/env/CShareData.h @@ -79,7 +79,7 @@ class CShareData : public TSingleton void SetTraceOutSource( HWND hwnd ){ m_hwndTraceOutSource = hwnd; } /* TraceOut起動元ウィンドウの設定 */ bool OpenDebugWindow( HWND hwnd, bool bAllwaysActive ); //!< デバッグウィンドウを開く - BOOL IsPrivateSettings( void ); + [[nodiscard]] bool IsPrivateSettings( void ) const noexcept; //マクロ関連 int GetMacroFilename( int idx, WCHAR* pszPath, int nBufLen ); // idxで指定したマクロファイル名(フルパス)を取得する // Jun. 14, 2003 genta 引数追加.書式変更 diff --git a/sakura_core/env/CShareData_IO.cpp b/sakura_core/env/CShareData_IO.cpp index 6cee38f572..92a78187b6 100644 --- a/sakura_core/env/CShareData_IO.cpp +++ b/sakura_core/env/CShareData_IO.cpp @@ -35,6 +35,7 @@ #include "plugin/CPlugin.h" #include "uiparts/CMenuDrawer.h" #include "_main/CCommandLine.h" +#include "_main/CControlProcess.h" void ShareData_IO_Sub_LogFont( CDataProfile& cProfile, const WCHAR* pszSecName, const WCHAR* pszKeyLf, const WCHAR* pszKeyPointSize, const WCHAR* pszKeyFaceName, LOGFONT& lf, INT& nPointSize ); @@ -51,6 +52,23 @@ void SetValueLimit(T& target, int maxval) SetValueLimit( target, 0, maxval ); } +/*! + 入出力に使うINIファイルのパスを取得する + 出力時はマルチユーザー設定を考慮したパスを返す。 + マルチユーザー用のiniファイルが実在する場合はそれを返す。 + 上記以外はexeファイルの拡張子をiniに変えたパスを返す。 + */ +std::filesystem::path GetIniFileNameForIO(bool bWrite) +{ + const auto iniPath = GetExeFileName().replace_extension(L".ini"); + if (const auto privateIniPath = GetIniFileName(); + bWrite || fexist(privateIniPath.c_str())) + { + return privateIniPath; + } + return iniPath; +} + /* 共有データのロード */ bool CShareData_IO::LoadShareData() { @@ -87,7 +105,8 @@ bool CShareData_IO::ShareData_IO_2( bool bRead ) } WCHAR szIniFileName[_MAX_PATH + 1]; - CFileNameManager::getInstance()->GetIniFileName( szIniFileName ); + const auto iniPath = GetIniFileNameForIO(!bRead); + ::wcsncpy_s(szIniFileName, iniPath.c_str(), _TRUNCATE); // MYTRACE( L"Iniファイル処理-1 所要時間(ミリ秒) = %d\n", cRunningTimer.Read() ); diff --git a/sakura_core/env/DLLSHAREDATA.h b/sakura_core/env/DLLSHAREDATA.h index 1ad4e5cf6c..febbb26ff8 100644 --- a/sakura_core/env/DLLSHAREDATA.h +++ b/sakura_core/env/DLLSHAREDATA.h @@ -144,6 +144,9 @@ struct DLLSHAREDATA{ SShare_Nodes m_sNodes; SShare_Handles m_sHandles; + SFilePath m_szIniFile; //!< EXE基準のiniファイルパス + SFilePath m_szPrivateIniFile; //!< マルチユーザ用のiniファイルパス + SCharWidthCache m_sCharWidth; //!< 文字半角全角キャッシュ DWORD m_dwCustColors[16]; //!< フォントDialogカスタムパレット @@ -163,7 +166,6 @@ struct DLLSHAREDATA{ //その他 SShare_SearchKeywords m_sSearchKeywords; SShare_TagJump m_sTagJump; - SShare_FileNameManagement m_sFileNameManagement; SShare_History m_sHistory; //外部コマンド実行ダイアログのオプション diff --git a/sakura_core/util/file.cpp b/sakura_core/util/file.cpp index bcc807c4bd..72f704f2d6 100644 --- a/sakura_core/util/file.cpp +++ b/sakura_core/util/file.cpp @@ -37,6 +37,7 @@ #include "env/DLLSHAREDATA.h" #include "env/CFileNameManager.h" #include "_main/CCommandLine.h" +#include "_main/CControlProcess.h" bool fexist(LPCWSTR pszPath) { @@ -472,7 +473,7 @@ int CalcDirectoryDepth( std::filesystem::path GetExeFileName() { // メモリ確保 - constexpr const size_t cchPath = _MAX_PATH - 1; + constexpr const size_t cchPath = decltype(DLLSHAREDATA::m_szIniFile)::BUFFER_COUNT - 1; std::wstring path(cchPath, L'\0'); // sakura.exe のパスを取得して返却 @@ -512,7 +513,27 @@ void GetExedir( // exeフォルダのフルパス、またはexe基準のファイルパスを取得 auto path = GetExePath(filename); - ::wcsncpy_s(pDir, _MAX_PATH - 1, path.c_str(), _TRUNCATE); + ::wcsncpy_s(pDir, decltype(DLLSHAREDATA::m_szIniFile)::BUFFER_COUNT - 1, path.c_str(), _TRUNCATE); +} + +/*! + @brief iniファイルパスを取得する + */ +std::filesystem::path GetIniFileName() +{ + if (const auto pProcess = CProcess::getInstance(); pProcess != nullptr) { + return pProcess->GetIniFileName(); + } + return GetExeFileName().replace_extension(L".ini"); +} + +/*! + @brief 設定フォルダのフルパス、またはini基準のファイルパス(フルパス)を返す. +*/ +std::filesystem::path GetIniPath(const std::wstring_view& filename) +{ + // iniファイルパスのファイル名を指定された文字列で置換 + return GetIniFileName().replace_filename(filename.data()); } /*! @@ -529,18 +550,14 @@ void GetInidir( if( pDir == NULL ) return; - WCHAR szPath[_MAX_PATH]; - - // sakura.ini のパスを取得 - CFileNameManager::getInstance()->GetIniFileName( szPath ); - if( szFile == NULL ){ - SplitPath_FolderAndFile( szPath, pDir, NULL ); - } - else { - WCHAR szDir[_MAX_PATH]; - SplitPath_FolderAndFile( szPath, szDir, NULL ); - auto_snprintf_s( pDir, _MAX_PATH, L"%s\\%s", szDir, szFile ); + std::wstring_view filename(L""); + if (szFile != nullptr) { + filename = szFile; } + + // 設定フォルダのフルパス、またはini基準のファイルパスを取得 + auto path = GetIniPath(filename); + ::wcsncpy_s(pDir, decltype(DLLSHAREDATA::m_szPrivateIniFile)::BUFFER_COUNT - 1, path.c_str(), _TRUNCATE); } /*! @@ -561,8 +578,7 @@ void GetInidirOrExedir( // ファイル名の指定が空の場合はEXEファイルのフルパスを返す(オプション) if( bRetExedirIfFileEmpty && (szFile == NULL || szFile[0] == L'\0') ){ - GetExedir( szExedir, szFile ); - ::lstrcpy( pDir, szExedir ); + GetExedir( pDir ); return; } @@ -574,12 +590,9 @@ void GetInidirOrExedir( } // EXE基準のフルパスが実在すればそのパスを返す - if( CShareData::getInstance()->IsPrivateSettings() ){ // INIとEXEでパスが異なる場合 - GetExedir( szExedir, szFile ); - if( fexist(szExedir) ){ - ::lstrcpy( pDir, szExedir ); - return; - } + if( GetExedir( szExedir, szFile ); fexist(szExedir) ){ + ::wcsncpy_s( pDir, _MAX_PATH - 1, szExedir, _TRUNCATE ); + return; } // どちらにも実在しなければINI基準のフルパスを返す diff --git a/sakura_core/util/file.h b/sakura_core/util/file.h index 98c8a19a84..3053cd5f56 100644 --- a/sakura_core/util/file.h +++ b/sakura_core/util/file.h @@ -61,7 +61,9 @@ const WCHAR* GetFileTitlePointer(const WCHAR* pszPath); //!< ファイル bool _IS_REL_PATH(const WCHAR* path); //!< 相対パスか判定する。2003.06.23 Moca std::filesystem::path GetExeFileName(); +std::filesystem::path GetIniFileName(); std::filesystem::path GetExePath(const std::wstring_view& filename); +std::filesystem::path GetIniPath(const std::wstring_view& filename); //※サクラ依存 void GetExedir( LPWSTR pDir, LPCWSTR szFile = NULL ); diff --git a/tests/unittests/test-cdlgprofilemgr.cpp b/tests/unittests/test-cdlgprofilemgr.cpp index 9ce9e49891..9225d6b3e2 100644 --- a/tests/unittests/test-cdlgprofilemgr.cpp +++ b/tests/unittests/test-cdlgprofilemgr.cpp @@ -46,6 +46,8 @@ #include "basis/CMyString.h" #include "mem/CNativeW.h" #include "env/DLLSHAREDATA.h" +#include "_main/CCommandLine.h" +#include "_main/CControlProcess.h" #include "util/file.h" /*! @@ -69,25 +71,17 @@ class CDlgProfileMgrTest : public ::testing::Test { /*! * プロファイルマネージャ設定ファイルのパス */ - WCHAR szProfileMgrIniName[_MAX_PATH]; + std::filesystem::path profileMgrIniPath; /*! * テストが起動される直前に毎回呼ばれる関数 */ void SetUp() override { - // INIファイルのパスを取得 - WCHAR szPrivateIniFile[_MAX_PATH]; - WCHAR szIniFile[_MAX_PATH]; - CFileNameManager::GetIniFileNameDirect( szPrivateIniFile, szIniFile, L"" ); - // プロファイルマネージャ設定ファイルのパスを生成 - std::wregex re( L"\\.ini$", std::wregex::icase ); - const auto strProfileMgrIniName = std::regex_replace( szIniFile, re, L"_prof$&" ); - ::wcscpy_s( szProfileMgrIniName, strProfileMgrIniName.data() ); - - if( fexist( szProfileMgrIniName ) ){ + profileMgrIniPath = GetProfileMgrFileName(); + if( fexist( profileMgrIniPath.c_str() ) ){ // プロファイルマネージャー設定を削除する - std::filesystem::remove( szProfileMgrIniName ); + std::filesystem::remove( profileMgrIniPath ); } } @@ -96,7 +90,7 @@ class CDlgProfileMgrTest : public ::testing::Test { */ void TearDown() override { // プロファイルマネージャー設定を削除する - std::filesystem::remove( szProfileMgrIniName ); + std::filesystem::remove( profileMgrIniPath ); } }; @@ -184,3 +178,129 @@ TEST_F( CDlgProfileMgrTest, TrySelectProfile_006 ) CCommandLineWrapper cCommandLine; ASSERT_FALSE( CDlgProfileMgr::TrySelectProfile( &cCommandLine ) ); } + +/*! + * @brief プロファイルマネージャ設定ファイルパスの取得 + */ +TEST(file, GetProfileMgrFileName_NoArg1) +{ + // コマンドラインのグローバル変数をセットする + auto pCommandLine = CCommandLine::getInstance(); + pCommandLine->ParseCommandLine(LR"(-PROF="")", false); + + // プロセスのインスタンスを用意する + CControlProcess dummy(nullptr, LR"(-PROF="")"); + + // iniファイルの拡張子を_prof.iniに変えたパスが返る + const auto profileMgrIniPath = GetIniFileName().replace_extension().concat(L"_prof.ini"); + ASSERT_STREQ(profileMgrIniPath.c_str(), GetProfileMgrFileName().c_str()); + + // コマンドラインのグローバル変数を元に戻す + pCommandLine->ParseCommandLine(L"", false); +} + +/*! + * @brief プロファイルマネージャ設定ファイルパスの取得 + */ +TEST(file, GetProfileMgrFileName_NoArg2) +{ + // コマンドラインのグローバル変数をセットする + auto pCommandLine = CCommandLine::getInstance(); + pCommandLine->ParseCommandLine(LR"(-PROF="profile1")", false); + + // プロセスのインスタンスを用意する + CControlProcess dummy(nullptr, LR"(-PROF="profile1")"); + + // iniファイルの拡張子を_prof.iniに変えたパスが返る + const auto profileMgrIniPath = GetIniFileName().parent_path().parent_path().append(GetIniFileName().replace_extension().concat(L"_prof.ini").filename().c_str()); + ASSERT_STREQ(profileMgrIniPath.c_str(), GetProfileMgrFileName().c_str()); + + // コマンドラインのグローバル変数を元に戻す + pCommandLine->ParseCommandLine(L"", false); +} + +/*! + * @brief 指定したプロファイルの設定保存先ディレクトリの取得(プロファイル名が空の時) + */ +TEST(file, GetProfileMgrFileName_DefaultProfile1) +{ + // コマンドラインのグローバル変数をセットする + auto pCommandLine = CCommandLine::getInstance(); + pCommandLine->ParseCommandLine(LR"(-PROF="")", false); + + // プロセスのインスタンスを用意する + CControlProcess dummy(nullptr, LR"(-PROF="")"); + + // 設定フォルダのパスが返る + const auto iniDir = GetIniPath(L"").append("a.txt").remove_filename(); + ASSERT_STREQ(iniDir.c_str(), GetProfileMgrFileName(L"").c_str()); + + // コマンドラインのグローバル変数を元に戻す + pCommandLine->ParseCommandLine(L"", false); +} + +/*! + * @brief 指定したプロファイルの設定保存先ディレクトリの取得(プロファイル名が空の時) + */ +TEST(file, GetProfileMgrFileName_DefaultProfile2) +{ + // コマンドラインのグローバル変数をセットする + auto pCommandLine = CCommandLine::getInstance(); + pCommandLine->ParseCommandLine(LR"(-PROF="profile1")", false); + + // プロセスのインスタンスを用意する + CControlProcess dummy(nullptr, LR"(-PROF="profile1")"); + + // 設定フォルダのパスが返る + const auto iniDir = GetIniFileName().parent_path().parent_path().append("a.txt").remove_filename(); + ASSERT_STREQ(iniDir.c_str(), GetProfileMgrFileName(L"").c_str()); + + // コマンドラインのグローバル変数を元に戻す + pCommandLine->ParseCommandLine(L"", false); +} + +/*! + * @brief 指定したプロファイルの設定保存先ディレクトリの取得(プロファイル名が空でない時) + */ +TEST(file, GetProfileMgrFileName_NamedProfile1) +{ + // コマンドラインのグローバル変数をセットする + auto pCommandLine = CCommandLine::getInstance(); + pCommandLine->ParseCommandLine(LR"(-PROF="")", false); + + // プロセスのインスタンスを用意する + CControlProcess dummy(nullptr, LR"(-PROF="")"); + + // テスト用プロファイル名 + constexpr auto profile = L"profile1"; + + // 指定したプロファイルの設定保存先フォルダのパスが返る + const auto profileDir = GetIniPath(profile).append("a.txt").remove_filename(); + ASSERT_STREQ(profileDir.c_str(), GetProfileMgrFileName(profile).c_str()); + + // コマンドラインのグローバル変数を元に戻す + pCommandLine->ParseCommandLine(L"", false); +} + +/*! + * @brief 指定したプロファイルの設定保存先ディレクトリの取得(プロファイル名が空でない時) + */ +TEST(file, GetProfileMgrFileName_NamedProfile2) +{ + // コマンドラインのグローバル変数をセットする + auto pCommandLine = CCommandLine::getInstance(); + pCommandLine->ParseCommandLine(LR"(-PROF="profile1")", false); + + // プロセスのインスタンスを用意する + CControlProcess dummy(nullptr, LR"(-PROF="profile1")"); + + // テスト用プロファイル名 + constexpr auto profile = L"profile1"; + + // 指定したプロファイルの設定保存先フォルダのパスが返る + const auto profileDir = GetIniFileName().parent_path().parent_path().append(profile).append("a.txt").remove_filename(); + ASSERT_STREQ(profileDir.c_str(), GetProfileMgrFileName(profile).c_str()); + + // コマンドラインのグローバル変数を元に戻す + pCommandLine->ParseCommandLine(L"", false); +} diff --git a/tests/unittests/test-csakuraenvironment.cpp b/tests/unittests/test-csakuraenvironment.cpp new file mode 100644 index 0000000000..4013790d5b --- /dev/null +++ b/tests/unittests/test-csakuraenvironment.cpp @@ -0,0 +1,63 @@ +/*! @file */ +/* + Copyright (C) 2018-2020 Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include + +#ifndef NOMINMAX +#define NOMINMAX +#endif /* #ifndef NOMINMAX */ + +#include +#include +#include + +#include "config/maxdata.h" +#include "basis/primitive.h" +#include "debug/Debug2.h" +#include "basis/CMyString.h" +#include "mem/CNativeW.h" +#include "env/CSakuraEnvironment.h" +#include "_main/CCommandLine.h" +#include "_main/CControlProcess.h" +#include "util/file.h" + +/*! + * @brief exeファイルパスの取得 + */ +TEST(CSakuraEnvironment, ExpandParameter_ExeFileName) +{ + SFilePath szExeFile; + CSakuraEnvironment::ExpandParameter(L"$S", szExeFile, _countof2(szExeFile)); + ASSERT_STREQ(GetExeFileName().c_str(), szExeFile.c_str()); +} + +/*! + * @brief iniファイルパスの取得 + */ +TEST(CSakuraEnvironment, ExpandParameter_IniFileName) +{ + SFilePath szIniFile; + CSakuraEnvironment::ExpandParameter(L"$I", szIniFile, _countof2(szIniFile)); + ASSERT_STREQ(GetIniFileName().c_str(), szIniFile.c_str()); +} diff --git a/tests/unittests/test-file.cpp b/tests/unittests/test-file.cpp index b283285b41..0ab321e47c 100644 --- a/tests/unittests/test-file.cpp +++ b/tests/unittests/test-file.cpp @@ -32,6 +32,17 @@ #include #include +#include +#include + +#include "config/maxdata.h" +#include "basis/primitive.h" +#include "debug/Debug2.h" +#include "basis/CMyString.h" +#include "mem/CNativeW.h" +#include "env/DLLSHAREDATA.h" +#include "_main/CCommandLine.h" +#include "_main/CControlProcess.h" #include "util/file.h" /*! @@ -129,6 +140,9 @@ TEST(file, Deprecated_GetExedir) // 戻り値取得用のバッファ WCHAR szBuf[_MAX_PATH]; + // 戻り値取得用のバッファを指定しない場合、何も起きない + GetExedir(nullptr); + // exeフォルダの取得 GetExedir(szBuf); ::wcscat_s(szBuf, filename); @@ -141,3 +155,390 @@ TEST(file, Deprecated_GetExedir) GetExedir(szBuf, filename); ASSERT_STREQ(exeBasePath.c_str(), szBuf); } + +/*! + * @brief iniファイルパスの取得(プロセス未作成時) + */ +TEST(file, GetIniFileName_OutOfProcess) +{ + // exeファイルの拡張子をiniに変えたパスが返る + auto iniPath = GetExeFileName().replace_extension(L".ini"); + ASSERT_STREQ(iniPath.c_str(), GetIniFileName().c_str()); +} + +/*! + * @brief iniファイルパスの取得(コントロールプロセス未初期化、かつ、プロファイル指定なし時) + */ +TEST(file, GetIniFileName_InProcessDefaultProfileUnInitialized) +{ + // コマンドラインのグローバル変数をセットする + auto pCommandLine = CCommandLine::getInstance(); + pCommandLine->ParseCommandLine(LR"(-PROF="")", false); + + // プロセスのインスタンスを用意する + CControlProcess dummy(nullptr, LR"(-PROF="")"); + + // exeファイルの拡張子をiniに変えたパスが返る + auto path = GetExeFileName().replace_extension(L".ini"); + ASSERT_STREQ(path.c_str(), GetIniFileName().c_str()); + + // コマンドラインのグローバル変数を元に戻す + pCommandLine->ParseCommandLine(L"", false); +} + +/*! + * @brief iniファイルパスの取得(コントロールプロセス未初期化、かつ、プロファイル指定あり時) + */ +TEST(file, GetIniFileName_InProcessNamedProfileUnInitialized) +{ + // コマンドラインのグローバル変数をセットする + auto pCommandLine = CCommandLine::getInstance(); + pCommandLine->ParseCommandLine(LR"(-PROF="profile1")", false); + + // プロセスのインスタンスを用意する + CControlProcess dummy(nullptr, LR"(-PROF="profile1")"); + + // exeファイルの拡張子をiniに変えたパスの最後のフォルダにプロファイル名を加えたパスが返る + auto iniPath = GetExeFileName().replace_extension(L".ini"); + auto path = iniPath.parent_path().append(L"profile1").append(iniPath.filename().c_str()); + ASSERT_STREQ(path.c_str(), GetIniFileName().c_str()); + + // コマンドラインのグローバル変数を元に戻す + pCommandLine->ParseCommandLine(L"", false); +} + +/*! + * @brief iniファイルパスの取得 + */ +TEST(file, GetIniFileName_PrivateRoamingAppData) +{ + // コマンドラインのグローバル変数をセットする + auto pCommandLine = CCommandLine::getInstance(); + pCommandLine->ParseCommandLine(LR"(-PROF="profile1")", false); + + // プロセスのインスタンスを用意する + CControlProcess dummy(nullptr, LR"(-PROF="profile1")"); + + // マルチユーザ構成設定ファイルのパス + auto exeIniPath = GetExeFileName().concat(L".ini"); + + // 設定を書き込む + ::WritePrivateProfileString(L"Settings", L"MultiUser", L"1", exeIniPath.c_str()); + ::WritePrivateProfileString(L"Settings", L"UserRootFolder", L"0", exeIniPath.c_str()); + ::WritePrivateProfileString(L"Settings", L"UserSubFolder", L"", exeIniPath.c_str()); + + // 実在チェック + ASSERT_TRUE(fexist(exeIniPath.c_str())); + + // 期待値を取得する + std::wstring expected(2048, L'\0'); + ASSERT_TRUE(ExpandEnvironmentStrings(LR"(%USERPROFILE%\AppData\Roaming\sakura\profile1\)", expected.data(), (DWORD)expected.capacity())); + expected.assign(expected.data()); + expected += GetIniFileName().filename(); + + // テスト実施 + ASSERT_STREQ(expected.c_str(), GetIniFileName().c_str()); + + // コマンドラインのグローバル変数を元に戻す + pCommandLine->ParseCommandLine(L"", false); + + // INIファイルを削除する + std::filesystem::remove(exeIniPath); + + // 削除チェック + ASSERT_FALSE(fexist(exeIniPath.c_str())); +} + +/*! + * @brief iniファイルパスの取得 + */ +TEST(file, GetIniFileName_PrivateDesktop) +{ + // コマンドラインのグローバル変数をセットする + auto pCommandLine = CCommandLine::getInstance(); + pCommandLine->ParseCommandLine(LR"(-PROF="")", false); + + // プロセスのインスタンスを用意する + CControlProcess dummy(nullptr, LR"(-PROF="")"); + + // マルチユーザ構成設定ファイルのパス + auto exeIniPath = GetExeFileName().concat(L".ini"); + + // 設定を書き込む + ::WritePrivateProfileString(L"Settings", L"MultiUser", L"1", exeIniPath.c_str()); + ::WritePrivateProfileString(L"Settings", L"UserRootFolder", L"3", exeIniPath.c_str()); + ::WritePrivateProfileString(L"Settings", L"UserSubFolder", L"sakura", exeIniPath.c_str()); + + // 実在チェック + ASSERT_TRUE(fexist(exeIniPath.c_str())); + + // 期待値を取得する + std::wstring expected(2048, L'\0'); + ASSERT_TRUE(ExpandEnvironmentStrings(LR"(%USERPROFILE%\Desktop\sakura\)", expected.data(), (DWORD)expected.capacity())); + expected.assign(expected.data()); + expected += GetIniFileName().filename(); + + // テスト実施 + ASSERT_STREQ(expected.c_str(), GetIniFileName().c_str()); + + // コマンドラインのグローバル変数を元に戻す + pCommandLine->ParseCommandLine(L"", false); + + // INIファイルを削除する + std::filesystem::remove(exeIniPath); + + // 削除チェック + ASSERT_FALSE(fexist(exeIniPath.c_str())); +} + +/*! + * @brief iniファイルパスの取得 + */ +TEST(file, GetIniFileName_PrivateProfile) +{ + // コマンドラインのグローバル変数をセットする + auto pCommandLine = CCommandLine::getInstance(); + pCommandLine->ParseCommandLine(LR"(-PROF="")", false); + + // プロセスのインスタンスを用意する + CControlProcess dummy(nullptr, LR"(-PROF="")"); + + // マルチユーザ構成設定ファイルのパス + auto exeIniPath = GetExeFileName().concat(L".ini"); + + // 設定を書き込む + ::WritePrivateProfileString(L"Settings", L"MultiUser", L"1", exeIniPath.c_str()); + ::WritePrivateProfileString(L"Settings", L"UserRootFolder", L"1", exeIniPath.c_str()); + ::WritePrivateProfileString(L"Settings", L"UserSubFolder", L"sakura", exeIniPath.c_str()); + + // 実在チェック + ASSERT_TRUE(fexist(exeIniPath.c_str())); + + // 期待値を取得する + std::wstring expected(2048, L'\0'); + ASSERT_TRUE(ExpandEnvironmentStrings(LR"(%USERPROFILE%\sakura\)", expected.data(), (DWORD)expected.capacity())); + expected.assign(expected.data()); + expected += GetIniFileName().filename(); + + // テスト実施 + ASSERT_STREQ(expected.c_str(), GetIniFileName().c_str()); + + // コマンドラインのグローバル変数を元に戻す + pCommandLine->ParseCommandLine(L"", false); + + // INIファイルを削除する + std::filesystem::remove(exeIniPath); + + // 削除チェック + ASSERT_FALSE(fexist(exeIniPath.c_str())); +} + +/*! + * @brief iniファイルパスの取得 + */ +TEST(file, GetIniFileName_PrivateDocument) +{ + // コマンドラインのグローバル変数をセットする + auto pCommandLine = CCommandLine::getInstance(); + pCommandLine->ParseCommandLine(LR"(-PROF="")", false); + + // プロセスのインスタンスを用意する + CControlProcess dummy(nullptr, LR"(-PROF="")"); + + // マルチユーザ構成設定ファイルのパス + auto exeIniPath = GetExeFileName().concat(L".ini"); + + // 設定を書き込む + ::WritePrivateProfileString(L"Settings", L"MultiUser", L"1", exeIniPath.c_str()); + ::WritePrivateProfileString(L"Settings", L"UserRootFolder", L"2", exeIniPath.c_str()); + ::WritePrivateProfileString(L"Settings", L"UserSubFolder", L"sakura", exeIniPath.c_str()); + + // 実在チェック + ASSERT_TRUE(fexist(exeIniPath.c_str())); + + // 期待値を取得する + std::wstring expected(2048, L'\0'); + ASSERT_TRUE(ExpandEnvironmentStrings(LR"(%USERPROFILE%\Documents\sakura\)", expected.data(), (DWORD)expected.capacity())); + expected.assign(expected.data()); + expected += GetIniFileName().filename(); + + // テスト実施 + ASSERT_STREQ(expected.c_str(), GetIniFileName().c_str()); + + // コマンドラインのグローバル変数を元に戻す + pCommandLine->ParseCommandLine(L"", false); + + // INIファイルを削除する + std::filesystem::remove(exeIniPath); + + // 削除チェック + ASSERT_FALSE(fexist(exeIniPath.c_str())); +} + +/*! + * @brief iniフォルダのフルパスの取得 + */ +TEST(file, GetIniPath_Directory) +{ + // テスト対象関数呼び出し + auto iniDir = GetIniPath(L""); + + // 戻り値はファイル名を含まない + ASSERT_FALSE(iniDir.has_filename()); + + // パスコンポーネントの最終要素は空になる(\で終わっている) + auto lastComponent = *(--iniDir.end()); + ASSERT_STREQ(L"", lastComponent.c_str()); + + // 戻り値はiniファイルパスからファイル名を取り除いたものになる + auto iniPath = GetIniFileName(); + ASSERT_STREQ(iniPath.remove_filename().c_str(), iniDir.c_str()); +} + +/*! + * @brief ini基準のファイルパス(フルパス)の取得 + */ +TEST(file, GetIniPath_FileName) +{ + // テストに使うファイル名(空でなければなんでもいい) + constexpr const auto filename = L"README.txt"; + + // テスト対象関数呼び出し + auto iniBasePath = GetIniPath(filename); + + // 戻り値はファイル名を含む + ASSERT_TRUE(iniBasePath.has_filename()); + + // 戻り値のファイル名は指定したものになっている + ASSERT_STREQ(filename, iniBasePath.filename().c_str()); + + // 戻り値の親フォルダはiniファイルパスの親フォルダと等しい + auto iniPath = GetIniFileName(); + ASSERT_STREQ(iniPath.parent_path().c_str(), iniBasePath.parent_path().c_str()); +} + +/*! + * @brief 既存コード互換用に残しておく関数のリグレッション + */ +TEST(file, Deprecated_GetInidir) +{ + // テストに使うファイル名(空でなければなんでもいい) + constexpr const auto filename = L"README.txt"; + + // 比較用関数呼び出し + auto iniBasePath = GetIniPath(filename); + + // 戻り値取得用のバッファ + WCHAR szBuf[_MAX_PATH]; + + // 戻り値取得用のバッファを指定しない場合、何も起きない + GetInidir(nullptr); + + // iniフォルダの取得 + GetInidir(szBuf); + ::wcscat_s(szBuf, filename); + ASSERT_STREQ(iniBasePath.c_str(), szBuf); + + // 一旦クリアする + ::wcscpy_s(szBuf, L""); + + // ini基準ファイルパスの取得 + GetInidir(szBuf, filename); + ASSERT_STREQ(iniBasePath.c_str(), szBuf); +} + +void EnsureDirectoryExist(const std::wstring& strProfileName); + +/*! + * @brief INIファイルまたはEXEファイルのあるディレクトリ,または指定されたファイル名のフルパスを返す(INIを優先) + */ +TEST(file, GetInidirOrExedir) +{ + // コマンドラインのグローバル変数をセットする + auto pCommandLine = CCommandLine::getInstance(); + pCommandLine->ParseCommandLine(LR"(-PROF="profile1")", false); + + // プロセスのインスタンスを用意する + CControlProcess dummy(nullptr, LR"(-PROF="profile1")"); + + std::wstring buf(_MAX_PATH, L'\0'); + + GetInidirOrExedir(buf.data(), L"", true); + ASSERT_STREQ(GetExePath(L"").c_str(), buf.data()); + + constexpr auto filename = L"test.txt"; + auto exeBasePath = GetExePath(filename); + auto iniBasePath = GetIniPath(filename); + + // EXE基準のファイルを作る + { + std::wofstream ofs(exeBasePath); + ofs << L"TEST(file, GetInidirOrExedir)" << std::endl; + } + + // INI基準のファイルを作る + { + EnsureDirectoryExist(GetIniPath(L"").c_str()); + + std::wofstream ofs(iniBasePath); + ofs << L"TEST(file, GetInidirOrExedir)" << std::endl; + } + + // 両方あるときはINI基準のパスが変える + GetInidirOrExedir(buf.data(), filename, true); + ASSERT_STREQ(iniBasePath.c_str(), buf.data()); + + // INI基準パスのファイルを削除する + std::filesystem::remove(iniBasePath); + ASSERT_FALSE(fexist(iniBasePath.c_str())); + + // EXE基準のみ存在するときはEXE基準のパスが変える + GetInidirOrExedir(buf.data(), filename, true); + ASSERT_STREQ(exeBasePath.c_str(), buf.data()); + + // EXE基準パスのファイルを削除する + std::filesystem::remove(exeBasePath); + ASSERT_FALSE(fexist(exeBasePath.c_str())); + + // 両方ないときはINI基準のパスが変える + GetInidirOrExedir(buf.data(), filename, true); + ASSERT_STREQ(iniBasePath.c_str(), buf.data()); + + // コマンドラインのグローバル変数を元に戻す + pCommandLine->ParseCommandLine(L"", false); +} + +std::filesystem::path GetIniFileNameForIO(bool bWrite); + +/*! + * @brief 入出力に使うiniファイルの判定 + */ +TEST(file, GetIniFileNameForIO) +{ + auto iniPath = GetExeFileName().replace_extension(L".ini"); + + // 書き込みモードのとき + ASSERT_STREQ(iniPath.c_str(), GetIniFileNameForIO(true).c_str()); + + // 書き込みモードでないとき + ASSERT_STREQ(iniPath.c_str(), GetIniFileNameForIO(false).c_str()); + + // 書き込みモードでないがiniファイルが実在するとき + { + std::wofstream ofs(iniPath); + ofs << L"test" << std::endl; + ofs.close(); + + // 実在チェック + ASSERT_TRUE(fexist(iniPath.c_str())); + + // テスト実施 + ASSERT_STREQ(iniPath.c_str(), GetIniFileNameForIO(false).c_str()); + + // INIファイルを削除する + std::filesystem::remove(iniPath); + + // 削除チェック + ASSERT_FALSE(fexist(iniPath.c_str())); + } +} diff --git a/tests/unittests/test-winmain.cpp b/tests/unittests/test-winmain.cpp index b317e3ebf7..f6ebd9a183 100644 --- a/tests/unittests/test-winmain.cpp +++ b/tests/unittests/test-winmain.cpp @@ -79,21 +79,20 @@ class WinMainTest : public ::testing::Test { /*! * 設定ファイルのパス * - * CFileNameManager::GetIniFileNameDirectを使ってtests1.iniのパスを取得する。 + * GetIniFileNameを使ってtests1.iniのパスを取得する。 */ - WCHAR szIniFile[_MAX_PATH]; + std::filesystem::path iniPath; /*! * テストが起動される直前に毎回呼ばれる関数 */ void SetUp() override { // INIファイルのパスを取得 - WCHAR szPrivateIniFile[_MAX_PATH]; - CFileNameManager::GetIniFileNameDirect( szPrivateIniFile, szIniFile, L"" ); + iniPath = GetIniFileName(); - if( fexist( szIniFile ) ){ + if( fexist( iniPath.c_str() ) ){ // INIファイルを削除する - std::filesystem::remove( szIniFile ); + std::filesystem::remove( iniPath ); } } @@ -102,7 +101,7 @@ class WinMainTest : public ::testing::Test { */ void TearDown() override { // INIファイルを削除する - std::filesystem::remove( szIniFile ); + std::filesystem::remove( iniPath ); } }; @@ -247,7 +246,7 @@ TEST_F( WinMainTest, runWithNoWin ) CControlProcess_Terminate( szProfileName ); // コントロールプロセスが終了すると、INIファイルが作成される - ASSERT_TRUE( fexist( szIniFile ) ); + ASSERT_TRUE( fexist( iniPath.c_str() ) ); } /*! @@ -301,6 +300,7 @@ TEST_F( WinMainTest, runEditorProcess ) strStartupMacro += L"ShowFunckey();"; //ShowFunckey 消す strStartupMacro += L"ShowMiniMap();"; //ShowMiniMap 消す strStartupMacro += L"ShowTab();"; //ShowTab 消す + strStartupMacro += L"ExpandParameter('$I');"; // INIファイルパスの取得(呼ぶだけ) strStartupMacro += L"ExitAll();"; //NOTE: このコマンドにより、エディタプロセスは起動された直後に終了する。 // コマンドラインを組み立てる @@ -322,5 +322,5 @@ TEST_F( WinMainTest, runEditorProcess ) ASSERT_EXIT({ separatedTestProc(); exit(0); }, ::testing::ExitedWithCode(0), ".*" ); // コントロールプロセスが終了すると、INIファイルが作成される - ASSERT_TRUE( fexist( szIniFile ) ); + ASSERT_TRUE( fexist( iniPath.c_str() ) ); } diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index 5549ab6424..bca2f32964 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -112,6 +112,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index e484b7c752..9a0174396e 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -91,6 +91,10 @@ Test Files + + + Test Files + From 5f2079b036219110656932c711f640d6792cc757 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 24 Jan 2021 14:58:10 +0900 Subject: [PATCH 0366/1024] =?UTF-8?q?SonarCloud=E8=A7=A3=E6=9E=90=E3=81=AE?= =?UTF-8?q?=E5=AF=BE=E8=B1=A1=E3=82=92x64|Debug=E3=81=AB=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ReleaseビルドではOpenCppCoverageがインラインされたコードのカバレッジを採れないため。 --- .github/workflows/sonarscan.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/sonarscan.yml b/.github/workflows/sonarscan.yml index 360a7d04f8..a014ae65a7 100644 --- a/.github/workflows/sonarscan.yml +++ b/.github/workflows/sonarscan.yml @@ -31,7 +31,7 @@ jobs: env: BUILD_PLATFORM: x64 - BUILD_CONFIGURATION: Release + BUILD_CONFIGURATION: Debug SONAR_QUBE_VERSION: '4.5.0.2216' steps: From 7d6fc2368c09bd8cc1df39b2a2fb68784faab163 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Thu, 19 Nov 2020 11:42:36 +0900 Subject: [PATCH 0367/1024] =?UTF-8?q?std::forward=E3=81=AE=E4=BD=BF?= =?UTF-8?q?=E3=81=84=E6=96=B9=E3=81=8C=E8=AA=A4=E3=81=A3=E3=81=A6=E3=81=84?= =?UTF-8?q?=E3=82=8B=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/mem/CNativeA.cpp | 5 ----- sakura_core/mem/CNativeA.h | 4 ++-- sakura_core/mem/CNativeW.cpp | 5 ----- sakura_core/mem/CNativeW.h | 4 ++-- 4 files changed, 4 insertions(+), 14 deletions(-) diff --git a/sakura_core/mem/CNativeA.cpp b/sakura_core/mem/CNativeA.cpp index aed3f1d493..c6276b0c3b 100644 --- a/sakura_core/mem/CNativeA.cpp +++ b/sakura_core/mem/CNativeA.cpp @@ -12,11 +12,6 @@ CNativeA::CNativeA(const CNativeA& rhs) { } -CNativeA::CNativeA(CNativeA&& other) noexcept - : CNative(std::forward(other)) -{ -} - CNativeA::CNativeA( const char* szData, size_t cchData ) : CNative() { diff --git a/sakura_core/mem/CNativeA.h b/sakura_core/mem/CNativeA.h index bc5ecc4e35..bfc50e688b 100644 --- a/sakura_core/mem/CNativeA.h +++ b/sakura_core/mem/CNativeA.h @@ -32,7 +32,7 @@ class CNativeA final : public CNative{ public: CNativeA() noexcept; CNativeA( const CNativeA& rhs ); - CNativeA( CNativeA&& other ) noexcept; + CNativeA( CNativeA&& other ) noexcept = default; CNativeA( const char* szData, size_t cchData ); CNativeA( const char* szData); @@ -60,7 +60,7 @@ class CNativeA final : public CNative{ //演算子 CNativeA& operator = (const CNativeA& rhs) { CNative::operator=(rhs); return *this; } - CNativeA& operator = (CNativeA&& rhs) noexcept { CNative::operator=(std::forward(rhs)); return *this; } + CNativeA& operator = (CNativeA&& rhs) noexcept { CNative::operator=(std::move(rhs)); return *this; } const CNativeA& operator=( char ); const CNativeA& operator+=( char ); }; diff --git a/sakura_core/mem/CNativeW.cpp b/sakura_core/mem/CNativeW.cpp index 19996c403e..2eed3b4708 100644 --- a/sakura_core/mem/CNativeW.cpp +++ b/sakura_core/mem/CNativeW.cpp @@ -17,11 +17,6 @@ CNativeW::CNativeW(const CNativeW& rhs) { } -CNativeW::CNativeW(CNativeW&& other) noexcept - : CNative(std::forward(other)) -{ -} - //! nDataLenは文字単位。 CNativeW::CNativeW( const wchar_t* pData, int nDataLen ) : CNative() diff --git a/sakura_core/mem/CNativeW.h b/sakura_core/mem/CNativeW.h index cd3a49503e..a2a370cefd 100644 --- a/sakura_core/mem/CNativeW.h +++ b/sakura_core/mem/CNativeW.h @@ -74,7 +74,7 @@ class CNativeW final : public CNative{ //コンストラクタ・デストラクタ CNativeW() noexcept; CNativeW( const CNativeW& rhs ); - CNativeW( CNativeW&& other ) noexcept; + CNativeW( CNativeW&& other ) noexcept = default; CNativeW( const wchar_t* pData, int nDataLen ); //!< nDataLenは文字単位。 CNativeW( const wchar_t* pData); @@ -98,7 +98,7 @@ class CNativeW final : public CNative{ //演算子 CNativeW& operator = (const CNativeW& rhs) { CNative::operator=(rhs); return *this; } - CNativeW& operator = (CNativeW&& rhs) noexcept { CNative::operator=(std::forward(rhs)); return *this; } + CNativeW& operator = (CNativeW&& rhs) noexcept { CNative::operator=(std::move(rhs)); return *this; } CNativeW operator + (const CNativeW& rhs) const { return (CNativeW(*this) += rhs); } CNativeW& operator += (const CNativeW& rhs) { AppendNativeData(rhs); return *this; } CNativeW& operator += (wchar_t ch) { return (*this += CNativeW(&ch, 1)); } From 40136b66a7cdef09513d797c656a567c6a7e646b Mon Sep 17 00:00:00 2001 From: berryzplus Date: Thu, 19 Nov 2020 11:46:59 +0900 Subject: [PATCH 0368/1024] =?UTF-8?q?=E5=9B=BA=E6=9C=89=E3=81=AE=E5=87=A6?= =?UTF-8?q?=E7=90=86=E3=81=8C=E3=81=AA=E3=81=84=E3=82=B3=E3=83=B3=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=83=A9=E3=82=AF=E3=82=BF=E3=81=ABdefault=E3=82=92?= =?UTF-8?q?=E4=BD=BF=E3=81=86=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/mem/CNativeA.cpp | 10 ---------- sakura_core/mem/CNativeA.h | 4 ++-- sakura_core/mem/CNativeW.cpp | 10 ---------- sakura_core/mem/CNativeW.h | 4 ++-- 4 files changed, 4 insertions(+), 24 deletions(-) diff --git a/sakura_core/mem/CNativeA.cpp b/sakura_core/mem/CNativeA.cpp index c6276b0c3b..177f63d2fb 100644 --- a/sakura_core/mem/CNativeA.cpp +++ b/sakura_core/mem/CNativeA.cpp @@ -2,16 +2,6 @@ #include "StdAfx.h" #include "CNativeA.h" -CNativeA::CNativeA() noexcept - : CNative() -{ -} - -CNativeA::CNativeA(const CNativeA& rhs) - : CNative(rhs) -{ -} - CNativeA::CNativeA( const char* szData, size_t cchData ) : CNative() { diff --git a/sakura_core/mem/CNativeA.h b/sakura_core/mem/CNativeA.h index bfc50e688b..1bc14a60c2 100644 --- a/sakura_core/mem/CNativeA.h +++ b/sakura_core/mem/CNativeA.h @@ -30,8 +30,8 @@ class CNativeA final : public CNative{ public: - CNativeA() noexcept; - CNativeA( const CNativeA& rhs ); + CNativeA() noexcept = default; + CNativeA( const CNativeA& rhs ) = default; CNativeA( CNativeA&& other ) noexcept = default; CNativeA( const char* szData, size_t cchData ); CNativeA( const char* szData); diff --git a/sakura_core/mem/CNativeW.cpp b/sakura_core/mem/CNativeW.cpp index 2eed3b4708..7c68c9e80c 100644 --- a/sakura_core/mem/CNativeW.cpp +++ b/sakura_core/mem/CNativeW.cpp @@ -7,16 +7,6 @@ // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // コンストラクタ・デストラクタ // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -CNativeW::CNativeW() noexcept - : CNative() -{ -} - -CNativeW::CNativeW(const CNativeW& rhs) - : CNative(rhs) -{ -} - //! nDataLenは文字単位。 CNativeW::CNativeW( const wchar_t* pData, int nDataLen ) : CNative() diff --git a/sakura_core/mem/CNativeW.h b/sakura_core/mem/CNativeW.h index a2a370cefd..d8ef73d283 100644 --- a/sakura_core/mem/CNativeW.h +++ b/sakura_core/mem/CNativeW.h @@ -72,8 +72,8 @@ class CNativeW final : public CNative{ public: //コンストラクタ・デストラクタ - CNativeW() noexcept; - CNativeW( const CNativeW& rhs ); + CNativeW() noexcept = default; + CNativeW( const CNativeW& rhs ) = default; CNativeW( CNativeW&& other ) noexcept = default; CNativeW( const wchar_t* pData, int nDataLen ); //!< nDataLenは文字単位。 CNativeW( const wchar_t* pData); From 9ee6f47c141fa1cc51d95b5218f8208a58a1517d Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 20 Nov 2020 17:28:26 +0900 Subject: [PATCH 0369/1024] =?UTF-8?q?=E6=9C=AA=E4=BD=BF=E7=94=A8=E9=96=A2?= =?UTF-8?q?=E6=95=B0=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/file.cpp | 78 --------------------------------------- 1 file changed, 78 deletions(-) diff --git a/sakura_core/util/file.cpp b/sakura_core/util/file.cpp index 4959191334..4f13f84e0e 100644 --- a/sakura_core/util/file.cpp +++ b/sakura_core/util/file.cpp @@ -754,84 +754,6 @@ wchar_t* wcsrchr2( const wchar_t *pt , const wchar_t ch1 , const wchar_t ch2 ){ #define GetExistPath_IV_Drive 1 /* ドライブが無効 */ #define GetExistPath_AV_Drive 2 /* ドライブが有効 */ -void GetExistPath( char *po , const char *pi ) -{ - char *pw,*ps; - int cnt; - char drv[4] = "_:\\"; - int dl; /* ドライブの状態 */ - - /* pi の内容を - / ・ " を削除しつつ - / ・ / を \ に変換しつつ(Win32API では / も \ と同等に扱われるから) - / ・最大 ( _MAX_PATH -1 ) 文字まで - / po にコピーする。 */ - for( pw=po,cnt=0 ; ( *pi != '\0' ) && ( cnt < _MAX_PATH -1 ) ; pi++ ){ - /* /," 共に Shift_JIS の漢字コード中には含まれないので Shift_JIS 判定は不要。 */ - if( *pi == '\"' ) continue; /* " なら何もしない。次の文字へ */ - if( *pi == '/' ) *pw++ = '\\'; /* / なら \ に変換してコピー */ - else *pw++ = *pi; /* その他の文字はそのままコピー */ - cnt++; /* コピーした文字数 ++ */ - } - *pw = '\0'; /* 文字列終端 */ - - dl = GetExistPath_NO_DriveLetter; /*「ドライブレターが無い」にしておく*/ - if( - ( *(po+1) == ':' )&& - ( ACODE::IsAZ(*po) ) - ){ /* 先頭にドライブレターがある。そのドライブが有効かどうか判定する */ - drv[0] = *po; - if( _access(drv,0) == 0 ) dl = GetExistPath_AV_Drive; /* 有効 */ - else dl = GetExistPath_IV_Drive; /* 無効 */ - } - - if( dl == GetExistPath_IV_Drive ){ /* ドライブ自体が無効 */ - /* フロッピーディスク中のファイルが指定されていて、 -   そのドライブにフロッピーディスクが入っていない、とか */ - *po = '\0'; /* 返値文字列 = "";(空文字列) */ - return; /* これ以上何もしない */ - } - - /* ps = 検索開始位置 */ - ps = po; /* ↓文字列の先頭が \\ なら、\ 検索処理の対象から外す */ - if( ( *po == '\\' )&&( *(po+1) == '\\' ) ) ps +=2; - - if( *ps == '\0' ){ /* 検索対象が空文字列なら */ - *po = '\0'; /* 返値文字列 = "";(空文字列) */ - return; /*これ以上何もしない */ - } - - for(;;){ - if( _access(po,0) == 0 ) break; /* 有効なパス文字列が見つかった */ - /* ↓文字列最後尾の \ または ' ' を探し出し、そこを文字列終端にする。*/ - - pw = sjis_strrchr2(ps,'\\',' '); /* 最末尾の \ か ' ' を探す。 */ - if ( pw == NULL ){ /* 文字列中に '\\' も ' ' も無かった */ - /* 例えば "C:testdir" という文字列が来た時に、"C:testdir" が実在 -   しなくとも C:ドライブが有効なら "C:" という文字列だけでも返し -   たい。以下↓は、そのための処理。 */ - if( dl == GetExistPath_AV_Drive ){ - /* 先頭に有効なドライブのドライブレターがある。 */ - *(po+2) = '\0'; /* ドライブレター部の文字列のみ返す */ - } - else{ /* 有効なパス部分が全く見つからなかった */ - *po = '\0'; /* 返値文字列 = "";(空文字列) */ - } - break; /* ループを抜ける */ - } - /* ↓ルートディレクトリを引っかけるための処理 */ - if( ( *pw == '\\' )&&( *(pw-1) == ':' ) ){ /* C:\ とかの \ っぽい */ - * (pw+1) = '\0'; /* \ の後ろの位置を文字列の終端にする。 */ - if( _access(po,0) == 0 ) break; /* 有効なパス文字列が見つかった */ - } - *pw = '\0'; /* \ か ' ' の位置を文字列の終端にする。 */ - /* ↓末尾がスペースなら、スペースを全て削除する */ - while( ( pw != ps ) && ( *(pw-1) == ' ' ) ) * --pw = '\0'; - } - - return; -} - void GetExistPathW( wchar_t *po , const wchar_t *pi ) { wchar_t *pw,*ps; From aecc88e221a0140d46306226c6be9ce801d4d6f8 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 20 Nov 2020 17:49:50 +0900 Subject: [PATCH 0370/1024] =?UTF-8?q?=E6=9C=AA=E5=AE=9A=E7=BE=A9=E3=81=AE?= =?UTF-8?q?=E9=96=A2=E6=95=B0=E5=AE=A3=E8=A8=80=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/file.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/sakura_core/util/file.h b/sakura_core/util/file.h index afc93c08a0..50b20d31ed 100644 --- a/sakura_core/util/file.h +++ b/sakura_core/util/file.h @@ -103,9 +103,7 @@ class CFileTime{ bool GetLastWriteTimestamp( const WCHAR* filename, CFileTime* pcFileTime ); // Oct. 22, 2005 genta //文字列分割 -void my_splitpath ( const char *comln , char *drv,char *dir,char *fnm,char *ext ); void my_splitpath_w ( const wchar_t *comln , wchar_t *drv,wchar_t *dir,wchar_t *fnm,wchar_t *ext ); -void my_splitpath_t ( const WCHAR *comln , WCHAR *drv,WCHAR *dir,WCHAR *fnm,WCHAR *ext ); #define my_splitpath_t my_splitpath_w int FileMatchScoreSepExt( const WCHAR *file1, const WCHAR *file2 ); From 54238ca237bbec5805d965f599f6b0e16260774d Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sun, 24 Jan 2021 03:15:06 +0900 Subject: [PATCH 0371/1024] =?UTF-8?q?=E6=96=87=E5=AD=97=E5=B9=85=E3=82=AD?= =?UTF-8?q?=E3=83=A3=E3=83=83=E3=82=B7=E3=83=A5=E3=81=AE=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-charcode.cpp | 114 +++++++++++++++++++++++++ tests/unittests/tests1.vcxproj | 1 + tests/unittests/tests1.vcxproj.filters | 3 + 3 files changed, 118 insertions(+) create mode 100644 tests/unittests/test-charcode.cpp diff --git a/tests/unittests/test-charcode.cpp b/tests/unittests/test-charcode.cpp new file mode 100644 index 0000000000..0b1a17073f --- /dev/null +++ b/tests/unittests/test-charcode.cpp @@ -0,0 +1,114 @@ +/*! @file */ +/* + Copyright (C) 2018-2020 Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include "charset/charcode.h" +#include +#include +#include + +class CharWidthCache : public testing::Test { +protected: + void SetUp() override { + lf1 = LOGFONT(); + lf1.lfCharSet = DEFAULT_CHARSET; + std::wcscpy(lf1.lfFaceName, L"MS Gothic"); + lf2 = LOGFONT(); + lf2.lfCharSet = DEFAULT_CHARSET; + std::wcscpy(lf2.lfFaceName, L"Meiryo"); + + dc = GetDC(nullptr); + font = CreateFontIndirect(&lf1); + oldFont = (HFONT)SelectObject(dc, font); + } + + void TearDown() override { + SelectObject(dc, oldFont); + DeleteObject(font); + ReleaseDC(nullptr, dc); + } + + LOGFONT lf1; + LOGFONT lf2; + HDC dc; + HFONT font; + HFONT oldFont; +}; + +TEST_F(CharWidthCache, CalcHankakuByFont) +{ + SelectCharWidthCache(CWM_FONT_EDIT, CWM_CACHE_LOCAL); + InitCharWidthCache(lf1); + + EXPECT_TRUE(WCODE::CalcHankakuByFont(L'a')); + EXPECT_FALSE(WCODE::CalcHankakuByFont(L'あ')); +} + +TEST_F(CharWidthCache, CalcPxWidthByFont) +{ + SelectCharWidthCache(CWM_FONT_EDIT, CWM_CACHE_LOCAL); + InitCharWidthCache(lf1); + + SIZE size; + GetTextExtentPoint32(dc, L"a", 1, &size); + EXPECT_EQ(WCODE::CalcPxWidthByFont(L'a'), size.cx); + GetTextExtentPoint32(dc, L"あ", 1, &size); + EXPECT_EQ(WCODE::CalcPxWidthByFont(L'あ'), size.cx); +} + +TEST_F(CharWidthCache, CalcPxWidthByFont2) +{ + SelectCharWidthCache(CWM_FONT_EDIT, CWM_CACHE_LOCAL); + InitCharWidthCache(lf1); + + SIZE size; + GetTextExtentPoint32(dc, L"\xd83c\xdf38", 2, &size); + EXPECT_EQ(WCODE::CalcPxWidthByFont2(L"\xd83c\xdf38"), size.cx); +} + +TEST_F(CharWidthCache, FontNo) +{ + // 文字幅キャッシュには半角と全角とで異なるフォントを指定することができる。 + // ある文字に対して使用するべきフォントを問い合わせたとき、 + // 結果はフォント番号によって表現され、0ならば半角、1ならば全角を意味する。 + + // InitCharWidthCache を使って初期化すると、 + // すべての文字に対して同一フォントを使用することになる。 + SelectCharWidthCache(CWM_FONT_EDIT, CWM_CACHE_LOCAL); + InitCharWidthCache(lf1); + + EXPECT_EQ(WCODE::GetFontNo(L'a'), 0); + EXPECT_EQ(WCODE::GetFontNo(L'あ'), 0); + EXPECT_EQ(WCODE::GetFontNo2(0xd83c, 0xdf38), 0); + + // InitCharWidthCacheFromDC に2つの異なるLOGFONTを与えた場合、 + // それぞれ半角用と全角用として設定される。 + SelectCharWidthCache(CWM_FONT_PRINT, CWM_CACHE_LOCAL); + LOGFONT lfs[] = {lf1, lf2}; + InitCharWidthCacheFromDC(lfs, CWM_FONT_PRINT, dc); + + EXPECT_EQ(WCODE::GetFontNo(L'a'), 0); + EXPECT_EQ(WCODE::GetFontNo(0xe0), 1); // 「à」。Latin-1 は全角扱いらしい…。 + EXPECT_EQ(WCODE::GetFontNo(L'あ'), 1); + EXPECT_EQ(WCODE::GetFontNo2(0xd83c, 0xdf38), 1); +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index bca2f32964..9297387262 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -116,6 +116,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index 9a0174396e..491557c51e 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -95,6 +95,9 @@ Test Files + + Test Files + From 35094db2dbda18a8e25c650a332601bf30ba2db0 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 24 Jan 2021 16:39:21 +0900 Subject: [PATCH 0372/1024] =?UTF-8?q?tchar=5Fvsprintf=E3=82=92=E7=9B=B4?= =?UTF-8?q?=E6=8E=A5=E5=88=A9=E7=94=A8=E3=81=97=E3=81=A6=E3=81=84=E3=82=8B?= =?UTF-8?q?=E7=AE=87=E6=89=80=E3=82=92auto=5Fvsprintf=5Fs=E3=81=AB?= =?UTF-8?q?=E7=BD=AE=E3=81=8D=E6=8F=9B=E3=81=88=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/env/CShareData.cpp | 2 +- sakura_core/util/MessageBoxF.cpp | 2 +- sakura_core/util/tchar_convert.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sakura_core/env/CShareData.cpp b/sakura_core/env/CShareData.cpp index 1c288565d3..e9ee95f581 100644 --- a/sakura_core/env/CShareData.cpp +++ b/sakura_core/env/CShareData.cpp @@ -984,7 +984,7 @@ void CShareData::TraceOut( LPCWSTR lpFmt, ... ) LockGuard guard( CShareData::GetMutexShareWork() ); va_list argList; va_start( argList, lpFmt ); - int ret = tchar_vsnprintf_s( m_pShareData->m_sWorkBuffer.GetWorkBuffer(), + int ret = auto_vsprintf_s( m_pShareData->m_sWorkBuffer.GetWorkBuffer(), m_pShareData->m_sWorkBuffer.GetWorkBufferCount(), lpFmt, argList ); va_end( argList ); if( -1 == ret ){ diff --git a/sakura_core/util/MessageBoxF.cpp b/sakura_core/util/MessageBoxF.cpp index 0aae0bd7ba..2c177b0842 100644 --- a/sakura_core/util/MessageBoxF.cpp +++ b/sakura_core/util/MessageBoxF.cpp @@ -97,7 +97,7 @@ int VMessageBoxF( hwndOwner=GetMessageBoxOwner(hwndOwner); //整形 static WCHAR szBuf[16000]; - tchar_vsnprintf_s(szBuf,_countof(szBuf),lpText,v); + auto_vsprintf_s(szBuf,_countof(szBuf),lpText,v); //API呼び出し return ::MessageBox( hwndOwner, szBuf, lpCaption, uType); } diff --git a/sakura_core/util/tchar_convert.cpp b/sakura_core/util/tchar_convert.cpp index bdd8903256..2fc1982464 100644 --- a/sakura_core/util/tchar_convert.cpp +++ b/sakura_core/util/tchar_convert.cpp @@ -105,7 +105,7 @@ const WCHAR* easy_format(const WCHAR* format, ...) WCHAR* buf=g_bufBig.GetBuffer(1024); va_list v; va_start(v,format); - tchar_vsprintf(buf,format,v); + auto_vsprintf_s(buf,1024,format,v); va_end(v); return buf; } From e76c1f3b486a53438c4c82777a544ac423c164e2 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Tue, 26 Jan 2021 20:12:11 +0900 Subject: [PATCH 0373/1024] =?UTF-8?q?charset/charcode.cpp=20=E3=81=AE?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E6=8B=A1=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-charcode.cpp | 59 +++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/tests/unittests/test-charcode.cpp b/tests/unittests/test-charcode.cpp index 0b1a17073f..21dfc47abc 100644 --- a/tests/unittests/test-charcode.cpp +++ b/tests/unittests/test-charcode.cpp @@ -22,8 +22,10 @@ 3. This notice may not be removed or altered from any source distribution. */ +#define NOMINMAX #include "charset/charcode.h" #include +#include #include #include @@ -55,6 +57,50 @@ class CharWidthCache : public testing::Test { HFONT oldFont; }; +TEST_F(CharWidthCache, IsHankaku) +{ + // IsHankaku は文字が半角であることが既知であれば即trueを返す。 + // 既知の文字の判定がキャッシュに依存していないことを確認するため、 + // ここではキャッシュを初期化しない。 + + // Basic Latin と Control Codes (C0, C1) + for (wchar_t ch = 0x00; ch <= 0xa0; ++ch) { + EXPECT_TRUE(WCODE::IsHankaku(ch)); + } + // 半角カタカナ + for (wchar_t ch = 0xff61; ch <= 0xff9f; ++ch) { + EXPECT_TRUE(WCODE::IsHankaku(ch)); + } + + // ここからは実行時のフォントを基に計算する文字。 + SelectCharWidthCache(CWM_FONT_EDIT, CWM_CACHE_LOCAL); + InitCharWidthCache(lf1); + + // 漢字・ハングル・外字の場合、コード表の一番目の文字の幅がすべての文字に適用される。 + bool kanjiWidth = WCODE::CalcHankakuByFont(L'一'); + + // CJK統合漢字。Unicode 5.1 以降の文字には未対応。 + for (wchar_t ch = 0x4e00; ch <= 0x9fbb; ++ch) { + EXPECT_EQ(WCODE::IsHankaku(ch), kanjiWidth); + } + // CJK統合漢字拡張A。Unicode 13.0 の追加分には対応していない。 + for (wchar_t ch = 0x3400; ch <= 0x4d85; ++ch) { + EXPECT_EQ(WCODE::IsHankaku(ch), kanjiWidth); + } + + // ハングル + bool hangulWidth = WCODE::CalcHankakuByFont(L'가'); + for (wchar_t ch = 0xac00; ch <= 0xd7a3; ++ch) { + EXPECT_EQ(WCODE::IsHankaku(ch), hangulWidth); + } + + // 外字 + bool privateUseWidth = WCODE::CalcHankakuByFont(0xe000); + for (wchar_t ch = 0xe000; ch <= 0xe8ff; ++ch) { + EXPECT_EQ(WCODE::IsHankaku(ch), privateUseWidth); + } +} + TEST_F(CharWidthCache, CalcHankakuByFont) { SelectCharWidthCache(CWM_FONT_EDIT, CWM_CACHE_LOCAL); @@ -74,6 +120,19 @@ TEST_F(CharWidthCache, CalcPxWidthByFont) EXPECT_EQ(WCODE::CalcPxWidthByFont(L'a'), size.cx); GetTextExtentPoint32(dc, L"あ", 1, &size); EXPECT_EQ(WCODE::CalcPxWidthByFont(L'あ'), size.cx); + + // コントロールコードの幅を普通に計算すると1pxになることがあるため、 + // スペース・中黒の幅と比較して大きい方をとることになっている。 + SIZE sizeOfSpace; + GetTextExtentPoint32(dc, L" ", 1, &sizeOfSpace); + SIZE sizeOfNakaguro; + GetTextExtentPoint32(dc, L"・", 1, &sizeOfNakaguro); + + // 理由はわからないが、NULとそれ以外で違う文字の幅を採用している。 + GetTextExtentPoint32(dc, L"\0", 1, &size); + EXPECT_EQ(WCODE::CalcPxWidthByFont('\0'), std::max(size.cx, sizeOfSpace.cx)); + GetTextExtentPoint32(dc, L"\x01", 1, &size); + EXPECT_EQ(WCODE::CalcPxWidthByFont('\x01'), std::max(size.cx, sizeOfNakaguro.cx)); } TEST_F(CharWidthCache, CalcPxWidthByFont2) From 7ce59d86584ef61a0576d4c5d938098aa3695ef0 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 24 Jan 2021 17:55:27 +0900 Subject: [PATCH 0374/1024] =?UTF-8?q?tchar=5Fprintf=E3=82=92=E9=99=A4?= =?UTF-8?q?=E5=8E=BB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura/sakura.vcxproj | 2 - sakura/sakura.vcxproj.filters | 6 - sakura_core/util/string_ex.h | 19 +- sakura_core/util/tchar_printf.cpp | 416 ------------------------------ sakura_core/util/tchar_printf.h | 75 ------ 5 files changed, 9 insertions(+), 509 deletions(-) delete mode 100644 sakura_core/util/tchar_printf.cpp delete mode 100644 sakura_core/util/tchar_printf.h diff --git a/sakura/sakura.vcxproj b/sakura/sakura.vcxproj index 3648312aaa..32d45c0238 100644 --- a/sakura/sakura.vcxproj +++ b/sakura/sakura.vcxproj @@ -524,7 +524,6 @@ - @@ -918,7 +917,6 @@ - diff --git a/sakura/sakura.vcxproj.filters b/sakura/sakura.vcxproj.filters index bdaa5171d5..6e22b49692 100644 --- a/sakura/sakura.vcxproj.filters +++ b/sakura/sakura.vcxproj.filters @@ -505,9 +505,6 @@ Cpp Source Files\util - - Cpp Source Files\util - Cpp Source Files\util @@ -1472,9 +1469,6 @@ Cpp Source Files\util - - Cpp Source Files\util - Cpp Source Files\util diff --git a/sakura_core/util/string_ex.h b/sakura_core/util/string_ex.h index ddf07e1ccf..c59331ada2 100644 --- a/sakura_core/util/string_ex.h +++ b/sakura_core/util/string_ex.h @@ -43,8 +43,6 @@ auto_~: 引数の型により、自動で処理が決定される版 (例: auto_strcpy) */ -#include "util/tchar_printf.h" - // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // メモリ // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // @@ -194,14 +192,15 @@ WCHAR* strtotcs( WCHAR* dest, const ACHAR* src, size_t count ); WCHAR* strtotcs( WCHAR* dest, const WCHAR* src, size_t count ); //印字系 -#define auto_snprintf_s(buf, count, format, ...) tchar_sprintf_s((buf), count, (format), __VA_ARGS__) -#define auto_sprintf(buf, format, ...) tchar_sprintf((buf), (format), __VA_ARGS__) -#define auto_sprintf_s(buf, nBufCount, format, ...) tchar_snprintf_s((buf), nBufCount, (format), __VA_ARGS__) - -inline int auto_vsprintf(ACHAR* buf, const ACHAR* format, va_list& v){ return tchar_vsprintf(buf,format,v); } -inline int auto_vsprintf(WCHAR* buf, const WCHAR* format, va_list& v){ return tchar_vsprintf(buf,format,v); } -inline int auto_vsprintf_s(ACHAR* buf, size_t nBufCount, const ACHAR* format, va_list& v){ return tchar_vsprintf_s(buf, nBufCount, format, v); } -inline int auto_vsprintf_s(WCHAR* buf, size_t nBufCount, const WCHAR* format, va_list& v){ return tchar_vsprintf_s(buf, nBufCount, format, v); } +inline int auto_vsprintf(ACHAR* buf, const ACHAR* format, va_list& v) { return ::vsprintf(buf, format, v); } +inline int auto_vsprintf(WCHAR* buf, const WCHAR* format, va_list& v) { return ::_vswprintf(buf, format, v); } +inline int auto_sprintf(ACHAR* buf, const ACHAR* format, ...) { va_list args; va_start(args, format); const int n = auto_vsprintf(buf, format, args); va_end(args); return n; } +inline int auto_sprintf(WCHAR* buf, const WCHAR* format, ...) { va_list args; va_start(args, format); const int n = auto_vsprintf(buf, format, args); va_end(args); return n; } + +inline int auto_vsprintf_s(ACHAR* buf, size_t nBufCount, const ACHAR* format, va_list& v) { return ::_vsnprintf_s(buf, nBufCount, _TRUNCATE, format, v); } +inline int auto_vsprintf_s(WCHAR* buf, size_t nBufCount, const WCHAR* format, va_list& v) { return ::_vsnwprintf_s(buf, nBufCount, _TRUNCATE, format, v); } +#define auto_sprintf_s(buf, nBufCount, format, ...) ::_sntprintf_s((buf), nBufCount, _TRUNCATE, (format), __VA_ARGS__) +#define auto_snprintf_s(buf, nBufCount, format, ...) ::_sntprintf_s((buf), nBufCount, _TRUNCATE, (format), __VA_ARGS__) int vstrprintf( std::wstring& strOut, const WCHAR* pszFormat, va_list& argList ); int strprintf( std::wstring& strOut, const WCHAR* pszFormat, ... ); diff --git a/sakura_core/util/tchar_printf.cpp b/sakura_core/util/tchar_printf.cpp deleted file mode 100644 index c909c13fe5..0000000000 --- a/sakura_core/util/tchar_printf.cpp +++ /dev/null @@ -1,416 +0,0 @@ -/*! @file */ -/* - Copyright (C) 2008, kobake - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; - you must not claim that you wrote the original software. - If you use this software in a product, an acknowledgment - in the product documentation would be appreciated but is - not required. - - 2. Altered source versions must be plainly marked as such, - and must not be misrepresented as being the original software. - - 3. This notice may not be removed or altered from any source - distribution. -*/ - -#include "StdAfx.h" -#include "tchar_printf.h" -#include "util/tchar_template.h" - -#define MAX_BUF 0x7FFFFFFF - -//テンプレートで TEXT 使えれば、こんな汚いコピペしなくて済むのに… -template -inline bool is_field_begin(T c) -{ - return c==_T2(T,'%'); -} - -//書式指定: flag -template -inline const T* skip_field_flag(const T* p) -{ - while(*p){ - T c=*p; - if(c==_T2(T,'-') || c==_T2(T,'+') || c==_T2(T,'0') || c==_T2(T,' ') || c==_T2(T,'#')){ p++; continue; } - break; - } - return p; -} - -//書式指定: width -template -inline const T* skip_field_width(const T* p) -{ - if(*p>=_T2(T,'1') && *p<=_T2(T,'9'))p++; else return p; //一桁目は0を受け付けない - while(*p>=_T2(T,'0') && *p<=_T2(T,'9'))p++; - return p; -} - -//書式指定: precision -template -inline const T* skip_field_precision(const T* p) -{ - if(*p==_T2(T,'.'))p++; else return p; //ドットで始まる文字列のみ受け付ける - while(*p>=_T2(T,'0') && *p<=_T2(T,'9'))p++; //よくわからんのでとりあえず全数字を受け付ける - return p; -} - -//書式指定: prefix -template -inline const T* skip_field_prefix(const T* p) -{ - if(*p==_T2(T,'t'))return p+1; //独自拡張 - if(*p==_T2(T,'h'))return p+1; - if(p[0]==_T2(T,'l') && p[1]==_T2(T,'l'))return p+2; - if(*p==_T2(T,'l'))return p+1; - if(p[0]==_T2(T,'I') && p[1]==_T2(T,'3') && p[2]==_T2(T,'2'))return p+3; - if(p[0]==_T2(T,'I') && p[1]==_T2(T,'6') && p[2]==_T2(T,'4'))return p+3; - if(*p==_T2(T,'I'))return p+1; - return p; -} - -//書式指定: type -inline bool is_field_type(char c) -{ - return strchr("cCdiouxXeEfgGaAnpsS",c)!=NULL; -} -inline bool is_field_type(wchar_t c) -{ - return wcschr(L"cCdiouxXeEfgGaAnpsS",c)!=NULL; -} - -//vsprintf_s API -static inline int local_vsprintf_s(char* buf, size_t nBufCount, const char* format, va_list& v) -{ - return vsprintf_s(buf,nBufCount,format,v); -} - -static inline int local_vsprintf_s(wchar_t* buf, size_t nBufCount, const wchar_t* format, va_list& v) -{ - return vswprintf_s(buf,nBufCount,format,v); -} - -//vsprintf API -static inline int local_vsprintf(char* buf, const char* format, va_list& v) -{ - return vsprintf(buf,format,v); -} - -static inline int local_vsprintf(wchar_t* buf, const wchar_t* format, va_list& v) -{ - return _vswprintf(buf,format,v); -} - -//vsnprintf_s API -static inline int local_vsnprintf_s(char* buf, size_t nBufCount, const char* format, va_list& v) -{ - return vsnprintf_s(buf,nBufCount,_TRUNCATE,format,v); -} - -static inline int local_vsnprintf_s(wchar_t* buf, size_t nBufCount, const wchar_t* format, va_list& v) -{ - return _vsnwprintf_s(buf,nBufCount,_TRUNCATE,format,v); -} - -static void my_va_forward(va_list& v, const char* field, const char* prefix) -{ - if(*field==0)return; - const char* field_end=auto_strchr(field,0)-1; - switch(*field_end){ - case 's': - case 'S': - case 'p': - va_arg(v,void*); - break; - case 'd': - case 'i': - case 'o': - case 'u': - case 'x': - case 'X': - { - // 2014.06.12 64bit値対応 - const char *p = prefix; - if( p[0]=='I' && p[1]=='6' && p[2]=='4' ){ - va_arg(v,LONGLONG); - }else{ - va_arg(v,int); - } - } - break; - case 'c': - if(field_end-1>=field && *(field_end-1)=='w')va_arg(v,int); // wchar_t - else if(field_end-1>=field && *(field_end-1)=='l')va_arg(v,int); // wchar_t - else va_arg(v,int); - break; - case 'C': - if(field_end-1>=field && *(field_end-1)=='h')va_arg(v,int); - else va_arg(v,int); // wchar_t - break; - case 'e': - case 'E': - case 'f': - case 'g': - case 'G': - case 'a': - case 'A': - va_arg(v,double); - break; - } -} -static void my_va_forward(va_list& v, const wchar_t* field, const wchar_t* prefix) -{ - if(*field==0)return; - const wchar_t* field_end=auto_strchr(field,0)-1; - switch(*field_end){ - case L's': - case L'S': - case L'p': - va_arg(v,void*); - break; - case L'd': - case L'i': - case L'o': - case L'u': - case L'x': - case L'X': - // 2014.06.12 64bit値対応 - { - const wchar_t *p = prefix; - if( p[0]==L'I' && p[1]==L'6' && p[2]==L'4' ){ - va_arg(v,LONGLONG); - }else{ - va_arg(v,int); - } - } - break; - case 'c': - if(field_end-1>=field && *(field_end-1)==L'h')va_arg(v,int); - else va_arg(v,int); - break; - case 'C': - if(field_end-1>=field && *(field_end-1)==L'l')va_arg(v,int); // wchar_t - else if(field_end-1>=field && *(field_end-1)==L'w')va_arg(v,int); // wchar_t - else va_arg(v,int); - break; - case L'e': - case L'E': - case L'f': - case L'g': - case L'G': - case L'a': - case L'A': - va_arg(v,double); - break; - } -} - -static void field_convert(char* src) -{ - if(strncmp_literal(src,"%ts")==0 || strncmp_literal(src,"%tc")==0){ - src[1]='l'; - } -} - -static void field_convert(wchar_t* src) -{ - if(wcsncmp_literal(src,L"%ts")==0 || wcsncmp_literal(src,L"%tc")==0){ - src[1]=L'l'; - } -} - -//"%ts","%tc"をサポート -//※日本語考慮しない。(UNICODE版ではこれで問題が発生しない) -template -int tchar_vsprintf_s_imp(T* buf, size_t nBufCount, const T* format, va_list& v, bool truncate) -{ - T* buf_end=buf+nBufCount; //変換リミット - - T* dst=buf; //変換先ワーク変数 - const T* src=format; //変換元ワーク変数 - while(*src){ - if(nBufCount!=MAX_BUF && dst>=buf_end-1)break; - //書式指定フィールドを取得 - if(is_field_begin(*src)){ - const T* field_begin=src; - src++; - src=skip_field_flag(src); - src=skip_field_width(src); - src=skip_field_precision(src); - const T* prefix = src; - src=skip_field_prefix(src); - - if(is_field_type(*src)){ - src++; - const T* field_end=src; - - //フィールドを一時変数にコピー - T field[64]; - if(field_end-field_begin>=_countof(field))field_end=field_begin+_countof(field)-1; //フィールド長制限 - auto_strncpy(field,field_begin,field_end-field_begin); - field[field_end-field_begin] = 0; - - //フィールド内に%tsまたは%tcがあったら、適切に変換 - field_convert(field); - - //変換処理は標準ライブラリに委譲 - int ret; - va_list tmp_v=v; //※vをコピーして用いる - if(truncate){ - ret=local_vsnprintf_s(dst,buf_end-dst,field,tmp_v); - if( ret<0 ){ - //バッファに入りきらない文字列が切り捨てられた - return -1; - } - } - else if(nBufCount!=MAX_BUF){ - ret=local_vsprintf_s(dst,buf_end-dst,field,tmp_v); - } - else{ - ret=local_vsprintf(dst,field,tmp_v); - } - - //vを進める。自信なっしんぐ - my_va_forward(v,field, prefix); - - //変換先ワークポインタを進める - if(ret!=-1){ - dst+=ret; - } - src=field_end; - } - else{ - //有効な型フィールドではなかったので、そのまんま出力しちゃう - *dst++ = *src++; - } - } - else{ - //無変換 - *dst++ = *src++; - } - } - //終端 - *dst = 0; - - if( truncate && *src != '\0' ){ //切り詰めありで、srcの処理が完了していない場合 - return -1; //切り詰められた - } - return dst-buf; -} - -int tchar_vsprintf_s(ACHAR* buf, size_t nBufCount, const ACHAR* format, va_list& v) -{ - return tchar_vsprintf_s_imp(buf,nBufCount,format,v,false); -} - -int tchar_vsprintf_s(WCHAR* buf, size_t nBufCount, const WCHAR* format, va_list& v) -{ - return tchar_vsprintf_s_imp(buf,nBufCount,format,v,false); -} - -// vsprintfラップ -// ※bufに十分な容量があることに自信があるときだけ、使ってください。 -// -int tchar_vsprintf(ACHAR* buf, const ACHAR* format, va_list& v) -{ - return tchar_vsprintf_s(buf,MAX_BUF,format,v); -} -int tchar_vsprintf(WCHAR* buf, const WCHAR* format, va_list& v) -{ - return tchar_vsprintf_s(buf,MAX_BUF,format,v); -} - -// vsnprintf_sラップ -// バッファが出力文字列より小さい場合は可能な限り出力して末尾に\0を付け、戻り値-1で返ります。 -// -int tchar_vsnprintf_s(ACHAR* buf, size_t nBufCount, const ACHAR* format, va_list& v) -{ - return tchar_vsprintf_s_imp(buf,nBufCount,format,v,true); -} -int tchar_vsnprintf_s(WCHAR* buf, size_t nBufCount, const WCHAR* format, va_list& v) -{ - return tchar_vsprintf_s_imp(buf,nBufCount,format,v,true); -} - -// sprintf_sラップ -// -// (実装について) -// 内容が同じなので、templateでも良かったのですが、 -// そうすると、ACHAR, WCHAR 以外の型からの暗黙で安全なキャストが -// 効かなくなり、コーディングが不便になるため、 -// あえて、ACHAR, WCHAR で関数をひとつずつ定義しています。 -// -int tchar_sprintf_s(ACHAR* buf, size_t nBufCount, const ACHAR* format, ...) -{ - va_list v; - va_start(v,format); - int ret=tchar_vsprintf_s(buf,nBufCount,format,v); - va_end(v); - return ret; -} -int tchar_sprintf_s(WCHAR* buf, size_t nBufCount, const WCHAR* format, ...) -{ - va_list v; - va_start(v,format); - int ret=tchar_vsprintf_s(buf,nBufCount,format,v); - va_end(v); - return ret; -} - -// sprintfラップ -// ※bufに十分な容量があることに自信があるときだけ、使ってください。 -// -// (実装について) -// 内容が同じなので、templateでも良かったのですが、 -// そうすると、ACHAR, WCHAR 以外の型からの暗黙で安全なキャストが -// 効かなくなり、コーディングが不便になるため、 -// あえて、ACHAR, WCHAR で関数をひとつずつ定義しています。 -// -int tchar_sprintf(ACHAR* buf, const ACHAR* format, ...) -{ - va_list v; - va_start(v,format); - int ret=tchar_vsprintf_s(buf,MAX_BUF,format,v); - va_end(v); - return ret; -} - -int tchar_sprintf(WCHAR* buf, const WCHAR* format, ...) -{ - va_list v; - va_start(v,format); - int ret=tchar_vsprintf_s(buf,MAX_BUF,format,v); - va_end(v); - return ret; -} - -// snprintf_sラップ -// バッファが出力文字列より小さい場合は可能な限り出力して末尾に\0を付け、戻り値-1で返ります。 -// -int tchar_snprintf_s(ACHAR* buf, size_t count, const ACHAR* format, ...) -{ - va_list v; - va_start(v,format); - int ret=tchar_vsprintf_s(buf,count,format,v); - va_end(v); - return ret; -} -int tchar_snprintf_s(WCHAR* buf, size_t count, const WCHAR* format, ...) -{ - va_list v; - va_start(v,format); - int ret=tchar_vsprintf_s(buf,count,format,v); - va_end(v); - return ret; -} diff --git a/sakura_core/util/tchar_printf.h b/sakura_core/util/tchar_printf.h deleted file mode 100644 index 573f7f472d..0000000000 --- a/sakura_core/util/tchar_printf.h +++ /dev/null @@ -1,75 +0,0 @@ -/*! @file */ -// printf系ラップ関数群 -// 2007.09.20 kobake 作成。 -// -// 重要な特徴として、独自のフィールド "%ts" および "%tc" を認識して処理する、という点があります。 -// UNICODEビルドでは "%ts", "%tc" はそれぞれ "%ls", %lc" として認識され、 -// ANSIビルドでは "%ts", "%tc" はそれぞれ "%hs", %hc" として認識されます。 -// -// "%s", "%c" は使用関数により型が変わり、char, wchar_t が混在するコーディング環境ではバグの元となりやすいので、 -// できるだけ、上に記したような明示的な型指定をしたフィールドを用いてください。 -// -// 注意:%10ts %.12ts のようなものは未サポート -// -// ++ ++ 改善案 ++ ++ -// -// あくまでも標準ライブラリ動作を「ラップ」しているだけなので、 -// そのラップ処理分、パフォーマンスは悪いです。 -// 標準ライブラリに頼らずに全て自前で実装すれば、標準ライブラリ並みのパフォーマンスが得られるはずです。 -// -// ちょっと関数名が分かりにくいので、もっと良い名前募集。 -// 今のままだと、上記説明を読まなければ、_tsprintf とかと何が違うの?と思われちゃいそう。。。 -// -// プロジェクト全体がTCHARに頼らないのであれば、これらの関数群は不要。 -// -/* - Copyright (C) 2008, kobake - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; - you must not claim that you wrote the original software. - If you use this software in a product, an acknowledgment - in the product documentation would be appreciated but is - not required. - - 2. Altered source versions must be plainly marked as such, - and must not be misrepresented as being the original software. - - 3. This notice may not be removed or altered from any source - distribution. -*/ -#ifndef SAKURA_TCHAR_PRINTF_A728AFEF_DAD4_4967_8654_BF6DB52EDCD9_H_ -#define SAKURA_TCHAR_PRINTF_A728AFEF_DAD4_4967_8654_BF6DB52EDCD9_H_ -#pragma once - -// vsprintf_sラップ -int tchar_vsprintf_s(ACHAR* buf, size_t nBufCount, const ACHAR* format, va_list& v); -int tchar_vsprintf_s(WCHAR* buf, size_t nBufCount, const WCHAR* format, va_list& v); - -// vsprintfラップ -int tchar_vsprintf(ACHAR* buf, const ACHAR* format, va_list& v); -int tchar_vsprintf(WCHAR* buf, const WCHAR* format, va_list& v); - -// vsnprintf_sラップ -int tchar_vsnprintf_s(ACHAR* buf, size_t nBufCount, const ACHAR* format, va_list& v); -int tchar_vsnprintf_s(WCHAR* buf, size_t nBufCount, const WCHAR* format, va_list& v); - -// sprintf_sラップ -int tchar_sprintf_s(ACHAR* buf, size_t nBufCount, const ACHAR* format, ...); -int tchar_sprintf_s(WCHAR* buf, size_t nBufCount, const WCHAR* format, ...); - -// sprintfラップ -int tchar_sprintf(ACHAR* buf, const ACHAR* format, ...); -int tchar_sprintf(WCHAR* buf, const WCHAR* format, ...); - -// _snprintf_sラップ -int tchar_snprintf_s(ACHAR* buf, size_t count, const ACHAR* format, ...); -int tchar_snprintf_s(WCHAR* buf, size_t count, const WCHAR* format, ...); -#endif /* SAKURA_TCHAR_PRINTF_A728AFEF_DAD4_4967_8654_BF6DB52EDCD9_H_ */ From 99bf5ea5c1ee2366903a58c4feddbbeaa60e6eba Mon Sep 17 00:00:00 2001 From: berryzplus Date: Tue, 26 Jan 2021 19:52:32 +0900 Subject: [PATCH 0375/1024] =?UTF-8?q?=E6=9C=AA=E4=BD=BF=E7=94=A8=E9=96=A2?= =?UTF-8?q?=E6=95=B0easy=5Fformat=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修正箇所を通るテストを書こうとしたところ、未使用関数であることが判明したため。 --- sakura_core/util/tchar_convert.cpp | 10 ---------- sakura_core/util/tchar_convert.h | 2 -- 2 files changed, 12 deletions(-) diff --git a/sakura_core/util/tchar_convert.cpp b/sakura_core/util/tchar_convert.cpp index 2fc1982464..b8070fac7a 100644 --- a/sakura_core/util/tchar_convert.cpp +++ b/sakura_core/util/tchar_convert.cpp @@ -99,13 +99,3 @@ const ACHAR* to_achar(const WCHAR* pSrc, int nSrcLength) return pDst; } - -const WCHAR* easy_format(const WCHAR* format, ...) -{ - WCHAR* buf=g_bufBig.GetBuffer(1024); - va_list v; - va_start(v,format); - auto_vsprintf_s(buf,1024,format,v); - va_end(v); - return buf; -} diff --git a/sakura_core/util/tchar_convert.h b/sakura_core/util/tchar_convert.h index 10ae17d365..55c313f218 100644 --- a/sakura_core/util/tchar_convert.h +++ b/sakura_core/util/tchar_convert.h @@ -36,6 +36,4 @@ const ACHAR* to_achar(const ACHAR* src){ return src; } const ACHAR* to_achar(const WCHAR* src); const ACHAR* to_achar(const WCHAR* pSrc, int nSrcLength); -//その他 -const WCHAR* easy_format(const WCHAR* format, ...); #endif /* SAKURA_TCHAR_CONVERT_2F41312D_27C8_4366_89F5_046BF7ED3B32_H_ */ From 502bbc8cff2ffdc2a2876981e26e70c5ff39daec Mon Sep 17 00:00:00 2001 From: berryzplus Date: Tue, 26 Jan 2021 19:54:30 +0900 Subject: [PATCH 0376/1024] =?UTF-8?q?=E6=9C=AA=E4=BD=BF=E7=94=A8=E9=96=A2?= =?UTF-8?q?=E6=95=B0CShareData::TraceOut=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修正箇所を通るテストを書こうとしたところ、未使用関数であることが判明したため。 スクリプト関数TraceOutはCShareData::TraceOutStringを呼び出しているので削っても問題ない。 --- sakura_core/env/CShareData.cpp | 31 ------------------------------- sakura_core/env/CShareData.h | 1 - 2 files changed, 32 deletions(-) diff --git a/sakura_core/env/CShareData.cpp b/sakura_core/env/CShareData.cpp index e9ee95f581..68f299d2f3 100644 --- a/sakura_core/env/CShareData.cpp +++ b/sakura_core/env/CShareData.cpp @@ -968,37 +968,6 @@ BOOL CShareData::ActiveAlreadyOpenedWindow( const WCHAR* pszPath, HWND* phwndOwn } } -/*! - アウトプットウインドウに出力(書式付) - - アウトプットウインドウが無ければオープンする - @param lpFmt [in] 書式指定文字列(wchar_t版) - @date 2010.02.22 Moca auto_vsprintfから tchar_vsnprintf_s に変更.長すぎるときは切り詰められる -*/ -void CShareData::TraceOut( LPCWSTR lpFmt, ... ) -{ - if( false == OpenDebugWindow( m_hwndTraceOutSource, false ) ){ - return; - } - - LockGuard guard( CShareData::GetMutexShareWork() ); - va_list argList; - va_start( argList, lpFmt ); - int ret = auto_vsprintf_s( m_pShareData->m_sWorkBuffer.GetWorkBuffer(), - m_pShareData->m_sWorkBuffer.GetWorkBufferCount(), lpFmt, argList ); - va_end( argList ); - if( -1 == ret ){ - // 切り詰められた - ret = wcslen( m_pShareData->m_sWorkBuffer.GetWorkBuffer() ); - }else if( ret < 0 ){ - // 保護コード:受け側はwParam→size_tで符号なしのため - ret = 0; - } - DWORD_PTR dwMsgResult; - ::SendMessageTimeout( m_pShareData->m_sHandles.m_hwndDebug, MYWM_ADDSTRINGLEN_W, ret, 0, - SMTO_NORMAL, 10000, &dwMsgResult ); -} - /*! アウトプットウインドウに出力(文字列指定) diff --git a/sakura_core/env/CShareData.h b/sakura_core/env/CShareData.h index 0be89236c3..3ee960297e 100644 --- a/sakura_core/env/CShareData.h +++ b/sakura_core/env/CShareData.h @@ -74,7 +74,6 @@ class CShareData : public TSingleton BOOL ActiveAlreadyOpenedWindow( const WCHAR* pszPath, HWND* phwndOwner, ECodeType nCharCode );/* 指定ファイルが開かれているか調べつつ、多重オープン時の文字コード衝突も確認 */ // 2007.03.16 //デバッグ 今は主にマクロ・外部コマンド実行用 - void TraceOut( LPCWSTR lpFmt, ...); /* アウトプットウィンドウに出力(printfフォーマット) */ void TraceOutString( const wchar_t* pszStr, int len = -1); /* アウトプットウィンドウに出力(未加工文字列) */ void SetTraceOutSource( HWND hwnd ){ m_hwndTraceOutSource = hwnd; } /* TraceOut起動元ウィンドウの設定 */ bool OpenDebugWindow( HWND hwnd, bool bAllwaysActive ); //!< デバッグウィンドウを開く From c2dcc666a6888b72599831606466fe11eaa1c603 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Tue, 26 Jan 2021 20:16:00 +0900 Subject: [PATCH 0377/1024] =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-string_ex.cpp | 119 +++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) diff --git a/tests/unittests/test-string_ex.cpp b/tests/unittests/test-string_ex.cpp index 97d04cb8fe..c156f9a6ea 100644 --- a/tests/unittests/test-string_ex.cpp +++ b/tests/unittests/test-string_ex.cpp @@ -34,9 +34,128 @@ #include "basis/primitive.h" #include "util/string_ex.h" +/*! + @breaf 旧コード互換用。可能であれば使わないでください。 + + 代替関数は strnlen か std::char_traits::length です。 + */ +TEST(string_ex, auto_strlenA) +{ + ASSERT_EQ(3, auto_strlen("abc")); +} + +/*! + @breaf 旧コード互換用。可能であれば使わないでください。 + + 代替関数は wcsnlen か std::char_traits::length です。 + */ +TEST(string_ex, auto_strlenW) +{ + ASSERT_EQ(3, auto_strlen(L"abc")); +} + +/*! + @breaf 旧コード互換用。可能であれば使わないでください。 + + 代替関数はないのでロジックを見直してください。 + */ +TEST(string_ex, auto_strchrA) +{ + constexpr const char test_data[] = "abc"; + ASSERT_EQ(&test_data[1], auto_strchr(test_data, test_data[1])); +} + +/*! + @breaf 旧コード互換用。可能であれば使わないでください。 + + 代替関数はないのでロジックを見直してください。 + */ +TEST(string_ex, auto_strchrW) +{ + constexpr const wchar_t test_data[] = L"abc"; + ASSERT_EQ(&test_data[1], auto_strchr(test_data, test_data[1])); +} + +/*! + @breaf 旧コード互換用。使わないでください。 + + 代替関数は snprintf_s か auto_sprintf_s です。 + 可能であれば 非Unicodeな文字列 を扱うコードを書かないでください。 + */ +TEST(string_ex, auto_sprintfA) +{ + std::string text(_MAX_PATH, L'\0'); + auto_sprintf(text.data(), "%s-%d", "test", 101); + ASSERT_STREQ("test-101", text.data()); +} + +/*! + @breaf 旧コード互換用。使わないでください。 + + 代替関数は strprintf か _swnprintf_s か auto_sprintf_s です。 + */ +TEST(string_ex, auto_sprintfW) +{ + std::wstring text(_MAX_PATH, L'\0'); + auto_sprintf(text.data(), L"%s-%d", L"test", 101); + ASSERT_STREQ(L"test-101", text.data()); +} + TEST(string_ex, strprintf) { std::wstring text; strprintf(text, L"%s-%d", L"test", 101); ASSERT_STREQ(L"test-101", text.c_str()); } + +/*! + @breaf 独自定義の文字列比較関数。 + */ +TEST(string_ex, strncmp_literal) +{ + constexpr const char test_data1[] = "abc"; + constexpr const char test_data2[] = "abc"; + constexpr const char test_data3[] = "xyz"; + ASSERT_EQ(0, strncmp_literal(test_data1, test_data2)); + ASSERT_GT(0, strncmp_literal(test_data1, test_data3)); + ASSERT_LT(0, strncmp_literal(test_data3, test_data1)); +} + +/*! + @breaf 独自定義の文字列比較関数。 + */ +TEST(string_ex, wcsncmp_literal) +{ + constexpr const wchar_t test_data1[] = L"abc"; + constexpr const wchar_t test_data2[] = L"abc"; + constexpr const wchar_t test_data3[] = L"xyz"; + ASSERT_EQ(0, wcsncmp_literal(test_data1, test_data2)); + ASSERT_GT(0, wcsncmp_literal(test_data1, test_data3)); + ASSERT_LT(0, wcsncmp_literal(test_data3, test_data1)); +} + +/*! + @breaf 独自定義の文字列比較関数。 + */ +TEST(string_ex, strnicmp_literal) +{ + constexpr const char test_data1[] = "abc"; + constexpr const char test_data2[] = "ABC"; + constexpr const char test_data3[] = "xyz"; + ASSERT_EQ(0, strnicmp_literal(test_data1, test_data2)); + ASSERT_GT(0, strnicmp_literal(test_data1, test_data3)); + ASSERT_LT(0, strnicmp_literal(test_data3, test_data1)); +} + +/*! + @breaf 独自定義の文字列比較関数。 + */ +TEST(string_ex, wcsnicmp_literal) +{ + constexpr const wchar_t test_data1[] = L"abc"; + constexpr const wchar_t test_data2[] = L"ABC"; + constexpr const wchar_t test_data3[] = L"xyz"; + ASSERT_EQ(0, wcsnicmp_literal(test_data1, test_data2)); + ASSERT_GT(0, wcsnicmp_literal(test_data1, test_data3)); + ASSERT_LT(0, wcsnicmp_literal(test_data3, test_data1)); +} From 6cf46925916e239d19dc86f6ae910784043bf38f Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Tue, 26 Jan 2021 21:43:37 +0900 Subject: [PATCH 0378/1024] =?UTF-8?q?charset/charcode.h=20=E3=81=AE?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-charcode.cpp | 186 ++++++++++++++++++++++++++++++ 1 file changed, 186 insertions(+) diff --git a/tests/unittests/test-charcode.cpp b/tests/unittests/test-charcode.cpp index 21dfc47abc..67c238f9ae 100644 --- a/tests/unittests/test-charcode.cpp +++ b/tests/unittests/test-charcode.cpp @@ -26,6 +26,7 @@ #include "charset/charcode.h" #include #include +#include #include #include @@ -171,3 +172,188 @@ TEST_F(CharWidthCache, FontNo) EXPECT_EQ(WCODE::GetFontNo(L'あ'), 1); EXPECT_EQ(WCODE::GetFontNo2(0xd83c, 0xdf38), 1); } + +TEST(charcode, IS_KEYWORD_CHAR) +{ + for (wchar_t ch = 0; ch < _countof(gm_keyword_char); ++ch) { + EXPECT_EQ(IS_KEYWORD_CHAR(ch), + gm_keyword_char[ch] == CK_CSYM || gm_keyword_char[ch] == CK_UDEF); + } +} + +// 以下、関数が判定している文字がすべてASCII範囲内であれば、テーブルを使って総当たりする。 +// ASCII範囲外の文字が含まれる関数については適宜テストケースを手書きして対応。 + +TEST(charcode, IsAZ) +{ + constexpr std::array table = { + false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, + true, false, false, false, false, false, false, true, true, true, + true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, + true, true, true, false, false, false, false, false + }; + for (wchar_t ch = 0; ch < table.size(); ++ch) { + EXPECT_EQ(WCODE::IsAZ(ch), table[ch]); + } +} + +TEST(charcode, Is09) +{ + constexpr std::array table = { + false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, true, true, + true, true, true, true, true, true, true, true, false, false, + false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false + }; + for (wchar_t ch = 0; ch < table.size(); ++ch) { + EXPECT_EQ(WCODE::Is09(ch), table[ch]); + } +} + +TEST(charcode, IsInRange) +{ + EXPECT_FALSE(WCODE::IsInRange(1, 2, 4)); + EXPECT_TRUE(WCODE::IsInRange(2, 2, 4)); + EXPECT_TRUE(WCODE::IsInRange(3, 2, 4)); + EXPECT_TRUE(WCODE::IsInRange(4, 2, 4)); + EXPECT_FALSE(WCODE::IsInRange(5, 2, 4)); +} + +TEST(charcode, IsZenkaku) +{ + EXPECT_FALSE(WCODE::IsZenkaku(L'a')); + EXPECT_TRUE(WCODE::IsZenkaku(L'あ')); +} + +TEST(charcode, IsLineDelimiter) +{ + EXPECT_TRUE(WCODE::IsLineDelimiter(0x0d, false)); + EXPECT_TRUE(WCODE::IsLineDelimiter(0x0a, false)); + EXPECT_FALSE(WCODE::IsLineDelimiter(0x85, false)); + EXPECT_FALSE(WCODE::IsLineDelimiter(0x2028, false)); + EXPECT_FALSE(WCODE::IsLineDelimiter(0x2029, false)); + + EXPECT_TRUE(WCODE::IsLineDelimiter(0x0d, true)); + EXPECT_TRUE(WCODE::IsLineDelimiter(0x0a, true)); + EXPECT_TRUE(WCODE::IsLineDelimiter(0x85, true)); + EXPECT_TRUE(WCODE::IsLineDelimiter(0x2028, true)); + EXPECT_TRUE(WCODE::IsLineDelimiter(0x2029, true)); + + EXPECT_FALSE(WCODE::IsLineDelimiter(L'a', false)); + EXPECT_FALSE(WCODE::IsLineDelimiter(L'a', true)); +} + +TEST(charcode, IsLineDelimiterBasic) +{ + EXPECT_TRUE(WCODE::IsLineDelimiterBasic(0x0d)); + EXPECT_TRUE(WCODE::IsLineDelimiterBasic(0x0a)); + EXPECT_FALSE(WCODE::IsLineDelimiterBasic(0x85)); + EXPECT_FALSE(WCODE::IsLineDelimiterBasic(0x2028)); + EXPECT_FALSE(WCODE::IsLineDelimiterBasic(0x2029)); + EXPECT_FALSE(WCODE::IsLineDelimiterBasic(L'a')); +} + +TEST(charcode, IsLineDelimiterExt) { + EXPECT_TRUE(WCODE::IsLineDelimiterExt(0x0d)); + EXPECT_TRUE(WCODE::IsLineDelimiterExt(0x0a)); + EXPECT_TRUE(WCODE::IsLineDelimiterExt(0x85)); + EXPECT_TRUE(WCODE::IsLineDelimiterExt(0x2028)); + EXPECT_TRUE(WCODE::IsLineDelimiterExt(0x2029)); + EXPECT_FALSE(WCODE::IsLineDelimiterExt(L'a')); +} + +TEST(charcode, IsWordDelimiter) +{ + EXPECT_TRUE(WCODE::IsWordDelimiter(L' ')); + EXPECT_TRUE(WCODE::IsWordDelimiter(L'\t')); + EXPECT_TRUE(WCODE::IsWordDelimiter(L' ')); + EXPECT_FALSE(WCODE::IsWordDelimiter(L'a')); + EXPECT_FALSE(WCODE::IsWordDelimiter(L'あ')); +} + +TEST(charcode, IsIndentChar) +{ + EXPECT_TRUE(WCODE::IsIndentChar(L' ', false)); + EXPECT_TRUE(WCODE::IsIndentChar(L'\t', false)); + EXPECT_FALSE(WCODE::IsIndentChar(L' ', false)); + + EXPECT_TRUE(WCODE::IsIndentChar(L' ', true)); + EXPECT_TRUE(WCODE::IsIndentChar(L'\t', true)); + EXPECT_TRUE(WCODE::IsIndentChar(L' ', true)); + + EXPECT_FALSE(WCODE::IsIndentChar(L'a', false)); + EXPECT_FALSE(WCODE::IsIndentChar(L'あ', false)); + EXPECT_FALSE(WCODE::IsIndentChar(L'a', true)); + EXPECT_FALSE(WCODE::IsIndentChar(L'あ', true)); +} + +TEST(charcode, IsBlank) +{ + EXPECT_TRUE(WCODE::IsBlank(L' ')); + EXPECT_TRUE(WCODE::IsBlank(L'\t')); + EXPECT_TRUE(WCODE::IsBlank(L' ')); + EXPECT_FALSE(WCODE::IsBlank(L'a')); + EXPECT_FALSE(WCODE::IsBlank(L'あ')); +} + +TEST(charcode, IsValidFileNameChar) +{ + constexpr std::array table = { + false, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, + true, true, true, true, false, true, true, true, true, true, + true, true, false, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, + false, true, false, false, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, + true, true, true, true, false, true, true, true + }; + for (wchar_t ch = 0; ch < table.size(); ++ch) { + EXPECT_EQ(WCODE::IsValidFilenameChar(ch), table[ch]); + } +} + +TEST(charcode, IsTabAvailableCode) +{ + constexpr std::array table = { + false, true, true, true, true, true, true, true, true, false, + false, true, true, false, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true + }; + for (wchar_t ch = 0; ch < table.size(); ++ch) { + EXPECT_EQ(WCODE::IsTabAvailableCode(ch), table[ch]); + } +} From f52f68c14c2b9053fc6e7b8e2b9d2f6a753f9711 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Tue, 26 Jan 2021 23:26:23 +0900 Subject: [PATCH 0379/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E3=81=AB=E5=AF=BE=E5=BF=9C:=20=E3=83=86?= =?UTF-8?q?=E3=83=BC=E3=83=96=E3=83=AB=E3=81=AE=E4=BB=A3=E3=82=8F=E3=82=8A?= =?UTF-8?q?=E3=81=AB=E5=88=A4=E5=AE=9A=E5=AF=BE=E8=B1=A1=E6=96=87=E5=AD=97?= =?UTF-8?q?=E5=88=97=E3=82=92=E8=A8=98=E8=BF=B0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-charcode.cpp | 84 ++++++------------------------- 1 file changed, 14 insertions(+), 70 deletions(-) diff --git a/tests/unittests/test-charcode.cpp b/tests/unittests/test-charcode.cpp index 67c238f9ae..d86a784c83 100644 --- a/tests/unittests/test-charcode.cpp +++ b/tests/unittests/test-charcode.cpp @@ -26,8 +26,8 @@ #include "charset/charcode.h" #include #include -#include #include +#include #include class CharWidthCache : public testing::Test { @@ -181,50 +181,22 @@ TEST(charcode, IS_KEYWORD_CHAR) } } -// 以下、関数が判定している文字がすべてASCII範囲内であれば、テーブルを使って総当たりする。 +// 以下、関数が判定している文字がすべてASCII範囲内であれば総当たりテストを実施する。 // ASCII範囲外の文字が含まれる関数については適宜テストケースを手書きして対応。 TEST(charcode, IsAZ) { - constexpr std::array table = { - false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, true, true, true, true, true, - true, true, true, true, true, true, true, true, true, true, - true, true, true, true, true, true, true, true, true, true, - true, false, false, false, false, false, false, true, true, true, - true, true, true, true, true, true, true, true, true, true, - true, true, true, true, true, true, true, true, true, true, - true, true, true, false, false, false, false, false - }; - for (wchar_t ch = 0; ch < table.size(); ++ch) { - EXPECT_EQ(WCODE::IsAZ(ch), table[ch]); + const std::wstring chars = L"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + for (wchar_t ch = 0; ch < 128; ++ch) { + EXPECT_EQ(WCODE::IsAZ(ch), chars.find(ch) != std::wstring::npos); } } TEST(charcode, Is09) { - constexpr std::array table = { - false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, true, true, - true, true, true, true, true, true, true, true, false, false, - false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false - }; - for (wchar_t ch = 0; ch < table.size(); ++ch) { - EXPECT_EQ(WCODE::Is09(ch), table[ch]); + const std::wstring chars = L"0123456789"; + for (wchar_t ch = 0; ch < 128; ++ch) { + EXPECT_EQ(WCODE::Is09(ch), chars.find(ch) != std::wstring::npos); } } @@ -316,44 +288,16 @@ TEST(charcode, IsBlank) TEST(charcode, IsValidFileNameChar) { - constexpr std::array table = { - false, true, true, true, true, true, true, true, true, true, - true, true, true, true, true, true, true, true, true, true, - true, true, true, true, true, true, true, true, true, true, - true, true, true, true, false, true, true, true, true, true, - true, true, false, true, true, true, true, true, true, true, - true, true, true, true, true, true, true, true, true, true, - false, true, false, false, true, true, true, true, true, true, - true, true, true, true, true, true, true, true, true, true, - true, true, true, true, true, true, true, true, true, true, - true, true, true, true, true, true, true, true, true, true, - true, true, true, true, true, true, true, true, true, true, - true, true, true, true, true, true, true, true, true, true, - true, true, true, true, false, true, true, true - }; - for (wchar_t ch = 0; ch < table.size(); ++ch) { - EXPECT_EQ(WCODE::IsValidFilenameChar(ch), table[ch]); + const std::wstring chars(L"\0<>?\"|*", 7); + for (wchar_t ch = 0; ch < 128; ++ch) { + EXPECT_EQ(WCODE::IsValidFilenameChar(ch), chars.find(ch) == std::wstring::npos); } } TEST(charcode, IsTabAvailableCode) { - constexpr std::array table = { - false, true, true, true, true, true, true, true, true, false, - false, true, true, false, true, true, true, true, true, true, - true, true, true, true, true, true, true, true, true, true, - true, true, true, true, true, true, true, true, true, true, - true, true, true, true, true, true, true, true, true, true, - true, true, true, true, true, true, true, true, true, true, - true, true, true, true, true, true, true, true, true, true, - true, true, true, true, true, true, true, true, true, true, - true, true, true, true, true, true, true, true, true, true, - true, true, true, true, true, true, true, true, true, true, - true, true, true, true, true, true, true, true, true, true, - true, true, true, true, true, true, true, true, true, true, - true, true, true, true, true, true, true, true - }; - for (wchar_t ch = 0; ch < table.size(); ++ch) { - EXPECT_EQ(WCODE::IsTabAvailableCode(ch), table[ch]); + const std::wstring chars(L"\0\r\n\t", 4); + for (wchar_t ch = 0; ch < 128; ++ch) { + EXPECT_EQ(WCODE::IsTabAvailableCode(ch), chars.find(ch) == std::wstring::npos); } } From 8d4617edbec789fb754cc44cae7fd5827b8fc7bd Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Tue, 26 Jan 2021 23:29:46 +0900 Subject: [PATCH 0380/1024] =?UTF-8?q?CharWidthCache=20=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=81=AE=E5=AE=9F=E8=A1=8C=E5=89=8D=E3=81=AB=20IsZenk?= =?UTF-8?q?aku=20=E3=81=AE=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E5=AE=9F?= =?UTF-8?q?=E8=A1=8C=E3=81=99=E3=82=8B=E3=81=A8=E3=82=AF=E3=83=A9=E3=83=83?= =?UTF-8?q?=E3=82=B7=E3=83=A5=E3=81=97=E3=81=A6=E3=81=84=E3=81=9F=E3=81=AE?= =?UTF-8?q?=E3=81=A7=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-charcode.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/tests/unittests/test-charcode.cpp b/tests/unittests/test-charcode.cpp index d86a784c83..97a104084a 100644 --- a/tests/unittests/test-charcode.cpp +++ b/tests/unittests/test-charcode.cpp @@ -102,6 +102,14 @@ TEST_F(CharWidthCache, IsHankaku) } } +TEST_F(CharWidthCache, IsZenkaku) { + SelectCharWidthCache(CWM_FONT_EDIT, CWM_CACHE_LOCAL); + InitCharWidthCache(lf1); + + EXPECT_EQ(WCODE::IsZenkaku(L'a'), !WCODE::IsHankaku(L'a')); + EXPECT_EQ(WCODE::IsZenkaku(L'あ'), !WCODE::IsHankaku(L'あ')); +} + TEST_F(CharWidthCache, CalcHankakuByFont) { SelectCharWidthCache(CWM_FONT_EDIT, CWM_CACHE_LOCAL); @@ -209,12 +217,6 @@ TEST(charcode, IsInRange) EXPECT_FALSE(WCODE::IsInRange(5, 2, 4)); } -TEST(charcode, IsZenkaku) -{ - EXPECT_FALSE(WCODE::IsZenkaku(L'a')); - EXPECT_TRUE(WCODE::IsZenkaku(L'あ')); -} - TEST(charcode, IsLineDelimiter) { EXPECT_TRUE(WCODE::IsLineDelimiter(0x0d, false)); From 586f30b82a58985d704a0c45a63817886c1f2ce5 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 27 Jan 2021 02:35:26 +0900 Subject: [PATCH 0381/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-string_ex.cpp | 36 +++++++++++++++--------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/tests/unittests/test-string_ex.cpp b/tests/unittests/test-string_ex.cpp index c156f9a6ea..774bd2d895 100644 --- a/tests/unittests/test-string_ex.cpp +++ b/tests/unittests/test-string_ex.cpp @@ -35,7 +35,7 @@ #include "util/string_ex.h" /*! - @breaf 旧コード互換用。可能であれば使わないでください。 + @brief 旧コード互換用。可能であれば使わないでください。 代替関数は strnlen か std::char_traits::length です。 */ @@ -45,7 +45,7 @@ TEST(string_ex, auto_strlenA) } /*! - @breaf 旧コード互換用。可能であれば使わないでください。 + @brief 旧コード互換用。可能であれば使わないでください。 代替関数は wcsnlen か std::char_traits::length です。 */ @@ -55,7 +55,7 @@ TEST(string_ex, auto_strlenW) } /*! - @breaf 旧コード互換用。可能であれば使わないでください。 + @brief 旧コード互換用。可能であれば使わないでください。 代替関数はないのでロジックを見直してください。 */ @@ -66,7 +66,7 @@ TEST(string_ex, auto_strchrA) } /*! - @breaf 旧コード互換用。可能であれば使わないでください。 + @brief 旧コード互換用。可能であれば使わないでください。 代替関数はないのでロジックを見直してください。 */ @@ -77,28 +77,28 @@ TEST(string_ex, auto_strchrW) } /*! - @breaf 旧コード互換用。使わないでください。 + @brief 旧コード互換用。使わないでください。 代替関数は snprintf_s か auto_sprintf_s です。 可能であれば 非Unicodeな文字列 を扱うコードを書かないでください。 */ TEST(string_ex, auto_sprintfA) { - std::string text(_MAX_PATH, L'\0'); - auto_sprintf(text.data(), "%s-%d", "test", 101); - ASSERT_STREQ("test-101", text.data()); + char szText[_MAX_PATH]; + auto_sprintf(szText, "%s-%d", "test", 101); + ASSERT_STREQ("test-101", szText); } /*! - @breaf 旧コード互換用。使わないでください。 + @brief 旧コード互換用。使わないでください。 代替関数は strprintf か _swnprintf_s か auto_sprintf_s です。 */ TEST(string_ex, auto_sprintfW) { - std::wstring text(_MAX_PATH, L'\0'); - auto_sprintf(text.data(), L"%s-%d", L"test", 101); - ASSERT_STREQ(L"test-101", text.data()); + wchar_t szText[_MAX_PATH]; + auto_sprintf(szText, L"%s-%d", L"test", 101); + ASSERT_STREQ(L"test-101", szText); } TEST(string_ex, strprintf) @@ -109,7 +109,7 @@ TEST(string_ex, strprintf) } /*! - @breaf 独自定義の文字列比較関数。 + @brief 独自定義の文字列比較関数。 */ TEST(string_ex, strncmp_literal) { @@ -122,7 +122,7 @@ TEST(string_ex, strncmp_literal) } /*! - @breaf 独自定義の文字列比較関数。 + @brief 独自定義の文字列比較関数。 */ TEST(string_ex, wcsncmp_literal) { @@ -135,26 +135,26 @@ TEST(string_ex, wcsncmp_literal) } /*! - @breaf 独自定義の文字列比較関数。 + @brief 独自定義の文字列比較関数。 */ TEST(string_ex, strnicmp_literal) { constexpr const char test_data1[] = "abc"; constexpr const char test_data2[] = "ABC"; - constexpr const char test_data3[] = "xyz"; + constexpr const char test_data3[] = "XYZ"; ASSERT_EQ(0, strnicmp_literal(test_data1, test_data2)); ASSERT_GT(0, strnicmp_literal(test_data1, test_data3)); ASSERT_LT(0, strnicmp_literal(test_data3, test_data1)); } /*! - @breaf 独自定義の文字列比較関数。 + @brief 独自定義の文字列比較関数。 */ TEST(string_ex, wcsnicmp_literal) { constexpr const wchar_t test_data1[] = L"abc"; constexpr const wchar_t test_data2[] = L"ABC"; - constexpr const wchar_t test_data3[] = L"xyz"; + constexpr const wchar_t test_data3[] = L"XYZ"; ASSERT_EQ(0, wcsnicmp_literal(test_data1, test_data2)); ASSERT_GT(0, wcsnicmp_literal(test_data1, test_data3)); ASSERT_LT(0, wcsnicmp_literal(test_data3, test_data1)); From 3af89171b04d560cb450383bbdd6a1cc550d2ae1 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Wed, 27 Jan 2021 11:57:39 +0900 Subject: [PATCH 0382/1024] =?UTF-8?q?ACODE=20=E5=90=8D=E5=89=8D=E7=A9=BA?= =?UTF-8?q?=E9=96=93=E3=81=AE=E6=9C=AA=E4=BD=BF=E7=94=A8=E3=82=B3=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=82=92=E9=99=A4=E5=8E=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/charcode.h | 56 ---------------------------------- 1 file changed, 56 deletions(-) diff --git a/sakura_core/charset/charcode.h b/sakura_core/charset/charcode.h index 0c9c65ea18..d7dd91bfeb 100644 --- a/sakura_core/charset/charcode.h +++ b/sakura_core/charset/charcode.h @@ -52,18 +52,7 @@ //ANSI定数 namespace ACODE{ - //文字 - static const char TAB = TAB_; - static const char SPACE = SPACE_; - static const char CR = CR_; - static const char LF = LF_; static const char ESC = ESC_; - - //文字列 - static const char CRLF[] = CRLF_; - - //特殊 (BREGEXP) - static const wchar_t BREGEXP_DELIMITER = (wchar_t)0xFF; } //UNICODE定数 @@ -269,51 +258,6 @@ namespace WCODE */ } -//ANSI判定関数群 -namespace ACODE -{ - inline bool IsAZ(char c) - { - return (c>='A' && c<='Z') || (c>='a' && c<='z'); - } - - //!制御文字であるかどうか - inline bool IsControlCode(char c) - { - unsigned char n=(unsigned char)c; - if(c==TAB)return false; - if(c==CR )return false; - if(c==LF )return false; - if(n<=0x1F)return true; - if(n>=0x7F && n<=0x9F)return true; - if(n>=0xE0)return true; - return false; - } - - //!タブ表示に使える文字かどうか - inline bool IsTabAvailableCode(char c) - { - if(c=='\0')return false; - if(c<=0x1f)return false; - if(c>=0x7f)return false; - return true; - } - - //!ファイル名に使える文字であるかどうか - inline bool IsValidFilenameChar(const char c) - { - static const char* table = "<>?\"|*"; - - //table内の文字が含まれていて - if(strchr(table,c)!=NULL){ - // 2013.06.01 判定間違いを削除 - return false; - } - - return true; - } -} - //TCHAR判定関数群 namespace TCODE { From d2da9b2ac75725116174e14ab835e9a952d7c196 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Wed, 27 Jan 2021 12:03:24 +0900 Subject: [PATCH 0383/1024] =?UTF-8?q?ACODE=20=E3=81=AE=E6=AE=8B=E5=AD=98?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E4=BE=8B=E3=82=92=E9=99=A4=E5=8E=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/charcode.h | 5 ----- sakura_core/charset/codechecker.cpp | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/sakura_core/charset/charcode.h b/sakura_core/charset/charcode.h index d7dd91bfeb..c4675f06b9 100644 --- a/sakura_core/charset/charcode.h +++ b/sakura_core/charset/charcode.h @@ -50,11 +50,6 @@ #define ESC_ '\x1b' #define CRLF_ "\015\012" -//ANSI定数 -namespace ACODE{ - static const char ESC = ESC_; -} - //UNICODE定数 namespace WCODE{ //文字 diff --git a/sakura_core/charset/codechecker.cpp b/sakura_core/charset/codechecker.cpp index aed2a55bbd..d5b7158361 100644 --- a/sakura_core/charset/codechecker.cpp +++ b/sakura_core/charset/codechecker.cpp @@ -276,7 +276,7 @@ int DetectJisEscseq( const char* pS, const int nLen, EMyJisEscseq* peEscType ) pr = const_cast( pS ); pr_end = pS + nLen; - if( pr[0] == ACODE::ESC ){ + if( pr[0] == '\x1b' ){ expected_esc_len++; pr++; if( pr + 1 < pr_end ){ From 85e45bce86890883091c30a2aa8626527c2f1d08 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Wed, 27 Jan 2021 12:11:01 +0900 Subject: [PATCH 0384/1024] =?UTF-8?q?TCODE=20=E5=90=8D=E5=89=8D=E7=A9=BA?= =?UTF-8?q?=E9=96=93=E3=82=92=E5=BB=83=E6=AD=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/charcode.h | 6 ------ sakura_core/cmd/CViewCommander_File.cpp | 2 +- sakura_core/typeprop/CPropTypesScreen.cpp | 2 +- 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/sakura_core/charset/charcode.h b/sakura_core/charset/charcode.h index c4675f06b9..279f92d3d6 100644 --- a/sakura_core/charset/charcode.h +++ b/sakura_core/charset/charcode.h @@ -253,12 +253,6 @@ namespace WCODE */ } -//TCHAR判定関数群 -namespace TCODE -{ - using namespace WCODE; -} - // 文字幅の動的計算用キャッシュ関連 struct SCharWidthCache { // 文字半角全角キャッシュ diff --git a/sakura_core/cmd/CViewCommander_File.cpp b/sakura_core/cmd/CViewCommander_File.cpp index a5cfc21faa..3dcb388416 100644 --- a/sakura_core/cmd/CViewCommander_File.cpp +++ b/sakura_core/cmd/CViewCommander_File.cpp @@ -404,7 +404,7 @@ void CViewCommander::Command_PLSQL_COMPILE_ON_SQLPLUS( void ) if( GetDocument()->m_cDocFile.GetFilePathClass().IsValidPath() ){ /* ファイルパスに空白が含まれている場合はダブルクォーテーションで囲む */ // 2003.10.20 MIK コード簡略化 - if( wcschr( GetDocument()->m_cDocFile.GetFilePath(), TCODE::SPACE ) ? TRUE : FALSE ){ + if( wcschr( GetDocument()->m_cDocFile.GetFilePath(), WCODE::SPACE ) ? TRUE : FALSE ){ auto_sprintf( szPath, L"@\"%s\"\r\n", GetDocument()->m_cDocFile.GetFilePath() ); }else{ auto_sprintf( szPath, L"@%s\r\n", GetDocument()->m_cDocFile.GetFilePath() ); diff --git a/sakura_core/typeprop/CPropTypesScreen.cpp b/sakura_core/typeprop/CPropTypesScreen.cpp index f7223240c8..673b9ed2ed 100644 --- a/sakura_core/typeprop/CPropTypesScreen.cpp +++ b/sakura_core/typeprop/CPropTypesScreen.cpp @@ -685,7 +685,7 @@ int CPropTypesScreen::GetData( HWND hwndDlg ) ::DlgItem_GetText( hwndDlg, IDC_EDIT_TABVIEWSTRING, szTab, _countof( szTab ) ); wcscpy( m_Types.m_szTabViewString, L"^ " ); for( int i = 0; i < 8; i++ ){ - if( !TCODE::IsTabAvailableCode(szTab[i]) )break; + if( !WCODE::IsTabAvailableCode(szTab[i]) )break; m_Types.m_szTabViewString[i] = szTab[i]; } From 11fd2cb3fec9e7e5e4142c3f2909ed860f91b56b Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Wed, 27 Jan 2021 16:03:03 +0800 Subject: [PATCH 0385/1024] Update appveyor.yml --- appveyor.yml | 40 ++++------------------------------------ 1 file changed, 4 insertions(+), 36 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 3f607d9d11..1d284a5c59 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -6,7 +6,6 @@ configuration: - Debug platform: - - BuildChm - Win32 - x64 @@ -25,49 +24,18 @@ skip_commits: install: - cmd: | - py -m pip install --upgrade pip - py -m pip install openpyxl --user - cup innosetup - C:\ProgramData\chocolatey\tools\shimgen.exe --output=C:\ProgramData\chocolatey\bin\ISCC.exe --path="C:\Program Files (x86)\Inno Setup 6\ISCC.exe" - + cinst locale-emulator -y + cup vswhere + py.exe -m pip install openpyxl --user # to run our custom scripts instead of automatic MSBuild build_script: - - cmd: cup vswhere - cmd: build-all.bat %PLATFORM% %CONFIGURATION% - + # to run our custom scripts instead of automatic tests test_script: - cmd: tests\run-tests.bat %PLATFORM% %CONFIGURATION% -matrix: - exclude: - - platform: BuildChm - configuration: Debug - for: -- - matrix: - only: - - platform: BuildChm - configuration: Release - - install: - - ps: Set-WinSystemLocale ja-JP - - ps: Start-Sleep -s 10 - - ps: Restart-Computer - - ps: Start-Sleep -s 10 - - build_script: - - cmd: cup vswhere - - cmd: build-chm.bat - - cmd: help\make-artifacts.bat - - test_script: - - cmd: echo This Platform has no tests. - - artifacts: - - path: 'sakura-*-Chm.zip*' - # run only for Release - matrix: From fb6c73bf419815bd7c8214b405459df426c7d762 Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Wed, 27 Jan 2021 16:24:16 +0800 Subject: [PATCH 0386/1024] Delete appveyor.yml --- appveyor.yml | 50 -------------------------------------------------- 1 file changed, 50 deletions(-) delete mode 100644 appveyor.yml diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index 1d284a5c59..0000000000 --- a/appveyor.yml +++ /dev/null @@ -1,50 +0,0 @@ -version: 1.0.{build} -image: Visual Studio 2017 - -configuration: - - Release - - Debug - -platform: - - Win32 - - x64 - -# set clone depth -clone_depth: 5 - -# see "Skip commits" at https://www.appveyor.com/docs/how-to/filtering-commits/#commit-files-github-and-bitbucket-only -skip_commits: - files: - - '**/*.md' - - .gitignore - - .editorconfig - - 'azure-pipelines*.yml' - - 'ci/azure-pipelines/template*.yml' - - '.github/workflows/*.yml' - -install: -- cmd: | - cinst locale-emulator -y - cup vswhere - py.exe -m pip install openpyxl --user -# to run our custom scripts instead of automatic MSBuild -build_script: - - cmd: build-all.bat %PLATFORM% %CONFIGURATION% - -# to run our custom scripts instead of automatic tests -test_script: - - cmd: tests\run-tests.bat %PLATFORM% %CONFIGURATION% - -for: -# run only for Release -- - matrix: - only: - - platform: Win32 - configuration: Release - - platform: x64 - configuration: Release - - artifacts: - - path: 'sakura-*$(platform)-$(configuration)*.zip*' - - path: 'sha256.txt' From ebf082fa7e42a176e996cbb828d077d94d23566f Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 27 Jan 2021 20:55:47 +0900 Subject: [PATCH 0387/1024] =?UTF-8?q?help=E9=85=8D=E4=B8=8B=E3=81=AEShift?= =?UTF-8?q?=5FJIS=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AE=E3=81=9F?= =?UTF-8?q?=E3=82=81=E3=81=AB.gitattributes=E3=82=92=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 現状でShift_JISで登録されているファイルをUTF8で登録するように変更する。 checkout後のworking-treeにはShift_JISのファイルができる。 --- help/.gitattributes | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 help/.gitattributes diff --git a/help/.gitattributes b/help/.gitattributes new file mode 100644 index 0000000000..352108e861 --- /dev/null +++ b/help/.gitattributes @@ -0,0 +1,4 @@ +*.hhp working-tree-encoding=cp932 eol=crlf +*.hhk working-tree-encoding=cp932 eol=crlf +*.hhc working-tree-encoding=cp932 eol=crlf +Cshelp.txt working-tree-encoding=cp932 eol=crlf From 694b2dcb584279f36592b6dbbebf6e8294e37839 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Wed, 27 Jan 2021 18:30:14 +0900 Subject: [PATCH 0388/1024] =?UTF-8?q?strprintf=E3=81=AE=E6=8B=A1=E5=BC=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/string_ex.cpp | 63 ++++++++++++++++++++---------- sakura_core/util/string_ex.h | 2 + tests/unittests/test-string_ex.cpp | 27 +++++++++++++ 3 files changed, 71 insertions(+), 21 deletions(-) diff --git a/sakura_core/util/string_ex.cpp b/sakura_core/util/string_ex.cpp index 138b0c812d..ca66208c5c 100644 --- a/sakura_core/util/string_ex.cpp +++ b/sakura_core/util/string_ex.cpp @@ -216,36 +216,57 @@ const char* stristr_j( const char* s1, const char* s2 ) /*! @brief C-Styleのフォーマット文字列を使ってデータを文字列化する。 - @param[out] strOut フォーマットされたテキストを受け取る変数 @param[in] pszFormat フォーマット文字列 @param[in] argList 引数リスト - @returns 出力された文字数。NUL終端を含まない。 - @retval >= 0 正常終了 - @retval < 0 異常終了 + @returns フォーマットされた文字列 */ -int vstrprintf( std::wstring& strOut, const WCHAR* pszFormat, va_list& argList ) +std::wstring vstrprintf(const WCHAR* pszFormat, va_list& argList) { - // バッファをクリアしておく - strOut.clear(); - // _vscwprintf() はフォーマットに必要な文字数を返す。 - const int cchOut = ::_vscwprintf( pszFormat, argList ); - if( cchOut <= 0 ){ - // 出力文字数が0なら後続処理は要らない。また、エラー時は-1が返る。 - return cchOut; + const int cchOut = ::_vscwprintf(pszFormat, argList); + if (cchOut == 0) { + // 出力文字数が0なら後続処理は要らない。 + return std::wstring(); } - // フォーマットに必要なバッファを確保する - strOut.resize( cchOut ); + // 必要なバッファを確保してフォーマットする + std::wstring strOut(cchOut, L'\0'); + ::vswprintf_s(strOut.data(), strOut.capacity(), pszFormat, argList); + return strOut; +} - // vswprintf_s() はコピーした文字数を返す。 - const int actualCopied = ::vswprintf_s( strOut.data(), strOut.capacity(), pszFormat, argList ); - if( actualCopied < 0 ){ - // データサイズを反映する - strOut.assign( strOut.data(), cchOut ); - } +/*! + @brief C-Styleのフォーマット文字列を使ってデータを文字列化する。 + @param[in] pszFormat フォーマット文字列 + @param[in] ... 引数リスト + @returns フォーマットされた文字列 +*/ +std::wstring strprintf(const WCHAR* pszFormat, ...) +{ + va_list argList; + va_start(argList, pszFormat); - return actualCopied; + const auto strRet = vstrprintf(pszFormat, argList); + + va_end(argList); + + return strRet; +} + +/*! + @brief C-Styleのフォーマット文字列を使ってデータを文字列化する。 + @param[out] strOut フォーマットされたテキストを受け取る変数 + @param[in] pszFormat フォーマット文字列 + @param[in] argList 引数リスト + @returns 出力された文字数。NUL終端を含まない。 + @retval >= 0 正常終了 + @retval < 0 異常終了 +*/ +int vstrprintf( std::wstring& strOut, const WCHAR* pszFormat, va_list& argList ) +{ + // オーバーロードバージョンを呼び出す + strOut = vstrprintf(pszFormat, argList); + return static_cast(strOut.length()); } /*! diff --git a/sakura_core/util/string_ex.h b/sakura_core/util/string_ex.h index c59331ada2..99c1fdf42b 100644 --- a/sakura_core/util/string_ex.h +++ b/sakura_core/util/string_ex.h @@ -202,6 +202,8 @@ inline int auto_vsprintf_s(WCHAR* buf, size_t nBufCount, const WCHAR* format, va #define auto_sprintf_s(buf, nBufCount, format, ...) ::_sntprintf_s((buf), nBufCount, _TRUNCATE, (format), __VA_ARGS__) #define auto_snprintf_s(buf, nBufCount, format, ...) ::_sntprintf_s((buf), nBufCount, _TRUNCATE, (format), __VA_ARGS__) +std::wstring vstrprintf(const WCHAR* pszFormat, va_list& argList); +std::wstring strprintf(const WCHAR* pszFormat, ...); int vstrprintf( std::wstring& strOut, const WCHAR* pszFormat, va_list& argList ); int strprintf( std::wstring& strOut, const WCHAR* pszFormat, ... ); diff --git a/tests/unittests/test-string_ex.cpp b/tests/unittests/test-string_ex.cpp index 774bd2d895..f6161f2c09 100644 --- a/tests/unittests/test-string_ex.cpp +++ b/tests/unittests/test-string_ex.cpp @@ -101,13 +101,40 @@ TEST(string_ex, auto_sprintfW) ASSERT_STREQ(L"test-101", szText); } +/*! + @brief 独自定義のフォーマット関数。 + + C関数をC++に移植する作業を簡便化する目的で作成。 + CRT関数sprintf_sに関する注意点が全て当てはまるので注意。 + 例) + "%b" など、未定義のフォーマット識別子を指定すると落ちます。 + フォーマットと引数の整合がとれていないとAV例外で落ちます。 + */ TEST(string_ex, strprintf) +{ + std::wstring text = strprintf(L"%s-%d", L"test", 101); + ASSERT_STREQ(L"test-101", text.c_str()); +} + +/*! + @brief 独自定義のフォーマット関数(C-Style風)。 + */ +TEST(string_ex, strprintfOutputToArg) { std::wstring text; strprintf(text, L"%s-%d", L"test", 101); ASSERT_STREQ(L"test-101", text.c_str()); } +/*! + @brief 独自定義のフォーマット関数(空文字出力テスト)。 + */ +TEST(string_ex, strprintfEmpty) +{ + std::wstring text = strprintf(L"%hs", ""); + ASSERT_TRUE(text.empty()); +} + /*! @brief 独自定義の文字列比較関数。 */ From 5646f70f6475d4225f99811325262b87285a91a6 Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Thu, 28 Jan 2021 08:03:22 +0800 Subject: [PATCH 0389/1024] Create appveyor.yml --- appveyor.yml | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 appveyor.yml diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 0000000000..127185e448 --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,53 @@ +version: 1.0.{build} +image: Visual Studio 2017 + +configuration: + - Release + - Debug + +platform: + - Win32 + - x64 + +# set clone depth +clone_depth: 5 + +# see "Skip commits" at https://www.appveyor.com/docs/how-to/filtering-commits/#commit-files-github-and-bitbucket-only +skip_commits: + files: + - '**/*.md' + - .gitignore + - .editorconfig + - 'azure-pipelines*.yml' + - 'ci/azure-pipelines/template*.yml' + - '.github/workflows/*.yml' + +install: +- cmd: | + cinst locale-emulator -y + cup vswhere + py.exe -m pip install openpyxl --user + cup innosetup + C:\ProgramData\chocolatey\tools\shimgen.exe --output=C:\ProgramData\chocolatey\bin\ISCC.exe --path="C:\Program Files (x86)\Inno Setup 6\ISCC.exe" + +# to run our custom scripts instead of automatic MSBuild +build_script: + - cmd: build-all.bat %PLATFORM% %CONFIGURATION% + +# to run our custom scripts instead of automatic tests +test_script: + - cmd: tests\run-tests.bat %PLATFORM% %CONFIGURATION% + +for: +# run only for Release +- + matrix: + only: + - platform: Win32 + configuration: Release + - platform: x64 + configuration: Release + + artifacts: + - path: 'sakura-*$(platform)-$(configuration)*.zip*' + - path: 'sha256.txt' From 6003f900fc9b26c29c61b832b230c0e8c3248fab Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Thu, 28 Jan 2021 08:15:38 +0800 Subject: [PATCH 0390/1024] Delete sakura-common.iss --- installer/instmaterials/sakura-common.iss | 597 ---------------------- 1 file changed, 597 deletions(-) delete mode 100644 installer/instmaterials/sakura-common.iss diff --git a/installer/instmaterials/sakura-common.iss b/installer/instmaterials/sakura-common.iss deleted file mode 100644 index 8f98f67046..0000000000 --- a/installer/instmaterials/sakura-common.iss +++ /dev/null @@ -1,597 +0,0 @@ -#if VER < EncodeVer(5,6,1) - #define MySendTo "{sendto}" -#else - #define MySendTo "{usersendto}" -#endif -#define MyAppVer GetFileVersion("sakura\sakura.exe") -#define MyAppVerH StringChange(MyAppVer, ".", "-") - -[Setup] -#if MyArchitecture != "x86" -ArchitecturesInstallIn64BitMode={#MyArchitecture} -ArchitecturesAllowed={#MyArchitecture} -#endif -AppName={cm:AppName} -AppId=sakura editor -AppVersion={#MyAppVer} -AppVerName={cm:AppVerName} {#MyAppVer} ({#MyArchitecture}) -AppMutex=MutexSakuraEditor -AppPublisher={cm:AppPublisher} -AppPublisherURL=https://sakura-editor.github.io/ -AppSupportURL=https://github.com/sakura-editor/sakura/issues -AppUpdatesURL=https://github.com/sakura-editor/sakura/releases -DefaultDirName={code:getDefautDirName|sakura} -DefaultGroupName={cm:AppName} -UninstallDisplayIcon={app}\sakura.exe -InfoBeforeFile="instmaterials\info.txt" -LanguageDetectionMethod=uilanguage -SolidCompression=yes - -WizardImageFile="instmaterials\SetupModern20.bmp" -WizardSmallImageFile="instmaterials\SetupModernSmall20.bmp" -DisableStartupPrompt=yes -DisableWelcomePage=no - -PrivilegesRequired=None - -; 出力先ディレクトリ -OutputDir=Output-{#OutputSuffix} - -; エディタのバージョンに応じて書き換える場所 -OutputBaseFilename=sakura_install{#MyAppVerH}-{#MyArchitecture} -VersionInfoVersion={#MyAppVer} -VersionInfoProductVersion={#MyAppVer} - -; OSバージョン制限(Windows 7 以降に対応) -MinVersion=6.1 - -[Languages] -Name: "ja"; MessagesFile: "compiler:Languages\Japanese.isl" -Name: "en"; MessagesFile: "compiler:Default.isl"; InfoBeforeFile: "instmaterials\info_us.txt" -Name: "zh_hans"; MessagesFile: "compiler:Languages\ChineseSimplified.isl"; InfoBeforeFile: "instmaterials\info_zh_hans.txt" -Name: "zh_hant"; MessagesFile: "compiler:Languages\ChineseTraditional.isl"; InfoBeforeFile: "instmaterials\info_zh_hant.txt" - -[CustomMessages] -en.InfoBeforeFile=instmaterials\info_en.txt -ja.InfoBeforeFile=instmaterials\info.txt -zh_hans.InfoBeforeFile=instmaterials\info_zh_hans.txt -zh_hant.InfoBeforeFile=instmaterials\info_zh_hant.txt - -en.AppName=SAKURA Editor -ja.AppName=サクラエディタ -zh_hans.AppName=樱花编辑器 -zh_hant.AppName=櫻花編輯器 - -en.AppVerName=SAKURA Editor -ja.AppVerName=SAKURA Editor(サクラエディタ) -zh_hans.AppVerName=樱花编辑器 -zh_hant.AppVerName=櫻花編輯器 - -en.AppPublisher=SAKURA Editor developers -ja.AppPublisher=サクラエディタ開発チーム -zh_hans.AppPublisher=樱花编辑器 开发者 -zh_hant.AppPublisher=櫻花編輯器 開發者 - -en.TypesAll=All -ja.TypesAll=すべて -zh_hans.TypesAll=全部安装 -zh_hant.TypesAll==全部安裝 - -en.TypesEditorWithHelp=Editor with Help -ja.TypesEditorWithHelp=本体とヘルプ -zh_hans.TypesEditorWithHelp=本体与帮助文件 -zh_hant.TypesEditorWithHelp=本體與幫助檔 - -en.TypesEditorOnly=Editor Only -ja.TypesEditorOnly=本体のみ -zh_hans.TypesEditorOnly=仅安装本体 -zh_hant.TypesEditorOnly=僅安裝本體 - -en.TypesCustom=Custom -ja.TypesCustom=カスタム -zh_hans.TypesCustom=自定义 -zh_hant.TypesCustom=自定義 - -en.ComponentsMain=SAKURA Editor itself -ja.ComponentsMain=サクラエディタ本体 -zh_hans.ComponentsMain=樱花编辑器 -zh_hant.ComponentsMain=櫻花編輯器本体 - -en.ComponentsHelp=help files -ja.ComponentsHelp=ヘルプファイル -zh_hans.ComponentsHelp=帮助文件 -zh_hant.ComponentsHelp=幫助檔 - -en.ComponentsKeyword=KeyWord files -ja.ComponentsKeyword=KeyWordファイル -zh_hans.ComponentsKeyword=语法提示文件 -zh_hant.ComponentsKeyword=語法提示檔案 - -en.startmenu=Create &Start Menu -ja.startmenu=スタートメニューを作成(&S) -zh_hans.startmenu=添加到开始菜单(&S) -zh_hant.startmenu=添加到開始菜單(&S) - -en.proglist=Add &Program List -ja.proglist=プログラム一覧に追加(&P) -zh_hans.proglist=添加到程序列表(&P) -zh_hant.proglist=添加到程式清單(&P) - -en.fileassoc=Add "Open with SAKURA &Editor" -ja.fileassoc=「SAKURA Editorで開く」メニューの追加(&E) -zh_hans.fileassoc=添加"用 樱花编辑器 打开"(&E) -zh_hant.fileassoc=添加“用 櫻花編輯器 打開”(&E) - -en.sendto=Add to Send&To Menu -ja.sendto=送るに追加(&T) -zh_hans.sendto=添加到"发送到"菜单(&T) -zh_hant.sendto=添加到“發送到”選單(&T) - -en.sakuragrep=Add "&Grep with SAKURA Editor" -ja.sakuragrep=「SAKURA EditorでGrep」メニューの追加(&G) -zh_hans.sakuragrep=添加到 "Grep with SAKURA Editor"(&G) -zh_hant.sakuragrep=添加到 “Grep with SAKURA Editor”(&G) - -en.fileassocMenu=Open with SAKURA &Editor -ja.fileassocMenu=SAKURA Editorで開く(&E) -zh_hans.fileassocMenu=用 樱花编辑器 打开(&E) -zh_hant.fileassocMenu=用 櫻花編輯器 打開く(&E) - -en.sakuragrepMenu=&Grep with SAKURA Editor -ja.sakuragrepMenu=SAKURA EditorでGrep(&G) -zh_hans.sakuragrepMenu=Grep with SAKURA Editor(&G) -zh_hant.sakuragrepMenu=Grep with SAKURA Editor(&G) - -en.residentStartup=&Resident at startup -ja.residentStartup=起動時に常駐(&R) -zh_hans.residentStartup=开机时启动(&R) -zh_hant.residentStartup=開機時啟動(&R) - -en.IconPreferencefolder=Preference folder -ja.IconPreferencefolder=設定フォルダ -zh_hans.IconPreferencefolder=文件夹设置 -zh_hant.IconPreferencefolder=資料夾設定 - -en.StartNow=Start now -ja.StartNow=今すぐサクラエディタを起動 -zh_hans.StartNow=现在启动 -zh_hant.StartNow=現在啟動 - -en.MultiUser=Install in compatibility mode. When editing system files and programs with user authority, editing results may not be accessible from other applications. (VirtualStore function) -ja.MultiUser=互換モードでインストールします.システムファイルおよびプログラムをユーザ権限で編集すると編集結果が他のアプリケーションから参照できないことがあります.(VirtualStore機能) -zh_hans.MultiUser=软件将会以兼容模式安装。使用非管理员用户编辑配置文件时,文件可能无法被管理员用户访问。(VirtualStore功能) -zh_hant.MultiUser=軟件將會以相容模式安裝。使用非管理員用戶編輯設定檔時,檔案可能無法被管理員用戶訪問。(VirtualStore功能) - -en.InitWiz_Title=Selection of Preference preservation method -ja.InitWiz_Title=設定保存方法の選択 -zh_hans.InitWiz_Title=配置文件保存位置 -zh_hant.InitWiz_Title=設定檔保存位置 - -en.InitWiz_SubTitle=Please choose whether you want to save the settings for each user or to the location of the executable file -ja.InitWiz_SubTitle=設定をユーザ毎に保存するか実行ファイルの場所へ保存するかを選択してください -zh_hans.InitWiz_SubTitle=选择将Sukura配置文件保存至当前用户或软件目录内 -zh_hant.InitWiz_SubTitle=選擇將Sukura設定檔保存至當前用戶或軟件目錄內 - -en.InitWiz_Comment=Please do not change if you are unsure about this -ja.InitWiz_Comment=よくわからない場合は変更しないでください -zh_hans.InitWiz_Comment=若您不清楚此选项,请不要修改 -zh_hant.InitWiz_Comment=若您不清楚此選項,請不要修改 - -en.InitWiz_Check=Manage Preference individually for each user -ja.InitWiz_Check=設定をユーザ毎に個別に管理する -zh_hans.InitWiz_Check=将每个用户的配置文件单独保存 -zh_hant.InitWiz_Check=將每個用戶的設定檔單獨保存 - -en.ReadyMemo_SaveLocation=Preference file etc. save location -ja.ReadyMemo_SaveLocation=設定ファイル等格納場所 -zh_hans.ReadyMemo_SaveLocation=设定文件保存位置 -zh_hant.ReadyMemo_SaveLocation=設定檔案保存位置 - -en.ReadyMemo_UserProfileDir=User-Profile directory -ja.ReadyMemo_UserProfileDir=ユーザ個別ディレクトリ -zh_hans.ReadyMemo_UserProfileDir=用户配置文件目录 -zh_hant.ReadyMemo_UserProfileDir=用戶設定檔目錄 - -en.ReadyMemo_VirtualStoreDisable=Disable -ja.ReadyMemo_VirtualStoreDisable=無効 -zh_hans.ReadyMemo_VirtualStoreDisable=无效 -zh_hant.ReadyMemo_VirtualStoreDisable=無效 - -en.ReadyMemo_ExecProfileDir=Same as the executable file -ja.ReadyMemo_ExecProfileDir=実行ファイルと同一ディレクトリ -zh_hans.ReadyMemo_ExecProfileDir=与可执行文件相同 -zh_hant.ReadyMemo_ExecProfileDir=與可執行文件相同 - -en.ReadyMemo_VirtualStoreEnable=Enable -ja.ReadyMemo_VirtualStoreEnable=有効 -zh_hans.ReadyMemo_VirtualStoreEnable=生效 -zh_hant.ReadyMemo_VirtualStoreEnable=生效 - - - - -[Types] -Name: all; Description: "{cm:TypesAll}" -Name: TypesEditorWithHelp; Description: "{cm:TypesEditorWithHelp}" -Name: TypesEditorOnly; Description: "{cm:TypesEditorOnly}" -Name: custom; Description: "{cm:TypesCustom}"; Flags: iscustom - -[Components] -Name: main; Description: "{cm:ComponentsMain}"; Types: all TypesEditorWithHelp TypesEditorOnly custom; Flags: fixed -Name: help; Description: "{cm:ComponentsHelp}"; Types: all TypesEditorWithHelp -Name: keyword; Description: "{cm:ComponentsKeyword}"; Types: all - -[Tasks] -Name: startmenu; Description: "{cm:startmenu}"; Components: main; -Name: quicklaunch; Description: "{cm:CreateQuickLaunchIcon}"; Components: main; -Name: proglist; Description: "{cm:proglist}"; Components: main; -Name: desktopicon; Description: "{cm:CreateDesktopIcon}"; Components: main; Flags: unchecked; -Name: fileassoc; Description: "{cm:fileassoc}"; Components: main; Flags: unchecked; -Name: startup; Description: "{cm:residentStartup}"; Components: main; Flags: unchecked; -Name: sendto; Description: "{cm:sendto}"; Components: main; Flags: unchecked; -Name: sakuragrep; Description: "{cm:sakuragrep}"; Components: main; Flags: unchecked; - -[Files] -Source: "sakura\sakura.exe"; DestDir: "{app}"; Components: main; Flags: ignoreversion; -Source: "sakura\sakura_lang_en_US.dll";DestDir: "{app}"; Components: main; Flags: ignoreversion; -Source: "sakura\license\LICENSE"; DestDir: "{app}\license"; Components: main -Source: "sakura\bregonig.dll"; DestDir: "{app}"; Components: main -Source: "sakura\license\bregonig\*"; DestDir: "{app}\license\bregonig"; Components: main -Source: "sakura\ctags.exe"; DestDir: "{app}"; Components: main -Source: "sakura\license\ctags\*"; DestDir: "{app}\license\ctags"; Components: main -Source: "sakura\sakura.exe.manifest.x";DestDir: "{app}"; Components: main; DestName: "sakura.exe.manifest"; Check: isMultiUserDisabled; Flags: onlyifdoesntexist; -Source: "sakura\sakura.exe.manifest.v";DestDir: "{app}"; Components: main; DestName: "sakura.exe.manifest"; Check: isMultiUserEnabled; Flags: onlyifdoesntexist; -Source: "sakura\sakura.chm"; DestDir: "{app}"; Components: help -Source: "sakura\macro.chm"; DestDir: "{app}"; Components: help -Source: "sakura\plugin.chm"; DestDir: "{app}"; Components: help -Source: "sakura\sakura.exe.ini"; DestDir: "{app}"; Components: main; Check: isMultiUserEnabled; Flags: onlyifdoesntexist; - -Source: "sakura\keyword\*"; DestDir: "{app}\keyword"; Components: keyword; Flags: recursesubdirs - -[Registry] -; registry for all user (Admin only) -Root: HKLM; Subkey: "SOFTWARE\Classes\*\shell\sakuraeditor"; ValueType: string; ValueName: ""; ValueData: "{cm:fileassocMenu}"; Tasks: fileassoc; Flags: uninsdeletekey; Check: CheckPrivilege(true) -Root: HKLM; Subkey: "SOFTWARE\Classes\*\shell\sakuraeditor"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\sakura.exe"""; Tasks: fileassoc; Flags: uninsdeletekey; Check: CheckPrivilege(true) -Root: HKLM; Subkey: "SOFTWARE\Classes\*\shell\sakuraeditor\command"; ValueType: string; ValueName: ""; ValueData: """{app}\sakura.exe"" ""%1"""; Tasks: fileassoc; Flags: uninsdeletekey; Check: CheckPrivilege(true) -Root: HKLM; Subkey: "SOFTWARE\Classes\Applications\sakura.exe\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\sakura.exe"" ""%1"""; Tasks: proglist; Flags: uninsdeletekey; Check: CheckPrivilege(true) - -Root: HKLM; Subkey: "SOFTWARE\Classes\directory\shell\sakuraGrep"; ValueType: string; ValueName: ""; ValueData: "{cm:sakuragrepMenu}"; Tasks: sakuragrep; Flags: uninsdeletekey; Check: CheckPrivilege(true) -Root: HKLM; Subkey: "SOFTWARE\Classes\directory\shell\sakuraGrep"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\sakura.exe"""; Tasks: sakuragrep; Flags: uninsdeletekey; Check: CheckPrivilege(true) -Root: HKLM; Subkey: "SOFTWARE\Classes\directory\shell\sakuraGrep\command"; ValueType: string; ValueName: ""; ValueData: """{app}\sakura.exe"" -GREPDLG -GREPMODE -GFOLDER=""%1"" -GOPT=""SP"" -GCODE=99 "; Tasks: sakuragrep; Flags: uninsdeletekey; Check: CheckPrivilege(true) - -Root: HKLM; Subkey: "SOFTWARE\Classes\directory\BackGround\shell\sakuraGrep"; ValueType: string; ValueName: ""; ValueData: "{cm:sakuragrepMenu}"; Tasks: sakuragrep; Flags: uninsdeletekey; Check: CheckPrivilege(true) -Root: HKLM; Subkey: "SOFTWARE\Classes\directory\BackGround\shell\sakuraGrep"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\sakura.exe"""; Tasks: sakuragrep; Flags: uninsdeletekey; Check: CheckPrivilege(true) -Root: HKLM; Subkey: "SOFTWARE\Classes\directory\BackGround\shell\sakuraGrep\command"; ValueType: string; ValueName: ""; ValueData: """{app}\sakura.exe"" -GREPDLG -GREPMODE -GFOLDER=""%V"" -GOPT=""SP"" -GCODE=99 "; Tasks: sakuragrep; Flags: uninsdeletekey; Check: CheckPrivilege(true) - -; add ProgID -; see https://www.glamenv-septzen.net/view/14#idf5215e -; see https://docs.microsoft.com/en-us/visualstudio/extensibility/registering-verbs-for-file-name-extensions?view=vs-2017 -Root: HKLM; Subkey: "SOFTWARE\Classes\SakuraEditor.Document"; ValueType: string; ValueName: ""; ValueData: ""; Flags: uninsdeletekey; Check: CheckPrivilege(true) -Root: HKLM; Subkey: "SOFTWARE\Classes\SakuraEditor.Document\shell"; ValueType: string; ValueName: ""; ValueData: ""; Flags: uninsdeletekey; Check: CheckPrivilege(true) -Root: HKLM; Subkey: "SOFTWARE\Classes\SakuraEditor.Document\shell\open"; ValueType: string; ValueName: ""; ValueData: ""; Flags: uninsdeletekey; Check: CheckPrivilege(true) -Root: HKLM; Subkey: "SOFTWARE\Classes\SakuraEditor.Document\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\sakura.exe"" ""%1"""; Flags: uninsdeletekey; Check: CheckPrivilege(true) - -; add File Handlers to each extensions -; see https://docs.microsoft.com/en-us/visualstudio/extensibility/specifying-file-handlers-for-file-name-extensions?view=vs-2017 -Root: HKLM; Subkey: "SOFTWARE\Classes\.txt\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(true) -Root: HKLM; Subkey: "SOFTWARE\Classes\.log\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(true) -Root: HKLM; Subkey: "SOFTWARE\Classes\.c\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(true) -Root: HKLM; Subkey: "SOFTWARE\Classes\.cpp\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(true) -Root: HKLM; Subkey: "SOFTWARE\Classes\.cs\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(true) -Root: HKLM; Subkey: "SOFTWARE\Classes\.h\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(true) -Root: HKLM; Subkey: "SOFTWARE\Classes\.md\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(true) -Root: HKLM; Subkey: "SOFTWARE\Classes\.ini\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(true) -Root: HKLM; Subkey: "SOFTWARE\Classes\.java\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(true) -Root: HKLM; Subkey: "SOFTWARE\Classes\.rst\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(true) - -; registry for each user (non-Admin only) -Root: HKCU; Subkey: "SOFTWARE\Classes\*\shell\sakuraeditor"; ValueType: string; ValueName: ""; ValueData: "{cm:fileassocMenu}"; Tasks: fileassoc; Flags: uninsdeletekey; Check: CheckPrivilege(false) -Root: HKCU; Subkey: "SOFTWARE\Classes\*\shell\sakuraeditor"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\sakura.exe"""; Tasks: fileassoc; Flags: uninsdeletekey; Check: CheckPrivilege(false) -Root: HKCU; Subkey: "SOFTWARE\Classes\*\shell\sakuraeditor\command"; ValueType: string; ValueName: ""; ValueData: """{app}\sakura.exe"" ""%1"""; Tasks: fileassoc; Flags: uninsdeletekey; Check: CheckPrivilege(false) -Root: HKCU; Subkey: "SOFTWARE\Classes\Applications\sakura.exe\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\sakura.exe"" ""%1"""; Tasks: proglist; Flags: uninsdeletekey; Check: CheckPrivilege(false) - -Root: HKLM; Subkey: "SOFTWARE\Classes\directory\shell\sakuraGrep"; ValueType: string; ValueName: ""; ValueData: "{cm:sakuragrepMenu}"; Tasks: sakuragrep; Flags: uninsdeletekey; Check: CheckPrivilege(false) -Root: HKLM; Subkey: "SOFTWARE\Classes\directory\shell\sakuraGrep"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\sakura.exe"""; Tasks: sakuragrep; Flags: uninsdeletekey; Check: CheckPrivilege(false) -Root: HKLM; Subkey: "SOFTWARE\Classes\directory\shell\sakuraGrep\command"; ValueType: string; ValueName: ""; ValueData: """{app}\sakura.exe"" -GREPDLG -GREPMODE -GFOLDER=""%1"" -GOPT=""SP"" -GCODE=99 "; Tasks: sakuragrep; Flags: uninsdeletekey; Check: CheckPrivilege(false) - -Root: HKLM; Subkey: "SOFTWARE\Classes\directory\BackGround\shell\sakuraGrep"; ValueType: string; ValueName: ""; ValueData: "{cm:sakuragrepMenu}"; Tasks: sakuragrep; Flags: uninsdeletekey; Check: CheckPrivilege(false) -Root: HKLM; Subkey: "SOFTWARE\Classes\directory\BackGround\shell\sakuraGrep"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\sakura.exe"""; Tasks: sakuragrep; Flags: uninsdeletekey; Check: CheckPrivilege(false) -Root: HKLM; Subkey: "SOFTWARE\Classes\directory\BackGround\shell\sakuraGrep\command"; ValueType: string; ValueName: ""; ValueData: """{app}\sakura.exe"" -GREPDLG -GREPMODE -GFOLDER=""%V"" -GOPT=""SP"" -GCODE=99 "; Tasks: sakuragrep; Flags: uninsdeletekey; Check: CheckPrivilege(false) - -; add ProgID -; see https://www.glamenv-septzen.net/view/14#idf5215e -; see https://docs.microsoft.com/en-us/visualstudio/extensibility/registering-verbs-for-file-name-extensions?view=vs-2017 -Root: HKLM; Subkey: "SOFTWARE\Classes\SakuraEditor.Document"; ValueType: string; ValueName: ""; ValueData: ""; Flags: uninsdeletekey; Check: CheckPrivilege(false) -Root: HKLM; Subkey: "SOFTWARE\Classes\SakuraEditor.Document\shell"; ValueType: string; ValueName: ""; ValueData: ""; Flags: uninsdeletekey; Check: CheckPrivilege(false) -Root: HKLM; Subkey: "SOFTWARE\Classes\SakuraEditor.Document\shell\open"; ValueType: string; ValueName: ""; ValueData: ""; Flags: uninsdeletekey; Check: CheckPrivilege(false) -Root: HKLM; Subkey: "SOFTWARE\Classes\SakuraEditor.Document\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\sakura.exe"" ""%1"""; Flags: uninsdeletekey; Check: CheckPrivilege(false) - -; add File Handlers to each extensions -; see https://docs.microsoft.com/en-us/visualstudio/extensibility/specifying-file-handlers-for-file-name-extensions?view=vs-2017 -Root: HKLM; Subkey: "SOFTWARE\Classes\.txt\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(false) -Root: HKLM; Subkey: "SOFTWARE\Classes\.log\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(false) -Root: HKLM; Subkey: "SOFTWARE\Classes\.c\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(false) -Root: HKLM; Subkey: "SOFTWARE\Classes\.cpp\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(false) -Root: HKLM; Subkey: "SOFTWARE\Classes\.cs\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(false) -Root: HKLM; Subkey: "SOFTWARE\Classes\.h\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(false) -Root: HKLM; Subkey: "SOFTWARE\Classes\.md\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(false) -Root: HKLM; Subkey: "SOFTWARE\Classes\.ini\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(false) -Root: HKLM; Subkey: "SOFTWARE\Classes\.java\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(false) -Root: HKLM; Subkey: "SOFTWARE\Classes\.rst\OpenWithProgids"; ValueType: string; ValueName: "SakuraEditor.Document"; ValueData: ""; Flags: uninsdeletevalue; Check: CheckPrivilege(false) - -[Icons] -Name: "{group}\{cm:AppName}"; Filename: "{app}\sakura.exe"; Components: main; Check: InTopMenu(false); Tasks: startmenu; -Name: "{userstartmenu}\{cm:AppName}"; Filename: "{app}\sakura.exe"; Components: main; Check: InTopMenu(true); Tasks: startmenu; -Name: "{group}\{cm:ComponentsHelp}"; Filename: "{app}\sakura.chm"; Components: help; Tasks: startmenu; -Name: "{group}\{cm:IconPreferencefolder}"; Filename: "%APPDATA%\sakura"; Components: main; Check: isMultiUserEnabled; Tasks: startmenu; -Name: "{userdesktop}\{cm:AppName}"; Filename: "{app}\sakura.exe"; Components: main; Tasks: desktopicon; -Name: "{group}\{cm:UninstallProgram,{cm:AppName}}"; Filename: "{uninstallexe}"; Tasks: startmenu; -Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{cm:AppName}"; Filename: "{app}\sakura.exe"; Components: main; Tasks: quicklaunch; -Name: "{userstartup}\{cm:residentStartup}"; Filename: "{app}\sakura.exe"; Parameters: "-NOWIN"; Components: main; Tasks: startup; -Name: "{#MySendTo}\{cm:AppName}"; Filename: "{app}\sakura.exe"; Components: main; Tasks: sendto; - -[Run] -FileName: "{app}\sakura.exe"; Description: "{cm:StartNow}"; WorkingDir: "{app}"; Flags: postinstall nowait skipifsilent; Check: CheckPrivilege(false); - -[UninstallDelete] -;Uninstall時に確認無く消されるのでコメントアウト -;Type: files; Name: "{app}\sakura.ini" -;Type: files; Name: "{userappdata}\sakura\sakura.ini"; Check: isMultiUserEnabled -;Type: files; Name: "{app}\sakura.ini"; Check: isMultiUserDisabled - -[Dirs] -Name: "{userappdata}\sakura"; Components: main; Tasks: startmenu; Check: isMultiUserEnabled - -[Code] -var - MultiUserPage: TInputOptionWizardPage; - MultiUserPageEnabled : Boolean; - -{ ********************************** - Utility Functions - ********************************** } - -function isMultiUserEnabled : Boolean; -begin - Result := False; - if MultiUserPageEnabled then - Result := MultiUserPage.Values[0]; -end; - -function isMultiUserDisabled : Boolean; -begin - Result := not isMultiUserEnabled; -end; - -function CheckPrivilege( admin: Boolean ) : Boolean; -begin - if admin then - begin - Result := IsAdminLoggedOn; - end - else - begin - Result := not IsAdminLoggedOn; - end; -end; - -{ - default installation target directory - Admin: Program Files\sakura - User: \sakura -} -function getDefautDirName( progdir : String ) : String; -var - basedir : String; -begin - if IsAdminLoggedOn then - begin - basedir := ExpandConstant( '{pf}' ); - end - else - begin - basedir := ExpandConstant( '{userappdata}' ); - end; - Result := basedir + '\' + progdir; -end; - -function IsVistaOrLater : Boolean; -begin - Result := UsingWinNT and (( GetWindowsVersion shr 24) >= 6 ); -end; - -function IsWin2kOrLater : Boolean; -begin - Result := UsingWinNT and (( GetWindowsVersion shr 24) >= 5 ); -end; - -function IsWin10OrLater : Boolean; -var - Version: TWindowsVersion; -begin - GetWindowsVersionEx(Version); - if (Version.Major >= 10) then - begin - Result := True; - end else begin - Result := False; - end; -end; -function InTopMenu( TopMenu : Boolean ) : Boolean; -begin - if TopMenu then - begin - if IsWin10OrLater then - begin - Result := True; - end else begin - Result := False; - end - end else begin - Result := True; - end; -end; -{ ********************************** - Custom Wizard Page - ********************************** } - -{ Callback event functions } - -function NextButtonClickMultiUser( Sender : TWizardPage): Boolean; -var - selected: Integer; -{ t : String;} -begin - Result := True; - if MultiUserPageEnabled then - begin - -{ DEBUG CODE - t := 'MultiUser Setting :'; - if IsAdminLoggedOn then - t := t + 'Administrator '; - if ((GetWindowsVersion shr 24) >= 6 ) then - t := t + 'Vista '; - if MultiUserPage.Values[0] = False then - t := t + 'SingleUser '; - t := t + Format( 'WinVer: %.8x', [GetWindowsVersion] ); - MsgBox( t, mbConfirmation, MB_OK); -} - - { Alert if admin mode && multi user = False } - if IsAdminLoggedOn and - IsVistaOrLater and - ( MultiUserPage.Values[0] = False ) then - begin -{ - Program Files等のシステムフォルダへインストールする場合はUACを無効にしないと設定が保存できません。 -} - selected := MsgBox( - CustomMessage('MultiUser'), - mbConfirmation, - ( MB_OKCANCEL )); - if selected = IDCANCEL then - Result := False; - end; - end; -end; - -function ShoudSkipMultiUser(Sender : TWizardPage ): Boolean; -var - selectdir : String; - prev_version_h, prev_version_l : Cardinal; -begin - Result := False; - if ( not MultiUserPageEnabled ) then - Result := True - else - begin - selectdir := AddBackslash(ExpandConstant( '{app}' )); - if FileExists( selectdir + 'sakura.exe' ) then - begin - Result := True; - if GetIniInt( 'Settings', 'MultiUser', 0, 0, 1, selectdir + 'sakura.exe.ini' ) = 1 then - MultiUserPage.Values[0] := True - else - MultiUserPage.Values[0] := False; - end; - end; -end; - -{ ********************************** - System Event Functions - ********************************** } - -{ Add multi user selection page if supported } -procedure InitializeWizard; -begin - { Create multi user page } - MultiUserPage := CreateInputOptionPage( wpSelectComponents, CustomMessage('InitWiz_Title'), - CustomMessage('InitWiz_SubTitle'), - CustomMessage('InitWiz_Comment'), False, False ); - MultiUserPage.Add( CustomMessage('InitWiz_Check') ); - MultiUserPage.Values[0] := False; - MultiUserPage.OnShouldSkipPage := @ShoudSkipMultiUser; - MultiUserPage.OnNextButtonClick := @NextButtonClickMultiUser; - MultiUserPageEnabled := False; - {Show multiuser mode configuration only in case of Win2K or later } - if IsWin2kOrLater then - begin - { multi user mode is supported } - MultiUserPageEnabled := True; - - { - default multi user mode - User: OFF because installation target is also local - Admin: - Vista or later: ON - Other: OFF - } - if IsVistaOrLater and - IsAdminLoggedOn then - MultiUserPage.Values[0] := True - else - MultiUserPage.Values[0] := False; - end; -end; - -{ Build List of installation configuration for ready page } -function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, - MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String; -var - MemoMuitiUser, MemoVirtualStore : String; -begin - MemoMuitiUser := CustomMessage('ReadyMemo_SaveLocation') + NewLine + Space; - MemoVirtualStore := 'VirtualStore' + NewLine + Space; - - if isMultiUserEnabled then - begin - MemoMuitiUser := MemoMuitiUser + CustomMessage('ReadyMemo_UserProfileDir'); - MemoVirtualStore := MemoVirtualStore + CustomMessage('ReadyMemo_VirtualStoreDisable'); - end - else - begin - MemoMuitiUser := MemoMuitiUser + CustomMessage('ReadyMemo_ExecProfileDir'); - MemoVirtualStore := MemoVirtualStore + CustomMessage('ReadyMemo_VirtualStoreEnable'); - end; - - if IsVistaOrLater then - MemoVirtualStore := MemoVirtualStore + NewLine + NewLine - else - MemoVirtualStore := ''; - - Result := MemoDirInfo + NewLine + NewLine + - MemoMuitiUser + NewLine + NewLine + - MemoVirtualStore + - MemoComponentsInfo + NewLine + NewLine + - MemoGroupInfo + NewLine + NewLine + - MemoTasksInfo; -end; - - -{ ********************************** - Sample codes (not used at this moment - ********************************** } - -{ -Const - UAC_SUPPORT_LOWEST_VERSION_H = $00010005; 1.5. - UAC_SUPPORT_LOWEST_VERSION_L = $000f00c8; .15.200 - - if GetVersionNumbers( selectdir + 'sakura.exe', prev_version_h, prev_version_l ) then - begin - Result := False; - MsgBox( Format( 'existing version at %s : %d.%d.%d.%d', [ - selectdir + 'sakura.exe', - (prev_version_h shr 16 ), - (prev_version_h and $ffff ), - (prev_version_l shr 16 ), - (prev_version_l and $ffff )] ), - mbConfirmation, MB_OK); - if ( prev_version_h < UAC_SUPPORT_LOWEST_VERSION_H ) or - (( prev_version_h = UAC_SUPPORT_LOWEST_VERSION_H ) - and ( prev_version_l < UAC_SUPPORT_LOWEST_VERSION_L )) then - begin - end - end -} From c2bd011459b2012273eb1e2aa1b10d0e819ff995 Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Thu, 28 Jan 2021 08:18:13 +0800 Subject: [PATCH 0391/1024] Update sakura-common.iss --- installer/sakura-common.iss | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/installer/sakura-common.iss b/installer/sakura-common.iss index a447e1dfc9..f807ca76c4 100644 --- a/installer/sakura-common.iss +++ b/installer/sakura-common.iss @@ -69,13 +69,13 @@ zh_hant.AppVerName=櫻花編輯器 en.AppPublisher=SAKURA Editor developers ja.AppPublisher=サクラエディタ開発チーム -zh_hans.AppPublisher=樱花编辑器 开发者 -zh_hant.AppPublisher=櫻花編輯器 開發者 +zh_hans.AppPublisher=樱花编辑器 开发团队 +zh_hant.AppPublisher=櫻花編輯器 開發团队 en.TypesAll=All ja.TypesAll=すべて zh_hans.TypesAll=全部安装 -zh_hant.TypesAll==全部安裝 +zh_hant.TypesAll=全部安裝 en.TypesEditorWithHelp=Editor with Help ja.TypesEditorWithHelp=本体とヘルプ @@ -95,7 +95,7 @@ zh_hant.TypesCustom=自定義 en.ComponentsMain=SAKURA Editor itself ja.ComponentsMain=サクラエディタ本体 zh_hans.ComponentsMain=樱花编辑器 -zh_hant.ComponentsMain=櫻花編輯器本体 +zh_hant.ComponentsMain=櫻花編輯器 en.ComponentsHelp=help files ja.ComponentsHelp=ヘルプファイル From 6a151b96ec0a4b4bf5951d2f7c470130a9a2a334 Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Thu, 28 Jan 2021 08:21:58 +0800 Subject: [PATCH 0392/1024] Delete Japanese.isl --- installer/Languages/Japanese.isl | 367 ------------------------------- 1 file changed, 367 deletions(-) delete mode 100644 installer/Languages/Japanese.isl diff --git a/installer/Languages/Japanese.isl b/installer/Languages/Japanese.isl deleted file mode 100644 index df7f8450d9..0000000000 --- a/installer/Languages/Japanese.isl +++ /dev/null @@ -1,367 +0,0 @@ -; *** Inno Setup version 6.1.0+ Japanese messages *** -; -; Maintained by Koichi Shirasuka (shirasuka@eugrid.co.jp) -; -; Translation based on Ryou Minakami (ryou32jp@yahoo.co.jp) -; -; $jrsoftware: issrc/Files/Languages/Japanese.isl,v 1.6 2010/03/08 07:50:01 mlaan Exp $ - -[LangOptions] -LanguageName=<65E5><672C><8A9E> -LanguageID=$0411 -LanguageCodePage=932 - -[Messages] - -; *** Application titles -SetupAppTitle=ZbgAbv -SetupWindowTitle=%1 ZbgAbv -UninstallAppTitle=ACXg[ -UninstallAppFullTitle=%1 ACXg[ - -; *** Misc. common -InformationTitle= -ConfirmTitle=mF -ErrorTitle=G[ - -; *** SetupLdr messages -SetupLdrStartupMessage=%1 CXg[܂Bs܂H -LdrCannotCreateTemp=ꎞt@C쐬ł܂BZbgAbv𒆎~܂B -LdrCannotExecTemp=ꎞtH_[̃t@Csł܂BZbgAbv𒆎~܂B - -; *** Startup error messages -LastErrorMessage=%1.%n%nG[ %2: %3 -SetupFileMissing=t@C %1 ‚܂B邩VZbgAbvvO肵ĂB -SetupFileCorrupt=ZbgAbvt@CĂ܂BVZbgAbvvO肵ĂB -SetupFileCorruptOrWrongVer=ZbgAbvt@CĂ邩Ão[W̃ZbgAbvƌ݊܂B邩VZbgAbvvO肵ĂB -InvalidParameter=R}hCɕsȃp[^[n܂:%n%n%1 -SetupAlreadyRunning=ZbgAbv͊ɎsłB -WindowsVersionNotSupported=̃vO͂g̃o[W Windows T|[gĂ܂B -WindowsServicePackRequired=̃vO̎sɂ %1 Service Pack %2 ȍ~KvłB -NotOnThisPlatform=̃vO %1 ł͓삵܂B -OnlyOnThisPlatform=̃vO̎sɂ %1 KvłB -OnlyOnTheseArchitectures=̃vO%n%n%1vZbT[ Windows ɂCXg[ł܂B -WinVersionTooLowError=̃vO̎sɂ %1 %2 ȍ~KvłB -WinVersionTooHighError=̃vO %1 %2 ȍ~ł͓삵܂B -AdminPrivilegesRequired=̃vOCXg[邽߂ɂ͊Ǘ҂ƂăOCKv܂B -PowerUserPrivilegesRequired=̃vOCXg[邽߂ɂ͊Ǘ҂܂̓p[[U[ƂăOCKv܂B -SetupAppRunningError=ZbgAbv͎s %1 o܂B%n%nJĂAvP[Vׂĕ‚ĂuOKvNbNĂBuLZvNbNƁAZbgAbvI܂B -UninstallAppRunningError=ACXg[͎s %1 o܂B%n%nJĂAvP[Vׂĕ‚ĂuOKvNbNĂBuLZvNbNƁAZbgAbvI܂B - -; *** Startup questions -PrivilegesRequiredOverrideTitle=CXg[[h̑I -PrivilegesRequiredOverrideInstruction=CXg[[hIĂ -PrivilegesRequiredOverrideText1=%1 ׂ͂Ẵ[U[ (ǗҌKvł) ܂݂͌̃[U[pɃCXg[ł܂B -PrivilegesRequiredOverrideText2=%1 ݂͌̃[U[܂ׂ͂Ẵ[U[p (ǗҌKvł) ɃCXg[ł܂B -PrivilegesRequiredOverrideAllUsers=ׂẴ[U[pɃCXg[(&A) -PrivilegesRequiredOverrideAllUsersRecommended=ׂẴ[U[pɃCXg[(&A) () -PrivilegesRequiredOverrideCurrentUser=݂̃[U[pɃCXg[(&M) -PrivilegesRequiredOverrideCurrentUserRecommended=݂̃[U[pɃCXg[(&M) () - -; *** Misc. errors -ErrorCreatingDir=fBNg %1 쐬ɃG[܂B -ErrorTooManyFilesInDir=fBNg %1 Ƀt@C쐬ɃG[܂Bt@C̐܂B - -; *** Setup common messages -ExitSetupTitle=ZbgAbvI -ExitSetupMessage=ZbgAbvƂ͊Ă܂BŃZbgAbv𒆎~ƃvO̓CXg[܂B%n%n߂ăCXg[ꍇ́AxZbgAbvsĂB%n%nZbgAbvI܂H -AboutSetupMenuItem=ZbgAbvɂ‚(&A)... -AboutSetupTitle=ZbgAbvɂ‚ -AboutSetupMessage=%1 %2%n%3%n%n%1 z[y[W:%n%4 -AboutSetupNote= -TranslatorNote= - -; *** Buttons -ButtonBack=< ߂(&B) -ButtonNext=(&N) > -ButtonInstall=CXg[(&I) -ButtonOK=OK -ButtonCancel=LZ -ButtonYes=͂(&Y) -ButtonYesToAll=ׂĂ͂(&A) -ButtonNo=(&N) -ButtonNoToAll=ׂĂ(&O) -ButtonFinish=(&F) -ButtonBrowse=Q(&B)... -ButtonWizardBrowse=Q(&R) -ButtonNewFolder=VtH_[(&M) - -; *** "Select Language" dialog messages -SelectLanguageTitle=ZbgAbvɎgp錾̑I -SelectLanguageLabel=CXg[ɗp錾IłB - -; *** Common wizard text -ClickNext=sɂ́uցvAZbgAbvIɂ́uLZvNbNĂB -BeveledLabel= -BrowseDialogTitle=tH_[Q -BrowseDialogLabel=XgtH_[I OK ĂB -NewFolderName=VtH_[ - -; *** "Welcome" wizard page -WelcomeLabel1=[name] ZbgAbvEBU[h̊Jn -WelcomeLabel2=̃vO͂gp̃Rs[^[ [name/ver] CXg[܂B%n%nsOɑ̃AvP[VׂďIĂB - -; *** "Password" wizard page -WizardPassword=pX[h -PasswordLabel1=̃CXg[vO̓pX[hɂĕی삳Ă܂B -PasswordLabel3=pX[h͂āuցvNbNĂBpX[h͑啶Əʂ܂B -PasswordEditLabel=pX[h(&P): -IncorrectPassword=͂ꂽpX[h܂Bx͂ȂĂB - -; *** "License Agreement" wizard page -WizardLicense=gp_񏑂̓ -LicenseLabel=sOɈȉ̏dvȏǂ݂B -LicenseLabel3=ȉ̎gp_񏑂ǂ݂BCXg[𑱍sɂ͂̌_񏑂ɓӂKv܂B -LicenseAccepted=ӂ(&A) -LicenseNotAccepted=ӂȂ(&D) - -; *** "Information" wizard pages -WizardInfoBefore= -InfoBeforeLabel=sOɈȉ̏dvȏǂ݂B -InfoBeforeClickLabel=ZbgAbv𑱍sɂ́uցvNbNĂB -WizardInfoAfter= -InfoAfterLabel=sOɈȉ̏dvȏǂ݂B -InfoAfterClickLabel=ZbgAbv𑱍sɂ́uցvNbNĂB - -; *** "User Information" wizard page -WizardUserInfo=[U[ -UserInfoDesc=[U[͂ĂB -UserInfoName=[U[(&U): -UserInfoOrg=gD(&O): -UserInfoSerial=VAԍ(&S): -UserInfoNameRequired=[U[͂ĂB - -; *** "Select Destination Location" wizard page -WizardSelectDir=CXg[̎w -SelectDirDesc=[name] ̃CXg[w肵ĂB -SelectDirLabel3=[name] CXg[tH_w肵āAuցvNbNĂB -SelectDirBrowseLabel=ɂ́uցvNbNĂBʂ̃tH_[Iɂ́uQƁvNbNĂB -DiskSpaceGBLabel=̃vO͍Œ [gb] GB ̃fBXN󂫗̈KvƂ܂B -DiskSpaceMBLabel=̃vO͍Œ [mb] MB ̃fBXN󂫗̈KvƂ܂B -CannotInstallToNetworkDrive=lbg[NhCuɃCXg[邱Ƃ͂ł܂B -CannotInstallToUNCPath=UNC pXɃCXg[邱Ƃ͂ł܂B -InvalidPath=hCu܂ފSȃpX͂ĂB%n%nFC:\APP%n%n܂ UNC `̃pX͂ĂB%n%nF\\server\share -InvalidDrive=w肵hCu܂ UNC pX‚ȂANZXł܂Bʂ̃pXw肵ĂB -DiskSpaceWarningTitle=fBXN󂫗̈̕s -DiskSpaceWarning=CXg[ɂ͍Œ %1 KB ̃fBXN󂫗̈悪KvłAw肳ꂽhCuɂ %2 KB ̋󂫗̈悵܂B%n%n̂܂ܑs܂H -DirNameTooLong=hCu܂̓pX߂܂B -InvalidDirName=tH_[łB -BadDirName32=ȉ̕܂ރtH_[͎wł܂B:%n%n%1 -DirExistsTitle=̃tH_[ -DirExists=tH_[ %n%n%1%n%nɑ݂܂B̂܂܂̃tH_[փCXg[܂H -DirDoesntExistTitle=tH_[‚܂B -DirDoesntExist=tH_[ %n%n%1%n%n‚܂BVtH_[쐬܂H - -; *** "Select Components" wizard page -WizardSelectComponents=R|[lg̑I -SelectComponentsDesc=CXg[R|[lgIĂB -SelectComponentsLabel2=CXg[R|[lgIĂBCXg[Kv̂ȂR|[lg̓`FbNOĂBsɂ́uցvNbNĂB -FullInstallation=tCXg[ -; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) -CompactInstallation=RpNgCXg[ -CustomInstallation=JX^CXg[ -NoUninstallWarningTitle=̃R|[lg -NoUninstallWarning=ZbgAbv͈ȉ̃R|[lgɃCXg[Ă邱Ƃo܂B%n%n%1%n%ñR|[lg̑IĂACXg[͂܂B%n%n̂܂ܑs܂H -ComponentSize1=%1 KB -ComponentSize2=%1 MB -ComponentsDiskSpaceGBLabel=݂̑I͍Œ [gb] GB ̃fBXN󂫗̈KvƂ܂B -ComponentsDiskSpaceMBLabel=݂̑I͍Œ [mb] MB ̃fBXN󂫗̈KvƂ܂B - -; *** "Select Additional Tasks" wizard page -WizardSelectTasks=lj^XN̑I -SelectTasksDesc=slj^XNIĂB -SelectTasksLabel2=[name] CXg[Ɏslj^XNIāAuցvNbNĂB - -; *** "Select Start Menu Folder" wizard page -WizardSelectProgramGroup=X^[gj[tH_[̎w -SelectStartMenuFolderDesc=vÕV[gJbg쐬ꏊw肵ĂB -SelectStartMenuFolderLabel3=ZbgAbṽ͎X^[gj[tH_[ɃvÕV[gJbg쐬܂B -SelectStartMenuFolderBrowseLabel=ɂ́uցvNbNĂBႤtH_[Iɂ́uQƁvNbNĂB -MustEnterGroupName=tH_[w肵ĂB -GroupNameTooLong=tH_[܂̓pX߂܂B -InvalidGroupName=tH_[łB -BadGroupName=̕܂ރtH_[͎wł܂:%n%n%1 -NoProgramGroupCheck2=X^[gj[tH_[쐬Ȃ(&D) - -; *** "Ready to Install" wizard page -WizardReady=CXg[ -ReadyLabel1=gp̃Rs[^ [name] CXg[鏀ł܂B -ReadyLabel2a=CXg[𑱍sɂ́uCXg[vAݒ̊mFύXsɂ́u߂vNbNĂB -ReadyLabel2b=CXg[𑱍sɂ́uCXg[vNbNĂB -ReadyMemoUserInfo=[U[: -ReadyMemoDir=CXg[: -ReadyMemoType=ZbgAbv̎: -ReadyMemoComponents=IR|[lg: -ReadyMemoGroup=X^[gj[tH_[: -ReadyMemoTasks=lj^XNꗗ: - -; *** TDownloadWizardPage wizard page and DownloadTemporaryFile -DownloadingLabel=lj̃t@C_E[hĂ܂... -ButtonStopDownload=_E[h𒆎~(&S) -StopDownload=_E[h𒆎~Ă낵łH -ErrorDownloadAborted=_E[h𒆎~܂ -ErrorDownloadFailed=_E[hɎs܂: %1 %2 -ErrorDownloadSizeFailed=TCY̎擾Ɏs܂: %1 %2 -ErrorFileHash1=t@C̃nbVɎs܂: %1 -ErrorFileHash2=ȃt@CnbV: \ꂽl %1, ۂ̒l %2 -ErrorProgress=Ȑis: %1 / %2 -ErrorFileSize=ȃt@CTCY: \ꂽl %1, ۂ̒l %2 - -; *** "Preparing to Install" wizard page -WizardPreparing=CXg[ -PreparingDesc=gp̃Rs[^[ [name] CXg[鏀Ă܂B -PreviousInstallNotCompleted=OsAvP[ṼCXg[܂͍폜Ă܂Bɂ̓Rs[^[ċNKv܂B%n%n[name] ̃CXg[邽߂ɂ́AċNɂxZbgAbvsĂB -CannotContinue=ZbgAbv𑱍sł܂BuLZvNbNăZbgAbvIĂB -ApplicationsFound=ȉ̃AvP[VZbgAbvɕKvȃt@CgpĂ܂BZbgAbvɎIɃAvP[VI邱Ƃ𐄏܂B -ApplicationsFound2=ȉ̃AvP[VZbgAbvɕKvȃt@CgpĂ܂BZbgAbvɎIɃAvP[VI邱Ƃ𐄏܂BCXg[̊AZbgAbv̓AvP[V̍ċN݂܂B -CloseApplications=IɃAvP[VI(&A) -DontCloseApplications=AvP[VIȂ(&D) -ErrorCloseApplications=ZbgAbvׂ͂ẴAvP[VIɏI邱Ƃł܂łBZbgAbv𑱍sOɁAXV̕Kvȃt@CgpĂ邷ׂẴAvP[VI邱Ƃ𐄏܂B -PrepareToInstallNeedsRestart=ZbgAbv̓Rs[^[ċNKv܂BRs[^[ċNAZbgAbvēxs [name] ̃CXg[ĂB%n%nɍċN܂H? - -; *** "Installing" wizard page -WizardInstalling=CXg[ -InstallingLabel=gp̃Rs[^[ [name] CXg[Ă܂B΂炭҂B - -; *** "Setup Completed" wizard page -FinishedHeadingLabel=[name] ZbgAbvEBU[h̊ -FinishedLabelNoIcons=gp̃Rs[^[ [name] ZbgAbv܂B -FinishedLabel=gp̃Rs[^[ [name] ZbgAbv܂BAvP[Vsɂ̓CXg[ꂽV[gJbgIĂB -ClickFinish=ZbgAbvIɂ́uvNbNĂB -FinishedRestartLabel=[name] ̃CXg[邽߂ɂ́ARs[^[ċNKv܂BɍċN܂H -FinishedRestartMessage=[name] ̃CXg[邽߂ɂ́ARs[^[ċNKv܂B%n%nɍċN܂H -ShowReadmeCheck=README t@C\B -YesRadio=ɍċN(&Y) -NoRadio=Ŏ蓮ōċN(&N) -; used for example as 'Run MyProg.exe' -RunEntryExec=%1 ̎s -; used for example as 'View Readme.txt' -RunEntryShellExec=%1 ̕\ - -; *** "Setup Needs the Next Disk" stuff -ChangeDiskTitle=fBXN̑} -SelectDiskLabel2=fBXN %1 }AuOKvNbNĂB%n%ñfBXÑt@Cɕ\ĂtH_[ȊȌꏊɂꍇ́ApX͂邩uQƁv{^NbNĂB -PathLabel=pX(&P): -FileNotInDir2=t@C %1 %2 Ɍ‚܂BfBXN}邩Aʂ̃tH_[w肵ĂB -SelectDirectoryLabel=̃fBXN̂ꏊw肵ĂB - -; *** Installation phase messages -SetupAborted=ZbgAbv͊Ă܂B%n%nĂAxZbgAbvsĂB -AbortRetryIgnoreSelectAction=ANVIĂ -AbortRetryIgnoreRetry=Ďs(&T) -AbortRetryIgnoreIgnore=G[𖳎đs(&I) -AbortRetryIgnoreCancel=CXg[LZ - -; *** Installation status messages -StatusClosingApplications=AvP[VIĂ܂... -StatusCreateDirs=tH_[쐬Ă܂... -StatusExtractFiles=t@CWJĂ܂... -StatusCreateIcons=V|gJbg쐬Ă܂... -StatusCreateIniEntries=INIt@Cݒ肵Ă܂... -StatusCreateRegistryEntries=WXgݒ肵Ă܂... -StatusRegisterFiles=t@Co^Ă܂... -StatusSavingUninstall=ACXg[ۑĂ܂... -StatusRunProgram=CXg[Ă܂... -StatusRestartingApplications=AvP[VċNĂ܂... -StatusRollback=ύXɖ߂Ă܂... - -; *** Misc. errors -ErrorInternal2=G[: %1 -ErrorFunctionFailedNoCode=%1 G[ -ErrorFunctionFailed=%1 G[: R[h %2 -ErrorFunctionFailedWithMessage=%1 G[: R[h %2.%n%3 -ErrorExecutingProgram=t@CsG[:%n%1 - -; *** Registry errors -ErrorRegOpenKey=WXgL[I[vG[:%n%1\%2 -ErrorRegCreateKey=WXgL[쐬G[:%n%1\%2 -ErrorRegWriteKey=WXgL[݃G[:%n%1\%2 - -; *** INI errors -ErrorIniEntry=INIt@CGg쐬G[: t@C %1 - -; *** File copying errors -FileAbortRetryIgnoreSkipNotRecommended=̃t@CXLbv(&S) (܂) -FileAbortRetryIgnoreIgnoreNotRecommended=G[𖳎đs(&I) (܂) -SourceIsCorrupted=Rs[̃t@CĂ܂B -SourceDoesntExist=Rs[̃t@C %1 ‚܂B -ExistingFileReadOnly2=̃t@C͓ǂݎp̂ߒuł܂B -ExistingFileReadOnlyRetry=ǂݎpĂxȂ(&R) -ExistingFileReadOnlyKeepExisting=̃t@Cc(&K) -ErrorReadingExistingDest=̃t@CǂݍݒɃG[܂: -FileExistsSelectAction=ANVIĂ -FileExists2=t@C͊ɑ݂܂B -FileExistsOverwriteExisting=̃t@C㏑(&O) -FileExistsKeepExisting=̃t@Cێ(&K) -FileExistsOverwriteOrKeepAll=ȍ~̋ɓs(&D) -ExistingFileNewerSelectAction=ANVIĂ -ExistingFileNewer2=ZbgAbvCXg[悤ƂĂ̂Vt@C܂B -ExistingFileNewerOverwriteExisting=̃t@C㏑(&O) -ExistingFileNewerKeepExisting=̃t@Cێ(&K) () -ExistingFileNewerOverwriteOrKeepAll=ȍ~̋ɓs(&D) -ErrorChangingAttr=t@C̑ύXɃG[܂: -ErrorCreatingTemp=Rs[̃tH_[Ƀt@C쐬ɃG[܂: -ErrorReadingSource=Rs[̃t@CǂݍݒɃG[܂: -ErrorCopying=t@CRs[ɃG[܂: -ErrorReplacingExistingFile=̃t@CuɃG[܂: -ErrorRestartReplace=ċNɂu̎sɎs܂: -ErrorRenamingTemp=Rs[tH_[̃t@CύXɃG[܂: -ErrorRegisterServer=DLL/OCX̓o^Ɏs܂: %1 -ErrorRegSvr32Failed=RegSvr32͏IR[h %1 ɂ莸s܂ -ErrorRegisterTypeLib=^CvCuւ̓o^Ɏs܂: %1 - -; *** Uninstall display name markings -UninstallDisplayNameMark=%1 (%2) -UninstallDisplayNameMarks=%1 (%2, %3) -UninstallDisplayNameMark32Bit=32 rbg -UninstallDisplayNameMark64Bit=64 rbg -UninstallDisplayNameMarkAllUsers=ׂẴ[U[ -UninstallDisplayNameMarkCurrentUser=݂̃[U[ - -; *** Post-installation errors -ErrorOpeningReadme=README t@C̃I[vɎs܂B -ErrorRestartingComputer=Rs[^[̍ċNɎs܂B蓮ōċNĂB - -; *** Uninstaller messages -UninstallNotFound=t@C "%1" ‚܂BACXg[sł܂B -UninstallOpenError=t@C "%1" JƂł܂BACXg[sł܂B -UninstallUnsupportedVer=ACXg[Ot@C "%1" ́Ão[W̃ACXg[vOFłȂ`łBACXg[sł܂B -UninstallUnknownEntry=ACXg[Oɕs̃Gg (%1) ‚܂B -ConfirmUninstall=%1 Ƃ̊֘AR|[lgׂč폜܂B낵łH -UninstallOnlyOnWin64=̃vO64 rbgWindowsł̂݃ACXg[邱Ƃł܂B -OnlyAdminCanUninstall=ACXg[邽߂ɂ͊ǗҌKvłB -UninstallStatusLabel=gp̃Rs[^[ %1 폜Ă܂B΂炭҂B -UninstalledAll=%1 ͂gp̃Rs[^[琳ɍ폜܂B -UninstalledMost=%1 ̃ACXg[܂B%n%n‚̍ڂ폜ł܂łB蓮ō폜ĂB -UninstalledAndNeedsRestart=%1 ̍폜邽߂ɂ́ARs[^[ċNKv܂BɍċN܂H -UninstallDataCorrupted=t@C "%1" Ă܂BACXg[sł܂B - -; *** Uninstallation phase messages -ConfirmDeleteSharedFileTitle=Lt@C̍폜 -ConfirmDeleteSharedFile2=VXeŁA̋Lt@C͂ǂ̃vOłgpĂ܂B̋Lt@C폜܂H%n%ñvO܂̃t@CgpꍇA폜ƃvO삵ȂȂ鋰ꂪ܂B܂młȂꍇ́uvIĂBVXeɃt@CcĂNƂ͂܂B -SharedFileNameLabel=t@C: -SharedFileLocationLabel=ꏊ: -WizardUninstalling=ACXg[ -StatusUninstalling=%1 ACXg[Ă܂... - -; *** Shutdown block reasons -ShutdownBlockReasonInstallingApp=%1 CXg[łB -ShutdownBlockReasonUninstallingApp=%1 ACXg[łB - -; The custom messages below aren't used by Setup itself, but if you make -; use of them in your scripts, you'll want to translate them. - -[CustomMessages] - -NameAndVersion=%1 o[W %2 -AdditionalIcons=ACRlj: -CreateDesktopIcon=fXNgbvɃACR쐬(&D) -CreateQuickLaunchIcon=NCbNNACR쐬(&Q) -ProgramOnTheWeb=%1 on the Web -UninstallProgram=%1 ACXg[ -LaunchProgram=%1 s -AssocFileExtension=t@Cgq %2 %1 ֘At܂B -AssocingFileExtension=t@Cgq %2 %1 ֘AtĂ܂... -AutoStartProgramGroupDescription=X^[gAbv: -AutoStartProgram=%1 IɊJn -AddonHostProgramNotFound=IꂽtH_[ %1 ‚܂łB%n%n̂܂ܑs܂H \ No newline at end of file From 9544aaf6283fb53082bccc495a7482153afc5978 Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Thu, 28 Jan 2021 08:22:14 +0800 Subject: [PATCH 0393/1024] Delete Default.isl --- installer/Languages/Default.isl | 384 -------------------------------- 1 file changed, 384 deletions(-) delete mode 100644 installer/Languages/Default.isl diff --git a/installer/Languages/Default.isl b/installer/Languages/Default.isl deleted file mode 100644 index 0b503314f6..0000000000 --- a/installer/Languages/Default.isl +++ /dev/null @@ -1,384 +0,0 @@ -; *** Inno Setup version 6.1.0+ English messages *** -; -; To download user-contributed translations of this file, go to: -; https://jrsoftware.org/files/istrans/ -; -; Note: When translating this text, do not add periods (.) to the end of -; messages that didn't have them already, because on those messages Inno -; Setup adds the periods automatically (appending a period would result in -; two periods being displayed). - -[LangOptions] -; The following three entries are very important. Be sure to read and -; understand the '[LangOptions] section' topic in the help file. -LanguageName=English -LanguageID=$0409 -LanguageCodePage=0 -; If the language you are translating to requires special font faces or -; sizes, uncomment any of the following entries and change them accordingly. -;DialogFontName= -;DialogFontSize=8 -;WelcomeFontName=Verdana -;WelcomeFontSize=12 -;TitleFontName=Arial -;TitleFontSize=29 -;CopyrightFontName=Arial -;CopyrightFontSize=8 - -[Messages] - -; *** Application titles -SetupAppTitle=Setup -SetupWindowTitle=Setup - %1 -UninstallAppTitle=Uninstall -UninstallAppFullTitle=%1 Uninstall - -; *** Misc. common -InformationTitle=Information -ConfirmTitle=Confirm -ErrorTitle=Error - -; *** SetupLdr messages -SetupLdrStartupMessage=This will install %1. Do you wish to continue? -LdrCannotCreateTemp=Unable to create a temporary file. Setup aborted -LdrCannotExecTemp=Unable to execute file in the temporary directory. Setup aborted -HelpTextNote= - -; *** Startup error messages -LastErrorMessage=%1.%n%nError %2: %3 -SetupFileMissing=The file %1 is missing from the installation directory. Please correct the problem or obtain a new copy of the program. -SetupFileCorrupt=The setup files are corrupted. Please obtain a new copy of the program. -SetupFileCorruptOrWrongVer=The setup files are corrupted, or are incompatible with this version of Setup. Please correct the problem or obtain a new copy of the program. -InvalidParameter=An invalid parameter was passed on the command line:%n%n%1 -SetupAlreadyRunning=Setup is already running. -WindowsVersionNotSupported=This program does not support the version of Windows your computer is running. -WindowsServicePackRequired=This program requires %1 Service Pack %2 or later. -NotOnThisPlatform=This program will not run on %1. -OnlyOnThisPlatform=This program must be run on %1. -OnlyOnTheseArchitectures=This program can only be installed on versions of Windows designed for the following processor architectures:%n%n%1 -WinVersionTooLowError=This program requires %1 version %2 or later. -WinVersionTooHighError=This program cannot be installed on %1 version %2 or later. -AdminPrivilegesRequired=You must be logged in as an administrator when installing this program. -PowerUserPrivilegesRequired=You must be logged in as an administrator or as a member of the Power Users group when installing this program. -SetupAppRunningError=Setup has detected that %1 is currently running.%n%nPlease close all instances of it now, then click OK to continue, or Cancel to exit. -UninstallAppRunningError=Uninstall has detected that %1 is currently running.%n%nPlease close all instances of it now, then click OK to continue, or Cancel to exit. - -; *** Startup questions -PrivilegesRequiredOverrideTitle=Select Setup Install Mode -PrivilegesRequiredOverrideInstruction=Select install mode -PrivilegesRequiredOverrideText1=%1 can be installed for all users (requires administrative privileges), or for you only. -PrivilegesRequiredOverrideText2=%1 can be installed for you only, or for all users (requires administrative privileges). -PrivilegesRequiredOverrideAllUsers=Install for &all users -PrivilegesRequiredOverrideAllUsersRecommended=Install for &all users (recommended) -PrivilegesRequiredOverrideCurrentUser=Install for &me only -PrivilegesRequiredOverrideCurrentUserRecommended=Install for &me only (recommended) - -; *** Misc. errors -ErrorCreatingDir=Setup was unable to create the directory "%1" -ErrorTooManyFilesInDir=Unable to create a file in the directory "%1" because it contains too many files - -; *** Setup common messages -ExitSetupTitle=Exit Setup -ExitSetupMessage=Setup is not complete. If you exit now, the program will not be installed.%n%nYou may run Setup again at another time to complete the installation.%n%nExit Setup? -AboutSetupMenuItem=&About Setup... -AboutSetupTitle=About Setup -AboutSetupMessage=%1 version %2%n%3%n%n%1 home page:%n%4 -AboutSetupNote= -TranslatorNote= - -; *** Buttons -ButtonBack=< &Back -ButtonNext=&Next > -ButtonInstall=&Install -ButtonOK=OK -ButtonCancel=Cancel -ButtonYes=&Yes -ButtonYesToAll=Yes to &All -ButtonNo=&No -ButtonNoToAll=N&o to All -ButtonFinish=&Finish -ButtonBrowse=&Browse... -ButtonWizardBrowse=B&rowse... -ButtonNewFolder=&Make New Folder - -; *** "Select Language" dialog messages -SelectLanguageTitle=Select Setup Language -SelectLanguageLabel=Select the language to use during the installation. - -; *** Common wizard text -ClickNext=Click Next to continue, or Cancel to exit Setup. -BeveledLabel= -BrowseDialogTitle=Browse For Folder -BrowseDialogLabel=Select a folder in the list below, then click OK. -NewFolderName=New Folder - -; *** "Welcome" wizard page -WelcomeLabel1=Welcome to the [name] Setup Wizard -WelcomeLabel2=This will install [name/ver] on your computer.%n%nIt is recommended that you close all other applications before continuing. - -; *** "Password" wizard page -WizardPassword=Password -PasswordLabel1=This installation is password protected. -PasswordLabel3=Please provide the password, then click Next to continue. Passwords are case-sensitive. -PasswordEditLabel=&Password: -IncorrectPassword=The password you entered is not correct. Please try again. - -; *** "License Agreement" wizard page -WizardLicense=License Agreement -LicenseLabel=Please read the following important information before continuing. -LicenseLabel3=Please read the following License Agreement. You must accept the terms of this agreement before continuing with the installation. -LicenseAccepted=I &accept the agreement -LicenseNotAccepted=I &do not accept the agreement - -; *** "Information" wizard pages -WizardInfoBefore=Information -InfoBeforeLabel=Please read the following important information before continuing. -InfoBeforeClickLabel=When you are ready to continue with Setup, click Next. -WizardInfoAfter=Information -InfoAfterLabel=Please read the following important information before continuing. -InfoAfterClickLabel=When you are ready to continue with Setup, click Next. - -; *** "User Information" wizard page -WizardUserInfo=User Information -UserInfoDesc=Please enter your information. -UserInfoName=&User Name: -UserInfoOrg=&Organization: -UserInfoSerial=&Serial Number: -UserInfoNameRequired=You must enter a name. - -; *** "Select Destination Location" wizard page -WizardSelectDir=Select Destination Location -SelectDirDesc=Where should [name] be installed? -SelectDirLabel3=Setup will install [name] into the following folder. -SelectDirBrowseLabel=To continue, click Next. If you would like to select a different folder, click Browse. -DiskSpaceGBLabel=At least [gb] GB of free disk space is required. -DiskSpaceMBLabel=At least [mb] MB of free disk space is required. -CannotInstallToNetworkDrive=Setup cannot install to a network drive. -CannotInstallToUNCPath=Setup cannot install to a UNC path. -InvalidPath=You must enter a full path with drive letter; for example:%n%nC:\APP%n%nor a UNC path in the form:%n%n\\server\share -InvalidDrive=The drive or UNC share you selected does not exist or is not accessible. Please select another. -DiskSpaceWarningTitle=Not Enough Disk Space -DiskSpaceWarning=Setup requires at least %1 KB of free space to install, but the selected drive only has %2 KB available.%n%nDo you want to continue anyway? -DirNameTooLong=The folder name or path is too long. -InvalidDirName=The folder name is not valid. -BadDirName32=Folder names cannot include any of the following characters:%n%n%1 -DirExistsTitle=Folder Exists -DirExists=The folder:%n%n%1%n%nalready exists. Would you like to install to that folder anyway? -DirDoesntExistTitle=Folder Does Not Exist -DirDoesntExist=The folder:%n%n%1%n%ndoes not exist. Would you like the folder to be created? - -; *** "Select Components" wizard page -WizardSelectComponents=Select Components -SelectComponentsDesc=Which components should be installed? -SelectComponentsLabel2=Select the components you want to install; clear the components you do not want to install. Click Next when you are ready to continue. -FullInstallation=Full installation -; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) -CompactInstallation=Compact installation -CustomInstallation=Custom installation -NoUninstallWarningTitle=Components Exist -NoUninstallWarning=Setup has detected that the following components are already installed on your computer:%n%n%1%n%nDeselecting these components will not uninstall them.%n%nWould you like to continue anyway? -ComponentSize1=%1 KB -ComponentSize2=%1 MB -ComponentsDiskSpaceGBLabel=Current selection requires at least [gb] GB of disk space. -ComponentsDiskSpaceMBLabel=Current selection requires at least [mb] MB of disk space. - -; *** "Select Additional Tasks" wizard page -WizardSelectTasks=Select Additional Tasks -SelectTasksDesc=Which additional tasks should be performed? -SelectTasksLabel2=Select the additional tasks you would like Setup to perform while installing [name], then click Next. - -; *** "Select Start Menu Folder" wizard page -WizardSelectProgramGroup=Select Start Menu Folder -SelectStartMenuFolderDesc=Where should Setup place the program's shortcuts? -SelectStartMenuFolderLabel3=Setup will create the program's shortcuts in the following Start Menu folder. -SelectStartMenuFolderBrowseLabel=To continue, click Next. If you would like to select a different folder, click Browse. -MustEnterGroupName=You must enter a folder name. -GroupNameTooLong=The folder name or path is too long. -InvalidGroupName=The folder name is not valid. -BadGroupName=The folder name cannot include any of the following characters:%n%n%1 -NoProgramGroupCheck2=&Don't create a Start Menu folder - -; *** "Ready to Install" wizard page -WizardReady=Ready to Install -ReadyLabel1=Setup is now ready to begin installing [name] on your computer. -ReadyLabel2a=Click Install to continue with the installation, or click Back if you want to review or change any settings. -ReadyLabel2b=Click Install to continue with the installation. -ReadyMemoUserInfo=User information: -ReadyMemoDir=Destination location: -ReadyMemoType=Setup type: -ReadyMemoComponents=Selected components: -ReadyMemoGroup=Start Menu folder: -ReadyMemoTasks=Additional tasks: - -; *** TDownloadWizardPage wizard page and DownloadTemporaryFile -DownloadingLabel=Downloading additional files... -ButtonStopDownload=&Stop download -StopDownload=Are you sure you want to stop the download? -ErrorDownloadAborted=Download aborted -ErrorDownloadFailed=Download failed: %1 %2 -ErrorDownloadSizeFailed=Getting size failed: %1 %2 -ErrorFileHash1=File hash failed: %1 -ErrorFileHash2=Invalid file hash: expected %1, found %2 -ErrorProgress=Invalid progress: %1 of %2 -ErrorFileSize=Invalid file size: expected %1, found %2 - -; *** "Preparing to Install" wizard page -WizardPreparing=Preparing to Install -PreparingDesc=Setup is preparing to install [name] on your computer. -PreviousInstallNotCompleted=The installation/removal of a previous program was not completed. You will need to restart your computer to complete that installation.%n%nAfter restarting your computer, run Setup again to complete the installation of [name]. -CannotContinue=Setup cannot continue. Please click Cancel to exit. -ApplicationsFound=The following applications are using files that need to be updated by Setup. It is recommended that you allow Setup to automatically close these applications. -ApplicationsFound2=The following applications are using files that need to be updated by Setup. It is recommended that you allow Setup to automatically close these applications. After the installation has completed, Setup will attempt to restart the applications. -CloseApplications=&Automatically close the applications -DontCloseApplications=&Do not close the applications -ErrorCloseApplications=Setup was unable to automatically close all applications. It is recommended that you close all applications using files that need to be updated by Setup before continuing. -PrepareToInstallNeedsRestart=Setup must restart your computer. After restarting your computer, run Setup again to complete the installation of [name].%n%nWould you like to restart now? - -; *** "Installing" wizard page -WizardInstalling=Installing -InstallingLabel=Please wait while Setup installs [name] on your computer. - -; *** "Setup Completed" wizard page -FinishedHeadingLabel=Completing the [name] Setup Wizard -FinishedLabelNoIcons=Setup has finished installing [name] on your computer. -FinishedLabel=Setup has finished installing [name] on your computer. The application may be launched by selecting the installed shortcuts. -ClickFinish=Click Finish to exit Setup. -FinishedRestartLabel=To complete the installation of [name], Setup must restart your computer. Would you like to restart now? -FinishedRestartMessage=To complete the installation of [name], Setup must restart your computer.%n%nWould you like to restart now? -ShowReadmeCheck=Yes, I would like to view the README file -YesRadio=&Yes, restart the computer now -NoRadio=&No, I will restart the computer later -; used for example as 'Run MyProg.exe' -RunEntryExec=Run %1 -; used for example as 'View Readme.txt' -RunEntryShellExec=View %1 - -; *** "Setup Needs the Next Disk" stuff -ChangeDiskTitle=Setup Needs the Next Disk -SelectDiskLabel2=Please insert Disk %1 and click OK.%n%nIf the files on this disk can be found in a folder other than the one displayed below, enter the correct path or click Browse. -PathLabel=&Path: -FileNotInDir2=The file "%1" could not be located in "%2". Please insert the correct disk or select another folder. -SelectDirectoryLabel=Please specify the location of the next disk. - -; *** Installation phase messages -SetupAborted=Setup was not completed.%n%nPlease correct the problem and run Setup again. -AbortRetryIgnoreSelectAction=Select action -AbortRetryIgnoreRetry=&Try again -AbortRetryIgnoreIgnore=&Ignore the error and continue -AbortRetryIgnoreCancel=Cancel installation - -; *** Installation status messages -StatusClosingApplications=Closing applications... -StatusCreateDirs=Creating directories... -StatusExtractFiles=Extracting files... -StatusCreateIcons=Creating shortcuts... -StatusCreateIniEntries=Creating INI entries... -StatusCreateRegistryEntries=Creating registry entries... -StatusRegisterFiles=Registering files... -StatusSavingUninstall=Saving uninstall information... -StatusRunProgram=Finishing installation... -StatusRestartingApplications=Restarting applications... -StatusRollback=Rolling back changes... - -; *** Misc. errors -ErrorInternal2=Internal error: %1 -ErrorFunctionFailedNoCode=%1 failed -ErrorFunctionFailed=%1 failed; code %2 -ErrorFunctionFailedWithMessage=%1 failed; code %2.%n%3 -ErrorExecutingProgram=Unable to execute file:%n%1 - -; *** Registry errors -ErrorRegOpenKey=Error opening registry key:%n%1\%2 -ErrorRegCreateKey=Error creating registry key:%n%1\%2 -ErrorRegWriteKey=Error writing to registry key:%n%1\%2 - -; *** INI errors -ErrorIniEntry=Error creating INI entry in file "%1". - -; *** File copying errors -FileAbortRetryIgnoreSkipNotRecommended=&Skip this file (not recommended) -FileAbortRetryIgnoreIgnoreNotRecommended=&Ignore the error and continue (not recommended) -SourceIsCorrupted=The source file is corrupted -SourceDoesntExist=The source file "%1" does not exist -ExistingFileReadOnly2=The existing file could not be replaced because it is marked read-only. -ExistingFileReadOnlyRetry=&Remove the read-only attribute and try again -ExistingFileReadOnlyKeepExisting=&Keep the existing file -ErrorReadingExistingDest=An error occurred while trying to read the existing file: -FileExistsSelectAction=Select action -FileExists2=The file already exists. -FileExistsOverwriteExisting=&Overwrite the existing file -FileExistsKeepExisting=&Keep the existing file -FileExistsOverwriteOrKeepAll=&Do this for the next conflicts -ExistingFileNewerSelectAction=Select action -ExistingFileNewer2=The existing file is newer than the one Setup is trying to install. -ExistingFileNewerOverwriteExisting=&Overwrite the existing file -ExistingFileNewerKeepExisting=&Keep the existing file (recommended) -ExistingFileNewerOverwriteOrKeepAll=&Do this for the next conflicts -ErrorChangingAttr=An error occurred while trying to change the attributes of the existing file: -ErrorCreatingTemp=An error occurred while trying to create a file in the destination directory: -ErrorReadingSource=An error occurred while trying to read the source file: -ErrorCopying=An error occurred while trying to copy a file: -ErrorReplacingExistingFile=An error occurred while trying to replace the existing file: -ErrorRestartReplace=RestartReplace failed: -ErrorRenamingTemp=An error occurred while trying to rename a file in the destination directory: -ErrorRegisterServer=Unable to register the DLL/OCX: %1 -ErrorRegSvr32Failed=RegSvr32 failed with exit code %1 -ErrorRegisterTypeLib=Unable to register the type library: %1 - -; *** Uninstall display name markings -; used for example as 'My Program (32-bit)' -UninstallDisplayNameMark=%1 (%2) -; used for example as 'My Program (32-bit, All users)' -UninstallDisplayNameMarks=%1 (%2, %3) -UninstallDisplayNameMark32Bit=32-bit -UninstallDisplayNameMark64Bit=64-bit -UninstallDisplayNameMarkAllUsers=All users -UninstallDisplayNameMarkCurrentUser=Current user - -; *** Post-installation errors -ErrorOpeningReadme=An error occurred while trying to open the README file. -ErrorRestartingComputer=Setup was unable to restart the computer. Please do this manually. - -; *** Uninstaller messages -UninstallNotFound=File "%1" does not exist. Cannot uninstall. -UninstallOpenError=File "%1" could not be opened. Cannot uninstall -UninstallUnsupportedVer=The uninstall log file "%1" is in a format not recognized by this version of the uninstaller. Cannot uninstall -UninstallUnknownEntry=An unknown entry (%1) was encountered in the uninstall log -ConfirmUninstall=Are you sure you want to completely remove %1 and all of its components? -UninstallOnlyOnWin64=This installation can only be uninstalled on 64-bit Windows. -OnlyAdminCanUninstall=This installation can only be uninstalled by a user with administrative privileges. -UninstallStatusLabel=Please wait while %1 is removed from your computer. -UninstalledAll=%1 was successfully removed from your computer. -UninstalledMost=%1 uninstall complete.%n%nSome elements could not be removed. These can be removed manually. -UninstalledAndNeedsRestart=To complete the uninstallation of %1, your computer must be restarted.%n%nWould you like to restart now? -UninstallDataCorrupted="%1" file is corrupted. Cannot uninstall - -; *** Uninstallation phase messages -ConfirmDeleteSharedFileTitle=Remove Shared File? -ConfirmDeleteSharedFile2=The system indicates that the following shared file is no longer in use by any programs. Would you like for Uninstall to remove this shared file?%n%nIf any programs are still using this file and it is removed, those programs may not function properly. If you are unsure, choose No. Leaving the file on your system will not cause any harm. -SharedFileNameLabel=File name: -SharedFileLocationLabel=Location: -WizardUninstalling=Uninstall Status -StatusUninstalling=Uninstalling %1... - -; *** Shutdown block reasons -ShutdownBlockReasonInstallingApp=Installing %1. -ShutdownBlockReasonUninstallingApp=Uninstalling %1. - -; The custom messages below aren't used by Setup itself, but if you make -; use of them in your scripts, you'll want to translate them. - -[CustomMessages] - -NameAndVersion=%1 version %2 -AdditionalIcons=Additional shortcuts: -CreateDesktopIcon=Create a &desktop shortcut -CreateQuickLaunchIcon=Create a &Quick Launch shortcut -ProgramOnTheWeb=%1 on the Web -UninstallProgram=Uninstall %1 -LaunchProgram=Launch %1 -AssocFileExtension=&Associate %1 with the %2 file extension -AssocingFileExtension=Associating %1 with the %2 file extension... -AutoStartProgramGroupDescription=Startup: -AutoStartProgram=Automatically start %1 -AddonHostProgramNotFound=%1 could not be located in the folder you selected.%n%nDo you want to continue anyway? From 4a333a630805e65eb18f8d5a1f76132bdd9d5a0e Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Thu, 28 Jan 2021 08:27:01 +0800 Subject: [PATCH 0394/1024] change GBK encoding --- installer/instmaterials/info_zh_hans.txt | 6 +++--- installer/instmaterials/info_zh_hant.txt | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/installer/instmaterials/info_zh_hans.txt b/installer/instmaterials/info_zh_hans.txt index c25248cf68..b65c8b59fc 100644 --- a/installer/instmaterials/info_zh_hans.txt +++ b/installer/instmaterials/info_zh_hans.txt @@ -1,3 +1,3 @@ -该软件被重命名为“文本编辑器(共同开发版本)”。 -您可以免费用于商业和非商业用途,但源代码的版权由各部分所有者保留。 -该软件无法保证完整性。 +该软件被定义为“文本编辑器(共同开发版本)”。 +您可以免费用于商业和非商业用途,但源代码的版权由各部分所有者保留。 +无法保证该软件在分发时的完整性。 \ No newline at end of file diff --git a/installer/instmaterials/info_zh_hant.txt b/installer/instmaterials/info_zh_hant.txt index a8fe2cf499..e0c161b59e 100644 --- a/installer/instmaterials/info_zh_hant.txt +++ b/installer/instmaterials/info_zh_hant.txt @@ -1,3 +1,3 @@ -該軟件被重命名為“文本編輯器(共同開發版本)”。 -您可以免費用於商業和非商業用途,但源代碼的版權由各部分所有者保留。 -該軟件無法保證完整性。 +ԓܛx顰ı݋ͬ_l汾 +M̘Iͷ̘I;Դaİɸ߱ +oCԓܛڷְlrԡ \ No newline at end of file From 1a6cfbe559156a5b043e1b02dae23e0f5f236fdf Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Thu, 28 Jan 2021 22:33:11 +0900 Subject: [PATCH 0395/1024] =?UTF-8?q?MinGW=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E5=AF=BE=E7=AD=96=20=E5=BF=85=E8=A6=81=E3=81=AA=E3=82=B5?= =?UTF-8?q?=E3=82=A4=E3=82=BA+1=E3=82=92=E7=A2=BA=E4=BF=9D=E3=81=97?= =?UTF-8?q?=E3=81=A6=E5=88=87=E3=82=8A=E8=A9=B0=E3=82=81=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/string_ex.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sakura_core/util/string_ex.cpp b/sakura_core/util/string_ex.cpp index ca66208c5c..5a56e2e3d4 100644 --- a/sakura_core/util/string_ex.cpp +++ b/sakura_core/util/string_ex.cpp @@ -230,8 +230,9 @@ std::wstring vstrprintf(const WCHAR* pszFormat, va_list& argList) } // 必要なバッファを確保してフォーマットする - std::wstring strOut(cchOut, L'\0'); + std::wstring strOut(cchOut + 1, L'0'); ::vswprintf_s(strOut.data(), strOut.capacity(), pszFormat, argList); + strOut.resize(cchOut); return strOut; } From 6bb12d502a74816409c8b8ca042d70f2b7173ac3 Mon Sep 17 00:00:00 2001 From: EldersJavas <55266266+EldersJavas@users.noreply.github.com> Date: Fri, 29 Jan 2021 22:43:02 +0800 Subject: [PATCH 0396/1024] test info_zh_hant.txt with BIG5 --- installer/instmaterials/info_zh_hant.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/installer/instmaterials/info_zh_hant.txt b/installer/instmaterials/info_zh_hant.txt index e0c161b59e..617f2ff324 100644 --- a/installer/instmaterials/info_zh_hant.txt +++ b/installer/instmaterials/info_zh_hant.txt @@ -1,3 +1,3 @@ -ԓܛx顰ı݋ͬ_l汾 -M̘Iͷ̘I;Դaİɸ߱ -oCԓܛڷְlrԡ \ No newline at end of file +ӳnQwq奻s边]@P}o^C +ziHKOΩӷ~MDӷ~γ~ANXvѦUҦ̫OdC +LkOҸӳnboɪʡC \ No newline at end of file From 3e5b9c23b2117a8e0d30ba9c9a0d95b0093bbe30 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sat, 30 Jan 2021 17:25:52 +0900 Subject: [PATCH 0397/1024] =?UTF-8?q?charset/charcode.(h|cpp):=20SonarClou?= =?UTF-8?q?d=20=E3=81=AE=E8=AD=A6=E5=91=8A=E3=81=AE=E3=81=86=E3=81=A1?= =?UTF-8?q?=E5=AF=BE=E5=87=A6=E3=81=8C=E5=AE=B9=E6=98=93=E3=81=AA=E3=82=82?= =?UTF-8?q?=E3=81=AE=E3=82=92=E8=A7=A3=E6=B1=BA=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/charcode.cpp | 172 ++++++++++-------------------- sakura_core/charset/charcode.h | 104 +++++++----------- sakura_core/parse/CWordParse.cpp | 4 +- tests/unittests/test-charcode.cpp | 2 +- 4 files changed, 96 insertions(+), 186 deletions(-) diff --git a/sakura_core/charset/charcode.cpp b/sakura_core/charset/charcode.cpp index 1355b50dd4..b28903ab36 100644 --- a/sakura_core/charset/charcode.cpp +++ b/sakura_core/charset/charcode.cpp @@ -29,7 +29,7 @@ #include "env/DLLSHAREDATA.h" /*! キーワードキャラクタ */ -const unsigned char gm_keyword_char[128] = { +const std::array gm_keyword_char = { /* 0 1 2 3 4 5 6 7 8 9 A B C D E F : 0123456789ABCDEF */ CK_CTRL, CK_CTRL, CK_CTRL, CK_CTRL, CK_CTRL, CK_CTRL, CK_CTRL, CK_CTRL, CK_CTRL, CK_TAB, CK_LF, CK_CTRL, CK_CTRL, CK_CR, CK_CTRL, CK_CTRL, /* 0: ................ */ CK_CTRL, CK_CTRL, CK_CTRL, CK_CTRL, CK_CTRL, CK_CTRL, CK_CTRL, CK_CTRL, CK_CTRL, CK_CTRL, CK_CTRL, CK_CTRL, CK_CTRL, CK_CTRL, CK_CTRL, CK_CTRL, /* 1: ................ */ @@ -71,15 +71,13 @@ namespace WCODE ){ wc = 0x4E00; // '一'(0x4E00)の幅で代用 } - else // ハングルはすべて同一幅とみなす // 2013.04.08 aroka - if ( wc>=0xAC00 && wc<=0xD7A3 ) // Hangul Syllables + else if ( wc>=0xAC00 && wc<=0xD7A3 ) // Hangul Syllables { wc = 0xAC00; // (0xAC00)の幅で代用 } - else // 外字はすべて同一幅とみなす // 2013.04.08 aroka - if (wc>=0xE000 && wc<=0xE8FF) // Private Use Area + else if (wc>=0xE000 && wc<=0xE8FF) // Private Use Area { wc = 0xE000; // (0xE000)の幅で代用 } @@ -89,86 +87,38 @@ namespace WCODE } //!制御文字であるかどうか - bool IsControlCode(wchar_t wc) + [[nodiscard]] bool IsControlCode(wchar_t wc) { - ////改行は制御文字とみなさない - //if(IsLineDelimiter(wc))return false; - - ////タブは制御文字とみなさない - //if(wc==TAB)return false; - - //return iswcntrl(wc)!=0; - return (wc<_countof(gm_keyword_char) && gm_keyword_char[wc]==CK_CTRL); - } - -#if 0 - /*! - 句読点か - 2008.04.27 kobake CLayoutMgr::IsKutoTen から分離 - - @param[in] c1 調べる文字1バイト目 - @param[in] c2 調べる文字2バイト目 - @retval true 句読点である - @retval false 句読点でない - */ - bool IsKutoten( wchar_t wc ) - { - //句読点定義 - static const wchar_t *KUTOTEN= - L"。、,." - L"。、,." - ; - - const wchar_t* p; - for(p=KUTOTEN;*p;p++){ - if(*p==wc)return true; - } - return false; + return wc < gm_keyword_char.size() && gm_keyword_char[wc] == CK_CTRL; } -#endif /*! - UNICODE文字情報のキャッシュクラス。 - 1文字当たり2ビットで、値を保存しておく。 - 00:未初期化 - 01:半角 - 10:全角 - 11:- + 文字幅情報のキャッシュクラス。 + 1文字当たり2バイトで保存しておく。 */ class LocalCache{ public: - LocalCache() - { - /* LOGFONTの初期化 */ - memset( &m_lf, 0, sizeof(m_lf) ); - memset( &m_lf2, 0, sizeof(m_lf2) ); - - // HDC の初期化 - m_hdc = NULL; - m_hdcFull = NULL; - - m_hFont =NULL; - m_hFontOld =NULL; - m_pCache = 0; - } + LocalCache() = default; + LocalCache(const LocalCache&) = delete; + LocalCache& operator=(const LocalCache&) = delete; ~LocalCache() { // -- -- 後始末 -- -- // DeleteLocalData(); } void DeleteLocalData(){ - if (m_hFont != NULL) { + if (m_hFont != nullptr) { SelectObject(m_hdc, m_hFontOld); DeleteObject(m_hFont); - m_hFont = NULL; + m_hFont = nullptr; } - if (m_hFontFull != NULL) { + if (m_hFontFull != nullptr) { SelectObject(m_hdcFull, m_hFontFullOld); DeleteObject(m_hFontFull); - m_hFontFull = NULL; + m_hFontFull = nullptr; } - if(m_hdc){ DeleteDC(m_hdc); m_hdc = NULL;} - if(m_hdcFull){ DeleteDC(m_hdcFull); m_hdcFull = NULL;} + if(m_hdc){ DeleteDC(m_hdc); m_hdc = nullptr;} + if(m_hdcFull){ DeleteDC(m_hdcFull); m_hdcFull = nullptr;} } static bool IsEqual(const LOGFONT &lhs, const LOGFONT &rhs){ return &lhs == &rhs || @@ -194,15 +144,15 @@ namespace WCODE m_hFontFullOld = (HFONT)SelectObject(m_hdcFull, m_hFontFull); }else{ m_bMultiFont = false; - m_hdcFull = NULL; - m_hFontFull = NULL; - m_hFontFullOld = NULL; + m_hdcFull = nullptr; + m_hFontFull = nullptr; + m_hFontFullOld = nullptr; } s_MultiFont = m_bMultiFont; // -- -- 半角基準 -- -- // // CTextMetrics::Update と同じでなければならない - HDC hdcArr[2] = {m_hdc, m_hdcFull}; + std::array hdcArr = {m_hdc, m_hdcFull}; int size = (bFullFont ? 2 : 1); m_han_size.cx = 1; m_han_size.cy = 1; @@ -228,40 +178,34 @@ namespace WCODE { assert(m_pCache!=0); // キャッシュのクリア - memcpy(m_pCache->m_lfFaceName, m_lf.lfFaceName, sizeof(m_lf.lfFaceName)); - memcpy(m_pCache->m_lfFaceName2, m_lf2.lfFaceName, sizeof(m_lf2.lfFaceName)); - memset(m_pCache->m_nCharPxWidthCache, 0, sizeof(m_pCache->m_nCharPxWidthCache)); + memcpy(m_pCache->m_lfFaceName.data(), m_lf.lfFaceName, sizeof(m_lf.lfFaceName)); + memcpy(m_pCache->m_lfFaceName2.data(), m_lf2.lfFaceName, sizeof(m_lf2.lfFaceName)); + memset(m_pCache->m_nCharPxWidthCache.data(), 0, sizeof(m_pCache->m_nCharPxWidthCache)); m_pCache->m_nCharWidthCacheTest=0x12345678; } - bool IsSameFontFace( const LOGFONT &lf1, const LOGFONT &lf2 ) - { - assert(m_pCache!=0); - return ( memcmp(m_pCache->m_lfFaceName, lf1.lfFaceName, sizeof(lf1.lfFaceName)) == 0 && - memcmp(m_pCache->m_lfFaceName2, lf2.lfFaceName, sizeof(lf2.lfFaceName)) == 0 ); - } void SetCachePx(wchar_t c, short cache_pxwidth) { m_pCache->m_nCharPxWidthCache[c] = cache_pxwidth; } - short GetCachePx(wchar_t c) const + [[nodiscard]] short GetCachePx(wchar_t c) const { return _GetRawPx(c); } - bool ExistCache(wchar_t c) const + [[nodiscard]] bool ExistCache(wchar_t c) const { assert(m_pCache->m_nCharWidthCacheTest==0x12345678); return _GetRawPx(c)!=0x0; } - bool CalcHankakuByFont(wchar_t c) + bool CalcHankakuByFont(wchar_t c) const { SIZE size={m_han_size.cx*2,0}; //関数が失敗したときのことを考え、全角幅で初期化しておく GetTextExtentPoint32(SelectHDC(c),&c,1,&size); return (size.cx<=m_han_size.cx); } - bool IsHankakuByWidth(int width){ + [[nodiscard]] bool IsHankakuByWidth(int width) const { return width<=m_han_size.cx; } - int CalcPxWidthByFont(wchar_t c) + int CalcPxWidthByFont(wchar_t c) const { SIZE size={m_han_size.cx*2,0}; //関数が失敗したときのことを考え、全角幅で初期化しておく // 2014.12.21 コントロールコードの表示・NULが1px幅になるのをスペース幅にする @@ -275,48 +219,48 @@ namespace WCODE GetTextExtentPoint32(SelectHDC(c),&c,1,&size); return t_max(1,size.cx); } - int CalcPxWidthByFont2(const wchar_t* pc2) + int CalcPxWidthByFont2(const wchar_t* pc2) const { SIZE size={m_han_size.cx*2,0}; // サロゲートは全角フォント GetTextExtentPoint32(m_hdcFull?m_hdcFull:m_hdc,pc2,2,&size); return t_max(1,size.cx); } - bool GetMultiFont() const + [[nodiscard]] bool GetMultiFont() const { return m_bMultiFont; } protected: - int _GetRawPx(wchar_t c) const + [[nodiscard]] short _GetRawPx(wchar_t c) const { return m_pCache->m_nCharPxWidthCache[c]; } - HDC SelectHDC(wchar_t c) const + [[nodiscard]] HDC SelectHDC(wchar_t c) const { return m_hdcFull && WCODE::GetFontNo(c) ? m_hdcFull : m_hdc; } private: - HDC m_hdc; - HDC m_hdcFull; - HFONT m_hFontOld, m_hFontFullOld; - HFONT m_hFont, m_hFontFull; + HDC m_hdc = nullptr; + HDC m_hdcFull = nullptr; + HFONT m_hFontOld = nullptr; + HFONT m_hFontFullOld = nullptr; + HFONT m_hFont = nullptr; + HFONT m_hFontFull = nullptr; bool m_bMultiFont; SIZE m_han_size; - LOGFONT m_lf; // 2008/5/15 Uchi - LOGFONT m_lf2; - SCharWidthCache* m_pCache; + LOGFONT m_lf {}; // 2008/5/15 Uchi + LOGFONT m_lf2 {}; + SCharWidthCache* m_pCache = nullptr; }; class LocalCacheSelector{ public: - LocalCacheSelector() + LocalCacheSelector() : pcache(m_localcache.data()) { - pcache = &m_localcache[0]; for( int i=0; iGetMultiFont(); } - LocalCache* GetCache(){ return pcache; } + [[nodiscard]] LocalCache* GetCache(){ return pcache; } private: + std::array m_localcache; + std::array m_parCache; + ECharWidthCacheMode m_eLastEditCacheMode = CWM_CACHE_NEUTRAL; LocalCache* pcache; - LocalCache m_localcache[3]; - SCharWidthCache* m_parCache[3]; - ECharWidthCacheMode m_eLastEditCacheMode; DISALLOW_COPY_AND_ASSIGN(LocalCacheSelector); }; @@ -366,38 +310,32 @@ namespace WCODE // -- -- キャッシュが存在すれば、それをそのまま返す -- -- // if(pcache->ExistCache(c))return pcache->GetCachePx(c); - int width; - width = pcache->CalcPxWidthByFont(c); - // -- -- キャッシュ更新 -- -- // - pcache->SetCachePx(c,width); - + pcache->SetCachePx(c, static_cast(pcache->CalcPxWidthByFont(c))); return pcache->GetCachePx(c); } int CalcPxWidthByFont2(const wchar_t* pc){ - LocalCache* pcache = selector.GetCache(); + const LocalCache* pcache = selector.GetCache(); return pcache->CalcPxWidthByFont2(pc); } //文字幅の動的計算。半角ならtrue。 bool CalcHankakuByFont(wchar_t c) { - LocalCache* pcache = selector.GetCache(); + const LocalCache* pcache = selector.GetCache(); return pcache->IsHankakuByWidth(CalcPxWidthByFont(c)); } // 文字の使用フォントを返す // @return 0:半角用 / 1:全角用 - int GetFontNo( wchar_t c ){ - if( s_MultiFont ){ - if(0x0080 <= c && c <= 0xFFFF){ - return 1; - } + [[nodiscard]] int GetFontNo( wchar_t c ){ + if (s_MultiFont && 0x0080 <= c && c <= 0xFFFF){ + return 1; } return 0; } - int GetFontNo2( wchar_t wc1, wchar_t wc2 ){ + [[nodiscard]] int GetFontNo2( wchar_t, wchar_t ){ if( s_MultiFont ){ return 1; } @@ -408,9 +346,9 @@ namespace WCODE // 文字幅の動的計算用キャッシュの初期化。 2007/5/18 Uchi void InitCharWidthCache( const LOGFONT &lf, ECharWidthFontMode fMode ) { - HDC hdc = GetDC(NULL); + HDC hdc = GetDC(nullptr); WCODE::selector.Init( lf, lf, fMode, hdc ); - ReleaseDC(NULL, hdc); + ReleaseDC(nullptr, hdc); } void InitCharWidthCacheFromDC( const LOGFONT* lfs, ECharWidthFontMode fMode, HDC hdcOrg ) diff --git a/sakura_core/charset/charcode.h b/sakura_core/charset/charcode.h index 279f92d3d6..3387b06150 100644 --- a/sakura_core/charset/charcode.h +++ b/sakura_core/charset/charcode.h @@ -27,44 +27,31 @@ #pragma once //2007.09.13 kobake 作成 +#include #include "parse/CWordParse.h" #include "util/std_macro.h" -// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -// 判定関数 // -// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -// #include "charset/codechecker.h" -// SJIS関連コードは codecheker.hに移動 - // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 定数 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // SJISのコードページ(CP_ACP では無くこれを使えばおそらく英語版Winでも動くはず。) 2008/5/12 Uchi -#define CP_SJIS 932 - -//定数の素 (直接使用は控えてください) -#define TAB_ '\t' -#define SPACE_ ' ' -#define CR_ '\015' -#define LF_ '\012' -#define ESC_ '\x1b' -#define CRLF_ "\015\012" +constexpr int CP_SJIS = 932; //UNICODE定数 namespace WCODE{ //文字 - static const wchar_t TAB = LCHAR(TAB_); - static const wchar_t SPACE = LCHAR(SPACE_); - static const wchar_t CR = LCHAR(CR_); - static const wchar_t LF = LCHAR(LF_); - static const wchar_t ESC = LCHAR(ESC_); + constexpr wchar_t TAB = L'\t'; + constexpr wchar_t SPACE = L' '; + constexpr wchar_t CR = L'\015'; + constexpr wchar_t LF = L'\012'; + constexpr wchar_t ESC = L'\x1b'; //文字列 - static const wchar_t CRLF[] = LTEXT(CRLF_); + constexpr wchar_t CRLF[] = L"\015\012"; //特殊 (BREGEXP) //$$ UNICODE版の仮デリミタ。bregonigの仕様がよくわかんないので、とりあえずこんな値にしてます。 - static const wchar_t BREGEXP_DELIMITER = (wchar_t)0xFFFF; + constexpr wchar_t BREGEXP_DELIMITER = (wchar_t)0xFFFF; } // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // @@ -72,15 +59,15 @@ namespace WCODE{ // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // /*! キーワードキャラクタ */ -extern const unsigned char gm_keyword_char[128]; +extern const std::array gm_keyword_char; //Oct. 31, 2000 JEPRO TeX Keyword のために'\'を追加 //Nov. 9, 2000 JEPRO HSP Keyword のために'@'を追加 //Oct. 18, 2007 kobake UNICODE用に書き直し //Nov. 27, 2010 syat 速度改善のためテーブルに変更 -inline bool IS_KEYWORD_CHAR(wchar_t wc) +[[nodiscard]] inline bool IS_KEYWORD_CHAR(wchar_t wc) { - if(0 <= wc && wc < _countof(gm_keyword_char) && (gm_keyword_char[wc] == CK_CSYM||gm_keyword_char[wc] == CK_UDEF) ) + if(wc < gm_keyword_char.size() && (gm_keyword_char[wc] == CK_CSYM||gm_keyword_char[wc] == CK_UDEF) ) return true; else return false; @@ -89,15 +76,15 @@ inline bool IS_KEYWORD_CHAR(wchar_t wc) //UNICODE判定関数群 namespace WCODE { - inline bool IsAZ(wchar_t wc) + [[nodiscard]] inline bool IsAZ(wchar_t wc) { return (wc>=L'A' && wc<=L'Z') || (wc>=L'a' && wc<=L'z'); } - inline bool Is09(wchar_t wc) + [[nodiscard]] inline bool Is09(wchar_t wc) { return (wc>=L'0' && wc<=L'9'); } - inline bool IsInRange(wchar_t c, wchar_t front, wchar_t back) + [[nodiscard]] inline bool IsInRange(wchar_t c, wchar_t front, wchar_t back) { return c>=front && c<=back; } @@ -117,7 +104,7 @@ namespace WCODE int GetFontNo2(wchar_t wc1, wchar_t wc2); //!全角スペースかどうか判定 - inline bool IsZenkakuSpace(wchar_t wc) + [[nodiscard]] inline bool IsZenkakuSpace(wchar_t wc) { return wc == 0x3000; //L' ' } @@ -126,27 +113,27 @@ namespace WCODE bool IsControlCode(wchar_t wc); //!改行文字であるかどうか - inline bool IsLineDelimiter(wchar_t wc, bool ext) + [[nodiscard]] inline bool IsLineDelimiter(wchar_t wc, bool ext) { return wc==CR || wc==LF || (ext && (wc==0x85 || wc==0x2028 || wc==0x2029)); } - inline bool IsLineDelimiterBasic(wchar_t wc) + [[nodiscard]] inline bool IsLineDelimiterBasic(wchar_t wc) { return wc==CR || wc==LF; } - inline bool IsLineDelimiterExt(wchar_t wc) + [[nodiscard]] inline bool IsLineDelimiterExt(wchar_t wc) { return wc==CR || wc==LF || wc==0x85 || wc==0x2028 || wc==0x2029; } //!単語の区切り文字であるかどうか - inline bool IsWordDelimiter(wchar_t wc) + [[nodiscard]] inline bool IsWordDelimiter(wchar_t wc) { return wc==SPACE || wc==TAB || IsZenkakuSpace(wc); } //!インデント構成要素であるかどうか。bAcceptZenSpace: 全角スペースを含めるかどうか - inline bool IsIndentChar(wchar_t wc,bool bAcceptZenSpace) + [[nodiscard]] inline bool IsIndentChar(wchar_t wc,bool bAcceptZenSpace) { if(wc==TAB || wc==SPACE)return true; if(bAcceptZenSpace && IsZenkakuSpace(wc))return true; @@ -154,7 +141,7 @@ namespace WCODE } //!空白かどうか - inline bool IsBlank(wchar_t wc) + [[nodiscard]] inline bool IsBlank(wchar_t wc) { return wc==TAB || wc==SPACE || IsZenkakuSpace(wc); } @@ -162,14 +149,14 @@ namespace WCODE //!ファイル名に使える文字であるかどうか inline bool IsValidFilenameChar(const wchar_t wc) { - static const wchar_t* table = L"<>?\"|*"; + constexpr wchar_t table[] = L"<>?\"|*"; - if(wcschr(table,wc)!=NULL)return false; //table内の文字が含まれていたら、ダメ。 - else return true; + //table内の文字が含まれていたら、ダメ。 + return wcschr(table, wc) == nullptr; } //!タブ表示に使える文字かどうか - inline bool IsTabAvailableCode(wchar_t wc) + [[nodiscard]] inline bool IsTabAvailableCode(wchar_t wc) { //$$要検証 if(wc==L'\0')return false; @@ -180,44 +167,44 @@ namespace WCODE } //! 半角カナかどうか - inline bool IsHankakuKatakana(wchar_t c) + [[nodiscard]] inline bool IsHankakuKatakana(wchar_t c) { //参考: http://ash.jp/code/unitbl1.htm return c>=0xFF61 && c<=0xFF9F; } //! 全角記号かどうか - inline bool IsZenkakuKigou(wchar_t c) + [[nodiscard]] inline bool IsZenkakuKigou(wchar_t c) { //$ 他にも全角記号はあると思うけど、とりあえずANSI版時代の判定を踏襲。パフォーマンス悪し。 // 2009.06.26 syat 「ゝゞ(ひらがな)」「ヽヾ(カタカナ)」「゛゜(全角濁点)」「仝々〇(漢字)」「ー(長音)」を除外 // 2009.10.10 syat ANSI版の修正にあわせて「〆」を記号→漢字にする - static const wchar_t* table=L" 、。,.・:;?!´`¨^ ̄_〃―‐/\~∥|…‥‘’“”()〔〕[]{}〈〉《》「」『』【】+-±×÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓∈∋⊆⊇⊂⊃∪∩∧∨¬⇒⇔∀∃∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬ʼn♯♭♪†‡¶◯"; - return wcschr(table,c)!=NULL; + constexpr wchar_t table[] = L" 、。,.・:;?!´`¨^ ̄_〃―‐/\~∥|…‥‘’“”()〔〕[]{}〈〉《》「」『』【】+-±×÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓∈∋⊆⊇⊂⊃∪∩∧∨¬⇒⇔∀∃∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬ʼn♯♭♪†‡¶◯"; + return wcschr(table,c)!=nullptr; } //! ひらがなかどうか - inline bool IsHiragana(wchar_t c) + [[nodiscard]] inline bool IsHiragana(wchar_t c) { // 2009.06.26 syat 「ゝゞ」を追加 return (c>=0x3041 && c<=0x3096) || (c>=0x309D && c<=0x309E); } //! カタカナかどうか - inline bool IsZenkakuKatakana(wchar_t c) + [[nodiscard]] inline bool IsZenkakuKatakana(wchar_t c) { // 2009.06.26 syat 「ヽヾ」を追加 return (c>=0x30A1 && c<=0x30FA) || (c>=0x30FD && c<=0x30FE); } //! ギリシャ文字かどうか - inline bool IsGreek(wchar_t c) + [[nodiscard]] inline bool IsGreek(wchar_t c) { return c>=0x0391 && c<=0x03C9; } //! キリル文字かどうか - inline bool IsCyrillic(wchar_t c) + [[nodiscard]] inline bool IsCyrillic(wchar_t c) { return (c>=0x0400 && c<=0x052F) // Cyrillic, Cyrillic Supplement || (c>=0x2DE0 && c<=0x2DFF) // Cyrillic Extended-A @@ -225,7 +212,7 @@ namespace WCODE } //! BOX DRAWING 文字 かどうか - inline bool IsBoxDrawing(wchar_t c) + [[nodiscard]] inline bool IsBoxDrawing(wchar_t c) { return c>=0x2500 && c<=0x257F; } @@ -236,29 +223,14 @@ namespace WCODE int CalcPxWidthByFont(wchar_t c); //!文字のpx幅を取得(DLLSHARE/フォント依存) int CalcPxWidthByFont2(const wchar_t* c); - //! 句読点か - //bool IsKutoten( wchar_t wc ); - -/* codechecker.h へ移動 - //! 高位サロゲートエリアか? from ssrc_2004-06-05wchar00703b 2008/5/15 Uchi - inline bool IsUTF16High( wchar_t c ) - { - return ( 0xd800 == (0xfc00 & c )); - } - //! 下位サロゲートエリアか? from ssrc_2004-06-05wchar00703b 2008/5/15 Uchi - inline bool IsUTF16Low( wchar_t c ) - { - return ( 0xdc00 == (0xfc00 & c )); - } -*/ } // 文字幅の動的計算用キャッシュ関連 struct SCharWidthCache { // 文字半角全角キャッシュ - WCHAR m_lfFaceName[LF_FACESIZE]; - WCHAR m_lfFaceName2[LF_FACESIZE]; - short m_nCharPxWidthCache[0x10000]; + std::array m_lfFaceName; + std::array m_lfFaceName2; + std::array m_nCharPxWidthCache; int m_nCharWidthCacheTest; //cache溢れ検出 }; diff --git a/sakura_core/parse/CWordParse.cpp b/sakura_core/parse/CWordParse.cpp index 562cea165b..2301db6edf 100644 --- a/sakura_core/parse/CWordParse.cpp +++ b/sakura_core/parse/CWordParse.cpp @@ -93,7 +93,7 @@ inline bool isCSymbol(wchar_t c) // (c>=L'0' && c<=L'9') || // (c>=L'A' && c<=L'Z') || // (c>=L'a' && c<=L'z'); - return (c<_countof(gm_keyword_char) && gm_keyword_char[c]==CK_CSYM); + return c < gm_keyword_char.size() && gm_keyword_char[c] == CK_CSYM; } //! 全角版、識別子に使用可能な文字かどうか @@ -123,7 +123,7 @@ ECharKind CWordParse::WhatKindOfChar( wchar_t c=pData[nIdx]; //今までの半角 - if( c<_countof(gm_keyword_char) ) return (ECharKind)gm_keyword_char[c]; + if( c Date: Sun, 31 Jan 2021 18:51:26 +0900 Subject: [PATCH 0398/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=AF?= =?UTF-8?q?=E3=83=BC=E3=81=AE=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88=E3=82=92?= =?UTF-8?q?=E5=8F=8D=E6=98=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/charcode.h | 17 ++++++++--------- tests/unittests/test-charcode.cpp | 1 + 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/sakura_core/charset/charcode.h b/sakura_core/charset/charcode.h index 3387b06150..bcc4a212ef 100644 --- a/sakura_core/charset/charcode.h +++ b/sakura_core/charset/charcode.h @@ -42,15 +42,14 @@ namespace WCODE{ //文字 constexpr wchar_t TAB = L'\t'; constexpr wchar_t SPACE = L' '; - constexpr wchar_t CR = L'\015'; - constexpr wchar_t LF = L'\012'; + constexpr wchar_t CR = L'\r'; + constexpr wchar_t LF = L'\n'; constexpr wchar_t ESC = L'\x1b'; //文字列 - constexpr wchar_t CRLF[] = L"\015\012"; + constexpr wchar_t CRLF[] = L"\r\n"; //特殊 (BREGEXP) - //$$ UNICODE版の仮デリミタ。bregonigの仕様がよくわかんないので、とりあえずこんな値にしてます。 constexpr wchar_t BREGEXP_DELIMITER = (wchar_t)0xFFFF; } @@ -67,7 +66,7 @@ extern const std::array gm_keyword_char; //Nov. 27, 2010 syat 速度改善のためテーブルに変更 [[nodiscard]] inline bool IS_KEYWORD_CHAR(wchar_t wc) { - if(wc < gm_keyword_char.size() && (gm_keyword_char[wc] == CK_CSYM||gm_keyword_char[wc] == CK_UDEF) ) + if(static_cast(wc) < gm_keyword_char.size() && (gm_keyword_char[wc] == CK_CSYM||gm_keyword_char[wc] == CK_UDEF) ) return true; else return false; @@ -149,10 +148,10 @@ namespace WCODE //!ファイル名に使える文字であるかどうか inline bool IsValidFilenameChar(const wchar_t wc) { - constexpr wchar_t table[] = L"<>?\"|*"; + constexpr const wchar_t table[] = L"<>?\"|*"; //table内の文字が含まれていたら、ダメ。 - return wcschr(table, wc) == nullptr; + return !wcschr(table, wc); } //!タブ表示に使える文字かどうか @@ -179,8 +178,8 @@ namespace WCODE //$ 他にも全角記号はあると思うけど、とりあえずANSI版時代の判定を踏襲。パフォーマンス悪し。 // 2009.06.26 syat 「ゝゞ(ひらがな)」「ヽヾ(カタカナ)」「゛゜(全角濁点)」「仝々〇(漢字)」「ー(長音)」を除外 // 2009.10.10 syat ANSI版の修正にあわせて「〆」を記号→漢字にする - constexpr wchar_t table[] = L" 、。,.・:;?!´`¨^ ̄_〃―‐/\~∥|…‥‘’“”()〔〕[]{}〈〉《》「」『』【】+-±×÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓∈∋⊆⊇⊂⊃∪∩∧∨¬⇒⇔∀∃∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬ʼn♯♭♪†‡¶◯"; - return wcschr(table,c)!=nullptr; + constexpr const wchar_t table[] = L" 、。,.・:;?!´`¨^ ̄_〃―‐/\~∥|…‥‘’“”()〔〕[]{}〈〉《》「」『』【】+-±×÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓∈∋⊆⊇⊂⊃∪∩∧∨¬⇒⇔∀∃∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬ʼn♯♭♪†‡¶◯"; + return wcschr(table,c); } //! ひらがなかどうか diff --git a/tests/unittests/test-charcode.cpp b/tests/unittests/test-charcode.cpp index c2aae42d0f..a818eb73e9 100644 --- a/tests/unittests/test-charcode.cpp +++ b/tests/unittests/test-charcode.cpp @@ -187,6 +187,7 @@ TEST(charcode, IS_KEYWORD_CHAR) EXPECT_EQ(IS_KEYWORD_CHAR(ch), gm_keyword_char[ch] == CK_CSYM || gm_keyword_char[ch] == CK_UDEF); } + EXPECT_FALSE(IS_KEYWORD_CHAR(static_cast(-1))); } // 以下、関数が判定している文字がすべてASCII範囲内であれば総当たりテストを実施する。 From 4c57c9d720c9819d6af0efd150c685af264ad2f9 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Mon, 1 Feb 2021 21:05:41 +0900 Subject: [PATCH 0399/1024] =?UTF-8?q?GetInidirOrExedir=E3=81=AE=E6=8C=AF?= =?UTF-8?q?=E3=82=8B=E8=88=9E=E3=81=84=E3=82=92=E5=85=83=E3=81=AB=E6=88=BB?= =?UTF-8?q?=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/file.cpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/sakura_core/util/file.cpp b/sakura_core/util/file.cpp index 7353cb8478..936b9835e4 100644 --- a/sakura_core/util/file.cpp +++ b/sakura_core/util/file.cpp @@ -506,14 +506,17 @@ void GetExedir( if( pDir == NULL ) return; - std::wstring_view filename(L""); + std::wstring partialPath; if (szFile != nullptr) { - filename = szFile; + partialPath = szFile; + } + if (partialPath.empty() || partialPath[0] != L'\\') { + partialPath.insert(partialPath.cbegin(), L'\\'); } // exeフォルダのフルパス、またはexe基準のファイルパスを取得 - auto path = GetExePath(filename); - ::wcsncpy_s(pDir, decltype(DLLSHAREDATA::m_szIniFile)::BUFFER_COUNT - 1, path.c_str(), _TRUNCATE); + auto path = GetExeFileName().parent_path().concat(partialPath); + ::wcsncpy_s(pDir, decltype(DLLSHAREDATA::m_szIniFile)::BUFFER_COUNT, path.c_str(), _TRUNCATE); } /*! @@ -550,14 +553,17 @@ void GetInidir( if( pDir == NULL ) return; - std::wstring_view filename(L""); + std::wstring partialPath; if (szFile != nullptr) { - filename = szFile; + partialPath = szFile; + } + if (partialPath.empty() || partialPath[0] != L'\\') { + partialPath.insert(partialPath.cbegin(), L'\\'); } // 設定フォルダのフルパス、またはini基準のファイルパスを取得 - auto path = GetIniPath(filename); - ::wcsncpy_s(pDir, decltype(DLLSHAREDATA::m_szPrivateIniFile)::BUFFER_COUNT - 1, path.c_str(), _TRUNCATE); + auto path = GetIniFileName().parent_path().concat(partialPath); + ::wcsncpy_s(pDir, decltype(DLLSHAREDATA::m_szPrivateIniFile)::BUFFER_COUNT, path.c_str(), _TRUNCATE); } /*! From 1678531e5c421d6ef87410d02895310c39236e3b Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Mon, 1 Feb 2021 22:03:33 +0900 Subject: [PATCH 0400/1024] =?UTF-8?q?=E7=9B=B8=E5=AF=BE=E3=83=91=E3=82=B9?= =?UTF-8?q?=E3=82=92=E5=8F=96=E5=BE=97=E3=81=99=E3=82=8B=E9=96=A2=E6=95=B0?= =?UTF-8?q?=E3=82=92=E5=89=8A=E9=99=A4=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GetExedirやGetInidirとの整合性のため。 --- sakura_core/util/file.cpp | 18 ----- sakura_core/util/file.h | 2 - tests/unittests/test-cdlgprofilemgr.cpp | 4 +- tests/unittests/test-file.cpp | 96 ++----------------------- 4 files changed, 8 insertions(+), 112 deletions(-) diff --git a/sakura_core/util/file.cpp b/sakura_core/util/file.cpp index 936b9835e4..c151cb3968 100644 --- a/sakura_core/util/file.cpp +++ b/sakura_core/util/file.cpp @@ -481,15 +481,6 @@ std::filesystem::path GetExeFileName() return path.data(); } -/*! - @brief exeがあるフォルダのフルパス、またはexe基準のファイルパス(フルパス)を返す. -*/ -std::filesystem::path GetExePath(const std::wstring_view& filename) -{ - // sakura.exe のパスのファイル名を指定された文字列で置換 - return GetExeFileName().replace_filename(filename.data()); -} - /*! @brief exeファイルのあるディレクトリ,または指定されたファイル名のフルパスを返す. @@ -530,15 +521,6 @@ std::filesystem::path GetIniFileName() return GetExeFileName().replace_extension(L".ini"); } -/*! - @brief 設定フォルダのフルパス、またはini基準のファイルパス(フルパス)を返す. -*/ -std::filesystem::path GetIniPath(const std::wstring_view& filename) -{ - // iniファイルパスのファイル名を指定された文字列で置換 - return GetIniFileName().replace_filename(filename.data()); -} - /*! @brief INIファイルのあるディレクトリ,または指定されたファイル名のフルパスを返す. diff --git a/sakura_core/util/file.h b/sakura_core/util/file.h index e0fd9aae0f..ad0ffadee9 100644 --- a/sakura_core/util/file.h +++ b/sakura_core/util/file.h @@ -62,8 +62,6 @@ bool _IS_REL_PATH(const WCHAR* path); //!< 相対パスか判定する std::filesystem::path GetExeFileName(); std::filesystem::path GetIniFileName(); -std::filesystem::path GetExePath(const std::wstring_view& filename); -std::filesystem::path GetIniPath(const std::wstring_view& filename); //※サクラ依存 void GetExedir( LPWSTR pDir, LPCWSTR szFile = NULL ); diff --git a/tests/unittests/test-cdlgprofilemgr.cpp b/tests/unittests/test-cdlgprofilemgr.cpp index 9225d6b3e2..30e657d628 100644 --- a/tests/unittests/test-cdlgprofilemgr.cpp +++ b/tests/unittests/test-cdlgprofilemgr.cpp @@ -232,7 +232,7 @@ TEST(file, GetProfileMgrFileName_DefaultProfile1) CControlProcess dummy(nullptr, LR"(-PROF="")"); // 設定フォルダのパスが返る - const auto iniDir = GetIniPath(L"").append("a.txt").remove_filename(); + const auto iniDir = GetExeFileName().replace_filename(L"").append("a.txt").remove_filename(); ASSERT_STREQ(iniDir.c_str(), GetProfileMgrFileName(L"").c_str()); // コマンドラインのグローバル変数を元に戻す @@ -275,7 +275,7 @@ TEST(file, GetProfileMgrFileName_NamedProfile1) constexpr auto profile = L"profile1"; // 指定したプロファイルの設定保存先フォルダのパスが返る - const auto profileDir = GetIniPath(profile).append("a.txt").remove_filename(); + const auto profileDir = GetExeFileName().replace_filename(profile).append("a.txt").remove_filename(); ASSERT_STREQ(profileDir.c_str(), GetProfileMgrFileName(profile).c_str()); // コマンドラインのグローバル変数を元に戻す diff --git a/tests/unittests/test-file.cpp b/tests/unittests/test-file.cpp index 0ab321e47c..2710850db6 100644 --- a/tests/unittests/test-file.cpp +++ b/tests/unittests/test-file.cpp @@ -84,48 +84,6 @@ TEST(file, GetExeFileName) ASSERT_STREQ(path.data(), exePath.c_str()); } -/*! - * @brief exeフォルダのフルパスの取得 - */ -TEST(file, GetExePath_Directory) -{ - // テスト対象関数呼び出し - auto exeDir = GetExePath(L""); - - // 戻り値はファイル名を含まない - ASSERT_FALSE(exeDir.has_filename()); - - // パスコンポーネントの最終要素は空になる(\で終わっている) - auto lastComponent = *(--exeDir.end()); - ASSERT_STREQ(L"", lastComponent.c_str()); - - // 戻り値はexeファイルパスからファイル名を取り除いたものになる - auto exePath = GetExeFileName(); - ASSERT_STREQ(exePath.remove_filename().c_str(), exeDir.c_str()); -} - -/*! - * @brief exe基準のファイルパス(フルパス)の取得 - */ -TEST(file, GetExePath_FileName) -{ - // テストに使うファイル名(空でなければなんでもいい) - constexpr const auto filename = L"README.txt"; - - // テスト対象関数呼び出し - auto exeBasePath = GetExePath(filename); - - // 戻り値はファイル名を含む - ASSERT_TRUE(exeBasePath.has_filename()); - - // 戻り値のファイル名は指定したものになっている - ASSERT_STREQ(filename, exeBasePath.filename().c_str()); - - // 戻り値の親フォルダはexeファイルパスの親フォルダと等しい - auto exePath = GetExeFileName(); - ASSERT_STREQ(exePath.parent_path().c_str(), exeBasePath.parent_path().c_str()); -} - /*! * @brief 既存コード互換用に残しておく関数のリグレッション */ @@ -135,7 +93,7 @@ TEST(file, Deprecated_GetExedir) constexpr const auto filename = L"README.txt"; // 比較用関数呼び出し - auto exeBasePath = GetExePath(filename); + auto exeBasePath = GetExeFileName().parent_path().append(filename); // 戻り値取得用のバッファ WCHAR szBuf[_MAX_PATH]; @@ -375,48 +333,6 @@ TEST(file, GetIniFileName_PrivateDocument) ASSERT_FALSE(fexist(exeIniPath.c_str())); } -/*! - * @brief iniフォルダのフルパスの取得 - */ -TEST(file, GetIniPath_Directory) -{ - // テスト対象関数呼び出し - auto iniDir = GetIniPath(L""); - - // 戻り値はファイル名を含まない - ASSERT_FALSE(iniDir.has_filename()); - - // パスコンポーネントの最終要素は空になる(\で終わっている) - auto lastComponent = *(--iniDir.end()); - ASSERT_STREQ(L"", lastComponent.c_str()); - - // 戻り値はiniファイルパスからファイル名を取り除いたものになる - auto iniPath = GetIniFileName(); - ASSERT_STREQ(iniPath.remove_filename().c_str(), iniDir.c_str()); -} - -/*! - * @brief ini基準のファイルパス(フルパス)の取得 - */ -TEST(file, GetIniPath_FileName) -{ - // テストに使うファイル名(空でなければなんでもいい) - constexpr const auto filename = L"README.txt"; - - // テスト対象関数呼び出し - auto iniBasePath = GetIniPath(filename); - - // 戻り値はファイル名を含む - ASSERT_TRUE(iniBasePath.has_filename()); - - // 戻り値のファイル名は指定したものになっている - ASSERT_STREQ(filename, iniBasePath.filename().c_str()); - - // 戻り値の親フォルダはiniファイルパスの親フォルダと等しい - auto iniPath = GetIniFileName(); - ASSERT_STREQ(iniPath.parent_path().c_str(), iniBasePath.parent_path().c_str()); -} - /*! * @brief 既存コード互換用に残しておく関数のリグレッション */ @@ -426,7 +342,7 @@ TEST(file, Deprecated_GetInidir) constexpr const auto filename = L"README.txt"; // 比較用関数呼び出し - auto iniBasePath = GetIniPath(filename); + auto iniBasePath = GetIniFileName().parent_path().append(filename); // 戻り値取得用のバッファ WCHAR szBuf[_MAX_PATH]; @@ -464,11 +380,11 @@ TEST(file, GetInidirOrExedir) std::wstring buf(_MAX_PATH, L'\0'); GetInidirOrExedir(buf.data(), L"", true); - ASSERT_STREQ(GetExePath(L"").c_str(), buf.data()); + ASSERT_STREQ(GetExeFileName().replace_filename(L"").c_str(), buf.data()); constexpr auto filename = L"test.txt"; - auto exeBasePath = GetExePath(filename); - auto iniBasePath = GetIniPath(filename); + auto exeBasePath = GetExeFileName().parent_path().append(filename); + auto iniBasePath = GetIniFileName().parent_path().append(filename); // EXE基準のファイルを作る { @@ -478,7 +394,7 @@ TEST(file, GetInidirOrExedir) // INI基準のファイルを作る { - EnsureDirectoryExist(GetIniPath(L"").c_str()); + EnsureDirectoryExist(GetIniFileName().replace_filename(L"").c_str()); std::wofstream ofs(iniBasePath); ofs << L"TEST(file, GetInidirOrExedir)" << std::endl; From 1af9c2fc0de5900f47880fb6bee235295a2645b3 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Tue, 2 Feb 2021 22:34:29 +0900 Subject: [PATCH 0401/1024] =?UTF-8?q?stdafx.h=20=E3=81=8B=E3=82=89=20charc?= =?UTF-8?q?ode.h=20=E3=81=A8=20codechecker.h=20=E3=82=92=E9=99=A4=E5=8E=BB?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/StdAfx.h | 2 -- sakura_core/charset/CEuc.h | 1 + sakura_core/charset/CJis.h | 1 + sakura_core/charset/CLatin1.h | 1 + sakura_core/charset/CShiftJis.h | 1 + sakura_core/charset/CharPointer.h | 1 + sakura_core/convert/convert_util2.h | 1 + sakura_core/extmodule/CMigemo.cpp | 1 + sakura_core/mem/CNativeW.cpp | 1 + sakura_core/parse/CWordParse.cpp | 1 + sakura_core/util/string_ex.cpp | 1 + sakura_core/view/CEditView_Cmdisrch.cpp | 1 + 12 files changed, 11 insertions(+), 2 deletions(-) diff --git a/sakura_core/StdAfx.h b/sakura_core/StdAfx.h index 92a32dd05a..2732e10e3f 100644 --- a/sakura_core/StdAfx.h +++ b/sakura_core/StdAfx.h @@ -122,8 +122,6 @@ //TCHARユーティリティ #include "util/tchar_convert.h" -#include "charset/charcode.h" -#include "charset/codechecker.h" // 2010.04.19 Moca includeの大規模整理 #ifndef SAKURA_PCH_MODE_MIN diff --git a/sakura_core/charset/CEuc.h b/sakura_core/charset/CEuc.h index 8538765d2a..79b5bc3c59 100644 --- a/sakura_core/charset/CEuc.h +++ b/sakura_core/charset/CEuc.h @@ -28,6 +28,7 @@ #include #include "charset/CCodeBase.h" +#include "charset/codechecker.h" #include "charset/codeutil.h" class CEuc : public CCodeBase{ diff --git a/sakura_core/charset/CJis.h b/sakura_core/charset/CJis.h index fceceb568b..4c49986326 100644 --- a/sakura_core/charset/CJis.h +++ b/sakura_core/charset/CJis.h @@ -27,6 +27,7 @@ #pragma once #include "CCodeBase.h" +#include "charset/codechecker.h" class CJis : public CCodeBase{ public: diff --git a/sakura_core/charset/CLatin1.h b/sakura_core/charset/CLatin1.h index 118c39cc91..4d39d22756 100644 --- a/sakura_core/charset/CLatin1.h +++ b/sakura_core/charset/CLatin1.h @@ -32,6 +32,7 @@ #pragma once #include "CCodeBase.h" +#include "charset/codechecker.h" class CLatin1 : public CCodeBase{ diff --git a/sakura_core/charset/CShiftJis.h b/sakura_core/charset/CShiftJis.h index c74e4bd40c..c9369592ba 100644 --- a/sakura_core/charset/CShiftJis.h +++ b/sakura_core/charset/CShiftJis.h @@ -27,6 +27,7 @@ #pragma once #include "CCodeBase.h" +#include "charset/codechecker.h" #include "charset/codeutil.h" struct CommonSetting_Statusbar; diff --git a/sakura_core/charset/CharPointer.h b/sakura_core/charset/CharPointer.h index c8f1526ccb..ca9f4a5d49 100644 --- a/sakura_core/charset/CharPointer.h +++ b/sakura_core/charset/CharPointer.h @@ -27,6 +27,7 @@ #pragma once #include "charset/charcode.h" +#include "charset/codechecker.h" //!< ディレクトリを除いた、ファイル名だけを取得する class CharPointerA{ diff --git a/sakura_core/convert/convert_util2.h b/sakura_core/convert/convert_util2.h index a93815038a..d70c8760bd 100644 --- a/sakura_core/convert/convert_util2.h +++ b/sakura_core/convert/convert_util2.h @@ -31,6 +31,7 @@ #define SAKURA_CONVERT_UTIL2_9F00219B_A2FC_4096_BB26_197A667DFD25_H_ #pragma once +#include "charset/charcode.h" #include "parse/CWordParse.h" #include "mem/CMemory.h" diff --git a/sakura_core/extmodule/CMigemo.cpp b/sakura_core/extmodule/CMigemo.cpp index 94eed7ce45..dab4db8722 100644 --- a/sakura_core/extmodule/CMigemo.cpp +++ b/sakura_core/extmodule/CMigemo.cpp @@ -20,6 +20,7 @@ #include "env/CShareData.h" #include "env/DLLSHAREDATA.h" #include "charset/CUtf8.h" +#include "charset/codechecker.h" #include "util/module.h" #include "util/file.h" diff --git a/sakura_core/mem/CNativeW.cpp b/sakura_core/mem/CNativeW.cpp index 7c68c9e80c..764fa058fa 100644 --- a/sakura_core/mem/CNativeW.cpp +++ b/sakura_core/mem/CNativeW.cpp @@ -1,6 +1,7 @@ /*! @file */ #include "StdAfx.h" #include +#include "charset/codechecker.h" #include "mem/CNativeW.h" #include "CEol.h" diff --git a/sakura_core/parse/CWordParse.cpp b/sakura_core/parse/CWordParse.cpp index 2301db6edf..dd44363cbc 100644 --- a/sakura_core/parse/CWordParse.cpp +++ b/sakura_core/parse/CWordParse.cpp @@ -2,6 +2,7 @@ #include "StdAfx.h" #include "CWordParse.h" #include "charset/charcode.h" +#include "charset/codechecker.h" //@@@ 2001.06.23 N.Nakatani /*! diff --git a/sakura_core/util/string_ex.cpp b/sakura_core/util/string_ex.cpp index 5a56e2e3d4..58362528e8 100644 --- a/sakura_core/util/string_ex.cpp +++ b/sakura_core/util/string_ex.cpp @@ -5,6 +5,7 @@ #include #include "charset/charcode.h" +#include "charset/codechecker.h" #include "util/std_macro.h" #include #include diff --git a/sakura_core/view/CEditView_Cmdisrch.cpp b/sakura_core/view/CEditView_Cmdisrch.cpp index 5b46613d72..10a2ec8b8d 100644 --- a/sakura_core/view/CEditView_Cmdisrch.cpp +++ b/sakura_core/view/CEditView_Cmdisrch.cpp @@ -14,6 +14,7 @@ #include "StdAfx.h" #include "view/CEditView.h" #include "window/CEditWnd.h" +#include "charset/codechecker.h" #include "doc/CEditDoc.h" #include "doc/logic/CDocLine.h" #include "extmodule/CMigemo.h" From 88524d8cdc12a0edfb113a4594ce7baff1f1e8d6 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Wed, 3 Feb 2021 22:26:25 +0900 Subject: [PATCH 0402/1024] =?UTF-8?q?LocalCache=20=E3=81=AB=E5=85=AC?= =?UTF-8?q?=E9=96=8B=E3=82=B0=E3=83=AD=E3=83=BC=E3=83=90=E3=83=AB=E9=96=A2?= =?UTF-8?q?=E6=95=B0=E3=81=A8=E5=90=8C=E3=81=98=E3=82=A4=E3=83=B3=E3=82=BF?= =?UTF-8?q?=E3=83=BC=E3=83=95=E3=82=A7=E3=83=BC=E3=82=B9=E3=82=92=E6=8C=81?= =?UTF-8?q?=E3=81=9F=E3=81=9B=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - LocalCache::CalcPxWidthByFont を QueryPixelWidth にリネーム - WCODE::CalcPxWidthByFont の処理を新設 LocalCache::CalcPxWidthByFont へ移動 - LocalCache::CalcHankakuByFont は使われていなかったので削除 - WCODE::CalcHankakuByFont の処理を新設 LocalCache::CalcHankakuByFont へ移動 --- sakura_core/charset/charcode.cpp | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/sakura_core/charset/charcode.cpp b/sakura_core/charset/charcode.cpp index b28903ab36..9db86a1c14 100644 --- a/sakura_core/charset/charcode.cpp +++ b/sakura_core/charset/charcode.cpp @@ -198,14 +198,12 @@ namespace WCODE } bool CalcHankakuByFont(wchar_t c) const { - SIZE size={m_han_size.cx*2,0}; //関数が失敗したときのことを考え、全角幅で初期化しておく - GetTextExtentPoint32(SelectHDC(c),&c,1,&size); - return (size.cx<=m_han_size.cx); + return IsHankakuByWidth(QueryPixelWidth(c)); } [[nodiscard]] bool IsHankakuByWidth(int width) const { return width<=m_han_size.cx; } - int CalcPxWidthByFont(wchar_t c) const + int QueryPixelWidth(wchar_t c) const { SIZE size={m_han_size.cx*2,0}; //関数が失敗したときのことを考え、全角幅で初期化しておく // 2014.12.21 コントロールコードの表示・NULが1px幅になるのをスペース幅にする @@ -219,6 +217,14 @@ namespace WCODE GetTextExtentPoint32(SelectHDC(c),&c,1,&size); return t_max(1,size.cx); } + int CalcPxWidthByFont(wchar_t c) { + // -- -- キャッシュが存在すれば、それをそのまま返す -- -- // + if (ExistCache(c))return GetCachePx(c); + + // -- -- キャッシュ更新 -- -- // + SetCachePx(c, static_cast(QueryPixelWidth(c))); + return GetCachePx(c); + } int CalcPxWidthByFont2(const wchar_t* pc2) const { SIZE size={m_han_size.cx*2,0}; @@ -306,25 +312,18 @@ namespace WCODE //文字幅の動的計算。ピクセル幅 int CalcPxWidthByFont(wchar_t c) { - LocalCache* pcache = selector.GetCache(); - // -- -- キャッシュが存在すれば、それをそのまま返す -- -- // - if(pcache->ExistCache(c))return pcache->GetCachePx(c); - - // -- -- キャッシュ更新 -- -- // - pcache->SetCachePx(c, static_cast(pcache->CalcPxWidthByFont(c))); - return pcache->GetCachePx(c); + return selector.GetCache()->CalcPxWidthByFont(c); } - int CalcPxWidthByFont2(const wchar_t* pc){ - const LocalCache* pcache = selector.GetCache(); - return pcache->CalcPxWidthByFont2(pc); + int CalcPxWidthByFont2(const wchar_t* pc) + { + return selector.GetCache()->CalcPxWidthByFont2(pc); } //文字幅の動的計算。半角ならtrue。 bool CalcHankakuByFont(wchar_t c) { - const LocalCache* pcache = selector.GetCache(); - return pcache->IsHankakuByWidth(CalcPxWidthByFont(c)); + return selector.GetCache()->CalcHankakuByFont(c); } // 文字の使用フォントを返す From c9642e86ec5dba3dac347ce77eea10fa60a8a60e Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Wed, 3 Feb 2021 22:43:31 +0900 Subject: [PATCH 0403/1024] =?UTF-8?q?=E4=B8=80=E5=BA=A6=E3=81=97=E3=81=8B?= =?UTF-8?q?=E5=91=BC=E3=81=B0=E3=82=8C=E3=81=A6=E3=81=84=E3=81=AA=E3=81=8B?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E4=B8=80=E8=A1=8C=E9=96=A2=E6=95=B0=E3=82=92?= =?UTF-8?q?=E5=91=BC=E3=81=B3=E5=87=BA=E3=81=97=E5=85=83=E3=81=AB=E5=B1=95?= =?UTF-8?q?=E9=96=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/charcode.cpp | 39 ++++++-------------------------- 1 file changed, 7 insertions(+), 32 deletions(-) diff --git a/sakura_core/charset/charcode.cpp b/sakura_core/charset/charcode.cpp index 9db86a1c14..c25bdeee5a 100644 --- a/sakura_core/charset/charcode.cpp +++ b/sakura_core/charset/charcode.cpp @@ -120,10 +120,6 @@ namespace WCODE if(m_hdc){ DeleteDC(m_hdc); m_hdc = nullptr;} if(m_hdcFull){ DeleteDC(m_hdcFull); m_hdcFull = nullptr;} } - static bool IsEqual(const LOGFONT &lhs, const LOGFONT &rhs){ - return &lhs == &rhs || - 0 == memcmp(&lhs, &rhs, sizeof(lhs)); - } // 再初期化 void Init(const LOGFONT &lf, const LOGFONT &lfFull, HDC hdcOrg) @@ -136,7 +132,7 @@ namespace WCODE m_hFont = ::CreateFontIndirect( &lf ); m_hFontOld = (HFONT)SelectObject(m_hdc,m_hFont); - bool bFullFont = !IsEqual(lf,lfFull); + const bool bFullFont = &lf != &lfFull && std::memcmp(&lf, &lfFull, sizeof(lf)) != 0; if( bFullFont ){ m_bMultiFont = true; m_hdcFull = CreateCompatibleDC(hdcOrg); @@ -183,25 +179,9 @@ namespace WCODE memset(m_pCache->m_nCharPxWidthCache.data(), 0, sizeof(m_pCache->m_nCharPxWidthCache)); m_pCache->m_nCharWidthCacheTest=0x12345678; } - void SetCachePx(wchar_t c, short cache_pxwidth) - { - m_pCache->m_nCharPxWidthCache[c] = cache_pxwidth; - } - [[nodiscard]] short GetCachePx(wchar_t c) const - { - return _GetRawPx(c); - } - [[nodiscard]] bool ExistCache(wchar_t c) const - { - assert(m_pCache->m_nCharWidthCacheTest==0x12345678); - return _GetRawPx(c)!=0x0; - } bool CalcHankakuByFont(wchar_t c) const { - return IsHankakuByWidth(QueryPixelWidth(c)); - } - [[nodiscard]] bool IsHankakuByWidth(int width) const { - return width<=m_han_size.cx; + return QueryPixelWidth(c) <= m_han_size.cx; } int QueryPixelWidth(wchar_t c) const { @@ -218,12 +198,11 @@ namespace WCODE return t_max(1,size.cx); } int CalcPxWidthByFont(wchar_t c) { - // -- -- キャッシュが存在すれば、それをそのまま返す -- -- // - if (ExistCache(c))return GetCachePx(c); - - // -- -- キャッシュ更新 -- -- // - SetCachePx(c, static_cast(QueryPixelWidth(c))); - return GetCachePx(c); + // キャッシュから文字の情報を取得する。情報がなければ、計算して登録する。 + if (!m_pCache->m_nCharPxWidthCache[c]) { + m_pCache->m_nCharPxWidthCache[c] = static_cast(QueryPixelWidth(c)); + } + return m_pCache->m_nCharPxWidthCache[c]; } int CalcPxWidthByFont2(const wchar_t* pc2) const { @@ -238,10 +217,6 @@ namespace WCODE } protected: - [[nodiscard]] short _GetRawPx(wchar_t c) const - { - return m_pCache->m_nCharPxWidthCache[c]; - } [[nodiscard]] HDC SelectHDC(wchar_t c) const { return m_hdcFull && WCODE::GetFontNo(c) ? m_hdcFull : m_hdc; From 96eb085fde3dc5964899562c9b9f41846f2adb28 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sun, 31 Jan 2021 21:15:17 +0900 Subject: [PATCH 0404/1024] =?UTF-8?q?LocalCache=20=E3=81=A8=20LocalCacheSe?= =?UTF-8?q?lector=20=E3=81=AE=E5=90=8D=E7=A7=B0=E3=82=92=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit LocalCache -> CCharWidthCache: Localといいつつ共有メモリ上のキャッシュにアクセスする機能も持っているため、機能をより正確に表現する名称にする。 LocalCacheSelector -> CacheSelector: 同様に改名。CharWidthCacheSelector では冗長であるので CacheSelector としておく。 --- sakura_core/charset/charcode.cpp | 28 ++++++++++++++-------------- sakura_core/view/CTextMetrics.cpp | 2 +- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/sakura_core/charset/charcode.cpp b/sakura_core/charset/charcode.cpp index c25bdeee5a..cb3c2a5e08 100644 --- a/sakura_core/charset/charcode.cpp +++ b/sakura_core/charset/charcode.cpp @@ -25,7 +25,7 @@ #include "StdAfx.h" #include "charset/charcode.h" - +#include #include "env/DLLSHAREDATA.h" /*! キーワードキャラクタ */ @@ -96,12 +96,12 @@ namespace WCODE 文字幅情報のキャッシュクラス。 1文字当たり2バイトで保存しておく。 */ - class LocalCache{ + class CCharWidthCache{ public: - LocalCache() = default; - LocalCache(const LocalCache&) = delete; - LocalCache& operator=(const LocalCache&) = delete; - ~LocalCache() + CCharWidthCache() = default; + CCharWidthCache(const CCharWidthCache&) = delete; + CCharWidthCache& operator=(const CCharWidthCache&) = delete; + ~CCharWidthCache() { // -- -- 後始末 -- -- // DeleteLocalData(); @@ -235,15 +235,15 @@ namespace WCODE SCharWidthCache* m_pCache = nullptr; }; - class LocalCacheSelector{ + class CacheSelector{ public: - LocalCacheSelector() : pcache(m_localcache.data()) + CacheSelector() : pcache(m_localcache.data()) { for( int i=0; iGetMultiFont(); } - [[nodiscard]] LocalCache* GetCache(){ return pcache; } + [[nodiscard]] CCharWidthCache* GetCache(){ return pcache; } private: - std::array m_localcache; + std::array m_localcache; std::array m_parCache; ECharWidthCacheMode m_eLastEditCacheMode = CWM_CACHE_NEUTRAL; - LocalCache* pcache; - DISALLOW_COPY_AND_ASSIGN(LocalCacheSelector); + CCharWidthCache* pcache; + DISALLOW_COPY_AND_ASSIGN(CacheSelector); }; - static LocalCacheSelector selector; + static CacheSelector selector; //文字幅の動的計算。ピクセル幅 int CalcPxWidthByFont(wchar_t c) diff --git a/sakura_core/view/CTextMetrics.cpp b/sakura_core/view/CTextMetrics.cpp index 70dec7cb39..106b97918c 100644 --- a/sakura_core/view/CTextMetrics.cpp +++ b/sakura_core/view/CTextMetrics.cpp @@ -72,7 +72,7 @@ void CTextMetrics::Update(HDC hdc, HFONT hFont, int nLineSpace, int nColmSpace) for( int i = 0; i < size; i++ ){ HFONT hFontOld = (HFONT)::SelectObject( hdc, hFontArray[i] ); SIZE sz; - // LocalCache::m_han_size と一致していなければならない + // CCharWidthCache::m_han_size と一致していなければならない { // KB145994 // tmAveCharWidth は不正確(半角か全角なのかも不明な値を返す) From 400a5e0354b34d114846daf3c5582719e0c88442 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Wed, 3 Feb 2021 23:10:55 +0900 Subject: [PATCH 0405/1024] =?UTF-8?q?CCharWidthCache=20=E3=81=AE=E5=AE=A3?= =?UTF-8?q?=E8=A8=80=E3=82=92=E3=83=98=E3=83=83=E3=83=80=E3=83=BC=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AB=E7=A7=BB=E5=8B=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/charcode.cpp | 247 ++++++++++++++----------------- sakura_core/charset/charcode.h | 39 +++++ 2 files changed, 148 insertions(+), 138 deletions(-) diff --git a/sakura_core/charset/charcode.cpp b/sakura_core/charset/charcode.cpp index cb3c2a5e08..d257cecb25 100644 --- a/sakura_core/charset/charcode.cpp +++ b/sakura_core/charset/charcode.cpp @@ -91,150 +91,121 @@ namespace WCODE { return wc < gm_keyword_char.size() && gm_keyword_char[wc] == CK_CTRL; } +} - /*! - 文字幅情報のキャッシュクラス。 - 1文字当たり2バイトで保存しておく。 - */ - class CCharWidthCache{ - public: - CCharWidthCache() = default; - CCharWidthCache(const CCharWidthCache&) = delete; - CCharWidthCache& operator=(const CCharWidthCache&) = delete; - ~CCharWidthCache() - { - // -- -- 後始末 -- -- // - DeleteLocalData(); - } - void DeleteLocalData(){ - if (m_hFont != nullptr) { - SelectObject(m_hdc, m_hFontOld); - DeleteObject(m_hFont); - m_hFont = nullptr; - } - if (m_hFontFull != nullptr) { - SelectObject(m_hdcFull, m_hFontFullOld); - DeleteObject(m_hFontFull); - m_hFontFull = nullptr; - } - if(m_hdc){ DeleteDC(m_hdc); m_hdc = nullptr;} - if(m_hdcFull){ DeleteDC(m_hdcFull); m_hdcFull = nullptr;} - } +void CCharWidthCache::DeleteLocalData() +{ + if (m_hFont != nullptr) { + SelectObject(m_hdc, m_hFontOld); + DeleteObject(m_hFont); + m_hFont = nullptr; + } + if (m_hFontFull != nullptr) { + SelectObject(m_hdcFull, m_hFontFullOld); + DeleteObject(m_hFontFull); + m_hFontFull = nullptr; + } + if(m_hdc){ DeleteDC(m_hdc); m_hdc = nullptr;} + if(m_hdcFull){ DeleteDC(m_hdcFull); m_hdcFull = nullptr;} +} - // 再初期化 - void Init(const LOGFONT &lf, const LOGFONT &lfFull, HDC hdcOrg) - { - DeleteLocalData(); - - m_hdc = ::CreateCompatibleDC(hdcOrg); - m_lf = lf; - m_lf2 = lfFull; - - m_hFont = ::CreateFontIndirect( &lf ); - m_hFontOld = (HFONT)SelectObject(m_hdc,m_hFont); - const bool bFullFont = &lf != &lfFull && std::memcmp(&lf, &lfFull, sizeof(lf)) != 0; - if( bFullFont ){ - m_bMultiFont = true; - m_hdcFull = CreateCompatibleDC(hdcOrg); - m_hFontFull = ::CreateFontIndirect(&lfFull); - m_hFontFullOld = (HFONT)SelectObject(m_hdcFull, m_hFontFull); - }else{ - m_bMultiFont = false; - m_hdcFull = nullptr; - m_hFontFull = nullptr; - m_hFontFullOld = nullptr; - } - s_MultiFont = m_bMultiFont; - - // -- -- 半角基準 -- -- // - // CTextMetrics::Update と同じでなければならない - std::array hdcArr = {m_hdc, m_hdcFull}; - int size = (bFullFont ? 2 : 1); - m_han_size.cx = 1; - m_han_size.cy = 1; - for(int i = 0; i < size; i++){ - // KB145994 - // tmAveCharWidth は不正確(半角か全角なのかも不明な値を返す) - SIZE sz; - GetTextExtentPoint32(hdcArr[i], L"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", 52, &sz); - sz.cx = (sz.cx / 26 + 1) / 2; - if( m_han_size.cx < sz.cx ){ - m_han_size.cx = sz.cx; - } - if( m_han_size.cy < sz.cy ){ - m_han_size.cy = sz.cy; - } - } - } - void SelectCache( SCharWidthCache* pCache ) - { - m_pCache = pCache; - } - void Clear() - { - assert(m_pCache!=0); - // キャッシュのクリア - memcpy(m_pCache->m_lfFaceName.data(), m_lf.lfFaceName, sizeof(m_lf.lfFaceName)); - memcpy(m_pCache->m_lfFaceName2.data(), m_lf2.lfFaceName, sizeof(m_lf2.lfFaceName)); - memset(m_pCache->m_nCharPxWidthCache.data(), 0, sizeof(m_pCache->m_nCharPxWidthCache)); - m_pCache->m_nCharWidthCacheTest=0x12345678; - } - bool CalcHankakuByFont(wchar_t c) const - { - return QueryPixelWidth(c) <= m_han_size.cx; - } - int QueryPixelWidth(wchar_t c) const - { - SIZE size={m_han_size.cx*2,0}; //関数が失敗したときのことを考え、全角幅で初期化しておく - // 2014.12.21 コントロールコードの表示・NULが1px幅になるのをスペース幅にする - if (WCODE::IsControlCode(c)) { - GetTextExtentPoint32(SelectHDC(c),&c,1,&size); - const int nCx = size.cx; - const wchar_t proxyChar = ((L'\0' == c) ? ' ' : L'・'); - GetTextExtentPoint32(SelectHDC(proxyChar),&proxyChar,1,&size); - return t_max(nCx, size.cx); - } - GetTextExtentPoint32(SelectHDC(c),&c,1,&size); - return t_max(1,size.cx); - } - int CalcPxWidthByFont(wchar_t c) { - // キャッシュから文字の情報を取得する。情報がなければ、計算して登録する。 - if (!m_pCache->m_nCharPxWidthCache[c]) { - m_pCache->m_nCharPxWidthCache[c] = static_cast(QueryPixelWidth(c)); - } - return m_pCache->m_nCharPxWidthCache[c]; - } - int CalcPxWidthByFont2(const wchar_t* pc2) const - { - SIZE size={m_han_size.cx*2,0}; - // サロゲートは全角フォント - GetTextExtentPoint32(m_hdcFull?m_hdcFull:m_hdc,pc2,2,&size); - return t_max(1,size.cx); +void CCharWidthCache::Init(const LOGFONT &lf, const LOGFONT &lfFull, HDC hdcOrg) +{ + DeleteLocalData(); + + m_hdc = ::CreateCompatibleDC(hdcOrg); + m_lf = lf; + m_lf2 = lfFull; + + m_hFont = ::CreateFontIndirect( &lf ); + m_hFontOld = (HFONT)SelectObject(m_hdc,m_hFont); + const bool bFullFont = &lf != &lfFull && std::memcmp(&lf, &lfFull, sizeof(lf)) != 0; + if( bFullFont ){ + m_bMultiFont = true; + m_hdcFull = CreateCompatibleDC(hdcOrg); + m_hFontFull = ::CreateFontIndirect(&lfFull); + m_hFontFullOld = (HFONT)SelectObject(m_hdcFull, m_hFontFull); + }else{ + m_bMultiFont = false; + m_hdcFull = nullptr; + m_hFontFull = nullptr; + m_hFontFullOld = nullptr; + } + WCODE::s_MultiFont = m_bMultiFont; + + // -- -- 半角基準 -- -- // + // CTextMetrics::Update と同じでなければならない + std::array hdcArr = {m_hdc, m_hdcFull}; + int size = (bFullFont ? 2 : 1); + m_han_size.cx = 1; + m_han_size.cy = 1; + for(int i = 0; i < size; i++){ + // KB145994 + // tmAveCharWidth は不正確(半角か全角なのかも不明な値を返す) + SIZE sz; + GetTextExtentPoint32(hdcArr[i], L"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", 52, &sz); + sz.cx = (sz.cx / 26 + 1) / 2; + if( m_han_size.cx < sz.cx ){ + m_han_size.cx = sz.cx; } - [[nodiscard]] bool GetMultiFont() const - { - return m_bMultiFont; + if( m_han_size.cy < sz.cy ){ + m_han_size.cy = sz.cy; } + } +} + +void CCharWidthCache::Clear() +{ + assert(m_pCache!=0); + // キャッシュのクリア + memcpy(m_pCache->m_lfFaceName.data(), m_lf.lfFaceName, sizeof(m_lf.lfFaceName)); + memcpy(m_pCache->m_lfFaceName2.data(), m_lf2.lfFaceName, sizeof(m_lf2.lfFaceName)); + memset(m_pCache->m_nCharPxWidthCache.data(), 0, sizeof(m_pCache->m_nCharPxWidthCache)); + m_pCache->m_nCharWidthCacheTest=0x12345678; +} + +bool CCharWidthCache::CalcHankakuByFont(wchar_t c) const +{ + return QueryPixelWidth(c) <= m_han_size.cx; +} + +int CCharWidthCache::QueryPixelWidth(wchar_t c) const +{ + SIZE size={m_han_size.cx*2,0}; //関数が失敗したときのことを考え、全角幅で初期化しておく + // 2014.12.21 コントロールコードの表示・NULが1px幅になるのをスペース幅にする + if (WCODE::IsControlCode(c)) { + GetTextExtentPoint32(SelectHDC(c),&c,1,&size); + const int nCx = size.cx; + const wchar_t proxyChar = ((L'\0' == c) ? ' ' : L'・'); + GetTextExtentPoint32(SelectHDC(proxyChar),&proxyChar,1,&size); + return t_max(nCx, size.cx); + } + GetTextExtentPoint32(SelectHDC(c),&c,1,&size); + return t_max(1,size.cx); +} + +int CCharWidthCache::CalcPxWidthByFont(wchar_t c) { + // キャッシュから文字の情報を取得する。情報がなければ、計算して登録する。 + if (!m_pCache->m_nCharPxWidthCache[c]) { + m_pCache->m_nCharPxWidthCache[c] = static_cast(QueryPixelWidth(c)); + } + return m_pCache->m_nCharPxWidthCache[c]; +} + +int CCharWidthCache::CalcPxWidthByFont2(const wchar_t* pc2) const +{ + SIZE size={m_han_size.cx*2,0}; + // サロゲートは全角フォント + GetTextExtentPoint32(m_hdcFull?m_hdcFull:m_hdc,pc2,2,&size); + return t_max(1,size.cx); +} - protected: - [[nodiscard]] HDC SelectHDC(wchar_t c) const - { - return m_hdcFull && WCODE::GetFontNo(c) ? m_hdcFull : m_hdc; - } - private: - HDC m_hdc = nullptr; - HDC m_hdcFull = nullptr; - HFONT m_hFontOld = nullptr; - HFONT m_hFontFullOld = nullptr; - HFONT m_hFont = nullptr; - HFONT m_hFontFull = nullptr; - bool m_bMultiFont; - SIZE m_han_size; - LOGFONT m_lf {}; // 2008/5/15 Uchi - LOGFONT m_lf2 {}; - SCharWidthCache* m_pCache = nullptr; - }; +[[nodiscard]] HDC CCharWidthCache::SelectHDC(wchar_t c) const +{ + return m_hdcFull && WCODE::GetFontNo(c) ? m_hdcFull : m_hdc; +} +namespace WCODE { class CacheSelector{ public: CacheSelector() : pcache(m_localcache.data()) diff --git a/sakura_core/charset/charcode.h b/sakura_core/charset/charcode.h index bcc4a212ef..8000d963e7 100644 --- a/sakura_core/charset/charcode.h +++ b/sakura_core/charset/charcode.h @@ -245,6 +245,45 @@ enum ECharWidthCacheMode { CWM_CACHE_LOCAL, }; +/*! + 文字幅情報のキャッシュクラス。 + 1文字当たり2バイトで文字のピクセル幅を保存しておく。 +*/ +class CCharWidthCache { +public: + CCharWidthCache() = default; + CCharWidthCache(const CCharWidthCache&) = delete; + CCharWidthCache& operator=(const CCharWidthCache&) = delete; + ~CCharWidthCache() { DeleteLocalData(); } + + // 再初期化 + void Init(const LOGFONT& lf, const LOGFONT& lfFull, HDC hdcOrg); + void SelectCache(SCharWidthCache* pCache) { m_pCache = pCache; } + void Clear(); + [[nodiscard]] bool GetMultiFont() const { return m_bMultiFont; } + + bool CalcHankakuByFont(wchar_t c) const; + int CalcPxWidthByFont(wchar_t c); + int CalcPxWidthByFont2(const wchar_t* pc2) const; + +private: + void DeleteLocalData(); + int QueryPixelWidth(wchar_t c) const; + [[nodiscard]] HDC SelectHDC(wchar_t c) const; + + HDC m_hdc = nullptr; + HDC m_hdcFull = nullptr; + HFONT m_hFontOld = nullptr; + HFONT m_hFontFullOld = nullptr; + HFONT m_hFont = nullptr; + HFONT m_hFontFull = nullptr; + bool m_bMultiFont; + SIZE m_han_size; + LOGFONT m_lf{}; // 2008/5/15 Uchi + LOGFONT m_lf2{}; + SCharWidthCache* m_pCache = nullptr; +}; + // キャッシュの初期化関数群 void SelectCharWidthCache( ECharWidthFontMode fMode, ECharWidthCacheMode cMode ); //!< モードを変更したいとき void InitCharWidthCache( const LOGFONT &lf, ECharWidthFontMode fMode=CWM_FONT_EDIT ); //!< フォントを変更したとき From c8dfa707581c9114d79013a794cc6b39694159a8 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Thu, 4 Feb 2021 01:03:54 +0900 Subject: [PATCH 0406/1024] =?UTF-8?q?GetCharWidthCache=20=E9=96=A2?= =?UTF-8?q?=E6=95=B0=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/charcode.cpp | 5 +++++ sakura_core/charset/charcode.h | 2 ++ tests/unittests/test-charcode.cpp | 17 +++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/sakura_core/charset/charcode.cpp b/sakura_core/charset/charcode.cpp index d257cecb25..85b46d012d 100644 --- a/sakura_core/charset/charcode.cpp +++ b/sakura_core/charset/charcode.cpp @@ -308,3 +308,8 @@ void SelectCharWidthCache( ECharWidthFontMode fMode, ECharWidthCacheMode cMode WCODE::selector.Select( fMode, cMode ); } + +[[nodiscard]] CCharWidthCache& GetCharWidthCache() +{ + return *WCODE::selector.GetCache(); +} diff --git a/sakura_core/charset/charcode.h b/sakura_core/charset/charcode.h index 8000d963e7..8aabcdfb25 100644 --- a/sakura_core/charset/charcode.h +++ b/sakura_core/charset/charcode.h @@ -288,4 +288,6 @@ class CCharWidthCache { void SelectCharWidthCache( ECharWidthFontMode fMode, ECharWidthCacheMode cMode ); //!< モードを変更したいとき void InitCharWidthCache( const LOGFONT &lf, ECharWidthFontMode fMode=CWM_FONT_EDIT ); //!< フォントを変更したとき void InitCharWidthCacheFromDC(const LOGFONT* lfs, ECharWidthFontMode fMode, HDC hdcOrg ); +[[nodiscard]] CCharWidthCache& GetCharWidthCache(); + #endif /* SAKURA_CHARCODE_4C34C669_0BAB_441A_9B1D_2B9AC1895380_H_ */ diff --git a/tests/unittests/test-charcode.cpp b/tests/unittests/test-charcode.cpp index a818eb73e9..076cac19ab 100644 --- a/tests/unittests/test-charcode.cpp +++ b/tests/unittests/test-charcode.cpp @@ -181,6 +181,23 @@ TEST_F(CharWidthCache, FontNo) EXPECT_EQ(WCODE::GetFontNo2(0xd83c, 0xdf38), 1); } +TEST_F(CharWidthCache, GetCharWidthCache) +{ + SelectCharWidthCache(CWM_FONT_EDIT, CWM_CACHE_LOCAL); + CCharWidthCache& edit1 = GetCharWidthCache(); + SelectCharWidthCache(CWM_FONT_MINIMAP, CWM_CACHE_LOCAL); + CCharWidthCache& minimap = GetCharWidthCache(); + + // 違うキャッシュ + EXPECT_NE(&edit1, &minimap); + + SelectCharWidthCache(CWM_FONT_EDIT, CWM_CACHE_LOCAL); + CCharWidthCache& edit2 = GetCharWidthCache(); + + // 同じキャッシュ + EXPECT_EQ(&edit1, &edit2); +} + TEST(charcode, IS_KEYWORD_CHAR) { for (wchar_t ch = 0; ch < gm_keyword_char.size(); ++ch) { From d4a3547c998a56db4172b9406f6aa09fa13707d0 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Thu, 4 Feb 2021 18:08:59 +0900 Subject: [PATCH 0407/1024] =?UTF-8?q?Wnd=5FGetText=20=E3=81=8C=E4=B8=80?= =?UTF-8?q?=E6=96=87=E5=AD=97=E5=8F=96=E3=82=8A=E3=81=93=E3=81=BC=E3=81=99?= =?UTF-8?q?=E5=95=8F=E9=A1=8C=E3=81=AB=E5=AF=BE=E5=87=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/apiwrap/StdControl.cpp | 2 +- tests/unittests/test-StdControl.cpp | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/sakura_core/apiwrap/StdControl.cpp b/sakura_core/apiwrap/StdControl.cpp index 79701c8ace..855af35c33 100644 --- a/sakura_core/apiwrap/StdControl.cpp +++ b/sakura_core/apiwrap/StdControl.cpp @@ -36,7 +36,7 @@ namespace ApiWrap{ } // ウィンドウテキストを取得するのに必要なバッファを確保する - strText.resize( cchRequired ); + strText.resize( cchRequired + 1 ); // GetWindowText() はコピーした文字数を返す。 // https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getwindowtextw diff --git a/tests/unittests/test-StdControl.cpp b/tests/unittests/test-StdControl.cpp index 1009d1bab3..bd5bff128c 100644 --- a/tests/unittests/test-StdControl.cpp +++ b/tests/unittests/test-StdControl.cpp @@ -32,3 +32,19 @@ TEST(StdControl, Wnd_GetText) CNativeW tempText; ASSERT_FALSE(Wnd_GetText(NULL, tempText)); } + +// GitHub #1528 の退行防止テストケース。 +// 取得する文字列の長さが basic_string::capacity と同じだった場合に一文字取りこぼしていた。 +TEST(StdControl, Wnd_GetText2) +{ + wchar_t text[] = L"0123456789012345678901234567890123456789"; + + std::wstring s; + text[s.capacity()] = L'\0'; + + HINSTANCE hinstance = GetModuleHandleW(nullptr); + HWND hwnd = CreateWindowExW(0, L"STATIC", text, 0, 1, 1, 1, 1, nullptr, nullptr, hinstance, nullptr); + Wnd_GetText(hwnd, s); + DestroyWindow(hwnd); + ASSERT_STREQ(s.c_str(), text); +} From 756477436fe2a7fcb382d353aec9e219237515c7 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sat, 6 Feb 2021 00:49:34 +0900 Subject: [PATCH 0408/1024] =?UTF-8?q?MinGW=20=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/charcode.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/charset/charcode.cpp b/sakura_core/charset/charcode.cpp index 85b46d012d..a56a8e25cf 100644 --- a/sakura_core/charset/charcode.cpp +++ b/sakura_core/charset/charcode.cpp @@ -119,7 +119,7 @@ void CCharWidthCache::Init(const LOGFONT &lf, const LOGFONT &lfFull, HDC hdcOrg) m_hFont = ::CreateFontIndirect( &lf ); m_hFontOld = (HFONT)SelectObject(m_hdc,m_hFont); - const bool bFullFont = &lf != &lfFull && std::memcmp(&lf, &lfFull, sizeof(lf)) != 0; + const bool bFullFont = &lf != &lfFull && memcmp(&lf, &lfFull, sizeof(lf)) != 0; if( bFullFont ){ m_bMultiFont = true; m_hdcFull = CreateCompatibleDC(hdcOrg); From 9ff395e167fa297c3bdd8abc7ea6d3d46f90c009 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Wed, 27 Jan 2021 21:52:21 +0900 Subject: [PATCH 0409/1024] =?UTF-8?q?IOProfileData=E3=81=AE=E5=BC=95?= =?UTF-8?q?=E6=95=B0=E5=9E=8B=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CDataProfile.h | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/sakura_core/CDataProfile.h b/sakura_core/CDataProfile.h index fd8a2fd5f2..85c7e1be04 100644 --- a/sakura_core/CDataProfile.h +++ b/sakura_core/CDataProfile.h @@ -166,8 +166,8 @@ class CDataProfile : public CProfile{ */ template //T=={bool, int, WORD, wchar_t, char, StringBufferW, StaticString} bool IOProfileData( - const WCHAR* pszSectionName, //!< [in] セクション名 - const WCHAR* pszEntryKey, //!< [in] エントリ名 + const std::wstring& strSectionName, //!< [in] セクション名 + const std::wstring& strEntryKey, //!< [in] エントリ名 T& tEntryValue //!< [in,out] エントリ値 ) noexcept { @@ -177,7 +177,7 @@ class CDataProfile : public CProfile{ bool ret = false; if( IsReadingMode() ){ //文字列読み込み - if( GetProfileDataImp( pszSectionName, pszEntryKey, buf ) ){ + if( GetProfileDataImp( strSectionName, strEntryKey, buf ) ){ //Tに変換 profile_to_value(buf, &tEntryValue); ret = true; @@ -186,7 +186,7 @@ class CDataProfile : public CProfile{ //文字列に変換 value_to_profile(tEntryValue, &buf); //文字列書き込み - ret = SetProfileDataImp( pszSectionName, pszEntryKey, buf ); + ret = SetProfileDataImp( strSectionName, strEntryKey, buf ); } return ret; } @@ -194,10 +194,10 @@ class CDataProfile : public CProfile{ //2007.08.14 kobake 追加 //! intを介して任意型の入出力を行う template - bool IOProfileData_WrapInt( const WCHAR* pszSectionName, const WCHAR* pszEntryKey, T& nEntryValue) + bool IOProfileData_WrapInt( const std::wstring& strSectionName, const std::wstring& strEntryKey, T& nEntryValue) { int n=nEntryValue; - bool ret=this->IOProfileData( pszSectionName, pszEntryKey, n ); + bool ret = this->IOProfileData( strSectionName, strEntryKey, n ); nEntryValue=(T)n; return ret; } @@ -208,18 +208,18 @@ class CDataProfile : public CProfile{ */ template <> inline bool CDataProfile::IOProfileData( - const WCHAR* pszSectionName, //!< [in] セクション名 - const WCHAR* pszEntryKey, //!< [in] エントリ名 + const std::wstring& strSectionName, //!< [in] セクション名 + const std::wstring& strEntryKey, //!< [in] エントリ名 std::wstring& strEntryValue //!< [in,out] エントリ値 ) noexcept { bool ret = false; if( IsReadingMode() ){ //文字列読み込み - ret = GetProfileDataImp( pszSectionName, pszEntryKey, strEntryValue ); + ret = GetProfileDataImp( strSectionName, strEntryKey, strEntryValue ); }else{ //文字列書き込み - ret = SetProfileDataImp( pszSectionName, pszEntryKey, strEntryValue ); + ret = SetProfileDataImp( strSectionName, strEntryKey, strEntryValue ); } return ret; } From 3c1fb372e4dbdddba168b459e0db752523f319be Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 7 Feb 2021 15:40:21 +0900 Subject: [PATCH 0410/1024] =?UTF-8?q?COM=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E6=83=85=E5=A0=B1=E3=82=AF=E3=83=A9=E3=82=B9=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura/sakura.vcxproj | 3 + sakura/sakura.vcxproj.filters | 9 + sakura_core/basis/CErrorInfo.cpp | 90 +++++++ sakura_core/basis/CErrorInfo.h | 63 +++++ sakura_core/basis/TComImpl.hpp | 90 +++++++ sakura_core/basis/_com_raise_error.cpp | 35 +++ tests/unittests/test-cerrorinfo.cpp | 319 +++++++++++++++++++++++++ tests/unittests/tests1.vcxproj | 1 + tests/unittests/tests1.vcxproj.filters | 3 + 9 files changed, 613 insertions(+) create mode 100644 sakura_core/basis/CErrorInfo.cpp create mode 100644 sakura_core/basis/CErrorInfo.h create mode 100644 sakura_core/basis/TComImpl.hpp create mode 100644 sakura_core/basis/_com_raise_error.cpp create mode 100644 tests/unittests/test-cerrorinfo.cpp diff --git a/sakura/sakura.vcxproj b/sakura/sakura.vcxproj index 32d45c0238..9b9bdc325e 100644 --- a/sakura/sakura.vcxproj +++ b/sakura/sakura.vcxproj @@ -257,6 +257,8 @@ + + @@ -607,6 +609,7 @@ + diff --git a/sakura/sakura.vcxproj.filters b/sakura/sakura.vcxproj.filters index 6e22b49692..eaa38e855e 100644 --- a/sakura/sakura.vcxproj.filters +++ b/sakura/sakura.vcxproj.filters @@ -1094,6 +1094,12 @@ Cpp Source Files + + Cpp Source Files\basis + + + Cpp Source Files\basis + @@ -2273,6 +2279,9 @@ Cpp Source Files + + Cpp Source Files\basis + diff --git a/sakura_core/basis/CErrorInfo.cpp b/sakura_core/basis/CErrorInfo.cpp new file mode 100644 index 0000000000..f6a57cba34 --- /dev/null +++ b/sakura_core/basis/CErrorInfo.cpp @@ -0,0 +1,90 @@ +/*! @file */ +/* + Copyright (C) 2018-2020 Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include "StdAfx.h" +#include "basis/CErrorInfo.h" + +/*! + * コンストラクタ + */ +CErrorInfo::CErrorInfo( + std::wstring_view source, //!< [in] ソース + std::wstring_view description //!< [in] 説明 +) + : bstrSource_(source.data()) + , bstrDescription_(description.data()) +{ +} + +/*! + * GUIDを取得する + */ +IFACEMETHODIMP CErrorInfo::GetGUID(GUID *pGUID) +{ + if (!pGUID) return E_POINTER; + *pGUID = GUID_NULL; + return S_OK; +} + +/*! + * ソース情報を取得する + */ +IFACEMETHODIMP CErrorInfo::GetSource(BSTR *pBstrSource) +{ + if (!pBstrSource) return E_POINTER; + *pBstrSource = bstrSource_.copy(); + return S_OK; +} + +/*! + * 説明を取得する + */ +IFACEMETHODIMP CErrorInfo::GetDescription(BSTR *pBstrDescription) +{ + if (!pBstrDescription) return E_POINTER; + *pBstrDescription = bstrDescription_.copy(); + return S_OK; +} + +/*! + * ヘルプファイルのパスを取得する + */ +IFACEMETHODIMP CErrorInfo::GetHelpFile(BSTR *pBstrHelpFile) +{ + if (!pBstrHelpFile) return E_POINTER; + _bstr_t bstrHelpFile_; + *pBstrHelpFile = bstrHelpFile_.copy(); + return S_OK; +} + +/*! + * ヘルプコンテキストを取得する + */ +IFACEMETHODIMP CErrorInfo::GetHelpContext(DWORD *pdwHelpContext) +{ + if (!pdwHelpContext) return E_POINTER; + constexpr DWORD dwHelpContext_ = 0; + *pdwHelpContext = dwHelpContext_; + return S_OK; +} diff --git a/sakura_core/basis/CErrorInfo.h b/sakura_core/basis/CErrorInfo.h new file mode 100644 index 0000000000..63f993dc79 --- /dev/null +++ b/sakura_core/basis/CErrorInfo.h @@ -0,0 +1,63 @@ +/*! @file */ +/* + Copyright (C) 2018-2020 Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#pragma once + +#include + +#include +#include + +#include + +#include "basis/TComImpl.hpp" + +/*! + * @brief COMエラー情報クラス + * + * Windowsのエラー情報を提供するために使用するクラスです。 + * _com_raise_error関数にエラー情報を渡すことにより、日本語メッセージを含む例外を投げることができます。 + * + * @see https://docs.microsoft.com/en-us/windows/win32/api/oaidl/nn-oaidl-ierrorinfo + * @see https://docs.microsoft.com/en-us/cpp/cpp/com-raise-error + */ +class CErrorInfo : public TComImpl { + _bstr_t bstrSource_; + _bstr_t bstrDescription_; + +public: + CErrorInfo( + std::wstring_view source, //!< [in] ソース + std::wstring_view description //!< [in] 説明 + ); + + IFACEMETHODIMP GetGUID(GUID *pGUID) override; + IFACEMETHODIMP GetSource(BSTR *pBstrSource) override; + IFACEMETHODIMP GetDescription(BSTR *pBstrDescription) override; + IFACEMETHODIMP GetHelpFile(BSTR *pBstrHelpFile) override; + IFACEMETHODIMP GetHelpContext(DWORD *pdwHelpContext) override; +}; + +//! メッセージからエラー情報を生成する +#define MakeMsgError(msg) new CErrorInfo(_CRT_WIDE(__FILE__) L"(" _CRT_WIDE(_CRT_STRINGIZE(__LINE__)) L")", (msg)) diff --git a/sakura_core/basis/TComImpl.hpp b/sakura_core/basis/TComImpl.hpp new file mode 100644 index 0000000000..882b322a87 --- /dev/null +++ b/sakura_core/basis/TComImpl.hpp @@ -0,0 +1,90 @@ +/*! @file */ +/* + Copyright (C) 2018-2020 Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#pragma once + +#include + +#include +#include +#include + +#include +#include + +/*! + * TComImpl - COMオブジェクトの実装クラステンプレート + * 使用上の注意: + * 1. 生成はnewで行い、deleteはしないでください。 + * 自動変数で生成するとヒープエラーが出ます。 + * 2. 生成したらAddRef()し、不要になったらRelease()してください。 + */ +template, std::enable_if_t, std::nullptr_t> = nullptr> +class TComImpl : public TargetInterface +{ + LONG nRefCount_ = 0; + + using Me = TComImpl; + +public: + TComImpl() = default; + TComImpl(const Me&) = delete; + Me& operator = (const Me&) = delete; + TComImpl(Me&&) = delete; + Me& operator = (Me&&) = delete; + + IFACEMETHODIMP QueryInterface(REFIID iid, void ** ppvObject) override + { + if (ppvObject == nullptr) { + return E_POINTER; + } + + if (IsEqualIID(iid, __uuidof(TargetInterface)) || + IsEqualIID(iid, IID_IUnknown)) + { + *ppvObject = this; + AddRef(); + return S_OK; + } + + return E_NOINTERFACE; + } + + IFACEMETHODIMP_(ULONG) AddRef() override + { + return ::InterlockedIncrement(&nRefCount_); + } + + IFACEMETHODIMP_(ULONG) Release() override + { + const LONG nRefCount = ::InterlockedDecrement(&nRefCount_); + + if (nRefCount == 0) { + const DeleterType deletor; + deletor(this); + } + + return nRefCount; + } +}; diff --git a/sakura_core/basis/_com_raise_error.cpp b/sakura_core/basis/_com_raise_error.cpp new file mode 100644 index 0000000000..dc72698aac --- /dev/null +++ b/sakura_core/basis/_com_raise_error.cpp @@ -0,0 +1,35 @@ +/*! @file */ +/* + Copyright (C) 2018-2020 Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include "StdAfx.h" +#include +#include + +/*! + MinGW向け_com_raise_error実装 + */ +void _com_raise_error(HRESULT hr, IErrorInfo* pErrorInfo) +{ + throw _com_error(hr, pErrorInfo, true); +} diff --git a/tests/unittests/test-cerrorinfo.cpp b/tests/unittests/test-cerrorinfo.cpp new file mode 100644 index 0000000000..c8a428fac6 --- /dev/null +++ b/tests/unittests/test-cerrorinfo.cpp @@ -0,0 +1,319 @@ +/*! @file */ +/* + Copyright (C) 2018-2020 Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include + +#ifndef NOMINMAX +#define NOMINMAX +#endif /* #ifndef NOMINMAX */ + +#include +#include + +#include + +#include "basis/CErrorInfo.h" + +/*! + * @brief テンプレートクラスの機能確認 + */ +TEST(TComImpl, AddRef_Release) +{ + // IErrorInfoを生成する + IErrorInfo* pErrorInfo(reinterpret_cast(MakeMsgError(L"test"))); + + // 初期値は0なので、AddRefすると1が返る + ASSERT_EQ(1, pErrorInfo->AddRef()); + + // 内部カウンタは1なので、Releaseすると0になる + ASSERT_EQ(0, pErrorInfo->Release()); +} + +/*! + * @brief テンプレートクラスの機能確認 + */ +TEST(TComImpl, QueryInterface_BadPointer) +{ + // IErrorInfoを生成する + IErrorInfo* pErrorInfo(reinterpret_cast(MakeMsgError(L"test"))); + + // 初期値は0なので、AddRefすると1が返る + ASSERT_EQ(1, pErrorInfo->AddRef()); + + // QueryInterfaceのOutポインタにnullptrを指定するとポインタエラーになる + ASSERT_EQ(E_POINTER, pErrorInfo->QueryInterface(GUID_NULL, nullptr)); + + // 内部カウンタは1なので、Releaseすると0になる + ASSERT_EQ(0, pErrorInfo->Release()); +} + +/*! + * @brief テンプレートクラスの機能確認 + */ +TEST(TComImpl, QueryInterface_IUnknown) +{ + using namespace Microsoft::WRL; + + // IErrorInfoを生成する + IErrorInfo* pErrorInfo(reinterpret_cast(MakeMsgError(L"test"))); + + // 初期値は0なので、AddRefすると1が返る + ASSERT_EQ(1, pErrorInfo->AddRef()); + + // IUnknownを取得する + ComPtr pUnknown; + ASSERT_TRUE(SUCCEEDED(pErrorInfo->QueryInterface(pUnknown.GetAddressOf()))); + + //pUnknownを解放する + pUnknown = nullptr; + + // 内部カウンタは1に戻っているはずなので、Releaseすると0になる + ASSERT_EQ(0, pErrorInfo->Release()); +} + +/*! + * @brief テンプレートクラスの機能確認 + */ +TEST(TComImpl, QueryInterface_Implemented) +{ + using namespace Microsoft::WRL; + + // IErrorInfoを生成する + IErrorInfo* pErrorInfo(reinterpret_cast(MakeMsgError(L"test"))); + + // 初期値は0なので、AddRefすると1が返る + ASSERT_EQ(1, pErrorInfo->AddRef()); + + // IErrorInfoを取得する + ComPtr pOther; + ASSERT_TRUE(SUCCEEDED(pErrorInfo->QueryInterface(pOther.GetAddressOf()))); + + //pOtherを解放する + pOther = nullptr; + + // 内部カウンタは1に戻っているはずなので、Releaseすると0になる + ASSERT_EQ(0, pErrorInfo->Release()); +} + +/*! + * @brief テンプレートクラスの機能確認 + */ +TEST(TComImpl, QueryInterface_NotImplemented) +{ + using namespace Microsoft::WRL; + + // IErrorInfoを生成する + IErrorInfo* pErrorInfo(reinterpret_cast(MakeMsgError(L"test"))); + + // 初期値は0なので、AddRefすると1が返る + ASSERT_EQ(1, pErrorInfo->AddRef()); + + // ICreateErrorInfo(実装されていないインターフェース)の取得を試みる + ComPtr pCreateErrorInfo; + ASSERT_EQ(E_NOINTERFACE, pErrorInfo->QueryInterface(pCreateErrorInfo.GetAddressOf())); + + // 内部カウンタは1なので、Releaseすると0になる + ASSERT_EQ(0, pErrorInfo->Release()); +} + +/*! + * @brief COMエラークラスの機能確認 + */ +TEST(CErrorInfo, GetGUID_BadPointer) +{ + using namespace Microsoft::WRL; + + // IErrorInfoを生成する + constexpr const wchar_t msg[] = L"test"; + ComPtr pErrorInfo(reinterpret_cast(MakeMsgError(msg))); + + // GUIDを取得する + ASSERT_EQ(E_POINTER, pErrorInfo->GetGUID(nullptr)); +} + +/*! + * @brief COMエラークラスの機能確認 + */ +TEST(CErrorInfo, GetGUID) +{ + using namespace Microsoft::WRL; + + // IErrorInfoを生成する + constexpr const wchar_t msg[] = L"test"; + ComPtr pErrorInfo(reinterpret_cast(MakeMsgError(msg))); + + // guidを取得する + GUID guid = GUID_NULL; + ASSERT_TRUE(SUCCEEDED(pErrorInfo->GetGUID(&guid))); + ASSERT_EQ(GUID_NULL, guid); +} + +/*! + * @brief COMエラークラスの機能確認 + */ +TEST(CErrorInfo, GetSource_BadPointer) +{ + using namespace Microsoft::WRL; + + // IErrorInfoを生成する + constexpr const wchar_t msg[] = L"test"; + ComPtr pErrorInfo(reinterpret_cast(MakeMsgError(msg))); + + // ソース情報を取得する + ASSERT_EQ(E_POINTER, pErrorInfo->GetSource(nullptr)); +} + +/*! + * @brief COMエラークラスの機能確認 + */ +TEST(CErrorInfo, GetSource) +{ + using namespace Microsoft::WRL; + + // IErrorInfoを生成する + constexpr const wchar_t msg[] = L"test"; + ComPtr pErrorInfo(reinterpret_cast(MakeMsgError(msg))); + + // ソース情報を取得する + _bstr_t bstrSource; + ASSERT_TRUE(SUCCEEDED(pErrorInfo->GetSource(bstrSource.GetAddress()))); + // 期待値を作るのが面倒なので比較は省略 +} + +/*! + * @brief COMエラークラスの機能確認 + */ +TEST(CErrorInfo, GetDescription_BadPointer) +{ + using namespace Microsoft::WRL; + + // IErrorInfoを生成する + constexpr const wchar_t msg[] = L"test"; + ComPtr pErrorInfo(reinterpret_cast(MakeMsgError(msg))); + + // 説明を取得する + ASSERT_EQ(E_POINTER, pErrorInfo->GetDescription(nullptr)); +} + +/*! + * @brief COMエラークラスの機能確認 + */ +TEST(CErrorInfo, GetDescription) +{ + using namespace Microsoft::WRL; + + // IErrorInfoを生成する + constexpr const wchar_t msg[] = L"test"; + ComPtr pErrorInfo(reinterpret_cast(MakeMsgError(msg))); + + // 説明を取得する + _bstr_t bstrDescription; + ASSERT_TRUE(SUCCEEDED(pErrorInfo->GetDescription(bstrDescription.GetAddress()))); + ASSERT_STREQ(msg, (const wchar_t*)bstrDescription); +} + +/*! + * @brief COMエラークラスの機能確認 + */ +TEST(CErrorInfo, GetHelpFile_BadPointer) +{ + using namespace Microsoft::WRL; + + // IErrorInfoを生成する + constexpr const wchar_t msg[] = L"test"; + ComPtr pErrorInfo(reinterpret_cast(MakeMsgError(msg))); + + // ヘルプファイルのパスを取得する + ASSERT_EQ(E_POINTER, pErrorInfo->GetHelpFile(nullptr)); +} + +/*! + * @brief COMエラークラスの機能確認 + */ +TEST(CErrorInfo, GetHelpFile) +{ + using namespace Microsoft::WRL; + + // IErrorInfoを生成する + constexpr const wchar_t msg[] = L"test"; + ComPtr pErrorInfo(reinterpret_cast(MakeMsgError(msg))); + + // ヘルプファイルのパスを取得する + _bstr_t bstrHelpFile; + ASSERT_TRUE(SUCCEEDED(pErrorInfo->GetHelpFile(bstrHelpFile.GetAddress()))); + ASSERT_EQ(nullptr, (const wchar_t*)bstrHelpFile); +} + +/*! + * @brief COMエラークラスの機能確認 + */ +TEST(CErrorInfo, GetHelpContext_BadPointer) +{ + using namespace Microsoft::WRL; + + // IErrorInfoを生成する + constexpr const wchar_t msg[] = L"test"; + ComPtr pErrorInfo(reinterpret_cast(MakeMsgError(msg))); + + // ヘルプコンテキストを取得する + ASSERT_EQ(E_POINTER, pErrorInfo->GetHelpContext(nullptr)); +} + +/*! + * @brief COMエラークラスの機能確認 + */ +TEST(CErrorInfo, GetHelpContext) +{ + using namespace Microsoft::WRL; + + // IErrorInfoを生成する + constexpr const wchar_t msg[] = L"test"; + ComPtr pErrorInfo(reinterpret_cast(MakeMsgError(msg))); + + // ヘルプコンテキストを取得する + DWORD dwHelpContext; + ASSERT_TRUE(SUCCEEDED(pErrorInfo->GetHelpContext(&dwHelpContext))); + ASSERT_EQ(0, dwHelpContext); +} + +/*! + * @brief COMエラークラスの機能確認 + */ +TEST(CErrorInfo, StandardUsageTest) +{ + // テストに使う日本語メッセージ + constexpr const wchar_t message[] = L"エラーが発生しました!"; + + try { + // エラー情報を生成して例外を投げる + ::_com_raise_error(E_FAIL, MakeMsgError(message)); + + // 例外を投げたあとのコードは実行されない + FAIL(); + } + catch (const _com_error& ce) { + // 投げられた例外メッセージを取得できること + ASSERT_STREQ(message, (const wchar_t*)ce.Description()); + } +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index 9297387262..9418602a93 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -108,6 +108,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index 491557c51e..a905c59d02 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -98,6 +98,9 @@ Test Files + + Test Files + From 9c592ade3ab6a647491636edcf10a404fa45afbb Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sun, 20 Dec 2020 19:57:25 +0900 Subject: [PATCH 0411/1024] =?UTF-8?q?=E3=83=9E=E3=82=A6=E3=82=B9=E3=83=9B?= =?UTF-8?q?=E3=82=A4=E3=83=BC=E3=83=AB=E3=81=A7=E3=81=AE=E3=83=95=E3=82=A9?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=82=B5=E3=82=A4=E3=82=BA=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=E3=82=92=E3=83=91=E3=83=BC=E3=82=BB=E3=83=B3=E3=83=86=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E3=81=AB=E5=9F=BA=E3=81=A5=E3=81=84=E3=81=A6=E8=A1=8C?= =?UTF-8?q?=E3=81=86=E3=82=88=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura/sakura.vcxproj | 2 + sakura/sakura.vcxproj.filters | 8 +- sakura_core/String_define.h | 5 +- sakura_core/cmd/CViewCommander_Settings.cpp | 63 +++--- sakura_core/doc/CEditDoc.h | 1 + sakura_core/sakura_rc.rc | 3 +- sakura_core/util/zoom.cpp | 193 +++++++++++++++++++ sakura_core/util/zoom.h | 55 ++++++ sakura_core/view/CCaret.cpp | 9 +- sakura_lang_en_US/sakura_lang_rc.rc | 3 +- tests/unittests/test-zoom.cpp | 202 ++++++++++++++++++++ tests/unittests/tests1.vcxproj | 1 + tests/unittests/tests1.vcxproj.filters | 5 +- 13 files changed, 518 insertions(+), 32 deletions(-) create mode 100644 sakura_core/util/zoom.cpp create mode 100644 sakura_core/util/zoom.h create mode 100644 tests/unittests/test-zoom.cpp diff --git a/sakura/sakura.vcxproj b/sakura/sakura.vcxproj index 9b9bdc325e..f774ff79e5 100644 --- a/sakura/sakura.vcxproj +++ b/sakura/sakura.vcxproj @@ -528,6 +528,7 @@ + @@ -922,6 +923,7 @@ + diff --git a/sakura/sakura.vcxproj.filters b/sakura/sakura.vcxproj.filters index eaa38e855e..63f95a86cc 100644 --- a/sakura/sakura.vcxproj.filters +++ b/sakura/sakura.vcxproj.filters @@ -1094,6 +1094,9 @@ Cpp Source Files + + Cpp Source Files\util + Cpp Source Files\basis @@ -2279,6 +2282,9 @@ Cpp Source Files + + Cpp Source Files\util + Cpp Source Files\basis @@ -2320,4 +2326,4 @@ - \ No newline at end of file + diff --git a/sakura_core/String_define.h b/sakura_core/String_define.h index b65e266c0d..d9c99aa800 100644 --- a/sakura_core/String_define.h +++ b/sakura_core/String_define.h @@ -428,7 +428,8 @@ #define STR_MENU_KEYWORDINFO 34340 #define STR_MENU_OPENKEYWORDDIC 34341 #define STR_STATUS_ROW_COL 34342 -#define STR_STATUS_FONTSIZE 35043 +#define STR_STATUS_FONTZOOM_0 35043 +#define STR_STATUS_FONTZOOM_1 35044 #define STR_INS_MODE_INS 34343 #define STR_INS_MODE_OVR 34344 #define STR_GREP_SEARCH_CONDITION 34345 @@ -1300,4 +1301,4 @@ #define STR_FILEDIALOG_MRU 35040 #define STR_FILEDIALOG_OPENFOLDER 35041 -// Now using max number 35043 by STR_STATUS_FONTSIZE +// Now using max number 35044 by STR_STATUS_FONTZOOM_1 diff --git a/sakura_core/cmd/CViewCommander_Settings.cpp b/sakura_core/cmd/CViewCommander_Settings.cpp index e985c07880..232e6443b4 100644 --- a/sakura_core/cmd/CViewCommander_Settings.cpp +++ b/sakura_core/cmd/CViewCommander_Settings.cpp @@ -28,6 +28,8 @@ #include "util/shell.h" #include "CPropertyManager.h" #include "util/window.h" +#include "util/zoom.h" + /*! ツールバーの表示/非表示 @@ -251,6 +253,7 @@ void CViewCommander::Command_FONT( void ) /*! フォントサイズ設定 @param fontSize フォントサイズ(1/10ポイント単位) @param shift フォントサイズを拡大or縮小するための変更量(fontSize=0のとき有効) + @param mode フォントサイズ設定対象(0:フォント設定 1:タイプ別設定(なければ0と同じ) 2:一時適用フォント) @note TrueTypeのみサポート @@ -258,11 +261,23 @@ void CViewCommander::Command_FONT( void ) */ void CViewCommander::Command_SETFONTSIZE( int fontSize, int shift, int mode ) { - // The point sizes recommended by "The Windows Interface: An Application Design Guide", 1/10ポイント単位 - static const INT sizeTable[] = { 8*10, 9*10, 10*10, (INT)(10.5*10), 11*10, 12*10, 14*10, 16*10, 18*10, 20*10, 22*10, 24*10, 26*10, 28*10, 36*10, 48*10, 72*10 }; + // 設定できるフォントサイズの下限/上限/最小単位(いずれも1/10ポイント単位) + const int nPointSizeMin = 10; + const int nPointSizeMax = 720; + const int nPointSizeUnit = 5; + // ズーム設定 + static const ZoomSetting zoomSetting( + { + 0.01, 0.011, 0.0125, 0.015, 0.0175, 0.02, 0.0225, 0.025, 0.0275, 0.03, 0.035, 0.04, 0.045, 0.05, 0.06, 0.07, 0.08, 0.09, + 0.1, 0.11, 0.125, 0.15, 0.175, 0.2, 0.225, 0.25, 0.275, 0.3, 0.35, 0.4, 0.45, 0.5, 0.6, 0.7, 0.8, 0.9, + 1.0, 1.1, 1.25, 1.5, 1.75, 2.0, 2.25, 2.5, 2.75, 3.0, 3.5, 4.0, 4.5, 5.0, 6.0, 7.0, 8.0, 9.0, + 10.0, 11.0, 12.5, 15.0, 17.5, 20.0, 22.5, 25.0, 27.5, 30.0, 35.0, 40.0, 45.0, 50.0, 60.0, 70.0, 80.0, 90 + }, + nPointSizeMin, + nPointSizeMax, + nPointSizeUnit ); const LOGFONT& lf = (mode == 0 ? GetDllShareData().m_Common.m_sView.m_lf : GetEditWindow()->GetLogfont( mode == 2 )); - INT nPointSize; // TrueTypeのみ対応 if( OUT_STROKE_PRECIS != lf.lfOutPrecision && OUT_PS_ONLY_PRECIS != lf.lfOutPrecision ) { @@ -273,32 +288,33 @@ void CViewCommander::Command_SETFONTSIZE( int fontSize, int shift, int mode ) return; } + const int nCurrentPointSize = (mode == 0) ? + GetDllShareData().m_Common.m_sView.m_nPointSize : + GetEditWindow()->GetFontPointSize( mode == 2 ); + const int nOriginalPointSize = GetEditWindow()->GetFontPointSize( false ); + double nCurrentZoom = (mode == 2 && GetDocument()->m_blfCurTemp) ? GetDocument()->m_nCurrentZoom : 1.0; + int nPointSize = nCurrentPointSize; + if( 0 != fontSize ){ // フォントサイズを直接選択する場合 - nPointSize = t_max(sizeTable[0], t_min(sizeTable[_countof(sizeTable)-1], fontSize)); - } else if( 0 != shift ) { + nPointSize = std::clamp( fontSize, nPointSizeMin, nPointSizeMax ); + }else if( 0 != shift ){ // 現在のフォントに対して、縮小or拡大したフォント選択する場合 - nPointSize = (mode == 0 ? GetDllShareData().m_Common.m_sView.m_nPointSize - : GetEditWindow()->GetFontPointSize( mode == 2 )); - - // フォントの拡大or縮小するためのサイズ検索 - int i; - for( i = 0; i < _countof(sizeTable); i++) { - if( nPointSize <= sizeTable[i] ){ - int index = t_max(0, t_min((int)_countof(sizeTable) - 1, (int)(i + shift))); - int nNewPointSize = sizeTable[index]; - // フォントサイズが変わらないので終了 - if (nPointSize == nNewPointSize) { - return; - } - nPointSize = nNewPointSize; - break; - } + double nPointSizeF = 0.0; + if( !GetZoomedValue( zoomSetting, nOriginalPointSize, nCurrentZoom, shift, &nPointSizeF, &nCurrentZoom ) ){ + return; + } + nPointSize = (int)nPointSizeF; + + // フォントサイズが変わらないなら終了 + if( nPointSize == nCurrentPointSize ){ + return; } - } else { + }else{ // フォントサイズが変わらないので終了 return; } + // 新しいフォントサイズ設定 int lfHeight = DpiPointsToPixels(-nPointSize, 10); int nTypeIndex = -1; @@ -324,7 +340,8 @@ void CViewCommander::Command_SETFONTSIZE( int fontSize, int shift, int mode ) GetDocument()->m_lfCur = lf; GetDocument()->m_lfCur.lfHeight = lfHeight; GetDocument()->m_nPointSizeCur = nPointSize; - GetDocument()->m_nPointSizeOrg = GetEditWindow()->GetFontPointSize(false); + GetDocument()->m_nPointSizeOrg = nOriginalPointSize; + GetDocument()->m_nCurrentZoom = nCurrentZoom; } HWND hwndFrame; diff --git a/sakura_core/doc/CEditDoc.h b/sakura_core/doc/CEditDoc.h index 953a247e54..65dadef015 100644 --- a/sakura_core/doc/CEditDoc.h +++ b/sakura_core/doc/CEditDoc.h @@ -160,6 +160,7 @@ class CEditDoc int m_nPointSizeCur; // 一時設定フォントサイズ bool m_blfCurTemp; // フォント設定適用中 int m_nPointSizeOrg; // 元のフォントサイズ + double m_nCurrentZoom; // 一時設定フォントのズーム倍率 bool m_bTabSpaceCurTemp; // タブ幅一時設定適用中 // 2013.05.30 Moca HBITMAP m_hBackImg; diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index 32bcb2ba45..9612b17fc8 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -3409,7 +3409,8 @@ BEGIN STR_ERR_DLGEDITVW6 "■" STR_MENU_KEYWORDINFO "キーワードの説明をクリップボードにコピー" STR_MENU_OPENKEYWORDDIC "キーワード辞書を開く" - STR_STATUS_FONTSIZE "%4d %%" + STR_STATUS_FONTZOOM_0 "%4.0f %%" + STR_STATUS_FONTZOOM_1 "%4.1f %%" STR_STATUS_ROW_COL "%5d 行 %4d 桁" STR_INS_MODE_INS "挿入" STR_INS_MODE_OVR "上書" diff --git a/sakura_core/util/zoom.cpp b/sakura_core/util/zoom.cpp new file mode 100644 index 0000000000..fa4a67fd2f --- /dev/null +++ b/sakura_core/util/zoom.cpp @@ -0,0 +1,193 @@ +/*! @file + @brief ズーム倍率算出 +*/ +/* + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ + +#include "StdAfx.h" +#include "zoom.h" +#include +#include + +/*! + @brief コンストラクタ + @param[in] iZoomFactors ズーム倍率の並び + @param[in] nValueMin 下限値 + @param[in] nValueMax 上限値 + @param[in] nValueUnit 値の最小単位 +*/ +ZoomSetting::ZoomSetting( std::initializer_list iZoomFactors, double nValueMin, double nValueMax, double nValueUnit ) +{ + m_vZoomFactors.assign( iZoomFactors ); + m_nValueMin = nValueMin; + m_nValueMax = nValueMax; + m_nValueUnit = nValueUnit; + + // 正当性確認 + m_bValid = (0 < m_vZoomFactors.size()) && (m_nValueMin <= m_nValueMax) && (0.0 <= m_nValueUnit); + if( m_bValid ){ + for( size_t i = 1; i < m_vZoomFactors.size(); ++i ){ + if( m_vZoomFactors[i] < m_vZoomFactors[i - 1] ){ + m_bValid = false; + break; + } + } + } +} + +/*! + @brief 値テーブル上における指定値の位置を取得 + @param[in] vTable 値テーブル + @param[in] nValue 指定値 + @return 位置 + @note 「位置」は基本的にはテーブルのインデックスに相当しますが、 + テーブル範囲外およびテーブル上の隣り合う二値間については 0.5 で表現します。 + @note 例として vTable:{10, 20, 30} の場合の nValue と戻り値との関係を示します。 + nValue | 0 | 5 | 10 | 15 | 25 | 30 | 35 | 40 | + -------|------|------|------|------|------|------|------|------| + 戻り値 | -0.5 | -0.5 | 0.0 | 0.5 | 1.5 | 2.0 | 2.5 | 2.5 | +*/ +static double GetPositionInTable( const std::vector& vTable, double nValue ) +{ + double nPosition = (double)vTable.size() - 0.5; + for( size_t i = 0; i < vTable.size(); ++i ){ + if( nValue <= vTable[i] ){ + if( nValue == vTable[i] ){ + nPosition = (double)i; + }else{ + nPosition = (double)i - 0.5; + } + break; + } + } + return nPosition; +} + +/*! + @brief 最小単位で丸めた値を取得 + @param[in] nValue 対象値 + @param[in] nUnit 最小単位(0.0 の場合は丸めなし) + @return 丸められた値 +*/ +static double GetQuantizedValue( double nValue, double nUnit ) +{ + return (0.0 < nUnit) ? std::floor( nValue / nUnit ) * nUnit : nValue; +} + +/*! + @brief 基準値に対してズーム倍率を適用した値を取得 + @param[in] nValue 対象値 + @param[in] nUnit 最小単位(0.0 の場合は丸めなし) + @return 丸められた値 +*/ +bool GetZoomedValue( const ZoomSetting& zoomSetting, double nBaseValue, double nCurrentZoom, int nSteps, double* pnValueOut, double* pnZoomOut ) +{ + if( !zoomSetting.IsValid() || nSteps == 0 ){ + return false; + } + + const auto& vZoomFactors = zoomSetting.GetZoomFactors(); + const bool bZoomUp = (0 < nSteps); + const int nTableIndexMin = 0; + const int nTableIndexMax = (int)vZoomFactors.size() - 1; + + const double nPosition = GetPositionInTable( vZoomFactors, nCurrentZoom ); + int nTableIndex = (int)(bZoomUp ? std::floor( nPosition ) : std::ceil( nPosition )); + if( (!bZoomUp && nTableIndex <= nTableIndexMin) || (bZoomUp && nTableIndexMax <= nTableIndex) ){ + // 現在の倍率がすでに倍率テーブルの範囲外でかつ + // さらに外側へ移動しようとした場合は今の位置を維持 + return false; + } + + const double nCurrentValue = GetQuantizedValue( nBaseValue * nCurrentZoom, zoomSetting.GetValueUnit() ); + const double nValueMin = std::min( {zoomSetting.GetValueMin(), nBaseValue, nCurrentValue} ); + const double nValueMax = std::max( {zoomSetting.GetValueMax(), nBaseValue, nCurrentValue} ); + double nNextValue = nCurrentValue; + double nNextZoom = nCurrentZoom; + double nLastValue = nCurrentValue; + double nLastZoom = nCurrentZoom; + bool bFindingOneMoreChange = false; + + // 最小単位で丸めた後の値が変更前の値から変わらなければ + // 変わる位置までインデックスを動かしていく + nTableIndex += nSteps; + // 本当は while( true ) で良いが万一の暴走回避のため有限回 + for( size_t i = 0; i < vZoomFactors.size(); ++i ){ + int clampedIndex = std::clamp( nTableIndex, nTableIndexMin, nTableIndexMax ); + nNextZoom = vZoomFactors[clampedIndex]; + nNextValue = GetQuantizedValue( nBaseValue * nNextZoom, zoomSetting.GetValueUnit() ); + + if( bFindingOneMoreChange ){ + if( nNextValue != nLastValue || clampedIndex != nTableIndex ){ + nNextValue = nLastValue; + nNextZoom = nLastZoom; + break; + } + }else{ + // 値の上下限を超過したら上下限に丸めて終わる + // 倍率は丸めた後のサイズで再計算 + double clampedValue = std::clamp( nNextValue, nValueMin, nValueMax ); + if( nNextValue != clampedValue ){ + if( nBaseValue != 0.0 ){ + nNextZoom = clampedValue / nBaseValue; + } + nNextValue = clampedValue; + break; + } + + // 倍率テーブルの端まで到達していたら終わり + if( clampedIndex != nTableIndex ){ + break; + } + + bool bSizeChanged = (nNextValue != nCurrentValue); + if( bZoomUp ){ + // 拡大側は値が変わったらすぐ終わる + if( bSizeChanged ){ + break; + } + }else{ + // 縮小側は一度値が変わった後もう一度値が変わる位置までインデックスを進めてから終わる + if( bSizeChanged ){ + bFindingOneMoreChange = true; + } + } + } + + nLastValue = nNextValue; + nLastZoom = nNextZoom; + nTableIndex += bZoomUp ? 1 : -1; + }; + + if( nCurrentValue == nNextValue ){ + return false; + } + + if( pnValueOut != NULL ){ + *pnValueOut = nNextValue; + } + if( pnZoomOut != NULL ){ + *pnZoomOut = nNextZoom; + } + + return true; +} diff --git a/sakura_core/util/zoom.h b/sakura_core/util/zoom.h new file mode 100644 index 0000000000..9c45386111 --- /dev/null +++ b/sakura_core/util/zoom.h @@ -0,0 +1,55 @@ +/*! @file + @brief ズーム倍率算出 +*/ +/* + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ + +#ifndef SAKURA_ZOOM_0CD4E589_F708_48BF_8601_8BF851827765_H_ +#define SAKURA_ZOOM_0CD4E589_F708_48BF_8601_8BF851827765_H_ +#pragma once + +#include +#include + +/*! + @brief ズーム設定を保持 +*/ +class ZoomSetting +{ +public: + ZoomSetting( std::initializer_list iZoomFactors, double nValueMin, double nValueMax, double nValueUnit ); + + bool IsValid() const { return m_bValid; } + const std::vector& GetZoomFactors() const { return m_vZoomFactors; } + double GetValueMin() const { return m_nValueMin; } + double GetValueMax() const { return m_nValueMax; } + double GetValueUnit() const { return m_nValueUnit; } +private: + bool m_bValid; + std::vector m_vZoomFactors; + double m_nValueMin; + double m_nValueMax; + double m_nValueUnit; +}; + +bool GetZoomedValue( const ZoomSetting& zoomSetting, double nBaseValue, double nCurrentZoom, int nSteps, double* pnValueOut, double* pnZoomOut ); +#endif /* SAKURA_ZOOM_0CD4E589_F708_48BF_8601_8BF851827765_H_ */ diff --git a/sakura_core/view/CCaret.cpp b/sakura_core/view/CCaret.cpp index 0eb4b763be..977205337b 100644 --- a/sakura_core/view/CCaret.cpp +++ b/sakura_core/view/CCaret.cpp @@ -836,9 +836,12 @@ void CCaret::ShowCaretPosInfo() } WCHAR szFontSize[16]; - int currentPointSize = m_pEditDoc->m_pcEditWnd->GetFontPointSize( true ); - int originalPointSize = m_pEditDoc->m_pcEditWnd->GetFontPointSize( false ); - auto_sprintf( szFontSize, LS( STR_STATUS_FONTSIZE ), 100 * currentPointSize / originalPointSize ); + double nZoomPercentage = m_pEditDoc->m_blfCurTemp ? (m_pEditDoc->m_nCurrentZoom * 100.0) : 100.0; + if( nZoomPercentage < 5.0 ){ + auto_sprintf( szFontSize, LS( STR_STATUS_FONTZOOM_1 ), nZoomPercentage ); + }else{ + auto_sprintf( szFontSize, LS( STR_STATUS_FONTZOOM_0 ), nZoomPercentage ); + } auto& statusBar = m_pEditDoc->m_pcEditWnd->m_cStatusBar; diff --git a/sakura_lang_en_US/sakura_lang_rc.rc b/sakura_lang_en_US/sakura_lang_rc.rc index c09cf6064e..85c9bceb84 100644 --- a/sakura_lang_en_US/sakura_lang_rc.rc +++ b/sakura_lang_en_US/sakura_lang_rc.rc @@ -3460,7 +3460,8 @@ BEGIN STR_ERR_DLGEDITVW6 "■" STR_MENU_KEYWORDINFO "Copy Keyword description to clipboard" STR_MENU_OPENKEYWORDDIC "Open keyword dictionary" - STR_STATUS_FONTSIZE "%4d %%" + STR_STATUS_FONTZOOM_0 "%4.0f %%" + STR_STATUS_FONTZOOM_1 "%4.1f %%" STR_STATUS_ROW_COL "%5d Ln %4d Col" STR_INS_MODE_INS "INS" STR_INS_MODE_OVR "OVR" diff --git a/tests/unittests/test-zoom.cpp b/tests/unittests/test-zoom.cpp new file mode 100644 index 0000000000..5b90b750f9 --- /dev/null +++ b/tests/unittests/test-zoom.cpp @@ -0,0 +1,202 @@ +/*! @file */ +/* + Copyright (C) 2018-2020 Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include +#include "util/zoom.h" + +/*! + * @brief ZoomSettingクラスのテスト + */ +TEST( zoom, ZoomSetting ) +{ + // 不正な引数 - テーブルが空 + EXPECT_EQ( false, ZoomSetting( {}, 0.0, 0.0, 1.0 ).IsValid() ); + + // 不正な引数 - テーブルが昇順になっていない + EXPECT_EQ( false, ZoomSetting( {0.0, 2.0, 1.0}, 0.0, 0.0, 1.0 ).IsValid() ); + + // 不正な引数 - 最大最小があべこべ + EXPECT_EQ( false, ZoomSetting( {1.0}, 1.0, 0.0, 1.0 ).IsValid() ); + + // 不正な引数 - 解像度が負数 + EXPECT_EQ( false, ZoomSetting( {1.0}, 0.0, 0.0, -1.0 ).IsValid() ); + + // 正しい引数 - テーブルに同一値が含まれる + EXPECT_EQ( true, ZoomSetting( {0.0, 0.0, 0.0}, 0.0, 0.0, 1.0 ).IsValid() ); + + // 正しい引数 - 解像度が0 + EXPECT_EQ( true, ZoomSetting( {0.0}, 0.0, 0.0, 0.0 ).IsValid() ); + + // メソッド確認 + const ZoomSetting setting( {0.0, 0.5, 1.0}, -1.0, 2.0, 3.0 ); + EXPECT_EQ( true, setting.IsValid() ); + EXPECT_EQ( 3, setting.GetZoomFactors().size() ); + EXPECT_EQ( -1.0, setting.GetValueMin() ); + EXPECT_EQ( 2.0, setting.GetValueMax() ); + EXPECT_EQ( 3.0, setting.GetValueUnit() ); +} + +/*! + * @brief GetZoomedValue関数のテスト - 引数チェック + */ +TEST( zoom, GetZoomedValue_CheckArguments ) +{ + // ズーム設定が不正 + EXPECT_EQ( false, GetZoomedValue( ZoomSetting( {}, 0.0, 0.0, 0.0 ), 100.0, 1.0, 1, NULL, NULL ) ); + + // ズームステップが0 + EXPECT_EQ( false, GetZoomedValue( ZoomSetting( {0.5, 1.0, 1.5}, 0.0, 200.0, 0.0 ), 100.0, 1.0, 0, NULL, NULL ) ); + + // 出力引数はNULLを許容 + EXPECT_EQ( true, GetZoomedValue( ZoomSetting( {0.5, 1.0, 1.5}, 0.0, 200.0, 0.0 ), 100.0, 1.0, 1, NULL, NULL ) ); +} + +/*! + * @brief GetZoomedValue関数のテスト - 基本的な拡大/縮小 + */ +TEST( zoom, GetZoomedValue_ZoomUpDown ) +{ + const ZoomSetting setting_50_150_10( {0.1, 0.9, 0.95, 1.0, 1.05, 1.1, 2.0}, 50.0, 150.0, 10.0 ); + const ZoomSetting setting_5_300_10( {0.1, 0.9, 0.95, 1.0, 1.05, 1.1, 2.0}, 5.0, 300.0, 10.0 ); + const ZoomSetting setting_5_300_0( {0.1, 0.9, 0.95, 1.0, 1.05, 1.1, 2.0}, 5.0, 300.0, 0.0 ); + double nValue = 0.0; + double nZoom = 0.0; + + // 拡大 - 変化が最小単位以上となるまで拡大(2ステップ分) + EXPECT_EQ( true, GetZoomedValue( setting_50_150_10, 100.0, 1.0, 1, &nValue, &nZoom ) ); + EXPECT_DOUBLE_EQ( 110.0, nValue ); + EXPECT_DOUBLE_EQ( 1.1, nZoom ); + + // 拡大 - 指定通り + EXPECT_EQ( true, GetZoomedValue( setting_50_150_10, 100.0, 1.0, 2, &nValue, &nZoom ) ); + EXPECT_DOUBLE_EQ( 110.0, nValue ); + EXPECT_DOUBLE_EQ( 1.1, nZoom ); + + // 拡大 - 最大値による丸め込み + EXPECT_EQ( true, GetZoomedValue( setting_50_150_10, 100.0, 1.0, 3, &nValue, &nZoom ) ); + EXPECT_DOUBLE_EQ( 150.0, nValue ); + EXPECT_DOUBLE_EQ( 1.5, nZoom ); + + // 拡大 - ズームテーブル末尾の倍率を適用 + EXPECT_EQ( true, GetZoomedValue( setting_5_300_10, 100.0, 1.0, 4, &nValue, &nZoom ) ); + EXPECT_DOUBLE_EQ( 200.0, nValue ); + EXPECT_DOUBLE_EQ( 2.0, nZoom ); + + // 縮小 - 変化が最小単位以上となるまで縮小(2ステップ分) + EXPECT_EQ( true, GetZoomedValue( setting_50_150_10, 100.0, 1.0, -1, &nValue, &nZoom ) ); + EXPECT_DOUBLE_EQ( 90.0, nValue ); + EXPECT_DOUBLE_EQ( 0.9, nZoom ); + + // 縮小 - 指定通り + EXPECT_EQ( true, GetZoomedValue( setting_50_150_10, 100.0, 1.0, -2, &nValue, &nZoom ) ); + EXPECT_DOUBLE_EQ( 90.0, nValue ); + EXPECT_DOUBLE_EQ( 0.9, nZoom ); + + // 縮小 - 最小値による丸め込み + EXPECT_EQ( true, GetZoomedValue( setting_50_150_10, 100.0, 1.0, -3, &nValue, &nZoom ) ); + EXPECT_DOUBLE_EQ( 50.0, nValue ); + EXPECT_DOUBLE_EQ( 0.5, nZoom ); + + // 縮小 - ズームテーブル先頭の倍率を適用 + EXPECT_EQ( true, GetZoomedValue( setting_5_300_10, 100.0, 1.0, -4, &nValue, &nZoom ) ); + EXPECT_DOUBLE_EQ( 10.0, nValue ); + EXPECT_DOUBLE_EQ( 0.1, nZoom ); + + // 拡大 - 最小単位なし + EXPECT_EQ( true, GetZoomedValue( setting_5_300_0, 1.1, 1.0, 1, &nValue, &nZoom ) ); + EXPECT_DOUBLE_EQ( nValue, 1.155 ); + EXPECT_DOUBLE_EQ( nZoom, 1.05 ); +} + +/*! + * @brief GetZoomedValue関数のテスト - 基準値が上限/下限の範囲外 + */ +TEST( zoom, GetZoomedValue_OutOfRange ) +{ + const ZoomSetting setting_50_150_10( {0.1, 0.9, 0.95, 1.0, 1.05, 1.1, 2.0}, 50.0, 150.0, 10.0 ); + double nValue = 0.0; + double nZoom = 0.0; + + // 上限値を超える値から拡大 -> ズーム不可 + EXPECT_EQ( false, GetZoomedValue( setting_50_150_10, 200.0, 1.0, 1, &nValue, &nZoom ) ); + + // 上限値を超える値から縮小 -> 上限値を上回る状態で縮小 + EXPECT_EQ( true, GetZoomedValue( setting_50_150_10, 200.0, 1.0, -1, &nValue, &nZoom ) ); + EXPECT_DOUBLE_EQ( 190.0, nValue ); + EXPECT_DOUBLE_EQ( 0.95, nZoom ); + + // 下限値を超える値から縮小 -> ズーム不可 + EXPECT_EQ( false, GetZoomedValue( setting_50_150_10, 10.0, 1.0, -1, &nValue, &nZoom ) ); + + // 下限値を超える値から拡大 -> 下限値を下回る状態で拡大(変化が最小単位以上となるまで拡大(3ステップ分)) + EXPECT_EQ( true, GetZoomedValue( setting_50_150_10, 10.0, 1.0, 1, &nValue, &nZoom ) ); + EXPECT_DOUBLE_EQ( 20.0, nValue ); + EXPECT_DOUBLE_EQ( 2.0, nZoom ); +} + +/*! + * @brief GetZoomedValue関数のテスト - 開始ズーム値がズームテーブルの範囲外 + */ +TEST( zoom, GetZoomedValue_OutOfZoomTable ) +{ + const ZoomSetting setting_50_150_10( {0.1, 0.9, 0.95, 1.0, 1.05, 1.1, 2.0}, 50.0, 150.0, 10.0 ); + double nValue = 0.0; + double nZoom = 0.0; + + // ズームテーブル上限を上回る倍率から拡大 -> ズーム不可 + EXPECT_EQ( false, GetZoomedValue( setting_50_150_10, 100.0, 2.5, 1, &nValue, &nZoom ) ); + + // ズームテーブル上限を上回る倍率から縮小 -> ズームテーブル末尾の倍率を適用 + EXPECT_EQ( true, GetZoomedValue( setting_50_150_10, 100.0, 2.5, -1, &nValue, &nZoom ) ); + EXPECT_DOUBLE_EQ( 200.0, nValue ); + EXPECT_DOUBLE_EQ( 2.0, nZoom ); + + // ズームテーブル下限を下回る倍率から縮小 -> ズーム不可 + EXPECT_EQ( false, GetZoomedValue( setting_50_150_10, 100.0, 0.08, -1, &nValue, &nZoom ) ); + + // ズームテーブル下限を下回る倍率から拡大 -> ズームテーブル先頭の倍率を適用 + EXPECT_EQ( true, GetZoomedValue( setting_50_150_10, 100.0, 0.08, 1, &nValue, &nZoom ) ); + EXPECT_DOUBLE_EQ( 10.0, nValue ); + EXPECT_DOUBLE_EQ( 0.1, nZoom ); +} + +/*! + * @brief GetZoomedValue関数のテスト - 縮小時の固有動作を狙ったテスト + */ +TEST( zoom, GetZoomedValue_FindingOneMoreChange ) +{ + const ZoomSetting setting_0_100_10( {0.97, 0.98, 0.99, 1.0}, 0.0, 100.0, 10.0 ); + double nValue = 0.0; + double nZoom = 0.0; + // 探している最中にテーブル先頭まで到達 + EXPECT_EQ( true, GetZoomedValue( setting_0_100_10, 100.0, 1.0, -1, &nValue, &nZoom ) ); + EXPECT_DOUBLE_EQ( 90.0, nValue ); + EXPECT_DOUBLE_EQ( 0.97, nZoom ); + + const ZoomSetting setting_95_100_10( {0.97, 0.98, 0.99, 1.0}, 95.0, 100.0, 10.0 ); + // 下限値に当たる + EXPECT_EQ( true, GetZoomedValue( setting_95_100_10, 100.0, 1.0, -1, &nValue, &nZoom ) ); + EXPECT_DOUBLE_EQ( 95.0, nValue ); + EXPECT_DOUBLE_EQ( 0.95, nZoom ); +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index 9418602a93..e9d624cfb7 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -130,6 +130,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index a905c59d02..e263ae5f69 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -98,6 +98,9 @@ Test Files + + Test Files + Test Files @@ -107,4 +110,4 @@ Other Files - \ No newline at end of file + From 524b1cf0eb20d5d01b91c95c6fd57bdd1a94924a Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Wed, 27 Jan 2021 23:44:36 +0900 Subject: [PATCH 0412/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ZoomSettingのコンストラクタの引数見直し * ZoomSettingのメンバ変数をconst/publicに変更(合わせてクラスから構造体に変更) * ZoomSettingの正当性判定をコンストラクタから削除 --- sakura_core/cmd/CViewCommander_Settings.cpp | 26 +++++----- sakura_core/util/zoom.cpp | 57 ++++++++------------- sakura_core/util/zoom.h | 38 ++++++++------ tests/unittests/test-zoom.cpp | 17 ++---- 4 files changed, 59 insertions(+), 79 deletions(-) diff --git a/sakura_core/cmd/CViewCommander_Settings.cpp b/sakura_core/cmd/CViewCommander_Settings.cpp index 232e6443b4..012362cd53 100644 --- a/sakura_core/cmd/CViewCommander_Settings.cpp +++ b/sakura_core/cmd/CViewCommander_Settings.cpp @@ -29,6 +29,7 @@ #include "CPropertyManager.h" #include "util/window.h" #include "util/zoom.h" +#include "debug//Debug2.h" /*! ツールバーの表示/非表示 @@ -261,21 +262,18 @@ void CViewCommander::Command_FONT( void ) */ void CViewCommander::Command_SETFONTSIZE( int fontSize, int shift, int mode ) { + // フォントサイズのズーム倍率テーブル + constexpr double nZoomFactors[] = { + 0.01, 0.011, 0.0125, 0.015, 0.0175, 0.02, 0.0225, 0.025, 0.0275, 0.03, 0.035, 0.04, 0.045, 0.05, 0.06, 0.07, 0.08, 0.09, + 0.1, 0.11, 0.125, 0.15, 0.175, 0.2, 0.225, 0.25, 0.275, 0.3, 0.35, 0.4, 0.45, 0.5, 0.6, 0.7, 0.8, 0.9, + 1.0, 1.1, 1.25, 1.5, 1.75, 2.0, 2.25, 2.5, 2.75, 3.0, 3.5, 4.0, 4.5, 5.0, 6.0, 7.0, 8.0, 9.0, + 10.0, 11.0, 12.5, 15.0, 17.5, 20.0, 22.5, 25.0, 27.5, 30.0, 35.0, 40.0, 45.0, 50.0, 60.0, 70.0, 80.0, 90 + }; // 設定できるフォントサイズの下限/上限/最小単位(いずれも1/10ポイント単位) - const int nPointSizeMin = 10; - const int nPointSizeMax = 720; - const int nPointSizeUnit = 5; - // ズーム設定 - static const ZoomSetting zoomSetting( - { - 0.01, 0.011, 0.0125, 0.015, 0.0175, 0.02, 0.0225, 0.025, 0.0275, 0.03, 0.035, 0.04, 0.045, 0.05, 0.06, 0.07, 0.08, 0.09, - 0.1, 0.11, 0.125, 0.15, 0.175, 0.2, 0.225, 0.25, 0.275, 0.3, 0.35, 0.4, 0.45, 0.5, 0.6, 0.7, 0.8, 0.9, - 1.0, 1.1, 1.25, 1.5, 1.75, 2.0, 2.25, 2.5, 2.75, 3.0, 3.5, 4.0, 4.5, 5.0, 6.0, 7.0, 8.0, 9.0, - 10.0, 11.0, 12.5, 15.0, 17.5, 20.0, 22.5, 25.0, 27.5, 30.0, 35.0, 40.0, 45.0, 50.0, 60.0, 70.0, 80.0, 90 - }, - nPointSizeMin, - nPointSizeMax, - nPointSizeUnit ); + constexpr int nPointSizeMin = 10; + constexpr int nPointSizeMax = 720; + constexpr int nPointSizeUnit = 5; + static const ZoomSetting zoomSetting( nZoomFactors, nPointSizeMin, nPointSizeMax, nPointSizeUnit ); const LOGFONT& lf = (mode == 0 ? GetDllShareData().m_Common.m_sView.m_lf : GetEditWindow()->GetLogfont( mode == 2 )); diff --git a/sakura_core/util/zoom.cpp b/sakura_core/util/zoom.cpp index fa4a67fd2f..6f05040f61 100644 --- a/sakura_core/util/zoom.cpp +++ b/sakura_core/util/zoom.cpp @@ -29,29 +29,13 @@ #include /*! - @brief コンストラクタ - @param[in] iZoomFactors ズーム倍率の並び - @param[in] nValueMin 下限値 - @param[in] nValueMax 上限値 - @param[in] nValueUnit 値の最小単位 + @brief 設定値の正当性判定 */ -ZoomSetting::ZoomSetting( std::initializer_list iZoomFactors, double nValueMin, double nValueMax, double nValueUnit ) +bool ZoomSetting::IsValid() const { - m_vZoomFactors.assign( iZoomFactors ); - m_nValueMin = nValueMin; - m_nValueMax = nValueMax; - m_nValueUnit = nValueUnit; - - // 正当性確認 - m_bValid = (0 < m_vZoomFactors.size()) && (m_nValueMin <= m_nValueMax) && (0.0 <= m_nValueUnit); - if( m_bValid ){ - for( size_t i = 1; i < m_vZoomFactors.size(); ++i ){ - if( m_vZoomFactors[i] < m_vZoomFactors[i - 1] ){ - m_bValid = false; - break; - } - } - } + return (m_nValueMin <= m_nValueMax) + && (0.0 <= m_nValueUnit) + && std::is_sorted( m_vZoomFactors.begin(), m_vZoomFactors.end() ); } /*! @@ -84,8 +68,8 @@ static double GetPositionInTable( const std::vector& vTable, double nVal /*! @brief 最小単位で丸めた値を取得 - @param[in] nValue 対象値 - @param[in] nUnit 最小単位(0.0 の場合は丸めなし) + @param[in] nValue 対象値 + @param[in] nUnit 最小単位(0.0 の場合は丸めなし) @return 丸められた値 */ static double GetQuantizedValue( double nValue, double nUnit ) @@ -95,22 +79,25 @@ static double GetQuantizedValue( double nValue, double nUnit ) /*! @brief 基準値に対してズーム倍率を適用した値を取得 - @param[in] nValue 対象値 - @param[in] nUnit 最小単位(0.0 の場合は丸めなし) + @param[in] zoomSetting ズーム設定 + @param[in] nBaseValue 基準値 + @param[in] nCurrentZoom 現在のズーム倍率 + @param[in] nSteps ズーム段階の変更量 + @param[in] pnValueOut 変更後のズーム倍率を適用した値 + @param[in] pnZoomOut 変更後のズーム倍率 @return 丸められた値 */ bool GetZoomedValue( const ZoomSetting& zoomSetting, double nBaseValue, double nCurrentZoom, int nSteps, double* pnValueOut, double* pnZoomOut ) { - if( !zoomSetting.IsValid() || nSteps == 0 ){ + if( nSteps == 0 ){ return false; } - const auto& vZoomFactors = zoomSetting.GetZoomFactors(); const bool bZoomUp = (0 < nSteps); const int nTableIndexMin = 0; - const int nTableIndexMax = (int)vZoomFactors.size() - 1; + const int nTableIndexMax = (int)zoomSetting.m_vZoomFactors.size() - 1; - const double nPosition = GetPositionInTable( vZoomFactors, nCurrentZoom ); + const double nPosition = GetPositionInTable( zoomSetting.m_vZoomFactors, nCurrentZoom ); int nTableIndex = (int)(bZoomUp ? std::floor( nPosition ) : std::ceil( nPosition )); if( (!bZoomUp && nTableIndex <= nTableIndexMin) || (bZoomUp && nTableIndexMax <= nTableIndex) ){ // 現在の倍率がすでに倍率テーブルの範囲外でかつ @@ -118,9 +105,9 @@ bool GetZoomedValue( const ZoomSetting& zoomSetting, double nBaseValue, double n return false; } - const double nCurrentValue = GetQuantizedValue( nBaseValue * nCurrentZoom, zoomSetting.GetValueUnit() ); - const double nValueMin = std::min( {zoomSetting.GetValueMin(), nBaseValue, nCurrentValue} ); - const double nValueMax = std::max( {zoomSetting.GetValueMax(), nBaseValue, nCurrentValue} ); + const double nCurrentValue = GetQuantizedValue( nBaseValue * nCurrentZoom, zoomSetting.m_nValueUnit ); + const double nValueMin = std::min( {zoomSetting.m_nValueMin, nBaseValue, nCurrentValue} ); + const double nValueMax = std::max( {zoomSetting.m_nValueMax, nBaseValue, nCurrentValue} ); double nNextValue = nCurrentValue; double nNextZoom = nCurrentZoom; double nLastValue = nCurrentValue; @@ -131,10 +118,10 @@ bool GetZoomedValue( const ZoomSetting& zoomSetting, double nBaseValue, double n // 変わる位置までインデックスを動かしていく nTableIndex += nSteps; // 本当は while( true ) で良いが万一の暴走回避のため有限回 - for( size_t i = 0; i < vZoomFactors.size(); ++i ){ + for( size_t i = 0; i < zoomSetting.m_vZoomFactors.size(); ++i ){ int clampedIndex = std::clamp( nTableIndex, nTableIndexMin, nTableIndexMax ); - nNextZoom = vZoomFactors[clampedIndex]; - nNextValue = GetQuantizedValue( nBaseValue * nNextZoom, zoomSetting.GetValueUnit() ); + nNextZoom = zoomSetting.m_vZoomFactors[clampedIndex]; + nNextValue = GetQuantizedValue( nBaseValue * nNextZoom, zoomSetting.m_nValueUnit ); if( bFindingOneMoreChange ){ if( nNextValue != nLastValue || clampedIndex != nTableIndex ){ diff --git a/sakura_core/util/zoom.h b/sakura_core/util/zoom.h index 9c45386111..0eb5ddb9bf 100644 --- a/sakura_core/util/zoom.h +++ b/sakura_core/util/zoom.h @@ -27,28 +27,34 @@ #define SAKURA_ZOOM_0CD4E589_F708_48BF_8601_8BF851827765_H_ #pragma once -#include #include /*! @brief ズーム設定を保持 */ -class ZoomSetting +struct ZoomSetting { -public: - ZoomSetting( std::initializer_list iZoomFactors, double nValueMin, double nValueMax, double nValueUnit ); - - bool IsValid() const { return m_bValid; } - const std::vector& GetZoomFactors() const { return m_vZoomFactors; } - double GetValueMin() const { return m_nValueMin; } - double GetValueMax() const { return m_nValueMax; } - double GetValueUnit() const { return m_nValueUnit; } -private: - bool m_bValid; - std::vector m_vZoomFactors; - double m_nValueMin; - double m_nValueMax; - double m_nValueUnit; + /*! + @brief コンストラクタ + @param[in] nZoomFactors ズーム倍率の並び(昇順) + @param[in] nValueMin 下限値(上限値以下) + @param[in] nValueMax 上限値(下限値以上) + @param[in] nValueUnit 値の最小単位(0以上) + */ + template + ZoomSetting( const double (&nZoomFactors)[nCount], double nValueMin, double nValueMax, double nValueUnit ) : + m_vZoomFactors( std::begin( nZoomFactors ), std::end( nZoomFactors ) ), + m_nValueMin( nValueMin ), + m_nValueMax( nValueMax ), + m_nValueUnit( nValueUnit ) + {} + + const std::vector m_vZoomFactors; + const double m_nValueMin; + const double m_nValueMax; + const double m_nValueUnit; + + bool IsValid() const; }; bool GetZoomedValue( const ZoomSetting& zoomSetting, double nBaseValue, double nCurrentZoom, int nSteps, double* pnValueOut, double* pnZoomOut ); diff --git a/tests/unittests/test-zoom.cpp b/tests/unittests/test-zoom.cpp index 5b90b750f9..4f2c1f6f7e 100644 --- a/tests/unittests/test-zoom.cpp +++ b/tests/unittests/test-zoom.cpp @@ -26,13 +26,10 @@ #include "util/zoom.h" /*! - * @brief ZoomSettingクラスのテスト + * @brief ZoomSetting構造体のテスト */ TEST( zoom, ZoomSetting ) { - // 不正な引数 - テーブルが空 - EXPECT_EQ( false, ZoomSetting( {}, 0.0, 0.0, 1.0 ).IsValid() ); - // 不正な引数 - テーブルが昇順になっていない EXPECT_EQ( false, ZoomSetting( {0.0, 2.0, 1.0}, 0.0, 0.0, 1.0 ).IsValid() ); @@ -43,18 +40,10 @@ TEST( zoom, ZoomSetting ) EXPECT_EQ( false, ZoomSetting( {1.0}, 0.0, 0.0, -1.0 ).IsValid() ); // 正しい引数 - テーブルに同一値が含まれる - EXPECT_EQ( true, ZoomSetting( {0.0, 0.0, 0.0}, 0.0, 0.0, 1.0 ).IsValid() ); + EXPECT_EQ( true, ZoomSetting( {0.0, 1.0, 1.0, 2.0}, 0.0, 0.0, 1.0 ).IsValid() ); // 正しい引数 - 解像度が0 EXPECT_EQ( true, ZoomSetting( {0.0}, 0.0, 0.0, 0.0 ).IsValid() ); - - // メソッド確認 - const ZoomSetting setting( {0.0, 0.5, 1.0}, -1.0, 2.0, 3.0 ); - EXPECT_EQ( true, setting.IsValid() ); - EXPECT_EQ( 3, setting.GetZoomFactors().size() ); - EXPECT_EQ( -1.0, setting.GetValueMin() ); - EXPECT_EQ( 2.0, setting.GetValueMax() ); - EXPECT_EQ( 3.0, setting.GetValueUnit() ); } /*! @@ -63,7 +52,7 @@ TEST( zoom, ZoomSetting ) TEST( zoom, GetZoomedValue_CheckArguments ) { // ズーム設定が不正 - EXPECT_EQ( false, GetZoomedValue( ZoomSetting( {}, 0.0, 0.0, 0.0 ), 100.0, 1.0, 1, NULL, NULL ) ); + EXPECT_EQ( false, GetZoomedValue( ZoomSetting( {1.0}, 1.0, 0.0, 0.0 ), 100.0, 1.0, 1, NULL, NULL ) ); // ズームステップが0 EXPECT_EQ( false, GetZoomedValue( ZoomSetting( {0.5, 1.0, 1.5}, 0.0, 200.0, 0.0 ), 100.0, 1.0, 0, NULL, NULL ) ); From 500abc5c403f726ff52e9668571a3910f8a31398 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Wed, 27 Jan 2021 23:58:20 +0900 Subject: [PATCH 0413/1024] =?UTF-8?q?=E8=B5=B7=E5=8B=95=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=81=AE=E3=83=9E=E3=82=AF=E3=83=AD=E3=81=8B=E3=82=89?= =?UTF-8?q?SetFontSize=E3=82=92=E5=91=BC=E3=81=B3=E5=87=BA=E3=81=99(?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=AB=E3=83=90=E3=83=AC=E3=83=83?= =?UTF-8?q?=E3=82=B8=E7=A2=BA=E4=BF=9D)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-winmain.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/unittests/test-winmain.cpp b/tests/unittests/test-winmain.cpp index f6ebd9a183..7c09a9fa05 100644 --- a/tests/unittests/test-winmain.cpp +++ b/tests/unittests/test-winmain.cpp @@ -301,6 +301,20 @@ TEST_F( WinMainTest, runEditorProcess ) strStartupMacro += L"ShowMiniMap();"; //ShowMiniMap 消す strStartupMacro += L"ShowTab();"; //ShowTab 消す strStartupMacro += L"ExpandParameter('$I');"; // INIファイルパスの取得(呼ぶだけ) + // フォントサイズ設定のテスト(ここから) + strStartupMacro += L"SetFontSize(10, 0, 0);"; // 直接指定 - 対象:共通設定 + strStartupMacro += L"SetFontSize(10, 0, 1);"; // 直接指定 - 対象:タイプ別設定 + strStartupMacro += L"SetFontSize(10, 0, 2);"; // 直接指定 - 対象:一時適用 + strStartupMacro += L"SetFontSize(10, 0, 3);"; // 直接指定 - 対象が不正 + strStartupMacro += L"SetFontSize(0, 0, 0);"; // 直接指定 - フォントサイズ下限未満 + strStartupMacro += L"SetFontSize(9999, 0, 0);"; // 直接指定 - フォントサイズ上限超過 + strStartupMacro += L"SetFontSize(0, 0, 2);"; // 相対指定 - サイズ変化なし + strStartupMacro += L"SetFontSize(0, 1, 2);"; // 相対指定 - 拡大 + strStartupMacro += L"SetFontSize(0, -1, 2);"; // 相対指定 - 縮小 + strStartupMacro += L"SetFontSize(0, 9999, 2);"; // 相対指定 - 限界まで拡大 + strStartupMacro += L"SetFontSize(0, -9999, 2);";// 相対指定 - 限界まで縮小 + strStartupMacro += L"SetFontSize(10, 0, 2);"; // 元に戻す + // フォントサイズ設定のテスト(ここまで) strStartupMacro += L"ExitAll();"; //NOTE: このコマンドにより、エディタプロセスは起動された直後に終了する。 // コマンドラインを組み立てる From d3a4f099e88edcabf3fbc048cdf77d2a534f1543 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Thu, 28 Jan 2021 00:13:05 +0900 Subject: [PATCH 0414/1024] =?UTF-8?q?CodeSmell=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/cmd/CViewCommander_Settings.cpp | 10 +- sakura_core/util/zoom.cpp | 118 ++++++++++++-------- sakura_core/util/zoom.h | 22 ++-- sakura_core/view/CCaret.cpp | 2 +- tests/unittests/test-zoom.cpp | 8 +- 5 files changed, 95 insertions(+), 65 deletions(-) diff --git a/sakura_core/cmd/CViewCommander_Settings.cpp b/sakura_core/cmd/CViewCommander_Settings.cpp index 012362cd53..b1f28d579f 100644 --- a/sakura_core/cmd/CViewCommander_Settings.cpp +++ b/sakura_core/cmd/CViewCommander_Settings.cpp @@ -29,7 +29,7 @@ #include "CPropertyManager.h" #include "util/window.h" #include "util/zoom.h" -#include "debug//Debug2.h" +#include /*! ツールバーの表示/非表示 @@ -263,17 +263,17 @@ void CViewCommander::Command_FONT( void ) void CViewCommander::Command_SETFONTSIZE( int fontSize, int shift, int mode ) { // フォントサイズのズーム倍率テーブル - constexpr double nZoomFactors[] = { + constexpr std::array aZoomFactors = { 0.01, 0.011, 0.0125, 0.015, 0.0175, 0.02, 0.0225, 0.025, 0.0275, 0.03, 0.035, 0.04, 0.045, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1, 0.11, 0.125, 0.15, 0.175, 0.2, 0.225, 0.25, 0.275, 0.3, 0.35, 0.4, 0.45, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.25, 1.5, 1.75, 2.0, 2.25, 2.5, 2.75, 3.0, 3.5, 4.0, 4.5, 5.0, 6.0, 7.0, 8.0, 9.0, - 10.0, 11.0, 12.5, 15.0, 17.5, 20.0, 22.5, 25.0, 27.5, 30.0, 35.0, 40.0, 45.0, 50.0, 60.0, 70.0, 80.0, 90 + 10.0, 11.0, 12.5, 15.0, 17.5, 20.0, 22.5, 25.0, 27.5, 30.0, 35.0, 40.0, 45.0, 50.0, 60.0, 70.0, 80.0, 90.0 }; // 設定できるフォントサイズの下限/上限/最小単位(いずれも1/10ポイント単位) constexpr int nPointSizeMin = 10; constexpr int nPointSizeMax = 720; constexpr int nPointSizeUnit = 5; - static const ZoomSetting zoomSetting( nZoomFactors, nPointSizeMin, nPointSizeMax, nPointSizeUnit ); + static const ZoomSetting zoomSetting( aZoomFactors.begin(), aZoomFactors.end(), nPointSizeMin, nPointSizeMax, nPointSizeUnit ); const LOGFONT& lf = (mode == 0 ? GetDllShareData().m_Common.m_sView.m_lf : GetEditWindow()->GetLogfont( mode == 2 )); @@ -291,7 +291,7 @@ void CViewCommander::Command_SETFONTSIZE( int fontSize, int shift, int mode ) GetEditWindow()->GetFontPointSize( mode == 2 ); const int nOriginalPointSize = GetEditWindow()->GetFontPointSize( false ); double nCurrentZoom = (mode == 2 && GetDocument()->m_blfCurTemp) ? GetDocument()->m_nCurrentZoom : 1.0; - int nPointSize = nCurrentPointSize; + int nPointSize; if( 0 != fontSize ){ // フォントサイズを直接選択する場合 diff --git a/sakura_core/util/zoom.cpp b/sakura_core/util/zoom.cpp index 6f05040f61..e3a16fefd0 100644 --- a/sakura_core/util/zoom.cpp +++ b/sakura_core/util/zoom.cpp @@ -50,7 +50,7 @@ bool ZoomSetting::IsValid() const -------|------|------|------|------|------|------|------|------| 戻り値 | -0.5 | -0.5 | 0.0 | 0.5 | 1.5 | 2.0 | 2.5 | 2.5 | */ -static double GetPositionInTable( const std::vector& vTable, double nValue ) +[[nodiscard]] static double GetPositionInTable( const std::vector& vTable, double nValue ) { double nPosition = (double)vTable.size() - 0.5; for( size_t i = 0; i < vTable.size(); ++i ){ @@ -72,20 +72,60 @@ static double GetPositionInTable( const std::vector& vTable, double nVal @param[in] nUnit 最小単位(0.0 の場合は丸めなし) @return 丸められた値 */ -static double GetQuantizedValue( double nValue, double nUnit ) +[[nodiscard]] static double GetQuantizedValue( double nValue, double nUnit ) { return (0.0 < nUnit) ? std::floor( nValue / nUnit ) * nUnit : nValue; } +/*! + @brief 指定されたインデックスに該当するズーム倍率を適用した値を取得 + @param[in] zoomSetting ズーム設定 + @param[in] nBaseValue 基準値 + @param[in] nCurrentValue 変更前の値 + @param[in] nTableIndex ズーム倍率テーブルのインデックス + @param[out] pnValueOut 変更後のズーム倍率を適用した値 + @param[out] pnZoomOut 変更後のズーム倍率 + @return テーブルインデックスおよび値が共に範囲内かどうか + @note 戻り値が false の場合においても pnValueOut, pnZoomOut にはそれぞれ範囲内に丸めた値が設定されます。 +*/ +static bool GetZoomedValueInIndex( const ZoomSetting& zoomSetting, double nBaseValue, double nValueMin, double nValueMax, int nTableIndex, double* pnValueOut, double* pnZoomOut ) +{ + const int nClampedIndex = std::clamp( nTableIndex, 0, ((int)zoomSetting.m_vZoomFactors.size() - 1) ); + double nNextZoom = zoomSetting.m_vZoomFactors[nClampedIndex]; + double nNextValue = GetQuantizedValue( nBaseValue * nNextZoom, zoomSetting.m_nValueUnit ); + bool bWithinRange = true; + + if( nNextValue < nValueMin || nValueMax < nNextValue ){ + // 値の上下限を超過していたら上下限に丸めて終わる + // 倍率は丸めた後のサイズで再計算 + nNextValue = std::clamp( nNextValue, nValueMin, nValueMax ); + if( nBaseValue != 0.0 ){ + nNextZoom = nNextValue / nBaseValue; + } + bWithinRange = false; + }else if( nClampedIndex != nTableIndex ){ + // 倍率テーブルの端まで到達していたら終わり + bWithinRange = false; + }else{ + // インデックス/値ともに範囲内 + } + + *pnValueOut = nNextValue; + *pnZoomOut = nNextZoom; + + return bWithinRange; +} + /*! @brief 基準値に対してズーム倍率を適用した値を取得 @param[in] zoomSetting ズーム設定 @param[in] nBaseValue 基準値 - @param[in] nCurrentZoom 現在のズーム倍率 + @param[in] nCurrentZoom 変更前のズーム倍率 @param[in] nSteps ズーム段階の変更量 - @param[in] pnValueOut 変更後のズーム倍率を適用した値 - @param[in] pnZoomOut 変更後のズーム倍率 - @return 丸められた値 + @param[out] pnValueOut 変更後のズーム倍率を適用した値 + @param[out] pnZoomOut 変更後のズーム倍率 + @return ズームできたかどうか + @note 戻り値が false の場合には pnValueOut, pnZoomOut は設定されません。 */ bool GetZoomedValue( const ZoomSetting& zoomSetting, double nBaseValue, double nCurrentZoom, int nSteps, double* pnValueOut, double* pnZoomOut ) { @@ -98,7 +138,7 @@ bool GetZoomedValue( const ZoomSetting& zoomSetting, double nBaseValue, double n const int nTableIndexMax = (int)zoomSetting.m_vZoomFactors.size() - 1; const double nPosition = GetPositionInTable( zoomSetting.m_vZoomFactors, nCurrentZoom ); - int nTableIndex = (int)(bZoomUp ? std::floor( nPosition ) : std::ceil( nPosition )); + auto nTableIndex = (int)(bZoomUp ? std::floor( nPosition ) : std::ceil( nPosition )); if( (!bZoomUp && nTableIndex <= nTableIndexMin) || (bZoomUp && nTableIndexMax <= nTableIndex) ){ // 現在の倍率がすでに倍率テーブルの範囲外でかつ // さらに外側へ移動しようとした場合は今の位置を維持 @@ -108,6 +148,7 @@ bool GetZoomedValue( const ZoomSetting& zoomSetting, double nBaseValue, double n const double nCurrentValue = GetQuantizedValue( nBaseValue * nCurrentZoom, zoomSetting.m_nValueUnit ); const double nValueMin = std::min( {zoomSetting.m_nValueMin, nBaseValue, nCurrentValue} ); const double nValueMax = std::max( {zoomSetting.m_nValueMax, nBaseValue, nCurrentValue} ); + const int nIndexAddition = bZoomUp ? 1 : -1; double nNextValue = nCurrentValue; double nNextZoom = nCurrentZoom; double nLastValue = nCurrentValue; @@ -117,62 +158,45 @@ bool GetZoomedValue( const ZoomSetting& zoomSetting, double nBaseValue, double n // 最小単位で丸めた後の値が変更前の値から変わらなければ // 変わる位置までインデックスを動かしていく nTableIndex += nSteps; - // 本当は while( true ) で良いが万一の暴走回避のため有限回 - for( size_t i = 0; i < zoomSetting.m_vZoomFactors.size(); ++i ){ - int clampedIndex = std::clamp( nTableIndex, nTableIndexMin, nTableIndexMax ); - nNextZoom = zoomSetting.m_vZoomFactors[clampedIndex]; - nNextValue = GetQuantizedValue( nBaseValue * nNextZoom, zoomSetting.m_nValueUnit ); - + // 本当は無限ループで良いが万一の暴走回避のため有限回 + for( [[maybe_unused]] const double _ : zoomSetting.m_vZoomFactors ){ + const bool bWithinRange = GetZoomedValueInIndex( zoomSetting, nBaseValue, nValueMin, nValueMax, nTableIndex, &nNextValue, &nNextZoom ); + const bool bValueChanged = (nNextValue != nCurrentValue); + bool bBreak = false; if( bFindingOneMoreChange ){ - if( nNextValue != nLastValue || clampedIndex != nTableIndex ){ + if( nNextValue != nLastValue || !bWithinRange ){ nNextValue = nLastValue; nNextZoom = nLastZoom; - break; + bBreak = true; } + }else if( !bWithinRange ){ + // インデックスまたは値が範囲外になったので終わる + bBreak = true; + }else if( bValueChanged && bZoomUp ){ + // 拡大方向は値が変わったらそこで確定 + bBreak = true; + }else if( bValueChanged && !bZoomUp ){ + // 縮小方向は一度値が変わった後もう一度値が変わる位置までインデックスを進めてから終わる + bFindingOneMoreChange = true; }else{ - // 値の上下限を超過したら上下限に丸めて終わる - // 倍率は丸めた後のサイズで再計算 - double clampedValue = std::clamp( nNextValue, nValueMin, nValueMax ); - if( nNextValue != clampedValue ){ - if( nBaseValue != 0.0 ){ - nNextZoom = clampedValue / nBaseValue; - } - nNextValue = clampedValue; - break; - } - - // 倍率テーブルの端まで到達していたら終わり - if( clampedIndex != nTableIndex ){ - break; - } - - bool bSizeChanged = (nNextValue != nCurrentValue); - if( bZoomUp ){ - // 拡大側は値が変わったらすぐ終わる - if( bSizeChanged ){ - break; - } - }else{ - // 縮小側は一度値が変わった後もう一度値が変わる位置までインデックスを進めてから終わる - if( bSizeChanged ){ - bFindingOneMoreChange = true; - } - } + // 値が変化しなかったので次の段階へ } + if( bBreak ){ break; } + nLastValue = nNextValue; nLastZoom = nNextZoom; - nTableIndex += bZoomUp ? 1 : -1; - }; + nTableIndex += nIndexAddition; + } if( nCurrentValue == nNextValue ){ return false; } - if( pnValueOut != NULL ){ + if( pnValueOut != nullptr ){ *pnValueOut = nNextValue; } - if( pnZoomOut != NULL ){ + if( pnZoomOut != nullptr ){ *pnZoomOut = nNextZoom; } diff --git a/sakura_core/util/zoom.h b/sakura_core/util/zoom.h index 0eb5ddb9bf..1cc1a6c1b9 100644 --- a/sakura_core/util/zoom.h +++ b/sakura_core/util/zoom.h @@ -28,6 +28,7 @@ #pragma once #include +#include /*! @brief ズーム設定を保持 @@ -36,25 +37,30 @@ struct ZoomSetting { /*! @brief コンストラクタ - @param[in] nZoomFactors ズーム倍率の並び(昇順) - @param[in] nValueMin 下限値(上限値以下) - @param[in] nValueMax 上限値(下限値以上) - @param[in] nValueUnit 値の最小単位(0以上) + @param[in] iterZoomFactorsFirst ズーム倍率テーブルの開始イテレータ + @param[in] iterZoomFactorsLast ズーム倍率テーブルの終了イテレータ + @param[in] nValueMin 下限値(上限値以下であること) + @param[in] nValueMax 上限値(下限値以上であること) + @param[in] nValueUnit 値の最小単位(0以上であること) + @note ズーム倍率テーブルは昇順であること */ - template - ZoomSetting( const double (&nZoomFactors)[nCount], double nValueMin, double nValueMax, double nValueUnit ) : - m_vZoomFactors( std::begin( nZoomFactors ), std::end( nZoomFactors ) ), + template + ZoomSetting( InputIter iterZoomFactorsFirst, InputIter iterZoomFactorsLast, double nValueMin, double nValueMax, double nValueUnit ) : + m_vZoomFactors( iterZoomFactorsFirst, iterZoomFactorsLast ), m_nValueMin( nValueMin ), m_nValueMax( nValueMax ), m_nValueUnit( nValueUnit ) {} + ZoomSetting( const std::initializer_list iZoomFactors, double nValueMin, double nValueMax, double nValueUnit ) : + ZoomSetting( iZoomFactors.begin(), iZoomFactors.end(), nValueMin, nValueMax, nValueUnit ) + {} const std::vector m_vZoomFactors; const double m_nValueMin; const double m_nValueMax; const double m_nValueUnit; - bool IsValid() const; + [[nodiscard]] bool IsValid() const; }; bool GetZoomedValue( const ZoomSetting& zoomSetting, double nBaseValue, double nCurrentZoom, int nSteps, double* pnValueOut, double* pnZoomOut ); diff --git a/sakura_core/view/CCaret.cpp b/sakura_core/view/CCaret.cpp index 977205337b..a333d31cdc 100644 --- a/sakura_core/view/CCaret.cpp +++ b/sakura_core/view/CCaret.cpp @@ -836,7 +836,7 @@ void CCaret::ShowCaretPosInfo() } WCHAR szFontSize[16]; - double nZoomPercentage = m_pEditDoc->m_blfCurTemp ? (m_pEditDoc->m_nCurrentZoom * 100.0) : 100.0; + const double nZoomPercentage = m_pEditDoc->m_blfCurTemp ? (m_pEditDoc->m_nCurrentZoom * 100.0) : 100.0; if( nZoomPercentage < 5.0 ){ auto_sprintf( szFontSize, LS( STR_STATUS_FONTZOOM_1 ), nZoomPercentage ); }else{ diff --git a/tests/unittests/test-zoom.cpp b/tests/unittests/test-zoom.cpp index 4f2c1f6f7e..15aece2a14 100644 --- a/tests/unittests/test-zoom.cpp +++ b/tests/unittests/test-zoom.cpp @@ -52,13 +52,13 @@ TEST( zoom, ZoomSetting ) TEST( zoom, GetZoomedValue_CheckArguments ) { // ズーム設定が不正 - EXPECT_EQ( false, GetZoomedValue( ZoomSetting( {1.0}, 1.0, 0.0, 0.0 ), 100.0, 1.0, 1, NULL, NULL ) ); + EXPECT_EQ( false, GetZoomedValue( ZoomSetting( {1.0}, 1.0, 0.0, 0.0 ), 100.0, 1.0, 1, nullptr, nullptr ) ); // ズームステップが0 - EXPECT_EQ( false, GetZoomedValue( ZoomSetting( {0.5, 1.0, 1.5}, 0.0, 200.0, 0.0 ), 100.0, 1.0, 0, NULL, NULL ) ); + EXPECT_EQ( false, GetZoomedValue( ZoomSetting( {0.5, 1.0, 1.5}, 0.0, 200.0, 0.0 ), 100.0, 1.0, 0, nullptr, nullptr ) ); - // 出力引数はNULLを許容 - EXPECT_EQ( true, GetZoomedValue( ZoomSetting( {0.5, 1.0, 1.5}, 0.0, 200.0, 0.0 ), 100.0, 1.0, 1, NULL, NULL ) ); + // 出力引数はnullptrを許容 + EXPECT_EQ( true, GetZoomedValue( ZoomSetting( {0.5, 1.0, 1.5}, 0.0, 200.0, 0.0 ), 100.0, 1.0, 1, nullptr, nullptr ) ); } /*! From 7d706d2631174f605f982e1723da83188846f13f Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sat, 30 Jan 2021 00:42:33 +0900 Subject: [PATCH 0415/1024] =?UTF-8?q?CodeSmell/=E3=83=AC=E3=83=93=E3=83=A5?= =?UTF-8?q?=E3=83=BC=E6=8C=87=E6=91=98=E4=BA=8B=E9=A0=85=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * CodeSmell対応(Use the init-statement to declare "nZoomPercentage" inside the if statement.) * CEditWnd::GetFontZoomを使って表示用のズーム倍率を取得する * auto_sprintf->auto_sprintf_s置き換え --- sakura_core/view/CCaret.cpp | 7 +++---- sakura_core/window/CEditWnd.cpp | 14 ++++++++++++++ sakura_core/window/CEditWnd.h | 1 + 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/sakura_core/view/CCaret.cpp b/sakura_core/view/CCaret.cpp index a333d31cdc..b88d2fbd03 100644 --- a/sakura_core/view/CCaret.cpp +++ b/sakura_core/view/CCaret.cpp @@ -836,11 +836,10 @@ void CCaret::ShowCaretPosInfo() } WCHAR szFontSize[16]; - const double nZoomPercentage = m_pEditDoc->m_blfCurTemp ? (m_pEditDoc->m_nCurrentZoom * 100.0) : 100.0; - if( nZoomPercentage < 5.0 ){ - auto_sprintf( szFontSize, LS( STR_STATUS_FONTZOOM_1 ), nZoomPercentage ); + if( const double nZoomPercentage = m_pEditDoc->m_pcEditWnd->GetFontZoom() * 100.0; nZoomPercentage < 5.0 ){ + auto_sprintf_s( szFontSize, _countof(szFontSize), LS( STR_STATUS_FONTZOOM_1 ), nZoomPercentage ); }else{ - auto_sprintf( szFontSize, LS( STR_STATUS_FONTZOOM_0 ), nZoomPercentage ); + auto_sprintf_s( szFontSize, _countof(szFontSize), LS( STR_STATUS_FONTZOOM_0 ), nZoomPercentage ); } auto& statusBar = m_pEditDoc->m_pcEditWnd->m_cStatusBar; diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index 145b0b3510..7407c0b2dd 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -4860,6 +4860,20 @@ ECharWidthCacheMode CEditWnd::GetLogfontCacheMode() return CWM_CACHE_SHARE; } +/*! + @brief 現在のズーム倍率を取得 + @return 1.0を等倍とするズーム倍率 +*/ +double CEditWnd::GetFontZoom() +{ + const CEditDoc* pDocument = GetDocument(); + if( pDocument->m_blfCurTemp ){ + return pDocument->m_nCurrentZoom; + }else{ + return 1.0; + } +} + void CEditWnd::ClearViewCaretPosInfo() { for( int v = 0; v < GetAllViewCount(); ++v ){ diff --git a/sakura_core/window/CEditWnd.h b/sakura_core/window/CEditWnd.h index 36ab1dbce2..f267eb3ba4 100644 --- a/sakura_core/window/CEditWnd.h +++ b/sakura_core/window/CEditWnd.h @@ -337,6 +337,7 @@ class CEditWnd const LOGFONT& GetLogfont(bool bTempSetting = true); int GetFontPointSize(bool bTempSetting = true); ECharWidthCacheMode GetLogfontCacheMode(); + double GetFontZoom(); void ClearViewCaretPosInfo(); // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // From dbf47e2e7aa2a328d97229a8f11675645ba4954c Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sat, 30 Jan 2021 16:36:25 +0900 Subject: [PATCH 0416/1024] =?UTF-8?q?=E3=83=95=E3=82=A9=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=82=B5=E3=82=A4=E3=82=BA=E7=9B=B4=E6=8E=A5=E6=8C=87=E5=AE=9A?= =?UTF-8?q?=E6=99=82=E3=81=AB=E3=82=BA=E3=83=BC=E3=83=A0=E5=80=8D=E7=8E=87?= =?UTF-8?q?=E3=82=92=E3=83=AA=E3=82=BB=E3=83=83=E3=83=88=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/cmd/CViewCommander_Settings.cpp | 1 + sakura_core/window/CEditWnd.cpp | 5 ++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sakura_core/cmd/CViewCommander_Settings.cpp b/sakura_core/cmd/CViewCommander_Settings.cpp index b1f28d579f..47fdfc4d67 100644 --- a/sakura_core/cmd/CViewCommander_Settings.cpp +++ b/sakura_core/cmd/CViewCommander_Settings.cpp @@ -296,6 +296,7 @@ void CViewCommander::Command_SETFONTSIZE( int fontSize, int shift, int mode ) if( 0 != fontSize ){ // フォントサイズを直接選択する場合 nPointSize = std::clamp( fontSize, nPointSizeMin, nPointSizeMax ); + nCurrentZoom = 1.0; }else if( 0 != shift ){ // 現在のフォントに対して、縮小or拡大したフォント選択する場合 double nPointSizeF = 0.0; diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index 7407c0b2dd..d1fd73c600 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -4866,9 +4866,8 @@ ECharWidthCacheMode CEditWnd::GetLogfontCacheMode() */ double CEditWnd::GetFontZoom() { - const CEditDoc* pDocument = GetDocument(); - if( pDocument->m_blfCurTemp ){ - return pDocument->m_nCurrentZoom; + if( GetDocument()->m_blfCurTemp ){ + return GetDocument()->m_nCurrentZoom; }else{ return 1.0; } From 3508ad004b91a37ab8e26057f63326e6f9638f54 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Wed, 3 Feb 2021 00:51:58 +0900 Subject: [PATCH 0417/1024] =?UTF-8?q?VS2017=E3=81=A7=E3=81=AE=E3=82=B3?= =?UTF-8?q?=E3=83=B3=E3=83=91=E3=82=A4=E3=83=AB=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E8=A7=A3=E6=B6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/zoom.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/util/zoom.cpp b/sakura_core/util/zoom.cpp index e3a16fefd0..74496486e1 100644 --- a/sakura_core/util/zoom.cpp +++ b/sakura_core/util/zoom.cpp @@ -159,7 +159,7 @@ bool GetZoomedValue( const ZoomSetting& zoomSetting, double nBaseValue, double n // 変わる位置までインデックスを動かしていく nTableIndex += nSteps; // 本当は無限ループで良いが万一の暴走回避のため有限回 - for( [[maybe_unused]] const double _ : zoomSetting.m_vZoomFactors ){ + for( [[maybe_unused]] double _ : zoomSetting.m_vZoomFactors ){ const bool bWithinRange = GetZoomedValueInIndex( zoomSetting, nBaseValue, nValueMin, nValueMax, nTableIndex, &nNextValue, &nNextZoom ); const bool bValueChanged = (nNextValue != nCurrentValue); bool bBreak = false; From 54f30ba3ac2c3964ffdfee25076ca176de9504db Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Fri, 5 Feb 2021 01:19:37 +0900 Subject: [PATCH 0418/1024] =?UTF-8?q?GetZoomedValue=E9=96=A2=E6=95=B0?= =?UTF-8?q?=E3=81=AE=E8=A4=87=E9=9B=91=E5=BA=A6=E3=82=92=E4=B8=8B=E3=81=92?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/zoom.cpp | 129 ++++++++++++++++++-------------------- 1 file changed, 61 insertions(+), 68 deletions(-) diff --git a/sakura_core/util/zoom.cpp b/sakura_core/util/zoom.cpp index 74496486e1..f666d407b9 100644 --- a/sakura_core/util/zoom.cpp +++ b/sakura_core/util/zoom.cpp @@ -78,42 +78,62 @@ bool ZoomSetting::IsValid() const } /*! - @brief 指定されたインデックスに該当するズーム倍率を適用した値を取得 + @brief 移動量を反映したズーム倍率テーブルのインデックスを取得 @param[in] zoomSetting ズーム設定 @param[in] nBaseValue 基準値 - @param[in] nCurrentValue 変更前の値 - @param[in] nTableIndex ズーム倍率テーブルのインデックス - @param[out] pnValueOut 変更後のズーム倍率を適用した値 - @param[out] pnZoomOut 変更後のズーム倍率 - @return テーブルインデックスおよび値が共に範囲内かどうか + @param[in] nCurrentValue 現在値 + @param[in] nCurrentIndex 現在値に対応するインデックス + @param[in] nSteps インデックスの移動量 + @return ズーム倍率テーブルのインデックス @note 戻り値が false の場合においても pnValueOut, pnZoomOut にはそれぞれ範囲内に丸めた値が設定されます。 */ -static bool GetZoomedValueInIndex( const ZoomSetting& zoomSetting, double nBaseValue, double nValueMin, double nValueMax, int nTableIndex, double* pnValueOut, double* pnZoomOut ) +[[nodiscard]] static int GetNextZoomIndex( const ZoomSetting& zoomSetting, double nBaseValue, double nCurrentValue, int nCurrentIndex, int nSteps ) { - const int nClampedIndex = std::clamp( nTableIndex, 0, ((int)zoomSetting.m_vZoomFactors.size() - 1) ); - double nNextZoom = zoomSetting.m_vZoomFactors[nClampedIndex]; - double nNextValue = GetQuantizedValue( nBaseValue * nNextZoom, zoomSetting.m_nValueUnit ); - bool bWithinRange = true; + const bool bZoomUp = (0 < nSteps); + const int nIndexAddition = bZoomUp ? 1 : -1; + double nLastValue = nCurrentValue; + int nNextIndex = nCurrentIndex + nSteps; + int nLastIndex = nNextIndex; + bool bFindingOneMoreChange = false; - if( nNextValue < nValueMin || nValueMax < nNextValue ){ - // 値の上下限を超過していたら上下限に丸めて終わる - // 倍率は丸めた後のサイズで再計算 - nNextValue = std::clamp( nNextValue, nValueMin, nValueMax ); - if( nBaseValue != 0.0 ){ - nNextZoom = nNextValue / nBaseValue; + // 最小単位で丸めた後の値が変更前の値から変わらなければ + // 変わる位置までインデックスを動かしていく + // 本当は無限ループで良いが万一の暴走回避のため有限回 + for( [[maybe_unused]] double _ : zoomSetting.m_vZoomFactors ){ + const int nClampedIndex = std::clamp( nNextIndex, 0, ((int)zoomSetting.m_vZoomFactors.size() - 1) ); + const bool bOutOfRange = (nClampedIndex != nNextIndex); + nNextIndex = nClampedIndex; + const double nNextZoom = zoomSetting.m_vZoomFactors[nNextIndex]; + const double nNextValue = GetQuantizedValue( nBaseValue * nNextZoom, zoomSetting.m_nValueUnit ); + + const bool bValueChanged = (nNextValue != nCurrentValue); + bool bBreak = false; + if( bFindingOneMoreChange ){ + if( nNextValue != nLastValue || bOutOfRange ){ + nNextIndex = nLastIndex; + bBreak = true; + } + }else if( bOutOfRange ){ + // インデックスが範囲外になったので終わる + bBreak = true; + }else if( bValueChanged && bZoomUp ){ + // 拡大方向は値が変わったらそこで確定 + bBreak = true; + }else if( bValueChanged && !bZoomUp ){ + // 縮小方向は一度値が変わった後もう一度値が変わる位置までインデックスを進めてから終わる + bFindingOneMoreChange = true; + }else{ + // 値が変化しなかったので次の段階へ } - bWithinRange = false; - }else if( nClampedIndex != nTableIndex ){ - // 倍率テーブルの端まで到達していたら終わり - bWithinRange = false; - }else{ - // インデックス/値ともに範囲内 - } - *pnValueOut = nNextValue; - *pnZoomOut = nNextZoom; + if( bBreak ){ break; } + + nLastValue = nNextValue; + nLastIndex = nNextIndex; + nNextIndex += nIndexAddition; + } - return bWithinRange; + return nNextIndex; } /*! @@ -134,12 +154,12 @@ bool GetZoomedValue( const ZoomSetting& zoomSetting, double nBaseValue, double n } const bool bZoomUp = (0 < nSteps); - const int nTableIndexMin = 0; - const int nTableIndexMax = (int)zoomSetting.m_vZoomFactors.size() - 1; + const int nIndexMin = 0; + const int nIndexMax = (int)zoomSetting.m_vZoomFactors.size() - 1; const double nPosition = GetPositionInTable( zoomSetting.m_vZoomFactors, nCurrentZoom ); - auto nTableIndex = (int)(bZoomUp ? std::floor( nPosition ) : std::ceil( nPosition )); - if( (!bZoomUp && nTableIndex <= nTableIndexMin) || (bZoomUp && nTableIndexMax <= nTableIndex) ){ + auto nCurrentIndex = (int)(bZoomUp ? std::floor( nPosition ) : std::ceil( nPosition )); + if( (!bZoomUp && nCurrentIndex <= nIndexMin) || (bZoomUp && nIndexMax <= nCurrentIndex) ){ // 現在の倍率がすでに倍率テーブルの範囲外でかつ // さらに外側へ移動しようとした場合は今の位置を維持 return false; @@ -148,45 +168,18 @@ bool GetZoomedValue( const ZoomSetting& zoomSetting, double nBaseValue, double n const double nCurrentValue = GetQuantizedValue( nBaseValue * nCurrentZoom, zoomSetting.m_nValueUnit ); const double nValueMin = std::min( {zoomSetting.m_nValueMin, nBaseValue, nCurrentValue} ); const double nValueMax = std::max( {zoomSetting.m_nValueMax, nBaseValue, nCurrentValue} ); - const int nIndexAddition = bZoomUp ? 1 : -1; - double nNextValue = nCurrentValue; - double nNextZoom = nCurrentZoom; - double nLastValue = nCurrentValue; - double nLastZoom = nCurrentZoom; - bool bFindingOneMoreChange = false; - - // 最小単位で丸めた後の値が変更前の値から変わらなければ - // 変わる位置までインデックスを動かしていく - nTableIndex += nSteps; - // 本当は無限ループで良いが万一の暴走回避のため有限回 - for( [[maybe_unused]] double _ : zoomSetting.m_vZoomFactors ){ - const bool bWithinRange = GetZoomedValueInIndex( zoomSetting, nBaseValue, nValueMin, nValueMax, nTableIndex, &nNextValue, &nNextZoom ); - const bool bValueChanged = (nNextValue != nCurrentValue); - bool bBreak = false; - if( bFindingOneMoreChange ){ - if( nNextValue != nLastValue || !bWithinRange ){ - nNextValue = nLastValue; - nNextZoom = nLastZoom; - bBreak = true; - } - }else if( !bWithinRange ){ - // インデックスまたは値が範囲外になったので終わる - bBreak = true; - }else if( bValueChanged && bZoomUp ){ - // 拡大方向は値が変わったらそこで確定 - bBreak = true; - }else if( bValueChanged && !bZoomUp ){ - // 縮小方向は一度値が変わった後もう一度値が変わる位置までインデックスを進めてから終わる - bFindingOneMoreChange = true; - }else{ - // 値が変化しなかったので次の段階へ - } - if( bBreak ){ break; } + const int nNextIndex = GetNextZoomIndex( zoomSetting, nBaseValue, nCurrentValue, nCurrentIndex, nSteps ); + double nNextZoom = zoomSetting.m_vZoomFactors[nNextIndex]; + double nNextValue = GetQuantizedValue( nBaseValue * nNextZoom, zoomSetting.m_nValueUnit ); - nLastValue = nNextValue; - nLastZoom = nNextZoom; - nTableIndex += nIndexAddition; + if( nNextValue < nValueMin || nValueMax < nNextValue ){ + // 値の上下限を超過していたら上下限に丸めて終わる + // 倍率は丸めた後のサイズで再計算 + nNextValue = std::clamp( nNextValue, nValueMin, nValueMax ); + if( nBaseValue != 0.0 ){ + nNextZoom = nNextValue / nBaseValue; + } } if( nCurrentValue == nNextValue ){ From 33b2556b58b0c81129b14d55c955ab39cb021a7a Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Fri, 5 Feb 2021 10:00:08 +0900 Subject: [PATCH 0419/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * インデックス取得関数を拡大・縮小で別にする * インデックスを探すループを通常のforに変更 --- sakura_core/util/zoom.cpp | 91 +++++++++++++++++++++------------------ 1 file changed, 48 insertions(+), 43 deletions(-) diff --git a/sakura_core/util/zoom.cpp b/sakura_core/util/zoom.cpp index f666d407b9..c0e1854c06 100644 --- a/sakura_core/util/zoom.cpp +++ b/sakura_core/util/zoom.cpp @@ -78,62 +78,62 @@ bool ZoomSetting::IsValid() const } /*! - @brief 移動量を反映したズーム倍率テーブルのインデックスを取得 + @brief 拡大方向の移動量を反映したズーム倍率テーブルのインデックスを取得 @param[in] zoomSetting ズーム設定 @param[in] nBaseValue 基準値 @param[in] nCurrentValue 現在値 @param[in] nCurrentIndex 現在値に対応するインデックス - @param[in] nSteps インデックスの移動量 + @param[in] nUpSteps インデックスの移動量(1以上であること) @return ズーム倍率テーブルのインデックス - @note 戻り値が false の場合においても pnValueOut, pnZoomOut にはそれぞれ範囲内に丸めた値が設定されます。 */ -[[nodiscard]] static int GetNextZoomIndex( const ZoomSetting& zoomSetting, double nBaseValue, double nCurrentValue, int nCurrentIndex, int nSteps ) +[[nodiscard]] static int GetZoomUpIndex( const ZoomSetting& zoomSetting, double nBaseValue, double nCurrentValue, int nCurrentIndex, int nUpSteps ) { - const bool bZoomUp = (0 < nSteps); - const int nIndexAddition = bZoomUp ? 1 : -1; + int nIndex = nCurrentIndex + nUpSteps; + const int nIndexMax = (int)zoomSetting.m_vZoomFactors.size() - 1; + for( ; nIndex < nIndexMax; ++nIndex ){ + double nNextValue = nBaseValue * zoomSetting.m_vZoomFactors[nIndex]; + nNextValue = GetQuantizedValue( nNextValue, zoomSetting.m_nValueUnit ); + if( nNextValue != nCurrentValue ){ + break; + } + } + + return std::min( nIndex, nIndexMax ); +} + +/*! + @brief 縮小方向の移動量を反映したズーム倍率テーブルのインデックスを取得 + @param[in] zoomSetting ズーム設定 + @param[in] nBaseValue 基準値 + @param[in] nCurrentValue 現在値 + @param[in] nCurrentIndex 現在値に対応するインデックス + @param[in] nDownSteps インデックスの移動量(1以上であること) + @return ズーム倍率テーブルのインデックス +*/ +[[nodiscard]] static int GetZoomDownIndex( const ZoomSetting& zoomSetting, double nBaseValue, double nCurrentValue, int nCurrentIndex, int nDownSteps ) +{ + int nIndex = nCurrentIndex - nDownSteps; double nLastValue = nCurrentValue; - int nNextIndex = nCurrentIndex + nSteps; - int nLastIndex = nNextIndex; bool bFindingOneMoreChange = false; - - // 最小単位で丸めた後の値が変更前の値から変わらなければ - // 変わる位置までインデックスを動かしていく - // 本当は無限ループで良いが万一の暴走回避のため有限回 - for( [[maybe_unused]] double _ : zoomSetting.m_vZoomFactors ){ - const int nClampedIndex = std::clamp( nNextIndex, 0, ((int)zoomSetting.m_vZoomFactors.size() - 1) ); - const bool bOutOfRange = (nClampedIndex != nNextIndex); - nNextIndex = nClampedIndex; - const double nNextZoom = zoomSetting.m_vZoomFactors[nNextIndex]; - const double nNextValue = GetQuantizedValue( nBaseValue * nNextZoom, zoomSetting.m_nValueUnit ); - - const bool bValueChanged = (nNextValue != nCurrentValue); - bool bBreak = false; - if( bFindingOneMoreChange ){ - if( nNextValue != nLastValue || bOutOfRange ){ - nNextIndex = nLastIndex; - bBreak = true; - } - }else if( bOutOfRange ){ - // インデックスが範囲外になったので終わる - bBreak = true; - }else if( bValueChanged && bZoomUp ){ - // 拡大方向は値が変わったらそこで確定 - bBreak = true; - }else if( bValueChanged && !bZoomUp ){ - // 縮小方向は一度値が変わった後もう一度値が変わる位置までインデックスを進めてから終わる + for( ; 0 <= nIndex; --nIndex ){ + double nValue = nBaseValue * zoomSetting.m_vZoomFactors[nIndex]; + nValue = GetQuantizedValue( nValue, zoomSetting.m_nValueUnit ); + if( bFindingOneMoreChange && nValue != nLastValue ){ + break; + }else if( nValue != nCurrentValue ){ + // もう一度値が変化するまでインデックスを進める bFindingOneMoreChange = true; + nLastValue = nValue; }else{ - // 値が変化しなかったので次の段階へ + // 値が変化しなかったので次へ } + } - if( bBreak ){ break; } - - nLastValue = nNextValue; - nLastIndex = nNextIndex; - nNextIndex += nIndexAddition; + if( bFindingOneMoreChange ){ + ++nIndex; } - return nNextIndex; + return std::max( 0, nIndex ); } /*! @@ -169,12 +169,17 @@ bool GetZoomedValue( const ZoomSetting& zoomSetting, double nBaseValue, double n const double nValueMin = std::min( {zoomSetting.m_nValueMin, nBaseValue, nCurrentValue} ); const double nValueMax = std::max( {zoomSetting.m_nValueMax, nBaseValue, nCurrentValue} ); - const int nNextIndex = GetNextZoomIndex( zoomSetting, nBaseValue, nCurrentValue, nCurrentIndex, nSteps ); + int nNextIndex; + if( bZoomUp ){ + nNextIndex = GetZoomUpIndex( zoomSetting, nBaseValue, nCurrentValue, nCurrentIndex, nSteps ); + }else{ + nNextIndex = GetZoomDownIndex( zoomSetting, nBaseValue, nCurrentValue, nCurrentIndex, -nSteps ); + } double nNextZoom = zoomSetting.m_vZoomFactors[nNextIndex]; double nNextValue = GetQuantizedValue( nBaseValue * nNextZoom, zoomSetting.m_nValueUnit ); if( nNextValue < nValueMin || nValueMax < nNextValue ){ - // 値の上下限を超過していたら上下限に丸めて終わる + // 値の上下限を超過していたら上下限で丸める // 倍率は丸めた後のサイズで再計算 nNextValue = std::clamp( nNextValue, nValueMin, nValueMax ); if( nBaseValue != 0.0 ){ From 7cc9f004a4a4b791250eb88ca330e853499cbe71 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Mon, 8 Feb 2021 13:40:45 +0900 Subject: [PATCH 0420/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ズーム設定の正当性判定関数をtest-zoom.cppに移動する --- sakura_core/util/zoom.cpp | 10 ---------- sakura_core/util/zoom.h | 2 -- tests/unittests/test-zoom.cpp | 20 +++++++++++++++----- 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/sakura_core/util/zoom.cpp b/sakura_core/util/zoom.cpp index c0e1854c06..a94c3ae2ce 100644 --- a/sakura_core/util/zoom.cpp +++ b/sakura_core/util/zoom.cpp @@ -28,16 +28,6 @@ #include #include -/*! - @brief 設定値の正当性判定 -*/ -bool ZoomSetting::IsValid() const -{ - return (m_nValueMin <= m_nValueMax) - && (0.0 <= m_nValueUnit) - && std::is_sorted( m_vZoomFactors.begin(), m_vZoomFactors.end() ); -} - /*! @brief 値テーブル上における指定値の位置を取得 @param[in] vTable 値テーブル diff --git a/sakura_core/util/zoom.h b/sakura_core/util/zoom.h index 1cc1a6c1b9..7da84df097 100644 --- a/sakura_core/util/zoom.h +++ b/sakura_core/util/zoom.h @@ -59,8 +59,6 @@ struct ZoomSetting const double m_nValueMin; const double m_nValueMax; const double m_nValueUnit; - - [[nodiscard]] bool IsValid() const; }; bool GetZoomedValue( const ZoomSetting& zoomSetting, double nBaseValue, double nCurrentZoom, int nSteps, double* pnValueOut, double* pnZoomOut ); diff --git a/tests/unittests/test-zoom.cpp b/tests/unittests/test-zoom.cpp index 15aece2a14..826d0f2bc9 100644 --- a/tests/unittests/test-zoom.cpp +++ b/tests/unittests/test-zoom.cpp @@ -25,25 +25,35 @@ #include #include "util/zoom.h" +/*! + @brief 設定値の正当性判定 +*/ +bool ZoomSettingIsValid( const ZoomSetting& zoomSetting ) +{ + return (zoomSetting.m_nValueMin <= zoomSetting.m_nValueMax) + && (0.0 <= zoomSetting.m_nValueUnit) + && std::is_sorted( zoomSetting.m_vZoomFactors.begin(), zoomSetting.m_vZoomFactors.end() ); +} + /*! * @brief ZoomSetting構造体のテスト */ TEST( zoom, ZoomSetting ) { // 不正な引数 - テーブルが昇順になっていない - EXPECT_EQ( false, ZoomSetting( {0.0, 2.0, 1.0}, 0.0, 0.0, 1.0 ).IsValid() ); + EXPECT_EQ( false, ZoomSettingIsValid( ZoomSetting( {0.0, 2.0, 1.0}, 0.0, 0.0, 1.0 ) ) ); // 不正な引数 - 最大最小があべこべ - EXPECT_EQ( false, ZoomSetting( {1.0}, 1.0, 0.0, 1.0 ).IsValid() ); + EXPECT_EQ( false, ZoomSettingIsValid( ZoomSetting( {1.0}, 1.0, 0.0, 1.0 ) ) ); // 不正な引数 - 解像度が負数 - EXPECT_EQ( false, ZoomSetting( {1.0}, 0.0, 0.0, -1.0 ).IsValid() ); + EXPECT_EQ( false, ZoomSettingIsValid( ZoomSetting( {1.0}, 0.0, 0.0, -1.0 ) ) ); // 正しい引数 - テーブルに同一値が含まれる - EXPECT_EQ( true, ZoomSetting( {0.0, 1.0, 1.0, 2.0}, 0.0, 0.0, 1.0 ).IsValid() ); + EXPECT_EQ( true, ZoomSettingIsValid( ZoomSetting( {0.0, 1.0, 1.0, 2.0}, 0.0, 0.0, 1.0 ) ) ); // 正しい引数 - 解像度が0 - EXPECT_EQ( true, ZoomSetting( {0.0}, 0.0, 0.0, 0.0 ).IsValid() ); + EXPECT_EQ( true, ZoomSettingIsValid( ZoomSetting( {0.0}, 0.0, 0.0, 0.0 ) ) ); } /*! From 45f601a42e60d7e4c39ef24c37509b7bad640fe3 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Mon, 8 Feb 2021 14:08:13 +0900 Subject: [PATCH 0421/1024] =?UTF-8?q?=E8=B5=B7=E5=8B=95=E6=99=82=E5=AE=9F?= =?UTF-8?q?=E8=A1=8C=E3=83=9E=E3=82=AF=E3=83=AD=E3=81=8C=E5=AE=9F=E8=A1=8C?= =?UTF-8?q?=E3=81=95=E3=82=8C=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=99?= =?UTF-8?q?=E3=82=8B(=E6=9A=AB=E5=AE=9A)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-winmain.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/unittests/test-winmain.cpp b/tests/unittests/test-winmain.cpp index 7c09a9fa05..3786a9f7f3 100644 --- a/tests/unittests/test-winmain.cpp +++ b/tests/unittests/test-winmain.cpp @@ -277,6 +277,9 @@ TEST_F( WinMainTest, runEditorProcess ) // コントロールプロセスの初期化完了を待つ CControlProcess_WaitForInitialized( szProfileName ); + // 起動時実行マクロが全部実行し終わるのを待つ + ::Sleep( 10000 ); + // コントロールプロセスに終了指示を出して終了を待つ CControlProcess_Terminate( szProfileName ); }); @@ -315,7 +318,6 @@ TEST_F( WinMainTest, runEditorProcess ) strStartupMacro += L"SetFontSize(0, -9999, 2);";// 相対指定 - 限界まで縮小 strStartupMacro += L"SetFontSize(10, 0, 2);"; // 元に戻す // フォントサイズ設定のテスト(ここまで) - strStartupMacro += L"ExitAll();"; //NOTE: このコマンドにより、エディタプロセスは起動された直後に終了する。 // コマンドラインを組み立てる std::wstring strCommandLine( _T(__FILE__) L" -MTYPE=js" ); From aa25ffa166da9dcd6e7c21e4b0f3e25d39954cd5 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Mon, 8 Feb 2021 14:10:01 +0900 Subject: [PATCH 0422/1024] =?UTF-8?q?CViewCommander::Command=5FSETFONTSIZE?= =?UTF-8?q?=E3=81=AE=E3=83=86=E3=82=B9=E3=83=88=E3=82=AB=E3=83=90=E3=83=AC?= =?UTF-8?q?=E3=83=83=E3=82=B8=E6=94=B9=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * mode=2でフォントサイズが変更されないパスを通るマクロを追加 * SetFontSizeの第一引数が1/10pt単位になっていなかったのを修正 --- sakura_core/cmd/CViewCommander_Settings.cpp | 8 -------- tests/unittests/test-winmain.cpp | 12 +++++++----- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/sakura_core/cmd/CViewCommander_Settings.cpp b/sakura_core/cmd/CViewCommander_Settings.cpp index 47fdfc4d67..d22b33e89f 100644 --- a/sakura_core/cmd/CViewCommander_Settings.cpp +++ b/sakura_core/cmd/CViewCommander_Settings.cpp @@ -286,9 +286,6 @@ void CViewCommander::Command_SETFONTSIZE( int fontSize, int shift, int mode ) return; } - const int nCurrentPointSize = (mode == 0) ? - GetDllShareData().m_Common.m_sView.m_nPointSize : - GetEditWindow()->GetFontPointSize( mode == 2 ); const int nOriginalPointSize = GetEditWindow()->GetFontPointSize( false ); double nCurrentZoom = (mode == 2 && GetDocument()->m_blfCurTemp) ? GetDocument()->m_nCurrentZoom : 1.0; int nPointSize; @@ -304,11 +301,6 @@ void CViewCommander::Command_SETFONTSIZE( int fontSize, int shift, int mode ) return; } nPointSize = (int)nPointSizeF; - - // フォントサイズが変わらないなら終了 - if( nPointSize == nCurrentPointSize ){ - return; - } }else{ // フォントサイズが変わらないので終了 return; diff --git a/tests/unittests/test-winmain.cpp b/tests/unittests/test-winmain.cpp index 3786a9f7f3..f4279c1956 100644 --- a/tests/unittests/test-winmain.cpp +++ b/tests/unittests/test-winmain.cpp @@ -305,18 +305,20 @@ TEST_F( WinMainTest, runEditorProcess ) strStartupMacro += L"ShowTab();"; //ShowTab 消す strStartupMacro += L"ExpandParameter('$I');"; // INIファイルパスの取得(呼ぶだけ) // フォントサイズ設定のテスト(ここから) - strStartupMacro += L"SetFontSize(10, 0, 0);"; // 直接指定 - 対象:共通設定 - strStartupMacro += L"SetFontSize(10, 0, 1);"; // 直接指定 - 対象:タイプ別設定 - strStartupMacro += L"SetFontSize(10, 0, 2);"; // 直接指定 - 対象:一時適用 - strStartupMacro += L"SetFontSize(10, 0, 3);"; // 直接指定 - 対象が不正 + strStartupMacro += L"SetFontSize(100, 0, 0);"; // 直接指定 - 対象:共通設定 + strStartupMacro += L"SetFontSize(100, 0, 1);"; // 直接指定 - 対象:タイプ別設定 + strStartupMacro += L"SetFontSize(100, 0, 2);"; // 直接指定 - 対象:一時適用 + strStartupMacro += L"SetFontSize(100, 0, 3);"; // 直接指定 - 対象が不正 strStartupMacro += L"SetFontSize(0, 0, 0);"; // 直接指定 - フォントサイズ下限未満 strStartupMacro += L"SetFontSize(9999, 0, 0);"; // 直接指定 - フォントサイズ上限超過 strStartupMacro += L"SetFontSize(0, 0, 2);"; // 相対指定 - サイズ変化なし strStartupMacro += L"SetFontSize(0, 1, 2);"; // 相対指定 - 拡大 strStartupMacro += L"SetFontSize(0, -1, 2);"; // 相対指定 - 縮小 strStartupMacro += L"SetFontSize(0, 9999, 2);"; // 相対指定 - 限界まで拡大 + strStartupMacro += L"SetFontSize(0, 1, 2);"; // 相対指定 - これ以上拡大できない strStartupMacro += L"SetFontSize(0, -9999, 2);";// 相対指定 - 限界まで縮小 - strStartupMacro += L"SetFontSize(10, 0, 2);"; // 元に戻す + strStartupMacro += L"SetFontSize(0, -1, 2);"; // 相対指定 - これ以上縮小できない + strStartupMacro += L"SetFontSize(100, 0, 2);"; // 元に戻す // フォントサイズ設定のテスト(ここまで) // コマンドラインを組み立てる From 63ae6f220bc1c19b55935235e5c3dfa77ccfd5fb Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Tue, 9 Feb 2021 01:44:24 +0900 Subject: [PATCH 0423/1024] =?UTF-8?q?sakura.ini=E3=81=8C=E3=81=AA=E3=81=84?= =?UTF-8?q?=E7=8A=B6=E6=85=8B=E3=81=A7=E8=B5=B7=E5=8B=95=E3=81=97=E3=81=9F?= =?UTF-8?q?=E6=99=82=E3=81=AB=E3=83=9E=E3=82=A6=E3=82=B9=E3=83=9B=E3=82=A4?= =?UTF-8?q?=E3=83=BC=E3=83=AB=E3=81=A7=E3=83=95=E3=82=A9=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=82=B5=E3=82=A4=E3=82=BA=E3=81=8C=E5=A4=89=E6=9B=B4=E3=81=A7?= =?UTF-8?q?=E3=81=8D=E3=81=AA=E3=81=84=E5=95=8F=E9=A1=8C=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/cmd/CViewCommander_Settings.cpp | 8 +++++++- tests/unittests/test-winmain.cpp | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/sakura_core/cmd/CViewCommander_Settings.cpp b/sakura_core/cmd/CViewCommander_Settings.cpp index d22b33e89f..dc389dd370 100644 --- a/sakura_core/cmd/CViewCommander_Settings.cpp +++ b/sakura_core/cmd/CViewCommander_Settings.cpp @@ -296,8 +296,14 @@ void CViewCommander::Command_SETFONTSIZE( int fontSize, int shift, int mode ) nCurrentZoom = 1.0; }else if( 0 != shift ){ // 現在のフォントに対して、縮小or拡大したフォント選択する場合 + double nBasePointSizeF = nOriginalPointSize; + if( nBasePointSizeF == 0.0 ){ + // 基準値が無効値の時はLOGFONTのサイズから逆算 + const LOGFONT& lfBase = (mode == 0) ? GetDllShareData().m_Common.m_sView.m_lf : GetEditWindow()->GetLogfont( false ); + nBasePointSizeF = (lfBase.lfHeight != 0) ? (std::abs( DpiPixelsToPoints( lfBase.lfHeight ) ) * 10.0) : nPointSizeMin; + } double nPointSizeF = 0.0; - if( !GetZoomedValue( zoomSetting, nOriginalPointSize, nCurrentZoom, shift, &nPointSizeF, &nCurrentZoom ) ){ + if( !GetZoomedValue( zoomSetting, nBasePointSizeF, nCurrentZoom, shift, &nPointSizeF, &nCurrentZoom ) ){ return; } nPointSize = (int)nPointSizeF; diff --git a/tests/unittests/test-winmain.cpp b/tests/unittests/test-winmain.cpp index f4279c1956..4ffb6364e2 100644 --- a/tests/unittests/test-winmain.cpp +++ b/tests/unittests/test-winmain.cpp @@ -305,6 +305,8 @@ TEST_F( WinMainTest, runEditorProcess ) strStartupMacro += L"ShowTab();"; //ShowTab 消す strStartupMacro += L"ExpandParameter('$I');"; // INIファイルパスの取得(呼ぶだけ) // フォントサイズ設定のテスト(ここから) + strStartupMacro += L"SetFontSize(0, 1, 0);"; // 相対指定 - 拡大 - 対象:共通設定 + strStartupMacro += L"SetFontSize(0, -1, 0);"; // 相対指定 - 縮小 - 対象:共通設定 strStartupMacro += L"SetFontSize(100, 0, 0);"; // 直接指定 - 対象:共通設定 strStartupMacro += L"SetFontSize(100, 0, 1);"; // 直接指定 - 対象:タイプ別設定 strStartupMacro += L"SetFontSize(100, 0, 2);"; // 直接指定 - 対象:一時適用 From 41a916d9b0655b7531e3d944e1c1ee5e1c44011c Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Thu, 11 Feb 2021 01:19:16 +0900 Subject: [PATCH 0424/1024] =?UTF-8?q?.vcxproj.filters=E3=81=AE=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=A4=E3=83=AB=E6=9C=AB=E5=B0=BE=E6=94=B9=E8=A1=8C?= =?UTF-8?q?=E3=82=92=E5=89=8A=E9=99=A4=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .editorconfig | 4 ++++ sakura/sakura.vcxproj.filters | 2 +- tests/unittests/tests1.vcxproj.filters | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.editorconfig b/.editorconfig index 91b23ebcc0..8f46b384d5 100644 --- a/.editorconfig +++ b/.editorconfig @@ -15,3 +15,7 @@ indent_size = 2 # mdファイルの行末スペースには意味があるので削らない trim_trailing_whitespace = false + +[*.{vcxproj,vcxproj.filters}] +# ファイル末尾に改行を追加しない +insert_final_newline = false diff --git a/sakura/sakura.vcxproj.filters b/sakura/sakura.vcxproj.filters index 63f95a86cc..5d7697408d 100644 --- a/sakura/sakura.vcxproj.filters +++ b/sakura/sakura.vcxproj.filters @@ -2326,4 +2326,4 @@ - + \ No newline at end of file diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index e263ae5f69..533954a379 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -110,4 +110,4 @@ Other Files - + \ No newline at end of file From 9f80486fb0d324ec16643beb78487f56d4905683 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 7 Feb 2021 23:17:11 +0900 Subject: [PATCH 0425/1024] =?UTF-8?q?winmaintest=E3=82=92=E3=83=91?= =?UTF-8?q?=E3=83=A9=E3=83=A1=E3=83=BC=E3=82=BF=E3=83=86=E3=82=B9=E3=83=88?= =?UTF-8?q?=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-winmain.cpp | 59 +++++++++++++++++++++++++------- 1 file changed, 46 insertions(+), 13 deletions(-) diff --git a/tests/unittests/test-winmain.cpp b/tests/unittests/test-winmain.cpp index f4279c1956..e87e32befe 100644 --- a/tests/unittests/test-winmain.cpp +++ b/tests/unittests/test-winmain.cpp @@ -38,6 +38,7 @@ #include #include #include +#include #include #include "config/maxdata.h" @@ -48,6 +49,8 @@ #include "env/DLLSHAREDATA.h" #include "util/file.h" #include "config/system_constants.h" +#include "_main/CCommandLine.h" +#include "_main/CControlProcess.h" #include "StartEditorProcessForTest.h" @@ -74,7 +77,7 @@ typedef std::unique_ptr::type, handle_closer> handle * 始動前に設定ファイルを削除するようにしている。 * テスト実行後に設定ファイルを残しておく意味はないので終了後も削除している。 */ -class WinMainTest : public ::testing::Test { +class WinMainTest : public ::testing::TestWithParam { protected: /*! * 設定ファイルのパス @@ -87,13 +90,27 @@ class WinMainTest : public ::testing::Test { * テストが起動される直前に毎回呼ばれる関数 */ void SetUp() override { + // テスト用プロファイル名 + const std::wstring_view profileName(GetParam()); + + // コマンドラインのグローバル変数をセットする + auto &commandLine = *CCommandLine::getInstance(); + const auto strCommandLine = strprintf(LR"(-PROF="%s")", profileName.data()); + commandLine.ParseCommandLine(strCommandLine.data(), false); + + // プロセスのインスタンスを用意する + CControlProcess dummy(nullptr, strCommandLine.data()); + // INIファイルのパスを取得 iniPath = GetIniFileName(); - if( fexist( iniPath.c_str() ) ){ - // INIファイルを削除する - std::filesystem::remove( iniPath ); + // INIファイルを削除する + if (fexist(iniPath.c_str())) { + std::filesystem::remove(iniPath); } + + // コマンドラインのグローバル変数を元に戻す + commandLine.ParseCommandLine(L"", false); } /*! @@ -101,7 +118,14 @@ class WinMainTest : public ::testing::Test { */ void TearDown() override { // INIファイルを削除する - std::filesystem::remove( iniPath ); + if (fexist(iniPath.c_str())) { + std::filesystem::remove(iniPath); + } + + // プロファイル指定がある場合、フォルダも削除しておく + if (const std::wstring_view profileName(GetParam()); profileName.length() > 0) { + std::filesystem::remove(iniPath.parent_path()); + } } }; @@ -234,10 +258,10 @@ void CControlProcess_Terminate( LPCWSTR lpszProfileName ) * プログラムが起動する正常ルートに潜む障害を検出するためのもの。 * コントロールプロセスを実行する。 */ -TEST_F( WinMainTest, runWithNoWin ) +TEST_P(WinMainTest, runWithNoWin) { // テスト用プロファイル名 - constexpr auto szProfileName = L""; + const auto szProfileName(GetParam()); // コントロールプロセスを起動する CControlProcess_Start( szProfileName ); @@ -254,16 +278,19 @@ TEST_F( WinMainTest, runWithNoWin ) * プログラムが起動する正常ルートに潜む障害を検出するためのもの。 * エディタプロセスを実行する。 */ -TEST_F( WinMainTest, runEditorProcess ) +TEST_P(WinMainTest, runEditorProcess) { + // テスト用プロファイル名 + const auto szProfileName(GetParam()); + // エディタプロセスを起動するため、テスト実行はプロセスごと分離して行う - auto separatedTestProc = [] { + auto separatedTestProc = [szProfileName]() { std::mutex mtx; std::condition_variable cv; bool initialized = false; // エディタプロセスが起動したコントロールプロセスの終了を待機するスレッド - auto waitingThread = std::thread([&mtx, &cv, &initialized] { + auto waitingThread = std::thread([&mtx, &cv, &initialized, szProfileName] { // 初期化 { std::unique_lock lock( mtx ); @@ -271,9 +298,6 @@ TEST_F( WinMainTest, runEditorProcess ) cv.notify_one(); } - // テスト用プロファイル名 - constexpr auto szProfileName = L""; - // コントロールプロセスの初期化完了を待つ CControlProcess_WaitForInitialized( szProfileName ); @@ -342,3 +366,12 @@ TEST_F( WinMainTest, runEditorProcess ) // コントロールプロセスが終了すると、INIファイルが作成される ASSERT_TRUE( fexist( iniPath.c_str() ) ); } + +/*! + * @brief パラメータテストをインスタンス化する + * プロファイル指定なしとプロファイル指定ありの2パターンで実体化させる + */ +INSTANTIATE_TEST_CASE_P(ParameterizedTestWinMain + , WinMainTest + , ::testing::Values(L"", L"profile1") +); From 053fcc211e3562f44b0771c1e7c7f7e5c25ff726 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 8 Feb 2021 00:17:53 +0900 Subject: [PATCH 0426/1024] =?UTF-8?q?=E3=82=B3=E3=83=B3=E3=83=88=E3=83=AD?= =?UTF-8?q?=E3=83=BC=E3=83=AB=E3=83=97=E3=83=AD=E3=82=BB=E3=82=B9=E3=81=AE?= =?UTF-8?q?=E8=B5=B7=E5=8B=95=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E4=BA=8C?= =?UTF-8?q?=E9=87=8D=E5=8C=96=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-winmain.cpp | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/tests/unittests/test-winmain.cpp b/tests/unittests/test-winmain.cpp index e87e32befe..21524a3b52 100644 --- a/tests/unittests/test-winmain.cpp +++ b/tests/unittests/test-winmain.cpp @@ -253,24 +253,40 @@ void CControlProcess_Terminate( LPCWSTR lpszProfileName ) } } +/*! + * @brief コントロールプロセスを起動し、終了指示を出して、終了を待つ + */ +void CControlProcess_StartAndTerminate(std::wstring_view profileName) +{ + // コントロールプロセスを起動する + CControlProcess_Start(profileName.data()); + + // コントロールプロセスに終了指示を出して終了を待つ + CControlProcess_Terminate(profileName.data()); +} + /*! * @brief wWinMainを起動してみるテスト * プログラムが起動する正常ルートに潜む障害を検出するためのもの。 * コントロールプロセスを実行する。 + * プロセス起動は2回行い、1回目でINI作成&書き込み、2回目でINI読み取りを検証する。 */ TEST_P(WinMainTest, runWithNoWin) { // テスト用プロファイル名 const auto szProfileName(GetParam()); - // コントロールプロセスを起動する - CControlProcess_Start( szProfileName ); + // コントロールプロセスを起動し、終了指示を出して、終了を待つ + CControlProcess_StartAndTerminate(szProfileName); - // コントロールプロセスに終了指示を出して終了を待つ - CControlProcess_Terminate( szProfileName ); + // コントロールプロセスが終了すると、INIファイルが作成される + ASSERT_TRUE(fexist(iniPath.c_str())); + + // コントロールプロセスを起動し、終了指示を出して、終了を待つ + CControlProcess_StartAndTerminate(szProfileName); // コントロールプロセスが終了すると、INIファイルが作成される - ASSERT_TRUE( fexist( iniPath.c_str() ) ); + ASSERT_TRUE(fexist(iniPath.c_str())); } /*! From 4f7087e1045aa0e1a6396d79bdd8881105221587 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Thu, 11 Feb 2021 15:46:54 +0900 Subject: [PATCH 0427/1024] =?UTF-8?q?runEditorProcess=E3=81=AE=E5=AE=9F?= =?UTF-8?q?=E6=96=BD=E6=96=B9=E6=B3=95=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/StartEditorProcessForTest.h | 9 +-- tests/unittests/code-main.cpp | 65 ++++++++------------- tests/unittests/test-winmain.cpp | 56 +++++------------- 3 files changed, 40 insertions(+), 90 deletions(-) diff --git a/tests/unittests/StartEditorProcessForTest.h b/tests/unittests/StartEditorProcessForTest.h index 23d532b5b3..16c84c9472 100644 --- a/tests/unittests/StartEditorProcessForTest.h +++ b/tests/unittests/StartEditorProcessForTest.h @@ -24,13 +24,6 @@ */ #pragma once -#ifndef NOMINMAX -#define NOMINMAX -#endif /* #ifndef NOMINMAX */ - -#include -#include - #include /*! @@ -45,4 +38,4 @@ * googletestでは、ASSERT_EXITで起動したプロセスの完全な終了を待機できないようです。 * コントロールプロセスが終了する前に他のテストが実行されると期待した動作にならない場合があります。 */ -int StartEditorProcessForTest( const std::wstring_view& strCommandLine ); +int StartEditorProcessForTest(std::wstring_view commandLine); diff --git a/tests/unittests/code-main.cpp b/tests/unittests/code-main.cpp index cf801bdac7..f67ebaad56 100644 --- a/tests/unittests/code-main.cpp +++ b/tests/unittests/code-main.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #include "debug/Debug2.h" #include "StartEditorProcessForTest.h" @@ -44,25 +45,31 @@ * テストコード専用wWinMain呼出のラッパー関数 * * 単体テストから wWinMain を呼び出すためのラッパー関数です。 - * - * コマンドラインでプロファイルが指定されていない場合、空指定を付加します。 + * コマンドラインには -PROF 指定が含まれている必要があります。 */ -int StartEditorProcessForTest( const std::wstring_view& strCommandLine ) +int StartEditorProcessForTest(std::wstring_view commandLine) { - // 実行中モジュールのインスタンスハンドルを取得する - HINSTANCE hInstance = ::GetModuleHandle( NULL ); + HINSTANCE hInstance = ::GetModuleHandleW(nullptr); - // WinMainを起動するためのコマンドラインを組み立てる - std::wstring strCmdBuff( strCommandLine ); + // WinMainに渡すためのコマンドライン + std::wstring strCommandLine(commandLine); - // コマンドラインに -PROF 指定がない場合は付加する - if( !std::regex_search( strCmdBuff, std::wregex( L"-PROF\\b", std::wregex::icase ) ) ){ - strCmdBuff += L" -PROF=\"\""; + // コマンドラインに -PROF 指定がない場合は例外を投げて異常終了させる + if (!std::regex_search(strCommandLine, std::wregex(LR"(-PROF\b)", std::wregex::icase))) { + throw std::runtime_error("profileName is missing.."); } + // ログ出力 + printf("%s(%d): launching process [%ls]\n", __FILE__, __LINE__, strCommandLine.c_str()); + // wWinMainを起動する - return wWinMain( hInstance, NULL, &*strCmdBuff.begin(), SW_SHOWDEFAULT ); + const int ret = wWinMain(hInstance, nullptr, strCommandLine.data(), SW_SHOWDEFAULT); + + // ログ出力(途中でexitした場合は出力されない) + printf("%s(%d): leaving process [%ls] => %d\n", __FILE__, __LINE__, strCommandLine.c_str(), ret); + + return ret; } /*! @@ -71,47 +78,23 @@ int StartEditorProcessForTest( const std::wstring_view& strCommandLine ) * コマンドラインに -PROF 指定がない場合、呼出元に制御を返す。 * コマンドラインに -PROF 指定がある場合、wWinMainを呼出してプログラムを終了する。 */ -static void InvokeWinMainIfNeeded( char** ppArgsBegin, char** ppArgsEnd ) +static void InvokeWinMainIfNeeded(std::wstring_view commandLine) { // コマンドライン引数がない場合 - if( ppArgsBegin == ppArgsEnd ){ + if (commandLine.empty()) { return; } // コマンドラインに -PROF 指定がない場合 - if( ppArgsEnd == std::find_if( ppArgsBegin, ppArgsEnd, []( const char* arg ){ return std::regex_search( arg, std::regex( "-PROF\\b", std::regex::icase ) ); } ) ){ + if (!std::regex_search(commandLine.data(), std::wregex(LR"(-PROF\b)", std::wregex::icase))) { return; } - // 最初の引数はプログラム名なので無視する - ppArgsBegin++; - - // wWinMainを起動するためのコマンドラインを組み立てる(バッファ長はざっくり定義。) - wchar_t szCmdBuf[4096]; - std::wstring strCommandLine; - std::for_each( ppArgsBegin, ppArgsEnd, [&strCommandLine, &szCmdBuf]( const auto* arg ){ - ::swprintf_s( szCmdBuf, L"%hs ", arg ); - strCommandLine += szCmdBuf; - } ); - - // 末尾の空白を削る(引数0個はここに来ないのでチェックしない) - strCommandLine.assign( strCommandLine.data(), strCommandLine.length() - 1 ); - - // 実行中モジュールのインスタンスハンドルを取得する - HINSTANCE hInstance = ::GetModuleHandleW( NULL ); - - // ログ出力 - WCHAR *pszCommandLine = &*strCommandLine.begin(); - printf( "%s(%d): launching process [%ls]\n", __FILE__, __LINE__, pszCommandLine ); - // wWinMainを起動する - int ret = wWinMain( hInstance, NULL, pszCommandLine, SW_SHOWDEFAULT ); - - // ログ出力(途中でexitした場合は出力されない) - printf( "%s(%d): leaving process [%ls] => %d\n", __FILE__, __LINE__, pszCommandLine, ret ); + const int ret = StartEditorProcessForTest(commandLine); // プログラムを終了する(呼出元に制御は返らない) - exit( ret ); + exit(ret); } /*! @@ -119,7 +102,7 @@ static void InvokeWinMainIfNeeded( char** ppArgsBegin, char** ppArgsEnd ) */ int main(int argc, char **argv) { // コマンドラインに -PROF 指定がある場合、wWinMainを起動して終了する。 - InvokeWinMainIfNeeded( argv, argv + argc ); + InvokeWinMainIfNeeded(::GetCommandLineW()); // WinMainを起動しない場合、標準のgtest_main同様の処理を実行する printf("Running main() from %s\n", __FILE__); diff --git a/tests/unittests/test-winmain.cpp b/tests/unittests/test-winmain.cpp index 21524a3b52..d25af7623d 100644 --- a/tests/unittests/test-winmain.cpp +++ b/tests/unittests/test-winmain.cpp @@ -212,16 +212,17 @@ void CControlProcess_Start( LPCWSTR lpszProfileName ) * CControlProcess::Terminateとして実装したいコードです。本体を変えたくないので一時定義しました。 * 既存コードに該当する処理はありません。 */ -void CControlProcess_Terminate( LPCWSTR lpszProfileName ) +void CControlProcess_Terminate(std::wstring_view profileName) { // トレイウインドウを検索する std::wstring strCEditAppName( GSTR_CEDITAPP ); - if( lpszProfileName && lpszProfileName[0] ){ - strCEditAppName += lpszProfileName; + if (profileName.length() > 0) { + strCEditAppName += profileName; } HWND hTrayWnd = ::FindWindow( strCEditAppName.data(), strCEditAppName.data() ); if( !hTrayWnd ){ - throw std::runtime_error( "tray window is not found." ); + // ウインドウがなければそのまま抜ける + return; } // トレイウインドウからプロセスIDを取得する @@ -301,33 +302,6 @@ TEST_P(WinMainTest, runEditorProcess) // エディタプロセスを起動するため、テスト実行はプロセスごと分離して行う auto separatedTestProc = [szProfileName]() { - std::mutex mtx; - std::condition_variable cv; - bool initialized = false; - - // エディタプロセスが起動したコントロールプロセスの終了を待機するスレッド - auto waitingThread = std::thread([&mtx, &cv, &initialized, szProfileName] { - // 初期化 - { - std::unique_lock lock( mtx ); - initialized = true; - cv.notify_one(); - } - - // コントロールプロセスの初期化完了を待つ - CControlProcess_WaitForInitialized( szProfileName ); - - // 起動時実行マクロが全部実行し終わるのを待つ - ::Sleep( 10000 ); - - // コントロールプロセスに終了指示を出して終了を待つ - CControlProcess_Terminate( szProfileName ); - }); - - // スレッドの初期化完了を待機する - std::unique_lock lock( mtx ); - cv.wait(lock, [&initialized] { return initialized; }); - // 起動時実行マクロの中身を作る std::wstring strStartupMacro; strStartupMacro += L"Down();"; @@ -360,24 +334,24 @@ TEST_P(WinMainTest, runEditorProcess) strStartupMacro += L"SetFontSize(0, -1, 2);"; // 相対指定 - これ以上縮小できない strStartupMacro += L"SetFontSize(100, 0, 2);"; // 元に戻す // フォントサイズ設定のテスト(ここまで) + strStartupMacro += L"ExitAll();"; //NOTE: このコマンドにより、エディタプロセスは起動された直後に終了する。 // コマンドラインを組み立てる - std::wstring strCommandLine( _T(__FILE__) L" -MTYPE=js" ); - strCommandLine += L" -M=\""s; - strCommandLine += std::regex_replace( strStartupMacro, std::wregex( L"\"" ), L"\"\"" ); - strCommandLine += L"\""s; + std::wstring strCommandLine(_T(__FILE__)); + strCommandLine += strprintf(LR"( -PROF="%s")", szProfileName); + strCommandLine += strprintf(LR"( -MTYPE=js -M="%s")", std::regex_replace( strStartupMacro, std::wregex( L"\"" ), L"\"\"" ).c_str()); // エディタプロセスを起動する - StartEditorProcessForTest( strCommandLine ); + const int ret = StartEditorProcessForTest(strCommandLine); - // エディタ終了を待機する - if( waitingThread.joinable() ){ - waitingThread.join(); - } + exit(ret); }; // テストプログラム内のグローバル変数を汚さないために、別プロセスで起動させる - ASSERT_EXIT({ separatedTestProc(); exit(0); }, ::testing::ExitedWithCode(0), ".*" ); + ASSERT_EXIT({ separatedTestProc(); }, ::testing::ExitedWithCode(0), ".*" ); + + // コントロールプロセスに終了指示を出して終了を待つ + CControlProcess_Terminate(szProfileName); // コントロールプロセスが終了すると、INIファイルが作成される ASSERT_TRUE( fexist( iniPath.c_str() ) ); From 428d7db73170e2abcad27c1e9ee785d7d6fd01ed Mon Sep 17 00:00:00 2001 From: berryzplus Date: Thu, 11 Feb 2021 19:01:46 +0900 Subject: [PATCH 0428/1024] =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=B3?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=81=AE=E3=83=AA=E3=83=95=E3=82=A1=E3=82=AF?= =?UTF-8?q?=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/code-main.cpp | 34 +++++++++++++++++--------------- tests/unittests/test-winmain.cpp | 27 ++++++++++++++----------- 2 files changed, 33 insertions(+), 28 deletions(-) diff --git a/tests/unittests/code-main.cpp b/tests/unittests/code-main.cpp index f67ebaad56..015f4a4685 100644 --- a/tests/unittests/code-main.cpp +++ b/tests/unittests/code-main.cpp @@ -33,12 +33,13 @@ #include #include -#include +#include #include #include #include -#include "debug/Debug2.h" +#include "basis/primitive.h" +#include "util/string_ex.h" #include "StartEditorProcessForTest.h" /*! @@ -49,25 +50,26 @@ */ int StartEditorProcessForTest(std::wstring_view commandLine) { - // 実行中モジュールのインスタンスハンドルを取得する - HINSTANCE hInstance = ::GetModuleHandleW(nullptr); + //戻り値は0が正常。適当なエラー値を指定しておく。 + int ret = -1; - // WinMainに渡すためのコマンドライン - std::wstring strCommandLine(commandLine); + // コマンドラインに -PROF 指定がない場合は異常終了させる + if (std::regex_search(commandLine.data(), std::wregex(LR"(-PROF\b)", std::wregex::icase))) { + // 実行中モジュールのインスタンスハンドルを取得する + HINSTANCE hInstance = ::GetModuleHandleW(nullptr); - // コマンドラインに -PROF 指定がない場合は例外を投げて異常終了させる - if (!std::regex_search(strCommandLine, std::wregex(LR"(-PROF\b)", std::wregex::icase))) { - throw std::runtime_error("profileName is missing.."); - } + // WinMainに渡すためのコマンドライン + std::wstring strCommandLine(commandLine); - // ログ出力 - printf("%s(%d): launching process [%ls]\n", __FILE__, __LINE__, strCommandLine.c_str()); + // ログ出力 + std::wcout << strprintf(L"%hs(%d): launching process [%s]", __FILE__, __LINE__, commandLine.data()) << std::endl; - // wWinMainを起動する - const int ret = wWinMain(hInstance, nullptr, strCommandLine.data(), SW_SHOWDEFAULT); + // wWinMainを起動する + ret = wWinMain(hInstance, nullptr, strCommandLine.data(), SW_SHOWDEFAULT); - // ログ出力(途中でexitした場合は出力されない) - printf("%s(%d): leaving process [%ls] => %d\n", __FILE__, __LINE__, strCommandLine.c_str(), ret); + // ログ出力(途中でexitした場合は出力されない) + std::wcout << strprintf(L"%hs(%d): leaving process [%s] => %d\n", __FILE__, __LINE__, commandLine.data(), ret) << std::endl; + } return ret; } diff --git a/tests/unittests/test-winmain.cpp b/tests/unittests/test-winmain.cpp index d25af7623d..7371267754 100644 --- a/tests/unittests/test-winmain.cpp +++ b/tests/unittests/test-winmain.cpp @@ -68,7 +68,7 @@ struct handle_closer }; //! HANDLE型のスマートポインタ -typedef std::unique_ptr::type, handle_closer> handleHolder; +using handleHolder = std::unique_ptr::type, handle_closer>; /*! * WinMain起動テストのためのフィクスチャクラス @@ -135,12 +135,12 @@ class WinMainTest : public ::testing::TestWithParam { * CControlProcess::WaitForInitializedとして実装したいコードです。本体を変えたくないので一時定義しました。 * 既存CProcessFactory::WaitForInitializedControlProcess()と概ね等価です。 */ -void CControlProcess_WaitForInitialized( LPCWSTR lpszProfileName ) +void CControlProcess_WaitForInitialized(std::wstring_view profileName) { // 初期化完了イベントを作成する std::wstring strInitEvent( GSTR_EVENT_SAKURA_CP_INITIALIZED ); - if( lpszProfileName && lpszProfileName[0] ){ - strInitEvent += lpszProfileName; + if (profileName.length() > 0) { + strInitEvent += profileName; } auto hEvent = ::CreateEventW( NULL, TRUE, FALSE, strInitEvent.data() ); if (!hEvent) { @@ -163,7 +163,7 @@ void CControlProcess_WaitForInitialized( LPCWSTR lpszProfileName ) * CControlProcess::Startとして実装したいコードです。本体を変えたくないので一時定義しました。 * 既存CProcessFactory::StartControlProcess()と概ね等価です。 */ -void CControlProcess_Start( LPCWSTR lpszProfileName ) +void CControlProcess_Start(std::wstring_view profileName) { // スタートアップ情報 STARTUPINFO si = { sizeof(STARTUPINFO), 0 }; @@ -171,19 +171,22 @@ void CControlProcess_Start( LPCWSTR lpszProfileName ) si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_SHOWDEFAULT; - WCHAR szExePath[MAX_PATH]; - ::GetModuleFileNameW( NULL, szExePath, _countof(szExePath) ); + const auto exePath = GetExeFileName(); + + std::wstring strProfileName; + if (profileName.length() > 0) { + strProfileName = profileName; + } - CNativeW cmemCommandLine; - cmemCommandLine.AppendStringF( L"\"%s\" -NOWIN -PROF=\"%s\"", szExePath, lpszProfileName ); + std::wstring strCommandLine = strprintf(LR"("%s" -PROF="%s" -NOWIN)", exePath.c_str(), strProfileName.c_str()); - LPWSTR pszCommandLine = cmemCommandLine.GetStringPtr(); + LPWSTR pszCommandLine = strCommandLine.data(); DWORD dwCreationFlag = CREATE_DEFAULT_ERROR_MODE; PROCESS_INFORMATION pi; // コントロールプロセスを起動する BOOL createSuccess = ::CreateProcess( - szExePath, // 実行可能モジュールパス + exePath.c_str(), // 実行可能モジュールパス pszCommandLine, // コマンドラインバッファ NULL, // プロセスのセキュリティ記述子 NULL, // スレッドのセキュリティ記述子 @@ -203,7 +206,7 @@ void CControlProcess_Start( LPCWSTR lpszProfileName ) ::CloseHandle( pi.hProcess ); // コントロールプロセスの初期化完了を待つ - CControlProcess_WaitForInitialized( lpszProfileName ); + CControlProcess_WaitForInitialized(profileName); } /*! From 2ad934a646a3e16b6dbbb16b1fe6f841439a5183 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Thu, 11 Feb 2021 19:54:32 +0900 Subject: [PATCH 0429/1024] =?UTF-8?q?HTML=E3=83=98=E3=83=AB=E3=83=97?= =?UTF-8?q?=E3=81=AE=E8=A8=AD=E5=AE=9A=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB?= =?UTF-8?q?=E3=81=AE=E6=96=87=E5=AD=97=E3=82=B3=E3=83=BC=E3=83=89=E3=82=92?= =?UTF-8?q?=E5=A4=89=E6=8F=9B=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- help/macro/macro.HHP | 4 +- help/macro/macro.hhc | 556 ++++---- help/macro/macro.hhk | 8 +- help/plugin/plugin.hhc | 50 +- help/plugin/plugin.hhk | 16 +- help/plugin/plugin.hhp | 6 +- help/sakura/Cshelp.txt | 3076 ++++++++++++++++++++-------------------- help/sakura/sakura.hhc | 832 +++++------ help/sakura/sakura.hhk | 812 +++++------ help/sakura/sakura.hhp | 9 +- 10 files changed, 2684 insertions(+), 2685 deletions(-) diff --git a/help/macro/macro.HHP b/help/macro/macro.HHP index ef2f41e95e..31ac3b2f5b 100644 --- a/help/macro/macro.HHP +++ b/help/macro/macro.HHP @@ -11,8 +11,8 @@ Display compile progress=No Error log file=Compile.Log Full-text search=Yes Index file=macro.hhk -Language=0x411 { -Title=}Nt@X +Language=0x411 日本語 +Title=マクロリファレンス [WINDOWS] macro="Macro Reference","macro.hhc","macro.hhk","source\reference\index.html",,,,,,0x40720,250,0x100e,[200,100,900,700],,,,,,,0 diff --git a/help/macro/macro.hhc b/help/macro/macro.hhc index 7ee37fe37f..81e9b0c9c6 100644 --- a/help/macro/macro.hhc +++ b/help/macro/macro.hhc @@ -10,821 +10,821 @@
    • - +
      • - +
        • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
        • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
        • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
        • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
        • - +
          • - +
        • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
        • - +
          • - +
          • - +
          • - +
        • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
        • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - + @@ -834,605 +834,605 @@
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
        • - +
          • - +
          • - +
          • - +
        • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
        • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
        • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
        • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
        • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
      • - +
        • - +
        • - +
        • - +
        • - +
        • - +
        • - +
        • - +
        • - +
        • - +
      • - + diff --git a/help/macro/macro.hhk b/help/macro/macro.hhk index 53805129bb..8b5b8ce06f 100644 --- a/help/macro/macro.hhk +++ b/help/macro/macro.hhk @@ -907,12 +907,12 @@
      • - +
      • - +
      • @@ -1979,7 +1979,7 @@
      • - +
      • @@ -2294,7 +2294,7 @@
      • - +
      diff --git a/help/plugin/plugin.hhc b/help/plugin/plugin.hhc index 21a0575cd5..45d39fd2b7 100644 --- a/help/plugin/plugin.hhc +++ b/help/plugin/plugin.hhc @@ -10,63 +10,63 @@
      • - +
        • - +
        • - +
          • - +
          • - +
          • - +
          • - +
          • - +
        • - +
          • - +
          • - +
          • - +
          • - + @@ -93,62 +93,62 @@
        • - +
          • - +
          • - +
          • - +
          • - +
      • - +
        • - +
        • - +
        • - +
      • - +
      • - +
        • - + diff --git a/help/plugin/plugin.hhk b/help/plugin/plugin.hhk index 6f9efd7947..1e80bd55d1 100644 --- a/help/plugin/plugin.hhk +++ b/help/plugin/plugin.hhk @@ -6,35 +6,35 @@
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          • - +
          diff --git a/help/plugin/plugin.hhp b/help/plugin/plugin.hhp index 64ecc3248f..e2e4fd3211 100644 --- a/help/plugin/plugin.hhp +++ b/help/plugin/plugin.hhp @@ -10,11 +10,11 @@ Display compile progress=No Error log file=Compile.Log Full-text search=Yes Index file=plugin.hhk -Language=0x411 { -Title=TNGfB^ vOCdl +Language=0x411 日本語 +Title=サクラエディタ プラグイン仕様 [WINDOWS] -XHP="vOCdl","plugin.hhc","plugin.hhk","Text/index.html","Text/index.html",,,,,0x61720,200,0x10384e,[50,50,850,550],0x0,0x0,,,,,0 +XHP="プラグイン仕様","plugin.hhc","plugin.hhk","Text/index.html","Text/index.html",,,,,0x61720,200,0x10384e,[50,50,850,550],0x0,0x0,,,,,0 $global_Web="Remote URL",,,,,,,,,,,0x383c,[125,144,721,602],,,,,,,0 diff --git a/help/sakura/Cshelp.txt b/help/sakura/Cshelp.txt index 3087891d4d..c016a6cd53 100644 --- a/help/sakura/Cshelp.txt +++ b/help/sakura/Cshelp.txt @@ -1,3784 +1,3784 @@ .topic 10000 -yobNAbvtH_QƁz +【バックアップフォルダ参照】 -obNAbv쐬tH_QƂ܂B +バックアップを作成するフォルダを参照します。 .topic 10010 -yobNAbv̍쐬z +【バックアップの作成】 -ۑɍXVÕt@C̃obNAbv쐬܂B +保存時に更新前のファイルのバックアップを作成します。 .topic 10011 -yobNAbvt@Cz +【バックアップファイル名】 -obNAbvt@ČɐNt܂B +バックアップファイル名の後ろに西暦年を付けます。 .topic 10012 -yobNAbvt@Cz +【バックアップファイル名】 -obNAbvt@ČɌt܂B +バックアップファイル名の後ろに月を付けます。 .topic 10013 -yobNAbvt@Cz +【バックアップファイル名】 -obNAbvt@Čɓt܂B +バックアップファイル名の後ろに日を付けます。 .topic 10014 -yobNAbvt@Cz +【バックアップファイル名】 -obNAbvt@ČɎt܂B +バックアップファイル名の後ろに時を付けます。 .topic 10015 -yobNAbvt@Cz +【バックアップファイル名】 -obNAbvt@Čɕt܂B +バックアップファイル名の後ろに分を付けます。 .topic 10016 -yobNAbvt@Cz +【バックアップファイル名】 -obNAbvt@Čɕbt܂B +バックアップファイル名の後ろに秒を付けます。 .topic 10017 -y쐬OɊmFz +【作成前に確認】 -obNAbvt@C̍쐬OɊmF܂B +バックアップファイルの作成前に確認します。 .topic 10018 -ywtH_ɍ쐬z +【指定フォルダに作成】 -w肳ꂽtH_ɃobNAbvt@C쐬܂B +指定されたフォルダにバックアップファイルを作成します。 -tH_ݒ肵ĉB +フォルダ名を設定して下さい。 -ɂꍇ́Ãt@CƓtH_ɍ쐬܂B +無効にした場合は、元のファイルと同じフォルダに作成されます。 .topic 10019 -yobNAbvt@Cݔɕ荞ށz +【バックアップファイルをごみ箱に放り込む】 -obNAbvt@Cݔɕ荞݂܂B +バックアップファイルをごみ箱に放り込みます。 -obNAbvt@C̕ۑ悪lbg[NhCu⃊[ouhCułꍇ́Aݔɕ荞ނƂ͂܂B +バックアップファイルの保存先がネットワークドライブやリムーバブルドライブであった場合は、ごみ箱に放り込むことはしません。 .topic 10020 -y[oufBÂ݁z +【リムーバブルメディアのみ】 -ҏW̃t@C[oufBAɂꍇ̂ݎwtH_ɃobNAbv쐬܂B +編集中のファイルがリムーバブルメディアにある場合のみ指定フォルダにバックアップを作成します。 .topic 10040 -yۑtH_z +【保存フォルダ名】 -obNAbvt@CۑtH_tpXŎw肵܂B +バックアップファイルを保存するフォルダ名をフルパスで指定します。 .topic 10041 -y㐔z +【世代数】 -t@C̊gqAԂɂĕۑꍇɁAۑ鐢㐔w肵܂B +ファイルの拡張子を連番にして保存する場合に、保存する世代数を指定します。 .topic 10042 -yobNAbvt@Cz -$x ʊKwxˆړƂɂtH_ +【バックアップファイル名】 +$x 上位階層へx個移動したところにあるフォルダ名 -* gq +* 拡張子 -%Y i4j +%Y 西暦(4桁) -%y i2j +%y 西暦(2桁) -%m +%m 月 -%d +%d 日 -%H +%H 時 -%M +%M 分 -%S b +%S 秒 -%% %L +%% %記号 -ۑt@C +保存ファイル名 .topic 10060 -yobNAbv̎ށz +【バックアップの種類】 -XVÕt@C̊gq".bak"ɕύX̂ۑ܂B +更新前のファイルの拡張子を".bak"に変更したものを保存します。 .topic 10061 -yobNAbv̎ށz +【バックアップの種類】 -XVÕt@ČɓtEt̂ۑ܂B +更新前のファイル名の後ろに日付・時刻を付けたものを保存します。 .topic 10062 -yobNAbv̎ށz +【バックアップの種類】 -XVÕt@C̊gqA(b00b99)ɕύX̂ۑ܂B +更新前のファイル名の拡張子を連番(b00からb99)に変更したものを保存します。 -ۑ鐢㐔ݒ肵ĉB +保存する世代数を設定して下さい。 .topic 10063 -yۑ̓tEgpz +【保存時の日付・時刻を使用】 -obNAbvt@C쐬鎞_ł̓g܂B +バックアップファイルを作成する時点での日時を使います。 .topic 10064 -yÕt@CXV̓tEgpz +【前回のファイル更新時の日付・時刻を使用】 -O̕ۑ̓it@C̍XVjȂ킿t@C̃^CX^vg܂B +前回の保存時の日時(ファイルの更新日時)すなわちファイルのタイムスタンプを使います。 .topic 10065 -ẙgqۑz +【元の拡張子を保存】 -gq폜ɒljۑ܂B +拡張子を削除せずに追加し保存します。 .topic 10066 -yڍאݒ肷z +【詳細設定する】 -obNAbvt@C̏ݒł܂B +バックアップファイル名の書式を設定できます。 .topic 10067 -yt̎ށz +【付加する日時の種類】 -obNAbvt@C쐬鎞_ł̓g܂B +バックアップファイルを作成する時点での日時を使います。 .topic 10068 -yt̎ށz +【付加する日時の種類】 -O̕ۑ̓it@C̍XVjȂ킿t@C̃^CX^vg܂B +前回の保存時の日時(ファイルの更新日時)すなわちファイルのタイムスタンプを使います。 .topic 10100 -yj[@\폜z +【メニューから機能削除】 -j[I@\폜܂B +メニューから選択した機能を削除します。 .topic 10101 -yZp[^}z +【セパレータ挿入】 -Zp[^j[Ŕ]\Ăs̑Oɑ}܂B +セパレータをメニューで反転表示されている行の前に挿入します。 .topic 10102 -yj[֋@\}z +【メニューへ機能挿入】 -IĂ@\j[Ŕ]\Ăs̑Oɑ}܂B +選択されている機能をメニューで反転表示されている行の前に挿入します。 .topic 10103 -yj[֋@\ljz +【メニューへ機能追加】 -IĂ@\j[̍Ōɒlj܂B +選択されている機能をメニューの最後に追加します。 .topic 10104 -yj[̋@\ֈړz +【メニューの機能を上へ移動】 -j[őI@\̏ֈړ܂B +メニューで選択した機能の順序を上へ移動します。 .topic 10105 -yj[̋@\ֈړz +【メニューの機能を下へ移動】 -j[őI@\̏ֈړ܂B +メニューで選択した機能の順序を下へ移動します。 .topic 10106 -yC|[gz +【インポート】 -JX^j[̐ݒt@Cǂݍ݂܂B +カスタムメニューの設定情報をファイルから読み込みます。 .topic 10107 -yGNX|[gz +【エクスポート】 -JX^j[̐ݒt@Cɕۑ܂B +カスタムメニューの設定情報をファイルに保存します。 .topic 10130 -y@\̎ʁz +【機能の種別】 -ꗗ\@\̎ʂI܂B +一覧表示する機能の種別を選択します。 .topic 10131 -yj[̎ʁz +【メニューの種別】 -ݒsj[̎ʂI܂B +設定を行うメニューの種別を選択します。 .topic 10132 -yj[z +【メニュー名】 -j[Ƃĕ\w肵܂B +メニュー名として表示したい文字列を指定します。 -[ݒ]{^A[OK]{^Ɛݒ肪f܂B +[設定]ボタンを押し、[OK]ボタンを押すと設定が反映されます。 .topic 10133 -yj[ݒz +【メニュー名設定】 -j[ݒ肵܂B +メニュー名を設定します。 .topic 10150 -y@\ꗗz +【機能一覧】 -JX^j[ɓo^”\ȌݑIĂʂ̋@\̈ꗗłB +カスタムメニューに登録可能な現在選択されている種別の機能の一覧です。 .topic 10151 -yj[ꗗz +【メニュー一覧】 -JX^j[̃XgłB +カスタムメニューのリストです。 .topic 10152 -yTuj[Ƃĕ\z +【サブメニューとして表示】 -̃j[𑼂̃j[ɑgݓꂽɃTuj[Ƃĕ\܂B +このメニューを他のメニューに組み入れた時にサブメニューとして表示します。 .topic 10210 -y܂ԂsɉstăRs[z +【折り返し行に改行を付けてコピー】 -^CvʐݒŐݒ肵܂Ԃ𒴂sNbv{[hɃRs[ƂA܂Ԃꂽɉst^܂B +タイプ別設定で設定した折り返し桁数を超える行数をクリップボードにコピーするとき、折り返された部分に改行を付与します。 .topic 10211 -yRs[Iz +【コピーしたら選択解除】 -I͈͂Rs[ƁAIɑI܂B +選択範囲をコピーすると、自動的に選択を解除します。 .topic 10215 -yC[h\t”\ɂz +【ラインモード貼り付けを可能にする】 -IԂŃRs[isRs[jƁA\tVS2003/2005݊̍s\tɂȂ܂B +非選択状態でコピー(行コピー)したあと、貼り付けするとVS2003/2005互換の行貼り付けになります。 .topic 10216 -yIȂŃRs[”\ɂz +【選択なしでコピーを可能にする】 -IԂŃRs[ƍsŜRs[܂BVS2003/2005݊̍sRs[łB +非選択状態でコピー操作をすると行全体をコピーします。VS2003/2005互換の行コピーです。 .topic 10217 -ysR[hϊĒtz +【改行コードを変換して張り付ける】 -`łȂ\t̂ƂA͉sR[hwɏ]āAtf[^̉sR[h𓝈ꂵ܂B +矩形でない貼り付けのとき、入力改行コード指定に従って、張り付けるデータの改行コードを統一します。 -úuNbv{[h璣tvłLłB +置換の「クリップボードから張り付ける」でも有効です。 .topic 10218 -yɍ킹ăXy[Xl߂z +【文字幅に合わせてスペースを詰める】 -Sp𔼊pŏ㏑ꍇɁApXy[X𖄂߂āAË̕ʒuςȂ悤ɂ܂B +全角文字を半角文字で上書きした場合等に、半角スペースを埋めて、右側の文字の位置が変わらないようにします。 .topic 10219 -y`͂őI͈͂폜z +【矩形入力で選択範囲を削除する】 -`I𒆂͂̕őI͈͂폜Ĕ͈͂Ɉړ܂B +矩形選択中の文字入力で選択範囲を削除して範囲を後ろに移動します。 .topic 10212 -yhbO & hbvҏWz +【ドラッグ & ドロップ編集する】 -hbO & hbvgǂw肵܂B +ドラッグ & ドロップを使うかどうかを指定します。 -̃AvP[VeLXg̃hbO & hbvł܂B +他のアプリケーションからテキストのドラッグ & ドロップができます。 .topic 10213 -yhbvɂz +【ドロップ元にする】 -TNGfB^瑼̃AvP[VɃhbO & hbv邩ǂw肵܂B +サクラエディタから他のアプリケーションにドラッグ & ドロップするかどうかを指定します。 .topic 10214 -y㏑[hz +【上書きモード】 -͂ōs̉sɏ㏑܂B +文字入力で行末の改行に上書きしません。 .topic 10220 -yJgtH_z +【カレントフォルダ】 -JgtH_ɐݒ肵܂B +カレントフォルダに設定します。 .topic 10221 -yŋߎgtH_z +【最近使ったフォルダ】 -ŋߎgtH_ɐݒ肵܂B +最近使ったフォルダに設定します。 .topic 10222 -ywtH_z +【指定フォルダ】 -[Uݒ肵tH_ɐݒ肵܂B +ユーザが設定したフォルダに設定します。 .topic 10223 -ywtH_pXz +【指定フォルダパス】 -wtH_ݒ肵Ƃ̃tH_tpXŎw肵܂B +指定フォルダを設定したときのフォルダ名をフルパスで指定します。 -^܂ނƂł܂B +メタ文字列を含むことができます。 .topic 10224 -ysR[hNEL,PS,LSLɂz +【改行コードNEL,PS,LSを有効にする】 -NEL,PS,LSsƂĈ܂B +NEL,PS,LS文字を改行として扱います。 .topic 10310 -yt@C̔rir䂵Ȃjz +【ファイルの排他制御(排他制御しない)】 -r܂B +排他制御をしません。 -XV̊mFLɂĂƁATNGfB^ŕҏW̃t@CXVꂽƂo邱Ƃł܂B +更新の確認を有効にしておくと、サクラエディタで編集中のファイルが更新されたことを検出することができます。 .topic 10311 -yXV̊Ďz +【更新の監視】 -t@C̔rȂꍇɁAt@CXVꂽǂĎ܂B +ファイルの排他制御をしない場合に、ファイルが更新されたかどうか監視します。 .topic 10312 -yt@C̔ri㏑֎~jz +【ファイルの排他制御(上書き禁止)】 -vZX̏㏑֎~܂B +他プロセスからの上書きを禁止します。 -̃AvP[V܂̓[U͎QƂ̂݉”\łB +他のアプリケーションまたはユーザは参照のみ可能です。 .topic 10313 -yt@C̔riǂݏ֎~jz +【ファイルの排他制御(読み書き禁止)】 -vZX̓ǂݏ֎~܂B +他プロセスからの読み書きを禁止します。 -̃AvP[V܂̓[U̓t@C̎QƂXVs”\ɂȂ܂B +他のアプリケーションまたはユーザはファイルの参照も更新も不可能になります。 .topic 10314 -yt@C̕ۑz +【ファイルの保存】 -ύXł㏑邩ǂw肵܂B +無変更でも上書きするかどうか指定します。 .topic 10315 -yIɕۑz +【自動的に保存】 -w肵ԊԊuŃt@CIɕۑ܂B +指定した時間間隔でファイルを自動的に保存します。 .topic 10316 -y‚ĊJz +【閉じて開く】 -t@C̃hbvsꂽƂA݊JĂt@C‚Ăhbvꂽt@CJ܂B +ファイルのドロップが行われたとき、現在開いているファイルを閉じてからドロップされたファイルを開きます。 .topic 10317 -yt@CI[vz +【ファイルオープン】 -t@CJƂɃJ[\ʒu𕜌܂B +ファイルを開いたときにカーソル位置を復元します。 .topic 10318 -yMIMEfR[hz +【MIMEデコード】 -t@CJƂMIMEGR[hꂽwb_fR[h܂B +ファイルを開いたときにMIMEエンコードされたヘッダをデコードします。 .topic 10340 -yۑԊuz +【自動保存間隔】 -t@CۑƂ̊Ԋu𕪒PʂŎw肵܂B +ファイルを自動保存するときの間隔を分単位で指定します。 .topic 10341 -yt@Chbvő吔z +【ファイルドロップ最大数】 -t@C̃hbvɂĊJt@C̍ő吔ݒ肵܂B +ファイルのドロップによって開くファイルの最大数を設定します。 -zꍇ͖܂B +制限を越えた場合は無視します。 .topic 10342 -yubN}[N̕z +【ブックマークの復元】 -ubN}[N𕜌܂B +ブックマークを復元します。 .topic 10343 -yOƈقȂ镶R[ĥƂ₢킹sz +【前回と異なる文字コードのとき問い合わせを行う】 -JƂt@COƈقȂ镶R[ĥƂA +開こうとしたファイルが前回と異なる文字コードのとき、 -₢킹̃_CAO\܂B +問い合わせのダイアログを表示します。 .topic 10344 -yJƂt@C݂ȂƂxz +【開こうとしたファイルが存在しないとき警告する】 -JƂt@C݂ȂƂA +開こうとしたファイルが存在しないとき、 -x̃_CAO\܂B +警告のダイアログを表示します。 .topic 10345 -yVKۑ͑St@C\z +【新規から保存時は全ファイル表示】 -()̖O‚ĕۑ +(無題)文書の名前をつけて保存で -t@C̎ނ[U[ŵƂ +ファイルの種類がユーザー指定のときに -ẘgqȊÕt@C\܂B +指定の拡張子以外のファイルも表示します。 .topic 10346 -yVKȊOۑ͑St@C\z +【新規以外から保存時は全ファイル表示】 -()łȂƂɃt@C̖O‚ĕۑ +(無題)でないときにファイルの名前をつけて保存で -t@C̎ނ[U[ŵƂ +ファイルの種類がユーザー指定のときに -ẘgqȊÕt@C\܂B +指定の拡張子以外のファイルも表示します。 .topic 10347 -yJƂt@C傫ꍇɌxz +【開こうとしたファイルが大きい場合に警告する】 -JƂt@C̃TCY傫ƂA +開こうとしたファイルのサイズが大きいとき、 -x̃_CAO\܂B +警告のダイアログを表示します。 .topic 10348 -yrz +【排他制御】 -mȂn +[しない] -r܂B +排他制御をしません。 -XV̊mFLɂĂƁATNGfB^ŕҏW̃t@CXVꂽƂo邱Ƃł܂B +更新の確認を有効にしておくと、サクラエディタで編集中のファイルが更新されたことを検出することができます。 -m㏑֎~n +[上書きを禁止する] -vZX̏㏑֎~܂B +他プロセスからの上書きを禁止します。 -̃AvP[V܂̓[U͎QƂ̂݉”\łB +他のアプリケーションまたはユーザは参照のみ可能です。 -mǂݏ֎~n +[読み書きを禁止する] -vZX̓ǂݏ֎~܂B +他プロセスからの読み書きを禁止します。 -̃AvP[V܂̓[U̓t@C̎QƂXVs”\ɂȂ܂B +他のアプリケーションまたはユーザはファイルの参照も更新も不可能になります。 .topic 10349 -y㏑֎~o͕ҏW֎~ɂz +【上書き禁止検出時は編集禁止にする】 -㏑֎~oƂAҏW֎~ɂ܂B +上書き禁止を検出したとき、編集禁止にします。 .topic 10440 -ytz +【日付書式】 -tJX^̏ꍇɁAtw肵܂B +日付書式がカスタムの場合に、日付書式を指定します。 .topic 10441 -yz +【時刻書式】 -tJX^̏ꍇɁAw肵܂B +日付書式がカスタムの場合に、時刻書式を指定します。 .topic 10442 -yt\z +【日付書式表示例】 -t̕\łB +日付書式の表示例です。 .topic 10443 -y\z +【時刻書式表示例】 -̕\łB +時刻書式の表示例です。 .topic 10444 -yoLz +【見出し記号】 -AEgC͂ƂɁAoƂĎʂLݒ肵܂B +アウトライン解析するときに、見出しとして識別する記号を設定します。 .topic 10445 -ypz +【引用符】 -I͈͓SspRs[̋@\ŁAes̐擪ɕtpݒ肵܂B +選択範囲内全行引用コピーの機能で、各行の先頭に付ける引用符を設定します。 .topic 10460 -ytz +【日付書式】 -t}@\ŎgptWɂ܂B +日付挿入機能で使用する日付書式を標準にします。 -Rg[plŐݒ肳ꂽ`̏gp܂B +コントロールパネルで設定された長い形式の書式を使用します。 .topic 10461 -ytz +【日付書式】 -t}@\ŎgptƎɐݒ肵܂B +日付挿入機能で使用する日付書式を独自に設定します。 -tݒ肵ĉB +日付書式を設定して下さい。 -ɂ‚Ă̓wvQƂĉB +書式についてはヘルプを参照して下さい。 .topic 10462 -yz +【時刻書式】 -}@\Ŏgp鎞Wɂ܂B +時刻挿入機能で使用する時刻書式を標準にします。 -Rg[plŐݒ肳ꂽ`̏gp܂B +コントロールパネルで設定された長い形式の書式を使用します。 .topic 10463 -yz +【時刻書式】 -}@\Ŏgp鎞Ǝɐݒ肵܂B +時刻挿入機能で使用する時刻書式を独自に設定します。 -ݒ肵ĉB +時刻書式を設定して下さい。 -ɂ‚Ă̓wvQƂĉB +書式についてはヘルプを参照して下さい。 .topic 10500 -yJ[\ʒu̕ftHǧɂz +【カーソル位置の文字列をデフォルトの検索文字列にする】 -L̓J[\ʒu̕񂪃ftHǧɂȂ܂B +有効時はカーソル位置の文字列がデフォルトの検索文字列になります。 -͑Ǒ񂪃ftHǧɂȂ܂B +無効時は前回の検索文字列がデフォルトの検索文字列になります。 .topic 10514 -yK\Cuwz +【正規表現ライブラリ指定】 -K\CuɔCӂ̃t@C𗘗pꍇ +正規表現ライブラリに任意のファイルを利用したい場合に -Cut@C̃pXw肵܂B +ライブラリファイルのパスを指定します。 .topic 10510 -yGrep[hŕۑmFz +【Grepモードで保存確認する】 -Grep[hŃEBhE‚ƂɕۑmF܂B +Grepモードでウィンドウを閉じるときに保存確認をします。 .topic 10513 -yA^Cŕ\z +【リアルタイムで表示する】 -GrepʂA^Cɕ\܂B +Grep結果をリアルタイムに表示します。 .topic 10511 -yG^[L[Ń^OWvz +【エンターキーでタグジャンプ】 -GrepʂG^[L[Ń^OWv܂B +Grep結果からエンターキーでタグジャンプします。 .topic 10512 -y_uNbNŃ^OWvz +【ダブルクリックでタグジャンプ】 -Grepʂ_uNbNŃ^OWv܂B +Grep結果からダブルクリックでタグジャンプします。 .topic 10516 -y^Ot@Čz +【タグファイルの検索】 -^OWvŕ̃^Ot@Cꍇ̓w肵܂B +タグジャンプで複数のタグファイルがある場合の動作を指定します。 .topic 10517 -yL[[hw̃^Ot@Cz +【キーワード指定のタグファイル検索】 -L[[hw肵ă^OWv̂ƂÃ^Ot@Cꍇ̓w肵܂B +キーワードを指定してタグジャンプのとき、複数のタグファイルがある場合の動作を指定します。 .topic 10602 -yOwvt@CQƁz +【外部ヘルプファイル参照】 -Owvt@CQƂ܂B +外部ヘルプファイルを参照します。 .topic 10603 -yOHTMLt@CQƁz +【外部HTMLファイル参照】 -OHTMLwvt@CQƂ܂B +外部HTMLヘルプファイルを参照します。 .topic 11611 -yL[[hwṽtHgz +【キーワードヘルプのフォント】 -L[[hwṽtHgw肵܂B +キーワードヘルプのフォントを指定します。 .topic 10610 -y͕⊮z +【逐次入力補完】 -͕⊮sǂw肵܂B +逐次入力補完を行うかどうか指定します。 .topic 10612 -y⌈L[z +【候補決定キー】 -̌[Enter]L[ōs܂B +候補の決定を[Enter]キーで行います。 .topic 10613 -y⌈L[z +【候補決定キー】 -̌[Tab]L[ōs܂B +候補の決定を[Tab]キーで行います。 .topic 10614 -y⌈L[z +【候補決定キー】 -̌[]L[ōs܂B +候補の決定を[→]キーで行います。 .topic 10615 -y⌈L[z +【候補決定キー】 -̌[Space]L[ōs܂B +候補の決定を[Space]キーで行います。 .topic 10617 -yr[A̕Nz +【ビューアの複数起動】 -OHTMLwv𕡐NȂ悤ɂ܂B +外部HTMLヘルプを複数起動しないようにします。 .topic 10618 -yLbgʒuPꌟz +【キャレット位置単語検索】 -͈͑IԂłȂĂLbgʒu̒P܂B +範囲選択状態でなくてもキャレット位置の単語を辞書検索します。 .topic 10642 -yOwvt@Cz +【外部ヘルプファイル名】 -Owvt@CtpXEGfB^̑΃pXŎw肵܂B +外部ヘルプファイル名をフルパス・エディタからの相対パスで指定します。 .topic 10643 -yOHTMLwvt@Cz +【外部HTMLヘルプファイル名】 -OHTMLwvt@CtpXEGfB^̑΃pXŎw肵܂B +外部HTMLヘルプファイル名をフルパス・エディタからの相対パスで指定します。 .topic 10650 -yMigemo DLLt@Cz +【Migemo DLLファイル名】 -migemo.dll̃pXw肵܂B +migemo.dllのパスを指定します。 .topic 10651 -yMigemo DLLt@CQƁz +【Migemo DLLファイル参照】 -migemo.dll̃pXQƂ܂B +migemo.dllのパスを参照します。 .topic 10652 -yMigemo t@Cz +【Migemo 辞書ファイル名】 -dictfBNg̃pXw肵܂B +dictディレクトリのパスを指定します。 .topic 10653 -yMigemo t@CQƁz +【Migemo 辞書ファイル参照】 -dictfBNg̃pXQƂ܂B +dictディレクトリのパスを参照します。 .topic 10700 -yC|[gz +【インポート】 -L[蓖Ă̐ݒt@Cǂݍ݂܂B +キー割り当ての設定情報をファイルから読み込みます。 .topic 10701 -yGNX|[gz +【エクスポート】 -L[蓖Ă̐ݒt@Cɕۑ܂B +キー割り当ての設定情報をファイルに保存します。 .topic 10702 -yL[蓖āz +【キー割り当て】 -@\ɃL[蓖Ă܂B +機能にキーを割り当てます。 .topic 10703 -yL[z +【キー解除】 -@\Ɋ蓖ĂꂽL[܂B +機能に割り当てられたキーを解除します。 .topic 10710 -yShiftL[z +【Shiftキー】 -ɉL[Ƃ [Shift] L[w肵܂B +同時に押すキーとして [Shift] キーを指定します。 .topic 10711 -yCtrlL[z +【Ctrlキー】 -ɉL[Ƃ [Ctrl] L[w肵܂B +同時に押すキーとして [Ctrl] キーを指定します。 .topic 10712 -yAltL[z +【Altキー】 -ɉL[Ƃ [Alt] L[w肵܂B +同時に押すキーとして [Alt] キーを指定します。 .topic 10730 -y@\̎ʁz +【機能の種別】 -ꗗ\@\̎ʂI܂B +一覧表示する機能の種別を選択します。 .topic 10740 -yL[Ɋ蓖ĂĂ@\z +【キーに割り当てられている機能】 -IĂL[Ɋ蓖ĂĂ@\łB +選択されているキーに割り当てられている機能です。 .topic 10750 -y@\ꗗz +【機能一覧】 -L[蓖Ăɓo^”\ȌݑIĂʂ̋@\̈ꗗłB +キー割り当てに登録可能な現在選択されている種別の機能の一覧です。 .topic 10751 -yL[ꗗz +【キー一覧】 -L[̈ꗗłB +キーの一覧です。 .topic 10752 -y@\Ɋ蓖ĂĂL[z +【機能に割り当てられているキー】 -IĂ@\Ɋ蓖ĂĂL[łB +選択されている機能に割り当てられているキーです。 .topic 10760 -yEBhEɃANZ[^e[u쐬(Winep)z +【ウィンドウ毎にアクセラレータテーブルを作成する(Wine用)】 -V[gJbgL[LɂȂȂWinẽoOɑΉ@\łB +ショートカットキーが有効にならないWineのバグに対応する機能です。 -WineLinux/UnixWindowsvOs‹łB +※WineはLinux/Unix向けのWindowsプログラム実行環境です。 .topic 10800 -yL[[hZbgljz +【キーワードセット追加】 -VL[[hZbglj܂B +新しいキーワードセットを追加します。 .topic 10801 -yL[[hZbg폜z +【キーワードセット削除】 -IĂL[[hZbg폜܂B +選択されているキーワードセットを削除します。 .topic 10802 -yL[[hljz +【キーワード追加】 -VL[[hL[[hꗗɒlj܂B +新しいキーワードをキーワード一覧に追加します。 .topic 10803 -yL[[hҏWz +【キーワード編集】 -IĂL[[hҏW܂B +選択されているキーワードを編集します。 .topic 10804 -yL[[h폜z +【キーワード削除】 -IĂL[[hL[[hꗗ폜܂B +選択されているキーワードをキーワード一覧から削除します。 .topic 10805 -yC|[gz +【インポート】 -L[[h̐ݒt@Cǂݍ݂܂B +キーワードの設定情報をファイルから読み込みます。 .topic 10806 -yGNX|[gz +【エクスポート】 -L[[h̐ݒt@Cɕۑ܂B +キーワードの設定情報をファイルに保存します。 .topic 10807 -yL[[hz +【キーワード整理】 -L[[hƂĎgpłȂL[[h폜܂B +強調キーワードとして使用できないキーワードを削除します。 .topic 10810 -yL[[h̉p啶ʁz +【キーワードの英大文字小文字区別】 -L[[h̉p啶Əʂ邩ǂw肵܂B +キーワードの英大文字と小文字を区別するかどうかを指定します。 .topic 10830 -yL[[hZbgz +【強調キーワードセット名】 -L[[h̃Zbgw肵܂B +強調キーワードのセット名を指定します。 .topic 10831 -yZbg̖̕ύXz +【セットの名称変更】 -L[[h̃ZbgύX܂B +強調キーワードのセット名を変更します。 .topic 10840 -yL[[hꗗz +【キーワード一覧】 -IĂL[[hZbgɓo^ĂL[[ḧꗗłB +選択されているキーワードセットに登録されているキーワードの一覧です。 .topic 10900 -yNAit@Cjz +【履歴をクリア(ファイル)】 -ŋߎgt@C̗NA܂B +最近使ったファイルの履歴をクリアします。 .topic 10901 -yNAitH_jz +【履歴をクリア(フォルダ)】 -ŋߎgtH_̗NA܂B +最近使ったフォルダの履歴をクリアします。 .topic 10910 -yt[J[\z +【フリーカーソル】 -t[J[\[hɂ܂B +フリーカーソルモードにします。 -̃[hɂƃLbgsLEɈړ邱Ƃł܂B +このモードにするとキャレットを改行記号より右側に移動させることができます。 .topic 10911 -yCfgz +【自動インデント】 -Cfg悤ɂ܂B +自動インデントするようにします。 .topic 10912 -ySp󔒂Cfgz +【全角空白もインデント】 -Cfgsړ̂ƂASp󔒂CfgƂĎ舵܂B +自動インデントや行頭移動のとき、全角空白もインデント文字として取り扱います。 .topic 10913 -y^XNgCgz +【タスクトレイを使う】 -^XNgCɃACRi[܂B +タスクトレイにアイコンを格納します。 .topic 10914 -y^XNgCɏ풓z +【タスクトレイに常駐】 -^XNgCɏ풓܂B +タスクトレイに常駐します。 -ׂĂ̕ҏWEBhE‚ĂA^XNgCɃACRc܂B +すべての編集ウィンドウを閉じても、タスクトレイにアイコンが残ります。 .topic 10915 -y炩ɂz +【少し滑らかにする】 -XN[炩ɂ܂B +スクロールを少し滑らかにします。 .topic 11752 -yʃLbVgz +【画面キャッシュを使う】 -J[\ړ݂̂ȂǁAʂXN[ȂꍇCPUׂ܂B +カーソル移動のみなど、画面がスクロールしない場合のCPU負荷が下がります。 .topic 11753 -yI[v㎩s}Nz +【オープン後自動実行マクロ】 -VK쐬܂̓t@CJ}Ns܂B +新規作成またはファイルを開いた後マクロを実行します。 .topic 11754 -y^CvύX㎩s}Nz +【タイプ変更後自動実行マクロ】 -^CvʐݒꗗňꎞKpsꍇɃ}Ns܂B +タイプ別設定一覧で一時適用を実行した場合にマクロを実行します。 .topic 11755 -yۑOs}Nz +【保存前自動実行マクロ】 -ۑOɃ}Ns܂B +保存前にマクロを実行します。 .topic 11756 -yvOCz +【プラグイン】 -CXg[ĂvOC̈ꗗłB +インストールされているプラグインの一覧です。 .topic 11757 -yvOCLɂz +【プラグインを有効にする】 -vOC@\Lɂ܂B +プラグイン機能を有効にします。 .topic 11758 -yVKvOCljz +【新規プラグインを追加】 -vOCtH_ɔzuvOCCXg[܂B +プラグインフォルダに配置したプラグインをインストールします。 .topic 11759 -y폜z +【削除】 -I𒆂̃vOCACXg[܂B +選択中のプラグインをアンインストールします。 .topic 11760 -yݒz +【設定】 -I𒆂̃vOC̐ݒʂ\܂B +選択中のプラグインの設定画面を表示します。 .topic 11761 -yIvVꗗz +【オプション一覧】 -vOC̐ݒ”\ȍڂ\܂B +プラグインの設定可能な項目を表示します。 .topic 11762 -ylz +【値】 -IĂ鍀ڂ̐ݒl͂܂B +選択している項目の設定値を入力します。 .topic 11764 -ytH_Jz +【フォルダを開く】 -pluginstH_J܂B +pluginsフォルダを開きます。 .topic 11767 -yReadMe\z +【ReadMe表示】 -vOCtH_ȉ ReadMe.txt vOCtH_.txt ̃t@C\܂B +プラグインフォルダ以下の ReadMe.txt か プラグインフォルダ名.txt のファイルを表示します。 .topic 11768 -yZIPvOC𓱓z +【ZIPプラグインを導入】 -t@CI_CAOZIPt@Cw肵āAvOC𓱓܂B(XPȍ~) +ファイル選択ダイアログでZIPファイルを指定して、プラグインを導入します。(XP以降) .topic 10916 -yI̊mFz +【終了の確認をする】 -GfB^̏ImF悤ɂ܂B +エディタの終了を確認するようにします。 .topic 10917 -yPPʂňړƂɒP̗[Ɏ~܂z +【単語単位で移動するときに単語の両端に止まる】 -PPʂňړƂɃLbgP̗[Ɏ~܂܂B +単語単位で移動するときにキャレットが単語の両端に止まります。 .topic 10918 -yiPʂňړƂɒi̗[Ɏ~܂z +【段落単位で移動するときに段落の両端に止まる】 -iPʂňړƂɃLbgi̗[Ɏ~܂܂B +段落単位で移動するときにキャレットが段落の両端に止まります。 .topic 10919 -yɕ̃EBhE‚ƂmFz +【同時に複数のウィンドウを閉じるとき確認】 .topic 10920 -y}EXNbNł̃ANeBuł̓J[\ړȂz +【マウスクリックでのアクティブ化ではカーソルを移動しない】 -ANeBũ}EXNbNł́AEBhẼANeBu +非アクティブ時のマウスクリックでは、ウィンドウのアクティブ化 -݂̂sAJ[\ʒuړ܂B +のみを行い、カーソル位置を移動しません。 -̃EBhE܂Ƃ߂ĕ‚e퓮ŁA‚O̊mF܂B +複数のウィンドウをまとめて閉じる各種動作で、閉じる前の確認をします。 .topic 10921 -ygݍ킹ăzC[삵Ƃy[WXN[z +【組み合わせてホイール操作したときページスクロールする】 -w肵{^ĂƂA}EXzC[Ńy[WXN[܂B +指定したボタンが押されているとき、マウスホイールでページスクロールします。 .topic 10922 -ygݍ킹ăzC[삵ƂXN[z +【組み合わせてホイール操作したとき横スクロールする】 -w肵{^ĂƂA}EXzC[ʼnXN[܂B +指定したボタンが押されているとき、マウスホイールで横スクロールします。 .topic 10940 -yNbNj[̃V[gJbgL[z +【左クリックメニューのショートカットキー】 -^XNgC̍NbNj[ĂяoV[gJbgL[ݒ肵܂B +タスクトレイの左クリックメニューを呼び出すショートカットキーを設定します。 .topic 10941 -yXN[sz +【スクロール行数】 -ʏ̏㉺L[ŃXN[ƂAxɃXN[sݒ肵܂B +通常の上下キーでスクロールするとき、一度にスクロールする行数を設定します。 .topic 10942 -yt@C̗MAXz +【ファイルの履歴MAX】 -ŋߎgt@C̗̍ő吔ݒ肵܂B +最近使ったファイルの履歴の最大数を設定します。 .topic 10943 -ytH_̗MAXz +【フォルダの履歴MAX】 -ŋߎgtH_̗̍ő吔ݒ肵܂B +最近使ったフォルダの履歴の最大数を設定します。 .topic 10960 -yJ[\`iWindowsjz +【カーソル形状(Windows風)】 -J[\`Windowsɂ܂B +カーソル形状をWindows風にします。 -}[hłׂ͍cA㏑[hł͈ꕶ̋`ɂȂ܂B +挿入モードでは細い縦線、上書きモードでは一文字大の矩形になります。 .topic 10961 -yJ[\`iMS-DOSjz +【カーソル形状(MS-DOS風)】 -J[\`MS-DOSɂ܂B +カーソル形状をMS-DOS風にします。 -}[hł͍̋`A㏑[hł͈ꕶ̋`ɂȂ܂B +挿入モードでは高さが半分の矩形、上書きモードでは一文字大の矩形になります。 .topic 11000 -yc[o[@\폜z +【ツールバーから機能削除】 -c[o[I@\폜܂B +ツールバーから選択した機能を削除します。 .topic 11001 -yZp[^}z +【セパレータ挿入】 -c[o[ɃZp[^}܂B +ツールバーにセパレータを挿入します。 .topic 11002 -yc[o[֋@\}z +【ツールバーへ機能挿入】 -IĂ@\c[o[ɑ}܂B +選択されている機能をツールバーに挿入します。 .topic 11003 -yc[o[֋@\ljz +【ツールバーへ機能追加】 -IĂ@\c[o[̍Ōɒlj܂B +選択されている機能をツールバーの最後に追加します。 .topic 11004 -yc[o[̋@\ֈړz +【ツールバーの機能を上へ移動】 -c[o[̑I@\̏ֈړ܂B +ツールバーの選択した機能の順序を上へ移動します。 .topic 11005 -yc[o[̋@\ֈړz +【ツールバーの機能を下へ移動】 -c[o[̑I@\̏ֈړ܂B +ツールバーの選択した機能の順序を下へ移動します。 .topic 11010 -ytbgȃ{^z +【フラットなボタン】 -c[o[̃{^tbgɂ܂B +ツールバーのボタンをフラットにします。 .topic 11030 -y@\̎ʁz +【機能の種別】 -ꗗ\@\̎ʂI܂B +一覧表示する機能の種別を選択します。 .topic 11040 -y@\ꗗz +【機能一覧】 -c[o[ɓo^”\ȌݑIĂʂ̋@\̈ꗗłB +ツールバーに登録可能な現在選択されている種別の機能の一覧です。 .topic 11041 -yc[o[ꗗz +【ツールバー一覧】 -c[o[XgłB +ツールバーリストです。 .topic 11042 -yc[o[ܕԁz +【ツールバー折返】 -ljꂽʒułŃc[o[܂Ԃĕ\܂B +追加された位置ででツールバーを折り返して表示します。 .topic 11110 -yNbJuURLz +【クリッカブルURL】 -URLNbNƂɁAURLŜIԂɂ܂B +URLをクリックしたときに、URL全体を選択状態にします。 .topic 11210 -yt@NVL[z +【ファンクションキー】 -EBhEɃt@NVL[\邩ǂݒ肵܂B +ウィンドウにファンクションキーを表示するかどうかを設定します。 .topic 11211 -yXe[^Xo[z +【ステータスバー】 -EBhEɃXe[^Xo[\邩ǂݒ肵܂B +ウィンドウにステータスバーを表示するかどうかを設定します。 .topic 11212 -yc[o[\z +【ツールバー表示】 -EBhEɃc[o[\邩ǂݒ肵܂B +ウィンドウにツールバーを表示するかどうかを設定します。 .topic 11213 -yXN[o[z +【水平スクロールバー】 -EBhEɐXN[o[\܂B +ウィンドウに水平スクロールバーを表示します。 .topic 11214 -yACRtj[z +【アイコン付きメニュー】 -j[ɃACRtĕ\܂B +メニューにアイコンを付けて表示します。 .topic 11215 -yEBhETCYpz +【ウィンドウサイズ継承】 -ŌɃTCYύXEBhETCYۑAȍ~̃EBhẼTCYɔf܂B +最後にサイズ変更したウィンドウサイズを保存し、それ以降のウィンドウのサイズに反映します。 -ʒuƑ傫̐ݒɈߑւB(sakura:1.4.7.0ȍ~) +位置と大きさの設定に衣替え。(sakura:1.4.7.0以降) .topic 11216 -yXN[̓Ƃz +【垂直スクロールの同期をとる】 -EɕĂƂ̕yCɓXN[܂B +左右に分割しているときの分割ペインが垂直方向に同時スクロールします。 .topic 11217 -yXN[̓Ƃz +【水平スクロールの同期をとる】 -㉺ɕĂƂ̕yCɓXN[܂B +上下に分割しているときの分割ペインが水平方向に同時スクロールします。 .topic 11218 -y^u\z +【タブ表示】 -EBhEɃ^u\邩ǂݒ肵܂B +ウィンドウにタブを表示するかどうかを設定します。 .topic 11219 -yO[vz +【グループ化】 -EBhEɃ^u\ƂɁA +ウィンドウにタブを表示するときに、 -EChE܂Ƃ߂ăO[v܂B +ウインドウをまとめてグループ化します。 .topic 11220 -yANeBu^Cgo[z +【アクティブ時タイトルバー】 -EBhEANeBȕꍇɃ^Cgo[ɕ\ݒ肵܂B +ウィンドウがアクティブの場合にタイトルバーに表示する情報を設定します。 .topic 11221 -yANeBu^Cgo[z +【非アクティブ時タイトルバー】 -EBhEANeBȕꍇɃ^Cgo[ɕ\ݒ肵܂B +ウィンドウが非アクティブの場合にタイトルバーに表示する情報を設定します。 .topic 11222 -y^uLvVz +【タブキャプション】 -^uɕ\ݒ肵܂B +タブに表示する情報を設定します。 .topic 11240 -y[[ƃeLXǧԁz +【ルーラーとテキストの隙間】 -[[ƃeLXg̊ԂhbgPʂŎw肵܂B +ルーラーとテキストの間をドット単位で指定します。 .topic 11241 -y[[̍z +【ルーラーの高さ】 -[[̍hbgPʂŎw肵܂B +ルーラーの高さをドット単位で指定します。 .topic 11242 -ysԍƃeLXǧԁz +【行番号とテキストの隙間】 -sԍƃeLXǧԂw肵܂B +行番号とテキストの隙間を指定します。 .topic 11260 -yt@NVL[\ʒuz +【ファンクションキー表示位置】 -t@NVL[ɕ\܂B +ファンクションキーを上に表示します。 .topic 11261 -yt@NVL[\ʒuz +【ファンクションキー表示位置】 -t@NVL[ɕ\܂B +ファンクションキーを下に表示します。 .topic 11262 -yt@NVL[̃O[v{^z +【ファンクションキーのグループボタン数】 -t@NVL[̃O[v{^w肵܂B +ファンクションキーのグループボタン数を指定します。 .topic 11263 -yʒuƑ傫̐ݒz +【位置と大きさの設定】 -ʒuƑ傫̐ݒ_CAO\܂B +位置と大きさの設定ダイアログが表示されます。 .topic 11270 -yz +【等幅】 -^uׂēɂ܂B +タブをすべて同じ幅にします。 .topic 11271 -yACR\z +【アイコン表示】 -^uɂꂼ̃ACR\܂B +タブにそれぞれのアイコンを表示します。 .topic 11272 -y^uꗗ\[gz +【タブ一覧ソート】 -EBhËꗗ\̂ƂɃt@CŃ\[g܂B +ウィンドウの一覧表示のときにファイル名でソートされます。 .topic 11273 -y()cz +【(無題)文書を残す】 -^u[hŃO[v̍Ō̃t@C‚Ƃ +タブモードでグループ内の最後のファイルを閉じたときに -()c܂B +(無題)文書を残します。 .topic 11274 -yEBhE̕‚{^݂͌̃t@Ĉݕ‚z +【ウィンドウの閉じるボタンは現在のファイルのみ閉じる】 -EBhE̕‚{^ƃ^uo[̕‚{^̓삪ւ܂B +ウィンドウの閉じるボタンとタブバーの閉じるボタンの動作が入れ替わります。 -̂Ƃ̓EBhE̕‚{^܂Ƃ߂ĕ‚铮łB +無効のときはウィンドウの閉じるボタンがまとめて閉じる動作です。 -L̂Ƃ̓^uo[̕‚{^܂Ƃ߂ĕ‚铮łB +有効のときはタブバーの閉じるボタンがまとめて閉じる動作です。 .topic 11275 -y}EXzC[Ń^uؑցz +【マウスホイールでタブ切替】 -^uŃzC[ƃ^u؂ւ܂B +タブ上でホイール操作をするとタブが切り替わります。 .topic 11276 -yONƂ͐VEChEŊJz +【外部から起動するときは新しいウインドウで開く】 -֘AtȂNJONꂽƂɁAV^uO[vŐVEBhEJ܂B +関連付けなど外部から起動されたときに、新しいタブグループで新しいウィンドウを開きます。 .topic 11277 -ytHgz +【フォント】 -^ũtHgw肵܂B +タブのフォントを指定します。 .topic 11278 -yEOő̃r[ł̌ύXpz +【次・前検索で他のビューでの検索条件変更を引き継ぐ】 -AǑʂق̃r[ňp܂B +次を検索、前を検索の検索結果をほかのビューで引き継ぎます。 .topic 11279 -y^u‚{^z +【タブを閉じるボタン】 -^uɕ‚{^\܂B +タブに閉じるボタンを表示します。 .topic 11280 -yiz +【多段】 -^u̐ƂA^uo[𕡐sŕ\܂B +タブの数が増えたとき、タブバーを複数行で表示します。 .topic 11281 -y\ʒuz +【表示位置】 -^uo[\ʒuw肵܂B +タブバーを表示する位置を指定します。 .topic 11310 -yp[hbvz +【英文ワードラップ】 -p[hbvLɂ܂B +英文ワードラップを有効にします。 .topic 11311 -ySPACȆ}z +【SPACEの挿入】 -^ȗɃ^uɑXy[X}܂B +タブの代わりにタブ幅に相当するスペースを挿入します。 .topic 11312 -ys֑z +【行頭禁則】 -s֑s܂B +行頭禁則を行います。 -sɂĂ͂܂is֑ŎwjOs̍sɂԂ牺܂B +行頭にあってはまずい文字(行頭禁則文字で指定)を前行の行末にぶら下げます。 .topic 11313 -ys֑z +【行末禁則】 -s֑s܂B +行末禁則を行います。 -sɂĂ͂܂is֑Ŏwjsɒǂo܂B +行末にあってはまずい文字(行末禁則文字で指定)を次行に追い出します。 .topic 11314 -ysԂ牺z +【改行文字をぶら下げる】 -sɗsOs̍sɂԂ牺܂B +行頭に来る改行文字を前行の行末にぶら下げます。 .topic 11315 -yǓ_Ԃ牺z +【句読点をぶら下げる】 -Ǔ_Ԃ牺Ɏw肳ꂽs(܂ԂʒủE)ɂԂ牺܂B +句読点ぶら下げに指定された文字を行末(折り返し位置の右側)にぶら下げます。 -us֑vɂ܂܂ĂƂ́AԂ牺̎w肪D悳܂B +同じ文字が「行頭禁則」文字にも含まれているときは、ぶら下げの指定が優先されます。 .topic 11330 -yTABz +【TAB幅】 -TABw肵܂B +TAB幅を指定します。 .topic 11331 -yIMEON/OFFԁz +【IMEのON/OFF状態】 -NIMEONɂ邩ǂw肵܂B +起動時にIMEもONにするかどうかを指定します。 .topic 11332 -yIME̓̓[hz +【IMEの入力モード】 -NIMEONɂꍇ̓̓[hw肵܂B +起動時にIMEもONにする場合の入力モードを指定します。 .topic 11333 -yX}[gCfgz +【スマートインデント】 -X}[gCfgw肵܂B +スマートインデントを指定します。 .topic 11334 -yAEgC͕@z +【アウトライン解析方法】 -AEgCʼn͂@w肵܂B +アウトラインで解析する方法を指定します。 .topic 11340 -yݒ̖Oz +【設定の名前】 -ݒɕt閼OLq܂B +設定に付ける名前を記述します。 .topic 11341 -yt@Cgqz +【ファイル拡張子】 -t@C̊gqw肵܂B +ファイルの拡張子を指定します。 -hbg͕tAw肷ꍇ̓J}ŋ؂܂B +ドットは付けず、複数指定する場合はカンマで区切ります。 .topic 11349 -y܂Ԃ@z +【折り返し方法】 -^Cvʂ̃ftHg̐܂Ԃ@w肵܂B +タイプ別のデフォルトの折り返し方法を指定します。 .topic 11342 -y܂Ԃz +【折り返し桁数】 -܂Ԃw肵܂B +折り返し桁数を指定します。 .topic 11343 -ẙԊuz +【文字の間隔】 -̊ԊuhbgPʂŎw肵܂B +文字の間隔をドット単位で指定します。 .topic 11344 -ys̊Ԋuz +【行の間隔】 -s̊ԊuhbgPʂŎw肵܂B +行の間隔をドット単位で指定します。 .topic 11345 -y̑̃CfgΏەz +【その他のインデント対象文字】 -󔒂TABȊÕCfgΏەw肵܂B +空白やTAB以外のインデント対象文字を指定します。 .topic 11346 -yTABz +【TAB文字】 -ŵƂATAB̕\Ɏg𔼊p8ȓŐݒ肵܂B +文字指定のとき、TABの表示に使う文字列を半角8文字以内で設定します。 .topic 11347 -ys֑z +【行頭禁則文字】 -s֑̑ΏۂƂȂs֑w肵܂B +行頭禁則の対象となる行頭禁則文字を指定します。 .topic 11348 -ys֑z +【行末禁則文字】 -s֑̑ΏۂƂȂs֑w肵܂B +行末禁則の対象となる行末禁則文字を指定します。 .topic 11350 -yTAB\z +【TAB表示】 -TAB̕\ŕw/Z(ṕ)/I܂B +TABの表示で文字指定/短い矢印(半角幅の→)/長い矢印を選択します。 .topic 11351 -y܂ԂsCfgz +【折り返し行インデント】 -܂Ԃꂽs̃CAEg̍sʒuCfg\邽߂̐ݒłB +折り返された行のレイアウト上の行頭位置をインデント表示するための設定です。 .topic 11352 -ysɖ̋󔒂폜z +【改行時に末尾の空白を削除】 -sɖ̋󔒂ꍇɁA󔒂폜Ăs܂B +改行時に末尾の空白がある場合に、空白を削除してから改行します。 .topic 11353 -yW[z +【標準ルール】 -`ς݂̃[iC/C++,eLXg,PL/SQL,JAVA,COBOL,Perl,AZu,Visual Basic,WZKw‚eLXg,HTML,TeXj +定義済みのルール(C/C++,テキスト,PL/SQL,JAVA,COBOL,Perl,アセンブラ,Visual Basic,WZ階層つきテキスト,HTML,TeX) -̂ǂꂩIăAEgC͂s܂B +のどれかを選択してアウトライン解析を行います。 .topic 11354 -y[t@Cz +【ルールファイル】 -[t@CgpăAEgC͂s܂B +ルールファイルを使用してアウトライン解析を行います。 .topic 11355 -y[t@Cz +【ルールファイル名】 -[t@CtpXEGfB^̑΃pXŎw肵܂B +ルールファイルをフルパス・エディタからの相対パスで指定します。 .topic 11356 -y[t@CQƁz +【ルールファイル参照】 -[t@C̃pXQƂ܂B +ルールファイル名のパスを参照します。 .topic 11357 -yACRgz +【文書アイコンを使う】 -GfB^̃ACR𕶏Ɋ֘AÂꂽ(tH_ŕ\)ɕύX܂B +エディタのアイコンを文書に関連づけられたもの(フォルダで表示されるもの)に変更します。 .topic 11358 -yǓ_Ԃ牺z -Ǔ_Ԃ牺̑Ώۂɂ镶w肵܂B +【句読点ぶら下げ文字】 +句読点ぶら下げの対象にする文字を指定します。 -us֑vɂ܂܂ĂƂ́AԂ牺̎w肪D悳܂B +同じ文字が「行頭禁則」文字にも含まれているときは、ぶら下げの指定が優先されます。 .topic 11359 -ygpz +【使用する】 -^Cvʂ̕\tHgݒLɂ邩ǂw肵܂B +タイプ別の表示フォント設定を有効にするかどうかを指定します。 .topic 11360 -ytHgz +【フォント】 -\tHgI܂B +表示フォントを選択します。 .topic 11400 -yFz +【文字色】 -FwőIĂ鍀ڂ̕Fݒ肵܂B +色指定で選択されている項目の文字色を設定します。 .topic 11401 -ywiFz +【背景色】 -FwőIĂ鍀ڂ̔wiFݒ肵܂B +色指定で選択されている項目の背景色を設定します。 .topic 11402 -yFz +【文字色統一】 -ݑIĂ镶FłׂĂ̕F𓝈ꂵ܂B +現在選択されている文字色ですべての文字色を統一します。 .topic 11403 -ywiFz +【背景色統一】 -ݑIĂwiFłׂĂ̔wiF𓝈ꂵ܂B +現在選択されている背景色ですべての背景色を統一します。 .topic 11404 -yC|[gz +【インポート】 -F̐ݒt@Cǂݍ݂܂B +色の設定情報をファイルから読み込みます。 .topic 11405 -yGNX|[gz +【エクスポート】 -F̐ݒt@Cɕۑ܂B +色の設定情報をファイルに保存します。 .topic 11410 -yF^\z +【色分け/表示】 -IĂ鍀ڂF(܂͕\)邩ǂw肵܂B +選択されている項目を色分け(または表示)するかどうか指定します。 .topic 11411 -yz +【太字】 -IĂ鍀ڂ𑾎ɂ邩ǂw肵܂B +選択されている項目を太字にするかどうか指定します。 .topic 11412 -yz +【下線】 -IĂ鍀ڂɉǂw肵܂B +選択されている項目に下線を引くかどうか指定します。 .topic 11413 -yz +【桁】 -s^RgPŒ茅ŗL̏ꍇɃ`FbN܂B +行型コメント1が固定桁で有効の場合にチェックします。 .topic 11414 -yz +【桁】 -s^RgQŒ茅ŗL̏ꍇɃ`FbN܂B +行型コメント2が固定桁で有効の場合にチェックします。 .topic 11420 -ywi摜z +【背景画像】 -wi摜̃t@Cw肵܂B +背景画像のファイル名を指定します。 .topic 11421 -y...z +【...】 -wi摜I_CAO\܂B +背景画像を選択するダイアログを表示します。 .topic 11422 -ywi摜ʒuz +【背景画像位置】 -wi摜\ʒuw肵܂B +背景画像を表示する位置を指定します。 .topic 11423 -yScrollXz +【ScrollX】 -̃XN[ɍ킹Ĕwi摜XN[邩ǂw肵܂B +水平方向のスクロールに合わせて背景画像をスクロールさせるかどうかを指定します。 .topic 11424 -yScrollYz +【ScrollY】 -̃XN[ɍ킹Ĕwi摜XN[邩ǂw肵܂B +垂直方向のスクロールに合わせて背景画像をスクロールさせるかどうかを指定します。 .topic 11425 -yRepeatXz +【RepeatX】 -wi摜𐅕ɌJԂ\邩ǂw肵܂B +背景画像を水平方向に繰り返し表示するかどうかを指定します。 .topic 11426 -yRepeatYz +【RepeatY】 -wi摜𐅕ɌJԂ\邩ǂw肵܂B +背景画像を水平方向に繰り返し表示するかどうかを指定します。 .topic 11427 -yOffsetXz +【OffsetX】 -wi摜̕\ʒuw肵sNZEɈړ܂B +背景画像の表示位置を指定したピクセル分だけ右に移動します。 .topic 11428 -yOffsetYz +【OffsetY】 -wi摜̕\ʒuw肵sNZɈړ܂B +背景画像の表示位置を指定したピクセル分だけ下に移動します。 .topic 11429 -ysxz +【不透明度】 -wi摜̕sxw肵܂B +背景画像の不透明度を指定します。 .topic 11430 -yL[[hPZbgz +【強調キーワード1セット名】 -L[[hP̃Zbgw肵܂B +強調キーワード1のセット名を指定します。 .topic 11431 -yL[[hQZbgz +【強調キーワード2セット名】 -L[[hQ̃Zbgw肵܂B +強調キーワード2のセット名を指定します。 .topic 11440 -yubNRgJnz +【ブロックコメント開始】 -ubNRgP̊Jnp^[w肵܂B +ブロックコメント1の開始パターンを指定します。 .topic 11441 -yubNRgIz +【ブロックコメント終了】 -ubNRgP̏Ip^[w肵܂B +ブロックコメント1の終了パターンを指定します。 .topic 11442 -ys^Rgz +【行型コメント】 -sRgP̃p^[w肵܂B +行コメント1のパターンを指定します。 .topic 11443 -ys^Rgz +【行型コメント】 -sRgQ̃p^[w肵܂B +行コメント2のパターンを指定します。 .topic 11444 -yz +【桁数】 -sRgPŒ茅ŗL̏ꍇɌw肵܂B +行コメント1が固定桁で有効の場合に桁数を指定します。 .topic 11445 -yz +【桁数】 -sRgQŒ茅ŗL̏ꍇɌw肵܂B +行コメント2が固定桁で有効の場合に桁数を指定します。 .topic 11446 -ysԍ؂z +【行番号区切り】 -sԍ̋؂蕶𔼊pPŎw肵܂B +行番号の区切り文字を半角1文字で指定します。 .topic 11447 -yubNRgJnz +【ブロックコメント開始】 -ubNRgQ̊Jnp^[w肵܂B +ブロックコメント2の開始パターンを指定します。 .topic 11448 -yubNRgIz +【ブロックコメント終了】 -ubNRgQ̏Ip^[w肵܂B +ブロックコメント2の終了パターンを指定します。 .topic 11449 -ys^Rgz +【行型コメント】 -sRgR̃p^[w肵܂B +行コメント3のパターンを指定します。 .topic 11450 -yFwz +【色指定】 -Fw肷鍀ڂ̈ꗗłB +色を指定する項目の一覧です。 .topic 11451 -yz +【桁】 -s^RgRŒ茅ŗL̏ꍇɃ`FbN܂B +行型コメント3が固定桁で有効の場合にチェックします。 .topic 11452 -yz +【桁数】 -sRgRŒ茅ŗL̏ꍇɌw肵܂B +行コメント3が固定桁で有効の場合に桁数を指定します。 .topic 11460 -yGXP[viCꕗjz +【文字列エスケープ(C言語風)】 -̃GXP[vCꕗ\\"\\'ŕ\܂B +文字列のエスケープをC言語風に\\"や\\'で表します。 .topic 11461 -yGXP[viPL/SQLjz +【文字列エスケープ(PL/SQL風)】 -̃GXP[vPL/SQL""''ŕ\܂B +文字列のエスケープをPL/SQL風に""や''で表します。 .topic 11462 -ysԍ̕\i܂ԂPʁjz +【行番号の表示(折り返し単位)】 -sԍ̕\܂ԂPʂɂ܂B +行番号の表示を折り返し単位にします。 .topic 11463 -ysԍ̕\isPʁjz +【行番号の表示(改行単位)】 -sԍ̕\sPʂɂ܂B +行番号の表示を改行単位にします。 .topic 11769 -yz +【桁数】 -sԍ̍ŏw肵܂Bŏl2łB +行番号の最小桁数を指定します。最小値は2です。 .topic 11464 -ysԍ؂iȂjz +【行番号区切り(なし)】 -sԍ̋؂\܂B +行番号の区切りを表示しません。 .topic 11465 -ysԍ؂icjz +【行番号区切り(縦線)】 -sԍ̋؂cɂ܂B +行番号の区切りを縦線にします。 .topic 11466 -ysԍ؂iCӁjz +【行番号区切り(任意)】 -sԍ̋؂Cӂ̔pPɐݒ肵܂B +行番号の区切りを任意の半角1文字に設定します。 .topic 11467 -yL[[h2`10z +【強調キーワード2〜10】 -L[[h1狭L[[h10܂łI邱Ƃł܂B +強調キーワード1から強調キーワード10までを選択することができます。 .topic 11468 -yčwz +【縦線の桁指定】 -Œ̏c\܂B +桁固定の縦線を表示します。 -1F Xebv(Jnʒu, Iʒu) +書式1: ステップ桁数(開始桁位置, 終了桁位置) -2F Cӂ̌1, Cӂ̌2, `Cӂ̌n +書式2: 任意の桁1, 任意の桁2, 〜任意の桁n .topic 11469 -yGXP[vz +【文字列エスケープ】 -pň͂܂ꂽ̃GXP[v@I܂B +引用符で囲まれた文字列内のエスケープ方法を選択します。 -C/C++ꕗEEECꕗ\\"\\'ŕ\܂B܂C++11rawɑΉ܂B +C/C++言語風・・・C言語風に\\"や\\'で表します。またC++11のraw文字列に対応します。 -PL/SQLEEEPL/SQL""''ŕ\܂B +PL/SQL風・・・PL/SQL風に""や''で表します。 -HTML/XMLEEEl̒ł̂CꕗGXP[vs܂B +HTML/XML風・・・属性値の中でのみC言語風エスケープを行います。 -C#EEECꕗGXP[v̑A@"``"`̕ɑΉ܂B +C#風・・・C言語風エスケープの他、@"〜〜"形式の文字列に対応します。 -PythonEEECꕗGXP[v̑A"""``"""`̕ɑΉ܂B +Python風・・・C言語風エスケープの他、"""〜〜"""形式の文字列に対応します。 .topic 11470 -y͍ŝ݁z +【文字列は行内のみ】 -sɂ܂镶F߂܂Biraw@"`"A"""`"""͗OIɔF߂܂j +複数行にまたがる文字列を認めません。(raw文字列や@"〜"、"""〜"""は例外的に認めます) .topic 11471 -yIȂꍇs܂ŐFz +【終了文字がない場合行末まで色分け】 -I[̈p͂ĂȂƂs܂ł𕶎Ƃĕ\܂B +終端の引用符が入力されていないとき行末までを文字列として表示します。 .topic 11500 -y͕⊮ Pt@CQƁz +【入力補完 単語ファイル参照】 -͕⊮@\̒Pt@CQƂ܂B +入力補完機能の単語ファイルを参照します。 .topic 11501 -yL[[hwvt@CQƁz +【キーワードヘルプファイル参照】 -L[[hwv@\̎t@CQƂ܂B +キーワードヘルプ機能の辞書ファイルを参照します。 .topic 11510 -y͕⊮̉p啶z +【入力補完の英大文字小文字】 -͕⊮ʼnp啶𓯈ꎋ܂B +入力補完で英大文字小文字を同一視します。 .topic 11511 -yL[[hwv@\z +【キーワードヘルプ機能】 -L[[hwv@\gǂw肵܂B +キーワードヘルプ機能を使うかどうか指定します。 .topic 11512 -yҏWt@CTz +【編集中ファイルから候補を探す】 -`FbNƁAҏWt@C̉pP⃊Xgɒlj܂B +チェックすると、編集中ファイルの英単語を候補リストに追加します。 .topic 11513 -y͕⊮vOCz +【入力補完プラグイン】 -͕⊮vOĈgp̂w肵܂B +入力補完プラグインのうち使用するものを指定します。 .topic 11514 -yL[[hz +【強調キーワード】 -`FbNƁA^Cvʂɐݒ肳ꂽL[[h⃊Xgɒlj܂B +チェックすると、タイプ別に設定された強調キーワードを候補リストに追加します。 .topic 11540 -yPt@Cz +【単語ファイル名】 -͕⊮p̒Pt@CtpXGfB^̑΃pXŎw肵܂B +入力補完用の単語ファイル名をフルパスかエディタからの相対パスで指定します。 .topic 11541 -yt@Cz +【辞書ファイル名】 -L[[hwv@\̎t@CtpXGfB^̑΃pXŎw肵܂B +キーワードヘルプ機能の辞書ファイル名をフルパスかエディタからの相対パスで指定します。 .topic 11542 -yOwvt@Cz +【外部ヘルプファイル名】 -Owvt@Cw肵܂B +外部ヘルプファイル名を指定します。 .topic 11543 -yOwvt@CQƁz +【外部ヘルプファイル参照】 -Owvt@C̃pXQƂ܂B +外部ヘルプファイル名のパスを参照します。 .topic 11544 -yOHTMLwvt@Cz +【外部HTMLヘルプファイル名】 -OHTMLwvt@Cw肵܂B +外部HTMLヘルプファイル名を指定します。 .topic 11545 -yOHTMLwvt@CQƁz +【外部HTMLヘルプファイル参照】 -OHTMLwvt@C̃pXQƂ܂B +外部HTMLヘルプファイル名のパスを参照します。 .topic 11546 -yr[A𕡐NȂz +【ビューアを複数起動しない】 -ɂƊevZXƂɕʃEBhEŃwvJ܂B +無効にすると各プロセスごとに別ウィンドウでヘルプを開きます。 .topic 11547 -yۑɉsR[h݂̍xz +【保存時に改行コードの混在を警告する】 -̉sR[h݂ĂƂAۑɃbZ[W\܂B +複数の改行コードが混在しているとき、保存時にメッセージを表示します。 .topic 11548 -yz +【言語】 -GfB^̕\ύX܂BiʓrDLLKvj +エディタの表示言語を変更します。(別途言語DLLが必要) .topic 14300 -yftHgR[hz +【デフォルト文字コード】 -VK쐬Ƃ̕R[hw肵܂B +文書を新規作成するときの文字コードを指定します。 .topic 14301 -yʎCESU-8D悷z +【自動判別時にCESU-8を優先する】 -ʂUTF-8CESU-8̔ʂłȂƂCESU-8D悷邩w肵܂B +自動判別でUTF-8とCESU-8の判別ができないときにCESU-8を優先するかを指定します。 .topic 14302 -yftHgsR[hz +【デフォルト改行コード】 -VK쐬Ƃ̉sR[hw肵܂B +文書を新規作成するときの改行コードを指定します。 .topic 14303 -yftHgBOMz +【デフォルトBOM】 -VK쐬ƂBOMt邩ǂw肵܂B +文書を新規作成するときBOMを付加するかどうかを指定します。 .topic 14304 -yCPz +【CP】 -R[hŃR[hy[WIł悤ɂ܂B +文字コードでコードページを選択できるようにします。 .topic 11600 -yC|[gz +【インポート】 -K\L[[h̐ݒt@Cǂݍ݂܂B +正規表現キーワードの設定情報をファイルから読み込みます。 .topic 11601 -yGNX|[gz +【エクスポート】 -K\L[[h̐ݒt@Cɕۑ܂B +正規表現キーワードの設定情報をファイルに保存します。 .topic 11602 -y}z +【挿入】 -K\ƐFwŎw肵L[[hXg̃J[\ʒuɑ}܂B +正規表現と色指定で指定したキーワードをリストのカーソル位置に挿入します。 .topic 11603 -yljz +【追加】 -K\ƐFwŎw肵L[[hXg̍Ōɒlj܂B +正規表現と色指定で指定したキーワードをリストの最後に追加します。 .topic 11604 -yXVz +【更新】 -K\ƐFwŎw肵L[[hŃXg̃J[\ʒȕXV܂B +正規表現と色指定で指定したキーワードでリストのカーソル位置の情報を更新します。 .topic 11605 -y폜z +【削除】 -J[\ʒu̐K\L[[h폜܂B +カーソル位置の正規表現キーワードを削除します。 .topic 11606 -y擪z +【先頭】 -J[\ʒũL[[hXg̐擪Ɉړ܂B +カーソル位置のキーワードをリストの先頭に移動します。 .topic 11607 -yŏIz +【最終】 -J[\ʒũL[[hXg̍ŏIɈړ܂B +カーソル位置のキーワードをリストの最終に移動します。 .topic 11608 -yցz +【上へ】 -J[\ʒũL[[hЂƂֈړ܂B +カーソル位置のキーワードをひとつ上へ移動します。 .topic 11609 -yցz +【下へ】 -J[\ʒũL[[hЂƂ‰ֈړ܂B +カーソル位置のキーワードをひとつ下へ移動します。 .topic 11610 -yK\L[[hgpz +【正規表現キーワードを使用する】 -K\L[[hɂFLɂ܂B +正規表現キーワードによる色分けを有効にします。 .topic 11630 -yFwz +【色指定】 -L[[hɃ}b`Ƃ̐Fw肵܂B +キーワードにマッチしたときの色を指定します。 .topic 11640 -yK\z +【正規表現】 - K\L[[h͂܂B + 正規表現キーワードを入力します。 -L[[h / ` /k ł܂B +キーワードを / 〜 /k でくくります。 -L[[h / ܂ޏꍇ m# ` #k ł܂B +キーワードに / を含む場合は m# 〜 #k でくくります。 -^LN^ +メタキャラクタ -[] LN^NX +[] キャラクタクラス -() p^[O[v +() パターンをグループ化する -^ s +^ 行頭 -$ s +$ 行末 -. sCӂ1 +. 改行を除く任意の1文字 -* Õp^[0ȏ̌JԂ +* 直前のパターンの0回以上の繰り返し -+ Õp^[1ȏ̌JԂ ++ 直前のパターンの1回以上の繰り返し -? Õp^[0܂1񌻂 +? 直前のパターンが0回または1回現れる -| p^[̘_a +| パターンの論理和 -ڂ́uK\Cuɂ‚āvQƂĂB +詳しい書式は「正規表現ライブラリについて」を参照してください。 .topic 11650 -yL[[hXgz +【キーワードリスト】 -o^ς݂̐K\L[[h̃XgłB +登録済みの正規表現キーワードのリストです。 -Xg̏ɂL[[hقǗD揇ʂȂ܂B +リストの上にあるキーワードほど優先順位が高くなります。 .topic 11670 -yK\Cuo[Wz +【正規表現ライブラリバージョン】 -K\Cuo[WłB +正規表現ライブラリバージョンです。 -K\Cu‚Ȃꍇ́AbZ[W\܂B +正規表現ライブラリが見つからない場合は、メッセージが表示されます。 .topic 11700 -yQƁz +【参照】 -}Ni[ĂtH_w肵܂B +マクロが格納されているフォルダを指定します。 .topic 11701 -yݒz +【設定】 -}Nƃt@CŎw肳ꂽ}NIDŎw肳ꂽʒuɓo^܂B +マクロ名とファイル名で指定されたマクロをIDで指定された位置に登録します。 -}Nƃt@CȂ폜ɂȂ܂B +マクロ名とファイル名が空なら削除になります。 .topic 11730 -yIDz +【ID】 -}No^ʒuw肵܂B +マクロを登録する位置を指定します。 .topic 11731 -yFilez +【File】 -}Ñt@Cw肵܂B +マクロのファイル名を指定します。 .topic 11740 -y}Nz +【マクロ名】 -}N̖Ow肵܂B +マクロの名前を指定します。 .topic 11741 -y}Nꗗz +【マクロ一覧】 -o^Ă}ÑXgłB +登録されているマクロのリストです。 .topic 11750 -y}NtH_z +【マクロフォルダ】 -}Ni[ĂtH_w肵܂B +マクロが格納されているフォルダを指定します。 .topic 11751 -y}Ns邽тɃt@Cǂݍ݂Ȃz +【マクロを実行するたびにファイルを読み込みなおす】 -}NsɑΉ}Nt@Cǂݍłs܂B +マクロ実行時に対応するマクロファイルを読み込んでから実行します。 .topic 11763 -yLZmF҂ԁz +【キャンセル確認待ち時間】 -WSH}NEWSHvOC̃LZmF_CAO\܂ł̎ԂbŎw肵܂B +WSHマクロ・WSHプラグインのキャンセル確認ダイアログを表示するまでの時間を秒で指定します。 -0w肷ƁA_CAO\܂B +0を指定すると、ダイアログを表示しません。 .topic 11770 -yzzz +【配布元】 -vOC̔ztTCguEUŊJ܂B +プラグインの配付元サイトをブラウザで開きます。 .topic 11800 -yz +【下検索】 -J[\ʒu牺Ɍ܂B +カーソル位置から下方向に検索します。 .topic 11801 -y㌟z +【上検索】 -J[\ʒuɌ܂B +カーソル位置から上方向に検索します。 .topic 11802 -yLZz +【キャンセル】 -̃_CAO{bNX‚܂B +このダイアログボックスを閉じます。 .topic 11803 -ywvz +【ヘルプ】 -̃_CAO{bNX̐\ƂɃNbN܂B +このダイアログボックスの説明を表示するときにクリックします。 .topic 11804 -yPPʂŒTz +【単語単位で探す】 -ƂɒPPʂɂ邩ǂw肵܂B +検索するときに単語単位にするかどうか指定します。 .topic 11805 -yp啶Əʂz +【英大文字と小文字を区別する】 -Ƃɉp啶Əʂ邩ǂw肵܂B +検索するときに英大文字と小文字を区別するかどうか指定します。 .topic 11806 -yK\z +【正規表現】 -ɐK\gp܂B +検索に正規表現を使用します。 .topic 11807 -y‚ȂƂɃbZ[W\z +【見つからないときにメッセージを表示】 -Ɉv̂‚ȂĂbZ[W\܂B +条件に一致するものが見つからなくてもメッセージを表示します。 .topic 11808 -y_CAOIɕ‚z +【検索ダイアログを自動的に閉じる】 -Ã_CAOIɕ‚܂B +検索後、このダイアログを自動的に閉じます。 .topic 11809 -yz +【条件】 -镶͂܂B +検索する文字列を入力します。 -K\gpꍇ́A"/" "/k" ň͂ʼnB +正規表現を使用する場合は、"/" と "/k" で囲んで下さい。 -ڂ́uK\Cuɂ‚āvQƂĂB +詳しい書式は「正規表現ライブラリについて」を参照してください。 .topic 11810 -yK\o[Wz +【正規表現バージョン】 -K\Cũo[WłB +正規表現ライブラリのバージョン情報です。 .topic 11811 -yYs}[Nz +【検索該当行をマーク】 -ňvsubN}[Nɓo^܂B +検索で一致した行をブックマークに登録します。 .topic 11812 -y擪ijČz +【先頭(末尾)から再検索】 -t@CŏIi擪j܂ŌAt@C擪iŏIjČ܂B +ファイル最終(先頭)まで検索したら、ファイル先頭(最終)から再検索します。 .topic 11900 -yz +【下検索】 -J[\ʒu牺Ɍ܂B +カーソル位置から下方向に検索します。 .topic 11901 -y㌟z +【上検索】 -J[\ʒuɌ܂B +カーソル位置から上方向に検索します。 .topic 11902 -yuz +【置換】 -̈vЂƂ’u܂B +次の一致文字列をひとつ置換します。 .topic 11903 -yׂĒuz +【すべて置換】 -v镶ׂĒu܂B +一致する文字列をすべて置換します。 .topic 11904 -yLZz +【キャンセル】 -̃_CAO{bNX‚܂B +このダイアログボックスを閉じます。 .topic 11905 -ywvz +【ヘルプ】 -̃_CAO{bNX̐\ƂɃNbN܂B +このダイアログボックスの説明を表示するときにクリックします。 .topic 11906 -yNbv{[h\tz +【クリップボードから貼り付ける】 -u̕Nbv{[hɂ镶ɂ܂B +置換後の文字列をクリップボードにある文字列にします。 .topic 11907 -yPPʂŒTz +【単語単位で探す】 -ƂɒPPʂɂ邩ǂw肵܂B +検索するときに単語単位にするかどうか指定します。 .topic 11908 -yp啶Əʂz +【英大文字と小文字を区別する】 -Ƃɉp啶Əʂ邩ǂw肵܂B +検索するときに英大文字と小文字を区別するかどうか指定します。 .topic 11909 -yK\z +【正規表現】 -ɐK\gp܂B +検索に正規表現を使用します。 .topic 11910 -y‚ȂƂɃbZ[W\z +【見つからないときにメッセージを表示】 -Ɉv̂‚ȂĂbZ[W\܂B +条件に一致するものが見つからなくてもメッセージを表示します。 .topic 11911 -yu_CAOIɕ‚z +【置換ダイアログを自動的に閉じる】 -Ã_CAOIɕ‚܂B +検索後、このダイアログを自動的に閉じます。 .topic 11912 -yuOz +【置換前】 -u镶͂܂B +置換される文字列を入力します。 .topic 11913 -yuz +【置換後】 -u͂̕܂B +置換後の文字列を入力します。 -u㕶ɐK\gƂ͂ł܂B +置換後文字列に正規表現を使うことはできません。 .topic 11914 -yuΏ(I𕶎)z +【置換対象(選択文字)】 -uΏۂw肵܂B +置換対象を指定します。 -uO̕Ɉv镶u܂B +置換前の文字列に一致する文字列を置換します。 .topic 11915 -yuΏ(In_})z +【置換対象(選択始点挿入)】 -uΏۂw肵܂B +置換対象を指定します。 -uO̕Ɉv镶̎n_ɒu̕}܂B +置換前の文字列に一致する文字列の始点に置換後の文字列を挿入します。 .topic 11916 -yuΏ(II_lj)z +【置換対象(選択終点追加)】 -uΏۂw肵܂B +置換対象を指定します。 -uO̕Ɉv镶̏I_ɒu̕lj܂B +置換前の文字列に一致する文字列の終点に置換後の文字列を追加します。 .topic 11917 -y͈(t@CS)z +【範囲(ファイル全体)】 -u͈͂w肵܂B +置換範囲を指定します。 -t@CŜû߂̌Ώۂɂ܂B +ファイル全体を置換のための検索対象にします。 .topic 11918 -y͈(I͈)z +【範囲(選択範囲)】 -u͈͂w肵܂B +置換範囲を指定します。 -I͈͂û߂̌Ώۂɂ܂B +選択範囲を置換のための検索対象にします。 .topic 11919 -yK\o[Wz +【正規表現バージョン】 -K\Cũo[WłB +正規表現ライブラリのバージョン情報です。 .topic 11920 -yYs}[Nz +【検索該当行をマーク】 -ňvsubN}[Nɓo^܂B +検索で一致した行をブックマークに登録します。 .topic 11921 -y擪ijČz +【先頭(末尾)から再検索】 -t@CŏIi擪j܂ŌAt@C擪iŏIjČ܂B +ファイル最終(先頭)まで検索したら、ファイル先頭(最終)から再検索します。 .topic 11922 -yuׂĒuv͒ǔJԂz +【「すべて置換」は置換の繰返し】 -ʒuw܂ރp^[ꍇɂ̂݌ʂقȂ܂B +位置指定を含むパターンを消去する場合にのみ結果が異なります。 .topic 12000 -ytH_QƁz +【フォルダ参照】 -GREPstH_QƂ܂B +GREPを行うフォルダを参照します。 .topic 12001 -ytH_z +【現フォルダ】 -݂̃tH_GREPstH_Ɏw肵܂B +現在のフォルダをGREPを行うフォルダに指定します。 .topic 12002 -yz +【検索】 -GREPJn܂B +GREPを開始します。 .topic 12003 -yLZz +【キャンセル】 -̃_CAO{bNX‚܂B +このダイアログボックスを閉じます。 .topic 12004 -ywvz +【ヘルプ】 -̃_CAO{bNX̐\ƂɃNbN܂B +このダイアログボックスの説明を表示するときにクリックします。 .topic 12005 -yPPʂŒTz +【単語単位で探す】 -ƂɒPPʂɂ邩ǂw肵܂B +検索するときに単語単位にするかどうか指定します。 .topic 12006 -yTutH_z +【サブフォルダからも検索】 -GREPstH_̃TutH_GREP̑Ώۂɂ܂B +GREPを行うフォルダのサブフォルダもGREPの対象にします。 .topic 12007 -yݕҏW̃t@C猟z +【現在編集中のファイルから検索】 -ݕҏW̃t@Cɂ‚ẮAҏW̃f[^GREP̑Ώۂɂ܂B +現在編集中のファイルについては、編集中のデータをGREPの対象にします。 -ҏW̃t@CۑĂȂꍇɁAʂقȂĂ܂B +編集中のファイルが保存されていない場合に、結果が異なってきます。 .topic 12008 -yp啶Əʂz +【英大文字と小文字を区別する】 -Ƃɉp啶Əʂ邩ǂw肵܂B +検索するときに英大文字と小文字を区別するかどうか指定します。 .topic 12009 -yK\z +【正規表現】 -ɐK\gp܂B +検索に正規表現を使用します。 .topic 12010 -yR[hZbgz +【文字コードセット】 -GREPt@C̕R[hZbgw肵܂B +GREPするファイルの文字コードセットを指定します。 .topic 12011 -yz +【条件】 -GREP镶w肵܂B +GREPする文字列を指定します。 -K\gp邱Ƃł܂B +正規表現を使用することができます。 .topic 12012 -yt@Cz +【ファイル】 -GREP̑Ώۂɂt@Cw肵܂B +GREPの対象にするファイル名を指定します。 -ʏ͊gqw肵܂B +通常は拡張子を指定します。 -̍ڂLqꍇ́ApXy[XEJ}EZ~R̂ꂩŋ؂ċLq܂B +複数の項目を記述する場合は、半角スペース・カンマ・セミコロンのいずれかで区切って記述します。 -ChJ[hgpłAp^[̐擪!‚ΏOwł܂B(: *.c* *.h* !*.svn-base) +ワイルドカードが使用でき、パターンの先頭に!をつければ除外指定もできます。(例: *.c* *.h* !*.svn-base) .topic 12013 -ytH_z +【フォルダ】 -GREPstH_w肵܂B +GREPを行うフォルダを指定します。 .topic 12014 -yʏo(Ys)z +【結果出力(該当行)】 -GREP̌ʂƂĈv镶܂ލsŜ\܂B +GREPの結果として一致する文字列を含む行全体を表示します。 .topic 12015 -yʏo(Y)z +【結果出力(該当部分)】 -GREP̌ʂƂĈv镶܂ޕ\܂B +GREPの結果として一致する文字列を含む部分を表示します。 .topic 12016 -yʏo͌`(m[})z +【結果出力形式(ノーマル)】 -GREP̌ʏo͌`ƂĈvׂĕ\܂B +GREPの結果出力形式として一致した部分をすべて表示します。 .topic 12017 -yʏo͌`(t@C)z +【結果出力形式(ファイル毎)】 -GREP̌ʏo͌`ƂĈv܂ރt@C\܂B +GREPの結果出力形式として一致した部分を含むファイルを表示します。 .topic 12018 -yK\o[Wz +【正規表現バージョン】 -K\Cũo[WłB +正規表現ライブラリのバージョン情報です。 .topic 12019 -ytH_̏lJgtH_ɂz +【フォルダの初期値をカレントフォルダにする】 -GREPtH_̏tH_JgtH_ɂ܂B +GREPするフォルダの初期フォルダをカレントフォルダにします。 .topic 12020 -yʏo͌`(ʂ̂)z +【結果出力形式(結果のみ)】 -GREP̌ʏo͌`ƂČʕ̂ݏo͂܂B +GREPの結果出力形式として結果部分のみ出力します。 .topic 12021 -yt@Cŏ̂݁z +【ファイル毎最初のみ】 -t@C1񂾂ʂo͂܂B +ファイル毎に1回だけ結果を出力します。 .topic 12022 -yx[XtH_\z +【ベースフォルダ表示】 -[gtH_̕\Ƃ̑΃pXŏo͂܂B +ルートフォルダの表示とそこからの相対パスで出力します。 .topic 12023 -ytH_ɕ\z +【フォルダ毎に表示】 -TutH_ɃpX܂Ƃ߂đ΃pXŏo͂܂B +サブフォルダ毎にパスをまとめて相対パスで出力します。 .topic 12024 -yz +【上】 -GREPtH_1Kwɐݒ肵܂B +GREPするフォルダを1階層上に設定します。 .topic 12025 -yCPz +【CP】 -R[hZbgŃR[hy[WIł悤ɂ܂B +文字コードセットでコードページを選択できるようにします。 .topic 12026 -yOt@Cz +【除外ファイル】 -GREP珜Ot@Cw肵܂B +GREPから除外するファイルを指定します。 .topic 12027 -yOtH_z +【除外フォルダ】 -GREP珜OtH_w肵܂B +GREPから除外するフォルダを指定します。 .topic 12100 -yQƁz +【参照】 -sOvOt@CQƂ܂B +実行する外部プログラムファイルを参照します。 .topic 12101 -ysz +【実行】 -OvOs܂B +外部プログラムを実行します。 .topic 12102 -yLZz +【キャンセル】 -̃_CAO{bNX‚܂B +このダイアログボックスを閉じます。 .topic 12103 -ywvz +【ヘルプ】 -̃_CAO{bNX̐\ƂɃNbN܂B +このダイアログボックスの説明を表示するときにクリックします。 .topic 12104 -yWo͂𓾂z +【標準出力を得る】 -OvOWo͂ɏo͂郁bZ[W荞݂܂B +外部プログラムが標準出力に出力するメッセージを取り込みます。 .topic 12105 -yR}hz +【コマンド】 -sOvOw肵܂B +実行する外部プログラムを指定します。 .topic 12106 -yWo̓_CNgFAEgvbgEBhEz +【標準出力リダイレクト先:アウトプットウィンドウ】 -qvZX̕Wo͂AAEgvbgEBhEɏo͂܂B +子プロセスの標準出力を、アウトプットウィンドウに出力します。 .topic 12107 -yWo̓_CNgFҏW̃EBhEz +【標準出力リダイレクト先:編集中のウィンドウ】 -qvZX̕Wo͂AҏW̃EBhEɎ荞݂܂B +子プロセスの標準出力を、編集中のウィンドウに取り込みます。 .topic 12108 -yW͂ɑz +【標準入力に送る】 -ҏW̃EBhE̓eqvZX̕W͂փ_CNg܂B +編集中のウィンドウの内容を子プロセスの標準入力へリダイレクトします。 -͈͑I𒆂ł΁AI͈݂͂̂n܂B +範囲選択中であれば、選択範囲のみを渡します。 .topic 12109 -yWo͕R[hz +【標準出力文字コード】 -Wo͂̎sʂw肵R[hŎ󂯎܂B +標準出力からの実行結果を指定した文字コードで受け取ります。 .topic 12110 -yW͕R[hz +【標準入力文字コード】 -ҏW̓ew肵R[hŕW͂ɓn܂B +編集中の内容を指定した文字コードで標準入力に渡します。 .topic 12111 -yJgfBNgz +【カレントディレクトリ】 -R}hs̃JgfBNgύX܂B +コマンド実行時のカレントディレクトリを変更します。 .topic 12112 -yJgfBNgwz +【カレントディレクトリ指定】 -JgfBNgw肵܂B +カレントディレクトリを指定します。 .topic 12200 -yRs[z +【コピー】 -AEgC͌ʂNbv{[hɃRs[܂B +アウトライン解析結果をクリップボードにコピーします。 -AEgC͌ʂNbv{[hɃRs[܂B +アウトライン解析結果をクリップボードにコピーします。 .topic 12201 -yWvz +【ジャンプ】 -Xg܂̓c[őIĂgsbNɃWv܂B +リストまたはツリーで選択されているトピックにジャンプします。 .topic 12202 -yLZz +【キャンセル】 -̃_CAO{bNX‚܂B +このダイアログボックスを閉じます。 .topic 12203 -ywvz +【ヘルプ】 -̃_CAO{bNX̐\ƂɃNbN܂B +このダイアログボックスの説明を表示するときにクリックします。 .topic 12204 -ỹ_CAOIɕ‚z +【このダイアログを自動的に閉じる】 -WvsƓɂ̃_CAO{bNX‚܂B +ジャンプを行うと同時にこのダイアログボックスを閉じます。 .topic 12205 -ygsbNXgz +【トピックリスト】 -ɃAEgC͌ʂ̃Xg\܂B +ここにアウトライン解析結果のリストが表示されます。 .topic 12206 -ygsbNc[z +【トピックツリー】 -ɃAEgC͌ʂ̃c[\܂B +ここにアウトライン解析結果のツリーが表示されます。 .topic 12207 -yWvŃtH[JXړz +【ジャンプでフォーカス移動する】 -WvŕҏWʂɃtH[JXړ܂B +ジャンプで編集画面にフォーカスを移動します。 .topic 12208 -ys𖳎z +【空行を無視する】 -s𖳎܂B +空行を無視します。 .topic 12209 -yz +【順序】 -Xg̏w肵܂B +リストの順序を指定します。 .topic 12210 -yEBhEʒuۑz +【■ウィンドウ位置保存】 -ĂƁAAEgC̓_CAÕEChEʒuƃTCYL܂B +押し下げられていると、アウトライン解析ダイアログのウインドウ位置とサイズを記憶します。 .topic 12211 -yEBhËʒuj[z +【▼ウィンドウの位置メニュー】 -hbLOʒũj[\܂B +ドッキング位置のメニューを表示します。 .topic 12300 -y㉺ɕ\z +【上下に表示】 -̍ڂɑΉ͂܂B +この項目に対応する説明はありません。 .topic 12301 -yEɕ\z +【左右に表示】 -rʂEɕ\܂B +比較結果を左右に表示します。 .topic 12302 -yOKz +【OK】 -t@Ce̔rJn܂B +ファイル内容の比較を開始します。 .topic 12303 -yLZz +【キャンセル】 -̃_CAO{bNX‚܂B +このダイアログボックスを閉じます。 .topic 12304 -ywvz +【ヘルプ】 -̃_CAO{bNX̐\ƂɃNbN܂B +このダイアログボックスの説明を表示するときにクリックします。 .topic 12305 -yEɕ\z +【左右に表示】 -̍ڂɑΉ͂܂B +この項目に対応する説明はありません。 .topic 12306 -yt@Cꗗz +【ファイル一覧】 -݃GfB^ŊJĂt@C̈ꗗłB +現在エディタで開いているファイルの一覧です。 -̂̂ЂƂ‚rΏۃt@CƂĎw肵܂B +このうちのひとつを比較対象ファイルとして指定します。 .topic 12307 -yt@Cz +【元ファイル】 -rɂȂt@C\܂B +比較元になるファイルが表示されます。 .topic 12500 -yݒ薼ύXz +【設定名変更】 -ݒ薼ύX܂B +設定名を変更します。 .topic 12501 -yOKz +【OK】 -ύXeۑÃ_CAO{bNX‚܂B +変更内容を保存し、このダイアログボックスを閉じます。 .topic 12502 -yLZz +【キャンセル】 -ύXeۑɁÃ_CAO{bNX‚܂B +変更内容を保存せずに、このダイアログボックスを閉じます。 .topic 12503 -ywvz +【ヘルプ】 -̃_CAO{bNX̐\ƂɃNbN܂B +このダイアログボックスの説明を表示するときにクリックします。 .topic 12504 -y[hbvz +【ワードラップ】 -P̓rʼnsȂ悤ɂ܂B +単語の途中で改行しないようにします。 .topic 12505 -ysԍz +【行番号】 -sԍ܂B +行番号を印刷します。 .topic 12506 -yptHgz +【半角フォント】 -Ɏgp锼ptHgw肵܂B +印刷に使用する半角フォントを指定します。 .topic 12507 -ySptHgz +【全角フォント】 -ɎgpSptHgw肵܂B +印刷に使用する全角フォントを指定します。 .topic 12508 -yy[Wݒz +【ページ設定】 -y[WݒI܂B +ページ設定を選択します。 .topic 12509 -ypTCYz +【用紙サイズ】 -p̃TCYw肵܂B +印刷する用紙のサイズを指定します。 .topic 12510 -ypz +【用紙向き】 -p̌w肵܂B +印刷する用紙の向きを指定します。 .topic 12511 -ytHgz +【フォント幅】 -tHg 1/10mmPʂŎw肵܂B +フォント幅 を1/10mm単位で指定します。 .topic 12512 -ysz +【行送り】 -sƍs̊Ԃ̕Ԃw肵܂B +行と行の間の幅を隙間を指定します。 .topic 12513 -yiz +【段数】 -iw肵܂B +段数を指定します。 .topic 12514 -yǐԁz +【段の隙間】 -iƒǐԂw肵܂B +段と段の隙間を指定します。 .topic 12515 -y]z +【余白上】 -y[W[ƃy[W擪sƂ̊Ԃ̌Ԃw肵܂B +ページ上端とページ先頭行との間の隙間を指定します。 .topic 12516 -y]z +【余白下】 -y[W[ƃy[WŏIsƂ̊Ԃ̌Ԃw肵܂B +ページ下端とページ最終行との間の隙間を指定します。 .topic 12517 -y]z +【余白左】 -y[W[ƍsƂ̊Ԃ̌Ԃw肵܂B +ページ左端と行頭との間の隙間を指定します。 .topic 12518 -y]Ez +【余白右】 -y[WE[ƍsƂ̊Ԃ̌Ԃw肵܂B +ページ右端と行末との間の隙間を指定します。 .topic 12519 -ys֑z +【行頭禁則】 -s֑s܂B +行頭禁則を行います。 -sɂĂ͂܂is֑ŎwjOs̍sɂԂ牺܂B +行頭にあってはまずい文字(行頭禁則文字で指定)を前行の行末にぶら下げます。 .topic 12520 -ys֑z +【行末禁則】 -s֑s܂B +行末禁則を行います。 -sɂĂ͂܂is֑Ŏwjsɒǂo܂B +行末にあってはまずい文字(行末禁則文字で指定)を次行に追い出します。 .topic 12521 -ysԂ牺z +【改行文字をぶら下げる】 -sɗsOs̍sɂԂ牺܂B +行頭に来る改行文字を前行の行末にぶら下げます。 .topic 12522 -yǓ_Ԃ牺z +【句読点をぶら下げる】 -sɗǓ_Os̍sɂԂ牺܂B +行頭に来る句読点を前行の行末にぶら下げます。 .topic 12523 -ywb_[()z +【ヘッダー(左寄せ)】 -wb_[()̈ew肵܂B +ヘッダー(左寄せ)の印刷内容を指定します。 .topic 12524 -ywb_[()z +【ヘッダー(中央寄せ)】 -wb_[()̈ew肵܂B +ヘッダー(中央寄せ)の印刷内容を指定します。 .topic 12525 -ywb_[(E)z +【ヘッダー(右寄せ)】 -wb_[(E)̈ew肵܂B +ヘッダー(右寄せ)の印刷内容を指定します。 .topic 12526 -ytb^[()z +【フッター(左寄せ)】 -tb^[()̈ew肵܂B +フッター(左寄せ)の印刷内容を指定します。 .topic 12527 -ytb^[()z +【フッター(中央寄せ)】 -tb^[()̈ew肵܂B +フッター(中央寄せ)の印刷内容を指定します。 .topic 12528 -ytb^[(E)z +【フッター(右寄せ)】 -tb^[(E)̈ew肵܂B +フッター(右寄せ)の印刷内容を指定します。 .topic 12529 -yJ[z +【カラー印刷】 -{ƓJ[ݒň܂B +本文と同じカラー設定で印刷します。 .topic 12530 -ytHgz +【フォント高】 -tHg 1/10mmPʂŎw肵܂B +フォント高 を1/10mm単位で指定します。 .topic 12531 -ytHgw(wb_[)z +【フォント指定(ヘッダー)】 -wb_[gptHgw/܂B +ヘッダー使用するフォントを指定/解除します。 .topic 12532 -ytHgw(tb^[)z +【フォント指定(フッター)】 -tb^[gptHgw/܂B +フッター使用するフォントを指定/解除します。 .topic 12600 -y‚z +【閉じる】 -̃_CAO{bNX‚܂B +このダイアログボックスを閉じます。 .topic 12601 -y‚z +【閉じる】 -̃_CAO{bNX‚܂B +このダイアログボックスを閉じます。 .topic 12602 -ywvz +【ヘルプ】 -̃_CAO{bNX̐\ƂɃNbN܂B +このダイアログボックスの説明を表示するときにクリックします。 .topic 12603 -y\̈z +【表示領域】 -ݕҏW̃t@C̏ڍ׏񂪕\܂B +現在編集中のファイルの詳細情報が表示されます。 .topic 12700 -yꎞKpz +【一時適用】 -Iݒ݂̃t@CɈꎞIɓKp܂B +選択した設定を現在のファイルに一時的に適用します。 .topic 12701 -yݒz +【設定】 -I^Cvʐݒs߂Ƀ^CvʐݒʂJ܂B +選択したタイプ別設定を行うためにタイプ別設定画面を開きます。 .topic 12702 -yLZz +【キャンセル】 -̃_CAO{bNX‚܂B +このダイアログボックスを閉じます。 .topic 12703 -ywvz +【ヘルプ】 -̃_CAO{bNX̐\ƂɃNbN܂B +このダイアログボックスの説明を表示するときにクリックします。 .topic 12704 -yXgz +【リスト】 -o^Ă^Cvʐݒ̈ꗗłB +登録されているタイプ別設定の一覧です。 .topic 12705 -yC|[gz +【インポート】 -t@C^CvʐݒC|[g܂B +ファイルからタイプ別設定をインポートします。 .topic 12706 -yGNX|[gz +【エクスポート】 -^Cvʐݒt@CɃGNX|[g܂B +タイプ別設定をファイルにエクスポートします。 .topic 12707 -yz +【初期化】 -XgőI𒆂̃^Cvʐݒ܂B +リストで選択中のタイプ別設定を初期化します。 .topic 12708 -yENbNj[ɒljz +【右クリックメニューに追加】 -^CvŐݒ肵gq̃t@C̉ENbNj[ɃTNGfB^lj܂B +タイプで設定した拡張子のファイルの右クリックメニューにサクラエディタを追加します。 .topic 12709 -y_uNbNŊJz +【ダブルクリックで開く】 -^CvŐݒ肵gq̃t@CTNGfB^Ɋ֘At܂B +タイプで設定した拡張子のファイルをサクラエディタに関連付けします。 .topic 12710 -yz +【↑】 -I^CvʐݒɈړ܂B +選択したタイプ別設定を一つ上に移動します。 .topic 12711 -yz +【↓】 -I^Cvʐݒ‰Ɉړ܂B +選択したタイプ別設定を一つ下に移動します。 .topic 12712 -yljz +【追加】 -ꗗ̖Ƀ^Cvʐݒlj܂B +一覧の末尾にタイプ別設定を追加します。 .topic 12713 -y폜z +【削除】 -I^Cvʐݒ폜܂B +選択したタイプ別設定を削除します。 .topic 12714 -yz +【複製】 -I^Cvʐݒ𕡐Ĉꗗ̖ɒlj܂B +選択したタイプ別設定を複製して一覧の末尾に追加します。 .topic 12720 -yFwz +【色指定】 -I^CvFݒC|[g܂B +選択したタイプから色設定をインポートします。 .topic 12721 -yOKz +【OK】 -^CvʐݒC|[gÃ_CAO{bNX‚܂B +タイプ別設定をインポートし、このダイアログボックスを閉じます。 .topic 12722 -yLZz +【キャンセル】 -C|[gs킸Ã_CAO{bNX‚܂B +インポートを行わず、このダイアログボックスを閉じます。 .topic 12723 -ywvz +【ヘルプ】 -̃_CAO{bNX̐\ƂɃNbN܂B +このダイアログボックスの説明を表示するときにクリックします。 .topic 12800 -yWvz +【ジャンプ】 -w肵sɃWv܂B +指定した行にジャンプします。 .topic 12801 -yLZz +【キャンセル】 -̃_CAO{bNX‚܂B +このダイアログボックスを閉じます。 .topic 12802 -ywvz +【ヘルプ】 -̃_CAO{bNX̐\ƂɃNbN܂B +このダイアログボックスの説明を表示するときにクリックします。 .topic 12803 -yPL/SQLz +【PL/SQL】 -̍ڂɑΉ͂܂B +この項目に対応する説明はありません。 .topic 12804 -yHIDC_JUMP_COMBO_PLSQLBLOCKSz +【HIDC_JUMP_COMBO_PLSQLBLOCKS】 -̍ڂɑΉ͂܂B +この項目に対応する説明はありません。 .topic 12805 -ysԍz +【行番号】 -Wvsԍw肵܂B +ジャンプする行番号を指定します。 .topic 12806 -yHIDC_JUMP_EDIT_PLSQL_E1z +【HIDC_JUMP_EDIT_PLSQL_E1】 -̍ڂɑΉ͂܂B +この項目に対応する説明はありません。 .topic 12807 -y܂ԂPʁz +【折り返し単位】 -w肵sԍ܂ԂPʂ̍sԍƂĔF܂B +指定した行番号を折り返し単位の行番号として認識します。 .topic 12808 -ysPʁz +【改行単位】 -w肵sԍsPʂ̍sԍƂĔF܂B +指定した行番号を改行単位の行番号として認識します。 .topic 12900 -yҘAz +【原作者連絡先】 -̃{^Ɗ̃uEUgpČ҂̃z[y[Wɐڑ܂B +このボタンを押すと既定のブラウザを使用して原作者のホームページに接続します。 -z[y[W𐳂\ɂ́Ag̃Rs[^C^[lbgɐڑĂȂ΂Ȃ܂B +ホームページを正しく表示するには、お使いのコンピュータがインターネットに接続されていなければなりません。 .topic 12901 -yOKz +【OK】 -̃_CAO{bNX‚܂B +このダイアログボックスを閉じます。 .topic 12902 -yڍ׏z +【詳細情報】 -̃\tgEFAɊւ񂪕\܂B +このソフトウェアに関する情報が表示されます。 .topic 13000 -yOKz +【OK】 -̓tB[hɓ͂ݒ肵Ã_CAO{bNX‚܂B +入力フィールドに入力した文字列を設定し、このダイアログボックスを閉じます。 .topic 13001 -yLZz +【キャンセル】 -̓tB[hɓ͂jÃ_CAO{bNX‚܂B +入力フィールドに入力した文字列を破棄し、このダイアログボックスを閉じます。 .topic 13002 -y̓tB[hz +【入力フィールド】 -bZ[Wɏ]ĕ͂ĂB +メッセージに従って文字列を入力してください。 .topic 13100 -yOKz +【OK】 -̍ڂɑΉ͂܂ +この項目に対応する説明はありません .topic 13101 -yLZz +【キャンセル】 -̃_CAO{bNX‚܂B +このダイアログボックスを閉じます。 .topic 13103 -yR[hZbgz +【文字コードセット】 -J邢͕ۑt@C̕R[hZbgw肵܂B +開くあるいは保存するファイルの文字コードセットを指定します。 -R[hZbgɂ́AFESJISEJISEEUCEUnicodeEUTF-8EUTF-7̂ꂩwł܂B +文字コードセットには、自動認識・SJIS・JIS・EUC・Unicode・UTF-8・UTF-7のいずれかを指定できます。 .topic 13104 -yŋ߂̃t@Cz +【最近のファイル】 -̍ڂɑΉ͂܂ +この項目に対応する説明はありません .topic 13105 -yŋ߂̃tH_z +【最近のフォルダ】 -̍ڂɑΉ͂܂ +この項目に対応する説明はありません .topic 13106 -ysR[hz +【改行コード】 -ۑt@C̉sR[hw肵܂B +保存するファイルの改行コードを指定します。 -sR[h́AϊȂECR+LFELF(Unix)ECR(Mac)̂ꂩwł܂B +改行コードは、変換なし・CR+LF・LF(Unix)・CR(Mac)のいずれかを指定できます。 .topic 13107 -yBOMz +【BOM】 -BOMtꍇɃ`FbNĂB +BOMを付加する場合にチェックしてください。 -R[hZbgŁAUnicodeAUnicodeBEAUTF-8I񂾏ꍇ̂ݗp”\łB +文字コードセットで、Unicode、UnicodeBE、UTF-8を選んだ場合のみ利用可能です。 .topic 13102 -ywvz +【ヘルプ】 -̃_CAO{bNX̐\ƂɃNbN܂B +このダイアログボックスの説明を表示するときにクリックします。 .topic 13200 -yQƁz +【参照】 -Ot@CQƂ܂B +外部ファイルを参照します。 .topic 13201 -y󔒍sz +【空白行無視】 -󔒍s𖳎܂B +空白行を無視します。 .topic 13202 -y啶̓ꎋz +【大文字小文字の同一視】 -啶𓯈ꎋ܂B +大文字小文字を同一視します。 .topic 13203 -y󔒖z +【空白無視】 -󔒂𖳎܂B +空白を無視します。 .topic 13204 -y󔒕ύXz +【空白変更無視】 -󔒂̕ύX𖳎܂B +空白の変更を無視します。 .topic 13205 -y^u󔒕ϊz +【タブ空白変換】 -^u󔒂ɕϊ܂B +タブを空白に変換します。 .topic 13206 -yOt@Cz +【外部ファイル】 -Ot@Cw肵܂B +外部ファイルを指定します。 .topic 13207 -yVt@Cz +【新ファイル】 -ҏWt@CVt@CłB +編集中ファイルが新ファイルです。 .topic 13208 -yt@Cz +【旧ファイル】 -ҏWt@Ct@CłB +編集中ファイルが旧ファイルです。 .topic 13209 -yOt@Cwz +【外部ファイルを指定】 -Ot@Cw肵܂B +外部ファイルを指定します。 .topic 13210 -y̕ҏWt@Cz +【他の編集中ファイル】 -̕ҏWt@Cw肵܂B +他の編集中ファイルを指定します。 .topic 13211 -yҏWt@Cz +【編集中ファイル】 -ҏWt@CI܂B +編集中ファイルを選択します。 .topic 13212 -yt@Cz +【自ファイル】 -t@CłB +自ファイル名です。 .topic 13213 -yOKz +【OK】 -DIFFJn܂B +DIFF差分を開始します。 .topic 13214 -yLZz +【キャンセル】 -̃_CAO{bNX‚܂B +このダイアログボックスを閉じます。 .topic 13215 -ywvz +【ヘルプ】 -̃_CAO{bNX̐\ƂɃNbN܂B +このダイアログボックスの説明を表示するときにクリックします。 .topic 13216 -ysʕ\z +【実行結果表示】 -DIFFɂ鍷‚ȂꍇɃbZ[W\܂B +DIFF差分による差分が見つからなかった場合にメッセージを表示します。 .topic 13217 -y‚ȂƂɃbZ[W\z +【見つからないときにメッセージを表示】 -DIFFɂ鍷‚ȂꍇɃbZ[W\܂B +DIFF差分による差分が見つからなかった場合にメッセージを表示します。 .topic 13218 -y擪()Čz +【先頭(末尾)から再検索する】 -t@CŏIi擪j܂ŌAt@C擪iŏIjČ܂B +ファイル最終(先頭)まで検索したら、ファイル先頭(最終)から再検索します。 .topic 13300 -yRg[R[hXgz +【コントロールコードリスト】 -͉”\ȃRg[R[hꗗłB +入力可能なコントロールコード一覧です。 .topic 13301 -yOKz +【OK】 -IĂRg[R[h͂܂B +選択されているコントロールコードを入力します。 .topic 13302 -yLZz +【キャンセル】 -̃_CAO{bNX‚܂B +このダイアログボックスを閉じます。 .topic 13303 -ywvz +【ヘルプ】 -̃_CAO{bNX̐\ƂɃNbN܂B +このダイアログボックスの説明を表示するときにクリックします。 .topic 13400 -yt@C̊ȈՕ\Xgz +【ファイル名の簡易表示リスト】 -t@CȈՕ\ꗗłB +ファイル名を簡易表示する一覧です。 .topic 13401 -yuOz +【置換前】 -t@C̊ȈՕ\sƂL[[hw肵܂B +ファイル名の簡易表示を行おうとするキーワードを指定します。 .topic 13402 -yuz +【置換後】 -ȈՕ\w肵܂B +簡易表示名を指定します。 .topic 13403 -y}z +【挿入】 -uOƒuŎw肵t@CȈՕ\Xg̃J[\ʒuɑ}܂B +置換前と置換後で指定したファイル名簡易表示をリストのカーソル位置に挿入します。 .topic 13404 -yljz +【追加】 -uOƒuŎw肵t@CȈՕ\Xg̍Ōɒlj܂B +置換前と置換後で指定したファイル名簡易表示をリストの最後に追加します。 .topic 13405 -yXVz +【更新】 -uOƒuŎw肵t@CȈՕ\ŃXg̃J[\ʒȕXV܂B +置換前と置換後で指定したファイル名簡易表示でリストのカーソル位置の情報を更新します。 .topic 13406 -y폜z +【削除】 -J[\ʒũt@CȈՕ\폜܂B +カーソル位置のファイル名簡易表示を削除します。 .topic 13407 -y擪z +【先頭】 -J[\ʒũt@CȈՕ\Xg̐擪Ɉړ܂B +カーソル位置のファイル名簡易表示をリストの先頭に移動します。 .topic 13408 -yցz +【上へ】 -J[\ʒũt@CȈՕ\ЂƂֈړ܂B +カーソル位置のファイル名簡易表示をひとつ上へ移動します。 .topic 13409 -yցz +【下へ】 -J[\ʒũt@CȈՕ\ЂƂ‰ֈړ܂B +カーソル位置のファイル名簡易表示をひとつ下へ移動します。 .topic 13410 -yŏIz +【最終】 -J[\ʒũt@CȈՕ\Xg̍ŏIɈړ܂B +カーソル位置のファイル名簡易表示をリストの最終に移動します。 .topic 13412 -ypX̏ȗ\z +【長いパスの省略表示】 -t@CEtH_ȗ\܂B +長いファイル名・フォルダ名を省略表示します。 .topic 13413 -yz +【文字数】 -pXȗƂƂȂ钷𔼊p̐Ŏw肵܂B +長いパスを省略するとき基準となる長さを半角文字の数で指定します。 .topic 13501 -yOKz +【OK】 -Cɓ̐ݒāÃ_CAO‚܂B +お気に入りの設定をして、このダイアログを閉じます。 .topic 13502 -yLZz +【キャンセル】 -̃_CAO{bNX‚܂B +このダイアログボックスを閉じます。 .topic 13503 -ywvz +【ヘルプ】 -̃_CAO{bNX̐\ƂɃNbN܂B +このダイアログボックスの説明を表示するときにクリックします。 .topic 13510 -yꗗz +【履歴一覧】 -̎ނłB +履歴の種類です。 .topic 13511 -yŋߎgt@CXgz +【最近使ったファイル履歴リスト】 -ŋߎgt@C̗ꗗłB +最近使ったファイルの履歴一覧です。 .topic 13512 -yŋߎgtH_Xgz +【最近使ったフォルダ履歴リスト】 -ŋߎgtH_̗ꗗłB +最近使ったフォルダの履歴一覧です。 .topic 13513 -yXgz +【検索履歴リスト】 -̗ꗗłB +検索の履歴一覧です。 .topic 13514 -yu㗚Xgz +【置換後履歴リスト】 -u̗ꗗłB +置換後の履歴一覧です。 .topic 13515 -yŋߎgGREPt@CXgz +【最近使ったGREPファイル履歴リスト】 -ŋߎgGREPt@C̗ꗗłB +最近使ったGREPファイルの履歴一覧です。 .topic 13516 -yŋߎgGREPtH_Xgz +【最近使ったGREPフォルダ履歴リスト】 -ŋߎgGREPtH_̗ꗗłB +最近使ったGREPフォルダの履歴一覧です。 .topic 13517 -ysR}hXgz +【実行コマンド履歴リスト】 -sR}h̗ꗗłB +実行コマンドの履歴一覧です。 .topic 13518 -yׂāz +【すべて】 -ׂĂ̗폜܂B +すべての履歴を削除します。 .topic 13519 -yCɓȊOz +【お気に入り以外】 -CɓȊO̗폜܂B +お気に入り以外の履歴を削除します。 .topic 13520 -y݂Ȃځz +【存在しない項目】 -݂Ȃt@CtH_̗폜܂B +存在しないファイルやフォルダの履歴を削除します。 .topic 13521 -yIځz +【選択項目】 -Is̗폜܂B +選択行の履歴を削除します。 .topic 13522 -yt@CEtH_Oz +【ファイル・フォルダ除外】 -t@CEtH_O̗ꗗłB +ファイル・フォルダ除外の履歴一覧です。 .topic 13523 -yljz +【追加】 -Vڂlj܂B +新しく項目を追加します。 .topic 13524 -yJgfBNgz +【カレントディレクトリ】 -JgfBNg̗ꗗłB +カレントディレクトリの履歴一覧です。 .topic 13600 -y_CNg^OWvXgz +【ダイレクトタグジャンプリスト】 -^OƒWv̈ꗗłB +同じタグを持つジャンプ先の一覧です。 .topic 13601 -yWvz +【ジャンプ】 -XgŎw肵t@CɃ_CNg^OWv܂B +リストで指定したファイルにダイレクトタグジャンプします。 .topic 13605 -y啶̓ꎋz +【大文字小文字の同一視】 -p啶ʂȂȂ܂B +英大文字小文字を区別しなくなります。 .topic 13606 -y̓rɃ}b`z +【文字列の途中にマッチ】 -L[[h^O̓rɊ܂܂̂ꗗɕ\܂B +キーワードがタグ名の途中に含まれるものも一覧に表示します。 .topic 13607 -yցz +【次へ】 -̃^OWvꗗ\܂B +次のタグジャンプ一覧を表示します。 .topic 13608 -yOցz +【前へ】 -Õ^OWvꗗ\܂B +前のタグジャンプ一覧を表示します。 .topic 13602 -yLZz +【キャンセル】 -̃_CAO{bNX‚܂B +このダイアログボックスを閉じます。 .topic 13603 -ywvz +【ヘルプ】 -̃_CAO{bNX̐\ƂɃNbN܂B +このダイアログボックスの説明を表示するときにクリックします。 .topic 13604 -yL[[hz +【キーワード】 -L[[hw肵܂B +キーワードを指定します。 .topic 13701 -y^Ot@C쐬tH_z +【タグファイル作成フォルダ】 -^Ot@C쐬tH_w肵܂B +タグファイルを作成するフォルダを指定します。 .topic 13702 -ytH_̎QƁz +【フォルダの参照】 -^Ot@C쐬tH_QƂ܂B +タグファイルを作成するフォルダを参照します。 .topic 13703 -yTutH_܂߂z +【サブフォルダも含める】 -TutH_^Ot@C쐬̑Ώۂɂ܂B +サブフォルダもタグファイル作成の対象にします。 .topic 13704 -yR}hCIvVz +【コマンドラインオプション】 -CTAGS.EXEɓnR}hCIvV•ʂɎw肵܂B +CTAGS.EXEに渡すコマンドラインオプションを個別に指定します。 .topic 13705 -yOKz +【OK】 -^Ot@C쐬܂B +タグファイルを作成します。 .topic 13706 -yLZz +【キャンセル】 -̃_CAO{bNX‚܂B +このダイアログボックスを閉じます。 .topic 13707 -ywvz +【ヘルプ】 -̃_CAO{bNX̐\ƂɃNbN܂B +このダイアログボックスの説明を表示するときにクリックします。 .topic 13708 -yz +【上】 -^Ot@C쐬tH_1Kwɐݒ肵܂B +タグファイル作成フォルダを1階層上に設定します。 .topic 13801 -yXWz +【X座標】 -ڎwXWw肵܂B +直接指定のX座標を指定します。 .topic 13802 -yYWz +【Y座標】 -ڎwYWw肵܂B +直接指定のY座標を指定します。 .topic 13803 -yz +【幅】 -ڎw̃EBhE̕w肵܂B +直接指定のウィンドウの幅を指定します。 .topic 13804 -yz +【高さ】 -ڎw̃EBhE̍w肵܂B +直接指定のウィンドウの高さを指定します。 .topic 13806 -y傫/w肵Ȃz +【大きさ/指定しない】 -傫Windows̎wŌ肵܂B +大きさをWindowsの指定で決定します。 .topic 13807 -y傫/pz +【大きさ/継承する】 -ŌɃTCYύXEBhẼTCYۑĂAŊJEBhEփTCY𔽉f܂B +最後にサイズ変更したウィンドウのサイズを保存しておき、後で開いたウィンドウへサイズを反映させます。 .topic 13808 -y傫/ڎwz +【大きさ/直接指定】 - AŎw肵܂B +直接 幅、高さで指定します。 .topic 13809 -yN̈ʒu/w肵Ȃz +【起動時の位置/指定しない】 -Windows̎wŌ肵܂B +Windowsの指定で決定します。 .topic 13810 -yN̈ʒu/pz +【起動時の位置/継承する】 -ŌɃTCYύXEBhËʒuۑĂAŊJEBhËʒu֔f܂B +最後にサイズ変更したウィンドウの位置を保存しておき、後で開いたウィンドウの位置へ反映させます。 .topic 13811 -yN̈ʒu/ڎwz +【起動時の位置/直接指定】 - XWAYWŎw肵܂B +直接 X座標、Y座標で指定します。 .topic 13812 -yEBhȄԁz +【ウィンドウの状態】 -ÑEBhȄԂw肵܂B +起動時のウィンドウの状態を指定します。 -uʁAő剻Aiŏjv +「普通、最大化、(最小化)」 .topic 13900 -yL[[hwv@\gz +【キーワードヘルプ機能を使う】 -L[[hwv@\Lɂ܂B +キーワードヘルプ機能を有効にします。 .topic 13901 -yt@Cꗗz +【辞書ファイル一覧】 -o^Ă鎫t@C̃XgłB +登録されている辞書ファイルのリストです。 .topic 13902 -yXVz +【更新】 -J[\ʒu̎t@C̏XV܂B +カーソル位置の辞書ファイルの情報を更新します。 .topic 13903 -yt@Cz +【辞書ファイル】 -}t@Cw肵܂B +挿入したい辞書ファイルを指定します。 .topic 13904 -yt@CQƁz +【辞書ファイル参照】 -}t@CQƂ܂B +挿入したい辞書ファイルを参照します。 .topic 13905 -y擪z +【先頭】 -J[\ʒu̎t@CXg̐擪Ɉړ܂B +カーソル位置の辞書ファイルをリストの先頭に移動します。 .topic 13906 -yցz +【上へ】 -J[\ʒu̎t@CЂƂֈړ܂B +カーソル位置の辞書ファイルをひとつ上へ移動します。 .topic 13907 -yցz +【下へ】 -J[\ʒu̎t@CЂƂ‰ֈړ܂B +カーソル位置の辞書ファイルをひとつ下へ移動します。 .topic 13908 -yŏIz +【最終】 -J[\ʒu̎t@CXg̍ŏIɈړ܂B +カーソル位置の辞書ファイルをリストの最終に移動します。 .topic 13909 -y}z +【挿入】 -t@CJ[\ʒuɑ}܂B +辞書ファイルをカーソル位置に挿入します。 .topic 13910 -y폜z +【削除】 -J[\ʒu̎t@C폜܂B +カーソル位置の辞書ファイルを削除します。 .topic 13911 -yqbg̎z +【ヒットした次の辞書も検索】 -̎t@C܂B +複数の辞書ファイルを検索します。 .topic 13912 -yL[[h\z +【キーワードも表示する】 -L[[h\܂B +検索したキーワードも表示します。 .topic 13913 -yI͈͂őOvz +【選択範囲で前方一致検索】 -I͈͂̃L[[hőOv܂BB +選択範囲のキーワードで前方一致検索します。。 .topic 13914 -yC|[gz +【インポート】 -L[[hwv̐ݒt@Cǂݍ݂܂B +キーワードヘルプの設定情報をファイルから読み込みます。 .topic 13915 -yGNX|[gz +【エクスポート】 -L[[hwv̐ݒt@Cɕۑ܂B +キーワードヘルプの設定情報をファイルに保存します。 .topic 14100 -yOKz +【OK】 -IL[[hݒ肵Ã_CAO{bNX‚܂B +選択した強調キーワードを設定し、このダイアログボックスを閉じます。 .topic 14101 -yLZz +【キャンセル】 -IL[[hjÃ_CAO{bNX‚܂B +選択した強調キーワードを破棄し、このダイアログボックスを閉じます。 .topic 14102 -yL[[hz +【強調キーワード】 -L[[hZbgI܂BL[[hZbg͋ʐݒʂݒł܂B +強調キーワードセットを選択します。強調キーワードセットは共通設定画面から設定できます。 .topic 14200 -ySJISŕR[hlUnicodeŕ\z +【SJISで文字コード値をUnicodeで表示する】 -SJISŃt@C\ɁAJ[\̂镶̃R[hlUnicodeŕ\܂B +SJISでファイルを表示中に、カーソルのある文字のコード値をUnicodeで表示します。 .topic 14201 -yJISŕR[hlUnicodeŕ\z +【JISで文字コード値をUnicodeで表示する】 -JISŃt@C\ɁAJ[\̂镶̃R[hlUnicodeŕ\܂B +JISでファイルを表示中に、カーソルのある文字のコード値をUnicodeで表示します。 .topic 14202 -yEUCŕR[hlUnicodeŕ\z +【EUCで文字コード値をUnicodeで表示する】 -EUCŃt@C\ɁAJ[\̂镶̃R[hlUnicodeŕ\܂B +EUCでファイルを表示中に、カーソルのある文字のコード値をUnicodeで表示します。 .topic 14203 -yUTF-8CESU-8R[h|Cgŕ\z +【UTF-8およびCESU-8をコードポイントで表示する】 -UTF-8ACESU-8ŕ\ɁAJ[\̂镶̃R[hlUnicodeŕ\܂B +UTF-8、CESU-8で表示中に、カーソルのある文字のコード値をUnicodeで表示します。 .topic 14204 -yTQ[gyAR[h|Cgŕ\z +【サロゲートペアをコードポイントで表示する】 -TQ[gyÃR[hlUnicodeŕ\܂B +サロゲートペア文字のコード値をUnicodeで表示します。 .topic 14205 -yI𕶎𕶎Pʂł͂ȂoCgPʂŕ\z +【選択文字数を文字単位ではなくバイト単位で表示する】 -Xe[^Xo[ɕ\I𕶎APʂł͂ȂoCgPʂŕ\܂B +ステータスバーに表示する選択文字数を、文字単位ではなくバイト単位で表示します。 .topic 14400 -yj[z +【メニュー】 -Cj[̃XgłB +メインメニューのリストです。 .topic 14401 -y폜z +【削除】 -I𒆂̍ڂj[폜܂B +選択中の項目をメニューから削除します。 .topic 14402 -y{z +【+】 -IʒuɎqj[}܂B +選択位置に子メニューを挿入します。 .topic 14403 -y---z +【---】 -IʒuɃZp[^}܂B +選択位置にセパレータを挿入します。 .topic 14404 -yˁz +【上⇒】 -@\Ij[̏ɑ}܂B +機能を選択したメニューの上に挿入します。 .topic 14405 -yˁz +【下⇒】 -@\Ij[̉ɑ}܂B +機能を選択したメニューの下に挿入します。 .topic 14406 -y>>z +【>>】 -@\Ij[ƓKw̍Ōɒlj܂B +機能を選択したメニューと同じ階層の最後に追加します。 .topic 14407 -yz +【↑】 -Ij[̏ֈړ܂B +選択したメニューの順序を上へ移動します。 .topic 14408 -yz +【↓】 -Ij[̏ֈړ܂B +選択したメニューの順序を下へ移動します。 .topic 14409 -yz +【→】 -Ij[̊Kwiֈړ܂B +選択したメニューの階層を一段下へ移動します。 .topic 14410 -yz +【←】 -Ij[̊Kwiֈړ܂B +選択したメニューの階層を一段上へ移動します。 .topic 14411 -yz +【検査】 -Cj[ݒ̐܂B +メインメニュー設定の整合性を検査します。 .topic 14412 -yNAz +【クリア】 -Sj[폜܂B +全メニューを削除します。 .topic 14413 -yݒz +【初期設定】 -Cj[̐ݒԂɖ߂܂B +メインメニューの設定を初期状態に戻します。 .topic 14414 -yANZXL[K( )tŕ\z +【アクセスキーを必ず( )付で表示】 -j[̃ANZXL[̕\@w肵܂B +メニューのアクセスキーの表示方法を指定します。 .topic 14500 -ytH_QƁz +【フォルダ参照】 -GREPustH_QƂ܂B +GREP置換を行うフォルダを参照します。 .topic 14501 -ytH_z +【現フォルダ】 -݂̃tH_GREPustH_Ɏw肵܂B +現在のフォルダをGREP置換を行うフォルダに指定します。 .topic 14502 -yuz +【置換】 -GREPuJn܂B +GREP置換を開始します。 .topic 14503 -yLZz +【キャンセル】 -̃_CAO{bNX‚܂B +このダイアログボックスを閉じます。 .topic 14504 -ywvz +【ヘルプ】 -̃_CAO{bNX̐\ƂɃNbN܂B +このダイアログボックスの説明を表示するときにクリックします。 .topic 14505 -yNbv{[h\tz +【クリップボードから貼り付け】 -u㕶Nbv{[h\t܂B +置換後文字列をクリップボードから貼り付けます。 .topic 14506 -yPPʂŒTz +【単語単位で探す】 -ƂɒPPʂɂ邩ǂw肵܂B +検索するときに単語単位にするかどうか指定します。 .topic 14507 -yTutH_z +【サブフォルダからも検索】 -GREPustH_̃TutH_GREPȗΏۂɂ܂B +GREP置換を行うフォルダのサブフォルダもGREP置換の対象にします。 .topic 14509 -yp啶Əʂz +【英大文字と小文字を区別する】 -Ƃɉp啶Əʂ邩ǂw肵܂B +検索するときに英大文字と小文字を区別するかどうか指定します。 .topic 14510 -yK\z +【正規表現】 -ɐK\gp܂B +検索に正規表現を使用します。 .topic 14511 -yobNAbv쐬z +【バックアップ作成】 -uOɃobNAbvt@C쐬܂B +置換前にバックアップファイルを作成します。 .topic 14512 -yR[hZbgz +【文字コードセット】 -GREPut@C̕R[hZbgw肵܂B +GREP置換するファイルの文字コードセットを指定します。 .topic 14513 -yuOz +【置換前】 -u镶͂܂B +置換される文字列を入力します。 .topic 14514 -yuz +【置換後】 -u͂̕܂B +置換後の文字列を入力します。 -u㕶ɐK\gƂ͂ł܂B +置換後文字列に正規表現を使うことはできません。 .topic 14515 -yt@Cz +【ファイル】 -GREPȗΏۂɂt@Cw肵܂B +GREP置換の対象にするファイル名を指定します。 -ʏ͊gqw肵܂B +通常は拡張子を指定します。 -̍ڂLqꍇ́ApXy[XEJ}EZ~R̂ꂩŋ؂ċLq܂B +複数の項目を記述する場合は、半角スペース・カンマ・セミコロンのいずれかで区切って記述します。 -ChJ[hgpłAp^[̐擪!‚ΏOwł܂B(: *.c* *.h* !*.svn-base) +ワイルドカードが使用でき、パターンの先頭に!をつければ除外指定もできます。(例: *.c* *.h* !*.svn-base) .topic 14516 -ytH_z +【フォルダ】 -GREPustH_w肵܂B +GREP置換を行うフォルダを指定します。 .topic 14517 -yz +【上】 -GREPutH_1Kwɐݒ肵܂B +GREP置換するフォルダを1階層上に設定します。 .topic 14518 -yʏo(Ys)z +【結果出力(該当行)】 -GREPǔʂƂĈv镶܂ލsŜ\܂B +GREP置換の結果として一致する文字列を含む行全体を表示します。 .topic 14519 -yʏo(Y)z +【結果出力(該当部分)】 -GREPǔʂƂĈv镶܂ޕ\܂B +GREP置換の結果として一致する文字列を含む部分を表示します。 .topic 14520 -yʏo͌`(m[})z +【結果出力形式(ノーマル)】 -GREPǔʏo͌`ƂĈvׂĕ\܂B +GREP置換の結果出力形式として一致した部分をすべて表示します。 .topic 14521 -yʏo͌`(t@C)z +【結果出力形式(ファイル毎)】 -GREPǔʏo͌`ƂĈv܂ރt@C\܂B +GREP置換の結果出力形式として一致した部分を含むファイルを表示します。 .topic 14522 -yʏo͌`(ʂ̂)z +【結果出力形式(結果のみ)】 -GREPǔʏo͌`ƂČʕ̂ݏo͂܂B +GREP置換の結果出力形式として結果部分のみ出力します。 .topic 14523 -yK\o[Wz +【正規表現バージョン】 -K\Cũo[WłB +正規表現ライブラリのバージョン情報です。 .topic 14524 -ytH_̏lJgtH_ɂz +【フォルダの初期値をカレントフォルダにする】 -GREPutH_̏tH_JgtH_ɂ܂B +GREP置換するフォルダの初期フォルダをカレントフォルダにします。 .topic 14525 -yt@Cŏ̂݁z +【ファイル毎最初のみ】 -t@C1񂾂ʂo͂܂B +ファイル毎に1回だけ結果を出力します。 .topic 14526 -yx[XtH_\z +【ベースフォルダ表示】 -[gtH_̕\Ƃ̑΃pXŏo͂܂B +ルートフォルダの表示とそこからの相対パスで出力します。 .topic 14527 -ytH_ɕ\z +【フォルダ毎に表示】 -TutH_ɃpX܂Ƃ߂đ΃pXŏo͂܂B +サブフォルダ毎にパスをまとめて相対パスで出力します。 .topic 14528 -yCPz +【CP】 -R[hZbgŃR[hy[WIł悤ɂ܂B +文字コードセットでコードページを選択できるようにします。 .topic 14600 -yvt@Cꗗz +【プロファイル名一覧】 -vt@C}l[Wɓo^ꂽvt@C̈ꗗłB +プロファイルマネージャに登録されたプロファイル名の一覧です。 -*tĂ̂́AftHgÑvt@CłB +*が付いているものは、デフォルト起動のプロファイルです。 .topic 14601 -yftHgݒɂċNz +【デフォルト設定にして起動】 -N{^ƂAꗗőIĂvt@CftHgɐݒ肵܂B +起動ボタンを押したとき、一覧で選択されているプロファイルをデフォルトに設定します。 .topic 14602 -yNz +【起動】 -Ivt@CŃGfB^N܂B +選択したプロファイルでエディタを起動します。 .topic 14603 -y‚z +【閉じる】 -̃_CAO{bNX‚܂B +このダイアログボックスを閉じます。 .topic 14604 -ywvz +【ヘルプ】 -̃_CAO{bNX̐\ƂɃNbN܂B +このダイアログボックスの説明を表示するときにクリックします。 .topic 14605 -yVK쐬z +【新規作成】 -vt@CꗗɐVOo^܂B +プロファイル一覧に新しい名前を登録します。 .topic 14606 -yOύXz +【名前変更】 -ꗗőIĂvt@C̖OύX܂B +一覧で選択されているプロファイルの名前を変更します。 .topic 14607 -y폜z +【削除】 -IĂvt@Cꗗ폜܂B +選択されているプロファイルを一覧から削除します。 -vt@Cݒ͍̎̂폜܂B +プロファイル設定の実体は削除されません。 .topic 14608 -yftHgݒz +【デフォルト設定】 -ꗗőIĂvt@CftHgNɐݒ肵܂B +一覧で選択されているプロファイルをデフォルト起動に設定します。 .topic 14609 -yftHgz +【デフォルト解除】 -ftHgNɐݒ肳Ăvt@C̃ftHgݒ܂B +デフォルト起動に設定されているプロファイルのデフォルト設定を解除します。 -ftHgN̐ݒ肪ȂAR}hC̎wȂꍇAGfB^NɃvt@C}l[W\܂B +デフォルト起動の設定がなく、コマンドラインの指定もない場合、エディタ起動時にプロファイルマネージャを表示します。 .topic 14700 -yetH_̐ݒǂݍށz +【各フォルダの設定を読み込む】 -JĂt@C̏ʃfBNgɂ_sakurafiletree.iniǂݍ݂܂B +開いているファイルの上位ディレクトリにある_sakurafiletree.iniを読み込みます。 .topic 14701 -yftHgݒt@Cz +【デフォルト設定ファイル名】 -sakura.inîɁAw肵ݒt@Cǂݍ݂܂B +sakura.iniのかわりに、指定した設定ファイルを読み込みます。 .topic 14702 -yt@CQƁz +【ファイル参照】 -ftHgݒt@CQƂ܂B +デフォルト設定ファイルを参照します。 .topic 14703 -yǂݍ݁z +【読み込み】 -AftHgݒt@Cǂݍ݂܂B +今すぐ、デフォルト設定ファイルを読み込みます。 -_sakurafiletree.iniǂݍ܂Ăꍇ͖łB +_sakurafiletree.iniが読み込まれている場合は無効です。 .topic 14704 -yށFGrepz +【種類:Grep】 -ACe̎ނGrepɂ܂B +アイテムの種類をGrepにします。 -pXŎw肵tH_ȉ̃t@Cꗗc[`ŕ\܂B +パスで指定したフォルダ以下のファイル一覧をツリー形式で表示します。 .topic 14705 -yށFt@Cz +【種類:ファイル】 -ACe̎ނt@Cɂ܂B +アイテムの種類をファイルにします。 -pXŎw肵t@C1•\܂B +パスで指定したファイルを1つ表示します。 .topic 14706 -yށFtH_z +【種類:フォルダ】 -ACe̎ނtH_ɂ܂B +アイテムの種類をフォルダにします。 -tH_̈ȉɎqACeljł܂B +フォルダの以下に子アイテムを追加できます。 .topic 14708 -ypXz +【パス】 -ACẽpXw肵܂B +アイテムのパスを指定します。 -u . vŌ݊JĂt@C̃JgfBNgA +「 . 」で現在開いているファイルのカレントディレクトリを、 -uvŁA݂̐ݒt@C̃tH_\܂B +「」で、現在の設定ファイルのフォルダを表します。 .topic 14709 -ypXQƁz +【パス参照】 -pXQƂ܂B +パスを参照します。 .topic 14710 -yz +【▼】 -tH_͂܂B +特殊フォルダを入力します。 .topic 14711 -yxz +【ラベル】 -ACe̕\w肵܂B +アイテムの表示名を指定します。 -ȗꍇAtpX\܂B +省略した場合、フルパスが表示されます。 .topic 14713 -yt@Cz +【ファイル】 -ށFGrepI񂾂ƂA\t@CEtH_̃p^[w肵܂B +種類:Grepを選んだとき、表示するファイル・フォルダのパターンを指定します。 -GrepʂƓl̏Ŏwł܂B +Grep画面と同様の書式で指定できます。 .topic 14714 -y\FBt@Cz +【非表示属性:隠しファイル】 -ށFGrepI񂾂ƂABt@C\܂B +種類:Grepを選んだとき、隠しファイルを表示しません。 .topic 14715 -y\Fǂݎpz +【非表示属性:読み取り専用】 -ށFGrepI񂾂ƂAǂݎpt@C\܂B +種類:Grepを選んだとき、読み取り専用ファイルを表示しません。 .topic 14716 -y\FVXet@Cz +【非表示属性:システムファイル】 -ށFGrepI񂾂ƂAVXet@C\܂B +種類:Grepを選んだとき、システムファイルを表示しません。 .topic 14717 -y폜z +【削除】 -ꗗőIACe폜܂B +一覧で選択したアイテムを削除します。 .topic 14718 -yˁz +【上⇒】 -ꗗőIACȅɃACelj܂B +一覧で選択したアイテムの上にアイテムを追加します。 .topic 14719 -yˁz +【下⇒】 -ꗗőIACẻɃACelj܂B +一覧で選択したアイテムの下にアイテムを追加します。 .topic 14720 -y>>z +【>>】 -ꗗ̍ŌɃACelj܂B +一覧の最後にアイテムを追加します。 .topic 14721 -yXVz +【更新】 -ꗗőIACeɐݒύX𔽉f܂B +一覧で選択したアイテムに設定変更を反映します。 .topic 14722 -yt@C}z +【ファイル挿入】 -_CAOŕt@CIŁAꗗőI𒆂̃ACẻɒlj܂B +ダイアログで複数ファイルを選んで、一覧で選択中のアイテムの下に追加します。 .topic 14723 -ypẌꊇuz +【パスの一括置換】 -SACẽpXɑ΂ĕus܂B +全アイテムのパスに対して文字列置換を行います。 .topic 14724 -yz +【↑】 -ꗗőIACeɈړ܂B +一覧で選択したアイテムを上に移動します。 .topic 14725 -yz +【↓】 -ꗗőIACeɈړ܂B +一覧で選択したアイテムを下に移動します。 .topic 14726 -yz +【→】 -ꗗőIACeEɈړ܂B +一覧で選択したアイテムを右に移動します。 .topic 14727 -yz +【←】 -ꗗőIACeɈړ܂B +一覧で選択したアイテムを左に移動します。 .topic 14728 -yACeꗗz +【アイテム一覧】 -t@Cc[ʂɕ\ACëꗗłB +ファイルツリー画面に表示するアイテムの一覧です。 .topic 14729 -yC|[gz +【インポート】 -t@Ct@Cc[ݒǂݍ݂܂B +ファイルからファイルツリー設定を読み込みます。 .topic 14730 -yGNX|[gz +【エクスポート】 -t@Cc[ݒt@Cɏo܂B +ファイルツリー設定をファイルに書き出します。 .topic 14731 -yOKz +【OK】 -t@Cc[ݒsA_CAO‚܂B +ファイルツリー設定を行い、ダイアログを閉じます。 .topic 14732 -yLZz +【キャンセル】 -̃_CAO‚܂B +このダイアログを閉じます。 .topic 14733 -ywvz +【ヘルプ】 -̃_CAO{bNX̐\ƂɃNbN܂B +このダイアログボックスの説明を表示するときにクリックします。 .topic 19999 -ysz +【不明】 -̍ڂɑΉwvgsbN͂܂B +この項目に対応するヘルプトピックはありません。 diff --git a/help/sakura/sakura.hhc b/help/sakura/sakura.hhc index 89516ba3b6..4c821b7f00 100644 --- a/help/sakura/sakura.hhc +++ b/help/sakura/sakura.hhc @@ -10,39 +10,39 @@
          • - +
            • - +
              • - +
              • - +
              • - +
              • - +
              • - + @@ -57,1107 +57,1107 @@
              • - +
              • - +
              • - +
            • - +
              • - +
              • - +
              • - +
              • - +
              • - +
              • - +
              • - +
              • - +
              • - +
              • - +
              • - +
              • - +
              • - +
              • - +
              • - +
              • - +
              • - +
              • - +
              • - +
              • - +
              • - +
              • - +
              • - +
              • - +
            • - +
              • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
              • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                  • - +
                  • - +
                  • - +
                • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
              • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
              • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - + @@ -1168,841 +1168,841 @@
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                    • - +
                    • - +
                • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                    • - +
                  • - +
                    • - +
                    • - +
                      • - +
                    • - +
                    • - +
                    • - +
                    • - +
                  • - +
                    • - +
                    • - +
                      • - +
                    • - +
                    • - +
                    • - +
                    • - +
                    • - +
                    • - +
                    • - +
                    • - +
                    • - +
                    • - +
                    • - +
                    • - +
                    • - +
                    • - +
                    • - +
                    • - +
                      • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                    • - +
                    • - +
                    • - +
                    • - +
                    • - +
                    • - +
                    • - +
                    • - +
                    • - +
                    • - +
                    • - +
                    • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
              • - +
                • - +
                • - +
                • - +
              • - +
                • - +
                • - +
                • - +
                • - +
                • - + @@ -2012,158 +2012,158 @@
                • - +
                • - +
              • - +
                • - +
                • - +
                • - +
                • - +
                • - +
              • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
                • - +
              • - +
                • - + diff --git a/help/sakura/sakura.hhk b/help/sakura/sakura.hhk index 162d152541..8dbb64c1c0 100644 --- a/help/sakura/sakura.hhk +++ b/help/sakura/sakura.hhk @@ -5,31 +5,31 @@
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • @@ -41,807 +41,807 @@
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • @@ -849,678 +849,678 @@
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • @@ -1528,119 +1528,119 @@
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - +
                  • - + diff --git a/help/sakura/sakura.hhp b/help/sakura/sakura.hhp index 73df167f54..fc94ecb743 100644 --- a/help/sakura/sakura.hhp +++ b/help/sakura/sakura.hhp @@ -3,18 +3,18 @@ Auto Index=Yes Compatibility=1.1 or later Compiled file=sakura.chm Contents file=sakura.hhc -Default Font=lr oSVbN,10,128 +Default Font=MS Pゴシック,10,128 Default Window=XHP Default topic=res\HLP000001.html Display compile progress=No Error log file=Compile.Log Full-text search=Yes Index file=sakura.hhk -Language=0x411 { -Title=TNGfB^ wv +Language=0x411 日本語 +Title=サクラエディタ ヘルプ [WINDOWS] -XHP="TNGfB^ wv","sakura.hhc","sakura.hhk","res\HLP000001.html","res\HLP000001.html",,,,,0x61720,200,0x10384e,[50,50,850,550],0x0,0x0,,,,,0 +XHP="サクラエディタ ヘルプ","sakura.hhc","sakura.hhk","res\HLP000001.html","res\HLP000001.html",,,,,0x61720,200,0x10384e,[50,50,850,550],0x0,0x0,,,,,0 $global_Web="Remote URL",,,,,,,,,,,0x383c,[125,144,721,602],,,,,,,0 @@ -817,4 +817,3 @@ ppa.chm script56.chm [INFOTYPES] - From 0b6ea0daa93250fb1f1e8ef5cca87d90312622a7 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sun, 14 Feb 2021 22:35:49 +0900 Subject: [PATCH 0430/1024] =?UTF-8?q?=E5=8D=98=E4=BD=93=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=81=AE=E6=BA=96=E5=82=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CRegexKeyword.h | 2 ++ sakura_core/EditInfo.h | 4 +--- sakura_core/charset/charcode.cpp | 4 ++-- sakura_core/charset/charcode.h | 22 ++++++++++------------ sakura_core/doc/CBlockComment.h | 2 ++ sakura_core/doc/CLineComment.h | 2 ++ sakura_core/env/CAppNodeManager.h | 3 ++- sakura_core/mem/CNativeW.cpp | 13 +++++++------ sakura_core/mem/CNativeW.h | 10 ++++++++-- sakura_core/recent/SShare_History.h | 1 + 10 files changed, 37 insertions(+), 26 deletions(-) diff --git a/sakura_core/CRegexKeyword.h b/sakura_core/CRegexKeyword.h index 43b060636e..5df7a71ffa 100644 --- a/sakura_core/CRegexKeyword.h +++ b/sakura_core/CRegexKeyword.h @@ -43,6 +43,8 @@ typedef struct RegexInfo_t { int nFlag; //色指定のチェックが入っているか? YES=RK_EMPTY, NO=RK_NOMATCH } REGEX_INFO; +class CStringRef; + //! 正規表現キーワードクラス /*! 正規表現キーワードを扱う。 diff --git a/sakura_core/EditInfo.h b/sakura_core/EditInfo.h index cb9332b99d..737ca196c8 100644 --- a/sakura_core/EditInfo.h +++ b/sakura_core/EditInfo.h @@ -28,9 +28,7 @@ #include "basis/SakuraBasis.h" #include "config/maxdata.h" -#include "charset/charcode.h" -#include "mem/CNativeW.h" -#include "types/CType.h" +#include "charset/charset.h" /*! * ファイル情報 diff --git a/sakura_core/charset/charcode.cpp b/sakura_core/charset/charcode.cpp index a56a8e25cf..9d6cd77639 100644 --- a/sakura_core/charset/charcode.cpp +++ b/sakura_core/charset/charcode.cpp @@ -49,7 +49,7 @@ namespace WCODE bool CalcHankakuByFont(wchar_t); //2007.08.30 kobake 追加 - bool IsHankaku(wchar_t wc) + bool IsHankaku(wchar_t wc, CCharWidthCache& cache) { //※ほぼ未検証。ロジックが確定したらインライン化すると良い。 @@ -83,7 +83,7 @@ namespace WCODE } //$$ 仮。もう動的に計算しちゃえ。(初回のみ) - return CalcHankakuByFont(wc); + return cache.CalcHankakuByFont(wc); } //!制御文字であるかどうか diff --git a/sakura_core/charset/charcode.h b/sakura_core/charset/charcode.h index 8aabcdfb25..bfd7d45d13 100644 --- a/sakura_core/charset/charcode.h +++ b/sakura_core/charset/charcode.h @@ -88,15 +88,6 @@ namespace WCODE return c>=front && c<=back; } - //!半角文字(縦長長方形)かどうか判定 - bool IsHankaku(wchar_t wc); - - //!全角文字(正方形)かどうか判定 - inline bool IsZenkaku(wchar_t wc) - { - return !IsHankaku(wc); - } - //!使用フォント番号を返す // (0:半角/1:全角) int GetFontNo(wchar_t c); @@ -262,9 +253,9 @@ class CCharWidthCache { void Clear(); [[nodiscard]] bool GetMultiFont() const { return m_bMultiFont; } - bool CalcHankakuByFont(wchar_t c) const; - int CalcPxWidthByFont(wchar_t c); - int CalcPxWidthByFont2(const wchar_t* pc2) const; + virtual bool CalcHankakuByFont(wchar_t c) const; + virtual int CalcPxWidthByFont(wchar_t c); + virtual int CalcPxWidthByFont2(const wchar_t* pc2) const; private: void DeleteLocalData(); @@ -290,4 +281,11 @@ void InitCharWidthCache( const LOGFONT &lf, ECharWidthFontMode fMode=CWM_FONT_ED void InitCharWidthCacheFromDC(const LOGFONT* lfs, ECharWidthFontMode fMode, HDC hdcOrg ); [[nodiscard]] CCharWidthCache& GetCharWidthCache(); +namespace WCODE { + //!半角文字(縦長長方形)かどうか判定 + bool IsHankaku(wchar_t wc, CCharWidthCache& cache = GetCharWidthCache()); + //!全角文字(正方形)かどうか判定 + inline bool IsZenkaku(wchar_t wc) { return !IsHankaku(wc); } +} + #endif /* SAKURA_CHARCODE_4C34C669_0BAB_441A_9B1D_2B9AC1895380_H_ */ diff --git a/sakura_core/doc/CBlockComment.h b/sakura_core/doc/CBlockComment.h index abd595d798..886059f447 100644 --- a/sakura_core/doc/CBlockComment.h +++ b/sakura_core/doc/CBlockComment.h @@ -34,6 +34,8 @@ enum ECommentType{ #define BLOCKCOMMENT_NUM 2 #define BLOCKCOMMENT_BUFFERSIZE 16 +class CStringRef; + // 2005.11.10 Moca アクセス関数追加 class CBlockComment{ public: diff --git a/sakura_core/doc/CLineComment.h b/sakura_core/doc/CLineComment.h index 249f0a7d0a..718e0fc497 100644 --- a/sakura_core/doc/CLineComment.h +++ b/sakura_core/doc/CLineComment.h @@ -24,6 +24,8 @@ #define COMMENT_DELIMITER_NUM 3 #define COMMENT_DELIMITER_BUFFERSIZE 16 +class CStringRef; + /*! 行コメントデリミタを管理する @note CLineCommentは、共有メモリSTypeConfigに含まれるので、メンバ変数は常に実体を持っていなければならない。 diff --git a/sakura_core/env/CAppNodeManager.h b/sakura_core/env/CAppNodeManager.h index 0bcf2ba5b9..77d129155f 100644 --- a/sakura_core/env/CAppNodeManager.h +++ b/sakura_core/env/CAppNodeManager.h @@ -26,8 +26,9 @@ #define SAKURA_CAPPNODEMANAGER_CAE7A323_DEA3_47E4_91DE_C99A88C32683_H_ #pragma once -#include "util/design_template.h" +#include "basis/CMyString.h" #include "config/maxdata.h" +#include "util/design_template.h" class CAppNodeGroupHandle; diff --git a/sakura_core/mem/CNativeW.cpp b/sakura_core/mem/CNativeW.cpp index 764fa058fa..137700c27b 100644 --- a/sakura_core/mem/CNativeW.cpp +++ b/sakura_core/mem/CNativeW.cpp @@ -348,7 +348,7 @@ CLogicInt CNativeW::GetSizeOfChar( const wchar_t* pData, int nDataLen, int nIdx } //! 指定した位置の文字が半角何個分かを返す -CKetaXInt CNativeW::GetKetaOfChar( const wchar_t* pData, int nDataLen, int nIdx ) +CKetaXInt CNativeW::GetKetaOfChar( const wchar_t* pData, int nDataLen, int nIdx, CCharWidthCache& cache) { //文字列範囲外なら 0 if( nIdx >= nDataLen ) @@ -372,7 +372,7 @@ CKetaXInt CNativeW::GetKetaOfChar( const wchar_t* pData, int nDataLen, int nIdx } //半角文字なら 1 - if(WCODE::IsHankaku(pData[nIdx]) ) + if(WCODE::IsHankaku(pData[nIdx], cache)) return CKetaXInt(1); //全角文字なら 2 @@ -381,25 +381,26 @@ CKetaXInt CNativeW::GetKetaOfChar( const wchar_t* pData, int nDataLen, int nIdx } //! 指定した位置の文字の文字幅を返す -CHabaXInt CNativeW::GetHabaOfChar( const wchar_t* pData, int nDataLen, int nIdx ) +CHabaXInt CNativeW::GetHabaOfChar( const wchar_t* pData, int nDataLen, int nIdx, + CCharWidthCache& cache, bool bEnableExtEol ) { //文字列範囲外なら 0 if( nIdx >= nDataLen ){ return CHabaXInt(0); } // HACK:改行コードに対して1を返す - if( WCODE::IsLineDelimiter(pData[nIdx], GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol) ){ + if( WCODE::IsLineDelimiter(pData[nIdx], bEnableExtEol) ){ return CHabaXInt(1); } // サロゲートチェック if(IsUTF16High(pData[nIdx]) && nIdx + 1 < nDataLen && IsUTF16Low(pData[nIdx + 1])){ - return CHabaXInt(WCODE::CalcPxWidthByFont2(pData + nIdx)); + return CHabaXInt(cache.CalcPxWidthByFont2(pData + nIdx)); }else if(IsUTF16Low(pData[nIdx]) && 0 < nIdx && IsUTF16High(pData[nIdx - 1])) { // サロゲートペア(下位) return CHabaXInt(0); // 不正位置 } - return CHabaXInt(WCODE::CalcPxWidthByFont(pData[nIdx])); + return CHabaXInt(cache.CalcPxWidthByFont(pData[nIdx])); } /* ポインタで示した文字の次にある文字の位置を返します */ diff --git a/sakura_core/mem/CNativeW.h b/sakura_core/mem/CNativeW.h index d8ef73d283..87dc433f9d 100644 --- a/sakura_core/mem/CNativeW.h +++ b/sakura_core/mem/CNativeW.h @@ -28,7 +28,9 @@ #include "CNative.h" #include "basis/SakuraBasis.h" +#include "charset/charcode.h" #include "debug/Debug2.h" //assert +#include "env/DLLSHAREDATA.h" //! 文字列への参照を取得するインターフェース class IStringRef{ @@ -163,8 +165,12 @@ class CNativeW final : public CNative{ public: // -- -- staticインターフェース -- -- // static CLogicInt GetSizeOfChar( const wchar_t* pData, int nDataLen, int nIdx ); //!< 指定した位置の文字がwchar_t何個分かを返す - static CHabaXInt GetHabaOfChar( const wchar_t* pData, int nDataLen, int nIdx ); - static CKetaXInt GetKetaOfChar( const wchar_t* pData, int nDataLen, int nIdx ); //!< 指定した位置の文字が半角何個分かを返す + static CHabaXInt GetHabaOfChar( const wchar_t* pData, int nDataLen, int nIdx, + CCharWidthCache& cache = GetCharWidthCache(), + bool bEnableExtEol = GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol ); + //! 指定した位置の文字が半角何個分かを返す + static CKetaXInt GetKetaOfChar( const wchar_t* pData, int nDataLen, int nIdx, + CCharWidthCache& cache = GetCharWidthCache() ); static const wchar_t* GetCharNext( const wchar_t* pData, int nDataLen, const wchar_t* pDataCurrent ); //!< ポインタで示した文字の次にある文字の位置を返します static const wchar_t* GetCharPrev( const wchar_t* pData, int nDataLen, const wchar_t* pDataCurrent ); //!< ポインタで示した文字の直前にある文字の位置を返します diff --git a/sakura_core/recent/SShare_History.h b/sakura_core/recent/SShare_History.h index c623c085e5..ed8f6b25ad 100644 --- a/sakura_core/recent/SShare_History.h +++ b/sakura_core/recent/SShare_History.h @@ -25,6 +25,7 @@ #ifndef SAKURA_SSHARE_HISTORY_9F7E6200_FEE2_4CAC_A5D3_32EEC4130CFC_H_ #define SAKURA_SSHARE_HISTORY_9F7E6200_FEE2_4CAC_A5D3_32EEC4130CFC_H_ +#include "EditInfo.h" #include "config/maxdata.h" //共有メモリ内構造体 From 21c03ae8ab6a1ed4ac2b494e944acbb07257402e Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sun, 14 Feb 2021 22:44:24 +0900 Subject: [PATCH 0431/1024] =?UTF-8?q?CNativeW=20=E3=81=AE=20static=20?= =?UTF-8?q?=E3=83=A1=E3=83=B3=E3=83=90=E9=96=A2=E6=95=B0=E3=81=AE=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-cnative.cpp | 131 +++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) diff --git a/tests/unittests/test-cnative.cpp b/tests/unittests/test-cnative.cpp index 3468df26fb..5de6f1929a 100644 --- a/tests/unittests/test-cnative.cpp +++ b/tests/unittests/test-cnative.cpp @@ -24,6 +24,7 @@ */ #include #include +#include "charset/charcode.h" #include "mem/CNativeW.h" #include "mem/CNativeA.h" @@ -741,3 +742,133 @@ TEST(CNativeW, globalOperatorAdd) CNativeW v4(L"後半"); EXPECT_STREQ(L"前半後半", (v3 + v4).GetStringPtr()); } + +/*! + * @brief GetSizeOfCharの仕様 + * @remark 指定した文字の符号単位数を返す。 + */ +TEST(CNativeW, GetSizeOfChar) +{ + // 基本多言語面の文字ならば1を返す。 + EXPECT_EQ(CNativeW::GetSizeOfChar(L"a", 1, 0), 1); + // 範囲外なら0を返す。 + EXPECT_EQ(CNativeW::GetSizeOfChar(L"", 0, 0), 0); + // 上位・下位サロゲートの組み合わせであれば2を返す。 + EXPECT_EQ(CNativeW::GetSizeOfChar(L"\xd83c\xdf38", 2, 0), 2); + // 指定位置が下位サロゲートならその他の文字と同様に1を返す。 + EXPECT_EQ(CNativeW::GetSizeOfChar(L"\xd83c\xdf38", 2, 1), 1); +} + +/*! + * @brief GetKetaOfCharの仕様 + * @remark 指定した文字の桁数を返す。 + */ +TEST(CNativeW, GetKetaOfChar) +{ + // 範囲外なら0を返す。 + EXPECT_EQ(CNativeW::GetKetaOfChar(L"", 0, 0), 0); + // 上位サロゲートなら2を返す。 + EXPECT_EQ(CNativeW::GetKetaOfChar(L"\xd83c\xdf38", 2, 0), 2); + // 上位サロゲートに続く下位サロゲートであれば0を返す。 + EXPECT_EQ(CNativeW::GetKetaOfChar(L"\xd83c\xdf38", 2, 1), 0); + // 下位サロゲートだけなら2を返す。 + EXPECT_EQ(CNativeW::GetKetaOfChar(L"\xdf38", 1, 0), 2); + + // サクラエディタでは Unicode で表現できない文字コードの破壊を防ぐため、 + // 不明バイトを下位サロゲートにマップして保持している。 + // この1バイト文字は半角として扱わなければ不自然なので、 + // 上位対を持たない下位サロゲート 0xdc00 ~ 0xdcff の範囲に限り、1を返すことになっている。 + // + // https://sourceforge.net/p/sakura-editor/patchunicode/57/ + // http://sakura-editor.sourceforge.net/cgi-bin/cyclamen/cyclamen.cgi?log=unicode&v=833 + EXPECT_EQ(CNativeW::GetKetaOfChar(L"\xdbff", 1, 0), 2); + for (wchar_t ch = 0xdc00; ch <= 0xdcff; ++ch) + EXPECT_EQ(CNativeW::GetKetaOfChar(&ch, 1, 0), 1); + EXPECT_EQ(CNativeW::GetKetaOfChar(L"\xdd00", 1, 0), 2); + + // 文字が半角なら1を返す。 + EXPECT_EQ(CNativeW::GetKetaOfChar(L"a", 1, 0), 1); + + // 文字が全角なら2を返す。 + class FakeCache : public CCharWidthCache { + public: + virtual bool CalcHankakuByFont(wchar_t c) const override { return false; } + } cache; + EXPECT_EQ(CNativeW::GetKetaOfChar(L"あ", 1, 0, cache), 2); +} + +/*! + * @brief GetKetaOfCharの仕様 + * @remark 指定した文字のピクセル単位幅を返す。 + */ +TEST(CNativeW, GetHabaOfChar) +{ + // 範囲外なら0を返す。 + EXPECT_EQ((Int)CNativeW::GetHabaOfChar(L"", 0, 1, GetCharWidthCache(), false), 0); + + // 改行コードなら1を返す。 + EXPECT_EQ((Int)CNativeW::GetHabaOfChar(L"\r\n", 2, 0, GetCharWidthCache(), false), 1); + EXPECT_EQ((Int)CNativeW::GetHabaOfChar(L"\r\n", 2, 1, GetCharWidthCache(), false), 1); + + // CalcPxWidthByFont で計算した結果を返す。 + class FakeCache1 : public CCharWidthCache { + public: + virtual int CalcPxWidthByFont(wchar_t ch) override { + if (ch == L'a') return 10000; + else if (ch == L'b') return 20000; + else return 0; + } + } cache1; + EXPECT_EQ((Int)CNativeW::GetHabaOfChar(L"ab", 2, 0, cache1, false), 10000); + EXPECT_EQ((Int)CNativeW::GetHabaOfChar(L"ab", 2, 1, cache1, false), 20000); + + // サロゲートペアの幅は CalcPxWidthByFont2 で計算する。 + // 指定された位置が下位サロゲートなら0を返す。 + class FakeCache2 : public CCharWidthCache { + public: + virtual int CalcPxWidthByFont2(const wchar_t* pc2) const override { + return 20000; + } + } cache2; + EXPECT_EQ((Int)CNativeW::GetHabaOfChar(L"\xd83c\xdf38", 2, 0, cache2, false), 20000); + EXPECT_EQ((Int)CNativeW::GetHabaOfChar(L"\xd83c\xdf38", 2, 1, cache2, false), 0); + + // サロゲートペアが片方しかないときは CalcPxWidthByFont で計算している。 + class FakeCache3 : public CCharWidthCache { + public: + virtual int CalcPxWidthByFont(wchar_t c) override { + return 10000; + } + } cache3; + EXPECT_EQ((Int)CNativeW::GetHabaOfChar(L"\xd83cあ", 2, 0, cache3, false), 10000); + EXPECT_EQ((Int)CNativeW::GetHabaOfChar(L"\xdf38あ", 2, 0, cache3, false), 10000); + EXPECT_EQ((Int)CNativeW::GetHabaOfChar(L"あ\xdf38", 2, 1, cache3, false), 10000); +} + +/*! + * @brief GetCharNextの仕様 + */ +TEST(CNativeW, GetCharNext) +{ + constexpr wchar_t* text = L"a\xd83c\xdf38"; + // 次の文字のアドレスを返す。 + EXPECT_EQ(CNativeW::GetCharNext(text, 3, text), text + 1); + // 上位サロゲートが渡された場合は下位サロゲートを飛ばす。 + EXPECT_EQ(CNativeW::GetCharNext(text, 3, text + 1), text + 3); + // ポインタを進めた結果が範囲外なら &pData[nDataLen] を返す。 + EXPECT_EQ(CNativeW::GetCharNext(text, 3, text + 3), text + 3); +} + +/*! + * @brief GetCharPrevの仕様 + */ +TEST(CNativeW, GetCharPrev) +{ + constexpr wchar_t* text = L"a\xd83c\xdf38" L"d"; + // 前の文字のアドレスを返す。 + EXPECT_EQ(CNativeW::GetCharPrev(text, 4, text + 1), text); + // 前の文字が下位サロゲートだった場合は下位サロゲートを飛ばす。 + EXPECT_EQ(CNativeW::GetCharPrev(text, 4, text + 3), text + 1); + // ポインタを戻した結果が範囲外なら pData を返す。 + EXPECT_EQ(CNativeW::GetCharPrev(text, 4, text), text); +} From 2222e9c3864c535ef797c356260366696baeec25 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Mon, 15 Feb 2021 20:14:45 +0900 Subject: [PATCH 0432/1024] =?UTF-8?q?CCharWidthCache&=20=E5=9E=8B=E3=81=AE?= =?UTF-8?q?=E5=BC=95=E6=95=B0=E3=82=92=20const=20=E3=81=AB=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/charcode.cpp | 2 +- sakura_core/charset/charcode.h | 2 +- sakura_core/mem/CNativeW.cpp | 2 +- sakura_core/mem/CNativeW.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sakura_core/charset/charcode.cpp b/sakura_core/charset/charcode.cpp index 9d6cd77639..b3238ac12f 100644 --- a/sakura_core/charset/charcode.cpp +++ b/sakura_core/charset/charcode.cpp @@ -49,7 +49,7 @@ namespace WCODE bool CalcHankakuByFont(wchar_t); //2007.08.30 kobake 追加 - bool IsHankaku(wchar_t wc, CCharWidthCache& cache) + bool IsHankaku(wchar_t wc, const CCharWidthCache& cache) { //※ほぼ未検証。ロジックが確定したらインライン化すると良い。 diff --git a/sakura_core/charset/charcode.h b/sakura_core/charset/charcode.h index bfd7d45d13..d76405c0a8 100644 --- a/sakura_core/charset/charcode.h +++ b/sakura_core/charset/charcode.h @@ -283,7 +283,7 @@ void InitCharWidthCacheFromDC(const LOGFONT* lfs, ECharWidthFontMode fMode, HDC namespace WCODE { //!半角文字(縦長長方形)かどうか判定 - bool IsHankaku(wchar_t wc, CCharWidthCache& cache = GetCharWidthCache()); + bool IsHankaku(wchar_t wc, const CCharWidthCache& cache = GetCharWidthCache()); //!全角文字(正方形)かどうか判定 inline bool IsZenkaku(wchar_t wc) { return !IsHankaku(wc); } } diff --git a/sakura_core/mem/CNativeW.cpp b/sakura_core/mem/CNativeW.cpp index 137700c27b..d11a72d7d3 100644 --- a/sakura_core/mem/CNativeW.cpp +++ b/sakura_core/mem/CNativeW.cpp @@ -348,7 +348,7 @@ CLogicInt CNativeW::GetSizeOfChar( const wchar_t* pData, int nDataLen, int nIdx } //! 指定した位置の文字が半角何個分かを返す -CKetaXInt CNativeW::GetKetaOfChar( const wchar_t* pData, int nDataLen, int nIdx, CCharWidthCache& cache) +CKetaXInt CNativeW::GetKetaOfChar( const wchar_t* pData, int nDataLen, int nIdx, const CCharWidthCache& cache) { //文字列範囲外なら 0 if( nIdx >= nDataLen ) diff --git a/sakura_core/mem/CNativeW.h b/sakura_core/mem/CNativeW.h index 87dc433f9d..9dacbfc96d 100644 --- a/sakura_core/mem/CNativeW.h +++ b/sakura_core/mem/CNativeW.h @@ -170,7 +170,7 @@ class CNativeW final : public CNative{ bool bEnableExtEol = GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol ); //! 指定した位置の文字が半角何個分かを返す static CKetaXInt GetKetaOfChar( const wchar_t* pData, int nDataLen, int nIdx, - CCharWidthCache& cache = GetCharWidthCache() ); + const CCharWidthCache& cache = GetCharWidthCache() ); static const wchar_t* GetCharNext( const wchar_t* pData, int nDataLen, const wchar_t* pDataCurrent ); //!< ポインタで示した文字の次にある文字の位置を返します static const wchar_t* GetCharPrev( const wchar_t* pData, int nDataLen, const wchar_t* pDataCurrent ); //!< ポインタで示した文字の直前にある文字の位置を返します From 8390ff84bf3fd3347d89d77938e7ad06f6b8723d Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Wed, 17 Feb 2021 11:51:53 +0900 Subject: [PATCH 0433/1024] =?UTF-8?q?=E4=B8=8D=E8=A6=81=E3=81=AA=20virtual?= =?UTF-8?q?=20=E6=8C=87=E5=AE=9A=E3=82=92=E9=99=A4=E5=8E=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-cnative.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/unittests/test-cnative.cpp b/tests/unittests/test-cnative.cpp index 5de6f1929a..4eb0bacd79 100644 --- a/tests/unittests/test-cnative.cpp +++ b/tests/unittests/test-cnative.cpp @@ -792,7 +792,7 @@ TEST(CNativeW, GetKetaOfChar) // 文字が全角なら2を返す。 class FakeCache : public CCharWidthCache { public: - virtual bool CalcHankakuByFont(wchar_t c) const override { return false; } + bool CalcHankakuByFont(wchar_t c) const override { return false; } } cache; EXPECT_EQ(CNativeW::GetKetaOfChar(L"あ", 1, 0, cache), 2); } @@ -813,7 +813,7 @@ TEST(CNativeW, GetHabaOfChar) // CalcPxWidthByFont で計算した結果を返す。 class FakeCache1 : public CCharWidthCache { public: - virtual int CalcPxWidthByFont(wchar_t ch) override { + int CalcPxWidthByFont(wchar_t ch) override { if (ch == L'a') return 10000; else if (ch == L'b') return 20000; else return 0; @@ -826,7 +826,7 @@ TEST(CNativeW, GetHabaOfChar) // 指定された位置が下位サロゲートなら0を返す。 class FakeCache2 : public CCharWidthCache { public: - virtual int CalcPxWidthByFont2(const wchar_t* pc2) const override { + int CalcPxWidthByFont2(const wchar_t* pc2) const override { return 20000; } } cache2; @@ -836,7 +836,7 @@ TEST(CNativeW, GetHabaOfChar) // サロゲートペアが片方しかないときは CalcPxWidthByFont で計算している。 class FakeCache3 : public CCharWidthCache { public: - virtual int CalcPxWidthByFont(wchar_t c) override { + int CalcPxWidthByFont(wchar_t c) override { return 10000; } } cache3; From 5a3d0d8157a30d460cca8c204d3bc2a255788009 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Wed, 17 Feb 2021 03:05:00 +0900 Subject: [PATCH 0434/1024] =?UTF-8?q?=E3=83=95=E3=82=A9=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=82=B5=E3=82=A4=E3=82=BA=E7=9B=B8=E5=AF=BE=E6=8C=87=E5=AE=9A?= =?UTF-8?q?=E3=81=AE=E4=BB=95=E6=A7=98=E5=A4=89=E6=9B=B4=E3=82=92SetFontSi?= =?UTF-8?q?ze=E3=81=AE=E8=AA=AC=E6=98=8E=E3=81=AB=E5=8F=8D=E6=98=A0?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reference/config/S_SetFontSize.html | 41 ++++++++++++++----- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/help/macro/source/reference/config/S_SetFontSize.html b/help/macro/source/reference/config/S_SetFontSize.html index 3e0b9a9f1c..bfbd29e219 100644 --- a/help/macro/source/reference/config/S_SetFontSize.html +++ b/help/macro/source/reference/config/S_SetFontSize.html @@ -26,19 +26,40 @@

                    S_SetFontSize

                    説明
                    + 絶対指定または相対指定によりフォントサイズを設定します。
                    使用中のフォントがTrueTypeのみサイズを変更できます。
                    - i1でフォントサイズを設定します。1/10ポイント単位になります。
                    - 10.5ptにしたいときは、SetFontSize(105, 0);を設定します。
                    + 絶対指定・相対指定どちらの場合も設定後のフォントサイズは1pt~72ptの範囲に制限されます。

                    - i1=0に設定したときに、int2でフォントサイズの拡大or縮小ができます。
                    - 選択されるフォントサイズは下記の通りです。
                    - 8pt, 9pt, 10pt, 10.5pt, 11pt, 12pt, 14pt, 16pt, 18pt, 20pt, 22pt, 24pt, 26pt, 28pt, 36pt, 48pt, 72pt
                    - 現在のフォントサイズが10のときにSetFontSize(0,1);を設定するとフォントサイズが11になります。
                    - 現在のフォントサイズが10のときにSetFontSize(0,-1);を設定するとフォントサイズが9になります。
                    + ■絶対指定
                    + i1に1/10ポイント単位のフォントサイズを設定します。
                    + 例えば10.5ptを設定したい時には「SetFontSize(105, 0);」とします。

                    - i3=0(省略時規定) 共通設定変更
                    - i3=1 タイプ別設定変更
                    - i3=2 現在のウィンドウのみ一時的に変更
                    + ■相対指定
                    + i1に0を設定し、i2に正数(拡大)または負数(縮小)の変更量を設定します。
                    + 設定可能な変更量とそれに対応して適用される倍率を一部示します。
                    + + + + + + + + + + + + +
                    i2倍率
                    -361%
                    ......
                    -370%
                    -280%
                    -190%
                    1110%
                    2125%
                    3150%
                    ......
                    359000%
                    + 例えば現在のフォントサイズが10のときに「SetFontSize(0,1);」を設定するとフォントサイズが11になり、
                    + 現在のフォントサイズが10のときに「SetFontSize(0,-1);」を設定するとフォントサイズが9になります。
                    +
                    + 絶対指定・相対指定どちらの場合もi3で変更範囲の指定ができます。
                    + + + + + +
                    i3変更範囲
                    0共通設定(省略時既定)
                    1タイプ別設定(タイプ別設定がない場合はi3=0と同じ)
                    2現在のウィンドウまたはタブのみ一時的に変更

                    From beadc41968261bbaf8ce9486ee9d4d30f542a128 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Wed, 17 Feb 2021 23:29:41 +0900 Subject: [PATCH 0435/1024] =?UTF-8?q?SonarCloud=E6=8C=87=E6=91=98=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reference/config/S_SetFontSize.html | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/help/macro/source/reference/config/S_SetFontSize.html b/help/macro/source/reference/config/S_SetFontSize.html index bfbd29e219..a3af21789d 100644 --- a/help/macro/source/reference/config/S_SetFontSize.html +++ b/help/macro/source/reference/config/S_SetFontSize.html @@ -38,27 +38,29 @@

                    S_SetFontSize

                    i1に0を設定し、i2に正数(拡大)または負数(縮小)の変更量を設定します。
                    設定可能な変更量とそれに対応して適用される倍率を一部示します。
                    - - - - - - - - - - - + + + + + + + + + + + +
                    i2倍率
                    -361%
                    ......
                    -370%
                    -280%
                    -190%
                    1110%
                    2125%
                    3150%
                    ......
                    359000%
                    無題
                    i2倍率
                    -361%
                    ......
                    -370%
                    -280%
                    -190%
                    1110%
                    2125%
                    3150%
                    ......
                    359000%
                    例えば現在のフォントサイズが10のときに「SetFontSize(0,1);」を設定するとフォントサイズが11になり、
                    現在のフォントサイズが10のときに「SetFontSize(0,-1);」を設定するとフォントサイズが9になります。

                    絶対指定・相対指定どちらの場合もi3で変更範囲の指定ができます。
                    - - - - + + + + +
                    i3変更範囲
                    0共通設定(省略時既定)
                    1タイプ別設定(タイプ別設定がない場合はi3=0と同じ)
                    2現在のウィンドウまたはタブのみ一時的に変更
                    無題
                    i3変更範囲
                    0共通設定(省略時既定)
                    1タイプ別設定(タイプ別設定がない場合はi3=0と同じ)
                    2現在のウィンドウまたはタブのみ一時的に変更
                    From a0e196b3f838716f3e3902472aebe049288c8816 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Fri, 19 Feb 2021 01:05:28 +0900 Subject: [PATCH 0436/1024] =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E5=B0=8E?= =?UTF-8?q?=E5=85=A5=E3=81=AE=E6=BA=96=E5=82=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 使われていなかった CTextMetrics::m_anZenkakuDx を削除 * CCharWidthCache を使用するように変更 --- sakura_core/view/CTextMetrics.cpp | 27 +++++++++++++++------------ sakura_core/view/CTextMetrics.h | 19 ++++++++++++------- 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/sakura_core/view/CTextMetrics.cpp b/sakura_core/view/CTextMetrics.cpp index 106b97918c..2f9e14c36f 100644 --- a/sakura_core/view/CTextMetrics.cpp +++ b/sakura_core/view/CTextMetrics.cpp @@ -136,7 +136,6 @@ void CTextMetrics::SetHankakuDx(int nDxBasis) { m_nDxBasis=nDxBasis; for(int i=0;i<_countof(m_anHankakuDx);i++)m_anHankakuDx[i]=GetHankakuDx(); - for(int i=0;i<_countof(m_anZenkakuDx);i++)m_anZenkakuDx[i]=GetZenkakuDx(); } void CTextMetrics::SetHankakuDy(int nDyBasis) { @@ -155,7 +154,8 @@ const int* CTextMetrics::GenerateDxArray( int nHankakuDx, //!< [in] 半角文字の文字間隔 int nTabSpace, // [in] TAB幅(CLayoutXInt) int nIndent, // [in] インデント(TAB対応用)(CLayoutXInt) - int nCharSpacing //!< [in] 文字隙間 + int nCharSpacing, //!< [in] 文字隙間 + CCharWidthCache& cache ) { if( (int)vResultArray->size() < nLength ){ @@ -183,9 +183,9 @@ const int* CTextMetrics::GenerateDxArray( if(i+1 < nLength && IsUTF16Low(x[1])){ int n = 0; if(nCharSpacing){ - n = CNativeW::GetKetaOfChar(pText, nLength, i) * nCharSpacing; + n = CNativeW::GetKetaOfChar(pText, nLength, i, cache) * nCharSpacing; } - *p = WCODE::CalcPxWidthByFont2(x) + n; + *p = cache.CalcPxWidthByFont2(x) + n; p++; x++; i++; @@ -193,17 +193,17 @@ const int* CTextMetrics::GenerateDxArray( }else{ int n = 0; if(nCharSpacing){ - n = CNativeW::GetKetaOfChar(pText, nLength, i) * nCharSpacing; + n = CNativeW::GetKetaOfChar(pText, nLength, i, cache) * nCharSpacing; } - *p = WCODE::CalcPxWidthByFont(*x) + n; + *p = cache.CalcPxWidthByFont(*x) + n; nLayoutCnt += *p; } }else{ int n = 0; if(nCharSpacing){ - n = CNativeW::GetKetaOfChar(pText, nLength, i) * nCharSpacing; + n = CNativeW::GetKetaOfChar(pText, nLength, i, cache) * nCharSpacing; } - *p = WCODE::CalcPxWidthByFont(*x) + n; + *p = cache.CalcPxWidthByFont(*x) + n; nLayoutCnt += *p; } } @@ -238,7 +238,8 @@ int CTextMetrics::CalcTextWidth2( int nLength, //!< 文字列長 int nHankakuDx, //!< 半角文字の文字間隔 int nCharSpacing, //!< 文字の隙間 - std::vector& vDxArray //!< [out] 文字間隔配列 + std::vector& vDxArray, //!< [out] 文字間隔配列 + CCharWidthCache& cache ) { const int* pDxArray = CTextMetrics::GenerateDxArray( @@ -248,7 +249,8 @@ int CTextMetrics::CalcTextWidth2( nHankakuDx, 8, 0, - nCharSpacing + nCharSpacing, + cache ); //ピクセル幅を計算 @@ -257,8 +259,9 @@ int CTextMetrics::CalcTextWidth2( int CTextMetrics::CalcTextWidth3( const wchar_t* pText, //!< 文字列 - int nLength //!< 文字列長 + int nLength, //!< 文字列長 + CCharWidthCache& cache ) const { - return CalcTextWidth2(pText, nLength, GetCharPxWidth(), GetCharSpacing(), m_vDxArray); + return CalcTextWidth2(pText, nLength, GetCharPxWidth(), GetCharSpacing(), m_vDxArray, cache); } diff --git a/sakura_core/view/CTextMetrics.h b/sakura_core/view/CTextMetrics.h index 3f9e4386ce..3832524d54 100644 --- a/sakura_core/view/CTextMetrics.h +++ b/sakura_core/view/CTextMetrics.h @@ -29,6 +29,9 @@ //2007.08.25 kobake 追加 #include +#include +#include "basis/SakuraBasis.h" +#include "charset/charcode.h" class CTextMetrics; @@ -79,14 +82,14 @@ class CTextMetrics{ //文字間隔配列を取得 const int* GetDxArray_AllHankaku() const{ return m_anHankakuDx; } //!<半角文字列の文字間隔配列を取得。要素数は64。 - const int* GetDxArray_AllZenkaku() const{ return m_anZenkakuDx; } //!<半角文字列の文字間隔配列を取得。要素数は64。 const int* GenerateDxArray2( std::vector* vResultArray, //!< [out] 文字間隔配列の受け取りコンテナ const wchar_t* pText, //!< [in] 文字列 - int nLength //!< [in] 文字列長 + int nLength, //!< [in] 文字列長 + CCharWidthCache& cache = GetCharWidthCache() ) const { - return GenerateDxArray(vResultArray, pText, nLength, GetHankakuDx(), 8, 0, GetCharSpacing()); + return GenerateDxArray(vResultArray, pText, nLength, GetHankakuDx(), 8, 0, GetCharSpacing(), cache); } //! 指定した文字列により文字間隔配列を生成する。 @@ -97,7 +100,8 @@ class CTextMetrics{ int nHankakuDx, //!< [in] 半角文字の文字間隔 int nTabSpace = 8, // [in] TAB幅 int nIndent = 0, // [in] インデント - int nCharSpacing = 0 // [in] 文字の間隔 + int nCharSpacing = 0, // [in] 文字の間隔 + CCharWidthCache& cache = GetCharWidthCache() ); //!文字列のピクセル幅を返す。 @@ -113,12 +117,14 @@ class CTextMetrics{ int nLength, //!< 文字列長 int nHankakuDx, //!< 半角文字の文字間隔 int nCharSpacing, //!< 文字の隙間 - std::vector& vDxArray //!< [out] 文字間隔配列 + std::vector& vDxArray, //!< [out] 文字間隔配列 + CCharWidthCache& cache = GetCharWidthCache() ); int CalcTextWidth3( const wchar_t* pText, //!< 文字列 - int nLength //!< 文字列長 + int nLength, //!< 文字列長 + CCharWidthCache& cache = GetCharWidthCache() ) const; private: @@ -128,7 +134,6 @@ class CTextMetrics{ int m_nDxBasis; //!< 半角文字の文字間隔 (横幅+α) int m_nDyBasis; //!< 半角文字の行間隔 (縦幅+α) int m_anHankakuDx[64]; //!< 半角用文字間隔配列 - int m_anZenkakuDx[64]; //!< 全角用文字間隔配列 std::vector m_aFontHeightMargin; mutable std::vector m_vDxArray; //!< 文字間隔配列 }; From 4fe93ede59c1aec2bdfdae06f8111b03bf04c153 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Fri, 19 Feb 2021 01:19:03 +0900 Subject: [PATCH 0437/1024] =?UTF-8?q?CTextMetrics=E3=81=AE=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-ctextmetrics.cpp | 243 +++++++++++++++++++++++++ tests/unittests/tests1.vcxproj | 1 + tests/unittests/tests1.vcxproj.filters | 3 + 3 files changed, 247 insertions(+) create mode 100644 tests/unittests/test-ctextmetrics.cpp diff --git a/tests/unittests/test-ctextmetrics.cpp b/tests/unittests/test-ctextmetrics.cpp new file mode 100644 index 0000000000..0004d4e624 --- /dev/null +++ b/tests/unittests/test-ctextmetrics.cpp @@ -0,0 +1,243 @@ +/*! @file */ +/* + Copyright (C) 2021 Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ + +#include +#include "view/CTextMetrics.h" +#include +#include + +class CTextMetricsWithGDI : public testing::Test { +protected: + CTextMetricsWithGDI() { + lf1.lfCharSet = DEFAULT_CHARSET; + std::wcscpy(lf1.lfFaceName, L"MS Gothic"); + + dc = GetDC(nullptr); + font = CreateFontIndirect(&lf1); + oldFont = (HFONT)SelectObject(dc, font); + + GetTextExtentPoint32(dc, L"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", 52, &size); + GetTextMetrics(dc, &tm); + } + ~CTextMetricsWithGDI() { + SelectObject(dc, oldFont); + DeleteObject(font); + ReleaseDC(nullptr, dc); + } + SIZE size; + TEXTMETRIC tm; + LOGFONT lf1{}; + HDC dc; + HFONT font; + HFONT oldFont; +}; + +TEST_F(CTextMetricsWithGDI, Update1) +{ + // 引数に0を設定 + CTextMetrics metrics; + metrics.Update(dc, font, 0, 0); + EXPECT_EQ(metrics.GetHankakuWidth(), (size.cx / 26 + 1) / 2); + EXPECT_EQ(metrics.GetHankakuHeight(), size.cy); + EXPECT_EQ(metrics.GetCharHeightMarginByFontNo(0), 0); + EXPECT_EQ(metrics.GetHankakuDx(), metrics.GetHankakuWidth()); + EXPECT_EQ(metrics.GetHankakuDy(), metrics.GetHankakuHeight()); + for (int i = 0; i < 64; ++i) + EXPECT_EQ(metrics.GetDxArray_AllHankaku()[i], metrics.GetHankakuDx()); + + // Updateに依存するその他の関数のテスト + EXPECT_EQ(metrics.GetZenkakuDx(), metrics.GetHankakuDx() * 2); + EXPECT_EQ(metrics.GetCharSpacing(), metrics.GetHankakuDx() - metrics.GetHankakuWidth()); + EXPECT_EQ(metrics.GetCharPxWidth(), 1); + EXPECT_EQ(metrics.GetCharPxWidth(CLayoutInt(0)), 0); + EXPECT_EQ(metrics.GetCharPxWidth(CLayoutInt(42)), 42); + EXPECT_EQ((Int)metrics.GetLayoutXDefault(), metrics.GetHankakuDx()); + EXPECT_EQ((Int)metrics.GetLayoutXDefault(0), 0); + EXPECT_EQ((Int)metrics.GetLayoutXDefault(42), metrics.GetHankakuDx() * 42); + CTextMetrics metrics2; + metrics.CopyTextMetricsStatus(&metrics2); + EXPECT_EQ(metrics2.GetHankakuWidth(), metrics.GetHankakuWidth()); + EXPECT_EQ(metrics2.GetHankakuHeight(), metrics.GetHankakuHeight()); + EXPECT_EQ(metrics2.GetCharHeightMarginByFontNo(0), metrics.GetCharHeightMarginByFontNo(0)); + + class FakeCache : public CCharWidthCache { + public: + int CalcPxWidthByFont(wchar_t ch) override { return 1; } + } cache; + EXPECT_EQ(metrics.CalcTextWidth3(L"a", 1, cache), 1); + std::vector v; + metrics.GenerateDxArray2(&v, L"a", 1, cache); + EXPECT_EQ(v[0], 1); +} + +TEST_F(CTextMetricsWithGDI, Update2) +{ + // nLineSpaceに正の数を設定 + CTextMetrics metrics; + metrics.Update(dc, font, 1000, 0); + EXPECT_EQ(metrics.GetHankakuWidth(), (size.cx / 26 + 1) / 2); + EXPECT_EQ(metrics.GetHankakuHeight(), size.cy); + EXPECT_EQ(metrics.GetCharHeightMarginByFontNo(0), 0); + EXPECT_EQ(metrics.GetHankakuDx(), metrics.GetHankakuWidth()); + EXPECT_EQ(metrics.GetHankakuDy(), metrics.GetHankakuHeight() + 1000); +} + +TEST_F(CTextMetricsWithGDI, Update3) +{ + // nLineSpaceに負の数を設定 + CTextMetrics metrics; + metrics.Update(dc, font, -1000, 0); + EXPECT_EQ(metrics.GetHankakuWidth(), (size.cx / 26 + 1) / 2); + EXPECT_EQ(metrics.GetHankakuHeight(), 1); + EXPECT_EQ(metrics.GetCharHeightMarginByFontNo(0), 0); + EXPECT_EQ(metrics.GetHankakuDx(), metrics.GetHankakuWidth()); + EXPECT_EQ(metrics.GetHankakuDy(), 1); +} + +TEST_F(CTextMetricsWithGDI, Update4) +{ + // nColmSpaceに正の数を設定 + CTextMetrics metrics; + metrics.Update(dc, font, 0, 1000); + EXPECT_EQ(metrics.GetHankakuWidth(), (size.cx / 26 + 1) / 2); + EXPECT_EQ(metrics.GetHankakuHeight(), size.cy); + EXPECT_EQ(metrics.GetCharHeightMarginByFontNo(0), 0); + EXPECT_EQ(metrics.GetHankakuDx(), metrics.GetHankakuWidth() + 1000); + EXPECT_EQ(metrics.GetHankakuDy(), metrics.GetHankakuHeight()); +} + +TEST_F(CTextMetricsWithGDI, Update5) +{ + // nColmSpaceに負の数を設定 + CTextMetrics metrics; + metrics.Update(dc, font, 0, -1000); + EXPECT_EQ(metrics.GetHankakuWidth(), (size.cx / 26 + 1) / 2); + EXPECT_EQ(metrics.GetHankakuHeight(), size.cy); + EXPECT_EQ(metrics.GetCharHeightMarginByFontNo(0), 0); + EXPECT_EQ(metrics.GetHankakuDx(), metrics.GetHankakuWidth() - 1000); + EXPECT_EQ(metrics.GetHankakuDy(), metrics.GetHankakuHeight()); +} + +class FakeCache1 : public CCharWidthCache { + int i = 0; +public: + int CalcPxWidthByFont(wchar_t ch) override { + return ++i; + } + int CalcPxWidthByFont2(const wchar_t* p) const override { + return 10000; + } +}; + +TEST(CTextMetrics, GenerateDxArray1) +{ + // 各文字の幅を CalcPxWidthByFont で計算して返す + std::vector v; + FakeCache1 cache; + const int* p = CTextMetrics::GenerateDxArray(&v, L"ab", 2, 0, 0, 0, 0, cache); + EXPECT_EQ(p, v.data()); + EXPECT_EQ(v[0], 1); + EXPECT_EQ(v[1], 2); +} + +TEST(CTextMetrics, GenerateDxArray2) +{ + // 各文字の幅に nCharSpacing を足して返す + std::vector v; + FakeCache1 cache; + CTextMetrics::GenerateDxArray(&v, L"ab", 2, 0, 0, 0, 10, cache); + EXPECT_EQ(v[0], 11); + EXPECT_EQ(v[1], 12); +} + +TEST(CTextMetrics, GenerateDxArray3) +{ + // サロゲートペアの幅は CalcPxWidthByFont2 で計算する + std::vector v; + FakeCache1 cache; + CTextMetrics::GenerateDxArray(&v, L"\xd83c\xdf38", 2, 0, 0, 0, 0, cache); + EXPECT_EQ(v[0], 10000); +} + +TEST(CTextMetrics, GenerateDxArray4) +{ + // サロゲートペアの幅に nCharSpacing を足して返す + std::vector v; + FakeCache1 cache; + CTextMetrics::GenerateDxArray(&v, L"\xd83c\xdf38", 2, 0, 0, 0, 10, cache); + EXPECT_EQ(v[0], 10020); +} + +TEST(CTextMetrics, GenerateDxArray5) +{ + // 対応する下位サロゲートのない上位サロゲートの幅は CalcPxWidthByFont を使って計算する + std::vector v; + FakeCache1 cache; + CTextMetrics::GenerateDxArray(&v, L"\xd83c,", 2, 0, 0, 0, 0, cache); + EXPECT_EQ(v[0], 1); + EXPECT_EQ(v[1], 2); +} + +TEST(CTextMetrics, GenerateDxArray6) +{ + // 上位サロゲート片 + nCharSpacing の組み合わせ + std::vector v; + FakeCache1 cache; + CTextMetrics::GenerateDxArray(&v, L"\xd83c,", 2, 0, 0, 0, 10, cache); + EXPECT_EQ(v[0], 21); + EXPECT_EQ(v[1], 12); +} + +TEST(CTextMetrics, GenerateDxArray7) +{ + // タブ幅計算のテスト + std::vector v; + FakeCache1 cache; + CTextMetrics::GenerateDxArray(&v, L"\t\t \t", 4, 10, 100, 1000, 0, cache); + EXPECT_EQ(v[0], 100); + EXPECT_EQ(v[1], 100); + EXPECT_EQ(v[2], 1); + EXPECT_EQ(v[3], 99); +} + +TEST(CTextMetrics, CalcTextWidth) +{ + int dx[] = {1, 2, 3}; + EXPECT_EQ(CTextMetrics::CalcTextWidth(nullptr, 3, dx), 6); +} + +TEST(CTextMetrics, CalcTextWidth2) +{ + class FakeCache : public CCharWidthCache { + int i = 0; + public: + int CalcPxWidthByFont(wchar_t ch) override { + return ++i; + } + }; + std::vector v; + FakeCache cache; + EXPECT_EQ(CTextMetrics::CalcTextWidth2(L"abc", 3, 0, 0, v, cache), 6); +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index e9d624cfb7..f1a0a00f50 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -114,6 +114,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index 533954a379..4326ebae40 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -104,6 +104,9 @@ Test Files + + Test Files + From 6995a8e64771252e75f2396d9a2fabe55e7e7570 Mon Sep 17 00:00:00 2001 From: Moca Date: Mon, 7 Mar 2016 00:57:41 +0900 Subject: [PATCH 0438/1024] =?UTF-8?q?=E3=83=97=E3=83=AD=E3=83=9D=E3=83=BC?= =?UTF-8?q?=E3=82=B7=E3=83=A7=E3=83=8A=E3=83=AB=E7=89=88=E3=81=A7=E7=A6=81?= =?UTF-8?q?=E5=89=87=E5=87=A6=E7=90=86=E3=81=8C=E3=81=8A=E3=81=8B=E3=81=97?= =?UTF-8?q?=E3=81=84=E5=95=8F=E9=A1=8C=E3=81=AE=E4=BF=AE=E6=AD=A3=20(patch?= =?UTF-8?q?unicode#1034)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit プロポーショナル版で幅の計算方式がかわったのに禁則処理が対応していないバグの修正です。 --- .../doc/layout/CLayoutMgr_DoLayout.cpp | 8 ++++--- sakura_core/doc/layout/CLayoutMgr_New.cpp | 22 +++++++++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp b/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp index 5cfdd810a2..2328bc1cc4 100644 --- a/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp +++ b/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp @@ -118,7 +118,9 @@ void CLayoutMgr::_DoWordWrap(SLayoutWork* pWork, PF_OnLine pfOnLine) void CLayoutMgr::_DoKutoBurasage(SLayoutWork* pWork) { - if( (GetMaxLineLayout() - pWork->nPosX < 2) && (pWork->eKinsokuType == KINSOKU_TYPE_NONE) ) + if( +// (GetMaxLineLayout() - pWork->nPosX < 2 * GetWidthPerKeta()) && + (pWork->eKinsokuType == KINSOKU_TYPE_NONE) ) { // 2007.09.07 kobake レイアウトとロジックの区別 CLayoutInt nCharKetas = GetLayoutXOfChar( pWork->cLineStr, pWork->nPos ); @@ -135,7 +137,7 @@ void CLayoutMgr::_DoKutoBurasage(SLayoutWork* pWork) void CLayoutMgr::_DoGyotoKinsoku(SLayoutWork* pWork, PF_OnLine pfOnLine) { if( (pWork->nPos+1 < pWork->cLineStr.GetLength()) // 2007.02.17 ryoji 追加 - && (GetMaxLineLayout() - pWork->nPosX < 4) +// && (GetMaxLineLayout() - pWork->nPosX < 4 * GetWidthPerKeta()) && ( pWork->nPosX > pWork->nIndent ) // 2004.04.09 pWork->nPosXの解釈変更のため,行頭チェックも変更 && (pWork->eKinsokuType == KINSOKU_TYPE_NONE) ) { @@ -160,7 +162,7 @@ void CLayoutMgr::_DoGyotoKinsoku(SLayoutWork* pWork, PF_OnLine pfOnLine) void CLayoutMgr::_DoGyomatsuKinsoku(SLayoutWork* pWork, PF_OnLine pfOnLine) { if( (pWork->nPos+1 < pWork->cLineStr.GetLength()) // 2007.02.17 ryoji 追加 - && (GetMaxLineKetas() - pWork->nPosX < 4) +// && (GetMaxLineKetas() - pWork->nPosX < 4 * GetWidthPerKeta()) && ( pWork->nPosX > pWork->nIndent ) // 2004.04.09 pWork->nPosXの解釈変更のため,行頭チェックも変更 && (pWork->eKinsokuType == KINSOKU_TYPE_NONE) ) { /* 行末禁則する && 行末付近 && 行頭でないこと(無限に禁則してしまいそう) */ diff --git a/sakura_core/doc/layout/CLayoutMgr_New.cpp b/sakura_core/doc/layout/CLayoutMgr_New.cpp index ee7c754f64..715ec6516b 100644 --- a/sakura_core/doc/layout/CLayoutMgr_New.cpp +++ b/sakura_core/doc/layout/CLayoutMgr_New.cpp @@ -72,6 +72,16 @@ bool CLayoutMgr::IsKinsokuPosHead( CLayoutInt nCharKetas2 //!< [in] 現在位置の次の文字サイズ ) { + if( nRest < nCharKetas ){ + // 次の文字で折り返しの場合 + return true; + } + if( nRest < nCharKetas + nCharKetas2 ){ + // 次の次の文字で折り返しの場合 + return true; + } + return false; +#if 0 switch( (Int)nRest ) { // 321012 ↓マジックナンバー @@ -103,6 +113,7 @@ bool CLayoutMgr::IsKinsokuPosHead( break; } return false; +#endif } /*! @@ -114,6 +125,16 @@ bool CLayoutMgr::IsKinsokuPosTail( CLayoutInt nCharKetas2 //!< [in] 現在位置の次の文字サイズ ) { + if( nRest < nCharKetas ){ + // 次の文字で折り返しの場合 + return true; + } + if( nRest < nCharKetas + nCharKetas2 ){ + // 次の次の文字で折り返しの場合 + return true; + } + return false; +#if 0 switch( (Int)nRest ) { case 3: // 3文字前 @@ -140,6 +161,7 @@ bool CLayoutMgr::IsKinsokuPosTail( break; } return false; +#endif } /*! From 4088c49f4bbcdffdaa930cf8e58f6dfcc7954615 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Wed, 17 Feb 2021 10:09:22 +0900 Subject: [PATCH 0439/1024] =?UTF-8?q?=E7=8F=BE=E5=9C=A8=E4=BD=8D=E7=BD=AE?= =?UTF-8?q?=E3=81=8C=E8=A1=8C=E6=9C=AB=E4=BB=98=E8=BF=91=E3=81=A7=E3=81=82?= =?UTF-8?q?=E3=82=8B=E3=81=8B=E3=82=92=E7=A2=BA=E8=AA=8D=E3=81=95=E3=81=9B?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp b/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp index 2328bc1cc4..9c3b80cb52 100644 --- a/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp +++ b/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp @@ -118,9 +118,8 @@ void CLayoutMgr::_DoWordWrap(SLayoutWork* pWork, PF_OnLine pfOnLine) void CLayoutMgr::_DoKutoBurasage(SLayoutWork* pWork) { - if( -// (GetMaxLineLayout() - pWork->nPosX < 2 * GetWidthPerKeta()) && - (pWork->eKinsokuType == KINSOKU_TYPE_NONE) ) + if( ( GetMaxLineLayout() - pWork->nPosX < 2 * GetWidthPerKeta() ) + && ( pWork->eKinsokuType == KINSOKU_TYPE_NONE ) ) { // 2007.09.07 kobake レイアウトとロジックの区別 CLayoutInt nCharKetas = GetLayoutXOfChar( pWork->cLineStr, pWork->nPos ); @@ -137,7 +136,7 @@ void CLayoutMgr::_DoKutoBurasage(SLayoutWork* pWork) void CLayoutMgr::_DoGyotoKinsoku(SLayoutWork* pWork, PF_OnLine pfOnLine) { if( (pWork->nPos+1 < pWork->cLineStr.GetLength()) // 2007.02.17 ryoji 追加 -// && (GetMaxLineLayout() - pWork->nPosX < 4 * GetWidthPerKeta()) + && ( GetMaxLineLayout() - pWork->nPosX < 4 * GetWidthPerKeta() ) && ( pWork->nPosX > pWork->nIndent ) // 2004.04.09 pWork->nPosXの解釈変更のため,行頭チェックも変更 && (pWork->eKinsokuType == KINSOKU_TYPE_NONE) ) { @@ -162,7 +161,7 @@ void CLayoutMgr::_DoGyotoKinsoku(SLayoutWork* pWork, PF_OnLine pfOnLine) void CLayoutMgr::_DoGyomatsuKinsoku(SLayoutWork* pWork, PF_OnLine pfOnLine) { if( (pWork->nPos+1 < pWork->cLineStr.GetLength()) // 2007.02.17 ryoji 追加 -// && (GetMaxLineKetas() - pWork->nPosX < 4 * GetWidthPerKeta()) + && ( GetMaxLineLayout() - pWork->nPosX < 4 * GetWidthPerKeta() ) && ( pWork->nPosX > pWork->nIndent ) // 2004.04.09 pWork->nPosXの解釈変更のため,行頭チェックも変更 && (pWork->eKinsokuType == KINSOKU_TYPE_NONE) ) { /* 行末禁則する && 行末付近 && 行頭でないこと(無限に禁則してしまいそう) */ From a6d11fca33b54dba791acf59562ee546bcf86d35 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Wed, 17 Feb 2021 10:40:13 +0900 Subject: [PATCH 0440/1024] =?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=81=AE=E8=BF=BD=E5=8A=A0=E3=81=A8=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../doc/layout/CLayoutMgr_DoLayout.cpp | 5 ++- sakura_core/doc/layout/CLayoutMgr_New.cpp | 35 +++++++++---------- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp b/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp index 9c3b80cb52..945eaa6cf4 100644 --- a/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp +++ b/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp @@ -118,6 +118,7 @@ void CLayoutMgr::_DoWordWrap(SLayoutWork* pWork, PF_OnLine pfOnLine) void CLayoutMgr::_DoKutoBurasage(SLayoutWork* pWork) { + // 現在位置が行末付近で禁則処理の実行中でないこと if( ( GetMaxLineLayout() - pWork->nPosX < 2 * GetWidthPerKeta() ) && ( pWork->eKinsokuType == KINSOKU_TYPE_NONE ) ) { @@ -135,6 +136,7 @@ void CLayoutMgr::_DoKutoBurasage(SLayoutWork* pWork) void CLayoutMgr::_DoGyotoKinsoku(SLayoutWork* pWork, PF_OnLine pfOnLine) { + // 現在位置が行末付近かつ行頭ではなく、禁則処理の実行中でないこと if( (pWork->nPos+1 < pWork->cLineStr.GetLength()) // 2007.02.17 ryoji 追加 && ( GetMaxLineLayout() - pWork->nPosX < 4 * GetWidthPerKeta() ) && ( pWork->nPosX > pWork->nIndent ) // 2004.04.09 pWork->nPosXの解釈変更のため,行頭チェックも変更 @@ -160,11 +162,12 @@ void CLayoutMgr::_DoGyotoKinsoku(SLayoutWork* pWork, PF_OnLine pfOnLine) void CLayoutMgr::_DoGyomatsuKinsoku(SLayoutWork* pWork, PF_OnLine pfOnLine) { + // 現在位置が行末付近かつ行頭ではなく、禁則処理の実行中でないこと if( (pWork->nPos+1 < pWork->cLineStr.GetLength()) // 2007.02.17 ryoji 追加 && ( GetMaxLineLayout() - pWork->nPosX < 4 * GetWidthPerKeta() ) && ( pWork->nPosX > pWork->nIndent ) // 2004.04.09 pWork->nPosXの解釈変更のため,行頭チェックも変更 && (pWork->eKinsokuType == KINSOKU_TYPE_NONE) ) - { /* 行末禁則する && 行末付近 && 行頭でないこと(無限に禁則してしまいそう) */ + { CLayoutInt nCharKetas2 = GetLayoutXOfChar( pWork->cLineStr, pWork->nPos ); CLayoutInt nCharKetas3 = GetLayoutXOfChar( pWork->cLineStr, pWork->nPos+1 ); diff --git a/sakura_core/doc/layout/CLayoutMgr_New.cpp b/sakura_core/doc/layout/CLayoutMgr_New.cpp index 715ec6516b..8142a2c195 100644 --- a/sakura_core/doc/layout/CLayoutMgr_New.cpp +++ b/sakura_core/doc/layout/CLayoutMgr_New.cpp @@ -27,8 +27,7 @@ /*! 行頭禁則文字に該当するかを調べる. - @param[in] pLine 調べる文字へのポインタ - @param[in] length 当該箇所の文字サイズ + @param[in] wc 調べる文字 @retval true 禁則文字に該当 @retval false 禁則文字に該当しない */ @@ -40,8 +39,7 @@ bool CLayoutMgr::IsKinsokuHead( wchar_t wc ) /*! 行末禁則文字に該当するかを調べる. - @param[in] pLine 調べる文字へのポインタ - @param[in] length 当該箇所の文字サイズ + @param[in] wc 調べる文字 @retval true 禁則文字に該当 @retval false 禁則文字に該当しない */ @@ -53,8 +51,7 @@ bool CLayoutMgr::IsKinsokuTail( wchar_t wc ) /*! 禁則対象句読点に該当するかを調べる. - @param [in] pLine 調べる文字へのポインタ - @param [in] length 当該箇所の文字サイズ + @param[in] wc 調べる文字 @retval true 禁則文字に該当 @retval false 禁則文字に該当しない */ @@ -64,13 +61,14 @@ bool CLayoutMgr::IsKinsokuKuto( wchar_t wc ) } /*! - @date 2005-08-20 D.S.Koba _DoLayout()とDoLayout_Range()から分離 + 行頭禁則の処理位置であるか調べる + + @param[in] nRest 現在行における残り文字数分の字幅と間隔の合計 + @param[in] nCharKetas 現在のカーソル位置にある文字の幅と間隔 + @param[in] nCharKetas2 次のカーソル位置にある文字の幅と間隔 + @return 処理が必要な位置である場合にtrue */ -bool CLayoutMgr::IsKinsokuPosHead( - CLayoutInt nRest, //!< [in] 行の残り文字数 - CLayoutInt nCharKetas, //!< [in] 現在位置の文字サイズ - CLayoutInt nCharKetas2 //!< [in] 現在位置の次の文字サイズ -) +bool CLayoutMgr::IsKinsokuPosHead( CLayoutInt nRest, CLayoutInt nCharKetas, CLayoutInt nCharKetas2 ) { if( nRest < nCharKetas ){ // 次の文字で折り返しの場合 @@ -117,13 +115,14 @@ bool CLayoutMgr::IsKinsokuPosHead( } /*! - @date 2005-08-20 D.S.Koba _DoLayout()とDoLayout_Range()から分離 + 行末禁則の処理位置であるか調べる + + @param[in] nRest 現在行における残り文字数分の字幅と間隔の合計 + @param[in] nCharKetas 現在のカーソル位置にある文字の幅と間隔 + @param[in] nCharKetas2 次のカーソル位置にある文字の幅と間隔 + @return 処理が必要な位置である場合にtrue */ -bool CLayoutMgr::IsKinsokuPosTail( - CLayoutInt nRest, //!< [in] 行の残り文字数 - CLayoutInt nCharKetas, //!< [in] 現在位置の文字サイズ - CLayoutInt nCharKetas2 //!< [in] 現在位置の次の文字サイズ -) +bool CLayoutMgr::IsKinsokuPosTail( CLayoutInt nRest, CLayoutInt nCharKetas, CLayoutInt nCharKetas2 ) { if( nRest < nCharKetas ){ // 次の文字で折り返しの場合 From 5d2449e3fa4267874ced42ce6e33aa3f3733b5cf Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Wed, 17 Feb 2021 10:45:29 +0900 Subject: [PATCH 0441/1024] =?UTF-8?q?=E7=A6=81=E5=89=87=E5=87=A6=E7=90=86?= =?UTF-8?q?=E3=81=AB=E4=BD=BF=E3=81=86=E9=96=A2=E6=95=B0=E3=81=ABconst?= =?UTF-8?q?=E4=BF=AE=E9=A3=BE=E5=AD=90=E3=82=92=E4=BB=98=E4=B8=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/doc/layout/CLayoutMgr.h | 10 +++++----- sakura_core/doc/layout/CLayoutMgr_New.cpp | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/sakura_core/doc/layout/CLayoutMgr.h b/sakura_core/doc/layout/CLayoutMgr.h index 455e36d88c..5a3200b975 100644 --- a/sakura_core/doc/layout/CLayoutMgr.h +++ b/sakura_core/doc/layout/CLayoutMgr.h @@ -347,9 +347,9 @@ class CLayoutMgr : public CProgressSubject private: bool _ExistKinsokuKuto(wchar_t wc) const{ return m_pszKinsokuKuto_1.exist(wc); } bool _ExistKinsokuHead(wchar_t wc) const{ return m_pszKinsokuHead_1.exist(wc); } - bool IsKinsokuHead( wchar_t wc ); /*!< 行頭禁則文字をチェックする */ //@@@ 2002.04.08 MIK - bool IsKinsokuTail( wchar_t wc ); /*!< 行末禁則文字をチェックする */ //@@@ 2002.04.08 MIK - bool IsKinsokuKuto( wchar_t wc ); /*!< 句読点文字をチェックする */ //@@@ 2002.04.17 MIK + bool IsKinsokuHead( wchar_t wc ) const; // 行頭禁則文字をチェックする + bool IsKinsokuTail( wchar_t wc ) const; // 行末禁則文字をチェックする + bool IsKinsokuKuto( wchar_t wc ) const; // 句読点文字をチェックする // 2005-08-20 D.S.Koba 禁則関連処理の関数化 /*! 句読点ぶら下げの処理位置か @date 2005-08-20 D.S.Koba @@ -358,8 +358,8 @@ class CLayoutMgr : public CProgressSubject bool IsKinsokuPosKuto(CLayoutInt nRest, CLayoutInt nCharChars ) const { return nRest < nCharChars; } - bool IsKinsokuPosHead(CLayoutInt nRest, CLayoutInt nCharKetas, CLayoutInt nCharKetas2); //!< 行頭禁則の処理位置か - bool IsKinsokuPosTail(CLayoutInt nRest, CLayoutInt nCharKetas, CLayoutInt nCharKetas2); //!< 行末禁則の処理位置か + bool IsKinsokuPosHead( CLayoutInt nRest, CLayoutInt nCharKetas, CLayoutInt nCharKetas2 ) const; // 行頭禁則の処理位置か + bool IsKinsokuPosTail( CLayoutInt nRest, CLayoutInt nCharKetas, CLayoutInt nCharKetas2 ) const; // 行末禁則の処理位置か private: // Oct. 1, 2002 genta インデント幅計算関数群 CLayoutInt getIndentOffset_Normal( CLayout* pLayoutPrev ); diff --git a/sakura_core/doc/layout/CLayoutMgr_New.cpp b/sakura_core/doc/layout/CLayoutMgr_New.cpp index 8142a2c195..a3f1799b8e 100644 --- a/sakura_core/doc/layout/CLayoutMgr_New.cpp +++ b/sakura_core/doc/layout/CLayoutMgr_New.cpp @@ -31,7 +31,7 @@ @retval true 禁則文字に該当 @retval false 禁則文字に該当しない */ -bool CLayoutMgr::IsKinsokuHead( wchar_t wc ) +bool CLayoutMgr::IsKinsokuHead( wchar_t wc ) const { return m_pszKinsokuHead_1.exist(wc); } @@ -43,7 +43,7 @@ bool CLayoutMgr::IsKinsokuHead( wchar_t wc ) @retval true 禁則文字に該当 @retval false 禁則文字に該当しない */ -bool CLayoutMgr::IsKinsokuTail( wchar_t wc ) +bool CLayoutMgr::IsKinsokuTail( wchar_t wc ) const { return m_pszKinsokuTail_1.exist(wc); } @@ -55,7 +55,7 @@ bool CLayoutMgr::IsKinsokuTail( wchar_t wc ) @retval true 禁則文字に該当 @retval false 禁則文字に該当しない */ -bool CLayoutMgr::IsKinsokuKuto( wchar_t wc ) +bool CLayoutMgr::IsKinsokuKuto( wchar_t wc ) const { return m_pszKinsokuKuto_1.exist(wc); } @@ -68,7 +68,7 @@ bool CLayoutMgr::IsKinsokuKuto( wchar_t wc ) @param[in] nCharKetas2 次のカーソル位置にある文字の幅と間隔 @return 処理が必要な位置である場合にtrue */ -bool CLayoutMgr::IsKinsokuPosHead( CLayoutInt nRest, CLayoutInt nCharKetas, CLayoutInt nCharKetas2 ) +bool CLayoutMgr::IsKinsokuPosHead( CLayoutInt nRest, CLayoutInt nCharKetas, CLayoutInt nCharKetas2 ) const { if( nRest < nCharKetas ){ // 次の文字で折り返しの場合 @@ -122,7 +122,7 @@ bool CLayoutMgr::IsKinsokuPosHead( CLayoutInt nRest, CLayoutInt nCharKetas, CLay @param[in] nCharKetas2 次のカーソル位置にある文字の幅と間隔 @return 処理が必要な位置である場合にtrue */ -bool CLayoutMgr::IsKinsokuPosTail( CLayoutInt nRest, CLayoutInt nCharKetas, CLayoutInt nCharKetas2 ) +bool CLayoutMgr::IsKinsokuPosTail( CLayoutInt nRest, CLayoutInt nCharKetas, CLayoutInt nCharKetas2 ) const { if( nRest < nCharKetas ){ // 次の文字で折り返しの場合 From 9d45e72704f92540ec8b8e547f7979d40ecb6ab5 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Wed, 17 Feb 2021 10:49:58 +0900 Subject: [PATCH 0442/1024] =?UTF-8?q?IsKinsokuPosKuto=E9=96=A2=E6=95=B0?= =?UTF-8?q?=E3=81=AE=E5=AE=9A=E7=BE=A9=E3=82=92=E3=83=98=E3=83=83=E3=83=80?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=8B=E3=82=89=E5=88=86?= =?UTF-8?q?=E9=9B=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/doc/layout/CLayoutMgr.h | 8 +------- sakura_core/doc/layout/CLayoutMgr_New.cpp | 12 ++++++++++++ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/sakura_core/doc/layout/CLayoutMgr.h b/sakura_core/doc/layout/CLayoutMgr.h index 5a3200b975..8b9cc4c4ae 100644 --- a/sakura_core/doc/layout/CLayoutMgr.h +++ b/sakura_core/doc/layout/CLayoutMgr.h @@ -351,13 +351,7 @@ class CLayoutMgr : public CProgressSubject bool IsKinsokuTail( wchar_t wc ) const; // 行末禁則文字をチェックする bool IsKinsokuKuto( wchar_t wc ) const; // 句読点文字をチェックする // 2005-08-20 D.S.Koba 禁則関連処理の関数化 - /*! 句読点ぶら下げの処理位置か - @date 2005-08-20 D.S.Koba - @date Sep. 3, 2005 genta 最適化 - */ - bool IsKinsokuPosKuto(CLayoutInt nRest, CLayoutInt nCharChars ) const { - return nRest < nCharChars; - } + bool IsKinsokuPosKuto( CLayoutInt nRest, CLayoutInt nCharChars ) const; // 句読点ぶら下げの処理位置か bool IsKinsokuPosHead( CLayoutInt nRest, CLayoutInt nCharKetas, CLayoutInt nCharKetas2 ) const; // 行頭禁則の処理位置か bool IsKinsokuPosTail( CLayoutInt nRest, CLayoutInt nCharKetas, CLayoutInt nCharKetas2 ) const; // 行末禁則の処理位置か private: diff --git a/sakura_core/doc/layout/CLayoutMgr_New.cpp b/sakura_core/doc/layout/CLayoutMgr_New.cpp index a3f1799b8e..1fdda4f477 100644 --- a/sakura_core/doc/layout/CLayoutMgr_New.cpp +++ b/sakura_core/doc/layout/CLayoutMgr_New.cpp @@ -163,6 +163,18 @@ bool CLayoutMgr::IsKinsokuPosTail( CLayoutInt nRest, CLayoutInt nCharKetas, CLay #endif } +/*! + 句読点ぶら下げの処理位置であるか調べる + + @param[in] nRest 現在行における残り文字数分の字幅と間隔の合計 + @param[in] nCharChars 現在のカーソル位置にある文字の幅と間隔 + @return 処理が必要な位置である場合にtrue +*/ +bool CLayoutMgr::IsKinsokuPosKuto( CLayoutInt nRest, CLayoutInt nCharChars ) const +{ + return nRest < nCharChars; +} + /*! @brief 行の長さを計算する (2行目以降の字下げ無し) From 08aa3bccc253835acde9fddec6e7975ea8453968 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Wed, 17 Feb 2021 10:54:34 +0900 Subject: [PATCH 0443/1024] =?UTF-8?q?=E4=B8=8D=E8=A6=81=E3=81=A8=E3=81=AA?= =?UTF-8?q?=E3=82=8B=E3=82=B3=E3=83=BC=E3=83=89=E3=81=AE=E9=99=A4=E5=8E=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 未使用の関数2個(CLayoutMgr::_ExistKinsoku~)も併せて除去した --- sakura_core/doc/layout/CLayoutMgr.h | 2 - sakura_core/doc/layout/CLayoutMgr_New.cpp | 61 ----------------------- 2 files changed, 63 deletions(-) diff --git a/sakura_core/doc/layout/CLayoutMgr.h b/sakura_core/doc/layout/CLayoutMgr.h index 8b9cc4c4ae..4724ed9746 100644 --- a/sakura_core/doc/layout/CLayoutMgr.h +++ b/sakura_core/doc/layout/CLayoutMgr.h @@ -345,8 +345,6 @@ class CLayoutMgr : public CProgressSubject void _OnLine2(SLayoutWork* pWork); private: - bool _ExistKinsokuKuto(wchar_t wc) const{ return m_pszKinsokuKuto_1.exist(wc); } - bool _ExistKinsokuHead(wchar_t wc) const{ return m_pszKinsokuHead_1.exist(wc); } bool IsKinsokuHead( wchar_t wc ) const; // 行頭禁則文字をチェックする bool IsKinsokuTail( wchar_t wc ) const; // 行末禁則文字をチェックする bool IsKinsokuKuto( wchar_t wc ) const; // 句読点文字をチェックする diff --git a/sakura_core/doc/layout/CLayoutMgr_New.cpp b/sakura_core/doc/layout/CLayoutMgr_New.cpp index 1fdda4f477..203b7b4376 100644 --- a/sakura_core/doc/layout/CLayoutMgr_New.cpp +++ b/sakura_core/doc/layout/CLayoutMgr_New.cpp @@ -79,39 +79,6 @@ bool CLayoutMgr::IsKinsokuPosHead( CLayoutInt nRest, CLayoutInt nCharKetas, CLay return true; } return false; -#if 0 - switch( (Int)nRest ) - { - // 321012 ↓マジックナンバー - // 3 "る)" : 22 ")"の2バイト目で折り返しのとき - // 2 "Z)" : 12 ")"の2バイト目で折り返しのとき - // 2 "る)": 22 ")"で折り返しのとき - // 2 "る)" : 21 ")"で折り返しのとき - // 1 "Z)": 12 ")"で折り返しのとき - // 1 "Z)" : 11 ")"で折り返しのとき - //↑何文字前か? - // ※ただし、"るZ"部分が禁則なら処理しない。 - case 3: // 3文字前 - if( nCharKetas == 2 && nCharKetas2 == 2 ){ - return true; - } - break; - case 2: // 2文字前 - if( nCharKetas == 2 ){ - return true; - } - else if( nCharKetas == 1 && nCharKetas2 == 2 ){ - return true; - } - break; - case 1: // 1文字前 - if( nCharKetas == 1 ){ - return true; - } - break; - } - return false; -#endif } /*! @@ -133,34 +100,6 @@ bool CLayoutMgr::IsKinsokuPosTail( CLayoutInt nRest, CLayoutInt nCharKetas, CLay return true; } return false; -#if 0 - switch( (Int)nRest ) - { - case 3: // 3文字前 - if( nCharKetas == 2 && nCharKetas2 == 2){ - // "(あ": "あ"の2バイト目で折り返しのとき - return true; - } - break; - case 2: // 2文字前 - if( nCharKetas == 2 ){ - // "(あ": "あ"で折り返しのとき - return true; - } - else if( nCharKetas == 1 && nCharKetas2 == 2){ - // "(あ": "あ"の2バイト目で折り返しのとき - return true; - } - break; - case 1: // 1文字前 - if( nCharKetas == 1 ){ - // "(あ": "あ"で折り返しのとき - return true; - } - break; - } - return false; -#endif } /*! From cc6fe97b38f6bdd9a327887d93bf6e5419bbff36 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Wed, 17 Feb 2021 12:54:38 +0900 Subject: [PATCH 0444/1024] =?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E4=B8=AD=E3=81=AE=E8=AA=9E=E5=8F=A5=E3=82=92=E8=A8=82=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit カーソル位置という表現は正しくなかった。 --- sakura_core/doc/layout/CLayoutMgr_New.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sakura_core/doc/layout/CLayoutMgr_New.cpp b/sakura_core/doc/layout/CLayoutMgr_New.cpp index 203b7b4376..a0d6e8e472 100644 --- a/sakura_core/doc/layout/CLayoutMgr_New.cpp +++ b/sakura_core/doc/layout/CLayoutMgr_New.cpp @@ -64,8 +64,8 @@ bool CLayoutMgr::IsKinsokuKuto( wchar_t wc ) const 行頭禁則の処理位置であるか調べる @param[in] nRest 現在行における残り文字数分の字幅と間隔の合計 - @param[in] nCharKetas 現在のカーソル位置にある文字の幅と間隔 - @param[in] nCharKetas2 次のカーソル位置にある文字の幅と間隔 + @param[in] nCharKetas 現在の位置にある文字の幅と間隔 + @param[in] nCharKetas2 次の位置にある文字の幅と間隔 @return 処理が必要な位置である場合にtrue */ bool CLayoutMgr::IsKinsokuPosHead( CLayoutInt nRest, CLayoutInt nCharKetas, CLayoutInt nCharKetas2 ) const @@ -85,8 +85,8 @@ bool CLayoutMgr::IsKinsokuPosHead( CLayoutInt nRest, CLayoutInt nCharKetas, CLay 行末禁則の処理位置であるか調べる @param[in] nRest 現在行における残り文字数分の字幅と間隔の合計 - @param[in] nCharKetas 現在のカーソル位置にある文字の幅と間隔 - @param[in] nCharKetas2 次のカーソル位置にある文字の幅と間隔 + @param[in] nCharKetas 現在の位置にある文字の幅と間隔 + @param[in] nCharKetas2 次の位置にある文字の幅と間隔 @return 処理が必要な位置である場合にtrue */ bool CLayoutMgr::IsKinsokuPosTail( CLayoutInt nRest, CLayoutInt nCharKetas, CLayoutInt nCharKetas2 ) const @@ -106,7 +106,7 @@ bool CLayoutMgr::IsKinsokuPosTail( CLayoutInt nRest, CLayoutInt nCharKetas, CLay 句読点ぶら下げの処理位置であるか調べる @param[in] nRest 現在行における残り文字数分の字幅と間隔の合計 - @param[in] nCharChars 現在のカーソル位置にある文字の幅と間隔 + @param[in] nCharChars 現在の位置にある文字の幅と間隔 @return 処理が必要な位置である場合にtrue */ bool CLayoutMgr::IsKinsokuPosKuto( CLayoutInt nRest, CLayoutInt nCharChars ) const From eca18da3d97134d9292a206e8b58f2b38abaf954 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sat, 20 Feb 2021 09:12:33 +0900 Subject: [PATCH 0445/1024] =?UTF-8?q?=E5=87=A6=E7=90=86=E4=BD=8D=E7=BD=AE?= =?UTF-8?q?=E3=82=92=E5=88=A4=E5=AE=9A=E3=82=92=E3=83=A1=E3=83=B3=E3=83=90?= =?UTF-8?q?=E9=96=A2=E6=95=B0=E3=81=8B=E3=82=89=E9=9D=9E=E3=83=A1=E3=83=B3?= =?UTF-8?q?=E3=83=90=E3=81=AEstatic=E9=96=A2=E6=95=B0=E3=81=A7=E8=A1=8C?= =?UTF-8?q?=E3=81=86=E3=82=88=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/doc/layout/CLayoutMgr.h | 5 -- .../doc/layout/CLayoutMgr_DoLayout.cpp | 64 +++++++++++++++++-- sakura_core/doc/layout/CLayoutMgr_New.cpp | 54 ---------------- 3 files changed, 59 insertions(+), 64 deletions(-) diff --git a/sakura_core/doc/layout/CLayoutMgr.h b/sakura_core/doc/layout/CLayoutMgr.h index 4724ed9746..5fc6201624 100644 --- a/sakura_core/doc/layout/CLayoutMgr.h +++ b/sakura_core/doc/layout/CLayoutMgr.h @@ -348,11 +348,6 @@ class CLayoutMgr : public CProgressSubject bool IsKinsokuHead( wchar_t wc ) const; // 行頭禁則文字をチェックする bool IsKinsokuTail( wchar_t wc ) const; // 行末禁則文字をチェックする bool IsKinsokuKuto( wchar_t wc ) const; // 句読点文字をチェックする - // 2005-08-20 D.S.Koba 禁則関連処理の関数化 - bool IsKinsokuPosKuto( CLayoutInt nRest, CLayoutInt nCharChars ) const; // 句読点ぶら下げの処理位置か - bool IsKinsokuPosHead( CLayoutInt nRest, CLayoutInt nCharKetas, CLayoutInt nCharKetas2 ) const; // 行頭禁則の処理位置か - bool IsKinsokuPosTail( CLayoutInt nRest, CLayoutInt nCharKetas, CLayoutInt nCharKetas2 ) const; // 行末禁則の処理位置か -private: // Oct. 1, 2002 genta インデント幅計算関数群 CLayoutInt getIndentOffset_Normal( CLayout* pLayoutPrev ); CLayoutInt getIndentOffset_Tx2x( CLayout* pLayoutPrev ); diff --git a/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp b/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp index 945eaa6cf4..142e0ef018 100644 --- a/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp +++ b/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp @@ -45,6 +45,60 @@ static bool _GetKeywordLength( } } +/*! + @brief 行頭禁則の処理位置であるか調べる + + @param[in] nRest 現在行に挿入可能な文字の総幅 + @param[in] nCharKetas 現在の位置にある文字の幅 + @param[in] nCharKetas2 次の位置にある文字の幅 + @return 処理が必要な位置ならばtrue +*/ +static bool _IsKinsokuPosHead( CLayoutInt nRest, CLayoutInt nCharKetas, CLayoutInt nCharKetas2 ) +{ + if( nRest < nCharKetas ){ + // 次の文字で折り返しの場合 + return true; + } + if( nRest < nCharKetas + nCharKetas2 ){ + // 次の次の文字で折り返しの場合 + return true; + } + return false; +} + +/*! + @brief 行末禁則の処理位置であるか調べる + + @param[in] nRest 現在行に挿入可能な文字の総幅 + @param[in] nCharKetas 現在の位置にある文字の幅 + @param[in] nCharKetas2 次の位置にある文字の幅 + @return 処理が必要な位置ならばtrue +*/ +static bool _IsKinsokuPosTail( CLayoutInt nRest, CLayoutInt nCharKetas, CLayoutInt nCharKetas2 ) +{ + if( nRest < nCharKetas ){ + // 次の文字で折り返しの場合 + return true; + } + if( nRest < nCharKetas + nCharKetas2 ){ + // 次の次の文字で折り返しの場合 + return true; + } + return false; +} + +/*! + @brief 句読点ぶら下げの処理位置であるか調べる + + @param[in] nRest 現在行に挿入可能な文字の総幅 + @param[in] nCharChars 現在の位置にある文字の幅 + @return 処理が必要な位置ならばtrue +*/ +static bool _IsKinsokuPosKuto( CLayoutInt nRest, CLayoutInt nCharChars ) +{ + return nRest < nCharChars; +} + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 部品ステータス // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // @@ -119,13 +173,12 @@ void CLayoutMgr::_DoWordWrap(SLayoutWork* pWork, PF_OnLine pfOnLine) void CLayoutMgr::_DoKutoBurasage(SLayoutWork* pWork) { // 現在位置が行末付近で禁則処理の実行中でないこと - if( ( GetMaxLineLayout() - pWork->nPosX < 2 * GetWidthPerKeta() ) - && ( pWork->eKinsokuType == KINSOKU_TYPE_NONE ) ) + if( GetMaxLineLayout() - pWork->nPosX < 2 * GetWidthPerKeta() && pWork->eKinsokuType == KINSOKU_TYPE_NONE ) { // 2007.09.07 kobake レイアウトとロジックの区別 CLayoutInt nCharKetas = GetLayoutXOfChar( pWork->cLineStr, pWork->nPos ); - if( IsKinsokuPosKuto(GetMaxLineLayout() - pWork->nPosX, nCharKetas) && IsKinsokuKuto( pWork->cLineStr.At(pWork->nPos) ) ) + if( _IsKinsokuPosKuto( GetMaxLineLayout() - pWork->nPosX, nCharKetas ) && IsKinsokuKuto( pWork->cLineStr.At( pWork->nPos ) ) ) { pWork->nWordBgn = pWork->nPos; pWork->nWordLen = 1; @@ -146,7 +199,7 @@ void CLayoutMgr::_DoGyotoKinsoku(SLayoutWork* pWork, PF_OnLine pfOnLine) CLayoutInt nCharKetas2 = GetLayoutXOfChar( pWork->cLineStr, pWork->nPos ); CLayoutInt nCharKetas3 = GetLayoutXOfChar( pWork->cLineStr, pWork->nPos+1 ); - if( IsKinsokuPosHead( GetMaxLineLayout() - pWork->nPosX, nCharKetas2, nCharKetas3 ) + if( _IsKinsokuPosHead( GetMaxLineLayout() - pWork->nPosX, nCharKetas2, nCharKetas3 ) && IsKinsokuHead( pWork->cLineStr.At(pWork->nPos+1) ) && ! IsKinsokuHead( pWork->cLineStr.At(pWork->nPos) ) //1文字前が行頭禁則でない && ! IsKinsokuKuto( pWork->cLineStr.At(pWork->nPos) ) ) //句読点でない @@ -171,7 +224,8 @@ void CLayoutMgr::_DoGyomatsuKinsoku(SLayoutWork* pWork, PF_OnLine pfOnLine) CLayoutInt nCharKetas2 = GetLayoutXOfChar( pWork->cLineStr, pWork->nPos ); CLayoutInt nCharKetas3 = GetLayoutXOfChar( pWork->cLineStr, pWork->nPos+1 ); - if( IsKinsokuPosTail(GetMaxLineLayout() - pWork->nPosX, nCharKetas2, nCharKetas3) && IsKinsokuTail(pWork->cLineStr.At(pWork->nPos)) ){ + if( _IsKinsokuPosTail( GetMaxLineLayout() - pWork->nPosX, nCharKetas2, nCharKetas3 ) && IsKinsokuTail( pWork->cLineStr.At( pWork->nPos ) ) ) + { pWork->nWordBgn = pWork->nPos; pWork->nWordLen = 1; pWork->eKinsokuType = KINSOKU_TYPE_KINSOKU_TAIL; diff --git a/sakura_core/doc/layout/CLayoutMgr_New.cpp b/sakura_core/doc/layout/CLayoutMgr_New.cpp index a0d6e8e472..d684699589 100644 --- a/sakura_core/doc/layout/CLayoutMgr_New.cpp +++ b/sakura_core/doc/layout/CLayoutMgr_New.cpp @@ -60,60 +60,6 @@ bool CLayoutMgr::IsKinsokuKuto( wchar_t wc ) const return m_pszKinsokuKuto_1.exist(wc); } -/*! - 行頭禁則の処理位置であるか調べる - - @param[in] nRest 現在行における残り文字数分の字幅と間隔の合計 - @param[in] nCharKetas 現在の位置にある文字の幅と間隔 - @param[in] nCharKetas2 次の位置にある文字の幅と間隔 - @return 処理が必要な位置である場合にtrue -*/ -bool CLayoutMgr::IsKinsokuPosHead( CLayoutInt nRest, CLayoutInt nCharKetas, CLayoutInt nCharKetas2 ) const -{ - if( nRest < nCharKetas ){ - // 次の文字で折り返しの場合 - return true; - } - if( nRest < nCharKetas + nCharKetas2 ){ - // 次の次の文字で折り返しの場合 - return true; - } - return false; -} - -/*! - 行末禁則の処理位置であるか調べる - - @param[in] nRest 現在行における残り文字数分の字幅と間隔の合計 - @param[in] nCharKetas 現在の位置にある文字の幅と間隔 - @param[in] nCharKetas2 次の位置にある文字の幅と間隔 - @return 処理が必要な位置である場合にtrue -*/ -bool CLayoutMgr::IsKinsokuPosTail( CLayoutInt nRest, CLayoutInt nCharKetas, CLayoutInt nCharKetas2 ) const -{ - if( nRest < nCharKetas ){ - // 次の文字で折り返しの場合 - return true; - } - if( nRest < nCharKetas + nCharKetas2 ){ - // 次の次の文字で折り返しの場合 - return true; - } - return false; -} - -/*! - 句読点ぶら下げの処理位置であるか調べる - - @param[in] nRest 現在行における残り文字数分の字幅と間隔の合計 - @param[in] nCharChars 現在の位置にある文字の幅と間隔 - @return 処理が必要な位置である場合にtrue -*/ -bool CLayoutMgr::IsKinsokuPosKuto( CLayoutInt nRest, CLayoutInt nCharChars ) const -{ - return nRest < nCharChars; -} - /*! @brief 行の長さを計算する (2行目以降の字下げ無し) From e9aa765bff0021d5af8f24b27153e93b6380fa53 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sat, 20 Feb 2021 09:15:55 +0900 Subject: [PATCH 0446/1024] =?UTF-8?q?=E5=88=A4=E5=AE=9A=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E3=82=921=E3=81=A4=E3=81=AB=E3=81=BE=E3=81=A8=E3=82=81?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../doc/layout/CLayoutMgr_DoLayout.cpp | 20 ++----------------- 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp b/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp index 142e0ef018..413576c45e 100644 --- a/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp +++ b/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp @@ -55,15 +55,7 @@ static bool _GetKeywordLength( */ static bool _IsKinsokuPosHead( CLayoutInt nRest, CLayoutInt nCharKetas, CLayoutInt nCharKetas2 ) { - if( nRest < nCharKetas ){ - // 次の文字で折り返しの場合 - return true; - } - if( nRest < nCharKetas + nCharKetas2 ){ - // 次の次の文字で折り返しの場合 - return true; - } - return false; + return nRest < nCharKetas + nCharKetas2; } /*! @@ -76,15 +68,7 @@ static bool _IsKinsokuPosHead( CLayoutInt nRest, CLayoutInt nCharKetas, CLayoutI */ static bool _IsKinsokuPosTail( CLayoutInt nRest, CLayoutInt nCharKetas, CLayoutInt nCharKetas2 ) { - if( nRest < nCharKetas ){ - // 次の文字で折り返しの場合 - return true; - } - if( nRest < nCharKetas + nCharKetas2 ){ - // 次の次の文字で折り返しの場合 - return true; - } - return false; + return nRest < nCharKetas + nCharKetas2; } /*! From bfaddf287b426e14c916c2b4d518f50f1bb0b664 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sun, 21 Feb 2021 12:31:15 +0900 Subject: [PATCH 0447/1024] =?UTF-8?q?=E8=A1=8C=E9=A0=AD=E7=A6=81=E5=89=87?= =?UTF-8?q?=E5=87=A6=E7=90=86=E3=81=AB=E3=81=8A=E3=81=91=E3=82=8B=E3=82=B5?= =?UTF-8?q?=E3=83=AD=E3=82=B2=E3=83=BC=E3=83=88=E3=83=9A=E3=82=A2=E5=AF=BE?= =?UTF-8?q?=E7=AD=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit サロゲートペアは上位側のみ読み取るようにして、折り返し行を描画したときにペアが壊れるのを防ぐ。 --- sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp b/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp index 413576c45e..9604afbdc3 100644 --- a/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp +++ b/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp @@ -182,14 +182,22 @@ void CLayoutMgr::_DoGyotoKinsoku(SLayoutWork* pWork, PF_OnLine pfOnLine) // 2007.09.07 kobake レイアウトとロジックの区別 CLayoutInt nCharKetas2 = GetLayoutXOfChar( pWork->cLineStr, pWork->nPos ); CLayoutInt nCharKetas3 = GetLayoutXOfChar( pWork->cLineStr, pWork->nPos+1 ); + bool bLowSurrogate = false; + + if( nCharKetas3 == 0 ) + { + // サロゲートペア対策(取得した文字幅が0だったら下位側を読み取ったと判断し、次の位置に進ませる) + bLowSurrogate = true; + nCharKetas3 = GetLayoutXOfChar( pWork->cLineStr, pWork->nPos + 2 ); + } if( _IsKinsokuPosHead( GetMaxLineLayout() - pWork->nPosX, nCharKetas2, nCharKetas3 ) - && IsKinsokuHead( pWork->cLineStr.At(pWork->nPos+1) ) - && ! IsKinsokuHead( pWork->cLineStr.At(pWork->nPos) ) //1文字前が行頭禁則でない - && ! IsKinsokuKuto( pWork->cLineStr.At(pWork->nPos) ) ) //句読点でない + && IsKinsokuHead( pWork->cLineStr.At( pWork->nPos + ( bLowSurrogate ? 2 : 1 ) ) ) + && !IsKinsokuHead( pWork->cLineStr.At( pWork->nPos ) ) // 1字前が行頭禁則の対象でないこと + && !IsKinsokuKuto( pWork->cLineStr.At( pWork->nPos ) ) ) // 1字前が句読点ぶら下げの対象でないこと { pWork->nWordBgn = pWork->nPos; - pWork->nWordLen = 2; + pWork->nWordLen = ( bLowSurrogate ? 3 : 2 ); pWork->eKinsokuType = KINSOKU_TYPE_KINSOKU_HEAD; (this->*pfOnLine)(pWork); From 979255110521144cad1ac68ccb6ffe779e35a831 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 21 Feb 2021 15:09:15 +0900 Subject: [PATCH 0448/1024] =?UTF-8?q?CProfile=E3=82=92=E6=8B=A1=E5=BC=B5?= =?UTF-8?q?=E3=81=97=E3=81=A6=E3=83=86=E3=82=B9=E3=83=88=E3=81=AB=E5=88=A9?= =?UTF-8?q?=E7=94=A8=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CDataProfile.h | 22 ++--- sakura_core/CProfile.cpp | 77 +++++++---------- sakura_core/CProfile.h | 11 ++- tests/unittests/test-cdlgprofilemgr.cpp | 44 ++++++---- tests/unittests/test-cprofile.cpp | 108 ++++++++++++++++++++++++ tests/unittests/test-file.cpp | 35 +++----- 6 files changed, 193 insertions(+), 104 deletions(-) diff --git a/sakura_core/CDataProfile.h b/sakura_core/CDataProfile.h index 85c7e1be04..e8ca795761 100644 --- a/sakura_core/CDataProfile.h +++ b/sakura_core/CDataProfile.h @@ -26,6 +26,8 @@ #define SAKURA_CDATAPROFILE_401640FD_5B27_454A_B0DE_098E1C4FAEAD_H_ #pragma once +#include "basis/SakuraBasis.h" +#include "debug/Debug2.h" #include "util/StaticType.h" #include "CProfile.h" @@ -166,8 +168,8 @@ class CDataProfile : public CProfile{ */ template //T=={bool, int, WORD, wchar_t, char, StringBufferW, StaticString} bool IOProfileData( - const std::wstring& strSectionName, //!< [in] セクション名 - const std::wstring& strEntryKey, //!< [in] エントリ名 + std::wstring_view sectionName, //!< [in] セクション名 + std::wstring_view entryKey, //!< [in] エントリ名 T& tEntryValue //!< [in,out] エントリ値 ) noexcept { @@ -177,7 +179,7 @@ class CDataProfile : public CProfile{ bool ret = false; if( IsReadingMode() ){ //文字列読み込み - if( GetProfileDataImp( strSectionName, strEntryKey, buf ) ){ + if( GetProfileData(sectionName, entryKey, buf) ){ //Tに変換 profile_to_value(buf, &tEntryValue); ret = true; @@ -185,8 +187,9 @@ class CDataProfile : public CProfile{ }else{ //文字列に変換 value_to_profile(tEntryValue, &buf); + ret = true; //TODO: 変換成否の反映 //文字列書き込み - ret = SetProfileDataImp( strSectionName, strEntryKey, buf ); + SetProfileData(sectionName, entryKey, buf); } return ret; } @@ -208,19 +211,18 @@ class CDataProfile : public CProfile{ */ template <> inline bool CDataProfile::IOProfileData( - const std::wstring& strSectionName, //!< [in] セクション名 - const std::wstring& strEntryKey, //!< [in] エントリ名 + std::wstring_view sectionName, //!< [in] セクション名 + std::wstring_view entryKey, //!< [in] エントリ名 std::wstring& strEntryValue //!< [in,out] エントリ値 ) noexcept { - bool ret = false; if( IsReadingMode() ){ //文字列読み込み - ret = GetProfileDataImp( strSectionName, strEntryKey, strEntryValue ); + return GetProfileData(sectionName, entryKey, strEntryValue); }else{ //文字列書き込み - ret = SetProfileDataImp( strSectionName, strEntryKey, strEntryValue ); + SetProfileData(sectionName, entryKey, strEntryValue); + return true; } - return ret; } #endif /* SAKURA_CDATAPROFILE_401640FD_5B27_454A_B0DE_098E1C4FAEAD_H_ */ diff --git a/sakura_core/CProfile.cpp b/sakura_core/CProfile.cpp index 09d3bcc2ee..9e4fe37e1a 100644 --- a/sakura_core/CProfile.cpp +++ b/sakura_core/CProfile.cpp @@ -35,6 +35,13 @@ */ #include "StdAfx.h" #include "CProfile.h" + +#include +#include +#include +#include +#include + #include "io/CTextStream.h" #include "charset/CUtf8.h" // Resource読み込みに使用 #include "CEol.h" @@ -313,10 +320,6 @@ bool CProfile::_WriteFile( return true; } -// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -// Imp // -// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // - /*! エントリ値をProfileから読み込む @retval true 成功 @@ -324,19 +327,19 @@ bool CProfile::_WriteFile( @date 2003-10-22 D.S.Koba 作成 */ -bool CProfile::GetProfileDataImp( - const wstring& strSectionName, //!< [in] セクション名 - const wstring& strEntryKey, //!< [in] エントリ名 - wstring& strEntryValue //!< [out] エントリ値 -) +bool CProfile::GetProfileData( + std::wstring_view sectionName, //!< [in] セクション名 + std::wstring_view entryKey, //!< [in] エントリ名 + std::wstring& strEntryValue //!< [out] エントリ値 +) const { - for(auto iter = m_ProfileData.begin(); iter != m_ProfileData.end(); iter++ ) { - if( iter->strSectionName == strSectionName ) { - auto mapiter = iter->mapEntries.find( strEntryKey ); - if( iter->mapEntries.end() != mapiter ) { - strEntryValue = mapiter->second; - return true; - } + // セクション名が一致するセクションを探す + if (const auto iter = std::find_if(m_ProfileData.begin(), m_ProfileData.end(), [§ionName](const auto& section) {return section.strSectionName == sectionName; }); iter != m_ProfileData.end()) { + // キーが一致するエントリを探す + if (const auto mapiter = iter->mapEntries.find(entryKey.data()); iter->mapEntries.end() != mapiter) { + // エントリの値をコピーする + strEntryValue = mapiter->second; + return true; } } return false; @@ -344,42 +347,24 @@ bool CProfile::GetProfileDataImp( /*! エントリをProfileへ書き込む - @retval true 成功 - @retval false 失敗(処理を入れていないのでfalseは返らない) - @date 2003-10-21 D.S.Koba 作成 */ -bool CProfile::SetProfileDataImp( - const wstring& strSectionName, //!< [in] セクション名 - const wstring& strEntryKey, //!< [in] エントリ名 - const wstring& strEntryValue //!< [in] エントリ値 +void CProfile::SetProfileData( + std::wstring_view sectionName, //!< [in] セクション名 + std::wstring_view entryKey, //!< [in] エントリ名 + std::wstring_view entryValue //!< [in] エントリ値 ) { - auto iter = m_ProfileData.begin(); - for(; iter != m_ProfileData.end(); iter++ ) { - if( iter->strSectionName == strSectionName ) { - //既存のセクションの場合 - auto mapiter = iter->mapEntries.find( strEntryKey ); - if( iter->mapEntries.end() != mapiter ) { - //既存のエントリの場合は値を上書き - mapiter->second = strEntryValue; - break; - } - else { - //既存のエントリが見つからない場合は追加 - iter->mapEntries.insert( PAIR_STR_STR( strEntryKey, strEntryValue ) ); - break; - } - } + // セクション名が一致するセクションがない場合、空のセクションを追加する + if (const auto iter = std::find_if(m_ProfileData.begin(), m_ProfileData.end(), [§ionName](const auto& section) {return section.strSectionName == sectionName; }); iter == m_ProfileData.end()) { + m_ProfileData.emplace_back(Section{ sectionName.data() }); } - //既存のセクションではない場合,セクション及びエントリを追加 - if( iter == m_ProfileData.end() ) { - Section Buffer; - Buffer.strSectionName = strSectionName; - Buffer.mapEntries.insert( PAIR_STR_STR( strEntryKey, strEntryValue ) ); - m_ProfileData.push_back( Buffer ); + // セクション名が一致するセクションを探す + if (auto iter = std::find_if(m_ProfileData.begin(), m_ProfileData.end(), [§ionName](const auto& section) {return section.strSectionName == sectionName; }); iter != m_ProfileData.end()) { + // エントリに指定された値を書き込む + auto& sectionEntries = iter->mapEntries; + sectionEntries[entryKey.data()] = entryValue; } - return true; } void CProfile::DUMP( void ) diff --git a/sakura_core/CProfile.h b/sakura_core/CProfile.h index d1e2d412a9..79c8f145ce 100644 --- a/sakura_core/CProfile.h +++ b/sakura_core/CProfile.h @@ -37,6 +37,7 @@ #include #include +#include #include #include @@ -61,8 +62,8 @@ class CProfile }; public: - CProfile() {} - ~CProfile() {} + CProfile() = default; + virtual ~CProfile() = default; void Init( void ); bool IsReadingMode( void ) { return m_bRead; } void SetReadingMode( void ) { m_bRead = true; } @@ -70,6 +71,8 @@ class CProfile bool ReadProfile( const WCHAR* ); bool ReadProfileRes( const WCHAR*, const WCHAR*, std::vector* = NULL ); // 200/5/19 Uchi bool WriteProfile( const WCHAR*, const WCHAR* pszComment); + bool GetProfileData(std::wstring_view sectionName, std::wstring_view entryKey, std::wstring& strEntryValue) const; + void SetProfileData(std::wstring_view sectionName, std::wstring_view entryKey, std::wstring_view entryValue); void DUMP( void ); @@ -77,10 +80,6 @@ class CProfile void ReadOneline( const wstring& line ); bool _WriteFile( const wstring& strFilename, const std::vector< wstring >& vecLine); - bool GetProfileDataImp( const wstring& strSectionName, const wstring& strEntryKey, wstring& strEntryValue); - - bool SetProfileDataImp( const wstring& strSectionName, const wstring& strEntryKey, const wstring& strEntryValue ); - protected: // メンバ変数 wstring m_strProfileName; //!< 最後に読み書きしたファイル名 diff --git a/tests/unittests/test-cdlgprofilemgr.cpp b/tests/unittests/test-cdlgprofilemgr.cpp index 30e657d628..209cecb64f 100644 --- a/tests/unittests/test-cdlgprofilemgr.cpp +++ b/tests/unittests/test-cdlgprofilemgr.cpp @@ -48,6 +48,7 @@ #include "env/DLLSHAREDATA.h" #include "_main/CCommandLine.h" #include "_main/CControlProcess.h" +#include "CDataProfile.h" #include "util/file.h" /*! @@ -132,12 +133,16 @@ TEST_F( CDlgProfileMgrTest, TrySelectProfile_003 ) TEST_F( CDlgProfileMgrTest, TrySelectProfile_004 ) { // プロファイル設定を作る - SProfileSettings settings; - settings.m_szDllLanguage[0] = L'\0'; - settings.m_nDefaultIndex = 3; - settings.m_vProfList = { L"保存用", L"鑑賞用", L"使用用" }; - settings.m_bDefaultSelect = true; - CDlgProfileMgr::WriteProfSettings( settings ); + CDataProfile cProfile; + cProfile.SetWritingMode(); + cProfile.SetProfileData(L"Profile", L"szDllLanguage", L""); + cProfile.SetProfileData(L"Profile", L"nDefaultIndex", L"3"); + cProfile.SetProfileData(L"Profile", L"nCount", L"3"); + cProfile.SetProfileData(L"Profile", L"P[1]", L"保存用"); + cProfile.SetProfileData(L"Profile", L"P[2]", L"鑑賞用"); + cProfile.SetProfileData(L"Profile", L"P[3]", L"使用用"); + cProfile.SetProfileData(L"Profile", L"bDefaultSelect", L"1"); + cProfile.WriteProfile(profileMgrIniPath.c_str(), L"Sakura Profile ini"); // プロファイルマネージャー設定にデフォルト定義があればプロファイルは確定する CCommandLineWrapper cCommandLine; @@ -150,12 +155,16 @@ TEST_F( CDlgProfileMgrTest, TrySelectProfile_004 ) TEST_F( CDlgProfileMgrTest, TrySelectProfile_005 ) { // プロファイル設定を作る - SProfileSettings settings; - settings.m_szDllLanguage[0] = L'\0'; - settings.m_nDefaultIndex = 4; - settings.m_vProfList = { L"保存用", L"鑑賞用", L"使用用" }; - settings.m_bDefaultSelect = true; - CDlgProfileMgr::WriteProfSettings( settings ); + CDataProfile cProfile; + cProfile.SetWritingMode(); + cProfile.SetProfileData(L"Profile", L"szDllLanguage", L""); + cProfile.SetProfileData(L"Profile", L"nDefaultIndex", L"4"); + cProfile.SetProfileData(L"Profile", L"nCount", L"3"); + cProfile.SetProfileData(L"Profile", L"P[1]", L"保存用"); + cProfile.SetProfileData(L"Profile", L"P[2]", L"鑑賞用"); + cProfile.SetProfileData(L"Profile", L"P[3]", L"使用用"); + cProfile.SetProfileData(L"Profile", L"bDefaultSelect", L"1"); + cProfile.WriteProfile(profileMgrIniPath.c_str(), L"Sakura Profile ini"); // プロファイルマネージャー設定のデフォルト定義がおかしればプロファイルは確定しない CCommandLineWrapper cCommandLine; @@ -168,11 +177,12 @@ TEST_F( CDlgProfileMgrTest, TrySelectProfile_005 ) TEST_F( CDlgProfileMgrTest, TrySelectProfile_006 ) { // 空のプロファイル設定を作る - SProfileSettings settings; - settings.m_szDllLanguage[0] = L'\0'; - settings.m_nDefaultIndex = -1; - settings.m_bDefaultSelect = false; - CDlgProfileMgr::WriteProfSettings( settings ); + CDataProfile cProfile; + cProfile.SetWritingMode(); + cProfile.SetProfileData(L"Profile", L"szDllLanguage", L""); + cProfile.SetProfileData(L"Profile", L"nDefaultIndex", L"-1"); + cProfile.SetProfileData(L"Profile", L"bDefaultSelect", L"0"); + cProfile.WriteProfile(profileMgrIniPath.c_str(), L"Sakura Profile ini"); // プロファイルマネージャー設定が空定義ならプロファイルは確定しない CCommandLineWrapper cCommandLine; diff --git a/tests/unittests/test-cprofile.cpp b/tests/unittests/test-cprofile.cpp index 20b1dfdb6b..499656077a 100644 --- a/tests/unittests/test-cprofile.cpp +++ b/tests/unittests/test-cprofile.cpp @@ -38,6 +38,7 @@ #include #include "util/file.h" +#include "CDataProfile.h" /*! * @brief WriteProfileは指定されたパスに含まれるサブディレクトリを作成する @@ -69,3 +70,110 @@ TEST( CProfile, WriteProfileMakesSubDirectories ) p[0] = L'\0'; std::filesystem::remove( szIniName ); } + +/*! + * @brief GetProfileDataのテスト + */ +TEST(CProfile, GetProfileData_NoSection) +{ + CProfile cProfile; + cProfile.SetReadingMode(); + + // 初期状態は空なのでセクションが見つからない + std::wstring value; + ASSERT_FALSE(cProfile.GetProfileData(L"存在しないセクション名", L"szTest", value)); +} + +/*! + * @brief GetProfileDataのテスト + */ +TEST(CProfile, GetProfileData_NewSection) +{ + CProfile cProfile; + cProfile.SetReadingMode(); + + std::wstring value; + ASSERT_FALSE(cProfile.GetProfileData(L"Test", L"szTest", value)); + + // セクションを追加 + cProfile.SetProfileData(L"Test", L"szTest", L"value"); + + // 追加されたセクションを取得 + ASSERT_TRUE(cProfile.GetProfileData(L"Test", L"szTest", value)); + ASSERT_STREQ(L"value", value.data()); +} + +/*! + * @brief GetProfileDataのテスト + */ +TEST(CProfile, GetProfileData_NoEntry) +{ + CProfile cProfile; + cProfile.SetReadingMode(); + + std::wstring value; + ASSERT_FALSE(cProfile.GetProfileData(L"Test", L"szTest", value)); + + cProfile.SetProfileData(L"Test", L"szTest", L"value"); + + ASSERT_TRUE(cProfile.GetProfileData(L"Test", L"szTest", value)); + ASSERT_STREQ(L"value", value.data()); + + // 該当するキーがないのでエントリを取得できない + ASSERT_FALSE(cProfile.GetProfileData(L"Test", L"nTest", value)); +} + +/*! + * @brief GetProfileDataのテスト + */ +TEST(CProfile, GetProfileData_NewEntry) +{ + CProfile cProfile; + cProfile.SetReadingMode(); + + std::wstring value; + ASSERT_FALSE(cProfile.GetProfileData(L"Test", L"szTest", value)); + + cProfile.SetProfileData(L"Test", L"szTest", L"value"); + + ASSERT_TRUE(cProfile.GetProfileData(L"Test", L"szTest", value)); + ASSERT_STREQ(L"value", value.data()); + + ASSERT_FALSE(cProfile.GetProfileData(L"Test", L"nTest", value)); + + cProfile.SetProfileData(L"Test", L"nTest", L"109"); + + ASSERT_TRUE(cProfile.GetProfileData(L"Test", L"nTest", value)); + ASSERT_STREQ(L"109", value.data()); +} + +/*! + * @brief IOProfileDataのテスト + */ +TEST(CDataProfile, IOProfileData) +{ + CDataProfile cProfile; + cProfile.SetReadingMode(); + + std::wstring value; + ASSERT_FALSE(cProfile.IOProfileData(L"Test", L"szTest", value)); + + cProfile.SetProfileData(L"Test", L"szTest", L"value"); + + ASSERT_TRUE(cProfile.IOProfileData(L"Test", L"szTest", value)); + ASSERT_STREQ(L"value", value.data()); + + ASSERT_FALSE(cProfile.IOProfileData(L"Test", L"nTest", value)); + + cProfile.SetProfileData(L"Test", L"nTest", L"109"); + + ASSERT_TRUE(cProfile.IOProfileData(L"Test", L"nTest", value)); + ASSERT_STREQ(L"109", value.data()); + + int nValue = 0; + ASSERT_TRUE(cProfile.IOProfileData(L"Test", L"nTest", nValue)); + ASSERT_EQ(109, nValue); + + ASSERT_TRUE(cProfile.IOProfileData(L"Test", L"szTest", nValue)); + ASSERT_EQ(0, nValue); +} diff --git a/tests/unittests/test-file.cpp b/tests/unittests/test-file.cpp index 2710850db6..81f37b42c5 100644 --- a/tests/unittests/test-file.cpp +++ b/tests/unittests/test-file.cpp @@ -43,6 +43,7 @@ #include "env/DLLSHAREDATA.h" #include "_main/CCommandLine.h" #include "_main/CControlProcess.h" +#include "CDataProfile.h" #include "util/file.h" /*! @@ -387,18 +388,10 @@ TEST(file, GetInidirOrExedir) auto iniBasePath = GetIniFileName().parent_path().append(filename); // EXE基準のファイルを作る - { - std::wofstream ofs(exeBasePath); - ofs << L"TEST(file, GetInidirOrExedir)" << std::endl; - } + CProfile().WriteProfile(exeBasePath.c_str(), L"file, GetInidirOrExedirのテスト"); // INI基準のファイルを作る - { - EnsureDirectoryExist(GetIniFileName().replace_filename(L"").c_str()); - - std::wofstream ofs(iniBasePath); - ofs << L"TEST(file, GetInidirOrExedir)" << std::endl; - } + CProfile().WriteProfile(iniBasePath.c_str(), L"file, GetInidirOrExedirのテスト"); // 両方あるときはINI基準のパスが変える GetInidirOrExedir(buf.data(), filename, true); @@ -440,21 +433,13 @@ TEST(file, GetIniFileNameForIO) ASSERT_STREQ(iniPath.c_str(), GetIniFileNameForIO(false).c_str()); // 書き込みモードでないがiniファイルが実在するとき - { - std::wofstream ofs(iniPath); - ofs << L"test" << std::endl; - ofs.close(); - - // 実在チェック - ASSERT_TRUE(fexist(iniPath.c_str())); - - // テスト実施 - ASSERT_STREQ(iniPath.c_str(), GetIniFileNameForIO(false).c_str()); + CProfile().WriteProfile(iniPath.c_str(), L"file, GetIniFileNameForIOのテスト"); + ASSERT_TRUE(fexist(iniPath.c_str())); - // INIファイルを削除する - std::filesystem::remove(iniPath); + // テスト実施 + ASSERT_STREQ(iniPath.c_str(), GetIniFileNameForIO(false).c_str()); - // 削除チェック - ASSERT_FALSE(fexist(iniPath.c_str())); - } + // INIファイルを削除する + std::filesystem::remove(iniPath); + ASSERT_FALSE(fexist(iniPath.c_str())); } From 0cb59f2f5e6709342db3d26a9ced72b1679a70fb Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sun, 21 Feb 2021 15:54:40 +0900 Subject: [PATCH 0449/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. static関数に対してnodiscard属性を追加 2. レイアウト処理の補助関数で関数ポインタを引数に取らないものにconst修飾子を追加 --- sakura_core/doc/layout/CLayoutMgr.h | 2 +- sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sakura_core/doc/layout/CLayoutMgr.h b/sakura_core/doc/layout/CLayoutMgr.h index 5fc6201624..8993ff0a06 100644 --- a/sakura_core/doc/layout/CLayoutMgr.h +++ b/sakura_core/doc/layout/CLayoutMgr.h @@ -334,7 +334,7 @@ class CLayoutMgr : public CProgressSubject //DoLayout用 bool _DoKinsokuSkip(SLayoutWork* pWork, PF_OnLine pfOnLine); void _DoWordWrap(SLayoutWork* pWork, PF_OnLine pfOnLine); - void _DoKutoBurasage(SLayoutWork* pWork); + void _DoKutoBurasage(SLayoutWork* pWork) const; void _DoGyotoKinsoku(SLayoutWork* pWork, PF_OnLine pfOnLine); void _DoGyomatsuKinsoku(SLayoutWork* pWork, PF_OnLine pfOnLine); bool _DoTab(SLayoutWork* pWork, PF_OnLine pfOnLine); diff --git a/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp b/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp index 9604afbdc3..63b937e85d 100644 --- a/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp +++ b/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp @@ -53,7 +53,7 @@ static bool _GetKeywordLength( @param[in] nCharKetas2 次の位置にある文字の幅 @return 処理が必要な位置ならばtrue */ -static bool _IsKinsokuPosHead( CLayoutInt nRest, CLayoutInt nCharKetas, CLayoutInt nCharKetas2 ) +[[nodiscard]] static bool _IsKinsokuPosHead( CLayoutInt nRest, CLayoutInt nCharKetas, CLayoutInt nCharKetas2 ) { return nRest < nCharKetas + nCharKetas2; } @@ -66,7 +66,7 @@ static bool _IsKinsokuPosHead( CLayoutInt nRest, CLayoutInt nCharKetas, CLayoutI @param[in] nCharKetas2 次の位置にある文字の幅 @return 処理が必要な位置ならばtrue */ -static bool _IsKinsokuPosTail( CLayoutInt nRest, CLayoutInt nCharKetas, CLayoutInt nCharKetas2 ) +[[nodiscard]] static bool _IsKinsokuPosTail( CLayoutInt nRest, CLayoutInt nCharKetas, CLayoutInt nCharKetas2 ) { return nRest < nCharKetas + nCharKetas2; } @@ -78,7 +78,7 @@ static bool _IsKinsokuPosTail( CLayoutInt nRest, CLayoutInt nCharKetas, CLayoutI @param[in] nCharChars 現在の位置にある文字の幅 @return 処理が必要な位置ならばtrue */ -static bool _IsKinsokuPosKuto( CLayoutInt nRest, CLayoutInt nCharChars ) +[[nodiscard]] static bool _IsKinsokuPosKuto( CLayoutInt nRest, CLayoutInt nCharChars ) { return nRest < nCharChars; } @@ -154,7 +154,7 @@ void CLayoutMgr::_DoWordWrap(SLayoutWork* pWork, PF_OnLine pfOnLine) } } -void CLayoutMgr::_DoKutoBurasage(SLayoutWork* pWork) +void CLayoutMgr::_DoKutoBurasage(SLayoutWork* pWork) const { // 現在位置が行末付近で禁則処理の実行中でないこと if( GetMaxLineLayout() - pWork->nPosX < 2 * GetWidthPerKeta() && pWork->eKinsokuType == KINSOKU_TYPE_NONE ) From 411885403c8af719565ac9c19a075faf1142929e Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sun, 21 Feb 2021 16:07:48 +0900 Subject: [PATCH 0450/1024] =?UTF-8?q?=E3=82=B5=E3=83=AD=E3=82=B2=E3=83=BC?= =?UTF-8?q?=E3=83=88=E3=83=9A=E3=82=A2=E5=AF=BE=E7=AD=96=EF=BC=88=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 下位サロゲートを読み飛ばす時は境界チェックもやり直す。 --- sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp b/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp index 63b937e85d..4ec62ce067 100644 --- a/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp +++ b/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp @@ -184,7 +184,7 @@ void CLayoutMgr::_DoGyotoKinsoku(SLayoutWork* pWork, PF_OnLine pfOnLine) CLayoutInt nCharKetas3 = GetLayoutXOfChar( pWork->cLineStr, pWork->nPos+1 ); bool bLowSurrogate = false; - if( nCharKetas3 == 0 ) + if( nCharKetas3 == 0 && pWork->nPos + 2 < pWork->cLineStr.GetLength() ) { // サロゲートペア対策(取得した文字幅が0だったら下位側を読み取ったと判断し、次の位置に進ませる) bLowSurrogate = true; From 0eb971492c317130b6afb818b0d7e83b241b32d2 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sun, 21 Feb 2021 22:45:20 +0900 Subject: [PATCH 0451/1024] =?UTF-8?q?CTextMetrics=20=E3=82=B3=E3=83=BC?= =?UTF-8?q?=E3=83=89=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/debug/Debug1.h | 1 + sakura_core/view/CTextMetrics.cpp | 201 ++++++-------------------- sakura_core/view/CTextMetrics.h | 64 +++----- tests/unittests/test-ctextmetrics.cpp | 1 - 4 files changed, 72 insertions(+), 195 deletions(-) diff --git a/sakura_core/debug/Debug1.h b/sakura_core/debug/Debug1.h index d284207fb4..8c13555a2f 100644 --- a/sakura_core/debug/Debug1.h +++ b/sakura_core/debug/Debug1.h @@ -19,6 +19,7 @@ #include #include +#include // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // メッセージ出力:実装 // diff --git a/sakura_core/view/CTextMetrics.cpp b/sakura_core/view/CTextMetrics.cpp index 2f9e14c36f..aceab5013f 100644 --- a/sakura_core/view/CTextMetrics.cpp +++ b/sakura_core/view/CTextMetrics.cpp @@ -23,34 +23,15 @@ distribution. */ #include "StdAfx.h" +#include #include #include "CTextMetrics.h" #include "charset/codechecker.h" -using namespace std; - -// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -// コンストラクタ・デストラクタ // -// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // - -CTextMetrics::CTextMetrics() -{ - //$ 適当な仮値で初期化。実際には使う側でSet~を呼ぶので、これらの仮値が参照されることは無い。 - SetHankakuWidth(10); - SetHankakuHeight(18); - SetHankakuDx(12); - SetHankakuDy(24); -} - -CTextMetrics::~CTextMetrics() -{ -} - void CTextMetrics::CopyTextMetricsStatus(CTextMetrics* pDst) const { - pDst->SetHankakuWidth (GetHankakuWidth()); /* 半角文字の幅 */ - pDst->SetHankakuHeight (GetHankakuHeight()); /* 文字の高さ */ - pDst->m_aFontHeightMargin = m_aFontHeightMargin; + pDst->m_nCharWidth = m_nCharWidth; /* 半角文字の幅 */ + pDst->m_nCharHeight = m_nCharHeight; /* 文字の高さ */ } /* @@ -61,85 +42,26 @@ void CTextMetrics::CopyTextMetricsStatus(CTextMetrics* pDst) const */ void CTextMetrics::Update(HDC hdc, HFONT hFont, int nLineSpace, int nColmSpace) { - int size = 1; //暫定 - HFONT hFontArray[1] = { hFont }; - - this->SetHankakuHeight(1); - this->SetHankakuWidth(1); - int tmAscent[1]; - int tmAscentMaxHeight; - m_aFontHeightMargin.resize(size); - for( int i = 0; i < size; i++ ){ - HFONT hFontOld = (HFONT)::SelectObject( hdc, hFontArray[i] ); - SIZE sz; - // CCharWidthCache::m_han_size と一致していなければならない - { - // KB145994 - // tmAveCharWidth は不正確(半角か全角なのかも不明な値を返す) - // ただしこのコードはカーニングの影響を受ける - GetTextExtentPoint32(hdc, L"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", 52, &sz); - sz.cx = (sz.cx / 26 + 1) / 2; - } - TEXTMETRIC tm; - GetTextMetrics(hdc, &tm); - if( GetHankakuHeight() < sz.cy ){ - SetHankakuHeight(sz.cy); - tmAscentMaxHeight = tm.tmAscent; - } - if( i == 0 && GetHankakuWidth() < sz.cx ){ - SetHankakuWidth(sz.cx); - } - tmAscent[i] = tm.tmAscent; - ::SelectObject( hdc, hFontOld ); - } - int minMargin = 0; - for(int i = 0; i < size; i++){ - if( tmAscentMaxHeight - tmAscent[i] < minMargin ){ - minMargin = tmAscentMaxHeight - tmAscent[i]; - } - } - if( minMargin < 0 ){ - minMargin *= -1; - SetHankakuHeight( GetHankakuHeight() + minMargin ); - } - int nOrgHeight = GetHankakuHeight(); + // CCharWidthCache::m_han_size と一致していなければならない + // + // KB145994 + // tmAveCharWidth は不正確(半角か全角なのかも不明な値を返す) + // ただしこのコードはカーニングの影響を受ける + auto hFontOld = (HFONT)::SelectObject( hdc, hFont ); + SIZE sz; + GetTextExtentPoint32(hdc, L"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", 52, &sz); + ::SelectObject( hdc, hFontOld ); + + m_nCharWidth = (sz.cx / 26 + 1) / 2; if( nLineSpace < 0 ){ // マイナスの場合は文字の高さも引く - SetHankakuHeight( std::max(1, GetHankakuHeight() + nLineSpace) ); - } - for( int i = 0; i < size; i++ ){ - m_aFontHeightMargin[i] = tmAscentMaxHeight - tmAscent[i] + minMargin; + m_nCharHeight = std::max(1, static_cast(sz.cy) + nLineSpace); + } else { + m_nCharHeight = sz.cy; } - - // Dx/Dyも設定 - SetHankakuDx( GetHankakuWidth() + nColmSpace ); - SetHankakuDy( std::max(1, nOrgHeight + nLineSpace) ); -} - -// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -// 設定 // -// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // - -void CTextMetrics::SetHankakuWidth(int nHankakuWidth) -{ - m_nCharWidth=nHankakuWidth; -} - -//! 半角文字の縦幅を設定。単位はピクセル。 -void CTextMetrics::SetHankakuHeight(int nHankakuHeight) -{ - m_nCharHeight=nHankakuHeight; -} - -//!文字間隔基準設定。nDxBasisは半角文字の基準ピクセル幅。SetHankakuDx -void CTextMetrics::SetHankakuDx(int nDxBasis) -{ - m_nDxBasis=nDxBasis; - for(int i=0;i<_countof(m_anHankakuDx);i++)m_anHankakuDx[i]=GetHankakuDx(); -} -void CTextMetrics::SetHankakuDy(int nDyBasis) -{ - m_nDyBasis=nDyBasis; + m_nDxBasis = m_nCharWidth + nColmSpace; + std::fill(m_anHankakuDx.begin(), m_anHankakuDx.end(), m_nDxBasis); + m_nDyBasis = std::max(1, static_cast(sz.cy) + nLineSpace); } // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // @@ -148,7 +70,7 @@ void CTextMetrics::SetHankakuDy(int nDyBasis) //! 指定した文字列により文字間隔配列を生成する。 const int* CTextMetrics::GenerateDxArray( - std::vector* vResultArray, //!< [out] 文字間隔配列の受け取りコンテナ + std::vector* pvResultArray, //!< [out] 文字間隔配列の受け取りコンテナ const wchar_t* pText, //!< [in] 文字列 int nLength, //!< [in] 文字列長 int nHankakuDx, //!< [in] 半角文字の文字間隔 @@ -158,73 +80,43 @@ const int* CTextMetrics::GenerateDxArray( CCharWidthCache& cache ) { - if( (int)vResultArray->size() < nLength ){ - vResultArray->resize(nLength); - } - if(!pText || nLength<=0)return NULL; + if(!pText || nLength<=0)return nullptr; + std::vector& vResultArray = *pvResultArray; + vResultArray.clear(); - int* p=&(*vResultArray)[0]; - int nLayoutCnt = nIndent; - const wchar_t* x=pText; - for (int i=0; i 0 && *(x-1) == WCODE::TAB) { - *p = nTabSpace; - nLayoutCnt += *p; - } - else { - *p = (nTabSpace + nHankakuDx - 1) - ((nLayoutCnt + nHankakuDx - 1) % nTabSpace); - nLayoutCnt += *p; - } - }else - if(IsUTF16High(*x)){ - if(i+1 < nLength && IsUTF16Low(x[1])){ - int n = 0; - if(nCharSpacing){ - n = CNativeW::GetKetaOfChar(pText, nLength, i, cache) * nCharSpacing; - } - *p = cache.CalcPxWidthByFont2(x) + n; - p++; - x++; - i++; - *p = 0; - }else{ - int n = 0; - if(nCharSpacing){ - n = CNativeW::GetKetaOfChar(pText, nLength, i, cache) * nCharSpacing; - } - *p = cache.CalcPxWidthByFont(*x) + n; - nLayoutCnt += *p; - } - }else{ - int n = 0; - if(nCharSpacing){ - n = CNativeW::GetKetaOfChar(pText, nLength, i, cache) * nCharSpacing; + if (i > 0 && pText[i - 1] == WCODE::TAB) { + vResultArray.push_back(nTabSpace); + nIndent += nTabSpace; + continue; } - *p = cache.CalcPxWidthByFont(*x) + n; - nLayoutCnt += *p; + vResultArray.push_back((nTabSpace + nHankakuDx - 1) - ((nIndent + nHankakuDx - 1) % nTabSpace)); + nIndent += vResultArray.back(); + continue; } - } - if(vResultArray->size()) - return &(*vResultArray)[0]; - else - return NULL; + const int spacing = CNativeW::GetKetaOfChar(pText, nLength, i, cache) * nCharSpacing; + if(IsUTF16High(pText[i]) && i + 1 < nLength && IsUTF16Low(pText[i + 1])) { + vResultArray.push_back(cache.CalcPxWidthByFont2(pText + i) + spacing); + vResultArray.push_back(0); + i++; + continue; + } + vResultArray.push_back(cache.CalcPxWidthByFont(pText[i]) + spacing); + nIndent += vResultArray.back(); + } + return vResultArray.data(); } //!文字列のピクセル幅を返す。 int CTextMetrics::CalcTextWidth( - const wchar_t* pText, //!< 文字列 + const wchar_t*, //!< 文字列 int nLength, //!< 文字列長 const int* pnDx //!< 文字間隔の入った配列 ) { - //ANSI時代の動作 ※pnDxにはすべて同じ値が入っていた - //return pnDx[0] * nLength; - - //UNICODE時代の動作 int w=0; for(int i=0;i dxArray; + return CalcTextWidth2(pText, nLength, GetCharPxWidth(), GetHankakuDx() - GetHankakuWidth(), dxArray, cache); } diff --git a/sakura_core/view/CTextMetrics.h b/sakura_core/view/CTextMetrics.h index 3832524d54..54a5e26f2b 100644 --- a/sakura_core/view/CTextMetrics.h +++ b/sakura_core/view/CTextMetrics.h @@ -28,60 +28,46 @@ //2007.08.25 kobake 追加 +#include #include #include #include "basis/SakuraBasis.h" #include "charset/charcode.h" - -class CTextMetrics; +#include "debug/Debug2.h" class CTextMetrics{ public: - //コンストラクタ・デストラクタ - CTextMetrics(); - virtual ~CTextMetrics(); void CopyTextMetricsStatus(CTextMetrics* pDst) const; void Update(HDC hdc, HFONT hFont, int nLineSpace, int nColmSpace); - //設定 -private: - void SetHankakuWidth(int nHankakuWidth); //!< 半角文字の幅を設定。単位はピクセル。 - void SetHankakuHeight(int nHankakuHeight); //!< 半角文字の縦幅を設定。単位はピクセル。 - void SetHankakuDx(int nHankakuDx); //!< 半角文字の文字間隔を設定。単位はピクセル。 - void SetHankakuDy(int nHankakuDy); //!< 半角文字の行間隔を設定。単位はピクセル。 - - //取得 -public: - int GetHankakuWidth() const{ return m_nCharWidth; } //!< 半角文字の横幅を取得。単位はピクセル。 - int GetHankakuHeight() const{ return m_nCharHeight; } //!< 半角文字の縦幅を取得。単位はピクセル。 - int GetHankakuDx() const{ return m_nDxBasis; } //!< 半角文字の文字間隔を取得。単位はピクセル。 - int GetZenkakuDx() const{ return m_nDxBasis*2; } //!< 全角文字の文字間隔を取得。単位はピクセル。 - int GetHankakuDy() const{ return m_nDyBasis; } //!< Y方向文字間隔。文字縦幅+行間隔。単位はピクセル。 + //! 半角文字の横幅を取得。単位はピクセル。 + [[nodiscard]] int GetHankakuWidth() const { return m_nCharWidth; } + //! 半角文字の縦幅を取得。単位はピクセル。 + [[nodiscard]] int GetHankakuHeight() const { return m_nCharHeight; } + //! 半角文字の文字間隔を取得。単位はピクセル。 + [[nodiscard]] int GetHankakuDx() const { return m_nDxBasis; } + //! Y方向文字間隔。文字縦幅+行間隔。単位はピクセル。 + [[nodiscard]] int GetHankakuDy() const { return m_nDyBasis; } - CPixelXInt GetCharSpacing() const { + [[nodiscard]] CPixelXInt GetCharSpacing() const { return GetHankakuDx() - GetHankakuWidth(); } // レイアウト幅分のピクセル幅を取得する - int GetCharPxWidth(CLayoutXInt col) const{ - return (Int)col; - } - - int GetCharPxWidth() const{ - return 1; - } - int GetCharHeightMarginByFontNo(int n) const{ - return m_aFontHeightMargin[n]; + [[nodiscard]] int GetCharPxWidth(CLayoutXInt col) const { + return static_cast(col); } + [[nodiscard]] int GetCharPxWidth() const { return 1; } + [[nodiscard]] int GetCharHeightMarginByFontNo(int) const { return 0; } // 固定文字x桁のレイアウト幅を取得する - CLayoutXInt GetLayoutXDefault(CKetaXInt chars) const{ - return CLayoutXInt(GetHankakuDx() * (Int)chars); + [[nodiscard]] CLayoutXInt GetLayoutXDefault(CKetaXInt chars) const { + return CLayoutXInt(m_nDxBasis * static_cast(chars)); } // 固定文字1桁あたりのレイアウト幅を取得する - CLayoutXInt GetLayoutXDefault() const{ return GetLayoutXDefault(CKetaXInt(1));} + [[nodiscard]] CLayoutXInt GetLayoutXDefault() const{ return GetLayoutXDefault(CKetaXInt(1)); } - //文字間隔配列を取得 - const int* GetDxArray_AllHankaku() const{ return m_anHankakuDx; } //!<半角文字列の文字間隔配列を取得。要素数は64。 + //! 半角文字列の文字間隔配列を取得。要素数は64。 + [[nodiscard]] const int* GetDxArray_AllHankaku() const { return m_anHankakuDx.data(); } const int* GenerateDxArray2( std::vector* vResultArray, //!< [out] 文字間隔配列の受け取りコンテナ @@ -89,7 +75,8 @@ class CTextMetrics{ int nLength, //!< [in] 文字列長 CCharWidthCache& cache = GetCharWidthCache() ) const { - return GenerateDxArray(vResultArray, pText, nLength, GetHankakuDx(), 8, 0, GetCharSpacing(), cache); + return GenerateDxArray(vResultArray, pText, nLength, + m_nDxBasis, 8, 0, m_nDxBasis - m_nCharWidth, cache); } //! 指定した文字列により文字間隔配列を生成する。 @@ -105,7 +92,7 @@ class CTextMetrics{ ); //!文字列のピクセル幅を返す。 - static int CalcTextWidth( + [[nodiscard]] static int CalcTextWidth( const wchar_t* pText, //!< 文字列 int nLength, //!< 文字列長 const int* pnDx //!< 文字間隔の入った配列 @@ -128,13 +115,10 @@ class CTextMetrics{ ) const; private: -// HDC m_hdc; //!< 計算に用いるデバイスコンテキスト int m_nCharWidth; //!< 半角文字の横幅 int m_nCharHeight; //!< 半角文字の縦幅 int m_nDxBasis; //!< 半角文字の文字間隔 (横幅+α) int m_nDyBasis; //!< 半角文字の行間隔 (縦幅+α) - int m_anHankakuDx[64]; //!< 半角用文字間隔配列 - std::vector m_aFontHeightMargin; - mutable std::vector m_vDxArray; //!< 文字間隔配列 + std::array m_anHankakuDx; //!< 半角用文字間隔配列 }; #endif /* SAKURA_CTEXTMETRICS_7972A864_FDFF_4852_9EA5_A91D39657A7F_H_ */ diff --git a/tests/unittests/test-ctextmetrics.cpp b/tests/unittests/test-ctextmetrics.cpp index 0004d4e624..b2c68807da 100644 --- a/tests/unittests/test-ctextmetrics.cpp +++ b/tests/unittests/test-ctextmetrics.cpp @@ -68,7 +68,6 @@ TEST_F(CTextMetricsWithGDI, Update1) EXPECT_EQ(metrics.GetDxArray_AllHankaku()[i], metrics.GetHankakuDx()); // Updateに依存するその他の関数のテスト - EXPECT_EQ(metrics.GetZenkakuDx(), metrics.GetHankakuDx() * 2); EXPECT_EQ(metrics.GetCharSpacing(), metrics.GetHankakuDx() - metrics.GetHankakuWidth()); EXPECT_EQ(metrics.GetCharPxWidth(), 1); EXPECT_EQ(metrics.GetCharPxWidth(CLayoutInt(0)), 0); From 3930ec5ada2317f752ad731825a50cbd67cff727 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 21 Feb 2021 18:31:50 +0900 Subject: [PATCH 0452/1024] =?UTF-8?q?CDataProfile=E3=81=AB=E3=82=88?= =?UTF-8?q?=E3=82=8B=E8=A8=AD=E5=AE=9A=E5=80=A4=E8=AA=AD=E3=81=BF=E8=BE=BC?= =?UTF-8?q?=E3=81=BF=E3=81=A7=E5=A4=89=E6=8F=9B=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=82=92=E6=A4=9C=E5=87=BA=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CDataProfile.cpp | 55 ++++ sakura_core/CDataProfile.h | 407 ++++++++++++++++++++---------- tests/unittests/test-cprofile.cpp | 119 ++++++++- 3 files changed, 442 insertions(+), 139 deletions(-) diff --git a/sakura_core/CDataProfile.cpp b/sakura_core/CDataProfile.cpp index 040aa3a7b2..5ae7e12bd8 100644 --- a/sakura_core/CDataProfile.cpp +++ b/sakura_core/CDataProfile.cpp @@ -1,3 +1,58 @@ /*! @file */ #include "StdAfx.h" #include "CDataProfile.h" + +#include + +/*! + コンストラクタ + */ +StringBufferW::StringBufferW(WCHAR* pData, size_t maxCount) + : pszData_(pData) + , cchDataSize_(maxCount) +{ + if (pszData_ == nullptr) { + throw std::invalid_argument("data can't be nullptr"); + } + + if (cchDataSize_ == 0) { + throw std::invalid_argument("count can't be zero"); + } +} + +/*! + 代入演算子 + */ +StringBufferW& StringBufferW::operator = (std::wstring_view rhs) +{ + ::wcsncpy_s(pszData_, cchDataSize_, rhs.data(), _TRUNCATE); + + return *this; +} + +namespace profile_data { + + //! 設定値を文字列に変換する + [[nodiscard]] std::wstring ToString(const StringBufferW& value) + { + return std::wstring(value.c_str()); + } + +}; // end of namespace profile_data + +/*! + * 独自定義バッファ参照型(StringBufferW)の入出力(右辺値参照バージョン) + * + * @retval true 設定値を正しく読み書きできた + * @retval false 設定値を読み込めなかった + */ +bool CDataProfile::IOProfileData( + std::wstring_view sectionName, //!< [in] セクション名 + std::wstring_view entryKey, //!< [in] エントリ名 + StringBufferW&& refEntryValue //!< [in,out] エントリ値 +) +{ + // 右辺値参照引数(=左辺値)を使って入出力テンプレートを呼び出す + auto entryValue(std::move(refEntryValue)); + return IOProfileData(sectionName, entryKey, entryValue); +} diff --git a/sakura_core/CDataProfile.h b/sakura_core/CDataProfile.h index e8ca795761..1bf30e8bf3 100644 --- a/sakura_core/CDataProfile.h +++ b/sakura_core/CDataProfile.h @@ -26,203 +26,336 @@ #define SAKURA_CDATAPROFILE_401640FD_5B27_454A_B0DE_098E1C4FAEAD_H_ #pragma once +#include "CProfile.h" + #include "basis/SakuraBasis.h" #include "debug/Debug2.h" #include "util/StaticType.h" -#include "CProfile.h" -//文字列バッファの型 -struct StringBufferW_{ - WCHAR* pData; - const int nDataCount; +/*! + * バッファ参照型 + * + * 読み書き可能なWCHARバッファとサイズを指定して構築する + */ +class StringBufferW { + WCHAR* pszData_; + size_t cchDataSize_; - StringBufferW_(WCHAR* _pData, int _nDataCount) : pData(_pData), nDataCount(_nDataCount) { } +public: + explicit StringBufferW(WCHAR* pData, size_t maxCount); - StringBufferW_& operator = (const StringBufferW_& rhs) - { - wcscpy_s(pData,nDataCount,rhs.pData); - return *this; - } + template + explicit StringBufferW(WCHAR (&buffer)[N]) + : StringBufferW(buffer, N) {} + + [[nodiscard]] const WCHAR* c_str() const noexcept { return pszData_; } + [[nodiscard]] size_t capacity() const noexcept { return cchDataSize_; } + + StringBufferW& operator = (std::wstring_view rhs); }; -typedef const StringBufferW_ StringBufferW; //文字列バッファ型インスタンスの生成マクロ -#define MakeStringBufferW(S) StringBufferW(S,_countof(S)) +#define MakeStringBufferW(S) StringBufferW(S,_countof(S)) + +/*! + * プロファイル用データ変換 + */ +namespace profile_data { -//2007.09.24 kobake データ変換部を子クラスに分離 -//!各種データ変換付きCProfile -class CDataProfile : public CProfile{ -private: - //専用型 - typedef std::wstring wstring; + /*! + * 指定した型の変換に対応しているかどうかを返すインライン関数 + */ + template + constexpr bool is_supported_v = std::is_integral_v || std::is_enum_v || std::is_same_v || std::is_same_v || std::is_same_v; -protected: - static const wchar_t* _work_itow(int n) + /*! + * 文字列を設定値に変換する + * + * テンプレート定義は、32bit以下の整数型とenum型に対応している。 + * それ以外の型で利用したい場合は、特殊化定義を書いて使う。 + * 既存コードにあった bool, CLayoutInt, WCHAR, KEYCODE は特殊化済み。 + * 独自型 CLogicInt は int に暗黙変換できるので特殊化不要。 + */ + template + [[nodiscard]] bool TryParse(std::wstring_view profile, NumType& value) noexcept { - static wchar_t buf[32]; - _itow(n,buf,10); - return buf; + if (profile.length() > 0) { + const WCHAR* pStart = profile.data(); + WCHAR* pEnd = nullptr; + if constexpr (std::is_unsigned_v) { + if (const auto parsedNum = ::wcstoul(pStart, &pEnd, 10); pStart != pEnd) { + value = static_cast(parsedNum); + return true; + } + } + else { + if (const auto parsedNum = ::wcstol(pStart, &pEnd, 10); pStart != pEnd) { + value = static_cast(parsedNum); + return true; + } + } + } + return false; } - // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // - // データ変換部 // - // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -protected: - //bool - void profile_to_value(const wstring& profile, bool* value) + + /*! + * 設定値を文字列に変換する + * + * テンプレート定義は、組込の整数型に対応している。 + * 整数以外の型で利用したい場合は、特殊化定義を書いて使う。 + * 既存コードにあった型 bool, CLayoutInt, WCHAR, KEYCODE は特殊化済み。 + * 独自型 CLogicInt は int に暗黙変換できるので特殊化不要。 + */ + template, std::nullptr_t> = nullptr> + [[nodiscard]] std::wstring ToString(NumType value) { - if(profile != L"0")*value=true; - else *value=false; + return std::to_wstring(value); } - void value_to_profile(const bool& value, wstring* profile) + + //! 設定値を文字列に変換する + template, std::nullptr_t> = nullptr> + [[nodiscard]] std::wstring ToString(EnumType value) { - *profile = _work_itow(value?1:0); + auto nValue = static_cast(value); + return ToString(nValue); } - //int - void profile_to_value(const wstring& profile, int* value) + +#ifdef USE_STRICT_INT + + //! 文字列を設定値に変換する + template<> + [[nodiscard]] inline bool TryParse(std::wstring_view profile, CLayoutInt& value) noexcept { - *value = _wtoi(profile.c_str()); + // int型を介して値を読み取る + if (int nValue = 0; TryParse(profile, nValue)) { + value = CLayoutInt(nValue); + return true; + } + return false; } - void value_to_profile(const int& value, wstring* profile) + + //! 設定値を文字列に変換する + template<> + [[nodiscard]] inline std::wstring ToString(CLayoutInt value) { - *profile = _work_itow(value); + // int型を介して文字列化する + return ToString((Int)value); } - //int式入出力実装マクロ - #define AS_INT(TYPE) \ - void profile_to_value(const wstring& profile, TYPE* value){ *value = (TYPE)_wtoi(profile.c_str()); } \ - void value_to_profile(const TYPE& value, wstring* profile){ *profile = _work_itow(value); } - - //int式 -// CType.hをincludeしないといけないから廃止 -// AS_INT(EOutlineType) - AS_INT(WORD) +#endif //ifdef USE_STRICT_INT -#ifdef USE_STRICT_INT - //CLayoutInt - void profile_to_value(const wstring& profile, CLayoutInt* value){ *value = (CLayoutInt)_wtoi(profile.c_str()); } - void value_to_profile(const CLayoutInt& value, wstring* profile){ *profile = _work_itow((Int)value); } - //CLogicInt - void profile_to_value(const wstring& profile, CLogicInt* value){ *value = (CLogicInt)_wtoi(profile.c_str()); } - void value_to_profile(const CLogicInt& value, wstring* profile){ *profile = _work_itow((Int)value); } -#endif - //ACHAR - void profile_to_value(const wstring& profile, ACHAR* value) - { - if(profile.length()>0){ - ACHAR buf[2]={0}; - int ret=wctomb(buf,profile[0]); - assert_warning(ret==1); - (void)ret; - *value = buf[0]; - } - else{ - *value = '\0'; + //! 文字列を設定値に変換する + template<> + [[nodiscard]] inline bool TryParse(std::wstring_view profile, bool& value) noexcept + { + // int型を介して値を読み取る + if (int nValue = 0; TryParse(profile, nValue)) { + value = (nValue != 0); + return true; } + return false; + } + + //! 設定値を文字列に変換する + template<> + [[nodiscard]] inline std::wstring ToString(bool value) + { + // int型を介して文字列化する + return ToString(value ? 1 : 0); } - void value_to_profile(const ACHAR& value, wstring* profile) + + /*! + * 文字列を設定値に変換する + * + * 行番号エリアとテキストエリアを区切るのに使う文字の設定。 + * + * @sa STypeConfig::m_cLineTermChar + */ + template<> + [[nodiscard]] inline bool TryParse(std::wstring_view profile, WCHAR& value) noexcept { - WCHAR buf[2]={0}; - mbtowc(buf,&value,1); - profile->assign(1,buf[0]); + // \0は区切り文字「なし」を意味する + if (const WCHAR ch = profile.empty() ? L'\0' : profile[0]; (ch & 0xd800) != 0xd800) { + // 区切り文字は表示可能な単一文字なので、変換不要。 + value = ch; + return true; + } + return false; } - //WCHAR - void profile_to_value(const wstring& profile, WCHAR* value) + + /*! + * 設定値を文字列に変換する + * + * 行番号エリアとテキストエリアを区切るのに使う文字の設定。 + * + * @sa STypeConfig::m_cLineTermChar + */ + template<> + [[nodiscard]] inline std::wstring ToString(WCHAR value) { - *value = profile[0]; + if (value != L'\0' && (value & 0xd800) != 0xd800) { + // 指定された文字1字のみで構成される文字列を返す + return std::wstring(1, value); + } + return std::wstring(); } - void value_to_profile(const WCHAR& value, wstring* profile) + + /*! + * 文字列を設定値に変換する + * + * 元々ACHAR型の変換メソッドになっていたものを再定義。 + * カスタムメニューのニーモニック設定に使われている。 + * + * ニーモニックとは、「ファイル(F)」の F のこと。(Fには下線が付く) + * キーボードショートカットとして機能することから、メニューショートカットとも言う。 + * + * @sa CommonSetting_CustomMenu::m_nCustMenuItemKeyArr + */ + template<> + [[nodiscard]] inline bool TryParse(std::wstring_view profile, KEYCODE& value) noexcept { - profile->assign(1,value); + // \0はニーモニック「なし」を意味する + if (const WCHAR ch = profile.empty() ? L'\0' : profile[0]; ch < 0x80) { + // ニーモニックはASCIIの印字可能文字なので、CRT関数を使った変換は不要。 + value = static_cast(ch); + return true; + } + return false; } - //StringBufferW - void profile_to_value(const wstring& profile, StringBufferW* value) + + //! 設定値を文字列に変換する + template<> + [[nodiscard]] inline std::wstring ToString(KEYCODE value) { - wcscpy_s(value->pData,value->nDataCount,profile.c_str()); + // WCHAR型を介して文字列化する + const WCHAR ch = value < 0 || value >= 0x80 ? L'\0' : value; + return ToString(ch); } - void value_to_profile(const StringBufferW& value, wstring* profile) + + /*! + * 文字列を設定値に変換する + * + * @sa StringBufferW + */ + template<> + [[nodiscard]] inline bool TryParse(std::wstring_view profile, StringBufferW& value) noexcept { - *profile = value.pData; + if (profile.length() < value.capacity()) { + value = profile; + return true; + } + return false; } - //StaticString - template - void profile_to_value(const wstring& profile, StaticString* value) + + //! 設定値を文字列に変換する + [[nodiscard]] std::wstring ToString(const StringBufferW& value); + +}; // end of namespace profile_data + +/*! + * 各種データ変換付きCProfile + * + * @date 2007/09/24 kobake データ変換部を子クラスに分離 + */ +class CDataProfile : public CProfile { +public: + using CProfile::GetProfileData; + using CProfile::SetProfileData; + + /*! + * Profileから読み込んだ文字列を設定値に変換して取得する + * + * @retval true 成功 + * @retval false 失敗 + */ + template, std::nullptr_t> = nullptr> + [[nodiscard]] bool GetProfileData( + std::wstring_view sectionName, //!< [in] セクション名 + std::wstring_view entryKey, //!< [in] エントリ名 + T& tEntryValue //!< [out] エントリ値 + ) const { - wcscpy_s(value->GetBufferPointer(),value->GetBufferCount(),profile.c_str()); + if (std::wstring strEntryValue; GetProfileData(sectionName, entryKey, strEntryValue)) { + return profile_data::TryParse(strEntryValue, tEntryValue); + } + return false; } - template - void value_to_profile(const StaticString& value, wstring* profile) + + /*! + * 設定値を文字列に変換してProfileへ書き込む + */ + template, std::nullptr_t> = nullptr> + void SetProfileData( + std::wstring_view sectionName, //!< [in] セクション名 + std::wstring_view entryKey, //!< [in] エントリ名 + const T tEntryValue //!< [in] エントリ値 + ) { - *profile = value.GetBufferPointer(); + const std::wstring strEntryValue = profile_data::ToString(tEntryValue); + SetProfileData(sectionName, entryKey, strEntryValue.data()); } - // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // - // 入出力部 // - // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -public: /*! * 設定値の入出力テンプレート * - * 標準stringを介して設定値の入出力を行う。 - * @remark StringBufferWはバッファが足りないとabortします。 - * @remark StaticStringはバッファが足りないとabortします。 + * 設定値の入出力を行う。 + * + * @retval true 設定値を正しく読み書きできた + * @retval false 設定値を読み込めなかった */ - template //T=={bool, int, WORD, wchar_t, char, StringBufferW, StaticString} + template //T=={int, bool, WCHAR, KEYCODE, StringBufferW} bool IOProfileData( std::wstring_view sectionName, //!< [in] セクション名 std::wstring_view entryKey, //!< [in] エントリ名 T& tEntryValue //!< [in,out] エントリ値 - ) noexcept + ) { - // 標準stringに変換して入出力する - std::wstring buf; - - bool ret = false; if( IsReadingMode() ){ - //文字列読み込み - if( GetProfileData(sectionName, entryKey, buf) ){ - //Tに変換 - profile_to_value(buf, &tEntryValue); - ret = true; - } + return GetProfileData(sectionName, entryKey, tEntryValue); }else{ - //文字列に変換 - value_to_profile(tEntryValue, &buf); - ret = true; //TODO: 変換成否の反映 - //文字列書き込み - SetProfileData(sectionName, entryKey, buf); + SetProfileData(sectionName, entryKey, tEntryValue); + return true; } - return ret; } + /*! + * 独自定義文字配列拡張型(StaticString)の入出力 + * + * 型引数が合わないために通常入出力と分離。 + * + * @retval true 設定値を正しく読み書きできた + * @retval false 設定値を読み込めなかった + */ + template + bool IOProfileData( + std::wstring_view sectionName, //!< [in] セクション名 + std::wstring_view entryKey, //!< [in] エントリ名 + StaticString& szEntryValue //!< [in,out] エントリ値 + ) + { + // バッファ参照型に変換して入出力する + return IOProfileData(sectionName, entryKey, StringBufferW(szEntryValue.GetBufferPointer(), szEntryValue.GetBufferCount())); + } + + /*! + * 独自定義バッファ参照型(StringBufferW)の入出力(右辺値参照バージョン) + * + * @retval true 設定値を正しく読み書きできた + * @retval false 設定値を読み込めなかった + */ + bool IOProfileData( + std::wstring_view sectionName, //!< [in] セクション名 + std::wstring_view entryKey, //!< [in] エントリ名 + StringBufferW&& refEntryValue //!< [in,out] エントリ値 + ); + //2007.08.14 kobake 追加 //! intを介して任意型の入出力を行う template bool IOProfileData_WrapInt( const std::wstring& strSectionName, const std::wstring& strEntryKey, T& nEntryValue) { - int n=nEntryValue; - bool ret = this->IOProfileData( strSectionName, strEntryKey, n ); - nEntryValue=(T)n; - return ret; + return IOProfileData(strSectionName, strEntryKey, nEntryValue); } }; -/*! - * 文字列型(標準string)の入出力(無変換) - */ -template <> inline -bool CDataProfile::IOProfileData( - std::wstring_view sectionName, //!< [in] セクション名 - std::wstring_view entryKey, //!< [in] エントリ名 - std::wstring& strEntryValue //!< [in,out] エントリ値 -) noexcept -{ - if( IsReadingMode() ){ - //文字列読み込み - return GetProfileData(sectionName, entryKey, strEntryValue); - }else{ - //文字列書き込み - SetProfileData(sectionName, entryKey, strEntryValue); - return true; - } -} #endif /* SAKURA_CDATAPROFILE_401640FD_5B27_454A_B0DE_098E1C4FAEAD_H_ */ diff --git a/tests/unittests/test-cprofile.cpp b/tests/unittests/test-cprofile.cpp index 499656077a..fa4fd4ac21 100644 --- a/tests/unittests/test-cprofile.cpp +++ b/tests/unittests/test-cprofile.cpp @@ -147,6 +147,121 @@ TEST(CProfile, GetProfileData_NewEntry) ASSERT_STREQ(L"109", value.data()); } +/*! + * @brief StringBufferWのテスト + */ +TEST(StringBufferW, ctor) +{ + WCHAR szBuf[12]{ 0 }; + StringBufferW buf1(szBuf, _countof(szBuf)); + StringBufferW buf2(szBuf); + + ASSERT_THROW({ StringBufferW buf3(nullptr, 1); }, std::invalid_argument); + + ASSERT_THROW({ StringBufferW buf4(szBuf, 0); }, std::invalid_argument); +} + +/*! + * @brief TryParseのテスト + */ +TEST(profile_data, TryParse_int) +{ + int value = 0; + ASSERT_TRUE(profile_data::TryParse(L"109", value)); + ASSERT_EQ(109, value); + + ASSERT_FALSE(profile_data::TryParse(L"", value)); + ASSERT_EQ(109, value); + + ASSERT_FALSE(profile_data::TryParse(L"not a number", value)); + ASSERT_EQ(109, value); + + ASSERT_TRUE(profile_data::TryParse(L"888", value)); + ASSERT_EQ(888, value); +} + +/*! + * @brief TryParseのテスト + */ +TEST(profile_data, TryParse_enum) +{ + enum ETest { NONE, RED, GREEN, BLUE, }; + ETest value = NONE; + ASSERT_TRUE(profile_data::TryParse(L"1", value)); + ASSERT_EQ(RED, value); + + ASSERT_FALSE(profile_data::TryParse(L"", value)); + ASSERT_EQ(RED, value); +} + +/*! + * @brief TryParseのテスト + */ +TEST(profile_data, TryParse_bool) +{ + bool value = false; + ASSERT_TRUE(profile_data::TryParse(L"1", value)); + ASSERT_TRUE(value); + + ASSERT_FALSE(profile_data::TryParse(L"", value)); + ASSERT_TRUE(value); + + ASSERT_FALSE(profile_data::TryParse(L"false", value)); + ASSERT_TRUE(value); + + ASSERT_TRUE(profile_data::TryParse(L"0", value)); + ASSERT_FALSE(value); +} + +/*! + * @brief TryParseのテスト + */ +TEST(profile_data, TryParse_WCHAR) +{ + WCHAR value = L'\0'; + ASSERT_TRUE(profile_data::TryParse(L"|", value)); + ASSERT_EQ(L'|', value); + + ASSERT_FALSE(profile_data::TryParse(L"\U0001F51E", value)); + ASSERT_EQ(L'|', value); + + ASSERT_TRUE(profile_data::TryParse(L"", value)); + ASSERT_EQ(L'\0', value); +} + +/*! + * @brief TryParseのテスト + */ +TEST(profile_data, TryParse_KEYCODE) +{ + KEYCODE value = '\0'; + ASSERT_TRUE(profile_data::TryParse(L"W", value)); + ASSERT_EQ('W', value); + + ASSERT_FALSE(profile_data::TryParse(L"漢", value)); + ASSERT_EQ('W', value); + + ASSERT_TRUE(profile_data::TryParse(L"", value)); + ASSERT_EQ('\0', value); +} + +/*! + * @brief TryParseのテスト + */ +TEST(profile_data, TryParse_StringBufferW) +{ + WCHAR buffer[5]{ 0 }; + StringBufferW value(buffer); + ASSERT_TRUE(profile_data::TryParse(L"test", value)); + ASSERT_STREQ(L"test", value.c_str()); + + ASSERT_FALSE(profile_data::TryParse(L"overflow", value)); + ASSERT_STREQ(L"test", value.c_str()); + + ASSERT_TRUE(profile_data::TryParse(L"", value)); + ASSERT_STREQ(L"", value.c_str()); +} + /*! * @brief IOProfileDataのテスト */ @@ -174,6 +289,6 @@ TEST(CDataProfile, IOProfileData) ASSERT_TRUE(cProfile.IOProfileData(L"Test", L"nTest", nValue)); ASSERT_EQ(109, nValue); - ASSERT_TRUE(cProfile.IOProfileData(L"Test", L"szTest", nValue)); - ASSERT_EQ(0, nValue); + ASSERT_FALSE(cProfile.IOProfileData(L"Test", L"szTest", nValue)); + ASSERT_EQ(109, nValue); } From 46bbe463992d74d53e9f8d5e63bbd81d521a9d48 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 21 Feb 2021 18:52:46 +0900 Subject: [PATCH 0453/1024] =?UTF-8?q?=E7=8B=AC=E8=87=AA=E3=83=9E=E3=82=AF?= =?UTF-8?q?=E3=83=ADMakeStringBufferW=E3=82=92=E5=BB=83=E6=AD=A2=E3=81=97?= =?UTF-8?q?=E3=81=A6=E3=82=B3=E3=83=BC=E3=83=89=E8=A8=98=E8=BF=B0=E3=82=92?= =?UTF-8?q?=E3=82=B7=E3=83=B3=E3=83=97=E3=83=AB=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CDataProfile.h | 3 - sakura_core/dlg/CDlgProfileMgr.cpp | 2 +- sakura_core/env/CShareData_IO.cpp | 162 ++++++++++++------------ sakura_core/typeprop/CImpExpManager.cpp | 36 +++--- 4 files changed, 100 insertions(+), 103 deletions(-) diff --git a/sakura_core/CDataProfile.h b/sakura_core/CDataProfile.h index 1bf30e8bf3..0233cbd805 100644 --- a/sakura_core/CDataProfile.h +++ b/sakura_core/CDataProfile.h @@ -54,9 +54,6 @@ class StringBufferW { StringBufferW& operator = (std::wstring_view rhs); }; -//文字列バッファ型インスタンスの生成マクロ -#define MakeStringBufferW(S) StringBufferW(S,_countof(S)) - /*! * プロファイル用データ変換 */ diff --git a/sakura_core/dlg/CDlgProfileMgr.cpp b/sakura_core/dlg/CDlgProfileMgr.cpp index ba26c244d7..65757f2c13 100644 --- a/sakura_core/dlg/CDlgProfileMgr.cpp +++ b/sakura_core/dlg/CDlgProfileMgr.cpp @@ -512,7 +512,7 @@ static bool IOProfSettings( SProfileSettings& settings, bool bWrite ) if( settings.m_nDefaultIndex < -1 ){ settings.m_nDefaultIndex = -1; } - cProf.IOProfileData( pSection, L"szDllLanguage", StringBufferW(settings.m_szDllLanguage, _countof(settings.m_szDllLanguage)) ); + cProf.IOProfileData(pSection, L"szDllLanguage", StringBufferW(settings.m_szDllLanguage)); cProf.IOProfileData( pSection, L"bDefaultSelect", settings.m_bDefaultSelect ); if( bWrite ){ diff --git a/sakura_core/env/CShareData_IO.cpp b/sakura_core/env/CShareData_IO.cpp index 92a78187b6..16a06de26c 100644 --- a/sakura_core/env/CShareData_IO.cpp +++ b/sakura_core/env/CShareData_IO.cpp @@ -118,7 +118,7 @@ bool CShareData_IO::ShareData_IO_2( bool bRead ) if (langId != MAKELANGID( LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN )) { DLLSHAREDATA* pShareData = &GetDllShareData(); wcscpy(pShareData->m_Common.m_sWindow.m_szLanguageDll, L"sakura_lang_en_US.dll"); - cProfile.IOProfileData( L"Common", L"szLanguageDll", MakeStringBufferW( pShareData->m_Common.m_sWindow.m_szLanguageDll ) ); + cProfile.IOProfileData(L"Common", L"szLanguageDll", StringBufferW(pShareData->m_Common.m_sWindow.m_szLanguageDll)); std::vector values; pcShare->ConvertLangValues( values, true ); CSelectLang::ChangeLang( pShareData->m_Common.m_sWindow.m_szLanguageDll ); @@ -132,7 +132,7 @@ bool CShareData_IO::ShareData_IO_2( bool bRead ) WCHAR iniVer[256]; DWORD mH, mL, lH, lL; mH = mL = lH = lL = 0; // ※ 古~い ini だと "szVersion" は無い - if( cProfile.IOProfileData( LTEXT("Other"), LTEXT("szVersion"), MakeStringBufferW(iniVer) ) ) + if( cProfile.IOProfileData(LTEXT("Other"), L"szVersion", StringBufferW(iniVer)) ) _stscanf( iniVer, L"%u.%u.%u.%u", &mH, &mL, &lH, &lL ); DWORD dwMS = (DWORD)MAKELONG(mL, mH); DWORD dwLS = (DWORD)MAKELONG(lL, lH); @@ -152,7 +152,7 @@ bool CShareData_IO::ShareData_IO_2( bool bRead ) if( bRead ){ DLLSHAREDATA* pShareData = &GetDllShareData(); - cProfile.IOProfileData( L"Common", L"szLanguageDll", MakeStringBufferW( pShareData->m_Common.m_sWindow.m_szLanguageDll ) ); + cProfile.IOProfileData(L"Common", L"szLanguageDll", StringBufferW(pShareData->m_Common.m_sWindow.m_szLanguageDll)); CSelectLang::ChangeLang( pShareData->m_Common.m_sWindow.m_szLanguageDll ); pcShare->RefreshString(); } @@ -229,12 +229,12 @@ void CShareData_IO::ShareData_IO_Mru( CDataProfile& cProfile ) auto_sprintf( szKeyName, LTEXT("MRU[%02d].nCharCode"), i ); cProfile.IOProfileData_WrapInt( pszSecName, szKeyName, pfiWork->m_nCharCode ); auto_sprintf( szKeyName, LTEXT("MRU[%02d].szPath"), i ); - cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(pfiWork->m_szPath) ); + cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(pfiWork->m_szPath)); auto_sprintf( szKeyName, LTEXT("MRU[%02d].szMark2"), i ); - if( !cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(pfiWork->m_szMarkLines) ) ){ + if( !cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(pfiWork->m_szMarkLines)) ){ if( cProfile.IsReadingMode() ){ auto_sprintf( szKeyName, LTEXT("MRU[%02d].szMark"), i ); // 旧ver互換 - cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(pfiWork->m_szMarkLines) ); + cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(pfiWork->m_szMarkLines)); } } auto_sprintf( szKeyName, LTEXT("MRU[%02d].nType"), i ); @@ -438,9 +438,9 @@ void CShareData_IO::ShareData_IO_Nickname( CDataProfile& cProfile ) int nSize = pShare->m_Common.m_sFileName.m_nTransformFileNameArrNum; for( i = 0; i < nSize; ++i ){ auto_sprintf( szKeyName, LTEXT("From%02d"), i ); - cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(pShare->m_Common.m_sFileName.m_szTransformFileNameFrom[i]) ); + cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(pShare->m_Common.m_sFileName.m_szTransformFileNameFrom[i])); auto_sprintf( szKeyName, LTEXT("To%02d"), i ); - cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(pShare->m_Common.m_sFileName.m_szTransformFileNameTo[i]) ); + cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(pShare->m_Common.m_sFileName.m_szTransformFileNameTo[i])); } // 読み込み時,残りをNULLで再初期化 if( cProfile.IsReadingMode() ){ @@ -457,7 +457,7 @@ static bool ShareData_IO_RECT( CDataProfile& cProfile, const WCHAR* pszSecName, WCHAR szKeyData[100]; bool ret = false; if( cProfile.IsReadingMode() ){ - ret = cProfile.IOProfileData( pszSecName, pszKeyName, MakeStringBufferW(szKeyData) ); + ret = cProfile.IOProfileData(pszSecName, pszKeyName, StringBufferW(szKeyData)); if( ret ){ int buf[4]; scan_ints( szKeyData, pszForm, buf ); @@ -475,7 +475,7 @@ static bool ShareData_IO_RECT( CDataProfile& cProfile, const WCHAR* pszSecName, rcValue.right, rcValue.bottom ); - ret = cProfile.IOProfileData( pszSecName, pszKeyName, MakeStringBufferW(szKeyData) ); + ret = cProfile.IOProfileData(pszSecName, pszKeyName, StringBufferW(szKeyData)); } return ret; } @@ -508,7 +508,7 @@ void CShareData_IO::ShareData_IO_Common( CDataProfile& cProfile ) cProfile.IOProfileData( pszSecName, LTEXT("m_bRestoreBookmarks") , common.m_sFile.m_bRestoreBookmarks ); cProfile.IOProfileData( pszSecName, LTEXT("bAddCRLFWhenCopy") , common.m_sEdit.m_bAddCRLFWhenCopy ); cProfile.IOProfileData_WrapInt( pszSecName, LTEXT("eOpenDialogDir") , common.m_sEdit.m_eOpenDialogDir ); - cProfile.IOProfileData( pszSecName, LTEXT("szOpenDialogSelDir") , StringBufferW(common.m_sEdit.m_OpenDialogSelDir,_countof2(common.m_sEdit.m_OpenDialogSelDir)) ); + cProfile.IOProfileData(pszSecName, L"szOpenDialogSelDir", common.m_sEdit.m_OpenDialogSelDir); cProfile.IOProfileData( pszSecName, LTEXT("bBoxSelectLock") , common.m_sEdit.m_bBoxSelectLock ); cProfile.IOProfileData( pszSecName, LTEXT("bVistaStyleFileDialog") , common.m_sEdit.m_bVistaStyleFileDialog ); cProfile.IOProfileData( pszSecName, LTEXT("nRepeatedScrollLineNum") , common.m_sGeneral.m_nRepeatedScrollLineNum ); @@ -544,7 +544,7 @@ void CShareData_IO::ShareData_IO_Common( CDataProfile& cProfile ) cProfile.IOProfileData( pszSecName, LTEXT("nTagJumpModeKeyword") , common.m_sSearch.m_nTagJumpModeKeyword ); /* 正規表現DLL 2007.08.12 genta */ - cProfile.IOProfileData( pszSecName, LTEXT("szRegexpLib") , MakeStringBufferW(common.m_sSearch.m_szRegexpLib) ); + cProfile.IOProfileData(pszSecName, L"szRegexpLib", StringBufferW(common.m_sSearch.m_szRegexpLib)); cProfile.IOProfileData( pszSecName, LTEXT("bGTJW_RETURN") , common.m_sSearch.m_bGTJW_RETURN ); cProfile.IOProfileData( pszSecName, LTEXT("bGTJW_LDBLCLK") , common.m_sSearch.m_bGTJW_LDBLCLK ); cProfile.IOProfileData( pszSecName, LTEXT("bBackUp") , common.m_sBackup.m_bBackUp ); @@ -587,11 +587,11 @@ void CShareData_IO::ShareData_IO_Common( CDataProfile& cProfile ) cProfile.IOProfileData( pszSecName, LTEXT("bBackUpPathAdvanced") , common.m_sBackup.m_bBackUpPathAdvanced ); /* 20051107 aroka */ cProfile.IOProfileData( pszSecName, LTEXT("szBackUpPathAdvanced") , common.m_sBackup.m_szBackUpPathAdvanced ); /* 20051107 aroka */ cProfile.IOProfileData_WrapInt( pszSecName, LTEXT("nFileShareMode") , common.m_sFile.m_nFileShareMode ); - cProfile.IOProfileData( pszSecName, LTEXT("szExtHelp"), MakeStringBufferW(common.m_sHelper.m_szExtHelp) ); - cProfile.IOProfileData( pszSecName, LTEXT("szExtHtmlHelp"), MakeStringBufferW(common.m_sHelper.m_szExtHtmlHelp) ); + cProfile.IOProfileData(pszSecName, L"szExtHelp", StringBufferW(common.m_sHelper.m_szExtHelp)); + cProfile.IOProfileData(pszSecName, L"szExtHtmlHelp", StringBufferW(common.m_sHelper.m_szExtHtmlHelp)); - cProfile.IOProfileData( pszSecName, LTEXT("szMigemoDll"), MakeStringBufferW(common.m_sHelper.m_szMigemoDll) ); - cProfile.IOProfileData( pszSecName, LTEXT("szMigemoDict"), MakeStringBufferW(common.m_sHelper.m_szMigemoDict) ); + cProfile.IOProfileData(pszSecName, L"szMigemoDll", StringBufferW(common.m_sHelper.m_szMigemoDll)); + cProfile.IOProfileData(pszSecName, L"szMigemoDict", StringBufferW(common.m_sHelper.m_szMigemoDict)); // ai 02/05/23 Add S {// Keword Help Font @@ -609,14 +609,14 @@ void CShareData_IO::ShareData_IO_Common( CDataProfile& cProfile ) cProfile.IOProfileData( pszSecName, LTEXT("bDispMiniMap") , common.m_sWindow.m_bDispMiniMap ); cProfile.IOProfileData( pszSecName, LTEXT("nFUNCKEYWND_Place") , common.m_sWindow.m_nFUNCKEYWND_Place ); cProfile.IOProfileData( pszSecName, LTEXT("nFUNCKEYWND_GroupNum") , common.m_sWindow.m_nFUNCKEYWND_GroupNum ); // 2002/11/04 Moca ファンクションキーのグループボタン数 - cProfile.IOProfileData( pszSecName, LTEXT("szLanguageDll") , MakeStringBufferW( common.m_sWindow.m_szLanguageDll ) ); + cProfile.IOProfileData(pszSecName, L"szLanguageDll", StringBufferW(common.m_sWindow.m_szLanguageDll)); cProfile.IOProfileData( pszSecName, LTEXT("nMiniMapFontSize") , common.m_sWindow.m_nMiniMapFontSize ); cProfile.IOProfileData( pszSecName, LTEXT("nMiniMapQuality") , common.m_sWindow.m_nMiniMapQuality ); cProfile.IOProfileData( pszSecName, LTEXT("nMiniMapWidth") , common.m_sWindow.m_nMiniMapWidth ); cProfile.IOProfileData( pszSecName, LTEXT("bDispTabWnd") , common.m_sTabBar.m_bDispTabWnd ); //タブウインドウ //@@@ 2003.05.31 MIK cProfile.IOProfileData( pszSecName, LTEXT("bDispTabWndMultiWin") , common.m_sTabBar.m_bDispTabWndMultiWin ); //タブウインドウ //@@@ 2003.05.31 MIK - cProfile.IOProfileData( pszSecName, LTEXT("szTabWndCaption") , MakeStringBufferW(common.m_sTabBar.m_szTabWndCaption) ); //@@@ 2003.06.13 MIK + cProfile.IOProfileData(pszSecName, L"szTabWndCaption", StringBufferW(common.m_sTabBar.m_szTabWndCaption)); //@@@ 2003.06.13 MIK cProfile.IOProfileData( pszSecName, LTEXT("bSameTabWidth") , common.m_sTabBar.m_bSameTabWidth ); // 2006.01.28 ryoji タブを等幅にする cProfile.IOProfileData( pszSecName, LTEXT("bDispTabIcon") , common.m_sTabBar.m_bDispTabIcon ); // 2006.01.28 ryoji タブにアイコンを表示する cProfile.IOProfileData_WrapInt( pszSecName, LTEXT("bDispTabClose") , common.m_sTabBar.m_bDispTabClose ); // 2012.04.14 syat @@ -640,8 +640,8 @@ void CShareData_IO::ShareData_IO_Common( CDataProfile& cProfile ) cProfile.IOProfileData( pszSecName, LTEXT("bSplitterWndHScroll") , common.m_sWindow.m_bSplitterWndHScroll ); cProfile.IOProfileData( pszSecName, LTEXT("bSplitterWndVScroll") , common.m_sWindow.m_bSplitterWndVScroll ); - cProfile.IOProfileData( pszSecName, LTEXT("szMidashiKigou") , MakeStringBufferW(common.m_sFormat.m_szMidashiKigou) ); - cProfile.IOProfileData( pszSecName, LTEXT("szInyouKigou") , MakeStringBufferW(common.m_sFormat.m_szInyouKigou) ); + cProfile.IOProfileData(pszSecName, L"szMidashiKigou", StringBufferW(common.m_sFormat.m_szMidashiKigou)); + cProfile.IOProfileData(pszSecName, L"szInyouKigou", StringBufferW(common.m_sFormat.m_szInyouKigou)); // 2001/06/14 asa-o 補完とキーワードヘルプはタイプ別に移動したので削除:3行 // 2002/09/21 Moca bGrepKanjiCode_AutoDetect は bGrepCharSetに統合したので削除 @@ -702,9 +702,9 @@ void CShareData_IO::ShareData_IO_Common( CDataProfile& cProfile ) cProfile.IOProfileData( pszSecName, LTEXT("bHokanKey_SPACE") , common.m_sHelper.m_bHokanKey_SPACE );/* VK_SPACE 補完決定キーが有効/無効 */ cProfile.IOProfileData( pszSecName, LTEXT("nDateFormatType") , common.m_sFormat.m_nDateFormatType );/* 日付書式のタイプ */ - cProfile.IOProfileData( pszSecName, LTEXT("szDateFormat") , MakeStringBufferW(common.m_sFormat.m_szDateFormat) );//日付書式 + cProfile.IOProfileData(pszSecName, L"szDateFormat", StringBufferW(common.m_sFormat.m_szDateFormat));//日付書式 cProfile.IOProfileData( pszSecName, LTEXT("nTimeFormatType") , common.m_sFormat.m_nTimeFormatType );/* 時刻書式のタイプ */ - cProfile.IOProfileData( pszSecName, LTEXT("szTimeFormat") , MakeStringBufferW(common.m_sFormat.m_szTimeFormat) );//時刻書式 + cProfile.IOProfileData(pszSecName, L"szTimeFormat", StringBufferW(common.m_sFormat.m_szTimeFormat));//時刻書式 cProfile.IOProfileData( pszSecName, LTEXT("bMenuIcon") , common.m_sWindow.m_bMenuIcon );//メニューにアイコンを表示する cProfile.IOProfileData( pszSecName, LTEXT("bAutoMIMEdecode") , common.m_sFile.m_bAutoMIMEdecode );//ファイル読み込み時にMIMEのdecodeを行うか @@ -729,8 +729,8 @@ void CShareData_IO::ShareData_IO_Common( CDataProfile& cProfile ) cProfile.IOProfileData( pszSecName, LTEXT("bFunclistSetFocusOnJump") , common.m_sOutline.m_bFunclistSetFocusOnJump ); // Apr. 05, 2003 genta ウィンドウキャプションのカスタマイズ - cProfile.IOProfileData( pszSecName, LTEXT("szWinCaptionActive") , MakeStringBufferW(common.m_sWindow.m_szWindowCaptionActive) ); - cProfile.IOProfileData( pszSecName, LTEXT("szWinCaptionInactive"), MakeStringBufferW(common.m_sWindow.m_szWindowCaptionInactive) ); + cProfile.IOProfileData(pszSecName, L"szWinCaptionActive", StringBufferW(common.m_sWindow.m_szWindowCaptionActive)); + cProfile.IOProfileData(pszSecName, L"szWinCaptionInactive", StringBufferW(common.m_sWindow.m_szWindowCaptionInactive)); // アウトライン/トピックリスト の位置とサイズを記憶 20060201 aroka cProfile.IOProfileData( pszSecName, LTEXT("bRememberOutlineWindowPos"), common.m_sOutline.m_bRememberOutlineWindowPos); @@ -749,7 +749,7 @@ void CShareData_IO::ShareData_IO_Common( CDataProfile& cProfile ) const WCHAR* pszForm = LTEXT("%d,%d,%d,%d"); WCHAR szKeyData[1024]; if( cProfile.IsReadingMode() ){ - if( cProfile.IOProfileData( pszSecName, pszKeyName, MakeStringBufferW(szKeyData)) ){ + if( cProfile.IOProfileData(pszSecName, pszKeyName, StringBufferW(szKeyData)) ){ int buf[4]; scan_ints( szKeyData, pszForm, buf ); common.m_sOutline.m_cxOutlineDockLeft = buf[0]; @@ -766,7 +766,7 @@ void CShareData_IO::ShareData_IO_Common( CDataProfile& cProfile ) common.m_sOutline.m_cxOutlineDockRight, common.m_sOutline.m_cyOutlineDockBottom ); - cProfile.IOProfileData( pszSecName, pszKeyName, MakeStringBufferW(szKeyData) ); + cProfile.IOProfileData(pszSecName, pszKeyName, StringBufferW(szKeyData)); } } cProfile.IOProfileData( pszSecName, LTEXT("nDockOutline"), common.m_sOutline.m_nDockOutline ); @@ -892,7 +892,7 @@ void CShareData_IO::ShareData_IO_Toolbar( CDataProfile& cProfile, CMenuDrawer* p // Plugin String Parametor if( cProfile.IsReadingMode() ){ //読み込み - cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(szText) ); + cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(szText)); if (wcschr(szText, L'/') == NULL) { // 番号 toolbar.m_nToolBarButtonIdxArr[i] = _wtoi( szText ); @@ -920,7 +920,7 @@ void CShareData_IO::ShareData_IO_Toolbar( CDataProfile& cProfile, CMenuDrawer* p cProfile.IOProfileData( pszSecName, szKeyName, nInvalid ); } else if (GetPlugCmdInfoByFuncCode( eFunc, szText )) { - cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(szText) ); + cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(szText)); } else { cProfile.IOProfileData( pszSecName, szKeyName, toolbar.m_nToolBarButtonIdxArr[i] ); @@ -965,7 +965,7 @@ void CShareData_IO::IO_CustMenu( CDataProfile& cProfile, CommonSetting_CustomMen for( i = 0; i < MAX_CUSTOM_MENU; ++i ){ auto_sprintf( szKeyName, LTEXT("szCMN[%02d]"), i ); - cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(menu.m_szCustMenuNameArr[i]) ); // Oct. 15, 2001 genta 最大長指定 + cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(menu.m_szCustMenuNameArr[i])); // Oct. 15, 2001 genta 最大長指定 auto_sprintf( szKeyName, LTEXT("bCMPOP[%02d]"), i ); cProfile.IOProfileData( pszSecName, szKeyName, menu.m_bCustMenuPopupArr[i] ); auto_sprintf( szKeyName, LTEXT("nCMIN[%02d]"), i ); @@ -976,14 +976,14 @@ void CShareData_IO::IO_CustMenu( CDataProfile& cProfile, CommonSetting_CustomMen // start マクロ名でも設定できるように 2008/5/24 Uchi auto_sprintf( szKeyName, LTEXT("nCMIF[%02d][%02d]"), i, j ); if (cProfile.IsReadingMode()) { - cProfile.IOProfileData(pszSecName, szKeyName, MakeStringBufferW(szFuncName)); + cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(szFuncName)); n = GetFunctionStrToFunctionCode(szFuncName); menu.m_nCustMenuItemFuncArr[i][j] = n; } else { if (GetPlugCmdInfoByFuncCode( menu.m_nCustMenuItemFuncArr[i][j], szFuncName)) { // Plugin - cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(szFuncName) ); + cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(szFuncName)); } else { if (bOutCmdName) { @@ -996,7 +996,7 @@ void CShareData_IO::IO_CustMenu( CDataProfile& cProfile, CommonSetting_CustomMen if ( p == NULL ) { auto_sprintf( szFuncName, L"%d", menu.m_nCustMenuItemFuncArr[i][j] ); } - cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(szFuncName) ); + cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(szFuncName)); } else { cProfile.IOProfileData_WrapInt( pszSecName, szKeyName, menu.m_nCustMenuItemFuncArr[i][j] ); @@ -1061,7 +1061,7 @@ void CShareData_IO::IO_KeyBind( CDataProfile& cProfile, CommonSetting_KeyBind& s int nKeyNameArrUsed = sKeyBind.m_nKeyNameArrNum; // 使用済み領域 if( cProfile.IsReadingMode() ){ - if (!cProfile.IOProfileData( szSecName, L"KeyBind[000]", MakeStringBufferW(szKeyData) ) ) { + if (!cProfile.IOProfileData(szSecName, L"KeyBind[000]", StringBufferW(szKeyData)) ) { bOldVer = true; } else { @@ -1080,7 +1080,7 @@ void CShareData_IO::IO_KeyBind( CDataProfile& cProfile, CommonSetting_KeyBind& s if (bOldVer) { KEYDATA& keydata = sKeyBind.m_pKeyNameArr[i]; wcscpy_s( szKeyName, keydata.m_szKeyName ); - if( cProfile.IOProfileData( szSecName, szKeyName, MakeStringBufferW(szKeyData) ) ){ + if( cProfile.IOProfileData(szSecName, szKeyName, StringBufferW(szKeyData)) ){ int buf[8]; scan_ints( szKeyData, LTEXT("%d,%d,%d,%d,%d,%d,%d,%d"), buf ); keydata.m_nFuncCodeArr[0] = (EFunctionCode)buf[0]; @@ -1096,7 +1096,7 @@ void CShareData_IO::IO_KeyBind( CDataProfile& cProfile, CommonSetting_KeyBind& s else { // 新バージョン(キー割り当てのImport,export の合わせた) 2008/5/25 Uchi KEYDATA tmpKeydata; auto_sprintf(szKeyName, L"KeyBind[%03d]", i); - if( cProfile.IOProfileData( szSecName, szKeyName, MakeStringBufferW(szKeyData) ) ){ + if( cProfile.IOProfileData(szSecName, szKeyName, StringBufferW(szKeyData)) ){ wchar_t *p; wchar_t *pn; int nRes; @@ -1165,7 +1165,7 @@ void CShareData_IO::IO_KeyBind( CDataProfile& cProfile, CommonSetting_KeyBind& s // keydata.m_nFuncCodeArr[6], // keydata.m_nFuncCodeArr[7] // ); - // cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(szKeyData) ); + // cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(szKeyData)); // start 新バージョン 2008/5/25 Uchi KEYDATA& keydata = sKeyBind.m_pKeyNameArr[i]; @@ -1208,7 +1208,7 @@ void CShareData_IO::IO_KeyBind( CDataProfile& cProfile, CommonSetting_KeyBind& s auto_sprintf(szWork, L",%s", keydata.m_szKeyName); } wcscat(szKeyData, szWork); - cProfile.IOProfileData( szSecName, szKeyName, MakeStringBufferW(szKeyData) ); + cProfile.IOProfileData(szSecName, szKeyName, StringBufferW(szKeyData)); // } } @@ -1238,7 +1238,7 @@ void CShareData_IO::ShareData_IO_Print( CDataProfile& cProfile ) auto_sprintf( szKeyName, LTEXT("PS[%02d].nInts"), i ); static const WCHAR* pszForm = LTEXT("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d"); if( cProfile.IsReadingMode() ){ - if( cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(szKeyData) ) ){ + if( cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(szKeyData)) ){ int buf[19]; scan_ints( szKeyData, pszForm, buf ); printsetting.m_nPrintFontWidth = buf[ 0]; @@ -1283,21 +1283,21 @@ void CShareData_IO::ShareData_IO_Print( CDataProfile& cProfile ) printsetting.m_bFooterUse[1]?1:0, printsetting.m_bFooterUse[2]?1:0 ); - cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(szKeyData) ); + cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(szKeyData)); } auto_sprintf( szKeyName, LTEXT("PS[%02d].szSName") , i ); - cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(printsetting.m_szPrintSettingName) ); + cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(printsetting.m_szPrintSettingName)); auto_sprintf( szKeyName, LTEXT("PS[%02d].szFF") , i ); - cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(printsetting.m_szPrintFontFaceHan) ); + cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(printsetting.m_szPrintFontFaceHan)); auto_sprintf( szKeyName, LTEXT("PS[%02d].szFFZ") , i ); - cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(printsetting.m_szPrintFontFaceZen) ); + cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(printsetting.m_szPrintFontFaceZen)); // ヘッダ/フッタ for( j = 0; j < 3; ++j ){ auto_sprintf( szKeyName, LTEXT("PS[%02d].szHF[%d]") , i, j ); - cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(printsetting.m_szHeaderForm[j]) ); + cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(printsetting.m_szHeaderForm[j])); auto_sprintf( szKeyName, LTEXT("PS[%02d].szFTF[%d]"), i, j ); - cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(printsetting.m_szFooterForm[j]) ); + cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(printsetting.m_szFooterForm[j])); } { // ヘッダ/フッタ フォント設定 WCHAR szKeyName2[64]; @@ -1315,11 +1315,11 @@ void CShareData_IO::ShareData_IO_Print( CDataProfile& cProfile ) } auto_sprintf( szKeyName, LTEXT("PS[%02d].szDriver"), i ); - cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(printsetting.m_mdmDevMode.m_szPrinterDriverName) ); + cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(printsetting.m_mdmDevMode.m_szPrinterDriverName)); auto_sprintf( szKeyName, LTEXT("PS[%02d].szDevice"), i ); - cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(printsetting.m_mdmDevMode.m_szPrinterDeviceName) ); + cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(printsetting.m_mdmDevMode.m_szPrinterDeviceName)); auto_sprintf( szKeyName, LTEXT("PS[%02d].szOutput"), i ); - cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(printsetting.m_mdmDevMode.m_szPrinterOutputName) ); + cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(printsetting.m_mdmDevMode.m_szPrinterOutputName)); // 2002.02.16 hor とりあえず旧設定を変換しとく if(0==wcscmp(printsetting.m_szHeaderForm[0],_EDITL("&f")) && @@ -1427,8 +1427,8 @@ static bool ShareData_IO_BlockComment( CDataProfile& cProfile, } bool ret = false; - if( cProfile.IOProfileData( pszSectionName, pszEntryKeyFrom, MakeStringBufferW( szFrom ) ) - && cProfile.IOProfileData( pszSectionName, pszEntryKeyTo, MakeStringBufferW( szTo ) ) ){ + if( cProfile.IOProfileData(pszSectionName, pszEntryKeyFrom, StringBufferW(szFrom)) + && cProfile.IOProfileData(pszSectionName, pszEntryKeyTo, StringBufferW(szTo)) ){ //対になる設定が揃った場合のみ有効 ret = true; } @@ -1465,7 +1465,7 @@ static bool ShareData_IO_LineComment( CDataProfile& cProfile, } bool ret = false; - if( cProfile.IOProfileData( pszSectionName, pszEntryKeyComment, MakeStringBufferW( lbuf ) ) + if( cProfile.IOProfileData(pszSectionName, pszEntryKeyComment, StringBufferW(lbuf)) && cProfile.IOProfileData( pszSectionName, pszEntryKeyColumn, pos ) ){ //対になる設定が揃った場合のみ有効 ret = true; @@ -1498,7 +1498,7 @@ void CShareData_IO::ShareData_IO_Type_One( CDataProfile& cProfile, STypeConfig& static const WCHAR* pszForm = LTEXT("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d"); //MIK wcscpy( szKeyName, LTEXT("nInts") ); if( cProfile.IsReadingMode() ){ - if( cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(szKeyData) ) ){ + if( cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(szKeyData)) ){ int buf[12]; scan_ints( szKeyData, pszForm, buf ); types.m_nIdx = buf[ 0]; @@ -1537,7 +1537,7 @@ void CShareData_IO::ShareData_IO_Type_One( CDataProfile& cProfile, STypeConfig& types.m_nCurrentPrintSetting, types.m_nTsvMode ); - cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(szKeyData) ); + cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(szKeyData)); } // 2005.01.13 MIK Keywordset 3-10 cProfile.IOProfileData( pszSecName, LTEXT("nKeywordSelect3"), types.m_nKeyWordSetIdx[2] ); @@ -1571,13 +1571,13 @@ void CShareData_IO::ShareData_IO_Type_One( CDataProfile& cProfile, STypeConfig& } } - cProfile.IOProfileData( pszSecName, LTEXT("szTypeName"), MakeStringBufferW(types.m_szTypeName) ); - cProfile.IOProfileData( pszSecName, LTEXT("szTypeExts"), MakeStringBufferW(types.m_szTypeExts) ); + cProfile.IOProfileData(pszSecName, L"szTypeName", StringBufferW(types.m_szTypeName)); + cProfile.IOProfileData(pszSecName, L"szTypeExts", StringBufferW(types.m_szTypeExts)); cProfile.IOProfileData( pszSecName, LTEXT("id"), types.m_id ); if( types.m_id < 0 ){ types.m_id *= -1; } - cProfile.IOProfileData( pszSecName, LTEXT("szTabViewString"), MakeStringBufferW(types.m_szTabViewString) ); + cProfile.IOProfileData(pszSecName, L"szTabViewString", StringBufferW(types.m_szTabViewString)); cProfile.IOProfileData_WrapInt( pszSecName, LTEXT("bTabArrow") , types.m_bTabArrow ); //@@@ 2003.03.26 MIK cProfile.IOProfileData( pszSecName, LTEXT("bInsSpace") , types.m_bInsSpace ); // 2001.12.03 hor @@ -1595,7 +1595,7 @@ void CShareData_IO::ShareData_IO_Type_One( CDataProfile& cProfile, STypeConfig& ShareData_IO_LineComment( cProfile, pszSecName, L"szLineComment2", L"nLineCommentColumn2", types.m_cLineComment, 1 ); ShareData_IO_LineComment( cProfile, pszSecName, L"szLineComment3", L"nLineCommentColumn3", types.m_cLineComment, 2 ); - cProfile.IOProfileData( pszSecName, LTEXT("szIndentChars") , MakeStringBufferW(types.m_szIndentChars) ); + cProfile.IOProfileData(pszSecName, L"szIndentChars", StringBufferW(types.m_szIndentChars)); cProfile.IOProfileData( pszSecName, LTEXT("cLineTermChar") , types.m_cLineTermChar ); cProfile.IOProfileData( pszSecName, LTEXT("bOutlineDockDisp") , types.m_bOutlineDockDisp );/* アウトライン解析表示の有無 */ @@ -1605,7 +1605,7 @@ void CShareData_IO::ShareData_IO_Type_One( CDataProfile& cProfile, STypeConfig& const WCHAR* pszForm = LTEXT("%d,%d,%d,%d"); WCHAR szKeyData[1024]; if( cProfile.IsReadingMode() ){ - if( cProfile.IOProfileData( pszSecName, pszKeyName, MakeStringBufferW(szKeyData)) ){ + if( cProfile.IOProfileData(pszSecName, pszKeyName, StringBufferW(szKeyData)) ){ int buf[4]; scan_ints( szKeyData, pszForm, buf ); types.m_cxOutlineDockLeft = buf[0]; @@ -1622,7 +1622,7 @@ void CShareData_IO::ShareData_IO_Type_One( CDataProfile& cProfile, STypeConfig& types.m_cxOutlineDockRight, types.m_cyOutlineDockBottom ); - cProfile.IOProfileData( pszSecName, pszKeyName, MakeStringBufferW(szKeyData) ); + cProfile.IOProfileData(pszSecName, pszKeyName, StringBufferW(szKeyData)); } } cProfile.IOProfileData_WrapInt( pszSecName, LTEXT("nDockOutline") , types.m_nDockOutline );/* アウトライン解析方法 */ @@ -1705,7 +1705,7 @@ void CShareData_IO::ShareData_IO_Type_One( CDataProfile& cProfile, STypeConfig& if( cProfile.IsReadingMode() ) { types.m_RegexKeywordArr[j].m_nColorIndex = COLORIDX_REGEX1; - if( cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(szKeyData)) ) + if( cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(szKeyData)) ) { p = wcschr(szKeyData, LTEXT(',')); if( p ) @@ -1738,7 +1738,7 @@ void CShareData_IO::ShareData_IO_Type_One( CDataProfile& cProfile, STypeConfig& auto_sprintf( szKeyData, LTEXT("%ls,%ls"), GetColorNameByIndex( types.m_RegexKeywordArr[j].m_nColorIndex ), &pKeyword[nPos]); - cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(szKeyData) ); + cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(szKeyData)); nPos += wcslen(&pKeyword[nPos]) + 1; } } @@ -1754,9 +1754,9 @@ void CShareData_IO::ShareData_IO_Type_One( CDataProfile& cProfile, STypeConfig& cProfile.IOProfileData( pszSecName, LTEXT("bKinsokuRet") , types.m_bKinsokuRet ); //@@@ 2002.04.13 MIK cProfile.IOProfileData( pszSecName, LTEXT("bKinsokuKuto") , types.m_bKinsokuKuto ); //@@@ 2002.04.17 MIK cProfile.IOProfileData( pszSecName, LTEXT("bKinsokuHide") , types.m_bKinsokuHide ); //2012/11/30 Uchi - cProfile.IOProfileData( pszSecName, LTEXT("szKinsokuHead") , MakeStringBufferW(types.m_szKinsokuHead) ); - cProfile.IOProfileData( pszSecName, LTEXT("szKinsokuTail") , MakeStringBufferW(types.m_szKinsokuTail) ); - cProfile.IOProfileData( pszSecName, LTEXT("szKinsokuKuto") , MakeStringBufferW(types.m_szKinsokuKuto) ); // 2009.08.07 ryoji + cProfile.IOProfileData(pszSecName, L"szKinsokuHead", StringBufferW(types.m_szKinsokuHead)); + cProfile.IOProfileData(pszSecName, L"szKinsokuTail", StringBufferW(types.m_szKinsokuTail)); + cProfile.IOProfileData(pszSecName, L"szKinsokuKuto", StringBufferW(types.m_szKinsokuKuto)); // 2009.08.07 ryoji cProfile.IOProfileData( pszSecName, LTEXT("bUseDocumentIcon") , types.m_bUseDocumentIcon ); // Sep. 19 ,2002 genta 変数名誤り修正 //@@@ 2006.04.10 fon ADD-start @@ -1775,7 +1775,7 @@ void CShareData_IO::ShareData_IO_Type_One( CDataProfile& cProfile, STypeConfig& types.m_KeyHelpArr[j].m_bUse = false; types.m_KeyHelpArr[j].m_szAbout[0] = L'\0'; types.m_KeyHelpArr[j].m_szPath[0] = L'\0'; - if( cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(szKeyData)) ){ + if( cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(szKeyData)) ){ pH = szKeyData; if( NULL != (pT=wcschr(pH, L',')) ){ *pT = L'\0'; @@ -1800,7 +1800,7 @@ void CShareData_IO::ShareData_IO_Type_One( CDataProfile& cProfile, STypeConfig& types.m_KeyHelpArr[j].m_szAbout, types.m_KeyHelpArr[j].m_szPath.c_str() ); - cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(szKeyData) ); + cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(szKeyData)); } } } @@ -1855,7 +1855,7 @@ void CShareData_IO::ShareData_IO_KeyWords( CDataProfile& cProfile ) int nKeyWordNum = 0; //値の取得 auto_sprintf( szKeyName, LTEXT("szSN[%02d]"), i ); - cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(szKeyData) ); + cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(szKeyData)); auto_sprintf( szKeyName, LTEXT("nCASE[%02d]"), i ); cProfile.IOProfileData( pszSecName, szKeyName, bKEYWORDCASE ); auto_sprintf( szKeyName, LTEXT("nKWN[%02d]"), i ); @@ -1874,7 +1874,7 @@ void CShareData_IO::ShareData_IO_KeyWords( CDataProfile& cProfile ) int nSize = pCKeyWordSetMgr->m_nKeyWordSetNum; for( i = 0; i < nSize; ++i ){ auto_sprintf( szKeyName, LTEXT("szSN[%02d]"), i ); - cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(pCKeyWordSetMgr->m_szSetNameArr[i]) ); + cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(pCKeyWordSetMgr->m_szSetNameArr[i])); auto_sprintf( szKeyName, LTEXT("nCASE[%02d]"), i ); cProfile.IOProfileData( pszSecName, szKeyName, pCKeyWordSetMgr->m_bKEYWORDCASEArr[i] ); auto_sprintf( szKeyName, LTEXT("nKWN[%02d]"), i ); @@ -1899,7 +1899,7 @@ void CShareData_IO::ShareData_IO_KeyWords( CDataProfile& cProfile ) } *pMem = L'\0'; auto_sprintf( szKeyName, LTEXT("szKW[%02d]"), i ); - cProfile.IOProfileData( pszSecName, szKeyName, StringBufferW(pszMem,nMemLen) ); + cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(pszMem, nMemLen)); delete [] pszMem; } } @@ -1924,9 +1924,9 @@ void CShareData_IO::ShareData_IO_Macro( CDataProfile& cProfile ) // 2002.02.08 hor 未定義値を無視 if( !cProfile.IsReadingMode() && macrorec.m_szName[0] == L'\0' && macrorec.m_szFile[0] == L'\0' ) continue; auto_sprintf( szKeyName, LTEXT("Name[%03d]"), i ); - cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(macrorec.m_szName) ); + cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(macrorec.m_szName)); auto_sprintf( szKeyName, LTEXT("File[%03d]"), i ); - cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(macrorec.m_szFile) ); + cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(macrorec.m_szFile)); auto_sprintf( szKeyName, LTEXT("ReloadWhenExecute[%03d]"), i ); cProfile.IOProfileData( pszSecName, szKeyName, macrorec.m_bReloadWhenExecute ); } @@ -1984,9 +1984,9 @@ void CShareData_IO::ShareData_IO_Plugin( CDataProfile& cProfile, CMenuDrawer* pc pluginrec.m_szId[0] = L'\0'; } auto_sprintf( szKeyName, LTEXT("P[%02d].Name"), i ); - cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(pluginrec.m_szName) ); + cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(pluginrec.m_szName)); auto_sprintf( szKeyName, LTEXT("P[%02d].Id"), i ); - cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW(pluginrec.m_szId) ); + cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(pluginrec.m_szId)); auto_sprintf( szKeyName, LTEXT("P[%02d].CmdNum"), i ); cProfile.IOProfileData( pszSecName, szKeyName, pluginrec.m_nCmdNum ); // 2010/7/4 Uchi pluginrec.m_state = ( pluginrec.m_szId[0] == '\0' ? PLS_NONE : PLS_STOPPED ); @@ -2196,7 +2196,7 @@ void CShareData_IO::IO_MainMenu( CDataProfile& cProfile, std::vectorm_sKey, pcMenu->m_nFunc == F_NODE ? pcMenu->m_sName : L"" ); - cProfile.IOProfileData( pszSecName, szKeyName, MakeStringBufferW( szLine ) ); + cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(szLine)); } if (cProfile.IsReadingMode() && pcMenu->m_nLevel == 0) { @@ -2313,7 +2313,7 @@ void CShareData_IO::ShareData_IO_Other( CDataProfile& cProfile ) /* CTAGS */ //@@@ 2003.05.12 MIK cProfile.IOProfileData( pszSecName, LTEXT("nTagsOpt") , pShare->m_nTagsOpt ); - cProfile.IOProfileData( pszSecName, LTEXT("szTagsCmdLine") , MakeStringBufferW(pShare->m_szTagsCmdLine) ); + cProfile.IOProfileData(pszSecName, L"szTagsCmdLine", StringBufferW(pShare->m_szTagsCmdLine)); //From Here 2005.04.03 MIK キーワード指定タグジャンプ cProfile.IOProfileData( pszSecName, LTEXT("_TagJumpKeyword_Counts"), pShare->m_sTagJump.m_aTagJumpKeywords._GetSizeRef() ); @@ -2338,7 +2338,7 @@ void CShareData_IO::ShareData_IO_Other( CDataProfile& cProfile ) LOWORD( pShare->m_sVersion.m_dwProductVersionMS ), HIWORD( pShare->m_sVersion.m_dwProductVersionLS ), LOWORD( pShare->m_sVersion.m_dwProductVersionLS ) ); - cProfile.IOProfileData( pszSecName, LTEXT("szVersion"), MakeStringBufferW(iniVer) ); + cProfile.IOProfileData(pszSecName, L"szVersion", StringBufferW(iniVer)); // 共有メモリバージョン 2010/5/20 Uchi int nStructureVersion; @@ -2367,7 +2367,7 @@ void CShareData_IO::IO_ColorSet( CDataProfile* pcProfile, const WCHAR* pszSecNam static const WCHAR* pszForm = LTEXT("%d,%d,%06x,%06x,%d"); auto_sprintf( szKeyName, LTEXT("C[%s]"), g_ColorAttributeArr[j].szName ); //Stonee, 2001/01/12, 2001/01/15 if( pcProfile->IsReadingMode() ){ - if( pcProfile->IOProfileData( pszSecName, szKeyName, MakeStringBufferW(szKeyData) ) ){ + if( pcProfile->IOProfileData(pszSecName, szKeyName, StringBufferW(szKeyData)) ){ int buf[5]; scan_ints( szKeyData, pszForm, buf); pColorInfoArr[j].m_bDisp = (buf[0]!=0); @@ -2401,7 +2401,7 @@ void CShareData_IO::IO_ColorSet( CDataProfile* pcProfile, const WCHAR* pszSecNam pColorInfoArr[j].m_sColorAttr.m_cBACK, pColorInfoArr[j].m_sFontAttr.m_bUnderLine?1:0 ); - pcProfile->IOProfileData( pszSecName, szKeyName, MakeStringBufferW(szKeyData) ); + pcProfile->IOProfileData(pszSecName, szKeyName, StringBufferW(szKeyData)); } } } @@ -2417,7 +2417,7 @@ void ShareData_IO_Sub_LogFont( CDataProfile& cProfile, const WCHAR* pszSecName, cProfile.IOProfileData( pszSecName, pszKeyPointSize, nPointSize ); // 2009.10.01 ryoji if( cProfile.IsReadingMode() ){ - if( cProfile.IOProfileData( pszSecName, pszKeyLf, MakeStringBufferW(szKeyData) ) ){ + if( cProfile.IOProfileData(pszSecName, pszKeyLf, StringBufferW(szKeyData)) ){ int buf[13]; scan_ints( szKeyData, pszForm, buf ); lf.lfHeight = buf[ 0]; @@ -2458,10 +2458,10 @@ void ShareData_IO_Sub_LogFont( CDataProfile& cProfile, const WCHAR* pszSecName, lf.lfQuality, lf.lfPitchAndFamily ); - cProfile.IOProfileData( pszSecName, pszKeyLf, MakeStringBufferW(szKeyData) ); + cProfile.IOProfileData(pszSecName, pszKeyLf, StringBufferW(szKeyData)); } - cProfile.IOProfileData( pszSecName, pszKeyFaceName, MakeStringBufferW(lf.lfFaceName) ); + cProfile.IOProfileData(pszSecName, pszKeyFaceName, StringBufferW(lf.lfFaceName)); } void CShareData_IO::ShareData_IO_FileTree( CDataProfile& cProfile, SFileTree& fileTree, const WCHAR* pszSecName ) diff --git a/sakura_core/typeprop/CImpExpManager.cpp b/sakura_core/typeprop/CImpExpManager.cpp index 3305fffa55..0f5d23f8be 100644 --- a/sakura_core/typeprop/CImpExpManager.cpp +++ b/sakura_core/typeprop/CImpExpManager.cpp @@ -257,7 +257,7 @@ bool CImpExpType::ImportAscertain( HINSTANCE hInstance, HWND hwndParent, const w } if ((unsigned int)nStructureVersion != m_pShareData->m_vStructureVersion) { wcscpy( szKeyVersion, L"?" ); - m_cProfile.IOProfileData( szSecInfo, szKeyVersion, MakeStringBufferW( szKeyVersion ) ); + m_cProfile.IOProfileData(szSecInfo, szKeyVersion, StringBufferW(szKeyVersion)); int nRet = ConfirmMessage( hwndParent, LS(STR_IMPEXP_VER), GSTR_APPNAME, szKeyVersion, nStructureVersion ); @@ -277,7 +277,7 @@ bool CImpExpType::ImportAscertain( HINSTANCE hInstance, HWND hwndParent, const w List_GetText( m_hwndList, m_nIdx, szLabel ); sAscertainInfo.sTypeNameTo = szLabel; szLabel[0] = L'\0'; - m_cProfile.IOProfileData( szSecTypes, L"szTypeName", MakeStringBufferW( szLabel )); + m_cProfile.IOProfileData(szSecTypes, L"szTypeName", StringBufferW(szLabel)); sAscertainInfo.sTypeNameFile = szLabel; // 確認 @@ -361,7 +361,7 @@ bool CImpExpType::Import( const wstring& sFileName, wstring& sErrMsg ) for (i=0; i < MAX_KEYWORDSET_PER_TYPE; i++) { //types.m_nKeyWordSetIdx[i] = -1; auto_sprintf( szKeyName, szKeyKeywordTemp, i+1 ); - if (m_cProfile.IOProfileData( szSecTypeEx, szKeyName, MakeStringBufferW( szKeyData ))) { + if (m_cProfile.IOProfileData(szSecTypeEx, szKeyName, StringBufferW(szKeyData))) { nIdx = cKeyWordSetMgr.SearchKeyWordSet( szKeyData ); if (nIdx < 0) { // エントリ作成 @@ -378,7 +378,7 @@ bool CImpExpType::Import( const wstring& sFileName, wstring& sErrMsg ) auto_sprintf( szKeyName, szKeyKeywordFileTemp, i+1 ); szFileName[0] = L'\0'; - if (m_cProfile.IOProfileData( szSecTypeEx, szKeyName, MakeStringBufferW( szFileName ))) { + if (m_cProfile.IOProfileData(szSecTypeEx, szKeyName, StringBufferW(szFileName))) { if( cImpExpKeyWord.Import( cImpExpKeyWord.MakeFullPath( szFileName ), TmpMsg )) { files += wstring(L"\n") + szFileName; } else { @@ -393,7 +393,7 @@ bool CImpExpType::Import( const wstring& sFileName, wstring& sErrMsg ) // Plugin // アウトライン解析方法 CommonSetting_Plugin& plugin = common.m_sPlugin; - if (m_cProfile.IOProfileData( szSecTypeEx, szKeyPluginOutlineId, MakeStringBufferW( szKeyData ))) { + if (m_cProfile.IOProfileData(szSecTypeEx, szKeyPluginOutlineId, StringBufferW(szKeyData))) { nDataLen = wcslen( szKeyData ); pSlashPos = wcschr( szKeyData, L'/' ); nIdx = -1; @@ -414,7 +414,7 @@ bool CImpExpType::Import( const wstring& sFileName, wstring& sErrMsg ) } } // スマートインデント - if (m_cProfile.IOProfileData( szSecTypeEx, szKeyPluginSmartIndentId, MakeStringBufferW( szKeyData ))) { + if (m_cProfile.IOProfileData(szSecTypeEx, szKeyPluginSmartIndentId, StringBufferW(szKeyData))) { nDataLen = wcslen( szKeyData ); pSlashPos = wcschr( szKeyData, L'/' ); nIdx = -1; @@ -468,7 +468,7 @@ bool CImpExpType::Export( const wstring& sFileName, wstring& sErrMsg ) nIdx = m_Types.m_nKeyWordSetIdx[i]; auto_sprintf( szKeyName, szKeyKeywordTemp, i+1 ); wcscpy( buff, cKeyWordSetMgr.GetTypeName( nIdx )); - cProfile.IOProfileData( szSecTypeEx, szKeyName, MakeStringBufferW( buff )); + cProfile.IOProfileData(szSecTypeEx, szKeyName, StringBufferW(buff)); // 大文字小文字区別 bCase = common.m_sSpecialKeyword.m_CKeyWordSetMgr.GetKeyWordCase( nIdx ); @@ -480,7 +480,7 @@ bool CImpExpType::Export( const wstring& sFileName, wstring& sErrMsg ) if ( cImpExpKeyWord.Export( cImpExpKeyWord.GetFullPath(), sTmpMsg ) ) { wcscpy( szFileName, cImpExpKeyWord.GetFileName().c_str()); auto_sprintf( szKeyName, szKeyKeywordFileTemp, i+1 ); - if (cProfile.IOProfileData( szSecTypeEx, szKeyName, MakeStringBufferW( szFileName ))) { + if (cProfile.IOProfileData(szSecTypeEx, szKeyName, StringBufferW(szFileName))) { files += wstring( L"\n" ) + cImpExpKeyWord.GetFileName(); } } @@ -497,25 +497,25 @@ bool CImpExpType::Export( const wstring& sFileName, wstring& sErrMsg ) int nPlug; wchar_t szId[ MAX_PLUGIN_ID + 1 + 2 ]; if ((nPIdx = CPlug::GetPluginId( static_cast( m_Types.m_eDefaultOutline ))) >= 0) { - cProfile.IOProfileData( szSecTypeEx, szKeyPluginOutlineName, MakeStringBufferW(plugin.m_PluginTable[nPIdx].m_szName)); + cProfile.IOProfileData(szSecTypeEx, szKeyPluginOutlineName, StringBufferW(plugin.m_PluginTable[nPIdx].m_szName)); wcscpyn( szId, plugin.m_PluginTable[nPIdx].m_szId, _countof(szId) ); if( (nPlug = CPlug::GetPlugId( static_cast( m_Types.m_eDefaultOutline ))) != 0 ){ wchar_t szPlug[8]; _swprintf( szPlug, L"/%d", nPlug ); wcscat( szId, szPlug ); } - cProfile.IOProfileData( szSecTypeEx, szKeyPluginOutlineId, MakeStringBufferW(szId) ); + cProfile.IOProfileData(szSecTypeEx, szKeyPluginOutlineId, StringBufferW(szId)); } // スマートインデント if ((nPIdx = CPlug::GetPluginId( static_cast( m_Types.m_eSmartIndent ))) >= 0) { - cProfile.IOProfileData( szSecTypeEx, szKeyPluginSmartIndentName, MakeStringBufferW(plugin.m_PluginTable[nPIdx].m_szName)); + cProfile.IOProfileData(szSecTypeEx, szKeyPluginSmartIndentName, StringBufferW(plugin.m_PluginTable[nPIdx].m_szName)); wcscpyn( szId, plugin.m_PluginTable[nPIdx].m_szId, _countof(szId) ); if( (nPlug = CPlug::GetPlugId( static_cast( m_Types.m_eSmartIndent ))) != 0 ){ wchar_t szPlug[8]; _swprintf( szPlug, L"/%d", nPlug ); wcscat( szId, szPlug ); } - cProfile.IOProfileData( szSecTypeEx, szKeyPluginSmartIndentId, MakeStringBufferW(szId) ); + cProfile.IOProfileData(szSecTypeEx, szKeyPluginSmartIndentId, StringBufferW(szId)); } // Version @@ -527,7 +527,7 @@ bool CImpExpType::Export( const wstring& sFileName, wstring& sErrMsg ) LOWORD( pShare->m_sVersion.m_dwProductVersionMS ), HIWORD( pShare->m_sVersion.m_dwProductVersionLS ), LOWORD( pShare->m_sVersion.m_dwProductVersionLS ) ); - cProfile.IOProfileData( szSecInfo, szKeyVersion, MakeStringBufferW(wbuff) ); + cProfile.IOProfileData(szSecInfo, szKeyVersion, StringBufferW(wbuff)); nStructureVersion = int(pShare->m_vStructureVersion); cProfile.IOProfileData( szSecInfo, szKeyStructureVersion, nStructureVersion ); @@ -885,7 +885,7 @@ bool CImpExpKeybind::Import( const wstring& sFileName, wstring& sErrMsg ) bVer4 = false; bVer3 = false; bVer2 = false; - in.IOProfileData(szSecInfo, L"KEYBIND_VERSION", MakeStringBufferW(szHeader)); + in.IOProfileData(szSecInfo, L"KEYBIND_VERSION", StringBufferW(szHeader)); if(wcscmp(szHeader,WSTR_KEYBIND_HEAD4)==0) bVer4=true; else if(wcscmp(szHeader,WSTR_KEYBIND_HEAD3)==0) bVer3=true; @@ -1070,7 +1070,7 @@ bool CImpExpCustMenu::Import( const wstring& sFileName, wstring& sErrMsg ) //バージョン確認 WCHAR szHeader[256]; - cProfile.IOProfileData(szSecInfo, L"MENU_VERSION", MakeStringBufferW(szHeader)); + cProfile.IOProfileData(szSecInfo, L"MENU_VERSION", StringBufferW(szHeader)); if(wcscmp(szHeader, WSTR_CUSTMENU_HEAD_V2)!=0) { sErrMsg = wstring(LS(STR_IMPEXP_CUSTMENU_FORMAT)) + sFileName; return false; @@ -1105,7 +1105,7 @@ bool CImpExpCustMenu::Export( const wstring& sFileName, wstring& sErrMsg ) cProfile.SetWritingMode(); //ヘッダ - cProfile.IOProfileData( szSecInfo, L"MENU_VERSION", MakeStringBufferW(WSTR_CUSTMENU_HEAD_V2) ); + cProfile.IOProfileData(szSecInfo, L"MENU_VERSION", StringBufferW(WSTR_CUSTMENU_HEAD_V2)); int iWork = MAX_CUSTOM_MENU; cProfile.IOProfileData_WrapInt( szSecInfo, L"MAX_CUSTOM_MENU", iWork ); @@ -1234,7 +1234,7 @@ bool CImpExpMainMenu::Import( const wstring& sFileName, wstring& sErrMsg ) //バージョン確認 WCHAR szHeader[256]; - cProfile.IOProfileData(szSecInfo, L"MENU_VERSION", MakeStringBufferW(szHeader)); + cProfile.IOProfileData(szSecInfo, L"MENU_VERSION", StringBufferW(szHeader)); if(wcscmp(szHeader, WSTR_MAINMENU_HEAD_V1)!=0) { sErrMsg = wstring(LS(STR_IMPEXP_MEINMENU)) + sFileName; return false; @@ -1268,7 +1268,7 @@ bool CImpExpMainMenu::Export( const wstring& sFileName, wstring& sErrMsg ) cProfile.SetWritingMode(); //ヘッダ - cProfile.IOProfileData( szSecInfo, L"MENU_VERSION", MakeStringBufferW(WSTR_MAINMENU_HEAD_V1) ); + cProfile.IOProfileData(szSecInfo, L"MENU_VERSION", StringBufferW(WSTR_MAINMENU_HEAD_V1)); //内容 CShareData_IO::IO_MainMenu(cProfile, *menu, true); From b582c83e58a5e9c8a54e842e3c0a70d64e86c47a Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 21 Feb 2021 18:53:55 +0900 Subject: [PATCH 0454/1024] =?UTF-8?q?IOProfileData=5FWrapInt=E3=82=92?= =?UTF-8?q?=E5=BB=83=E6=AD=A2=E3=81=97=E3=81=A6=E3=82=B3=E3=83=BC=E3=83=89?= =?UTF-8?q?=E8=A8=98=E8=BF=B0=E3=82=92=E3=82=B7=E3=83=B3=E3=83=97=E3=83=AB?= =?UTF-8?q?=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CDataProfile.h | 8 ----- sakura_core/env/CShareData_IO.cpp | 46 ++++++++++++------------- sakura_core/typeprop/CImpExpManager.cpp | 4 +-- 3 files changed, 25 insertions(+), 33 deletions(-) diff --git a/sakura_core/CDataProfile.h b/sakura_core/CDataProfile.h index 0233cbd805..e6df79f643 100644 --- a/sakura_core/CDataProfile.h +++ b/sakura_core/CDataProfile.h @@ -345,14 +345,6 @@ class CDataProfile : public CProfile { std::wstring_view entryKey, //!< [in] エントリ名 StringBufferW&& refEntryValue //!< [in,out] エントリ値 ); - - //2007.08.14 kobake 追加 - //! intを介して任意型の入出力を行う - template - bool IOProfileData_WrapInt( const std::wstring& strSectionName, const std::wstring& strEntryKey, T& nEntryValue) - { - return IOProfileData(strSectionName, strEntryKey, nEntryValue); - } }; #endif /* SAKURA_CDATAPROFILE_401640FD_5B27_454A_B0DE_098E1C4FAEAD_H_ */ diff --git a/sakura_core/env/CShareData_IO.cpp b/sakura_core/env/CShareData_IO.cpp index 16a06de26c..93bbae291c 100644 --- a/sakura_core/env/CShareData_IO.cpp +++ b/sakura_core/env/CShareData_IO.cpp @@ -227,7 +227,7 @@ void CShareData_IO::ShareData_IO_Mru( CDataProfile& cProfile ) auto_sprintf( szKeyName, LTEXT("MRU[%02d].nY"), i ); cProfile.IOProfileData( pszSecName, szKeyName, pfiWork->m_ptCursor.y ); auto_sprintf( szKeyName, LTEXT("MRU[%02d].nCharCode"), i ); - cProfile.IOProfileData_WrapInt( pszSecName, szKeyName, pfiWork->m_nCharCode ); + cProfile.IOProfileData(pszSecName, szKeyName, pfiWork->m_nCharCode); auto_sprintf( szKeyName, LTEXT("MRU[%02d].szPath"), i ); cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(pfiWork->m_szPath)); auto_sprintf( szKeyName, LTEXT("MRU[%02d].szMark2"), i ); @@ -507,7 +507,7 @@ void CShareData_IO::ShareData_IO_Common( CDataProfile& cProfile ) // 2002.01.16 hor cProfile.IOProfileData( pszSecName, LTEXT("m_bRestoreBookmarks") , common.m_sFile.m_bRestoreBookmarks ); cProfile.IOProfileData( pszSecName, LTEXT("bAddCRLFWhenCopy") , common.m_sEdit.m_bAddCRLFWhenCopy ); - cProfile.IOProfileData_WrapInt( pszSecName, LTEXT("eOpenDialogDir") , common.m_sEdit.m_eOpenDialogDir ); + cProfile.IOProfileData(pszSecName, L"eOpenDialogDir", common.m_sEdit.m_eOpenDialogDir ); cProfile.IOProfileData(pszSecName, L"szOpenDialogSelDir", common.m_sEdit.m_OpenDialogSelDir); cProfile.IOProfileData( pszSecName, LTEXT("bBoxSelectLock") , common.m_sEdit.m_bBoxSelectLock ); cProfile.IOProfileData( pszSecName, LTEXT("bVistaStyleFileDialog") , common.m_sEdit.m_bVistaStyleFileDialog ); @@ -536,7 +536,7 @@ void CShareData_IO::ShareData_IO_Common( CDataProfile& cProfile ) cProfile.IOProfileData( pszSecName, LTEXT("bGrepBackup") , common.m_sSearch.m_bGrepBackup ); // 2002/09/21 Moca 追加 - cProfile.IOProfileData_WrapInt( pszSecName, LTEXT("nGrepCharSet") , common.m_sSearch.m_nGrepCharSet ); + cProfile.IOProfileData(pszSecName, L"nGrepCharSet", common.m_sSearch.m_nGrepCharSet ); cProfile.IOProfileData( pszSecName, LTEXT("bGrepRealTime") , common.m_sSearch.m_bGrepRealTimeView ); // 2003.06.16 Moca cProfile.IOProfileData( pszSecName, LTEXT("bCaretTextForSearch") , common.m_sSearch.m_bCaretTextForSearch ); // 2006.08.23 ryoji カーソル位置の文字列をデフォルトの検索文字列にする cProfile.IOProfileData( pszSecName, LTEXT("m_bInheritKeyOtherView") , common.m_sSearch.m_bInheritKeyOtherView ); @@ -586,7 +586,7 @@ void CShareData_IO::ShareData_IO_Common( CDataProfile& cProfile ) cProfile.IOProfileData( pszSecName, LTEXT("bBackUpDustBox") , common.m_sBackup.m_bBackUpDustBox ); //@@@ 2001.12.11 add MIK cProfile.IOProfileData( pszSecName, LTEXT("bBackUpPathAdvanced") , common.m_sBackup.m_bBackUpPathAdvanced ); /* 20051107 aroka */ cProfile.IOProfileData( pszSecName, LTEXT("szBackUpPathAdvanced") , common.m_sBackup.m_szBackUpPathAdvanced ); /* 20051107 aroka */ - cProfile.IOProfileData_WrapInt( pszSecName, LTEXT("nFileShareMode") , common.m_sFile.m_nFileShareMode ); + cProfile.IOProfileData(pszSecName, L"nFileShareMode", common.m_sFile.m_nFileShareMode ); cProfile.IOProfileData(pszSecName, L"szExtHelp", StringBufferW(common.m_sHelper.m_szExtHelp)); cProfile.IOProfileData(pszSecName, L"szExtHtmlHelp", StringBufferW(common.m_sHelper.m_szExtHtmlHelp)); @@ -619,7 +619,7 @@ void CShareData_IO::ShareData_IO_Common( CDataProfile& cProfile ) cProfile.IOProfileData(pszSecName, L"szTabWndCaption", StringBufferW(common.m_sTabBar.m_szTabWndCaption)); //@@@ 2003.06.13 MIK cProfile.IOProfileData( pszSecName, LTEXT("bSameTabWidth") , common.m_sTabBar.m_bSameTabWidth ); // 2006.01.28 ryoji タブを等幅にする cProfile.IOProfileData( pszSecName, LTEXT("bDispTabIcon") , common.m_sTabBar.m_bDispTabIcon ); // 2006.01.28 ryoji タブにアイコンを表示する - cProfile.IOProfileData_WrapInt( pszSecName, LTEXT("bDispTabClose") , common.m_sTabBar.m_bDispTabClose ); // 2012.04.14 syat + cProfile.IOProfileData(pszSecName, L"bDispTabClose", common.m_sTabBar.m_bDispTabClose ); // 2012.04.14 syat cProfile.IOProfileData( pszSecName, LTEXT("bSortTabList") , common.m_sTabBar.m_bSortTabList ); // 2006.05.10 ryoji タブ一覧をソートする cProfile.IOProfileData( pszSecName, LTEXT("bTab_RetainEmptyWin") , common.m_sTabBar.m_bTab_RetainEmptyWin ); // 最後のファイルが閉じられたとき(無題)を残す // 2007.02.11 genta cProfile.IOProfileData( pszSecName, LTEXT("bTab_CloseOneWin") , common.m_sTabBar.m_bTab_CloseOneWin ); // タブモードでもウィンドウの閉じるボタンで現在のファイルのみ閉じる // 2007.02.11 genta @@ -627,7 +627,7 @@ void CShareData_IO::ShareData_IO_Common( CDataProfile& cProfile ) cProfile.IOProfileData( pszSecName, LTEXT("bChgWndByWheel") , common.m_sTabBar.m_bChgWndByWheel ); // 2006.03.26 ryoji マウスホイールでウィンドウ切り替え cProfile.IOProfileData( pszSecName, LTEXT("bNewWindow") , common.m_sTabBar.m_bNewWindow ); // 外部から起動するときは新しいウインドウで開く cProfile.IOProfileData( pszSecName, L"bTabMultiLine" , common.m_sTabBar.m_bTabMultiLine ); // タブ多段 - cProfile.IOProfileData_WrapInt( pszSecName, L"eTabPosition" , common.m_sTabBar.m_eTabPosition ); // タブ位置 + cProfile.IOProfileData(pszSecName, L"eTabPosition", common.m_sTabBar.m_eTabPosition ); // タブ位置 ShareData_IO_Sub_LogFont( cProfile, pszSecName, L"lfTabFont", L"lfTabFontPs", L"lfTabFaceName", common.m_sTabBar.m_lf, common.m_sTabBar.m_nPointSize ); @@ -646,12 +646,12 @@ void CShareData_IO::ShareData_IO_Common( CDataProfile& cProfile ) // 2001/06/14 asa-o 補完とキーワードヘルプはタイプ別に移動したので削除:3行 // 2002/09/21 Moca bGrepKanjiCode_AutoDetect は bGrepCharSetに統合したので削除 // 2001/06/19 asa-o タイプ別に移動したので削除:1行 - cProfile.IOProfileData_WrapInt( pszSecName, LTEXT("bSaveWindowSize"), common.m_sWindow.m_eSaveWindowSize ); //#####フラグ名が激しくきもい + cProfile.IOProfileData(pszSecName, L"bSaveWindowSize", common.m_sWindow.m_eSaveWindowSize ); //#####フラグ名が激しくきもい cProfile.IOProfileData( pszSecName, LTEXT("nWinSizeType") , common.m_sWindow.m_nWinSizeType ); cProfile.IOProfileData( pszSecName, LTEXT("nWinSizeCX") , common.m_sWindow.m_nWinSizeCX ); cProfile.IOProfileData( pszSecName, LTEXT("nWinSizeCY") , common.m_sWindow.m_nWinSizeCY ); // 2004.03.30 Moca *nWinPos*を追加 - cProfile.IOProfileData_WrapInt( pszSecName, LTEXT("nSaveWindowPos") , common.m_sWindow.m_eSaveWindowPos ); //#####フラグ名がきもい + cProfile.IOProfileData(pszSecName, L"nSaveWindowPos", common.m_sWindow.m_eSaveWindowPos ); //#####フラグ名がきもい cProfile.IOProfileData( pszSecName, LTEXT("nWinPosX") , common.m_sWindow.m_nWinPosX ); cProfile.IOProfileData( pszSecName, LTEXT("nWinPosY") , common.m_sWindow.m_nWinPosY ); cProfile.IOProfileData( pszSecName, LTEXT("bTaskTrayUse") , common.m_sGeneral.m_bUseTaskTray ); @@ -743,7 +743,7 @@ void CShareData_IO::ShareData_IO_Common( CDataProfile& cProfile ) cProfile.IOProfileData( pszSecName, LTEXT("nOutlineDockSet"), common.m_sOutline.m_nOutlineDockSet ); cProfile.IOProfileData( pszSecName, LTEXT("bOutlineDockSync"), common.m_sOutline.m_bOutlineDockSync ); cProfile.IOProfileData( pszSecName, LTEXT("bOutlineDockDisp"), common.m_sOutline.m_bOutlineDockDisp ); - cProfile.IOProfileData_WrapInt( pszSecName, LTEXT("eOutlineDockSide"), common.m_sOutline.m_eOutlineDockSide ); + cProfile.IOProfileData(pszSecName, L"eOutlineDockSide", common.m_sOutline.m_eOutlineDockSide ); { const WCHAR* pszKeyName = LTEXT("xyOutlineDock"); const WCHAR* pszForm = LTEXT("%d,%d,%d,%d"); @@ -999,7 +999,7 @@ void CShareData_IO::IO_CustMenu( CDataProfile& cProfile, CommonSetting_CustomMen cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(szFuncName)); } else { - cProfile.IOProfileData_WrapInt( pszSecName, szKeyName, menu.m_nCustMenuItemFuncArr[i][j] ); + cProfile.IOProfileData(pszSecName, szKeyName, menu.m_nCustMenuItemFuncArr[i][j]); } } } @@ -1578,7 +1578,7 @@ void CShareData_IO::ShareData_IO_Type_One( CDataProfile& cProfile, STypeConfig& types.m_id *= -1; } cProfile.IOProfileData(pszSecName, L"szTabViewString", StringBufferW(types.m_szTabViewString)); - cProfile.IOProfileData_WrapInt( pszSecName, LTEXT("bTabArrow") , types.m_bTabArrow ); //@@@ 2003.03.26 MIK + cProfile.IOProfileData(pszSecName, L"bTabArrow", types.m_bTabArrow ); //@@@ 2003.03.26 MIK cProfile.IOProfileData( pszSecName, LTEXT("bInsSpace") , types.m_bInsSpace ); // 2001.12.03 hor cProfile.IOProfileData( pszSecName, LTEXT("nTextWrapMethod"), types.m_nTextWrapMethod ); // 2008.05.30 nasukoji @@ -1599,7 +1599,7 @@ void CShareData_IO::ShareData_IO_Type_One( CDataProfile& cProfile, STypeConfig& cProfile.IOProfileData( pszSecName, LTEXT("cLineTermChar") , types.m_cLineTermChar ); cProfile.IOProfileData( pszSecName, LTEXT("bOutlineDockDisp") , types.m_bOutlineDockDisp );/* アウトライン解析表示の有無 */ - cProfile.IOProfileData_WrapInt( pszSecName, LTEXT("eOutlineDockSide") , types.m_eOutlineDockSide );/* アウトライン解析ドッキング配置 */ + cProfile.IOProfileData(pszSecName, L"eOutlineDockSide", types.m_eOutlineDockSide );/* アウトライン解析ドッキング配置 */ { const WCHAR* pszKeyName = LTEXT("xyOutlineDock"); const WCHAR* pszForm = LTEXT("%d,%d,%d,%d"); @@ -1625,14 +1625,14 @@ void CShareData_IO::ShareData_IO_Type_One( CDataProfile& cProfile, STypeConfig& cProfile.IOProfileData(pszSecName, pszKeyName, StringBufferW(szKeyData)); } } - cProfile.IOProfileData_WrapInt( pszSecName, LTEXT("nDockOutline") , types.m_nDockOutline );/* アウトライン解析方法 */ - cProfile.IOProfileData_WrapInt( pszSecName, LTEXT("nDefaultOutline") , types.m_eDefaultOutline );/* アウトライン解析方法 */ + cProfile.IOProfileData(pszSecName, L"nDockOutline", types.m_nDockOutline );/* アウトライン解析方法 */ + cProfile.IOProfileData(pszSecName, L"nDefaultOutline", types.m_eDefaultOutline );/* アウトライン解析方法 */ cProfile.IOProfileData( pszSecName, LTEXT("szOutlineRuleFilename") , types.m_szOutlineRuleFilename );/* アウトライン解析ルールファイル */ cProfile.IOProfileData( pszSecName, LTEXT("nOutlineSortCol") , types.m_nOutlineSortCol );/* アウトライン解析ソート列番号 */ cProfile.IOProfileData( pszSecName, LTEXT("bOutlineSortDesc") , types.m_bOutlineSortDesc );/* アウトライン解析ソート降順 */ cProfile.IOProfileData( pszSecName, LTEXT("nOutlineSortType") , types.m_nOutlineSortType );/* アウトライン解析ソート基準 */ ShareData_IO_FileTree( cProfile, types.m_sFileTree, pszSecName ); - cProfile.IOProfileData_WrapInt( pszSecName, LTEXT("nSmartIndent") , types.m_eSmartIndent );/* スマートインデント種別 */ + cProfile.IOProfileData(pszSecName, L"nSmartIndent", types.m_eSmartIndent );/* スマートインデント種別 */ cProfile.IOProfileData( pszSecName, LTEXT("bIndentCppStringIgnore") , types.m_bIndentCppStringIgnore ); cProfile.IOProfileData( pszSecName, LTEXT("bIndentCppCommentIgnore") , types.m_bIndentCppCommentIgnore ); cProfile.IOProfileData( pszSecName, LTEXT("bIndentCppUndoSep") , types.m_bIndentCppUndoSep ); @@ -1659,8 +1659,8 @@ void CShareData_IO::ShareData_IO_Type_One( CDataProfile& cProfile, STypeConfig& cProfile.IOProfileData( pszSecName, LTEXT("bTypeHtmlHelpIsSingle"), types.m_bHtmlHelpIsSingle ); // 2012.06.30 Fix m_bHokanLoHiCase -> m_bHtmlHelpIsSingle cProfile.IOProfileData( pszSecName, LTEXT("bPriorCesu8") , types.m_encoding.m_bPriorCesu8 ); - cProfile.IOProfileData_WrapInt( pszSecName, LTEXT("eDefaultCodetype") , types.m_encoding.m_eDefaultCodetype ); - cProfile.IOProfileData_WrapInt( pszSecName, LTEXT("eDefaultEoltype") , types.m_encoding.m_eDefaultEoltype ); + cProfile.IOProfileData(pszSecName, L"eDefaultCodetype", types.m_encoding.m_eDefaultCodetype ); + cProfile.IOProfileData(pszSecName, L"eDefaultEoltype", types.m_encoding.m_eDefaultEoltype ); cProfile.IOProfileData( pszSecName, LTEXT("bDefaultBom") , types.m_encoding.m_bDefaultBom ); cProfile.IOProfileData( pszSecName, LTEXT("bAutoIndent") , types.m_bAutoIndent ); @@ -1673,14 +1673,14 @@ void CShareData_IO::ShareData_IO_Type_One( CDataProfile& cProfile, STypeConfig& // 2010.09.17 背景画像 cProfile.IOProfileData( pszSecName, L"bgImgPath", types.m_szBackImgPath ); - cProfile.IOProfileData_WrapInt( pszSecName, L"bgImgPos", types.m_backImgPos ); + cProfile.IOProfileData(pszSecName, L"bgImgPos", types.m_backImgPos ); cProfile.IOProfileData( pszSecName, L"bgImgScrollX", types.m_backImgScrollX ); cProfile.IOProfileData( pszSecName, L"bgImgScrollY", types.m_backImgScrollY ); cProfile.IOProfileData( pszSecName, L"bgImgRepeartX", types.m_backImgRepeatX ); cProfile.IOProfileData( pszSecName, L"bgImgRepeartY", types.m_backImgRepeatY ); - cProfile.IOProfileData_WrapInt( pszSecName, L"bgImgPosOffsetX", types.m_backImgPosOffset.x ); - cProfile.IOProfileData_WrapInt( pszSecName, L"bgImgPosOffsetY", types.m_backImgPosOffset.y ); - cProfile.IOProfileData_WrapInt( pszSecName, L"bgImgOpacity", types.m_backImgOpacity ); + cProfile.IOProfileData(pszSecName, L"bgImgPosOffsetX", types.m_backImgPosOffset.x ); + cProfile.IOProfileData(pszSecName, L"bgImgPosOffsetY", types.m_backImgPosOffset.y ); + cProfile.IOProfileData(pszSecName, L"bgImgOpacity", types.m_backImgOpacity ); // 2005.11.08 Moca 指定桁縦線 for(j = 0; j < MAX_VERTLINES; j++ ){ @@ -1767,7 +1767,7 @@ void CShareData_IO::ShareData_IO_Type_One( CDataProfile& cProfile, STypeConfig& cProfile.IOProfileData( pszSecName, LTEXT("bUseKeyHelpAllSearch"), types.m_bUseKeyHelpAllSearch ); /* ヒットした次の辞書も検索(&A) */ cProfile.IOProfileData( pszSecName, LTEXT("bUseKeyHelpKeyDisp"), types.m_bUseKeyHelpKeyDisp ); /* 1行目にキーワードも表示する(&W) */ cProfile.IOProfileData( pszSecName, LTEXT("bUseKeyHelpPrefix"), types.m_bUseKeyHelpPrefix ); /* 選択範囲で前方一致検索(&P) */ - cProfile.IOProfileData_WrapInt(pszSecName, LTEXT("nKeyHelpRMenuShowType"), types.m_eKeyHelpRMenuShowType); + cProfile.IOProfileData(pszSecName, L"nKeyHelpRMenuShowType", types.m_eKeyHelpRMenuShowType); for(j = 0; j < MAX_KEYHELP_FILE; j++){ auto_sprintf( szKeyName, LTEXT("KDct[%02d]"), j ); /* 読み出し */ @@ -2480,7 +2480,7 @@ void CShareData_IO::ShareData_IO_FileTreeItem( { WCHAR szKey[64]; auto_sprintf( szKey, L"FileTree(%d).eItemType", i ); - cProfile.IOProfileData_WrapInt( pszSecName, szKey, item.m_eFileTreeItemType ); + cProfile.IOProfileData(pszSecName, szKey, item.m_eFileTreeItemType); if( cProfile.IsReadingMode() || item.m_eFileTreeItemType == EFileTreeItemType_Grep || item.m_eFileTreeItemType == EFileTreeItemType_File ){ auto_sprintf( szKey, L"FileTree(%d).szTargetPath", i ); diff --git a/sakura_core/typeprop/CImpExpManager.cpp b/sakura_core/typeprop/CImpExpManager.cpp index 0f5d23f8be..f3481790da 100644 --- a/sakura_core/typeprop/CImpExpManager.cpp +++ b/sakura_core/typeprop/CImpExpManager.cpp @@ -1033,7 +1033,7 @@ bool CImpExpKeybind::Export( const wstring& sFileName, wstring& sErrMsg ) // ヘッダ StaticString szKeydataHead = WSTR_KEYBIND_HEAD4; cProfile.IOProfileData( szSecInfo, L"KEYBIND_VERSION", szKeydataHead ); - cProfile.IOProfileData_WrapInt( szSecInfo, L"KEYBIND_COUNT", m_Common.m_sKeyBind.m_nKeyNameArrNum ); + cProfile.IOProfileData(szSecInfo, L"KEYBIND_COUNT", m_Common.m_sKeyBind.m_nKeyNameArrNum ); //内容 CShareData_IO::IO_KeyBind(cProfile, m_Common.m_sKeyBind, true); @@ -1107,7 +1107,7 @@ bool CImpExpCustMenu::Export( const wstring& sFileName, wstring& sErrMsg ) //ヘッダ cProfile.IOProfileData(szSecInfo, L"MENU_VERSION", StringBufferW(WSTR_CUSTMENU_HEAD_V2)); int iWork = MAX_CUSTOM_MENU; - cProfile.IOProfileData_WrapInt( szSecInfo, L"MAX_CUSTOM_MENU", iWork ); + cProfile.IOProfileData(szSecInfo, L"MAX_CUSTOM_MENU", iWork ); //内容 CShareData_IO::IO_CustMenu(cProfile, *menu, true); From 68d832ad4b1b34042a575a3c9bc2afe903a7ac1e Mon Sep 17 00:00:00 2001 From: berryzplus Date: Tue, 23 Feb 2021 15:29:26 +0900 Subject: [PATCH 0455/1024] =?UTF-8?q?Copyright=20=E3=82=92=202021=20?= =?UTF-8?q?=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit プロジェクトのCopyrightを更新する。 旧) Copyright (C) 2018-2020 Sakura Editor Organization 新) Copyright (C) 2018-2021, Sakura Editor Organization 今年に入ってから追加されたファイルに関しては以下に統一する。 Copyright (C) 2021, Sakura Editor Organization --- LICENSE | 2 +- sakura_core/EditInfo.cpp | 2 +- sakura_core/GrepInfo.cpp | 2 +- sakura_core/GrepInfo.h | 2 +- sakura_core/basis/CErrorInfo.cpp | 2 +- sakura_core/basis/CErrorInfo.h | 2 +- sakura_core/basis/CStrictInteger.cpp | 2 +- sakura_core/basis/TComImpl.hpp | 2 +- sakura_core/basis/_com_raise_error.cpp | 2 +- sakura_core/charset/icu4c/CharsetDetector.cpp | 2 +- sakura_core/charset/icu4c/CharsetDetector.h | 2 +- sakura_core/extmodule/CIcu4cI18n.cpp | 2 +- sakura_core/extmodule/CIcu4cI18n.h | 2 +- sakura_core/mem/CPoolResource.h | 2 +- sakura_core/recent/CRecentExcludeFile.cpp | 2 +- sakura_core/recent/CRecentExcludeFile.h | 2 +- sakura_core/recent/CRecentExcludeFolder.cpp | 2 +- sakura_core/recent/CRecentExcludeFolder.h | 2 +- sakura_core/sakura_rc.rc2 | 2 +- sakura_lang_en_US/sakura_lang_rc.rc2 | 4 +-- tests/compiletests/clayoutint_test.cpp.in | 2 +- tests/unittests/StartEditorProcessForTest.h | 2 +- tests/unittests/code-main.cpp | 2 +- tests/unittests/coverage.cpp | 2 +- tests/unittests/test-StdControl.cpp | 2 +- tests/unittests/test-ccommandline.cpp | 2 +- tests/unittests/test-cdlgprofilemgr.cpp | 2 +- tests/unittests/test-cerrorinfo.cpp | 2 +- tests/unittests/test-charcode.cpp | 2 +- tests/unittests/test-clayoutint.cpp | 2 +- tests/unittests/test-cmemory.cpp | 2 +- tests/unittests/test-cnative.cpp | 2 +- tests/unittests/test-cprofile.cpp | 2 +- tests/unittests/test-csakuraenvironment.cpp | 2 +- tests/unittests/test-ctextmetrics.cpp | 3 +- tests/unittests/test-cwordparse.cpp | 34 +++++++++---------- tests/unittests/test-editinfo.cpp | 2 +- tests/unittests/test-file.cpp | 2 +- tests/unittests/test-format.cpp | 2 +- tests/unittests/test-grepinfo.cpp | 2 +- tests/unittests/test-is_mailaddress.cpp | 2 +- tests/unittests/test-loadstring.cpp | 2 +- tests/unittests/test-mydevmode.cpp | 2 +- tests/unittests/test-parameterized.cpp | 2 +- tests/unittests/test-sample-disabled.cpp | 2 +- tests/unittests/test-ssearchoption.cpp | 2 +- tests/unittests/test-string_ex.cpp | 2 +- tests/unittests/test-winmain.cpp | 2 +- tests/unittests/test-zoom.cpp | 2 +- 49 files changed, 65 insertions(+), 68 deletions(-) diff --git a/LICENSE b/LICENSE index 24715332ce..9f05afd0d9 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ zlib License -Copyright (C) 2018-2020 Sakura Editor Organization +Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/EditInfo.cpp b/sakura_core/EditInfo.cpp index f5e27fb4d1..66e51f16e3 100644 --- a/sakura_core/EditInfo.cpp +++ b/sakura_core/EditInfo.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/GrepInfo.cpp b/sakura_core/GrepInfo.cpp index b609dab55f..01f9834a99 100644 --- a/sakura_core/GrepInfo.cpp +++ b/sakura_core/GrepInfo.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/GrepInfo.h b/sakura_core/GrepInfo.h index abf796c06d..bf0733831c 100644 --- a/sakura_core/GrepInfo.h +++ b/sakura_core/GrepInfo.h @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CErrorInfo.cpp b/sakura_core/basis/CErrorInfo.cpp index f6a57cba34..070723dab2 100644 --- a/sakura_core/basis/CErrorInfo.cpp +++ b/sakura_core/basis/CErrorInfo.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CErrorInfo.h b/sakura_core/basis/CErrorInfo.h index 63f993dc79..00142f6a65 100644 --- a/sakura_core/basis/CErrorInfo.h +++ b/sakura_core/basis/CErrorInfo.h @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CStrictInteger.cpp b/sakura_core/basis/CStrictInteger.cpp index 8e8d2fd009..9be77c04ef 100644 --- a/sakura_core/basis/CStrictInteger.cpp +++ b/sakura_core/basis/CStrictInteger.cpp @@ -2,7 +2,7 @@ /* Copyright (C) 2007, kobake Copyright (C) 2007-2017 SAKURA Editor Project - Copyright (C) 2018-2020 SAKURA Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/TComImpl.hpp b/sakura_core/basis/TComImpl.hpp index 882b322a87..82cfbd04c7 100644 --- a/sakura_core/basis/TComImpl.hpp +++ b/sakura_core/basis/TComImpl.hpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/_com_raise_error.cpp b/sakura_core/basis/_com_raise_error.cpp index dc72698aac..f8cc6af90a 100644 --- a/sakura_core/basis/_com_raise_error.cpp +++ b/sakura_core/basis/_com_raise_error.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/icu4c/CharsetDetector.cpp b/sakura_core/charset/icu4c/CharsetDetector.cpp index af5bfdad86..78c3f7400f 100644 --- a/sakura_core/charset/icu4c/CharsetDetector.cpp +++ b/sakura_core/charset/icu4c/CharsetDetector.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/icu4c/CharsetDetector.h b/sakura_core/charset/icu4c/CharsetDetector.h index 456f45018f..23699a2601 100644 --- a/sakura_core/charset/icu4c/CharsetDetector.h +++ b/sakura_core/charset/icu4c/CharsetDetector.h @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/extmodule/CIcu4cI18n.cpp b/sakura_core/extmodule/CIcu4cI18n.cpp index f39e1e866c..301716e9a4 100644 --- a/sakura_core/extmodule/CIcu4cI18n.cpp +++ b/sakura_core/extmodule/CIcu4cI18n.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/extmodule/CIcu4cI18n.h b/sakura_core/extmodule/CIcu4cI18n.h index 99d247710d..3b085f4b1a 100644 --- a/sakura_core/extmodule/CIcu4cI18n.h +++ b/sakura_core/extmodule/CIcu4cI18n.h @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/mem/CPoolResource.h b/sakura_core/mem/CPoolResource.h index 3e0b6a0759..8fc773b0bf 100644 --- a/sakura_core/mem/CPoolResource.h +++ b/sakura_core/mem/CPoolResource.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentExcludeFile.cpp b/sakura_core/recent/CRecentExcludeFile.cpp index 5b705b670f..ad82976a70 100644 --- a/sakura_core/recent/CRecentExcludeFile.cpp +++ b/sakura_core/recent/CRecentExcludeFile.cpp @@ -1,5 +1,5 @@ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentExcludeFile.h b/sakura_core/recent/CRecentExcludeFile.h index 7a4b7b0180..ee3b86e785 100644 --- a/sakura_core/recent/CRecentExcludeFile.h +++ b/sakura_core/recent/CRecentExcludeFile.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentExcludeFolder.cpp b/sakura_core/recent/CRecentExcludeFolder.cpp index 8da3e743a6..af1182d4db 100644 --- a/sakura_core/recent/CRecentExcludeFolder.cpp +++ b/sakura_core/recent/CRecentExcludeFolder.cpp @@ -1,5 +1,5 @@ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentExcludeFolder.h b/sakura_core/recent/CRecentExcludeFolder.h index eacec72e25..833ccfc432 100644 --- a/sakura_core/recent/CRecentExcludeFolder.h +++ b/sakura_core/recent/CRecentExcludeFolder.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/sakura_rc.rc2 b/sakura_core/sakura_rc.rc2 index d92fc2b1c4..fecc446220 100644 --- a/sakura_core/sakura_rc.rc2 +++ b/sakura_core/sakura_rc.rc2 @@ -1,7 +1,7 @@ // このファイルにはリソースエディタで編集できない要素を配置します. // このファイルのエンコーディング/改行コードは UTF-16LE(BOM)/CRLF です. -#define S_COPYRIGHT "Copyright (C) 1998-2020 by Norio Nakatani & Collaborators" +#define S_COPYRIGHT "Copyright (C) 1998-2021 by Norio Nakatani & Collaborators" #define FL_VER PR_VER #define FL_VER_STR PR_VER_STR diff --git a/sakura_lang_en_US/sakura_lang_rc.rc2 b/sakura_lang_en_US/sakura_lang_rc.rc2 index 996875eb60..83c24718ec 100644 --- a/sakura_lang_en_US/sakura_lang_rc.rc2 +++ b/sakura_lang_en_US/sakura_lang_rc.rc2 @@ -1,8 +1,8 @@ // このファイルにはリソースエディタで編集できない要素を配置します. // このファイルのエンコーディング/改行コードは UTF-16LE(BOM)/CRLF です. -#define S_COPYRIGHT "Copyright (C) 1998-2020 by Norio Nakatani & Collaborators" -#define S_COPYRIGHT_TRANSLATION "Copyright (C) 2011-2020 by Lucien & Collaborators" +#define S_COPYRIGHT "Copyright (C) 1998-2021 by Norio Nakatani & Collaborators" +#define S_COPYRIGHT_TRANSLATION "Copyright (C) 2011-2021 by Lucien & Collaborators" #define FL_VER PR_VER #define FL_VER_STR PR_VER_STR diff --git a/tests/compiletests/clayoutint_test.cpp.in b/tests/compiletests/clayoutint_test.cpp.in index d9e77418b5..843a32fbae 100644 --- a/tests/compiletests/clayoutint_test.cpp.in +++ b/tests/compiletests/clayoutint_test.cpp.in @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/StartEditorProcessForTest.h b/tests/unittests/StartEditorProcessForTest.h index 16c84c9472..01e8de67e1 100644 --- a/tests/unittests/StartEditorProcessForTest.h +++ b/tests/unittests/StartEditorProcessForTest.h @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/code-main.cpp b/tests/unittests/code-main.cpp index 015f4a4685..b531d3abff 100644 --- a/tests/unittests/code-main.cpp +++ b/tests/unittests/code-main.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/coverage.cpp b/tests/unittests/coverage.cpp index 4dafbbf91b..10cf18d8da 100644 --- a/tests/unittests/coverage.cpp +++ b/tests/unittests/coverage.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-StdControl.cpp b/tests/unittests/test-StdControl.cpp index bd5bff128c..16045afae0 100644 --- a/tests/unittests/test-StdControl.cpp +++ b/tests/unittests/test-StdControl.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-ccommandline.cpp b/tests/unittests/test-ccommandline.cpp index df95dbc5b2..b18f69acc1 100644 --- a/tests/unittests/test-ccommandline.cpp +++ b/tests/unittests/test-ccommandline.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-cdlgprofilemgr.cpp b/tests/unittests/test-cdlgprofilemgr.cpp index 209cecb64f..35c7d28d42 100644 --- a/tests/unittests/test-cdlgprofilemgr.cpp +++ b/tests/unittests/test-cdlgprofilemgr.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-cerrorinfo.cpp b/tests/unittests/test-cerrorinfo.cpp index c8a428fac6..32124cdb5b 100644 --- a/tests/unittests/test-cerrorinfo.cpp +++ b/tests/unittests/test-cerrorinfo.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-charcode.cpp b/tests/unittests/test-charcode.cpp index 076cac19ab..c03d569dfc 100644 --- a/tests/unittests/test-charcode.cpp +++ b/tests/unittests/test-charcode.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-clayoutint.cpp b/tests/unittests/test-clayoutint.cpp index 7f007331e1..b3a708c81c 100644 --- a/tests/unittests/test-clayoutint.cpp +++ b/tests/unittests/test-clayoutint.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-cmemory.cpp b/tests/unittests/test-cmemory.cpp index 77141db9ca..d8a3e5f6c8 100644 --- a/tests/unittests/test-cmemory.cpp +++ b/tests/unittests/test-cmemory.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-cnative.cpp b/tests/unittests/test-cnative.cpp index 4eb0bacd79..734c04cd78 100644 --- a/tests/unittests/test-cnative.cpp +++ b/tests/unittests/test-cnative.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-cprofile.cpp b/tests/unittests/test-cprofile.cpp index fa4fd4ac21..f8cbbb24b7 100644 --- a/tests/unittests/test-cprofile.cpp +++ b/tests/unittests/test-cprofile.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-csakuraenvironment.cpp b/tests/unittests/test-csakuraenvironment.cpp index 4013790d5b..b7d5eda7ae 100644 --- a/tests/unittests/test-csakuraenvironment.cpp +++ b/tests/unittests/test-csakuraenvironment.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-ctextmetrics.cpp b/tests/unittests/test-ctextmetrics.cpp index b2c68807da..1b41224f4c 100644 --- a/tests/unittests/test-ctextmetrics.cpp +++ b/tests/unittests/test-ctextmetrics.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2021 Sakura Editor Organization + Copyright (C) 2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -22,7 +22,6 @@ 3. This notice may not be removed or altered from any source distribution. */ - #include #include "view/CTextMetrics.h" #include diff --git a/tests/unittests/test-cwordparse.cpp b/tests/unittests/test-cwordparse.cpp index b11518027d..2f1b62154b 100644 --- a/tests/unittests/test-cwordparse.cpp +++ b/tests/unittests/test-cwordparse.cpp @@ -1,29 +1,27 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2021, Sakura Editor Organization - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: - 1. The origin of this software must not be misrepresented; - you must not claim that you wrote the original software. - If you use this software in a product, an acknowledgment - in the product documentation would be appreciated but is - not required. + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. - 2. Altered source versions must be plainly marked as such, - and must not be misrepresented as being the original - software. + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. - 3. This notice may not be removed or altered from any source - distribution. + 3. This notice may not be removed or altered from any source + distribution. */ - #include #include "parse/CWordParse.h" diff --git a/tests/unittests/test-editinfo.cpp b/tests/unittests/test-editinfo.cpp index f0191a6aa9..3c0ca58b9c 100644 --- a/tests/unittests/test-editinfo.cpp +++ b/tests/unittests/test-editinfo.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-file.cpp b/tests/unittests/test-file.cpp index 81f37b42c5..b4fc49e539 100644 --- a/tests/unittests/test-file.cpp +++ b/tests/unittests/test-file.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-format.cpp b/tests/unittests/test-format.cpp index 909a809078..8ad200c2df 100644 --- a/tests/unittests/test-format.cpp +++ b/tests/unittests/test-format.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-grepinfo.cpp b/tests/unittests/test-grepinfo.cpp index 66e0a5af5a..d9b0341312 100644 --- a/tests/unittests/test-grepinfo.cpp +++ b/tests/unittests/test-grepinfo.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-is_mailaddress.cpp b/tests/unittests/test-is_mailaddress.cpp index 2503a8e44d..69af569eed 100644 --- a/tests/unittests/test-is_mailaddress.cpp +++ b/tests/unittests/test-is_mailaddress.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-loadstring.cpp b/tests/unittests/test-loadstring.cpp index 040c5b3236..024e3614ee 100644 --- a/tests/unittests/test-loadstring.cpp +++ b/tests/unittests/test-loadstring.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-mydevmode.cpp b/tests/unittests/test-mydevmode.cpp index fb4994e866..6c452165d9 100644 --- a/tests/unittests/test-mydevmode.cpp +++ b/tests/unittests/test-mydevmode.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-parameterized.cpp b/tests/unittests/test-parameterized.cpp index 4340c3e550..4eaa1c5347 100644 --- a/tests/unittests/test-parameterized.cpp +++ b/tests/unittests/test-parameterized.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-sample-disabled.cpp b/tests/unittests/test-sample-disabled.cpp index 3e6cc994fd..fa60340f3b 100644 --- a/tests/unittests/test-sample-disabled.cpp +++ b/tests/unittests/test-sample-disabled.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-ssearchoption.cpp b/tests/unittests/test-ssearchoption.cpp index 99772ad6e5..94377ae292 100644 --- a/tests/unittests/test-ssearchoption.cpp +++ b/tests/unittests/test-ssearchoption.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-string_ex.cpp b/tests/unittests/test-string_ex.cpp index f6161f2c09..c3412a60d0 100644 --- a/tests/unittests/test-string_ex.cpp +++ b/tests/unittests/test-string_ex.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-winmain.cpp b/tests/unittests/test-winmain.cpp index c4c74cc5ba..24a4488781 100644 --- a/tests/unittests/test-winmain.cpp +++ b/tests/unittests/test-winmain.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-zoom.cpp b/tests/unittests/test-zoom.cpp index 826d0f2bc9..6305c058db 100644 --- a/tests/unittests/test-zoom.cpp +++ b/tests/unittests/test-zoom.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages From e7ac2442918df40ff82643dadd3f8c0e1f8924f7 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Tue, 23 Feb 2021 15:37:03 +0900 Subject: [PATCH 0456/1024] =?UTF-8?q?=E3=83=97=E3=83=AD=E3=82=B8=E3=82=A7?= =?UTF-8?q?=E3=82=AF=E3=83=88=E3=81=AECopyright=E3=82=92=E4=BB=98=E5=8A=A0?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 一旦以下を付ける。(2018年時点で存在しないファイルもあるが目をつぶる) Copyright (C) 2018-2021, Sakura Editor Organization 今年に入ってから追加されたファイルに関しては以下で統一する。 Copyright (C) 2021, Sakura Editor Organization --- HeaderMake/HeaderMake.cpp | 1 + sakura_core/CAutoReloadAgent.cpp | 1 + sakura_core/CAutoReloadAgent.h | 1 + sakura_core/CAutoSaveAgent.cpp | 1 + sakura_core/CAutoSaveAgent.h | 1 + sakura_core/CBackupAgent.cpp | 1 + sakura_core/CBackupAgent.h | 1 + sakura_core/CCodeChecker.cpp | 23 ++++++++++++++++ sakura_core/CCodeChecker.h | 1 + sakura_core/CDataProfile.cpp | 23 ++++++++++++++++ sakura_core/CDataProfile.h | 1 + sakura_core/CDicMgr.cpp | 1 + sakura_core/CDicMgr.h | 1 + sakura_core/CEditApp.cpp | 1 + sakura_core/CEditApp.h | 1 + sakura_core/CEol.cpp | 1 + sakura_core/CEol.h | 1 + sakura_core/CFileExt.cpp | 1 + sakura_core/CFileExt.h | 1 + sakura_core/CGrepAgent.cpp | 23 ++++++++++++++++ sakura_core/CGrepAgent.h | 1 + sakura_core/CGrepEnumFileBase.h | 1 + sakura_core/CGrepEnumFiles.h | 1 + sakura_core/CGrepEnumFilterFiles.h | 1 + sakura_core/CGrepEnumFilterFolders.h | 1 + sakura_core/CGrepEnumFolders.h | 1 + sakura_core/CGrepEnumKeys.h | 1 + sakura_core/CHokanMgr.cpp | 1 + sakura_core/CHokanMgr.h | 1 + sakura_core/CKeyWordSetMgr.cpp | 1 + sakura_core/CKeyWordSetMgr.h | 1 + sakura_core/CLoadAgent.cpp | 1 + sakura_core/CLoadAgent.h | 1 + sakura_core/CMarkMgr.cpp | 1 + sakura_core/CMarkMgr.h | 1 + sakura_core/COpe.cpp | 1 + sakura_core/COpe.h | 1 + sakura_core/COpeBlk.cpp | 1 + sakura_core/COpeBlk.h | 1 + sakura_core/COpeBuf.cpp | 1 + sakura_core/COpeBuf.h | 1 + sakura_core/CProfile.cpp | 1 + sakura_core/CProfile.h | 1 + sakura_core/CPropertyManager.cpp | 1 + sakura_core/CPropertyManager.h | 1 + sakura_core/CReadManager.cpp | 1 + sakura_core/CReadManager.h | 1 + sakura_core/CRegexKeyword.cpp | 1 + sakura_core/CRegexKeyword.h | 1 + sakura_core/CSaveAgent.cpp | 1 + sakura_core/CSaveAgent.h | 1 + sakura_core/CSearchAgent.cpp | 23 ++++++++++++++++ sakura_core/CSearchAgent.h | 1 + sakura_core/CSelectLang.cpp | 1 + sakura_core/CSelectLang.h | 1 + sakura_core/CSortedTagJumpList.cpp | 1 + sakura_core/CSortedTagJumpList.h | 1 + sakura_core/CWriteManager.cpp | 23 ++++++++++++++++ sakura_core/CWriteManager.h | 1 + sakura_core/EditInfo.h | 1 + sakura_core/StdAfx.cpp | 23 ++++++++++++++++ sakura_core/StdAfx.h | 23 ++++++++++++++++ sakura_core/String_define.h | 23 ++++++++++++++++ sakura_core/_main/CAppMode.cpp | 23 ++++++++++++++++ sakura_core/_main/CAppMode.h | 1 + sakura_core/_main/CCommandLine.cpp | 1 + sakura_core/_main/CCommandLine.h | 1 + sakura_core/_main/CControlProcess.cpp | 1 + sakura_core/_main/CControlProcess.h | 1 + sakura_core/_main/CControlTray.cpp | 1 + sakura_core/_main/CControlTray.h | 1 + sakura_core/_main/CMutex.h | 1 + sakura_core/_main/CNormalProcess.cpp | 1 + sakura_core/_main/CNormalProcess.h | 1 + sakura_core/_main/CProcess.cpp | 1 + sakura_core/_main/CProcess.h | 1 + sakura_core/_main/CProcessFactory.cpp | 1 + sakura_core/_main/CProcessFactory.h | 1 + sakura_core/_main/WinMain.cpp | 1 + sakura_core/_main/global.cpp | 1 + sakura_core/_main/global.h | 1 + sakura_core/_os/CClipboard.cpp | 1 + sakura_core/_os/CClipboard.h | 1 + sakura_core/_os/CDropTarget.cpp | 1 + sakura_core/_os/CDropTarget.h | 1 + sakura_core/_os/OleTypes.h | 2 ++ sakura_core/apiwrap/CommonControl.h | 1 + sakura_core/apiwrap/StdApi.cpp | 23 ++++++++++++++++ sakura_core/apiwrap/StdApi.h | 1 + sakura_core/apiwrap/StdControl.cpp | 23 ++++++++++++++++ sakura_core/apiwrap/StdControl.h | 1 + sakura_core/basis/CLaxInteger.cpp | 23 ++++++++++++++++ sakura_core/basis/CLaxInteger.h | 1 + sakura_core/basis/CMyPoint.cpp | 23 ++++++++++++++++ sakura_core/basis/CMyPoint.h | 1 + sakura_core/basis/CMyRect.cpp | 23 ++++++++++++++++ sakura_core/basis/CMyRect.h | 1 + sakura_core/basis/CMySize.cpp | 23 ++++++++++++++++ sakura_core/basis/CMySize.h | 1 + sakura_core/basis/CMyString.cpp | 23 ++++++++++++++++ sakura_core/basis/CMyString.h | 1 + sakura_core/basis/CStrictInteger.h | 1 + sakura_core/basis/CStrictPoint.cpp | 23 ++++++++++++++++ sakura_core/basis/CStrictPoint.h | 1 + sakura_core/basis/CStrictRange.cpp | 23 ++++++++++++++++ sakura_core/basis/CStrictRange.h | 1 + sakura_core/basis/CStrictRect.cpp | 23 ++++++++++++++++ sakura_core/basis/CStrictRect.h | 1 + sakura_core/basis/SakuraBasis.cpp | 23 ++++++++++++++++ sakura_core/basis/SakuraBasis.h | 1 + sakura_core/basis/primitive.h | 1 + sakura_core/charset/CCesu8.cpp | 23 ++++++++++++++++ sakura_core/charset/CCesu8.h | 1 + sakura_core/charset/CCodeBase.cpp | 23 ++++++++++++++++ sakura_core/charset/CCodeBase.h | 1 + sakura_core/charset/CCodeFactory.cpp | 23 ++++++++++++++++ sakura_core/charset/CCodeFactory.h | 1 + sakura_core/charset/CCodeMediator.cpp | 23 ++++++++++++++++ sakura_core/charset/CCodeMediator.h | 1 + sakura_core/charset/CCodePage.cpp | 1 + sakura_core/charset/CCodePage.h | 1 + sakura_core/charset/CESI.cpp | 1 + sakura_core/charset/CESI.h | 1 + sakura_core/charset/CEuc.cpp | 23 ++++++++++++++++ sakura_core/charset/CEuc.h | 1 + sakura_core/charset/CJis.cpp | 23 ++++++++++++++++ sakura_core/charset/CJis.h | 1 + sakura_core/charset/CLatin1.cpp | 1 + sakura_core/charset/CLatin1.h | 1 + sakura_core/charset/CShiftJis.cpp | 23 ++++++++++++++++ sakura_core/charset/CShiftJis.h | 1 + sakura_core/charset/CUnicode.cpp | 23 ++++++++++++++++ sakura_core/charset/CUnicode.h | 1 + sakura_core/charset/CUnicodeBe.cpp | 23 ++++++++++++++++ sakura_core/charset/CUnicodeBe.h | 1 + sakura_core/charset/CUtf7.cpp | 23 ++++++++++++++++ sakura_core/charset/CUtf7.h | 1 + sakura_core/charset/CUtf8.cpp | 23 ++++++++++++++++ sakura_core/charset/CUtf8.h | 1 + sakura_core/charset/CharPointer.h | 1 + sakura_core/charset/charcode.cpp | 1 + sakura_core/charset/charcode.h | 1 + sakura_core/charset/charset.cpp | 1 + sakura_core/charset/charset.h | 1 + sakura_core/charset/codechecker.cpp | 1 + sakura_core/charset/codechecker.h | 1 + sakura_core/charset/codeutil.cpp | 23 ++++++++++++++++ sakura_core/charset/codeutil.h | 1 + sakura_core/cmd/CViewCommander.cpp | 1 + sakura_core/cmd/CViewCommander.h | 1 + sakura_core/cmd/CViewCommander_Bookmark.cpp | 1 + sakura_core/cmd/CViewCommander_Clipboard.cpp | 1 + sakura_core/cmd/CViewCommander_Convert.cpp | 1 + sakura_core/cmd/CViewCommander_Cursor.cpp | 1 + sakura_core/cmd/CViewCommander_CustMenu.cpp | 1 + sakura_core/cmd/CViewCommander_Diff.cpp | 1 + sakura_core/cmd/CViewCommander_Edit.cpp | 1 + .../cmd/CViewCommander_Edit_advanced.cpp | 1 + .../cmd/CViewCommander_Edit_word_line.cpp | 1 + sakura_core/cmd/CViewCommander_File.cpp | 1 + sakura_core/cmd/CViewCommander_Grep.cpp | 1 + sakura_core/cmd/CViewCommander_Insert.cpp | 1 + sakura_core/cmd/CViewCommander_Macro.cpp | 1 + sakura_core/cmd/CViewCommander_ModeChange.cpp | 1 + sakura_core/cmd/CViewCommander_Outline.cpp | 1 + sakura_core/cmd/CViewCommander_Search.cpp | 1 + sakura_core/cmd/CViewCommander_Select.cpp | 1 + sakura_core/cmd/CViewCommander_Settings.cpp | 1 + sakura_core/cmd/CViewCommander_Support.cpp | 1 + sakura_core/cmd/CViewCommander_TagJump.cpp | 1 + sakura_core/cmd/CViewCommander_Window.cpp | 1 + sakura_core/cmd/CViewCommander_inline.h | 1 + sakura_core/config/app_constants.h | 1 + sakura_core/config/build_config.cpp | 23 ++++++++++++++++ sakura_core/config/build_config.h | 1 + sakura_core/config/maxdata.h | 1 + sakura_core/config/system_constants.h | 1 + sakura_core/convert/CConvert.cpp | 23 ++++++++++++++++ sakura_core/convert/CConvert.h | 1 + .../convert/CConvert_HaneisuToZeneisu.cpp | 23 ++++++++++++++++ .../convert/CConvert_HaneisuToZeneisu.h | 1 + .../convert/CConvert_HankataToZenhira.cpp | 23 ++++++++++++++++ .../convert/CConvert_HankataToZenhira.h | 1 + .../convert/CConvert_HankataToZenkata.cpp | 23 ++++++++++++++++ .../convert/CConvert_HankataToZenkata.h | 1 + sakura_core/convert/CConvert_SpaceToTab.cpp | 23 ++++++++++++++++ sakura_core/convert/CConvert_SpaceToTab.h | 1 + sakura_core/convert/CConvert_TabToSpace.cpp | 23 ++++++++++++++++ sakura_core/convert/CConvert_TabToSpace.h | 1 + sakura_core/convert/CConvert_ToHankaku.cpp | 23 ++++++++++++++++ sakura_core/convert/CConvert_ToHankaku.h | 1 + sakura_core/convert/CConvert_ToLower.cpp | 23 ++++++++++++++++ sakura_core/convert/CConvert_ToLower.h | 1 + sakura_core/convert/CConvert_ToUpper.cpp | 23 ++++++++++++++++ sakura_core/convert/CConvert_ToUpper.h | 1 + sakura_core/convert/CConvert_ToZenhira.cpp | 23 ++++++++++++++++ sakura_core/convert/CConvert_ToZenhira.h | 1 + sakura_core/convert/CConvert_ToZenkata.cpp | 23 ++++++++++++++++ sakura_core/convert/CConvert_ToZenkata.h | 1 + sakura_core/convert/CConvert_Trim.cpp | 23 ++++++++++++++++ sakura_core/convert/CConvert_Trim.h | 1 + .../convert/CConvert_ZeneisuToHaneisu.cpp | 23 ++++++++++++++++ .../convert/CConvert_ZeneisuToHaneisu.h | 1 + .../convert/CConvert_ZenkataToHankata.cpp | 23 ++++++++++++++++ .../convert/CConvert_ZenkataToHankata.h | 1 + sakura_core/convert/CDecode.h | 2 +- sakura_core/convert/CDecode_Base64Decode.cpp | 2 +- sakura_core/convert/CDecode_Base64Decode.h | 2 +- sakura_core/convert/CDecode_UuDecode.cpp | 23 ++++++++++++++++ sakura_core/convert/CDecode_UuDecode.h | 2 +- sakura_core/convert/convert_util.cpp | 23 ++++++++++++++++ sakura_core/convert/convert_util.h | 1 + sakura_core/convert/convert_util2.cpp | 2 +- sakura_core/convert/convert_util2.h | 2 +- sakura_core/debug/CRunningTimer.cpp | 1 + sakura_core/debug/CRunningTimer.h | 1 + sakura_core/debug/Debug1.cpp | 1 + sakura_core/debug/Debug1.h | 1 + sakura_core/debug/Debug2.cpp | 23 ++++++++++++++++ sakura_core/debug/Debug2.h | 1 + sakura_core/debug/Debug3.cpp | 23 ++++++++++++++++ sakura_core/debug/Debug3.h | 1 + sakura_core/dlg/CDialog.cpp | 1 + sakura_core/dlg/CDialog.h | 1 + sakura_core/dlg/CDlgAbout.cpp | 1 + sakura_core/dlg/CDlgAbout.h | 1 + sakura_core/dlg/CDlgCancel.cpp | 1 + sakura_core/dlg/CDlgCancel.h | 1 + sakura_core/dlg/CDlgCompare.cpp | 1 + sakura_core/dlg/CDlgCompare.h | 1 + sakura_core/dlg/CDlgCtrlCode.cpp | 1 + sakura_core/dlg/CDlgCtrlCode.h | 1 + sakura_core/dlg/CDlgDiff.cpp | 1 + sakura_core/dlg/CDlgDiff.h | 1 + sakura_core/dlg/CDlgExec.cpp | 1 + sakura_core/dlg/CDlgExec.h | 1 + sakura_core/dlg/CDlgFavorite.cpp | 1 + sakura_core/dlg/CDlgFavorite.h | 1 + sakura_core/dlg/CDlgFileUpdateQuery.cpp | 1 + sakura_core/dlg/CDlgFileUpdateQuery.h | 1 + sakura_core/dlg/CDlgFind.cpp | 1 + sakura_core/dlg/CDlgFind.h | 1 + sakura_core/dlg/CDlgGrep.cpp | 1 + sakura_core/dlg/CDlgGrep.h | 1 + sakura_core/dlg/CDlgGrepReplace.cpp | 1 + sakura_core/dlg/CDlgGrepReplace.h | 1 + sakura_core/dlg/CDlgInput1.cpp | 1 + sakura_core/dlg/CDlgInput1.h | 1 + sakura_core/dlg/CDlgJump.cpp | 1 + sakura_core/dlg/CDlgJump.h | 1 + sakura_core/dlg/CDlgOpenFile.cpp | 1 + sakura_core/dlg/CDlgOpenFile.h | 1 + .../dlg/CDlgOpenFile_CommonFileDialog.cpp | 1 + .../dlg/CDlgOpenFile_CommonItemDialog.cpp | 1 + sakura_core/dlg/CDlgPluginOption.cpp | 1 + sakura_core/dlg/CDlgPluginOption.h | 1 + sakura_core/dlg/CDlgPrintSetting.cpp | 1 + sakura_core/dlg/CDlgPrintSetting.h | 1 + sakura_core/dlg/CDlgProfileMgr.cpp | 1 + sakura_core/dlg/CDlgProfileMgr.h | 1 + sakura_core/dlg/CDlgProperty.cpp | 1 + sakura_core/dlg/CDlgProperty.h | 1 + sakura_core/dlg/CDlgReplace.cpp | 1 + sakura_core/dlg/CDlgReplace.h | 1 + sakura_core/dlg/CDlgSetCharSet.cpp | 1 + sakura_core/dlg/CDlgSetCharSet.h | 1 + sakura_core/dlg/CDlgTagJumpList.cpp | 1 + sakura_core/dlg/CDlgTagJumpList.h | 1 + sakura_core/dlg/CDlgTagsMake.cpp | 1 + sakura_core/dlg/CDlgTagsMake.h | 1 + sakura_core/dlg/CDlgWinSize.cpp | 1 + sakura_core/dlg/CDlgWinSize.h | 1 + sakura_core/dlg/CDlgWindowList.cpp | 1 + sakura_core/dlg/CDlgWindowList.h | 1 + sakura_core/doc/CBlockComment.cpp | 1 + sakura_core/doc/CBlockComment.h | 1 + sakura_core/doc/CDocEditor.cpp | 1 + sakura_core/doc/CDocEditor.h | 1 + sakura_core/doc/CDocFile.cpp | 1 + sakura_core/doc/CDocFile.h | 1 + sakura_core/doc/CDocFileOperation.cpp | 1 + sakura_core/doc/CDocFileOperation.h | 1 + sakura_core/doc/CDocListener.cpp | 1 + sakura_core/doc/CDocListener.h | 1 + sakura_core/doc/CDocLocker.cpp | 23 ++++++++++++++++ sakura_core/doc/CDocLocker.h | 1 + sakura_core/doc/CDocOutline.cpp | 1 + sakura_core/doc/CDocOutline.h | 1 + sakura_core/doc/CDocReader.cpp | 23 ++++++++++++++++ sakura_core/doc/CDocReader.h | 1 + sakura_core/doc/CDocType.cpp | 1 + sakura_core/doc/CDocType.h | 1 + sakura_core/doc/CDocTypeSetting.cpp | 1 + sakura_core/doc/CDocTypeSetting.h | 1 + sakura_core/doc/CDocVisitor.cpp | 23 ++++++++++++++++ sakura_core/doc/CDocVisitor.h | 1 + sakura_core/doc/CEditDoc.cpp | 1 + sakura_core/doc/CEditDoc.h | 1 + sakura_core/doc/CLineComment.cpp | 1 + sakura_core/doc/CLineComment.h | 1 + sakura_core/doc/layout/CLayout.cpp | 1 + sakura_core/doc/layout/CLayout.h | 1 + sakura_core/doc/layout/CLayoutExInfo.h | 1 + sakura_core/doc/layout/CLayoutMgr.cpp | 1 + sakura_core/doc/layout/CLayoutMgr.h | 1 + .../doc/layout/CLayoutMgr_DoLayout.cpp | 23 ++++++++++++++++ sakura_core/doc/layout/CLayoutMgr_New.cpp | 1 + sakura_core/doc/layout/CLayoutMgr_New2.cpp | 1 + sakura_core/doc/layout/CTsvModeInfo.cpp | 1 + sakura_core/doc/layout/CTsvModeInfo.h | 1 + sakura_core/doc/logic/CDocLine.cpp | 1 + sakura_core/doc/logic/CDocLine.h | 1 + sakura_core/doc/logic/CDocLineMgr.cpp | 1 + sakura_core/doc/logic/CDocLineMgr.h | 1 + sakura_core/docplus/CBookmarkManager.cpp | 23 ++++++++++++++++ sakura_core/docplus/CBookmarkManager.h | 1 + sakura_core/docplus/CDiffManager.cpp | 23 ++++++++++++++++ sakura_core/docplus/CDiffManager.h | 1 + sakura_core/docplus/CFuncListManager.cpp | 1 + sakura_core/docplus/CFuncListManager.h | 1 + sakura_core/docplus/CModifyManager.cpp | 23 ++++++++++++++++ sakura_core/docplus/CModifyManager.h | 1 + sakura_core/env/CAppNodeManager.cpp | 1 + sakura_core/env/CAppNodeManager.h | 1 + sakura_core/env/CDocTypeManager.cpp | 1 + sakura_core/env/CDocTypeManager.h | 1 + sakura_core/env/CFileNameManager.cpp | 1 + sakura_core/env/CFileNameManager.h | 1 + sakura_core/env/CFormatManager.cpp | 1 + sakura_core/env/CFormatManager.h | 1 + sakura_core/env/CHelpManager.cpp | 1 + sakura_core/env/CHelpManager.h | 1 + sakura_core/env/CSakuraEnvironment.cpp | 1 + sakura_core/env/CSakuraEnvironment.h | 1 + sakura_core/env/CSearchKeywordManager.cpp | 1 + sakura_core/env/CSearchKeywordManager.h | 1 + sakura_core/env/CShareData.cpp | 1 + sakura_core/env/CShareData.h | 1 + sakura_core/env/CShareData_IO.cpp | 1 + sakura_core/env/CShareData_IO.h | 1 + sakura_core/env/CTagJumpManager.cpp | 1 + sakura_core/env/CTagJumpManager.h | 1 + sakura_core/env/CommonSetting.cpp | 1 + sakura_core/env/CommonSetting.h | 1 + sakura_core/env/DLLSHAREDATA.cpp | 1 + sakura_core/env/DLLSHAREDATA.h | 1 + sakura_core/extmodule/CBregexp.cpp | 1 + sakura_core/extmodule/CBregexp.h | 1 + sakura_core/extmodule/CBregexpDll2.cpp | 1 + sakura_core/extmodule/CBregexpDll2.h | 1 + sakura_core/extmodule/CDllHandler.cpp | 1 + sakura_core/extmodule/CDllHandler.h | 1 + sakura_core/extmodule/CHtmlHelp.cpp | 1 + sakura_core/extmodule/CHtmlHelp.h | 1 + sakura_core/extmodule/CMigemo.cpp | 1 + sakura_core/extmodule/CMigemo.h | 1 + sakura_core/extmodule/CUxTheme.cpp | 1 + sakura_core/extmodule/CUxTheme.h | 1 + sakura_core/func/CFuncKeyWnd.cpp | 1 + sakura_core/func/CFuncKeyWnd.h | 1 + sakura_core/func/CFuncLookup.cpp | 1 + sakura_core/func/CFuncLookup.h | 1 + sakura_core/func/CKeyBind.cpp | 1 + sakura_core/func/CKeyBind.h | 1 + sakura_core/func/Funccode.cpp | 1 + sakura_core/func/Funccode.h | 1 + sakura_core/io/CBinaryStream.cpp | 23 ++++++++++++++++ sakura_core/io/CBinaryStream.h | 1 + sakura_core/io/CFile.cpp | 23 ++++++++++++++++ sakura_core/io/CFile.h | 1 + sakura_core/io/CFileLoad.cpp | 1 + sakura_core/io/CFileLoad.h | 1 + sakura_core/io/CIoBridge.cpp | 23 ++++++++++++++++ sakura_core/io/CIoBridge.h | 1 + sakura_core/io/CStream.cpp | 23 ++++++++++++++++ sakura_core/io/CStream.h | 1 + sakura_core/io/CTextStream.cpp | 23 ++++++++++++++++ sakura_core/io/CTextStream.h | 1 + sakura_core/io/CZipFile.cpp | 1 + sakura_core/io/CZipFile.h | 1 + sakura_core/macro/CCookieManager.cpp | 1 + sakura_core/macro/CCookieManager.h | 1 + sakura_core/macro/CEditorIfObj.cpp | 1 + sakura_core/macro/CEditorIfObj.h | 1 + sakura_core/macro/CIfObj.cpp | 1 + sakura_core/macro/CIfObj.h | 1 + sakura_core/macro/CKeyMacroMgr.cpp | 1 + sakura_core/macro/CKeyMacroMgr.h | 1 + sakura_core/macro/CMacro.cpp | 1 + sakura_core/macro/CMacro.h | 1 + sakura_core/macro/CMacroFactory.cpp | 1 + sakura_core/macro/CMacroFactory.h | 1 + sakura_core/macro/CMacroManagerBase.cpp | 1 + sakura_core/macro/CMacroManagerBase.h | 1 + sakura_core/macro/CPPA.cpp | 1 + sakura_core/macro/CPPA.h | 1 + sakura_core/macro/CPPAMacroMgr.cpp | 1 + sakura_core/macro/CPPAMacroMgr.h | 1 + sakura_core/macro/CSMacroMgr.cpp | 1 + sakura_core/macro/CSMacroMgr.h | 1 + sakura_core/macro/CWSH.cpp | 1 + sakura_core/macro/CWSH.h | 1 + sakura_core/macro/CWSHIfObj.cpp | 1 + sakura_core/macro/CWSHIfObj.h | 1 + sakura_core/macro/CWSHManager.cpp | 1 + sakura_core/macro/CWSHManager.h | 1 + sakura_core/mem/CMemory.cpp | 1 + sakura_core/mem/CMemory.h | 1 + sakura_core/mem/CMemoryIterator.h | 1 + sakura_core/mem/CNative.cpp | 23 ++++++++++++++++ sakura_core/mem/CNative.h | 1 + sakura_core/mem/CNativeA.cpp | 23 ++++++++++++++++ sakura_core/mem/CNativeA.h | 1 + sakura_core/mem/CNativeW.cpp | 23 ++++++++++++++++ sakura_core/mem/CNativeW.h | 1 + sakura_core/mem/CRecycledBuffer.cpp | 23 ++++++++++++++++ sakura_core/mem/CRecycledBuffer.h | 1 + sakura_core/mfclike/CMyWnd.cpp | 23 ++++++++++++++++ sakura_core/mfclike/CMyWnd.h | 1 + sakura_core/outline/CDlgFileTree.cpp | 1 + sakura_core/outline/CDlgFileTree.h | 1 + sakura_core/outline/CDlgFuncList.cpp | 1 + sakura_core/outline/CDlgFuncList.h | 1 + sakura_core/outline/CFuncInfo.cpp | 1 + sakura_core/outline/CFuncInfo.h | 1 + sakura_core/outline/CFuncInfoArr.cpp | 1 + sakura_core/outline/CFuncInfoArr.h | 1 + sakura_core/parse/CWordParse.cpp | 23 ++++++++++++++++ sakura_core/parse/CWordParse.h | 1 + sakura_core/plugin/CComplementIfObj.h | 3 ++- sakura_core/plugin/CDllPlugin.cpp | 1 + sakura_core/plugin/CDllPlugin.h | 1 + sakura_core/plugin/CJackManager.cpp | 1 + sakura_core/plugin/CJackManager.h | 1 + sakura_core/plugin/COutlineIfObj.h | 1 + sakura_core/plugin/CPlugin.cpp | 1 + sakura_core/plugin/CPlugin.h | 1 + sakura_core/plugin/CPluginIfObj.h | 1 + sakura_core/plugin/CPluginManager.cpp | 1 + sakura_core/plugin/CPluginManager.h | 1 + sakura_core/plugin/CSmartIndentIfObj.h | 1 + sakura_core/plugin/CWSHPlugin.cpp | 1 + sakura_core/plugin/CWSHPlugin.h | 1 + sakura_core/print/CPrint.cpp | 1 + sakura_core/print/CPrint.h | 1 + sakura_core/print/CPrintPreview.cpp | 1 + sakura_core/print/CPrintPreview.h | 1 + sakura_core/prop/CPropComBackup.cpp | 1 + sakura_core/prop/CPropComCustmenu.cpp | 1 + sakura_core/prop/CPropComEdit.cpp | 1 + sakura_core/prop/CPropComFile.cpp | 1 + sakura_core/prop/CPropComFileName.cpp | 1 + sakura_core/prop/CPropComFormat.cpp | 1 + sakura_core/prop/CPropComGeneral.cpp | 1 + sakura_core/prop/CPropComGrep.cpp | 1 + sakura_core/prop/CPropComHelper.cpp | 1 + sakura_core/prop/CPropComKeybind.cpp | 1 + sakura_core/prop/CPropComKeyword.cpp | 1 + sakura_core/prop/CPropComMacro.cpp | 1 + sakura_core/prop/CPropComMainMenu.cpp | 1 + sakura_core/prop/CPropComPlugin.cpp | 1 + sakura_core/prop/CPropComStatusbar.cpp | 1 + sakura_core/prop/CPropComTab.cpp | 1 + sakura_core/prop/CPropComToolbar.cpp | 1 + sakura_core/prop/CPropComWin.cpp | 1 + sakura_core/prop/CPropCommon.cpp | 1 + sakura_core/prop/CPropCommon.h | 1 + sakura_core/recent/CMRUFile.cpp | 1 + sakura_core/recent/CMRUFile.h | 1 + sakura_core/recent/CMRUFolder.cpp | 1 + sakura_core/recent/CMRUFolder.h | 1 + sakura_core/recent/CMruListener.cpp | 1 + sakura_core/recent/CMruListener.h | 1 + sakura_core/recent/CRecent.cpp | 1 + sakura_core/recent/CRecent.h | 1 + sakura_core/recent/CRecentCmd.cpp | 1 + sakura_core/recent/CRecentCmd.h | 1 + sakura_core/recent/CRecentCurDir.cpp | 1 + sakura_core/recent/CRecentCurDir.h | 1 + sakura_core/recent/CRecentEditNode.cpp | 1 + sakura_core/recent/CRecentEditNode.h | 1 + sakura_core/recent/CRecentExceptMru.cpp | 1 + sakura_core/recent/CRecentExceptMru.h | 1 + sakura_core/recent/CRecentFile.cpp | 1 + sakura_core/recent/CRecentFile.h | 1 + sakura_core/recent/CRecentFolder.cpp | 1 + sakura_core/recent/CRecentFolder.h | 1 + sakura_core/recent/CRecentGrepFile.cpp | 1 + sakura_core/recent/CRecentGrepFile.h | 1 + sakura_core/recent/CRecentGrepFolder.cpp | 1 + sakura_core/recent/CRecentGrepFolder.h | 1 + sakura_core/recent/CRecentImp.cpp | 1 + sakura_core/recent/CRecentImp.h | 1 + sakura_core/recent/CRecentReplace.cpp | 1 + sakura_core/recent/CRecentReplace.h | 1 + sakura_core/recent/CRecentSearch.cpp | 1 + sakura_core/recent/CRecentSearch.h | 1 + sakura_core/recent/CRecentTagjumpKeyword.cpp | 1 + sakura_core/recent/CRecentTagjumpKeyword.h | 1 + sakura_core/recent/SShare_History.h | 1 + sakura_core/typeprop/CDlgKeywordSelect.cpp | 1 + sakura_core/typeprop/CDlgKeywordSelect.h | 1 + sakura_core/typeprop/CDlgSameColor.cpp | 1 + sakura_core/typeprop/CDlgSameColor.h | 1 + sakura_core/typeprop/CDlgTypeAscertain.cpp | 1 + sakura_core/typeprop/CDlgTypeAscertain.h | 1 + sakura_core/typeprop/CDlgTypeList.cpp | 1 + sakura_core/typeprop/CDlgTypeList.h | 1 + sakura_core/typeprop/CImpExpManager.cpp | 1 + sakura_core/typeprop/CImpExpManager.h | 1 + sakura_core/typeprop/CPropTypes.cpp | 1 + sakura_core/typeprop/CPropTypes.h | 1 + sakura_core/typeprop/CPropTypesColor.cpp | 1 + sakura_core/typeprop/CPropTypesKeyHelp.cpp | 1 + sakura_core/typeprop/CPropTypesRegex.cpp | 1 + sakura_core/typeprop/CPropTypesScreen.cpp | 1 + sakura_core/typeprop/CPropTypesSupport.cpp | 1 + sakura_core/typeprop/CPropTypesWindow.cpp | 23 ++++++++++++++++ sakura_core/types/CType.cpp | 1 + sakura_core/types/CType.h | 1 + sakura_core/types/CTypeSupport.cpp | 1 + sakura_core/types/CTypeSupport.h | 1 + sakura_core/types/CType_Asm.cpp | 1 + sakura_core/types/CType_Awk.cpp | 1 + sakura_core/types/CType_Basis.cpp | 1 + sakura_core/types/CType_Cobol.cpp | 1 + sakura_core/types/CType_CorbaIdl.cpp | 1 + sakura_core/types/CType_Cpp.cpp | 1 + sakura_core/types/CType_Dos.cpp | 1 + sakura_core/types/CType_Erlang.cpp | 1 + sakura_core/types/CType_Html.cpp | 1 + sakura_core/types/CType_Ini.cpp | 1 + sakura_core/types/CType_Java.cpp | 1 + sakura_core/types/CType_Others.cpp | 1 + sakura_core/types/CType_Pascal.cpp | 1 + sakura_core/types/CType_Perl.cpp | 1 + sakura_core/types/CType_Python.cpp | 1 + sakura_core/types/CType_Rich.cpp | 1 + sakura_core/types/CType_Sql.cpp | 1 + sakura_core/types/CType_Tex.cpp | 1 + sakura_core/types/CType_Text.cpp | 1 + sakura_core/types/CType_Vb.cpp | 1 + sakura_core/uiparts/CGraphics.cpp | 24 +++++++++++++++++ sakura_core/uiparts/CGraphics.h | 1 + sakura_core/uiparts/CImageListMgr.cpp | 1 + sakura_core/uiparts/CImageListMgr.h | 1 + sakura_core/uiparts/CMenuDrawer.cpp | 1 + sakura_core/uiparts/CMenuDrawer.h | 1 + sakura_core/uiparts/CSoundSet.cpp | 23 ++++++++++++++++ sakura_core/uiparts/CSoundSet.h | 1 + sakura_core/uiparts/CVisualProgress.cpp | 23 ++++++++++++++++ sakura_core/uiparts/CVisualProgress.h | 1 + sakura_core/uiparts/CWaitCursor.cpp | 1 + sakura_core/uiparts/CWaitCursor.h | 1 + sakura_core/uiparts/HandCursor.h | 1 + sakura_core/util/MessageBoxF.cpp | 1 + sakura_core/util/MessageBoxF.h | 1 + sakura_core/util/RegKey.h | 1 + sakura_core/util/StaticType.h | 1 + sakura_core/util/container.h | 1 + sakura_core/util/design_template.h | 1 + sakura_core/util/file.cpp | 1 + sakura_core/util/file.h | 1 + sakura_core/util/format.cpp | 1 + sakura_core/util/format.h | 1 + sakura_core/util/input.cpp | 23 ++++++++++++++++ sakura_core/util/input.h | 1 + sakura_core/util/module.cpp | 1 + sakura_core/util/module.h | 1 + sakura_core/util/ole_convert.cpp | 23 ++++++++++++++++ sakura_core/util/ole_convert.h | 23 ++++++++++++++++ sakura_core/util/os.cpp | 23 ++++++++++++++++ sakura_core/util/os.h | 1 + sakura_core/util/relation_tool.cpp | 23 ++++++++++++++++ sakura_core/util/relation_tool.h | 1 + sakura_core/util/shell.cpp | 1 + sakura_core/util/shell.h | 1 + sakura_core/util/std_macro.h | 1 + sakura_core/util/string_ex.cpp | 23 ++++++++++++++++ sakura_core/util/string_ex.h | 1 + sakura_core/util/string_ex2.cpp | 23 ++++++++++++++++ sakura_core/util/string_ex2.h | 1 + sakura_core/util/tchar_convert.cpp | 23 ++++++++++++++++ sakura_core/util/tchar_convert.h | 1 + sakura_core/util/tchar_template.cpp | 23 ++++++++++++++++ sakura_core/util/tchar_template.h | 23 ++++++++++++++++ sakura_core/util/window.cpp | 23 ++++++++++++++++ sakura_core/util/window.h | 1 + sakura_core/util/zoom.cpp | 2 ++ sakura_core/util/zoom.h | 2 ++ sakura_core/version.h | 23 ++++++++++++++++ sakura_core/view/CCaret.cpp | 1 + sakura_core/view/CCaret.h | 1 + sakura_core/view/CEditView.cpp | 1 + sakura_core/view/CEditView.h | 1 + sakura_core/view/CEditView_CmdHokan.cpp | 1 + sakura_core/view/CEditView_Cmdgrep.cpp | 1 + sakura_core/view/CEditView_Cmdisrch.cpp | 1 + sakura_core/view/CEditView_Command.cpp | 1 + sakura_core/view/CEditView_Command_New.cpp | 1 + sakura_core/view/CEditView_Diff.cpp | 1 + sakura_core/view/CEditView_ExecCmd.cpp | 1 + sakura_core/view/CEditView_Ime.cpp | 1 + sakura_core/view/CEditView_Mouse.cpp | 1 + sakura_core/view/CEditView_Paint.cpp | 1 + sakura_core/view/CEditView_Paint.h | 1 + sakura_core/view/CEditView_Paint_Bracket.cpp | 1 + sakura_core/view/CEditView_Scroll.cpp | 1 + sakura_core/view/CEditView_Search.cpp | 1 + sakura_core/view/CRuler.cpp | 23 ++++++++++++++++ sakura_core/view/CRuler.h | 1 + sakura_core/view/CTextArea.cpp | 23 ++++++++++++++++ sakura_core/view/CTextArea.h | 1 + sakura_core/view/CTextDrawer.cpp | 1 + sakura_core/view/CTextDrawer.h | 1 + sakura_core/view/CTextMetrics.cpp | 1 + sakura_core/view/CTextMetrics.h | 1 + sakura_core/view/CViewCalc.cpp | 23 ++++++++++++++++ sakura_core/view/CViewCalc.h | 1 + sakura_core/view/CViewFont.cpp | 1 + sakura_core/view/CViewFont.h | 1 + sakura_core/view/CViewParser.cpp | 23 ++++++++++++++++ sakura_core/view/CViewParser.h | 1 + sakura_core/view/CViewSelect.cpp | 23 ++++++++++++++++ sakura_core/view/CViewSelect.h | 1 + sakura_core/view/DispPos.cpp | 23 ++++++++++++++++ sakura_core/view/DispPos.h | 1 + sakura_core/view/colors/CColorStrategy.cpp | 1 + sakura_core/view/colors/CColorStrategy.h | 1 + sakura_core/view/colors/CColor_Comment.cpp | 23 ++++++++++++++++ sakura_core/view/colors/CColor_Comment.h | 1 + sakura_core/view/colors/CColor_Found.cpp | 23 ++++++++++++++++ sakura_core/view/colors/CColor_Found.h | 1 + sakura_core/view/colors/CColor_Heredoc.cpp | 1 + sakura_core/view/colors/CColor_Heredoc.h | 1 + sakura_core/view/colors/CColor_KeywordSet.cpp | 23 ++++++++++++++++ sakura_core/view/colors/CColor_KeywordSet.h | 1 + sakura_core/view/colors/CColor_Numeric.cpp | 23 ++++++++++++++++ sakura_core/view/colors/CColor_Numeric.h | 1 + sakura_core/view/colors/CColor_Quote.cpp | 23 ++++++++++++++++ sakura_core/view/colors/CColor_Quote.h | 1 + .../view/colors/CColor_RegexKeyword.cpp | 1 + sakura_core/view/colors/CColor_RegexKeyword.h | 1 + sakura_core/view/colors/CColor_Url.cpp | 23 ++++++++++++++++ sakura_core/view/colors/CColor_Url.h | 1 + sakura_core/view/colors/EColorIndexType.h | 1 + sakura_core/view/figures/CFigureManager.cpp | 1 + sakura_core/view/figures/CFigureManager.h | 1 + sakura_core/view/figures/CFigureStrategy.cpp | 1 + sakura_core/view/figures/CFigureStrategy.h | 1 + sakura_core/view/figures/CFigure_Comma.cpp | 23 ++++++++++++++++ sakura_core/view/figures/CFigure_Comma.h | 1 + sakura_core/view/figures/CFigure_CtrlCode.cpp | 23 ++++++++++++++++ sakura_core/view/figures/CFigure_CtrlCode.h | 1 + sakura_core/view/figures/CFigure_Eol.cpp | 1 + sakura_core/view/figures/CFigure_Eol.h | 1 + sakura_core/view/figures/CFigure_HanSpace.cpp | 23 ++++++++++++++++ sakura_core/view/figures/CFigure_HanSpace.h | 1 + sakura_core/view/figures/CFigure_Tab.cpp | 23 ++++++++++++++++ sakura_core/view/figures/CFigure_Tab.h | 1 + sakura_core/view/figures/CFigure_ZenSpace.cpp | 23 ++++++++++++++++ sakura_core/view/figures/CFigure_ZenSpace.h | 1 + sakura_core/window/CAutoScrollWnd.cpp | 1 + sakura_core/window/CAutoScrollWnd.h | 1 + sakura_core/window/CEditWnd.cpp | 1 + sakura_core/window/CEditWnd.h | 1 + sakura_core/window/CMainStatusBar.cpp | 23 ++++++++++++++++ sakura_core/window/CMainStatusBar.h | 1 + sakura_core/window/CMainToolBar.cpp | 1 + sakura_core/window/CMainToolBar.h | 1 + sakura_core/window/CSplitBoxWnd.cpp | 1 + sakura_core/window/CSplitBoxWnd.h | 1 + sakura_core/window/CSplitterWnd.cpp | 1 + sakura_core/window/CSplitterWnd.h | 1 + sakura_core/window/CTabWnd.cpp | 1 + sakura_core/window/CTabWnd.h | 1 + sakura_core/window/CTipWnd.cpp | 1 + sakura_core/window/CTipWnd.h | 1 + sakura_core/window/CWnd.cpp | 1 + sakura_core/window/CWnd.h | 1 + tests/unittests/test-int2dec.cpp | 26 ++++++++++++++++++- tests/unittests/test-sample.cpp | 26 ++++++++++++++++++- 682 files changed, 3001 insertions(+), 9 deletions(-) diff --git a/HeaderMake/HeaderMake.cpp b/HeaderMake/HeaderMake.cpp index 9983f8bbd7..af2a114515 100644 --- a/HeaderMake/HeaderMake.cpp +++ b/HeaderMake/HeaderMake.cpp @@ -7,6 +7,7 @@ /* Copyright (C) 2007-2008, kobake Copyright (C) 2009, rastiv + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CAutoReloadAgent.cpp b/sakura_core/CAutoReloadAgent.cpp index 80831c93b8..6cda3d6918 100644 --- a/sakura_core/CAutoReloadAgent.cpp +++ b/sakura_core/CAutoReloadAgent.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CAutoReloadAgent.h b/sakura_core/CAutoReloadAgent.h index b9d951a9f8..a3e0843f04 100644 --- a/sakura_core/CAutoReloadAgent.h +++ b/sakura_core/CAutoReloadAgent.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CAutoSaveAgent.cpp b/sakura_core/CAutoSaveAgent.cpp index 1361c6ba9b..c8a0d95fc9 100644 --- a/sakura_core/CAutoSaveAgent.cpp +++ b/sakura_core/CAutoSaveAgent.cpp @@ -6,6 +6,7 @@ */ /* Copyright (C) 2000-2001, genta + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CAutoSaveAgent.h b/sakura_core/CAutoSaveAgent.h index 2b545cd8f8..656c174f6f 100644 --- a/sakura_core/CAutoSaveAgent.h +++ b/sakura_core/CAutoSaveAgent.h @@ -6,6 +6,7 @@ */ /* Copyright (C) 2000-2001, genta + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CBackupAgent.cpp b/sakura_core/CBackupAgent.cpp index b2284761c2..7eb8e15c98 100644 --- a/sakura_core/CBackupAgent.cpp +++ b/sakura_core/CBackupAgent.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CBackupAgent.h b/sakura_core/CBackupAgent.h index f186bae50e..cfb29905c0 100644 --- a/sakura_core/CBackupAgent.h +++ b/sakura_core/CBackupAgent.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CCodeChecker.cpp b/sakura_core/CCodeChecker.cpp index 351c6f8526..844650b0a6 100644 --- a/sakura_core/CCodeChecker.cpp +++ b/sakura_core/CCodeChecker.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CCodeChecker.h" #include "charset/CCodePage.h" diff --git a/sakura_core/CCodeChecker.h b/sakura_core/CCodeChecker.h index 21b91f8080..cc7f5454af 100644 --- a/sakura_core/CCodeChecker.h +++ b/sakura_core/CCodeChecker.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CDataProfile.cpp b/sakura_core/CDataProfile.cpp index 5ae7e12bd8..f5a1415e84 100644 --- a/sakura_core/CDataProfile.cpp +++ b/sakura_core/CDataProfile.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CDataProfile.h" diff --git a/sakura_core/CDataProfile.h b/sakura_core/CDataProfile.h index e6df79f643..9056361e94 100644 --- a/sakura_core/CDataProfile.h +++ b/sakura_core/CDataProfile.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CDicMgr.cpp b/sakura_core/CDicMgr.cpp index 009826e67a..3dd936630e 100644 --- a/sakura_core/CDicMgr.cpp +++ b/sakura_core/CDicMgr.cpp @@ -10,6 +10,7 @@ Copyright (C) 2003, Moca Copyright (C) 2006, fon Copyright (C) 2007, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/CDicMgr.h b/sakura_core/CDicMgr.h index a24f18bcc2..3e3852970f 100644 --- a/sakura_core/CDicMgr.h +++ b/sakura_core/CDicMgr.h @@ -6,6 +6,7 @@ */ /* Copyright (C) 1998-2001, Norio Nakatani + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/CEditApp.cpp b/sakura_core/CEditApp.cpp index 66166f5ccc..d61378ad43 100644 --- a/sakura_core/CEditApp.cpp +++ b/sakura_core/CEditApp.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2007, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CEditApp.h b/sakura_core/CEditApp.h index 392ac023de..f2ea66999c 100644 --- a/sakura_core/CEditApp.h +++ b/sakura_core/CEditApp.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2007, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CEol.cpp b/sakura_core/CEol.cpp index 07d3748cf9..adc3a895d5 100644 --- a/sakura_core/CEol.cpp +++ b/sakura_core/CEol.cpp @@ -7,6 +7,7 @@ /* Copyright (C) 2000-2001, genta Copyright (C) 2000, Frozen, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CEol.h b/sakura_core/CEol.h index 336a673117..88719edb30 100644 --- a/sakura_core/CEol.h +++ b/sakura_core/CEol.h @@ -7,6 +7,7 @@ /* Copyright (C) 2000-2001, genta Copyright (C) 2002, frozen, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CFileExt.cpp b/sakura_core/CFileExt.cpp index 86136fc269..ea08cb42b0 100644 --- a/sakura_core/CFileExt.cpp +++ b/sakura_core/CFileExt.cpp @@ -6,6 +6,7 @@ */ /* Copyright (C) 2003, MIK + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CFileExt.h b/sakura_core/CFileExt.h index 841c51623f..fabfb5f744 100644 --- a/sakura_core/CFileExt.h +++ b/sakura_core/CFileExt.h @@ -6,6 +6,7 @@ */ /* Copyright (C) 2003, MIK + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CGrepAgent.cpp b/sakura_core/CGrepAgent.cpp index b036702667..0d7a2e28ba 100644 --- a/sakura_core/CGrepAgent.cpp +++ b/sakura_core/CGrepAgent.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CGrepAgent.h" #include "CGrepEnumKeys.h" diff --git a/sakura_core/CGrepAgent.h b/sakura_core/CGrepAgent.h index f760710e15..84fd9ab0a9 100644 --- a/sakura_core/CGrepAgent.h +++ b/sakura_core/CGrepAgent.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CGrepEnumFileBase.h b/sakura_core/CGrepEnumFileBase.h index 2de8a41384..7a25ef44a7 100644 --- a/sakura_core/CGrepEnumFileBase.h +++ b/sakura_core/CGrepEnumFileBase.h @@ -7,6 +7,7 @@ */ /* Copyright (C) 2008, wakura + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CGrepEnumFiles.h b/sakura_core/CGrepEnumFiles.h index 58788cbcce..66f5a81273 100644 --- a/sakura_core/CGrepEnumFiles.h +++ b/sakura_core/CGrepEnumFiles.h @@ -7,6 +7,7 @@ */ /* Copyright (C) 2008, wakura + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CGrepEnumFilterFiles.h b/sakura_core/CGrepEnumFilterFiles.h index f497e0ca39..18b5b6c78c 100644 --- a/sakura_core/CGrepEnumFilterFiles.h +++ b/sakura_core/CGrepEnumFilterFiles.h @@ -7,6 +7,7 @@ */ /* Copyright (C) 2008, wakura + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CGrepEnumFilterFolders.h b/sakura_core/CGrepEnumFilterFolders.h index c3e493b0c0..88669453f2 100644 --- a/sakura_core/CGrepEnumFilterFolders.h +++ b/sakura_core/CGrepEnumFilterFolders.h @@ -7,6 +7,7 @@ */ /* Copyright (C) 2008, wakura + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CGrepEnumFolders.h b/sakura_core/CGrepEnumFolders.h index c0b01ae14b..0d6c5fdc57 100644 --- a/sakura_core/CGrepEnumFolders.h +++ b/sakura_core/CGrepEnumFolders.h @@ -7,6 +7,7 @@ */ /* Copyright (C) 2008, wakura + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CGrepEnumKeys.h b/sakura_core/CGrepEnumKeys.h index 1ade4a2546..5eb1e1a96b 100644 --- a/sakura_core/CGrepEnumKeys.h +++ b/sakura_core/CGrepEnumKeys.h @@ -8,6 +8,7 @@ /* Copyright (C) 2008, wakura Copyright (C) 2011, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CHokanMgr.cpp b/sakura_core/CHokanMgr.cpp index 6c4ea347ec..22f0522aa3 100644 --- a/sakura_core/CHokanMgr.cpp +++ b/sakura_core/CHokanMgr.cpp @@ -11,6 +11,7 @@ Copyright (C) 2003, Moca, KEITA Copyright (C) 2004, genta, Moca, novice Copyright (C) 2007, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/CHokanMgr.h b/sakura_core/CHokanMgr.h index 45307a8e2b..1e7358ddd4 100644 --- a/sakura_core/CHokanMgr.h +++ b/sakura_core/CHokanMgr.h @@ -7,6 +7,7 @@ Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2001, asa-o Copyright (C) 2003, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/CKeyWordSetMgr.cpp b/sakura_core/CKeyWordSetMgr.cpp index 10921e355e..8acf4f969d 100644 --- a/sakura_core/CKeyWordSetMgr.cpp +++ b/sakura_core/CKeyWordSetMgr.cpp @@ -12,6 +12,7 @@ Copyright (C) 2002, genta, Moca Copyright (C) 2004, Moca Copyright (C) 2005, Moca, genta + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CKeyWordSetMgr.h b/sakura_core/CKeyWordSetMgr.h index 180c4a0efa..fa11367300 100644 --- a/sakura_core/CKeyWordSetMgr.h +++ b/sakura_core/CKeyWordSetMgr.h @@ -12,6 +12,7 @@ Copyright (C) 2001, jepro Copyright (C) 2004, Moca Copyright (C) 2005, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CLoadAgent.cpp b/sakura_core/CLoadAgent.cpp index 19f6d77aba..b3360247dd 100644 --- a/sakura_core/CLoadAgent.cpp +++ b/sakura_core/CLoadAgent.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CLoadAgent.h b/sakura_core/CLoadAgent.h index 2e9d4c8e3a..2d7b14e8e4 100644 --- a/sakura_core/CLoadAgent.h +++ b/sakura_core/CLoadAgent.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CMarkMgr.cpp b/sakura_core/CMarkMgr.cpp index cb8151ff17..b2fc803b3f 100644 --- a/sakura_core/CMarkMgr.cpp +++ b/sakura_core/CMarkMgr.cpp @@ -7,6 +7,7 @@ /* Copyright (C) 2000-2001, genta Copyright (C) 2002, aroka + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CMarkMgr.h b/sakura_core/CMarkMgr.h index 5da002345e..d76711e163 100644 --- a/sakura_core/CMarkMgr.h +++ b/sakura_core/CMarkMgr.h @@ -7,6 +7,7 @@ /* Copyright (C) 2000-2001, genta Copyright (C) 2002, aroka + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/COpe.cpp b/sakura_core/COpe.cpp index 762a4c0a83..b2bb3646df 100644 --- a/sakura_core/COpe.cpp +++ b/sakura_core/COpe.cpp @@ -6,6 +6,7 @@ */ /* Copyright (C) 1998-2001, Norio Nakatani + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/COpe.h b/sakura_core/COpe.h index 56f43ef019..5a98055dff 100644 --- a/sakura_core/COpe.h +++ b/sakura_core/COpe.h @@ -6,6 +6,7 @@ */ /* Copyright (C) 1998-2001, Norio Nakatani + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/COpeBlk.cpp b/sakura_core/COpeBlk.cpp index 5fa51102a9..02d2e3eb44 100644 --- a/sakura_core/COpeBlk.cpp +++ b/sakura_core/COpeBlk.cpp @@ -6,6 +6,7 @@ */ /* Copyright (C) 1998-2001, Norio Nakatani + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/COpeBlk.h b/sakura_core/COpeBlk.h index f30ac2e961..d817bc65a7 100644 --- a/sakura_core/COpeBlk.h +++ b/sakura_core/COpeBlk.h @@ -6,6 +6,7 @@ */ /* Copyright (C) 1998-2001, Norio Nakatani + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/COpeBuf.cpp b/sakura_core/COpeBuf.cpp index 4212563a32..e3cdb8b69a 100644 --- a/sakura_core/COpeBuf.cpp +++ b/sakura_core/COpeBuf.cpp @@ -6,6 +6,7 @@ */ /* Copyright (C) 1998-2001, Norio Nakatani + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/COpeBuf.h b/sakura_core/COpeBuf.h index 77fc673760..510bc9b25f 100644 --- a/sakura_core/COpeBuf.h +++ b/sakura_core/COpeBuf.h @@ -6,6 +6,7 @@ */ /* Copyright (C) 1998-2001, Norio Nakatani + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/CProfile.cpp b/sakura_core/CProfile.cpp index 9e4fe37e1a..8a9764c20f 100644 --- a/sakura_core/CProfile.cpp +++ b/sakura_core/CProfile.cpp @@ -12,6 +12,7 @@ Copyright (C) 2004, D.S.Koba, MIK, genta Copyright (C) 2006, D.S.Koba, ryoji Copyright (C) 2009, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CProfile.h b/sakura_core/CProfile.h index 79c8f145ce..87e85eea14 100644 --- a/sakura_core/CProfile.h +++ b/sakura_core/CProfile.h @@ -9,6 +9,7 @@ */ /* Copyright (C) 2003-2006, D.S.Koba + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CPropertyManager.cpp b/sakura_core/CPropertyManager.cpp index 3b61ff066e..ff8627cdc7 100644 --- a/sakura_core/CPropertyManager.cpp +++ b/sakura_core/CPropertyManager.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CPropertyManager.h b/sakura_core/CPropertyManager.h index 549ef2cd23..6d91c1ce90 100644 --- a/sakura_core/CPropertyManager.h +++ b/sakura_core/CPropertyManager.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CReadManager.cpp b/sakura_core/CReadManager.cpp index bbc7849cea..094ce8dad9 100644 --- a/sakura_core/CReadManager.cpp +++ b/sakura_core/CReadManager.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CReadManager.h b/sakura_core/CReadManager.h index 33f93b06e0..268ba66e2e 100644 --- a/sakura_core/CReadManager.h +++ b/sakura_core/CReadManager.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CRegexKeyword.cpp b/sakura_core/CRegexKeyword.cpp index 37b459220c..e841750f2f 100644 --- a/sakura_core/CRegexKeyword.cpp +++ b/sakura_core/CRegexKeyword.cpp @@ -10,6 +10,7 @@ /* Copyright (C) 2001, MIK Copyright (C) 2002, YAZAKI + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/CRegexKeyword.h b/sakura_core/CRegexKeyword.h index 5df7a71ffa..f1d5bdb70d 100644 --- a/sakura_core/CRegexKeyword.h +++ b/sakura_core/CRegexKeyword.h @@ -9,6 +9,7 @@ */ /* Copyright (C) 2001, MIK + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/CSaveAgent.cpp b/sakura_core/CSaveAgent.cpp index aea8bd0178..1727909860 100644 --- a/sakura_core/CSaveAgent.cpp +++ b/sakura_core/CSaveAgent.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CSaveAgent.h b/sakura_core/CSaveAgent.h index e9813dbcaf..d27b00e2e1 100644 --- a/sakura_core/CSaveAgent.h +++ b/sakura_core/CSaveAgent.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CSearchAgent.cpp b/sakura_core/CSearchAgent.cpp index e340ce229a..26d27a3401 100644 --- a/sakura_core/CSearchAgent.cpp +++ b/sakura_core/CSearchAgent.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include diff --git a/sakura_core/CSearchAgent.h b/sakura_core/CSearchAgent.h index a624e80f1e..85bc411b0c 100644 --- a/sakura_core/CSearchAgent.h +++ b/sakura_core/CSearchAgent.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CSelectLang.cpp b/sakura_core/CSelectLang.cpp index 588606f870..4a6a9d9616 100644 --- a/sakura_core/CSelectLang.cpp +++ b/sakura_core/CSelectLang.cpp @@ -6,6 +6,7 @@ */ /* Copyright (C) 2011, nasukoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/CSelectLang.h b/sakura_core/CSelectLang.h index 23fb10f28c..538f324fb8 100644 --- a/sakura_core/CSelectLang.h +++ b/sakura_core/CSelectLang.h @@ -6,6 +6,7 @@ */ /* Copyright (C) 2011, nasukoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/CSortedTagJumpList.cpp b/sakura_core/CSortedTagJumpList.cpp index b4d8ec1757..06915ae8ef 100644 --- a/sakura_core/CSortedTagJumpList.cpp +++ b/sakura_core/CSortedTagJumpList.cpp @@ -6,6 +6,7 @@ */ /* Copyright (C) 2005, MIK, genta + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CSortedTagJumpList.h b/sakura_core/CSortedTagJumpList.h index 08e99ad0cf..21e362e9e8 100644 --- a/sakura_core/CSortedTagJumpList.h +++ b/sakura_core/CSortedTagJumpList.h @@ -6,6 +6,7 @@ */ /* Copyright (C) 2005, MIK, genta + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CWriteManager.cpp b/sakura_core/CWriteManager.cpp index e42f9bc8e6..31a2e4edc7 100644 --- a/sakura_core/CWriteManager.cpp +++ b/sakura_core/CWriteManager.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CWriteManager.h" #include diff --git a/sakura_core/CWriteManager.h b/sakura_core/CWriteManager.h index cfe646438c..e3a1f6ecbb 100644 --- a/sakura_core/CWriteManager.h +++ b/sakura_core/CWriteManager.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/EditInfo.h b/sakura_core/EditInfo.h index 737ca196c8..192e89a825 100644 --- a/sakura_core/EditInfo.h +++ b/sakura_core/EditInfo.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/StdAfx.cpp b/sakura_core/StdAfx.cpp index c89142db0b..2c8faefcef 100644 --- a/sakura_core/StdAfx.cpp +++ b/sakura_core/StdAfx.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ // stdafx.cpp : 標準インクルードファイルを含むソースファイル // sakura_core.pch 生成されるプリコンパイル済ヘッダー // stdafx.obj 生成されるプリコンパイル済タイプ情報 diff --git a/sakura_core/StdAfx.h b/sakura_core/StdAfx.h index 2732e10e3f..69a3391df8 100644 --- a/sakura_core/StdAfx.h +++ b/sakura_core/StdAfx.h @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ // stdafx.h : 標準のシステム インクルード ファイル、 // または参照回数が多く、かつあまり変更されない // プロジェクト専用のインクルード ファイルを記述します。 diff --git a/sakura_core/String_define.h b/sakura_core/String_define.h index d9c99aa800..53614215fc 100644 --- a/sakura_core/String_define.h +++ b/sakura_core/String_define.h @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ // LMP: Start ----------------------------------------------------- // LMP: Start ----------------------------------------------------- diff --git a/sakura_core/_main/CAppMode.cpp b/sakura_core/_main/CAppMode.cpp index f69cafc4ed..ebc74d8246 100644 --- a/sakura_core/_main/CAppMode.cpp +++ b/sakura_core/_main/CAppMode.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CAppMode.h" #include "window/CEditWnd.h" diff --git a/sakura_core/_main/CAppMode.h b/sakura_core/_main/CAppMode.h index 443bc81274..dd51e7d2e8 100644 --- a/sakura_core/_main/CAppMode.h +++ b/sakura_core/_main/CAppMode.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/_main/CCommandLine.cpp b/sakura_core/_main/CCommandLine.cpp index 968a1bf224..5ec6b048ff 100644 --- a/sakura_core/_main/CCommandLine.cpp +++ b/sakura_core/_main/CCommandLine.cpp @@ -12,6 +12,7 @@ Copyright (C) 2005, D.S.Koba, genta, susu Copyright (C) 2006, ryoji Copyright (C) 2007, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/_main/CCommandLine.h b/sakura_core/_main/CCommandLine.h index 07aa58f095..2c7e02bf7c 100644 --- a/sakura_core/_main/CCommandLine.h +++ b/sakura_core/_main/CCommandLine.h @@ -11,6 +11,7 @@ Copyright (C) 2002, genta Copyright (C) 2005, D.S.Koba Copyright (C) 2007, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/_main/CControlProcess.cpp b/sakura_core/_main/CControlProcess.cpp index b746ebac90..54071048ce 100644 --- a/sakura_core/_main/CControlProcess.cpp +++ b/sakura_core/_main/CControlProcess.cpp @@ -9,6 +9,7 @@ Copyright (C) 2002, aroka CProcessより分離, YAZAKI Copyright (C) 2006, ryoji Copyright (C) 2007, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/_main/CControlProcess.h b/sakura_core/_main/CControlProcess.h index c7927d1e62..a3cc104575 100644 --- a/sakura_core/_main/CControlProcess.h +++ b/sakura_core/_main/CControlProcess.h @@ -7,6 +7,7 @@ /* Copyright (C) 2002, aroka 新規作成, YAZAKI Copyright (C) 2006, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/_main/CControlTray.cpp b/sakura_core/_main/CControlTray.cpp index 726ac55bba..306fef6c85 100644 --- a/sakura_core/_main/CControlTray.cpp +++ b/sakura_core/_main/CControlTray.cpp @@ -19,6 +19,7 @@ Copyright (C) 2006, ryoji Copyright (C) 2007, ryoji Copyright (C) 2008, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/_main/CControlTray.h b/sakura_core/_main/CControlTray.h index abdb1a10cc..1e5ccb93b7 100644 --- a/sakura_core/_main/CControlTray.h +++ b/sakura_core/_main/CControlTray.h @@ -17,6 +17,7 @@ Copyright (C) 2003, genta Copyright (C) 2006, ryoji Copyright (C) 2007, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/_main/CMutex.h b/sakura_core/_main/CMutex.h index aed8bddf84..c62fb34502 100644 --- a/sakura_core/_main/CMutex.h +++ b/sakura_core/_main/CMutex.h @@ -6,6 +6,7 @@ */ /* Copyright (C) 2007, ryoji, genta + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/_main/CNormalProcess.cpp b/sakura_core/_main/CNormalProcess.cpp index 9db2f7f2fb..a91df68a9e 100644 --- a/sakura_core/_main/CNormalProcess.cpp +++ b/sakura_core/_main/CNormalProcess.cpp @@ -14,6 +14,7 @@ Copyright (C) 2007, ryoji Copyright (C) 2008, Uchi Copyright (C) 2009, syat, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/_main/CNormalProcess.h b/sakura_core/_main/CNormalProcess.h index 37d80e0e1a..71afcb1f6c 100644 --- a/sakura_core/_main/CNormalProcess.h +++ b/sakura_core/_main/CNormalProcess.h @@ -6,6 +6,7 @@ */ /* Copyright (C) 2002, aroka 新規作成 + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/_main/CProcess.cpp b/sakura_core/_main/CProcess.cpp index 40dda84d59..6323a72183 100644 --- a/sakura_core/_main/CProcess.cpp +++ b/sakura_core/_main/CProcess.cpp @@ -9,6 +9,7 @@ Copyright (C) 2002, aroka 新規作成 Copyright (C) 2004, Moca Copyright (C) 2009, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/_main/CProcess.h b/sakura_core/_main/CProcess.h index b59f95c47b..b03d096714 100644 --- a/sakura_core/_main/CProcess.h +++ b/sakura_core/_main/CProcess.h @@ -7,6 +7,7 @@ /* Copyright (C) 2002, aroka 新規作成 Copyright (C) 2009, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/_main/CProcessFactory.cpp b/sakura_core/_main/CProcessFactory.cpp index 04541f0b95..e9e881917a 100644 --- a/sakura_core/_main/CProcessFactory.cpp +++ b/sakura_core/_main/CProcessFactory.cpp @@ -10,6 +10,7 @@ Copyright (C) 2001, masami shoji Copyright (C) 2002, aroka WinMainより分離 Copyright (C) 2006, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/_main/CProcessFactory.h b/sakura_core/_main/CProcessFactory.h index 888969455e..75457dafb7 100644 --- a/sakura_core/_main/CProcessFactory.h +++ b/sakura_core/_main/CProcessFactory.h @@ -7,6 +7,7 @@ /* Copyright (C) 2002, aroka 新規作成 Copyright (C) 2006, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/_main/WinMain.cpp b/sakura_core/_main/WinMain.cpp index 884f042621..b73b7a9180 100644 --- a/sakura_core/_main/WinMain.cpp +++ b/sakura_core/_main/WinMain.cpp @@ -14,6 +14,7 @@ Copyright (C) 2002, aroka Copyright (C) 2007, kobake Copyright (C) 2009, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/_main/global.cpp b/sakura_core/_main/global.cpp index 3696394955..7112b55201 100644 --- a/sakura_core/_main/global.cpp +++ b/sakura_core/_main/global.cpp @@ -9,6 +9,7 @@ Copyright (C) 2002, KK Copyright (C) 2003, MIK Copyright (C) 2005, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/_main/global.h b/sakura_core/_main/global.h index 0b8e460e09..479b7be128 100644 --- a/sakura_core/_main/global.h +++ b/sakura_core/_main/global.h @@ -13,6 +13,7 @@ Copyright (C) 2005, MIK, Moca, genta Copyright (C) 2006, aroka, ryoji Copyright (C) 2007, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/_os/CClipboard.cpp b/sakura_core/_os/CClipboard.cpp index 6b044797b3..c642557159 100644 --- a/sakura_core/_os/CClipboard.cpp +++ b/sakura_core/_os/CClipboard.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/_os/CClipboard.h b/sakura_core/_os/CClipboard.h index 67a6241fe4..d31d5cc3cd 100644 --- a/sakura_core/_os/CClipboard.h +++ b/sakura_core/_os/CClipboard.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/_os/CDropTarget.cpp b/sakura_core/_os/CDropTarget.cpp index 80efd04afc..d883904c5e 100644 --- a/sakura_core/_os/CDropTarget.cpp +++ b/sakura_core/_os/CDropTarget.cpp @@ -8,6 +8,7 @@ Copyright (C) 2002, aroka Copyright (C) 2008, ryoji Copyright (C) 2009, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/_os/CDropTarget.h b/sakura_core/_os/CDropTarget.h index c555a57528..abdc00e42b 100644 --- a/sakura_core/_os/CDropTarget.h +++ b/sakura_core/_os/CDropTarget.h @@ -8,6 +8,7 @@ Copyright (C) 2002, aroka Copyright (C) 2008, ryoji Copyright (C) 2009, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/_os/OleTypes.h b/sakura_core/_os/OleTypes.h index 27f1d86761..9d7eb378a2 100644 --- a/sakura_core/_os/OleTypes.h +++ b/sakura_core/_os/OleTypes.h @@ -6,6 +6,8 @@ */ /* Copyright (C) 2003, 鬼, Moca + Copyright (C) 2018-2021, Sakura Editor Organization + This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/apiwrap/CommonControl.h b/sakura_core/apiwrap/CommonControl.h index 00d88d8073..b6c4d46ff5 100644 --- a/sakura_core/apiwrap/CommonControl.h +++ b/sakura_core/apiwrap/CommonControl.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/apiwrap/StdApi.cpp b/sakura_core/apiwrap/StdApi.cpp index 27d743171a..3f192c4182 100644 --- a/sakura_core/apiwrap/StdApi.cpp +++ b/sakura_core/apiwrap/StdApi.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include #include "StdApi.h" diff --git a/sakura_core/apiwrap/StdApi.h b/sakura_core/apiwrap/StdApi.h index 8d357cc7ae..cb98a86587 100644 --- a/sakura_core/apiwrap/StdApi.h +++ b/sakura_core/apiwrap/StdApi.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/apiwrap/StdControl.cpp b/sakura_core/apiwrap/StdControl.cpp index 855af35c33..b6b72bb957 100644 --- a/sakura_core/apiwrap/StdControl.cpp +++ b/sakura_core/apiwrap/StdControl.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "StdControl.h" diff --git a/sakura_core/apiwrap/StdControl.h b/sakura_core/apiwrap/StdControl.h index 725ed4aeb9..73a42aef77 100644 --- a/sakura_core/apiwrap/StdControl.h +++ b/sakura_core/apiwrap/StdControl.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2007, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CLaxInteger.cpp b/sakura_core/basis/CLaxInteger.cpp index 741061d054..6f1dc8e6cb 100644 --- a/sakura_core/basis/CLaxInteger.cpp +++ b/sakura_core/basis/CLaxInteger.cpp @@ -1,3 +1,26 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CLaxInteger.h" diff --git a/sakura_core/basis/CLaxInteger.h b/sakura_core/basis/CLaxInteger.h index 7f97961638..83208133c0 100644 --- a/sakura_core/basis/CLaxInteger.h +++ b/sakura_core/basis/CLaxInteger.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CMyPoint.cpp b/sakura_core/basis/CMyPoint.cpp index d7c17d0409..92e590d697 100644 --- a/sakura_core/basis/CMyPoint.cpp +++ b/sakura_core/basis/CMyPoint.cpp @@ -1,3 +1,26 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CMyPoint.h" diff --git a/sakura_core/basis/CMyPoint.h b/sakura_core/basis/CMyPoint.h index 09a9d61aa3..a06698c976 100644 --- a/sakura_core/basis/CMyPoint.h +++ b/sakura_core/basis/CMyPoint.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CMyRect.cpp b/sakura_core/basis/CMyRect.cpp index da53c00465..12c42f1e60 100644 --- a/sakura_core/basis/CMyRect.cpp +++ b/sakura_core/basis/CMyRect.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CMyRect.h" diff --git a/sakura_core/basis/CMyRect.h b/sakura_core/basis/CMyRect.h index 1965d6fc3b..99e1240350 100644 --- a/sakura_core/basis/CMyRect.h +++ b/sakura_core/basis/CMyRect.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CMySize.cpp b/sakura_core/basis/CMySize.cpp index 93930b9dcf..e4aa0ce6ab 100644 --- a/sakura_core/basis/CMySize.cpp +++ b/sakura_core/basis/CMySize.cpp @@ -1,3 +1,26 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CMySize.h" diff --git a/sakura_core/basis/CMySize.h b/sakura_core/basis/CMySize.h index 9b52f46215..9670a3815e 100644 --- a/sakura_core/basis/CMySize.h +++ b/sakura_core/basis/CMySize.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CMyString.cpp b/sakura_core/basis/CMyString.cpp index 3984e05c83..4198acef39 100644 --- a/sakura_core/basis/CMyString.cpp +++ b/sakura_core/basis/CMyString.cpp @@ -1,3 +1,26 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CMyString.h" diff --git a/sakura_core/basis/CMyString.h b/sakura_core/basis/CMyString.h index 2399c67284..0d9df9c678 100644 --- a/sakura_core/basis/CMyString.h +++ b/sakura_core/basis/CMyString.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CStrictInteger.h b/sakura_core/basis/CStrictInteger.h index 4a2aa01180..70df26453b 100644 --- a/sakura_core/basis/CStrictInteger.h +++ b/sakura_core/basis/CStrictInteger.h @@ -7,6 +7,7 @@ */ /* Copyright (C) 2007, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CStrictPoint.cpp b/sakura_core/basis/CStrictPoint.cpp index a2881006d4..c1ef0e8d22 100644 --- a/sakura_core/basis/CStrictPoint.cpp +++ b/sakura_core/basis/CStrictPoint.cpp @@ -1,3 +1,26 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CStrictPoint.h" diff --git a/sakura_core/basis/CStrictPoint.h b/sakura_core/basis/CStrictPoint.h index d2ce402540..ecac666bd2 100644 --- a/sakura_core/basis/CStrictPoint.h +++ b/sakura_core/basis/CStrictPoint.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CStrictRange.cpp b/sakura_core/basis/CStrictRange.cpp index 517bccc6c6..3cf4d42964 100644 --- a/sakura_core/basis/CStrictRange.cpp +++ b/sakura_core/basis/CStrictRange.cpp @@ -1,3 +1,26 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CStrictRange.h" diff --git a/sakura_core/basis/CStrictRange.h b/sakura_core/basis/CStrictRange.h index fd6ff5ae18..4f4eedd027 100644 --- a/sakura_core/basis/CStrictRange.h +++ b/sakura_core/basis/CStrictRange.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CStrictRect.cpp b/sakura_core/basis/CStrictRect.cpp index 5d95e5a625..6eaa67cb78 100644 --- a/sakura_core/basis/CStrictRect.cpp +++ b/sakura_core/basis/CStrictRect.cpp @@ -1,3 +1,26 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CStrictRect.h" diff --git a/sakura_core/basis/CStrictRect.h b/sakura_core/basis/CStrictRect.h index 8aba533061..a0b8c013dc 100644 --- a/sakura_core/basis/CStrictRect.h +++ b/sakura_core/basis/CStrictRect.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/SakuraBasis.cpp b/sakura_core/basis/SakuraBasis.cpp index dfe4c87f6b..629126cb35 100644 --- a/sakura_core/basis/SakuraBasis.cpp +++ b/sakura_core/basis/SakuraBasis.cpp @@ -1,3 +1,26 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "SakuraBasis.h" diff --git a/sakura_core/basis/SakuraBasis.h b/sakura_core/basis/SakuraBasis.h index 7c960bec49..4f895c35e8 100644 --- a/sakura_core/basis/SakuraBasis.h +++ b/sakura_core/basis/SakuraBasis.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/primitive.h b/sakura_core/basis/primitive.h index 8673cf5b2a..f4f745196a 100644 --- a/sakura_core/basis/primitive.h +++ b/sakura_core/basis/primitive.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CCesu8.cpp b/sakura_core/charset/CCesu8.cpp index af44ee27af..c1cef7af5c 100644 --- a/sakura_core/charset/CCesu8.cpp +++ b/sakura_core/charset/CCesu8.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CCesu8.h" #include "CEol.h" diff --git a/sakura_core/charset/CCesu8.h b/sakura_core/charset/CCesu8.h index 8e099a701d..1a5c71dfe3 100644 --- a/sakura_core/charset/CCesu8.h +++ b/sakura_core/charset/CCesu8.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CCodeBase.cpp b/sakura_core/charset/CCodeBase.cpp index 00a027ca74..bd7a57c292 100644 --- a/sakura_core/charset/CCodeBase.cpp +++ b/sakura_core/charset/CCodeBase.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CCodeBase.h" #include "charcode.h" diff --git a/sakura_core/charset/CCodeBase.h b/sakura_core/charset/CCodeBase.h index 52de913b5c..c9ad351315 100644 --- a/sakura_core/charset/CCodeBase.h +++ b/sakura_core/charset/CCodeBase.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CCodeFactory.cpp b/sakura_core/charset/CCodeFactory.cpp index cd3b436e2f..584662d157 100644 --- a/sakura_core/charset/CCodeFactory.cpp +++ b/sakura_core/charset/CCodeFactory.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CCodeFactory.h" #include "CCodeMediator.h" diff --git a/sakura_core/charset/CCodeFactory.h b/sakura_core/charset/CCodeFactory.h index 108da62e02..1f3d8f397e 100644 --- a/sakura_core/charset/CCodeFactory.h +++ b/sakura_core/charset/CCodeFactory.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CCodeMediator.cpp b/sakura_core/charset/CCodeMediator.cpp index c978dd2b51..e93298e6a6 100644 --- a/sakura_core/charset/CCodeMediator.cpp +++ b/sakura_core/charset/CCodeMediator.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "charset/CCodeMediator.h" #include "charset/icu4c/CharsetDetector.h" diff --git a/sakura_core/charset/CCodeMediator.h b/sakura_core/charset/CCodeMediator.h index 41f34591ac..0eacc06382 100644 --- a/sakura_core/charset/CCodeMediator.h +++ b/sakura_core/charset/CCodeMediator.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CCodePage.cpp b/sakura_core/charset/CCodePage.cpp index 8d4d9ad933..8cfaa930be 100644 --- a/sakura_core/charset/CCodePage.cpp +++ b/sakura_core/charset/CCodePage.cpp @@ -5,6 +5,7 @@ */ /* Copyright (C) 2010-2012 Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CCodePage.h b/sakura_core/charset/CCodePage.h index 73e05415d3..5db1a8b0f4 100644 --- a/sakura_core/charset/CCodePage.h +++ b/sakura_core/charset/CCodePage.h @@ -5,6 +5,7 @@ */ /* Copyright (C) 2010-2012 Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CESI.cpp b/sakura_core/charset/CESI.cpp index 794181308f..1a3af32bd0 100644 --- a/sakura_core/charset/CESI.cpp +++ b/sakura_core/charset/CESI.cpp @@ -8,6 +8,7 @@ /* Copyright (C) 2006 Copyright (C) 2007 + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CESI.h b/sakura_core/charset/CESI.h index ed6d96a984..f09011d4fd 100644 --- a/sakura_core/charset/CESI.h +++ b/sakura_core/charset/CESI.h @@ -9,6 +9,7 @@ /* Copyright (C) 2006 Copyright (C) 2007 + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CEuc.cpp b/sakura_core/charset/CEuc.cpp index 21d566ace8..cb659007dd 100644 --- a/sakura_core/charset/CEuc.cpp +++ b/sakura_core/charset/CEuc.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CEuc.h" diff --git a/sakura_core/charset/CEuc.h b/sakura_core/charset/CEuc.h index 79b5bc3c59..0b7734e4e5 100644 --- a/sakura_core/charset/CEuc.h +++ b/sakura_core/charset/CEuc.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CJis.cpp b/sakura_core/charset/CJis.cpp index 5ab4accc7f..d6434d96d3 100644 --- a/sakura_core/charset/CJis.cpp +++ b/sakura_core/charset/CJis.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ // 2008.11.10 変換ロジックを書き直す #include "StdAfx.h" diff --git a/sakura_core/charset/CJis.h b/sakura_core/charset/CJis.h index 4c49986326..b529a07bb4 100644 --- a/sakura_core/charset/CJis.h +++ b/sakura_core/charset/CJis.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CLatin1.cpp b/sakura_core/charset/CLatin1.cpp index 3845443bff..d5ebc4dce8 100644 --- a/sakura_core/charset/CLatin1.cpp +++ b/sakura_core/charset/CLatin1.cpp @@ -6,6 +6,7 @@ */ /* Copyright (C) 20010, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CLatin1.h b/sakura_core/charset/CLatin1.h index 4d39d22756..343ad20b05 100644 --- a/sakura_core/charset/CLatin1.h +++ b/sakura_core/charset/CLatin1.h @@ -6,6 +6,7 @@ */ /* Copyright (C) 20010, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CShiftJis.cpp b/sakura_core/charset/CShiftJis.cpp index 0feecd8cd4..45d1c38b73 100644 --- a/sakura_core/charset/CShiftJis.cpp +++ b/sakura_core/charset/CShiftJis.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CShiftJis.h" #include "charset/charcode.h" diff --git a/sakura_core/charset/CShiftJis.h b/sakura_core/charset/CShiftJis.h index c9369592ba..c8ef03f178 100644 --- a/sakura_core/charset/CShiftJis.h +++ b/sakura_core/charset/CShiftJis.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CUnicode.cpp b/sakura_core/charset/CUnicode.cpp index 3ff059e937..c3f85e1b61 100644 --- a/sakura_core/charset/CUnicode.cpp +++ b/sakura_core/charset/CUnicode.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CUnicode.h" diff --git a/sakura_core/charset/CUnicode.h b/sakura_core/charset/CUnicode.h index b09063022c..b2f2adbc7c 100644 --- a/sakura_core/charset/CUnicode.h +++ b/sakura_core/charset/CUnicode.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CUnicodeBe.cpp b/sakura_core/charset/CUnicodeBe.cpp index 7454eba66f..e04bbbcc06 100644 --- a/sakura_core/charset/CUnicodeBe.cpp +++ b/sakura_core/charset/CUnicodeBe.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CUnicodeBe.h" diff --git a/sakura_core/charset/CUnicodeBe.h b/sakura_core/charset/CUnicodeBe.h index 41fc80cc93..db0d64b6a5 100644 --- a/sakura_core/charset/CUnicodeBe.h +++ b/sakura_core/charset/CUnicodeBe.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CUtf7.cpp b/sakura_core/charset/CUtf7.cpp index 15a8a5abf3..2e33cec4a7 100644 --- a/sakura_core/charset/CUtf7.cpp +++ b/sakura_core/charset/CUtf7.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ // 2008.11.10 変換ロジックを書き直す #include "StdAfx.h" diff --git a/sakura_core/charset/CUtf7.h b/sakura_core/charset/CUtf7.h index ee48fdb9fa..68940bbe78 100644 --- a/sakura_core/charset/CUtf7.h +++ b/sakura_core/charset/CUtf7.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CUtf8.cpp b/sakura_core/charset/CUtf8.cpp index 294f8a979c..71ad10c857 100644 --- a/sakura_core/charset/CUtf8.cpp +++ b/sakura_core/charset/CUtf8.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ // 2008.11.10 変換ロジックを書き直す #include "StdAfx.h" diff --git a/sakura_core/charset/CUtf8.h b/sakura_core/charset/CUtf8.h index 1c983724ce..bb5209779b 100644 --- a/sakura_core/charset/CUtf8.h +++ b/sakura_core/charset/CUtf8.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CharPointer.h b/sakura_core/charset/CharPointer.h index ca9f4a5d49..43e06a89c1 100644 --- a/sakura_core/charset/CharPointer.h +++ b/sakura_core/charset/CharPointer.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/charcode.cpp b/sakura_core/charset/charcode.cpp index b3238ac12f..e228f1a76f 100644 --- a/sakura_core/charset/charcode.cpp +++ b/sakura_core/charset/charcode.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2007, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/charcode.h b/sakura_core/charset/charcode.h index d76405c0a8..207ccfbe36 100644 --- a/sakura_core/charset/charcode.h +++ b/sakura_core/charset/charcode.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2007, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/charset.cpp b/sakura_core/charset/charset.cpp index 50ee39556a..61e2f21f38 100644 --- a/sakura_core/charset/charset.cpp +++ b/sakura_core/charset/charset.cpp @@ -12,6 +12,7 @@ Copyright (C) 2010, Uchi Copyright (C) 2012, novice Copyright (C) 2013, Moca, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/charset.h b/sakura_core/charset/charset.h index 94f39ab933..fb47128b64 100644 --- a/sakura_core/charset/charset.h +++ b/sakura_core/charset/charset.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/codechecker.cpp b/sakura_core/charset/codechecker.cpp index d5b7158361..40555ce7b1 100644 --- a/sakura_core/charset/codechecker.cpp +++ b/sakura_core/charset/codechecker.cpp @@ -9,6 +9,7 @@ /* Copyright (C) 2006, D. S. Koba, genta Copyright (C) 2007 + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/codechecker.h b/sakura_core/charset/codechecker.h index c4160d101c..adf3691fc6 100644 --- a/sakura_core/charset/codechecker.h +++ b/sakura_core/charset/codechecker.h @@ -10,6 +10,7 @@ Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2006, D. S. Koba, genta Copyright (C) 2007 + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/codeutil.cpp b/sakura_core/charset/codeutil.cpp index 13dd3c8f40..cc410dd9f7 100644 --- a/sakura_core/charset/codeutil.cpp +++ b/sakura_core/charset/codeutil.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include #include "charset/codeutil.h" diff --git a/sakura_core/charset/codeutil.h b/sakura_core/charset/codeutil.h index 110cb0bf5d..dad12d0915 100644 --- a/sakura_core/charset/codeutil.h +++ b/sakura_core/charset/codeutil.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/cmd/CViewCommander.cpp b/sakura_core/cmd/CViewCommander.cpp index 1835916ed0..22699b7c35 100644 --- a/sakura_core/cmd/CViewCommander.cpp +++ b/sakura_core/cmd/CViewCommander.cpp @@ -19,6 +19,7 @@ Copyright (C) 2010, ryoji Copyright (C) 2011, ryoji, nasukoji Copyright (C) 2012, Moca, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander.h b/sakura_core/cmd/CViewCommander.h index b992932d79..5c3ea47528 100644 --- a/sakura_core/cmd/CViewCommander.h +++ b/sakura_core/cmd/CViewCommander.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/cmd/CViewCommander_Bookmark.cpp b/sakura_core/cmd/CViewCommander_Bookmark.cpp index 7a6ee505be..750f51fc68 100644 --- a/sakura_core/cmd/CViewCommander_Bookmark.cpp +++ b/sakura_core/cmd/CViewCommander_Bookmark.cpp @@ -8,6 +8,7 @@ Copyright (C) 2000-2001, genta Copyright (C) 2002, hor, YAZAKI, MIK Copyright (C) 2006, genta + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_Clipboard.cpp b/sakura_core/cmd/CViewCommander_Clipboard.cpp index fc7d70de86..783efd90ad 100644 --- a/sakura_core/cmd/CViewCommander_Clipboard.cpp +++ b/sakura_core/cmd/CViewCommander_Clipboard.cpp @@ -12,6 +12,7 @@ Copyright (C) 2005, genta Copyright (C) 2007, ryoji Copyright (C) 2010, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_Convert.cpp b/sakura_core/cmd/CViewCommander_Convert.cpp index ae43e8ca27..93ddefd49f 100644 --- a/sakura_core/cmd/CViewCommander_Convert.cpp +++ b/sakura_core/cmd/CViewCommander_Convert.cpp @@ -8,6 +8,7 @@ Copyright (C) 2000-2001, jepro Copyright (C) 2001, Stonee, Misaka Copyright (C) 2002, ai + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_Cursor.cpp b/sakura_core/cmd/CViewCommander_Cursor.cpp index 6f8db321bd..89335f52ab 100644 --- a/sakura_core/cmd/CViewCommander_Cursor.cpp +++ b/sakura_core/cmd/CViewCommander_Cursor.cpp @@ -13,6 +13,7 @@ Copyright (C) 2006, genta Copyright (C) 2007, kobake, maru Copyright (C) 2009, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_CustMenu.cpp b/sakura_core/cmd/CViewCommander_CustMenu.cpp index 7ca5db467e..91c420625f 100644 --- a/sakura_core/cmd/CViewCommander_CustMenu.cpp +++ b/sakura_core/cmd/CViewCommander_CustMenu.cpp @@ -11,6 +11,7 @@ Copyright (C) 2007, ryoji, maru, Uchi Copyright (C) 2008, ryoji, nasukoji Copyright (C) 2009, ryoji, nasukoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_Diff.cpp b/sakura_core/cmd/CViewCommander_Diff.cpp index 80cd3988a9..6bf326bf24 100644 --- a/sakura_core/cmd/CViewCommander_Diff.cpp +++ b/sakura_core/cmd/CViewCommander_Diff.cpp @@ -13,6 +13,7 @@ Copyright (C) 2007, kobake Copyright (C) 2008, kobake Copyright (C) 2008, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_Edit.cpp b/sakura_core/cmd/CViewCommander_Edit.cpp index 161fbbe0a4..d89886096d 100644 --- a/sakura_core/cmd/CViewCommander_Edit.cpp +++ b/sakura_core/cmd/CViewCommander_Edit.cpp @@ -12,6 +12,7 @@ Copyright (C) 2008, ryoji, nasukoji Copyright (C) 2009, ryoji Copyright (C) 2010, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_Edit_advanced.cpp b/sakura_core/cmd/CViewCommander_Edit_advanced.cpp index 80c703dbb9..a43420f8e0 100644 --- a/sakura_core/cmd/CViewCommander_Edit_advanced.cpp +++ b/sakura_core/cmd/CViewCommander_Edit_advanced.cpp @@ -18,6 +18,7 @@ Copyright (C) 2010, ryoji Copyright (C) 2011, ryoji Copyright (C) 2012, Moca, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_Edit_word_line.cpp b/sakura_core/cmd/CViewCommander_Edit_word_line.cpp index f08dbe9959..a4b214be0e 100644 --- a/sakura_core/cmd/CViewCommander_Edit_word_line.cpp +++ b/sakura_core/cmd/CViewCommander_Edit_word_line.cpp @@ -8,6 +8,7 @@ Copyright (C) 2003, かろと Copyright (C) 2005, Moca Copyright (C) 2007, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_File.cpp b/sakura_core/cmd/CViewCommander_File.cpp index 3dcb388416..0ec67b0062 100644 --- a/sakura_core/cmd/CViewCommander_File.cpp +++ b/sakura_core/cmd/CViewCommander_File.cpp @@ -12,6 +12,7 @@ Copyright (C) 2005, genta Copyright (C) 2006, ryoji, maru Copyright (C) 2007, ryoji, maru, genta + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/cmd/CViewCommander_Grep.cpp b/sakura_core/cmd/CViewCommander_Grep.cpp index e25905b21e..a014314324 100644 --- a/sakura_core/cmd/CViewCommander_Grep.cpp +++ b/sakura_core/cmd/CViewCommander_Grep.cpp @@ -7,6 +7,7 @@ Copyright (C) 2003, MIK Copyright (C) 2005, genta Copyright (C) 2006, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_Insert.cpp b/sakura_core/cmd/CViewCommander_Insert.cpp index 26bf975500..12924ff613 100644 --- a/sakura_core/cmd/CViewCommander_Insert.cpp +++ b/sakura_core/cmd/CViewCommander_Insert.cpp @@ -6,6 +6,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, MIK + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_Macro.cpp b/sakura_core/cmd/CViewCommander_Macro.cpp index 5566f4e5e5..ea37e8a64a 100644 --- a/sakura_core/cmd/CViewCommander_Macro.cpp +++ b/sakura_core/cmd/CViewCommander_Macro.cpp @@ -13,6 +13,7 @@ Copyright (C) 2006, maru Copyright (C) 2007, ryoji, genta Copyright (C) 2008, syat + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_ModeChange.cpp b/sakura_core/cmd/CViewCommander_ModeChange.cpp index 84f19a681c..56479e7e65 100644 --- a/sakura_core/cmd/CViewCommander_ModeChange.cpp +++ b/sakura_core/cmd/CViewCommander_ModeChange.cpp @@ -8,6 +8,7 @@ Copyright (C) 2003, Moca Copyright (C) 2005, genta Copyright (C) 2007, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/cmd/CViewCommander_Outline.cpp b/sakura_core/cmd/CViewCommander_Outline.cpp index c935c2ecde..b824dd6fdb 100644 --- a/sakura_core/cmd/CViewCommander_Outline.cpp +++ b/sakura_core/cmd/CViewCommander_Outline.cpp @@ -13,6 +13,7 @@ Copyright (C) 2007, genta, kobake Copyright (C) 2009, genta Copyright (C) 2011, syat + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_Search.cpp b/sakura_core/cmd/CViewCommander_Search.cpp index 83de3f2437..91da829ffd 100644 --- a/sakura_core/cmd/CViewCommander_Search.cpp +++ b/sakura_core/cmd/CViewCommander_Search.cpp @@ -16,6 +16,7 @@ Copyright (C) 2009, ryoji, genta Copyright (C) 2010, ryoji Copyright (C) 2011, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_Select.cpp b/sakura_core/cmd/CViewCommander_Select.cpp index 8b5fd10171..ba2420aba2 100644 --- a/sakura_core/cmd/CViewCommander_Select.cpp +++ b/sakura_core/cmd/CViewCommander_Select.cpp @@ -9,6 +9,7 @@ Copyright (C) 2002, YAZAKI Copyright (C) 2005, Moca Copyright (C) 2007, kobake, nasukoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_Settings.cpp b/sakura_core/cmd/CViewCommander_Settings.cpp index dc389dd370..9f67705c84 100644 --- a/sakura_core/cmd/CViewCommander_Settings.cpp +++ b/sakura_core/cmd/CViewCommander_Settings.cpp @@ -13,6 +13,7 @@ Copyright (C) 2007, ryoji Copyright (C) 2008, ryoji, nasukoji Copyright (C) 2009, nasukoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_Support.cpp b/sakura_core/cmd/CViewCommander_Support.cpp index 68444a02d8..423516ec3c 100644 --- a/sakura_core/cmd/CViewCommander_Support.cpp +++ b/sakura_core/cmd/CViewCommander_Support.cpp @@ -14,6 +14,7 @@ Copyright (C) 2007, kobake, ryoji Copyright (C) 2011, Moca Copyright (C) 2012, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_TagJump.cpp b/sakura_core/cmd/CViewCommander_TagJump.cpp index df482dbf5d..77a0077a12 100644 --- a/sakura_core/cmd/CViewCommander_TagJump.cpp +++ b/sakura_core/cmd/CViewCommander_TagJump.cpp @@ -15,6 +15,7 @@ Copyright (C) 2007, ryoji, maru, Uchi Copyright (C) 2008, MIK Copyright (C) 2010, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_Window.cpp b/sakura_core/cmd/CViewCommander_Window.cpp index c21d446ad9..ecc98b19e3 100644 --- a/sakura_core/cmd/CViewCommander_Window.cpp +++ b/sakura_core/cmd/CViewCommander_Window.cpp @@ -15,6 +15,7 @@ Copyright (C) 2008, syat Copyright (C) 2009, syat Copyright (C) 2010, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_inline.h b/sakura_core/cmd/CViewCommander_inline.h index aef8d7a651..308c201ccf 100644 --- a/sakura_core/cmd/CViewCommander_inline.h +++ b/sakura_core/cmd/CViewCommander_inline.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2013, novice + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/config/app_constants.h b/sakura_core/config/app_constants.h index 34e5b79774..e61530e47b 100644 --- a/sakura_core/config/app_constants.h +++ b/sakura_core/config/app_constants.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/config/build_config.cpp b/sakura_core/config/build_config.cpp index 6fd90fb6b5..9f9f71652d 100644 --- a/sakura_core/config/build_config.cpp +++ b/sakura_core/config/build_config.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "build_config.h" #include //malloc,free diff --git a/sakura_core/config/build_config.h b/sakura_core/config/build_config.h index d2e7d76399..81be206c16 100644 --- a/sakura_core/config/build_config.h +++ b/sakura_core/config/build_config.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2007, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/config/maxdata.h b/sakura_core/config/maxdata.h index 550ea8079a..dc7cc9ac63 100644 --- a/sakura_core/config/maxdata.h +++ b/sakura_core/config/maxdata.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2007, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/config/system_constants.h b/sakura_core/config/system_constants.h index 42556e201f..e9bedb5ac9 100644 --- a/sakura_core/config/system_constants.h +++ b/sakura_core/config/system_constants.h @@ -11,6 +11,7 @@ */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert.cpp b/sakura_core/convert/CConvert.cpp index 98576c0bc2..874e5526e1 100644 --- a/sakura_core/convert/CConvert.cpp +++ b/sakura_core/convert/CConvert.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CConvert.h" #include "func/Funccode.h" diff --git a/sakura_core/convert/CConvert.h b/sakura_core/convert/CConvert.h index e2fb94d7e6..fb21010c39 100644 --- a/sakura_core/convert/CConvert.h +++ b/sakura_core/convert/CConvert.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2007, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_HaneisuToZeneisu.cpp b/sakura_core/convert/CConvert_HaneisuToZeneisu.cpp index 694f0983ae..471b5558d4 100644 --- a/sakura_core/convert/CConvert_HaneisuToZeneisu.cpp +++ b/sakura_core/convert/CConvert_HaneisuToZeneisu.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CConvert_HaneisuToZeneisu.h" #include "convert_util.h" diff --git a/sakura_core/convert/CConvert_HaneisuToZeneisu.h b/sakura_core/convert/CConvert_HaneisuToZeneisu.h index 34394639d2..a3331a77c8 100644 --- a/sakura_core/convert/CConvert_HaneisuToZeneisu.h +++ b/sakura_core/convert/CConvert_HaneisuToZeneisu.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_HankataToZenhira.cpp b/sakura_core/convert/CConvert_HankataToZenhira.cpp index e3d01c1939..c409c72c2c 100644 --- a/sakura_core/convert/CConvert_HankataToZenhira.cpp +++ b/sakura_core/convert/CConvert_HankataToZenhira.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CConvert_HankataToZenhira.h" #include "convert_util.h" diff --git a/sakura_core/convert/CConvert_HankataToZenhira.h b/sakura_core/convert/CConvert_HankataToZenhira.h index c3ef8fd1f0..7e3804459d 100644 --- a/sakura_core/convert/CConvert_HankataToZenhira.h +++ b/sakura_core/convert/CConvert_HankataToZenhira.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_HankataToZenkata.cpp b/sakura_core/convert/CConvert_HankataToZenkata.cpp index 2d3124a5a4..7cb5889a8a 100644 --- a/sakura_core/convert/CConvert_HankataToZenkata.cpp +++ b/sakura_core/convert/CConvert_HankataToZenkata.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CConvert_HankataToZenkata.h" #include "convert_util.h" diff --git a/sakura_core/convert/CConvert_HankataToZenkata.h b/sakura_core/convert/CConvert_HankataToZenkata.h index 11f0289a21..d49c3f1b80 100644 --- a/sakura_core/convert/CConvert_HankataToZenkata.h +++ b/sakura_core/convert/CConvert_HankataToZenkata.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_SpaceToTab.cpp b/sakura_core/convert/CConvert_SpaceToTab.cpp index 6925164ef1..347ab68da0 100644 --- a/sakura_core/convert/CConvert_SpaceToTab.cpp +++ b/sakura_core/convert/CConvert_SpaceToTab.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CConvert_SpaceToTab.h" #include "charset/charcode.h" diff --git a/sakura_core/convert/CConvert_SpaceToTab.h b/sakura_core/convert/CConvert_SpaceToTab.h index c8a3083f8f..ccf50ba882 100644 --- a/sakura_core/convert/CConvert_SpaceToTab.h +++ b/sakura_core/convert/CConvert_SpaceToTab.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_TabToSpace.cpp b/sakura_core/convert/CConvert_TabToSpace.cpp index 905fd8ce96..fe7766ce09 100644 --- a/sakura_core/convert/CConvert_TabToSpace.cpp +++ b/sakura_core/convert/CConvert_TabToSpace.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CConvert_TabToSpace.h" #include "charset/charcode.h" diff --git a/sakura_core/convert/CConvert_TabToSpace.h b/sakura_core/convert/CConvert_TabToSpace.h index 7dbbe6d155..d53cc29576 100644 --- a/sakura_core/convert/CConvert_TabToSpace.h +++ b/sakura_core/convert/CConvert_TabToSpace.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_ToHankaku.cpp b/sakura_core/convert/CConvert_ToHankaku.cpp index efbab06ddc..855162c3ec 100644 --- a/sakura_core/convert/CConvert_ToHankaku.cpp +++ b/sakura_core/convert/CConvert_ToHankaku.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CConvert_ToHankaku.h" #include "convert_util.h" diff --git a/sakura_core/convert/CConvert_ToHankaku.h b/sakura_core/convert/CConvert_ToHankaku.h index 82bbea62bb..97c5f7f806 100644 --- a/sakura_core/convert/CConvert_ToHankaku.h +++ b/sakura_core/convert/CConvert_ToHankaku.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_ToLower.cpp b/sakura_core/convert/CConvert_ToLower.cpp index 6b68ffd067..0ee7a103fc 100644 --- a/sakura_core/convert/CConvert_ToLower.cpp +++ b/sakura_core/convert/CConvert_ToLower.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CConvert_ToLower.h" diff --git a/sakura_core/convert/CConvert_ToLower.h b/sakura_core/convert/CConvert_ToLower.h index 91d5bfc90e..fcf30b1f55 100644 --- a/sakura_core/convert/CConvert_ToLower.h +++ b/sakura_core/convert/CConvert_ToLower.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_ToUpper.cpp b/sakura_core/convert/CConvert_ToUpper.cpp index 0e0fc48e56..db8b36b25c 100644 --- a/sakura_core/convert/CConvert_ToUpper.cpp +++ b/sakura_core/convert/CConvert_ToUpper.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CConvert_ToUpper.h" diff --git a/sakura_core/convert/CConvert_ToUpper.h b/sakura_core/convert/CConvert_ToUpper.h index 01022615a6..dc9ad7ec59 100644 --- a/sakura_core/convert/CConvert_ToUpper.h +++ b/sakura_core/convert/CConvert_ToUpper.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_ToZenhira.cpp b/sakura_core/convert/CConvert_ToZenhira.cpp index aaa04d6f8e..ead16d8bf0 100644 --- a/sakura_core/convert/CConvert_ToZenhira.cpp +++ b/sakura_core/convert/CConvert_ToZenhira.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CConvert_ToZenhira.h" #include "convert_util.h" diff --git a/sakura_core/convert/CConvert_ToZenhira.h b/sakura_core/convert/CConvert_ToZenhira.h index 518c3a2417..6542ae699c 100644 --- a/sakura_core/convert/CConvert_ToZenhira.h +++ b/sakura_core/convert/CConvert_ToZenhira.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_ToZenkata.cpp b/sakura_core/convert/CConvert_ToZenkata.cpp index bc9e1047f4..96d49a04a0 100644 --- a/sakura_core/convert/CConvert_ToZenkata.cpp +++ b/sakura_core/convert/CConvert_ToZenkata.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CConvert_ToZenkata.h" #include "convert_util.h" diff --git a/sakura_core/convert/CConvert_ToZenkata.h b/sakura_core/convert/CConvert_ToZenkata.h index 44118eb0a2..d761e48481 100644 --- a/sakura_core/convert/CConvert_ToZenkata.h +++ b/sakura_core/convert/CConvert_ToZenkata.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_Trim.cpp b/sakura_core/convert/CConvert_Trim.cpp index f73d7826eb..ca9f1e5e1b 100644 --- a/sakura_core/convert/CConvert_Trim.cpp +++ b/sakura_core/convert/CConvert_Trim.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CConvert_Trim.h" #include "convert_util.h" diff --git a/sakura_core/convert/CConvert_Trim.h b/sakura_core/convert/CConvert_Trim.h index 55d7a72b03..7c70aaea2d 100644 --- a/sakura_core/convert/CConvert_Trim.h +++ b/sakura_core/convert/CConvert_Trim.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_ZeneisuToHaneisu.cpp b/sakura_core/convert/CConvert_ZeneisuToHaneisu.cpp index f202e2af64..e97872e7d9 100644 --- a/sakura_core/convert/CConvert_ZeneisuToHaneisu.cpp +++ b/sakura_core/convert/CConvert_ZeneisuToHaneisu.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CConvert_ZeneisuToHaneisu.h" #include "convert_util.h" diff --git a/sakura_core/convert/CConvert_ZeneisuToHaneisu.h b/sakura_core/convert/CConvert_ZeneisuToHaneisu.h index a82cdb1d15..5c7e7f887f 100644 --- a/sakura_core/convert/CConvert_ZeneisuToHaneisu.h +++ b/sakura_core/convert/CConvert_ZeneisuToHaneisu.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_ZenkataToHankata.cpp b/sakura_core/convert/CConvert_ZenkataToHankata.cpp index 956c19ce5f..63cf6f62f1 100644 --- a/sakura_core/convert/CConvert_ZenkataToHankata.cpp +++ b/sakura_core/convert/CConvert_ZenkataToHankata.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CConvert_ZenkataToHankata.h" #include "convert_util.h" diff --git a/sakura_core/convert/CConvert_ZenkataToHankata.h b/sakura_core/convert/CConvert_ZenkataToHankata.h index 8440391d58..25726640bb 100644 --- a/sakura_core/convert/CConvert_ZenkataToHankata.h +++ b/sakura_core/convert/CConvert_ZenkataToHankata.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CDecode.h b/sakura_core/convert/CDecode.h index 327835db09..c183fd5705 100644 --- a/sakura_core/convert/CDecode.h +++ b/sakura_core/convert/CDecode.h @@ -4,7 +4,7 @@ @author */ /* - Copyright (C) + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CDecode_Base64Decode.cpp b/sakura_core/convert/CDecode_Base64Decode.cpp index 8c4ce90e12..4dd071839d 100644 --- a/sakura_core/convert/CDecode_Base64Decode.cpp +++ b/sakura_core/convert/CDecode_Base64Decode.cpp @@ -5,7 +5,7 @@ */ /* - Copyright (C) + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CDecode_Base64Decode.h b/sakura_core/convert/CDecode_Base64Decode.h index cfbab88eb9..8998aa4a28 100644 --- a/sakura_core/convert/CDecode_Base64Decode.h +++ b/sakura_core/convert/CDecode_Base64Decode.h @@ -5,7 +5,7 @@ */ /* - Copyright (C) + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CDecode_UuDecode.cpp b/sakura_core/convert/CDecode_UuDecode.cpp index fda70e685d..e66cf75e05 100644 --- a/sakura_core/convert/CDecode_UuDecode.cpp +++ b/sakura_core/convert/CDecode_UuDecode.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CDecode_UuDecode.h" #include "charset/charcode.h" diff --git a/sakura_core/convert/CDecode_UuDecode.h b/sakura_core/convert/CDecode_UuDecode.h index 40daeff4ac..96329aa30e 100644 --- a/sakura_core/convert/CDecode_UuDecode.h +++ b/sakura_core/convert/CDecode_UuDecode.h @@ -5,7 +5,7 @@ */ /* - Copyright (C) + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/convert_util.cpp b/sakura_core/convert/convert_util.cpp index b395c6c259..fb070b71e9 100644 --- a/sakura_core/convert/convert_util.cpp +++ b/sakura_core/convert/convert_util.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "convert_util.h" diff --git a/sakura_core/convert/convert_util.h b/sakura_core/convert/convert_util.h index 5c0b4b52ba..fd766c5cf3 100644 --- a/sakura_core/convert/convert_util.h +++ b/sakura_core/convert/convert_util.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2007, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/convert_util2.cpp b/sakura_core/convert/convert_util2.cpp index ae31b8b0db..0808728062 100644 --- a/sakura_core/convert/convert_util2.cpp +++ b/sakura_core/convert/convert_util2.cpp @@ -5,7 +5,7 @@ */ /* - Copyright (C) + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/convert_util2.h b/sakura_core/convert/convert_util2.h index d70c8760bd..a4aae0c475 100644 --- a/sakura_core/convert/convert_util2.h +++ b/sakura_core/convert/convert_util2.h @@ -5,7 +5,7 @@ */ /* - Copyright (C) + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/debug/CRunningTimer.cpp b/sakura_core/debug/CRunningTimer.cpp index 94ad9ca815..89fc62187d 100644 --- a/sakura_core/debug/CRunningTimer.cpp +++ b/sakura_core/debug/CRunningTimer.cpp @@ -9,6 +9,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, genta + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/debug/CRunningTimer.h b/sakura_core/debug/CRunningTimer.h index 0678b98dc9..f2a6835830 100644 --- a/sakura_core/debug/CRunningTimer.h +++ b/sakura_core/debug/CRunningTimer.h @@ -9,6 +9,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, genta + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/debug/Debug1.cpp b/sakura_core/debug/Debug1.cpp index b745d18012..ffbdae0e11 100644 --- a/sakura_core/debug/Debug1.cpp +++ b/sakura_core/debug/Debug1.cpp @@ -10,6 +10,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, aroka + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/debug/Debug1.h b/sakura_core/debug/Debug1.h index 8c13555a2f..0bb95c3a76 100644 --- a/sakura_core/debug/Debug1.h +++ b/sakura_core/debug/Debug1.h @@ -7,6 +7,7 @@ */ /* Copyright (C) 1998-2001, Norio Nakatani + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/debug/Debug2.cpp b/sakura_core/debug/Debug2.cpp index 6eb7d8f879..235f95422b 100644 --- a/sakura_core/debug/Debug2.cpp +++ b/sakura_core/debug/Debug2.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "debug/Debug2.h" diff --git a/sakura_core/debug/Debug2.h b/sakura_core/debug/Debug2.h index cd453cdcf5..d74e6f745d 100644 --- a/sakura_core/debug/Debug2.h +++ b/sakura_core/debug/Debug2.h @@ -4,6 +4,7 @@ */ /* Copyright (C) 2007, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/debug/Debug3.cpp b/sakura_core/debug/Debug3.cpp index 0bb1807a52..3c1f339e23 100644 --- a/sakura_core/debug/Debug3.cpp +++ b/sakura_core/debug/Debug3.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "debug/Debug3.h" #include "util/module.h" diff --git a/sakura_core/debug/Debug3.h b/sakura_core/debug/Debug3.h index 268ba1bdf5..835c3412d3 100644 --- a/sakura_core/debug/Debug3.h +++ b/sakura_core/debug/Debug3.h @@ -4,6 +4,7 @@ */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDialog.cpp b/sakura_core/dlg/CDialog.cpp index ee7ac7fa69..dd60c2d88c 100644 --- a/sakura_core/dlg/CDialog.cpp +++ b/sakura_core/dlg/CDialog.cpp @@ -14,6 +14,7 @@ Copyright (C) 2009, ryoji Copyright (C) 2011, nasukoji Copyright (C) 2012, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDialog.h b/sakura_core/dlg/CDialog.h index a81d8fddbc..51b2c6d4aa 100644 --- a/sakura_core/dlg/CDialog.h +++ b/sakura_core/dlg/CDialog.h @@ -11,6 +11,7 @@ Copyright (C) 2006, ryoji Copyright (C) 2011, nasukoji Copyright (C) 2012, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgAbout.cpp b/sakura_core/dlg/CDlgAbout.cpp index ee499baf10..edebc4f7a6 100644 --- a/sakura_core/dlg/CDlgAbout.cpp +++ b/sakura_core/dlg/CDlgAbout.cpp @@ -13,6 +13,7 @@ Copyright (C) 2004, Moca Copyright (C) 2005, genta Copyright (C) 2006, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgAbout.h b/sakura_core/dlg/CDlgAbout.h index 79c557564b..01f55d7838 100644 --- a/sakura_core/dlg/CDlgAbout.h +++ b/sakura_core/dlg/CDlgAbout.h @@ -8,6 +8,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2000, genta + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgCancel.cpp b/sakura_core/dlg/CDlgCancel.cpp index 8fa8ce4fb9..11c08a6052 100644 --- a/sakura_core/dlg/CDlgCancel.cpp +++ b/sakura_core/dlg/CDlgCancel.cpp @@ -6,6 +6,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2008, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgCancel.h b/sakura_core/dlg/CDlgCancel.h index c935661da7..2a64e72290 100644 --- a/sakura_core/dlg/CDlgCancel.h +++ b/sakura_core/dlg/CDlgCancel.h @@ -8,6 +8,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2008, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgCompare.cpp b/sakura_core/dlg/CDlgCompare.cpp index 10c0ec6f24..0bb2c1abe0 100644 --- a/sakura_core/dlg/CDlgCompare.cpp +++ b/sakura_core/dlg/CDlgCompare.cpp @@ -11,6 +11,7 @@ Copyright (C) 2003, MIK Copyright (C) 2006, ryoji Copyright (C) 2009, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgCompare.h b/sakura_core/dlg/CDlgCompare.h index b7bae37c5a..f0b360f2ee 100644 --- a/sakura_core/dlg/CDlgCompare.h +++ b/sakura_core/dlg/CDlgCompare.h @@ -6,6 +6,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2000, jepro + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgCtrlCode.cpp b/sakura_core/dlg/CDlgCtrlCode.cpp index a8999aa272..a57e45e8e8 100644 --- a/sakura_core/dlg/CDlgCtrlCode.cpp +++ b/sakura_core/dlg/CDlgCtrlCode.cpp @@ -8,6 +8,7 @@ Copyright (C) 2002-2003, MIK Copyright (C) 2006, ryoji + Copyright (C) 2011, nasukoji + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgCtrlCode.h b/sakura_core/dlg/CDlgCtrlCode.h index a022809e89..339619d720 100644 --- a/sakura_core/dlg/CDlgCtrlCode.h +++ b/sakura_core/dlg/CDlgCtrlCode.h @@ -6,6 +6,7 @@ */ /* Copyright (C) 2002, MIK + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgDiff.cpp b/sakura_core/dlg/CDlgDiff.cpp index 5f147604c5..c47aa11ec4 100644 --- a/sakura_core/dlg/CDlgDiff.cpp +++ b/sakura_core/dlg/CDlgDiff.cpp @@ -12,6 +12,7 @@ Copyright (C) 2004, MIK, genta, じゅうじ Copyright (C) 2006, ryoji Copyright (C) 2009, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgDiff.h b/sakura_core/dlg/CDlgDiff.h index 34eedb5ead..51c384c6ad 100644 --- a/sakura_core/dlg/CDlgDiff.h +++ b/sakura_core/dlg/CDlgDiff.h @@ -7,6 +7,7 @@ /* Copyright (C) 2002, MIK Copyright (C) 2004, genta + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgExec.cpp b/sakura_core/dlg/CDlgExec.cpp index f77fc310c8..7f086844b1 100644 --- a/sakura_core/dlg/CDlgExec.cpp +++ b/sakura_core/dlg/CDlgExec.cpp @@ -11,6 +11,7 @@ Copyright (C) 2006, ryoji Copyright (C) 2007, maru Copyright (C) 2009, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgExec.h b/sakura_core/dlg/CDlgExec.h index 0da897dcfd..c82b8fe25c 100644 --- a/sakura_core/dlg/CDlgExec.h +++ b/sakura_core/dlg/CDlgExec.h @@ -7,6 +7,7 @@ Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, YAZAKI Copyright (C) 2009, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgFavorite.cpp b/sakura_core/dlg/CDlgFavorite.cpp index aac037e632..71a7ac4483 100644 --- a/sakura_core/dlg/CDlgFavorite.cpp +++ b/sakura_core/dlg/CDlgFavorite.cpp @@ -8,6 +8,7 @@ Copyright (C) 2003, MIK Copyright (C) 2006, ryoji Copyright (C) 2010, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgFavorite.h b/sakura_core/dlg/CDlgFavorite.h index 141d92bf54..07ffb20417 100644 --- a/sakura_core/dlg/CDlgFavorite.h +++ b/sakura_core/dlg/CDlgFavorite.h @@ -7,6 +7,7 @@ /* Copyright (C) 2003, MIK Copyright (C) 2010, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgFileUpdateQuery.cpp b/sakura_core/dlg/CDlgFileUpdateQuery.cpp index 1bd773fcd5..2e97cae46c 100644 --- a/sakura_core/dlg/CDlgFileUpdateQuery.cpp +++ b/sakura_core/dlg/CDlgFileUpdateQuery.cpp @@ -8,6 +8,7 @@ */ /* Copyright (C) 2002, genta + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgFileUpdateQuery.h b/sakura_core/dlg/CDlgFileUpdateQuery.h index e49c0f807d..1dbb4e21c9 100644 --- a/sakura_core/dlg/CDlgFileUpdateQuery.h +++ b/sakura_core/dlg/CDlgFileUpdateQuery.h @@ -8,6 +8,7 @@ */ /* Copyright (C) 2002, genta + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgFind.cpp b/sakura_core/dlg/CDlgFind.cpp index b3f529f1a2..58cac371a1 100644 --- a/sakura_core/dlg/CDlgFind.cpp +++ b/sakura_core/dlg/CDlgFind.cpp @@ -13,6 +13,7 @@ Copyright (C) 2006, ryoji Copyright (C) 2009, ryoji Copyright (C) 2012, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgFind.h b/sakura_core/dlg/CDlgFind.h index 57adbef024..088c04af11 100644 --- a/sakura_core/dlg/CDlgFind.h +++ b/sakura_core/dlg/CDlgFind.h @@ -8,6 +8,7 @@ Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, YAZAKI Copyright (C) 2009, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgGrep.cpp b/sakura_core/dlg/CDlgGrep.cpp index 556a6107a9..13fc34a1f9 100644 --- a/sakura_core/dlg/CDlgGrep.cpp +++ b/sakura_core/dlg/CDlgGrep.cpp @@ -11,6 +11,7 @@ Copyright (C) 2006, ryoji Copyright (C) 2010, ryoji Copyright (C) 2012, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgGrep.h b/sakura_core/dlg/CDlgGrep.h index a05ca54ee7..d5c7b29018 100644 --- a/sakura_core/dlg/CDlgGrep.h +++ b/sakura_core/dlg/CDlgGrep.h @@ -8,6 +8,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgGrepReplace.cpp b/sakura_core/dlg/CDlgGrepReplace.cpp index f073934f4b..10a9d8adbf 100644 --- a/sakura_core/dlg/CDlgGrepReplace.cpp +++ b/sakura_core/dlg/CDlgGrepReplace.cpp @@ -11,6 +11,7 @@ Copyright (C) 2006, ryoji Copyright (C) 2010, ryoji Copyright (C) 2014, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgGrepReplace.h b/sakura_core/dlg/CDlgGrepReplace.h index dd880b5e62..380b4db67a 100644 --- a/sakura_core/dlg/CDlgGrepReplace.h +++ b/sakura_core/dlg/CDlgGrepReplace.h @@ -8,6 +8,7 @@ Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, Moca Copyright (C) 2014, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgInput1.cpp b/sakura_core/dlg/CDlgInput1.cpp index 50ee108bd0..09cac87a99 100644 --- a/sakura_core/dlg/CDlgInput1.cpp +++ b/sakura_core/dlg/CDlgInput1.cpp @@ -9,6 +9,7 @@ Copyright (C) 2002, MIK Copyright (C) 2003, KEITA Copyright (C) 2006, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgInput1.h b/sakura_core/dlg/CDlgInput1.h index 00b6053f5a..5b385477bb 100644 --- a/sakura_core/dlg/CDlgInput1.h +++ b/sakura_core/dlg/CDlgInput1.h @@ -6,6 +6,7 @@ */ /* Copyright (C) 1998-2001, Norio Nakatani + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgJump.cpp b/sakura_core/dlg/CDlgJump.cpp index 6dbef20c92..e3ff2c22c2 100644 --- a/sakura_core/dlg/CDlgJump.cpp +++ b/sakura_core/dlg/CDlgJump.cpp @@ -11,6 +11,7 @@ Copyright (C) 2002, aroka, MIK, YAZAKI Copyright (C) 2004, genta Copyright (C) 2006, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgJump.h b/sakura_core/dlg/CDlgJump.h index f483bb4800..76feb35a69 100644 --- a/sakura_core/dlg/CDlgJump.h +++ b/sakura_core/dlg/CDlgJump.h @@ -9,6 +9,7 @@ Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2000, jepro Copyright (C) 2002, YAZAKI + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgOpenFile.cpp b/sakura_core/dlg/CDlgOpenFile.cpp index 39ca9f0f00..b9cb31f6bd 100644 --- a/sakura_core/dlg/CDlgOpenFile.cpp +++ b/sakura_core/dlg/CDlgOpenFile.cpp @@ -12,6 +12,7 @@ Copyright (C) 2004, genta Copyright (C) 2005, novice, ryoji Copyright (C) 2006, ryoji, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgOpenFile.h b/sakura_core/dlg/CDlgOpenFile.h index aa29da901c..a458aba995 100644 --- a/sakura_core/dlg/CDlgOpenFile.h +++ b/sakura_core/dlg/CDlgOpenFile.h @@ -12,6 +12,7 @@ Copyright (C) 2004, genta, MIK Copyright (C) 2005, ryoji Copyright (C) 2006, Moca, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp index 285255e562..bff41f766d 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp @@ -12,6 +12,7 @@ Copyright (C) 2004, genta Copyright (C) 2005, novice, ryoji Copyright (C) 2006, ryoji, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp index 21f67bbf1a..f6fea7305b 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp @@ -12,6 +12,7 @@ Copyright (C) 2004, genta Copyright (C) 2005, novice, ryoji Copyright (C) 2006, ryoji, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgPluginOption.cpp b/sakura_core/dlg/CDlgPluginOption.cpp index cfbf79f3e5..11e2c79219 100644 --- a/sakura_core/dlg/CDlgPluginOption.cpp +++ b/sakura_core/dlg/CDlgPluginOption.cpp @@ -6,6 +6,7 @@ */ /* Copyright (C) 2010, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgPluginOption.h b/sakura_core/dlg/CDlgPluginOption.h index 3f0343e8fc..e280b7d471 100644 --- a/sakura_core/dlg/CDlgPluginOption.h +++ b/sakura_core/dlg/CDlgPluginOption.h @@ -6,6 +6,7 @@ */ /* Copyright (C) 2010, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgPrintSetting.cpp b/sakura_core/dlg/CDlgPrintSetting.cpp index 6424d22115..4a685b51e1 100644 --- a/sakura_core/dlg/CDlgPrintSetting.cpp +++ b/sakura_core/dlg/CDlgPrintSetting.cpp @@ -12,6 +12,7 @@ Copyright (C) 2002, MIK, aroka, YAZAKI Copyright (C) 2003, かろと Copyright (C) 2006, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgPrintSetting.h b/sakura_core/dlg/CDlgPrintSetting.h index e111040967..7110f295a2 100644 --- a/sakura_core/dlg/CDlgPrintSetting.h +++ b/sakura_core/dlg/CDlgPrintSetting.h @@ -6,6 +6,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, YAZAKI + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgProfileMgr.cpp b/sakura_core/dlg/CDlgProfileMgr.cpp index 65757f2c13..6ee540c9eb 100644 --- a/sakura_core/dlg/CDlgProfileMgr.cpp +++ b/sakura_core/dlg/CDlgProfileMgr.cpp @@ -6,6 +6,7 @@ */ /* Copyright (C) 2013, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgProfileMgr.h b/sakura_core/dlg/CDlgProfileMgr.h index 847da7295f..79648db758 100644 --- a/sakura_core/dlg/CDlgProfileMgr.h +++ b/sakura_core/dlg/CDlgProfileMgr.h @@ -6,6 +6,7 @@ */ /* Copyright (C) 2013, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgProperty.cpp b/sakura_core/dlg/CDlgProperty.cpp index 37b952b892..8823495130 100644 --- a/sakura_core/dlg/CDlgProperty.cpp +++ b/sakura_core/dlg/CDlgProperty.cpp @@ -10,6 +10,7 @@ Copyright (C) 2002, Moca, MIK, YAZAKI Copyright (C) 2006, ryoji Copyright (C) 2009, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgProperty.h b/sakura_core/dlg/CDlgProperty.h index 0b38e31a30..b2753b4482 100644 --- a/sakura_core/dlg/CDlgProperty.h +++ b/sakura_core/dlg/CDlgProperty.h @@ -7,6 +7,7 @@ */ /* Copyright (C) 1998-2001, Norio Nakatani + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgReplace.cpp b/sakura_core/dlg/CDlgReplace.cpp index aae4967223..ff68388898 100644 --- a/sakura_core/dlg/CDlgReplace.cpp +++ b/sakura_core/dlg/CDlgReplace.cpp @@ -12,6 +12,7 @@ Copyright (C) 2007, ryoji Copyright (C) 2009, ryoji Copyright (C) 2012, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgReplace.h b/sakura_core/dlg/CDlgReplace.h index 5ad655deb6..a66bf18bfd 100644 --- a/sakura_core/dlg/CDlgReplace.h +++ b/sakura_core/dlg/CDlgReplace.h @@ -10,6 +10,7 @@ Copyright (C) 2002, hor Copyright (C) 2007, ryoji Copyright (C) 2009, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgSetCharSet.cpp b/sakura_core/dlg/CDlgSetCharSet.cpp index 5a3ae32ec5..c5d8d38297 100644 --- a/sakura_core/dlg/CDlgSetCharSet.cpp +++ b/sakura_core/dlg/CDlgSetCharSet.cpp @@ -6,6 +6,7 @@ */ /* Copyright (C) 2010, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgSetCharSet.h b/sakura_core/dlg/CDlgSetCharSet.h index 08dc178ee0..5bdfb8f1d0 100644 --- a/sakura_core/dlg/CDlgSetCharSet.h +++ b/sakura_core/dlg/CDlgSetCharSet.h @@ -6,6 +6,7 @@ */ /* Copyright (C) 2010, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgTagJumpList.cpp b/sakura_core/dlg/CDlgTagJumpList.cpp index abb29034bf..0877da592d 100644 --- a/sakura_core/dlg/CDlgTagJumpList.cpp +++ b/sakura_core/dlg/CDlgTagJumpList.cpp @@ -10,6 +10,7 @@ Copyright (C) 2005, MIK Copyright (C) 2006, genta, ryoji Copyright (C) 2010, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgTagJumpList.h b/sakura_core/dlg/CDlgTagJumpList.h index 7e60ea27d3..68c597088b 100644 --- a/sakura_core/dlg/CDlgTagJumpList.h +++ b/sakura_core/dlg/CDlgTagJumpList.h @@ -8,6 +8,7 @@ Copyright (C) 2003, MIK Copyright (C) 2005, MIK Copyright (C) 2010, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgTagsMake.cpp b/sakura_core/dlg/CDlgTagsMake.cpp index f84fa68c9a..3414d0fa65 100644 --- a/sakura_core/dlg/CDlgTagsMake.cpp +++ b/sakura_core/dlg/CDlgTagsMake.cpp @@ -7,6 +7,7 @@ /* Copyright (C) 2003, MIK Copyright (C) 2006, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgTagsMake.h b/sakura_core/dlg/CDlgTagsMake.h index a9c2480836..aded3dbe83 100644 --- a/sakura_core/dlg/CDlgTagsMake.h +++ b/sakura_core/dlg/CDlgTagsMake.h @@ -6,6 +6,7 @@ */ /* Copyright (C) 2003, MIK + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgWinSize.cpp b/sakura_core/dlg/CDlgWinSize.cpp index 0e346e2225..ba5d5d2f18 100644 --- a/sakura_core/dlg/CDlgWinSize.cpp +++ b/sakura_core/dlg/CDlgWinSize.cpp @@ -7,6 +7,7 @@ /* Copyright (C) 2004, genta, Moca Copyright (C) 2006, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgWinSize.h b/sakura_core/dlg/CDlgWinSize.h index edd13ef487..c9af8a038b 100644 --- a/sakura_core/dlg/CDlgWinSize.h +++ b/sakura_core/dlg/CDlgWinSize.h @@ -6,6 +6,7 @@ */ /* Copyright (C) 2004, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgWindowList.cpp b/sakura_core/dlg/CDlgWindowList.cpp index 56cc60714e..3dcd5ed53f 100644 --- a/sakura_core/dlg/CDlgWindowList.cpp +++ b/sakura_core/dlg/CDlgWindowList.cpp @@ -13,6 +13,7 @@ Copyright (C) 2006, ryoji Copyright (C) 2009, ryoji Copyright (C) 2015, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgWindowList.h b/sakura_core/dlg/CDlgWindowList.h index 3586442c72..4588205224 100644 --- a/sakura_core/dlg/CDlgWindowList.h +++ b/sakura_core/dlg/CDlgWindowList.h @@ -6,6 +6,7 @@ */ /* Copyright (C) 2015, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CBlockComment.cpp b/sakura_core/doc/CBlockComment.cpp index 6e04205fc3..3c582ab786 100644 --- a/sakura_core/doc/CBlockComment.cpp +++ b/sakura_core/doc/CBlockComment.cpp @@ -8,6 +8,7 @@ Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, YAZAKI, Moca Copyright (C) 2005, D.S.Koba + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/doc/CBlockComment.h b/sakura_core/doc/CBlockComment.h index 886059f447..d3570f3a94 100644 --- a/sakura_core/doc/CBlockComment.h +++ b/sakura_core/doc/CBlockComment.h @@ -7,6 +7,7 @@ /* Copyright (C) 2002, Yazaki Copyright (C) 2005, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/doc/CDocEditor.cpp b/sakura_core/doc/CDocEditor.cpp index 8d21c9b712..3b1f7a1bcd 100644 --- a/sakura_core/doc/CDocEditor.cpp +++ b/sakura_core/doc/CDocEditor.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocEditor.h b/sakura_core/doc/CDocEditor.h index f10f6fe074..cc376e560f 100644 --- a/sakura_core/doc/CDocEditor.h +++ b/sakura_core/doc/CDocEditor.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocFile.cpp b/sakura_core/doc/CDocFile.cpp index 04d27cdbb9..7a453b6cfc 100644 --- a/sakura_core/doc/CDocFile.cpp +++ b/sakura_core/doc/CDocFile.cpp @@ -2,6 +2,7 @@ /* Copyright (C) 2008, kobake Copyright (C) 2013, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocFile.h b/sakura_core/doc/CDocFile.h index 748f4c88da..15d9ac1aa1 100644 --- a/sakura_core/doc/CDocFile.h +++ b/sakura_core/doc/CDocFile.h @@ -2,6 +2,7 @@ /* Copyright (C) 2008, kobake Copyright (C) 2013, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocFileOperation.cpp b/sakura_core/doc/CDocFileOperation.cpp index 5052aa3ee7..0446e6e18d 100644 --- a/sakura_core/doc/CDocFileOperation.cpp +++ b/sakura_core/doc/CDocFileOperation.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocFileOperation.h b/sakura_core/doc/CDocFileOperation.h index 597ccccdef..99bf6e43a0 100644 --- a/sakura_core/doc/CDocFileOperation.h +++ b/sakura_core/doc/CDocFileOperation.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocListener.cpp b/sakura_core/doc/CDocListener.cpp index 6535e8f7f5..73f75cfa6e 100644 --- a/sakura_core/doc/CDocListener.cpp +++ b/sakura_core/doc/CDocListener.cpp @@ -10,6 +10,7 @@ */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocListener.h b/sakura_core/doc/CDocListener.h index 70f5b9c9cc..2cc43f45d1 100644 --- a/sakura_core/doc/CDocListener.h +++ b/sakura_core/doc/CDocListener.h @@ -11,6 +11,7 @@ /* Copyright (C) 2008, kobake Copyright (C) 2013, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocLocker.cpp b/sakura_core/doc/CDocLocker.cpp index d8ab4dda1b..1d14ed1a96 100644 --- a/sakura_core/doc/CDocLocker.cpp +++ b/sakura_core/doc/CDocLocker.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CDocLocker.h" #include "CDocFile.h" diff --git a/sakura_core/doc/CDocLocker.h b/sakura_core/doc/CDocLocker.h index b1edf30534..aba4f4a5b5 100644 --- a/sakura_core/doc/CDocLocker.h +++ b/sakura_core/doc/CDocLocker.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocOutline.cpp b/sakura_core/doc/CDocOutline.cpp index ec841e6e3b..a8c49a2934 100644 --- a/sakura_core/doc/CDocOutline.cpp +++ b/sakura_core/doc/CDocOutline.cpp @@ -11,6 +11,7 @@ Copyright (C) 2002, frozen Copyright (C) 2003, zenryaku Copyright (C) 2005, genta, D.S.Koba, じゅうじ + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/doc/CDocOutline.h b/sakura_core/doc/CDocOutline.h index 113574c41f..cb16462821 100644 --- a/sakura_core/doc/CDocOutline.h +++ b/sakura_core/doc/CDocOutline.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocReader.cpp b/sakura_core/doc/CDocReader.cpp index b43d243026..e57a1abce8 100644 --- a/sakura_core/doc/CDocReader.cpp +++ b/sakura_core/doc/CDocReader.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CDocReader.h" #include "logic/CDocLine.h" diff --git a/sakura_core/doc/CDocReader.h b/sakura_core/doc/CDocReader.h index d5a2296548..e15fbcb371 100644 --- a/sakura_core/doc/CDocReader.h +++ b/sakura_core/doc/CDocReader.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocType.cpp b/sakura_core/doc/CDocType.cpp index cba174aa12..d2c2902061 100644 --- a/sakura_core/doc/CDocType.cpp +++ b/sakura_core/doc/CDocType.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocType.h b/sakura_core/doc/CDocType.h index 2cd005d12d..ad06410420 100644 --- a/sakura_core/doc/CDocType.h +++ b/sakura_core/doc/CDocType.h @@ -6,6 +6,7 @@ */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocTypeSetting.cpp b/sakura_core/doc/CDocTypeSetting.cpp index 5a3c394a7b..e35e44b817 100644 --- a/sakura_core/doc/CDocTypeSetting.cpp +++ b/sakura_core/doc/CDocTypeSetting.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocTypeSetting.h b/sakura_core/doc/CDocTypeSetting.h index 6437efcfbd..9cf8251199 100644 --- a/sakura_core/doc/CDocTypeSetting.h +++ b/sakura_core/doc/CDocTypeSetting.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocVisitor.cpp b/sakura_core/doc/CDocVisitor.cpp index 10f0f6087d..051b60b982 100644 --- a/sakura_core/doc/CDocVisitor.cpp +++ b/sakura_core/doc/CDocVisitor.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CDocVisitor.h" #include "doc/CEditDoc.h" diff --git a/sakura_core/doc/CDocVisitor.h b/sakura_core/doc/CDocVisitor.h index 48b29a7441..0b1a929b2e 100644 --- a/sakura_core/doc/CDocVisitor.h +++ b/sakura_core/doc/CDocVisitor.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CEditDoc.cpp b/sakura_core/doc/CEditDoc.cpp index ec80f1b746..225d6f4c17 100644 --- a/sakura_core/doc/CEditDoc.cpp +++ b/sakura_core/doc/CEditDoc.cpp @@ -18,6 +18,7 @@ Copyright (C) 2009, nasukoji Copyright (C) 2011, ryoji Copyright (C) 2013, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CEditDoc.h b/sakura_core/doc/CEditDoc.h index 65dadef015..535a583144 100644 --- a/sakura_core/doc/CEditDoc.h +++ b/sakura_core/doc/CEditDoc.h @@ -15,6 +15,7 @@ Copyright (C) 2006, ryoji Copyright (C) 2007, ryoji, maru Copyright (C) 2008, ryoji, nasukoji + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CLineComment.cpp b/sakura_core/doc/CLineComment.cpp index d18f285313..b60f281685 100644 --- a/sakura_core/doc/CLineComment.cpp +++ b/sakura_core/doc/CLineComment.cpp @@ -7,6 +7,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, Yazaki, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/doc/CLineComment.h b/sakura_core/doc/CLineComment.h index 718e0fc497..55d3c32762 100644 --- a/sakura_core/doc/CLineComment.h +++ b/sakura_core/doc/CLineComment.h @@ -6,6 +6,7 @@ */ /* Copyright (C) 2002, Yazaki + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/doc/layout/CLayout.cpp b/sakura_core/doc/layout/CLayout.cpp index f801a9f90d..3bd2614613 100644 --- a/sakura_core/doc/layout/CLayout.cpp +++ b/sakura_core/doc/layout/CLayout.cpp @@ -7,6 +7,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, YAZAKI + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/doc/layout/CLayout.h b/sakura_core/doc/layout/CLayout.h index 540bd461d8..6ef20b3272 100644 --- a/sakura_core/doc/layout/CLayout.h +++ b/sakura_core/doc/layout/CLayout.h @@ -8,6 +8,7 @@ Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, YAZAKI, aroka Copyright (C) 2009, nasukoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/doc/layout/CLayoutExInfo.h b/sakura_core/doc/layout/CLayoutExInfo.h index d9bfdd1866..248cba0b22 100644 --- a/sakura_core/doc/layout/CLayoutExInfo.h +++ b/sakura_core/doc/layout/CLayoutExInfo.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2011, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/layout/CLayoutMgr.cpp b/sakura_core/doc/layout/CLayoutMgr.cpp index 327bc56d9a..2d47b49e2b 100644 --- a/sakura_core/doc/layout/CLayoutMgr.cpp +++ b/sakura_core/doc/layout/CLayoutMgr.cpp @@ -10,6 +10,7 @@ Copyright (C) 2004, genta, Moca Copyright (C) 2005, D.S.Koba, Moca Copyright (C) 2009, ryoji, nasukoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/doc/layout/CLayoutMgr.h b/sakura_core/doc/layout/CLayoutMgr.h index 8993ff0a06..01c4815443 100644 --- a/sakura_core/doc/layout/CLayoutMgr.h +++ b/sakura_core/doc/layout/CLayoutMgr.h @@ -14,6 +14,7 @@ Copyright (C) 2003, genta Copyright (C) 2005, Moca, genta, D.S.Koba Copyright (C) 2009, nasukoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp b/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp index 4ec62ce067..2de5300a63 100644 --- a/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp +++ b/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "doc/CEditDoc.h" /// 2003/07/20 genta #include "doc/layout/CLayoutMgr.h" diff --git a/sakura_core/doc/layout/CLayoutMgr_New.cpp b/sakura_core/doc/layout/CLayoutMgr_New.cpp index d684699589..b24f331d26 100644 --- a/sakura_core/doc/layout/CLayoutMgr_New.cpp +++ b/sakura_core/doc/layout/CLayoutMgr_New.cpp @@ -11,6 +11,7 @@ Copyright (C) 2004, Moca, genta Copyright (C) 2005, D.S.Koba, Moca Copyright (C) 2009, nasukoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/doc/layout/CLayoutMgr_New2.cpp b/sakura_core/doc/layout/CLayoutMgr_New2.cpp index c82ec45dfd..df5b495ce8 100644 --- a/sakura_core/doc/layout/CLayoutMgr_New2.cpp +++ b/sakura_core/doc/layout/CLayoutMgr_New2.cpp @@ -7,6 +7,7 @@ Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, MIK, aroka Copyright (C) 2009, nasukoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/doc/layout/CTsvModeInfo.cpp b/sakura_core/doc/layout/CTsvModeInfo.cpp index 2746aa824f..5056b96d7a 100644 --- a/sakura_core/doc/layout/CTsvModeInfo.cpp +++ b/sakura_core/doc/layout/CTsvModeInfo.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2015, syat + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/layout/CTsvModeInfo.h b/sakura_core/doc/layout/CTsvModeInfo.h index b28138026d..8d11b65252 100644 --- a/sakura_core/doc/layout/CTsvModeInfo.h +++ b/sakura_core/doc/layout/CTsvModeInfo.h @@ -3,6 +3,7 @@ */ /* Copyright (C) 2015, syat + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/logic/CDocLine.cpp b/sakura_core/doc/logic/CDocLine.cpp index 676b5389c8..3c8ba35262 100644 --- a/sakura_core/doc/logic/CDocLine.cpp +++ b/sakura_core/doc/logic/CDocLine.cpp @@ -7,6 +7,7 @@ Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2001, hor, genta Copyright (C) 2002, MIK, YAZAKI + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/doc/logic/CDocLine.h b/sakura_core/doc/logic/CDocLine.h index 2eb3180089..1b21f5b30c 100644 --- a/sakura_core/doc/logic/CDocLine.h +++ b/sakura_core/doc/logic/CDocLine.h @@ -10,6 +10,7 @@ Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2001, hor Copyright (C) 2002, MIK + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/doc/logic/CDocLineMgr.cpp b/sakura_core/doc/logic/CDocLineMgr.cpp index 5cb3572347..ff2d283073 100644 --- a/sakura_core/doc/logic/CDocLineMgr.cpp +++ b/sakura_core/doc/logic/CDocLineMgr.cpp @@ -15,6 +15,7 @@ Copyright (C) 2003, Moca, ryoji, genta, かろと Copyright (C) 2004, genta, Moca Copyright (C) 2005, D.S.Koba, ryoji, かろと + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/doc/logic/CDocLineMgr.h b/sakura_core/doc/logic/CDocLineMgr.h index 9061863042..1816d2c815 100644 --- a/sakura_core/doc/logic/CDocLineMgr.h +++ b/sakura_core/doc/logic/CDocLineMgr.h @@ -12,6 +12,7 @@ Copyright (C) 2001, hor, genta Copyright (C) 2002, aroka, MIK, hor Copyright (C) 2003, Moca, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/docplus/CBookmarkManager.cpp b/sakura_core/docplus/CBookmarkManager.cpp index 0ff43232d9..c7f352ca68 100644 --- a/sakura_core/docplus/CBookmarkManager.cpp +++ b/sakura_core/docplus/CBookmarkManager.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "docplus/CBookmarkManager.h" #include "doc/logic/CDocLineMgr.h" diff --git a/sakura_core/docplus/CBookmarkManager.h b/sakura_core/docplus/CBookmarkManager.h index aa5b0418af..d762f9bc12 100644 --- a/sakura_core/docplus/CBookmarkManager.h +++ b/sakura_core/docplus/CBookmarkManager.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/docplus/CDiffManager.cpp b/sakura_core/docplus/CDiffManager.cpp index 3df0ffe40a..fd05ebbff9 100644 --- a/sakura_core/docplus/CDiffManager.cpp +++ b/sakura_core/docplus/CDiffManager.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "docplus/CDiffManager.h" #include "types/CTypeSupport.h" diff --git a/sakura_core/docplus/CDiffManager.h b/sakura_core/docplus/CDiffManager.h index ac2065d2df..43c077191d 100644 --- a/sakura_core/docplus/CDiffManager.h +++ b/sakura_core/docplus/CDiffManager.h @@ -3,6 +3,7 @@ //2008.02.23 kobake 大整理 /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/docplus/CFuncListManager.cpp b/sakura_core/docplus/CFuncListManager.cpp index 6775462aee..a10d54419c 100644 --- a/sakura_core/docplus/CFuncListManager.cpp +++ b/sakura_core/docplus/CFuncListManager.cpp @@ -2,6 +2,7 @@ /* Copyright (C) 2008, kobake Copyright (C) 2014, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/docplus/CFuncListManager.h b/sakura_core/docplus/CFuncListManager.h index c8aac7a77f..6184108551 100644 --- a/sakura_core/docplus/CFuncListManager.h +++ b/sakura_core/docplus/CFuncListManager.h @@ -2,6 +2,7 @@ /* Copyright (C) 2008, kobake Copyright (C) 2014, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/docplus/CModifyManager.cpp b/sakura_core/docplus/CModifyManager.cpp index 90d3435bc7..be817f56a1 100644 --- a/sakura_core/docplus/CModifyManager.cpp +++ b/sakura_core/docplus/CModifyManager.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "docplus/CModifyManager.h" #include "doc/CEditDoc.h" diff --git a/sakura_core/docplus/CModifyManager.h b/sakura_core/docplus/CModifyManager.h index f7343adee2..b970b6a5ca 100644 --- a/sakura_core/docplus/CModifyManager.h +++ b/sakura_core/docplus/CModifyManager.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CAppNodeManager.cpp b/sakura_core/env/CAppNodeManager.cpp index ee2f2216c9..0cccb12618 100644 --- a/sakura_core/env/CAppNodeManager.cpp +++ b/sakura_core/env/CAppNodeManager.cpp @@ -9,6 +9,7 @@ Copyright (C) 2011, syat Copyright (C) 2012, syat, Uchi Copyright (C) 2013, Moca, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CAppNodeManager.h b/sakura_core/env/CAppNodeManager.h index 77d129155f..ecc5594c13 100644 --- a/sakura_core/env/CAppNodeManager.h +++ b/sakura_core/env/CAppNodeManager.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CDocTypeManager.cpp b/sakura_core/env/CDocTypeManager.cpp index 8163163d40..02e6115f84 100644 --- a/sakura_core/env/CDocTypeManager.cpp +++ b/sakura_core/env/CDocTypeManager.cpp @@ -4,6 +4,7 @@ */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CDocTypeManager.h b/sakura_core/env/CDocTypeManager.h index 0d878f580f..aa3a5edfc0 100644 --- a/sakura_core/env/CDocTypeManager.h +++ b/sakura_core/env/CDocTypeManager.h @@ -4,6 +4,7 @@ */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CFileNameManager.cpp b/sakura_core/env/CFileNameManager.cpp index c3366c97d2..91bf856797 100644 --- a/sakura_core/env/CFileNameManager.cpp +++ b/sakura_core/env/CFileNameManager.cpp @@ -4,6 +4,7 @@ */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CFileNameManager.h b/sakura_core/env/CFileNameManager.h index c1720d3475..9e0c85bec4 100644 --- a/sakura_core/env/CFileNameManager.h +++ b/sakura_core/env/CFileNameManager.h @@ -4,6 +4,7 @@ */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CFormatManager.cpp b/sakura_core/env/CFormatManager.cpp index 22c8acd40b..5a7212cab0 100644 --- a/sakura_core/env/CFormatManager.cpp +++ b/sakura_core/env/CFormatManager.cpp @@ -4,6 +4,7 @@ */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CFormatManager.h b/sakura_core/env/CFormatManager.h index 685a9bc298..07c3c5261d 100644 --- a/sakura_core/env/CFormatManager.h +++ b/sakura_core/env/CFormatManager.h @@ -4,6 +4,7 @@ */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CHelpManager.cpp b/sakura_core/env/CHelpManager.cpp index 2b9dee5fa5..76ad1dcfca 100644 --- a/sakura_core/env/CHelpManager.cpp +++ b/sakura_core/env/CHelpManager.cpp @@ -4,6 +4,7 @@ */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CHelpManager.h b/sakura_core/env/CHelpManager.h index 322ecfdf4d..ad8846bf20 100644 --- a/sakura_core/env/CHelpManager.h +++ b/sakura_core/env/CHelpManager.h @@ -4,6 +4,7 @@ */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CSakuraEnvironment.cpp b/sakura_core/env/CSakuraEnvironment.cpp index 03e46931e2..2a9db4492d 100644 --- a/sakura_core/env/CSakuraEnvironment.cpp +++ b/sakura_core/env/CSakuraEnvironment.cpp @@ -2,6 +2,7 @@ /* Copyright (C) 2008, kobake, ryoji Copyright (C) 2012, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CSakuraEnvironment.h b/sakura_core/env/CSakuraEnvironment.h index 0ce9478f54..89e411305d 100644 --- a/sakura_core/env/CSakuraEnvironment.h +++ b/sakura_core/env/CSakuraEnvironment.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CSearchKeywordManager.cpp b/sakura_core/env/CSearchKeywordManager.cpp index 0328ab1609..08b5078e51 100644 --- a/sakura_core/env/CSearchKeywordManager.cpp +++ b/sakura_core/env/CSearchKeywordManager.cpp @@ -4,6 +4,7 @@ */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CSearchKeywordManager.h b/sakura_core/env/CSearchKeywordManager.h index d6a6e3be49..88720da049 100644 --- a/sakura_core/env/CSearchKeywordManager.h +++ b/sakura_core/env/CSearchKeywordManager.h @@ -4,6 +4,7 @@ */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CShareData.cpp b/sakura_core/env/CShareData.cpp index 68f299d2f3..9592f2268c 100644 --- a/sakura_core/env/CShareData.cpp +++ b/sakura_core/env/CShareData.cpp @@ -18,6 +18,7 @@ Copyright (C) 2009, nasukoji, ryoji Copyright (C) 2011, nasukoji Copyright (C) 2012, Moca, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/env/CShareData.h b/sakura_core/env/CShareData.h index 3ee960297e..6321f07af1 100644 --- a/sakura_core/env/CShareData.h +++ b/sakura_core/env/CShareData.h @@ -16,6 +16,7 @@ Copyright (C) 2007, ryoji, maru Copyright (C) 2008, ryoji, Uchi Copyright (C) 2011, nasukoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/env/CShareData_IO.cpp b/sakura_core/env/CShareData_IO.cpp index 93bbae291c..497063c446 100644 --- a/sakura_core/env/CShareData_IO.cpp +++ b/sakura_core/env/CShareData_IO.cpp @@ -2,6 +2,7 @@ //2008.XX.XX kobake CShareDataから分離 /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CShareData_IO.h b/sakura_core/env/CShareData_IO.h index 6e6195b346..3e0de2d749 100644 --- a/sakura_core/env/CShareData_IO.h +++ b/sakura_core/env/CShareData_IO.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CTagJumpManager.cpp b/sakura_core/env/CTagJumpManager.cpp index 7f18c6b000..af99fe7f95 100644 --- a/sakura_core/env/CTagJumpManager.cpp +++ b/sakura_core/env/CTagJumpManager.cpp @@ -4,6 +4,7 @@ */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CTagJumpManager.h b/sakura_core/env/CTagJumpManager.h index 6e898d5a2a..0cb63e1c5a 100644 --- a/sakura_core/env/CTagJumpManager.h +++ b/sakura_core/env/CTagJumpManager.h @@ -4,6 +4,7 @@ */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CommonSetting.cpp b/sakura_core/env/CommonSetting.cpp index 164f6a0d0d..8183b54897 100644 --- a/sakura_core/env/CommonSetting.cpp +++ b/sakura_core/env/CommonSetting.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CommonSetting.h b/sakura_core/env/CommonSetting.h index 8ba56191da..3d8524d802 100644 --- a/sakura_core/env/CommonSetting.h +++ b/sakura_core/env/CommonSetting.h @@ -2,6 +2,7 @@ //2007.09.28 kobake Common整理 /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/DLLSHAREDATA.cpp b/sakura_core/env/DLLSHAREDATA.cpp index a3d2a9a874..3d0a8f59a0 100644 --- a/sakura_core/env/DLLSHAREDATA.cpp +++ b/sakura_core/env/DLLSHAREDATA.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/DLLSHAREDATA.h b/sakura_core/env/DLLSHAREDATA.h index febbb26ff8..2284dd7f6c 100644 --- a/sakura_core/env/DLLSHAREDATA.h +++ b/sakura_core/env/DLLSHAREDATA.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/extmodule/CBregexp.cpp b/sakura_core/extmodule/CBregexp.cpp index d6aacfead2..89e7ded815 100644 --- a/sakura_core/extmodule/CBregexp.cpp +++ b/sakura_core/extmodule/CBregexp.cpp @@ -17,6 +17,7 @@ Copyright (C) 2005, かろと Copyright (C) 2006, かろと Copyright (C) 2007, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/extmodule/CBregexp.h b/sakura_core/extmodule/CBregexp.h index 5353556f48..f924be3607 100644 --- a/sakura_core/extmodule/CBregexp.h +++ b/sakura_core/extmodule/CBregexp.h @@ -17,6 +17,7 @@ Copyright (C) 2005, かろと, aroka Copyright (C) 2006, かろと Copyright (C) 2007, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/extmodule/CBregexpDll2.cpp b/sakura_core/extmodule/CBregexpDll2.cpp index acc7367edd..6f0f2db443 100644 --- a/sakura_core/extmodule/CBregexpDll2.cpp +++ b/sakura_core/extmodule/CBregexpDll2.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/extmodule/CBregexpDll2.h b/sakura_core/extmodule/CBregexpDll2.h index a72537333d..ec8e4ae0d4 100644 --- a/sakura_core/extmodule/CBregexpDll2.h +++ b/sakura_core/extmodule/CBregexpDll2.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/extmodule/CDllHandler.cpp b/sakura_core/extmodule/CDllHandler.cpp index b08e149cd2..b74e3b10b9 100644 --- a/sakura_core/extmodule/CDllHandler.cpp +++ b/sakura_core/extmodule/CDllHandler.cpp @@ -6,6 +6,7 @@ */ /* Copyright (C) 2001, genta + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/extmodule/CDllHandler.h b/sakura_core/extmodule/CDllHandler.h index bc215db68d..63d36e5892 100644 --- a/sakura_core/extmodule/CDllHandler.h +++ b/sakura_core/extmodule/CDllHandler.h @@ -7,6 +7,7 @@ /* Copyright (C) 2001, genta Copyright (C) 2002, YAZAKI, genta + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/extmodule/CHtmlHelp.cpp b/sakura_core/extmodule/CHtmlHelp.cpp index 06b763dccb..0821495bac 100644 --- a/sakura_core/extmodule/CHtmlHelp.cpp +++ b/sakura_core/extmodule/CHtmlHelp.cpp @@ -8,6 +8,7 @@ */ /* Copyright (C) 2001, genta + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/extmodule/CHtmlHelp.h b/sakura_core/extmodule/CHtmlHelp.h index 9ce42ebf3b..4954f6cf5e 100644 --- a/sakura_core/extmodule/CHtmlHelp.h +++ b/sakura_core/extmodule/CHtmlHelp.h @@ -8,6 +8,7 @@ */ /* Copyright (C) 2001, genta + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/extmodule/CMigemo.cpp b/sakura_core/extmodule/CMigemo.cpp index dab4db8722..0378fd73b3 100644 --- a/sakura_core/extmodule/CMigemo.cpp +++ b/sakura_core/extmodule/CMigemo.cpp @@ -9,6 +9,7 @@ Copyright (C) 2007, ryoji Copyright (C) 2009, miau Copyright (C) 2012, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/extmodule/CMigemo.h b/sakura_core/extmodule/CMigemo.h index 26b6d1fdba..ba4192d2e5 100644 --- a/sakura_core/extmodule/CMigemo.h +++ b/sakura_core/extmodule/CMigemo.h @@ -10,6 +10,7 @@ Copyright (C) 2004, isearch Copyright (C) 2005, aroka Copyright (C) 2009, miau + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/extmodule/CUxTheme.cpp b/sakura_core/extmodule/CUxTheme.cpp index b6783e264f..266a1726fb 100644 --- a/sakura_core/extmodule/CUxTheme.cpp +++ b/sakura_core/extmodule/CUxTheme.cpp @@ -8,6 +8,7 @@ */ /* Copyright (C) 2007, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/extmodule/CUxTheme.h b/sakura_core/extmodule/CUxTheme.h index acb3d22491..902e3f880a 100644 --- a/sakura_core/extmodule/CUxTheme.h +++ b/sakura_core/extmodule/CUxTheme.h @@ -8,6 +8,7 @@ */ /* Copyright (C) 2007, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/func/CFuncKeyWnd.cpp b/sakura_core/func/CFuncKeyWnd.cpp index f7c73cb592..572a41479e 100644 --- a/sakura_core/func/CFuncKeyWnd.cpp +++ b/sakura_core/func/CFuncKeyWnd.cpp @@ -12,6 +12,7 @@ Copyright (C) 2006, aroka, ryoji Copyright (C) 2007, ryoji Copyright (C) 2009, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/func/CFuncKeyWnd.h b/sakura_core/func/CFuncKeyWnd.h index 66a92e2c35..c9b7af14d0 100644 --- a/sakura_core/func/CFuncKeyWnd.h +++ b/sakura_core/func/CFuncKeyWnd.h @@ -8,6 +8,7 @@ Copyright (C) 2002, YAZAKI, aroka Copyright (C) 2006, aroka Copyright (C) 2007, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/func/CFuncLookup.cpp b/sakura_core/func/CFuncLookup.cpp index b72394cc6c..972cab6887 100644 --- a/sakura_core/func/CFuncLookup.cpp +++ b/sakura_core/func/CFuncLookup.cpp @@ -10,6 +10,7 @@ /* Copyright (C) 2001, genta Copyright (C) 2007, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/func/CFuncLookup.h b/sakura_core/func/CFuncLookup.h index 3d4efd3dff..ac9c13e0e5 100644 --- a/sakura_core/func/CFuncLookup.h +++ b/sakura_core/func/CFuncLookup.h @@ -10,6 +10,7 @@ Copyright (C) 2001, genta Copyright (C) 2002, aroka Copyright (C) 2007, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/func/CKeyBind.cpp b/sakura_core/func/CKeyBind.cpp index 66ba3d306c..d61a6147cb 100644 --- a/sakura_core/func/CKeyBind.cpp +++ b/sakura_core/func/CKeyBind.cpp @@ -11,6 +11,7 @@ Copyright (C) 2002, YAZAKI, aroka Copyright (C) 2007, ryoji Copyright (C) 2008, nasukoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/func/CKeyBind.h b/sakura_core/func/CKeyBind.h index 3e6ded7f6d..c8fd387c65 100644 --- a/sakura_core/func/CKeyBind.h +++ b/sakura_core/func/CKeyBind.h @@ -7,6 +7,7 @@ */ /* Copyright (C) 1998-2001, Norio Nakatani + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/func/Funccode.cpp b/sakura_core/func/Funccode.cpp index f93efb8b5b..5d104c09b0 100644 --- a/sakura_core/func/Funccode.cpp +++ b/sakura_core/func/Funccode.cpp @@ -15,6 +15,7 @@ Copyright (C) 2007, ryoji Copyright (C) 2008, nasukoji Copyright (C) 2009, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/func/Funccode.h b/sakura_core/func/Funccode.h index 122ba76436..376a68f1ff 100644 --- a/sakura_core/func/Funccode.h +++ b/sakura_core/func/Funccode.h @@ -13,6 +13,7 @@ Copyright (C) 2005, genta, MIK, maru Copyright (C) 2006, aroka, かろと, fon, ryoji Copyright (C) 2007, ryoji, genta + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/io/CBinaryStream.cpp b/sakura_core/io/CBinaryStream.cpp index 232c0e0757..0e2bc4c3fe 100644 --- a/sakura_core/io/CBinaryStream.cpp +++ b/sakura_core/io/CBinaryStream.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CBinaryStream.h" diff --git a/sakura_core/io/CBinaryStream.h b/sakura_core/io/CBinaryStream.h index c76d14cadc..dfa97db6b9 100644 --- a/sakura_core/io/CBinaryStream.h +++ b/sakura_core/io/CBinaryStream.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/io/CFile.cpp b/sakura_core/io/CFile.cpp index c6f0b4bc63..b25530e9e8 100644 --- a/sakura_core/io/CFile.cpp +++ b/sakura_core/io/CFile.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "io/CFile.h" #include "window/CEditWnd.h" // 変更予定 diff --git a/sakura_core/io/CFile.h b/sakura_core/io/CFile.h index 609f4c553e..84910b1d95 100644 --- a/sakura_core/io/CFile.h +++ b/sakura_core/io/CFile.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/io/CFileLoad.cpp b/sakura_core/io/CFileLoad.cpp index f30383c170..dab4abd144 100644 --- a/sakura_core/io/CFileLoad.cpp +++ b/sakura_core/io/CFileLoad.cpp @@ -9,6 +9,7 @@ Copyright (C) 2002, Moca, genta Copyright (C) 2003, Moca, ryoji Copyright (C) 2006, rastiv + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/io/CFileLoad.h b/sakura_core/io/CFileLoad.h index cdb4ca3241..2130158898 100644 --- a/sakura_core/io/CFileLoad.h +++ b/sakura_core/io/CFileLoad.h @@ -7,6 +7,7 @@ /* Copyright (C) 2002, Moca, genta Copyright (C) 2003, Moca, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/io/CIoBridge.cpp b/sakura_core/io/CIoBridge.cpp index eb6bcd9b7f..08922ebcc2 100644 --- a/sakura_core/io/CIoBridge.cpp +++ b/sakura_core/io/CIoBridge.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "io/CIoBridge.h" #include "charset/CCodeFactory.h" diff --git a/sakura_core/io/CIoBridge.h b/sakura_core/io/CIoBridge.h index 636fb218ff..9989bbd8ee 100644 --- a/sakura_core/io/CIoBridge.h +++ b/sakura_core/io/CIoBridge.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/io/CStream.cpp b/sakura_core/io/CStream.cpp index c1796ab666..e2fe0a0e84 100644 --- a/sakura_core/io/CStream.cpp +++ b/sakura_core/io/CStream.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CStream.h" #include diff --git a/sakura_core/io/CStream.h b/sakura_core/io/CStream.h index c9ad583e8b..78eb56ce1d 100644 --- a/sakura_core/io/CStream.h +++ b/sakura_core/io/CStream.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/io/CTextStream.cpp b/sakura_core/io/CTextStream.cpp index 9bbaf29282..94b64d1c20 100644 --- a/sakura_core/io/CTextStream.cpp +++ b/sakura_core/io/CTextStream.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CTextStream.h" #include "charset/CCodeFactory.h" diff --git a/sakura_core/io/CTextStream.h b/sakura_core/io/CTextStream.h index 3e93c3dc0f..f8997725c7 100644 --- a/sakura_core/io/CTextStream.h +++ b/sakura_core/io/CTextStream.h @@ -8,6 +8,7 @@ //将来はUTF-8等にすることにより、UNICODEデータの欠落が起こらないようにしたい。 /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/io/CZipFile.cpp b/sakura_core/io/CZipFile.cpp index aebc1a5123..9451927878 100644 --- a/sakura_core/io/CZipFile.cpp +++ b/sakura_core/io/CZipFile.cpp @@ -4,6 +4,7 @@ */ /* Copyright (C) 2011, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/io/CZipFile.h b/sakura_core/io/CZipFile.h index 2ddfa2f0d4..2f39a0f6c2 100644 --- a/sakura_core/io/CZipFile.h +++ b/sakura_core/io/CZipFile.h @@ -4,6 +4,7 @@ */ /* Copyright (C) 2011, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CCookieManager.cpp b/sakura_core/macro/CCookieManager.cpp index 3d514fb42e..1ef93b0a97 100644 --- a/sakura_core/macro/CCookieManager.cpp +++ b/sakura_core/macro/CCookieManager.cpp @@ -4,6 +4,7 @@ */ /* Copyright (C) 2012, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CCookieManager.h b/sakura_core/macro/CCookieManager.h index 83937f67ae..97aad900f8 100644 --- a/sakura_core/macro/CCookieManager.h +++ b/sakura_core/macro/CCookieManager.h @@ -4,6 +4,7 @@ */ /* Copyright (C) 2012, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CEditorIfObj.cpp b/sakura_core/macro/CEditorIfObj.cpp index 9a4c85f283..c05e64dd67 100644 --- a/sakura_core/macro/CEditorIfObj.cpp +++ b/sakura_core/macro/CEditorIfObj.cpp @@ -4,6 +4,7 @@ */ /* Copyright (C) 2009, syat + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CEditorIfObj.h b/sakura_core/macro/CEditorIfObj.h index d3ab5fa4da..d53df6965b 100644 --- a/sakura_core/macro/CEditorIfObj.h +++ b/sakura_core/macro/CEditorIfObj.h @@ -4,6 +4,7 @@ */ /* Copyright (C) 2009, syat + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CIfObj.cpp b/sakura_core/macro/CIfObj.cpp index f56bb4935c..2ac64afc04 100644 --- a/sakura_core/macro/CIfObj.cpp +++ b/sakura_core/macro/CIfObj.cpp @@ -12,6 +12,7 @@ Copyright (C) 2004, genta Copyright (C) 2005, FILE, zenryaku Copyright (C) 2009, syat + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CIfObj.h b/sakura_core/macro/CIfObj.h index ce55316ce6..08fb939083 100644 --- a/sakura_core/macro/CIfObj.h +++ b/sakura_core/macro/CIfObj.h @@ -7,6 +7,7 @@ /* Copyright (C) 2002, 鬼, genta Copyright (C) 2009, syat + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CKeyMacroMgr.cpp b/sakura_core/macro/CKeyMacroMgr.cpp index 0738a527ca..f52534018a 100644 --- a/sakura_core/macro/CKeyMacroMgr.cpp +++ b/sakura_core/macro/CKeyMacroMgr.cpp @@ -11,6 +11,7 @@ Copyright (C) 2001, aroka Copyright (C) 2002, YAZAKI, aroka, genta Copyright (C) 2004, genta + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/macro/CKeyMacroMgr.h b/sakura_core/macro/CKeyMacroMgr.h index b53405bb51..d48c7d7df8 100644 --- a/sakura_core/macro/CKeyMacroMgr.h +++ b/sakura_core/macro/CKeyMacroMgr.h @@ -7,6 +7,7 @@ Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2001, aroka Copyright (C) 2002, YAZAKI, genta + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/macro/CMacro.cpp b/sakura_core/macro/CMacro.cpp index 2a6c339496..e6db099ce5 100644 --- a/sakura_core/macro/CMacro.cpp +++ b/sakura_core/macro/CMacro.cpp @@ -16,6 +16,7 @@ Copyright (C) 2008, nasukoji, ryoji Copyright (C) 2009, ryoji, nasukoji Copyright (C) 2011, syat + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CMacro.h b/sakura_core/macro/CMacro.h index edc0ff12ec..558776663d 100644 --- a/sakura_core/macro/CMacro.h +++ b/sakura_core/macro/CMacro.h @@ -9,6 +9,7 @@ Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, YAZAKI Copyright (C) 2003, 鬼 + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CMacroFactory.cpp b/sakura_core/macro/CMacroFactory.cpp index 86598e8e40..59456d1558 100644 --- a/sakura_core/macro/CMacroFactory.cpp +++ b/sakura_core/macro/CMacroFactory.cpp @@ -7,6 +7,7 @@ /* Copyright (C) 2002, genta Copyright (C) 2004, genta + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CMacroFactory.h b/sakura_core/macro/CMacroFactory.h index 57b12512f9..8904cd8d40 100644 --- a/sakura_core/macro/CMacroFactory.h +++ b/sakura_core/macro/CMacroFactory.h @@ -7,6 +7,7 @@ /* Copyright (C) 2002, genta Copyright (C) 2004, genta + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CMacroManagerBase.cpp b/sakura_core/macro/CMacroManagerBase.cpp index e5c192d4e3..9ed4e27741 100644 --- a/sakura_core/macro/CMacroManagerBase.cpp +++ b/sakura_core/macro/CMacroManagerBase.cpp @@ -6,6 +6,7 @@ */ /* Copyright (C) 2002, genta + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CMacroManagerBase.h b/sakura_core/macro/CMacroManagerBase.h index 92850b510a..12f95f1731 100644 --- a/sakura_core/macro/CMacroManagerBase.h +++ b/sakura_core/macro/CMacroManagerBase.h @@ -6,6 +6,7 @@ */ /* Copyright (C) 2002, genta + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CPPA.cpp b/sakura_core/macro/CPPA.cpp index 63e4d4d6c6..7d5d31d3e7 100644 --- a/sakura_core/macro/CPPA.cpp +++ b/sakura_core/macro/CPPA.cpp @@ -10,6 +10,7 @@ Copyright (C) 2001, YAZAKI Copyright (C) 2002, YAZAKI, aroka, genta, Moca Copyright (C) 2003, Moca, genta + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CPPA.h b/sakura_core/macro/CPPA.h index abb47ec6c3..e4fe449c65 100644 --- a/sakura_core/macro/CPPA.h +++ b/sakura_core/macro/CPPA.h @@ -10,6 +10,7 @@ Copyright (C) 2001, YAZAKI, genta Copyright (C) 2002, YAZAKI, Moca Copyright (C) 2003, genta, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CPPAMacroMgr.cpp b/sakura_core/macro/CPPAMacroMgr.cpp index 7d7c1322c9..accc2f195d 100644 --- a/sakura_core/macro/CPPAMacroMgr.cpp +++ b/sakura_core/macro/CPPAMacroMgr.cpp @@ -7,6 +7,7 @@ /* Copyright (C) 2002, YAZAKI, genta Copyright (C) 2004, genta + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/macro/CPPAMacroMgr.h b/sakura_core/macro/CPPAMacroMgr.h index ea49232caa..d0eae1db57 100644 --- a/sakura_core/macro/CPPAMacroMgr.h +++ b/sakura_core/macro/CPPAMacroMgr.h @@ -8,6 +8,7 @@ Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2001, aroka Copyright (C) 2002, YAZAKI, genta + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/macro/CSMacroMgr.cpp b/sakura_core/macro/CSMacroMgr.cpp index 521b292645..2b40524580 100644 --- a/sakura_core/macro/CSMacroMgr.cpp +++ b/sakura_core/macro/CSMacroMgr.cpp @@ -18,6 +18,7 @@ Copyright (C) 2007, ryoji, maru Copyright (C) 2008, nasukoji, ryoji Copyright (C) 2011, nasukoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/macro/CSMacroMgr.h b/sakura_core/macro/CSMacroMgr.h index 1d8a559bc2..9c34c3dae0 100644 --- a/sakura_core/macro/CSMacroMgr.h +++ b/sakura_core/macro/CSMacroMgr.h @@ -9,6 +9,7 @@ Copyright (C) 2002, YAZAKI, genta Copyright (C) 2005, FILE Copyright (C) 2007, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CWSH.cpp b/sakura_core/macro/CWSH.cpp index 267a3a44a4..af2591f89b 100644 --- a/sakura_core/macro/CWSH.cpp +++ b/sakura_core/macro/CWSH.cpp @@ -10,6 +10,7 @@ Copyright (C) 2004, genta Copyright (C) 2005, FILE, zenryaku Copyright (C) 2009, syat + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CWSH.h b/sakura_core/macro/CWSH.h index 4925072b64..7a360f04b5 100644 --- a/sakura_core/macro/CWSH.h +++ b/sakura_core/macro/CWSH.h @@ -10,6 +10,7 @@ /* Copyright (C) 2002, 鬼, genta Copyright (C) 2009, syat + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/macro/CWSHIfObj.cpp b/sakura_core/macro/CWSHIfObj.cpp index a6382debf7..b4bfd63bc9 100644 --- a/sakura_core/macro/CWSHIfObj.cpp +++ b/sakura_core/macro/CWSHIfObj.cpp @@ -9,6 +9,7 @@ Copyright (C) 2004, genta Copyright (C) 2005, FILE, zenryaku Copyright (C) 2009, syat + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CWSHIfObj.h b/sakura_core/macro/CWSHIfObj.h index 32866971c6..829000e2a7 100644 --- a/sakura_core/macro/CWSHIfObj.h +++ b/sakura_core/macro/CWSHIfObj.h @@ -7,6 +7,7 @@ /* Copyright (C) 2002, 鬼, genta Copyright (C) 2009, syat + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CWSHManager.cpp b/sakura_core/macro/CWSHManager.cpp index ee5d7ee8f5..e972a4a5d5 100644 --- a/sakura_core/macro/CWSHManager.cpp +++ b/sakura_core/macro/CWSHManager.cpp @@ -9,6 +9,7 @@ Copyright (C) 2004, genta Copyright (C) 2005, FILE, zenryaku Copyright (C) 2009, syat + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CWSHManager.h b/sakura_core/macro/CWSHManager.h index 18d05c55e2..cf3791f4be 100644 --- a/sakura_core/macro/CWSHManager.h +++ b/sakura_core/macro/CWSHManager.h @@ -13,6 +13,7 @@ */ /* Copyright (C) 2002, 鬼, genta + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/mem/CMemory.cpp b/sakura_core/mem/CMemory.cpp index 9e23d590f1..b3464713c8 100644 --- a/sakura_core/mem/CMemory.cpp +++ b/sakura_core/mem/CMemory.cpp @@ -12,6 +12,7 @@ Copyright (C) 2003, genta, Moca, かろと Copyright (C) 2004, Moca Copyright (C) 2005, Moca, D.S.Koba + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/mem/CMemory.h b/sakura_core/mem/CMemory.h index af270e9bf4..2b911a935b 100644 --- a/sakura_core/mem/CMemory.h +++ b/sakura_core/mem/CMemory.h @@ -9,6 +9,7 @@ Copyright (C) 2001, jepro, Stonee Copyright (C) 2002, Moca, genta, aroka Copyright (C) 2005, D.S.Koba + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/mem/CMemoryIterator.h b/sakura_core/mem/CMemoryIterator.h index abb13fcf09..f689dfad93 100644 --- a/sakura_core/mem/CMemoryIterator.h +++ b/sakura_core/mem/CMemoryIterator.h @@ -8,6 +8,7 @@ Copyright (C) 2002, Yazaki Copyright (C) 2003, genta Copyright (C) 2005, D.S.Koba + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/mem/CNative.cpp b/sakura_core/mem/CNative.cpp index f707793d18..27c26d25a4 100644 --- a/sakura_core/mem/CNative.cpp +++ b/sakura_core/mem/CNative.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CNative.h" diff --git a/sakura_core/mem/CNative.h b/sakura_core/mem/CNative.h index 2ad9d404cf..ca8b5be4b6 100644 --- a/sakura_core/mem/CNative.h +++ b/sakura_core/mem/CNative.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/mem/CNativeA.cpp b/sakura_core/mem/CNativeA.cpp index 177f63d2fb..ee0fbf3fa6 100644 --- a/sakura_core/mem/CNativeA.cpp +++ b/sakura_core/mem/CNativeA.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CNativeA.h" diff --git a/sakura_core/mem/CNativeA.h b/sakura_core/mem/CNativeA.h index 1bc14a60c2..059388373b 100644 --- a/sakura_core/mem/CNativeA.h +++ b/sakura_core/mem/CNativeA.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/mem/CNativeW.cpp b/sakura_core/mem/CNativeW.cpp index d11a72d7d3..e2a2537ef5 100644 --- a/sakura_core/mem/CNativeW.cpp +++ b/sakura_core/mem/CNativeW.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include #include "charset/codechecker.h" diff --git a/sakura_core/mem/CNativeW.h b/sakura_core/mem/CNativeW.h index 9dacbfc96d..24ec26e217 100644 --- a/sakura_core/mem/CNativeW.h +++ b/sakura_core/mem/CNativeW.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/mem/CRecycledBuffer.cpp b/sakura_core/mem/CRecycledBuffer.cpp index 7e5ff9c428..eab9d94615 100644 --- a/sakura_core/mem/CRecycledBuffer.cpp +++ b/sakura_core/mem/CRecycledBuffer.cpp @@ -1,3 +1,26 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CRecycledBuffer.h" diff --git a/sakura_core/mem/CRecycledBuffer.h b/sakura_core/mem/CRecycledBuffer.h index 7fdcc0caff..e43d1495b3 100644 --- a/sakura_core/mem/CRecycledBuffer.h +++ b/sakura_core/mem/CRecycledBuffer.h @@ -5,6 +5,7 @@ //取得したメモリブロックはCRecycledBufferの管理下にあるため、解放してはいけない。 /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/mfclike/CMyWnd.cpp b/sakura_core/mfclike/CMyWnd.cpp index 76917462d4..38d975a710 100644 --- a/sakura_core/mfclike/CMyWnd.cpp +++ b/sakura_core/mfclike/CMyWnd.cpp @@ -1,3 +1,26 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CMyWnd.h" diff --git a/sakura_core/mfclike/CMyWnd.h b/sakura_core/mfclike/CMyWnd.h index c217f763a8..f8a89c02d2 100644 --- a/sakura_core/mfclike/CMyWnd.h +++ b/sakura_core/mfclike/CMyWnd.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/outline/CDlgFileTree.cpp b/sakura_core/outline/CDlgFileTree.cpp index 69a5f9f412..6d9f18439a 100644 --- a/sakura_core/outline/CDlgFileTree.cpp +++ b/sakura_core/outline/CDlgFileTree.cpp @@ -7,6 +7,7 @@ /* Copyright (C) 2010, Uchi Copyright (C) 2014, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/outline/CDlgFileTree.h b/sakura_core/outline/CDlgFileTree.h index 45f79f9498..0de50d16a3 100644 --- a/sakura_core/outline/CDlgFileTree.h +++ b/sakura_core/outline/CDlgFileTree.h @@ -6,6 +6,7 @@ */ /* Copyright (C) 2014, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/outline/CDlgFuncList.cpp b/sakura_core/outline/CDlgFuncList.cpp index e8043582c8..c9634bcb71 100644 --- a/sakura_core/outline/CDlgFuncList.cpp +++ b/sakura_core/outline/CDlgFuncList.cpp @@ -17,6 +17,7 @@ Copyright (C) 2006, genta, ryoji Copyright (C) 2007, ryoji Copyright (C) 2010, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/outline/CDlgFuncList.h b/sakura_core/outline/CDlgFuncList.h index 502982ede9..7a046080c3 100644 --- a/sakura_core/outline/CDlgFuncList.h +++ b/sakura_core/outline/CDlgFuncList.h @@ -13,6 +13,7 @@ Copyright (C) 2005, genta Copyright (C) 2006, aroka Copyright (C) 2007, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/outline/CFuncInfo.cpp b/sakura_core/outline/CFuncInfo.cpp index dc046ce7a9..602a38cd8d 100644 --- a/sakura_core/outline/CFuncInfo.cpp +++ b/sakura_core/outline/CFuncInfo.cpp @@ -6,6 +6,7 @@ */ /* Copyright (C) 1998-2001, Norio Nakatani + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/outline/CFuncInfo.h b/sakura_core/outline/CFuncInfo.h index cd7a7490bb..3c03b70b4b 100644 --- a/sakura_core/outline/CFuncInfo.h +++ b/sakura_core/outline/CFuncInfo.h @@ -8,6 +8,7 @@ Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, YAZAKI Copyright (C) 2003, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/outline/CFuncInfoArr.cpp b/sakura_core/outline/CFuncInfoArr.cpp index cb6b7850f1..3cb9b92f7c 100644 --- a/sakura_core/outline/CFuncInfoArr.cpp +++ b/sakura_core/outline/CFuncInfoArr.cpp @@ -7,6 +7,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, YAZAKI, aroka + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/outline/CFuncInfoArr.h b/sakura_core/outline/CFuncInfoArr.h index 4270b0f097..a20f11b7c9 100644 --- a/sakura_core/outline/CFuncInfoArr.h +++ b/sakura_core/outline/CFuncInfoArr.h @@ -7,6 +7,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, YAZAKI + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/parse/CWordParse.cpp b/sakura_core/parse/CWordParse.cpp index dd44363cbc..a576ed720e 100644 --- a/sakura_core/parse/CWordParse.cpp +++ b/sakura_core/parse/CWordParse.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CWordParse.h" #include "charset/charcode.h" diff --git a/sakura_core/parse/CWordParse.h b/sakura_core/parse/CWordParse.h index b05b4ced38..9bc1df5385 100644 --- a/sakura_core/parse/CWordParse.h +++ b/sakura_core/parse/CWordParse.h @@ -2,6 +2,7 @@ //2007.09.30 kobake CDocLineMgr から分離 /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/plugin/CComplementIfObj.h b/sakura_core/plugin/CComplementIfObj.h index 52e40018a4..6383445fcf 100644 --- a/sakura_core/plugin/CComplementIfObj.h +++ b/sakura_core/plugin/CComplementIfObj.h @@ -5,7 +5,8 @@ /* Copyright (C) 2009, syat Copyright (C) 2011, Moca - + Copyright (C) 2018-2021, Sakura Editor Organization + This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/sakura_core/plugin/CDllPlugin.cpp b/sakura_core/plugin/CDllPlugin.cpp index eb85a0c1f6..007f699c54 100644 --- a/sakura_core/plugin/CDllPlugin.cpp +++ b/sakura_core/plugin/CDllPlugin.cpp @@ -4,6 +4,7 @@ */ /* Copyright (C) 2009, syat + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/plugin/CDllPlugin.h b/sakura_core/plugin/CDllPlugin.h index cf9aedd02b..5039265f67 100644 --- a/sakura_core/plugin/CDllPlugin.h +++ b/sakura_core/plugin/CDllPlugin.h @@ -4,6 +4,7 @@ */ /* Copyright (C) 2009, syat + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/plugin/CJackManager.cpp b/sakura_core/plugin/CJackManager.cpp index 859d5a1381..76ec9983d8 100644 --- a/sakura_core/plugin/CJackManager.cpp +++ b/sakura_core/plugin/CJackManager.cpp @@ -4,6 +4,7 @@ */ /* Copyright (C) 2009, syat + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/plugin/CJackManager.h b/sakura_core/plugin/CJackManager.h index 94992db80d..3fcbeb7b8f 100644 --- a/sakura_core/plugin/CJackManager.h +++ b/sakura_core/plugin/CJackManager.h @@ -4,6 +4,7 @@ */ /* Copyright (C) 2009, syat + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/plugin/COutlineIfObj.h b/sakura_core/plugin/COutlineIfObj.h index 67e0e256ea..f9e5548f7b 100644 --- a/sakura_core/plugin/COutlineIfObj.h +++ b/sakura_core/plugin/COutlineIfObj.h @@ -4,6 +4,7 @@ */ /* Copyright (C) 2009, syat + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/plugin/CPlugin.cpp b/sakura_core/plugin/CPlugin.cpp index 3bd961f526..b47c91ab28 100644 --- a/sakura_core/plugin/CPlugin.cpp +++ b/sakura_core/plugin/CPlugin.cpp @@ -4,6 +4,7 @@ */ /* Copyright (C) 2009, syat + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/plugin/CPlugin.h b/sakura_core/plugin/CPlugin.h index b51dc21c1d..93e3817e4d 100644 --- a/sakura_core/plugin/CPlugin.h +++ b/sakura_core/plugin/CPlugin.h @@ -4,6 +4,7 @@ */ /* Copyright (C) 2009, syat + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/plugin/CPluginIfObj.h b/sakura_core/plugin/CPluginIfObj.h index 1b86e05d71..5f7efeb724 100644 --- a/sakura_core/plugin/CPluginIfObj.h +++ b/sakura_core/plugin/CPluginIfObj.h @@ -4,6 +4,7 @@ */ /* Copyright (C) 2009, syat + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/plugin/CPluginManager.cpp b/sakura_core/plugin/CPluginManager.cpp index 1f238ab2b0..5beeeeb728 100644 --- a/sakura_core/plugin/CPluginManager.cpp +++ b/sakura_core/plugin/CPluginManager.cpp @@ -4,6 +4,7 @@ */ /* Copyright (C) 2009, syat + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/plugin/CPluginManager.h b/sakura_core/plugin/CPluginManager.h index 1cc09096e4..6db93c937d 100644 --- a/sakura_core/plugin/CPluginManager.h +++ b/sakura_core/plugin/CPluginManager.h @@ -4,6 +4,7 @@ */ /* Copyright (C) 2009, syat + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/plugin/CSmartIndentIfObj.h b/sakura_core/plugin/CSmartIndentIfObj.h index e374327656..3861c40d1d 100644 --- a/sakura_core/plugin/CSmartIndentIfObj.h +++ b/sakura_core/plugin/CSmartIndentIfObj.h @@ -5,6 +5,7 @@ /* Copyright (C) 2009, syat Copyright (C) 2010, syat + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/plugin/CWSHPlugin.cpp b/sakura_core/plugin/CWSHPlugin.cpp index b3d6ea82ec..c275225047 100644 --- a/sakura_core/plugin/CWSHPlugin.cpp +++ b/sakura_core/plugin/CWSHPlugin.cpp @@ -4,6 +4,7 @@ */ /* Copyright (C) 2009, syat + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/plugin/CWSHPlugin.h b/sakura_core/plugin/CWSHPlugin.h index 46b6a0c7c2..5f105b199a 100644 --- a/sakura_core/plugin/CWSHPlugin.h +++ b/sakura_core/plugin/CWSHPlugin.h @@ -4,6 +4,7 @@ */ /* Copyright (C) 2009, syat + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/print/CPrint.cpp b/sakura_core/print/CPrint.cpp index a16965e1a6..a30d94c896 100644 --- a/sakura_core/print/CPrint.cpp +++ b/sakura_core/print/CPrint.cpp @@ -10,6 +10,7 @@ Copyright (C) 2001, hor Copyright (C) 2002, MIK Copyright (C) 2003, かろと + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/print/CPrint.h b/sakura_core/print/CPrint.h index 505a586699..a7e42cb31b 100644 --- a/sakura_core/print/CPrint.h +++ b/sakura_core/print/CPrint.h @@ -7,6 +7,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2003, かろと + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/print/CPrintPreview.cpp b/sakura_core/print/CPrintPreview.cpp index fde4cf577e..6416235adc 100644 --- a/sakura_core/print/CPrintPreview.cpp +++ b/sakura_core/print/CPrintPreview.cpp @@ -13,6 +13,7 @@ Copyright (C) 2008, nasukoji Copyright (C) 2012, ossan (ossan@ongs.net) Copyright (C) 2013, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/print/CPrintPreview.h b/sakura_core/print/CPrintPreview.h index e97e1fd191..81daff494e 100644 --- a/sakura_core/print/CPrintPreview.h +++ b/sakura_core/print/CPrintPreview.h @@ -7,6 +7,7 @@ /* Copyright (C) 2002, YAZAKI Copyright (C) 2003, かろと + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/prop/CPropComBackup.cpp b/sakura_core/prop/CPropComBackup.cpp index 2dc8d0b51c..b2a33d2d5d 100644 --- a/sakura_core/prop/CPropComBackup.cpp +++ b/sakura_core/prop/CPropComBackup.cpp @@ -14,6 +14,7 @@ Copyright (C) 2006, ryoji Copyright (C) 2009, ryoji Copyright (C) 2010, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/prop/CPropComCustmenu.cpp b/sakura_core/prop/CPropComCustmenu.cpp index 14e8c0ba05..0c2beb3798 100644 --- a/sakura_core/prop/CPropComCustmenu.cpp +++ b/sakura_core/prop/CPropComCustmenu.cpp @@ -11,6 +11,7 @@ Copyright (C) 2006, ryoji Copyright (C) 2007, ryoji Copyright (C) 2009, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/prop/CPropComEdit.cpp b/sakura_core/prop/CPropComEdit.cpp index 47a03f3d85..c70bea0df4 100644 --- a/sakura_core/prop/CPropComEdit.cpp +++ b/sakura_core/prop/CPropComEdit.cpp @@ -11,6 +11,7 @@ Copyright (C) 2003, KEITA Copyright (C) 2006, ryoji Copyright (C) 2007, genta, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/prop/CPropComFile.cpp b/sakura_core/prop/CPropComFile.cpp index 637f719f94..8a69259209 100644 --- a/sakura_core/prop/CPropComFile.cpp +++ b/sakura_core/prop/CPropComFile.cpp @@ -9,6 +9,7 @@ Copyright (C) 2002, YAZAKI, MIK, aroka, hor Copyright (C) 2004, genta, ryoji Copyright (C) 2006, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/prop/CPropComFileName.cpp b/sakura_core/prop/CPropComFileName.cpp index e074ac34ba..3bb53bef05 100644 --- a/sakura_core/prop/CPropComFileName.cpp +++ b/sakura_core/prop/CPropComFileName.cpp @@ -10,6 +10,7 @@ Copyright (C) 2003, Moca, KEITA Copyright (C) 2004, D.S.Koba Copyright (C) 2006, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/prop/CPropComFormat.cpp b/sakura_core/prop/CPropComFormat.cpp index c08d1665b1..b1764f6c0d 100644 --- a/sakura_core/prop/CPropComFormat.cpp +++ b/sakura_core/prop/CPropComFormat.cpp @@ -10,6 +10,7 @@ Copyright (C) 2002, YAZAKI, MIK, aroka Copyright (C) 2003, KEITA Copyright (C) 2006, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/prop/CPropComGeneral.cpp b/sakura_core/prop/CPropComGeneral.cpp index a36edbf39d..b77360611f 100644 --- a/sakura_core/prop/CPropComGeneral.cpp +++ b/sakura_core/prop/CPropComGeneral.cpp @@ -6,6 +6,7 @@ */ /* Copyright (C) 2010, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/prop/CPropComGrep.cpp b/sakura_core/prop/CPropComGrep.cpp index 6c6e40d47b..6296078107 100644 --- a/sakura_core/prop/CPropComGrep.cpp +++ b/sakura_core/prop/CPropComGrep.cpp @@ -9,6 +9,7 @@ Copyright (C) 2002, YAZAKI, MIK Copyright (C) 2003, KEITA Copyright (C) 2006, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/prop/CPropComHelper.cpp b/sakura_core/prop/CPropComHelper.cpp index 4bf410facd..9eed90c925 100644 --- a/sakura_core/prop/CPropComHelper.cpp +++ b/sakura_core/prop/CPropComHelper.cpp @@ -14,6 +14,7 @@ Copyright (C) 2009, ryoji Copyright (C) 2012, Moca Copyright (C) 2013, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/prop/CPropComKeybind.cpp b/sakura_core/prop/CPropComKeybind.cpp index 6d191fe8be..992889944d 100644 --- a/sakura_core/prop/CPropComKeybind.cpp +++ b/sakura_core/prop/CPropComKeybind.cpp @@ -11,6 +11,7 @@ Copyright (C) 2006, ryoji Copyright (C) 2007, ryoji Copyright (C) 2009, nasukoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/prop/CPropComKeyword.cpp b/sakura_core/prop/CPropComKeyword.cpp index d94a2a4803..37bdf4b8b3 100644 --- a/sakura_core/prop/CPropComKeyword.cpp +++ b/sakura_core/prop/CPropComKeyword.cpp @@ -13,6 +13,7 @@ Copyright (C) 2006, ryoji Copyright (C) 2007, ryoji Copyright (C) 2009, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/prop/CPropComMacro.cpp b/sakura_core/prop/CPropComMacro.cpp index d3c65cf675..ecb1828c49 100644 --- a/sakura_core/prop/CPropComMacro.cpp +++ b/sakura_core/prop/CPropComMacro.cpp @@ -11,6 +11,7 @@ Copyright (C) 2006, ryoji Copyright (C) 2007, ryoji Copyright (C) 2009, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/prop/CPropComMainMenu.cpp b/sakura_core/prop/CPropComMainMenu.cpp index 7ea884a981..19e04c8615 100644 --- a/sakura_core/prop/CPropComMainMenu.cpp +++ b/sakura_core/prop/CPropComMainMenu.cpp @@ -5,6 +5,7 @@ */ /* Copyright (C) 2010, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/prop/CPropComPlugin.cpp b/sakura_core/prop/CPropComPlugin.cpp index e7b4c8ce6e..1a5ad6b7db 100644 --- a/sakura_core/prop/CPropComPlugin.cpp +++ b/sakura_core/prop/CPropComPlugin.cpp @@ -5,6 +5,7 @@ */ /* Copyright (C) 2009, syat + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/prop/CPropComStatusbar.cpp b/sakura_core/prop/CPropComStatusbar.cpp index 8f45be5a2b..bf16e8e883 100644 --- a/sakura_core/prop/CPropComStatusbar.cpp +++ b/sakura_core/prop/CPropComStatusbar.cpp @@ -12,6 +12,7 @@ Copyright (C) 2006, ryoji Copyright (C) 2007, genta Copyright (C) 2007, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/prop/CPropComTab.cpp b/sakura_core/prop/CPropComTab.cpp index 2ff079b7e6..42967017db 100644 --- a/sakura_core/prop/CPropComTab.cpp +++ b/sakura_core/prop/CPropComTab.cpp @@ -14,6 +14,7 @@ Copyright (C) 2007, genta, ryoji Copyright (C) 2012, Moca Copyright (C) 2013, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/prop/CPropComToolbar.cpp b/sakura_core/prop/CPropComToolbar.cpp index cecaa00a97..66686cfa18 100644 --- a/sakura_core/prop/CPropComToolbar.cpp +++ b/sakura_core/prop/CPropComToolbar.cpp @@ -11,6 +11,7 @@ Copyright (C) 2005, aroka Copyright (C) 2006, ryoji Copyright (C) 2007, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/prop/CPropComWin.cpp b/sakura_core/prop/CPropComWin.cpp index 776aa9f425..e78483a9b0 100644 --- a/sakura_core/prop/CPropComWin.cpp +++ b/sakura_core/prop/CPropComWin.cpp @@ -12,6 +12,7 @@ Copyright (C) 2004, Moca Copyright (C) 2006, ryoji, fon Copyright (C) 2007, genta + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/prop/CPropCommon.cpp b/sakura_core/prop/CPropCommon.cpp index 49a08744aa..4e81f85ed1 100644 --- a/sakura_core/prop/CPropCommon.cpp +++ b/sakura_core/prop/CPropCommon.cpp @@ -15,6 +15,7 @@ Copyright (C) 2009, nasukoji Copyright (C) 2010, Uchi Copyright (C) 2013, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/prop/CPropCommon.h b/sakura_core/prop/CPropCommon.h index 02c0969287..c5c0ba5095 100644 --- a/sakura_core/prop/CPropCommon.h +++ b/sakura_core/prop/CPropCommon.h @@ -14,6 +14,7 @@ Copyright (C) 2007, genta, ryoji Copyright (C) 2010, Uchi Copyright (C) 2013, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CMRUFile.cpp b/sakura_core/recent/CMRUFile.cpp index 7e6cd9f4f9..d7c771798f 100644 --- a/sakura_core/recent/CMRUFile.cpp +++ b/sakura_core/recent/CMRUFile.cpp @@ -10,6 +10,7 @@ Copyright (C) 2002, YAZAKI, Moca, genta Copyright (C) 2003, MIK Copyright (C) 2006, genta + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/recent/CMRUFile.h b/sakura_core/recent/CMRUFile.h index 883b8d4209..72912c64f0 100644 --- a/sakura_core/recent/CMRUFile.h +++ b/sakura_core/recent/CMRUFile.h @@ -10,6 +10,7 @@ Copyright (C) 2002, YAZAKI, aroka Copyright (C) 2003, MIK Copyright (C) 2004, genta + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CMRUFolder.cpp b/sakura_core/recent/CMRUFolder.cpp index cb43aab2c8..0d1d4a9553 100644 --- a/sakura_core/recent/CMRUFolder.cpp +++ b/sakura_core/recent/CMRUFolder.cpp @@ -9,6 +9,7 @@ Copyright (C) 2001, YAZAKI Copyright (C) 2002, YAZAKI, Moca, genta Copyright (C) 2003, MIK + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/recent/CMRUFolder.h b/sakura_core/recent/CMRUFolder.h index 3dc3256b65..2ab57dd89f 100644 --- a/sakura_core/recent/CMRUFolder.h +++ b/sakura_core/recent/CMRUFolder.h @@ -9,6 +9,7 @@ Copyright (C) 2000, jepro Copyright (C) 2002, YAZAKI, aroka Copyright (C) 2003, MIK + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CMruListener.cpp b/sakura_core/recent/CMruListener.cpp index 04257e47f1..f518fa2927 100644 --- a/sakura_core/recent/CMruListener.cpp +++ b/sakura_core/recent/CMruListener.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CMruListener.h b/sakura_core/recent/CMruListener.h index c6b0669899..633e929735 100644 --- a/sakura_core/recent/CMruListener.h +++ b/sakura_core/recent/CMruListener.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecent.cpp b/sakura_core/recent/CRecent.cpp index 9e944b4fa2..3b667ca697 100644 --- a/sakura_core/recent/CRecent.cpp +++ b/sakura_core/recent/CRecent.cpp @@ -11,6 +11,7 @@ /* Copyright (C) 2003, MIK Copyright (C) 2005, MIK + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecent.h b/sakura_core/recent/CRecent.h index 1d24c18f85..c0ebc6a236 100644 --- a/sakura_core/recent/CRecent.h +++ b/sakura_core/recent/CRecent.h @@ -12,6 +12,7 @@ /* Copyright (C) 2003, MIK Copyright (C) 2005, MIK + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentCmd.cpp b/sakura_core/recent/CRecentCmd.cpp index a82e6c2151..504bc45edc 100644 --- a/sakura_core/recent/CRecentCmd.cpp +++ b/sakura_core/recent/CRecentCmd.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentCmd.h b/sakura_core/recent/CRecentCmd.h index 3cc7846477..d26e10e53f 100644 --- a/sakura_core/recent/CRecentCmd.h +++ b/sakura_core/recent/CRecentCmd.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentCurDir.cpp b/sakura_core/recent/CRecentCurDir.cpp index d75a603fc2..298b233c3b 100644 --- a/sakura_core/recent/CRecentCurDir.cpp +++ b/sakura_core/recent/CRecentCurDir.cpp @@ -2,6 +2,7 @@ /* Copyright (C) 2008, kobake Copyright (C) 2013, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentCurDir.h b/sakura_core/recent/CRecentCurDir.h index 384bb81c17..abd4a9b577 100644 --- a/sakura_core/recent/CRecentCurDir.h +++ b/sakura_core/recent/CRecentCurDir.h @@ -2,6 +2,7 @@ /* Copyright (C) 2008, kobake Copyright (C) 2013, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentEditNode.cpp b/sakura_core/recent/CRecentEditNode.cpp index f5eb3a4d16..77cf93d163 100644 --- a/sakura_core/recent/CRecentEditNode.cpp +++ b/sakura_core/recent/CRecentEditNode.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentEditNode.h b/sakura_core/recent/CRecentEditNode.h index aeec30a705..8d40512131 100644 --- a/sakura_core/recent/CRecentEditNode.h +++ b/sakura_core/recent/CRecentEditNode.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentExceptMru.cpp b/sakura_core/recent/CRecentExceptMru.cpp index 227c494612..763111b1f6 100644 --- a/sakura_core/recent/CRecentExceptMru.cpp +++ b/sakura_core/recent/CRecentExceptMru.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentExceptMru.h b/sakura_core/recent/CRecentExceptMru.h index 185a18588a..28999bb656 100644 --- a/sakura_core/recent/CRecentExceptMru.h +++ b/sakura_core/recent/CRecentExceptMru.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentFile.cpp b/sakura_core/recent/CRecentFile.cpp index ec835cb05d..0403912403 100644 --- a/sakura_core/recent/CRecentFile.cpp +++ b/sakura_core/recent/CRecentFile.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentFile.h b/sakura_core/recent/CRecentFile.h index 17efc6dca1..49aa5c141f 100644 --- a/sakura_core/recent/CRecentFile.h +++ b/sakura_core/recent/CRecentFile.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentFolder.cpp b/sakura_core/recent/CRecentFolder.cpp index 16889f8cd0..78c6942360 100644 --- a/sakura_core/recent/CRecentFolder.cpp +++ b/sakura_core/recent/CRecentFolder.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentFolder.h b/sakura_core/recent/CRecentFolder.h index c9e9d30c6b..13b12bd998 100644 --- a/sakura_core/recent/CRecentFolder.h +++ b/sakura_core/recent/CRecentFolder.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentGrepFile.cpp b/sakura_core/recent/CRecentGrepFile.cpp index 3d7ab4cc8a..b52447559a 100644 --- a/sakura_core/recent/CRecentGrepFile.cpp +++ b/sakura_core/recent/CRecentGrepFile.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentGrepFile.h b/sakura_core/recent/CRecentGrepFile.h index d71dc406f1..690a82445c 100644 --- a/sakura_core/recent/CRecentGrepFile.h +++ b/sakura_core/recent/CRecentGrepFile.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentGrepFolder.cpp b/sakura_core/recent/CRecentGrepFolder.cpp index f147cd58ed..3ca6fdc157 100644 --- a/sakura_core/recent/CRecentGrepFolder.cpp +++ b/sakura_core/recent/CRecentGrepFolder.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentGrepFolder.h b/sakura_core/recent/CRecentGrepFolder.h index 7bd6f0e4a7..87be3cc2c6 100644 --- a/sakura_core/recent/CRecentGrepFolder.h +++ b/sakura_core/recent/CRecentGrepFolder.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentImp.cpp b/sakura_core/recent/CRecentImp.cpp index 4b2eec0cbb..f922b051c5 100644 --- a/sakura_core/recent/CRecentImp.cpp +++ b/sakura_core/recent/CRecentImp.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentImp.h b/sakura_core/recent/CRecentImp.h index 5481c05434..bce804f1bc 100644 --- a/sakura_core/recent/CRecentImp.h +++ b/sakura_core/recent/CRecentImp.h @@ -4,6 +4,7 @@ // エディタ系ファイルからincludeするときは CRecent.h をinclude /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentReplace.cpp b/sakura_core/recent/CRecentReplace.cpp index 75ff512f9e..8c682704f2 100644 --- a/sakura_core/recent/CRecentReplace.cpp +++ b/sakura_core/recent/CRecentReplace.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentReplace.h b/sakura_core/recent/CRecentReplace.h index 678fed3c50..6b2377d6aa 100644 --- a/sakura_core/recent/CRecentReplace.h +++ b/sakura_core/recent/CRecentReplace.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentSearch.cpp b/sakura_core/recent/CRecentSearch.cpp index ac465c3b72..4036ec03ec 100644 --- a/sakura_core/recent/CRecentSearch.cpp +++ b/sakura_core/recent/CRecentSearch.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentSearch.h b/sakura_core/recent/CRecentSearch.h index 07257e5693..6ca3817565 100644 --- a/sakura_core/recent/CRecentSearch.h +++ b/sakura_core/recent/CRecentSearch.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentTagjumpKeyword.cpp b/sakura_core/recent/CRecentTagjumpKeyword.cpp index 2a5aa42add..506113ad06 100644 --- a/sakura_core/recent/CRecentTagjumpKeyword.cpp +++ b/sakura_core/recent/CRecentTagjumpKeyword.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentTagjumpKeyword.h b/sakura_core/recent/CRecentTagjumpKeyword.h index fa3e502547..7f1f3da90f 100644 --- a/sakura_core/recent/CRecentTagjumpKeyword.h +++ b/sakura_core/recent/CRecentTagjumpKeyword.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/SShare_History.h b/sakura_core/recent/SShare_History.h index ed8f6b25ad..a4ade260d8 100644 --- a/sakura_core/recent/SShare_History.h +++ b/sakura_core/recent/SShare_History.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/typeprop/CDlgKeywordSelect.cpp b/sakura_core/typeprop/CDlgKeywordSelect.cpp index e7c37f31b4..e09cc32b26 100644 --- a/sakura_core/typeprop/CDlgKeywordSelect.cpp +++ b/sakura_core/typeprop/CDlgKeywordSelect.cpp @@ -7,6 +7,7 @@ /* Copyright (C) 2005, MIK Copyright (C) 2006, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/typeprop/CDlgKeywordSelect.h b/sakura_core/typeprop/CDlgKeywordSelect.h index cac749b32e..1a361e15d8 100644 --- a/sakura_core/typeprop/CDlgKeywordSelect.h +++ b/sakura_core/typeprop/CDlgKeywordSelect.h @@ -6,6 +6,7 @@ */ /* Copyright (C) 2005, MIK, genta + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/typeprop/CDlgSameColor.cpp b/sakura_core/typeprop/CDlgSameColor.cpp index eb74b89dd0..749922ea8d 100644 --- a/sakura_core/typeprop/CDlgSameColor.cpp +++ b/sakura_core/typeprop/CDlgSameColor.cpp @@ -6,6 +6,7 @@ */ /* Copyright (C) 2006, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/typeprop/CDlgSameColor.h b/sakura_core/typeprop/CDlgSameColor.h index 000607ef1c..5e1f526b95 100644 --- a/sakura_core/typeprop/CDlgSameColor.h +++ b/sakura_core/typeprop/CDlgSameColor.h @@ -6,6 +6,7 @@ */ /* Copyright (C) 2006, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/typeprop/CDlgTypeAscertain.cpp b/sakura_core/typeprop/CDlgTypeAscertain.cpp index 501919e62f..dbbbf7dbb9 100644 --- a/sakura_core/typeprop/CDlgTypeAscertain.cpp +++ b/sakura_core/typeprop/CDlgTypeAscertain.cpp @@ -6,6 +6,7 @@ */ /* Copyright (C) 2010, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/typeprop/CDlgTypeAscertain.h b/sakura_core/typeprop/CDlgTypeAscertain.h index 4af97f595b..6aa5abbe1b 100644 --- a/sakura_core/typeprop/CDlgTypeAscertain.h +++ b/sakura_core/typeprop/CDlgTypeAscertain.h @@ -6,6 +6,7 @@ */ /* Copyright (C) 2010, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/typeprop/CDlgTypeList.cpp b/sakura_core/typeprop/CDlgTypeList.cpp index eccda6de74..7025b7a16b 100644 --- a/sakura_core/typeprop/CDlgTypeList.cpp +++ b/sakura_core/typeprop/CDlgTypeList.cpp @@ -10,6 +10,7 @@ Copyright (C) 2002, MIK Copyright (C) 2006, ryoji Copyright (C) 2010, Uchi, Beta.Ito, syat + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/typeprop/CDlgTypeList.h b/sakura_core/typeprop/CDlgTypeList.h index 231ce22bfb..bc2b61032c 100644 --- a/sakura_core/typeprop/CDlgTypeList.h +++ b/sakura_core/typeprop/CDlgTypeList.h @@ -7,6 +7,7 @@ */ /* Copyright (C) 1998-2001, Norio Nakatani + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/typeprop/CImpExpManager.cpp b/sakura_core/typeprop/CImpExpManager.cpp index f3481790da..174ef051aa 100644 --- a/sakura_core/typeprop/CImpExpManager.cpp +++ b/sakura_core/typeprop/CImpExpManager.cpp @@ -6,6 +6,7 @@ */ /* Copyright (C) 2010, Uchi, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/typeprop/CImpExpManager.h b/sakura_core/typeprop/CImpExpManager.h index 83e12d3dac..4bd3e943b3 100644 --- a/sakura_core/typeprop/CImpExpManager.h +++ b/sakura_core/typeprop/CImpExpManager.h @@ -6,6 +6,7 @@ */ /* Copyright (C) 2010, Uchi, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/typeprop/CPropTypes.cpp b/sakura_core/typeprop/CPropTypes.cpp index 8aa419645f..839ac997c5 100644 --- a/sakura_core/typeprop/CPropTypes.cpp +++ b/sakura_core/typeprop/CPropTypes.cpp @@ -16,6 +16,7 @@ Copyright (C) 2008, nasukoji Copyright (C) 2009, ryoji, genta Copyright (C) 2010, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/typeprop/CPropTypes.h b/sakura_core/typeprop/CPropTypes.h index 49128d0bb6..b722f22503 100644 --- a/sakura_core/typeprop/CPropTypes.h +++ b/sakura_core/typeprop/CPropTypes.h @@ -13,6 +13,7 @@ Copyright (C) 2005, MIK, aroka, genta Copyright (C) 2006, fon Copyright (C) 2010, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/typeprop/CPropTypesColor.cpp b/sakura_core/typeprop/CPropTypesColor.cpp index 6ebdcdccce..4d77137caf 100644 --- a/sakura_core/typeprop/CPropTypesColor.cpp +++ b/sakura_core/typeprop/CPropTypesColor.cpp @@ -15,6 +15,7 @@ Copyright (C) 2007, ryoji, genta Copyright (C) 2008, nasukoji Copyright (C) 2009, ryoji, genta + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/typeprop/CPropTypesKeyHelp.cpp b/sakura_core/typeprop/CPropTypesKeyHelp.cpp index cea4b6350e..0254b4dc87 100644 --- a/sakura_core/typeprop/CPropTypesKeyHelp.cpp +++ b/sakura_core/typeprop/CPropTypesKeyHelp.cpp @@ -7,6 +7,7 @@ /* Copyright (C) 2006, fon, ryoji Copyright (C) 2007, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/typeprop/CPropTypesRegex.cpp b/sakura_core/typeprop/CPropTypesRegex.cpp index 66dccfb7e3..24d74d2d20 100644 --- a/sakura_core/typeprop/CPropTypesRegex.cpp +++ b/sakura_core/typeprop/CPropTypesRegex.cpp @@ -9,6 +9,7 @@ Copyright (C) 2002, MIK Copyright (C) 2003, MIK, KEITA Copyright (C) 2006, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/typeprop/CPropTypesScreen.cpp b/sakura_core/typeprop/CPropTypesScreen.cpp index 673b9ed2ed..5a70e475be 100644 --- a/sakura_core/typeprop/CPropTypesScreen.cpp +++ b/sakura_core/typeprop/CPropTypesScreen.cpp @@ -14,6 +14,7 @@ Copyright (C) 2007, ryoji, genta Copyright (C) 2008, nasukoji Copyright (C) 2009, ryoji, genta + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/typeprop/CPropTypesSupport.cpp b/sakura_core/typeprop/CPropTypesSupport.cpp index 11088c587e..0e0159b3a0 100644 --- a/sakura_core/typeprop/CPropTypesSupport.cpp +++ b/sakura_core/typeprop/CPropTypesSupport.cpp @@ -14,6 +14,7 @@ Copyright (C) 2007, ryoji, genta Copyright (C) 2008, nasukoji Copyright (C) 2009, ryoji, genta + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/typeprop/CPropTypesWindow.cpp b/sakura_core/typeprop/CPropTypesWindow.cpp index 151972a1bb..aa99b0681e 100644 --- a/sakura_core/typeprop/CPropTypesWindow.cpp +++ b/sakura_core/typeprop/CPropTypesWindow.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ /* タイプ別設定 - ウィンドウ diff --git a/sakura_core/types/CType.cpp b/sakura_core/types/CType.cpp index af291d0675..094b128820 100644 --- a/sakura_core/types/CType.cpp +++ b/sakura_core/types/CType.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType.h b/sakura_core/types/CType.h index acfa1e4e06..05368a8495 100644 --- a/sakura_core/types/CType.h +++ b/sakura_core/types/CType.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CTypeSupport.cpp b/sakura_core/types/CTypeSupport.cpp index d415db3c7e..fa3b44b5c0 100644 --- a/sakura_core/types/CTypeSupport.cpp +++ b/sakura_core/types/CTypeSupport.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CTypeSupport.h b/sakura_core/types/CTypeSupport.h index c03e883154..0d871bee39 100644 --- a/sakura_core/types/CTypeSupport.h +++ b/sakura_core/types/CTypeSupport.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Asm.cpp b/sakura_core/types/CType_Asm.cpp index 463e3011b1..4a27431b05 100644 --- a/sakura_core/types/CType_Asm.cpp +++ b/sakura_core/types/CType_Asm.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Awk.cpp b/sakura_core/types/CType_Awk.cpp index e9c253fb6f..918dcb9876 100644 --- a/sakura_core/types/CType_Awk.cpp +++ b/sakura_core/types/CType_Awk.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Basis.cpp b/sakura_core/types/CType_Basis.cpp index ad9774a5c2..f1cc2e27b9 100644 --- a/sakura_core/types/CType_Basis.cpp +++ b/sakura_core/types/CType_Basis.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Cobol.cpp b/sakura_core/types/CType_Cobol.cpp index 9a25166fad..a53de18170 100644 --- a/sakura_core/types/CType_Cobol.cpp +++ b/sakura_core/types/CType_Cobol.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_CorbaIdl.cpp b/sakura_core/types/CType_CorbaIdl.cpp index c812e7abcd..c23d172ad3 100644 --- a/sakura_core/types/CType_CorbaIdl.cpp +++ b/sakura_core/types/CType_CorbaIdl.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Cpp.cpp b/sakura_core/types/CType_Cpp.cpp index 6e248eedb7..f55d652e18 100644 --- a/sakura_core/types/CType_Cpp.cpp +++ b/sakura_core/types/CType_Cpp.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Dos.cpp b/sakura_core/types/CType_Dos.cpp index 9ea5b94297..1dc4f36a03 100644 --- a/sakura_core/types/CType_Dos.cpp +++ b/sakura_core/types/CType_Dos.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Erlang.cpp b/sakura_core/types/CType_Erlang.cpp index 9d1cd0b8fa..f0fc2acab1 100644 --- a/sakura_core/types/CType_Erlang.cpp +++ b/sakura_core/types/CType_Erlang.cpp @@ -7,6 +7,7 @@ */ /* Copyright (C) 2009, genta + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Html.cpp b/sakura_core/types/CType_Html.cpp index 18293efb41..03b9989583 100644 --- a/sakura_core/types/CType_Html.cpp +++ b/sakura_core/types/CType_Html.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Ini.cpp b/sakura_core/types/CType_Ini.cpp index 02bc8fec4a..528de4bcd7 100644 --- a/sakura_core/types/CType_Ini.cpp +++ b/sakura_core/types/CType_Ini.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Java.cpp b/sakura_core/types/CType_Java.cpp index 907501ab1b..9894d9b282 100644 --- a/sakura_core/types/CType_Java.cpp +++ b/sakura_core/types/CType_Java.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Others.cpp b/sakura_core/types/CType_Others.cpp index 2ed294db0e..4344345add 100644 --- a/sakura_core/types/CType_Others.cpp +++ b/sakura_core/types/CType_Others.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Pascal.cpp b/sakura_core/types/CType_Pascal.cpp index 788d5bce19..d4b4089274 100644 --- a/sakura_core/types/CType_Pascal.cpp +++ b/sakura_core/types/CType_Pascal.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Perl.cpp b/sakura_core/types/CType_Perl.cpp index 2331ff4259..b377bd31fc 100644 --- a/sakura_core/types/CType_Perl.cpp +++ b/sakura_core/types/CType_Perl.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Python.cpp b/sakura_core/types/CType_Python.cpp index e9a21009de..95acd59f66 100644 --- a/sakura_core/types/CType_Python.cpp +++ b/sakura_core/types/CType_Python.cpp @@ -6,6 +6,7 @@ */ /* Copyright (C) 2007, genta + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Rich.cpp b/sakura_core/types/CType_Rich.cpp index c3de75fc78..f517da0324 100644 --- a/sakura_core/types/CType_Rich.cpp +++ b/sakura_core/types/CType_Rich.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Sql.cpp b/sakura_core/types/CType_Sql.cpp index f26aed6808..872b3a673e 100644 --- a/sakura_core/types/CType_Sql.cpp +++ b/sakura_core/types/CType_Sql.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Tex.cpp b/sakura_core/types/CType_Tex.cpp index b5998824b6..90976f070b 100644 --- a/sakura_core/types/CType_Tex.cpp +++ b/sakura_core/types/CType_Tex.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Text.cpp b/sakura_core/types/CType_Text.cpp index ed0c32bb7d..bb65ee3c52 100644 --- a/sakura_core/types/CType_Text.cpp +++ b/sakura_core/types/CType_Text.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Vb.cpp b/sakura_core/types/CType_Vb.cpp index 32c6b75bcf..b1c16dba83 100644 --- a/sakura_core/types/CType_Vb.cpp +++ b/sakura_core/types/CType_Vb.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/uiparts/CGraphics.cpp b/sakura_core/uiparts/CGraphics.cpp index b548bf50b7..795dd0e644 100644 --- a/sakura_core/uiparts/CGraphics.cpp +++ b/sakura_core/uiparts/CGraphics.cpp @@ -1,4 +1,28 @@ /*! @file */ +/* + Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ /* 2008.05.20 kobake 作成 */ diff --git a/sakura_core/uiparts/CGraphics.h b/sakura_core/uiparts/CGraphics.h index 0a31a791e3..a1aacda1f7 100644 --- a/sakura_core/uiparts/CGraphics.h +++ b/sakura_core/uiparts/CGraphics.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/uiparts/CImageListMgr.cpp b/sakura_core/uiparts/CImageListMgr.cpp index 642c343987..8eca6f7727 100644 --- a/sakura_core/uiparts/CImageListMgr.cpp +++ b/sakura_core/uiparts/CImageListMgr.cpp @@ -11,6 +11,7 @@ Copyright (C) 2003, Moca, genta, wmlhq Copyright (C) 2007, ryoji Copyright (C) 2010, syat + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/uiparts/CImageListMgr.h b/sakura_core/uiparts/CImageListMgr.h index 21b15e9725..848f95c0e5 100644 --- a/sakura_core/uiparts/CImageListMgr.h +++ b/sakura_core/uiparts/CImageListMgr.h @@ -7,6 +7,7 @@ /* Copyright (C) 2000-2003, genta Copyright (C) 2003, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/uiparts/CMenuDrawer.cpp b/sakura_core/uiparts/CMenuDrawer.cpp index ac95d6e9aa..b17559a623 100644 --- a/sakura_core/uiparts/CMenuDrawer.cpp +++ b/sakura_core/uiparts/CMenuDrawer.cpp @@ -14,6 +14,7 @@ Copyright (C) 2006, aroka, fon Copyright (C) 2007, ryoji Copyright (C) 2008, nasukoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/uiparts/CMenuDrawer.h b/sakura_core/uiparts/CMenuDrawer.h index 79cfc56410..879c4780d5 100644 --- a/sakura_core/uiparts/CMenuDrawer.h +++ b/sakura_core/uiparts/CMenuDrawer.h @@ -10,6 +10,7 @@ Copyright (C) 2003, MIK Copyright (C) 2005, aroka, genta Copyright (C) 2007, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/uiparts/CSoundSet.cpp b/sakura_core/uiparts/CSoundSet.cpp index 357237dcfe..d379c4382e 100644 --- a/sakura_core/uiparts/CSoundSet.cpp +++ b/sakura_core/uiparts/CSoundSet.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CSoundSet.h" diff --git a/sakura_core/uiparts/CSoundSet.h b/sakura_core/uiparts/CSoundSet.h index 266e642aa8..490f1426a5 100644 --- a/sakura_core/uiparts/CSoundSet.h +++ b/sakura_core/uiparts/CSoundSet.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/uiparts/CVisualProgress.cpp b/sakura_core/uiparts/CVisualProgress.cpp index 1cbeeb40a8..8ab635c12d 100644 --- a/sakura_core/uiparts/CVisualProgress.cpp +++ b/sakura_core/uiparts/CVisualProgress.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CVisualProgress.h" #include "CWaitCursor.h" diff --git a/sakura_core/uiparts/CVisualProgress.h b/sakura_core/uiparts/CVisualProgress.h index 4f0e43895b..0b205f1881 100644 --- a/sakura_core/uiparts/CVisualProgress.h +++ b/sakura_core/uiparts/CVisualProgress.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/uiparts/CWaitCursor.cpp b/sakura_core/uiparts/CWaitCursor.cpp index 9591836c9d..9a433c4be2 100644 --- a/sakura_core/uiparts/CWaitCursor.cpp +++ b/sakura_core/uiparts/CWaitCursor.cpp @@ -5,6 +5,7 @@ */ /* Copyright (C) 1998-2001, Norio Nakatani + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/uiparts/CWaitCursor.h b/sakura_core/uiparts/CWaitCursor.h index 2a74095345..9b517cd81c 100644 --- a/sakura_core/uiparts/CWaitCursor.h +++ b/sakura_core/uiparts/CWaitCursor.h @@ -6,6 +6,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, aroka + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/uiparts/HandCursor.h b/sakura_core/uiparts/HandCursor.h index f70a73aff6..872b2e995f 100644 --- a/sakura_core/uiparts/HandCursor.h +++ b/sakura_core/uiparts/HandCursor.h @@ -6,6 +6,7 @@ */ /* Copyright (C) 2013, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/MessageBoxF.cpp b/sakura_core/util/MessageBoxF.cpp index 2c177b0842..714ec34b05 100644 --- a/sakura_core/util/MessageBoxF.cpp +++ b/sakura_core/util/MessageBoxF.cpp @@ -9,6 +9,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, aroka + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/MessageBoxF.h b/sakura_core/util/MessageBoxF.h index 9422f98ad8..2ff4c36715 100644 --- a/sakura_core/util/MessageBoxF.h +++ b/sakura_core/util/MessageBoxF.h @@ -7,6 +7,7 @@ */ /* Copyright (C) 1998-2001, Norio Nakatani + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/RegKey.h b/sakura_core/util/RegKey.h index 98b4ae0909..007bbafd59 100644 --- a/sakura_core/util/RegKey.h +++ b/sakura_core/util/RegKey.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/StaticType.h b/sakura_core/util/StaticType.h index 7e4b73d8a1..5db5438824 100644 --- a/sakura_core/util/StaticType.h +++ b/sakura_core/util/StaticType.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/container.h b/sakura_core/util/container.h index ee341bbc5b..07d3563acf 100644 --- a/sakura_core/util/container.h +++ b/sakura_core/util/container.h @@ -6,6 +6,7 @@ */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/design_template.h b/sakura_core/util/design_template.h index 06a0243a03..e7a138fc00 100644 --- a/sakura_core/util/design_template.h +++ b/sakura_core/util/design_template.h @@ -7,6 +7,7 @@ */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/file.cpp b/sakura_core/util/file.cpp index c151cb3968..11ba12f682 100644 --- a/sakura_core/util/file.cpp +++ b/sakura_core/util/file.cpp @@ -2,6 +2,7 @@ Copyright (C) 2002, SUI Copyright (C) 2003, MIK Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/file.h b/sakura_core/util/file.h index ad0ffadee9..1b6dbd1ee8 100644 --- a/sakura_core/util/file.h +++ b/sakura_core/util/file.h @@ -2,6 +2,7 @@ /* Copyright (C) 2002, SUI Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/format.cpp b/sakura_core/util/format.cpp index 99786ed25a..911e31fe0e 100644 --- a/sakura_core/util/format.cpp +++ b/sakura_core/util/format.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2007, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/format.h b/sakura_core/util/format.h index c1f10ab08a..caf70c1af7 100644 --- a/sakura_core/util/format.h +++ b/sakura_core/util/format.h @@ -2,6 +2,7 @@ // 2007.10.20 kobake 書式関連 /* Copyright (C) 2007, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/input.cpp b/sakura_core/util/input.cpp index 2272e3c9a2..be7af62089 100644 --- a/sakura_core/util/input.cpp +++ b/sakura_core/util/input.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "input.h" diff --git a/sakura_core/util/input.h b/sakura_core/util/input.h index 6a15f93e3b..20d25ed6c6 100644 --- a/sakura_core/util/input.h +++ b/sakura_core/util/input.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/module.cpp b/sakura_core/util/module.cpp index a18ee5157c..7adf7b8b8a 100644 --- a/sakura_core/util/module.cpp +++ b/sakura_core/util/module.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/module.h b/sakura_core/util/module.h index 415d3e03dd..3bba339071 100644 --- a/sakura_core/util/module.h +++ b/sakura_core/util/module.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/ole_convert.cpp b/sakura_core/util/ole_convert.cpp index 059f7d3689..56fde7cabb 100644 --- a/sakura_core/util/ole_convert.cpp +++ b/sakura_core/util/ole_convert.cpp @@ -2,6 +2,29 @@ @brief OLE型(VARIANT, BSTRなど)の変換関数 */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "ole_convert.h" diff --git a/sakura_core/util/ole_convert.h b/sakura_core/util/ole_convert.h index ef0011157d..6235ade18b 100644 --- a/sakura_core/util/ole_convert.h +++ b/sakura_core/util/ole_convert.h @@ -2,6 +2,29 @@ @brief OLE型(VARIANT, BSTRなど)の変換関数 */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #ifndef SAKURA_OLE_CONVERT_4D549FAC_BEAA_4E5F_ACC1_9EEEA9B8DC6F_H_ #define SAKURA_OLE_CONVERT_4D549FAC_BEAA_4E5F_ACC1_9EEEA9B8DC6F_H_ #pragma once diff --git a/sakura_core/util/os.cpp b/sakura_core/util/os.cpp index 829e15db8a..77ac77c5b9 100644 --- a/sakura_core/util/os.cpp +++ b/sakura_core/util/os.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "os.h" #include "util/module.h" diff --git a/sakura_core/util/os.h b/sakura_core/util/os.h index 39c4a3abe4..7c97046d01 100644 --- a/sakura_core/util/os.h +++ b/sakura_core/util/os.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/relation_tool.cpp b/sakura_core/util/relation_tool.cpp index 52376d5e44..e7c38f6554 100644 --- a/sakura_core/util/relation_tool.cpp +++ b/sakura_core/util/relation_tool.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "relation_tool.h" diff --git a/sakura_core/util/relation_tool.h b/sakura_core/util/relation_tool.h index 29672f127a..ef7df70dcd 100644 --- a/sakura_core/util/relation_tool.h +++ b/sakura_core/util/relation_tool.h @@ -4,6 +4,7 @@ */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/shell.cpp b/sakura_core/util/shell.cpp index 6435f8b832..e6f1468148 100644 --- a/sakura_core/util/shell.cpp +++ b/sakura_core/util/shell.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/shell.h b/sakura_core/util/shell.h index 58e7da9959..1a496e6b59 100644 --- a/sakura_core/util/shell.h +++ b/sakura_core/util/shell.h @@ -3,6 +3,7 @@ // なんかシェルっぽい機能の関数群 /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/std_macro.h b/sakura_core/util/std_macro.h index 2eba9dd409..bcd6856b25 100644 --- a/sakura_core/util/std_macro.h +++ b/sakura_core/util/std_macro.h @@ -2,6 +2,7 @@ //2007.10.18 kobake 作成 /* Copyright (C) 2007, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/string_ex.cpp b/sakura_core/util/string_ex.cpp index 58362528e8..2b2ab2bdb1 100644 --- a/sakura_core/util/string_ex.cpp +++ b/sakura_core/util/string_ex.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "string_ex.h" diff --git a/sakura_core/util/string_ex.h b/sakura_core/util/string_ex.h index 99c1fdf42b..20968643e5 100644 --- a/sakura_core/util/string_ex.h +++ b/sakura_core/util/string_ex.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/string_ex2.cpp b/sakura_core/util/string_ex2.cpp index a572c82004..152709c90b 100644 --- a/sakura_core/util/string_ex2.cpp +++ b/sakura_core/util/string_ex2.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "string_ex2.h" #include "charset/charcode.h" diff --git a/sakura_core/util/string_ex2.h b/sakura_core/util/string_ex2.h index 6338cbf836..15bc7df225 100644 --- a/sakura_core/util/string_ex2.h +++ b/sakura_core/util/string_ex2.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/tchar_convert.cpp b/sakura_core/util/tchar_convert.cpp index b8070fac7a..7784b703f7 100644 --- a/sakura_core/util/tchar_convert.cpp +++ b/sakura_core/util/tchar_convert.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "util/tchar_convert.h" #include "mem/CRecycledBuffer.h" diff --git a/sakura_core/util/tchar_convert.h b/sakura_core/util/tchar_convert.h index 55c313f218..e97fd3af26 100644 --- a/sakura_core/util/tchar_convert.h +++ b/sakura_core/util/tchar_convert.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/tchar_template.cpp b/sakura_core/util/tchar_template.cpp index 32f9e8ee8b..ea5bd3ded8 100644 --- a/sakura_core/util/tchar_template.cpp +++ b/sakura_core/util/tchar_template.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "tchar_template.h" diff --git a/sakura_core/util/tchar_template.h b/sakura_core/util/tchar_template.h index 3eb5c8e24c..fc158f1b40 100644 --- a/sakura_core/util/tchar_template.h +++ b/sakura_core/util/tchar_template.h @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ /* _Tマクロ互換のテンプレート。 ビルド種に関わらず、指定した型の文字定数を提供する。 diff --git a/sakura_core/util/window.cpp b/sakura_core/util/window.cpp index 5042ad7865..8228eefacd 100644 --- a/sakura_core/util/window.cpp +++ b/sakura_core/util/window.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "env/CShareData.h" #include "env/DLLSHAREDATA.h" diff --git a/sakura_core/util/window.h b/sakura_core/util/window.h index 0e20853a10..dd80d25977 100644 --- a/sakura_core/util/window.h +++ b/sakura_core/util/window.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/zoom.cpp b/sakura_core/util/zoom.cpp index a94c3ae2ce..694b157364 100644 --- a/sakura_core/util/zoom.cpp +++ b/sakura_core/util/zoom.cpp @@ -2,6 +2,8 @@ @brief ズーム倍率算出 */ /* + Copyright (C) 2021, Sakura Editor Organization + This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/sakura_core/util/zoom.h b/sakura_core/util/zoom.h index 7da84df097..d2ba88bc01 100644 --- a/sakura_core/util/zoom.h +++ b/sakura_core/util/zoom.h @@ -2,6 +2,8 @@ @brief ズーム倍率算出 */ /* + Copyright (C) 2021, Sakura Editor Organization + This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/sakura_core/version.h b/sakura_core/version.h index bb95523a0d..0dd71371d7 100644 --- a/sakura_core/version.h +++ b/sakura_core/version.h @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #ifndef SAKURA_VERSION_F8EBA970_BB7A_43D9_B89A_04FB0B586A8A_H_ #define SAKURA_VERSION_F8EBA970_BB7A_43D9_B89A_04FB0B586A8A_H_ #pragma once diff --git a/sakura_core/view/CCaret.cpp b/sakura_core/view/CCaret.cpp index b88d2fbd03..4a793037d0 100644 --- a/sakura_core/view/CCaret.cpp +++ b/sakura_core/view/CCaret.cpp @@ -10,6 +10,7 @@ Copyright (C) 2011, Moca, syat Copyright (C) 2012, ryoji, Moca Copyright (C) 2013, Moca, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CCaret.h b/sakura_core/view/CCaret.h index e979632bab..5f1ad47371 100644 --- a/sakura_core/view/CCaret.h +++ b/sakura_core/view/CCaret.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index 6c48d3f8ca..b01a736692 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -17,6 +17,7 @@ Copyright (C) 2007, ryoji, じゅうじ, maru Copyright (C) 2009, nasukoji, ryoji Copyright (C) 2010, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CEditView.h b/sakura_core/view/CEditView.h index a1374d02d9..f7d0cf42b9 100644 --- a/sakura_core/view/CEditView.h +++ b/sakura_core/view/CEditView.h @@ -16,6 +16,7 @@ Copyright (C) 2007, ryoji, maru Copyright (C) 2008, ryoji Copyright (C) 2009, nasukoji + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CEditView_CmdHokan.cpp b/sakura_core/view/CEditView_CmdHokan.cpp index a13d7d0f76..cc458728de 100644 --- a/sakura_core/view/CEditView_CmdHokan.cpp +++ b/sakura_core/view/CEditView_CmdHokan.cpp @@ -11,6 +11,7 @@ Copyright (C) 2003, Moca Copyright (C) 2004, Moca Copyright (C) 2005, genta + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/view/CEditView_Cmdgrep.cpp b/sakura_core/view/CEditView_Cmdgrep.cpp index 4ab37907e4..4c54440c1b 100644 --- a/sakura_core/view/CEditView_Cmdgrep.cpp +++ b/sakura_core/view/CEditView_Cmdgrep.cpp @@ -10,6 +10,7 @@ Copyright (C) 2003, MIK Copyright (C) 2005, genta Copyright (C) 2006, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/view/CEditView_Cmdisrch.cpp b/sakura_core/view/CEditView_Cmdisrch.cpp index 10a2ec8b8d..9d9f39bde1 100644 --- a/sakura_core/view/CEditView_Cmdisrch.cpp +++ b/sakura_core/view/CEditView_Cmdisrch.cpp @@ -7,6 +7,7 @@ /* Copyright (C) 2004, isearch Copyright (C) 2005, genta, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/view/CEditView_Command.cpp b/sakura_core/view/CEditView_Command.cpp index 4f909d8abf..e94ee050da 100644 --- a/sakura_core/view/CEditView_Command.cpp +++ b/sakura_core/view/CEditView_Command.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CEditView_Command_New.cpp b/sakura_core/view/CEditView_Command_New.cpp index b800bbb291..8eb79fc5dd 100644 --- a/sakura_core/view/CEditView_Command_New.cpp +++ b/sakura_core/view/CEditView_Command_New.cpp @@ -14,6 +14,7 @@ Copyright (C) 2006, genta, Moca, fon Copyright (C) 2007, ryoji, maru Copyright (C) 2009, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/view/CEditView_Diff.cpp b/sakura_core/view/CEditView_Diff.cpp index 81e635124b..51c1956693 100644 --- a/sakura_core/view/CEditView_Diff.cpp +++ b/sakura_core/view/CEditView_Diff.cpp @@ -14,6 +14,7 @@ Copyright (C) 2005, maru Copyright (C) 2007, ryoji, kobake Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CEditView_ExecCmd.cpp b/sakura_core/view/CEditView_ExecCmd.cpp index fe4183f0b7..08052a3a4c 100644 --- a/sakura_core/view/CEditView_ExecCmd.cpp +++ b/sakura_core/view/CEditView_ExecCmd.cpp @@ -15,6 +15,7 @@ Copyright (C) 2005, genta, MIK, novice, aroka, D.S.Koba, かろと, Moca Copyright (C) 2006, Moca, aroka, ryoji, fon, genta Copyright (C) 2007, ryoji, じゅうじ, maru + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/view/CEditView_Ime.cpp b/sakura_core/view/CEditView_Ime.cpp index 8ec7734030..36f551642c 100644 --- a/sakura_core/view/CEditView_Ime.cpp +++ b/sakura_core/view/CEditView_Ime.cpp @@ -15,6 +15,7 @@ Copyright (C) 2005, genta, MIK, novice, aroka, D.S.Koba, かろと, Moca Copyright (C) 2006, Moca, aroka, ryoji, fon, genta Copyright (C) 2007, ryoji, じゅうじ, maru + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/view/CEditView_Mouse.cpp b/sakura_core/view/CEditView_Mouse.cpp index 374b8b2225..dd86ab7eab 100644 --- a/sakura_core/view/CEditView_Mouse.cpp +++ b/sakura_core/view/CEditView_Mouse.cpp @@ -15,6 +15,7 @@ Copyright (C) 2005, genta, MIK, novice, aroka, D.S.Koba, かろと, Moca Copyright (C) 2006, Moca, aroka, ryoji, fon, genta Copyright (C) 2007, ryoji, じゅうじ, maru + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/view/CEditView_Paint.cpp b/sakura_core/view/CEditView_Paint.cpp index 25f7de00bc..f5e32be6f8 100644 --- a/sakura_core/view/CEditView_Paint.cpp +++ b/sakura_core/view/CEditView_Paint.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CEditView_Paint.h b/sakura_core/view/CEditView_Paint.h index 1628540b97..c3640a1b9e 100644 --- a/sakura_core/view/CEditView_Paint.h +++ b/sakura_core/view/CEditView_Paint.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CEditView_Paint_Bracket.cpp b/sakura_core/view/CEditView_Paint_Bracket.cpp index ab85ce4bf0..4614bdd111 100644 --- a/sakura_core/view/CEditView_Paint_Bracket.cpp +++ b/sakura_core/view/CEditView_Paint_Bracket.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CEditView_Scroll.cpp b/sakura_core/view/CEditView_Scroll.cpp index 1123cb3212..70c4e4adb1 100644 --- a/sakura_core/view/CEditView_Scroll.cpp +++ b/sakura_core/view/CEditView_Scroll.cpp @@ -18,6 +18,7 @@ Copyright (C) 2009, nasukoji Copyright (C) 2010, Moca Copyright (C) 2012, ryoji, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/view/CEditView_Search.cpp b/sakura_core/view/CEditView_Search.cpp index 2c3001e3e8..f7a45893d8 100644 --- a/sakura_core/view/CEditView_Search.cpp +++ b/sakura_core/view/CEditView_Search.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CRuler.cpp b/sakura_core/view/CRuler.cpp index c71b0a35ef..8b8389b851 100644 --- a/sakura_core/view/CRuler.cpp +++ b/sakura_core/view/CRuler.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CRuler.h" #include "CTextArea.h" diff --git a/sakura_core/view/CRuler.h b/sakura_core/view/CRuler.h index f7b903875f..4ac00e615f 100644 --- a/sakura_core/view/CRuler.h +++ b/sakura_core/view/CRuler.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CTextArea.cpp b/sakura_core/view/CTextArea.cpp index f5942f7a4a..d0f9c47442 100644 --- a/sakura_core/view/CTextArea.cpp +++ b/sakura_core/view/CTextArea.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CTextArea.h" #include "CViewFont.h" diff --git a/sakura_core/view/CTextArea.h b/sakura_core/view/CTextArea.h index e6b095baca..18ab4782b4 100644 --- a/sakura_core/view/CTextArea.h +++ b/sakura_core/view/CTextArea.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CTextDrawer.cpp b/sakura_core/view/CTextDrawer.cpp index f2a045c35d..1339959e37 100644 --- a/sakura_core/view/CTextDrawer.cpp +++ b/sakura_core/view/CTextDrawer.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CTextDrawer.h b/sakura_core/view/CTextDrawer.h index 0b53bed6f3..3430968f26 100644 --- a/sakura_core/view/CTextDrawer.h +++ b/sakura_core/view/CTextDrawer.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CTextMetrics.cpp b/sakura_core/view/CTextMetrics.cpp index aceab5013f..d066e3d68c 100644 --- a/sakura_core/view/CTextMetrics.cpp +++ b/sakura_core/view/CTextMetrics.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2007, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CTextMetrics.h b/sakura_core/view/CTextMetrics.h index 54a5e26f2b..ed52603490 100644 --- a/sakura_core/view/CTextMetrics.h +++ b/sakura_core/view/CTextMetrics.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2007, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CViewCalc.cpp b/sakura_core/view/CViewCalc.cpp index 38a35a514c..0e21431bf7 100644 --- a/sakura_core/view/CViewCalc.cpp +++ b/sakura_core/view/CViewCalc.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CViewCalc.h" #include "mem/CMemoryIterator.h" diff --git a/sakura_core/view/CViewCalc.h b/sakura_core/view/CViewCalc.h index c091e02078..998f733e27 100644 --- a/sakura_core/view/CViewCalc.h +++ b/sakura_core/view/CViewCalc.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CViewFont.cpp b/sakura_core/view/CViewFont.cpp index a7a4e48343..aa0a0c292d 100644 --- a/sakura_core/view/CViewFont.cpp +++ b/sakura_core/view/CViewFont.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CViewFont.h b/sakura_core/view/CViewFont.h index 09765491b2..1f011b6fc1 100644 --- a/sakura_core/view/CViewFont.h +++ b/sakura_core/view/CViewFont.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CViewParser.cpp b/sakura_core/view/CViewParser.cpp index d480abee39..1767001135 100644 --- a/sakura_core/view/CViewParser.cpp +++ b/sakura_core/view/CViewParser.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CViewParser.h" #include "doc/CEditDoc.h" diff --git a/sakura_core/view/CViewParser.h b/sakura_core/view/CViewParser.h index b9b52d343c..e5f0ddec02 100644 --- a/sakura_core/view/CViewParser.h +++ b/sakura_core/view/CViewParser.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CViewSelect.cpp b/sakura_core/view/CViewSelect.cpp index fec12084cf..91421b11c1 100644 --- a/sakura_core/view/CViewSelect.cpp +++ b/sakura_core/view/CViewSelect.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include #include "CViewSelect.h" diff --git a/sakura_core/view/CViewSelect.h b/sakura_core/view/CViewSelect.h index 077d3b01ba..bdde13378d 100644 --- a/sakura_core/view/CViewSelect.h +++ b/sakura_core/view/CViewSelect.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/DispPos.cpp b/sakura_core/view/DispPos.cpp index a58fa5adbf..56b61ae2d8 100644 --- a/sakura_core/view/DispPos.cpp +++ b/sakura_core/view/DispPos.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "DispPos.h" #include "doc/layout/CLayout.h" diff --git a/sakura_core/view/DispPos.h b/sakura_core/view/DispPos.h index e897d79811..fb24303dfc 100644 --- a/sakura_core/view/DispPos.h +++ b/sakura_core/view/DispPos.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/CColorStrategy.cpp b/sakura_core/view/colors/CColorStrategy.cpp index a03b660e09..96f34dbb42 100644 --- a/sakura_core/view/colors/CColorStrategy.cpp +++ b/sakura_core/view/colors/CColorStrategy.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/CColorStrategy.h b/sakura_core/view/colors/CColorStrategy.h index fee9eeadbf..5ee97b977b 100644 --- a/sakura_core/view/colors/CColorStrategy.h +++ b/sakura_core/view/colors/CColorStrategy.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/CColor_Comment.cpp b/sakura_core/view/colors/CColor_Comment.cpp index c41d64145a..11f0433d10 100644 --- a/sakura_core/view/colors/CColor_Comment.cpp +++ b/sakura_core/view/colors/CColor_Comment.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "view/CEditView.h" // SColorStrategyInfo #include "CColor_Comment.h" diff --git a/sakura_core/view/colors/CColor_Comment.h b/sakura_core/view/colors/CColor_Comment.h index 8aae147335..8faf9c44d5 100644 --- a/sakura_core/view/colors/CColor_Comment.h +++ b/sakura_core/view/colors/CColor_Comment.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/CColor_Found.cpp b/sakura_core/view/colors/CColor_Found.cpp index 99eb2b2763..9b63f8dca6 100644 --- a/sakura_core/view/colors/CColor_Found.cpp +++ b/sakura_core/view/colors/CColor_Found.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "view/CEditView.h" // SColorStrategyInfo #include "CColor_Found.h" diff --git a/sakura_core/view/colors/CColor_Found.h b/sakura_core/view/colors/CColor_Found.h index 091bf5158a..54f9d6d4d4 100644 --- a/sakura_core/view/colors/CColor_Found.h +++ b/sakura_core/view/colors/CColor_Found.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/CColor_Heredoc.cpp b/sakura_core/view/colors/CColor_Heredoc.cpp index 159aa04721..1d8d34486a 100644 --- a/sakura_core/view/colors/CColor_Heredoc.cpp +++ b/sakura_core/view/colors/CColor_Heredoc.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2011, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/CColor_Heredoc.h b/sakura_core/view/colors/CColor_Heredoc.h index 020f4d3284..cbb81db1b1 100644 --- a/sakura_core/view/colors/CColor_Heredoc.h +++ b/sakura_core/view/colors/CColor_Heredoc.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2011, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/CColor_KeywordSet.cpp b/sakura_core/view/colors/CColor_KeywordSet.cpp index 79d8c40673..f3c926a37e 100644 --- a/sakura_core/view/colors/CColor_KeywordSet.cpp +++ b/sakura_core/view/colors/CColor_KeywordSet.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "view/CEditView.h" // SColorStrategyInfo #include "CColor_KeywordSet.h" diff --git a/sakura_core/view/colors/CColor_KeywordSet.h b/sakura_core/view/colors/CColor_KeywordSet.h index e2325922cd..47e15f9880 100644 --- a/sakura_core/view/colors/CColor_KeywordSet.h +++ b/sakura_core/view/colors/CColor_KeywordSet.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/CColor_Numeric.cpp b/sakura_core/view/colors/CColor_Numeric.cpp index 108892f78c..2adc902b4e 100644 --- a/sakura_core/view/colors/CColor_Numeric.cpp +++ b/sakura_core/view/colors/CColor_Numeric.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "view/CEditView.h" // SColorStrategyInfo #include "CColor_Numeric.h" diff --git a/sakura_core/view/colors/CColor_Numeric.h b/sakura_core/view/colors/CColor_Numeric.h index e3d800eeeb..c430c994ac 100644 --- a/sakura_core/view/colors/CColor_Numeric.h +++ b/sakura_core/view/colors/CColor_Numeric.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/CColor_Quote.cpp b/sakura_core/view/colors/CColor_Quote.cpp index 05f81ac12e..a91404087c 100644 --- a/sakura_core/view/colors/CColor_Quote.cpp +++ b/sakura_core/view/colors/CColor_Quote.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "view/CEditView.h" // SColorStrategyInfo #include "CColor_Quote.h" diff --git a/sakura_core/view/colors/CColor_Quote.h b/sakura_core/view/colors/CColor_Quote.h index b2b0f014ba..92afc6c7c9 100644 --- a/sakura_core/view/colors/CColor_Quote.h +++ b/sakura_core/view/colors/CColor_Quote.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/CColor_RegexKeyword.cpp b/sakura_core/view/colors/CColor_RegexKeyword.cpp index f67ff885a6..bdae468f88 100644 --- a/sakura_core/view/colors/CColor_RegexKeyword.cpp +++ b/sakura_core/view/colors/CColor_RegexKeyword.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/CColor_RegexKeyword.h b/sakura_core/view/colors/CColor_RegexKeyword.h index 2974e9f1ad..9045e296eb 100644 --- a/sakura_core/view/colors/CColor_RegexKeyword.h +++ b/sakura_core/view/colors/CColor_RegexKeyword.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/CColor_Url.cpp b/sakura_core/view/colors/CColor_Url.cpp index 6b70089255..e1492def1d 100644 --- a/sakura_core/view/colors/CColor_Url.cpp +++ b/sakura_core/view/colors/CColor_Url.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "view/CEditView.h" // SColorStrategyInfo #include "CColor_Url.h" diff --git a/sakura_core/view/colors/CColor_Url.h b/sakura_core/view/colors/CColor_Url.h index daee74125a..f9d4235115 100644 --- a/sakura_core/view/colors/CColor_Url.h +++ b/sakura_core/view/colors/CColor_Url.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/EColorIndexType.h b/sakura_core/view/colors/EColorIndexType.h index ec3f9ea147..211a5dc0d6 100644 --- a/sakura_core/view/colors/EColorIndexType.h +++ b/sakura_core/view/colors/EColorIndexType.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/figures/CFigureManager.cpp b/sakura_core/view/figures/CFigureManager.cpp index 5239238851..2aac1ce0a4 100644 --- a/sakura_core/view/figures/CFigureManager.cpp +++ b/sakura_core/view/figures/CFigureManager.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/figures/CFigureManager.h b/sakura_core/view/figures/CFigureManager.h index f7eb51ea37..d5cdd8b472 100644 --- a/sakura_core/view/figures/CFigureManager.h +++ b/sakura_core/view/figures/CFigureManager.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/figures/CFigureStrategy.cpp b/sakura_core/view/figures/CFigureStrategy.cpp index d81c15731a..9d5c2f05b5 100644 --- a/sakura_core/view/figures/CFigureStrategy.cpp +++ b/sakura_core/view/figures/CFigureStrategy.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/figures/CFigureStrategy.h b/sakura_core/view/figures/CFigureStrategy.h index 95389715e3..6e683aa7c0 100644 --- a/sakura_core/view/figures/CFigureStrategy.h +++ b/sakura_core/view/figures/CFigureStrategy.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/figures/CFigure_Comma.cpp b/sakura_core/view/figures/CFigure_Comma.cpp index 10b4bea57c..29d3829466 100644 --- a/sakura_core/view/figures/CFigure_Comma.cpp +++ b/sakura_core/view/figures/CFigure_Comma.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "view/CEditView.h" // SColorStrategyInfo #include "CFigure_Comma.h" diff --git a/sakura_core/view/figures/CFigure_Comma.h b/sakura_core/view/figures/CFigure_Comma.h index d8a6b292e7..4f571fbfe8 100644 --- a/sakura_core/view/figures/CFigure_Comma.h +++ b/sakura_core/view/figures/CFigure_Comma.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2015, syat + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/figures/CFigure_CtrlCode.cpp b/sakura_core/view/figures/CFigure_CtrlCode.cpp index 0830075aa9..db9df66acd 100644 --- a/sakura_core/view/figures/CFigure_CtrlCode.cpp +++ b/sakura_core/view/figures/CFigure_CtrlCode.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "view/CEditView.h" // SColorStrategyInfo #include "CFigure_CtrlCode.h" diff --git a/sakura_core/view/figures/CFigure_CtrlCode.h b/sakura_core/view/figures/CFigure_CtrlCode.h index b8f85b8cbc..f0f04ba9f6 100644 --- a/sakura_core/view/figures/CFigure_CtrlCode.h +++ b/sakura_core/view/figures/CFigure_CtrlCode.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/figures/CFigure_Eol.cpp b/sakura_core/view/figures/CFigure_Eol.cpp index 5520de7f47..720ec4e4bb 100644 --- a/sakura_core/view/figures/CFigure_Eol.cpp +++ b/sakura_core/view/figures/CFigure_Eol.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/figures/CFigure_Eol.h b/sakura_core/view/figures/CFigure_Eol.h index 116408d827..a850d6b013 100644 --- a/sakura_core/view/figures/CFigure_Eol.h +++ b/sakura_core/view/figures/CFigure_Eol.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/figures/CFigure_HanSpace.cpp b/sakura_core/view/figures/CFigure_HanSpace.cpp index 20f323d455..4c2e1658ca 100644 --- a/sakura_core/view/figures/CFigure_HanSpace.cpp +++ b/sakura_core/view/figures/CFigure_HanSpace.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "view/CEditView.h" // SColorStrategyInfo diff --git a/sakura_core/view/figures/CFigure_HanSpace.h b/sakura_core/view/figures/CFigure_HanSpace.h index 23459790e0..9818eb9c55 100644 --- a/sakura_core/view/figures/CFigure_HanSpace.h +++ b/sakura_core/view/figures/CFigure_HanSpace.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/figures/CFigure_Tab.cpp b/sakura_core/view/figures/CFigure_Tab.cpp index 4c16dfe8e6..9cddefd661 100644 --- a/sakura_core/view/figures/CFigure_Tab.cpp +++ b/sakura_core/view/figures/CFigure_Tab.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "view/CEditView.h" // SColorStrategyInfo #include "CFigure_Tab.h" diff --git a/sakura_core/view/figures/CFigure_Tab.h b/sakura_core/view/figures/CFigure_Tab.h index d4f6c64b1c..d9bcfeeb0a 100644 --- a/sakura_core/view/figures/CFigure_Tab.h +++ b/sakura_core/view/figures/CFigure_Tab.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/figures/CFigure_ZenSpace.cpp b/sakura_core/view/figures/CFigure_ZenSpace.cpp index 77cbb9d643..18e36b7291 100644 --- a/sakura_core/view/figures/CFigure_ZenSpace.cpp +++ b/sakura_core/view/figures/CFigure_ZenSpace.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "view/CEditView.h" // SColorStrategyInfo #include "CFigure_ZenSpace.h" diff --git a/sakura_core/view/figures/CFigure_ZenSpace.h b/sakura_core/view/figures/CFigure_ZenSpace.h index f15ee10ca2..7f1ac7079b 100644 --- a/sakura_core/view/figures/CFigure_ZenSpace.h +++ b/sakura_core/view/figures/CFigure_ZenSpace.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/window/CAutoScrollWnd.cpp b/sakura_core/window/CAutoScrollWnd.cpp index 8fd2730756..93e5935d32 100644 --- a/sakura_core/window/CAutoScrollWnd.cpp +++ b/sakura_core/window/CAutoScrollWnd.cpp @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2012, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/window/CAutoScrollWnd.h b/sakura_core/window/CAutoScrollWnd.h index b8cedd26b8..051cd7eff7 100644 --- a/sakura_core/window/CAutoScrollWnd.h +++ b/sakura_core/window/CAutoScrollWnd.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2012, Moca + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index d1fd73c600..f6cfda4cec 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -18,6 +18,7 @@ Copyright (C) 2010, ryoji, Moca、Uchi Copyright (C) 2011, ryoji Copyright (C) 2013, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/window/CEditWnd.h b/sakura_core/window/CEditWnd.h index f267eb3ba4..cf4178bd3b 100644 --- a/sakura_core/window/CEditWnd.h +++ b/sakura_core/window/CEditWnd.h @@ -17,6 +17,7 @@ Copyright (C) 2007, ryoji Copyright (C) 2008, ryoji Copyright (C) 2009, nasukoji + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/window/CMainStatusBar.cpp b/sakura_core/window/CMainStatusBar.cpp index eb879dec3d..f26fdb2bc1 100644 --- a/sakura_core/window/CMainStatusBar.cpp +++ b/sakura_core/window/CMainStatusBar.cpp @@ -1,4 +1,27 @@ /*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ #include "StdAfx.h" #include "CMainStatusBar.h" #include "window/CEditWnd.h" diff --git a/sakura_core/window/CMainStatusBar.h b/sakura_core/window/CMainStatusBar.h index 0fa24d0c07..1f077aa534 100644 --- a/sakura_core/window/CMainStatusBar.h +++ b/sakura_core/window/CMainStatusBar.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/window/CMainToolBar.cpp b/sakura_core/window/CMainToolBar.cpp index 3ae54c4031..40d6c9867c 100644 --- a/sakura_core/window/CMainToolBar.cpp +++ b/sakura_core/window/CMainToolBar.cpp @@ -4,6 +4,7 @@ Copyright (C) 2008, kobake Copyright (C) 2010, Uchi, Moca Copyright (C) 2012, aroka, Uchi + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/window/CMainToolBar.h b/sakura_core/window/CMainToolBar.h index 287e3744f3..64e7d76369 100644 --- a/sakura_core/window/CMainToolBar.h +++ b/sakura_core/window/CMainToolBar.h @@ -1,6 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/window/CSplitBoxWnd.cpp b/sakura_core/window/CSplitBoxWnd.cpp index 0dd322f73b..3e8a0f29c9 100644 --- a/sakura_core/window/CSplitBoxWnd.cpp +++ b/sakura_core/window/CSplitBoxWnd.cpp @@ -8,6 +8,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, aroka + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/window/CSplitBoxWnd.h b/sakura_core/window/CSplitBoxWnd.h index 152dfdff49..a2e7455fee 100644 --- a/sakura_core/window/CSplitBoxWnd.h +++ b/sakura_core/window/CSplitBoxWnd.h @@ -6,6 +6,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, aroka + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/window/CSplitterWnd.cpp b/sakura_core/window/CSplitterWnd.cpp index 1a6b0ad0bf..ee19df962e 100644 --- a/sakura_core/window/CSplitterWnd.cpp +++ b/sakura_core/window/CSplitterWnd.cpp @@ -10,6 +10,7 @@ Copyright (C) 2002, aroka, YAZAKI Copyright (C) 2003, MIK Copyright (C) 2007, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/window/CSplitterWnd.h b/sakura_core/window/CSplitterWnd.h index c5a6457d38..9e60e7686c 100644 --- a/sakura_core/window/CSplitterWnd.h +++ b/sakura_core/window/CSplitterWnd.h @@ -7,6 +7,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, aroka, YAZAKI + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/window/CTabWnd.cpp b/sakura_core/window/CTabWnd.cpp index f93f7d9dbe..143b62b9a8 100644 --- a/sakura_core/window/CTabWnd.cpp +++ b/sakura_core/window/CTabWnd.cpp @@ -14,6 +14,7 @@ Copyright (C) 2009, ryoji Copyright (C) 2012, Moca, syat, novice, uchi Copyright (C) 2013, Moca, Uchi, aroka, novice, syat, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/window/CTabWnd.h b/sakura_core/window/CTabWnd.h index 1384d879de..9dc82eabb0 100644 --- a/sakura_core/window/CTabWnd.h +++ b/sakura_core/window/CTabWnd.h @@ -12,6 +12,7 @@ Copyright (C) 2007, ryoji Copyright (C) 2012, Moca, syat Copyright (C) 2013, Uchi, aroka, novice, syat, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/window/CTipWnd.cpp b/sakura_core/window/CTipWnd.cpp index 7af4b58136..f14e99cd17 100644 --- a/sakura_core/window/CTipWnd.cpp +++ b/sakura_core/window/CTipWnd.cpp @@ -10,6 +10,7 @@ Copyright (C) 2002, GAE Copyright (C) 2005, D.S.Koba Copyright (C) 2006, ryoji, genta + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/window/CTipWnd.h b/sakura_core/window/CTipWnd.h index 034bc5ac56..268cec9800 100644 --- a/sakura_core/window/CTipWnd.h +++ b/sakura_core/window/CTipWnd.h @@ -9,6 +9,7 @@ Copyright (C) 2001, asa-o Copyright (C) 2002, aroka Copyright (C) 2006, genta, fon + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/window/CWnd.cpp b/sakura_core/window/CWnd.cpp index dbc268aded..a73a98b79a 100644 --- a/sakura_core/window/CWnd.cpp +++ b/sakura_core/window/CWnd.cpp @@ -9,6 +9,7 @@ Copyright (C) 2000, genta Copyright (C) 2003, MIK, KEITA Copyright (C) 2006, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/window/CWnd.h b/sakura_core/window/CWnd.h index b0650683ce..bfd011dfdf 100644 --- a/sakura_core/window/CWnd.h +++ b/sakura_core/window/CWnd.h @@ -9,6 +9,7 @@ Copyright (C) 2002, aroka Copyright (C) 2003, MIK Copyright (C) 2006, ryoji + Copyright (C) 2018-2021, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/tests/unittests/test-int2dec.cpp b/tests/unittests/test-int2dec.cpp index 96d532c5df..42e0a91f37 100644 --- a/tests/unittests/test-int2dec.cpp +++ b/tests/unittests/test-int2dec.cpp @@ -1,4 +1,28 @@ -#include +/*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include #include diff --git a/tests/unittests/test-sample.cpp b/tests/unittests/test-sample.cpp index f063382310..ab38870630 100644 --- a/tests/unittests/test-sample.cpp +++ b/tests/unittests/test-sample.cpp @@ -1,4 +1,28 @@ -#include +/*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include #include #include From c3a69c35bd4a00de9ff20928e84eb0b42b2beeae Mon Sep 17 00:00:00 2001 From: berryzplus Date: Tue, 23 Feb 2021 19:02:55 +0900 Subject: [PATCH 0457/1024] =?UTF-8?q?=E7=8B=AC=E8=87=AA=E5=AE=9A=E7=BE=A9a?= =?UTF-8?q?ssert=E3=83=9E=E3=82=AF=E3=83=AD=E3=82=92=E6=94=B9=E8=89=AF?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit assert(nanika); と書いたときに、行末セミコロンが「不要なセミコロン」となってしまう事態を解消する。 --- sakura_core/debug/Debug2.h | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/sakura_core/debug/Debug2.h b/sakura_core/debug/Debug2.h index cd453cdcf5..853f570c86 100644 --- a/sakura_core/debug/Debug2.h +++ b/sakura_core/debug/Debug2.h @@ -43,24 +43,22 @@ void warning_point(); #define assert(exp) \ - { \ if(!(exp)){ \ TRACE( "!assert: " #exp, NULL ); \ ErrorMessage( NULL, L"!assert\n%hs(%d):\n%hs", __FILE__, __LINE__, #exp ); \ debug_exit(); \ } \ - } + ((void)0) #define assert_warning(exp) \ - { \ if(!(exp)){ \ TRACE( "!warning: " #exp, NULL ); \ warning_point(); \ } \ - } + ((void)0) #else - #define assert(exp) - #define assert_warning(exp) + #define assert(exp) ((void)0) + #define assert_warning(exp) ((void)0) #endif #endif /* SAKURA_DEBUG2_46C93AD6_37D9_4646_B78C_E09168383A42_H_ */ From 86075bb3840609845722cfe0f88591f4a0ed7482 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Tue, 23 Feb 2021 22:05:34 +0900 Subject: [PATCH 0458/1024] =?UTF-8?q?CClipboard::SetHtmlText=E3=81=AE?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-cclipboard.cpp | 106 +++++++++++++++++++++++++ tests/unittests/tests1.vcxproj | 1 + tests/unittests/tests1.vcxproj.filters | 3 + 3 files changed, 110 insertions(+) create mode 100644 tests/unittests/test-cclipboard.cpp diff --git a/tests/unittests/test-cclipboard.cpp b/tests/unittests/test-cclipboard.cpp new file mode 100644 index 0000000000..b78ef30729 --- /dev/null +++ b/tests/unittests/test-cclipboard.cpp @@ -0,0 +1,106 @@ +/*! @file */ +/* + Copyright (C) 2021 Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include + +#ifndef NOMINMAX +#define NOMINMAX +#endif /* #ifndef NOMINMAX */ + +#include +#include +#include +#include + +#include "mem/CNativeW.h" +#include "_os/CClipboard.h" + +/*! + * HWND型のスマートポインタを実現するためのdeleterクラス + */ +struct window_closer +{ + void operator()(HWND hWnd) const + { + ::DestroyWindow(hWnd); + } +}; + +//! HWND型のスマートポインタ +using windowHolder = std::unique_ptr::type, window_closer>; + + +/*! + * @brief SetHtmlTextのテスト + */ +TEST(CClipboard, SetHtmlText) +{ + constexpr const wchar_t inputData[] = L"test 109"; + constexpr const char expected[] = + "Version:0.9\r\n" + "StartHTML:00000097\r\n" + "EndHTML:00000178\r\n" + "StartFragment:00000134\r\n" + "EndFragment:00000142\r\n" + "\r\n" + "\r\n" + "test 109\r\n" + "\r\n" + "\r\n"; + + const UINT uHtmlFormat = ::RegisterClipboardFormat(L"HTML Format"); + + auto hInstance = ::GetModuleHandleW(nullptr); + if (HWND hWnd = ::CreateWindowExW(0, WC_STATICW, L"test", 0, 1, 1, 1, 1, nullptr, nullptr, hInstance, nullptr); hWnd) { + // HWNDをスマートポインタに入れる + windowHolder holder(hWnd); + + // クリップボード操作クラスでSetHtmlTextする + CClipboard cClipBoard(hWnd); + + // 操作は失敗しないはず。 + ASSERT_TRUE(cClipBoard.SetHtmlText(inputData)); + + // 操作に成功するとHTML形式のデータを利用できるはず。 + ASSERT_TRUE(::IsClipboardFormatAvailable(uHtmlFormat)); + + // クリップボード操作クラスが対応してないので生APIを呼んで確認する。 + + // グローバルメモリをロックできた場合のみ中身を取得しに行く + if (HGLOBAL hClipData = ::GetClipboardData(uHtmlFormat); hClipData != nullptr) { + // データをstd::stringにコピーする + const size_t cchData = ::GlobalSize(hClipData); + const char* pData = (char*)::GlobalLock(hClipData); + std::string strClipData(pData, cchData); + + // 使い終わったらロック解除する + ::GlobalUnlock(hClipData); + + ASSERT_STREQ(expected, strClipData.c_str()); + } + else { + FAIL(); + } + } +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index f1a0a00f50..19d13da80c 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -106,6 +106,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index 4326ebae40..4c77c58c2a 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -107,6 +107,9 @@ Test Files + + Test Files + From 7ea99d6504fa385ea2e445aa3d97fd2b28acf560 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Tue, 23 Feb 2021 22:13:03 +0900 Subject: [PATCH 0459/1024] =?UTF-8?q?sprintf=E3=82=92CNativeA::AppendStrin?= =?UTF-8?q?gF=E3=81=A7=E7=BD=AE=E6=8F=9B=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/_os/CClipboard.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/sakura_core/_os/CClipboard.cpp b/sakura_core/_os/CClipboard.cpp index 6b044797b3..abb842a79a 100644 --- a/sakura_core/_os/CClipboard.cpp +++ b/sakura_core/_os/CClipboard.cpp @@ -219,15 +219,12 @@ bool CClipboard::SetHtmlText(const CNativeW& cmemBUf) CUtf8().UnicodeToCode(cmemBUf, cmemUtf8._GetMemory()); CNativeA cmemHeader; - char szFormat[32]; size_t size = cmemUtf8.GetStringLength() + 134; cmemHeader.AppendString("Version:0.9\r\n"); cmemHeader.AppendString("StartHTML:00000097\r\n"); - sprintf( szFormat, "EndHTML:%08Id\r\n", size + 36 ); - cmemHeader.AppendString(szFormat); + cmemHeader.AppendStringF("EndHTML:%08Id\r\n", size + 36); cmemHeader.AppendString("StartFragment:00000134\r\n"); - sprintf( szFormat, "EndFragment:%08Id\r\n", size ); - cmemHeader.AppendString(szFormat); + cmemHeader.AppendStringF("EndFragment:%08Id\r\n", size); cmemHeader.AppendString("\r\n\r\n"); CNativeA cmemFooter; cmemFooter.AppendString("\r\n\r\n\r\n"); From a80b6da702434b3515139495437ec6cfdc7f3e1d Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Wed, 24 Feb 2021 17:00:40 +0900 Subject: [PATCH 0460/1024] =?UTF-8?q?CNativeW::GetHabaOfChar=20=E3=81=AE?= =?UTF-8?q?=E5=85=B1=E6=9C=89=E3=83=A1=E3=83=A2=E3=83=AA=E4=BE=9D=E5=AD=98?= =?UTF-8?q?=E3=82=92=E6=98=8E=E7=A2=BA=E5=8C=96=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgProfileMgr.h | 1 + sakura_core/doc/layout/CLayoutMgr.h | 4 +++- sakura_core/env/CShareData.h | 8 +++++--- sakura_core/mem/CMemoryIterator.h | 10 ++++++---- sakura_core/mem/CNativeW.cpp | 2 +- sakura_core/mem/CNativeW.h | 13 ++++++------- tests/unittests/test-ccommandline.cpp | 1 + tests/unittests/test-cnative.cpp | 20 ++++++++++---------- 8 files changed, 33 insertions(+), 26 deletions(-) diff --git a/sakura_core/dlg/CDlgProfileMgr.h b/sakura_core/dlg/CDlgProfileMgr.h index 79648db758..a447c59b15 100644 --- a/sakura_core/dlg/CDlgProfileMgr.h +++ b/sakura_core/dlg/CDlgProfileMgr.h @@ -34,6 +34,7 @@ #include "dlg/CDialog.h" #include "_main/CCommandLine.h" +#include #include #include #include diff --git a/sakura_core/doc/layout/CLayoutMgr.h b/sakura_core/doc/layout/CLayoutMgr.h index 01c4815443..ab8ec28d08 100644 --- a/sakura_core/doc/layout/CLayoutMgr.h +++ b/sakura_core/doc/layout/CLayoutMgr.h @@ -38,6 +38,7 @@ #include "COpe.h" #include "util/container.h" #include "util/design_template.h" +#include "env/DLLSHAREDATA.h" class CBregexp;// 2002/2/10 aroka class CLayout;// 2002/2/10 aroka @@ -273,7 +274,8 @@ class CLayoutMgr : public CProgressSubject if( m_nSpacing ){ nSpace = CLayoutXInt(CNativeW::GetKetaOfChar(pData, nDataLen, i)) * m_nSpacing; } - return CNativeW::GetColmOfChar( pData, nDataLen, i ) + nSpace; + return CNativeW::GetColmOfChar( pData, nDataLen, i, + GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol) + nSpace; } CLayoutXInt GetLayoutXOfChar( const CStringRef& str, int i ) const { return GetLayoutXOfChar(str.GetPtr(), str.GetLength(), i); diff --git a/sakura_core/env/CShareData.h b/sakura_core/env/CShareData.h index 6321f07af1..69a4153c78 100644 --- a/sakura_core/env/CShareData.h +++ b/sakura_core/env/CShareData.h @@ -33,15 +33,17 @@ #define SAKURA_CSHAREDATA_B25C0FA2_B810_4327_8EC6_0AF46D49593A_H_ #pragma once +#include #include "CSelectLang.h" // 2011.04.10 nasukoji - -class CShareData; +#include "charset/charset.h" +#include "util/design_template.h" // 2010.04.19 Moca DLLSHAREDATA関連はDLLSHAREDATA.h等最低限必要な場所へ移動 // CShareData.hは、自分のInterfaceしか提供しません。別にDLLSHAREDATA.hをincludeすること。 +class CMutex; struct DLLSHAREDATA; +struct SFileTree; struct STypeConfig; -class CMutex; /*! @brief 共有データの管理 diff --git a/sakura_core/mem/CMemoryIterator.h b/sakura_core/mem/CMemoryIterator.h index f689dfad93..6f41e873a9 100644 --- a/sakura_core/mem/CMemoryIterator.h +++ b/sakura_core/mem/CMemoryIterator.h @@ -20,16 +20,17 @@ // sakura #include "_main/global.h" #include "charset/charcode.h" +#include "doc/layout/CLayout.h" #include "doc/layout/CTsvModeInfo.h" +#include "doc/logic/CDocLine.h" +#include "env/DLLSHAREDATA.h" +#include "mem/CNativeW.h" /*----------------------------------------------------------------------- クラスの宣言 -----------------------------------------------------------------------*/ // 2007.10.23 kobake テンプレートである必要も無いので、非テンプレートに変更。 -#include "doc/layout/CLayout.h" -#include "doc/logic/CDocLine.h" - //! ブロックコメントデリミタを管理する class CMemoryIterator { @@ -104,7 +105,8 @@ class CMemoryIterator } else if (m_pLine[m_nIndex] == L',' && m_tsvInfo.m_nTsvMode == TSV_MODE_CSV){ m_nColumn_Delta = m_tsvInfo.GetActualTabLength(m_nColumn, m_tsvInfo.m_nMaxCharLayoutX); }else{ - m_nColumn_Delta = CNativeW::GetColmOfChar( m_pLine, m_nLineLen, m_nIndex ); + m_nColumn_Delta = CNativeW::GetColmOfChar( m_pLine, m_nLineLen, m_nIndex, + GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol ); if( m_nSpacing ){ m_nColumn_Delta += CLayoutXInt(CNativeW::GetKetaOfChar(m_pLine, m_nLineLen, m_nIndex) * m_nSpacing); } diff --git a/sakura_core/mem/CNativeW.cpp b/sakura_core/mem/CNativeW.cpp index e2a2537ef5..84745e62de 100644 --- a/sakura_core/mem/CNativeW.cpp +++ b/sakura_core/mem/CNativeW.cpp @@ -405,7 +405,7 @@ CKetaXInt CNativeW::GetKetaOfChar( const wchar_t* pData, int nDataLen, int nIdx, //! 指定した位置の文字の文字幅を返す CHabaXInt CNativeW::GetHabaOfChar( const wchar_t* pData, int nDataLen, int nIdx, - CCharWidthCache& cache, bool bEnableExtEol ) + bool bEnableExtEol, CCharWidthCache& cache ) { //文字列範囲外なら 0 if( nIdx >= nDataLen ){ diff --git a/sakura_core/mem/CNativeW.h b/sakura_core/mem/CNativeW.h index 24ec26e217..7da3d92101 100644 --- a/sakura_core/mem/CNativeW.h +++ b/sakura_core/mem/CNativeW.h @@ -31,7 +31,6 @@ #include "basis/SakuraBasis.h" #include "charset/charcode.h" #include "debug/Debug2.h" //assert -#include "env/DLLSHAREDATA.h" //! 文字列への参照を取得するインターフェース class IStringRef{ @@ -167,8 +166,7 @@ class CNativeW final : public CNative{ // -- -- staticインターフェース -- -- // static CLogicInt GetSizeOfChar( const wchar_t* pData, int nDataLen, int nIdx ); //!< 指定した位置の文字がwchar_t何個分かを返す static CHabaXInt GetHabaOfChar( const wchar_t* pData, int nDataLen, int nIdx, - CCharWidthCache& cache = GetCharWidthCache(), - bool bEnableExtEol = GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol ); + bool bEnableExtEol, CCharWidthCache& cache = GetCharWidthCache() ); //! 指定した位置の文字が半角何個分かを返す static CKetaXInt GetKetaOfChar( const wchar_t* pData, int nDataLen, int nIdx, const CCharWidthCache& cache = GetCharWidthCache() ); @@ -179,10 +177,11 @@ class CNativeW final : public CNative{ { return GetKetaOfChar(cStr.GetPtr(), cStr.GetLength(), nIdx); } - static CLayoutXInt GetColmOfChar( const wchar_t* pData, int nDataLen, int nIdx ) - { return GetHabaOfChar(pData,nDataLen,nIdx);} - static CLayoutXInt GetColmOfChar( const CStringRef& cStr, int nIdx ) - { return GetHabaOfChar(cStr.GetPtr(), cStr.GetLength(), nIdx);} + static CLayoutXInt GetColmOfChar( const wchar_t* pData, + int nDataLen, int nIdx, bool bEnableExtEol ) + { return GetHabaOfChar(pData,nDataLen,nIdx, bEnableExtEol); } + static CLayoutXInt GetColmOfChar( const CStringRef& cStr, int nIdx, bool bEnableExtEol ) + { return GetHabaOfChar(cStr.GetPtr(), cStr.GetLength(), nIdx, bEnableExtEol); } }; // 派生クラスでメンバー追加禁止 diff --git a/tests/unittests/test-ccommandline.cpp b/tests/unittests/test-ccommandline.cpp index b18f69acc1..743cc61d4b 100644 --- a/tests/unittests/test-ccommandline.cpp +++ b/tests/unittests/test-ccommandline.cpp @@ -33,6 +33,7 @@ #include "_main/CCommandLine.h" #include "env/CSakuraEnvironment.h" +#include "util/string_ex.h" #include #include diff --git a/tests/unittests/test-cnative.cpp b/tests/unittests/test-cnative.cpp index 734c04cd78..0e6df6dbc8 100644 --- a/tests/unittests/test-cnative.cpp +++ b/tests/unittests/test-cnative.cpp @@ -804,11 +804,11 @@ TEST(CNativeW, GetKetaOfChar) TEST(CNativeW, GetHabaOfChar) { // 範囲外なら0を返す。 - EXPECT_EQ((Int)CNativeW::GetHabaOfChar(L"", 0, 1, GetCharWidthCache(), false), 0); + EXPECT_EQ((Int)CNativeW::GetHabaOfChar(L"", 0, 1, false, GetCharWidthCache()), 0); // 改行コードなら1を返す。 - EXPECT_EQ((Int)CNativeW::GetHabaOfChar(L"\r\n", 2, 0, GetCharWidthCache(), false), 1); - EXPECT_EQ((Int)CNativeW::GetHabaOfChar(L"\r\n", 2, 1, GetCharWidthCache(), false), 1); + EXPECT_EQ((Int)CNativeW::GetHabaOfChar(L"\r\n", 2, 0, false, GetCharWidthCache()), 1); + EXPECT_EQ((Int)CNativeW::GetHabaOfChar(L"\r\n", 2, 1, false, GetCharWidthCache()), 1); // CalcPxWidthByFont で計算した結果を返す。 class FakeCache1 : public CCharWidthCache { @@ -819,8 +819,8 @@ TEST(CNativeW, GetHabaOfChar) else return 0; } } cache1; - EXPECT_EQ((Int)CNativeW::GetHabaOfChar(L"ab", 2, 0, cache1, false), 10000); - EXPECT_EQ((Int)CNativeW::GetHabaOfChar(L"ab", 2, 1, cache1, false), 20000); + EXPECT_EQ((Int)CNativeW::GetHabaOfChar(L"ab", 2, 0, false, cache1), 10000); + EXPECT_EQ((Int)CNativeW::GetHabaOfChar(L"ab", 2, 1, false, cache1), 20000); // サロゲートペアの幅は CalcPxWidthByFont2 で計算する。 // 指定された位置が下位サロゲートなら0を返す。 @@ -830,8 +830,8 @@ TEST(CNativeW, GetHabaOfChar) return 20000; } } cache2; - EXPECT_EQ((Int)CNativeW::GetHabaOfChar(L"\xd83c\xdf38", 2, 0, cache2, false), 20000); - EXPECT_EQ((Int)CNativeW::GetHabaOfChar(L"\xd83c\xdf38", 2, 1, cache2, false), 0); + EXPECT_EQ((Int)CNativeW::GetHabaOfChar(L"\xd83c\xdf38", 2, 0, false, cache2), 20000); + EXPECT_EQ((Int)CNativeW::GetHabaOfChar(L"\xd83c\xdf38", 2, 1, false, cache2), 0); // サロゲートペアが片方しかないときは CalcPxWidthByFont で計算している。 class FakeCache3 : public CCharWidthCache { @@ -840,9 +840,9 @@ TEST(CNativeW, GetHabaOfChar) return 10000; } } cache3; - EXPECT_EQ((Int)CNativeW::GetHabaOfChar(L"\xd83cあ", 2, 0, cache3, false), 10000); - EXPECT_EQ((Int)CNativeW::GetHabaOfChar(L"\xdf38あ", 2, 0, cache3, false), 10000); - EXPECT_EQ((Int)CNativeW::GetHabaOfChar(L"あ\xdf38", 2, 1, cache3, false), 10000); + EXPECT_EQ((Int)CNativeW::GetHabaOfChar(L"\xd83cあ", 2, 0, false, cache3), 10000); + EXPECT_EQ((Int)CNativeW::GetHabaOfChar(L"\xdf38あ", 2, 0, false, cache3), 10000); + EXPECT_EQ((Int)CNativeW::GetHabaOfChar(L"あ\xdf38", 2, 1, false, cache3), 10000); } /*! From 263410ec1ae1d8010bc9f0313610f8561d9281bd Mon Sep 17 00:00:00 2001 From: berryzplus Date: Thu, 25 Feb 2021 23:59:39 +0900 Subject: [PATCH 0461/1024] =?UTF-8?q?=E3=82=AA=E3=83=96=E3=82=B8=E3=82=A7?= =?UTF-8?q?=E3=82=AF=E3=83=88=E3=82=B9=E3=83=A9=E3=82=A4=E3=82=B9=E3=81=8C?= =?UTF-8?q?=E7=99=BA=E7=94=9F=E3=81=97=E3=81=AA=E3=81=84=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=ABmove=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/doc/layout/CLayoutMgr.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/doc/layout/CLayoutMgr.cpp b/sakura_core/doc/layout/CLayoutMgr.cpp index 2d47b49e2b..6d28aab00d 100644 --- a/sakura_core/doc/layout/CLayoutMgr.cpp +++ b/sakura_core/doc/layout/CLayoutMgr.cpp @@ -1029,7 +1029,7 @@ void CLayoutMgr::LayoutToLogic( const CLayoutPoint& ptLayout, CLogicPoint* pptLo { CLogicPointEx ptEx; LayoutToLogicEx( ptLayout, &ptEx ); - *pptLogic = ptEx; + *pptLogic = std::move(ptEx); } // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // From 7425906948b2f027a3b3f681e4c71b0b3ec581bf Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Sun, 28 Feb 2021 03:47:47 +0900 Subject: [PATCH 0462/1024] =?UTF-8?q?DetectJisEscseq=20=E9=96=A2=E6=95=B0?= =?UTF-8?q?=E3=81=AE=E7=AC=AC2=E5=BC=95=E6=95=B0=E3=81=AE=E5=9E=8B?= =?UTF-8?q?=E3=82=92=20int=20=E3=81=8B=E3=82=89=20size=5Ft=20=E3=81=AB?= =?UTF-8?q?=E5=A4=89=E6=9B=B4=20DetectJisEscseq=E3=80=80=E9=96=A2=E6=95=B0?= =?UTF-8?q?=E5=91=BC=E3=81=B3=E5=87=BA=E3=81=97=E6=99=82=E3=81=AB=E5=BC=95?= =?UTF-8?q?=E6=95=B0=E3=81=AE=E5=9E=8B=E3=81=8C=E7=95=B0=E3=81=AA=E3=82=8B?= =?UTF-8?q?=E7=82=BA=E3=81=AB=E5=87=BA=E3=82=8B=E8=AD=A6=E5=91=8A=E3=82=92?= =?UTF-8?q?=E7=84=A1=E3=81=8F=E3=81=99=E3=81=9F=E3=82=81=E3=81=AB=E3=82=AD?= =?UTF-8?q?=E3=83=A3=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/codechecker.cpp | 4 ++-- sakura_core/charset/codechecker.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sakura_core/charset/codechecker.cpp b/sakura_core/charset/codechecker.cpp index 40555ce7b1..e79e9740e5 100644 --- a/sakura_core/charset/codechecker.cpp +++ b/sakura_core/charset/codechecker.cpp @@ -260,7 +260,7 @@ int CheckEucjpChar( const char* pS, const int nLen, ECharSet *peCharset ) 戻り値がゼロより大きい場合に限り,*pnEscType が更新される.\n pnEscType は NULL でも良い.\n */ -int DetectJisEscseq( const char* pS, const int nLen, EMyJisEscseq* peEscType ) +int DetectJisEscseq( const char* pS, const size_t nLen, EMyJisEscseq* peEscType ) { const char *pr, *pr_end; int expected_esc_len; @@ -368,7 +368,7 @@ int _CheckJisAnyPart( pr_end = pS + nLen; for( ; pr < pr_end; pr++ ){ - nesclen = DetectJisEscseq( pr, pr_end-pr, &emyesc ); // 次のエスケープシーケンスを検索 + nesclen = DetectJisEscseq( pr, size_t(pr_end-pr), &emyesc ); // 次のエスケープシーケンスを検索 if( emyesc != MYJISESC_NONE || nesclen > 0 ){ // 長さ nesclen の JIS エスケープシーケンス(種類 emyesc)が見つかった break; diff --git a/sakura_core/charset/codechecker.h b/sakura_core/charset/codechecker.h index adf3691fc6..4098a80787 100644 --- a/sakura_core/charset/codechecker.h +++ b/sakura_core/charset/codechecker.h @@ -410,7 +410,7 @@ inline int GuessEucjpCharsz( const char uc_ ){ /* --- ローカル文字コードチェック */ int CheckSjisChar( const char*, const int, ECharSet* ); int CheckEucjpChar( const char*, const int, ECharSet* ); -int DetectJisEscseq( const char*, const int, EMyJisEscseq* ); // JIS エスケープシーケンス検出器 +int DetectJisEscseq( const char*, const size_t, EMyJisEscseq* ); // JIS エスケープシーケンス検出器 int _CheckJisAnyPart( const char*, const int, const char **ppNextChar, EMyJisEscseq *peNextEsc, int *pnErrorCount, const int nType ); enum EJisChecker{ JISCHECK_ASCII7, From 0fe389e20d1adbff7fa9c50ce6500b899ee35c63 Mon Sep 17 00:00:00 2001 From: beru Date: Sun, 28 Feb 2021 20:02:00 +0900 Subject: [PATCH 0463/1024] Update sakura_core/charset/codechecker.cpp Co-authored-by: berryzplus --- sakura_core/charset/codechecker.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/charset/codechecker.cpp b/sakura_core/charset/codechecker.cpp index e79e9740e5..df1237cc24 100644 --- a/sakura_core/charset/codechecker.cpp +++ b/sakura_core/charset/codechecker.cpp @@ -368,7 +368,7 @@ int _CheckJisAnyPart( pr_end = pS + nLen; for( ; pr < pr_end; pr++ ){ - nesclen = DetectJisEscseq( pr, size_t(pr_end-pr), &emyesc ); // 次のエスケープシーケンスを検索 + nesclen = DetectJisEscseq( pr, pr_end-pr, &emyesc ); // 次のエスケープシーケンスを検索 if( emyesc != MYJISESC_NONE || nesclen > 0 ){ // 長さ nesclen の JIS エスケープシーケンス(種類 emyesc)が見つかった break; From 65a49116bb019a9726d4d1967ea0ae3c46e6f108 Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Sun, 28 Feb 2021 21:05:11 +0900 Subject: [PATCH 0464/1024] =?UTF-8?q?CheckSjisChar=20=E9=96=A2=E6=95=B0?= =?UTF-8?q?=E3=81=AE=E7=AC=AC2=E5=BC=95=E6=95=B0=E3=81=AE=E5=9E=8B?= =?UTF-8?q?=E3=82=92=20int=20=E3=81=8B=E3=82=89=20size=5Ft=20=E3=81=AB?= =?UTF-8?q?=E5=A4=89=E6=9B=B4=20x64=20=E3=83=93=E3=83=AB=E3=83=89=E3=81=A7?= =?UTF-8?q?=E8=AD=A6=E5=91=8A=E3=81=8C=E5=87=BA=E3=82=8B=E6=95=B0=E3=82=92?= =?UTF-8?q?=E6=B8=9B=E3=82=89=E3=81=99=E7=82=BA=E3=81=AE=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=20=E9=96=A2=E6=95=B0=E3=81=AE=E5=91=BC=E3=81=B3=E5=87=BA?= =?UTF-8?q?=E3=81=97=E5=85=83=E3=81=A7=E3=81=AF=20pr=5Fend-pr=20=E3=81=A8?= =?UTF-8?q?=E3=81=84=E3=81=86=E8=A8=98=E8=BF=B0=E3=81=A7=E3=83=90=E3=83=83?= =?UTF-8?q?=E3=83=95=E3=82=A1=E9=95=B7=E3=82=92=E6=B1=82=E3=82=81=E3=81=A6?= =?UTF-8?q?=E3=81=8A=E3=82=8A=E3=80=81=20pr=5Fend=20=E3=81=AE=E5=80=A4?= =?UTF-8?q?=E3=81=AE=E4=BD=9C=E3=82=8A=E6=96=B9=E3=81=8B=E3=82=89=E8=80=83?= =?UTF-8?q?=E3=81=88=E3=81=A6=E6=BC=94=E7=AE=97=E7=B5=90=E6=9E=9C=E3=81=8C?= =?UTF-8?q?=E8=B2=A0=E3=81=AE=E5=80=A4=E3=81=AB=E3=81=AA=E3=82=8B=E4=BA=8B?= =?UTF-8?q?=E3=81=AF=E7=84=A1=E3=81=84=E3=81=A8=E6=80=9D=E3=82=8F=E3=82=8C?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/codechecker.cpp | 2 +- sakura_core/charset/codechecker.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sakura_core/charset/codechecker.cpp b/sakura_core/charset/codechecker.cpp index df1237cc24..7169d55bab 100644 --- a/sakura_core/charset/codechecker.cpp +++ b/sakura_core/charset/codechecker.cpp @@ -141,7 +141,7 @@ const char* TABLE_JISESCDATA[] = { @return 確認した文字の長さ */ -int CheckSjisChar( const char* pS, const int nLen, ECharSet *peCharset ) +int CheckSjisChar( const char* pS, const size_t nLen, ECharSet *peCharset ) { unsigned char uc; diff --git a/sakura_core/charset/codechecker.h b/sakura_core/charset/codechecker.h index 4098a80787..118d4127bf 100644 --- a/sakura_core/charset/codechecker.h +++ b/sakura_core/charset/codechecker.h @@ -408,7 +408,7 @@ inline int GuessEucjpCharsz( const char uc_ ){ 文字長検査 */ /* --- ローカル文字コードチェック */ -int CheckSjisChar( const char*, const int, ECharSet* ); +int CheckSjisChar( const char*, const size_t, ECharSet* ); int CheckEucjpChar( const char*, const int, ECharSet* ); int DetectJisEscseq( const char*, const size_t, EMyJisEscseq* ); // JIS エスケープシーケンス検出器 int _CheckJisAnyPart( const char*, const int, const char **ppNextChar, EMyJisEscseq *peNextEsc, int *pnErrorCount, const int nType ); From 8467ee38942abcae343bd43b6b16bc3dc7c1ab32 Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Sun, 28 Feb 2021 23:23:10 +0900 Subject: [PATCH 0465/1024] =?UTF-8?q?CESI::=5FCheckUtf16Eol=20=E3=81=AE?= =?UTF-8?q?=E7=AC=AC2=E5=BC=95=E6=95=B0=E3=81=AE=E5=9E=8B=E3=82=92=20int?= =?UTF-8?q?=20=E3=81=8B=E3=82=89=20size=5Ft=20=E3=81=AB=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=20x64=20=E3=83=93=E3=83=AB=E3=83=89=E3=81=A7=E8=AD=A6=E5=91=8A?= =?UTF-8?q?=E3=81=8C=E5=87=BA=E3=82=8B=E6=95=B0=E3=82=92=E6=B8=9B=E3=82=89?= =?UTF-8?q?=E3=81=99=E7=82=BA=E3=81=AE=E5=A4=89=E6=9B=B4=20=E9=96=A2?= =?UTF-8?q?=E6=95=B0=E3=81=AE=E5=91=BC=E3=81=B3=E5=87=BA=E3=81=97=E5=85=83?= =?UTF-8?q?=E3=81=A7=E3=81=AF=20pr=5Fend-pr=20=E3=81=A8=E3=81=84=E3=81=86?= =?UTF-8?q?=E8=A8=98=E8=BF=B0=E3=81=A7=E3=83=90=E3=83=83=E3=83=95=E3=82=A1?= =?UTF-8?q?=E9=95=B7=E3=82=92=E6=B1=82=E3=82=81=E3=81=A6=E3=81=8A=E3=82=8A?= =?UTF-8?q?=E3=80=81=20pr=5Fend=20=E3=81=AE=E5=80=A4=E3=81=AE=E4=BD=9C?= =?UTF-8?q?=E3=82=8A=E6=96=B9=E3=81=8B=E3=82=89=E8=80=83=E3=81=88=E3=81=A6?= =?UTF-8?q?=E6=BC=94=E7=AE=97=E7=B5=90=E6=9E=9C=E3=81=8C=E8=B2=A0=E3=81=AE?= =?UTF-8?q?=E5=80=A4=E3=81=AB=E3=81=AA=E3=82=8B=E4=BA=8B=E3=81=AF=E7=84=A1?= =?UTF-8?q?=E3=81=84=E3=81=A8=E6=80=9D=E3=82=8F=E3=82=8C=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/CESI.cpp | 2 +- sakura_core/charset/CESI.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sakura_core/charset/CESI.cpp b/sakura_core/charset/CESI.cpp index 1a3af32bd0..2f68941c6d 100644 --- a/sakura_core/charset/CESI.cpp +++ b/sakura_core/charset/CESI.cpp @@ -523,7 +523,7 @@ void CESI::GetEncodingInfo_meta( const char* pS, const int nLen ) /*! UTF-16 チェッカ内で使う改行コード確認関数 */ -bool CESI::_CheckUtf16Eol( const char* pS, const int nLen, const bool bbig_endian ) +bool CESI::_CheckUtf16Eol( const char* pS, const size_t nLen, const bool bbig_endian ) { wchar_t wc0; wchar_t wc1; diff --git a/sakura_core/charset/CESI.h b/sakura_core/charset/CESI.h index f09011d4fd..c9afb042b4 100644 --- a/sakura_core/charset/CESI.h +++ b/sakura_core/charset/CESI.h @@ -149,9 +149,9 @@ class CESI { void GetEncodingInfo_latin1( const char* pS, const int nLen ); void GetEncodingInfo_meta( const char* pS, const int nLen ); - bool _CheckUtf16Eol( const char* pS, const int nLen, const bool bbig_endian ); - inline bool _CheckUtf16EolLE( const char* p, const int n ){ return _CheckUtf16Eol( p, n, false ); } - inline bool _CheckUtf16EolBE( const char* p, const int n ){ return _CheckUtf16Eol( p, n, true ); } + bool _CheckUtf16Eol( const char* pS, const size_t nLen, const bool bbig_endian ); + inline bool _CheckUtf16EolLE( const char* p, const size_t n ){ return _CheckUtf16Eol( p, n, false ); } + inline bool _CheckUtf16EolBE( const char* p, const size_t n ){ return _CheckUtf16Eol( p, n, true ); } public: // From 30655cd261a54a51cf90113eb261c19c7ae37499 Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Sun, 28 Feb 2021 21:42:49 +0900 Subject: [PATCH 0466/1024] =?UTF-8?q?CheckEucjpChar=20=E9=96=A2=E6=95=B0?= =?UTF-8?q?=E3=81=AE=E7=AC=AC2=E5=BC=95=E6=95=B0=E3=81=AE=E5=9E=8B?= =?UTF-8?q?=E3=82=92=20int=20=E3=81=8B=E3=82=89=20size=5Ft=20=E3=81=AB?= =?UTF-8?q?=E5=A4=89=E6=9B=B4=20x64=20=E3=83=93=E3=83=AB=E3=83=89=E3=81=A7?= =?UTF-8?q?=E8=AD=A6=E5=91=8A=E3=81=8C=E5=87=BA=E3=82=8B=E6=95=B0=E3=82=92?= =?UTF-8?q?=E6=B8=9B=E3=82=89=E3=81=99=E7=82=BA=E3=81=AE=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=20=E9=96=A2=E6=95=B0=E3=81=AE=E5=91=BC=E3=81=B3=E5=87=BA?= =?UTF-8?q?=E3=81=97=E5=85=83=E3=81=A7=E3=81=AF=20pr=5Fend-pr=20=E3=81=A8?= =?UTF-8?q?=E3=81=84=E3=81=86=E8=A8=98=E8=BF=B0=E3=81=A7=E3=83=90=E3=83=83?= =?UTF-8?q?=E3=83=95=E3=82=A1=E9=95=B7=E3=82=92=E6=B1=82=E3=82=81=E3=81=A6?= =?UTF-8?q?=E3=81=8A=E3=82=8A=E3=80=81=20pr=5Fend=20=E3=81=AE=E5=80=A4?= =?UTF-8?q?=E3=81=AE=E4=BD=9C=E3=82=8A=E6=96=B9=E3=81=8B=E3=82=89=E8=80=83?= =?UTF-8?q?=E3=81=88=E3=81=A6=E6=BC=94=E7=AE=97=E7=B5=90=E6=9E=9C=E3=81=8C?= =?UTF-8?q?=E8=B2=A0=E3=81=AE=E5=80=A4=E3=81=AB=E3=81=AA=E3=82=8B=E4=BA=8B?= =?UTF-8?q?=E3=81=AF=E7=84=A1=E3=81=84=E3=81=A8=E6=80=9D=E3=82=8F=E3=82=8C?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/codechecker.cpp | 2 +- sakura_core/charset/codechecker.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sakura_core/charset/codechecker.cpp b/sakura_core/charset/codechecker.cpp index 7169d55bab..12de27eef6 100644 --- a/sakura_core/charset/codechecker.cpp +++ b/sakura_core/charset/codechecker.cpp @@ -199,7 +199,7 @@ int CheckSjisChar( const char* pS, const size_t nLen, ECharSet *peCharset ) @date 2006.09.23 EUCJP 半角カタカナ判別が間違っていたのを修正.genta */ -int CheckEucjpChar( const char* pS, const int nLen, ECharSet *peCharset ) +int CheckEucjpChar( const char* pS, const size_t nLen, ECharSet *peCharset ) { unsigned char uc; diff --git a/sakura_core/charset/codechecker.h b/sakura_core/charset/codechecker.h index 118d4127bf..0dd98d31fe 100644 --- a/sakura_core/charset/codechecker.h +++ b/sakura_core/charset/codechecker.h @@ -409,7 +409,7 @@ inline int GuessEucjpCharsz( const char uc_ ){ */ /* --- ローカル文字コードチェック */ int CheckSjisChar( const char*, const size_t, ECharSet* ); -int CheckEucjpChar( const char*, const int, ECharSet* ); +int CheckEucjpChar( const char*, const size_t, ECharSet* ); int DetectJisEscseq( const char*, const size_t, EMyJisEscseq* ); // JIS エスケープシーケンス検出器 int _CheckJisAnyPart( const char*, const int, const char **ppNextChar, EMyJisEscseq *peNextEsc, int *pnErrorCount, const int nType ); enum EJisChecker{ From 0746f0ca5b0dbc566cb3bc11b228c7e411f09a88 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Tue, 2 Mar 2021 01:39:19 +0900 Subject: [PATCH 0467/1024] =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=81=8C?= =?UTF-8?q?=E7=95=B0=E5=B8=B8=E7=B5=82=E4=BA=86=E3=81=99=E3=82=8B=E5=AF=BE?= =?UTF-8?q?=E7=AD=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/_main/CProcessFactory.cpp | 2 +- tests/unittests/test-winmain.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sakura_core/_main/CProcessFactory.cpp b/sakura_core/_main/CProcessFactory.cpp index e9e881917a..70afae3ffc 100644 --- a/sakura_core/_main/CProcessFactory.cpp +++ b/sakura_core/_main/CProcessFactory.cpp @@ -258,7 +258,7 @@ bool CProcessFactory::WaitForInitializedControlProcess() return false; } DWORD dwRet; - dwRet = ::WaitForSingleObject( hEvent, 10000 ); // 最大10秒間待つ + dwRet = ::WaitForSingleObject( hEvent, 30000 ); if( WAIT_TIMEOUT == dwRet ){ // コントロールプロセスの初期化が終了しない ::CloseHandle( hEvent ); TopErrorMessage( NULL, L"エディタまたはシステムがビジー状態です。\nしばらく待って開きなおしてください。" ); diff --git a/tests/unittests/test-winmain.cpp b/tests/unittests/test-winmain.cpp index 24a4488781..b4827f6354 100644 --- a/tests/unittests/test-winmain.cpp +++ b/tests/unittests/test-winmain.cpp @@ -151,7 +151,7 @@ void CControlProcess_WaitForInitialized(std::wstring_view profileName) handleHolder eventHolder( hEvent ); // 初期化完了イベントを待つ - DWORD dwRet = ::WaitForSingleObject( hEvent, 10000 ); + DWORD dwRet = ::WaitForSingleObject( hEvent, 30000 ); if( WAIT_TIMEOUT == dwRet ){ throw std::runtime_error( "waitEvent is timeout." ); } From 1e177e0ea546395e0282b5729a7534057ae6f849 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Thu, 4 Mar 2021 00:01:46 +0900 Subject: [PATCH 0468/1024] =?UTF-8?q?=E4=BE=8B=E5=A4=96=E3=82=92=E5=8F=82?= =?UTF-8?q?=E7=85=A7=E3=81=A7=E3=82=AD=E3=83=A3=E3=83=83=E3=83=81=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CGrepAgent.cpp | 12 ++++++------ sakura_core/CReadManager.cpp | 4 ++-- sakura_core/CSaveAgent.cpp | 2 +- sakura_core/CSelectLang.cpp | 2 +- sakura_core/CWriteManager.cpp | 6 +++--- sakura_core/cmd/CViewCommander_File.cpp | 8 ++++---- sakura_core/doc/CDocFileOperation.cpp | 4 ++-- 7 files changed, 19 insertions(+), 19 deletions(-) diff --git a/sakura_core/CGrepAgent.cpp b/sakura_core/CGrepAgent.cpp index 0d7a2e28ba..92215675dd 100644 --- a/sakura_core/CGrepAgent.cpp +++ b/sakura_core/CGrepAgent.cpp @@ -1501,13 +1501,13 @@ int CGrepAgent::DoGrepFile( // ファイルを明示的に閉じるが、ここで閉じないときはデストラクタで閉じている cfl.FileClose(); } // try - catch( CError_FileOpen ){ + catch( const CError_FileOpen& ){ CNativeW str(LS(STR_GREP_ERR_FILEOPEN)); str.Replace(L"%s", pszFullPath); cmemMessage.AppendNativeData( str ); return 0; } - catch( CError_FileRead ){ + catch( const CError_FileRead& ){ CNativeW str(LS(STR_GREP_ERR_FILEREAD)); str.Replace(L"%s", pszFullPath); cmemMessage.AppendNativeData( str ); @@ -1555,7 +1555,7 @@ class CWriteData{ name += L".skrnew"; try{ out = new CBinaryOutputStream(name.c_str(), true); - }catch( CError_FileOpen ){ + }catch( const CError_FileOpen& ){ throw CError_WriteFileOpen(); } if( bBom ){ @@ -1940,18 +1940,18 @@ int CGrepAgent::DoGrepReplaceFile( cfl.FileClose(); output.Close(); } // try - catch( CError_FileOpen ){ + catch( const CError_FileOpen& ){ CNativeW str(LS(STR_GREP_ERR_FILEOPEN)); str.Replace(L"%s", pszFullPath); cmemMessage.AppendNativeData( str ); return 0; } - catch( CError_FileRead ){ + catch( const CError_FileRead& ){ CNativeW str(LS(STR_GREP_ERR_FILEREAD)); str.Replace(L"%s", pszFullPath); cmemMessage.AppendNativeData( str ); } - catch( CError_WriteFileOpen ){ + catch( const CError_WriteFileOpen& ){ std::wstring file = pszFullPath; file += L".skrnew"; CNativeW str(LS(STR_GREP_ERR_FILEWRITE)); diff --git a/sakura_core/CReadManager.cpp b/sakura_core/CReadManager.cpp index 094ce8dad9..f1640b2ac3 100644 --- a/sakura_core/CReadManager.cpp +++ b/sakura_core/CReadManager.cpp @@ -131,7 +131,7 @@ EConvertResult CReadManager::ReadFile_To_CDocLineMgr( // ファイルをクローズする cfl.FileClose(); } - catch(CAppExitException){ + catch(const CAppExitException&){ //WM_QUITが発生した return RESULT_FAILURE; } @@ -169,7 +169,7 @@ EConvertResult CReadManager::ReadFile_To_CDocLineMgr( ); } } - catch( CError_FileRead ){ + catch( const CError_FileRead& ){ eRet = RESULT_FAILURE; ErrorMessage( CEditWnd::getInstance()->GetHwnd(), diff --git a/sakura_core/CSaveAgent.cpp b/sakura_core/CSaveAgent.cpp index 1727909860..1b993f0745 100644 --- a/sakura_core/CSaveAgent.cpp +++ b/sakura_core/CSaveAgent.cpp @@ -80,7 +80,7 @@ ECallbackResult CSaveAgent::OnCheckSave(SSaveInfo* pSaveInfo) ::DeleteFile(pSaveInfo->cFilePath); } } - catch(CError_FileOpen){ + catch(const CError_FileOpen&){ // ※ たとえ上書き保存の場合でもここでの失敗では書込み禁止へは遷移しない if( bLock ) pcDoc->m_cDocFileOperation.DoFileLock(false); ErrorMessage( diff --git a/sakura_core/CSelectLang.cpp b/sakura_core/CSelectLang.cpp index 4a6a9d9616..148c518fcf 100644 --- a/sakura_core/CSelectLang.cpp +++ b/sakura_core/CSelectLang.cpp @@ -335,7 +335,7 @@ int CLoadString::CLoadStrBuffer::LoadString( UINT uid ) try{ pTemp = new WCHAR[nTemp]; } - catch(std::bad_alloc){ + catch(const std::bad_alloc&){ // メモリ割り当て例外(例外の発生する環境の場合でも旧来の処理にする) pTemp = NULL; } diff --git a/sakura_core/CWriteManager.cpp b/sakura_core/CWriteManager.cpp index 31a2e4edc7..233f449f3f 100644 --- a/sakura_core/CWriteManager.cpp +++ b/sakura_core/CWriteManager.cpp @@ -156,7 +156,7 @@ EConvertResult CWriteManager::WriteFile_From_CDocLineMgr( //ファイルクローズ out.Close(); } - catch(CError_FileOpen){ //########### 現時点では、この例外が発生した場合は正常に動作できない + catch(const CError_FileOpen&){ //########### 現時点では、この例外が発生した場合は正常に動作できない ErrorMessage( CEditWnd::getInstance()->GetHwnd(), LS(STR_SAVEAGENT_OTHER_APP), @@ -164,10 +164,10 @@ EConvertResult CWriteManager::WriteFile_From_CDocLineMgr( ); nRetVal = RESULT_FAILURE; } - catch(CError_FileWrite){ + catch(const CError_FileWrite&){ nRetVal = RESULT_FAILURE; } - catch(CAppExitException){ + catch(const CAppExitException&){ //中断検出 return RESULT_FAILURE; } diff --git a/sakura_core/cmd/CViewCommander_File.cpp b/sakura_core/cmd/CViewCommander_File.cpp index 0ec67b0062..7eef3a720e 100644 --- a/sakura_core/cmd/CViewCommander_File.cpp +++ b/sakura_core/cmd/CViewCommander_File.cpp @@ -743,7 +743,7 @@ BOOL CViewCommander::Command_PUTFILE( if( 0 < cDst.GetRawLength() ) out.Write(cDst.GetRawPtr(),cDst.GetRawLength()); } - catch(CError_FileOpen) + catch(const CError_FileOpen&) { WarningMessage( NULL, @@ -752,7 +752,7 @@ BOOL CViewCommander::Command_PUTFILE( ); bResult = FALSE; } - catch(CError_FileWrite) + catch(const CError_FileWrite&) { WarningMessage( NULL, @@ -902,11 +902,11 @@ BOOL CViewCommander::Command_INSFILE( LPCWSTR filename, ECodeType nCharCode, int // ファイルを明示的に閉じるが、ここで閉じないときはデストラクタで閉じている cfl.FileClose(); } // try - catch( CError_FileOpen ){ + catch( const CError_FileOpen& ){ WarningMessage( NULL, LS(STR_GREP_ERR_FILEOPEN), filename ); bResult = FALSE; } - catch( CError_FileRead ){ + catch( const CError_FileRead& ){ WarningMessage( NULL, LS(STR_ERR_DLGEDITVWCMDNW12) ); bResult = FALSE; } // 例外処理終わり diff --git a/sakura_core/doc/CDocFileOperation.cpp b/sakura_core/doc/CDocFileOperation.cpp index 0446e6e18d..1702593be8 100644 --- a/sakura_core/doc/CDocFileOperation.cpp +++ b/sakura_core/doc/CDocFileOperation.cpp @@ -119,7 +119,7 @@ bool CDocFileOperation::DoLoadFlow(SLoadInfo* pLoadInfo) eLoadResult = m_pcDocRef->NotifyLoad(*pLoadInfo); //本処理 m_pcDocRef->NotifyAfterLoad(*pLoadInfo); //後処理 } - catch(CFlowInterruption){ + catch(const CFlowInterruption&){ eLoadResult = LOADED_INTERRUPT; } catch(...){ @@ -355,7 +355,7 @@ bool CDocFileOperation::DoSaveFlow(SSaveInfo* pSaveInfo) //結果 eSaveResult = SAVED_OK; //###仮 } - catch(CFlowInterruption){ + catch(const CFlowInterruption&){ eSaveResult = SAVED_INTERRUPT; } catch(...){ From 2d474b67d1572d17aa909f515fb5c11d28dc62cb Mon Sep 17 00:00:00 2001 From: berryzplus Date: Thu, 4 Mar 2021 00:05:26 +0900 Subject: [PATCH 0469/1024] =?UTF-8?q?CCommandLine::GetFileNum=E3=81=AE?= =?UTF-8?q?=E6=88=BB=E3=82=8A=E5=80=A4=E3=82=92int=E3=81=AB=E3=82=AD?= =?UTF-8?q?=E3=83=A3=E3=82=B9=E3=83=88=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/_main/CCommandLine.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/_main/CCommandLine.h b/sakura_core/_main/CCommandLine.h index 2c7e02bf7c..f1f75a6d9c 100644 --- a/sakura_core/_main/CCommandLine.h +++ b/sakura_core/_main/CCommandLine.h @@ -84,7 +84,7 @@ class CCommandLine : public TSingleton { tagSIZE GetWindowSize() const noexcept { return { m_fi.m_nWindowSizeX, m_fi.m_nWindowSizeY }; } tagPOINT GetWindowOrigin() const noexcept { return { m_fi.m_nWindowOriginX, m_fi.m_nWindowOriginY }; } LPCWSTR GetOpenFile() const noexcept { return m_fi.m_szPath; } - int GetFileNum(void) const noexcept { return m_vFiles.size(); } + int GetFileNum(void) const noexcept { return int(m_vFiles.size()); } const WCHAR* GetFileName(int i) const noexcept { return i < GetFileNum() ? m_vFiles[i].c_str() : NULL; } void ClearFile(void) noexcept { m_vFiles.clear(); } LPCWSTR GetDocType() const noexcept { return m_fi.m_szDocType; } From 869743a8206371354b491e24054289b6831816a7 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Thu, 4 Mar 2021 01:24:06 +0900 Subject: [PATCH 0470/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C(=E3=82=AD=E3=83=A3?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=92static=5Fcast=E3=81=AB=E5=A4=89?= =?UTF-8?q?=E6=9B=B4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/_main/CCommandLine.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/_main/CCommandLine.h b/sakura_core/_main/CCommandLine.h index f1f75a6d9c..5fcf0ee5d1 100644 --- a/sakura_core/_main/CCommandLine.h +++ b/sakura_core/_main/CCommandLine.h @@ -84,7 +84,7 @@ class CCommandLine : public TSingleton { tagSIZE GetWindowSize() const noexcept { return { m_fi.m_nWindowSizeX, m_fi.m_nWindowSizeY }; } tagPOINT GetWindowOrigin() const noexcept { return { m_fi.m_nWindowOriginX, m_fi.m_nWindowOriginY }; } LPCWSTR GetOpenFile() const noexcept { return m_fi.m_szPath; } - int GetFileNum(void) const noexcept { return int(m_vFiles.size()); } + int GetFileNum(void) const noexcept { return static_cast(m_vFiles.size()); } const WCHAR* GetFileName(int i) const noexcept { return i < GetFileNum() ? m_vFiles[i].c_str() : NULL; } void ClearFile(void) noexcept { m_vFiles.clear(); } LPCWSTR GetDocType() const noexcept { return m_fi.m_szDocType; } From 19851dadf52d0f761d2009e2623be570a5c5502e Mon Sep 17 00:00:00 2001 From: berryzplus Date: Thu, 4 Mar 2021 20:17:09 +0900 Subject: [PATCH 0471/1024] =?UTF-8?q?StaticString::Length()=E3=81=AE?= =?UTF-8?q?=E6=88=BB=E3=82=8A=E5=80=A4=E3=82=92int=E3=81=AB=E3=82=AD?= =?UTF-8?q?=E3=83=A3=E3=82=B9=E3=83=88=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/StaticType.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/util/StaticType.h b/sakura_core/util/StaticType.h index 5db5438824..9519370855 100644 --- a/sakura_core/util/StaticType.h +++ b/sakura_core/util/StaticType.h @@ -120,7 +120,7 @@ class StaticString{ Me& operator = (const CHAR_TYPE* src){ Assign(src); return *this; } //各種メソッド - int Length() const{ return auto_strlen(m_szData); } + int Length() const { return static_cast(auto_strnlen(m_szData, BUFFER_COUNT)); } private: CHAR_TYPE m_szData[N_BUFFER_COUNT]; From a800327bb53a5f1bdb9e66c1eefd87b7f3a99a78 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Thu, 4 Mar 2021 20:55:31 +0900 Subject: [PATCH 0472/1024] =?UTF-8?q?COutputStream::Write=E3=81=AE?= =?UTF-8?q?=E7=AC=AC2=E5=BC=95=E6=95=B0=E3=82=92size=5Ft=E3=81=AB=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/io/CStream.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sakura_core/io/CStream.h b/sakura_core/io/CStream.h index 78eb56ce1d..3ccaa6c541 100644 --- a/sakura_core/io/CStream.h +++ b/sakura_core/io/CStream.h @@ -93,11 +93,11 @@ class COutputStream : public CStream{ } //! データを無変換で書き込む。戻り値は書き込んだバイト数。 - int Write(const void* pBuffer, int nSizeInBytes) + int Write(const void* pBuffer, size_t nSizeInBytes) { - int nRet = fwrite(pBuffer,1,nSizeInBytes,GetFp()); + size_t nRet = ::fwrite(pBuffer, 1, nSizeInBytes, GetFp()); if(nRet!=nSizeInBytes && IsExceptionMode())throw CError_FileWrite(); - return nRet; + return static_cast(nRet); } }; #endif /* SAKURA_CSTREAM_0083EDD7_A671_4315_801D_41FED1A2E3DA_H_ */ From cceffd26d752170de8030f5225a01919b7943923 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 5 Mar 2021 23:06:17 +0900 Subject: [PATCH 0473/1024] =?UTF-8?q?=E3=83=AD=E3=83=BC=E3=82=AB=E3=83=AB?= =?UTF-8?q?=E5=A4=89=E6=95=B0fCheck=E3=81=AE=E5=AE=A3=E8=A8=80=E5=9E=8B?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit チェックボタンのチェック状態を保持するローカル変数の宣言型が正しくないのを修正 誤) WPARAM (x64ビルドで64bit型) 正) int (x64ビルドで32bit型) ※Win32ビルドでは必ずしも誤りではありません。 CDlgSetCharSet::OnCbnSelChange CDlgSetCharSet::SetBOM OFNHookProc --- sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp | 2 +- sakura_core/dlg/CDlgSetCharSet.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp index bff41f766d..1678d39046 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp @@ -215,7 +215,7 @@ UINT_PTR CALLBACK OFNHookProc( int nIdx; int nIdxSel; int nWidth; - WPARAM fCheck; // Jul. 26, 2003 ryoji BOM状態用 + int fCheck; // Jul. 26, 2003 ryoji BOM状態用 // From Here Feb. 9, 2001 genta static const int nEolValueArr[] = { diff --git a/sakura_core/dlg/CDlgSetCharSet.cpp b/sakura_core/dlg/CDlgSetCharSet.cpp index c5d8d38297..f71712dc01 100644 --- a/sakura_core/dlg/CDlgSetCharSet.cpp +++ b/sakura_core/dlg/CDlgSetCharSet.cpp @@ -101,7 +101,7 @@ void CDlgSetCharSet::SetBOM( void ) { int nIdx; LRESULT lRes; - WPARAM fCheck; + int fCheck; nIdx = Combo_GetCurSel( m_hwndCharSet ); lRes = Combo_GetItemData( m_hwndCharSet, nIdx ); @@ -127,7 +127,7 @@ BOOL CDlgSetCharSet::OnCbnSelChange( HWND hwndCtl, int wID ) { int nIdx; LRESULT lRes; - WPARAM fCheck; + int fCheck; switch (wID) { // 文字コードの変更をBOMチェックボックスに反映 From 87d4f89782a18ee04f077c1f09739a200b87804c Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Sat, 6 Mar 2021 20:14:54 +0900 Subject: [PATCH 0474/1024] =?UTF-8?q?WindowsAPI=20DrawTextW=20=E9=96=A2?= =?UTF-8?q?=E6=95=B0=E3=81=AE=E7=AC=AC3=E5=BC=95=E6=95=B0=E3=81=AE?= =?UTF-8?q?=E5=9E=8B=E3=81=8C=20int=20=E3=81=AA=E3=81=AE=E3=81=A7=20size?= =?UTF-8?q?=5Ft=20=E5=9E=8B=E3=81=AE=E5=A4=89=E6=95=B0=E3=82=92=E6=B8=A1?= =?UTF-8?q?=E3=81=97=E3=81=A6=E3=81=84=E3=82=8B=E7=AE=87=E6=89=80=E3=81=A7?= =?UTF-8?q?=E3=81=AF=20int=20=E3=81=AB=E3=82=AD=E3=83=A3=E3=82=B9=E3=83=88?= =?UTF-8?q?=E3=81=99=E3=82=8B=E4=BA=8B=E3=81=A7=20x64=20=E3=83=93=E3=83=AB?= =?UTF-8?q?=E3=83=89=E3=81=A7=E3=81=AE=E8=AD=A6=E5=91=8A=E3=82=92=E6=B8=9B?= =?UTF-8?q?=E3=82=89=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgAbout.cpp | 2 +- sakura_core/uiparts/CMenuDrawer.cpp | 4 ++-- sakura_core/window/CTipWnd.cpp | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sakura_core/dlg/CDlgAbout.cpp b/sakura_core/dlg/CDlgAbout.cpp index edebc4f7a6..98f1c01bf2 100644 --- a/sakura_core/dlg/CDlgAbout.cpp +++ b/sakura_core/dlg/CDlgAbout.cpp @@ -539,7 +539,7 @@ bool CUrlWnd::OnSetText( _In_opt_z_ LPCWSTR pchText, _In_opt_ size_t cchText ) c // DrawText関数を使ってサイズを計測する // ※この処理は実際には描かない CMyRect rcText; - int retDrawText = ::DrawText( hDC, pchText, cchText, &rcText, DT_CALCRECT ); + int retDrawText = ::DrawText( hDC, pchText, int(cchText), &rcText, DT_CALCRECT ); // DCの後始末 ::SelectObject( hDC, hObj ); diff --git a/sakura_core/uiparts/CMenuDrawer.cpp b/sakura_core/uiparts/CMenuDrawer.cpp index b17559a623..97aa5bdd55 100644 --- a/sakura_core/uiparts/CMenuDrawer.cpp +++ b/sakura_core/uiparts/CMenuDrawer.cpp @@ -1163,7 +1163,7 @@ void CMenuDrawer::DrawItem( DRAWITEMSTRUCT* lpdis ) ::DrawText( hdc, pszItemStr, - j, + int(j), &rcText, DT_LEFT | DT_VCENTER | DT_SINGLELINE ); @@ -1172,7 +1172,7 @@ void CMenuDrawer::DrawItem( DRAWITEMSTRUCT* lpdis ) ::DrawText( hdc, &pszItemStr[j + 1], - nItemStrLen - ( j + 1 ), + int(nItemStrLen - ( j + 1 )), &rcText, DT_RIGHT | DT_VCENTER | DT_SINGLELINE ); diff --git a/sakura_core/window/CTipWnd.cpp b/sakura_core/window/CTipWnd.cpp index f14e99cd17..c9e8b55129 100644 --- a/sakura_core/window/CTipWnd.cpp +++ b/sakura_core/window/CTipWnd.cpp @@ -180,7 +180,7 @@ void CTipWnd::ComputeWindowSize( rc.SetXYWH( 0, 0, cxScreen, 0 ); // テキスト描画に必要な矩形を計測する - ::DrawText( hdc, &pszText[nLineBgn], i - nLineBgn, &rc, + ::DrawText( hdc, &pszText[nLineBgn], int(i - nLineBgn), &rc, DT_CALCRECT | DT_WORDBREAK | DT_EXPANDTABS | DT_EXTERNALLEADING ); @@ -257,7 +257,7 @@ void CTipWnd::DrawTipText( // 計測対象の文字列がブランクでない場合 if ( 0 < i - nLineBgn ) { // 指定されたテキストを描画する - nHeight = ::DrawText( hdc, &pszText[nLineBgn], i - nLineBgn, &rc, + nHeight = ::DrawText( hdc, &pszText[nLineBgn], int(i - nLineBgn), &rc, DT_WORDBREAK | DT_EXPANDTABS | DT_EXTERNALLEADING ); }else{ From 9673760534c0f9e9fcc54809b5e60bf6eec59e2b Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Sat, 6 Mar 2021 22:48:20 +0900 Subject: [PATCH 0475/1024] use static_cast --- sakura_core/dlg/CDlgAbout.cpp | 2 +- sakura_core/uiparts/CMenuDrawer.cpp | 4 ++-- sakura_core/window/CTipWnd.cpp | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sakura_core/dlg/CDlgAbout.cpp b/sakura_core/dlg/CDlgAbout.cpp index 98f1c01bf2..d88e2ac48f 100644 --- a/sakura_core/dlg/CDlgAbout.cpp +++ b/sakura_core/dlg/CDlgAbout.cpp @@ -539,7 +539,7 @@ bool CUrlWnd::OnSetText( _In_opt_z_ LPCWSTR pchText, _In_opt_ size_t cchText ) c // DrawText関数を使ってサイズを計測する // ※この処理は実際には描かない CMyRect rcText; - int retDrawText = ::DrawText( hDC, pchText, int(cchText), &rcText, DT_CALCRECT ); + int retDrawText = ::DrawText( hDC, pchText, static_cast(cchText), &rcText, DT_CALCRECT ); // DCの後始末 ::SelectObject( hDC, hObj ); diff --git a/sakura_core/uiparts/CMenuDrawer.cpp b/sakura_core/uiparts/CMenuDrawer.cpp index 97aa5bdd55..f62011763d 100644 --- a/sakura_core/uiparts/CMenuDrawer.cpp +++ b/sakura_core/uiparts/CMenuDrawer.cpp @@ -1163,7 +1163,7 @@ void CMenuDrawer::DrawItem( DRAWITEMSTRUCT* lpdis ) ::DrawText( hdc, pszItemStr, - int(j), + static_cast(j), &rcText, DT_LEFT | DT_VCENTER | DT_SINGLELINE ); @@ -1172,7 +1172,7 @@ void CMenuDrawer::DrawItem( DRAWITEMSTRUCT* lpdis ) ::DrawText( hdc, &pszItemStr[j + 1], - int(nItemStrLen - ( j + 1 )), + static_cast(nItemStrLen - ( j + 1 )), &rcText, DT_RIGHT | DT_VCENTER | DT_SINGLELINE ); diff --git a/sakura_core/window/CTipWnd.cpp b/sakura_core/window/CTipWnd.cpp index c9e8b55129..8bdd58ab2f 100644 --- a/sakura_core/window/CTipWnd.cpp +++ b/sakura_core/window/CTipWnd.cpp @@ -180,7 +180,7 @@ void CTipWnd::ComputeWindowSize( rc.SetXYWH( 0, 0, cxScreen, 0 ); // テキスト描画に必要な矩形を計測する - ::DrawText( hdc, &pszText[nLineBgn], int(i - nLineBgn), &rc, + ::DrawText( hdc, &pszText[nLineBgn], static_cast(i - nLineBgn), &rc, DT_CALCRECT | DT_WORDBREAK | DT_EXPANDTABS | DT_EXTERNALLEADING ); @@ -257,7 +257,7 @@ void CTipWnd::DrawTipText( // 計測対象の文字列がブランクでない場合 if ( 0 < i - nLineBgn ) { // 指定されたテキストを描画する - nHeight = ::DrawText( hdc, &pszText[nLineBgn], int(i - nLineBgn), &rc, + nHeight = ::DrawText( hdc, &pszText[nLineBgn], static_cast(i - nLineBgn), &rc, DT_WORDBREAK | DT_EXPANDTABS | DT_EXTERNALLEADING ); }else{ From 8349f5a6f06fe66af80471fbe6ce02227efc1dbd Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 6 Mar 2021 14:06:24 +0900 Subject: [PATCH 0476/1024] =?UTF-8?q?util/design=5Ftemplate.h=E3=81=AE?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/design_template.h | 2 + tests/unittests/test-design_template.cpp | 131 +++++++++++++++++++++++ tests/unittests/tests1.vcxproj | 1 + tests/unittests/tests1.vcxproj.filters | 3 + 4 files changed, 137 insertions(+) create mode 100644 tests/unittests/test-design_template.cpp diff --git a/sakura_core/util/design_template.h b/sakura_core/util/design_template.h index e7a138fc00..8cf7c5f23f 100644 --- a/sakura_core/util/design_template.h +++ b/sakura_core/util/design_template.h @@ -33,6 +33,8 @@ #define SAKURA_DESIGN_TEMPLATE_BBC57590_CED0_40D0_B719_F5A4522B8A56_H_ #pragma once +#include "debug/Debug2.h" + // http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Copy_Constructors // A macro to disallow the copy constructor and operator= functions #define DISALLOW_COPY_AND_ASSIGN(TypeName) \ diff --git a/tests/unittests/test-design_template.cpp b/tests/unittests/test-design_template.cpp new file mode 100644 index 0000000000..4dc40ac9ed --- /dev/null +++ b/tests/unittests/test-design_template.cpp @@ -0,0 +1,131 @@ +/*! @file */ +/* + Copyright (C) 2021 Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include + +#ifndef NOMINMAX +#define NOMINMAX +#endif /* #ifndef NOMINMAX */ + +#include +#include +#include + +#include "util/design_template.h" + + +/*! + * TSingleInstanceの挙動を検証するためのクラス + */ +class CSingleInstance : public TSingleInstance +{ +public: + CSingleInstance() = default; + virtual ~CSingleInstance() noexcept = default; +}; + +/*! + * @brief TSingleInstanceの挙動を検証するテスト + */ +TEST(CSingleInstance, CSingleInstance) +{ + // インスタンスが生成される前にgetInstanceするとNULLが返る + ASSERT_TRUE(CSingleInstance::getInstance() == nullptr); + + { + // 1つ目のインスタンスを確保する + CSingleInstance instance; + + // インスタンスが生成された後にgetInstanceするとNULL以外が返る + ASSERT_FALSE(CSingleInstance::getInstance() == nullptr); + + // 返却されるポインタは、ローカルで確保したインスタンスと等しい + ASSERT_EQ(&instance, CSingleInstance::getInstance()); + + // 2つ目のインスタンスを確保しようとするとassertで落ちる + ASSERT_EXIT({ CSingleInstance instance; }, ::testing::ExitedWithCode(1), ".*"); + } + + // インスタンスが破棄された後にgetInstanceするとNULLが返る + ASSERT_TRUE(CSingleInstance::getInstance() == nullptr); +} + +/*! + * TInstanceHolderの挙動を検証するためのクラス + */ +class CInstanceHolder : public TInstanceHolder +{ +public: + CInstanceHolder() = default; + virtual ~CInstanceHolder() noexcept = default; +}; + +/*! + * @brief TInstanceHolderの挙動を検証するテスト + */ +TEST(CInstanceHolder, CInstanceHolder) +{ + // インスタンスが生成される前にGetInstance(0)するとNULLが返る + ASSERT_TRUE(CInstanceHolder::GetInstance(0) == nullptr); + + // インスタンスの数は0で開始する + ASSERT_EQ(0, CInstanceHolder::GetInstanceCount()); + + { + // 1つ目のインスタンスを確保する + CInstanceHolder instance; + + // インスタンスが生成され後にGetInstance(0)するとNULL以外が返る + ASSERT_FALSE(CInstanceHolder::GetInstance(0) == nullptr); + + // 返却されるポインタは、ローカルで確保したインスタンスと等しい + ASSERT_EQ(&instance, CInstanceHolder::GetInstance(0)); + + // インスタンスの数は1になる + ASSERT_EQ(1, CInstanceHolder::GetInstanceCount()); + + { + // 2つ目のインスタンスを確保する + CInstanceHolder instance2; + + // インスタンスが生成された後にGetInstance(1)するとNULL以外が返る + ASSERT_FALSE(CInstanceHolder::GetInstance(1) == nullptr); + + // 返却されるポインタは、ローカルで確保したインスタンスと等しい + ASSERT_EQ(&instance2, CInstanceHolder::GetInstance(1)); + + // インスタンスの数は2になる + ASSERT_EQ(2, CInstanceHolder::GetInstanceCount()); + } + + // インスタンスが破棄された後は元に戻る + ASSERT_FALSE(CInstanceHolder::GetInstance(0) == nullptr); + ASSERT_EQ(&instance, CInstanceHolder::GetInstance(0)); + ASSERT_EQ(1, CInstanceHolder::GetInstanceCount()); + } + + // インスタンスが破棄された後は元に戻る + ASSERT_TRUE(CInstanceHolder::GetInstance(0) == nullptr); + ASSERT_EQ(0, CInstanceHolder::GetInstanceCount()); +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index 19d13da80c..eca03e0b08 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -117,6 +117,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index 4c77c58c2a..b6f2dd80fb 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -110,6 +110,9 @@ Test Files + + Test Files + From 060ea88ec116fa562c1efad0c7a39971a868f955 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 6 Mar 2021 14:27:35 +0900 Subject: [PATCH 0477/1024] =?UTF-8?q?TSingleInstance=E3=81=AB=E3=82=B3?= =?UTF-8?q?=E3=83=A1=E3=83=B3=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ややこしいので機能は変更しない。 --- sakura_core/util/design_template.h | 60 ++++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 16 deletions(-) diff --git a/sakura_core/util/design_template.h b/sakura_core/util/design_template.h index 8cf7c5f23f..c33e7e146b 100644 --- a/sakura_core/util/design_template.h +++ b/sakura_core/util/design_template.h @@ -64,34 +64,62 @@ class TSingleton{ }; /*! - 1個しかインスタンスが存在しないクラスからのインスタンス取得インターフェースをstaticで提供。 - Singletonパターンとは異なり、Instance()呼び出しにより、インスタンスが自動生成されない点に注意。 + シングルインスタンス - 2007.10.23 kobake 作成 -*/ + 1プロセスあたりのインスタンス数を制限するためのテンプレート。 + シングルインスタンスは複数インスタンスを生成しないクラスに適用する。 + シングルインスタンスの生成済みのインスタンスはstaticメソッドから取得できる。 + インスタンス自動生成は行わないので、インスタンス生成は手動で行うこと。 + + デザインパターンの「シングルトン」とは関係ないので、派生クラスは「状態」を持って良い。 + + @date 2007.10.23 kobake 作成 + */ template -class TSingleInstance{ +class TSingleInstance { +private: + static T* gm_instance; //!< シングルインスタンスを保持するポインタ + public: - //公開インターフェース - static T* getInstance(){ return gm_instance; } //!< 作成済みのインスタンスを返す。インスタンスが存在しなければ NULL。 + /*! + 作成済みのインスタンスを取得する + + @returns 作成済みのインスタンス + @retval nullptr インスタンスが未生成 + */ + [[nodiscard]] static T* getInstance() noexcept { return gm_instance; } protected: - //※2個以上のインスタンスは想定していません。assertが破綻を検出します。 + /*! + コンストラクタ + + staticメンバにインスタンスを記録する。 + */ TSingleInstance() { - assert(gm_instance==NULL); - gm_instance=static_cast(this); + assert(gm_instance == nullptr); + gm_instance = static_cast(this); } - ~TSingleInstance() + + /*! + デストラクタ + + staticメンバのポインタをクリアする。 + */ + virtual ~TSingleInstance() noexcept { - assert(gm_instance); - gm_instance=NULL; + gm_instance = nullptr; } -private: - static T* gm_instance; }; + +/*! + シングルインスタンスを保持するポインタ + + 1プロセスあたり1つのインスタンスだけを許可する機構で、 + TSingleInstance以外からはアクセスさせない。 + */ template -T* TSingleInstance::gm_instance = NULL; +T* TSingleInstance::gm_instance = nullptr; //記録もする #include From 3b209baeba8cbcd0aea3d77dfb4499e5ff54f81c Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 6 Mar 2021 14:42:27 +0900 Subject: [PATCH 0478/1024] =?UTF-8?q?TInstanceHolder=E3=81=AB=E3=82=B3?= =?UTF-8?q?=E3=83=A1=E3=83=B3=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ややこしいので機能は変更しない。 --- sakura_core/util/design_template.h | 88 ++++++++++++++++++++++-------- 1 file changed, 66 insertions(+), 22 deletions(-) diff --git a/sakura_core/util/design_template.h b/sakura_core/util/design_template.h index c33e7e146b..dfdac995da 100644 --- a/sakura_core/util/design_template.h +++ b/sakura_core/util/design_template.h @@ -33,6 +33,8 @@ #define SAKURA_DESIGN_TEMPLATE_BBC57590_CED0_40D0_B719_F5A4522B8A56_H_ #pragma once +#include + #include "debug/Debug2.h" // http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Copy_Constructors @@ -121,35 +123,77 @@ class TSingleInstance { template T* TSingleInstance::gm_instance = nullptr; -//記録もする -#include -template class TInstanceHolder{ +/*! + インスタンスホルダー + + プロセス内で生成されたインスタンスを記録するためのテンプレート。 + インスタンスホルダーは複数インスタンスを生成するクラスに適用する。 + インスタンスホルダーの生成済みのインスタンスはstaticメソッドから取得できる。 + インスタンス自動生成は行わないので、インスタンス生成は手動で行うこと。 + + デザインパターンの「シングルトン」とは関係ないので、派生クラスは「状態」を持って良い。 + */ +template +class TInstanceHolder { +private: + static std::vector gm_table; //!< インスタンスを保持する動的配列 + public: - TInstanceHolder() + /*! + 作成済みのインスタンス数を取得する + + @returns 作成済みのインスタンス数 + */ + [[nodiscard]] static size_t GetInstanceCount() noexcept { return gm_table.size(); } + + /*! + 作成済みのインスタンスを取得する + + @param [in]index + @returns 作成済みのインスタンス + @retval nullptr インスタンスが未生成 + */ + [[nodiscard]] static T* GetInstance(size_t index) noexcept { - gm_table.push_back(static_cast(this)); + if (gm_table.size() <= index || gm_table.empty()) { + return nullptr; + } + return gm_table[index]; } - virtual ~TInstanceHolder() + +protected: + /*! + コンストラクタ + + staticメンバにインスタンスを記録する。 + */ + TInstanceHolder() { - for(size_t i=0;i(this)){ - gm_table.erase(gm_table.begin()+i); - break; - } - } + gm_table.push_back(static_cast(this)); } - static int GetInstanceCount(){ return (int)gm_table.size(); } - static T* GetInstance(int nIndex) + + /*! + デストラクタ + + staticメンバからこのインスタンスのポインタを除去する。 + */ + virtual ~TInstanceHolder() noexcept { - if(nIndex>=0 && nIndex<(int)gm_table.size()){ - return gm_table[nIndex]; - }else{ - return 0; + if (const auto it = std::find(gm_table.cbegin(), gm_table.cend(), this); + it != gm_table.cend()) + { + gm_table.erase(it); } } - -private: - static std::vector gm_table; }; -template std::vector TInstanceHolder::gm_table; + +/*! + インスタンスを保持する動的配列 + + プロセスで生成したインスタンスを記録する機構で、 + TInstanceHolder以外からはアクセスさせない。 + */ +template +std::vector TInstanceHolder::gm_table; + #endif /* SAKURA_DESIGN_TEMPLATE_BBC57590_CED0_40D0_B719_F5A4522B8A56_H_ */ From 264c598bb63c5f995b12b13500f1337dca27d6ee Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 6 Mar 2021 14:53:55 +0900 Subject: [PATCH 0479/1024] =?UTF-8?q?TSingleInstance=E3=82=92=E3=82=B3?= =?UTF-8?q?=E3=83=94=E3=83=BC=E7=A6=81=E6=AD=A2=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/design_template.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sakura_core/util/design_template.h b/sakura_core/util/design_template.h index dfdac995da..be8f6914b5 100644 --- a/sakura_core/util/design_template.h +++ b/sakura_core/util/design_template.h @@ -80,6 +80,8 @@ class TSingleton{ template class TSingleInstance { private: + using Me = TSingleInstance; + static T* gm_instance; //!< シングルインスタンスを保持するポインタ public: @@ -91,6 +93,11 @@ class TSingleInstance { */ [[nodiscard]] static T* getInstance() noexcept { return gm_instance; } + TSingleInstance(const Me&) = delete; + Me& operator = (const Me&) = delete; + TSingleInstance(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; + protected: /*! コンストラクタ From db2c2507bba598321f36edbdd6b4825392860268 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 6 Mar 2021 14:56:27 +0900 Subject: [PATCH 0480/1024] =?UTF-8?q?TInstanceHolder=E3=82=92=E3=82=B3?= =?UTF-8?q?=E3=83=94=E3=83=BC=E7=A6=81=E6=AD=A2=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/design_template.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sakura_core/util/design_template.h b/sakura_core/util/design_template.h index be8f6914b5..6c161a05e9 100644 --- a/sakura_core/util/design_template.h +++ b/sakura_core/util/design_template.h @@ -143,6 +143,8 @@ T* TSingleInstance::gm_instance = nullptr; template class TInstanceHolder { private: + using Me = TInstanceHolder; + static std::vector gm_table; //!< インスタンスを保持する動的配列 public: @@ -168,6 +170,11 @@ class TInstanceHolder { return gm_table[index]; } + TInstanceHolder(const Me&) = delete; + Me& operator = (const Me&) = delete; + TInstanceHolder(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; + protected: /*! コンストラクタ From d869c66eff4bf398332ea8f649aa9aa7a876a161 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 6 Mar 2021 14:59:49 +0900 Subject: [PATCH 0481/1024] =?UTF-8?q?TInstanceHolder::getInstance=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/design_template.h | 8 ++++++++ tests/unittests/test-design_template.cpp | 5 +++++ 2 files changed, 13 insertions(+) diff --git a/sakura_core/util/design_template.h b/sakura_core/util/design_template.h index 6c161a05e9..9aef811e42 100644 --- a/sakura_core/util/design_template.h +++ b/sakura_core/util/design_template.h @@ -170,6 +170,14 @@ class TInstanceHolder { return gm_table[index]; } + /*! + 作成済みのインスタンスを取得する + + @returns 作成済みのインスタンス + @retval nullptr インスタンスが未生成 + */ + [[nodiscard]] static T* getInstance() noexcept { return GetInstance(0); } + TInstanceHolder(const Me&) = delete; Me& operator = (const Me&) = delete; TInstanceHolder(Me&&) noexcept = delete; diff --git a/tests/unittests/test-design_template.cpp b/tests/unittests/test-design_template.cpp index 4dc40ac9ed..90982c2889 100644 --- a/tests/unittests/test-design_template.cpp +++ b/tests/unittests/test-design_template.cpp @@ -86,6 +86,9 @@ class CInstanceHolder : public TInstanceHolder */ TEST(CInstanceHolder, CInstanceHolder) { + // インスタンスが生成される前にgetInstanceするとNULLが返る + ASSERT_TRUE(CSingleInstance::getInstance() == nullptr); + // インスタンスが生成される前にGetInstance(0)するとNULLが返る ASSERT_TRUE(CInstanceHolder::GetInstance(0) == nullptr); @@ -101,6 +104,7 @@ TEST(CInstanceHolder, CInstanceHolder) // 返却されるポインタは、ローカルで確保したインスタンスと等しい ASSERT_EQ(&instance, CInstanceHolder::GetInstance(0)); + ASSERT_EQ(&instance, CInstanceHolder::getInstance()); // インスタンスの数は1になる ASSERT_EQ(1, CInstanceHolder::GetInstanceCount()); @@ -126,6 +130,7 @@ TEST(CInstanceHolder, CInstanceHolder) } // インスタンスが破棄された後は元に戻る + ASSERT_TRUE(CSingleInstance::getInstance() == nullptr); ASSERT_TRUE(CInstanceHolder::GetInstance(0) == nullptr); ASSERT_EQ(0, CInstanceHolder::GetInstanceCount()); } From b48c51ee076fd7a169f17ae27b6ba213a107cc44 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 7 Mar 2021 01:42:13 +0900 Subject: [PATCH 0482/1024] =?UTF-8?q?TSingleInstance=E3=81=AE=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E3=82=B9=E3=82=BF=E3=83=B3=E3=82=B9=E9=87=8D=E8=A4=87?= =?UTF-8?q?=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF=E3=81=AB=E4=BE=8B=E5=A4=96?= =?UTF-8?q?=E3=82=92=E4=BD=BF=E3=81=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/design_template.h | 16 +++++++++++++--- tests/unittests/test-design_template.cpp | 4 ++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/sakura_core/util/design_template.h b/sakura_core/util/design_template.h index 9aef811e42..e2824c4c0c 100644 --- a/sakura_core/util/design_template.h +++ b/sakura_core/util/design_template.h @@ -33,10 +33,9 @@ #define SAKURA_DESIGN_TEMPLATE_BBC57590_CED0_40D0_B719_F5A4522B8A56_H_ #pragma once +#include #include -#include "debug/Debug2.h" - // http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Copy_Constructors // A macro to disallow the copy constructor and operator= functions #define DISALLOW_COPY_AND_ASSIGN(TypeName) \ @@ -65,6 +64,15 @@ class TSingleton{ DISALLOW_COPY_AND_ASSIGN(TSingleton); }; +/*! + 複数インスタンスを生成しようとしたときのエラー + */ +class multi_instance_not_allowed : public std::domain_error { +public: + multi_instance_not_allowed() + : std::domain_error("multi instance not allowed.") {} +}; + /*! シングルインスタンス @@ -106,7 +114,9 @@ class TSingleInstance { */ TSingleInstance() { - assert(gm_instance == nullptr); + if (gm_instance != nullptr) { + throw multi_instance_not_allowed(); + } gm_instance = static_cast(this); } diff --git a/tests/unittests/test-design_template.cpp b/tests/unittests/test-design_template.cpp index 90982c2889..6d06a8e12a 100644 --- a/tests/unittests/test-design_template.cpp +++ b/tests/unittests/test-design_template.cpp @@ -63,8 +63,8 @@ TEST(CSingleInstance, CSingleInstance) // 返却されるポインタは、ローカルで確保したインスタンスと等しい ASSERT_EQ(&instance, CSingleInstance::getInstance()); - // 2つ目のインスタンスを確保しようとするとassertで落ちる - ASSERT_EXIT({ CSingleInstance instance; }, ::testing::ExitedWithCode(1), ".*"); + // 2つ目のインスタンスを確保しようとすると例外が発生する + ASSERT_THROW({ CSingleInstance instance; }, std::domain_error); } // インスタンスが破棄された後にgetInstanceするとNULLが返る From e4a33226aa7dd6ce14b989c2a9c581f8be369e00 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 7 Mar 2021 14:26:04 +0900 Subject: [PATCH 0483/1024] =?UTF-8?q?=E3=82=B3=E3=83=94=E3=83=BC=E3=81=97?= =?UTF-8?q?=E3=81=9F=E6=96=87=E5=AD=97=E5=88=97=E3=81=AE=E5=BE=8C=E3=81=AB?= =?UTF-8?q?NUL=E7=B5=82=E7=AB=AF=E3=82=92=E4=BB=98=E5=8A=A0=E3=81=99?= =?UTF-8?q?=E3=82=8B=E5=87=A6=E7=90=86=E3=82=92=E9=99=A4=E5=8E=BB=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CBackupAgent.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/sakura_core/CBackupAgent.cpp b/sakura_core/CBackupAgent.cpp index 7eb8e15c98..867c04ffc1 100644 --- a/sakura_core/CBackupAgent.cpp +++ b/sakura_core/CBackupAgent.cpp @@ -257,7 +257,6 @@ int CBackupAgent::MakeBackUp( if( bup_setting.m_bBackUpDustBox && !dustflag ){ //@@@ 2002.03.23 ネットワーク・リムーバブルドライブでない WCHAR szDustPath[_MAX_PATH+1]; wcscpy(szDustPath, szPath); - szDustPath[wcslen(szDustPath) + 1] = L'\0'; SHFILEOPSTRUCT fos; fos.hwnd = CEditWnd::getInstance()->GetHwnd(); fos.wFunc = FO_DELETE; From 642cc008c6e7e3c2dfa928022b7031733a9e1b4d Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 7 Mar 2021 14:45:41 +0900 Subject: [PATCH 0484/1024] =?UTF-8?q?wcscpy(=E9=9D=9E=E3=82=BB=E3=82=AD?= =?UTF-8?q?=E3=83=A5=E3=82=A2=E7=89=88)=E3=81=8Csecurity=20hotspot?= =?UTF-8?q?=E3=81=AB=E3=81=AA=E3=81=A3=E3=81=9F=E3=81=AE=E3=81=A7=E5=AF=BE?= =?UTF-8?q?=E7=AD=96=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CBackupAgent.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/CBackupAgent.cpp b/sakura_core/CBackupAgent.cpp index 867c04ffc1..f3ce33bb45 100644 --- a/sakura_core/CBackupAgent.cpp +++ b/sakura_core/CBackupAgent.cpp @@ -256,7 +256,7 @@ int CBackupAgent::MakeBackUp( //@@@ 2001.12.11 start MIK if( bup_setting.m_bBackUpDustBox && !dustflag ){ //@@@ 2002.03.23 ネットワーク・リムーバブルドライブでない WCHAR szDustPath[_MAX_PATH+1]; - wcscpy(szDustPath, szPath); + ::wcscpy_s(szDustPath, szPath); SHFILEOPSTRUCT fos; fos.hwnd = CEditWnd::getInstance()->GetHwnd(); fos.wFunc = FO_DELETE; From 0f4ff8f05b743973ca924ca2a08b1422805bd415 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 7 Mar 2021 14:58:43 +0900 Subject: [PATCH 0485/1024] =?UTF-8?q?=E9=9B=A3=E8=A7=A3=E3=81=AA=E3=83=9D?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=82=BF=E6=93=8D=E4=BD=9C=E3=82=92=E6=A8=99?= =?UTF-8?q?=E6=BA=96=E7=9A=84=E3=81=AACRT=E9=96=A2=E6=95=B0=E5=91=BC?= =?UTF-8?q?=E5=87=BA=E3=81=A7=E7=BD=AE=E3=81=8D=E6=8F=9B=E3=81=88=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CBackupAgent.cpp | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/sakura_core/CBackupAgent.cpp b/sakura_core/CBackupAgent.cpp index f3ce33bb45..30d366eff7 100644 --- a/sakura_core/CBackupAgent.cpp +++ b/sakura_core/CBackupAgent.cpp @@ -425,18 +425,12 @@ bool CBackupAgent::FormatBackUpPath( // ファイル名のRotationは確認ダイアログの後で行う. { // Jun. 5, 2005 genta 拡張子を残せるように処理起点を操作する - WCHAR* ptr; if( bup_setting.GetBackupType() == 3 ){ - ptr = szExt; + // 元の拡張子をクリアする + ::wcscpy_s(szExt, L""); } - else { - ptr = szExt + wcslen( szExt ); - } - *ptr = L'.'; - *++ptr = bup_setting.GetBackupExtChar(); - *++ptr = L'0'; - *++ptr = L'0'; - *++ptr = L'\0'; + const WCHAR szBackupExt[] = { L'.', bup_setting.GetBackupExtChar(), L'0', L'0', 0 }; + ::wcscat_s(szExt, szBackupExt); } if( -1 == auto_snprintf_s( pBase, nBaseCount, L"%s%s", szFname, szExt ) ){ return false; From 33621fcfffe3f8305fda0310636f0ac7bf214450 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 7 Mar 2021 15:40:11 +0900 Subject: [PATCH 0486/1024] =?UTF-8?q?CFilePath::GetExt=E3=81=AE=E5=87=A6?= =?UTF-8?q?=E7=90=86=E6=A7=8B=E9=80=A0=E3=81=AB=E3=82=B3=E3=83=A1=E3=83=B3?= =?UTF-8?q?=E3=83=88=E3=82=92=E4=BB=98=E3=81=91=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/basis/CMyString.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/sakura_core/basis/CMyString.h b/sakura_core/basis/CMyString.h index 0d9df9c678..37608c2064 100644 --- a/sakura_core/basis/CMyString.h +++ b/sakura_core/basis/CMyString.h @@ -62,17 +62,25 @@ class CFilePath : public StaticString{ //拡張子を取得する LPCWSTR GetExt( bool bWithoutDot = false ) const { + // 文字列の先頭アドレスを取得 const WCHAR* head = c_str(); + + // 文字列の末尾アドレスを取得 const WCHAR* p = wcschr(head,L'\0') - 1; + + // 文字列末尾から逆方向に [\.\\/] を検索 while(p>=head){ if(*p==L'.')break; if(*p==L'\\')break; if(*p==L'/')break; p--; } + + // pが文字列範囲内で、\. を指している場合 if(p>=head && *p==L'.'){ return bWithoutDot ? p+1 : p; //bWithoutDot==trueならドットなしを返す }else{ + // 文字列末尾のアドレスを返す return wcschr(head,L'\0'); } } From 8a765a845b8d01bdcf6e5690680bb17f0b56690d Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 7 Mar 2021 15:49:17 +0900 Subject: [PATCH 0487/1024] =?UTF-8?q?CFilePath::GetExt=E3=81=AE=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-file.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/tests/unittests/test-file.cpp b/tests/unittests/test-file.cpp index b4fc49e539..95c6c8205f 100644 --- a/tests/unittests/test-file.cpp +++ b/tests/unittests/test-file.cpp @@ -443,3 +443,32 @@ TEST(file, GetIniFileNameForIO) std::filesystem::remove(iniPath); ASSERT_FALSE(fexist(iniPath.c_str())); } + +/*! + GetExtのテスト + */ +TEST(CFilePath, GetExt) +{ + CFilePath path; + + // 最も単純なパターン + path = L"test.txt"; + ASSERT_STREQ(L".txt", path.GetExt()); + ASSERT_STREQ(L"txt", path.GetExt(true)); + + // ファイルに拡張子がないパターン + path = L"lib\\.NET Core\\README"; + ASSERT_STREQ(L"", path.GetExt()); + ASSERT_STREQ(L"", path.GetExt(true)); + + // 拡張子がない場合に返却されるポインタ値の確認 + ASSERT_EQ(path.c_str() + path.Length(), path.GetExt()); + + // ファイルに拡張子がないパターン + path = L"lib/.NET Core/README"; + ASSERT_STREQ(L"", path.GetExt()); + ASSERT_STREQ(L"", path.GetExt(true)); + + // 拡張子がない場合に返却されるポインタ値の確認 + ASSERT_EQ(path.c_str() + path.Length(), path.GetExt()); +} From b25c87cd53b02eef43bab729abd0fdcbdb1fde58 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sat, 27 Feb 2021 14:48:27 +0900 Subject: [PATCH 0488/1024] =?UTF-8?q?CLayoutMgr::SetLayoutInfo=20=E3=81=A7?= =?UTF-8?q?=20CCharWidthCache=20=E3=82=92=E4=BD=BF=E7=94=A8=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/doc/layout/CLayoutMgr.cpp | 6 ++++-- sakura_core/doc/layout/CLayoutMgr.h | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/sakura_core/doc/layout/CLayoutMgr.cpp b/sakura_core/doc/layout/CLayoutMgr.cpp index 6d28aab00d..18a7201eea 100644 --- a/sakura_core/doc/layout/CLayoutMgr.cpp +++ b/sakura_core/doc/layout/CLayoutMgr.cpp @@ -32,6 +32,7 @@ #include "basis/SakuraBasis.h" #include "CSearchAgent.h" #include "debug/CRunningTimer.h" +#include "charset/charcode.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 生成と破棄 // @@ -117,7 +118,8 @@ void CLayoutMgr::SetLayoutInfo( int nTsvMode, CKetaXInt nMaxLineKetas, CLayoutXInt nCharLayoutXPerKeta, - const LOGFONT* pLogfont + const LOGFONT* pLogfont, + CCharWidthCache& cache ) { MY_RUNNINGTIMER( cRunningTimer, "CLayoutMgr::SetLayoutInfo" ); @@ -149,7 +151,7 @@ void CLayoutMgr::SetLayoutInfo( m_nCharLayoutXPerKeta = nCharLayoutXPerKeta; } // 最大文字幅の計算 - m_tsvInfo.m_nMaxCharLayoutX = WCODE::CalcPxWidthByFont(L'W'); + m_tsvInfo.m_nMaxCharLayoutX = cache.CalcPxWidthByFont(L'W'); if (m_tsvInfo.m_nMaxCharLayoutX < m_nCharLayoutXPerKeta) { m_tsvInfo.m_nMaxCharLayoutX = m_nCharLayoutXPerKeta; } diff --git a/sakura_core/doc/layout/CLayoutMgr.h b/sakura_core/doc/layout/CLayoutMgr.h index ab8ec28d08..e165503b08 100644 --- a/sakura_core/doc/layout/CLayoutMgr.h +++ b/sakura_core/doc/layout/CLayoutMgr.h @@ -38,6 +38,7 @@ #include "COpe.h" #include "util/container.h" #include "util/design_template.h" +#include "charset/charcode.h" #include "env/DLLSHAREDATA.h" class CBregexp;// 2002/2/10 aroka @@ -259,7 +260,8 @@ class CLayoutMgr : public CProgressSubject int nTsvMode, CKetaXInt nMaxLineKetas, CLayoutXInt nCharLayoutXPerKeta, - const LOGFONT* pLogfont + const LOGFONT* pLogfont, + CCharWidthCache& cache = GetCharWidthCache() ); /* 文字列置換 */ From f1ea1e054449ec42b590557175a5f12118329c64 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sat, 27 Feb 2021 16:21:18 +0900 Subject: [PATCH 0489/1024] =?UTF-8?q?=E6=96=87=E5=AD=97=E5=B9=85=E3=82=AD?= =?UTF-8?q?=E3=83=A3=E3=83=83=E3=82=B7=E3=83=A5=E3=81=AE=E3=82=B0=E3=83=AD?= =?UTF-8?q?=E3=83=BC=E3=83=90=E3=83=AB=E9=96=A2=E6=95=B0=E3=82=92=E5=89=8A?= =?UTF-8?q?=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/charcode.cpp | 17 ---------------- sakura_core/charset/charcode.h | 10 +++------- tests/unittests/test-charcode.cpp | 32 +++++++++++++++++-------------- 3 files changed, 21 insertions(+), 38 deletions(-) diff --git a/sakura_core/charset/charcode.cpp b/sakura_core/charset/charcode.cpp index e228f1a76f..91ebd54211 100644 --- a/sakura_core/charset/charcode.cpp +++ b/sakura_core/charset/charcode.cpp @@ -256,23 +256,6 @@ namespace WCODE { static CacheSelector selector; - //文字幅の動的計算。ピクセル幅 - int CalcPxWidthByFont(wchar_t c) - { - return selector.GetCache()->CalcPxWidthByFont(c); - } - - int CalcPxWidthByFont2(const wchar_t* pc) - { - return selector.GetCache()->CalcPxWidthByFont2(pc); - } - - //文字幅の動的計算。半角ならtrue。 - bool CalcHankakuByFont(wchar_t c) - { - return selector.GetCache()->CalcHankakuByFont(c); - } - // 文字の使用フォントを返す // @return 0:半角用 / 1:全角用 [[nodiscard]] int GetFontNo( wchar_t c ){ diff --git a/sakura_core/charset/charcode.h b/sakura_core/charset/charcode.h index 207ccfbe36..a16deee76d 100644 --- a/sakura_core/charset/charcode.h +++ b/sakura_core/charset/charcode.h @@ -207,13 +207,6 @@ namespace WCODE { return c>=0x2500 && c<=0x257F; } - - //!文字が半角かどうかを取得(DLLSHARE/フォント依存) - bool CalcHankakuByFont(wchar_t c); - //!文字のpx幅を取得(DLLSHARE/フォント依存) - int CalcPxWidthByFont(wchar_t c); - //!文字のpx幅を取得(DLLSHARE/フォント依存) - int CalcPxWidthByFont2(const wchar_t* c); } // 文字幅の動的計算用キャッシュ関連 @@ -254,8 +247,11 @@ class CCharWidthCache { void Clear(); [[nodiscard]] bool GetMultiFont() const { return m_bMultiFont; } + //!文字が半角かどうかを取得(DLLSHARE/フォント依存) virtual bool CalcHankakuByFont(wchar_t c) const; + //!文字のpx幅を取得(DLLSHARE/フォント依存) virtual int CalcPxWidthByFont(wchar_t c); + //!文字のpx幅を取得(DLLSHARE/フォント依存) virtual int CalcPxWidthByFont2(const wchar_t* pc2) const; private: diff --git a/tests/unittests/test-charcode.cpp b/tests/unittests/test-charcode.cpp index c03d569dfc..1a5c32d3c0 100644 --- a/tests/unittests/test-charcode.cpp +++ b/tests/unittests/test-charcode.cpp @@ -76,29 +76,30 @@ TEST_F(CharWidthCache, IsHankaku) // ここからは実行時のフォントを基に計算する文字。 SelectCharWidthCache(CWM_FONT_EDIT, CWM_CACHE_LOCAL); InitCharWidthCache(lf1); + CCharWidthCache& cache = GetCharWidthCache(); // 漢字・ハングル・外字の場合、コード表の一番目の文字の幅がすべての文字に適用される。 - bool kanjiWidth = WCODE::CalcHankakuByFont(L'一'); + bool kanjiWidth = cache.CalcHankakuByFont(L'一'); // CJK統合漢字。Unicode 5.1 以降の文字には未対応。 for (wchar_t ch = 0x4e00; ch <= 0x9fbb; ++ch) { - EXPECT_EQ(WCODE::IsHankaku(ch), kanjiWidth); + EXPECT_EQ(WCODE::IsHankaku(ch, cache), kanjiWidth); } // CJK統合漢字拡張A。Unicode 13.0 の追加分には対応していない。 for (wchar_t ch = 0x3400; ch <= 0x4d85; ++ch) { - EXPECT_EQ(WCODE::IsHankaku(ch), kanjiWidth); + EXPECT_EQ(WCODE::IsHankaku(ch, cache), kanjiWidth); } // ハングル - bool hangulWidth = WCODE::CalcHankakuByFont(L'가'); + bool hangulWidth = cache.CalcHankakuByFont(L'가'); for (wchar_t ch = 0xac00; ch <= 0xd7a3; ++ch) { - EXPECT_EQ(WCODE::IsHankaku(ch), hangulWidth); + EXPECT_EQ(WCODE::IsHankaku(ch, cache), hangulWidth); } // 外字 - bool privateUseWidth = WCODE::CalcHankakuByFont(0xe000); + bool privateUseWidth = cache.CalcHankakuByFont(0xe000); for (wchar_t ch = 0xe000; ch <= 0xe8ff; ++ch) { - EXPECT_EQ(WCODE::IsHankaku(ch), privateUseWidth); + EXPECT_EQ(WCODE::IsHankaku(ch, cache), privateUseWidth); } } @@ -114,21 +115,23 @@ TEST_F(CharWidthCache, CalcHankakuByFont) { SelectCharWidthCache(CWM_FONT_EDIT, CWM_CACHE_LOCAL); InitCharWidthCache(lf1); + CCharWidthCache& cache = GetCharWidthCache(); - EXPECT_TRUE(WCODE::CalcHankakuByFont(L'a')); - EXPECT_FALSE(WCODE::CalcHankakuByFont(L'あ')); + EXPECT_TRUE(cache.CalcHankakuByFont(L'a')); + EXPECT_FALSE(cache.CalcHankakuByFont(L'あ')); } TEST_F(CharWidthCache, CalcPxWidthByFont) { SelectCharWidthCache(CWM_FONT_EDIT, CWM_CACHE_LOCAL); InitCharWidthCache(lf1); + CCharWidthCache& cache = GetCharWidthCache(); SIZE size; GetTextExtentPoint32(dc, L"a", 1, &size); - EXPECT_EQ(WCODE::CalcPxWidthByFont(L'a'), size.cx); + EXPECT_EQ(cache.CalcPxWidthByFont(L'a'), size.cx); GetTextExtentPoint32(dc, L"あ", 1, &size); - EXPECT_EQ(WCODE::CalcPxWidthByFont(L'あ'), size.cx); + EXPECT_EQ(cache.CalcPxWidthByFont(L'あ'), size.cx); // コントロールコードの幅を普通に計算すると1pxになることがあるため、 // スペース・中黒の幅と比較して大きい方をとることになっている。 @@ -139,19 +142,20 @@ TEST_F(CharWidthCache, CalcPxWidthByFont) // 理由はわからないが、NULとそれ以外で違う文字の幅を採用している。 GetTextExtentPoint32(dc, L"\0", 1, &size); - EXPECT_EQ(WCODE::CalcPxWidthByFont('\0'), std::max(size.cx, sizeOfSpace.cx)); + EXPECT_EQ(cache.CalcPxWidthByFont('\0'), std::max(size.cx, sizeOfSpace.cx)); GetTextExtentPoint32(dc, L"\x01", 1, &size); - EXPECT_EQ(WCODE::CalcPxWidthByFont('\x01'), std::max(size.cx, sizeOfNakaguro.cx)); + EXPECT_EQ(cache.CalcPxWidthByFont('\x01'), std::max(size.cx, sizeOfNakaguro.cx)); } TEST_F(CharWidthCache, CalcPxWidthByFont2) { SelectCharWidthCache(CWM_FONT_EDIT, CWM_CACHE_LOCAL); InitCharWidthCache(lf1); + CCharWidthCache& cache = GetCharWidthCache(); SIZE size; GetTextExtentPoint32(dc, L"\xd83c\xdf38", 2, &size); - EXPECT_EQ(WCODE::CalcPxWidthByFont2(L"\xd83c\xdf38"), size.cx); + EXPECT_EQ(cache.CalcPxWidthByFont2(L"\xd83c\xdf38"), size.cx); } TEST_F(CharWidthCache, FontNo) From db1ec4d348c4f643b96244afe63703117ddb0b6c Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 7 Mar 2021 16:27:00 +0900 Subject: [PATCH 0490/1024] =?UTF-8?q?CFilePath::GetExt=E3=81=AE=E3=83=AA?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=AF=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/basis/CMyString.h | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/sakura_core/basis/CMyString.h b/sakura_core/basis/CMyString.h index 37608c2064..33f72dee7e 100644 --- a/sakura_core/basis/CMyString.h +++ b/sakura_core/basis/CMyString.h @@ -62,27 +62,22 @@ class CFilePath : public StaticString{ //拡張子を取得する LPCWSTR GetExt( bool bWithoutDot = false ) const { - // 文字列の先頭アドレスを取得 - const WCHAR* head = c_str(); - // 文字列の末尾アドレスを取得 - const WCHAR* p = wcschr(head,L'\0') - 1; + const WCHAR* tail = c_str() + Length(); - // 文字列末尾から逆方向に [\.\\/] を検索 - while(p>=head){ - if(*p==L'.')break; - if(*p==L'\\')break; - if(*p==L'/')break; - p--; + // 文字列末尾から逆方向に L'.' を検索 + if (const auto *p = ::wcsrchr(c_str(), L'.')) { + // L'.'で始まる文字列がパス区切りを含まない場合のみ「拡張子あり」と看做す + if (const bool hasExt = !::wcspbrk(p, L"\\/"); hasExt && !bWithoutDot) { + return p; + } + else if (hasExt && p < tail) { + return p + 1; //bWithoutDot==trueならドットなしを返す + } } - // pが文字列範囲内で、\. を指している場合 - if(p>=head && *p==L'.'){ - return bWithoutDot ? p+1 : p; //bWithoutDot==trueならドットなしを返す - }else{ - // 文字列末尾のアドレスを返す - return wcschr(head,L'\0'); - } + // 文字列末尾のアドレスを返す + return tail; } }; From d80d26837b83a13e53bc55518f5268371b54a22d Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 7 Mar 2021 18:05:46 +0900 Subject: [PATCH 0491/1024] =?UTF-8?q?CFilePath=E3=81=AB=E9=96=A2=E3=81=99?= =?UTF-8?q?=E3=82=8BCodeSmell=E3=82=92=E5=AF=BE=E7=AD=96=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/basis/CMyString.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/sakura_core/basis/CMyString.h b/sakura_core/basis/CMyString.h index 33f72dee7e..3003eced21 100644 --- a/sakura_core/basis/CMyString.h +++ b/sakura_core/basis/CMyString.h @@ -45,11 +45,11 @@ class CFilePath : public StaticString{ private: typedef StaticString Super; public: - CFilePath() : Super() { } + CFilePath() = default; CFilePath(const WCHAR* rhs) : Super(rhs) { } - bool IsValidPath() const{ return At(0)!=L'\0'; } - std::wstring GetDirPath() const + [[nodiscard]] bool IsValidPath() const{ return At(0)!=L'\0'; } + [[nodiscard]] std::wstring GetDirPath() const { WCHAR szDirPath[_MAX_PATH]; WCHAR szDrive[_MAX_DRIVE]; @@ -59,8 +59,9 @@ class CFilePath : public StaticString{ wcscat( szDirPath, szDir ); return szDirPath; } + //拡張子を取得する - LPCWSTR GetExt( bool bWithoutDot = false ) const + [[nodiscard]] LPCWSTR GetExt( bool bWithoutDot = false ) const { // 文字列の末尾アドレスを取得 const WCHAR* tail = c_str() + Length(); From 938578bee6ff028b66772c363cd576a6192e5ba8 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 8 Mar 2021 01:05:04 +0900 Subject: [PATCH 0492/1024] =?UTF-8?q?=E3=82=B9=E3=83=A9=E3=82=A4=E3=82=B9?= =?UTF-8?q?=E5=AF=BE=E7=AD=96=E3=80=81=E5=86=8D=E8=A9=A6=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 前回の対策がうまくいかなかったので再考。 --- sakura_core/doc/layout/CLayoutMgr.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/doc/layout/CLayoutMgr.cpp b/sakura_core/doc/layout/CLayoutMgr.cpp index 18a7201eea..5e08c876e4 100644 --- a/sakura_core/doc/layout/CLayoutMgr.cpp +++ b/sakura_core/doc/layout/CLayoutMgr.cpp @@ -1031,7 +1031,7 @@ void CLayoutMgr::LayoutToLogic( const CLayoutPoint& ptLayout, CLogicPoint* pptLo { CLogicPointEx ptEx; LayoutToLogicEx( ptLayout, &ptEx ); - *pptLogic = std::move(ptEx); + *pptLogic = static_cast(ptEx); } // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // From 021737381a5adf85b39203755285a796fda9e9e2 Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Mon, 8 Mar 2021 04:12:08 +0900 Subject: [PATCH 0493/1024] =?UTF-8?q?sakura=5Fcore/CKeyWordSetMgr.cpp=20?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E5=86=85=E3=81=AEx64?= =?UTF-8?q?=E3=83=93=E3=83=AB=E3=83=89=E6=99=82=E3=81=AE=E8=AD=A6=E5=91=8A?= =?UTF-8?q?=E3=82=92=E9=99=A4=E5=8E=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CKeyWordSetMgr.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sakura_core/CKeyWordSetMgr.cpp b/sakura_core/CKeyWordSetMgr.cpp index 8acf4f969d..46e13f080b 100644 --- a/sakura_core/CKeyWordSetMgr.cpp +++ b/sakura_core/CKeyWordSetMgr.cpp @@ -313,7 +313,7 @@ int CKeyWordSetMgr::DelKeyWord( int nIdx, int nIdx2 ) if( 0 >= m_nKeyWordNumArr[nIdx] ){ return 3; // 登録数が0なら上の条件で引っかかるのでここには来ない? } - int nDelKeywordLen = wcslen( m_szKeyWordArr[m_nStartIdx[nIdx] + nIdx2] ); + int nDelKeywordLen = static_cast(wcslen( m_szKeyWordArr[m_nStartIdx[nIdx] + nIdx2] )); int i; int endPos = m_nStartIdx[nIdx] + m_nKeyWordNumArr[nIdx] - 1; for( i = m_nStartIdx[nIdx] + nIdx2; i < endPos; ++i ){ @@ -370,7 +370,7 @@ void CKeyWordSetMgr::KeywordMaxLen(int nIdx) int nMaxLen = 0; const int nEnd = m_nStartIdx[nIdx] + m_nKeyWordNumArr[nIdx]; for( i = m_nStartIdx[nIdx]; i < nEnd; i++ ){ - len = wcslen( m_szKeyWordArr[i] ); + len = static_cast(wcslen( m_szKeyWordArr[i] )); if( nMaxLen < len ){ nMaxLen = len; } @@ -481,7 +481,7 @@ int CKeyWordSetMgr::SetKeyWordArr( const wchar_t* pTop = ptr; // キーワードの先頭位置を保存 while( *ptr != L'\t' && *ptr != L'\0' ) ++ptr; - int kwlen = ptr - pTop; + ptrdiff_t kwlen = ptr - pTop; wmemcpy( m_szKeyWordArr[i], pTop, kwlen ); m_szKeyWordArr[i][kwlen] = L'\0'; ++ptr; @@ -532,7 +532,7 @@ int CKeyWordSetMgr::CleanKeyWords( int nIdx ) bool bDelKey = false; //!< trueなら削除対象 // 重複するキーワードか const wchar_t* r = GetKeyWord( nIdx, i + 1 ); - unsigned int nKeyWordLen = wcslen( p ); + size_t nKeyWordLen = wcslen( p ); if( nKeyWordLen == wcslen( r ) ){ if( m_bKEYWORDCASEArr[nIdx] ){ if( 0 == wmemcmp( p, r, nKeyWordLen ) ){ From f9d26a164e33fda6555bc303ec817f2a08dcc26e Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Mon, 8 Mar 2021 23:19:09 +0900 Subject: [PATCH 0494/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CKeyWordSetMgr.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/CKeyWordSetMgr.cpp b/sakura_core/CKeyWordSetMgr.cpp index 46e13f080b..706f03aed2 100644 --- a/sakura_core/CKeyWordSetMgr.cpp +++ b/sakura_core/CKeyWordSetMgr.cpp @@ -313,7 +313,7 @@ int CKeyWordSetMgr::DelKeyWord( int nIdx, int nIdx2 ) if( 0 >= m_nKeyWordNumArr[nIdx] ){ return 3; // 登録数が0なら上の条件で引っかかるのでここには来ない? } - int nDelKeywordLen = static_cast(wcslen( m_szKeyWordArr[m_nStartIdx[nIdx] + nIdx2] )); + size_t nDelKeywordLen = wcslen( m_szKeyWordArr[m_nStartIdx[nIdx] + nIdx2] ); int i; int endPos = m_nStartIdx[nIdx] + m_nKeyWordNumArr[nIdx] - 1; for( i = m_nStartIdx[nIdx] + nIdx2; i < endPos; ++i ){ From 50a6ce58ebd044ae7cacedd0246d2749fb0fc4df Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Tue, 9 Mar 2021 01:07:47 +0900 Subject: [PATCH 0495/1024] =?UTF-8?q?sakura=5Fcore\view\colors\CColor=5FQu?= =?UTF-8?q?ote.cpp=E3=80=80=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E5=86=85?= =?UTF-8?q?=E3=81=AEx64=E3=83=93=E3=83=AB=E3=83=89=E6=99=82=E3=81=AE?= =?UTF-8?q?=E8=AD=A6=E5=91=8A=E3=82=92=E9=99=A4=E5=8E=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/colors/CColor_Quote.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sakura_core/view/colors/CColor_Quote.cpp b/sakura_core/view/colors/CColor_Quote.cpp index a91404087c..c5b12e0c74 100644 --- a/sakura_core/view/colors/CColor_Quote.cpp +++ b/sakura_core/view/colors/CColor_Quote.cpp @@ -150,7 +150,7 @@ bool CColor_Quote::BeginColor(const CStringRef& cStr, int nPos) }else{ m_tag.assign(L")\"", 2); } - m_nCOMMENTEND = Match_QuoteStr( m_tag.c_str(), m_tag.size(), i + 1, cStr, false ); + m_nCOMMENTEND = Match_QuoteStr( m_tag.c_str(), static_cast(m_tag.size()), i + 1, cStr, false ); m_nColorTypeIndex = 1; return true; } @@ -230,7 +230,7 @@ bool CColor_Quote::EndColor(const CStringRef& cStr, int nPos) m_nCOMMENTEND = Match_Quote( m_cQuote, nPos, cStr, m_nEscapeType ); break; case 1: - m_nCOMMENTEND = Match_QuoteStr( m_tag.c_str(), m_tag.size(), nPos, cStr, false ); + m_nCOMMENTEND = Match_QuoteStr( m_tag.c_str(), static_cast(m_tag.size()), nPos, cStr, false ); break; case 2: m_nCOMMENTEND = Match_Quote( m_cQuote, nPos, cStr, STRING_LITERAL_PLSQL ); From 8b3ccfc1f46eff38eeb029b4d8839c39e54e95a4 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Wed, 10 Mar 2021 21:41:26 +0900 Subject: [PATCH 0496/1024] =?UTF-8?q?CConvert=20=E3=81=AE=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/convert/CConvert.h | 6 + tests/unittests/test-cconvert.cpp | 382 +++++++++++++++++++++++++ tests/unittests/tests1.vcxproj | 1 + tests/unittests/tests1.vcxproj.filters | 3 + 4 files changed, 392 insertions(+) create mode 100644 tests/unittests/test-cconvert.cpp diff --git a/sakura_core/convert/CConvert.h b/sakura_core/convert/CConvert.h index fb21010c39..be109482ad 100644 --- a/sakura_core/convert/CConvert.h +++ b/sakura_core/convert/CConvert.h @@ -29,7 +29,13 @@ //2007.10.02 kobake CEditViewから分離 +#include "CSelectLang.h" #include "Funccode_enum.h" // EFunctionCode +#include "String_define.h" +#include "basis/SakuraBasis.h" +#include "util/MessageBoxF.h" + +class CNativeW; class CConvertMediator{ public: diff --git a/tests/unittests/test-cconvert.cpp b/tests/unittests/test-cconvert.cpp new file mode 100644 index 0000000000..98fe81d0cb --- /dev/null +++ b/tests/unittests/test-cconvert.cpp @@ -0,0 +1,382 @@ +/* + Copyright (C) 2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ + +#include +#include "convert/CConvert.h" +#include "convert/CConvert_HaneisuToZeneisu.h" +#include "convert/CConvert_HankataToZenhira.h" +#include "convert/CConvert_HankataToZenkata.h" +#include "convert/CConvert_SpaceToTab.h" +#include "convert/CConvert_TabToSpace.h" +#include "convert/CConvert_ToHankaku.h" +#include "convert/CConvert_ToLower.h" +#include "convert/CConvert_ToUpper.h" +#include "convert/CConvert_ToZenhira.h" +#include "convert/CConvert_ToZenkata.h" +#include "convert/CConvert_Trim.h" +#include "convert/CConvert_ZeneisuToHaneisu.h" +#include "convert/CConvert_ZenkataToHankata.h" +#include "mem/CNativeW.h" + +TEST(CConvert, ZenkataToHankata) +{ + CNativeW actual; + CNativeW expected; + + actual.SetString(L"アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲンァィゥェォッャュョヮヵヶヴガギグゲゴザジズゼゾダヂヅデドバビブベボヷヸヹヺパピプペポ。、「」・ "); + expected.SetString(L"アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワイエヲンァィゥェォッャュョワカケヴガギグゲゴザジズゼゾダヂヅデドバビブベボヷイ゙エ゙ヺパピプペポ。、「」・ "); + EXPECT_TRUE(CConvert_ZenkataToHankata().DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + // 長音符は前の文字がカタカナだった場合に限って変換する。 + // 長音符が連続する場合は前の文字と同様に処理する。 + actual.SetString(L"ーーナーーベーーパーー。ー"); + expected.SetString(L"ーーナーーベーーパーー。ー"); + EXPECT_TRUE(CConvert_ZenkataToHankata().DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + // 濁点・半濁点は清音の後に現れた場合のみ変換する。 + actual.SetString(L"゛゜\u3099\u309A"); + expected.SetString(L"゛゜\u3099\u309A"); + EXPECT_TRUE(CConvert_ZenkataToHankata().DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + actual.SetString(L"サ゛゛フ゜゜サ\u3099\u3099フ\u309A\u309A"); + expected.SetString(L"ザ゛プ゜ザ\u3099プ\u309A"); + EXPECT_TRUE(CConvert_ZenkataToHankata().DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + actual.SetString(L"ザ゛プ゜ザ\u3099プ\u309A"); + expected.SetString(L"ザ゛プ゜ザ\u3099プ\u309A"); + EXPECT_TRUE(CConvert_ZenkataToHankata().DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + actual.SetString(L"ー゛・゜"); + expected.SetString(L"ー゛・゜"); + EXPECT_TRUE(CConvert_ZenkataToHankata().DoConvert(&actual)); + EXPECT_EQ(actual, expected); +} + +TEST(CConvert, HankataToZenkata) +{ + CNativeW actual(L"アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョヴガギグゲゴザジズゼゾダヂヅデドバビブベボヷイ゙エ゙ヺパピプペポー゙゚。、「」・"); + CNativeW expected(L"アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョヴガギグゲゴザジズゼゾダヂヅデドバビブベボヷヸヹヺパピプペポー゛゜。、「」・"); + EXPECT_TRUE(CConvert_HankataToZenkata().DoConvert(&actual)); + EXPECT_EQ(actual, expected); +} + +TEST(CConvert, HankataToZenhira) +{ + CNativeW actual(L"アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョヴガギグゲゴザジズゼゾダヂヅデドバビブベボヷイ゙エ゙ヺパピプペポー゙゚。、「」・ "); + CNativeW expected(L"あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをんぁぃぅぇぉっゃゅょゔがぎぐげござじずぜぞだぢづでどばびぶべぼわ゛ヸヹを゛ぱぴぷぺぽー゛゜。、「」・ "); + EXPECT_TRUE(CConvert_HankataToZenhira().DoConvert(&actual)); + EXPECT_EQ(actual, expected); +} + +TEST(CConvert, HaneisuToZeneisu) +{ + CNativeW actual(L"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ,.+-*/%=|&^\\@;:\"`'<>(){}[]!?#$~_"); + CNativeW expected(L"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ,.+-*/%=|&^¥@;:”‘’<>(){}[]!?#$ ̄_"); + EXPECT_TRUE(CConvert_HaneisuToZeneisu().DoConvert(&actual)); + EXPECT_EQ(actual, expected); +} + +TEST(CConvert, ZeneisuToHaneisu) +{ + CNativeW actual(L"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ,.+-*/%=|&^¥@;:”‘’<>(){}[]!?#$ ̄_"); + CNativeW expected(L"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ,.+-*/%=|&^\\@;:\"`'<>(){}[]!?#$~_"); + EXPECT_TRUE(CConvert_ZeneisuToHaneisu().DoConvert(&actual)); + EXPECT_EQ(actual, expected); +} + +TEST(CConvert, ToLower) +{ + CNativeW actual; + CNativeW expected; + + actual.SetString(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ"); + expected.SetString(L"abcdefghijklmnopqrstuvwxyz"); + EXPECT_TRUE(CConvert_ToLower().DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + actual.SetString(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ"); + expected.SetString(L"abcdefghijklmnopqrstuvwxyz"); + EXPECT_TRUE(CConvert_ToLower().DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + // ギリシャ文字 + actual.SetString(L"ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ"); + expected.SetString(L"αβγδεζηθικλμνξοπρστυφχψω"); + EXPECT_TRUE(CConvert_ToLower().DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + // キリル文字 + actual.SetString(L"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"); + expected.SetString(L"абвгдежзийклмнопрстуфхцчшщъыьэюя"); + EXPECT_TRUE(CConvert_ToLower().DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + // 拡張キリル文字 + actual.SetString(L"ЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏ"); + expected.SetString(L"ѐёђѓєѕіїјљњћќѝўџ"); + EXPECT_TRUE(CConvert_ToLower().DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + // Latin-1 + actual.SetString(L"ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß"); + expected.SetString(L"àáâãäåæçèéêëìíîïðñòóôõö×øùúûüýþß"); + EXPECT_TRUE(CConvert_ToLower().DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + // Latin Extended-A + actual.SetString(L"ĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžſ"); + expected.SetString(L"āāăăąąććĉĉċċččďďđđēēĕĕėėęęěěĝĝğğġġģģĥĥħħĩĩīīĭĭįįiıijijĵĵķķĸĺĺļļľľŀŀłłńńņņňňʼnŋŋōōŏŏőőœœŕŕŗŗřřśśŝŝşşššţţťťŧŧũũūūŭŭůůűűųųŵŵŷŷÿźźżżžžſ"); + EXPECT_TRUE(CConvert_ToLower().DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + // Latin Extended-B + actual.SetString(L"ƀƁƂƃƄƅƆƇƈƉƊƋƌƍƎƏƐƑƒƓƔƕƖƗƘƙƚƛƜƝƞƟƠơƢƣƤƥƦƧƨƩƪƫƬƭƮƯưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿǀǁǂǃDŽDždžLJLjljNJNjnjǍǎǏǐǑǒǓǔǕǖǗǘǙǚǛǜǝǞǟǠǡǢǣǤǥǦǧǨǩǪǫǬǭǮǯǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿȀȁȂȃȄȅȆȇȈȉȊȋȌȍȎȏȐȑȒȓȔȕȖȗȘșȚțȜȝȞȟȠȡȢȣȤȥȦȧȨȩȪȫȬȭȮȯȰȱȲȳȴȵȶȷȸȹȺȻȼȽȾȿɀɁɂɃɄɅɆɇɈɉɊɋɌɍɎɏ"); + expected.SetString(L"ƁƁƃƃƅƅƆƈƈƊƊƌƌƍǝƏƐƒƒƓƔƕƖƗƙƙƚƛƜƝƞƟơơƣƣƥƥƦƨƨƩƪƫƭƭƮưưƱƲƴƴƶƶƷƹƹƺƻƽƽƾƿǀǁǂǃdždždžljljljnjnjnjǎǎǐǐǒǒǔǔǖǖǘǘǚǚǜǜǝǟǟǡǡǣǣǥǥǧǧǩǩǫǫǭǭǯǯǰdzdzdzǵǵƕƿǹǹǻǻǽǽǿǿȀȁȂȃȄȅȆȇȈȉȊȋȌȍȎȏȐȑȒȓȔȕȖȗȘșȚțȜȝȞȟȠȡȢȣȤȥȦȧȨȩȪȫȬȭȮȯȰȱȲȳȴȵȶȷȸȹȺȻȼȽȾȿɀɁɂɃɄɅɆɇɈɉɊɋɌɍɎɏ"); + EXPECT_TRUE(CConvert_ToLower().DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + // Latin Extended Additional + actual.SetString(L"ḀḁḂḃḄḅḆḇḈḉḊḋḌḍḎḏḐḑḒḓḔḕḖḗḘḙḚḛḜḝḞḟḠḡḢḣḤḥḦḧḨḩḪḫḬḭḮḯḰḱḲḳḴḵḶḷḸḹḺḻḼḽḾḿṀṁṂṃṄṅṆṇṈṉṊṋṌṍṎṏṐṑṒṓṔṕṖṗṘṙṚṛṜṝṞṟṠṡṢṣṤṥṦṧṨṩṪṫṬṭṮṯṰṱṲṳṴṵṶṷṸṹṺṻṼṽṾṿẀẁẂẃẄẅẆẇẈẉẊẋẌẍẎẏẐẑẒẓẔẕẖẗẘẙẚẛẜẝẞẟẠạẢảẤấẦầẨẩẪẫẬậẮắẰằẲẳẴẵẶặẸẹẺẻẼẽẾếỀềỂểỄễỆệỈỉỊịỌọỎỏỐốỒồỔổỖỗỘộỚớỜờỞởỠỡỢợỤụỦủỨứỪừỬửỮữỰựỲỳỴỵỶỷỸỹỺỻỼỽỾỿ"); + expected.SetString(L"ḁḁḃḃḅḅḇḇḉḉḋḋḍḍḏḏḑḑḓḓḕḕḗḗḙḙḛḛḝḝḟḟḡḡḣḣḥḥḧḧḩḩḫḫḭḭḯḯḱḱḳḳḵḵḷḷḹḹḻḻḽḽḿḿṁṁṃṃṅṅṇṇṉṉṋṋṍṍṏṏṑṑṓṓṕṕṗṗṙṙṛṛṝṝṟṟṡṡṣṣṥṥṧṧṩṩṫṫṭṭṯṯṱṱṳṳṵṵṷṷṹṹṻṻṽṽṿṿẁẁẃẃẅẅẇẇẉẉẋẋẍẍẏẏẑẑẓẓẕẕẖẗẘẙẚẛẜẝẞẟạạảảấấầầẩẩẫẫậậắắằằẳẳẵẵặặẹẹẻẻẽẽếếềềểểễễệệỉỉịịọọỏỏốốồồổổỗỗộộớớờờởởỡỡợợụụủủứứừừửửữữựựỳỳỵỵỷỷỹỹỻỻỽỽỿỿ"); + EXPECT_TRUE(CConvert_ToLower().DoConvert(&actual)); + EXPECT_EQ(actual, expected); +} + +TEST(CConvert, ToUpper) +{ + CNativeW actual; + CNativeW expected; + + actual.SetString(L"abcdefghijklmnopqrstuvwxyz"); + expected.SetString(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ"); + EXPECT_TRUE(CConvert_ToUpper().DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + actual.SetString(L"abcdefghijklmnopqrstuvwxyz"); + expected.SetString(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ"); + EXPECT_TRUE(CConvert_ToUpper().DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + // ギリシャ文字 + actual.SetString(L"αβγδεζηθικλμνξοπρστυφχψω"); + expected.SetString(L"ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ"); + EXPECT_TRUE(CConvert_ToUpper().DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + // キリル文字 + actual.SetString(L"абвгдежзийклмнопрстуфхцчшщъыьэюя"); + expected.SetString(L"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"); + EXPECT_TRUE(CConvert_ToUpper().DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + // 拡張キリル文字 + actual.SetString(L"ѐёђѓєѕіїјљњћќѝўџ"); + expected.SetString(L"ЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏ"); + EXPECT_TRUE(CConvert_ToUpper().DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + // Latin-1 + actual.SetString(L"àáâãäåæçèéêëìíîïðñòóôõö×øùúûüýþÿ"); + expected.SetString(L"ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞŸ"); + EXPECT_TRUE(CConvert_ToUpper().DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + // Latin Extended-A + actual.SetString(L"ĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžſ"); + expected.SetString(L"ĀĀĂĂĄĄĆĆĈĈĊĊČČĎĎĐĐĒĒĔĔĖĖĘĘĚĚĜĜĞĞĠĠĢĢĤĤĦĦĨĨĪĪĬĬĮĮİIIJIJĴĴĶĶĸĹĹĻĻĽĽĿĿŁŁŃŃŅŅŇŇʼnŊŊŌŌŎŎŐŐŒŒŔŔŖŖŘŘŚŚŜŜŞŞŠŠŢŢŤŤŦŦŨŨŪŪŬŬŮŮŰŰŲŲŴŴŶŶŸŹŹŻŻŽŽſ"); + EXPECT_TRUE(CConvert_ToUpper().DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + // Latin Extended-B + actual.SetString(L"ƀƁƂƃƄƅƆƇƈƉƊƋƌƍƎƏƐƑƒƓƔƕƖƗƘƙƚƛƜƝƞƟƠơƢƣƤƥƦƧƨƩƪƫƬƭƮƯưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿǀǁǂǃDŽDždžLJLjljNJNjnjǍǎǏǐǑǒǓǔǕǖǗǘǙǚǛǜǝǞǟǠǡǢǣǤǥǦǧǨǩǪǫǬǭǮǯǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿȀȁȂȃȄȅȆȇȈȉȊȋȌȍȎȏȐȑȒȓȔȕȖȗȘșȚțȜȝȞȟȠȡȢȣȤȥȦȧȨȩȪȫȬȭȮȯȰȱȲȳȴȵȶȷȸȹȺȻȼȽȾȿɀɁɂɃɄɅɆɇɈɉɊɋɌɍɎɏ"); + expected.SetString(L"ƀƀƂƂƄƄƆƇƇƉƉƋƋƍƎƏƐƑƑƓƔǶƖƗƘƘƚƛƜƝƞƟƠƠƢƢƤƤƦƧƧƩƪƫƬƬƮƯƯƱƲƳƳƵƵƷƸƸƺƻƼƼƾǷǀǁǂǃDŽDŽDŽLJLJLJNJNJNJǍǍǏǏǑǑǓǓǕǕǗǗǙǙǛǛƎǞǞǠǠǢǢǤǤǦǦǨǨǪǪǬǬǮǮǰDZDZDZǴǴǶǷǸǸǺǺǼǼǾǾȀȁȂȃȄȅȆȇȈȉȊȋȌȍȎȏȐȑȒȓȔȕȖȗȘșȚțȜȝȞȟȠȡȢȣȤȥȦȧȨȩȪȫȬȭȮȯȰȱȲȳȴȵȶȷȸȹȺȻȼȽȾȿɀɁɂɃɄɅɆɇɈɉɊɋɌɍɎɏ"); + EXPECT_TRUE(CConvert_ToUpper().DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + // Latin Extended Additional + actual.SetString(L"ḀḁḂḃḄḅḆḇḈḉḊḋḌḍḎḏḐḑḒḓḔḕḖḗḘḙḚḛḜḝḞḟḠḡḢḣḤḥḦḧḨḩḪḫḬḭḮḯḰḱḲḳḴḵḶḷḸḹḺḻḼḽḾḿṀṁṂṃṄṅṆṇṈṉṊṋṌṍṎṏṐṑṒṓṔṕṖṗṘṙṚṛṜṝṞṟṠṡṢṣṤṥṦṧṨṩṪṫṬṭṮṯṰṱṲṳṴṵṶṷṸṹṺṻṼṽṾṿẀẁẂẃẄẅẆẇẈẉẊẋẌẍẎẏẐẑẒẓẔẕẖẗẘẙẚẛẜẝẞẟẠạẢảẤấẦầẨẩẪẫẬậẮắẰằẲẳẴẵẶặẸẹẺẻẼẽẾếỀềỂểỄễỆệỈỉỊịỌọỎỏỐốỒồỔổỖỗỘộỚớỜờỞởỠỡỢợỤụỦủỨứỪừỬửỮữỰựỲỳỴỵỶỷỸỹỺỻỼỽỾỿ"); + expected.SetString(L"ḀḀḂḂḄḄḆḆḈḈḊḊḌḌḎḎḐḐḒḒḔḔḖḖḘḘḚḚḜḜḞḞḠḠḢḢḤḤḦḦḨḨḪḪḬḬḮḮḰḰḲḲḴḴḶḶḸḸḺḺḼḼḾḾṀṀṂṂṄṄṆṆṈṈṊṊṌṌṎṎṐṐṒṒṔṔṖṖṘṘṚṚṜṜṞṞṠṠṢṢṤṤṦṦṨṨṪṪṬṬṮṮṰṰṲṲṴṴṶṶṸṸṺṺṼṼṾṾẀẀẂẂẄẄẆẆẈẈẊẊẌẌẎẎẐẐẒẒẔẔẖẗẘẙẚẛẜẝẞẟẠẠẢẢẤẤẦẦẨẨẪẪẬẬẮẮẰẰẲẲẴẴẶẶẸẸẺẺẼẼẾẾỀỀỂỂỄỄỆỆỈỈỊỊỌỌỎỎỐỐỒỒỔỔỖỖỘỘỚỚỜỜỞỞỠỠỢỢỤỤỦỦỨỨỪỪỬỬỮỮỰỰỲỲỴỴỶỶỸỸỺỺỼỼỾỾ"); + EXPECT_TRUE(CConvert_ToUpper().DoConvert(&actual)); + EXPECT_EQ(actual, expected); +} + +TEST(CConvert, ToZenhira) +{ + CNativeW actual; + CNativeW expected; + + actual.SetString(L"アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョヴガギグゲゴザジズゼゾダヂヅデドバビブベボヷイ゙エ゙ヺパピプペポー゙゚。、「」・"); + expected.SetString(L"あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをんぁぃぅぇぉっゃゅょゔがぎぐげござじずぜぞだぢづでどばびぶべぼヷヸヹヺぱぴぷぺぽー゛゜。、「」・"); + EXPECT_TRUE(CConvert_ToZenhira().DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + actual.SetString(L"アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲンァィゥェォッャュョヮヵヶヴガギグゲゴザジズゼゾダヂヅデドバビブベボヷヸヹヺパピプペポ。、「」・゙゚。、「」・"); + expected.SetString(L"あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをんぁぃぅぇぉっゃゅょゎヵヶゔがぎぐげござじずぜぞだぢづでどばびぶべぼヷヸヹヺぱぴぷぺぽ。、「」・゛゜。、「」・"); + EXPECT_TRUE(CConvert_ToZenhira().DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + actual.SetString(L"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ,.+-*/%=|&^\\@;:\"`'<>(){}[]!?#$~_"); + expected.SetString(L"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ,.+-*/%=|&^¥@;:”‘’<>(){}[]!?#$ ̄_"); + EXPECT_TRUE(CConvert_ToZenhira().DoConvert(&actual)); + EXPECT_EQ(actual, expected); +} + +TEST(CConvert, ToZenkata) +{ + CNativeW actual; + CNativeW expected; + + actual.SetString(L"アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョヴガギグゲゴザジズゼゾダヂヅデドバビブベボヷイ゙エ゙ヺパピプペポー゙゚。、「」・"); + expected.SetString(L"アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョヴガギグゲゴザジズゼゾダヂヅデドバビブベボヷヸヹヺパピプペポー゛゜。、「」・"); + EXPECT_TRUE(CConvert_ToZenkata().DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + actual.SetString(L"ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをんゔゕゖゝゞ"); + expected.SetString(L"ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶヽヾ"); + EXPECT_TRUE(CConvert_ToZenkata().DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + actual.SetString(L"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ,.+-*/%=|&^\\@;:\"`'<>(){}[]!?#$~_"); + expected.SetString(L"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ,.+-*/%=|&^¥@;:”‘’<>(){}[]!?#$ ̄_"); + EXPECT_TRUE(CConvert_ToZenkata().DoConvert(&actual)); + EXPECT_EQ(actual, expected); +} + +TEST(CConvert, ToHankaku) +{ + CNativeW actual; + CNativeW expected; + + actual.SetString(L"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ,.+-*/%=|&^¥@;:”‘’<>(){}[]!?#$ ̄_"); + expected.SetString(L"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ,.+-*/%=|&^\\@;:\"`'<>(){}[]!?#$~_"); + EXPECT_TRUE(CConvert_ToHankaku().DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + actual.SetString(L"ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをんゔゕゖゝゞ"); + expected.SetString(L"ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロワワイエヲンヴカケゝゞ"); + EXPECT_TRUE(CConvert_ToHankaku().DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + actual.SetString(L"アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲンァィゥェォッャュョヮヵヶヴガギグゲゴザジズゼゾダヂヅデドバビブベボヷヸヹヺパピプペポヽヾ"); + expected.SetString(L"アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワイエヲンァィゥェォッャュョワカケヴガギグゲゴザジズゼゾダヂヅデドバビブベボヷイ゙エ゙ヺパピプペポヽヾ"); + EXPECT_TRUE(CConvert_ToHankaku().DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + actual.SetString(L"。、「」・゙゚。、「」・"); + expected.SetString(L"。、「」・゙゚。、「」・"); + EXPECT_TRUE(CConvert_ToHankaku().DoConvert(&actual)); + EXPECT_EQ(actual, expected); +} + +TEST(CConvert, TabToSpace) +{ + CNativeW actual; + CNativeW expected; + + actual.SetString(L""); + EXPECT_FALSE(CConvert_TabToSpace(4, 0, false).DoConvert(&actual)); + + // タブだけ変換 + actual.SetString(L"\t"); + expected.SetString(L" "); + EXPECT_TRUE(CConvert_TabToSpace(4, 0, false).DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + // タブを中途桁から変換 + actual.SetString(L"\t"); + expected.SetString(L" "); + EXPECT_TRUE(CConvert_TabToSpace(4, 3, false).DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + // タブの前に文字 + actual.SetString(L"a\t"); + expected.SetString(L"a "); + EXPECT_TRUE(CConvert_TabToSpace(4, 0, false).DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + // 複数行 + actual.SetString(L"\t\n\t"); + expected.SetString(L" \n "); + EXPECT_TRUE(CConvert_TabToSpace(4, 0, false).DoConvert(&actual)); + EXPECT_EQ(actual, expected); +} + +TEST(CConvert, SpaceToTab) +{ + CNativeW actual; + CNativeW expected; + + actual.SetString(L""); + EXPECT_FALSE(CConvert_SpaceToTab(4, 0, false).DoConvert(&actual)); + + // 空白をタブに変換 + actual.SetString(L" "); + expected.SetString(L"\t\t"); + EXPECT_TRUE(CConvert_SpaceToTab(4, 0, false).DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + // タブは変換しない + actual.SetString(L"\t\t"); + expected.SetString(L"\t\t"); + EXPECT_TRUE(CConvert_SpaceToTab(4, 0, false).DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + // 空白の数がタブ幅より少ない場合は変換しない + actual.SetString(L" "); + expected.SetString(L" "); + EXPECT_TRUE(CConvert_SpaceToTab(4, 0, false).DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + // 文字と空白の混在 + actual.SetString(L" aあ b "); + expected.SetString(L" aあ\t b "); + EXPECT_TRUE(CConvert_SpaceToTab(8, 0, false).DoConvert(&actual)); + EXPECT_EQ(actual, expected); +} + +TEST(CConvert, Trim) +{ + CNativeW actual; + CNativeW expected; + + actual.SetString(L""); + EXPECT_TRUE(CConvert_Trim(false, false).DoConvert(&actual)); + + // bLeftがtrueなら左の空白を削除する。 + actual.SetString(L" やよ "); + expected.SetString(L" やよ"); + EXPECT_TRUE(CConvert_Trim(false, false).DoConvert(&actual)); + EXPECT_EQ(actual, expected); + + // bLeftがfalseなら右の空白を削除する。 + actual.SetString(L" やよ "); + expected.SetString(L"やよ "); + EXPECT_TRUE(CConvert_Trim(true, false).DoConvert(&actual)); + EXPECT_EQ(actual, expected); +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index eca03e0b08..346a018f8c 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -108,6 +108,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index b6f2dd80fb..e36c4219ae 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -113,6 +113,9 @@ Test Files + + Test Files + From 52e83a36bc227bbabbb7b5fe9cb823c16a90af0c Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Thu, 11 Mar 2021 01:11:39 +0900 Subject: [PATCH 0497/1024] Always use Japanese locale when converting JIS<=>SJIS Fixes #1103 Use _mbcjistojms_l and _mbcjmstojis_l instead of _mbcjistojms and _mbcjmstojis, so that always use Japanese locale when using these functions. --- sakura_core/charset/CEuc.h | 6 ++--- sakura_core/charset/CJis.cpp | 10 ++++---- sakura_core/charset/codeutil.cpp | 43 +++++++++++++++++++++++++++++--- sakura_core/charset/codeutil.h | 2 ++ 4 files changed, 49 insertions(+), 12 deletions(-) diff --git a/sakura_core/charset/CEuc.h b/sakura_core/charset/CEuc.h index 0b7734e4e5..2d19f27f49 100644 --- a/sakura_core/charset/CEuc.h +++ b/sakura_core/charset/CEuc.h @@ -84,9 +84,9 @@ inline int CEuc::_EucjpToUni_char( const unsigned char* pSrc, unsigned short* pD czenkaku[0] = (pSrc[0] & 0x7f); czenkaku[1] = (pSrc[1] & 0x7f); // JIS → SJIS - ctemp = _mbcjistojms( (static_cast(czenkaku[0]) << 8) | czenkaku[1] ); + ctemp = _mbcjistojms_j( (static_cast(czenkaku[0]) << 8) | czenkaku[1] ); if( ctemp != 0 ){ - // NEC選定IBM拡張コードポイントををIBM拡張コードポイントにに変換 + // NEC選定IBM拡張コードポイントをIBM拡張コードポイントに変換 unsigned int ctemp_ = SjisFilter_nec2ibm( ctemp ); ctemp = ctemp_; // SJIS → Unicode @@ -160,7 +160,7 @@ inline int CEuc::_UniToEucjp_char( const unsigned short* pSrc, unsigned char* pD // SJIS -> JIS unsigned int ctemp_ = SjisFilter_ibm2nec( (static_cast(cbuf[0]) << 8) | cbuf[1] ); // < IBM拡張文字をNEC選定IBM拡張文字に変換 - ctemp = _mbcjmstojis( ctemp_ ); + ctemp = _mbcjmstojis_j( ctemp_ ); if( ctemp == 0 ){ berror = true; pDst[0] = '?'; diff --git a/sakura_core/charset/CJis.cpp b/sakura_core/charset/CJis.cpp index d6434d96d3..b4fb473c08 100644 --- a/sakura_core/charset/CJis.cpp +++ b/sakura_core/charset/CJis.cpp @@ -73,7 +73,7 @@ const char* CJis::TABLE_JISESCDATA[] = { #endif /*! - JIS の一ブロック(エスケープシーケンスとエスケープシーケンスの間の区間)を変換 + JIS の一ブロック(エスケープシーケンスとエスケープシーケンスの間の区間)を変換 eMyJisesc は、MYJISESC_HANKATA か MYJISESC_ZENKAKU。 */ @@ -131,7 +131,7 @@ int CJis::_JisToUni_block( const unsigned char* pSrc, const int nSrcLen, unsigne for( ; pr < pSrc+nSrcLen-1; pr += 2 ){ if( IsJisZen(reinterpret_cast(pr)) ){ // JIS -> SJIS - ctemp = _mbcjistojms( (static_cast(pr[0]) << 8) | pr[1] ); + ctemp = _mbcjistojms_j( (static_cast(pr[0]) << 8) | pr[1] ); if( ctemp != 0 ){ // 変換に成功。 // SJIS → Unicode @@ -328,7 +328,7 @@ int CJis::_SjisToJis_char( const unsigned char* pSrc, unsigned char* pDst, EChar // JIS -> SJIS ctemp_ = SjisFilter_basis( static_cast(pSrc[0] << 8) | pSrc[1] ); ctemp_ = SjisFilter_ibm2nec( ctemp_ ); - ctemp = _mbcjmstojis( ctemp_ ); + ctemp = _mbcjmstojis_j( ctemp_ ); if( ctemp != 0 ){ // 変換に成功。 pDst[0] = static_cast( (ctemp & 0x0000ff00) >> 8 ); @@ -498,8 +498,8 @@ EConvertResult CJis::UnicodeToHex(const wchar_t* cSrc, const int iSLen, WCHAR* p CNativeW cCharBuffer; EConvertResult res; int i; - WCHAR* pd; - unsigned char* ps; + WCHAR* pd; + unsigned char* ps; // 2008/6/21 Uchi if (psStatusbar->m_bDispUniInJis) { diff --git a/sakura_core/charset/codeutil.cpp b/sakura_core/charset/codeutil.cpp index cc410dd9f7..a9eeadec8a 100644 --- a/sakura_core/charset/codeutil.cpp +++ b/sakura_core/charset/codeutil.cpp @@ -37,9 +37,9 @@ Shift_JIS fa40~fc4b の範囲の文字は 8754~879a または ed40~eefc に 散在する文字に変換された後に,JISに変換されます. - + @param pszSrc [in] 変換する文字列へのポインタ (Shift JIS) - + @author すい @date 2002.10.03 1文字のみ扱い,変換まで行うように変更 genta */ @@ -47,7 +47,7 @@ unsigned int _mbcjmstojis_ex( unsigned int nSrc, bool* pbNonroundtrip ) { unsigned int tmpw; /* ← int が 16 bit 以上である事を期待しています。 */ bool bnonrt = false; - + unsigned char c0 = static_cast((nSrc & 0x0000ff00) >> 8); unsigned char c1 = static_cast(nSrc & 0x000000ff); @@ -78,12 +78,47 @@ unsigned int _mbcjmstojis_ex( unsigned int nSrc, bool* pbNonroundtrip ) else if( tmpw <= 0xfbfc ) { tmpw -= 0x0d1c; } /* fb9c~fbfc → ee80~eee0 (蕫~髙) */ else{ tmpw -= 0x0d5f; } /* fc40~fc4b → eee1~eeec (髜~黑) */ } - return _mbcjmstojis( tmpw ); + return _mbcjmstojis_j( tmpw ); } return 0; } #endif +static _locale_t ja_locale = nullptr; + +static void init_ja_locale() +{ + if (ja_locale == nullptr) { + ja_locale = _create_locale(LC_ALL, "Japanese_Japan.932"); + } +} + +/*! + @brief 常に日本語ロケールを使うSJIS→JIS変換 + + SJISコードをJISに変換する. + + @param c [in] 変換する文字 (Shift JIS) +*/ +unsigned int _mbcjmstojis_j( unsigned int c ) +{ + init_ja_locale(); + return _mbcjmstojis_l(c, ja_locale); +} + +/*! + @brief 常に日本語ロケールを使うJIS→SJIS変換 + + JISコードをSJISに変換する. + + @param c [in] 変換する文字 (JIS) +*/ +unsigned int _mbcjistojms_j( unsigned int c ) +{ + init_ja_locale(); + return _mbcjistojms_l(c, ja_locale); +} + /* 判別テーブル WinAPI 関数 WideCharToMultiByte の特殊な変換(相互変換できない変換)か 添え字の定義域:0x00 ~ 0x5f(=0x00ff - 0x00a0) diff --git a/sakura_core/charset/codeutil.h b/sakura_core/charset/codeutil.h index dad12d0915..d9858b725e 100644 --- a/sakura_core/charset/codeutil.h +++ b/sakura_core/charset/codeutil.h @@ -34,6 +34,8 @@ // 2008.11.10 引数と戻り値の型を _mbcjmstojis に似せる unsigned int _mbcjmstojis_ex( unsigned int ); #endif +unsigned int _mbcjmstojis_j( unsigned int ); +unsigned int _mbcjistojms_j( unsigned int ); unsigned int __fastcall SjisFilter_basis( const unsigned int ); unsigned int __fastcall SjisFilter_ibm2nec( const unsigned int ); From 7fc55487c3382b454916693f48b68349171af229 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Fri, 12 Mar 2021 11:23:15 +0900 Subject: [PATCH 0498/1024] =?UTF-8?q?=E5=A4=96=E9=83=A8=E3=82=B3=E3=83=9E?= =?UTF-8?q?=E3=83=B3=E3=83=89=E5=AE=9F=E8=A1=8C=E3=83=80=E3=82=A4=E3=82=A2?= =?UTF-8?q?=E3=83=AD=E3=82=B0=E3=81=AE=E3=82=B3=E3=83=9E=E3=83=B3=E3=83=89?= =?UTF-8?q?=E6=96=87=E5=AD=97=E5=88=97=E3=83=90=E3=83=83=E3=83=95=E3=82=A1?= =?UTF-8?q?=E9=95=B7=E3=81=8C1=E6=96=87=E5=AD=97=E5=A4=A7=E3=81=8D?= =?UTF-8?q?=E3=81=84=E4=B8=8D=E5=85=B7=E5=90=88=E3=81=AE=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgExec.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/dlg/CDlgExec.h b/sakura_core/dlg/CDlgExec.h index c82b8fe25c..3fb97e61e0 100644 --- a/sakura_core/dlg/CDlgExec.h +++ b/sakura_core/dlg/CDlgExec.h @@ -34,7 +34,7 @@ class CDlgExec final : public CDialog */ int DoModal(HINSTANCE hInstance, HWND hwndParent, LPARAM lParam); /* モーダルダイアログの表示 */ - WCHAR m_szCommand[1024 + 1]; /* コマンドライン */ + WCHAR m_szCommand[MAX_CMDLEN]; /* コマンドライン */ SFilePath m_szCurDir; /* カレントディレクトリ */ bool m_bEditable; /* 編集ウィンドウへの入力可能 */ // 2009.02.21 ryoji From b818f1e566174e476d7c6a04f3d26f5504862d63 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 12 Mar 2021 23:41:31 +0900 Subject: [PATCH 0499/1024] =?UTF-8?q?CNativeW::GetCharPrev=E3=81=AE?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-cnative.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/tests/unittests/test-cnative.cpp b/tests/unittests/test-cnative.cpp index 0e6df6dbc8..7bbdd4dc68 100644 --- a/tests/unittests/test-cnative.cpp +++ b/tests/unittests/test-cnative.cpp @@ -872,3 +872,32 @@ TEST(CNativeW, GetCharPrev) // ポインタを戻した結果が範囲外なら pData を返す。 EXPECT_EQ(CNativeW::GetCharPrev(text, 4, text), text); } + +/*! + * @brief GetCharPrevの潜在バグ評価 + */ +TEST(CNativeW, GetCharPrev_Bugs_Preview) +{ + // a、カラー絵文字「男性のシンボル」、x + constexpr wchar_t text[] = L"a\U0001F6B9x"; + + // text[0] = L'a' + // text[1] = (\U0001F6B9 の1ワード目) + // text[2] = (\U0001F6B9 の2ワード目) + // text[3] = L'x' + + // textのような配列であれば問題はない + EXPECT_EQ(&text[0], CNativeW::GetCharPrev(text, _countof(text) - 1, text + 1)); + EXPECT_EQ(&text[1], CNativeW::GetCharPrev(text, _countof(text) - 1, text + 2)); + EXPECT_EQ(&text[1], CNativeW::GetCharPrev(text, _countof(text) - 1, text + 3)); + EXPECT_EQ(&text[3], CNativeW::GetCharPrev(text, _countof(text) - 1, text + 4)); + + // 配列の一部を参照した、ないし、異常データを扱う場合に問題がある。 + const auto *pText = &text[2]; + + // これがバグ。範囲外アドレスを返してはならない。 + EXPECT_EQ(&text[1], CNativeW::GetCharPrev(pText, 2, pText)); + + // 対処方法 関数コメントにある仕様通りに修正する。 + // ASSERT_EQ(&text[2], CNativeW::GetCharPrev(pText, 2, pText)); +} From 40c413a46841950327982ca5e3b7a6c18c8c5779 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 12 Mar 2021 23:49:20 +0900 Subject: [PATCH 0500/1024] =?UTF-8?q?CNativeW::GetCharPrev=E3=81=AE?= =?UTF-8?q?=E7=AF=84=E5=9B=B2=E5=A4=96=E3=82=A2=E3=82=AF=E3=82=BB=E3=82=B9?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/mem/CNativeW.cpp | 35 +++++++++++++++++++------------- sakura_core/mem/CNativeW.h | 2 +- tests/unittests/test-cnative.cpp | 4 ++-- 3 files changed, 24 insertions(+), 17 deletions(-) diff --git a/sakura_core/mem/CNativeW.cpp b/sakura_core/mem/CNativeW.cpp index 84745e62de..5c6d717f9c 100644 --- a/sakura_core/mem/CNativeW.cpp +++ b/sakura_core/mem/CNativeW.cpp @@ -26,6 +26,9 @@ #include #include "charset/codechecker.h" #include "mem/CNativeW.h" + +#include + #include "CEol.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // @@ -446,22 +449,26 @@ const wchar_t* CNativeW::GetCharNext( const wchar_t* pData, int nDataLen, const return pNext; } -/* ポインタで示した文字の直前にある文字の位置を返します */ -/* 直前にある文字がバッファの先頭の位置を越える場合はpDataを返します */ -const wchar_t* CNativeW::GetCharPrev( const wchar_t* pData, int nDataLen, const wchar_t* pDataCurrent ) -{ - const wchar_t* pPrev = pDataCurrent - 1; - if( pPrev <= pData ){ - return pData; - } +/*! + ポインタで示した文字の直前にある文字の位置を返します + 直前にある文字がバッファの先頭の位置を越える場合はpDataを返します - // サロゲートペア対応 2008/7/6 Uchi - if (IsUTF16Low(*pPrev)) { - if (IsUTF16High(*(pPrev-1))) { - pPrev -= 1; + @date 2008/07/06 Uchi サロゲートペア対応 + */ +const wchar_t* CNativeW::GetCharPrev(const wchar_t* pData, size_t nDataLen, const wchar_t* pDataCurrent) +{ + if (const ptrdiff_t nDataPrev = pDataCurrent - pData - 1; + 0 < nDataPrev) + { + std::wstring_view data(pData, nDataLen); + if (1 < nDataPrev && + IsUTF16Low(data[nDataPrev]) && + IsUTF16High(data[nDataPrev - 1])) + { + return &data[nDataPrev - 1]; } + return &data[nDataPrev]; } - return pPrev; -// return ::CharPrev( pData, pDataCurrent ); + return pData; } diff --git a/sakura_core/mem/CNativeW.h b/sakura_core/mem/CNativeW.h index 7da3d92101..01ea9229de 100644 --- a/sakura_core/mem/CNativeW.h +++ b/sakura_core/mem/CNativeW.h @@ -171,7 +171,7 @@ class CNativeW final : public CNative{ static CKetaXInt GetKetaOfChar( const wchar_t* pData, int nDataLen, int nIdx, const CCharWidthCache& cache = GetCharWidthCache() ); static const wchar_t* GetCharNext( const wchar_t* pData, int nDataLen, const wchar_t* pDataCurrent ); //!< ポインタで示した文字の次にある文字の位置を返します - static const wchar_t* GetCharPrev( const wchar_t* pData, int nDataLen, const wchar_t* pDataCurrent ); //!< ポインタで示した文字の直前にある文字の位置を返します + static const wchar_t* GetCharPrev(const wchar_t* pData, size_t nDataLen, const wchar_t* pDataCurrent); //!< ポインタで示した文字の直前にある文字の位置を返します static CKetaXInt GetKetaOfChar( const CStringRef& cStr, int nIdx ) //!< 指定した位置の文字が半角何個分かを返す { diff --git a/tests/unittests/test-cnative.cpp b/tests/unittests/test-cnative.cpp index 7bbdd4dc68..e8423b24ca 100644 --- a/tests/unittests/test-cnative.cpp +++ b/tests/unittests/test-cnative.cpp @@ -896,8 +896,8 @@ TEST(CNativeW, GetCharPrev_Bugs_Preview) const auto *pText = &text[2]; // これがバグ。範囲外アドレスを返してはならない。 - EXPECT_EQ(&text[1], CNativeW::GetCharPrev(pText, 2, pText)); + // EXPECT_EQ(&text[1], CNativeW::GetCharPrev(pText, 2, pText)); // 対処方法 関数コメントにある仕様通りに修正する。 - // ASSERT_EQ(&text[2], CNativeW::GetCharPrev(pText, 2, pText)); + ASSERT_EQ(&text[2], CNativeW::GetCharPrev(pText, 2, pText)); } From d6c4b874efd273fbd9755cbc3afae9bba4c0d9e6 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sat, 13 Mar 2021 00:10:55 +0900 Subject: [PATCH 0501/1024] =?UTF-8?q?CDecode=20=E3=81=AE=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/convert/CDecode.h | 4 + tests/unittests/test-cdecode.cpp | 142 +++++++++++++++++++++++++ tests/unittests/tests1.vcxproj | 1 + tests/unittests/tests1.vcxproj.filters | 3 + 4 files changed, 150 insertions(+) create mode 100644 tests/unittests/test-cdecode.cpp diff --git a/sakura_core/convert/CDecode.h b/sakura_core/convert/CDecode.h index c183fd5705..38f8ea3fb6 100644 --- a/sakura_core/convert/CDecode.h +++ b/sakura_core/convert/CDecode.h @@ -30,6 +30,10 @@ #define SAKURA_CDECODE_2E6ED248_B211_48AB_BD69_032199189323_H_ #pragma once +#include "CSelectLang.h" +#include "String_define.h" +#include "mem/CNativeW.h" + class CDecode { public: virtual ~CDecode() { } diff --git a/tests/unittests/test-cdecode.cpp b/tests/unittests/test-cdecode.cpp new file mode 100644 index 0000000000..8f60161cad --- /dev/null +++ b/tests/unittests/test-cdecode.cpp @@ -0,0 +1,142 @@ +/* + Copyright (C) 2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ + +#include +#include +#include +#include "convert/CDecode.h" +#include "convert/CDecode_Base64Decode.h" +#include "convert/CDecode_UuDecode.h" + +struct DecoderTestCase { + const wchar_t* input; + const char* output; +}; + +TEST(CDecode, Base64) +{ + const DecoderTestCase testCases[] = { + {L"", ""}, + {L"cw==", "s"}, + {L"c2E=", "sa"}, + {L"c2Fr", "sak"}, + {L"c2FrdQ==", "saku"}, + {L"c2FrdXI=", "sakur"}, + {L"c2FrdXJh", "sakura"} + }; + CNativeW s; + CMemory m; + for (const auto& testCase : testCases) { + s.SetString(testCase.input); + EXPECT_TRUE(CDecode_Base64Decode().DoDecode(s, &m)); + EXPECT_STREQ(static_cast(m.GetRawPtr()), testCase.output); + } + + // 空白は無視する + s.SetString(L"c2Fr \t dQ=="); + EXPECT_TRUE(CDecode_Base64Decode().DoDecode(s, &m)); + EXPECT_STREQ(static_cast(m.GetRawPtr()), "saku"); + + // 異常な文字があったら変換を中止する + s.SetString(L"c2Fr?dQ=="); + EXPECT_FALSE(CDecode_Base64Decode().DoDecode(s, &m)); +} + +TEST(CDecode, uuencode) +{ + const DecoderTestCase testCases[] = { + {L"begin 666 test\r\n \r\nend\r\n", ""}, + {L"begin 666 test\r\n!

                    (m.GetRawPtr()), testCase.output); + + wchar_t fileName[_MAX_PATH]; + decoder.CopyFilename(fileName); + EXPECT_STREQ(fileName, L"test"); + } + + // ヘッダーおよびフッターの先頭と末尾の空白は無視する + s.SetString(L"\tbegin 666 test \r\n!

                    (m.GetRawPtr()), "s"); + + // 入力文字列が空の場合 + s.SetString(L""); + EXPECT_FALSE(CDecode_UuDecode().DoDecode(s, &m)); + + // 文字列が begin で始まっていない場合 + s.SetString(L"benign 666 test\r\n!

                    + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index e36c4219ae..eca9cf0f22 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -116,6 +116,9 @@ Test Files + + Test Files + From 1dc5b38ed113cc9daa91bc5a615c10432eaa80c5 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sun, 27 Sep 2020 02:54:16 +0900 Subject: [PATCH 0502/1024] =?UTF-8?q?SetGrepFolder=E5=87=A6=E7=90=86?= =?UTF-8?q?=E3=83=90=E3=83=83=E3=83=95=E3=82=A1=E3=82=AA=E3=83=BC=E3=83=90?= =?UTF-8?q?=E3=83=BC=E3=83=A9=E3=83=B3=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgGrep.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/sakura_core/dlg/CDlgGrep.cpp b/sakura_core/dlg/CDlgGrep.cpp index 13fc34a1f9..65a06368fc 100644 --- a/sakura_core/dlg/CDlgGrep.cpp +++ b/sakura_core/dlg/CDlgGrep.cpp @@ -913,11 +913,9 @@ LPVOID CDlgGrep::GetHelpIdTable(void) static void SetGrepFolder( HWND hwndCtrl, LPCWSTR folder ) { if( wcschr( folder, L';') ){ - WCHAR szQuoteFolder[MAX_PATH]; - szQuoteFolder[0] = L'"'; - wcscpy( szQuoteFolder + 1, folder ); - wcscat( szQuoteFolder, L"\"" ); - ::SetWindowText( hwndCtrl, szQuoteFolder ); + CNativeW strQuoteFolder; + strQuoteFolder.AppendStringF(L"\"%s\"", folder); + ::SetWindowText( hwndCtrl, strQuoteFolder.GetStringPtr() ); }else{ ::SetWindowText( hwndCtrl, folder ); } From fbae6ac3b29de6efb904c1bcf458cc49f0f28ddb Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 13 Mar 2021 13:11:52 +0900 Subject: [PATCH 0503/1024] =?UTF-8?q?CCommandLine=E3=81=AE=E5=9F=BA?= =?UTF-8?q?=E5=BA=95=E3=82=AF=E3=83=A9=E3=82=B9=E3=82=92=E3=82=A4=E3=83=B3?= =?UTF-8?q?=E3=82=B9=E3=82=BF=E3=83=B3=E3=82=B9=E3=83=9B=E3=83=AB=E3=83=80?= =?UTF-8?q?=E3=83=BC=E3=81=AB=E5=A4=89=E6=9B=B4=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/_main/CCommandLine.h | 5 ++--- sakura_core/_main/WinMain.cpp | 4 ++++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/sakura_core/_main/CCommandLine.h b/sakura_core/_main/CCommandLine.h index 5fcf0ee5d1..13e9ed7658 100644 --- a/sakura_core/_main/CCommandLine.h +++ b/sakura_core/_main/CCommandLine.h @@ -37,9 +37,8 @@ /*! * @brief コマンドラインパーサ クラス */ -class CCommandLine : public TSingleton { - friend class TSingleton; -protected: +class CCommandLine : public TInstanceHolder { +public: CCommandLine() noexcept; private: diff --git a/sakura_core/_main/WinMain.cpp b/sakura_core/_main/WinMain.cpp index b73b7a9180..9948d99a49 100644 --- a/sakura_core/_main/WinMain.cpp +++ b/sakura_core/_main/WinMain.cpp @@ -23,6 +23,7 @@ #include "StdAfx.h" #include #include +#include "_main/CCommandLine.h" #include "CProcessFactory.h" #include "CProcess.h" #include "util/os.h" @@ -95,6 +96,9 @@ int WINAPI wWinMain( DEBUG_TRACE(L"-- -- WinMain -- --\n"); DEBUG_TRACE(L"sizeof(DLLSHAREDATA) = %d\n",sizeof(DLLSHAREDATA)); + //コマンドラインクラスのインスタンスを確保する + CCommandLine cCommandLine; + //プロセスの生成とメッセージループ CProcessFactory aFactory; CProcess *process = 0; From 26966ba359befc9d5d37c571286b54b4956afd3e Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 13 Mar 2021 13:13:00 +0900 Subject: [PATCH 0504/1024] =?UTF-8?q?CCommandLine=E3=81=AE=E5=9F=BA?= =?UTF-8?q?=E5=BA=95=E3=82=AF=E3=83=A9=E3=82=B9=E5=A4=89=E6=9B=B4=E3=82=92?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=B3=E3=83=BC=E3=83=89=E3=81=AB?= =?UTF-8?q?=E5=8F=8D=E6=98=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-ccommandline.cpp | 127 +++++++++++------------- tests/unittests/test-cdlgprofilemgr.cpp | 72 +++++--------- tests/unittests/test-file.cpp | 56 ++++------- tests/unittests/test-winmain.cpp | 7 +- 4 files changed, 109 insertions(+), 153 deletions(-) diff --git a/tests/unittests/test-ccommandline.cpp b/tests/unittests/test-ccommandline.cpp index 743cc61d4b..4ffa1878ac 100644 --- a/tests/unittests/test-ccommandline.cpp +++ b/tests/unittests/test-ccommandline.cpp @@ -62,22 +62,13 @@ std::wstring GetLocalPath(const std::wstring_view& filename) return pszResolvedPath; } -/*! - * テスト用の極薄ラッパークラス - */ -class CCommandLineWrapper : public CCommandLine -{ -public: - CCommandLineWrapper() = default; -}; - /*! * @brief コンストラクタ(パラメータなし)の仕様 * @remark パラメータを何も指定しなかった状態になる */ TEST(CCommandLine, ConstructWithoutParam) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; EXPECT_FALSE(cCommandLine.IsNoWindow()); EXPECT_FALSE(cCommandLine.IsGrepMode()); EXPECT_FALSE(cCommandLine.IsGrepDlg()); @@ -107,7 +98,7 @@ TEST(CCommandLine, ConstructWithoutParam) */ TEST(CCommandLine, ParseNoWin) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_FALSE(cCommandLine.IsNoWindow()); cCommandLine.ParseCommandLine(L"-NOWIN", false); @@ -122,7 +113,7 @@ TEST(CCommandLine, ParseNoWin) */ TEST(CCommandLine, ParseGrepMode) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_FALSE(cCommandLine.IsGrepMode()); cCommandLine.ParseCommandLine(L"-GREPMODE", false); @@ -139,7 +130,7 @@ TEST(CCommandLine, ParseGrepMode) */ TEST(CCommandLine, ParseGrepDialog) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_FALSE(cCommandLine.IsGrepDlg()); cCommandLine.ParseCommandLine(L"-GREPDLG", false); @@ -155,7 +146,7 @@ TEST(CCommandLine, ParseGrepDialog) */ TEST(CCommandLine, ParseDebugMode) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_FALSE(cCommandLine.IsDebugMode()); cCommandLine.ParseCommandLine(L"-DEBUGMODE", false); @@ -172,7 +163,7 @@ TEST(CCommandLine, ParseDebugMode) */ TEST(CCommandLine, ParseViewMode) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_FALSE(cCommandLine.IsViewMode()); cCommandLine.ParseCommandLine(L"-R", false); @@ -186,7 +177,7 @@ TEST(CCommandLine, ParseViewMode) */ TEST(CCommandLine, ParseGroup) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_EQ(-1, cCommandLine.GetGroupId()); cCommandLine.ParseCommandLine(L"-GROUP=2", false); @@ -200,7 +191,7 @@ TEST(CCommandLine, ParseGroup) */ TEST(CCommandLine, ParseMacroFileName) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_EQ(NULL, cCommandLine.GetMacro()); #define TESTLOCAL_MACRO_NAME L"真っ黒.mac" @@ -217,7 +208,7 @@ TEST(CCommandLine, ParseMacroFileName) */ TEST(CCommandLine, ParseMacroType) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_EQ(NULL, cCommandLine.GetMacroType()); #define TESTLOCAL_MACRO_TYPE L"PascalScript" @@ -233,7 +224,7 @@ TEST(CCommandLine, ParseMacroType) */ TEST(CCommandLine, ParseProfileName) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_STREQ(L"", cCommandLine.GetProfileName()); EXPECT_FALSE(cCommandLine.IsSetProfile()); @@ -251,7 +242,7 @@ TEST(CCommandLine, ParseProfileName) */ TEST(CCommandLine, ParseProfileManager) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_FALSE(cCommandLine.IsProfileMgr()); cCommandLine.ParseCommandLine(L"-PROFMGR", false); @@ -265,7 +256,7 @@ TEST(CCommandLine, ParseProfileManager) */ TEST(CCommandLine, ParseCaretLocationX) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); ASSERT_EQ(-1, cCommandLine.GetCaretLocation().x); cCommandLine.ParseCommandLine(L"-X=123", false); @@ -279,7 +270,7 @@ TEST(CCommandLine, ParseCaretLocationX) */ TEST(CCommandLine, ParseCaretLocationY) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); ASSERT_EQ(-1, cCommandLine.GetCaretLocation().y); cCommandLine.ParseCommandLine(L"-Y=123", false); @@ -293,7 +284,7 @@ TEST(CCommandLine, ParseCaretLocationY) */ TEST(CCommandLine, ParseViewLeftCol) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); ASSERT_EQ(-1, (Int)cCommandLine.GetViewLocation().x); cCommandLine.ParseCommandLine(L"-VX=123", false); @@ -307,7 +298,7 @@ TEST(CCommandLine, ParseViewLeftCol) */ TEST(CCommandLine, ParseViewTopLine) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); ASSERT_EQ(-1, (Int)cCommandLine.GetViewLocation().y); cCommandLine.ParseCommandLine(L"-VY=123", false); @@ -321,7 +312,7 @@ TEST(CCommandLine, ParseViewTopLine) */ TEST(CCommandLine, ParseWindowSizeX) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); ASSERT_EQ(-1, cCommandLine.GetWindowSize().cx); cCommandLine.ParseCommandLine(L"-SX=123", false); @@ -335,7 +326,7 @@ TEST(CCommandLine, ParseWindowSizeX) */ TEST(CCommandLine, ParseWindowSizeY) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); ASSERT_EQ(-1, cCommandLine.GetWindowSize().cy); cCommandLine.ParseCommandLine(L"-SY=123", false); @@ -349,7 +340,7 @@ TEST(CCommandLine, ParseWindowSizeY) */ TEST(CCommandLine, ParseWindowOriginX) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); ASSERT_EQ(CW_USEDEFAULT, cCommandLine.GetWindowOrigin().x); cCommandLine.ParseCommandLine(L"-WX=123", false); @@ -363,7 +354,7 @@ TEST(CCommandLine, ParseWindowOriginX) */ TEST(CCommandLine, ParseWindowOriginY) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); ASSERT_EQ(CW_USEDEFAULT, cCommandLine.GetWindowOrigin().y); cCommandLine.ParseCommandLine(L"-WY=123", false); @@ -379,7 +370,7 @@ TEST(CCommandLine, ParseWindowOriginY) */ TEST(CCommandLine, ParseDocType) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_STREQ(L"", cCommandLine.GetDocType()); #define TESTLOCAL_DOC_TYPE L"C/C++" @@ -399,7 +390,7 @@ TEST(CCommandLine, ParseDocType) */ TEST(CCommandLine, ParseDocCode) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; // 初期値は99(自動選択) EXPECT_EQ(CODE_AUTODETECT, cCommandLine.GetDocCode()); @@ -425,7 +416,7 @@ TEST(CCommandLine, ParseDocCode) */ TEST(CCommandLine, SetProfileName) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; EXPECT_FALSE(cCommandLine.IsSetProfile()); cCommandLine.SetProfileName(L""); ASSERT_TRUE(cCommandLine.IsSetProfile()); @@ -438,7 +429,7 @@ TEST(CCommandLine, SetProfileName) */ TEST(CCommandLine, ParseGrepKey) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_EQ(NULL, cCommandLine.GetGrepInfoRef().cmGrepKey.GetStringPtr()); #define TESTLOCAL_GREP_KEY L"\\w+" @@ -454,7 +445,7 @@ TEST(CCommandLine, ParseGrepKey) */ TEST(CCommandLine, ParseGrepReplaceKey) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_EQ(NULL, cCommandLine.GetGrepInfoRef().cmGrepRep.GetStringPtr()); #define TESTLOCAL_GREP_REPR L"$1。" @@ -470,7 +461,7 @@ TEST(CCommandLine, ParseGrepReplaceKey) */ TEST(CCommandLine, ParseGrepFile) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_EQ(NULL, cCommandLine.GetGrepInfoRef().cmGrepFile.GetStringPtr()); #define TESTLOCAL_GREP_FILE L"#.git" @@ -486,7 +477,7 @@ TEST(CCommandLine, ParseGrepFile) */ TEST(CCommandLine, ParseGrepFolder) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_EQ(NULL, cCommandLine.GetGrepInfoRef().cmGrepFolder.GetStringPtr()); #define TESTLOCAL_GREP_FOLDER L"C:\\work\\sakura" @@ -502,7 +493,7 @@ TEST(CCommandLine, ParseGrepFolder) */ TEST(CCommandLine, ParseGrepCurFolder) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_FALSE(cCommandLine.GetGrepInfoRef().bGrepCurFolder); cCommandLine.ParseCommandLine(L"-GOPT=X", false); @@ -516,7 +507,7 @@ TEST(CCommandLine, ParseGrepCurFolder) */ TEST(CCommandLine, ParseGrepStdout) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_FALSE(cCommandLine.GetGrepInfoRef().bGrepStdout); cCommandLine.ParseCommandLine(L"-GOPT=U", false); @@ -530,7 +521,7 @@ TEST(CCommandLine, ParseGrepStdout) */ TEST(CCommandLine, ParseGrepHeader) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_FALSE(!cCommandLine.GetGrepInfoRef().bGrepHeader); cCommandLine.ParseCommandLine(L"-GOPT=H", false); @@ -544,7 +535,7 @@ TEST(CCommandLine, ParseGrepHeader) */ TEST(CCommandLine, ParseGrepSubFolder) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_FALSE(cCommandLine.GetGrepInfoRef().bGrepSubFolder); cCommandLine.ParseCommandLine(L"-GOPT=S", false); @@ -558,7 +549,7 @@ TEST(CCommandLine, ParseGrepSubFolder) */ TEST(CCommandLine, ParseGrepCaseSensitive) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_FALSE(cCommandLine.GetGrepInfoRef().sGrepSearchOption.bLoHiCase); cCommandLine.ParseCommandLine(L"-GOPT=L", false); @@ -572,7 +563,7 @@ TEST(CCommandLine, ParseGrepCaseSensitive) */ TEST(CCommandLine, ParseGrepUseRegularExpressions) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_FALSE(cCommandLine.GetGrepInfoRef().sGrepSearchOption.bRegularExp); cCommandLine.ParseCommandLine(L"-GOPT=R", false); @@ -587,7 +578,7 @@ TEST(CCommandLine, ParseGrepUseRegularExpressions) */ TEST(CCommandLine, ParseGrepCodeAutoDetect) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_EQ(CODE_SJIS, cCommandLine.GetGrepInfoRef().nGrepCharSet); cCommandLine.ParseCommandLine(L"-GOPT=K", false); @@ -600,7 +591,7 @@ TEST(CCommandLine, ParseGrepCodeAutoDetect) */ TEST(CCommandLine, ParseGrepOutputLineType) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_EQ(0, cCommandLine.GetGrepInfoRef().nGrepOutputLineType); cCommandLine.ParseCommandLine(L"-GOPT=P", false); //Positive? @@ -616,7 +607,7 @@ TEST(CCommandLine, ParseGrepOutputLineType) */ TEST(CCommandLine, ParseGrepUseWordParse) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_FALSE(cCommandLine.GetGrepInfoRef().sGrepSearchOption.bWordOnly); cCommandLine.ParseCommandLine(L"-GOPT=W", false); @@ -629,7 +620,7 @@ TEST(CCommandLine, ParseGrepUseWordParse) */ TEST(CCommandLine, ParseGrepOutputStyle) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_EQ(1, cCommandLine.GetGrepInfoRef().nGrepOutputStyle); cCommandLine.ParseCommandLine(L"-GOPT=1", false); @@ -647,7 +638,7 @@ TEST(CCommandLine, ParseGrepOutputStyle) */ TEST(CCommandLine, ParseGrepListFileNameOnly) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_FALSE(cCommandLine.GetGrepInfoRef().bGrepOutputFileOnly); cCommandLine.ParseCommandLine(L"-GOPT=F", false); @@ -661,7 +652,7 @@ TEST(CCommandLine, ParseGrepListFileNameOnly) */ TEST(CCommandLine, ParseGrepDisplayRoot) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_FALSE(cCommandLine.GetGrepInfoRef().bGrepOutputBaseFolder); cCommandLine.ParseCommandLine(L"-GOPT=B", false); @@ -675,7 +666,7 @@ TEST(CCommandLine, ParseGrepDisplayRoot) */ TEST(CCommandLine, ParseGrepSplitResultPerFolder) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_FALSE(cCommandLine.GetGrepInfoRef().bGrepSeparateFolder); cCommandLine.ParseCommandLine(L"-GOPT=D", false); @@ -689,7 +680,7 @@ TEST(CCommandLine, ParseGrepSplitResultPerFolder) */ TEST(CCommandLine, ParseGrepReplacePasteFromClipBoard) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_FALSE(cCommandLine.GetGrepInfoRef().bGrepPaste); cCommandLine.ParseCommandLine(L"-GOPT=C", false); @@ -703,7 +694,7 @@ TEST(CCommandLine, ParseGrepReplacePasteFromClipBoard) */ TEST(CCommandLine, ParseGrepReplaceCreateBackupFiles) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_FALSE(cCommandLine.GetGrepInfoRef().bGrepBackup); cCommandLine.ParseCommandLine(L"-GOPT=O", false); @@ -717,7 +708,7 @@ TEST(CCommandLine, ParseGrepReplaceCreateBackupFiles) */ TEST(CCommandLine, ParseGrepCode) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"", false); EXPECT_EQ(CODE_SJIS, cCommandLine.GetGrepInfoRef().nGrepCharSet); cCommandLine.ParseCommandLine(L"-GCODE=99", false); @@ -737,7 +728,7 @@ TEST(CCommandLine, ParseFromResponseFile) resp << "-R" << std::endl; } - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"-@=test.response", true); EXPECT_TRUE(cCommandLine.IsViewMode()); @@ -753,7 +744,7 @@ TEST(CCommandLine, ParseFromResponseFile) */ TEST(CCommandLine, QuotedOption) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"\"-GROUP=1\"", false); ASSERT_EQ(1, cCommandLine.GetGroupId()); } @@ -764,7 +755,7 @@ TEST(CCommandLine, QuotedOption) */ TEST(CCommandLine, QuotedOptionWithMissingEndQuote) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"\"-GROUP=1", false); ASSERT_EQ(1, cCommandLine.GetGroupId()); } @@ -775,7 +766,7 @@ TEST(CCommandLine, QuotedOptionWithMissingEndQuote) */ TEST(CCommandLine, OptionWithArgumentAssign) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"-GROUP=1", false); ASSERT_EQ(1, cCommandLine.GetGroupId()); } @@ -786,7 +777,7 @@ TEST(CCommandLine, OptionWithArgumentAssign) */ TEST(CCommandLine, OptionWithArgumentColon) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"-GROUP:1", false); ASSERT_EQ(1, cCommandLine.GetGroupId()); } @@ -797,7 +788,7 @@ TEST(CCommandLine, OptionWithArgumentColon) */ TEST(CCommandLine, OptionWithDoubleQuotedArgument) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"-GROUP=\"1\"", false); ASSERT_EQ(1, cCommandLine.GetGroupId()); } @@ -808,7 +799,7 @@ TEST(CCommandLine, OptionWithDoubleQuotedArgument) */ TEST(CCommandLine, OptionWithSingleQuotedArgument) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"-GROUP=\'1\'", false); ASSERT_EQ(1, cCommandLine.GetGroupId()); } @@ -819,7 +810,7 @@ TEST(CCommandLine, OptionWithSingleQuotedArgument) */ TEST(CCommandLine, OptionWithoutNeededArgument) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"-GROUP", false); EXPECT_EQ(-1, cCommandLine.GetGroupId()); } @@ -830,7 +821,7 @@ TEST(CCommandLine, OptionWithoutNeededArgument) */ TEST(CCommandLine, OptionWithInvalidArgumentEmpty) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"-GROUP=", false); EXPECT_EQ(-1, cCommandLine.GetGroupId()); cCommandLine.ParseCommandLine(L"-GROUP:", false); @@ -843,7 +834,7 @@ TEST(CCommandLine, OptionWithInvalidArgumentEmpty) */ TEST(CCommandLine, OptionWithInvalidArgumentNAN) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"-GROUP=Admin", false); EXPECT_EQ(0, cCommandLine.GetGroupId()); cCommandLine.ParseCommandLine(L"-GROUP:Admin", false); @@ -858,7 +849,7 @@ TEST(CCommandLine, OptionWithInvalidArgumentNAN) */ TEST(CCommandLine, EndOfOptionMark) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"-- -GROUP=2", false); EXPECT_EQ(-1, cCommandLine.GetGroupId()); EXPECT_STREQ(GetLocalPath(L"-GROUP=2").data(), cCommandLine.GetOpenFile()); @@ -873,14 +864,14 @@ TEST(CCommandLine, EndOfOptionMark) */ TEST(CCommandLine, ParseOpenFile) { - CCommandLineWrapper cCommandLine1; + CCommandLine cCommandLine1; std::wstring strCmdLine1 = L"test.txt"; cCommandLine1.ParseCommandLine(strCmdLine1.data(), false); EXPECT_STREQ(GetLocalPath(L"test.txt").data(), cCommandLine1.GetOpenFile()); EXPECT_EQ(NULL, cCommandLine1.GetFileName(0)); EXPECT_EQ(0, cCommandLine1.GetFileNum()); - CCommandLineWrapper cCommandLine2; + CCommandLine cCommandLine2; std::wstring strCmdLine2 = L"test1.txt test2.txt"; cCommandLine2.ParseCommandLine(strCmdLine2.data(), false); EXPECT_STREQ(GetLocalPath(L"test1.txt").data(), cCommandLine2.GetOpenFile()); @@ -894,7 +885,7 @@ TEST(CCommandLine, ParseOpenFile) */ TEST(CCommandLine, UnterminatedQuotedFilename) { - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine(L"\"", false); EXPECT_STREQ(L"", cCommandLine.GetOpenFile()); EXPECT_EQ(NULL, cCommandLine.GetFileName(0)); @@ -920,7 +911,7 @@ TEST(CCommandLine, ParseFileNameIncludesInvalidFilenameChars) }; // ファイル名に使えない文字を含んでいたら、ファイル名としては認識されない。 - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; for (const auto& badName : badNames) { cCommandLine.ParseCommandLine( badName.data(), false ); EXPECT_STREQ(L"", cCommandLine.GetOpenFile()); @@ -936,7 +927,7 @@ TEST(CCommandLine, ParseFileNameIncludesInvalidFilenameChars) TEST(CCommandLine, ParseTooLongFilePath) { // _MAX_PATH - 1を超えるパスは無視される - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; std::wstring strCmdLine; std::wstring strPath(_MAX_PATH, L'a'); strprintf(strCmdLine, L"%s test.txt", strPath.c_str()); @@ -961,7 +952,7 @@ TEST(CCommandLine, ParseMaxFilePath) strPath.resize(_MAX_PATH - 1, L'a'); // _MAX_PATH - 1までのパスは受け付けられる - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; std::wstring strCmdLine; strprintf(strCmdLine, L"%s test.txt", strPath.c_str()); cCommandLine.ParseCommandLine(strCmdLine.data(), false); diff --git a/tests/unittests/test-cdlgprofilemgr.cpp b/tests/unittests/test-cdlgprofilemgr.cpp index 35c7d28d42..22c99ee5ea 100644 --- a/tests/unittests/test-cdlgprofilemgr.cpp +++ b/tests/unittests/test-cdlgprofilemgr.cpp @@ -51,15 +51,6 @@ #include "CDataProfile.h" #include "util/file.h" -/*! - * テスト用の極薄ラッパークラス - */ -class CCommandLineWrapper : public CCommandLine -{ -public: - CCommandLineWrapper() = default; -}; - /*! * プロファイルマネージャ設定ファイルを使うテストのためのフィクスチャクラス * @@ -78,6 +69,9 @@ class CDlgProfileMgrTest : public ::testing::Test { * テストが起動される直前に毎回呼ばれる関数 */ void SetUp() override { + // コマンドラインのインスタンスを用意する + CCommandLine cCommandLine; + // プロファイルマネージャ設定ファイルのパスを生成 profileMgrIniPath = GetProfileMgrFileName(); if( fexist( profileMgrIniPath.c_str() ) ){ @@ -101,7 +95,7 @@ class CDlgProfileMgrTest : public ::testing::Test { TEST_F( CDlgProfileMgrTest, TrySelectProfile_001 ) { // プロファイルマネージャ表示オプションが付いてたらプロファイルは確定しない - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine( L"-PROFMGR", false ); ASSERT_FALSE( CDlgProfileMgr::TrySelectProfile( &cCommandLine ) ); } @@ -112,7 +106,7 @@ TEST_F( CDlgProfileMgrTest, TrySelectProfile_001 ) TEST_F( CDlgProfileMgrTest, TrySelectProfile_002 ) { // プロファイル名が指定されていたらプロファイルは確定する - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; cCommandLine.ParseCommandLine( L"-PROF=執筆用", false ); ASSERT_TRUE( CDlgProfileMgr::TrySelectProfile( &cCommandLine ) ); } @@ -123,7 +117,7 @@ TEST_F( CDlgProfileMgrTest, TrySelectProfile_002 ) TEST_F( CDlgProfileMgrTest, TrySelectProfile_003 ) { // プロファイルマネージャー設定がなかったらプロファイルは確定する - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; ASSERT_TRUE( CDlgProfileMgr::TrySelectProfile( &cCommandLine ) ); } @@ -145,7 +139,7 @@ TEST_F( CDlgProfileMgrTest, TrySelectProfile_004 ) cProfile.WriteProfile(profileMgrIniPath.c_str(), L"Sakura Profile ini"); // プロファイルマネージャー設定にデフォルト定義があればプロファイルは確定する - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; ASSERT_TRUE( CDlgProfileMgr::TrySelectProfile( &cCommandLine ) ); } @@ -167,7 +161,7 @@ TEST_F( CDlgProfileMgrTest, TrySelectProfile_005 ) cProfile.WriteProfile(profileMgrIniPath.c_str(), L"Sakura Profile ini"); // プロファイルマネージャー設定のデフォルト定義がおかしればプロファイルは確定しない - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; ASSERT_FALSE( CDlgProfileMgr::TrySelectProfile( &cCommandLine ) ); } @@ -185,7 +179,7 @@ TEST_F( CDlgProfileMgrTest, TrySelectProfile_006 ) cProfile.WriteProfile(profileMgrIniPath.c_str(), L"Sakura Profile ini"); // プロファイルマネージャー設定が空定義ならプロファイルは確定しない - CCommandLineWrapper cCommandLine; + CCommandLine cCommandLine; ASSERT_FALSE( CDlgProfileMgr::TrySelectProfile( &cCommandLine ) ); } @@ -194,8 +188,9 @@ TEST_F( CDlgProfileMgrTest, TrySelectProfile_006 ) */ TEST(file, GetProfileMgrFileName_NoArg1) { - // コマンドラインのグローバル変数をセットする - auto pCommandLine = CCommandLine::getInstance(); + // コマンドラインのインスタンスを用意する + CCommandLine cCommandLine; + auto pCommandLine = &cCommandLine; pCommandLine->ParseCommandLine(LR"(-PROF="")", false); // プロセスのインスタンスを用意する @@ -204,9 +199,6 @@ TEST(file, GetProfileMgrFileName_NoArg1) // iniファイルの拡張子を_prof.iniに変えたパスが返る const auto profileMgrIniPath = GetIniFileName().replace_extension().concat(L"_prof.ini"); ASSERT_STREQ(profileMgrIniPath.c_str(), GetProfileMgrFileName().c_str()); - - // コマンドラインのグローバル変数を元に戻す - pCommandLine->ParseCommandLine(L"", false); } /*! @@ -214,8 +206,9 @@ TEST(file, GetProfileMgrFileName_NoArg1) */ TEST(file, GetProfileMgrFileName_NoArg2) { - // コマンドラインのグローバル変数をセットする - auto pCommandLine = CCommandLine::getInstance(); + // コマンドラインのインスタンスを用意する + CCommandLine cCommandLine; + auto pCommandLine = &cCommandLine; pCommandLine->ParseCommandLine(LR"(-PROF="profile1")", false); // プロセスのインスタンスを用意する @@ -224,9 +217,6 @@ TEST(file, GetProfileMgrFileName_NoArg2) // iniファイルの拡張子を_prof.iniに変えたパスが返る const auto profileMgrIniPath = GetIniFileName().parent_path().parent_path().append(GetIniFileName().replace_extension().concat(L"_prof.ini").filename().c_str()); ASSERT_STREQ(profileMgrIniPath.c_str(), GetProfileMgrFileName().c_str()); - - // コマンドラインのグローバル変数を元に戻す - pCommandLine->ParseCommandLine(L"", false); } /*! @@ -234,8 +224,9 @@ TEST(file, GetProfileMgrFileName_NoArg2) */ TEST(file, GetProfileMgrFileName_DefaultProfile1) { - // コマンドラインのグローバル変数をセットする - auto pCommandLine = CCommandLine::getInstance(); + // コマンドラインのインスタンスを用意する + CCommandLine cCommandLine; + auto pCommandLine = &cCommandLine; pCommandLine->ParseCommandLine(LR"(-PROF="")", false); // プロセスのインスタンスを用意する @@ -244,9 +235,6 @@ TEST(file, GetProfileMgrFileName_DefaultProfile1) // 設定フォルダのパスが返る const auto iniDir = GetExeFileName().replace_filename(L"").append("a.txt").remove_filename(); ASSERT_STREQ(iniDir.c_str(), GetProfileMgrFileName(L"").c_str()); - - // コマンドラインのグローバル変数を元に戻す - pCommandLine->ParseCommandLine(L"", false); } /*! @@ -254,8 +242,9 @@ TEST(file, GetProfileMgrFileName_DefaultProfile1) */ TEST(file, GetProfileMgrFileName_DefaultProfile2) { - // コマンドラインのグローバル変数をセットする - auto pCommandLine = CCommandLine::getInstance(); + // コマンドラインのインスタンスを用意する + CCommandLine cCommandLine; + auto pCommandLine = &cCommandLine; pCommandLine->ParseCommandLine(LR"(-PROF="profile1")", false); // プロセスのインスタンスを用意する @@ -264,9 +253,6 @@ TEST(file, GetProfileMgrFileName_DefaultProfile2) // 設定フォルダのパスが返る const auto iniDir = GetIniFileName().parent_path().parent_path().append("a.txt").remove_filename(); ASSERT_STREQ(iniDir.c_str(), GetProfileMgrFileName(L"").c_str()); - - // コマンドラインのグローバル変数を元に戻す - pCommandLine->ParseCommandLine(L"", false); } /*! @@ -274,8 +260,9 @@ TEST(file, GetProfileMgrFileName_DefaultProfile2) */ TEST(file, GetProfileMgrFileName_NamedProfile1) { - // コマンドラインのグローバル変数をセットする - auto pCommandLine = CCommandLine::getInstance(); + // コマンドラインのインスタンスを用意する + CCommandLine cCommandLine; + auto pCommandLine = &cCommandLine; pCommandLine->ParseCommandLine(LR"(-PROF="")", false); // プロセスのインスタンスを用意する @@ -287,9 +274,6 @@ TEST(file, GetProfileMgrFileName_NamedProfile1) // 指定したプロファイルの設定保存先フォルダのパスが返る const auto profileDir = GetExeFileName().replace_filename(profile).append("a.txt").remove_filename(); ASSERT_STREQ(profileDir.c_str(), GetProfileMgrFileName(profile).c_str()); - - // コマンドラインのグローバル変数を元に戻す - pCommandLine->ParseCommandLine(L"", false); } /*! @@ -297,8 +281,9 @@ TEST(file, GetProfileMgrFileName_NamedProfile1) */ TEST(file, GetProfileMgrFileName_NamedProfile2) { - // コマンドラインのグローバル変数をセットする - auto pCommandLine = CCommandLine::getInstance(); + // コマンドラインのインスタンスを用意する + CCommandLine cCommandLine; + auto pCommandLine = &cCommandLine; pCommandLine->ParseCommandLine(LR"(-PROF="profile1")", false); // プロセスのインスタンスを用意する @@ -310,7 +295,4 @@ TEST(file, GetProfileMgrFileName_NamedProfile2) // 指定したプロファイルの設定保存先フォルダのパスが返る const auto profileDir = GetIniFileName().parent_path().parent_path().append(profile).append("a.txt").remove_filename(); ASSERT_STREQ(profileDir.c_str(), GetProfileMgrFileName(profile).c_str()); - - // コマンドラインのグローバル変数を元に戻す - pCommandLine->ParseCommandLine(L"", false); } diff --git a/tests/unittests/test-file.cpp b/tests/unittests/test-file.cpp index 95c6c8205f..04e7a4dca1 100644 --- a/tests/unittests/test-file.cpp +++ b/tests/unittests/test-file.cpp @@ -130,8 +130,9 @@ TEST(file, GetIniFileName_OutOfProcess) */ TEST(file, GetIniFileName_InProcessDefaultProfileUnInitialized) { - // コマンドラインのグローバル変数をセットする - auto pCommandLine = CCommandLine::getInstance(); + // コマンドラインのインスタンスを用意する + CCommandLine cCommandLine; + auto pCommandLine = &cCommandLine; pCommandLine->ParseCommandLine(LR"(-PROF="")", false); // プロセスのインスタンスを用意する @@ -140,9 +141,6 @@ TEST(file, GetIniFileName_InProcessDefaultProfileUnInitialized) // exeファイルの拡張子をiniに変えたパスが返る auto path = GetExeFileName().replace_extension(L".ini"); ASSERT_STREQ(path.c_str(), GetIniFileName().c_str()); - - // コマンドラインのグローバル変数を元に戻す - pCommandLine->ParseCommandLine(L"", false); } /*! @@ -150,8 +148,9 @@ TEST(file, GetIniFileName_InProcessDefaultProfileUnInitialized) */ TEST(file, GetIniFileName_InProcessNamedProfileUnInitialized) { - // コマンドラインのグローバル変数をセットする - auto pCommandLine = CCommandLine::getInstance(); + // コマンドラインのインスタンスを用意する + CCommandLine cCommandLine; + auto pCommandLine = &cCommandLine; pCommandLine->ParseCommandLine(LR"(-PROF="profile1")", false); // プロセスのインスタンスを用意する @@ -161,9 +160,6 @@ TEST(file, GetIniFileName_InProcessNamedProfileUnInitialized) auto iniPath = GetExeFileName().replace_extension(L".ini"); auto path = iniPath.parent_path().append(L"profile1").append(iniPath.filename().c_str()); ASSERT_STREQ(path.c_str(), GetIniFileName().c_str()); - - // コマンドラインのグローバル変数を元に戻す - pCommandLine->ParseCommandLine(L"", false); } /*! @@ -171,8 +167,9 @@ TEST(file, GetIniFileName_InProcessNamedProfileUnInitialized) */ TEST(file, GetIniFileName_PrivateRoamingAppData) { - // コマンドラインのグローバル変数をセットする - auto pCommandLine = CCommandLine::getInstance(); + // コマンドラインのインスタンスを用意する + CCommandLine cCommandLine; + auto pCommandLine = &cCommandLine; pCommandLine->ParseCommandLine(LR"(-PROF="profile1")", false); // プロセスのインスタンスを用意する @@ -198,9 +195,6 @@ TEST(file, GetIniFileName_PrivateRoamingAppData) // テスト実施 ASSERT_STREQ(expected.c_str(), GetIniFileName().c_str()); - // コマンドラインのグローバル変数を元に戻す - pCommandLine->ParseCommandLine(L"", false); - // INIファイルを削除する std::filesystem::remove(exeIniPath); @@ -213,8 +207,9 @@ TEST(file, GetIniFileName_PrivateRoamingAppData) */ TEST(file, GetIniFileName_PrivateDesktop) { - // コマンドラインのグローバル変数をセットする - auto pCommandLine = CCommandLine::getInstance(); + // コマンドラインのインスタンスを用意する + CCommandLine cCommandLine; + auto pCommandLine = &cCommandLine; pCommandLine->ParseCommandLine(LR"(-PROF="")", false); // プロセスのインスタンスを用意する @@ -240,9 +235,6 @@ TEST(file, GetIniFileName_PrivateDesktop) // テスト実施 ASSERT_STREQ(expected.c_str(), GetIniFileName().c_str()); - // コマンドラインのグローバル変数を元に戻す - pCommandLine->ParseCommandLine(L"", false); - // INIファイルを削除する std::filesystem::remove(exeIniPath); @@ -255,8 +247,9 @@ TEST(file, GetIniFileName_PrivateDesktop) */ TEST(file, GetIniFileName_PrivateProfile) { - // コマンドラインのグローバル変数をセットする - auto pCommandLine = CCommandLine::getInstance(); + // コマンドラインのインスタンスを用意する + CCommandLine cCommandLine; + auto pCommandLine = &cCommandLine; pCommandLine->ParseCommandLine(LR"(-PROF="")", false); // プロセスのインスタンスを用意する @@ -282,9 +275,6 @@ TEST(file, GetIniFileName_PrivateProfile) // テスト実施 ASSERT_STREQ(expected.c_str(), GetIniFileName().c_str()); - // コマンドラインのグローバル変数を元に戻す - pCommandLine->ParseCommandLine(L"", false); - // INIファイルを削除する std::filesystem::remove(exeIniPath); @@ -297,8 +287,9 @@ TEST(file, GetIniFileName_PrivateProfile) */ TEST(file, GetIniFileName_PrivateDocument) { - // コマンドラインのグローバル変数をセットする - auto pCommandLine = CCommandLine::getInstance(); + // コマンドラインのインスタンスを用意する + CCommandLine cCommandLine; + auto pCommandLine = &cCommandLine; pCommandLine->ParseCommandLine(LR"(-PROF="")", false); // プロセスのインスタンスを用意する @@ -324,9 +315,6 @@ TEST(file, GetIniFileName_PrivateDocument) // テスト実施 ASSERT_STREQ(expected.c_str(), GetIniFileName().c_str()); - // コマンドラインのグローバル変数を元に戻す - pCommandLine->ParseCommandLine(L"", false); - // INIファイルを削除する std::filesystem::remove(exeIniPath); @@ -371,8 +359,9 @@ void EnsureDirectoryExist(const std::wstring& strProfileName); */ TEST(file, GetInidirOrExedir) { - // コマンドラインのグローバル変数をセットする - auto pCommandLine = CCommandLine::getInstance(); + // コマンドラインのインスタンスを用意する + CCommandLine cCommandLine; + auto pCommandLine = &cCommandLine; pCommandLine->ParseCommandLine(LR"(-PROF="profile1")", false); // プロセスのインスタンスを用意する @@ -412,9 +401,6 @@ TEST(file, GetInidirOrExedir) // 両方ないときはINI基準のパスが変える GetInidirOrExedir(buf.data(), filename, true); ASSERT_STREQ(iniBasePath.c_str(), buf.data()); - - // コマンドラインのグローバル変数を元に戻す - pCommandLine->ParseCommandLine(L"", false); } std::filesystem::path GetIniFileNameForIO(bool bWrite); diff --git a/tests/unittests/test-winmain.cpp b/tests/unittests/test-winmain.cpp index b4827f6354..114621137f 100644 --- a/tests/unittests/test-winmain.cpp +++ b/tests/unittests/test-winmain.cpp @@ -93,8 +93,8 @@ class WinMainTest : public ::testing::TestWithParam { // テスト用プロファイル名 const std::wstring_view profileName(GetParam()); - // コマンドラインのグローバル変数をセットする - auto &commandLine = *CCommandLine::getInstance(); + // コマンドラインのインスタンスを用意する + CCommandLine commandLine; const auto strCommandLine = strprintf(LR"(-PROF="%s")", profileName.data()); commandLine.ParseCommandLine(strCommandLine.data(), false); @@ -108,9 +108,6 @@ class WinMainTest : public ::testing::TestWithParam { if (fexist(iniPath.c_str())) { std::filesystem::remove(iniPath); } - - // コマンドラインのグローバル変数を元に戻す - commandLine.ParseCommandLine(L"", false); } /*! From d3f95f39d3b8168aae49c34f7914ef2dab3c7582 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 13 Mar 2021 14:29:43 +0900 Subject: [PATCH 0505/1024] =?UTF-8?q?CShareData=E3=81=AE=E5=9F=BA=E5=BA=95?= =?UTF-8?q?=E3=82=AF=E3=83=A9=E3=82=B9=E3=82=92TSingleInstance=E3=81=AB?= =?UTF-8?q?=E5=A4=89=E6=9B=B4=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/_main/CProcess.cpp | 5 ++--- sakura_core/_main/CProcess.h | 6 +++--- sakura_core/env/CShareData.h | 5 ++--- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/sakura_core/_main/CProcess.cpp b/sakura_core/_main/CProcess.cpp index 6323a72183..de5a81840f 100644 --- a/sakura_core/_main/CProcess.cpp +++ b/sakura_core/_main/CProcess.cpp @@ -35,7 +35,6 @@ CProcess::CProcess( , m_pfnMiniDumpWriteDump(NULL) #endif { - m_pcShareData = CShareData::getInstance(); } /*! @@ -43,7 +42,7 @@ CProcess::CProcess( */ std::filesystem::path CProcess::GetIniFileName() const { - if (m_pcShareData->IsPrivateSettings()) { + if (m_cShareData.IsPrivateSettings()) { const DLLSHAREDATA *pShareData = &GetDllShareData(); return pShareData->m_szPrivateIniFile.c_str(); } @@ -161,5 +160,5 @@ int CProcess::WriteDump( PEXCEPTION_POINTERS pExceptPtrs ) */ void CProcess::RefreshString() { - m_pcShareData->RefreshString(); + m_cShareData.RefreshString(); } diff --git a/sakura_core/_main/CProcess.h b/sakura_core/_main/CProcess.h index b03d096714..dba80427a3 100644 --- a/sakura_core/_main/CProcess.h +++ b/sakura_core/_main/CProcess.h @@ -56,10 +56,10 @@ class CProcess : public TSingleInstance { #endif public: HINSTANCE GetProcessInstance() const{ return m_hInstance; } - CShareData& GetShareData() { return *m_pcShareData; } + CShareData& GetShareData() { return m_cShareData; } HWND GetMainWindow() const{ return m_hWnd; } - [[nodiscard]] const CShareData* GetShareDataPtr() const { return m_pcShareData; } + [[nodiscard]] const CShareData* GetShareDataPtr() const { return &m_cShareData; } private: HINSTANCE m_hInstance; @@ -75,7 +75,7 @@ class CProcess : public TSingleInstance { PMINIDUMP_CALLBACK_INFORMATION CallbackParam ); #endif - CShareData* m_pcShareData; + CShareData m_cShareData; private: }; diff --git a/sakura_core/env/CShareData.h b/sakura_core/env/CShareData.h index 69a4153c78..6905f7a076 100644 --- a/sakura_core/env/CShareData.h +++ b/sakura_core/env/CShareData.h @@ -59,13 +59,12 @@ struct STypeConfig; @date 2002.01.03 YAZAKI m_tbMyButtonなどをCShareDataからCMenuDrawerへ移動したことによる修正。 */ -class CShareData : public TSingleton +class CShareData : public TSingleInstance { - friend class TSingleton; +public: CShareData(); ~CShareData(); -public: /* || Attributes & Operations */ From 2e42f52a0d1623b16a10813d64b03b0ebd869970 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Fri, 12 Mar 2021 11:09:41 +0900 Subject: [PATCH 0506/1024] =?UTF-8?q?=E3=81=93=E3=81=AE=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=A4=E3=83=AB=E3=81=AE=E3=83=91=E3=82=B9=E5=90=8D=E3=81=A8?= =?UTF-8?q?=E3=82=AB=E3=83=BC=E3=82=BD=E3=83=AB=E4=BD=8D=E7=BD=AE=E3=82=92?= =?UTF-8?q?=E3=82=B3=E3=83=94=E3=83=BC=E3=81=A7=E3=81=AE=E3=83=90=E3=83=83?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=AA=E3=83=BC=E3=83=90=E3=83=BC=E3=83=A9?= =?UTF-8?q?=E3=83=B3=E3=81=AE=E4=B8=8D=E5=85=B7=E5=90=88=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/cmd/CViewCommander_Clipboard.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/sakura_core/cmd/CViewCommander_Clipboard.cpp b/sakura_core/cmd/CViewCommander_Clipboard.cpp index 783efd90ad..3a0bd6a040 100644 --- a/sakura_core/cmd/CViewCommander_Clipboard.cpp +++ b/sakura_core/cmd/CViewCommander_Clipboard.cpp @@ -1145,16 +1145,14 @@ void CViewCommander::Command_COPYDIRPATH( void ) void CViewCommander::Command_COPYTAG( void ) { if( GetDocument()->m_cDocFile.GetFilePathClass().IsValidPath() ){ - wchar_t buf[ MAX_PATH + 20 ]; - CLogicPoint ptColLine; // 論理行番号を得る GetDocument()->m_cLayoutMgr.LayoutToLogic( GetCaret().GetCaretLayoutPos(), &ptColLine ); /* クリップボードにデータを設定 */ - auto_sprintf( buf, L"%s (%d,%d): ", GetDocument()->m_cDocFile.GetFilePath(), ptColLine.y+1, ptColLine.x+1 ); - m_pCommanderView->MySetClipboardData( buf, wcslen( buf ), false ); + std::wstring buffer = strprintf(L"%s (%d,%d): ", GetDocument()->m_cDocFile.GetFilePath(), ptColLine.y+1, ptColLine.x+1 ); + m_pCommanderView->MySetClipboardData(buffer.c_str(), buffer.length(), false); } else{ ErrorBeep(); From e2b066188f93dfffade06c0d1b4fee662d82fb98 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 13 Mar 2021 16:16:50 +0900 Subject: [PATCH 0507/1024] =?UTF-8?q?CDlgTagsMake::SelectFolder=E3=81=A7Pa?= =?UTF-8?q?thAddBackslash=E3=82=92=E4=BD=BF=E3=81=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgTagsMake.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/sakura_core/dlg/CDlgTagsMake.cpp b/sakura_core/dlg/CDlgTagsMake.cpp index 3414d0fa65..06a7e62d81 100644 --- a/sakura_core/dlg/CDlgTagsMake.cpp +++ b/sakura_core/dlg/CDlgTagsMake.cpp @@ -32,6 +32,9 @@ #include "StdAfx.h" #include "dlg/CDlgTagsMake.h" + +#include + #include "env/DLLSHAREDATA.h" #include "func/Funccode.h" #include "util/shell.h" @@ -125,12 +128,7 @@ void CDlgTagsMake::SelectFolder( HWND hwndDlg ) if( SelectDir( hwndDlg, LS(STR_DLGTAGMAK_SELECTDIR), szPath, szPath ) ) { //末尾に\\マークを追加する. - int pos = wcslen( szPath ); - if( pos > 0 && szPath[ pos - 1 ] != L'\\' ) - { - szPath[ pos ] = L'\\'; - szPath[ pos + 1 ] = L'\0'; - } + ::PathAddBackslashW( szPath ); ::DlgItem_SetText( hwndDlg, IDC_EDIT_TAG_MAKE_FOLDER, szPath ); } From 968b2030d82c7c879f4afd437c45ebc248c5e5b9 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 13 Mar 2021 16:13:32 +0900 Subject: [PATCH 0508/1024] =?UTF-8?q?CDlgExec::SetData=E3=81=AE=E3=82=B3?= =?UTF-8?q?=E3=83=BC=E3=83=87=E3=82=A3=E3=83=B3=E3=82=B0=E3=83=9F=E3=82=B9?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgExec.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sakura_core/dlg/CDlgExec.cpp b/sakura_core/dlg/CDlgExec.cpp index 7f086844b1..ecf8be4016 100644 --- a/sakura_core/dlg/CDlgExec.cpp +++ b/sakura_core/dlg/CDlgExec.cpp @@ -157,7 +157,7 @@ void CDlgExec::SetData( void ) int nOpt; hwndCombo = GetItemHwnd( IDC_COMBO_CODE_GET ); nOpt = m_pShareData->m_nExecFlgOpt & 0x88; - for( i = 0; _countof(codeTable1); i++ ){ + for( i = 0; i < _countof(codeTable1); i++ ){ if( codeTable1[i] == nOpt ){ Combo_SetCurSel( hwndCombo, i ); break; @@ -165,7 +165,7 @@ void CDlgExec::SetData( void ) } hwndCombo = GetItemHwnd( IDC_COMBO_CODE_SEND ); nOpt = m_pShareData->m_nExecFlgOpt & 0x110; - for( i = 0; _countof(codeTable2); i++ ){ + for( i = 0; i < _countof(codeTable2); i++ ){ if( codeTable2[i] == nOpt ){ Combo_SetCurSel( hwndCombo, i ); break; From e9c66a58e01e0b6e8e0f4d5749e1945bc86c9b1a Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 13 Mar 2021 23:14:58 +0900 Subject: [PATCH 0509/1024] =?UTF-8?q?CESI::GetIndexById=E3=81=AE=E7=AF=84?= =?UTF-8?q?=E5=9B=B2=E5=A4=96=E3=82=A2=E3=82=AF=E3=82=BB=E3=82=B9=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/CESI.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sakura_core/charset/CESI.cpp b/sakura_core/charset/CESI.cpp index 2f68941c6d..9cee7ce635 100644 --- a/sakura_core/charset/CESI.cpp +++ b/sakura_core/charset/CESI.cpp @@ -106,8 +106,11 @@ int CESI::GetIndexById( const ECodeType eCodeType ) const nret = 0; }else if( CODE_UNICODEBE == eCodeType ){ nret = 1; - }else{ + }else if( 0 <= eCodeType && eCodeType < _countof(gm_aMbcPriority) ){ nret = gm_aMbcPriority[eCodeType]; // 優先順位表の優先度数をそのまま m_aMbcInfo の添え字として使う。 + }else{ + assert(0); + nret = -1; } return nret; } From 6538488c3a502068c2a8190d2dfe1baa97e978bb Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sun, 27 Sep 2020 03:13:19 +0900 Subject: [PATCH 0510/1024] =?UTF-8?q?CDlgInput1=E3=81=A7=E6=96=87=E5=AD=97?= =?UTF-8?q?=E5=88=97=E9=95=B7=E3=81=AFNUL=E7=B5=82=E7=AB=AF=E3=82=92?= =?UTF-8?q?=E5=90=AB=E3=81=BE=E3=81=AA=E3=81=84=E9=95=B7=E3=81=95=E3=82=92?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E3=81=99=E3=82=8B=E3=81=AF=E3=81=9A=E3=81=8C?= =?UTF-8?q?1=E6=96=87=E5=AD=97=E5=A4=9A=E3=81=84=E3=81=A8=E3=81=93?= =?UTF-8?q?=E3=82=8D=E3=81=8C=E3=81=82=E3=82=8B=E3=81=AE=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgFavorite.cpp | 4 ++-- sakura_core/dlg/CDlgPrintSetting.cpp | 1 - sakura_core/dlg/CDlgProfileMgr.cpp | 4 ++-- sakura_core/outline/CDlgFileTree.cpp | 4 ++-- sakura_core/print/CPrintPreview.cpp | 2 +- 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/sakura_core/dlg/CDlgFavorite.cpp b/sakura_core/dlg/CDlgFavorite.cpp index 71a7ac4483..24ca0d69cd 100644 --- a/sakura_core/dlg/CDlgFavorite.cpp +++ b/sakura_core/dlg/CDlgFavorite.cpp @@ -934,7 +934,7 @@ void CDlgFavorite::AddItem() CDlgInput1 cDlgInput1; std::wstring strTitle = LS( STR_DLGFAV_ADD ); std::wstring strMessage = LS( STR_DLGFAV_ADD_PROMPT ); - if( !cDlgInput1.DoModal( G_AppInstance(), GetHwnd(), strTitle.c_str(), strMessage.c_str(), max_size, szAddText ) ){ + if( !cDlgInput1.DoModal( G_AppInstance(), GetHwnd(), strTitle.c_str(), strMessage.c_str(), max_size - 1, szAddText ) ){ return; } @@ -965,7 +965,7 @@ void CDlgFavorite::EditItem() CDlgInput1 cDlgInput1; std::wstring strTitle = LS( STR_DLGFAV_EDIT ); std::wstring strMessage = LS( STR_DLGFAV_EDIT_PROMPT ); - if( !cDlgInput1.DoModal(G_AppInstance(), GetHwnd(), strTitle.c_str(), strMessage.c_str(), max_size, szText) ){ + if( !cDlgInput1.DoModal(G_AppInstance(), GetHwnd(), strTitle.c_str(), strMessage.c_str(), max_size - 1, szText) ){ return; } GetFavorite(m_nCurrentTab); diff --git a/sakura_core/dlg/CDlgPrintSetting.cpp b/sakura_core/dlg/CDlgPrintSetting.cpp index 4a685b51e1..ecff2c9930 100644 --- a/sakura_core/dlg/CDlgPrintSetting.cpp +++ b/sakura_core/dlg/CDlgPrintSetting.cpp @@ -187,7 +187,6 @@ BOOL CDlgPrintSetting::OnDestroy( void ) BOOL CDlgPrintSetting::OnNotify(NMHDR* pNMHDR) { - CDlgInput1 cDlgInput1; NM_UPDOWN* pMNUD; int idCtrl; BOOL bSpinDown; diff --git a/sakura_core/dlg/CDlgProfileMgr.cpp b/sakura_core/dlg/CDlgProfileMgr.cpp index 6ee540c9eb..eaa10716f0 100644 --- a/sakura_core/dlg/CDlgProfileMgr.cpp +++ b/sakura_core/dlg/CDlgProfileMgr.cpp @@ -343,7 +343,7 @@ void CDlgProfileMgr::CreateProf() std::wstring strTitle = LS(STR_DLGPROFILE_NEW_PROF_TITLE); std::wstring strMessage = LS(STR_DLGPROFILE_NEW_PROF_MSG); szText[0] = L'\0'; - if( !cDlgInput1.DoModal(::GetModuleHandle(NULL), GetHwnd(), strTitle.c_str(), strMessage.c_str(), max_size, szText) ){ + if( !cDlgInput1.DoModal(::GetModuleHandle(NULL), GetHwnd(), strTitle.c_str(), strMessage.c_str(), max_size - 1, szText) ){ return; } if( szText[0] == L'\0' ){ @@ -402,7 +402,7 @@ void CDlgProfileMgr::RenameProf() std::wstring strTitle = LS(STR_DLGPROFILE_RENAME_TITLE); std::wstring strMessage = LS(STR_DLGPROFILE_RENAME_MSG); int max_size = _MAX_PATH; - if( !cDlgInput1.DoModal(::GetModuleHandle(NULL), GetHwnd(), strTitle.c_str(), strMessage.c_str(), max_size, szText) ){ + if( !cDlgInput1.DoModal(::GetModuleHandle(NULL), GetHwnd(), strTitle.c_str(), strMessage.c_str(), max_size - 1, szText) ){ return; } if( szText[0] == L'\0' ){ diff --git a/sakura_core/outline/CDlgFileTree.cpp b/sakura_core/outline/CDlgFileTree.cpp index 6d9f18439a..a72a138492 100644 --- a/sakura_core/outline/CDlgFileTree.cpp +++ b/sakura_core/outline/CDlgFileTree.cpp @@ -776,11 +776,11 @@ BOOL CDlgFileTree::OnBnClicked( int wID ) std::wstring strTitle = LS(STR_DLGREPLC_STR); WCHAR szPathFrom[_MAX_PATH]; szPathFrom[0] = L'\0'; - if( dlgInput.DoModal(G_AppInstance(), GetHwnd(), strTitle.c_str(), strMsg.c_str(), _countof(szPathFrom), szPathFrom) ){ + if( dlgInput.DoModal(G_AppInstance(), GetHwnd(), strTitle.c_str(), strMsg.c_str(), _countof(szPathFrom) - 1, szPathFrom) ){ WCHAR szPathTo[_MAX_PATH]; szPathTo[0] = L'\0'; strMsg = LS(STR_FILETREE_REPLACE_PATH_TO); - if( dlgInput.DoModal( G_AppInstance(), GetHwnd(), strTitle.c_str(), strMsg.c_str(), _countof(szPathTo), szPathTo) ){ + if( dlgInput.DoModal( G_AppInstance(), GetHwnd(), strTitle.c_str(), strMsg.c_str(), _countof(szPathTo) - 1, szPathTo) ){ int nItemsCount = (int)m_fileTreeSetting.m_aItems.size(); for( int i = 0; i < nItemsCount; i++ ){ SFileTreeItem& item = m_fileTreeSetting.m_aItems[i]; diff --git a/sakura_core/print/CPrintPreview.cpp b/sakura_core/print/CPrintPreview.cpp index 6416235adc..f481916347 100644 --- a/sakura_core/print/CPrintPreview.cpp +++ b/sakura_core/print/CPrintPreview.cpp @@ -889,7 +889,7 @@ void CPrintPreview::OnPreviewGoDirectPage( void ) m_hwndPrintPreviewBar, LS(STR_ERR_DLGPRNPRVW5), szMessage, - INPUT_PAGE_NUM_LEN, + _countof(szPageNum) - 1, szPageNum ); if( FALSE != bDlgInputPageResult ){ From eef259edc9e53ada46a38b03d9f10735d4b0d2b8 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Mon, 15 Mar 2021 21:53:18 +0900 Subject: [PATCH 0511/1024] =?UTF-8?q?SetGrepFolder=E5=87=A6=E7=90=86?= =?UTF-8?q?=E3=83=90=E3=83=83=E3=83=95=E3=82=A1=E3=82=AA=E3=83=BC=E3=83=90?= =?UTF-8?q?=E3=83=BC=E3=83=A9=E3=83=B3=E4=BF=AE=E6=AD=A3(std::wstring?= =?UTF-8?q?=E7=89=88)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgGrep.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sakura_core/dlg/CDlgGrep.cpp b/sakura_core/dlg/CDlgGrep.cpp index 65a06368fc..f79c088dd6 100644 --- a/sakura_core/dlg/CDlgGrep.cpp +++ b/sakura_core/dlg/CDlgGrep.cpp @@ -913,9 +913,9 @@ LPVOID CDlgGrep::GetHelpIdTable(void) static void SetGrepFolder( HWND hwndCtrl, LPCWSTR folder ) { if( wcschr( folder, L';') ){ - CNativeW strQuoteFolder; - strQuoteFolder.AppendStringF(L"\"%s\"", folder); - ::SetWindowText( hwndCtrl, strQuoteFolder.GetStringPtr() ); + std::wstring strQuoteFolder; + strQuoteFolder = std::wstring(L"\"") + folder + std::wstring(L"\""); + ::SetWindowText( hwndCtrl, strQuoteFolder.c_str() ); }else{ ::SetWindowText( hwndCtrl, folder ); } From 2436c17678d2a89aecf9ab3ffd4fa91a8bc51d0e Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Tue, 16 Mar 2021 21:59:34 +0900 Subject: [PATCH 0512/1024] =?UTF-8?q?WCODE::IsHankaku=20=E3=81=8C=E6=96=87?= =?UTF-8?q?=E5=AD=97=E5=B9=85=E3=82=AD=E3=83=A3=E3=83=83=E3=82=B7=E3=83=A5?= =?UTF-8?q?=E3=82=92=E4=BD=BF=E7=94=A8=E3=81=97=E3=81=AA=E3=81=84=E5=95=8F?= =?UTF-8?q?=E9=A1=8C=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/charcode.cpp | 6 +++--- sakura_core/charset/charcode.h | 8 +++++--- sakura_core/convert/CConvert.cpp | 2 +- sakura_core/convert/CConvert_SpaceToTab.cpp | 2 +- sakura_core/convert/CConvert_SpaceToTab.h | 8 ++++++-- sakura_core/mem/CNativeW.cpp | 2 +- sakura_core/mem/CNativeW.h | 2 +- tests/unittests/test-cconvert.cpp | 18 +++++++++++++----- tests/unittests/test-cnative.cpp | 2 +- 9 files changed, 32 insertions(+), 18 deletions(-) diff --git a/sakura_core/charset/charcode.cpp b/sakura_core/charset/charcode.cpp index 91ebd54211..52597affd5 100644 --- a/sakura_core/charset/charcode.cpp +++ b/sakura_core/charset/charcode.cpp @@ -50,7 +50,7 @@ namespace WCODE bool CalcHankakuByFont(wchar_t); //2007.08.30 kobake 追加 - bool IsHankaku(wchar_t wc, const CCharWidthCache& cache) + bool IsHankaku(wchar_t wc, CCharWidthCache& cache) { //※ほぼ未検証。ロジックが確定したらインライン化すると良い。 @@ -165,9 +165,9 @@ void CCharWidthCache::Clear() m_pCache->m_nCharWidthCacheTest=0x12345678; } -bool CCharWidthCache::CalcHankakuByFont(wchar_t c) const +bool CCharWidthCache::CalcHankakuByFont(wchar_t c) { - return QueryPixelWidth(c) <= m_han_size.cx; + return CalcPxWidthByFont(c) <= m_han_size.cx; } int CCharWidthCache::QueryPixelWidth(wchar_t c) const diff --git a/sakura_core/charset/charcode.h b/sakura_core/charset/charcode.h index a16deee76d..91203a518d 100644 --- a/sakura_core/charset/charcode.h +++ b/sakura_core/charset/charcode.h @@ -248,7 +248,7 @@ class CCharWidthCache { [[nodiscard]] bool GetMultiFont() const { return m_bMultiFont; } //!文字が半角かどうかを取得(DLLSHARE/フォント依存) - virtual bool CalcHankakuByFont(wchar_t c) const; + virtual bool CalcHankakuByFont(wchar_t c); //!文字のpx幅を取得(DLLSHARE/フォント依存) virtual int CalcPxWidthByFont(wchar_t c); //!文字のpx幅を取得(DLLSHARE/フォント依存) @@ -280,9 +280,11 @@ void InitCharWidthCacheFromDC(const LOGFONT* lfs, ECharWidthFontMode fMode, HDC namespace WCODE { //!半角文字(縦長長方形)かどうか判定 - bool IsHankaku(wchar_t wc, const CCharWidthCache& cache = GetCharWidthCache()); + bool IsHankaku(wchar_t wc, CCharWidthCache& cache = GetCharWidthCache()); //!全角文字(正方形)かどうか判定 - inline bool IsZenkaku(wchar_t wc) { return !IsHankaku(wc); } + inline bool IsZenkaku(wchar_t wc, CCharWidthCache& cache = GetCharWidthCache()) { + return !IsHankaku(wc, cache); + } } #endif /* SAKURA_CHARCODE_4C34C669_0BAB_441A_9B1D_2B9AC1895380_H_ */ diff --git a/sakura_core/convert/CConvert.cpp b/sakura_core/convert/CConvert.cpp index 874e5526e1..30a6225e2f 100644 --- a/sakura_core/convert/CConvert.cpp +++ b/sakura_core/convert/CConvert.cpp @@ -111,7 +111,7 @@ void CConvertMediator::ConvMemory( CNativeW* pCMemory, EFunctionCode nFuncCode, case F_HANKATATOZENHIRA: CConvert_HankataToZenhira().CallConvert(pCMemory); break; // 半角カタカナ→全角ひらがな //文字種変換、整形 case F_TABTOSPACE: CConvert_TabToSpace((Int)nTabWidth, nStartColumn, bExtEol).CallConvert(pCMemory);break; // TAB→空白 - case F_SPACETOTAB: CConvert_SpaceToTab((Int)nTabWidth, nStartColumn, bExtEol).CallConvert(pCMemory);break; // 空白→TAB + case F_SPACETOTAB: CConvert_SpaceToTab((Int)nTabWidth, nStartColumn, bExtEol, GetCharWidthCache()).CallConvert(pCMemory);break; // 空白→TAB case F_LTRIM: CConvert_Trim(true, bExtEol).CallConvert(pCMemory); break; // 2001.12.03 hor case F_RTRIM: CConvert_Trim(false, bExtEol).CallConvert(pCMemory); break; // 2001.12.03 hor //コード変換(xxx2SJIS) diff --git a/sakura_core/convert/CConvert_SpaceToTab.cpp b/sakura_core/convert/CConvert_SpaceToTab.cpp index 347ab68da0..748de37b9c 100644 --- a/sakura_core/convert/CConvert_SpaceToTab.cpp +++ b/sakura_core/convert/CConvert_SpaceToTab.cpp @@ -100,7 +100,7 @@ bool CConvert_SpaceToTab::DoConvert(CNativeW* pcData) } } nPosX++; - if(WCODE::IsZenkaku(pLine[i])) nPosX++; //全角文字ずれ対応 2008.10.17 matsumo + if(WCODE::IsZenkaku(pLine[i], m_cCache)) nPosX++; //全角文字ずれ対応 2008.10.17 matsumo pDes[nPosDes] = pLine[i]; nPosDes++; bSpace = FALSE; diff --git a/sakura_core/convert/CConvert_SpaceToTab.h b/sakura_core/convert/CConvert_SpaceToTab.h index ccf50ba882..20e083bdd5 100644 --- a/sakura_core/convert/CConvert_SpaceToTab.h +++ b/sakura_core/convert/CConvert_SpaceToTab.h @@ -29,10 +29,13 @@ #include "CConvert.h" +class CCharWidthCache; + class CConvert_SpaceToTab final : public CConvert{ public: - CConvert_SpaceToTab(int nTabWidth, int nStartColumn, bool bExtEol) - : m_nTabWidth(nTabWidth), m_nStartColumn(nStartColumn), m_bExtEol(bExtEol) + CConvert_SpaceToTab(int nTabWidth, int nStartColumn, bool bExtEol, CCharWidthCache& cache) + : m_nTabWidth(nTabWidth), m_nStartColumn(nStartColumn), + m_bExtEol(bExtEol), m_cCache(cache) { } @@ -42,5 +45,6 @@ class CConvert_SpaceToTab final : public CConvert{ int m_nTabWidth; int m_nStartColumn; bool m_bExtEol; + CCharWidthCache& m_cCache; }; #endif /* SAKURA_CCONVERT_SPACETOTAB_AA8D9341_7190_4332_AA23_C0D9AA4DC8D0_H_ */ diff --git a/sakura_core/mem/CNativeW.cpp b/sakura_core/mem/CNativeW.cpp index 5c6d717f9c..6a0a8046a2 100644 --- a/sakura_core/mem/CNativeW.cpp +++ b/sakura_core/mem/CNativeW.cpp @@ -374,7 +374,7 @@ CLogicInt CNativeW::GetSizeOfChar( const wchar_t* pData, int nDataLen, int nIdx } //! 指定した位置の文字が半角何個分かを返す -CKetaXInt CNativeW::GetKetaOfChar( const wchar_t* pData, int nDataLen, int nIdx, const CCharWidthCache& cache) +CKetaXInt CNativeW::GetKetaOfChar( const wchar_t* pData, int nDataLen, int nIdx, CCharWidthCache& cache) { //文字列範囲外なら 0 if( nIdx >= nDataLen ) diff --git a/sakura_core/mem/CNativeW.h b/sakura_core/mem/CNativeW.h index 01ea9229de..d264056526 100644 --- a/sakura_core/mem/CNativeW.h +++ b/sakura_core/mem/CNativeW.h @@ -169,7 +169,7 @@ class CNativeW final : public CNative{ bool bEnableExtEol, CCharWidthCache& cache = GetCharWidthCache() ); //! 指定した位置の文字が半角何個分かを返す static CKetaXInt GetKetaOfChar( const wchar_t* pData, int nDataLen, int nIdx, - const CCharWidthCache& cache = GetCharWidthCache() ); + CCharWidthCache& cache = GetCharWidthCache() ); static const wchar_t* GetCharNext( const wchar_t* pData, int nDataLen, const wchar_t* pDataCurrent ); //!< ポインタで示した文字の次にある文字の位置を返します static const wchar_t* GetCharPrev(const wchar_t* pData, size_t nDataLen, const wchar_t* pDataCurrent); //!< ポインタで示した文字の直前にある文字の位置を返します diff --git a/tests/unittests/test-cconvert.cpp b/tests/unittests/test-cconvert.cpp index 98fe81d0cb..89b232b0f7 100644 --- a/tests/unittests/test-cconvert.cpp +++ b/tests/unittests/test-cconvert.cpp @@ -23,6 +23,7 @@ */ #include +#include "charset/charcode.h" #include "convert/CConvert.h" #include "convert/CConvert_HaneisuToZeneisu.h" #include "convert/CConvert_HankataToZenhira.h" @@ -329,34 +330,41 @@ TEST(CConvert, TabToSpace) TEST(CConvert, SpaceToTab) { + class FakeCache : public CCharWidthCache { + public: + bool CalcHankakuByFont(wchar_t ch) override { + return ch != L'あ'; + } + } cache; + CNativeW actual; CNativeW expected; actual.SetString(L""); - EXPECT_FALSE(CConvert_SpaceToTab(4, 0, false).DoConvert(&actual)); + EXPECT_FALSE(CConvert_SpaceToTab(4, 0, false, cache).DoConvert(&actual)); // 空白をタブに変換 actual.SetString(L" "); expected.SetString(L"\t\t"); - EXPECT_TRUE(CConvert_SpaceToTab(4, 0, false).DoConvert(&actual)); + EXPECT_TRUE(CConvert_SpaceToTab(4, 0, false, cache).DoConvert(&actual)); EXPECT_EQ(actual, expected); // タブは変換しない actual.SetString(L"\t\t"); expected.SetString(L"\t\t"); - EXPECT_TRUE(CConvert_SpaceToTab(4, 0, false).DoConvert(&actual)); + EXPECT_TRUE(CConvert_SpaceToTab(4, 0, false, cache).DoConvert(&actual)); EXPECT_EQ(actual, expected); // 空白の数がタブ幅より少ない場合は変換しない actual.SetString(L" "); expected.SetString(L" "); - EXPECT_TRUE(CConvert_SpaceToTab(4, 0, false).DoConvert(&actual)); + EXPECT_TRUE(CConvert_SpaceToTab(4, 0, false, cache).DoConvert(&actual)); EXPECT_EQ(actual, expected); // 文字と空白の混在 actual.SetString(L" aあ b "); expected.SetString(L" aあ\t b "); - EXPECT_TRUE(CConvert_SpaceToTab(8, 0, false).DoConvert(&actual)); + EXPECT_TRUE(CConvert_SpaceToTab(8, 0, false, cache).DoConvert(&actual)); EXPECT_EQ(actual, expected); } diff --git a/tests/unittests/test-cnative.cpp b/tests/unittests/test-cnative.cpp index e8423b24ca..6a3b000850 100644 --- a/tests/unittests/test-cnative.cpp +++ b/tests/unittests/test-cnative.cpp @@ -792,7 +792,7 @@ TEST(CNativeW, GetKetaOfChar) // 文字が全角なら2を返す。 class FakeCache : public CCharWidthCache { public: - bool CalcHankakuByFont(wchar_t c) const override { return false; } + bool CalcHankakuByFont(wchar_t c) override { return false; } } cache; EXPECT_EQ(CNativeW::GetKetaOfChar(L"あ", 1, 0, cache), 2); } From 94c22e6ae02cd29418790d44d8161cf474888141 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Wed, 17 Mar 2021 13:40:50 +0900 Subject: [PATCH 0513/1024] =?UTF-8?q?CCodeBase::MIMEHeaderDecode=20?= =?UTF-8?q?=E3=81=AE=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/CCodeBase.h | 4 +- tests/unittests/test-ccodebase.cpp | 66 ++++++++++++++++++++++++++ tests/unittests/tests1.vcxproj | 1 + tests/unittests/tests1.vcxproj.filters | 3 ++ 4 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 tests/unittests/test-ccodebase.cpp diff --git a/sakura_core/charset/CCodeBase.h b/sakura_core/charset/CCodeBase.h index c9ad351315..1c244a6b95 100644 --- a/sakura_core/charset/CCodeBase.h +++ b/sakura_core/charset/CCodeBase.h @@ -27,6 +27,8 @@ #define SAKURA_CCODEBASE_1AB194FB_933C_495E_A3A3_62E117C72644_H_ #pragma once +#include "mem/CNativeW.h" + //定数 enum EConvertResult{ RESULT_COMPLETE, //!< データを失うことなく変換が完了した。 @@ -34,8 +36,6 @@ enum EConvertResult{ RESULT_FAILURE, //!< 何らかの原因により失敗した。 }; -class CMemory; -class CNativeW; struct CommonSetting_Statusbar; enum EEolType : char; diff --git a/tests/unittests/test-ccodebase.cpp b/tests/unittests/test-ccodebase.cpp new file mode 100644 index 0000000000..5fe4c60ca9 --- /dev/null +++ b/tests/unittests/test-ccodebase.cpp @@ -0,0 +1,66 @@ +/* + Copyright (C) 2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ + +#include +#include +#include "charset/CCodeBase.h" + +TEST(CCodeBase, MIMEHeaderDecode) +{ + CMemory m; + + // Base64 JIS + std::string source1("From: =?iso-2022-jp?B?GyRCJTUlLyVpGyhC?="); + EXPECT_TRUE(CCodeBase::MIMEHeaderDecode(source1.c_str(), source1.length(), &m, CODE_JIS)); + EXPECT_STREQ(static_cast(m.GetRawPtr()), "From: $B%5%/%i(B"); + + // Base64 UTF-8 + std::string source2("From: =?utf-8?B?44K144Kv44Op?="); + EXPECT_TRUE(CCodeBase::MIMEHeaderDecode(source2.c_str(), source2.length(), &m, CODE_UTF8)); + EXPECT_STREQ(static_cast(m.GetRawPtr()), "From: \xe3\x82\xb5\xe3\x82\xaf\xe3\x83\xa9"); + + // QP UTF-8 + std::string source3("From: =?utf-8?Q?=E3=82=B5=E3=82=AF=E3=83=A9!?="); + EXPECT_TRUE(CCodeBase::MIMEHeaderDecode(source3.c_str(), source3.length(), &m, CODE_UTF8)); + EXPECT_STREQ(static_cast(m.GetRawPtr()), "From: \xe3\x82\xb5\xe3\x82\xaf\xe3\x83\xa9!"); + + // 引数の文字コードとヘッダー内の文字コードが異なる場合は変換しない + EXPECT_TRUE(CCodeBase::MIMEHeaderDecode(source1.c_str(), source1.length(), &m, CODE_UTF8)); + EXPECT_STREQ(static_cast(m.GetRawPtr()), source1.c_str()); + + // 対応していない文字コードなら変換しない + std::string source4("From: =?utf-7?B?+MLUwrzDp-"); + EXPECT_TRUE(CCodeBase::MIMEHeaderDecode(source4.c_str(), source4.length(), &m, CODE_UTF7)); + EXPECT_STREQ(static_cast(m.GetRawPtr()), source4.c_str()); + + // 謎の符号化方式が指定されていたら何もしない + std::string source5("From: =?iso-2022-jp?X?GyRCJTUlLyVpGyhC?="); + EXPECT_TRUE(CCodeBase::MIMEHeaderDecode(source5.c_str(), source5.length(), &m, CODE_JIS)); + EXPECT_STREQ(static_cast(m.GetRawPtr()), source5.c_str()); + + // 末尾の ?= がなければ変換しない + std::string source6("From: =?iso-2022-jp?B?GyRCJTUlLyVpGyhC"); + EXPECT_TRUE(CCodeBase::MIMEHeaderDecode(source6.c_str(), source6.length(), &m, CODE_JIS)); + EXPECT_STREQ(static_cast(m.GetRawPtr()), source6.c_str()); +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index 4f2bb3870d..00fec312f2 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -107,6 +107,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index eca9cf0f22..4126fb8cea 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -119,6 +119,9 @@ Test Files + + Test Files + From e25539bfb2a97e6ed316a8cc77b033a384a52d41 Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Thu, 18 Mar 2021 06:52:59 +0900 Subject: [PATCH 0514/1024] =?UTF-8?q?=E3=82=A2=E3=82=A6=E3=83=88=E3=83=A9?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E8=A7=A3=E6=9E=90=E3=83=80=E3=82=A4=E3=82=A2?= =?UTF-8?q?=E3=83=AD=E3=82=B0=E3=83=9C=E3=83=83=E3=82=AF=E3=82=B9=E3=82=92?= =?UTF-8?q?=E3=83=89=E3=83=83=E3=82=AD=E3=83=B3=E3=82=B0=E6=99=82=E3=81=AB?= =?UTF-8?q?=E3=82=B9=E3=83=97=E3=83=AA=E3=83=83=E3=82=BF=E3=83=BC=E3=82=92?= =?UTF-8?q?=E3=83=89=E3=83=A9=E3=83=83=E3=82=B0=E3=81=97=E3=81=A6=E3=83=AA?= =?UTF-8?q?=E3=82=B5=E3=82=A4=E3=82=BA=E3=81=99=E3=82=8B=E3=81=A8=E3=82=A6?= =?UTF-8?q?=E3=82=A3=E3=83=B3=E3=83=89=E3=82=A6=E3=81=AE=E6=8F=8F=E7=94=BB?= =?UTF-8?q?=E3=81=8C=E3=81=A1=E3=82=89=E3=81=A4=E3=81=8F=E5=95=8F=E9=A1=8C?= =?UTF-8?q?=E3=82=92=E8=A7=A3=E6=B6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit リソースファイルの IDD_FUNCLIST に WS_EX_COMPOSITED 拡張スタイルを指定 CDlgFuncList::OnSize においてコントロールに対して行っていた 「ちらつき防止用の試行錯誤」 の UpdateWindow 呼び出しを削除 --- sakura_core/outline/CDlgFuncList.cpp | 4 ---- sakura_core/sakura_rc.rc | 1 + 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/sakura_core/outline/CDlgFuncList.cpp b/sakura_core/outline/CDlgFuncList.cpp index c9634bcb71..bcdde6542e 100644 --- a/sakura_core/outline/CDlgFuncList.cpp +++ b/sakura_core/outline/CDlgFuncList.cpp @@ -2197,10 +2197,6 @@ BOOL CDlgFuncList::OnSize( WPARAM wParam, LPARAM lParam ) for( int i = 0 ; i < _countof(anchorList); i++ ){ HWND hwndCtrl = GetItemHwnd(anchorList[i].id); ResizeItem( hwndCtrl, m_ptDefaultSizeClient, ptNew, m_rcItems[i], anchorList[i].anchor, (anchorList[i].anchor != ANCHOR_ALL)); -// 2013.2.6 aroka ちらつき防止用の試行錯誤 - if(anchorList[i].anchor == ANCHOR_ALL){ - ::UpdateWindow( hwndCtrl ); - } } // if( IsDocking() ) diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index 9612b17fc8..e236904c03 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -109,6 +109,7 @@ END IDD_FUNCLIST DIALOG 0, 0, 240, 289 STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_COMPOSITED CAPTION "x" FONT 9, "MS Pゴシック" BEGIN From 984f055c4b448fa4da0b6a0aee968d73bbd48f02 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 19 Mar 2021 01:02:36 +0900 Subject: [PATCH 0515/1024] =?UTF-8?q?CFileNameManager::GetFilePathFormat?= =?UTF-8?q?=E3=81=AE=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-file.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tests/unittests/test-file.cpp b/tests/unittests/test-file.cpp index 04e7a4dca1..fbff862987 100644 --- a/tests/unittests/test-file.cpp +++ b/tests/unittests/test-file.cpp @@ -458,3 +458,24 @@ TEST(CFilePath, GetExt) // 拡張子がない場合に返却されるポインタ値の確認 ASSERT_EQ(path.c_str() + path.Length(), path.GetExt()); } + +/*! + CFileNameManager::GetFilePathFormatのテスト + */ +TEST(CFileNameManager, GetFilePathFormat) +{ + // バッファ + std::wstring strBuf; + + // 十分な大きさのバッファを指定 + strBuf = std::wstring(50, L'x'); + ASSERT_STREQ(LR"(C:\テンポラリ\test.txt)", CFileNameManager::GetFilePathFormat(LR"(C:\%Temp%\test.txt)", strBuf.data(), strBuf.size() + 1, L"%Temp%", L"テンポラリ")); + + // バッファ不足(パターンに一致した部分が切り捨てられる) + strBuf = std::wstring(6, L'x'); + ASSERT_STREQ(LR"(C:\テンポ)", CFileNameManager::GetFilePathFormat(LR"(C:\%Temp%\test.txt)", strBuf.data(), strBuf.size() + 1, L"%Temp%", L"テンポラリ")); + + // バッファ不足(パターンに一致しない部分が切り捨てられる) + strBuf = std::wstring(15, L'x'); + ASSERT_STREQ(LR"(C:\テンポラリ\test.t)", CFileNameManager::GetFilePathFormat(LR"(C:\%Temp%\test.txt)", strBuf.data(), strBuf.size() + 1, L"%Temp%", L"テンポラリ")); +} From 463c328e3eb463f85bde19f385edd73c4746513d Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 19 Mar 2021 01:03:12 +0900 Subject: [PATCH 0516/1024] =?UTF-8?q?CFileNameManager::GetFilePathFormat?= =?UTF-8?q?=E3=81=AE=E3=83=AA=E3=83=95=E3=82=A1=E3=82=AF=E3=82=BF=E3=83=AA?= =?UTF-8?q?=E3=83=B3=E3=82=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/env/CFileNameManager.cpp | 54 ++++++++-------------------- sakura_core/env/CFileNameManager.h | 4 ++- 2 files changed, 17 insertions(+), 41 deletions(-) diff --git a/sakura_core/env/CFileNameManager.cpp b/sakura_core/env/CFileNameManager.cpp index 91bf856797..7be44d4ea7 100644 --- a/sakura_core/env/CFileNameManager.cpp +++ b/sakura_core/env/CFileNameManager.cpp @@ -119,50 +119,24 @@ int CFileNameManager::TransformFileName_MakeCache( void ){ @date 2002.11.27 Moca 新規作成 @note 大小文字を区別しない。nDestLenに達したときは後ろを切り捨てられる */ -LPCWSTR CFileNameManager::GetFilePathFormat( LPCWSTR pszSrc, LPWSTR pszDest, int nDestLen, LPCWSTR pszFrom, LPCWSTR pszTo ) +LPCWSTR CFileNameManager::GetFilePathFormat( std::wstring_view strSrc, LPWSTR pszDest, size_t nDestLen, std::wstring_view strFrom, std::wstring_view strTo ) { - int i, j; - int nSrcLen; - int nFromLen, nToLen; - int nCopy; - - nSrcLen = wcslen( pszSrc ); - nFromLen = wcslen( pszFrom ); - nToLen = wcslen( pszTo ); - - nDestLen--; - - for( i = 0, j = 0; i < nSrcLen && j < nDestLen; i++ ){ -#if defined(_MBCS) - if( 0 == _strnicmp( &pszSrc[i], pszFrom, nFromLen ) ) -#else - if( 0 == _wcsnicmp( &pszSrc[i], pszFrom, nFromLen ) ) -#endif - { - nCopy = t_min( nToLen, nDestLen - j ); - memcpy( &pszDest[j], pszTo, nCopy * sizeof( WCHAR ) ); - j += nCopy; - i += nFromLen - 1; - }else{ -#if defined(_MBCS) -// SJIS 専用処理 - if( _IS_SJIS_1( (unsigned char)pszSrc[i] ) && i + 1 < nSrcLen && _IS_SJIS_2( (unsigned char)pszSrc[i + 1] ) ){ - if( j + 1 < nDestLen ){ - pszDest[j] = pszSrc[i]; - j++; - i++; - }else{ - // SJISの先行バイトだけコピーされるのを防ぐ - break;// goto end_of_func; - } + auto it = strSrc.begin(); + wchar_t* pDest = pszDest; + wchar_t* pEnd = pszDest + nDestLen; + while( it < strSrc.end() && pDest + 1 < pEnd ){ + if( 0 == ::_wcsnicmp( &*it, strFrom.data(), strFrom.length() ) ){ + if( STRUNCATE == ::wcsncpy_s( pDest, pEnd - pDest, strTo.data(), _TRUNCATE ) ){ + return pszDest; } -#endif - pszDest[j] = pszSrc[i]; - j++; + pDest += ::wcsnlen( pDest, pEnd - pDest ); + it += strFrom.length(); + }else{ + ::wcsncpy_s( pDest, pEnd - pDest, &*it, 1 ); + ++pDest; + ++it; } } -// end_of_func:; - pszDest[j] = '\0'; return pszDest; } diff --git a/sakura_core/env/CFileNameManager.h b/sakura_core/env/CFileNameManager.h index 9e0c85bec4..d2f144a763 100644 --- a/sakura_core/env/CFileNameManager.h +++ b/sakura_core/env/CFileNameManager.h @@ -30,6 +30,8 @@ #define SAKURA_CFILENAMEMANAGER_2B89B426_470E_40D6_B62E_5321E383ECD6_H_ #pragma once +#include + // 要先行定義 // #include "DLLSHAREDATA.h" @@ -51,7 +53,7 @@ class CFileNameManager : public TSingleton{ //ファイル名関連 LPWSTR GetTransformFileNameFast( LPCWSTR, LPWSTR, int nDestLen, HDC hDC, bool bFitMode = true, int cchMaxWidth = 0 ); // 2002.11.24 Moca Add int TransformFileName_MakeCache( void ); - static LPCWSTR GetFilePathFormat( LPCWSTR, LPWSTR, int, LPCWSTR, LPCWSTR ); + static LPCWSTR GetFilePathFormat( std::wstring_view strSrc, LPWSTR pszDest, size_t nDestLen, std::wstring_view strFrom, std::wstring_view strTo ); static bool ExpandMetaToFolder( LPCWSTR, LPWSTR, int ); //メニュー類のファイル名作成 From 845533427f9c857f37c840ef1baf62cd8d86def7 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 15 Mar 2021 00:17:08 +0900 Subject: [PATCH 0517/1024] =?UTF-8?q?GetExistPathW=E3=81=AE=E7=AF=84?= =?UTF-8?q?=E5=9B=B2=E5=A4=96=E3=82=A2=E3=82=AF=E3=82=BB=E3=82=B9=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/file.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/util/file.cpp b/sakura_core/util/file.cpp index 11ba12f682..6da319ae48 100644 --- a/sakura_core/util/file.cpp +++ b/sakura_core/util/file.cpp @@ -838,7 +838,7 @@ void GetExistPathW( wchar_t *po , const wchar_t *pi ) break; /* ループを抜ける */ } /* ↓ルートディレクトリを引っかけるための処理 */ - if( ( *pw == L'\\' )&&( *(pw-1) == L':' ) ){ /* C:\ とかの \ っぽい */ + if( ( *pw == L'\\' )&&( ps < pw )&&( *(pw-1) == L':' ) ){ /* C:\ とかの \ っぽい */ * (pw+1) = L'\0'; /* \ の後ろの位置を文字列の終端にする。 */ if( _waccess(po,0) == 0 ) break; /* 有効なパス文字列が見つかった */ } From 7415e5eba92791402027cd4df671b0cd723e0e84 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 15 Mar 2021 00:12:59 +0900 Subject: [PATCH 0518/1024] =?UTF-8?q?CTextDrawer::DispLineNumber=E3=81=AE?= =?UTF-8?q?=E8=AD=A6=E5=91=8A=E5=AF=BE=E7=AD=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 行番号が17桁あると落ちるので、詳細仕様の検討必要。 --- sakura_core/view/CTextDrawer.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/sakura_core/view/CTextDrawer.cpp b/sakura_core/view/CTextDrawer.cpp index 1339959e37..6faa7e8ddd 100644 --- a/sakura_core/view/CTextDrawer.cpp +++ b/sakura_core/view/CTextDrawer.cpp @@ -497,9 +497,8 @@ void CTextDrawer::DispLineNumber( /* 行番号区切り 0=なし 1=縦線 2=任意 */ if( 2 == pTypes->m_nLineTermType ){ - // Sep. 22, 2002 genta - szLineNum[ nLineCols ] = pTypes->m_cLineTermChar; - szLineNum[ ++nLineCols ] = '\0'; + const wchar_t szSeparator[] = { pTypes->m_cLineTermChar, 0 }; + ::wcscat_s(szLineNum, szSeparator); } } From 77b1a4af2f216aebadf66d410887962c71a9d310 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 15 Mar 2021 02:53:12 +0900 Subject: [PATCH 0519/1024] =?UTF-8?q?CType=5FCpp=E3=81=AE=E7=AF=84?= =?UTF-8?q?=E5=9B=B2=E5=A4=96=E3=82=A2=E3=82=AF=E3=82=BB=E3=82=B9=E3=81=AE?= =?UTF-8?q?=E3=81=86=E3=81=A1=E7=B0=A1=E5=8D=98=E3=81=AB=E7=9B=B4=E3=82=8B?= =?UTF-8?q?=E3=82=82=E3=81=AE=E3=82=92=E5=AF=BE=E7=AD=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/types/CType_Cpp.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sakura_core/types/CType_Cpp.cpp b/sakura_core/types/CType_Cpp.cpp index f55d652e18..97739f7218 100644 --- a/sakura_core/types/CType_Cpp.cpp +++ b/sakura_core/types/CType_Cpp.cpp @@ -774,8 +774,8 @@ void CDocOutline::MakeFuncList_C( CFuncInfoArr* pcFuncInfoArr ,EOutlineType& nOu if( nMode2 == M2_NORMAL && C_IsOperator(szWordPrev, nLen) ){ // 演算子のオペレータだった operator ""i if( nLen + 1 < _countof(szWordPrev) ){ - szWordPrev[nLen] = pLine[i]; - szWordPrev[nLen + 1] = L'\0'; + const wchar_t szOperator[] = { pLine[i], 0 }; + ::wcscat_s( szWordPrev, szOperator ); } nMode2 = M2_OPERATOR_WORD; }else{ @@ -1029,8 +1029,8 @@ void CDocOutline::MakeFuncList_C( CFuncInfoArr* pcFuncInfoArr ,EOutlineType& nOu if( nMode2 == M2_NORMAL && C_IsOperator(szWordPrev, nLen) ){ // 演算子のオペレータだった operator [] if( nLen + 1 < _countof(szWordPrev) ){ - szWordPrev[nLen] = pLine[i]; - szWordPrev[nLen + 1] = L'\0'; + const wchar_t szOperator[] = { pLine[i], 0 }; + ::wcscat_s( szWordPrev, szOperator ); } nMode2 = M2_OPERATOR_WORD; }else From c74413698d87e7723a154ab6427882fb137b0aec Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 20 Mar 2021 08:18:44 +0900 Subject: [PATCH 0520/1024] =?UTF-8?q?SonarCloud=E6=8C=87=E6=91=98=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/env/CFileNameManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/env/CFileNameManager.cpp b/sakura_core/env/CFileNameManager.cpp index 7be44d4ea7..0e171a675f 100644 --- a/sakura_core/env/CFileNameManager.cpp +++ b/sakura_core/env/CFileNameManager.cpp @@ -123,7 +123,7 @@ LPCWSTR CFileNameManager::GetFilePathFormat( std::wstring_view strSrc, LPWSTR ps { auto it = strSrc.begin(); wchar_t* pDest = pszDest; - wchar_t* pEnd = pszDest + nDestLen; + const wchar_t* pEnd = pszDest + nDestLen; while( it < strSrc.end() && pDest + 1 < pEnd ){ if( 0 == ::_wcsnicmp( &*it, strFrom.data(), strFrom.length() ) ){ if( STRUNCATE == ::wcsncpy_s( pDest, pEnd - pDest, strTo.data(), _TRUNCATE ) ){ From 28d31e38f97ac7877b71318b10b2249ca1500b3d Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 20 Mar 2021 08:29:55 +0900 Subject: [PATCH 0521/1024] =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C(?= =?UTF-8?q?=E7=BD=AE=E6=8F=9B=E5=85=88strTo=E3=81=AE=E6=96=87=E5=AD=97?= =?UTF-8?q?=E5=88=97=E9=95=B7=E3=82=92=E8=80=83=E6=85=AE=E3=81=99=E3=82=8B?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/env/CFileNameManager.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sakura_core/env/CFileNameManager.cpp b/sakura_core/env/CFileNameManager.cpp index 0e171a675f..32d10683c5 100644 --- a/sakura_core/env/CFileNameManager.cpp +++ b/sakura_core/env/CFileNameManager.cpp @@ -126,7 +126,10 @@ LPCWSTR CFileNameManager::GetFilePathFormat( std::wstring_view strSrc, LPWSTR ps const wchar_t* pEnd = pszDest + nDestLen; while( it < strSrc.end() && pDest + 1 < pEnd ){ if( 0 == ::_wcsnicmp( &*it, strFrom.data(), strFrom.length() ) ){ - if( STRUNCATE == ::wcsncpy_s( pDest, pEnd - pDest, strTo.data(), _TRUNCATE ) ){ + if( strTo.length() < static_cast(pEnd - pDest) ){ + ::wcsncpy_s( pDest, pEnd - pDest, strTo.data(), strTo.length() ); + }else{ + ::wcsncpy_s( pDest, pEnd - pDest, strTo.data(), _TRUNCATE ); return pszDest; } pDest += ::wcsnlen( pDest, pEnd - pDest ); From 8e2780e66ae1fbd0774b5b08a3a380568961d0f4 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 20 Mar 2021 10:00:20 +0900 Subject: [PATCH 0522/1024] =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C(?= =?UTF-8?q?=E3=82=BD=E3=83=BC=E3=82=B9=E3=81=AE=E6=96=87=E5=AD=97=E5=88=97?= =?UTF-8?q?=E9=95=B7=E3=82=82=E8=80=83=E6=85=AE=E3=81=99=E3=82=8B)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/env/CFileNameManager.cpp | 2 +- tests/unittests/test-file.cpp | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/sakura_core/env/CFileNameManager.cpp b/sakura_core/env/CFileNameManager.cpp index 32d10683c5..f6fd5b9c28 100644 --- a/sakura_core/env/CFileNameManager.cpp +++ b/sakura_core/env/CFileNameManager.cpp @@ -125,7 +125,7 @@ LPCWSTR CFileNameManager::GetFilePathFormat( std::wstring_view strSrc, LPWSTR ps wchar_t* pDest = pszDest; const wchar_t* pEnd = pszDest + nDestLen; while( it < strSrc.end() && pDest + 1 < pEnd ){ - if( 0 == ::_wcsnicmp( &*it, strFrom.data(), strFrom.length() ) ){ + if( strSrc.end() - it >= strFrom.length() && 0 == ::_wcsnicmp( &*it, strFrom.data(), strFrom.length() ) ){ if( strTo.length() < static_cast(pEnd - pDest) ){ ::wcsncpy_s( pDest, pEnd - pDest, strTo.data(), strTo.length() ); }else{ diff --git a/tests/unittests/test-file.cpp b/tests/unittests/test-file.cpp index fbff862987..1cabf614f6 100644 --- a/tests/unittests/test-file.cpp +++ b/tests/unittests/test-file.cpp @@ -478,4 +478,24 @@ TEST(CFileNameManager, GetFilePathFormat) // バッファ不足(パターンに一致しない部分が切り捨てられる) strBuf = std::wstring(15, L'x'); ASSERT_STREQ(LR"(C:\テンポラリ\test.t)", CFileNameManager::GetFilePathFormat(LR"(C:\%Temp%\test.txt)", strBuf.data(), strBuf.size() + 1, L"%Temp%", L"テンポラリ")); + + // ソースが部分文字列(十分な大きさのバッファを指定) + strBuf = std::wstring(50, L'x'); + ASSERT_STREQ(LR"(C:\テンポラリ\test.txt)", CFileNameManager::GetFilePathFormat(std::wstring_view(LR"(C:\%Temp%\test.txt.bak)", 18), strBuf.data(), strBuf.size() + 1, L"%Temp%", L"テンポラリ")); + + // ソースが部分文字列(十分な大きさのバッファを指定) + strBuf = std::wstring(50, L'x'); + ASSERT_STREQ(LR"(C:\test.txt\テンポラリ)", CFileNameManager::GetFilePathFormat(std::wstring_view(LR"(C:\test.txt\%Temp%.bak)", 18), strBuf.data(), strBuf.size() + 1, L"%Temp%", L"テンポラリ")); + + // ソースが部分文字列(置換文字が1文字アウト、十分な大きさのバッファを指定) + strBuf = std::wstring(50, L'x'); + ASSERT_STREQ(LR"(C:\test.txt\%Temp)", CFileNameManager::GetFilePathFormat(std::wstring_view(LR"(C:\test.txt\%Temp%.bak)", 17), strBuf.data(), strBuf.size() + 1, L"%Temp%", L"テンポラリ")); + + // 置換対象が部分文字列(十分な大きさのバッファを指定) + strBuf = std::wstring(50, L'x'); + ASSERT_STREQ(LR"(C:\テンポラリ\test.txt)", CFileNameManager::GetFilePathFormat(LR"(C:\%Temp%\test.txt)", strBuf.data(), strBuf.size() + 1, std::wstring_view(LR"(%Temp%\)", 6), L"テンポラリ")); + + // 置換先が部分文字列(十分な大きさのバッファを指定) + strBuf = std::wstring(50, L'x'); + ASSERT_STREQ(LR"(C:\テンポラリ\test.txt)", CFileNameManager::GetFilePathFormat(LR"(C:\%Temp%\test.txt)", strBuf.data(), strBuf.size() + 1, L"%Temp%", std::wstring_view(L"テンポラリってる", 5))); } From f13444b3fbba48b903554b4c8447845326060c5b Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 20 Mar 2021 18:11:56 +0900 Subject: [PATCH 0523/1024] Update sakura_core/env/CFileNameManager.cpp Co-authored-by: sanomari <72875384+sanomari@users.noreply.github.com> --- sakura_core/env/CFileNameManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/env/CFileNameManager.cpp b/sakura_core/env/CFileNameManager.cpp index f6fd5b9c28..0258b78ed8 100644 --- a/sakura_core/env/CFileNameManager.cpp +++ b/sakura_core/env/CFileNameManager.cpp @@ -125,7 +125,7 @@ LPCWSTR CFileNameManager::GetFilePathFormat( std::wstring_view strSrc, LPWSTR ps wchar_t* pDest = pszDest; const wchar_t* pEnd = pszDest + nDestLen; while( it < strSrc.end() && pDest + 1 < pEnd ){ - if( strSrc.end() - it >= strFrom.length() && 0 == ::_wcsnicmp( &*it, strFrom.data(), strFrom.length() ) ){ + if( it + strFrom.length() <= strSrc.end() && 0 == ::_wcsnicmp( &*it, strFrom.data(), strFrom.length() ) ){ if( strTo.length() < static_cast(pEnd - pDest) ){ ::wcsncpy_s( pDest, pEnd - pDest, strTo.data(), strTo.length() ); }else{ From 883e5391760abe8a498bc7bedac58243933d4c08 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 20 Mar 2021 20:30:58 +0900 Subject: [PATCH 0524/1024] Revert "Update sakura_core/env/CFileNameManager.cpp" This reverts commit f13444b3fbba48b903554b4c8447845326060c5b. --- sakura_core/env/CFileNameManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/env/CFileNameManager.cpp b/sakura_core/env/CFileNameManager.cpp index 0258b78ed8..f6fd5b9c28 100644 --- a/sakura_core/env/CFileNameManager.cpp +++ b/sakura_core/env/CFileNameManager.cpp @@ -125,7 +125,7 @@ LPCWSTR CFileNameManager::GetFilePathFormat( std::wstring_view strSrc, LPWSTR ps wchar_t* pDest = pszDest; const wchar_t* pEnd = pszDest + nDestLen; while( it < strSrc.end() && pDest + 1 < pEnd ){ - if( it + strFrom.length() <= strSrc.end() && 0 == ::_wcsnicmp( &*it, strFrom.data(), strFrom.length() ) ){ + if( strSrc.end() - it >= strFrom.length() && 0 == ::_wcsnicmp( &*it, strFrom.data(), strFrom.length() ) ){ if( strTo.length() < static_cast(pEnd - pDest) ){ ::wcsncpy_s( pDest, pEnd - pDest, strTo.data(), strTo.length() ); }else{ From 819875a208044affcd25157e6991c1fad7bd1c44 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 20 Mar 2021 20:53:13 +0900 Subject: [PATCH 0525/1024] =?UTF-8?q?=E6=AF=94=E8=BC=83=E6=BC=94=E7=AE=97?= =?UTF-8?q?=E5=AD=90=E3=81=AE=E5=B7=A6=E5=8F=B3=E3=81=A7=E7=AC=A6=E5=8F=B7?= =?UTF-8?q?=E3=81=8C=E7=95=B0=E3=81=AA=E3=82=8B=E5=AF=BE=E7=AD=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/env/CFileNameManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/env/CFileNameManager.cpp b/sakura_core/env/CFileNameManager.cpp index f6fd5b9c28..e4af6c847d 100644 --- a/sakura_core/env/CFileNameManager.cpp +++ b/sakura_core/env/CFileNameManager.cpp @@ -125,7 +125,7 @@ LPCWSTR CFileNameManager::GetFilePathFormat( std::wstring_view strSrc, LPWSTR ps wchar_t* pDest = pszDest; const wchar_t* pEnd = pszDest + nDestLen; while( it < strSrc.end() && pDest + 1 < pEnd ){ - if( strSrc.end() - it >= strFrom.length() && 0 == ::_wcsnicmp( &*it, strFrom.data(), strFrom.length() ) ){ + if( strFrom.length() <= static_cast(strSrc.end() - it) && 0 == ::_wcsnicmp( &*it, strFrom.data(), strFrom.length() ) ){ if( strTo.length() < static_cast(pEnd - pDest) ){ ::wcsncpy_s( pDest, pEnd - pDest, strTo.data(), strTo.length() ); }else{ From 0932743c686ab249d871c737a91d496b38031957 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sat, 13 Mar 2021 23:28:51 +0900 Subject: [PATCH 0526/1024] =?UTF-8?q?=E3=83=90=E3=83=83=E3=82=AF=E3=82=A2?= =?UTF-8?q?=E3=83=83=E3=83=97=E3=81=A7=E8=A9=B3=E7=B4=B0$0=EF=BD=9E$9?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E3=82=92=E4=BD=BF=E3=81=84MAX=5FPATH?= =?UTF-8?q?=E8=BF=91=E3=81=84=E3=83=91=E3=82=B9=E3=82=92=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E3=81=97=E3=82=88=E3=81=86=E3=81=A8=E3=81=99=E3=82=8B=E3=81=A8?= =?UTF-8?q?=E8=90=BD=E3=81=A1=E3=82=8B=E4=B8=8D=E5=85=B7=E5=90=88=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CBackupAgent.cpp | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/sakura_core/CBackupAgent.cpp b/sakura_core/CBackupAgent.cpp index 30d366eff7..f192919fd2 100644 --- a/sakura_core/CBackupAgent.cpp +++ b/sakura_core/CBackupAgent.cpp @@ -499,25 +499,22 @@ bool CBackupAgent::FormatBackUpPath( } if( isdigit(*q) ){ q[-1] = L'\0'; - wcscat( szNewPath, q2 ); -// if( newPathCount < auto_strlcat( szNewPath, q2, newPathCount ) ){ -// return false; -// } + if (STRUNCATE == wcsncat_s(szNewPath, newPathCount, q2, _TRUNCATE)) { + return false; + } if( folders[*q-L'0'] != 0 ){ - wcscat( szNewPath, folders[*q-L'0'] ); -// if( newPathCount < auto_strlcat( szNewPath, folders[*q-L'0'], newPathCount ) ){ -// return false; -// } + if (STRUNCATE == wcsncat_s(szNewPath, newPathCount, folders[*q - L'0'], _TRUNCATE)) { + return false; + } } q2 = q+1; } } ++q; } - wcscat( szNewPath, q2 ); -// if( newPathCount < auto_strlcat( szNewPath, q2, newPathCount ) ){ -// return false; -// } + if (STRUNCATE == wcsncat_s(szNewPath, newPathCount, q2, _TRUNCATE)) { + return false; + } } } { From 9c3f3cec452a62e6632e65ab03d9499b90647dc8 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sat, 20 Mar 2021 19:50:08 +0900 Subject: [PATCH 0527/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CBackupAgent.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/sakura_core/CBackupAgent.cpp b/sakura_core/CBackupAgent.cpp index f192919fd2..3a41498c9d 100644 --- a/sakura_core/CBackupAgent.cpp +++ b/sakura_core/CBackupAgent.cpp @@ -502,10 +502,8 @@ bool CBackupAgent::FormatBackUpPath( if (STRUNCATE == wcsncat_s(szNewPath, newPathCount, q2, _TRUNCATE)) { return false; } - if( folders[*q-L'0'] != 0 ){ - if (STRUNCATE == wcsncat_s(szNewPath, newPathCount, folders[*q - L'0'], _TRUNCATE)) { - return false; - } + if (folders[*q-L'0'] != 0 && STRUNCATE == wcsncat_s(szNewPath, newPathCount, folders[*q - L'0'], _TRUNCATE)) { + return false; } q2 = q+1; } From d11917bd82825a701c8e0f7453b58c29dd7b8045 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sat, 20 Mar 2021 21:22:30 +0900 Subject: [PATCH 0528/1024] =?UTF-8?q?snorcloud=E3=81=AE=E6=8C=87=E6=91=980?= =?UTF-8?q?=E3=82=92nullptr=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CBackupAgent.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/CBackupAgent.cpp b/sakura_core/CBackupAgent.cpp index 3a41498c9d..2d322e67e5 100644 --- a/sakura_core/CBackupAgent.cpp +++ b/sakura_core/CBackupAgent.cpp @@ -502,7 +502,7 @@ bool CBackupAgent::FormatBackUpPath( if (STRUNCATE == wcsncat_s(szNewPath, newPathCount, q2, _TRUNCATE)) { return false; } - if (folders[*q-L'0'] != 0 && STRUNCATE == wcsncat_s(szNewPath, newPathCount, folders[*q - L'0'], _TRUNCATE)) { + if (folders[*q-L'0'] != nullptr && STRUNCATE == wcsncat_s(szNewPath, newPathCount, folders[*q - L'0'], _TRUNCATE)) { return false; } q2 = q+1; From b9f985638dc587f4fc5296536f9565e6aa6489f6 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sat, 20 Mar 2021 01:14:56 +0900 Subject: [PATCH 0529/1024] =?UTF-8?q?=E3=83=98=E3=83=AB=E3=83=97=E3=81=AEJ?= =?UTF-8?q?Script=E3=82=B5=E3=83=B3=E3=83=97=E3=83=AB=E3=81=AEInsText?= =?UTF-8?q?=E3=81=AB()=E3=81=8C=E3=81=AA=E3=81=8B=E3=81=A3=E3=81=9F?= =?UTF-8?q?=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- help/sakura/res/HLP000270.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/help/sakura/res/HLP000270.html b/help/sakura/res/HLP000270.html index 5e6d0ae14e..4991deb0a1 100644 --- a/help/sakura/res/HLP000270.html +++ b/help/sakura/res/HLP000270.html @@ -34,7 +34,7 @@

                    マクロ記載例

                    Editor.InsText("<br />");
                    InsText("<br />");
                    var str = Editor.ExpandParameter("$f($x,$y)\r\n");
                    -Editor.InsText str;
                    +Editor.InsText(str);
                    Editor.ExecCommand('dir /b', 3);

                    ■例3: WSH(VBScript)
                    From 7733bfb522080f8d83c1bfd1325f5d5153ccb138 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sun, 21 Mar 2021 00:29:05 +0900 Subject: [PATCH 0530/1024] =?UTF-8?q?TAB=E3=83=90=E3=83=BC=E3=81=AE?= =?UTF-8?q?=E3=83=AA=E3=82=BD=E3=83=BC=E3=82=B9=E6=96=87=E5=AD=97=E5=88=97?= =?UTF-8?q?=E3=81=AE=E8=8B=B1=E8=AA=9Edll=E5=AF=BE=E5=BF=9C=E6=BC=8F?= =?UTF-8?q?=E3=82=8C=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/window/CTabWnd.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/sakura_core/window/CTabWnd.cpp b/sakura_core/window/CTabWnd.cpp index 143b62b9a8..3855dd83d9 100644 --- a/sakura_core/window/CTabWnd.cpp +++ b/sakura_core/window/CTabWnd.cpp @@ -1524,14 +1524,12 @@ LRESULT CTabWnd::OnMouseMove( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam } else { - ::LoadString( GetAppInstance(), F_GROUPCLOSE, szText, _countof(szText) ); - szText[_countof(szText) - 1] = L'\0'; + wcsncpy_s(szText, LS(F_GROUPCLOSE), _TRUNCATE); } } else { - ::LoadString( GetAppInstance(), F_EXITALLEDITORS, szText, _countof(szText) ); - szText[_countof(szText) - 1] = L'\0'; + wcsncpy_s(szText, LS(F_EXITALLEDITORS), _TRUNCATE); } } } From 1a57d3f1df5063fd8d717b90eba93426301aa876 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 21 Mar 2021 16:14:28 +0900 Subject: [PATCH 0531/1024] =?UTF-8?q?=E3=82=A2=E3=82=A6=E3=83=88=E3=83=A9?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E8=A7=A3=E6=9E=90Erlang=E3=81=AE=E7=AF=84?= =?UTF-8?q?=E5=9B=B2=E5=A4=96=E3=82=A2=E3=82=AF=E3=82=BB=E3=82=B9=E3=81=A8?= =?UTF-8?q?=E5=88=9D=E6=9C=9F=E5=8C=96=E6=BC=8F=E3=82=8C=E3=81=AB=E5=AF=BE?= =?UTF-8?q?=E7=AD=96=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/types/CType_Erlang.cpp | 37 +++++++++++------------------- 1 file changed, 13 insertions(+), 24 deletions(-) diff --git a/sakura_core/types/CType_Erlang.cpp b/sakura_core/types/CType_Erlang.cpp index f0fc2acab1..3bb6ebbed2 100644 --- a/sakura_core/types/CType_Erlang.cpp +++ b/sakura_core/types/CType_Erlang.cpp @@ -47,15 +47,14 @@ struct COutlineErlang { STATE_FUNC_ARGS, //!< 2つめ以降の引数確認中 STATE_FUNC_ARGS_FIN,//!< 関数の解析を完了 STATE_FUNC_FOUND, //!< 関数を発見.データの取得が可能 - } m_state; + } m_state = STATE_NORMAL; - wchar_t m_func[64]; //!< 関数名(Arity含む) = 表示名 - CLogicInt m_lnum; //!< 関数の行番号 - int m_argcount; //!< 発見した引数の数 - wchar_t m_parenthesis[32]; //!< 括弧のネストを管理するもの - int m_parenthesis_ptr; //!< 括弧のネストレベル + wchar_t m_func[64] = {}; //!< 関数名(Arity含む) = 表示名 + unsigned m_lnum = 0; //!< 関数の行番号 + unsigned m_argcount = 0; //!< 発見した引数の数 + wchar_t m_parenthesis[32] = {}; //!< 括弧のネストを管理するもの + unsigned m_parenthesis_ptr = 0; //!< 括弧のネストレベル - COutlineErlang(); bool parse( const wchar_t* buf, int linelen, CLogicInt linenum ); const wchar_t* ScanFuncName( const wchar_t* buf, const wchar_t* end, const wchar_t* p ); @@ -64,7 +63,7 @@ struct COutlineErlang { const wchar_t* ScanArgs( const wchar_t* end, const wchar_t* p ); const wchar_t* EnterCond( const wchar_t* end, const wchar_t* p ); const wchar_t* GetFuncName() const { return m_func; } - CLogicInt GetFuncLine() const { return m_lnum; } + CLogicInt GetFuncLine() const { return CLogicInt(m_lnum); } private: // helper functions @@ -92,11 +91,6 @@ struct COutlineErlang { void build_arity(int); }; -COutlineErlang::COutlineErlang() : - m_state( STATE_NORMAL ), m_lnum( 0 ), m_argcount( 0 ) -{ -} - /** 関数名の取得 @param[in] buf 行(先頭から) @@ -130,16 +124,12 @@ const wchar_t* COutlineErlang::ScanFuncName( const wchar_t* buf, const wchar_t* } while( IS_ALNUM( *p ) && p < end ); } - int buf_len = _countof( m_func ); - int len = p - buf; + auto len = p - buf; if( buf[0] == L'\'' ){ ++buf; len -= 2; - --buf_len; } - len = len < buf_len - 1 ? len : buf_len - 1; - wcsncpy( m_func, buf, len ); - m_func[len] = L'\0'; + ::wcsncpy_s( m_func, buf, len ); m_state = STATE_FUNC_CANDIDATE_FIN; return p; } @@ -225,7 +215,7 @@ const wchar_t* COutlineErlang::ScanArgs( const wchar_t* end, const wchar_t* p ) { assert( m_state == STATE_FUNC_ARGS ); - const int parptr_max = _countof( m_parenthesis ); + const size_t parptr_max = _countof( m_parenthesis ); wchar_t quote = L'\0'; // 先頭位置を保存 for(const wchar_t* head = p ; p < end ; p++ ){ if( quote ){ @@ -391,8 +381,8 @@ bool COutlineErlang::parse( const wchar_t* buf, int linelen, CLogicInt linenum ) */ void COutlineErlang::build_arity( int arity ) { - const int buf_size = _countof( m_func ); - int len = wcsnlen( m_func, buf_size ); + const size_t buf_size = _countof( m_func ); + const size_t len = ::wcsnlen( m_func, buf_size ); wchar_t *p = &m_func[len]; wchar_t numstr[12]; @@ -401,8 +391,7 @@ void COutlineErlang::build_arity( int arity ) numstr[0] = L'/'; _itow( arity, numstr + 1, 10 ); - wcsncpy( p, numstr, buf_size - len - 1 ); - m_func[ buf_size - 1 ] = L'\0'; + ::wcsncpy_s( p, buf_size - len, numstr, _TRUNCATE ); } /** Erlang アウトライン解析 From 8b5ad2fda691b4e141423b9575f784f106d7caf6 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 21 Mar 2021 16:36:32 +0900 Subject: [PATCH 0532/1024] =?UTF-8?q?SonarCloud=E6=8C=87=E6=91=98=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/types/CType_Erlang.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/types/CType_Erlang.cpp b/sakura_core/types/CType_Erlang.cpp index 3bb6ebbed2..a68ebd85b1 100644 --- a/sakura_core/types/CType_Erlang.cpp +++ b/sakura_core/types/CType_Erlang.cpp @@ -63,7 +63,7 @@ struct COutlineErlang { const wchar_t* ScanArgs( const wchar_t* end, const wchar_t* p ); const wchar_t* EnterCond( const wchar_t* end, const wchar_t* p ); const wchar_t* GetFuncName() const { return m_func; } - CLogicInt GetFuncLine() const { return CLogicInt(m_lnum); } + [[nodiscard]] CLogicInt GetFuncLine() const { return CLogicInt(m_lnum); } private: // helper functions From 9998ec7b2598c416873fb8fbdaa024a4e3c5f4a8 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 21 Mar 2021 17:02:59 +0900 Subject: [PATCH 0533/1024] =?UTF-8?q?=E3=82=A2=E3=82=A6=E3=83=88=E3=83=A9?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E8=A7=A3=E6=9E=90COutlinePython=E3=81=AE?= =?UTF-8?q?=E5=88=9D=E6=9C=9F=E5=8C=96=E6=BC=8F=E3=82=8C=E3=81=AB=E5=AF=BE?= =?UTF-8?q?=E7=AD=96=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/types/CType_Python.cpp | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/sakura_core/types/CType_Python.cpp b/sakura_core/types/CType_Python.cpp index 95acd59f66..8421325f81 100644 --- a/sakura_core/types/CType_Python.cpp +++ b/sakura_core/types/CType_Python.cpp @@ -83,13 +83,11 @@ struct COutlinePython { STATE_NORMAL, //!< 通常行 : 行頭を含む STATE_STRING, //!< 文字列中 STATE_CONTINUE, //!< 継続行 : 前の行からの続きなので行頭とはみなされない - } m_state; + } m_state = STATE_NORMAL; - int m_quote_char; //!< 引用符記号 - bool m_raw_string; //!< エスケープ記号無視ならtrue - bool m_long_string; //!< 長い文字列中ならtrue - - COutlinePython(); + wchar_t m_quote_char = L'\0'; //!< 引用符記号 + bool m_raw_string = false; //!< エスケープ記号無視ならtrue + bool m_long_string = false; //!< 長い文字列中ならtrue /* 各状態における文字列スキャンを行う Scan*が呼びだされるときは既にその状態になっていることが前提. @@ -120,17 +118,6 @@ void CType_Python::InitTypeConfigImp(STypeConfig* pType) pType->m_bStringLineOnly = true; // 文字列は行内のみ } -/*!コンストラクタ: 初期化 - - 初期状態をSTATE_NORMALに設定する. -*/ -COutlinePython::COutlinePython() - : m_state( STATE_NORMAL ), - m_raw_string( false ), - m_long_string( false ) -{ -} - /*! @brief Python文字列の入り口で文字列種別を決定する 文字列の種類を適切に判別し,内部状態を設定する. @@ -159,7 +146,7 @@ int COutlinePython::EnterString( const wchar_t* data, int linelen, int start_off int col = start_offset; // 文字列開始チェック if( data[ col ] == '\"' || data[ col ] == '\'' ){ - int quote_char = data[ col ]; + auto quote_char = data[ col ]; m_state = STATE_STRING; m_quote_char = quote_char; // 文字列の開始 From 2ac539aa6456ee8db7225acb793fee4b5c6906b4 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sun, 27 Sep 2020 09:13:41 +0900 Subject: [PATCH 0534/1024] =?UTF-8?q?=E3=83=9E=E3=82=AF=E3=83=AD=E3=81=A7?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=82=92=E9=96=8B=E3=81=8F?= =?UTF-8?q?=E3=83=80=E3=82=A4=E3=82=A2=E3=83=AD=E3=82=B0=E3=81=AE=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=A4=E3=83=AB=E5=90=8D=E3=81=A8=E6=8B=A1=E5=BC=B5?= =?UTF-8?q?=E5=AD=90=E3=83=95=E3=82=A3=E3=83=AB=E3=82=BF=E3=83=BC=E3=80=81?= =?UTF-8?q?=E3=83=90=E3=83=83=E3=83=95=E3=82=A1=E9=95=B7=E5=88=B6=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ・マクロでフォルダを開く初期フォルダ制限 ・pszUserWildCardがSFilePathでMAX_PATH制限 ・CFileExtのExtが短い固定長だったのをwstringへ変更 --- sakura_core/CFileExt.cpp | 36 +++++++++++------------------------- sakura_core/CFileExt.h | 10 +++++----- sakura_core/macro/CMacro.cpp | 12 ++++++++++++ 3 files changed, 28 insertions(+), 30 deletions(-) diff --git a/sakura_core/CFileExt.cpp b/sakura_core/CFileExt.cpp index ea08cb42b0..b2ae1a9a5e 100644 --- a/sakura_core/CFileExt.cpp +++ b/sakura_core/CFileExt.cpp @@ -37,7 +37,6 @@ CFileExt::CFileExt() { - m_puFileExtInfo = NULL; m_nCount = 0; m_vstrFilter.resize( 1 ); m_vstrFilter[0] = L'\0'; @@ -49,14 +48,12 @@ CFileExt::CFileExt() CFileExt::~CFileExt() { - if( m_puFileExtInfo ) free( m_puFileExtInfo ); - m_puFileExtInfo = NULL; m_nCount = 0; } bool CFileExt::AppendExt( const WCHAR *pszName, const WCHAR *pszExt ) { - WCHAR szWork[_countof(m_puFileExtInfo[0].m_szExt) + 10]; + WCHAR szWork[MAX_PATH]; if( !CDocTypeManager::ConvertTypesExtToDlgExt( pszExt, NULL, szWork ) ) return false; return AppendExtRaw( pszName, szWork ); @@ -64,26 +61,15 @@ bool CFileExt::AppendExt( const WCHAR *pszName, const WCHAR *pszExt ) bool CFileExt::AppendExtRaw( const WCHAR *pszName, const WCHAR *pszExt ) { - FileExtInfoTag *p; - if( NULL == pszName || pszName[0] == L'\0' ) return false; if( NULL == pszExt || pszExt[0] == L'\0' ) return false; - if( NULL == m_puFileExtInfo ) - { - p = (FileExtInfoTag*)malloc( sizeof( FileExtInfoTag ) * 1 ); - if( NULL == p ) return false; - } - else - { - p = (FileExtInfoTag*)realloc( m_puFileExtInfo, sizeof( FileExtInfoTag ) * ( m_nCount + 1 ) ); - if( NULL == p ) return false; - } - m_puFileExtInfo = p; + SFileExtInfo info; + info.m_sTypeName = pszName; + info.m_sExt = pszExt; - wcscpy( m_puFileExtInfo[m_nCount].m_szName, pszName ); - wcscpy( m_puFileExtInfo[m_nCount].m_szExt, pszExt ); - m_nCount++; + m_vFileExtInfo.push_back(std::move(info)); + m_nCount = static_cast(m_vFileExtInfo.size()); return true; } @@ -92,14 +78,14 @@ const WCHAR *CFileExt::GetName( int nIndex ) { if( nIndex < 0 || nIndex >= m_nCount ) return NULL; - return m_puFileExtInfo[nIndex].m_szName; + return m_vFileExtInfo[nIndex].m_sTypeName.c_str(); } const WCHAR *CFileExt::GetExt( int nIndex ) { if( nIndex < 0 || nIndex >= m_nCount ) return NULL; - return m_puFileExtInfo[nIndex].m_szExt; + return m_vFileExtInfo[nIndex].m_sExt.c_str(); } const WCHAR *CFileExt::GetExtFilter( void ) @@ -113,12 +99,12 @@ const WCHAR *CFileExt::GetExtFilter( void ) for( i = 0; i < m_nCount; i++ ) { // "%s (%s)\0%s\0" - work = m_puFileExtInfo[i].m_szName; + work = m_vFileExtInfo[i].m_sTypeName; work.append(L" ("); - work.append(m_puFileExtInfo[i].m_szExt); + work.append(m_vFileExtInfo[i].m_sExt); work.append(L")"); work.append(L"\0", 1); - work.append(m_puFileExtInfo[i].m_szExt); + work.append(m_vFileExtInfo[i].m_sExt); work.append(L"\0", 1); int i = (int)m_vstrFilter.size(); diff --git a/sakura_core/CFileExt.h b/sakura_core/CFileExt.h index fabfb5f744..a23e2c89a1 100644 --- a/sakura_core/CFileExt.h +++ b/sakura_core/CFileExt.h @@ -60,13 +60,13 @@ class CFileExt private: - typedef struct { - WCHAR m_szName[64]; //名前(64文字以下のはず→m_szTypeName) - WCHAR m_szExt[MAX_TYPES_EXTS*3+1]; //拡張子(64文字以下のはず→m_szTypeExts) なお "*." を追加するのでそれなりに必要 - } FileExtInfoTag; + struct SFileExtInfo { + std::wstring m_sTypeName; //名前 + std::wstring m_sExt; //拡張子 + }; int m_nCount; - FileExtInfoTag *m_puFileExtInfo; + std::vector m_vFileExtInfo; std::vector m_vstrFilter; DISALLOW_COPY_AND_ASSIGN(CFileExt); diff --git a/sakura_core/macro/CMacro.cpp b/sakura_core/macro/CMacro.cpp index e6db099ce5..dbeb58a802 100644 --- a/sakura_core/macro/CMacro.cpp +++ b/sakura_core/macro/CMacro.cpp @@ -1884,6 +1884,14 @@ bool CMacro::HandleFunction(CEditView *View, EFunctionCode ID, const VARIANT *Ar sFilter = Source; // フィルタ文字列 delete[] Source; } + // sDefaultの先はSFilePath型 + if (MAX_PATH <= sDefault.length()) { + return false; + } + // sFilterの先はSFilePath型 + if (MAX_PATH <= sFilter.length()) { + return false; + } CDlgOpenFile cDlgOpenFile; cDlgOpenFile.Create( @@ -1929,6 +1937,10 @@ bool CMacro::HandleFunction(CEditView *View, EFunctionCode ID, const VARIANT *Ar sDefault = Source; // 既定のファイル名 delete[] Source; } + // sDefaultは[MAX_PATH] + if (MAX_PATH <= sDefault.length()) { + return false; + } WCHAR szPath[ _MAX_PATH ]; int nRet = SelectDir( View->GetHwnd(), sMessage.c_str(), sDefault.c_str(), szPath ); From f941df8bb3400b574ce50a00fcdc1a2cacd86878 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Fri, 12 Mar 2021 19:27:14 +0900 Subject: [PATCH 0535/1024] =?UTF-8?q?CFileExt=E3=81=AE=E5=8A=A9=E9=95=B7?= =?UTF-8?q?=E3=81=AAm=5FnCount=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CFileExt.cpp | 15 ++++----------- sakura_core/CFileExt.h | 5 ++--- 2 files changed, 6 insertions(+), 14 deletions(-) diff --git a/sakura_core/CFileExt.cpp b/sakura_core/CFileExt.cpp index b2ae1a9a5e..772afbb25c 100644 --- a/sakura_core/CFileExt.cpp +++ b/sakura_core/CFileExt.cpp @@ -37,7 +37,6 @@ CFileExt::CFileExt() { - m_nCount = 0; m_vstrFilter.resize( 1 ); m_vstrFilter[0] = L'\0'; @@ -46,11 +45,6 @@ CFileExt::CFileExt() // AppendExt( "テキストファイル", "txt" ); } -CFileExt::~CFileExt() -{ - m_nCount = 0; -} - bool CFileExt::AppendExt( const WCHAR *pszName, const WCHAR *pszExt ) { WCHAR szWork[MAX_PATH]; @@ -69,21 +63,20 @@ bool CFileExt::AppendExtRaw( const WCHAR *pszName, const WCHAR *pszExt ) info.m_sExt = pszExt; m_vFileExtInfo.push_back(std::move(info)); - m_nCount = static_cast(m_vFileExtInfo.size()); return true; } const WCHAR *CFileExt::GetName( int nIndex ) { - if( nIndex < 0 || nIndex >= m_nCount ) return NULL; + if( nIndex < 0 || nIndex >= GetCount() ) return NULL; return m_vFileExtInfo[nIndex].m_sTypeName.c_str(); } const WCHAR *CFileExt::GetExt( int nIndex ) { - if( nIndex < 0 || nIndex >= m_nCount ) return NULL; + if( nIndex < 0 || nIndex >= GetCount() ) return NULL; return m_vFileExtInfo[nIndex].m_sExt.c_str(); } @@ -96,7 +89,7 @@ const WCHAR *CFileExt::GetExtFilter( void ) /* 拡張子フィルタの作成 */ m_vstrFilter.resize(0); - for( i = 0; i < m_nCount; i++ ) + for( i = 0; i < GetCount(); i++ ) { // "%s (%s)\0%s\0" work = m_vFileExtInfo[i].m_sTypeName; @@ -111,7 +104,7 @@ const WCHAR *CFileExt::GetExtFilter( void ) m_vstrFilter.resize( i + work.length() ); wmemcpy( &m_vstrFilter[i], &work[0], work.length() ); } - if( 0 == m_nCount ){ + if( 0 == GetCount() ){ m_vstrFilter.push_back( L'\0' ); } m_vstrFilter.push_back( L'\0' ); diff --git a/sakura_core/CFileExt.h b/sakura_core/CFileExt.h index a23e2c89a1..9d2f72abd5 100644 --- a/sakura_core/CFileExt.h +++ b/sakura_core/CFileExt.h @@ -41,7 +41,7 @@ class CFileExt { public: CFileExt(); - ~CFileExt(); + ~CFileExt() = default; bool AppendExt( const WCHAR *pszName, const WCHAR *pszExt ); bool AppendExtRaw( const WCHAR *pszName, const WCHAR *pszExt ); @@ -52,7 +52,7 @@ class CFileExt //2回呼び出すと古いバッファが無効になることがあるのに注意 const WCHAR *GetExtFilter( void ); - int GetCount( void ) { return m_nCount; } + int GetCount() const { return static_cast(m_vFileExtInfo.size()); } protected: // 2014.10.30 syat ConvertTypesExtToDlgExtをCDocTypeManagerに移動 @@ -65,7 +65,6 @@ class CFileExt std::wstring m_sExt; //拡張子 }; - int m_nCount; std::vector m_vFileExtInfo; std::vector m_vstrFilter; From 77b5ee689e68fc6bf83c6eac5b19795bba5ee2db Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Fri, 12 Mar 2021 19:35:00 +0900 Subject: [PATCH 0536/1024] =?UTF-8?q?CFileExt::GetExtFilter=E3=81=8B?= =?UTF-8?q?=E3=82=89=E3=83=95=E3=82=A3=E3=83=AB=E3=82=BF=E3=83=BC=E6=96=87?= =?UTF-8?q?=E5=AD=97=E5=88=97=E4=BD=9C=E6=88=90=E3=82=92=E5=88=86=E9=9B=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CFileExt.cpp | 20 ++++++++++++-------- sakura_core/CFileExt.h | 1 + 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/sakura_core/CFileExt.cpp b/sakura_core/CFileExt.cpp index 772afbb25c..892e72a5d4 100644 --- a/sakura_core/CFileExt.cpp +++ b/sakura_core/CFileExt.cpp @@ -82,12 +82,18 @@ const WCHAR *CFileExt::GetExt( int nIndex ) } const WCHAR *CFileExt::GetExtFilter( void ) +{ + CreateExtFilter(m_vstrFilter); + return m_vstrFilter.data(); +} + +void CFileExt::CreateExtFilter(std::vector& output) const { int i; std::wstring work; /* 拡張子フィルタの作成 */ - m_vstrFilter.resize(0); + output.resize(0); for( i = 0; i < GetCount(); i++ ) { @@ -100,14 +106,12 @@ const WCHAR *CFileExt::GetExtFilter( void ) work.append(m_vFileExtInfo[i].m_sExt); work.append(L"\0", 1); - int i = (int)m_vstrFilter.size(); - m_vstrFilter.resize( i + work.length() ); - wmemcpy( &m_vstrFilter[i], &work[0], work.length() ); + int pos = static_cast(output.size()); + output.resize(pos + work.length()); + wmemcpy(&output[pos], &work[0], work.length()); } if( 0 == GetCount() ){ - m_vstrFilter.push_back( L'\0' ); + output.push_back( L'\0' ); } - m_vstrFilter.push_back( L'\0' ); - - return &m_vstrFilter[0]; + output.push_back( L'\0' ); } diff --git a/sakura_core/CFileExt.h b/sakura_core/CFileExt.h index 9d2f72abd5..5b23ed0cb8 100644 --- a/sakura_core/CFileExt.h +++ b/sakura_core/CFileExt.h @@ -59,6 +59,7 @@ class CFileExt //bool ConvertTypesExtToDlgExt( const WCHAR *pszSrcExt, WCHAR *pszDstExt ); private: + void CreateExtFilter(std::vector& output) const; struct SFileExtInfo { std::wstring m_sTypeName; //名前 From cdb7079d3223352883a8bcb41f6c30715062ffed Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sun, 27 Sep 2020 09:13:41 +0900 Subject: [PATCH 0537/1024] =?UTF-8?q?CDlgOpenFile=E3=81=AE=E3=83=AF?= =?UTF-8?q?=E3=82=A4=E3=83=AB=E3=83=89=E3=82=AB=E3=83=BC=E3=83=89=E9=95=B7?= =?UTF-8?q?=E5=88=B6=E9=99=90=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CFileExt.cpp | 6 +-- .../dlg/CDlgOpenFile_CommonFileDialog.cpp | 16 +++---- .../dlg/CDlgOpenFile_CommonItemDialog.cpp | 6 +-- sakura_core/doc/CDocFileOperation.cpp | 18 ++++---- sakura_core/env/CDocTypeManager.cpp | 42 +++++++++---------- sakura_core/env/CDocTypeManager.h | 2 +- sakura_core/macro/CMacro.cpp | 4 -- 7 files changed, 45 insertions(+), 49 deletions(-) diff --git a/sakura_core/CFileExt.cpp b/sakura_core/CFileExt.cpp index 892e72a5d4..0269fab164 100644 --- a/sakura_core/CFileExt.cpp +++ b/sakura_core/CFileExt.cpp @@ -47,10 +47,10 @@ CFileExt::CFileExt() bool CFileExt::AppendExt( const WCHAR *pszName, const WCHAR *pszExt ) { - WCHAR szWork[MAX_PATH]; + std::wstring workExt; - if( !CDocTypeManager::ConvertTypesExtToDlgExt( pszExt, NULL, szWork ) ) return false; - return AppendExtRaw( pszName, szWork ); + if( !CDocTypeManager::ConvertTypesExtToDlgExt( pszExt, NULL, workExt ) ) return false; + return AppendExtRaw( pszName, workExt.c_str() ); } bool CFileExt::AppendExtRaw( const WCHAR *pszName, const WCHAR *pszExt ) diff --git a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp index 1678d39046..b4408164f9 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp @@ -93,7 +93,7 @@ struct CDlgOpenFile_CommonFileDialog final : public IDlgOpenFile DLLSHAREDATA* m_pShareData; - SFilePath m_szDefaultWildCard; /* 「開く」での最初のワイルドカード(保存時の拡張子補完でも使用される) */ + std::wstring m_strDefaultWildCard; /* 「開く」での最初のワイルドカード(保存時の拡張子補完でも使用される) */ SFilePath m_szInitialDir; /* 「開く」での初期ディレクトリ */ std::vector m_vMRU; @@ -418,7 +418,7 @@ UINT_PTR CALLBACK OFNHookProc( else{ switch( pData->m_pOf->nFilterIndex ){ // 選択されているファイルの種類 case 1: // ユーザー定義 - pszCur = pData->m_pcDlgOpenFile->m_szDefaultWildCard; + pszCur = pData->m_pcDlgOpenFile->m_strDefaultWildCard.data(); while( *pszCur != L'.' && *pszCur != L'\0' ) // '.'まで読み飛ばす pszCur = ::CharNext(pszCur); i = 0; @@ -667,7 +667,7 @@ CDlgOpenFile_CommonFileDialog::CDlgOpenFile_CommonFileDialog() wcscpy( m_szInitialDir, szDrive ); wcscat( m_szInitialDir, szDir ); - wcscpy( m_szDefaultWildCard, L"*.*" ); /*「開く」での最初のワイルドカード(保存時の拡張子補完でも使用される) */ + m_strDefaultWildCard = L"*.*"; /*「開く」での最初のワイルドカード(保存時の拡張子補完でも使用される) */ return; } @@ -687,7 +687,7 @@ void CDlgOpenFile_CommonFileDialog::Create( /* ユーザー定義ワイルドカード(保存時の拡張子補完でも使用される) */ if( NULL != pszUserWildCard ){ - wcscpy( m_szDefaultWildCard, pszUserWildCard ); + m_strDefaultWildCard = pszUserWildCard; } /* 「開く」での初期フォルダ */ @@ -722,7 +722,7 @@ bool CDlgOpenFile_CommonFileDialog::DoModal_GetOpenFileName( WCHAR* pszPath, EFi // 2003.05.12 MIK CFileExt cFileExt; - cFileExt.AppendExtRaw( LS(STR_DLGOPNFL_EXTNAME1), m_szDefaultWildCard ); + cFileExt.AppendExtRaw( LS(STR_DLGOPNFL_EXTNAME1), m_strDefaultWildCard.c_str() ); switch( eAddFilter ){ case EFITER_TEXT: @@ -740,7 +740,7 @@ bool CDlgOpenFile_CommonFileDialog::DoModal_GetOpenFileName( WCHAR* pszPath, EFi break; } - if( 0 != wcscmp(m_szDefaultWildCard, L"*.*") ){ + if( 0 != wcscmp(m_strDefaultWildCard.c_str(), L"*.*") ){ cFileExt.AppendExtRaw( LS(STR_DLGOPNFL_EXTNAME3), L"*.*" ); } @@ -815,7 +815,7 @@ bool CDlgOpenFile_CommonFileDialog::DoModal_GetSaveFileName( WCHAR* pszPath ) // 2003.05.12 MIK CFileExt cFileExt; - cFileExt.AppendExtRaw( LS(STR_DLGOPNFL_EXTNAME1), m_szDefaultWildCard ); + cFileExt.AppendExtRaw( LS(STR_DLGOPNFL_EXTNAME1), m_strDefaultWildCard.c_str() ); cFileExt.AppendExtRaw( LS(STR_DLGOPNFL_EXTNAME2), L"*.txt" ); cFileExt.AppendExtRaw( LS(STR_DLGOPNFL_EXTNAME3), L"*.*" ); @@ -979,7 +979,7 @@ bool CDlgOpenFile_CommonFileDialog::DoModalSaveDlg( // 2003.05.12 MIK CFileExt cFileExt; - cFileExt.AppendExtRaw( LS(STR_DLGOPNFL_EXTNAME1), m_szDefaultWildCard ); + cFileExt.AppendExtRaw( LS(STR_DLGOPNFL_EXTNAME1), m_strDefaultWildCard.c_str() ); cFileExt.AppendExtRaw( LS(STR_DLGOPNFL_EXTNAME2), L"*.txt" ); cFileExt.AppendExtRaw( LS(STR_DLGOPNFL_EXTNAME3), L"*.*" ); diff --git a/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp index f6fea7305b..0e93697ec0 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp @@ -700,15 +700,15 @@ bool CDlgOpenFile_CommonItemDialog::DoModalOpenDlg( specs[1].pszName = strs[1].c_str(); specs[1].pszSpec = L"*.txt"; CDocTypeManager docTypeMgr; - WCHAR szWork[_countof(STypeConfigMini::m_szTypeExts) * 3]; + std::wstring worksString; for( int i = 0; i < nTypesCount; i++ ){ const STypeConfigMini* type = NULL; if( !docTypeMgr.GetTypeConfigMini( CTypeConfig(i), &type ) ){ continue; } specs[2 + i].pszName = type->m_szTypeName; - if (CDocTypeManager::ConvertTypesExtToDlgExt(type->m_szTypeExts, NULL, szWork)) { - strs[2 + i] = szWork; + if (CDocTypeManager::ConvertTypesExtToDlgExt(type->m_szTypeExts, NULL, worksString)) { + strs[2 + i] = worksString; specs[2 + i].pszSpec = strs[2 + i].c_str(); } else { diff --git a/sakura_core/doc/CDocFileOperation.cpp b/sakura_core/doc/CDocFileOperation.cpp index 1702593be8..fb775ad704 100644 --- a/sakura_core/doc/CDocFileOperation.cpp +++ b/sakura_core/doc/CDocFileOperation.cpp @@ -225,7 +225,8 @@ bool CDocFileOperation::SaveFileDialog( //拡張子指定 // 一時適用や拡張子なしの場合の拡張子をタイプ別設定から持ってくる // 2008/6/14 大きく改造 Uchi - WCHAR szDefaultWildCard[_MAX_PATH + 10]; // ユーザー指定拡張子 + std::wstring strDefaultWildCard; // ユーザー指定拡張子 + { LPCWSTR szExt; @@ -241,28 +242,27 @@ bool CDocFileOperation::SaveFileDialog( // 基本 if (szExt[0] == L'\0') { // ファイルパスが無いまたは拡張子なし - wcscpy(szDefaultWildCard, L"*.txt"); + strDefaultWildCard = L"*.txt"; } else { // 拡張子あり - wcscpy(szDefaultWildCard, L"*"); - wcscat(szDefaultWildCard, szExt); + strDefaultWildCard = L"*"; + strDefaultWildCard += szExt; } } else { - szDefaultWildCard[0] = L'\0'; - CDocTypeManager::ConvertTypesExtToDlgExt(type.m_szTypeExts, szExt, szDefaultWildCard); + CDocTypeManager::ConvertTypesExtToDlgExt(type.m_szTypeExts, szExt, strDefaultWildCard); } if(!this->m_pcDocRef->m_cDocFile.GetFilePathClass().IsValidPath()){ //「新規から保存時は全ファイル表示」オプション // 2008/6/15 バグフィックス Uchi if( GetDllShareData().m_Common.m_sFile.m_bNoFilterSaveNew ) - wcscat(szDefaultWildCard, L";*.*"); // 全ファイル表示 + strDefaultWildCard += L";*.*"; // 全ファイル表示 } else { //「新規以外から保存時は全ファイル表示」オプション if( GetDllShareData().m_Common.m_sFile.m_bNoFilterSaveFile ) - wcscat(szDefaultWildCard, L";*.*"); // 全ファイル表示 + strDefaultWildCard += L";*.*"; // 全ファイル表示 } } @@ -281,7 +281,7 @@ bool CDocFileOperation::SaveFileDialog( cDlgOpenFile.Create( G_AppInstance(), CEditWnd::getInstance()->GetHwnd(), - szDefaultWildCard, + strDefaultWildCard.c_str(), CSakuraEnvironment::GetDlgInitialDir().c_str(), // 初期フォルダ CMRUFile().GetPathList(), // 最近のファイル CMRUFolder().GetPathList() // 最近のフォルダ diff --git a/sakura_core/env/CDocTypeManager.cpp b/sakura_core/env/CDocTypeManager.cpp index 02e6115f84..a4bf8d1990 100644 --- a/sakura_core/env/CDocTypeManager.cpp +++ b/sakura_core/env/CDocTypeManager.cpp @@ -215,45 +215,45 @@ void CDocTypeManager::GetFirstExt(const WCHAR* pszTypeExts, WCHAR szFirstExt[], } /*! タイプ別設定の拡張子リストをダイアログ用リストに変換する - @param pszSrcExt [in] 拡張子リスト 例「.c .cpp;.h」 - @param pszDstExt [out] 拡張子リスト 例「*.c;*.cpp;*.h」 - @param szExt [in] リストの先頭にする拡張子 例「.h」 + @param pszSrcExt [in] 拡張子リスト 例「.c cpp;.h」(ドットはオプション) + @param szExt [in] リストの先頭にする拡張子 例「.h」(ドット必須) + @param destExt [out] 拡張子リスト 例「*.h;*.c;*.cpp」 @date 2014.12.06 syat CFileExtから移動 */ -bool CDocTypeManager::ConvertTypesExtToDlgExt( const WCHAR *pszSrcExt, const WCHAR* szExt, WCHAR *pszDstExt ) +bool CDocTypeManager::ConvertTypesExtToDlgExt(const WCHAR *pszSrcExt, const WCHAR* szExt, std::wstring& destExt) { - WCHAR *token; - WCHAR *p; - + destExt.resize(0); // 2003.08.14 MIK NULLじゃなくてfalse if( NULL == pszSrcExt ) return false; - if( NULL == pszDstExt ) return false; - - p = _wcsdup( pszSrcExt ); - pszDstExt[0] = L'\0'; if (szExt != NULL && szExt[0] != L'\0') { // ファイルパスがあり、拡張子ありの場合、トップに指定 - wcscpy(pszDstExt, L"*"); - wcscat(pszDstExt, szExt); + destExt.assign(L"*"); + destExt.append(szExt); } - token = _wcstok(p, m_typeExtSeps); + std::wstring strSrcTokens = pszSrcExt; + WCHAR* context = nullptr; + WCHAR* token = wcstok_s(strSrcTokens.data(), m_typeExtSeps, &context); while( token ) { if (szExt == NULL || szExt[0] == L'\0' || wmemicmp(token, szExt + 1) != 0) { - if( pszDstExt[0] != '\0' ) wcscat( pszDstExt, L";" ); + if (0 < destExt.length()) { + destExt.append(L";"); + } // 拡張子指定なし、またはマッチした拡張子でない if (wcspbrk(token, m_typeExtWildcards) == NULL) { - if (L'.' == *token) wcscat(pszDstExt, L"*"); - else wcscat(pszDstExt, L"*."); + if (L'.' == *token) { + destExt.append(L"*"); + } + else { + destExt.append(L"*."); + } } - wcscat(pszDstExt, token); + destExt.append(token); } - - token = _wcstok( NULL, m_typeExtSeps ); + token = wcstok_s(nullptr, m_typeExtSeps, &context); } - free( p ); // 2003.05.20 MIK メモリ解放漏れ return true; } diff --git a/sakura_core/env/CDocTypeManager.h b/sakura_core/env/CDocTypeManager.h index aa3a5edfc0..a0027169c8 100644 --- a/sakura_core/env/CDocTypeManager.h +++ b/sakura_core/env/CDocTypeManager.h @@ -51,7 +51,7 @@ class CDocTypeManager{ static bool IsFileNameMatch(const WCHAR* pszTypeExts, const WCHAR* pszFileName); // タイプ別拡張子にファイル名がマッチするか static void GetFirstExt(const WCHAR* pszTypeExts, WCHAR szFirstExt[], int nBuffSize); // タイプ別拡張子の先頭拡張子を取得する - static bool ConvertTypesExtToDlgExt( const WCHAR *pszSrcExt, const WCHAR* szExt, WCHAR *pszDstExt ); // タイプ別設定の拡張子リストをダイアログ用リストに変換する + static bool ConvertTypesExtToDlgExt(const WCHAR *pszSrcExt, const WCHAR* szExt, std::wstring& destExt); // タイプ別設定の拡張子リストをダイアログ用リストに変換する static const WCHAR* m_typeExtSeps; // タイプ別拡張子の区切り文字 static const WCHAR* m_typeExtWildcards; // タイプ別拡張子のワイルドカード diff --git a/sakura_core/macro/CMacro.cpp b/sakura_core/macro/CMacro.cpp index dbeb58a802..3e822a1f35 100644 --- a/sakura_core/macro/CMacro.cpp +++ b/sakura_core/macro/CMacro.cpp @@ -1888,10 +1888,6 @@ bool CMacro::HandleFunction(CEditView *View, EFunctionCode ID, const VARIANT *Ar if (MAX_PATH <= sDefault.length()) { return false; } - // sFilterの先はSFilePath型 - if (MAX_PATH <= sFilter.length()) { - return false; - } CDlgOpenFile cDlgOpenFile; cDlgOpenFile.Create( From 22aca79a95e5d6217439e683bcfe92ec809c6cac Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Tue, 16 Mar 2021 03:41:41 +0900 Subject: [PATCH 0538/1024] =?UTF-8?q?CDlgOpenFile=5FCommonItemDialog?= =?UTF-8?q?=E3=81=AEm=5FstrDefaultWildCard=E3=82=92std::wstring=E3=81=AB?= =?UTF-8?q?=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ・バッファオーバーランしていたのを修正 --- sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp index 0e93697ec0..71fc8e3763 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp @@ -77,7 +77,7 @@ struct CDlgOpenFile_CommonItemDialog final DLLSHAREDATA* m_pShareData; - SFilePath m_szDefaultWildCard; /* 「開く」での最初のワイルドカード(保存時の拡張子補完でも使用される) */ + std::wstring m_strDefaultWildCard; /* 「開く」での最初のワイルドカード(保存時の拡張子補完でも使用される) */ SFilePath m_szInitialDir; /* 「開く」での初期ディレクトリ */ std::vector m_vMRU; @@ -416,7 +416,7 @@ CDlgOpenFile_CommonItemDialog::CDlgOpenFile_CommonItemDialog() wcscpy( m_szInitialDir, szDrive ); wcscat( m_szInitialDir, szDir ); - wcscpy( m_szDefaultWildCard, L"*.*" ); /*「開く」での最初のワイルドカード(保存時の拡張子補完でも使用される) */ + m_strDefaultWildCard = L"*.*"; /*「開く」での最初のワイルドカード(保存時の拡張子補完でも使用される) */ return; } @@ -435,7 +435,7 @@ void CDlgOpenFile_CommonItemDialog::Create( /* ユーザー定義ワイルドカード(保存時の拡張子補完でも使用される) */ if( NULL != pszUserWildCard ){ - wcscpy( m_szDefaultWildCard, pszUserWildCard ); + m_strDefaultWildCard = pszUserWildCard; } /* 「開く」での初期フォルダ */ @@ -465,7 +465,7 @@ bool CDlgOpenFile_CommonItemDialog::DoModal_GetOpenFileName( WCHAR* pszPath, EFi strs.reserve(8); strs.push_back(LS(STR_DLGOPNFL_EXTNAME1)); - specs.push_back(COMDLG_FILTERSPEC{strs.back().c_str(), m_szDefaultWildCard}); + specs.push_back(COMDLG_FILTERSPEC{strs.back().c_str(), m_strDefaultWildCard.c_str()}); switch( eAddFilter ){ case EFITER_TEXT: @@ -484,7 +484,7 @@ bool CDlgOpenFile_CommonItemDialog::DoModal_GetOpenFileName( WCHAR* pszPath, EFi break; } - if( 0 != wcscmp(m_szDefaultWildCard, L"*.*") ){ + if( 0 != wcscmp(m_strDefaultWildCard.c_str(), L"*.*") ){ strs.push_back(LS(STR_DLGOPNFL_EXTNAME3)); specs.push_back(COMDLG_FILTERSPEC{strs.back().c_str(), L"*.*"}); } @@ -747,7 +747,7 @@ HRESULT CDlgOpenFile_CommonItemDialog::DoModalSaveDlgImpl1( strs[1] = LS(STR_DLGOPNFL_EXTNAME2); strs[2] = LS(STR_DLGOPNFL_EXTNAME3); specs[0].pszName = strs[0].c_str(); - specs[0].pszSpec = m_szDefaultWildCard; + specs[0].pszSpec = m_strDefaultWildCard.c_str(); specs[1].pszName = strs[1].c_str(); specs[1].pszSpec = L"*.txt"; specs[2].pszName = strs[2].c_str(); From 4470d7d77e3092edc074c090eec851d21d56529f Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sun, 21 Mar 2021 16:28:08 +0900 Subject: [PATCH 0539/1024] =?UTF-8?q?SonarCloud=E4=B8=80=E9=83=A8=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CFileExt.cpp | 11 +++++------ sakura_core/CFileExt.h | 2 +- sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp | 3 +-- sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp | 2 +- 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/sakura_core/CFileExt.cpp b/sakura_core/CFileExt.cpp index 0269fab164..938cc5598f 100644 --- a/sakura_core/CFileExt.cpp +++ b/sakura_core/CFileExt.cpp @@ -49,7 +49,7 @@ bool CFileExt::AppendExt( const WCHAR *pszName, const WCHAR *pszExt ) { std::wstring workExt; - if( !CDocTypeManager::ConvertTypesExtToDlgExt( pszExt, NULL, workExt ) ) return false; + if( !CDocTypeManager::ConvertTypesExtToDlgExt( pszExt, nullptr, workExt ) ) return false; return AppendExtRaw( pszName, workExt.c_str() ); } @@ -69,14 +69,14 @@ bool CFileExt::AppendExtRaw( const WCHAR *pszName, const WCHAR *pszExt ) const WCHAR *CFileExt::GetName( int nIndex ) { - if( nIndex < 0 || nIndex >= GetCount() ) return NULL; + if( nIndex < 0 || nIndex >= GetCount() ) return nullptr; return m_vFileExtInfo[nIndex].m_sTypeName.c_str(); } const WCHAR *CFileExt::GetExt( int nIndex ) { - if( nIndex < 0 || nIndex >= GetCount() ) return NULL; + if( nIndex < 0 || nIndex >= GetCount() ) return nullptr; return m_vFileExtInfo[nIndex].m_sExt.c_str(); } @@ -89,13 +89,12 @@ const WCHAR *CFileExt::GetExtFilter( void ) void CFileExt::CreateExtFilter(std::vector& output) const { - int i; std::wstring work; /* 拡張子フィルタの作成 */ output.resize(0); - for( i = 0; i < GetCount(); i++ ) + for (int i = 0; i < GetCount(); i++) { // "%s (%s)\0%s\0" work = m_vFileExtInfo[i].m_sTypeName; @@ -106,7 +105,7 @@ void CFileExt::CreateExtFilter(std::vector& output) const work.append(m_vFileExtInfo[i].m_sExt); work.append(L"\0", 1); - int pos = static_cast(output.size()); + size_t pos = output.size(); output.resize(pos + work.length()); wmemcpy(&output[pos], &work[0], work.length()); } diff --git a/sakura_core/CFileExt.h b/sakura_core/CFileExt.h index 5b23ed0cb8..9236ebde39 100644 --- a/sakura_core/CFileExt.h +++ b/sakura_core/CFileExt.h @@ -52,7 +52,7 @@ class CFileExt //2回呼び出すと古いバッファが無効になることがあるのに注意 const WCHAR *GetExtFilter( void ); - int GetCount() const { return static_cast(m_vFileExtInfo.size()); } + [[nodiscard]] int GetCount() const { return static_cast(m_vFileExtInfo.size()); } protected: // 2014.10.30 syat ConvertTypesExtToDlgExtをCDocTypeManagerに移動 diff --git a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp index b4408164f9..7e4b3d8c17 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp @@ -649,6 +649,7 @@ int AddComboCodePages(HWND hdlg, HWND combo, int nSelCode, bool& bInit) @date 2008.05.05 novice GetModuleHandle(NULL)→NULLに変更 */ CDlgOpenFile_CommonFileDialog::CDlgOpenFile_CommonFileDialog() + :m_strDefaultWildCard(L"*.*") //「開く」での最初のワイルドカード(保存時の拡張子補完でも使用される) { m_hInstance = NULL; /* アプリケーションインスタンスのハンドル */ m_hwndParent = NULL; /* オーナーウィンドウのハンドル */ @@ -667,8 +668,6 @@ CDlgOpenFile_CommonFileDialog::CDlgOpenFile_CommonFileDialog() wcscpy( m_szInitialDir, szDrive ); wcscat( m_szInitialDir, szDir ); - m_strDefaultWildCard = L"*.*"; /*「開く」での最初のワイルドカード(保存時の拡張子補完でも使用される) */ - return; } diff --git a/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp index 71fc8e3763..95c124646c 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp @@ -398,6 +398,7 @@ enum CtrlId { }; CDlgOpenFile_CommonItemDialog::CDlgOpenFile_CommonItemDialog() + :m_strDefaultWildCard(L"*.*") //「開く」での最初のワイルドカード(保存時の拡張子補完でも使用される) { m_hInstance = NULL; /* アプリケーションインスタンスのハンドル */ m_hwndParent = NULL; /* オーナーウィンドウのハンドル */ @@ -416,7 +417,6 @@ CDlgOpenFile_CommonItemDialog::CDlgOpenFile_CommonItemDialog() wcscpy( m_szInitialDir, szDrive ); wcscat( m_szInitialDir, szDir ); - m_strDefaultWildCard = L"*.*"; /*「開く」での最初のワイルドカード(保存時の拡張子補完でも使用される) */ return; } From 51f8ab452ed1e3d9e5ea7972a563c62cc8febf37 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sun, 21 Mar 2021 16:29:33 +0900 Subject: [PATCH 0540/1024] =?UTF-8?q?=E4=B8=80=E9=83=A8=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-cdlgopenfile.cpp | 126 +++++++++++++++++++++++++ tests/unittests/test-cfileext.cpp | 91 ++++++++++++++++++ tests/unittests/tests1.vcxproj | 2 + tests/unittests/tests1.vcxproj.filters | 6 ++ 4 files changed, 225 insertions(+) create mode 100644 tests/unittests/test-cdlgopenfile.cpp create mode 100644 tests/unittests/test-cfileext.cpp diff --git a/tests/unittests/test-cdlgopenfile.cpp b/tests/unittests/test-cdlgopenfile.cpp new file mode 100644 index 0000000000..cf09ee64cd --- /dev/null +++ b/tests/unittests/test-cdlgopenfile.cpp @@ -0,0 +1,126 @@ +/*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include +#ifndef STRICT +#define STRICT 1 +#endif +#ifndef NOMINMAX +#define NOMINMAX +#endif /* #ifndef NOMINMAX */ +#include +#include +#include +#include "util/design_template.h" +#include "dlg/CDlgOpenFile.h" + +extern std::shared_ptr New_CDlgOpenFile_CommonFileDialog(); +extern std::shared_ptr New_CDlgOpenFile_CommonItemDialog(); + +TEST(CDlgOpenFile, Construct) +{ + CDlgOpenFile cDlgOpenFile; +} + +TEST(CDlgOpenFile, CommonItemDialogCreate) +{ + std::shared_ptrimpl = New_CDlgOpenFile_CommonItemDialog(); + impl->Create( + GetModuleHandle(nullptr), + nullptr, + L"*.txt", + L"C:\\Windows", + std::vector(), + std::vector() + ); +} + +TEST(CDlgOpenFile, CommonFileDialogCreate) +{ + std::shared_ptrimpl = New_CDlgOpenFile_CommonFileDialog(); + impl->Create( + GetModuleHandle(nullptr), + nullptr, + L"*.txt", + L"C:\\Windows", + std::vector(), + std::vector() + ); +} + +TEST(CDlgOpenFile, CommonItemDialogDefaltFilterLong) +{ + std::shared_ptrimpl = New_CDlgOpenFile_CommonItemDialog(); + // 落ちたり例外にならないこと + impl->Create( + GetModuleHandle(nullptr), + nullptr, + L".extension_250_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_LONG", + L"C:\\Windows", + std::vector(), + std::vector() + ); +} + +TEST(CDlgOpenFile, CommonFileDialogDefaltFilterLong) +{ + std::shared_ptrimpl = New_CDlgOpenFile_CommonFileDialog(); + // 落ちたり例外にならないこと + impl->Create( + GetModuleHandle(nullptr), + nullptr, + L"*.extension_250_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_LONG", + L"C:\\Windows", + std::vector(), + std::vector() + ); +} + +TEST(CDlgOpenFile, CommonFileDialogDefaltFilterMany) +{ + std::shared_ptrimpl = New_CDlgOpenFile_CommonFileDialog(); + // 落ちたり例外にならないこと + impl->Create( + GetModuleHandle(nullptr), + nullptr, + L"*.extension_50_0_long_long_long_long_long_long_LONG;*.extension_50_1_long_long_long_long_long_long_LONG;*.extension_50_2_long_long_long_long_long_long_LONG;*.extension_50_3_long_long_long_long_long_long_LONG;*.extension_50_4_long_long_long_long_long_long_LONG;*.extension_50_5_long_long_long_long_long_long_LONG;*.extension_50_6_long_long_long_long_long_long_LONG;*.extension_50_7_long_long_long_long_long_long_LONG;*.extension_50_8_long_long_long_long_long_long_LONG;*.extension_50_9_long_long_long_long_long_long_LONG", + L"C:\\Windows", + std::vector(), + std::vector() + ); +} + +TEST(CDlgOpenFile, CommonItemDialogDefaltFilterMany) +{ + std::shared_ptrimpl = New_CDlgOpenFile_CommonItemDialog(); + // 落ちたり例外にならないこと + impl->Create( + GetModuleHandle(nullptr), + nullptr, + L"*.extension_50_0_long_long_long_long_long_long_LONG;*.extension_50_1_long_long_long_long_long_long_LONG;*.extension_50_2_long_long_long_long_long_long_LONG;*.extension_50_3_long_long_long_long_long_long_LONG;*.extension_50_4_long_long_long_long_long_long_LONG;*.extension_50_5_long_long_long_long_long_long_LONG;*.extension_50_6_long_long_long_long_long_long_LONG;*.extension_50_7_long_long_long_long_long_long_LONG;*.extension_50_8_long_long_long_long_long_long_LONG;*.extension_50_9_long_long_long_long_long_long_LONG", + L"C:\\Windows", + std::vector(), + std::vector() + ); +} diff --git a/tests/unittests/test-cfileext.cpp b/tests/unittests/test-cfileext.cpp new file mode 100644 index 0000000000..cf65b9fd27 --- /dev/null +++ b/tests/unittests/test-cfileext.cpp @@ -0,0 +1,91 @@ +/*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include + +#ifndef NOMINMAX +#define NOMINMAX +#endif /* #ifndef NOMINMAX */ + +#include +#include "CFileExt.h" + + +static size_t GetFilterLength(const wchar_t* filter) +{ + size_t length = 0; + size_t i = 0; + while (!(filter[i] == L'\0' && filter[i+1] == L'\0')) { + ++i; + } + return i + 2; +} + +TEST(CFileExt, Construct) +{ + CFileExt cFileExt; +} + +TEST(CFileExt, CreateFilter) +{ + wchar_t result[] = L"ユーザー設定 (*.cpp;*.h;*.*)\0*.cpp;*.h;*.*\0テキスト (*.txt)\0*.txt\0すべてのファイル (*.*)\0*.*\0"; + + CFileExt cFileExt; + cFileExt.AppendExtRaw(L"ユーザー設定", L"*.cpp;*.h;*.*"); + cFileExt.AppendExtRaw(L"テキスト", L"*.txt"); + cFileExt.AppendExtRaw(L"すべてのファイル", L"*.*"); + + const wchar_t* filter = cFileExt.GetExtFilter(); + size_t length = GetFilterLength(filter); + std::wstring expected = {result, _countof(result)}; + std::wstring actual = {filter, length}; + EXPECT_EQ(expected, actual); +} + +TEST(CFileExt, RawLongFilter) +{ + CFileExt cFileExt; + cFileExt.AppendExtRaw( + L"ユーザ設定", + L"*.extensin_250_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_longX" + ); +} + +TEST(CFileExt, RawManyFilter) +{ + CFileExt cFileExt; + cFileExt.AppendExtRaw( + L"ユーザ指定", + L"*.extensin_50_0_long_long_long_long_long_long_long_l;*.extensin_50_1_long_long_long_long_long_long_long_l;*.extensin_50_2_long_long_long_long_long_long_long_l;*.extensin_50_3_long_long_long_long_long_long_long_l;*.extensin_50_4_long_long_long_long_long_long_long_l;*.extensin_50_5_long_long_long_long_long_long_long_l;*.extensin_50_6_long_long_long_long_long_long_long_l;*.extensin_50_7_long_long_long_long_long_long_long_l;*.extensin_50_8_long_long_long_long_long_long_long_l;*.extensin_50_9_long_long_long_long_long_long_long_l" + ); +} + +TEST(CFileExt, LongFilter) +{ + CFileExt cFileExt; + cFileExt.AppendExt( + L"ユーザ設定", + L"*.extensin_250_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_longX" + ); +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index 00fec312f2..5de9dfbcc1 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -111,8 +111,10 @@ + + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index 4126fb8cea..6f2b2ee59e 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -122,6 +122,12 @@ Test Files + + Test Files + + + Test Files +
                    From 4cbf16e424c98e963155aa83f9a16ef02b8eaa02 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sun, 21 Mar 2021 17:05:50 +0900 Subject: [PATCH 0541/1024] =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= =?UTF-8?q?=E3=80=80ConvertTypesExtToDlgExt=E3=81=AE=E5=87=A6=E7=90=86?= =?UTF-8?q?=E7=B5=90=E6=9E=9C=E3=82=92=E6=88=BB=E3=82=8A=E5=80=A4=E3=81=AB?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CFileExt.cpp | 7 ++++--- sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp | 3 ++- sakura_core/doc/CDocFileOperation.cpp | 2 +- sakura_core/env/CDocTypeManager.cpp | 8 ++++---- sakura_core/env/CDocTypeManager.h | 2 +- 5 files changed, 12 insertions(+), 10 deletions(-) diff --git a/sakura_core/CFileExt.cpp b/sakura_core/CFileExt.cpp index 938cc5598f..49198112ce 100644 --- a/sakura_core/CFileExt.cpp +++ b/sakura_core/CFileExt.cpp @@ -47,9 +47,10 @@ CFileExt::CFileExt() bool CFileExt::AppendExt( const WCHAR *pszName, const WCHAR *pszExt ) { - std::wstring workExt; - - if( !CDocTypeManager::ConvertTypesExtToDlgExt( pszExt, nullptr, workExt ) ) return false; + std::wstring workExt = CDocTypeManager::ConvertTypesExtToDlgExt(pszExt, nullptr); + if (workExt.empty()) { + return false; + } return AppendExtRaw( pszName, workExt.c_str() ); } diff --git a/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp index 95c124646c..4a5a3e84e7 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp @@ -707,7 +707,8 @@ bool CDlgOpenFile_CommonItemDialog::DoModalOpenDlg( continue; } specs[2 + i].pszName = type->m_szTypeName; - if (CDocTypeManager::ConvertTypesExtToDlgExt(type->m_szTypeExts, NULL, worksString)) { + worksString = CDocTypeManager::ConvertTypesExtToDlgExt(type->m_szTypeExts, nullptr); + if (!worksString.empty()) { strs[2 + i] = worksString; specs[2 + i].pszSpec = strs[2 + i].c_str(); } diff --git a/sakura_core/doc/CDocFileOperation.cpp b/sakura_core/doc/CDocFileOperation.cpp index fb775ad704..3e69f56798 100644 --- a/sakura_core/doc/CDocFileOperation.cpp +++ b/sakura_core/doc/CDocFileOperation.cpp @@ -251,7 +251,7 @@ bool CDocFileOperation::SaveFileDialog( } } else { - CDocTypeManager::ConvertTypesExtToDlgExt(type.m_szTypeExts, szExt, strDefaultWildCard); + strDefaultWildCard = CDocTypeManager::ConvertTypesExtToDlgExt(type.m_szTypeExts, szExt); } if(!this->m_pcDocRef->m_cDocFile.GetFilePathClass().IsValidPath()){ diff --git a/sakura_core/env/CDocTypeManager.cpp b/sakura_core/env/CDocTypeManager.cpp index a4bf8d1990..1b40a429b7 100644 --- a/sakura_core/env/CDocTypeManager.cpp +++ b/sakura_core/env/CDocTypeManager.cpp @@ -221,11 +221,11 @@ void CDocTypeManager::GetFirstExt(const WCHAR* pszTypeExts, WCHAR szFirstExt[], @date 2014.12.06 syat CFileExtから移動 */ -bool CDocTypeManager::ConvertTypesExtToDlgExt(const WCHAR *pszSrcExt, const WCHAR* szExt, std::wstring& destExt) +std::wstring CDocTypeManager::ConvertTypesExtToDlgExt(const WCHAR *pszSrcExt, const WCHAR* szExt) { - destExt.resize(0); + std::wstring destExt; // 2003.08.14 MIK NULLじゃなくてfalse - if( NULL == pszSrcExt ) return false; + if( NULL == pszSrcExt ) return L""; if (szExt != NULL && szExt[0] != L'\0') { // ファイルパスがあり、拡張子ありの場合、トップに指定 @@ -255,5 +255,5 @@ bool CDocTypeManager::ConvertTypesExtToDlgExt(const WCHAR *pszSrcExt, const WCHA } token = wcstok_s(nullptr, m_typeExtSeps, &context); } - return true; + return destExt; } diff --git a/sakura_core/env/CDocTypeManager.h b/sakura_core/env/CDocTypeManager.h index a0027169c8..49a55e2340 100644 --- a/sakura_core/env/CDocTypeManager.h +++ b/sakura_core/env/CDocTypeManager.h @@ -51,7 +51,7 @@ class CDocTypeManager{ static bool IsFileNameMatch(const WCHAR* pszTypeExts, const WCHAR* pszFileName); // タイプ別拡張子にファイル名がマッチするか static void GetFirstExt(const WCHAR* pszTypeExts, WCHAR szFirstExt[], int nBuffSize); // タイプ別拡張子の先頭拡張子を取得する - static bool ConvertTypesExtToDlgExt(const WCHAR *pszSrcExt, const WCHAR* szExt, std::wstring& destExt); // タイプ別設定の拡張子リストをダイアログ用リストに変換する + static std::wstring ConvertTypesExtToDlgExt(const WCHAR *pszSrcExt, const WCHAR* szExt); // タイプ別設定の拡張子リストをダイアログ用リストに変換する static const WCHAR* m_typeExtSeps; // タイプ別拡張子の区切り文字 static const WCHAR* m_typeExtWildcards; // タイプ別拡張子のワイルドカード From 5a77929a6fc935ae9ee1937551d6e5f4e3ba1e11 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sun, 21 Mar 2021 17:25:05 +0900 Subject: [PATCH 0542/1024] =?UTF-8?q?CFileExt=E3=81=AE=E3=82=B3=E3=83=B3?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=83=A9=E3=82=AF=E3=82=BF=E3=82=92default?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E3=81=AB=E3=81=97=E3=83=87=E3=82=B9=E3=83=88?= =?UTF-8?q?=E3=83=A9=E3=82=AF=E3=82=BF=E3=82=92=E6=9A=97=E9=BB=99=E7=94=9F?= =?UTF-8?q?=E6=88=90=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CFileExt.cpp | 10 ---------- sakura_core/CFileExt.h | 3 +-- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/sakura_core/CFileExt.cpp b/sakura_core/CFileExt.cpp index 49198112ce..7455e22aff 100644 --- a/sakura_core/CFileExt.cpp +++ b/sakura_core/CFileExt.cpp @@ -35,16 +35,6 @@ #include "CFileExt.h" #include "env/CDocTypeManager.h" -CFileExt::CFileExt() -{ - m_vstrFilter.resize( 1 ); - m_vstrFilter[0] = L'\0'; - -// //テキストエディタとして、既定でリストに載ってほしい拡張子 -// AppendExt( "すべてのファイル", "*" ); -// AppendExt( "テキストファイル", "txt" ); -} - bool CFileExt::AppendExt( const WCHAR *pszName, const WCHAR *pszExt ) { std::wstring workExt = CDocTypeManager::ConvertTypesExtToDlgExt(pszExt, nullptr); diff --git a/sakura_core/CFileExt.h b/sakura_core/CFileExt.h index 9236ebde39..2bd82a5aef 100644 --- a/sakura_core/CFileExt.h +++ b/sakura_core/CFileExt.h @@ -40,8 +40,7 @@ class CFileExt { public: - CFileExt(); - ~CFileExt() = default; + CFileExt() = default; bool AppendExt( const WCHAR *pszName, const WCHAR *pszExt ); bool AppendExtRaw( const WCHAR *pszName, const WCHAR *pszExt ); From 60008c8903083e042103d463ccfc7caf6059383a Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sun, 21 Mar 2021 18:09:02 +0900 Subject: [PATCH 0543/1024] =?UTF-8?q?ConvertTypesExtToDlgExt=E3=81=AE?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=B1=E3=83=BC=E3=82=B9=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-cdoctypemanager.cpp | 106 +++++++++++++++++++++++ tests/unittests/tests1.vcxproj | 1 + tests/unittests/tests1.vcxproj.filters | 3 + 3 files changed, 110 insertions(+) create mode 100644 tests/unittests/test-cdoctypemanager.cpp diff --git a/tests/unittests/test-cdoctypemanager.cpp b/tests/unittests/test-cdoctypemanager.cpp new file mode 100644 index 0000000000..57afc24850 --- /dev/null +++ b/tests/unittests/test-cdoctypemanager.cpp @@ -0,0 +1,106 @@ +/* + Copyright (C) 2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ + +#include +#include +#include +#include "mem/CNativeW.h" +#include "env/CDocTypeManager.h" + +TEST(CDocTypeManager, ConvertTypesExtToDlgExtNullptr1) +{ + const std::wstring expected = { L"" }; + std::wstring actual = CDocTypeManager::ConvertTypesExtToDlgExt(nullptr, nullptr); + EXPECT_EQ(expected, actual); +} + +TEST(CDocTypeManager, ConvertTypesExtToDlgExtNullptr2) +{ + const std::wstring expected = { L"" }; + std::wstring actual = CDocTypeManager::ConvertTypesExtToDlgExt(nullptr, L".txt"); + EXPECT_EQ(expected, actual); +} + +TEST(CDocTypeManager, ConvertTypesExtToDlgExtOnce) +{ + const std::wstring expected = { L"*.txt;*.cpp" }; + std::wstring actual = CDocTypeManager::ConvertTypesExtToDlgExt(L"cpp", L".txt"); + EXPECT_EQ(expected, actual); +} + +TEST(CDocTypeManager, ConvertTypesExtToDlgExtTwo) +{ + const std::wstring expected = { L"*.txt;*.cpp;*.h" }; + std::wstring actual = CDocTypeManager::ConvertTypesExtToDlgExt(L"cpp;h", L".txt"); + EXPECT_EQ(expected, actual); +} + +TEST(CDocTypeManager, ConvertTypesExtToDlgExtThree) +{ + const std::wstring expected = { L"*.txt;*.cpp;*.h;*.hpp" }; + std::wstring actual = CDocTypeManager::ConvertTypesExtToDlgExt(L"cpp;h;hpp", L".txt"); + EXPECT_EQ(expected, actual); +} + +TEST(CDocTypeManager, ConvertTypesExtToDlgExtAppendPeriod) +{ + const std::wstring expected = { L"*.txt;*.cpp;*.h" }; + std::wstring actual = CDocTypeManager::ConvertTypesExtToDlgExt(L".cpp;.h", L".txt"); + EXPECT_EQ(expected, actual); +} + +TEST(CDocTypeManager, ConvertTypesExtToDlgExtSeparatorSpace) +{ + const std::wstring expected = { L"*.txt;*.cpp;*.h" }; + std::wstring actual = CDocTypeManager::ConvertTypesExtToDlgExt(L"cpp h", L".txt"); + EXPECT_EQ(expected, actual); +} + +TEST(CDocTypeManager, ConvertTypesExtToDlgExtSeparatorComma) +{ + const std::wstring expected = { L"*.txt;*.cpp;*.h" } ; + std::wstring actual = CDocTypeManager::ConvertTypesExtToDlgExt(L"cpp,h", L".txt"); + EXPECT_EQ(expected, actual); +} + +TEST(CDocTypeManager, ConvertTypesExtToDlgExtTopNullptr) +{ + const std::wstring expected = { L"*.cpp;*.h" }; + std::wstring actual = CDocTypeManager::ConvertTypesExtToDlgExt(L"cpp,h", nullptr); + EXPECT_EQ(expected, actual); +} + +TEST(CDocTypeManager, ConvertTypesExtToDlgExtExts64) +{ + const std::wstring expected = { L"*.txt;*.a;*.b;*.c;*.d;*.e;*.f;*.g;*.h;*.i;*.j;*.k;*.l;*.m;*.n;*.o;*.p;*.q;*.r;*.s;*.t;*.u;*.v;*.w;*.x;*.y;*.z;*.1;*.2;*.3;*.4;*.5;*.6" }; + std::wstring actual = CDocTypeManager::ConvertTypesExtToDlgExt(L"a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,1,2,3,4,5,6", L".txt"); + EXPECT_EQ(expected, actual); +} + +TEST(CDocTypeManager, ConvertTypesExtToDlgExtExts64LongFileExt) +{ + const std::wstring expected = { L"*.extension_260_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long;*.a;*.b;*.c;*.d;*.e;*.f;*.g;*.h;*.i;*.j;*.k;*.l;*.m;*.n;*.o;*.p;*.q;*.r;*.s;*.t;*.u;*.v;*.w;*.x;*.y;*.z;*.1;*.2;*.3;*.4;*.5;*.6" }; + std::wstring actual = CDocTypeManager::ConvertTypesExtToDlgExt(L"a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,1,2,3,4,5,6", L".extension_260_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long"); + EXPECT_EQ(expected, actual); +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index 5de9dfbcc1..3c3fc818d9 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -113,6 +113,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index 6f2b2ee59e..931d2a1aa2 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -128,6 +128,9 @@ Test Files + + Test Files + From 4172de2d7ac59722fa0f3f72abfc325946da8afc Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 21 Mar 2021 20:34:46 +0900 Subject: [PATCH 0544/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98(=E3=83=90=E3=83=83=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=81=AE=E9=80=94=E4=B8=AD=E3=81=ABcpy=E3=81=A7=E3=81=AA?= =?UTF-8?q?=E3=81=8Fcat=E3=81=99=E3=82=8B)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/types/CType_Erlang.cpp | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/sakura_core/types/CType_Erlang.cpp b/sakura_core/types/CType_Erlang.cpp index a68ebd85b1..a7523aaa19 100644 --- a/sakura_core/types/CType_Erlang.cpp +++ b/sakura_core/types/CType_Erlang.cpp @@ -381,17 +381,9 @@ bool COutlineErlang::parse( const wchar_t* buf, int linelen, CLogicInt linenum ) */ void COutlineErlang::build_arity( int arity ) { - const size_t buf_size = _countof( m_func ); - const size_t len = ::wcsnlen( m_func, buf_size ); - wchar_t *p = &m_func[len]; wchar_t numstr[12]; - - if( len + 1 >= buf_size ) - return; // no room - - numstr[0] = L'/'; - _itow( arity, numstr + 1, 10 ); - ::wcsncpy_s( p, buf_size - len, numstr, _TRUNCATE ); + ::_snwprintf_s( numstr, _TRUNCATE, L"/%d", arity ); + ::wcsncat_s( m_func, numstr, _TRUNCATE ); } /** Erlang アウトライン解析 From 44b4604b2db2eb327af2f2baf531f976fe521e35 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 21 Mar 2021 21:41:38 +0900 Subject: [PATCH 0545/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C(=E5=A4=89=E6=95=B0?= =?UTF-8?q?=E5=9E=8B=E4=BF=AE=E6=AD=A3=E3=81=AE=E5=BD=B1=E9=9F=BF=E8=80=83?= =?UTF-8?q?=E6=85=AE=E6=BC=8F=E3=82=8C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/types/CType_Python.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/types/CType_Python.cpp b/sakura_core/types/CType_Python.cpp index 8421325f81..92b9e1ca38 100644 --- a/sakura_core/types/CType_Python.cpp +++ b/sakura_core/types/CType_Python.cpp @@ -263,7 +263,7 @@ int COutlinePython::ScanString( const wchar_t* data, int linelen, int start_offs assert( m_state == STATE_STRING ); bool bExtEol = GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol; - int quote_char = m_quote_char; + auto quote_char = m_quote_char; for( int col = start_offset; col < linelen; ++col ){ int nCharChars = CNativeW::GetSizeOfChar( data, linelen, col ); if( 1 < nCharChars ){ From 40fb2a3875d9fe4d2a71e1cb5a355d960730acdf Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sun, 21 Mar 2021 22:40:25 +0900 Subject: [PATCH 0546/1024] =?UTF-8?q?m=5FstrDefaultWildCard=E3=81=AE?= =?UTF-8?q?=E6=AF=94=E8=BC=83=E3=82=92wcscmp=E3=81=8B=E3=82=89!=3D?= =?UTF-8?q?=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp | 2 +- sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp index 7e4b3d8c17..e5366d420d 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp @@ -739,7 +739,7 @@ bool CDlgOpenFile_CommonFileDialog::DoModal_GetOpenFileName( WCHAR* pszPath, EFi break; } - if( 0 != wcscmp(m_strDefaultWildCard.c_str(), L"*.*") ){ + if (m_strDefaultWildCard != L"*.*") { cFileExt.AppendExtRaw( LS(STR_DLGOPNFL_EXTNAME3), L"*.*" ); } diff --git a/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp index 4a5a3e84e7..c4997f0285 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp @@ -484,7 +484,7 @@ bool CDlgOpenFile_CommonItemDialog::DoModal_GetOpenFileName( WCHAR* pszPath, EFi break; } - if( 0 != wcscmp(m_strDefaultWildCard.c_str(), L"*.*") ){ + if (m_strDefaultWildCard != L"*.*") { strs.push_back(LS(STR_DLGOPNFL_EXTNAME3)); specs.push_back(COMDLG_FILTERSPEC{strs.back().c_str(), L"*.*"}); } From b822a6486d822af10d16f4089d41058bb7c9c356 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sun, 21 Mar 2021 22:47:27 +0900 Subject: [PATCH 0547/1024] =?UTF-8?q?CDlgOpenFile=E3=81=AE=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=81=A7GetDllShareData()=E3=81=8C=E5=BF=85?= =?UTF-8?q?=E8=A6=81=E3=81=AA=E3=81=9F=E3=82=81DISABLED=E3=81=AB=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-cdlgopenfile.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/unittests/test-cdlgopenfile.cpp b/tests/unittests/test-cdlgopenfile.cpp index cf09ee64cd..90bc235cb9 100644 --- a/tests/unittests/test-cdlgopenfile.cpp +++ b/tests/unittests/test-cdlgopenfile.cpp @@ -43,7 +43,7 @@ TEST(CDlgOpenFile, Construct) CDlgOpenFile cDlgOpenFile; } -TEST(CDlgOpenFile, CommonItemDialogCreate) +TEST(CDlgOpenFile, DISABLED_CommonItemDialogCreate) { std::shared_ptrimpl = New_CDlgOpenFile_CommonItemDialog(); impl->Create( @@ -56,7 +56,7 @@ TEST(CDlgOpenFile, CommonItemDialogCreate) ); } -TEST(CDlgOpenFile, CommonFileDialogCreate) +TEST(CDlgOpenFile, DISABLED_CommonFileDialogCreate) { std::shared_ptrimpl = New_CDlgOpenFile_CommonFileDialog(); impl->Create( @@ -69,7 +69,7 @@ TEST(CDlgOpenFile, CommonFileDialogCreate) ); } -TEST(CDlgOpenFile, CommonItemDialogDefaltFilterLong) +TEST(CDlgOpenFile, DISABLED_CommonItemDialogDefaltFilterLong) { std::shared_ptrimpl = New_CDlgOpenFile_CommonItemDialog(); // 落ちたり例外にならないこと @@ -83,7 +83,7 @@ TEST(CDlgOpenFile, CommonItemDialogDefaltFilterLong) ); } -TEST(CDlgOpenFile, CommonFileDialogDefaltFilterLong) +TEST(CDlgOpenFile, DISABLED_CommonFileDialogDefaltFilterLong) { std::shared_ptrimpl = New_CDlgOpenFile_CommonFileDialog(); // 落ちたり例外にならないこと @@ -97,7 +97,7 @@ TEST(CDlgOpenFile, CommonFileDialogDefaltFilterLong) ); } -TEST(CDlgOpenFile, CommonFileDialogDefaltFilterMany) +TEST(CDlgOpenFile, DISABLED_CommonFileDialogDefaltFilterMany) { std::shared_ptrimpl = New_CDlgOpenFile_CommonFileDialog(); // 落ちたり例外にならないこと @@ -111,7 +111,7 @@ TEST(CDlgOpenFile, CommonFileDialogDefaltFilterMany) ); } -TEST(CDlgOpenFile, CommonItemDialogDefaltFilterMany) +TEST(CDlgOpenFile, DISABLED_CommonItemDialogDefaltFilterMany) { std::shared_ptrimpl = New_CDlgOpenFile_CommonItemDialog(); // 落ちたり例外にならないこと From 7855928975d9dafac4a5e21ad499fe1b598c9049 Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Sun, 21 Mar 2021 23:13:45 +0900 Subject: [PATCH 0548/1024] =?UTF-8?q?Revert=20"=E3=82=A2=E3=82=A6=E3=83=88?= =?UTF-8?q?=E3=83=A9=E3=82=A4=E3=83=B3=E8=A7=A3=E6=9E=90=E3=83=80=E3=82=A4?= =?UTF-8?q?=E3=82=A2=E3=83=AD=E3=82=B0=E3=83=9C=E3=83=83=E3=82=AF=E3=82=B9?= =?UTF-8?q?=E3=82=92=E3=83=89=E3=83=83=E3=82=AD=E3=83=B3=E3=82=B0=E6=99=82?= =?UTF-8?q?=E3=81=AB=E3=82=B9=E3=83=97=E3=83=AA=E3=83=83=E3=82=BF=E3=83=BC?= =?UTF-8?q?=E3=82=92=E3=83=89=E3=83=A9=E3=83=83=E3=82=B0=E3=81=97=E3=81=A6?= =?UTF-8?q?=E3=83=AA=E3=82=B5=E3=82=A4=E3=82=BA=E3=81=99=E3=82=8B=E3=81=A8?= =?UTF-8?q?=E3=82=A6=E3=82=A3=E3=83=B3=E3=83=89=E3=82=A6=E3=81=AE=E6=8F=8F?= =?UTF-8?q?=E7=94=BB=E3=81=8C=E3=81=A1=E3=82=89=E3=81=A4=E3=81=8F=E5=95=8F?= =?UTF-8?q?=E9=A1=8C=E3=82=92=E8=A7=A3=E6=B6=88"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit e25539bfb2a97e6ed316a8cc77b033a384a52d41. --- sakura_core/outline/CDlgFuncList.cpp | 4 ++++ sakura_core/sakura_rc.rc | 1 - 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/sakura_core/outline/CDlgFuncList.cpp b/sakura_core/outline/CDlgFuncList.cpp index bcdde6542e..c9634bcb71 100644 --- a/sakura_core/outline/CDlgFuncList.cpp +++ b/sakura_core/outline/CDlgFuncList.cpp @@ -2197,6 +2197,10 @@ BOOL CDlgFuncList::OnSize( WPARAM wParam, LPARAM lParam ) for( int i = 0 ; i < _countof(anchorList); i++ ){ HWND hwndCtrl = GetItemHwnd(anchorList[i].id); ResizeItem( hwndCtrl, m_ptDefaultSizeClient, ptNew, m_rcItems[i], anchorList[i].anchor, (anchorList[i].anchor != ANCHOR_ALL)); +// 2013.2.6 aroka ちらつき防止用の試行錯誤 + if(anchorList[i].anchor == ANCHOR_ALL){ + ::UpdateWindow( hwndCtrl ); + } } // if( IsDocking() ) diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index e236904c03..9612b17fc8 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -109,7 +109,6 @@ END IDD_FUNCLIST DIALOG 0, 0, 240, 289 STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_COMPOSITED CAPTION "x" FONT 9, "MS Pゴシック" BEGIN From fb761e8d34fce57f806395f272747bc3fbd26bed Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sun, 21 Mar 2021 23:26:47 +0900 Subject: [PATCH 0549/1024] =?UTF-8?q?SonarCloud=E5=AF=BE=E7=AD=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp | 3 +-- sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp | 2 +- sakura_core/env/CDocTypeManager.cpp | 4 ++-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp index e5366d420d..b27e974592 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp @@ -93,7 +93,7 @@ struct CDlgOpenFile_CommonFileDialog final : public IDlgOpenFile DLLSHAREDATA* m_pShareData; - std::wstring m_strDefaultWildCard; /* 「開く」での最初のワイルドカード(保存時の拡張子補完でも使用される) */ + std::wstring m_strDefaultWildCard{ L"*.*" }; /* 「開く」での最初のワイルドカード(保存時の拡張子補完でも使用される) */ SFilePath m_szInitialDir; /* 「開く」での初期ディレクトリ */ std::vector m_vMRU; @@ -649,7 +649,6 @@ int AddComboCodePages(HWND hdlg, HWND combo, int nSelCode, bool& bInit) @date 2008.05.05 novice GetModuleHandle(NULL)→NULLに変更 */ CDlgOpenFile_CommonFileDialog::CDlgOpenFile_CommonFileDialog() - :m_strDefaultWildCard(L"*.*") //「開く」での最初のワイルドカード(保存時の拡張子補完でも使用される) { m_hInstance = NULL; /* アプリケーションインスタンスのハンドル */ m_hwndParent = NULL; /* オーナーウィンドウのハンドル */ diff --git a/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp index c4997f0285..f01170e88c 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp @@ -77,7 +77,7 @@ struct CDlgOpenFile_CommonItemDialog final DLLSHAREDATA* m_pShareData; - std::wstring m_strDefaultWildCard; /* 「開く」での最初のワイルドカード(保存時の拡張子補完でも使用される) */ + std::wstring m_strDefaultWildCard{ L"*.*" }; /* 「開く」での最初のワイルドカード(保存時の拡張子補完でも使用される) */ SFilePath m_szInitialDir; /* 「開く」での初期ディレクトリ */ std::vector m_vMRU; diff --git a/sakura_core/env/CDocTypeManager.cpp b/sakura_core/env/CDocTypeManager.cpp index 1b40a429b7..244c1a7b09 100644 --- a/sakura_core/env/CDocTypeManager.cpp +++ b/sakura_core/env/CDocTypeManager.cpp @@ -223,10 +223,10 @@ void CDocTypeManager::GetFirstExt(const WCHAR* pszTypeExts, WCHAR szFirstExt[], */ std::wstring CDocTypeManager::ConvertTypesExtToDlgExt(const WCHAR *pszSrcExt, const WCHAR* szExt) { - std::wstring destExt; // 2003.08.14 MIK NULLじゃなくてfalse - if( NULL == pszSrcExt ) return L""; + if (pszSrcExt == nullptr) return L""; + std::wstring destExt; if (szExt != NULL && szExt[0] != L'\0') { // ファイルパスがあり、拡張子ありの場合、トップに指定 destExt.assign(L"*"); From 030a2c339950e35f64ba117ebcecb82772d00b4e Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 22 Mar 2021 00:06:02 +0900 Subject: [PATCH 0550/1024] =?UTF-8?q?MinGW=E7=89=88CRT=E3=81=A7wcsncat=5Fs?= =?UTF-8?q?=E3=81=AEC++=E3=82=AA=E3=83=BC=E3=83=90=E3=83=BC=E3=83=AD?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=81=8C=E6=9C=AA=E5=AE=9A=E7=BE=A9=E3=81=AB?= =?UTF-8?q?=E3=81=AA=E3=81=A3=E3=81=A6=E3=81=84=E3=82=8B=E3=81=93=E3=81=A8?= =?UTF-8?q?=E3=81=AB=E5=AF=BE=E7=AD=96=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/types/CType_Erlang.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/types/CType_Erlang.cpp b/sakura_core/types/CType_Erlang.cpp index a7523aaa19..082b98524a 100644 --- a/sakura_core/types/CType_Erlang.cpp +++ b/sakura_core/types/CType_Erlang.cpp @@ -383,7 +383,7 @@ void COutlineErlang::build_arity( int arity ) { wchar_t numstr[12]; ::_snwprintf_s( numstr, _TRUNCATE, L"/%d", arity ); - ::wcsncat_s( m_func, numstr, _TRUNCATE ); + ::wcsncat_s( m_func, _countof(m_func), numstr, _TRUNCATE ); } /** Erlang アウトライン解析 From d55fa1531c0af20f76f09a2745b8352260fe653d Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Mon, 22 Mar 2021 02:55:58 +0900 Subject: [PATCH 0551/1024] =?UTF-8?q?PR=E3=83=9F=E3=82=B9=E3=81=AECDlgOpen?= =?UTF-8?q?File=5FCommonItemDialog=E3=82=B3=E3=83=B3=E3=82=B9=E3=83=88?= =?UTF-8?q?=E3=83=A9=E3=82=AF=E3=82=BF=E3=81=AE=E5=88=9D=E6=9C=9F=E5=8C=96?= =?UTF-8?q?=E9=87=8D=E8=A4=87=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp index f01170e88c..2e809ee199 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp @@ -398,7 +398,6 @@ enum CtrlId { }; CDlgOpenFile_CommonItemDialog::CDlgOpenFile_CommonItemDialog() - :m_strDefaultWildCard(L"*.*") //「開く」での最初のワイルドカード(保存時の拡張子補完でも使用される) { m_hInstance = NULL; /* アプリケーションインスタンスのハンドル */ m_hwndParent = NULL; /* オーナーウィンドウのハンドル */ From 5dab9c23a4b2c6ddd5afa7edbe23547af7fbe7a5 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Mon, 22 Mar 2021 19:35:42 +0900 Subject: [PATCH 0552/1024] =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= =?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/env/CDocTypeManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/env/CDocTypeManager.cpp b/sakura_core/env/CDocTypeManager.cpp index 244c1a7b09..e787770ecf 100644 --- a/sakura_core/env/CDocTypeManager.cpp +++ b/sakura_core/env/CDocTypeManager.cpp @@ -217,7 +217,7 @@ void CDocTypeManager::GetFirstExt(const WCHAR* pszTypeExts, WCHAR szFirstExt[], /*! タイプ別設定の拡張子リストをダイアログ用リストに変換する @param pszSrcExt [in] 拡張子リスト 例「.c cpp;.h」(ドットはオプション) @param szExt [in] リストの先頭にする拡張子 例「.h」(ドット必須) - @param destExt [out] 拡張子リスト 例「*.h;*.c;*.cpp」 + @return 拡張子リスト 例「*.h;*.c;*.cpp」 @date 2014.12.06 syat CFileExtから移動 */ From 5752f12510d0d6b203add5df3826872626cb00ee Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Mon, 22 Mar 2021 19:36:52 +0900 Subject: [PATCH 0553/1024] =?UTF-8?q?ConvertTypesExtToDlgExt=E3=81=AE?= =?UTF-8?q?=E6=8B=A1=E5=BC=B5=E5=AD=90=E3=81=8C=E5=90=8C=E3=81=98=E3=81=A0?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E3=81=A8=E3=81=8D=E3=81=AE=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=B1=E3=83=BC=E3=82=B9=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-cdoctypemanager.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/unittests/test-cdoctypemanager.cpp b/tests/unittests/test-cdoctypemanager.cpp index 57afc24850..ff946e5028 100644 --- a/tests/unittests/test-cdoctypemanager.cpp +++ b/tests/unittests/test-cdoctypemanager.cpp @@ -91,6 +91,20 @@ TEST(CDocTypeManager, ConvertTypesExtToDlgExtTopNullptr) EXPECT_EQ(expected, actual); } +TEST(CDocTypeManager, ConvertTypesExtToDlgExtMerge) +{ + const std::wstring expected = { L"*.txt;*.cpp;*.h" }; + std::wstring actual = CDocTypeManager::ConvertTypesExtToDlgExt(L"txt,cpp,h", L".txt"); + EXPECT_EQ(expected, actual); +} + +TEST(CDocTypeManager, ConvertTypesExtToDlgExtMerge2) +{ + const std::wstring expected = { L"*.txt;*.cpp;*.h" }; + std::wstring actual = CDocTypeManager::ConvertTypesExtToDlgExt(L"cpp,h,txt", L".txt"); + EXPECT_EQ(expected, actual); +} + TEST(CDocTypeManager, ConvertTypesExtToDlgExtExts64) { const std::wstring expected = { L"*.txt;*.a;*.b;*.c;*.d;*.e;*.f;*.g;*.h;*.i;*.j;*.k;*.l;*.m;*.n;*.o;*.p;*.q;*.r;*.s;*.t;*.u;*.v;*.w;*.x;*.y;*.z;*.1;*.2;*.3;*.4;*.5;*.6" }; From bd776ecd89b3b3e947f9df38a64cb80c397b03f6 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 26 Mar 2021 22:16:22 +0900 Subject: [PATCH 0554/1024] =?UTF-8?q?Rule-of-Zero=E3=82=92=E9=81=A9?= =?UTF-8?q?=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 必要のないデストラクタを実装すべきでない(らしい) 👈 Rule-of-Zero デストラクタを実装するならコピーとムーブのコンストラクタ&演算子を定義して5つセットにする必要があります。 --- sakura_core/CDicMgr.cpp | 5 ----- sakura_core/CDicMgr.h | 1 - 2 files changed, 6 deletions(-) diff --git a/sakura_core/CDicMgr.cpp b/sakura_core/CDicMgr.cpp index 3dd936630e..e8a5ff5b9a 100644 --- a/sakura_core/CDicMgr.cpp +++ b/sakura_core/CDicMgr.cpp @@ -29,11 +29,6 @@ CDicMgr::CDicMgr() return; } -CDicMgr::~CDicMgr() -{ - return; -} - /*! キーワードの検索 最初に見つかったキーワードの意味を返す diff --git a/sakura_core/CDicMgr.h b/sakura_core/CDicMgr.h index 3e3852970f..7f6c7b35d9 100644 --- a/sakura_core/CDicMgr.h +++ b/sakura_core/CDicMgr.h @@ -30,7 +30,6 @@ class CDicMgr || Constructors */ CDicMgr(); - ~CDicMgr(); /* || Attributes & Operations From b0f2665ae39404be9194e85cfa1e65671b22ff76 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sat, 27 Mar 2021 00:59:16 +0900 Subject: [PATCH 0555/1024] =?UTF-8?q?IsFileExists()=E3=81=A8IsDirectory()?= =?UTF-8?q?=E3=81=A7=E3=83=AF=E3=82=A4=E3=83=AB=E3=83=89=E3=82=AB=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=81=8C=E9=80=9A=E9=81=8E=E3=81=99=E3=82=8B=E4=B8=8D?= =?UTF-8?q?=E5=85=B7=E5=90=88=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/file.cpp | 27 +++++++++++++++++++++++++++ sakura_core/util/file.h | 1 + 2 files changed, 28 insertions(+) diff --git a/sakura_core/util/file.cpp b/sakura_core/util/file.cpp index 6da319ae48..33183f2544 100644 --- a/sakura_core/util/file.cpp +++ b/sakura_core/util/file.cpp @@ -613,6 +613,25 @@ LPCWSTR GetRelPath( LPCWSTR pszPath ) return pszFileName; } +//! パスに使えない文字が含まれていないかチェックする +// ファイル名、フォルダ名には「<>*|"?」が使えない +// しかし「\\?\C:\Program files\」の形式では?が3文字目にあるので除外 +// ストリーム名とのセパレータにはfilename.ext:streamの形式でコロンが使われる +// コロンは除外文字に入っていない +bool IsValidPathAvailableChar(const wchar_t* path) +{ + int pos = 0; + if (wcsncmp_literal(path, LR"(\\?\)")) { + pos = 4; + } + for (int i = pos; path[i] != L'\0'; ++i) { + if (!WCODE::IsValidFilenameChar(path[i])) { + return false; + } + } + return true; +} + /** ファイルの存在チェック 指定されたパスのファイルが存在するかどうかを確認する。 @@ -628,6 +647,10 @@ LPCWSTR GetRelPath( LPCWSTR pszPath ) */ bool IsFileExists(const WCHAR* path, bool bFileOnly) { + if (!IsValidPathAvailableChar(path)) { + // ワイルドカード指定を除外 + return false; + } WIN32_FIND_DATA fd; HANDLE hFind = ::FindFirstFile( path, &fd ); if( hFind != INVALID_HANDLE_VALUE ){ @@ -652,6 +675,10 @@ bool IsFileExists(const WCHAR* path, bool bFileOnly) */ bool IsDirectory(LPCWSTR pszPath) { + if (!IsValidPathAvailableChar(pszPath)) { + // ワイルドカード指定を除外 + return false; + } WIN32_FIND_DATA fd; HANDLE hFind = ::FindFirstFile( pszPath, &fd ); if(hFind!=INVALID_HANDLE_VALUE){ diff --git a/sakura_core/util/file.h b/sakura_core/util/file.h index 1b6dbd1ee8..e0a0d3cd19 100644 --- a/sakura_core/util/file.h +++ b/sakura_core/util/file.h @@ -39,6 +39,7 @@ bool IsFileExists(const WCHAR* path, bool bFileOnly = false); bool IsDirectory(LPCWSTR pszPath); // 2009.08.20 ryoji bool IsInvalidFilenameChars( const std::wstring_view& strPath ); +[[nodiscard]] bool IsValidPathAvailableChar(const wchar_t* path); // Apr. 30, 2003 genta // ディレクトリの深さを調べる From 58ceffe786ca774983931fa51a2f08b3fef02ffb Mon Sep 17 00:00:00 2001 From: Ocelot <16898663+Ocelot1210@users.noreply.github.com> Date: Sat, 27 Mar 2021 18:56:07 +0900 Subject: [PATCH 0556/1024] =?UTF-8?q?=E3=83=95=E3=82=A9=E3=83=AB=E3=83=80?= =?UTF-8?q?=E9=81=B8=E6=8A=9E=E3=83=80=E3=82=A4=E3=82=A2=E3=83=AD=E3=82=B0?= =?UTF-8?q?=E3=82=92=20SHBrowseForFolder()=20=E3=81=A7=E3=81=AA=E3=81=8F?= =?UTF-8?q?=20IFileDialog=20=E3=82=92=E4=BD=BF=E7=94=A8=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/shell.cpp | 114 +++++++++++++++++++++---------------- 1 file changed, 66 insertions(+), 48 deletions(-) diff --git a/sakura_core/util/shell.cpp b/sakura_core/util/shell.cpp index e6f1468148..746fdc1964 100644 --- a/sakura_core/util/shell.cpp +++ b/sakura_core/util/shell.cpp @@ -38,63 +38,81 @@ #include "env/CShareData.h" #include "env/DLLSHAREDATA.h" #include "extmodule/CHtmlHelp.h" +#include -int CALLBACK MYBrowseCallbackProc( - HWND hwnd, - UINT uMsg, - LPARAM lParam, - LPARAM lpData -) +/* フォルダ選択ダイアログ */ +BOOL SelectDir(HWND hWnd, const WCHAR* pszTitle, const WCHAR* pszInitFolder, WCHAR* strFolderName) { - switch( uMsg ){ - case BFFM_INITIALIZED: - ::SendMessage( hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)lpData ); - break; - case BFFM_SELCHANGED: - break; + using namespace Microsoft::WRL; + + ComPtr pDialog; + HRESULT hres; + + // インスタンスを作成 + hres = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pDialog)); + if (FAILED(hres)) { + return FALSE; } - return 0; -} -/* フォルダ選択ダイアログ */ -BOOL SelectDir( HWND hWnd, const WCHAR* pszTitle, const WCHAR* pszInitFolder, WCHAR* strFolderName ) -{ - BOOL bRes; - WCHAR szInitFolder[MAX_PATH]; + // デフォルト設定を取得 + DWORD dwOptions = 0; + hres = pDialog->GetOptions(&dwOptions); + if (FAILED(hres)) { + return FALSE; + } - wcscpy( szInitFolder, pszInitFolder ); - /* フォルダの最後が半角かつ'\\'の場合は、取り除く "c:\\"等のルートは取り除かない*/ - CutLastYenFromDirectoryPath( szInitFolder ); + // オプションをフォルダを選択可能に変更 + hres = pDialog->SetOptions(dwOptions | FOS_PICKFOLDERS | FOS_NOCHANGEDIR | FOS_FORCEFILESYSTEM); + if (FAILED(hres)) { + return FALSE; + } - // 2010.08.28 フォルダを開くとフックも含めて色々DLLが読み込まれるので移動 - CCurrentDirectoryBackupPoint dirBack; - ChangeCurrentDirectoryToExeDir(); - // SHBrowseForFolder()関数に渡す構造体 - BROWSEINFO bi; - bi.hwndOwner = hWnd; - bi.pidlRoot = NULL; - bi.pszDisplayName = strFolderName; - bi.lpszTitle = pszTitle; - bi.ulFlags = BIF_RETURNONLYFSDIRS/* | BIF_EDITBOX*//* | BIF_STATUSTEXT*/; - bi.lpfn = MYBrowseCallbackProc; - bi.lParam = (LPARAM)szInitFolder; - bi.iImage = 0; - // アイテムIDリストを返す - // ITEMIDLISTはアイテムの一意を表す構造体 - LPITEMIDLIST pList = ::SHBrowseForFolder(&bi); - if( NULL != pList ){ - // SHGetPathFromIDList()関数はアイテムIDリストの物理パスを探してくれる - bRes = ::SHGetPathFromIDList( pList, strFolderName ); - // :SHBrowseForFolder()で取得したアイテムIDリストを削除 - ::CoTaskMemFree( pList ); - if( bRes ){ - return TRUE; - }else{ - return FALSE; + { + WCHAR szInitFolder[MAX_PATH]; + + wcscpy_s(szInitFolder, _countof(szInitFolder), pszInitFolder); + // フォルダの最後が半角かつ'\\'の場合は、取り除く "c:\\"等のルートは取り除かない + + CutLastYenFromDirectoryPath(szInitFolder); + + // 初期フォルダを設定 + ComPtr psiFolder; + hres = SHCreateItemFromParsingName(szInitFolder, NULL, IID_PPV_ARGS(&psiFolder)); + if (SUCCEEDED(hres)) { + hres = pDialog->SetFolder(psiFolder.Get()); } } - return FALSE; + + // タイトル文字列を設定 + hres = pDialog->SetTitle(pszTitle); + if (FAILED(hres)) { + return FALSE; + } + + // フォルダ選択ダイアログを表示 + hres = pDialog->Show(hWnd); + if (FAILED(hres)) { + return FALSE; + } + + // 選択結果を取得 + ComPtr psiResult; + hres = pDialog->GetResult(&psiResult); + if (FAILED(hres)) { + return FALSE; + } + + PWSTR pszResult; + hres = psiResult->GetDisplayName(SIGDN_FILESYSPATH, &pszResult); + if (FAILED(hres)) { + return FALSE; + } + + wcscpy(strFolderName, pszResult); + CoTaskMemFree(pszResult); + + return TRUE; } /*! 特殊フォルダのパスを取得する From 9609860a5bdb256a7b8f301bab7986dc8c320919 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 27 Mar 2021 13:23:48 +0900 Subject: [PATCH 0557/1024] =?UTF-8?q?=E7=84=A1=E5=8A=B9=E5=8C=96=E3=81=95?= =?UTF-8?q?=E3=82=8C=E3=81=9F=E3=82=B3=E3=83=BC=E3=83=89=E3=82=92=E9=99=A4?= =?UTF-8?q?=E5=8E=BB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/string_ex2.cpp | 62 --------------------------------- 1 file changed, 62 deletions(-) diff --git a/sakura_core/util/string_ex2.cpp b/sakura_core/util/string_ex2.cpp index 152709c90b..18851565ad 100644 --- a/sakura_core/util/string_ex2.cpp +++ b/sakura_core/util/string_ex2.cpp @@ -175,68 +175,6 @@ const wchar_t* GetNextLineW( *pnLineLen = i - nBgn; return &pData[nBgn]; } -#if 0 // 未使用 -/* - 行端子の種類を調べるUnicodeBE版 - @param pszData 調査対象文字列へのポインタ - @param nDataLen 調査対象文字列の長さ(wchar_tの長さ) - @return 改行コードの種類。終端子が見つからなかったときはEOL_NONEを返す。 -*/ -static EEolType GetEOLTypeUniBE( const wchar_t* pszData, int nDataLen ) -{ - /*! 行終端子のデータの配列(UnicodeBE版) 2000.05.30 Moca */ - static const wchar_t* aEolTable[EOL_TYPE_NUM] = { - L"", // EOL_NONE - (const wchar_t*)"\x00\x0d\x00\x0a\x00", // EOL_CRLF - (const wchar_t*)"\x00\x0a\x00", // EOL_LF - (const wchar_t*)"\x00\x0d\x00" // EOL_CR - }; - - /* 改行コードの長さを調べる */ - - for( int i = 1; i < EOL_TYPE_NUM; ++i ){ - CEol cEol((EEolType)i); - if( cEol.GetLen()<=nDataLen && 0==wmemcmp(pszData,aEolTable[i],cEol.GetLen()) ){ - return gm_pnEolTypeArr[i]; - } - } - return EOL_NONE; -} - -/*! - GetNextLineのwchar_t版(ビックエンディアン用) - GetNextLineより作成 - static メンバ関数 -*/ -const wchar_t* GetNextLineWB( - const wchar_t* pData, //!< [in] 検索文字列 - int nDataLen, //!< [in] 検索文字列の文字数 - int* pnLineLen, //!< [out] 1行の文字数を返すただしEOLは含まない - int* pnBgn, //!< [i/o] 検索文字列のオフセット位置 - CEol* pcEol //!< [i/o] EOL -) -{ - int i; - int nBgn; - nBgn = *pnBgn; - - pcEol->SetType( EOL_NONE ); - if( *pnBgn >= nDataLen ){ - return NULL; - } - for( i = *pnBgn; i < nDataLen; ++i ){ - // 改行コードがあった - if( pData[i] == (wchar_t)0x0a00 || pData[i] == (wchar_t)0x0d00 ){ - // 行終端子の種類を調べる - pcEol->SetType( GetEOLTypeUniBE( &pData[i], nDataLen - i ) ); - break; - } - } - *pnBgn = i + pcEol->GetLen(); - *pnLineLen = i - nBgn; - return &pData[nBgn]; -} -#endif //! データを指定「文字数」以内に切り詰める。戻り値は結果の文字数。 int LimitStringLengthW( From 32e6f05649934df521898c44164492d686267b6b Mon Sep 17 00:00:00 2001 From: Ocelot <16898663+Ocelot1210@users.noreply.github.com> Date: Sat, 27 Mar 2021 23:02:29 +0900 Subject: [PATCH 0558/1024] =?UTF-8?q?SonarCloud=E6=8C=87=E6=91=98=E3=81=AE?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgExec.cpp | 2 +- sakura_core/dlg/CDlgGrep.cpp | 2 +- sakura_core/dlg/CDlgPluginOption.cpp | 2 +- sakura_core/dlg/CDlgTagsMake.cpp | 2 +- sakura_core/macro/CMacro.cpp | 2 +- sakura_core/outline/CDlgFileTree.cpp | 2 +- sakura_core/prop/CPropComBackup.cpp | 2 +- sakura_core/prop/CPropComEdit.cpp | 2 +- sakura_core/prop/CPropComHelper.cpp | 2 +- sakura_core/prop/CPropComMacro.cpp | 2 +- sakura_core/util/shell.cpp | 77 ++++++++++++++++------------ sakura_core/util/shell.h | 2 +- 12 files changed, 54 insertions(+), 45 deletions(-) diff --git a/sakura_core/dlg/CDlgExec.cpp b/sakura_core/dlg/CDlgExec.cpp index ecf8be4016..b17c1c491c 100644 --- a/sakura_core/dlg/CDlgExec.cpp +++ b/sakura_core/dlg/CDlgExec.cpp @@ -259,7 +259,7 @@ BOOL CDlgExec::OnBnClicked( int wID ) case IDC_BUTTON_REFERENCE2: { - if( SelectDir( GetHwnd(), LS(STR_DLGEXEC_SELECT_CURDIR), &m_szCurDir[0], &m_szCurDir[0] ) ){ + if( SelectDir( GetHwnd(), LS(STR_DLGEXEC_SELECT_CURDIR), &m_szCurDir[0], &m_szCurDir[0], m_szCurDir.GetBufferCount() ) ){ ::DlgItem_SetText( GetHwnd(), IDC_COMBO_CUR_DIR, &m_szCurDir[0] ); } } diff --git a/sakura_core/dlg/CDlgGrep.cpp b/sakura_core/dlg/CDlgGrep.cpp index f79c088dd6..dddf5f5478 100644 --- a/sakura_core/dlg/CDlgGrep.cpp +++ b/sakura_core/dlg/CDlgGrep.cpp @@ -509,7 +509,7 @@ BOOL CDlgGrep::OnBnClicked( int wID ) if( szFolder[0] == L'\0' ){ ::GetCurrentDirectory( nMaxPath, szFolder ); } - if( SelectDir( GetHwnd(), LS(STR_DLGGREP1), szFolder, szFolder ) ){ + if( SelectDir( GetHwnd(), LS(STR_DLGGREP1), szFolder, szFolder, _countof(szFolder) ) ){ SetGrepFolder( GetItemHwnd(IDC_COMBO_FOLDER), szFolder ); } } diff --git a/sakura_core/dlg/CDlgPluginOption.cpp b/sakura_core/dlg/CDlgPluginOption.cpp index 11e2c79219..42418c4f04 100644 --- a/sakura_core/dlg/CDlgPluginOption.cpp +++ b/sakura_core/dlg/CDlgPluginOption.cpp @@ -730,7 +730,7 @@ void CDlgPluginOption::SelectDirectory( int iLine ) WCHAR sTitle[MAX_LENGTH_VALUE+10]; auto_sprintf( sTitle, LS(STR_DLGPLUGINOPT_SELECT), buf); - if (SelectDir( GetHwnd(), (const WCHAR*)sTitle /*L"ディレクトリの選択"*/, szDir, szDir )) { + if (SelectDir( GetHwnd(), (const WCHAR*)sTitle /*L"ディレクトリの選択"*/, szDir, szDir, _countof(szDir) )) { // 末尾に\マークを追加する. AddLastChar( szDir, _countof(szDir), L'\\' ); ::DlgItem_SetText( GetHwnd(), IDC_EDIT_PLUGIN_OPTION_DIR, szDir ); diff --git a/sakura_core/dlg/CDlgTagsMake.cpp b/sakura_core/dlg/CDlgTagsMake.cpp index 06a7e62d81..40fe075b1e 100644 --- a/sakura_core/dlg/CDlgTagsMake.cpp +++ b/sakura_core/dlg/CDlgTagsMake.cpp @@ -125,7 +125,7 @@ void CDlgTagsMake::SelectFolder( HWND hwndDlg ) /* フォルダ */ ::DlgItem_GetText( hwndDlg, IDC_EDIT_TAG_MAKE_FOLDER, szPath, _MAX_PATH ); - if( SelectDir( hwndDlg, LS(STR_DLGTAGMAK_SELECTDIR), szPath, szPath ) ) + if( SelectDir( hwndDlg, LS(STR_DLGTAGMAK_SELECTDIR), szPath, szPath, _countof(szPath) ) ) { //末尾に\\マークを追加する. ::PathAddBackslashW( szPath ); diff --git a/sakura_core/macro/CMacro.cpp b/sakura_core/macro/CMacro.cpp index 3e822a1f35..bb47eaf95d 100644 --- a/sakura_core/macro/CMacro.cpp +++ b/sakura_core/macro/CMacro.cpp @@ -1939,7 +1939,7 @@ bool CMacro::HandleFunction(CEditView *View, EFunctionCode ID, const VARIANT *Ar } WCHAR szPath[ _MAX_PATH ]; - int nRet = SelectDir( View->GetHwnd(), sMessage.c_str(), sDefault.c_str(), szPath ); + int nRet = SelectDir( View->GetHwnd(), sMessage.c_str(), sDefault.c_str(), szPath, _countof(szPath) ); if( nRet == IDOK ){ SysString S( szPath, wcslen(szPath) ); Wrap( &Result )->Receive( S ); diff --git a/sakura_core/outline/CDlgFileTree.cpp b/sakura_core/outline/CDlgFileTree.cpp index a72a138492..7b0a18c5eb 100644 --- a/sakura_core/outline/CDlgFileTree.cpp +++ b/sakura_core/outline/CDlgFileTree.cpp @@ -537,7 +537,7 @@ BOOL CDlgFileTree::OnBnClicked( int wID ) // RADIO_GREP == folder WCHAR szDir[MAX_PATH]; DlgItem_GetText(GetHwnd(), IDC_EDIT_PATH, szDir, _countof(szDir) ); - if( SelectDir(hwndDlg, LS(STR_DLGGREP1), szDir, szDir) ){ + if( SelectDir(hwndDlg, LS(STR_DLGGREP1), szDir, szDir, _countof(szDir) ) ){ DlgItem_SetText(GetHwnd(), IDC_EDIT_PATH, szDir ); } }else{ diff --git a/sakura_core/prop/CPropComBackup.cpp b/sakura_core/prop/CPropComBackup.cpp index b2a33d2d5d..09529c121c 100644 --- a/sakura_core/prop/CPropComBackup.cpp +++ b/sakura_core/prop/CPropComBackup.cpp @@ -174,7 +174,7 @@ INT_PTR CPropBackup::DispatchEvent( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPAR WCHAR szFolder[_MAX_PATH]; ::DlgItem_GetText( hwndDlg, IDC_EDIT_BACKUPFOLDER, szFolder, _countof( szFolder )); - if( SelectDir( hwndDlg, LS(STR_PROPCOMBK_SEL_FOLDER), szFolder, szFolder ) ){ + if( SelectDir( hwndDlg, LS(STR_PROPCOMBK_SEL_FOLDER), szFolder, szFolder, _countof( szFolder ) ) ){ wcscpy( m_Common.m_sBackup.m_szBackUpFolder, szFolder ); ::DlgItem_SetText( hwndDlg, IDC_EDIT_BACKUPFOLDER, m_Common.m_sBackup.m_szBackUpFolder ); } diff --git a/sakura_core/prop/CPropComEdit.cpp b/sakura_core/prop/CPropComEdit.cpp index c70bea0df4..4693714f55 100644 --- a/sakura_core/prop/CPropComEdit.cpp +++ b/sakura_core/prop/CPropComEdit.cpp @@ -118,7 +118,7 @@ INT_PTR CPropEdit::DispatchEvent( WCHAR szPath[_MAX_PATH]; ::DlgItem_GetText( hwndDlg, IDC_EDIT_FILEOPENDIR, szMetaPath, _countof(szMetaPath) ); CFileNameManager::ExpandMetaToFolder( szMetaPath, szPath, _countof(szPath) ); - if( SelectDir( hwndDlg, LS(STR_PROPEDIT_SELECT_DIR), szPath, szPath ) ){ + if( SelectDir( hwndDlg, LS(STR_PROPEDIT_SELECT_DIR), szPath, szPath, _countof(szPath) ) ){ CNativeW cmem(szPath); cmem.Replace(L"%", L"%%"); ::DlgItem_SetText( hwndDlg, IDC_EDIT_FILEOPENDIR, cmem.GetStringPtr() ); diff --git a/sakura_core/prop/CPropComHelper.cpp b/sakura_core/prop/CPropComHelper.cpp index 9eed90c925..4795daeb79 100644 --- a/sakura_core/prop/CPropComHelper.cpp +++ b/sakura_core/prop/CPropComHelper.cpp @@ -168,7 +168,7 @@ INT_PTR CPropHelper::DispatchEvent( }else{ wcscpy( szPath, m_Common.m_sHelper.m_szMigemoDict ); } - if( SelectDir( hwndDlg, LS(STR_PROPCOMHELP_MIGEMODIR), szPath, szPath ) ){ + if( SelectDir( hwndDlg, LS(STR_PROPCOMHELP_MIGEMODIR), szPath, szPath, _countof(szPath) ) ){ wcscpy( m_Common.m_sHelper.m_szMigemoDict, GetRelPath(szPath) ); // 2015.03.03 可能なら相対パスにする ::DlgItem_SetText( hwndDlg, IDC_EDIT_MIGEMO_DICT, m_Common.m_sHelper.m_szMigemoDict ); } diff --git a/sakura_core/prop/CPropComMacro.cpp b/sakura_core/prop/CPropComMacro.cpp index ecb1828c49..13a3136cb7 100644 --- a/sakura_core/prop/CPropComMacro.cpp +++ b/sakura_core/prop/CPropComMacro.cpp @@ -581,7 +581,7 @@ void CPropMacro::SelectBaseDir_Macro( HWND hwndDlg ) GetInidirOrExedir( szDir, folder ); } - if( SelectDir( hwndDlg, LS(STR_PROPCOMMACR_SEL_DIR), szDir, szDir ) ){ + if( SelectDir( hwndDlg, LS(STR_PROPCOMMACR_SEL_DIR), szDir, szDir, _countof(szDir) ) ){ // 末尾に\\マークを追加する. AddLastChar( szDir, _countof(szDir), L'\\' ); ::DlgItem_SetText( hwndDlg, IDC_MACRODIR, GetRelPath(szDir) ); // 2015.03.03 可能なら相対パスにする diff --git a/sakura_core/util/shell.cpp b/sakura_core/util/shell.cpp index 746fdc1964..c4d0d7007a 100644 --- a/sakura_core/util/shell.cpp +++ b/sakura_core/util/shell.cpp @@ -40,77 +40,86 @@ #include "extmodule/CHtmlHelp.h" #include + +/*! + @brief IFileDialog の初期フォルダを設定する + + @param [in] pDialog 設定対象のダイアログ + @param [in] pszInitFolder 初期フォルダに設定したいパス +*/ +static void SetInitialDir( Microsoft::WRL::ComPtr pDialog, const WCHAR* pszInitFolder ) +{ + + WCHAR szInitFolder[MAX_PATH]; + wcscpy_s( szInitFolder, _countof(szInitFolder), pszInitFolder ); + + // フォルダの最後が半角かつ'\\'の場合は、取り除く "c:\\"等のルートは取り除かない + CutLastYenFromDirectoryPath( szInitFolder ); + + // 初期フォルダを設定 + Microsoft::WRL::ComPtr psiFolder; + HRESULT hres = SHCreateItemFromParsingName( szInitFolder, nullptr, IID_PPV_ARGS(&psiFolder) ); + if ( SUCCEEDED(hres) ) { + pDialog->SetFolder( psiFolder.Get() ); + } +} + /* フォルダ選択ダイアログ */ -BOOL SelectDir(HWND hWnd, const WCHAR* pszTitle, const WCHAR* pszInitFolder, WCHAR* strFolderName) +BOOL SelectDir( HWND hWnd, const WCHAR* pszTitle, const WCHAR* pszInitFolder, WCHAR* strFolderName, size_t nMaxCount ) { using namespace Microsoft::WRL; - ComPtr pDialog; HRESULT hres; // インスタンスを作成 - hres = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pDialog)); - if (FAILED(hres)) { + hres = CoCreateInstance( CLSID_FileOpenDialog, nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pDialog) ); + if ( FAILED(hres) ) { return FALSE; } // デフォルト設定を取得 DWORD dwOptions = 0; - hres = pDialog->GetOptions(&dwOptions); - if (FAILED(hres)) { + hres = pDialog->GetOptions( &dwOptions ); + if ( FAILED(hres) ) { return FALSE; } // オプションをフォルダを選択可能に変更 - hres = pDialog->SetOptions(dwOptions | FOS_PICKFOLDERS | FOS_NOCHANGEDIR | FOS_FORCEFILESYSTEM); - if (FAILED(hres)) { + hres = pDialog->SetOptions( dwOptions | FOS_PICKFOLDERS | FOS_NOCHANGEDIR | FOS_FORCEFILESYSTEM ); + if ( FAILED(hres) ) { return FALSE; } - - { - WCHAR szInitFolder[MAX_PATH]; - - wcscpy_s(szInitFolder, _countof(szInitFolder), pszInitFolder); - // フォルダの最後が半角かつ'\\'の場合は、取り除く "c:\\"等のルートは取り除かない - - CutLastYenFromDirectoryPath(szInitFolder); - - // 初期フォルダを設定 - ComPtr psiFolder; - hres = SHCreateItemFromParsingName(szInitFolder, NULL, IID_PPV_ARGS(&psiFolder)); - if (SUCCEEDED(hres)) { - hres = pDialog->SetFolder(psiFolder.Get()); - } - } + // 初期フォルダを設定 + SetInitialDir( pDialog, pszInitFolder ); // タイトル文字列を設定 - hres = pDialog->SetTitle(pszTitle); - if (FAILED(hres)) { + hres = pDialog->SetTitle( pszTitle ); + if ( FAILED(hres) ) { return FALSE; } // フォルダ選択ダイアログを表示 - hres = pDialog->Show(hWnd); - if (FAILED(hres)) { + hres = pDialog->Show( hWnd ); + if ( FAILED(hres) ) { return FALSE; } // 選択結果を取得 ComPtr psiResult; - hres = pDialog->GetResult(&psiResult); - if (FAILED(hres)) { + hres = pDialog->GetResult( &psiResult ); + if ( FAILED(hres) ) { return FALSE; } PWSTR pszResult; - hres = psiResult->GetDisplayName(SIGDN_FILESYSPATH, &pszResult); - if (FAILED(hres)) { + hres = psiResult->GetDisplayName( SIGDN_FILESYSPATH, &pszResult ); + if ( FAILED(hres) ) { return FALSE; } - wcscpy(strFolderName, pszResult); - CoTaskMemFree(pszResult); + wcscpy_s( strFolderName, nMaxCount, pszResult ); + CoTaskMemFree( pszResult ); return TRUE; } diff --git a/sakura_core/util/shell.h b/sakura_core/util/shell.h index 1a496e6b59..9a407d5a3c 100644 --- a/sakura_core/util/shell.h +++ b/sakura_core/util/shell.h @@ -32,7 +32,7 @@ BOOL MyWinHelp(HWND hwndCaller, UINT uCommand, DWORD_PTR dwData); /* WinHelp のかわりに HtmlHelp を呼び出す */ // 2006.07.22 ryoji /* Shell Interface系(?) */ -BOOL SelectDir(HWND hWnd, const WCHAR* pszTitle, const WCHAR* pszInitFolder, WCHAR* strFolderName ); /* フォルダ選択ダイアログ */ +BOOL SelectDir(HWND hWnd, const WCHAR* pszTitle, const WCHAR* pszInitFolder, WCHAR* strFolderName, size_t nMaxCount ); /* フォルダ選択ダイアログ */ BOOL ResolveShortcutLink(HWND hwnd, LPCWSTR lpszLinkFile, LPWSTR lpszPath);/* ショートカット(.lnk)の解決 */ HWND OpenHtmlHelp( HWND hWnd, LPCWSTR szFile, UINT uCmd, DWORD_PTR data,bool msgflag = true); From a2f31dd822e4238545849afcfa7bbbd63e81b9c7 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sun, 28 Mar 2021 01:33:40 +0900 Subject: [PATCH 0559/1024] =?UTF-8?q?=E6=8C=87=E6=91=98=E8=A6=B3=E7=82=B9?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C/IsValidPathAvailableChar=E3=82=92wstring=5Fv?= =?UTF-8?q?iew=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ・IsValidPathAvailableCharの単体テストを追加 --- sakura_core/util/file.cpp | 16 ++++++++---- sakura_core/util/file.h | 2 +- tests/unittests/test-file.cpp | 47 +++++++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 6 deletions(-) diff --git a/sakura_core/util/file.cpp b/sakura_core/util/file.cpp index 33183f2544..568dbba7b9 100644 --- a/sakura_core/util/file.cpp +++ b/sakura_core/util/file.cpp @@ -618,13 +618,19 @@ LPCWSTR GetRelPath( LPCWSTR pszPath ) // しかし「\\?\C:\Program files\」の形式では?が3文字目にあるので除外 // ストリーム名とのセパレータにはfilename.ext:streamの形式でコロンが使われる // コロンは除外文字に入っていない -bool IsValidPathAvailableChar(const wchar_t* path) +bool IsValidPathAvailableChar(std::wstring_view path) { - int pos = 0; - if (wcsncmp_literal(path, LR"(\\?\)")) { - pos = 4; + if (path.empty()) { + // 空文字列セーフ + return true; + } + constexpr auto& dos_device_path = LR"(\\?\)"; + constexpr size_t len = _countof(dos_device_path) - 1; + size_t pos = 0; + if (wcsncmp(path.data(), dos_device_path, len) == 0) { + pos = len; } - for (int i = pos; path[i] != L'\0'; ++i) { + for (size_t i = pos; i < path.size(); ++i) { if (!WCODE::IsValidFilenameChar(path[i])) { return false; } diff --git a/sakura_core/util/file.h b/sakura_core/util/file.h index e0a0d3cd19..adbefb4285 100644 --- a/sakura_core/util/file.h +++ b/sakura_core/util/file.h @@ -39,7 +39,7 @@ bool IsFileExists(const WCHAR* path, bool bFileOnly = false); bool IsDirectory(LPCWSTR pszPath); // 2009.08.20 ryoji bool IsInvalidFilenameChars( const std::wstring_view& strPath ); -[[nodiscard]] bool IsValidPathAvailableChar(const wchar_t* path); +[[nodiscard]] bool IsValidPathAvailableChar(std::wstring_view path); // Apr. 30, 2003 genta // ディレクトリの深さを調べる diff --git a/tests/unittests/test-file.cpp b/tests/unittests/test-file.cpp index 1cabf614f6..45392e400c 100644 --- a/tests/unittests/test-file.cpp +++ b/tests/unittests/test-file.cpp @@ -71,6 +71,53 @@ TEST( file, IsInvalidFilenameChars ) EXPECT_TRUE(IsInvalidFilenameChars(L"test|.txt")); } +TEST(file, IsValidPathAvailableChar) +{ + EXPECT_TRUE(IsValidPathAvailableChar(L"test.txt")); + EXPECT_TRUE(IsValidPathAvailableChar(L".\\test.txt")); + EXPECT_TRUE(IsValidPathAvailableChar(L"./test.txt")); + EXPECT_TRUE(IsValidPathAvailableChar(L"C:\\test.txt")); + EXPECT_TRUE(IsValidPathAvailableChar(L"C:/test.txt")); + EXPECT_TRUE(IsValidPathAvailableChar(L"C:\\")); + EXPECT_TRUE(IsValidPathAvailableChar(L"C:/")); + EXPECT_TRUE(IsValidPathAvailableChar(L"C:\\dir\\test.txt")); + EXPECT_TRUE(IsValidPathAvailableChar(L"C:\\dir\\dir2\\test.txt")); + EXPECT_TRUE(IsValidPathAvailableChar(L"C:dir\\dir2\\test.txt")); + + EXPECT_TRUE(IsValidPathAvailableChar(L"test:001.txt")); + EXPECT_TRUE(IsValidPathAvailableChar(L"\\dir\\dir2\\test:001.txt")); + + // 特別考慮:DOSデバイスパスの?はtrue + EXPECT_TRUE(IsValidPathAvailableChar(L"\\\\?\\C:\\test.txt")); + + EXPECT_FALSE(IsValidPathAvailableChar(L"test*.txt")); + EXPECT_FALSE(IsValidPathAvailableChar(L"test?.txt")); + EXPECT_FALSE(IsValidPathAvailableChar(L"test\".txt")); + EXPECT_FALSE(IsValidPathAvailableChar(L"test<.txt")); + EXPECT_FALSE(IsValidPathAvailableChar(L"test>.txt")); + EXPECT_FALSE(IsValidPathAvailableChar(L"test|.txt")); + + EXPECT_FALSE(IsValidPathAvailableChar(L"C:\\dir\\test*.txt")); + EXPECT_FALSE(IsValidPathAvailableChar(L"C:\\dir\\test?.txt")); + + EXPECT_FALSE(IsValidPathAvailableChar(L"C:\\dir*\\text.txt")); + EXPECT_FALSE(IsValidPathAvailableChar(L"C:\\dir?\\text.txt")); + EXPECT_FALSE(IsValidPathAvailableChar(L"C:\\dir\"\\text.txt")); + EXPECT_FALSE(IsValidPathAvailableChar(L"C:\\dir<\\text.txt")); + EXPECT_FALSE(IsValidPathAvailableChar(L"C:\\dir>\\text.txt")); + EXPECT_FALSE(IsValidPathAvailableChar(L"C:\\dir|\\text.txt")); + + EXPECT_FALSE(IsValidPathAvailableChar(L"C:\\*dir\\text.txt")); + EXPECT_FALSE(IsValidPathAvailableChar(L"C:\\?dir\\text.txt")); + EXPECT_FALSE(IsValidPathAvailableChar(L"C:\\di*r\\text.txt")); + + + EXPECT_FALSE(IsValidPathAvailableChar(L"\\\\?\\C:\\test?.txt")); + EXPECT_FALSE(IsValidPathAvailableChar(L"\\\\?\\C:\\test*.txt")); + EXPECT_FALSE(IsValidPathAvailableChar(L"\\\\?\\C:\\d*ir\\test.txt")); + EXPECT_FALSE(IsValidPathAvailableChar(L"\\\\?\\C:\\dir*\\test.txt")); +} + /*! * @brief exeファイルパスの取得 */ From 46f3d072f39ad077d2c9932674688930388652b5 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 27 Mar 2021 14:05:45 +0900 Subject: [PATCH 0560/1024] =?UTF-8?q?CEol=E3=81=AE=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CEol.h | 3 +- tests/unittests/test-ceol.cpp | 151 +++++++++++++++++++++++++ tests/unittests/tests1.vcxproj | 1 + tests/unittests/tests1.vcxproj.filters | 4 +- 4 files changed, 156 insertions(+), 3 deletions(-) create mode 100644 tests/unittests/test-ceol.cpp diff --git a/sakura_core/CEol.h b/sakura_core/CEol.h index 88719edb30..abfa1cffc7 100644 --- a/sakura_core/CEol.h +++ b/sakura_core/CEol.h @@ -35,6 +35,7 @@ #pragma once #include "_main/global.h" +#include "basis/SakuraBasis.h" // 2002/09/22 Moca EOL_CRLF_UNICODEを廃止 /* 行終端子の種類 */ @@ -66,8 +67,6 @@ extern const SEolDefinition g_aEolTable[]; /* 行終端子の配列 */ extern const EEolType gm_pnEolTypeArr[EOL_TYPE_NUM]; -#include "basis/SakuraBasis.h" - /*! @brief 行末の改行コードを管理 diff --git a/tests/unittests/test-ceol.cpp b/tests/unittests/test-ceol.cpp new file mode 100644 index 0000000000..d4807be7f3 --- /dev/null +++ b/tests/unittests/test-ceol.cpp @@ -0,0 +1,151 @@ +/* + Copyright (C) 2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ + +#include +#include "CEol.h" + +/*! + CEolのテスト + */ +TEST(CEol, CEol) +{ + // 初期値は none + CEol cEol; + EXPECT_EQ(EOL_NONE, cEol.GetType()); + EXPECT_EQ(EOL_NONE, (EEolType)cEol); + + // 代入したら変更できる + cEol = EEolType::EOL_LF; + EXPECT_EQ(EEolType::EOL_LF, cEol.GetType()); + + // コピーの確認 + CEol cCopied = cEol; + EXPECT_EQ(cEol.GetType(), cCopied.GetType()); + + // EEolTypeは変な値でも格納できる + EEolType eBadValue = static_cast(100); + EXPECT_EQ(100, static_cast(eBadValue)); + + // CEolは変な値を格納できない(入れようとした場合CRLFになる) + cEol = eBadValue; + EXPECT_EQ(EEolType::EOL_CRLF, cEol.GetType()); +} + +/*! + CEolのテスト + */ +TEST(CEol, typeNone) +{ + CEol cEol(EOL_NONE); + + EXPECT_EQ(EOL_NONE, cEol.GetType()); + EXPECT_EQ(0, cEol.GetLen()); + EXPECT_STREQ(L"改行無", cEol.GetName()); + EXPECT_STREQ(L"", cEol.GetValue2()); + EXPECT_FALSE(cEol.IsValid()); +} + +/*! + CEolのテスト + */ +TEST(CEol, typeCrlf) +{ + CEol cEol(EOL_CRLF); + + EXPECT_EQ(EOL_CRLF, cEol.GetType()); + EXPECT_EQ(2, cEol.GetLen()); + EXPECT_STREQ(L"CRLF", cEol.GetName()); + EXPECT_STREQ(L"\r\n", cEol.GetValue2()); + EXPECT_TRUE(cEol.IsValid()); +} + +/*! + CEolのテスト + */ +TEST(CEol, typeLf) +{ + CEol cEol(EOL_LF); + + EXPECT_EQ(EOL_LF, cEol.GetType()); + EXPECT_EQ(1, cEol.GetLen()); + EXPECT_STREQ(L"LF", cEol.GetName()); + EXPECT_STREQ(L"\n", cEol.GetValue2()); + EXPECT_TRUE(cEol.IsValid()); +} + +/*! + CEolのテスト + */ +TEST(CEol, typeCr) +{ + CEol cEol(EOL_CR); + + EXPECT_EQ(EOL_CR, cEol.GetType()); + EXPECT_EQ(1, cEol.GetLen()); + EXPECT_STREQ(L"CR", cEol.GetName()); + EXPECT_STREQ(L"\r", cEol.GetValue2()); + EXPECT_TRUE(cEol.IsValid()); +} + +/*! + CEolのテスト + */ +TEST(CEol, typeNel) +{ + CEol cEol(EOL_NEL); + + EXPECT_EQ(EOL_NEL, cEol.GetType()); + EXPECT_EQ(1, cEol.GetLen()); + EXPECT_STREQ(L"NEL", cEol.GetName()); + EXPECT_STREQ(L"\x85", cEol.GetValue2()); + EXPECT_TRUE(cEol.IsValid()); +} + +/*! + CEolのテスト + */ +TEST(CEol, typeLs) +{ + CEol cEol(EOL_LS); + + EXPECT_EQ(EOL_LS, cEol.GetType()); + EXPECT_EQ(1, cEol.GetLen()); + EXPECT_STREQ(L"LS", cEol.GetName()); + EXPECT_STREQ(L"\u2028", cEol.GetValue2()); + EXPECT_TRUE(cEol.IsValid()); +} + +/*! + CEolのテスト + */ +TEST(CEol, typePs) +{ + CEol cEol(EOL_PS); + + EXPECT_EQ(EOL_PS, cEol.GetType()); + EXPECT_EQ(1, cEol.GetLen()); + EXPECT_STREQ(L"PS", cEol.GetName()); + EXPECT_STREQ(L"\u2029", cEol.GetValue2()); + EXPECT_TRUE(cEol.IsValid()); +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index 3c3fc818d9..3b75376cc6 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -114,6 +114,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index 931d2a1aa2..1a67573ea1 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -91,7 +91,6 @@ Test Files - Test Files @@ -131,6 +130,9 @@ Test Files + + Test Files + From 90537261a25a8ae04106989bccf3fb82c1f2ddc2 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 27 Mar 2021 14:15:51 +0900 Subject: [PATCH 0561/1024] =?UTF-8?q?CEol=E3=81=ABRule-of-Zero=E3=82=92?= =?UTF-8?q?=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 単体テストでカバーした範囲なので、あるべき姿にリファクタリングしてしまう。 --- sakura_core/CEol.cpp | 29 ++++++++++++-------- sakura_core/CEol.h | 65 ++++++++++++++++++++++++++------------------ 2 files changed, 57 insertions(+), 37 deletions(-) diff --git a/sakura_core/CEol.cpp b/sakura_core/CEol.cpp index adc3a895d5..858e082cb5 100644 --- a/sakura_core/CEol.cpp +++ b/sakura_core/CEol.cpp @@ -122,15 +122,21 @@ EEolType _GetEOLType_unibe( const char* pszData, int nDataLen ) //----------------------------------------------- //! 現在のEOLの名称取得 -const WCHAR* CEol::GetName() const +[[nodiscard]] LPCWSTR CEol::GetName() const noexcept { - return g_aEolTable[ m_eEolType ].m_szName; + return g_aEolTable[static_cast(m_eEolType)].m_szName; } -//!< 現在のEOL文字列先頭へのポインタを取得 -const wchar_t* CEol::GetValue2() const +//! 現在のEOL文字列先頭へのポインタを取得 +[[nodiscard]] LPCWSTR CEol::GetValue2() const noexcept { - return g_aEolTable[ m_eEolType ].m_szDataW; + return g_aEolTable[static_cast(m_eEolType)].m_szDataW; +} + +//! 現在のEOL文字列長を取得。文字単位。 +[[nodiscard]] CLogicInt CEol::GetLen() const noexcept +{ + return CLogicInt(g_aEolTable[static_cast(m_eEolType)].m_nLen); } /*! @@ -139,16 +145,17 @@ const wchar_t* CEol::GetValue2() const @retval true 正常終了。設定が反映された。 @retval false 異常終了。強制的にCRLFに設定。 */ -bool CEol::SetType( EEolType t ) +constexpr bool CEol::SetType( EEolType t ) noexcept { - if( t < EOL_NONE || EOL_CODEMAX <= t ){ - // 異常値 + if( t == EOL_NONE || IsValid( t ) ){ + // 正しい値 + m_eEolType = t; + return true; + }else{ + // 異常値 m_eEolType = EOL_CRLF; return false; } - // 正しい値 - m_eEolType = t; - return true; } void CEol::SetTypeByString( const wchar_t* pszData, int nDataLen ) diff --git a/sakura_core/CEol.h b/sakura_core/CEol.h index abfa1cffc7..8d27f6c73e 100644 --- a/sakura_core/CEol.h +++ b/sakura_core/CEol.h @@ -74,24 +74,51 @@ extern const EEolType gm_pnEolTypeArr[EOL_TYPE_NUM]; オブジェクトに対するメソッドで行えるだけだが、グローバル変数への参照を クラス内部に閉じこめることができるのでそれなりに意味はあると思う。 */ -class CEol{ +class CEol { + EEolType m_eEolType = EOL_NONE; //!< 改行コードの種類 + public: - //コンストラクタ・デストラクタ - CEol(){ m_eEolType = EOL_NONE; } - CEol( EEolType t ){ SetType(t); } + static constexpr bool IsNone( EEolType t ) noexcept + { + return t == EOL_NONE; + } + static constexpr bool IsValid( EEolType t ) noexcept + { + return EEolType::none < t && t < EOL_CODEMAX; + } + static constexpr bool IsNoneOrValid( EEolType t ) noexcept + { + return IsNone( t ) || IsValid( t ); + } - //比較 - bool operator==( EEolType t ) const { return GetType() == t; } - bool operator!=( EEolType t ) const { return GetType() != t; } + constexpr CEol( EEolType t ) noexcept + { + SetType( t ); + } + CEol() noexcept = default; + + //取得 + [[nodiscard]] bool IsNone() const noexcept { return IsNone( m_eEolType ); } //!< 行終端子がないかどうか + [[nodiscard]] bool IsValid() const noexcept { return !IsNone(); } //!< 行終端子があるかどうか + [[nodiscard]] constexpr EEolType GetType() const noexcept { return m_eEolType; } //!< 現在のTypeを取得 + [[nodiscard]] LPCWSTR GetName() const noexcept; //!< 現在のEOLの名称取得 + [[nodiscard]] LPCWSTR GetValue2() const noexcept; //!< 現在のEOL文字列先頭へのポインタを取得 + [[nodiscard]] CLogicInt GetLen() const noexcept; //!< 現在のEOL長を取得。文字単位。 - //代入 - const CEol& operator=( const CEol& t ){ m_eEolType = t.m_eEolType; return *this; } + //比較 + [[nodiscard]] constexpr bool operator == ( EEolType t ) const noexcept { return GetType() == t; } + [[nodiscard]] constexpr bool operator != ( EEolType t ) const noexcept { return !operator == ( t ); } //型変換 - operator EEolType() const { return GetType(); } + [[nodiscard]] constexpr operator EEolType() const { return GetType(); } //設定 - bool SetType( EEolType t); // Typeの設定 + constexpr bool SetType( EEolType t ) noexcept; + + //代入演算子 + CEol& operator = ( EEolType t ) noexcept { SetType( t ); return *this; } + + //文字列内の行終端子を解析 void SetTypeByString( const wchar_t* pszData, int nDataLen ); void SetTypeByString( const char* pszData, int nDataLen ); @@ -99,20 +126,6 @@ class CEol{ void SetTypeByStringForFile( const char* pszData, int nDataLen ){ SetTypeByString( pszData, nDataLen ); } void SetTypeByStringForFile_uni( const char* pszData, int nDataLen ); void SetTypeByStringForFile_unibe( const char* pszData, int nDataLen ); - - //取得 - EEolType GetType() const{ return m_eEolType; } //!< 現在のTypeを取得 - CLogicInt GetLen() const { return CLogicInt(g_aEolTable[ m_eEolType ].m_nLen); } //!< 現在のEOL長を取得。文字単位。 - const WCHAR* GetName() const; //!< 現在のEOLの名称取得 - const wchar_t* GetValue2() const; //!< 現在のEOL文字列先頭へのポインタを取得 - //##### - - bool IsValid() const - { - return m_eEolType>=EOL_CRLF && m_eEolType Date: Sat, 27 Mar 2021 14:53:13 +0900 Subject: [PATCH 0562/1024] =?UTF-8?q?EEolType=E3=81=AE=E5=AE=9A=E6=95=B0?= =?UTF-8?q?=E3=82=92=E3=83=AA=E3=83=8D=E3=83=BC=E3=83=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CCodeChecker.cpp | 4 +- sakura_core/CEol.cpp | 26 +++++----- sakura_core/CEol.h | 39 ++++++++------ sakura_core/CSearchAgent.cpp | 2 +- sakura_core/charset/CCodeBase.cpp | 14 ++--- sakura_core/charset/CUnicode.cpp | 14 ++--- sakura_core/charset/CUnicodeBe.cpp | 14 ++--- sakura_core/charset/CUtf7.cpp | 14 ++--- sakura_core/charset/CUtf8.cpp | 14 ++--- sakura_core/cmd/CViewCommander.cpp | 8 +-- sakura_core/cmd/CViewCommander.h | 2 +- sakura_core/cmd/CViewCommander_Cursor.cpp | 12 ++--- sakura_core/cmd/CViewCommander_Edit.cpp | 4 +- .../cmd/CViewCommander_Edit_advanced.cpp | 8 +-- .../cmd/CViewCommander_Edit_word_line.cpp | 8 +-- sakura_core/cmd/CViewCommander_File.cpp | 6 +-- sakura_core/cmd/CViewCommander_ModeChange.cpp | 2 +- sakura_core/cmd/CViewCommander_Search.cpp | 2 +- sakura_core/convert/CDecode_UuDecode.cpp | 2 +- .../dlg/CDlgOpenFile_CommonFileDialog.cpp | 8 +-- .../dlg/CDlgOpenFile_CommonItemDialog.cpp | 8 +-- sakura_core/doc/CDocEditor.cpp | 6 +-- sakura_core/doc/CDocFileOperation.cpp | 8 +-- sakura_core/doc/CDocFileOperation.h | 2 +- sakura_core/doc/CDocListener.h | 2 +- sakura_core/doc/CDocVisitor.cpp | 2 +- sakura_core/doc/layout/CLayoutMgr.cpp | 10 ++-- sakura_core/doc/logic/CDocLine.cpp | 2 +- sakura_core/func/Funccode.cpp | 6 +-- sakura_core/io/CFileLoad.cpp | 18 +++---- sakura_core/macro/CMacro.cpp | 52 +++++++++---------- sakura_core/typeprop/CPropTypesWindow.cpp | 12 ++--- sakura_core/types/CType.cpp | 2 +- sakura_core/util/string_ex2.cpp | 4 +- sakura_core/view/CCaret.cpp | 6 +-- sakura_core/view/CEditView.cpp | 12 ++--- sakura_core/view/CEditView.h | 2 +- sakura_core/view/CEditView_Command.cpp | 4 +- sakura_core/view/CEditView_Command_New.cpp | 6 +-- sakura_core/view/CEditView_Diff.cpp | 2 +- sakura_core/view/CViewSelect.cpp | 2 +- sakura_core/view/figures/CFigure_Eol.cpp | 12 ++--- sakura_core/window/CEditWnd.cpp | 14 ++--- tests/unittests/test-ceol.cpp | 38 +++++++------- 44 files changed, 222 insertions(+), 213 deletions(-) diff --git a/sakura_core/CCodeChecker.cpp b/sakura_core/CCodeChecker.cpp index 844650b0a6..c6ad493ca8 100644 --- a/sakura_core/CCodeChecker.cpp +++ b/sakura_core/CCodeChecker.cpp @@ -42,7 +42,7 @@ static bool _CheckSavingEolcode(const CDocLineMgr& pcDocLineMgr, CEol cEolType) { bool bMix = false; - if( cEolType == EOL_NONE ){ //改行コード変換なし + if( cEolType == EEolType::none ){ //改行コード変換なし CEol cEolCheck; //比較対象EOL const CDocLine* pcDocLine = pcDocLineMgr.GetDocLineTop(); if( pcDocLine ){ @@ -50,7 +50,7 @@ static bool _CheckSavingEolcode(const CDocLineMgr& pcDocLineMgr, CEol cEolType) } while( pcDocLine ){ CEol cEol = pcDocLine->GetEol(); - if( cEol != cEolCheck && cEol != EOL_NONE ){ + if( cEol != cEolCheck && cEol != EEolType::none ){ bMix = true; break; } diff --git a/sakura_core/CEol.cpp b/sakura_core/CEol.cpp index 858e082cb5..5a173d825d 100644 --- a/sakura_core/CEol.cpp +++ b/sakura_core/CEol.cpp @@ -34,13 +34,13 @@ /*! 行終端子の配列 */ const EEolType gm_pnEolTypeArr[EOL_TYPE_NUM] = { - EOL_NONE , // == 0 - EOL_CRLF , // == 2 - EOL_LF , // == 1 - EOL_CR , // == 1 - EOL_NEL , // == 1 - EOL_LS , // == 1 - EOL_PS // == 1 + EEolType::none , // == 0 + EEolType::cr_and_lf , // == 2 + EEolType::line_feed , // == 1 + EEolType::carriage_return , // == 1 + EEolType::next_line , // == 1 + EEolType::line_separator , // == 1 + EEolType::paragraph_separator // == 1 }; //----------------------------------------------- @@ -83,7 +83,7 @@ static const SEolDefinitionForUniFile g_aEolTable_uni_file[] = { 行終端子の種類を調べる。 @param pszData 調査対象文字列へのポインタ @param nDataLen 調査対象文字列の長さ - @return 改行コードの種類。終端子が見つからなかったときはEOL_NONEを返す。 + @return 改行コードの種類。終端子が見つからなかったときはEEolType::noneを返す。 */ template EEolType GetEOLType( const T* pszData, int nDataLen ) @@ -92,7 +92,7 @@ EEolType GetEOLType( const T* pszData, int nDataLen ) if( g_aEolTable[i].StartsWith(pszData, nDataLen) ) return gm_pnEolTypeArr[i]; } - return EOL_NONE; + return EEolType::none; } /* @@ -105,7 +105,7 @@ EEolType _GetEOLType_uni( const char* pszData, int nDataLen ) if( g_aEolTable_uni_file[i].StartsWithW(pszData, nDataLen) ) return gm_pnEolTypeArr[i]; } - return EOL_NONE; + return EEolType::none; } EEolType _GetEOLType_unibe( const char* pszData, int nDataLen ) @@ -114,7 +114,7 @@ EEolType _GetEOLType_unibe( const char* pszData, int nDataLen ) if( g_aEolTable_uni_file[i].StartsWithWB(pszData, nDataLen) ) return gm_pnEolTypeArr[i]; } - return EOL_NONE; + return EEolType::none; } //----------------------------------------------- @@ -147,13 +147,13 @@ EEolType _GetEOLType_unibe( const char* pszData, int nDataLen ) */ constexpr bool CEol::SetType( EEolType t ) noexcept { - if( t == EOL_NONE || IsValid( t ) ){ + if( t == EEolType::none || IsValid( t ) ){ // 正しい値 m_eEolType = t; return true; }else{ // 異常値 - m_eEolType = EOL_CRLF; + m_eEolType = EEolType::cr_and_lf; return false; } } diff --git a/sakura_core/CEol.h b/sakura_core/CEol.h index 8d27f6c73e..e16c4241f6 100644 --- a/sakura_core/CEol.h +++ b/sakura_core/CEol.h @@ -37,18 +37,27 @@ #include "_main/global.h" #include "basis/SakuraBasis.h" -// 2002/09/22 Moca EOL_CRLF_UNICODEを廃止 -/* 行終端子の種類 */ +/*! + 行終端子の種類 + + 行末記号の種類を定義する。 + 0より大きい値は、終端の種類に対応する。 + ファイル末尾の行では「終端がない状態」があり得る。 + ドキュメントの行末スタイルに合わせて自動付与を行うための値も定義しておく。 + + @date 2002/09/22 Moca EOL_CRLF_UNICODEを廃止 + @date 2021/03/27 berryzplus 定数に意味のある名前を付ける + */ enum EEolType : char { - EOL_NONE, //!< - EOL_CRLF, //!< 0d0a - EOL_LF, //!< 0a - EOL_CR, //!< 0d - EOL_NEL, //!< 85 - EOL_LS, //!< 2028 - EOL_PS, //!< 2029 - EOL_CODEMAX, // - EOL_UNKNOWN = -1 // + none, //!< 行終端子なし + cr_and_lf, //!< \x0d\x0a 復帰改行 + line_feed, //!< \x0a 改行 + carriage_return, //!< \x0d 復帰 + next_line, //!< \u0085 NEL + line_separator, //!< \u2028 LS + paragraph_separator, //!< \u2029 PS + code_max, //!< 範囲外検出用のマーカー(行終端子として使用しないこと) + auto_detect = -1 //!< 行終端子の自動検出 }; struct SEolDefinition{ @@ -62,7 +71,7 @@ struct SEolDefinition{ }; extern const SEolDefinition g_aEolTable[]; -#define EOL_TYPE_NUM EOL_CODEMAX // 8 +#define EOL_TYPE_NUM EEolType::code_max // 8 /* 行終端子の配列 */ extern const EEolType gm_pnEolTypeArr[EOL_TYPE_NUM]; @@ -75,16 +84,16 @@ extern const EEolType gm_pnEolTypeArr[EOL_TYPE_NUM]; クラス内部に閉じこめることができるのでそれなりに意味はあると思う。 */ class CEol { - EEolType m_eEolType = EOL_NONE; //!< 改行コードの種類 + EEolType m_eEolType = EEolType::none; //!< 改行コードの種類 public: static constexpr bool IsNone( EEolType t ) noexcept { - return t == EOL_NONE; + return t == EEolType::none; } static constexpr bool IsValid( EEolType t ) noexcept { - return EEolType::none < t && t < EOL_CODEMAX; + return EEolType::none < t && t < EEolType::code_max; } static constexpr bool IsNoneOrValid( EEolType t ) noexcept { diff --git a/sakura_core/CSearchAgent.cpp b/sakura_core/CSearchAgent.cpp index 26d27a3401..6588b106e3 100644 --- a/sakura_core/CSearchAgent.cpp +++ b/sakura_core/CSearchAgent.cpp @@ -871,7 +871,7 @@ void CSearchAgent::ReplaceData( DocLineReplaceArg* pArg ) goto prev_line; } /* 改行も削除するんかぃのぉ・・・? */ - if( EOL_NONE != pCDocLine->GetEol() && + if( EEolType::none != pCDocLine->GetEol() && nWorkPos + nWorkLen > nLineLen - pCDocLine->GetEol().GetLen() // 2002/2/10 aroka CMemory変更 ){ /* 削除する長さに改行も含める */ diff --git a/sakura_core/charset/CCodeBase.cpp b/sakura_core/charset/CCodeBase.cpp index bd7a57c292..09a6d3633d 100644 --- a/sakura_core/charset/CCodeBase.cpp +++ b/sakura_core/charset/CCodeBase.cpp @@ -117,13 +117,13 @@ void CCodeBase::S_GetEol(CMemory* pcmemEol, EEolType eEolType) int nLen; } aEolTable[EOL_TYPE_NUM] = { - { "", 0 }, // EOL_NONE - { "\x0d\x0a", 2 }, // EOL_CRLF - { "\x0a", 1 }, // EOL_LF - { "\x0d", 1 }, // EOL_CR - { "", 0 }, // EOL_NEL - { "", 0 }, // EOL_LS - { "", 0 }, // EOL_PS + { "", 0 }, // EEolType::none + { "\x0d\x0a", 2 }, // EEolType::cr_and_lf + { "\x0a", 1 }, // EEolType::line_feed + { "\x0d", 1 }, // EEolType::carriage_return + { "", 0 }, // EEolType::next_line + { "", 0 }, // EEolType::line_separator + { "", 0 }, // EEolType::paragraph_separator }; pcmemEol->SetRawData(aEolTable[eEolType].szData,aEolTable[eEolType].nLen); } diff --git a/sakura_core/charset/CUnicode.cpp b/sakura_core/charset/CUnicode.cpp index c3f85e1b61..ba1d889b1d 100644 --- a/sakura_core/charset/CUnicode.cpp +++ b/sakura_core/charset/CUnicode.cpp @@ -100,13 +100,13 @@ void CUnicode::GetEol(CMemory* pcmemEol, EEolType eEolType) int nLen; } aEolTable[EOL_TYPE_NUM] = { - { L"", 0 * sizeof(wchar_t) }, // EOL_NONE - { L"\x0d\x0a", 2 * sizeof(wchar_t) }, // EOL_CRLF - { L"\x0a", 1 * sizeof(wchar_t) }, // EOL_LF - { L"\x0d", 1 * sizeof(wchar_t) }, // EOL_CR - { L"\x85", 1 * sizeof(wchar_t) }, // EOL_NEL - { L"\u2028", 1 * sizeof(wchar_t) }, // EOL_LS - { L"\u2029", 1 * sizeof(wchar_t) }, // EOL_PS + { L"", 0 * sizeof(wchar_t) }, // EEolType::none + { L"\x0d\x0a", 2 * sizeof(wchar_t) }, // EEolType::cr_and_lf + { L"\x0a", 1 * sizeof(wchar_t) }, // EEolType::line_feed + { L"\x0d", 1 * sizeof(wchar_t) }, // EEolType::carriage_return + { L"\x85", 1 * sizeof(wchar_t) }, // EEolType::next_line + { L"\u2028", 1 * sizeof(wchar_t) }, // EEolType::line_separator + { L"\u2029", 1 * sizeof(wchar_t) }, // EEolType::paragraph_separator }; pcmemEol->SetRawData(aEolTable[eEolType].pData,aEolTable[eEolType].nLen); } diff --git a/sakura_core/charset/CUnicodeBe.cpp b/sakura_core/charset/CUnicodeBe.cpp index e04bbbcc06..56d2962ac2 100644 --- a/sakura_core/charset/CUnicodeBe.cpp +++ b/sakura_core/charset/CUnicodeBe.cpp @@ -42,13 +42,13 @@ void CUnicodeBe::GetEol(CMemory* pcmemEol, EEolType eEolType) int nLen; } aEolTable[EOL_TYPE_NUM] = { - { "", 0 * sizeof(wchar_t) }, // EOL_NONE - { "\x00\x0d\x00\x0a", 2 * sizeof(wchar_t) }, // EOL_CRLF - { "\x00\x0a", 1 * sizeof(wchar_t) }, // EOL_LF - { "\x00\x0d", 1 * sizeof(wchar_t) }, // EOL_CR - { "\x00\x85", 1 * sizeof(wchar_t) }, // EOL_NEL - { "\x20\x28", 1 * sizeof(wchar_t) }, // EOL_LS - { "\x20\x29", 1 * sizeof(wchar_t) }, // EOL_PS + { "", 0 * sizeof(wchar_t) }, // EEolType::none + { "\x00\x0d\x00\x0a", 2 * sizeof(wchar_t) }, // EEolType::cr_and_lf + { "\x00\x0a", 1 * sizeof(wchar_t) }, // EEolType::line_feed + { "\x00\x0d", 1 * sizeof(wchar_t) }, // EEolType::carriage_return + { "\x00\x85", 1 * sizeof(wchar_t) }, // EEolType::next_line + { "\x20\x28", 1 * sizeof(wchar_t) }, // EEolType::line_separator + { "\x20\x29", 1 * sizeof(wchar_t) }, // EEolType::paragraph_separator }; pcmemEol->SetRawData(aEolTable[eEolType].pData,aEolTable[eEolType].nLen); } diff --git a/sakura_core/charset/CUtf7.cpp b/sakura_core/charset/CUtf7.cpp index 2e33cec4a7..802bc5274d 100644 --- a/sakura_core/charset/CUtf7.cpp +++ b/sakura_core/charset/CUtf7.cpp @@ -289,13 +289,13 @@ void CUtf7::GetEol(CMemory* pcmemEol, EEolType eEolType) int nLen; } aEolTable[EOL_TYPE_NUM] = { - { "", 0 }, // EOL_NONE - { "\x0d\x0a", 2 }, // EOL_CRLF - { "\x0a", 1 }, // EOL_LF - { "\x0d", 1 }, // EOL_CR - { "+AIU-", 5 }, // EOL_NEL - { "+ICg-", 5 }, // EOL_LS - { "+ICk-", 5 }, // EOL_PS + { "", 0 }, // EEolType::none + { "\x0d\x0a", 2 }, // EEolType::cr_and_lf + { "\x0a", 1 }, // EEolType::line_feed + { "\x0d", 1 }, // EEolType::carriage_return + { "+AIU-", 5 }, // EEolType::next_line + { "+ICg-", 5 }, // EEolType::line_separator + { "+ICk-", 5 }, // EEolType::paragraph_separator }; pcmemEol->SetRawData(aEolTable[eEolType].szData,aEolTable[eEolType].nLen); } diff --git a/sakura_core/charset/CUtf8.cpp b/sakura_core/charset/CUtf8.cpp index 71ad10c857..e96700ceaa 100644 --- a/sakura_core/charset/CUtf8.cpp +++ b/sakura_core/charset/CUtf8.cpp @@ -45,13 +45,13 @@ void CUtf8::GetEol(CMemory* pcmemEol, EEolType eEolType){ int nLen; } aEolTable[EOL_TYPE_NUM] = { - "", 0, // EOL_NONE - "\x0d\x0a", 2, // EOL_CRLF - "\x0a", 1, // EOL_LF - "\x0d", 1, // EOL_CR - "\xc2\x85", 2, // EOL_NEL - "\xe2\x80\xa8", 3, // EOL_LS - "\xe2\x80\xa9", 3, // EOL_PS + "", 0, // EEolType::none + "\x0d\x0a", 2, // EEolType::cr_and_lf + "\x0a", 1, // EEolType::line_feed + "\x0d", 1, // EEolType::carriage_return + "\xc2\x85", 2, // EEolType::next_line + "\xe2\x80\xa8", 3, // EEolType::line_separator + "\xe2\x80\xa9", 3, // EEolType::paragraph_separator }; pcmemEol->SetRawData(aEolTable[eEolType].szData,aEolTable[eEolType].nLen); } diff --git a/sakura_core/cmd/CViewCommander.cpp b/sakura_core/cmd/CViewCommander.cpp index 22699b7c35..1a790b63c9 100644 --- a/sakura_core/cmd/CViewCommander.cpp +++ b/sakura_core/cmd/CViewCommander.cpp @@ -370,7 +370,7 @@ BOOL CViewCommander::HandleCommand( case F_CUT: Command_CUT();break; //切り取り(選択範囲をクリップボードにコピーして削除) case F_COPY: Command_COPY( false, GetDllShareData().m_Common.m_sEdit.m_bAddCRLFWhenCopy );break; //コピー(選択範囲をクリップボードにコピー) case F_COPY_ADDCRLF: Command_COPY( false, true );break; //折り返し位置に改行をつけてコピー(選択範囲をクリップボードにコピー) - case F_COPY_CRLF: Command_COPY( false, GetDllShareData().m_Common.m_sEdit.m_bAddCRLFWhenCopy, EOL_CRLF );break; //CRLF改行でコピー(選択範囲をクリップボードにコピー) + case F_COPY_CRLF: Command_COPY( false, GetDllShareData().m_Common.m_sEdit.m_bAddCRLFWhenCopy, EEolType::cr_and_lf );break; //CRLF改行でコピー(選択範囲をクリップボードにコピー) case F_PASTE: Command_PASTE( (int)lparam1 );break; //貼り付け(クリップボードから貼り付け) case F_PASTEBOX: Command_PASTEBOX( (int)lparam1 );break; //矩形貼り付け(クリップボードから矩形貼り付け) case F_INSBOXTEXT: Command_INSBOXTEXT((const wchar_t*)lparam1, (int)lparam2 );break; //矩形テキスト挿入 @@ -481,9 +481,9 @@ BOOL CViewCommander::HandleCommand( case F_CHG_CHARSET: Command_CHG_CHARSET( (ECodeType)lparam1, lparam2 != 0 );break; //文字コードセット指定 2010/6/14 Uchi // From Here 2003.06.23 Moca // F_CHGMOD_EOL_xxx はマクロに記録されないが、F_CHGMOD_EOLはマクロに記録されるので、マクロ関数を統合できるという手はず - case F_CHGMOD_EOL_CRLF: HandleCommand( F_CHGMOD_EOL, bRedraw, EOL_CRLF, 0, 0, 0 );break; //入力する改行コードをCRLFに設定 - case F_CHGMOD_EOL_LF: HandleCommand( F_CHGMOD_EOL, bRedraw, EOL_LF, 0, 0, 0 );break; //入力する改行コードをLFに設定 - case F_CHGMOD_EOL_CR: HandleCommand( F_CHGMOD_EOL, bRedraw, EOL_CR, 0, 0, 0 );break; //入力する改行コードをCRに設定 + case F_CHGMOD_EOL_CRLF: HandleCommand( F_CHGMOD_EOL, bRedraw, EEolType::cr_and_lf, 0, 0, 0 );break; //入力する改行コードをCRLFに設定 + case F_CHGMOD_EOL_LF: HandleCommand( F_CHGMOD_EOL, bRedraw, EEolType::line_feed, 0, 0, 0 );break; //入力する改行コードをLFに設定 + case F_CHGMOD_EOL_CR: HandleCommand( F_CHGMOD_EOL, bRedraw, EEolType::carriage_return, 0, 0, 0 );break; //入力する改行コードをCRに設定 // 2006.09.03 Moca F_CHGMOD_EOLで break 忘れの修正 case F_CHGMOD_EOL: Command_CHGMOD_EOL( (EEolType)lparam1 );break; //入力する改行コードを設定 // To Here 2003.06.23 Moca diff --git a/sakura_core/cmd/CViewCommander.h b/sakura_core/cmd/CViewCommander.h index 5c3ea47528..6c4aa2a0da 100644 --- a/sakura_core/cmd/CViewCommander.h +++ b/sakura_core/cmd/CViewCommander.h @@ -213,7 +213,7 @@ class CViewCommander{ /* クリップボード系 */ void Command_CUT( void ); /* 切り取り(選択範囲をクリップボードにコピーして削除)*/ - void Command_COPY( bool bIgnoreLockAndDisable, bool bAddCRLFWhenCopy, EEolType neweol = EOL_UNKNOWN );/* コピー(選択範囲をクリップボードにコピー) */ + void Command_COPY( bool bIgnoreLockAndDisable, bool bAddCRLFWhenCopy, EEolType neweol = EEolType::auto_detect );/* コピー(選択範囲をクリップボードにコピー) */ void Command_PASTE( int option ); /* 貼り付け(クリップボードから貼り付け)*/ void Command_PASTEBOX( int option ); /* 矩形貼り付け(クリップボードから矩形貼り付け)*/ //<< 2002/03/29 Azumaiya diff --git a/sakura_core/cmd/CViewCommander_Cursor.cpp b/sakura_core/cmd/CViewCommander_Cursor.cpp index 89335f52ab..eb8a9579b1 100644 --- a/sakura_core/cmd/CViewCommander_Cursor.cpp +++ b/sakura_core/cmd/CViewCommander_Cursor.cpp @@ -222,7 +222,7 @@ int CViewCommander::Command_LEFT( bool bSelect, bool bRepeat ) } } if (it.end()) { - const bool has_eol = EOL_NONE != pcLayout->GetLayoutEol(); // 改行文字で終わっているか。 + const bool has_eol = EEolType::none != pcLayout->GetLayoutEol(); // 改行文字で終わっているか。 const CLayoutXInt dx_default = this->m_pCommanderView->GetTextMetrics().GetLayoutXDefault(); // 文字のない部分の移動量。 const CLayoutXInt eol_hosei = has_eol ? CLayoutXInt(-it.getColumnDelta() + dx_default) : CLayoutXInt(0); if (ptCaretMove.GetX2() <= it.getColumn() + eol_hosei) { @@ -297,8 +297,8 @@ void CViewCommander::Command_RIGHT( bool bSelect, bool bIgnoreCurrentSelection, { // キャレット位置のレイアウト行について。 const CLayoutInt x_wrap = pcLayout->CalcLayoutWidth( GetDocument()->m_cLayoutMgr ); // 改行文字、または折り返しの位置。 - const bool wrapped = EOL_NONE == pcLayout->GetLayoutEol(); // 折り返しているか、改行文字で終わっているか。これにより x_wrapの意味が変わる。 - const bool nextline_exists = pcLayout->GetNextLayout() || pcLayout->GetLayoutEol() != EOL_NONE; // EOFのみの行も含め、キャレットが移動可能な次行が存在するか。 + const bool wrapped = EEolType::none == pcLayout->GetLayoutEol(); // 折り返しているか、改行文字で終わっているか。これにより x_wrapの意味が変わる。 + const bool nextline_exists = pcLayout->GetNextLayout() || pcLayout->GetLayoutEol() != EEolType::none; // EOFのみの行も含め、キャレットが移動可能な次行が存在するか。 const CLayoutXInt dx_default = this->m_pCommanderView->GetTextMetrics().GetLayoutXDefault(); // 文字のない部分(※改行マーク部分を含む)の移動量。 @@ -1288,7 +1288,7 @@ void CViewCommander::Command_MODIFYLINE_NEXT( bool bSelect ) bool bSkip = false; CLogicPoint pos; if( pcDocLineLast != NULL ){ - if( pcDocLineLast->GetEol() == EOL_NONE ){ + if( pcDocLineLast->GetEol() == EEolType::none ){ // ぶら下がり[EOF] pos.x = pcDocLineLast->GetLengthWithoutEOL(); pos.y = GetDocument()->m_cDocLineMgr.GetLineCount() - 1; @@ -1349,7 +1349,7 @@ void CViewCommander::Command_MODIFYLINE_PREV( bool bSelect ) } if( !bLast ){ const CDocLine* pcDocLineLast = GetDocument()->m_cDocLineMgr.GetDocLineBottom(); - if( pcDocLineLast != NULL && pcDocLineLast->GetEol() == EOL_NONE ){ + if( pcDocLineLast != NULL && pcDocLineLast->GetEol() == EEolType::none ){ CLogicPoint pos; pos.x = pcDocLine->GetLengthWithoutEOL(); pos.y = GetDocument()->m_cDocLineMgr.GetLineCount() - 1; @@ -1415,7 +1415,7 @@ void CViewCommander::Command_MODIFYLINE_PREV( bool bSelect ) if( CModifyVisitor().IsLineModified(pcDocLineTemp, nSaveSeq) != false ){ // 最終行が変更行の場合は、[EOF]に止まる CLogicPoint pos; - if( pcDocLineTemp->GetEol() != EOL_NONE ){ + if( pcDocLineTemp->GetEol() != EEolType::none ){ pos.x = 0; pos.y = GetDocument()->m_cDocLineMgr.GetLineCount(); pos.y++; diff --git a/sakura_core/cmd/CViewCommander_Edit.cpp b/sakura_core/cmd/CViewCommander_Edit.cpp index d89886096d..51af8c3faf 100644 --- a/sakura_core/cmd/CViewCommander_Edit.cpp +++ b/sakura_core/cmd/CViewCommander_Edit.cpp @@ -791,7 +791,7 @@ void CViewCommander::Command_DELETE( void ) CLogicInt nIndex; nIndex = m_pCommanderView->LineColumnToIndex2( pcLayout, GetCaret().GetCaretLayoutPos().GetX2(), &nLineLen ); if( nLineLen != 0 ){ // 折り返しや改行コードより右の場合には nLineLen に行全体の表示桁数が入る - if( EOL_NONE != pcLayout->GetLayoutEol().GetType() ){ // 行終端は改行コードか? + if( EEolType::none != pcLayout->GetLayoutEol().GetType() ){ // 行終端は改行コードか? Command_INSTEXT( true, L"", CLogicInt(0), FALSE ); // カーソル位置まで半角スペース挿入 }else{ // 行終端が折り返し // 折り返し行末ではスペース挿入後、次の文字を削除する // 2009.02.19 ryoji @@ -880,7 +880,7 @@ void CViewCommander::DelCharForOverwrite( const wchar_t* pszInput, int nLen ) CLogicInt nIdxTo = m_pCommanderView->LineColumnToIndex( pcLayout, GetCaret().GetCaretLayoutPos().GetX2() ); if( nIdxTo >= pcLayout->GetLengthWithoutEOL() ){ bEol = true; // 現在位置は改行または折り返し以後 - if( pcLayout->GetLayoutEol() != EOL_NONE ){ + if( pcLayout->GetLayoutEol() != EEolType::none ){ if( GetDllShareData().m_Common.m_sEdit.m_bNotOverWriteCRLF ){ /* 改行は上書きしない */ /* 現在位置が改行ならば削除しない */ bDelete = FALSE; diff --git a/sakura_core/cmd/CViewCommander_Edit_advanced.cpp b/sakura_core/cmd/CViewCommander_Edit_advanced.cpp index a43420f8e0..2c39fe709c 100644 --- a/sakura_core/cmd/CViewCommander_Edit_advanced.cpp +++ b/sakura_core/cmd/CViewCommander_Edit_advanced.cpp @@ -215,7 +215,7 @@ void CViewCommander::Command_INDENT( const wchar_t* const pData, const CLogicInt } const bool emptyLine = ! pcLayout || 0 == pcLayout->GetLengthWithoutEOL(); const bool selectionIsOutOfLine = reachEndOfLayout && ( - (pcLayout && pcLayout->GetLayoutEol() != EOL_NONE) ? xLayoutFrom == xLayoutTo : xLayoutTo < rcSel.GetFrom().x + (pcLayout && pcLayout->GetLayoutEol() != EEolType::none) ? xLayoutFrom == xLayoutTo : xLayoutTo < rcSel.GetFrom().x ); // 入力文字の挿入位置 @@ -675,7 +675,7 @@ void CViewCommander::Command_SORT(BOOL bAsc) //bAsc:TRUE=昇順,FALSE=降順 if ( sSelectOld.GetTo().x > 0 ) { // 2006.03.31 Moca nSelectLineToOldは、物理行なのでLayout系からDocLine系に修正 const CDocLine* pcDocLine = GetDocument()->m_cDocLineMgr.GetLine( sSelectOld.GetTo().GetY2() ); - if( NULL != pcDocLine && EOL_NONE != pcDocLine->GetEol() ){ + if( NULL != pcDocLine && EEolType::none != pcDocLine->GetEol() ){ sSelectOld.GetToPointer()->y++; } } @@ -844,14 +844,14 @@ void CViewCommander::Command_MERGE(void) if ( sSelectOld.GetTo().x > 0 ) { #if 0 const CLayout* pcLayout=GetDocument()->m_cLayoutMgr.SearchLineByLayoutY(m_pCommanderView->GetSelectionInfo().m_sSelect.GetTo().GetY2()); //2007.10.09 kobake 単位混在バグ修正 - if( NULL != pcLayout && EOL_NONE != pcLayout->GetLayoutEol() ){ + if( NULL != pcLayout && EEolType::none != pcLayout->GetLayoutEol() ){ sSelectOld.GetToPointer()->y++; //sSelectOld.GetTo().y++; } #else // 2010.08.22 Moca ソートと仕様を合わせる const CDocLine* pcDocLine = GetDocument()->m_cDocLineMgr.GetLine( sSelectOld.GetTo().GetY2() ); - if( NULL != pcDocLine && EOL_NONE != pcDocLine->GetEol() ){ + if( NULL != pcDocLine && EEolType::none != pcDocLine->GetEol() ){ sSelectOld.GetToPointer()->y++; } #endif diff --git a/sakura_core/cmd/CViewCommander_Edit_word_line.cpp b/sakura_core/cmd/CViewCommander_Edit_word_line.cpp index a4b214be0e..440c2e9819 100644 --- a/sakura_core/cmd/CViewCommander_Edit_word_line.cpp +++ b/sakura_core/cmd/CViewCommander_Edit_word_line.cpp @@ -166,7 +166,7 @@ void CViewCommander::Command_LineCutToEnd( void ) CLayoutPoint ptPos; - if( EOL_NONE == pCLayout->GetDocLineRef()->GetEol() ){ /* 改行コードの種類 */ + if( EEolType::none == pCLayout->GetDocLineRef()->GetEol() ){ /* 改行コードの種類 */ GetDocument()->m_cLayoutMgr.LogicToLayout( CLogicPoint( pCLayout->GetDocLineRef()->GetLengthWithEOL(), @@ -246,7 +246,7 @@ void CViewCommander::Command_LineDeleteToEnd( void ) CLayoutPoint ptPos; - if( EOL_NONE == pCLayout->GetDocLineRef()->GetEol() ){ /* 改行コードの種類 */ + if( EEolType::none == pCLayout->GetDocLineRef()->GetEol() ){ /* 改行コードの種類 */ GetDocument()->m_cLayoutMgr.LogicToLayout( CLogicPoint( pCLayout->GetDocLineRef()->GetLengthWithEOL(), @@ -300,7 +300,7 @@ void CViewCommander::Command_CUT_LINE( void ) // 2007.10.04 ryoji 処理簡素化 m_pCommanderView->CopyCurLine( GetDllShareData().m_Common.m_sEdit.m_bAddCRLFWhenCopy, - EOL_UNKNOWN, + EEolType::auto_detect, GetDllShareData().m_Common.m_sEdit.m_bEnableLineModePaste ); Command_DELETE_LINE(); @@ -414,7 +414,7 @@ void CViewCommander::Command_DUPLICATELINE( void ) || ・最終行でない || →折り返しである */ - bCRLF = ( EOL_NONE == pcLayout->GetLayoutEol() ) ? FALSE : TRUE; + bCRLF = ( EEolType::none == pcLayout->GetLayoutEol() ) ? FALSE : TRUE; bAddCRLF = FALSE; if( !bCRLF ){ diff --git a/sakura_core/cmd/CViewCommander_File.cpp b/sakura_core/cmd/CViewCommander_File.cpp index 7eef3a720e..42c31ca560 100644 --- a/sakura_core/cmd/CViewCommander_File.cpp +++ b/sakura_core/cmd/CViewCommander_File.cpp @@ -188,7 +188,7 @@ bool CViewCommander::Command_FILESAVE( bool warnbeep, bool askname ) //セーブ情報 SSaveInfo sSaveInfo; pcDoc->GetSaveInfo(&sSaveInfo); - sSaveInfo.cEol = EOL_NONE; //改行コード無変換 + sSaveInfo.cEol = EEolType::none; //改行コード無変換 sSaveInfo.bOverwriteMode = true; //上書き要求 //上書き処理 @@ -389,7 +389,7 @@ void CViewCommander::Command_PLSQL_COMPILE_ON_SQLPLUS( void ) nBool = Command_FILESAVE(); }else{ //nBool = HandleCommand( F_FILESAVEAS_DIALOG, true, 0, 0, 0, 0 ); - nBool = Command_FILESAVEAS_DIALOG(NULL, CODE_NONE, EOL_NONE); + nBool = Command_FILESAVEAS_DIALOG(NULL, CODE_NONE, EEolType::none); } if( !nBool ){ return; @@ -780,7 +780,7 @@ BOOL CViewCommander::Command_PUTFILE( SSaveInfo( filename, nSaveCharCode, - EOL_NONE, + EEolType::none, bBom ) ); diff --git a/sakura_core/cmd/CViewCommander_ModeChange.cpp b/sakura_core/cmd/CViewCommander_ModeChange.cpp index 56479e7e65..3140252f96 100644 --- a/sakura_core/cmd/CViewCommander_ModeChange.cpp +++ b/sakura_core/cmd/CViewCommander_ModeChange.cpp @@ -60,7 +60,7 @@ void CViewCommander::Command_CHGMOD_INS( void ) @date 2003.06.23 新規作成 */ void CViewCommander::Command_CHGMOD_EOL( EEolType e ){ - if( EOL_NONE < e && e < EOL_CODEMAX ){ + if( EEolType::none < e && e < EEolType::code_max ){ GetDocument()->m_cDocEditor.SetNewLineCode( e ); // ステータスバーを更新するため // キャレットの行桁位置を表示する関数を呼び出す diff --git a/sakura_core/cmd/CViewCommander_Search.cpp b/sakura_core/cmd/CViewCommander_Search.cpp index 91da829ffd..97e3d6d72e 100644 --- a/sakura_core/cmd/CViewCommander_Search.cpp +++ b/sakura_core/cmd/CViewCommander_Search.cpp @@ -1191,7 +1191,7 @@ void CViewCommander::Command_REPLACE_ALL() cSelectLogic.SetTo(CLogicPoint(CLogicXInt(0), y + CLogicInt(1))); // 次行の行頭 if( GetDocument()->m_cDocLineMgr.GetLineCount() == y + CLogicInt(1) ){ const CDocLine* pLine = GetDocument()->m_cDocLineMgr.GetLine(y); - if( pLine->GetEol() == EOL_NONE ){ + if( pLine->GetEol() == EEolType::none ){ // EOFは最終データ行にぶら下がりなので、選択終端は行末 cSelectLogic.SetTo(CLogicPoint(pLine->GetLengthWithEOL(), y)); // 対象行の行末 } diff --git a/sakura_core/convert/CDecode_UuDecode.cpp b/sakura_core/convert/CDecode_UuDecode.cpp index e66cf75e05..a7af4951f5 100644 --- a/sakura_core/convert/CDecode_UuDecode.cpp +++ b/sakura_core/convert/CDecode_UuDecode.cpp @@ -67,7 +67,7 @@ bool CDecode_UuDecode::DoDecode( const CNativeW& pcSrc, CMemory* pcDst ) // ボディーを処理 while( (pline = GetNextLineW(psrc, nsrclen, &nlinelen, &ncuridx, &ceol, false)) != NULL ){ - if( ceol.GetType() != EOL_CRLF ){ + if( ceol.GetType() != EEolType::cr_and_lf ){ pcDst->_AppendSz(""); return false; } diff --git a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp index b27e974592..2f5f34e8bd 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp @@ -219,10 +219,10 @@ UINT_PTR CALLBACK OFNHookProc( // From Here Feb. 9, 2001 genta static const int nEolValueArr[] = { - EOL_NONE, - EOL_CRLF, - EOL_LF, - EOL_CR, + EEolType::none, + EEolType::cr_and_lf, + EEolType::line_feed, + EEolType::carriage_return, }; // 文字列はResource内に入れる static const WCHAR* const pEolNameArr[] = { diff --git a/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp index 2e809ee199..f3d1d3dad0 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp @@ -564,10 +564,10 @@ HRESULT CDlgOpenFile_CommonItemDialog::Customize() if (m_customizeSetting.bUseEol) { hr = StartVisualGroup(CtrlId::LABEL_EOL, LS(STR_FILEDIALOG_EOL)); RETURN_IF_FAILED hr = AddComboBox(CtrlId::COMBO_EOL); RETURN_IF_FAILED - hr = AddControlItem(CtrlId::COMBO_EOL, EOL_NONE, LS(STR_DLGOPNFL1)); RETURN_IF_FAILED - hr = AddControlItem(CtrlId::COMBO_EOL, EOL_CRLF, L"CR+LF"); RETURN_IF_FAILED - hr = AddControlItem(CtrlId::COMBO_EOL, EOL_LF, L"LF (UNIX)"); RETURN_IF_FAILED - hr = AddControlItem(CtrlId::COMBO_EOL, EOL_CR, L"CR (Mac)"); RETURN_IF_FAILED + hr = AddControlItem(CtrlId::COMBO_EOL, EEolType::none, LS(STR_DLGOPNFL1)); RETURN_IF_FAILED + hr = AddControlItem(CtrlId::COMBO_EOL, EEolType::cr_and_lf, L"CR+LF"); RETURN_IF_FAILED + hr = AddControlItem(CtrlId::COMBO_EOL, EEolType::line_feed, L"LF (UNIX)"); RETURN_IF_FAILED + hr = AddControlItem(CtrlId::COMBO_EOL, EEolType::carriage_return, L"CR (Mac)"); RETURN_IF_FAILED hr = SetSelectedControlItem(CtrlId::COMBO_EOL, 0); RETURN_IF_FAILED hr = EndVisualGroup(); RETURN_IF_FAILED } diff --git a/sakura_core/doc/CDocEditor.cpp b/sakura_core/doc/CDocEditor.cpp index 3b1f7a1bcd..d195abbe44 100644 --- a/sakura_core/doc/CDocEditor.cpp +++ b/sakura_core/doc/CDocEditor.cpp @@ -37,7 +37,7 @@ CDocEditor::CDocEditor(CEditDoc* pcDoc) : m_pcDocRef(pcDoc) -, m_cNewLineCode( EOL_CRLF ) // New Line Type +, m_cNewLineCode( EEolType::cr_and_lf ) // New Line Type , m_pcOpeBlk( NULL ) , m_bInsMode( true ) // Oct. 2, 2005 genta , m_bIsDocModified( false ) /* 変更フラグ */ // Jan. 22, 2002 genta 型変更 @@ -86,12 +86,12 @@ void CDocEditor::OnAfterLoad(const SLoadInfo& sLoadInfo) SetNewLineCode( type.m_encoding.m_eDefaultEoltype ); // 2011.01.24 ryoji デフォルトEOL } else{ - SetNewLineCode( EOL_CRLF ); + SetNewLineCode( EEolType::cr_and_lf ); } CDocLine* pFirstlineinfo = pcDoc->m_cDocLineMgr.GetLine( CLogicInt(0) ); if( pFirstlineinfo != NULL ){ EEolType t = pFirstlineinfo->GetEol(); - if( t != EOL_NONE && t != EOL_UNKNOWN ){ + if( t != EEolType::none && t != EEolType::auto_detect ){ SetNewLineCode( t ); } } diff --git a/sakura_core/doc/CDocFileOperation.cpp b/sakura_core/doc/CDocFileOperation.cpp index 3e69f56798..337b15a7c7 100644 --- a/sakura_core/doc/CDocFileOperation.cpp +++ b/sakura_core/doc/CDocFileOperation.cpp @@ -319,7 +319,7 @@ bool CDocFileOperation::DoSaveFlow(SSaveInfo* pSaveInfo) if(pSaveInfo->bOverwriteMode){ // 無変更の場合は警告音を出し、終了 if (!m_pcDocRef->m_cDocEditor.IsModified() && - pSaveInfo->cEol==EOL_NONE && //※改行コード指定保存がリクエストされた場合は、「変更があったもの」とみなす + pSaveInfo->cEol==EEolType::none && //※改行コード指定保存がリクエストされた場合は、「変更があったもの」とみなす !pSaveInfo->bChgCodeSet) { // 文字コードセットの変更が有った場合は、「変更があったもの」とみなす CEditApp::getInstance()->m_cSoundSet.NeedlessToSaveBeep(); throw CFlowInterruption(); @@ -388,7 +388,7 @@ bool CDocFileOperation::FileSave() //セーブ情報 SSaveInfo sSaveInfo; m_pcDocRef->GetSaveInfo(&sSaveInfo); - sSaveInfo.cEol = EOL_NONE; //改行コード無変換 + sSaveInfo.cEol = EEolType::none; //改行コード無変換 sSaveInfo.bOverwriteMode = true; //上書き要求 //上書き処理 @@ -404,11 +404,11 @@ bool CDocFileOperation::FileSaveAs( const WCHAR* filename,ECodeType eCodeType, E //セーブ情報 SSaveInfo sSaveInfo; m_pcDocRef->GetSaveInfo(&sSaveInfo); - sSaveInfo.cEol = EOL_NONE; // 初期値は変換しない + sSaveInfo.cEol = EEolType::none; // 初期値は変換しない if( filename ){ // ダイアログなし保存、またはマクロの引数あり sSaveInfo.cFilePath = filename; - if( EOL_NONE <= eEolType && eEolType < EOL_CODEMAX ){ + if( EEolType::none <= eEolType && eEolType < EEolType::code_max ){ sSaveInfo.cEol = eEolType; } if( IsValidCodeType(eCodeType) && eCodeType != sSaveInfo.eCharCode ){ diff --git a/sakura_core/doc/CDocFileOperation.h b/sakura_core/doc/CDocFileOperation.h index 99bf6e43a0..95b8edfcd0 100644 --- a/sakura_core/doc/CDocFileOperation.h +++ b/sakura_core/doc/CDocFileOperation.h @@ -67,7 +67,7 @@ class CDocFileOperation{ //セーブフロー bool DoSaveFlow(SSaveInfo* pSaveInfo); - bool FileSaveAs( const WCHAR* filename = NULL,ECodeType eCodeType = CODE_NONE, EEolType eEolType = EOL_NONE, bool bDialog = true); //!< ダイアログでファイル名を入力させ、保存。 // 2006.12.30 ryoji + bool FileSaveAs( const WCHAR* filename = NULL,ECodeType eCodeType = CODE_NONE, EEolType eEolType = EEolType::none, bool bDialog = true); //!< ダイアログでファイル名を入力させ、保存。 // 2006.12.30 ryoji bool FileSave(); //!< 上書き保存。ファイル名が指定されていなかったらダイアログで入力を促す。 // 2006.12.30 ryoji //クローズ diff --git a/sakura_core/doc/CDocListener.h b/sakura_core/doc/CDocListener.h index 2cc43f45d1..0cd92dc606 100644 --- a/sakura_core/doc/CDocListener.h +++ b/sakura_core/doc/CDocListener.h @@ -120,7 +120,7 @@ struct SSaveInfo{ //モード bool bOverwriteMode; //!< 上書き要求 - SSaveInfo() : cFilePath(L""), eCharCode(CODE_AUTODETECT), bBomExist(false), bChgCodeSet(false), cEol(EOL_NONE), bOverwriteMode(false) { } + SSaveInfo() : cFilePath(L""), eCharCode(CODE_AUTODETECT), bBomExist(false), bChgCodeSet(false), cEol(EEolType::none), bOverwriteMode(false) { } SSaveInfo(const CFilePath& _cFilePath, ECodeType _eCodeType, const CEol& _cEol, bool _bBomExist) : cFilePath(_cFilePath), eCharCode(_eCodeType), bBomExist(_bBomExist), bChgCodeSet(false), cEol(_cEol), bOverwriteMode(false) { } diff --git a/sakura_core/doc/CDocVisitor.cpp b/sakura_core/doc/CDocVisitor.cpp index 051b60b982..8a03988088 100644 --- a/sakura_core/doc/CDocVisitor.cpp +++ b/sakura_core/doc/CDocVisitor.cpp @@ -59,7 +59,7 @@ void CDocVisitor::SetAllEol(CEol cEol) CDocLine* pcDocLine = m_pcDocRef->m_cDocLineMgr.GetLine(nLine); //#######非効率 if(!pcDocLine)break; //改行を置換 - if(pcDocLine->GetEol()!=EOL_NONE && pcDocLine->GetEol()!=cEol){ + if(pcDocLine->GetEol()!=EEolType::none && pcDocLine->GetEol()!=cEol){ CLogicRange sRange; sRange.SetFrom(CLogicPoint(pcDocLine->GetLengthWithoutEOL(),nLine)); sRange.SetTo(CLogicPoint(pcDocLine->GetLengthWithEOL(),nLine)); diff --git a/sakura_core/doc/layout/CLayoutMgr.cpp b/sakura_core/doc/layout/CLayoutMgr.cpp index 5e08c876e4..636bc79d94 100644 --- a/sakura_core/doc/layout/CLayoutMgr.cpp +++ b/sakura_core/doc/layout/CLayoutMgr.cpp @@ -397,15 +397,15 @@ CLayout* CLayoutMgr::CreateLayout( colorInfo ); - if( EOL_NONE == pCDocLine->GetEol() ){ - pLayout->m_cEol.SetType( EOL_NONE );/* 改行コードの種類 */ + if( EEolType::none == pCDocLine->GetEol() ){ + pLayout->m_cEol.SetType( EEolType::none );/* 改行コードの種類 */ }else{ if( pLayout->GetLogicOffset() + pLayout->GetLengthWithEOL() > pCDocLine->GetLengthWithEOL() - pCDocLine->GetEol().GetLen() ){ pLayout->m_cEol = pCDocLine->GetEol();/* 改行コードの種類 */ }else{ - pLayout->m_cEol = EOL_NONE;/* 改行コードの種類 */ + pLayout->m_cEol = EEolType::none;/* 改行コードの種類 */ } } @@ -462,7 +462,7 @@ bool CLayoutMgr::IsEndOfLine( return false; } - if( EOL_NONE == pLayout->GetLayoutEol().GetType() ) + if( EEolType::none == pLayout->GetLayoutEol().GetType() ) { /* この行に改行はない */ /* この行の最後か? */ if( ptLinePos.x == (Int)pLayout->GetLengthWithEOL() ) return true; //$$ 単位混在 @@ -501,7 +501,7 @@ void CLayoutMgr::GetEndLayoutPos( } CLayout *btm = m_pLayoutBot; - if( btm->m_cEol != EOL_NONE ){ + if( btm->m_cEol != EEolType::none ){ // 末尾に改行がある ptLayoutEnd->Set(CLayoutInt(0), GetLineCount()); } diff --git a/sakura_core/doc/logic/CDocLine.cpp b/sakura_core/doc/logic/CDocLine.cpp index 3c8ba35262..ca373ebe95 100644 --- a/sakura_core/doc/logic/CDocLine.cpp +++ b/sakura_core/doc/logic/CDocLine.cpp @@ -57,7 +57,7 @@ void CDocLine::SetEol() m_cEol.SetTypeByString(p, &pData[nLength]-p); } else{ - m_cEol = EOL_NONE; + m_cEol = EEolType::none; } } diff --git a/sakura_core/func/Funccode.cpp b/sakura_core/func/Funccode.cpp index 5d104c09b0..b0963af873 100644 --- a/sakura_core/func/Funccode.cpp +++ b/sakura_core/func/Funccode.cpp @@ -1312,9 +1312,9 @@ bool IsFuncChecked( const CEditDoc* pcEditDoc, const DLLSHAREDATA* pShareData, E // Mar. 6, 2002 genta case F_VIEWMODE: return CAppMode::getInstance()->IsViewMode(); //ビューモード // From Here 2003.06.23 Moca - case F_CHGMOD_EOL_CRLF: return EOL_CRLF == pcEditDoc->m_cDocEditor.GetNewLineCode(); - case F_CHGMOD_EOL_LF: return EOL_LF == pcEditDoc->m_cDocEditor.GetNewLineCode(); - case F_CHGMOD_EOL_CR: return EOL_CR == pcEditDoc->m_cDocEditor.GetNewLineCode(); + case F_CHGMOD_EOL_CRLF: return EEolType::cr_and_lf == pcEditDoc->m_cDocEditor.GetNewLineCode(); + case F_CHGMOD_EOL_LF: return EEolType::line_feed == pcEditDoc->m_cDocEditor.GetNewLineCode(); + case F_CHGMOD_EOL_CR: return EEolType::carriage_return == pcEditDoc->m_cDocEditor.GetNewLineCode(); // To Here 2003.06.23 Moca // 2003.07.21 genta case F_CHGMOD_INS: return pcEditDoc->m_cDocEditor.IsInsMode(); // Oct. 2, 2005 genta 挿入モードはドキュメント毎に補完するように変更した diff --git a/sakura_core/io/CFileLoad.cpp b/sakura_core/io/CFileLoad.cpp index dab4abd144..19fbb409a8 100644 --- a/sakura_core/io/CFileLoad.cpp +++ b/sakura_core/io/CFileLoad.cpp @@ -243,9 +243,9 @@ ECodeType CFileLoad::FileOpen( LPCWSTR pFileName, bool bBigFile, ECodeType CharC // To Here Jun. 13, 2003 Moca BOMの除去 m_eMode = FLMODE_READY; // m_cmemLine.AllocBuffer( 256 ); - m_pCodeBase->GetEol( &m_memEols[0], EOL_NEL ); - m_pCodeBase->GetEol( &m_memEols[1], EOL_LS ); - m_pCodeBase->GetEol( &m_memEols[2], EOL_PS ); + m_pCodeBase->GetEol( &m_memEols[0], EEolType::next_line ); + m_pCodeBase->GetEol( &m_memEols[1], EEolType::line_separator ); + m_pCodeBase->GetEol( &m_memEols[2], EEolType::paragraph_separator ); bool bEolEx = false; int nMaxEolLen = 0; for( int k = 0; k < (int)_countof(m_memEols); k++ ){ @@ -505,7 +505,7 @@ const char* CFileLoad::GetNextLineCharCode( int nbgn = *pnBgn; int i; - pcEol->SetType( EOL_NONE ); + pcEol->SetType( EEolType::none ); *pnBufferNext = 0; if( nDataLen <= nbgn ){ @@ -522,9 +522,9 @@ const char* CFileLoad::GetNextLineCharCode( case ENCODING_TRAIT_ASCII: { static const EEolType eEolEx[] = { - EOL_NEL, - EOL_LS, - EOL_PS, + EEolType::next_line, + EEolType::line_separator, + EEolType::paragraph_separator, }; nLen = nDataLen; for( i = nbgn; i < nDataLen; ++i ){ @@ -638,7 +638,7 @@ const char* CFileLoad::GetNextLineCharCode( for( i = nbgn; i < nDataLen; ++i ){ if( m_encodingTrait == ENCODING_TRAIT_EBCDIC && bExtEol ){ if( pData[i] == '\x15' ){ - pcEol->SetType(EOL_NEL); + pcEol->SetType(EEolType::next_line); neollen = 1; break; } @@ -666,7 +666,7 @@ const char* CFileLoad::GetNextLineCharCode( } }else{ // CRの場合は、CRLFかもしれないので次のバッファへ送る - if( *pcEol == EOL_CR ){ + if( *pcEol == EEolType::carriage_return ){ *pnBufferNext = neollen; } } diff --git a/sakura_core/macro/CMacro.cpp b/sakura_core/macro/CMacro.cpp index 3e822a1f35..83656bd4cc 100644 --- a/sakura_core/macro/CMacro.cpp +++ b/sakura_core/macro/CMacro.cpp @@ -272,13 +272,13 @@ void CMacro::AddLParam( const LPARAM* lParams, const CEditView* pcEditView ) // EOLタイプ値をマクロ引数値に変換する // 2009.08.18 ryoji int nFlag; switch( (int)lParam ){ - case EOL_CRLF: nFlag = 1; break; + case EEolType::cr_and_lf: nFlag = 1; break; // case EOL_LFCR: nFlag = 2; break; - case EOL_LF: nFlag = 3; break; - case EOL_CR: nFlag = 4; break; - case EOL_NEL: nFlag = 5; break; - case EOL_LS: nFlag = 6; break; - case EOL_PS: nFlag = 7; break; + case EEolType::line_feed: nFlag = 3; break; + case EEolType::carriage_return: nFlag = 4; break; + case EEolType::next_line: nFlag = 5; break; + case EEolType::line_separator: nFlag = 6; break; + case EEolType::paragraph_separator: nFlag = 7; break; default: nFlag = 0; break; } AddIntParam( nFlag ); @@ -639,16 +639,16 @@ bool CMacro::HandleCommand( // マクロ引数値をEOLタイプ値に変換する // 2009.08.18 ryoji int nEol; switch( Argument[0] != NULL ? _wtoi(Argument[0]) : 0 ){ - case 1: nEol = EOL_CRLF; break; + case 1: nEol = EEolType::cr_and_lf; break; // case 2: nEol = EOL_LFCR; break; - case 3: nEol = EOL_LF; break; - case 4: nEol = EOL_CR; break; - case 5: nEol = EOL_NEL; break; - case 6: nEol = EOL_LS; break; - case 7: nEol = EOL_PS; break; - default: nEol = EOL_NONE; break; - } - if( nEol != EOL_NONE ){ + case 3: nEol = EEolType::line_feed; break; + case 4: nEol = EEolType::carriage_return; break; + case 5: nEol = EEolType::next_line; break; + case 6: nEol = EEolType::line_separator; break; + case 7: nEol = EEolType::paragraph_separator; break; + default: nEol = EEolType::none; break; + } + if( nEol != EEolType::none ){ pcEditView->GetCommander().HandleCommand( Index, true, nEol, 0, 0, 0 ); } } @@ -1204,11 +1204,11 @@ bool CMacro::HandleCommand( } EEolType eEol; switch (nSaveLineCode){ - case 0: eEol = EOL_NONE; break; - case 1: eEol = EOL_CRLF; break; - case 2: eEol = EOL_LF; break; - case 3: eEol = EOL_CR; break; - default: eEol = EOL_NONE; break; + case 0: eEol = EEolType::none; break; + case 1: eEol = EEolType::cr_and_lf; break; + case 2: eEol = EEolType::line_feed; break; + case 3: eEol = EEolType::carriage_return; break; + default: eEol = EEolType::none; break; } pcEditView->GetCommander().HandleCommand( Index, true, (LPARAM)Argument[0], (LPARAM)nCharCode, (LPARAM)eEol, 0); @@ -1649,22 +1649,22 @@ bool CMacro::HandleFunction(CEditView *View, EFunctionCode ID, const VARIANT *Ar { int n = 0; switch( View->m_pcEditDoc->m_cDocEditor.GetNewLineCode() ){ - case EOL_CRLF: + case EEolType::cr_and_lf: n = 0; break; - case EOL_CR: + case EEolType::carriage_return: n = 1; break; - case EOL_LF: + case EEolType::line_feed: n = 2; break; - case EOL_NEL: + case EEolType::next_line: n = 3; break; - case EOL_LS: + case EEolType::line_separator: n = 4; break; - case EOL_PS: + case EEolType::paragraph_separator: n = 5; break; } diff --git a/sakura_core/typeprop/CPropTypesWindow.cpp b/sakura_core/typeprop/CPropTypesWindow.cpp index aa99b0681e..d723764f53 100644 --- a/sakura_core/typeprop/CPropTypesWindow.cpp +++ b/sakura_core/typeprop/CPropTypesWindow.cpp @@ -102,12 +102,12 @@ static const wchar_t* aszEolStr[] = { L"PS", }; static const EEolType aeEolType[] = { - EOL_CRLF, - EOL_LF, - EOL_CR, - EOL_NEL, - EOL_LS, - EOL_PS, + EEolType::cr_and_lf, + EEolType::line_feed, + EEolType::carriage_return, + EEolType::next_line, + EEolType::line_separator, + EEolType::paragraph_separator, }; // IMEのオープン状態復帰用 diff --git a/sakura_core/types/CType.cpp b/sakura_core/types/CType.cpp index 094b128820..5ca81b8ae8 100644 --- a/sakura_core/types/CType.cpp +++ b/sakura_core/types/CType.cpp @@ -198,7 +198,7 @@ void _DefaultConfig(STypeConfig* pType) // 文字コード設定 pType->m_encoding.m_bPriorCesu8 = false; pType->m_encoding.m_eDefaultCodetype = CODE_UTF8; - pType->m_encoding.m_eDefaultEoltype = EOL_CRLF; + pType->m_encoding.m_eDefaultEoltype = EEolType::cr_and_lf; pType->m_encoding.m_bDefaultBom = false; //@@@2002.2.4 YAZAKI diff --git a/sakura_core/util/string_ex2.cpp b/sakura_core/util/string_ex2.cpp index 18851565ad..45ebfccd55 100644 --- a/sakura_core/util/string_ex2.cpp +++ b/sakura_core/util/string_ex2.cpp @@ -124,7 +124,7 @@ const char* GetNextLine( nBgn = *pnBgn; // May 15, 2000 genta - pcEol->SetType( EOL_NONE ); + pcEol->SetType( EEolType::none ); if( *pnBgn >= nDataLen ){ return NULL; } @@ -159,7 +159,7 @@ const wchar_t* GetNextLineW( int nBgn; nBgn = *pnBgn; - pcEol->SetType( EOL_NONE ); + pcEol->SetType( EEolType::none ); if( *pnBgn >= nDataLen ){ return NULL; } diff --git a/sakura_core/view/CCaret.cpp b/sakura_core/view/CCaret.cpp index 4a793037d0..2d09e4615b 100644 --- a/sakura_core/view/CCaret.cpp +++ b/sakura_core/view/CCaret.cpp @@ -435,7 +435,7 @@ BOOL CCaret::GetAdjustCursorPos( if( 0 < nLayoutLineCount ){ ptPosXY2.y = nLayoutLineCount - 1; const CLayout* pcLayout = m_pEditDoc->m_cLayoutMgr.SearchLineByLayoutY( ptPosXY2.GetY2() ); - if( pcLayout->GetLayoutEol() == EOL_NONE ){ + if( pcLayout->GetLayoutEol() == EEolType::none ){ ptPosXY2.x = m_pEditView->LineIndexToColumn( pcLayout, (CLogicInt)pcLayout->GetLengthWithEOL() ); // [EOF]のみ折り返すのはやめる // 2009.02.17 ryoji // 復活するなら ptPosXY2.x に折り返し行インデントを適用するのがよい @@ -879,7 +879,7 @@ CLayoutInt CCaret::Cursor_UPDOWN( CLayoutInt nMoveLines, bool bSelect ) // 現在のキャレットY座標 + nMoveLinesが正しいレイアウト行の範囲内に収まるように nMoveLinesを調整する。 if( nMoveLines > 0 ) { // 下移動。 - const bool existsEOFOnlyLine = pLayoutMgr->GetBottomLayout() && pLayoutMgr->GetBottomLayout()->GetLayoutEol() != EOL_NONE + const bool existsEOFOnlyLine = pLayoutMgr->GetBottomLayout() && pLayoutMgr->GetBottomLayout()->GetLayoutEol() != EEolType::none || pLayoutMgr->GetLineCount() == 0; const CLayoutInt maxLayoutLine = pLayoutMgr->GetLineCount() + (existsEOFOnlyLine ? 1 : 0 ) - 1; // 移動先が EOFのみの行を含めたレイアウト行数未満になるように移動量を規正する。 @@ -1095,7 +1095,7 @@ CLayoutInt CCaret::MoveCursorProperly( if( ptNewXY.y >= m_pEditDoc->m_cLayoutMgr.GetLineCount() && (m_pEditView->GetSelectionInfo().IsMouseSelecting() && m_pEditView->GetSelectionInfo().IsBoxSelecting()) ){ const CLayout* layoutEnd = m_pEditDoc->m_cLayoutMgr.GetBottomLayout(); - bool bEofOnly = (layoutEnd && layoutEnd->GetLayoutEol() != EOL_NONE) || NULL == layoutEnd; + bool bEofOnly = (layoutEnd && layoutEnd->GetLayoutEol() != EEolType::none) || NULL == layoutEnd; // 2012.01.09 ぴったり[EOF]位置にある場合は位置を維持(1つ上の行にしない) if( bEofOnly && ptNewXY.y == m_pEditDoc->m_cLayoutMgr.GetLineCount() && ptNewXY.x == 0 ){ }else{ diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index b01a736692..fd91799a48 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -1789,7 +1789,7 @@ void CEditView::SplitBoxOnOff( BOOL bVert, BOOL bHorz, BOOL bSizeBox ) */ bool CEditView::GetSelectedDataSimple( CNativeW &cmemBuf ) { - return GetSelectedData(&cmemBuf, FALSE, NULL, FALSE, false, EOL_UNKNOWN); + return GetSelectedData(&cmemBuf, FALSE, NULL, FALSE, false, EEolType::auto_detect); } /* 選択範囲のデータを取得 @@ -1801,7 +1801,7 @@ bool CEditView::GetSelectedData( const wchar_t* pszQuote, /* 先頭に付ける引用符 */ BOOL bWithLineNumber, /* 行番号を付与する */ bool bAddCRLFWhenCopy, /* 折り返し位置で改行記号を入れる */ - EEolType neweol // コピー後の改行コード EOL_NONEはコード保存 + EEolType neweol // コピー後の改行コード EEolType::noneはコード保存 ) { const wchar_t* pLine; @@ -1923,7 +1923,7 @@ bool CEditView::GetSelectedData( } // 改行コードについて。 - if ( neweol == EOL_UNKNOWN ) + if ( neweol == EEolType::auto_detect ) { nBufSize += wcslen(WCODE::CRLF); } @@ -1978,11 +1978,11 @@ bool CEditView::GetSelectedData( cmemBuf->AppendString( pszLineNum ); } - if( EOL_NONE != pcLayout->GetLayoutEol() ){ + if( EEolType::none != pcLayout->GetLayoutEol() ){ if( nIdxTo >= nLineLen ){ cmemBuf->AppendString( &pLine[nIdxFrom], nLineLen - 1 - nIdxFrom ); // Jul. 25, 2000 genta - cmemBuf->AppendString( ( neweol == EOL_UNKNOWN ) ? + cmemBuf->AppendString( ( neweol == EEolType::auto_detect ) ? (pcLayout->GetLayoutEol()).GetValue2() : // コード保存 appendEol.GetValue2() ); // 新規改行コード } @@ -1997,7 +1997,7 @@ bool CEditView::GetSelectedData( bWithLineNumber /* 行番号を付与する */ ){ // Jul. 25, 2000 genta - cmemBuf->AppendString(( neweol == EOL_UNKNOWN ) ? + cmemBuf->AppendString(( neweol == EEolType::auto_detect ) ? m_pcEditDoc->m_cDocEditor.GetNewLineCode().GetValue2() : // コード保存 appendEol.GetValue2() ); // 新規改行コード } diff --git a/sakura_core/view/CEditView.h b/sakura_core/view/CEditView.h index f7d0cf42b9..d8a2b489c4 100644 --- a/sakura_core/view/CEditView.h +++ b/sakura_core/view/CEditView.h @@ -322,7 +322,7 @@ class CEditView // 2002/01/19 novice public属性に変更 bool GetSelectedDataSimple( CNativeW& cmemBuf );// 選択範囲のデータを取得 bool GetSelectedDataOne( CNativeW& cmemBuf, int nMaxLen ); - bool GetSelectedData( CNativeW* cmemBuf, BOOL bLineOnly, const wchar_t* pszQuote, BOOL bWithLineNumber, bool bAddCRLFWhenCopy, EEolType neweol = EOL_UNKNOWN);/* 選択範囲のデータを取得 */ + bool GetSelectedData( CNativeW* cmemBuf, BOOL bLineOnly, const wchar_t* pszQuote, BOOL bWithLineNumber, bool bAddCRLFWhenCopy, EEolType neweol = EEolType::auto_detect);/* 選択範囲のデータを取得 */ int IsCurrentPositionSelected( CLayoutPoint ptCaretPos ); /* 指定カーソル位置が選択エリア内にあるか */ int IsCurrentPositionSelectedTEST( const CLayoutPoint& ptCaretPos, const CLayoutRange& sSelect ) const;/* 指定カーソル位置が選択エリア内にあるか */ // 2006.07.09 genta 行桁指定によるカーソル移動(選択領域を考慮) diff --git a/sakura_core/view/CEditView_Command.cpp b/sakura_core/view/CEditView_Command.cpp index e94ee050da..41faaab851 100644 --- a/sakura_core/view/CEditView_Command.cpp +++ b/sakura_core/view/CEditView_Command.cpp @@ -432,12 +432,12 @@ void CEditView::CopyCurLine( cmemBuf.SetString( pcLayout->GetPtr(), pcLayout->GetLengthWithoutEOL() ); if( pcLayout->GetLayoutEol().GetLen() != 0 ){ cmemBuf.AppendString( - ( neweol == EOL_UNKNOWN ) ? + ( neweol == EEolType::auto_detect ) ? pcLayout->GetLayoutEol().GetValue2() : CEol(neweol).GetValue2() ); }else if( bAddCRLFWhenCopy ){ // 2007.10.08 ryoji bAddCRLFWhenCopy対応処理追加 cmemBuf.AppendString( - ( neweol == EOL_UNKNOWN ) ? + ( neweol == EEolType::auto_detect ) ? WCODE::CRLF : CEol(neweol).GetValue2() ); } diff --git a/sakura_core/view/CEditView_Command_New.cpp b/sakura_core/view/CEditView_Command_New.cpp index 8eb79fc5dd..48d15c7ddf 100644 --- a/sakura_core/view/CEditView_Command_New.cpp +++ b/sakura_core/view/CEditView_Command_New.cpp @@ -138,7 +138,7 @@ void CEditView::InsertData_CEditView( int nSpWidth = GetTextMetrics().CalcTextWidth3(L" ", 1); // 終端直前から挿入位置まで空白を埋める為の処理 // 行終端が何らかの改行コードか? - if( EOL_NONE != pcLayout->GetLayoutEol() ){ + if( EEolType::none != pcLayout->GetLayoutEol() ){ nIdxFrom = nLineLen - CLogicInt(1); cMem.AllocStringBuffer( (Int)(ptInsertPos.GetX2() - nLineAllColLen + 1)/ nSpWidth + nDataLen ); for( int i = 0; i < ptInsertPos.GetX2() - nLineAllColLen + 1; i += nSpWidth ){ @@ -167,7 +167,7 @@ void CEditView::InsertData_CEditView( else{ // 更新が前行からになる可能性を調べる // 2009.02.17 ryoji const CLayout* pcLayoutWk = m_pcEditDoc->m_cLayoutMgr.GetBottomLayout(); - if( pcLayoutWk && pcLayoutWk->GetLayoutEol() == EOL_NONE && bKinsoku ){ // 折り返しレイアウト行か?(前行の終端で調査) + if( pcLayoutWk && pcLayoutWk->GetLayoutEol() == EEolType::none && bKinsoku ){ // 折り返しレイアウト行か?(前行の終端で調査) bHintPrev = true; // 更新が前行からになる可能性がある } if( 0 < ptInsertPos.GetX2() ){ @@ -647,7 +647,7 @@ void CEditView::DeleteData( goto end_of_func; } /* 改行で終わっているか */ - if( ( EOL_NONE != pcLayout->GetLayoutEol() ) ){ + if( ( EEolType::none != pcLayout->GetLayoutEol() ) ){ goto end_of_func; } /*ファイルの最後に移動 */ diff --git a/sakura_core/view/CEditView_Diff.cpp b/sakura_core/view/CEditView_Diff.cpp index 51c1956693..d9836673c1 100644 --- a/sakura_core/view/CEditView_Diff.cpp +++ b/sakura_core/view/CEditView_Diff.cpp @@ -477,7 +477,7 @@ BOOL CEditView::MakeDiffTmpFile( WCHAR* filename, HWND hWnd, ECodeType code, boo SSaveInfo( filename, code, - EOL_NONE, + EEolType::none, bBom ) ); diff --git a/sakura_core/view/CViewSelect.cpp b/sakura_core/view/CViewSelect.cpp index 91421b11c1..63d68b976c 100644 --- a/sakura_core/view/CViewSelect.cpp +++ b/sakura_core/view/CViewSelect.cpp @@ -387,7 +387,7 @@ void CViewSelect::DrawSelectArea2( HDC hdc ) const // 2006.10.01 Moca End // 2011.12.26 EOFのぶら下がり行は反転し、EOFのみの行は反転しない const CLayout* pBottom = pView->m_pcEditDoc->m_cLayoutMgr.GetBottomLayout(); - if( pBottom && pBottom->GetLayoutEol() == EOL_NONE ){ + if( pBottom && pBottom->GetLayoutEol() == EEolType::none ){ ptLast.x = 0; ptLast.y++; } diff --git a/sakura_core/view/figures/CFigure_Eol.cpp b/sakura_core/view/figures/CFigure_Eol.cpp index 720ec4e4bb..a731889716 100644 --- a/sakura_core/view/figures/CFigure_Eol.cpp +++ b/sakura_core/view/figures/CFigure_Eol.cpp @@ -339,7 +339,7 @@ void _DrawEOL( HPEN hPenOld = (HPEN)SelectObject(gr, hPen); switch( cEol.GetType() ){ - case EOL_CRLF: // 下左矢印 + case EEolType::cr_and_lf: // 下左矢印 { sx = rcEol.left; //X左端 sy = rcEol.top + ( rcEol.Height() / 2); //Y中心 @@ -376,7 +376,7 @@ void _DrawEOL( } } break; - case EOL_CR: // 左向き矢印 // 2007.08.17 ryoji EOL_LF -> EOL_CR + case EEolType::carriage_return: // 左向き矢印 // 2007.08.17 ryoji EEolType::line_feed -> EEolType::carriage_return { sx = rcEol.left; sy = rcEol.top + ( rcEol.Height() / 2 ); @@ -409,7 +409,7 @@ void _DrawEOL( } } break; - case EOL_LF: // 下向き矢印 // 2007.08.17 ryoji EOL_CR -> EOL_LF + case EEolType::line_feed: // 下向き矢印 // 2007.08.17 ryoji EEolType::carriage_return -> EEolType::line_feed // 2013.04.22 Moca NEL,LS,PS対応。暫定でLFと同じにする { sx = rcEol.left + ( rcEol.Width() / 2 ); @@ -443,9 +443,9 @@ void _DrawEOL( } } break; - case EOL_NEL: - case EOL_LS: - case EOL_PS: + case EEolType::next_line: + case EEolType::line_separator: + case EEolType::paragraph_separator: { // 左下矢印(折れ曲がりなし) sx = rcEol.left; //X左端 diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index f6cfda4cec..381a49e032 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -798,7 +798,7 @@ void CEditWnd::SetDocumentTypeWhenCreate( } else{ GetDocument()->SetDocumentEncoding( nCharCode, CCodeTypeName( nCharCode ).IsBomDefOn() ); - GetDocument()->m_cDocEditor.m_cNewLineCode = EOL_CRLF; + GetDocument()->m_cDocEditor.m_cNewLineCode = EEolType::cr_and_lf; } } @@ -1478,12 +1478,12 @@ LRESULT CEditWnd::DispatchEvent( ::DestroyMenu( hMenuPopUp ); int nEOLCode = 0; switch(nId){ - case F_CHGMOD_EOL_CRLF: nEOLCode = EOL_CRLF; break; - case F_CHGMOD_EOL_CR: nEOLCode = EOL_CR; break; - case F_CHGMOD_EOL_LF: nEOLCode = EOL_LF; break; - case F_CHGMOD_EOL_NEL: nEOLCode = EOL_NEL; break; - case F_CHGMOD_EOL_PS: nEOLCode = EOL_PS; break; - case F_CHGMOD_EOL_LS: nEOLCode = EOL_LS; break; + case F_CHGMOD_EOL_CRLF: nEOLCode = EEolType::cr_and_lf; break; + case F_CHGMOD_EOL_CR: nEOLCode = EEolType::carriage_return; break; + case F_CHGMOD_EOL_LF: nEOLCode = EEolType::line_feed; break; + case F_CHGMOD_EOL_NEL: nEOLCode = EEolType::next_line; break; + case F_CHGMOD_EOL_PS: nEOLCode = EEolType::paragraph_separator; break; + case F_CHGMOD_EOL_LS: nEOLCode = EEolType::line_separator; break; default: nEOLCode = -1; } diff --git a/tests/unittests/test-ceol.cpp b/tests/unittests/test-ceol.cpp index d4807be7f3..a3a612fd09 100644 --- a/tests/unittests/test-ceol.cpp +++ b/tests/unittests/test-ceol.cpp @@ -32,12 +32,12 @@ TEST(CEol, CEol) { // 初期値は none CEol cEol; - EXPECT_EQ(EOL_NONE, cEol.GetType()); - EXPECT_EQ(EOL_NONE, (EEolType)cEol); + EXPECT_EQ(EEolType::none, cEol.GetType()); + EXPECT_EQ(EEolType::none, (EEolType)cEol); // 代入したら変更できる - cEol = EEolType::EOL_LF; - EXPECT_EQ(EEolType::EOL_LF, cEol.GetType()); + cEol = EEolType::line_feed; + EXPECT_EQ(EEolType::line_feed, cEol.GetType()); // コピーの確認 CEol cCopied = cEol; @@ -49,7 +49,7 @@ TEST(CEol, CEol) // CEolは変な値を格納できない(入れようとした場合CRLFになる) cEol = eBadValue; - EXPECT_EQ(EEolType::EOL_CRLF, cEol.GetType()); + EXPECT_EQ(EEolType::cr_and_lf, cEol.GetType()); } /*! @@ -57,9 +57,9 @@ TEST(CEol, CEol) */ TEST(CEol, typeNone) { - CEol cEol(EOL_NONE); + CEol cEol(EEolType::none); - EXPECT_EQ(EOL_NONE, cEol.GetType()); + EXPECT_EQ(EEolType::none, cEol.GetType()); EXPECT_EQ(0, cEol.GetLen()); EXPECT_STREQ(L"改行無", cEol.GetName()); EXPECT_STREQ(L"", cEol.GetValue2()); @@ -71,9 +71,9 @@ TEST(CEol, typeNone) */ TEST(CEol, typeCrlf) { - CEol cEol(EOL_CRLF); + CEol cEol(EEolType::cr_and_lf); - EXPECT_EQ(EOL_CRLF, cEol.GetType()); + EXPECT_EQ(EEolType::cr_and_lf, cEol.GetType()); EXPECT_EQ(2, cEol.GetLen()); EXPECT_STREQ(L"CRLF", cEol.GetName()); EXPECT_STREQ(L"\r\n", cEol.GetValue2()); @@ -85,9 +85,9 @@ TEST(CEol, typeCrlf) */ TEST(CEol, typeLf) { - CEol cEol(EOL_LF); + CEol cEol(EEolType::line_feed); - EXPECT_EQ(EOL_LF, cEol.GetType()); + EXPECT_EQ(EEolType::line_feed, cEol.GetType()); EXPECT_EQ(1, cEol.GetLen()); EXPECT_STREQ(L"LF", cEol.GetName()); EXPECT_STREQ(L"\n", cEol.GetValue2()); @@ -99,9 +99,9 @@ TEST(CEol, typeLf) */ TEST(CEol, typeCr) { - CEol cEol(EOL_CR); + CEol cEol(EEolType::carriage_return); - EXPECT_EQ(EOL_CR, cEol.GetType()); + EXPECT_EQ(EEolType::carriage_return, cEol.GetType()); EXPECT_EQ(1, cEol.GetLen()); EXPECT_STREQ(L"CR", cEol.GetName()); EXPECT_STREQ(L"\r", cEol.GetValue2()); @@ -113,9 +113,9 @@ TEST(CEol, typeCr) */ TEST(CEol, typeNel) { - CEol cEol(EOL_NEL); + CEol cEol(EEolType::next_line); - EXPECT_EQ(EOL_NEL, cEol.GetType()); + EXPECT_EQ(EEolType::next_line, cEol.GetType()); EXPECT_EQ(1, cEol.GetLen()); EXPECT_STREQ(L"NEL", cEol.GetName()); EXPECT_STREQ(L"\x85", cEol.GetValue2()); @@ -127,9 +127,9 @@ TEST(CEol, typeNel) */ TEST(CEol, typeLs) { - CEol cEol(EOL_LS); + CEol cEol(EEolType::line_separator); - EXPECT_EQ(EOL_LS, cEol.GetType()); + EXPECT_EQ(EEolType::line_separator, cEol.GetType()); EXPECT_EQ(1, cEol.GetLen()); EXPECT_STREQ(L"LS", cEol.GetName()); EXPECT_STREQ(L"\u2028", cEol.GetValue2()); @@ -141,9 +141,9 @@ TEST(CEol, typeLs) */ TEST(CEol, typePs) { - CEol cEol(EOL_PS); + CEol cEol(EEolType::paragraph_separator); - EXPECT_EQ(EOL_PS, cEol.GetType()); + EXPECT_EQ(EEolType::paragraph_separator, cEol.GetType()); EXPECT_EQ(1, cEol.GetLen()); EXPECT_STREQ(L"PS", cEol.GetName()); EXPECT_STREQ(L"\u2029", cEol.GetValue2()); From e24fadb067dfe0b8788d3fec30e9a26351daeb51 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 27 Mar 2021 16:16:35 +0900 Subject: [PATCH 0563/1024] =?UTF-8?q?CEol=E5=A4=96=E9=83=A8=E3=81=A7?= =?UTF-8?q?=E3=81=AF=E5=87=BA=E6=9D=A5=E3=82=8B=E3=81=A0=E3=81=91EEolType?= =?UTF-8?q?=E3=82=92=E5=88=A4=E5=AE=9A=E3=81=97=E3=81=AA=E3=81=84=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E3=83=AA=E3=83=95=E3=82=A1=E3=82=AF=E3=82=BF?= =?UTF-8?q?=E3=83=AA=E3=83=B3=E3=82=B0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CCodeChecker.cpp | 4 ++-- sakura_core/CSearchAgent.cpp | 2 +- sakura_core/cmd/CViewCommander_Cursor.cpp | 12 ++++++------ sakura_core/cmd/CViewCommander_Edit.cpp | 4 ++-- sakura_core/cmd/CViewCommander_Edit_advanced.cpp | 8 ++++---- sakura_core/cmd/CViewCommander_Edit_word_line.cpp | 6 +++--- sakura_core/cmd/CViewCommander_ModeChange.cpp | 2 +- sakura_core/cmd/CViewCommander_Search.cpp | 2 +- sakura_core/convert/CDecode_UuDecode.cpp | 2 +- sakura_core/doc/CDocEditor.cpp | 8 +++----- sakura_core/doc/CDocFileOperation.cpp | 4 ++-- sakura_core/doc/CDocVisitor.cpp | 2 +- sakura_core/doc/layout/CLayoutMgr.cpp | 6 +++--- sakura_core/macro/CMacro.cpp | 2 +- sakura_core/view/CCaret.cpp | 6 +++--- sakura_core/view/CEditView.cpp | 2 +- sakura_core/view/CEditView_Command_New.cpp | 6 +++--- sakura_core/view/CViewSelect.cpp | 2 +- sakura_core/window/CEditWnd.cpp | 4 ++-- 19 files changed, 41 insertions(+), 43 deletions(-) diff --git a/sakura_core/CCodeChecker.cpp b/sakura_core/CCodeChecker.cpp index c6ad493ca8..ea4dc40721 100644 --- a/sakura_core/CCodeChecker.cpp +++ b/sakura_core/CCodeChecker.cpp @@ -42,7 +42,7 @@ static bool _CheckSavingEolcode(const CDocLineMgr& pcDocLineMgr, CEol cEolType) { bool bMix = false; - if( cEolType == EEolType::none ){ //改行コード変換なし + if( cEolType.IsNone() ){ //改行コード変換なし CEol cEolCheck; //比較対象EOL const CDocLine* pcDocLine = pcDocLineMgr.GetDocLineTop(); if( pcDocLine ){ @@ -50,7 +50,7 @@ static bool _CheckSavingEolcode(const CDocLineMgr& pcDocLineMgr, CEol cEolType) } while( pcDocLine ){ CEol cEol = pcDocLine->GetEol(); - if( cEol != cEolCheck && cEol != EEolType::none ){ + if( cEol != cEolCheck && cEol.IsValid() ){ bMix = true; break; } diff --git a/sakura_core/CSearchAgent.cpp b/sakura_core/CSearchAgent.cpp index 6588b106e3..7e25f96cbb 100644 --- a/sakura_core/CSearchAgent.cpp +++ b/sakura_core/CSearchAgent.cpp @@ -871,7 +871,7 @@ void CSearchAgent::ReplaceData( DocLineReplaceArg* pArg ) goto prev_line; } /* 改行も削除するんかぃのぉ・・・? */ - if( EEolType::none != pCDocLine->GetEol() && + if( pCDocLine->GetEol().IsValid() && nWorkPos + nWorkLen > nLineLen - pCDocLine->GetEol().GetLen() // 2002/2/10 aroka CMemory変更 ){ /* 削除する長さに改行も含める */ diff --git a/sakura_core/cmd/CViewCommander_Cursor.cpp b/sakura_core/cmd/CViewCommander_Cursor.cpp index eb8a9579b1..8f9f9cd230 100644 --- a/sakura_core/cmd/CViewCommander_Cursor.cpp +++ b/sakura_core/cmd/CViewCommander_Cursor.cpp @@ -222,7 +222,7 @@ int CViewCommander::Command_LEFT( bool bSelect, bool bRepeat ) } } if (it.end()) { - const bool has_eol = EEolType::none != pcLayout->GetLayoutEol(); // 改行文字で終わっているか。 + const bool has_eol = pcLayout->GetLayoutEol().IsValid(); // 改行文字で終わっているか。 const CLayoutXInt dx_default = this->m_pCommanderView->GetTextMetrics().GetLayoutXDefault(); // 文字のない部分の移動量。 const CLayoutXInt eol_hosei = has_eol ? CLayoutXInt(-it.getColumnDelta() + dx_default) : CLayoutXInt(0); if (ptCaretMove.GetX2() <= it.getColumn() + eol_hosei) { @@ -297,8 +297,8 @@ void CViewCommander::Command_RIGHT( bool bSelect, bool bIgnoreCurrentSelection, { // キャレット位置のレイアウト行について。 const CLayoutInt x_wrap = pcLayout->CalcLayoutWidth( GetDocument()->m_cLayoutMgr ); // 改行文字、または折り返しの位置。 - const bool wrapped = EEolType::none == pcLayout->GetLayoutEol(); // 折り返しているか、改行文字で終わっているか。これにより x_wrapの意味が変わる。 - const bool nextline_exists = pcLayout->GetNextLayout() || pcLayout->GetLayoutEol() != EEolType::none; // EOFのみの行も含め、キャレットが移動可能な次行が存在するか。 + const bool wrapped = pcLayout->GetLayoutEol().IsNone(); // 折り返しているか、改行文字で終わっているか。これにより x_wrapの意味が変わる。 + const bool nextline_exists = pcLayout->GetNextLayout() || pcLayout->GetLayoutEol().IsValid(); // EOFのみの行も含め、キャレットが移動可能な次行が存在するか。 const CLayoutXInt dx_default = this->m_pCommanderView->GetTextMetrics().GetLayoutXDefault(); // 文字のない部分(※改行マーク部分を含む)の移動量。 @@ -1288,7 +1288,7 @@ void CViewCommander::Command_MODIFYLINE_NEXT( bool bSelect ) bool bSkip = false; CLogicPoint pos; if( pcDocLineLast != NULL ){ - if( pcDocLineLast->GetEol() == EEolType::none ){ + if( pcDocLineLast->GetEol().IsNone() ){ // ぶら下がり[EOF] pos.x = pcDocLineLast->GetLengthWithoutEOL(); pos.y = GetDocument()->m_cDocLineMgr.GetLineCount() - 1; @@ -1349,7 +1349,7 @@ void CViewCommander::Command_MODIFYLINE_PREV( bool bSelect ) } if( !bLast ){ const CDocLine* pcDocLineLast = GetDocument()->m_cDocLineMgr.GetDocLineBottom(); - if( pcDocLineLast != NULL && pcDocLineLast->GetEol() == EEolType::none ){ + if( pcDocLineLast != NULL && pcDocLineLast->GetEol().IsNone() ){ CLogicPoint pos; pos.x = pcDocLine->GetLengthWithoutEOL(); pos.y = GetDocument()->m_cDocLineMgr.GetLineCount() - 1; @@ -1415,7 +1415,7 @@ void CViewCommander::Command_MODIFYLINE_PREV( bool bSelect ) if( CModifyVisitor().IsLineModified(pcDocLineTemp, nSaveSeq) != false ){ // 最終行が変更行の場合は、[EOF]に止まる CLogicPoint pos; - if( pcDocLineTemp->GetEol() != EEolType::none ){ + if( pcDocLineTemp->GetEol().IsValid() ){ pos.x = 0; pos.y = GetDocument()->m_cDocLineMgr.GetLineCount(); pos.y++; diff --git a/sakura_core/cmd/CViewCommander_Edit.cpp b/sakura_core/cmd/CViewCommander_Edit.cpp index 51af8c3faf..9c35c7c133 100644 --- a/sakura_core/cmd/CViewCommander_Edit.cpp +++ b/sakura_core/cmd/CViewCommander_Edit.cpp @@ -791,7 +791,7 @@ void CViewCommander::Command_DELETE( void ) CLogicInt nIndex; nIndex = m_pCommanderView->LineColumnToIndex2( pcLayout, GetCaret().GetCaretLayoutPos().GetX2(), &nLineLen ); if( nLineLen != 0 ){ // 折り返しや改行コードより右の場合には nLineLen に行全体の表示桁数が入る - if( EEolType::none != pcLayout->GetLayoutEol().GetType() ){ // 行終端は改行コードか? + if( pcLayout->GetLayoutEol().IsValid() ){ // 行終端は改行コードか? Command_INSTEXT( true, L"", CLogicInt(0), FALSE ); // カーソル位置まで半角スペース挿入 }else{ // 行終端が折り返し // 折り返し行末ではスペース挿入後、次の文字を削除する // 2009.02.19 ryoji @@ -880,7 +880,7 @@ void CViewCommander::DelCharForOverwrite( const wchar_t* pszInput, int nLen ) CLogicInt nIdxTo = m_pCommanderView->LineColumnToIndex( pcLayout, GetCaret().GetCaretLayoutPos().GetX2() ); if( nIdxTo >= pcLayout->GetLengthWithoutEOL() ){ bEol = true; // 現在位置は改行または折り返し以後 - if( pcLayout->GetLayoutEol() != EEolType::none ){ + if( pcLayout->GetLayoutEol().IsValid() ){ if( GetDllShareData().m_Common.m_sEdit.m_bNotOverWriteCRLF ){ /* 改行は上書きしない */ /* 現在位置が改行ならば削除しない */ bDelete = FALSE; diff --git a/sakura_core/cmd/CViewCommander_Edit_advanced.cpp b/sakura_core/cmd/CViewCommander_Edit_advanced.cpp index 2c39fe709c..c29de8742a 100644 --- a/sakura_core/cmd/CViewCommander_Edit_advanced.cpp +++ b/sakura_core/cmd/CViewCommander_Edit_advanced.cpp @@ -215,7 +215,7 @@ void CViewCommander::Command_INDENT( const wchar_t* const pData, const CLogicInt } const bool emptyLine = ! pcLayout || 0 == pcLayout->GetLengthWithoutEOL(); const bool selectionIsOutOfLine = reachEndOfLayout && ( - (pcLayout && pcLayout->GetLayoutEol() != EEolType::none) ? xLayoutFrom == xLayoutTo : xLayoutTo < rcSel.GetFrom().x + (pcLayout && pcLayout->GetLayoutEol().IsValid()) ? xLayoutFrom == xLayoutTo : xLayoutTo < rcSel.GetFrom().x ); // 入力文字の挿入位置 @@ -675,7 +675,7 @@ void CViewCommander::Command_SORT(BOOL bAsc) //bAsc:TRUE=昇順,FALSE=降順 if ( sSelectOld.GetTo().x > 0 ) { // 2006.03.31 Moca nSelectLineToOldは、物理行なのでLayout系からDocLine系に修正 const CDocLine* pcDocLine = GetDocument()->m_cDocLineMgr.GetLine( sSelectOld.GetTo().GetY2() ); - if( NULL != pcDocLine && EEolType::none != pcDocLine->GetEol() ){ + if( NULL != pcDocLine && pcDocLine->GetEol().IsValid() ){ sSelectOld.GetToPointer()->y++; } } @@ -844,14 +844,14 @@ void CViewCommander::Command_MERGE(void) if ( sSelectOld.GetTo().x > 0 ) { #if 0 const CLayout* pcLayout=GetDocument()->m_cLayoutMgr.SearchLineByLayoutY(m_pCommanderView->GetSelectionInfo().m_sSelect.GetTo().GetY2()); //2007.10.09 kobake 単位混在バグ修正 - if( NULL != pcLayout && EEolType::none != pcLayout->GetLayoutEol() ){ + if( NULL != pcLayout && pcLayout->GetLayoutEol().IsValid() ){ sSelectOld.GetToPointer()->y++; //sSelectOld.GetTo().y++; } #else // 2010.08.22 Moca ソートと仕様を合わせる const CDocLine* pcDocLine = GetDocument()->m_cDocLineMgr.GetLine( sSelectOld.GetTo().GetY2() ); - if( NULL != pcDocLine && EEolType::none != pcDocLine->GetEol() ){ + if( NULL != pcDocLine && pcDocLine->GetEol().IsValid() ){ sSelectOld.GetToPointer()->y++; } #endif diff --git a/sakura_core/cmd/CViewCommander_Edit_word_line.cpp b/sakura_core/cmd/CViewCommander_Edit_word_line.cpp index 440c2e9819..9541b08a23 100644 --- a/sakura_core/cmd/CViewCommander_Edit_word_line.cpp +++ b/sakura_core/cmd/CViewCommander_Edit_word_line.cpp @@ -166,7 +166,7 @@ void CViewCommander::Command_LineCutToEnd( void ) CLayoutPoint ptPos; - if( EEolType::none == pCLayout->GetDocLineRef()->GetEol() ){ /* 改行コードの種類 */ + if( pCLayout->GetDocLineRef()->GetEol().IsNone() ){ /* 改行コードの種類 */ GetDocument()->m_cLayoutMgr.LogicToLayout( CLogicPoint( pCLayout->GetDocLineRef()->GetLengthWithEOL(), @@ -246,7 +246,7 @@ void CViewCommander::Command_LineDeleteToEnd( void ) CLayoutPoint ptPos; - if( EEolType::none == pCLayout->GetDocLineRef()->GetEol() ){ /* 改行コードの種類 */ + if( pCLayout->GetDocLineRef()->GetEol().IsNone() ){ /* 改行コードの種類 */ GetDocument()->m_cLayoutMgr.LogicToLayout( CLogicPoint( pCLayout->GetDocLineRef()->GetLengthWithEOL(), @@ -414,7 +414,7 @@ void CViewCommander::Command_DUPLICATELINE( void ) || ・最終行でない || →折り返しである */ - bCRLF = ( EEolType::none == pcLayout->GetLayoutEol() ) ? FALSE : TRUE; + bCRLF = ( pcLayout->GetLayoutEol().IsNone() ) ? FALSE : TRUE; bAddCRLF = FALSE; if( !bCRLF ){ diff --git a/sakura_core/cmd/CViewCommander_ModeChange.cpp b/sakura_core/cmd/CViewCommander_ModeChange.cpp index 3140252f96..58fb926399 100644 --- a/sakura_core/cmd/CViewCommander_ModeChange.cpp +++ b/sakura_core/cmd/CViewCommander_ModeChange.cpp @@ -60,7 +60,7 @@ void CViewCommander::Command_CHGMOD_INS( void ) @date 2003.06.23 新規作成 */ void CViewCommander::Command_CHGMOD_EOL( EEolType e ){ - if( EEolType::none < e && e < EEolType::code_max ){ + if( CEol::IsValid( e ) ){ GetDocument()->m_cDocEditor.SetNewLineCode( e ); // ステータスバーを更新するため // キャレットの行桁位置を表示する関数を呼び出す diff --git a/sakura_core/cmd/CViewCommander_Search.cpp b/sakura_core/cmd/CViewCommander_Search.cpp index 97e3d6d72e..99eafaf63b 100644 --- a/sakura_core/cmd/CViewCommander_Search.cpp +++ b/sakura_core/cmd/CViewCommander_Search.cpp @@ -1191,7 +1191,7 @@ void CViewCommander::Command_REPLACE_ALL() cSelectLogic.SetTo(CLogicPoint(CLogicXInt(0), y + CLogicInt(1))); // 次行の行頭 if( GetDocument()->m_cDocLineMgr.GetLineCount() == y + CLogicInt(1) ){ const CDocLine* pLine = GetDocument()->m_cDocLineMgr.GetLine(y); - if( pLine->GetEol() == EEolType::none ){ + if( pLine->GetEol().IsNone() ){ // EOFは最終データ行にぶら下がりなので、選択終端は行末 cSelectLogic.SetTo(CLogicPoint(pLine->GetLengthWithEOL(), y)); // 対象行の行末 } diff --git a/sakura_core/convert/CDecode_UuDecode.cpp b/sakura_core/convert/CDecode_UuDecode.cpp index a7af4951f5..3f74d92971 100644 --- a/sakura_core/convert/CDecode_UuDecode.cpp +++ b/sakura_core/convert/CDecode_UuDecode.cpp @@ -67,7 +67,7 @@ bool CDecode_UuDecode::DoDecode( const CNativeW& pcSrc, CMemory* pcDst ) // ボディーを処理 while( (pline = GetNextLineW(psrc, nsrclen, &nlinelen, &ncuridx, &ceol, false)) != NULL ){ - if( ceol.GetType() != EEolType::cr_and_lf ){ + if( ceol != EEolType::cr_and_lf ){ pcDst->_AppendSz(""); return false; } diff --git a/sakura_core/doc/CDocEditor.cpp b/sakura_core/doc/CDocEditor.cpp index d195abbe44..40fcb320d9 100644 --- a/sakura_core/doc/CDocEditor.cpp +++ b/sakura_core/doc/CDocEditor.cpp @@ -88,11 +88,9 @@ void CDocEditor::OnAfterLoad(const SLoadInfo& sLoadInfo) else{ SetNewLineCode( EEolType::cr_and_lf ); } - CDocLine* pFirstlineinfo = pcDoc->m_cDocLineMgr.GetLine( CLogicInt(0) ); - if( pFirstlineinfo != NULL ){ - EEolType t = pFirstlineinfo->GetEol(); - if( t != EEolType::none && t != EEolType::auto_detect ){ - SetNewLineCode( t ); + if( CDocLine* pFirstline = pcDoc->m_cDocLineMgr.GetLine( CLogicInt(0) ); pFirstline != nullptr ){ + if( const auto cEol = pFirstline->GetEol(); cEol.IsValid() ){ + SetNewLineCode( cEol.GetType() ); } } } diff --git a/sakura_core/doc/CDocFileOperation.cpp b/sakura_core/doc/CDocFileOperation.cpp index 337b15a7c7..906a94918a 100644 --- a/sakura_core/doc/CDocFileOperation.cpp +++ b/sakura_core/doc/CDocFileOperation.cpp @@ -319,7 +319,7 @@ bool CDocFileOperation::DoSaveFlow(SSaveInfo* pSaveInfo) if(pSaveInfo->bOverwriteMode){ // 無変更の場合は警告音を出し、終了 if (!m_pcDocRef->m_cDocEditor.IsModified() && - pSaveInfo->cEol==EEolType::none && //※改行コード指定保存がリクエストされた場合は、「変更があったもの」とみなす + pSaveInfo->cEol.IsNone() && //※改行コード指定保存がリクエストされた場合は、「変更があったもの」とみなす !pSaveInfo->bChgCodeSet) { // 文字コードセットの変更が有った場合は、「変更があったもの」とみなす CEditApp::getInstance()->m_cSoundSet.NeedlessToSaveBeep(); throw CFlowInterruption(); @@ -408,7 +408,7 @@ bool CDocFileOperation::FileSaveAs( const WCHAR* filename,ECodeType eCodeType, E if( filename ){ // ダイアログなし保存、またはマクロの引数あり sSaveInfo.cFilePath = filename; - if( EEolType::none <= eEolType && eEolType < EEolType::code_max ){ + if( CEol::IsNoneOrValid( eEolType ) ){ sSaveInfo.cEol = eEolType; } if( IsValidCodeType(eCodeType) && eCodeType != sSaveInfo.eCharCode ){ diff --git a/sakura_core/doc/CDocVisitor.cpp b/sakura_core/doc/CDocVisitor.cpp index 8a03988088..9767ea40fb 100644 --- a/sakura_core/doc/CDocVisitor.cpp +++ b/sakura_core/doc/CDocVisitor.cpp @@ -59,7 +59,7 @@ void CDocVisitor::SetAllEol(CEol cEol) CDocLine* pcDocLine = m_pcDocRef->m_cDocLineMgr.GetLine(nLine); //#######非効率 if(!pcDocLine)break; //改行を置換 - if(pcDocLine->GetEol()!=EEolType::none && pcDocLine->GetEol()!=cEol){ + if( pcDocLine->GetEol().IsValid() && pcDocLine->GetEol() != cEol ){ CLogicRange sRange; sRange.SetFrom(CLogicPoint(pcDocLine->GetLengthWithoutEOL(),nLine)); sRange.SetTo(CLogicPoint(pcDocLine->GetLengthWithEOL(),nLine)); diff --git a/sakura_core/doc/layout/CLayoutMgr.cpp b/sakura_core/doc/layout/CLayoutMgr.cpp index 636bc79d94..90c67f8f1f 100644 --- a/sakura_core/doc/layout/CLayoutMgr.cpp +++ b/sakura_core/doc/layout/CLayoutMgr.cpp @@ -397,7 +397,7 @@ CLayout* CLayoutMgr::CreateLayout( colorInfo ); - if( EEolType::none == pCDocLine->GetEol() ){ + if( pCDocLine->GetEol().IsNone() ){ pLayout->m_cEol.SetType( EEolType::none );/* 改行コードの種類 */ }else{ if( pLayout->GetLogicOffset() + pLayout->GetLengthWithEOL() > @@ -462,7 +462,7 @@ bool CLayoutMgr::IsEndOfLine( return false; } - if( EEolType::none == pLayout->GetLayoutEol().GetType() ) + if( pLayout->GetLayoutEol().IsNone() ) { /* この行に改行はない */ /* この行の最後か? */ if( ptLinePos.x == (Int)pLayout->GetLengthWithEOL() ) return true; //$$ 単位混在 @@ -501,7 +501,7 @@ void CLayoutMgr::GetEndLayoutPos( } CLayout *btm = m_pLayoutBot; - if( btm->m_cEol != EEolType::none ){ + if( btm->m_cEol.IsValid() ){ // 末尾に改行がある ptLayoutEnd->Set(CLayoutInt(0), GetLineCount()); } diff --git a/sakura_core/macro/CMacro.cpp b/sakura_core/macro/CMacro.cpp index 83656bd4cc..1f28a82622 100644 --- a/sakura_core/macro/CMacro.cpp +++ b/sakura_core/macro/CMacro.cpp @@ -648,7 +648,7 @@ bool CMacro::HandleCommand( case 7: nEol = EEolType::paragraph_separator; break; default: nEol = EEolType::none; break; } - if( nEol != EEolType::none ){ + if( !CEol::IsNone( nEol ) ){ pcEditView->GetCommander().HandleCommand( Index, true, nEol, 0, 0, 0 ); } } diff --git a/sakura_core/view/CCaret.cpp b/sakura_core/view/CCaret.cpp index 2d09e4615b..d6db7f289d 100644 --- a/sakura_core/view/CCaret.cpp +++ b/sakura_core/view/CCaret.cpp @@ -435,7 +435,7 @@ BOOL CCaret::GetAdjustCursorPos( if( 0 < nLayoutLineCount ){ ptPosXY2.y = nLayoutLineCount - 1; const CLayout* pcLayout = m_pEditDoc->m_cLayoutMgr.SearchLineByLayoutY( ptPosXY2.GetY2() ); - if( pcLayout->GetLayoutEol() == EEolType::none ){ + if( pcLayout->GetLayoutEol().IsNone() ){ ptPosXY2.x = m_pEditView->LineIndexToColumn( pcLayout, (CLogicInt)pcLayout->GetLengthWithEOL() ); // [EOF]のみ折り返すのはやめる // 2009.02.17 ryoji // 復活するなら ptPosXY2.x に折り返し行インデントを適用するのがよい @@ -879,7 +879,7 @@ CLayoutInt CCaret::Cursor_UPDOWN( CLayoutInt nMoveLines, bool bSelect ) // 現在のキャレットY座標 + nMoveLinesが正しいレイアウト行の範囲内に収まるように nMoveLinesを調整する。 if( nMoveLines > 0 ) { // 下移動。 - const bool existsEOFOnlyLine = pLayoutMgr->GetBottomLayout() && pLayoutMgr->GetBottomLayout()->GetLayoutEol() != EEolType::none + const bool existsEOFOnlyLine = pLayoutMgr->GetBottomLayout() && pLayoutMgr->GetBottomLayout()->GetLayoutEol().IsValid() || pLayoutMgr->GetLineCount() == 0; const CLayoutInt maxLayoutLine = pLayoutMgr->GetLineCount() + (existsEOFOnlyLine ? 1 : 0 ) - 1; // 移動先が EOFのみの行を含めたレイアウト行数未満になるように移動量を規正する。 @@ -1095,7 +1095,7 @@ CLayoutInt CCaret::MoveCursorProperly( if( ptNewXY.y >= m_pEditDoc->m_cLayoutMgr.GetLineCount() && (m_pEditView->GetSelectionInfo().IsMouseSelecting() && m_pEditView->GetSelectionInfo().IsBoxSelecting()) ){ const CLayout* layoutEnd = m_pEditDoc->m_cLayoutMgr.GetBottomLayout(); - bool bEofOnly = (layoutEnd && layoutEnd->GetLayoutEol() != EEolType::none) || NULL == layoutEnd; + bool bEofOnly = (layoutEnd && layoutEnd->GetLayoutEol().IsValid()) || NULL == layoutEnd; // 2012.01.09 ぴったり[EOF]位置にある場合は位置を維持(1つ上の行にしない) if( bEofOnly && ptNewXY.y == m_pEditDoc->m_cLayoutMgr.GetLineCount() && ptNewXY.x == 0 ){ }else{ diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index fd91799a48..c842ef5172 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -1978,7 +1978,7 @@ bool CEditView::GetSelectedData( cmemBuf->AppendString( pszLineNum ); } - if( EEolType::none != pcLayout->GetLayoutEol() ){ + if( pcLayout->GetLayoutEol().IsValid() ){ if( nIdxTo >= nLineLen ){ cmemBuf->AppendString( &pLine[nIdxFrom], nLineLen - 1 - nIdxFrom ); // Jul. 25, 2000 genta diff --git a/sakura_core/view/CEditView_Command_New.cpp b/sakura_core/view/CEditView_Command_New.cpp index 48d15c7ddf..c75ca30b26 100644 --- a/sakura_core/view/CEditView_Command_New.cpp +++ b/sakura_core/view/CEditView_Command_New.cpp @@ -138,7 +138,7 @@ void CEditView::InsertData_CEditView( int nSpWidth = GetTextMetrics().CalcTextWidth3(L" ", 1); // 終端直前から挿入位置まで空白を埋める為の処理 // 行終端が何らかの改行コードか? - if( EEolType::none != pcLayout->GetLayoutEol() ){ + if( pcLayout->GetLayoutEol().IsValid() ){ nIdxFrom = nLineLen - CLogicInt(1); cMem.AllocStringBuffer( (Int)(ptInsertPos.GetX2() - nLineAllColLen + 1)/ nSpWidth + nDataLen ); for( int i = 0; i < ptInsertPos.GetX2() - nLineAllColLen + 1; i += nSpWidth ){ @@ -167,7 +167,7 @@ void CEditView::InsertData_CEditView( else{ // 更新が前行からになる可能性を調べる // 2009.02.17 ryoji const CLayout* pcLayoutWk = m_pcEditDoc->m_cLayoutMgr.GetBottomLayout(); - if( pcLayoutWk && pcLayoutWk->GetLayoutEol() == EEolType::none && bKinsoku ){ // 折り返しレイアウト行か?(前行の終端で調査) + if( pcLayoutWk && pcLayoutWk->GetLayoutEol().IsNone() && bKinsoku ){ // 折り返しレイアウト行か?(前行の終端で調査) bHintPrev = true; // 更新が前行からになる可能性がある } if( 0 < ptInsertPos.GetX2() ){ @@ -647,7 +647,7 @@ void CEditView::DeleteData( goto end_of_func; } /* 改行で終わっているか */ - if( ( EEolType::none != pcLayout->GetLayoutEol() ) ){ + if( pcLayout->GetLayoutEol().IsValid() ){ goto end_of_func; } /*ファイルの最後に移動 */ diff --git a/sakura_core/view/CViewSelect.cpp b/sakura_core/view/CViewSelect.cpp index 63d68b976c..4da3e59c8f 100644 --- a/sakura_core/view/CViewSelect.cpp +++ b/sakura_core/view/CViewSelect.cpp @@ -387,7 +387,7 @@ void CViewSelect::DrawSelectArea2( HDC hdc ) const // 2006.10.01 Moca End // 2011.12.26 EOFのぶら下がり行は反転し、EOFのみの行は反転しない const CLayout* pBottom = pView->m_pcEditDoc->m_cLayoutMgr.GetBottomLayout(); - if( pBottom && pBottom->GetLayoutEol() == EEolType::none ){ + if( pBottom && pBottom->GetLayoutEol().IsNone() ){ ptLast.x = 0; ptLast.y++; } diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index 381a49e032..0a8f71beca 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -1487,8 +1487,8 @@ LRESULT CEditWnd::DispatchEvent( default: nEOLCode = -1; } - if( nEOLCode != -1 ){ - GetActiveView().GetCommander().HandleCommand( F_CHGMOD_EOL, true, nEOLCode, 0, 0, 0 ); + if( !CEol::IsNone( nEOLCode ) ){ + GetActiveView().GetCommander().HandleCommand( F_CHGMOD_EOL, true, static_cast(nEOLCode), 0, 0, 0 ); } } } From 4814db801cc6b93274a7a65695725cf05048906c Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 27 Mar 2021 17:21:55 +0900 Subject: [PATCH 0564/1024] =?UTF-8?q?EEolType=E3=82=92enum=20class?= =?UTF-8?q?=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ・CEol(EEolType)をexplicitにする ・operator EEolType()をexplicitにする --- sakura_core/CEol.cpp | 58 +++++++++++-------- sakura_core/CEol.h | 20 ++++--- sakura_core/charset/CCodeBase.cpp | 3 +- sakura_core/charset/CCodeBase.h | 2 +- sakura_core/charset/CUnicode.cpp | 3 +- sakura_core/charset/CUnicodeBe.cpp | 3 +- sakura_core/charset/CUtf7.cpp | 3 +- sakura_core/charset/CUtf8.cpp | 3 +- sakura_core/cmd/CViewCommander.cpp | 6 +- sakura_core/cmd/CViewCommander_File.cpp | 2 +- .../dlg/CDlgOpenFile_CommonFileDialog.cpp | 10 ++-- .../dlg/CDlgOpenFile_CommonItemDialog.cpp | 8 +-- sakura_core/doc/CDocEditor.h | 3 +- sakura_core/macro/CMacro.cpp | 12 ++-- sakura_core/view/CEditView_Diff.cpp | 2 +- sakura_core/window/CEditWnd.cpp | 18 +++--- 16 files changed, 88 insertions(+), 68 deletions(-) diff --git a/sakura_core/CEol.cpp b/sakura_core/CEol.cpp index 5a173d825d..27c43635c9 100644 --- a/sakura_core/CEol.cpp +++ b/sakura_core/CEol.cpp @@ -32,27 +32,16 @@ #include "StdAfx.h" #include "CEol.h" -/*! 行終端子の配列 */ -const EEolType gm_pnEolTypeArr[EOL_TYPE_NUM] = { - EEolType::none , // == 0 - EEolType::cr_and_lf , // == 2 - EEolType::line_feed , // == 1 - EEolType::carriage_return , // == 1 - EEolType::next_line , // == 1 - EEolType::line_separator , // == 1 - EEolType::paragraph_separator // == 1 -}; - //----------------------------------------------- // 固定データ //----------------------------------------------- const SEolDefinition g_aEolTable[] = { { L"改行無", L"", "", 0 }, - { L"CRLF", L"\x0d\x0a", "\x0d\x0a", 2 }, + { L"CRLF", L"\x0d\x0a", "\x0d\x0a", 2 }, { L"LF", L"\x0a", "\x0a", 1 }, { L"CR", L"\x0d", "\x0d", 1 }, - { L"NEL", L"\x85", "", 1 }, + { L"NEL", L"\x85", "", 1 }, { L"LS", L"\u2028", "", 1 }, { L"PS", L"\u2029", "", 1 }, }; @@ -88,9 +77,10 @@ static const SEolDefinitionForUniFile g_aEolTable_uni_file[] = { template EEolType GetEOLType( const T* pszData, int nDataLen ) { - for( int i = 1; i < EOL_TYPE_NUM; ++i ){ - if( g_aEolTable[i].StartsWith(pszData, nDataLen) ) - return gm_pnEolTypeArr[i]; + for( size_t i = 1; i < EOL_TYPE_NUM; ++i ){ + if( g_aEolTable[i].StartsWith(pszData, nDataLen) ){ + return static_cast(i); + } } return EEolType::none; } @@ -101,18 +91,20 @@ EEolType GetEOLType( const T* pszData, int nDataLen ) EEolType _GetEOLType_uni( const char* pszData, int nDataLen ) { - for( int i = 1; i < EOL_TYPE_NUM; ++i ){ - if( g_aEolTable_uni_file[i].StartsWithW(pszData, nDataLen) ) - return gm_pnEolTypeArr[i]; + for( size_t i = 1; i < EOL_TYPE_NUM; ++i ){ + if( g_aEolTable_uni_file[i].StartsWithW(pszData, nDataLen) ){ + return static_cast(i); + } } return EEolType::none; } EEolType _GetEOLType_unibe( const char* pszData, int nDataLen ) { - for( int i = 1; i < EOL_TYPE_NUM; ++i ){ - if( g_aEolTable_uni_file[i].StartsWithWB(pszData, nDataLen) ) - return gm_pnEolTypeArr[i]; + for( size_t i = 1; i < EOL_TYPE_NUM; ++i ){ + if( g_aEolTable_uni_file[i].StartsWithWB(pszData, nDataLen) ){ + return static_cast(i); + } } return EEolType::none; } @@ -147,7 +139,7 @@ EEolType _GetEOLType_unibe( const char* pszData, int nDataLen ) */ constexpr bool CEol::SetType( EEolType t ) noexcept { - if( t == EEolType::none || IsValid( t ) ){ + if( IsNoneOrValid( t ) ){ // 正しい値 m_eEolType = t; return true; @@ -177,3 +169,23 @@ void CEol::SetTypeByStringForFile_unibe( const char* pszData, int nDataLen ) { SetType( _GetEOLType_unibe( pszData, nDataLen ) ); } + +bool operator == ( const CEol& lhs, const CEol& rhs ) noexcept +{ + return lhs.operator==(static_cast(rhs)); +} + +bool operator != ( const CEol& lhs, const CEol& rhs ) noexcept +{ + return !(lhs == rhs); +} + +bool operator == ( EEolType lhs, const CEol& rhs ) noexcept +{ + return rhs.operator==(lhs); +} + +bool operator != ( EEolType lhs, const CEol& rhs ) noexcept +{ + return !(lhs == rhs); +} diff --git a/sakura_core/CEol.h b/sakura_core/CEol.h index e16c4241f6..1dc984bd69 100644 --- a/sakura_core/CEol.h +++ b/sakura_core/CEol.h @@ -48,7 +48,8 @@ @date 2002/09/22 Moca EOL_CRLF_UNICODEを廃止 @date 2021/03/27 berryzplus 定数に意味のある名前を付ける */ -enum EEolType : char { +enum class EEolType : char { + auto_detect = -1, //!< 行終端子の自動検出 none, //!< 行終端子なし cr_and_lf, //!< \x0d\x0a 復帰改行 line_feed, //!< \x0a 改行 @@ -57,7 +58,6 @@ enum EEolType : char { line_separator, //!< \u2028 LS paragraph_separator, //!< \u2029 PS code_max, //!< 範囲外検出用のマーカー(行終端子として使用しないこと) - auto_detect = -1 //!< 行終端子の自動検出 }; struct SEolDefinition{ @@ -69,12 +69,8 @@ struct SEolDefinition{ bool StartsWith(const WCHAR* pData, int nLen) const{ return m_nLen<=nLen && 0==wmemcmp(pData,m_szDataW,m_nLen); } bool StartsWith(const ACHAR* pData, int nLen) const{ return m_nLen<=nLen && m_szDataA[0] != '\0' && 0==memcmp(pData,m_szDataA,m_nLen); } }; -extern const SEolDefinition g_aEolTable[]; -#define EOL_TYPE_NUM EEolType::code_max // 8 - -/* 行終端子の配列 */ -extern const EEolType gm_pnEolTypeArr[EOL_TYPE_NUM]; +constexpr auto EOL_TYPE_NUM = static_cast(EEolType::code_max); // 8 /*! @brief 行末の改行コードを管理 @@ -100,7 +96,7 @@ class CEol { return IsNone( t ) || IsValid( t ); } - constexpr CEol( EEolType t ) noexcept + constexpr explicit CEol( EEolType t ) noexcept { SetType( t ); } @@ -119,7 +115,7 @@ class CEol { [[nodiscard]] constexpr bool operator != ( EEolType t ) const noexcept { return !operator == ( t ); } //型変換 - [[nodiscard]] constexpr operator EEolType() const { return GetType(); } + [[nodiscard]] constexpr explicit operator EEolType() const { return GetType(); } //設定 constexpr bool SetType( EEolType t ) noexcept; @@ -137,4 +133,10 @@ class CEol { void SetTypeByStringForFile_unibe( const char* pszData, int nDataLen ); }; +// グローバル演算子 +bool operator == ( const CEol& lhs, const CEol& rhs ) noexcept; +bool operator != ( const CEol& lhs, const CEol& rhs ) noexcept; +bool operator == ( EEolType lhs, const CEol& rhs ) noexcept; +bool operator != ( EEolType lhs, const CEol& rhs ) noexcept; + #endif /* SAKURA_CEOL_036E1E16_7462_46A4_8F59_51D8E171E657_H_ */ diff --git a/sakura_core/charset/CCodeBase.cpp b/sakura_core/charset/CCodeBase.cpp index 09a6d3633d..d7625cb578 100644 --- a/sakura_core/charset/CCodeBase.cpp +++ b/sakura_core/charset/CCodeBase.cpp @@ -125,5 +125,6 @@ void CCodeBase::S_GetEol(CMemory* pcmemEol, EEolType eEolType) { "", 0 }, // EEolType::line_separator { "", 0 }, // EEolType::paragraph_separator }; - pcmemEol->SetRawData(aEolTable[eEolType].szData,aEolTable[eEolType].nLen); + auto& data = aEolTable[static_cast(eEolType)]; + pcmemEol->SetRawData(data.szData, data.nLen); } diff --git a/sakura_core/charset/CCodeBase.h b/sakura_core/charset/CCodeBase.h index 1c244a6b95..2caab31323 100644 --- a/sakura_core/charset/CCodeBase.h +++ b/sakura_core/charset/CCodeBase.h @@ -28,6 +28,7 @@ #pragma once #include "mem/CNativeW.h" +#include "CEol.h" //定数 enum EConvertResult{ @@ -37,7 +38,6 @@ enum EConvertResult{ }; struct CommonSetting_Statusbar; -enum EEolType : char; /*! 文字コード基底クラス。 diff --git a/sakura_core/charset/CUnicode.cpp b/sakura_core/charset/CUnicode.cpp index ba1d889b1d..d72f522fdf 100644 --- a/sakura_core/charset/CUnicode.cpp +++ b/sakura_core/charset/CUnicode.cpp @@ -108,5 +108,6 @@ void CUnicode::GetEol(CMemory* pcmemEol, EEolType eEolType) { L"\u2028", 1 * sizeof(wchar_t) }, // EEolType::line_separator { L"\u2029", 1 * sizeof(wchar_t) }, // EEolType::paragraph_separator }; - pcmemEol->SetRawData(aEolTable[eEolType].pData,aEolTable[eEolType].nLen); + auto& data = aEolTable[static_cast(eEolType)]; + pcmemEol->SetRawData(data.pData, data.nLen); } diff --git a/sakura_core/charset/CUnicodeBe.cpp b/sakura_core/charset/CUnicodeBe.cpp index 56d2962ac2..23201238a5 100644 --- a/sakura_core/charset/CUnicodeBe.cpp +++ b/sakura_core/charset/CUnicodeBe.cpp @@ -50,5 +50,6 @@ void CUnicodeBe::GetEol(CMemory* pcmemEol, EEolType eEolType) { "\x20\x28", 1 * sizeof(wchar_t) }, // EEolType::line_separator { "\x20\x29", 1 * sizeof(wchar_t) }, // EEolType::paragraph_separator }; - pcmemEol->SetRawData(aEolTable[eEolType].pData,aEolTable[eEolType].nLen); + auto& data = aEolTable[static_cast(eEolType)]; + pcmemEol->SetRawData(data.pData, data.nLen); } diff --git a/sakura_core/charset/CUtf7.cpp b/sakura_core/charset/CUtf7.cpp index 802bc5274d..ca014412e3 100644 --- a/sakura_core/charset/CUtf7.cpp +++ b/sakura_core/charset/CUtf7.cpp @@ -297,5 +297,6 @@ void CUtf7::GetEol(CMemory* pcmemEol, EEolType eEolType) { "+ICg-", 5 }, // EEolType::line_separator { "+ICk-", 5 }, // EEolType::paragraph_separator }; - pcmemEol->SetRawData(aEolTable[eEolType].szData,aEolTable[eEolType].nLen); + auto& data = aEolTable[static_cast(eEolType)]; + pcmemEol->SetRawData(data.szData, data.nLen); } diff --git a/sakura_core/charset/CUtf8.cpp b/sakura_core/charset/CUtf8.cpp index e96700ceaa..b46e9f4bf6 100644 --- a/sakura_core/charset/CUtf8.cpp +++ b/sakura_core/charset/CUtf8.cpp @@ -53,7 +53,8 @@ void CUtf8::GetEol(CMemory* pcmemEol, EEolType eEolType){ "\xe2\x80\xa8", 3, // EEolType::line_separator "\xe2\x80\xa9", 3, // EEolType::paragraph_separator }; - pcmemEol->SetRawData(aEolTable[eEolType].szData,aEolTable[eEolType].nLen); + auto& data = aEolTable[static_cast(eEolType)]; + pcmemEol->SetRawData(data.szData, data.nLen); } /*! diff --git a/sakura_core/cmd/CViewCommander.cpp b/sakura_core/cmd/CViewCommander.cpp index 1a790b63c9..cb14998de3 100644 --- a/sakura_core/cmd/CViewCommander.cpp +++ b/sakura_core/cmd/CViewCommander.cpp @@ -481,9 +481,9 @@ BOOL CViewCommander::HandleCommand( case F_CHG_CHARSET: Command_CHG_CHARSET( (ECodeType)lparam1, lparam2 != 0 );break; //文字コードセット指定 2010/6/14 Uchi // From Here 2003.06.23 Moca // F_CHGMOD_EOL_xxx はマクロに記録されないが、F_CHGMOD_EOLはマクロに記録されるので、マクロ関数を統合できるという手はず - case F_CHGMOD_EOL_CRLF: HandleCommand( F_CHGMOD_EOL, bRedraw, EEolType::cr_and_lf, 0, 0, 0 );break; //入力する改行コードをCRLFに設定 - case F_CHGMOD_EOL_LF: HandleCommand( F_CHGMOD_EOL, bRedraw, EEolType::line_feed, 0, 0, 0 );break; //入力する改行コードをLFに設定 - case F_CHGMOD_EOL_CR: HandleCommand( F_CHGMOD_EOL, bRedraw, EEolType::carriage_return, 0, 0, 0 );break; //入力する改行コードをCRに設定 + case F_CHGMOD_EOL_CRLF: HandleCommand( F_CHGMOD_EOL, bRedraw, static_cast(EEolType::cr_and_lf), 0, 0, 0 );break; //入力する改行コードをCRLFに設定 + case F_CHGMOD_EOL_LF: HandleCommand( F_CHGMOD_EOL, bRedraw, static_cast(EEolType::line_feed), 0, 0, 0 );break; //入力する改行コードをLFに設定 + case F_CHGMOD_EOL_CR: HandleCommand( F_CHGMOD_EOL, bRedraw, static_cast(EEolType::carriage_return), 0, 0, 0 );break; //入力する改行コードをCRに設定 // 2006.09.03 Moca F_CHGMOD_EOLで break 忘れの修正 case F_CHGMOD_EOL: Command_CHGMOD_EOL( (EEolType)lparam1 );break; //入力する改行コードを設定 // To Here 2003.06.23 Moca diff --git a/sakura_core/cmd/CViewCommander_File.cpp b/sakura_core/cmd/CViewCommander_File.cpp index 42c31ca560..72ce1d18be 100644 --- a/sakura_core/cmd/CViewCommander_File.cpp +++ b/sakura_core/cmd/CViewCommander_File.cpp @@ -780,7 +780,7 @@ BOOL CViewCommander::Command_PUTFILE( SSaveInfo( filename, nSaveCharCode, - EEolType::none, + CEol(EEolType::none), bBom ) ); diff --git a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp index 2f5f34e8bd..e139171db1 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp @@ -219,10 +219,10 @@ UINT_PTR CALLBACK OFNHookProc( // From Here Feb. 9, 2001 genta static const int nEolValueArr[] = { - EEolType::none, - EEolType::cr_and_lf, - EEolType::line_feed, - EEolType::carriage_return, + static_cast(EEolType::none), + static_cast(EEolType::cr_and_lf), + static_cast(EEolType::line_feed), + static_cast(EEolType::carriage_return), }; // 文字列はResource内に入れる static const WCHAR* const pEolNameArr[] = { @@ -303,7 +303,7 @@ UINT_PTR CALLBACK OFNHookProc( nIdx = Combo_AddString( pData->m_hwndComboEOL, pEolNameArr[i] ); } Combo_SetItemData( pData->m_hwndComboEOL, nIdx, nEolValueArr[i] ); - if( nEolValueArr[i] == pData->m_cEol ){ + if( nEolValueArr[i] == static_cast(pData->m_cEol.GetType()) ){ nIdxSel = nIdx; } } diff --git a/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp index f3d1d3dad0..5520b65f3b 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp @@ -564,10 +564,10 @@ HRESULT CDlgOpenFile_CommonItemDialog::Customize() if (m_customizeSetting.bUseEol) { hr = StartVisualGroup(CtrlId::LABEL_EOL, LS(STR_FILEDIALOG_EOL)); RETURN_IF_FAILED hr = AddComboBox(CtrlId::COMBO_EOL); RETURN_IF_FAILED - hr = AddControlItem(CtrlId::COMBO_EOL, EEolType::none, LS(STR_DLGOPNFL1)); RETURN_IF_FAILED - hr = AddControlItem(CtrlId::COMBO_EOL, EEolType::cr_and_lf, L"CR+LF"); RETURN_IF_FAILED - hr = AddControlItem(CtrlId::COMBO_EOL, EEolType::line_feed, L"LF (UNIX)"); RETURN_IF_FAILED - hr = AddControlItem(CtrlId::COMBO_EOL, EEolType::carriage_return, L"CR (Mac)"); RETURN_IF_FAILED + hr = AddControlItem(CtrlId::COMBO_EOL, static_cast(EEolType::none), LS(STR_DLGOPNFL1)); RETURN_IF_FAILED + hr = AddControlItem(CtrlId::COMBO_EOL, static_cast(EEolType::cr_and_lf), L"CR+LF"); RETURN_IF_FAILED + hr = AddControlItem(CtrlId::COMBO_EOL, static_cast(EEolType::line_feed), L"LF (UNIX)"); RETURN_IF_FAILED + hr = AddControlItem(CtrlId::COMBO_EOL, static_cast(EEolType::carriage_return), L"CR (Mac)"); RETURN_IF_FAILED hr = SetSelectedControlItem(CtrlId::COMBO_EOL, 0); RETURN_IF_FAILED hr = EndVisualGroup(); RETURN_IF_FAILED } diff --git a/sakura_core/doc/CDocEditor.h b/sakura_core/doc/CDocEditor.h index cc376e560f..27dc9fc663 100644 --- a/sakura_core/doc/CDocEditor.h +++ b/sakura_core/doc/CDocEditor.h @@ -64,7 +64,8 @@ class CDocEditor : public CDocListenerEx{ // May 15, 2000 genta CEol GetNewLineCode() const { return m_cNewLineCode; } - void SetNewLineCode(const CEol& t){ m_cNewLineCode = t; } + void SetNewLineCode( EEolType t ) noexcept { m_cNewLineCode = t; } + void SetNewLineCode( const CEol& cEol ) noexcept { SetNewLineCode( cEol.GetType() ); } // Oct. 2, 2005 genta 挿入モードの設定 bool IsInsMode() const { return m_bInsMode; } diff --git a/sakura_core/macro/CMacro.cpp b/sakura_core/macro/CMacro.cpp index 1f28a82622..d999e70451 100644 --- a/sakura_core/macro/CMacro.cpp +++ b/sakura_core/macro/CMacro.cpp @@ -271,9 +271,8 @@ void CMacro::AddLParam( const LPARAM* lParams, const CEditView* pcEditView ) { // EOLタイプ値をマクロ引数値に変換する // 2009.08.18 ryoji int nFlag; - switch( (int)lParam ){ + switch( static_cast(lParam) ){ case EEolType::cr_and_lf: nFlag = 1; break; -// case EOL_LFCR: nFlag = 2; break; case EEolType::line_feed: nFlag = 3; break; case EEolType::carriage_return: nFlag = 4; break; case EEolType::next_line: nFlag = 5; break; @@ -637,10 +636,9 @@ bool CMacro::HandleCommand( } { // マクロ引数値をEOLタイプ値に変換する // 2009.08.18 ryoji - int nEol; + EEolType nEol; switch( Argument[0] != NULL ? _wtoi(Argument[0]) : 0 ){ case 1: nEol = EEolType::cr_and_lf; break; -// case 2: nEol = EOL_LFCR; break; case 3: nEol = EEolType::line_feed; break; case 4: nEol = EEolType::carriage_return; break; case 5: nEol = EEolType::next_line; break; @@ -649,7 +647,7 @@ bool CMacro::HandleCommand( default: nEol = EEolType::none; break; } if( !CEol::IsNone( nEol ) ){ - pcEditView->GetCommander().HandleCommand( Index, true, nEol, 0, 0, 0 ); + pcEditView->GetCommander().HandleCommand( Index, true, static_cast(nEol), 0, 0, 0 ); } } break; @@ -1648,7 +1646,7 @@ bool CMacro::HandleFunction(CEditView *View, EFunctionCode ID, const VARIANT *Ar // 2005.08.04 maru マクロ追加 { int n = 0; - switch( View->m_pcEditDoc->m_cDocEditor.GetNewLineCode() ){ + switch( View->m_pcEditDoc->m_cDocEditor.GetNewLineCode().GetType() ){ case EEolType::cr_and_lf: n = 0; break; @@ -1667,6 +1665,8 @@ bool CMacro::HandleFunction(CEditView *View, EFunctionCode ID, const VARIANT *Ar case EEolType::paragraph_separator: n = 5; break; + default: + break; } Wrap( &Result )->Receive( n ); } diff --git a/sakura_core/view/CEditView_Diff.cpp b/sakura_core/view/CEditView_Diff.cpp index d9836673c1..0df7cb0bce 100644 --- a/sakura_core/view/CEditView_Diff.cpp +++ b/sakura_core/view/CEditView_Diff.cpp @@ -477,7 +477,7 @@ BOOL CEditView::MakeDiffTmpFile( WCHAR* filename, HWND hWnd, ECodeType code, boo SSaveInfo( filename, code, - EEolType::none, + CEol(EEolType::none), bBom ) ); diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index 0a8f71beca..780a1d1153 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -794,7 +794,7 @@ void CEditWnd::SetDocumentTypeWhenCreate( } if( nCharCode == eDefaultCharCode ){ // デフォルト文字コードと同じ文字コードが選択されたとき GetDocument()->SetDocumentEncoding( nCharCode, types.m_encoding.m_bDefaultBom ); - GetDocument()->m_cDocEditor.m_cNewLineCode = static_cast( types.m_encoding.m_eDefaultEoltype ); + GetDocument()->m_cDocEditor.m_cNewLineCode = types.m_encoding.m_eDefaultEoltype; } else{ GetDocument()->SetDocumentEncoding( nCharCode, CCodeTypeName( nCharCode ).IsBomDefOn() ); @@ -1476,16 +1476,16 @@ LRESULT CEditWnd::DispatchEvent( NULL ); ::DestroyMenu( hMenuPopUp ); - int nEOLCode = 0; + EEolType nEOLCode; switch(nId){ - case F_CHGMOD_EOL_CRLF: nEOLCode = EEolType::cr_and_lf; break; - case F_CHGMOD_EOL_CR: nEOLCode = EEolType::carriage_return; break; - case F_CHGMOD_EOL_LF: nEOLCode = EEolType::line_feed; break; - case F_CHGMOD_EOL_NEL: nEOLCode = EEolType::next_line; break; - case F_CHGMOD_EOL_PS: nEOLCode = EEolType::paragraph_separator; break; - case F_CHGMOD_EOL_LS: nEOLCode = EEolType::line_separator; break; + case F_CHGMOD_EOL_CRLF: nEOLCode = EEolType::cr_and_lf; break; + case F_CHGMOD_EOL_CR: nEOLCode = EEolType::carriage_return; break; + case F_CHGMOD_EOL_LF: nEOLCode = EEolType::line_feed; break; + case F_CHGMOD_EOL_NEL: nEOLCode = EEolType::next_line; break; + case F_CHGMOD_EOL_PS: nEOLCode = EEolType::paragraph_separator; break; + case F_CHGMOD_EOL_LS: nEOLCode = EEolType::line_separator; break; default: - nEOLCode = -1; + nEOLCode = EEolType::none; } if( !CEol::IsNone( nEOLCode ) ){ GetActiveView().GetCommander().HandleCommand( F_CHGMOD_EOL, true, static_cast(nEOLCode), 0, 0, 0 ); From d87aec5f5cb1446ba1134f6db7c7daa02398cd60 Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Sun, 21 Mar 2021 18:18:06 +0900 Subject: [PATCH 0565/1024] =?UTF-8?q?=E3=82=AD=E3=83=A3=E3=83=AC=E3=83=83?= =?UTF-8?q?=E3=83=88=E4=BD=8D=E7=BD=AE=E3=81=AE=E6=96=87=E5=AD=97=E6=83=85?= =?UTF-8?q?=E5=A0=B1=E3=82=92=E3=82=B9=E3=83=86=E3=83=BC=E3=82=BF=E3=82=B9?= =?UTF-8?q?=E3=83=90=E3=83=BC=E3=81=AB=E8=A8=AD=E5=AE=9A=E3=81=99=E3=82=8B?= =?UTF-8?q?=E9=9A=9B=E3=81=AE=E5=86=8D=E6=8F=8F=E7=94=BB=E3=82=92=E3=81=BE?= =?UTF-8?q?=E3=81=A8=E3=82=81=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/apiwrap/CommonControl.h | 4 ++++ sakura_core/view/CCaret.cpp | 32 +++++++++++++++++++-------- sakura_core/window/CMainStatusBar.cpp | 13 ++++++----- sakura_core/window/CMainStatusBar.h | 2 +- 4 files changed, 35 insertions(+), 16 deletions(-) diff --git a/sakura_core/apiwrap/CommonControl.h b/sakura_core/apiwrap/CommonControl.h index b6c4d46ff5..2aa4e408bb 100644 --- a/sakura_core/apiwrap/CommonControl.h +++ b/sakura_core/apiwrap/CommonControl.h @@ -46,6 +46,10 @@ namespace ApiWrap { return ::SendMessage( hwndStatus, SB_GETTEXTLENGTH, opt, (LPARAM)0 ); } + inline LRESULT StatusBar_GetRect(HWND hwndStatus, WPARAM opt, RECT* rect) + { + return ::SendMessage( hwndStatus, SB_GETRECT, opt, (LPARAM)rect ); + } inline int StatusBar_SetParts(HWND hwndCtl, int num, int* positions) { return (int)(DWORD)::SendMessage(hwndCtl, SB_SETPARTS, (WPARAM)num, (LPARAM)positions); } diff --git a/sakura_core/view/CCaret.cpp b/sakura_core/view/CCaret.cpp index 4a793037d0..9c227e1c7b 100644 --- a/sakura_core/view/CCaret.cpp +++ b/sakura_core/view/CCaret.cpp @@ -844,18 +844,32 @@ void CCaret::ShowCaretPosInfo() } auto& statusBar = m_pEditDoc->m_pcEditWnd->m_cStatusBar; - + // SB_SETTEXT メッセージでステータスバーに文字列を設定する度に再描画が行われるのを防ぐ為に + // 設定時にパートのRECTを取得し最後にまとめて再描画を行う + HWND hWnd = statusBar.GetStatusHwnd(); + RECT updatedRect = { 0 }; + auto setStatusText = [&](int nIndex, int nOption, const WCHAR* pszText) { + bool ret = statusBar.SetStatusText(nIndex, nOption, pszText); + if (ret) { + RECT partRect; + StatusBar_GetRect(hWnd, nIndex, &partRect); + ::UnionRect(&updatedRect, &updatedRect, &partRect); + } + }; + ::SendMessage(hWnd, WM_SETREDRAW, FALSE, 0); if( m_bClearStatus ){ - statusBar.SetStatusText( 0, SBT_NOBORDERS, L"" ); + setStatusText( 0, SBT_NOBORDERS, L"" ); } int nIndex = 1; - statusBar.SetStatusText( nIndex++, 0, szRowCol ); - statusBar.SetStatusText( nIndex++, 0, szEolMode ); - statusBar.SetStatusText( nIndex++, 0, szCaretChar ); - statusBar.SetStatusText( nIndex++, 0, pszCodeName ); - statusBar.SetStatusText( nIndex++, SBT_OWNERDRAW, L"" ); - statusBar.SetStatusText( nIndex++, 0, szInsMode ); - statusBar.SetStatusText( nIndex++, 0, szFontSize ); + setStatusText( nIndex++, 0, szRowCol ); + setStatusText( nIndex++, 0, szEolMode ); + setStatusText( nIndex++, 0, szCaretChar ); + setStatusText( nIndex++, 0, pszCodeName ); + setStatusText( nIndex++, SBT_OWNERDRAW, L"" ); + setStatusText( nIndex++, 0, szInsMode ); + setStatusText( nIndex++, 0, szFontSize ); + ::SendMessage(hWnd, WM_SETREDRAW, TRUE, 0); + InvalidateRect(hWnd, &updatedRect, TRUE); } } diff --git a/sakura_core/window/CMainStatusBar.cpp b/sakura_core/window/CMainStatusBar.cpp index f26fdb2bc1..c4007b1759 100644 --- a/sakura_core/window/CMainStatusBar.cpp +++ b/sakura_core/window/CMainStatusBar.cpp @@ -130,15 +130,15 @@ void CMainStatusBar::SendStatusMessage2( const WCHAR* msg ) @param pszText [in] 表示テキスト @param textLen [in] 表示テキストの文字数 */ -void CMainStatusBar::SetStatusText(int nIndex, int nOption, const WCHAR* pszText, size_t textLen /* = SIZE_MAX */) +bool CMainStatusBar::SetStatusText(int nIndex, int nOption, const WCHAR* pszText, size_t textLen /* = SIZE_MAX */) { if( !m_hwndStatusBar ){ assert(m_hwndStatusBar != NULL); - return; + return false; } // StatusBar_SetText 関数を呼びだすかどうかを判定するラムダ式 // (StatusBar_SetText は SB_SETTEXT メッセージを SendMessage で送信する) - [&]() -> bool { + return [&]() -> bool { // オーナードローの場合は SB_SETTEXT メッセージを無条件に発行するように判定 // 本来表示に変化が無い場合には呼び出さない方が表示のちらつきが減るので好ましいが // 判定が難しいので諦める @@ -177,8 +177,9 @@ void CMainStatusBar::SetStatusText(int nIndex, int nOption, const WCHAR* pszText // 設定済みの文字列と設定する文字列を比較して異なる場合は、SB_SETTEXT メッセージを発行 return (wcscmp(prev, pszText) != 0); } - else{ - return true; + else { + // 設定する文字列長が0の場合は設定する文字列長が0より大きい場合のみ設定する(既に空文字なら空文字を設定する必要は無い為) + return textLen > 0; } - }() ? StatusBar_SetText( m_hwndStatusBar, nIndex | nOption, pszText ) : 0; + }() ? (StatusBar_SetText(m_hwndStatusBar, nIndex | nOption, pszText) != FALSE) : false; } diff --git a/sakura_core/window/CMainStatusBar.h b/sakura_core/window/CMainStatusBar.h index 1f077aa534..9b8b7c2686 100644 --- a/sakura_core/window/CMainStatusBar.h +++ b/sakura_core/window/CMainStatusBar.h @@ -55,7 +55,7 @@ class CMainStatusBar : public CDocListenerEx{ HWND GetProgressHwnd() const{ return m_hwndProgressBar; } //設定 - void SetStatusText(int nIndex, int nOption, const WCHAR* pszText, size_t textLen = SIZE_MAX); + bool SetStatusText(int nIndex, int nOption, const WCHAR* pszText, size_t textLen = SIZE_MAX); private: CEditWnd* m_pOwner; HWND m_hwndStatusBar; From e325e2034b722805bee526139b06318ca66b073a Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Sun, 21 Mar 2021 20:23:24 +0900 Subject: [PATCH 0566/1024] =?UTF-8?q?=E3=82=B9=E3=83=86=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E3=82=B9=E3=83=90=E3=83=BC=E3=81=AE=E3=82=A6=E3=82=A3=E3=83=B3?= =?UTF-8?q?=E3=83=89=E3=82=A6=E3=82=92=E4=BD=9C=E6=88=90=E3=81=99=E3=82=8B?= =?UTF-8?q?=E9=9A=9B=E3=81=AB=20CreateStatusWindowW=20=E3=81=A7=E3=81=AF?= =?UTF-8?q?=E3=81=AA=E3=81=8F=20CreateWindowExW=20=E9=96=A2=E6=95=B0?= =?UTF-8?q?=E3=82=92=E4=BD=BF=E3=81=86=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89?= =?UTF-8?q?=E6=9B=B4=E3=81=97=E3=80=81=E6=8B=A1=E5=BC=B5=E3=82=B9=E3=82=BF?= =?UTF-8?q?=E3=82=A4=E3=83=AB=E3=81=AB=20WS=5FEX=5FCOMPOSITED=20=E3=82=92?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E3=81=99=E3=82=8B=E4=BA=8B=E3=81=A7=E8=A1=A8?= =?UTF-8?q?=E7=A4=BA=E3=81=AE=E3=81=A1=E3=82=89=E3=81=A4=E3=81=8D=E3=82=92?= =?UTF-8?q?=E8=A7=A3=E6=B6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/window/CMainStatusBar.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/sakura_core/window/CMainStatusBar.cpp b/sakura_core/window/CMainStatusBar.cpp index c4007b1759..72062d694f 100644 --- a/sakura_core/window/CMainStatusBar.cpp +++ b/sakura_core/window/CMainStatusBar.cpp @@ -41,11 +41,16 @@ void CMainStatusBar::CreateStatusBar() if( m_hwndStatusBar )return; /* ステータスバー */ - m_hwndStatusBar = ::CreateStatusWindow( - WS_CHILD/* | WS_VISIBLE*/ | WS_EX_RIGHT | SBARS_SIZEGRIP, // 2007.03.08 ryoji WS_VISIBLE 除去 - L"", + m_hwndStatusBar = ::CreateWindowEx( + WS_EX_RIGHT | WS_EX_COMPOSITED, + STATUSCLASSNAME, + NULL, + WS_CHILD/* | WS_VISIBLE*/ | SBARS_SIZEGRIP, // 2007.03.08 ryoji WS_VISIBLE 除去 + 0, 0, 0, 0, // X, Y, nWidth, nHeight m_pOwner->GetHwnd(), - IDW_STATUSBAR + (HMENU)IDW_STATUSBAR, + CEditApp::getInstance()->GetAppInstance(), + 0 ); /* プログレスバー */ From e5a9270e3572a6cbdff5af055278c4e895d18025 Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Sun, 21 Mar 2021 20:57:20 +0900 Subject: [PATCH 0567/1024] =?UTF-8?q?CMainStatusBar::SetStatusText=20?= =?UTF-8?q?=E3=81=A7=E3=83=A9=E3=83=A0=E3=83=80=E5=BC=8F=E3=82=92=E4=BD=BF?= =?UTF-8?q?=E3=82=8F=E3=81=AA=E3=81=84=E6=9B=B8=E3=81=8D=E6=96=B9=E3=81=AB?= =?UTF-8?q?=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/window/CMainStatusBar.cpp | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/sakura_core/window/CMainStatusBar.cpp b/sakura_core/window/CMainStatusBar.cpp index 72062d694f..c494307c85 100644 --- a/sakura_core/window/CMainStatusBar.cpp +++ b/sakura_core/window/CMainStatusBar.cpp @@ -141,14 +141,15 @@ bool CMainStatusBar::SetStatusText(int nIndex, int nOption, const WCHAR* pszText assert(m_hwndStatusBar != NULL); return false; } - // StatusBar_SetText 関数を呼びだすかどうかを判定するラムダ式 + // StatusBar_SetText 関数を呼びだすかどうかを判定する // (StatusBar_SetText は SB_SETTEXT メッセージを SendMessage で送信する) - return [&]() -> bool { + bool bDraw = true; + do { // オーナードローの場合は SB_SETTEXT メッセージを無条件に発行するように判定 // 本来表示に変化が無い場合には呼び出さない方が表示のちらつきが減るので好ましいが // 判定が難しいので諦める if( nOption == SBT_OWNERDRAW ){ - return true; + break; } // オーナードローではない場合で NULLの場合は空文字に置き換える // NULL を渡しても問題が無いのかどうか公式ドキュメントに記載されていない @@ -161,13 +162,13 @@ bool CMainStatusBar::SetStatusText(int nIndex, int nOption, const WCHAR* pszText LRESULT res = ::StatusBar_GetTextLength( m_hwndStatusBar, nIndex ); // 表示オペレーション値が変化する場合は SB_SETTEXT メッセージを発行 if( HIWORD(res) != nOption ){ - return true; + break; } size_t prevTextLen = LOWORD(res); WCHAR prev[1024]; // 設定済みの文字列長が長過ぎて取得できない場合は、SB_SETTEXT メッセージを発行 if( prevTextLen >= _countof(prev) ){ - return true; + break; } // 設定する文字列長パラメータが SIZE_MAX(引数のデフォルト値)な場合は文字列長を取得 if( textLen == SIZE_MAX ){ @@ -175,16 +176,20 @@ bool CMainStatusBar::SetStatusText(int nIndex, int nOption, const WCHAR* pszText } // 設定済みの文字列長と設定する文字列長が異なる場合は、SB_SETTEXT メッセージを発行 if( prevTextLen != textLen ){ - return true; + break; } if( prevTextLen > 0 ){ ::StatusBar_GetText( m_hwndStatusBar, nIndex, prev ); // 設定済みの文字列と設定する文字列を比較して異なる場合は、SB_SETTEXT メッセージを発行 - return (wcscmp(prev, pszText) != 0); + bDraw = wcscmp(prev, pszText) != 0; } else { // 設定する文字列長が0の場合は設定する文字列長が0より大きい場合のみ設定する(既に空文字なら空文字を設定する必要は無い為) - return textLen > 0; + bDraw = textLen > 0; } - }() ? (StatusBar_SetText(m_hwndStatusBar, nIndex | nOption, pszText) != FALSE) : false; + }while (0); + if (bDraw) { + StatusBar_SetText(m_hwndStatusBar, nIndex | nOption, pszText); + } + return bDraw; } From 12efc8cd03d632b048553724f6e119af55b8e7da Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Sun, 28 Mar 2021 18:11:19 +0900 Subject: [PATCH 0568/1024] =?UTF-8?q?SonarCloud=20=E3=81=AE=20CodeSmells?= =?UTF-8?q?=20=E3=81=AE=E4=BB=B6=E6=95=B0=E3=82=92=E6=B8=9B=E3=82=89?= =?UTF-8?q?=E3=81=99=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/window/CMainStatusBar.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sakura_core/window/CMainStatusBar.cpp b/sakura_core/window/CMainStatusBar.cpp index c494307c85..ccf0a22664 100644 --- a/sakura_core/window/CMainStatusBar.cpp +++ b/sakura_core/window/CMainStatusBar.cpp @@ -44,13 +44,13 @@ void CMainStatusBar::CreateStatusBar() m_hwndStatusBar = ::CreateWindowEx( WS_EX_RIGHT | WS_EX_COMPOSITED, STATUSCLASSNAME, - NULL, + nullptr, WS_CHILD/* | WS_VISIBLE*/ | SBARS_SIZEGRIP, // 2007.03.08 ryoji WS_VISIBLE 除去 0, 0, 0, 0, // X, Y, nWidth, nHeight m_pOwner->GetHwnd(), (HMENU)IDW_STATUSBAR, CEditApp::getInstance()->GetAppInstance(), - 0 + nullptr ); /* プログレスバー */ @@ -187,7 +187,7 @@ bool CMainStatusBar::SetStatusText(int nIndex, int nOption, const WCHAR* pszText // 設定する文字列長が0の場合は設定する文字列長が0より大きい場合のみ設定する(既に空文字なら空文字を設定する必要は無い為) bDraw = textLen > 0; } - }while (0); + }while (false); if (bDraw) { StatusBar_SetText(m_hwndStatusBar, nIndex | nOption, pszText); } From 219dd2d8e6566ca272f05d213f030ec9ea0d611c Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 28 Mar 2021 18:53:55 +0900 Subject: [PATCH 0569/1024] =?UTF-8?q?CMacro=E3=81=AEEEolType=E2=87=94int?= =?UTF-8?q?=E5=A4=89=E6=8F=9B=E3=81=AE=E3=82=A4=E3=83=B3=E3=83=87=E3=83=B3?= =?UTF-8?q?=E3=83=88=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/macro/CMacro.cpp | 41 ++++++++++++------------------------ 1 file changed, 14 insertions(+), 27 deletions(-) diff --git a/sakura_core/macro/CMacro.cpp b/sakura_core/macro/CMacro.cpp index d999e70451..4335dcf1d1 100644 --- a/sakura_core/macro/CMacro.cpp +++ b/sakura_core/macro/CMacro.cpp @@ -272,13 +272,13 @@ void CMacro::AddLParam( const LPARAM* lParams, const CEditView* pcEditView ) // EOLタイプ値をマクロ引数値に変換する // 2009.08.18 ryoji int nFlag; switch( static_cast(lParam) ){ - case EEolType::cr_and_lf: nFlag = 1; break; - case EEolType::line_feed: nFlag = 3; break; - case EEolType::carriage_return: nFlag = 4; break; - case EEolType::next_line: nFlag = 5; break; - case EEolType::line_separator: nFlag = 6; break; + case EEolType::cr_and_lf: nFlag = 1; break; + case EEolType::line_feed: nFlag = 3; break; + case EEolType::carriage_return: nFlag = 4; break; + case EEolType::next_line: nFlag = 5; break; + case EEolType::line_separator: nFlag = 6; break; case EEolType::paragraph_separator: nFlag = 7; break; - default: nFlag = 0; break; + default: nFlag = 0; break; } AddIntParam( nFlag ); } @@ -1645,28 +1645,15 @@ bool CMacro::HandleFunction(CEditView *View, EFunctionCode ID, const VARIANT *Ar case F_GETLINECODE: // 2005.08.04 maru マクロ追加 { - int n = 0; + int n; switch( View->m_pcEditDoc->m_cDocEditor.GetNewLineCode().GetType() ){ - case EEolType::cr_and_lf: - n = 0; - break; - case EEolType::carriage_return: - n = 1; - break; - case EEolType::line_feed: - n = 2; - break; - case EEolType::next_line: - n = 3; - break; - case EEolType::line_separator: - n = 4; - break; - case EEolType::paragraph_separator: - n = 5; - break; - default: - break; + case EEolType::cr_and_lf: n = 0; break; + case EEolType::carriage_return: n = 1; break; + case EEolType::line_feed: n = 2; break; + case EEolType::next_line: n = 3; break; + case EEolType::line_separator: n = 4; break; + case EEolType::paragraph_separator: n = 5; break; + default: n = 0; break; } Wrap( &Result )->Receive( n ); } From ca95ee23c1067a0316ee76333b43f61deb8bec39 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 28 Mar 2021 18:55:12 +0900 Subject: [PATCH 0570/1024] =?UTF-8?q?SonarCloud=E6=8C=87=E6=91=98=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/doc/CDocEditor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/doc/CDocEditor.cpp b/sakura_core/doc/CDocEditor.cpp index 40fcb320d9..a841149335 100644 --- a/sakura_core/doc/CDocEditor.cpp +++ b/sakura_core/doc/CDocEditor.cpp @@ -88,7 +88,7 @@ void CDocEditor::OnAfterLoad(const SLoadInfo& sLoadInfo) else{ SetNewLineCode( EEolType::cr_and_lf ); } - if( CDocLine* pFirstline = pcDoc->m_cDocLineMgr.GetLine( CLogicInt(0) ); pFirstline != nullptr ){ + if( const CDocLine* pFirstline = pcDoc->m_cDocLineMgr.GetLine( CLogicInt(0) ); pFirstline != nullptr ){ if( const auto cEol = pFirstline->GetEol(); cEol.IsValid() ){ SetNewLineCode( cEol.GetType() ); } From 04f1bce34449c88c82173fe3c6eb6cad1cf6c903 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 28 Mar 2021 19:34:57 +0900 Subject: [PATCH 0571/1024] =?UTF-8?q?MinGW=E3=83=93=E3=83=AB=E3=83=89?= =?UTF-8?q?=E3=81=A7constexpr=E9=96=A2=E6=95=B0=E3=81=8C=E6=9A=97=E9=BB=99?= =?UTF-8?q?=E3=81=A7inline=E3=81=A8=E3=81=AA=E3=82=8B=E3=81=93=E3=81=A8?= =?UTF-8?q?=E3=81=AE=E5=AF=BE=E7=AD=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CEol.cpp | 19 ------------------- sakura_core/CEol.h | 20 ++++++++++++++++++-- 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/sakura_core/CEol.cpp b/sakura_core/CEol.cpp index 27c43635c9..3956e0b6ef 100644 --- a/sakura_core/CEol.cpp +++ b/sakura_core/CEol.cpp @@ -131,25 +131,6 @@ EEolType _GetEOLType_unibe( const char* pszData, int nDataLen ) return CLogicInt(g_aEolTable[static_cast(m_eEolType)].m_nLen); } -/*! - 行末種別の設定。 - @param t 行末種別 - @retval true 正常終了。設定が反映された。 - @retval false 異常終了。強制的にCRLFに設定。 -*/ -constexpr bool CEol::SetType( EEolType t ) noexcept -{ - if( IsNoneOrValid( t ) ){ - // 正しい値 - m_eEolType = t; - return true; - }else{ - // 異常値 - m_eEolType = EEolType::cr_and_lf; - return false; - } -} - void CEol::SetTypeByString( const wchar_t* pszData, int nDataLen ) { SetType( GetEOLType( pszData, nDataLen ) ); diff --git a/sakura_core/CEol.h b/sakura_core/CEol.h index 1dc984bd69..2990303646 100644 --- a/sakura_core/CEol.h +++ b/sakura_core/CEol.h @@ -117,8 +117,24 @@ class CEol { //型変換 [[nodiscard]] constexpr explicit operator EEolType() const { return GetType(); } - //設定 - constexpr bool SetType( EEolType t ) noexcept; + /*! + 行末種別の設定。 + @param t 行終端子の種別 + @retval true 正常終了。設定が反映された。 + @retval false 異常終了。強制的にCRLFに設定。 + */ + constexpr bool SetType( EEolType t ) noexcept + { + if( IsNoneOrValid( t ) ){ + // 正しい値 + m_eEolType = t; + return true; + }else{ + // 異常値 + m_eEolType = EEolType::cr_and_lf; + return false; + } + } //代入演算子 CEol& operator = ( EEolType t ) noexcept { SetType( t ); return *this; } From d502c63311dc0306dd079af4d3de0c91fc6f5f10 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 28 Mar 2021 19:54:55 +0900 Subject: [PATCH 0572/1024] =?UTF-8?q?=E6=96=87=E5=AD=97=E5=88=97=E5=AE=9A?= =?UTF-8?q?=E6=95=B0=E3=81=ABconst=E4=BB=98=E3=81=91=E5=BF=98=E3=82=8C?= =?UTF-8?q?=E3=81=A6=E3=82=8B=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit constexpr const wchar_t* str = L"hoge"; とすべきところ、以下のようにしていた。 constexpr wchar_t* str = L"hoge"; --- tests/unittests/test-cnative.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/unittests/test-cnative.cpp b/tests/unittests/test-cnative.cpp index 6a3b000850..4ec7e9ac17 100644 --- a/tests/unittests/test-cnative.cpp +++ b/tests/unittests/test-cnative.cpp @@ -850,7 +850,7 @@ TEST(CNativeW, GetHabaOfChar) */ TEST(CNativeW, GetCharNext) { - constexpr wchar_t* text = L"a\xd83c\xdf38"; + constexpr const wchar_t* text = L"a\xd83c\xdf38"; // 次の文字のアドレスを返す。 EXPECT_EQ(CNativeW::GetCharNext(text, 3, text), text + 1); // 上位サロゲートが渡された場合は下位サロゲートを飛ばす。 @@ -864,7 +864,7 @@ TEST(CNativeW, GetCharNext) */ TEST(CNativeW, GetCharPrev) { - constexpr wchar_t* text = L"a\xd83c\xdf38" L"d"; + constexpr const wchar_t* text = L"a\xd83c\xdf38" L"d"; // 前の文字のアドレスを返す。 EXPECT_EQ(CNativeW::GetCharPrev(text, 4, text + 1), text); // 前の文字が下位サロゲートだった場合は下位サロゲートを飛ばす。 @@ -879,7 +879,7 @@ TEST(CNativeW, GetCharPrev) TEST(CNativeW, GetCharPrev_Bugs_Preview) { // a、カラー絵文字「男性のシンボル」、x - constexpr wchar_t text[] = L"a\U0001F6B9x"; + constexpr const wchar_t text[] = L"a\U0001F6B9x"; // text[0] = L'a' // text[1] = (\U0001F6B9 の1ワード目) From 7cc14b9894164f5739c1dbce7f1e1af0b25fa76b Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sat, 27 Mar 2021 04:38:02 +0900 Subject: [PATCH 0573/1024] =?UTF-8?q?C++=E3=82=A2=E3=82=A6=E3=83=88?= =?UTF-8?q?=E3=83=A9=E3=82=A4=E3=83=B3=E3=81=A7class=20x=20final:base{}?= =?UTF-8?q?=E3=81=A8:=E3=81=8Cfinal=E3=81=AB=E3=81=8F=E3=81=A3=E3=81=A4?= =?UTF-8?q?=E3=81=84=E3=81=A6=E3=81=84=E3=82=8B=E3=81=A8=E3=82=AF=E3=83=A9?= =?UTF-8?q?=E3=82=B9=E5=90=8D=E3=81=8Cfinal=E3=81=AB=E3=81=AA=E3=82=8B?= =?UTF-8?q?=E4=B8=8D=E5=85=B7=E5=90=88=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/types/CType_Cpp.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/sakura_core/types/CType_Cpp.cpp b/sakura_core/types/CType_Cpp.cpp index 97739f7218..7868515257 100644 --- a/sakura_core/types/CType_Cpp.cpp +++ b/sakura_core/types/CType_Cpp.cpp @@ -477,6 +477,11 @@ void CDocOutline::MakeFuncList_C( CFuncInfoArr* pcFuncInfoArr ,EOutlineType& nOu szItemName[0] = L'\0'; szTemplateName[0] = L'\0'; nMode = 0; + + // finalで無名ではない + auto is_final_context = [](const wchar_t* pszWord, const wchar_t* pszItemName) { + return wcscmp(L"final", pszWord) == 0 && wcscmp(LS(STR_OUTLINE_CPP_NONAME), pszItemName) != 0; + }; // Aug. 10, 2004 genta プリプロセス処理クラス CCppPreprocessMng cCppPMng; @@ -586,7 +591,8 @@ void CDocOutline::MakeFuncList_C( CFuncInfoArr* pcFuncInfoArr ,EOutlineType& nOu // class Klass:base のように:の前にスペースがない場合 if(nMode2 == M2_NAMESPACE_SAVE) { - if(szWord[0]!='\0') + // 2021.3.27 class Klass final: public base{ の:だったら名前を上書きしない + if (szWord[0] != '\0' && !is_final_context(szWord, szItemName)) wcscpy( szItemName, szWord ); nMode2 = M2_NAMESPACE_END; } @@ -603,7 +609,7 @@ void CDocOutline::MakeFuncList_C( CFuncInfoArr* pcFuncInfoArr ,EOutlineType& nOu }else{ // 2002/10/27 frozen ここから if( nMode2 == M2_NAMESPACE_SAVE ){ - if( wcscmp(L"final", szWord) == 0 && wcscmp(LS(STR_OUTLINE_CPP_NONAME), szItemName) != 0 ){ + if(is_final_context(szWord, szItemName)){ // strcut name final のfinalはクラス名の一部ではない // ただし struct finalは名前 }else{ From 9dc22d3decb6098bc636ac2bca0936d561779ac4 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sun, 28 Mar 2021 12:01:25 +0900 Subject: [PATCH 0574/1024] =?UTF-8?q?=E3=82=BF=E3=82=A4=E3=83=97=E5=88=A5?= =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E3=81=AE=E3=82=A4=E3=83=B3=E3=83=9D=E3=83=BC?= =?UTF-8?q?=E3=83=88=E3=81=A7=E3=83=90=E3=83=BC=E3=82=B8=E3=83=A7=E3=83=B3?= =?UTF-8?q?=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF=E3=81=8C=E6=AD=A3=E3=81=97?= =?UTF-8?q?=E3=81=8F=E5=83=8D=E3=81=84=E3=81=A6=E3=81=84=E3=81=AA=E3=81=8B?= =?UTF-8?q?=E3=81=A3=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ・変数名の隠ぺいによりバージョン情報のキー名が「?」になっていたのを修正 ・バージョン情報読み取りをstd::wstringに置き換え --- sakura_core/typeprop/CImpExpManager.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/sakura_core/typeprop/CImpExpManager.cpp b/sakura_core/typeprop/CImpExpManager.cpp index 174ef051aa..67689252e2 100644 --- a/sakura_core/typeprop/CImpExpManager.cpp +++ b/sakura_core/typeprop/CImpExpManager.cpp @@ -251,17 +251,16 @@ bool CImpExpType::ImportAscertain( HINSTANCE hInstance, HWND hwndParent, const w // Check Version int nStructureVersion = 0; - wchar_t szKeyVersion[64]; if (!m_cProfile.IOProfileData( szSecInfo, szKeyStructureVersion, nStructureVersion )) { sErrMsg = LS(STR_IMPEXP_ERR_TYPE); return false; } if ((unsigned int)nStructureVersion != m_pShareData->m_vStructureVersion) { - wcscpy( szKeyVersion, L"?" ); - m_cProfile.IOProfileData(szSecInfo, szKeyVersion, StringBufferW(szKeyVersion)); + std::wstring strKeyVerValue = L"?"; + m_cProfile.IOProfileData(szSecInfo, szKeyVersion, strKeyVerValue); int nRet = ConfirmMessage( hwndParent, LS(STR_IMPEXP_VER), - GSTR_APPNAME, szKeyVersion, nStructureVersion ); + GSTR_APPNAME, strKeyVerValue.c_str(), nStructureVersion ); if ( IDYES != nRet ) { return false; } From fcb5932d762f3ef7be2deea694f589129c9fa541 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 29 Mar 2021 23:13:38 +0900 Subject: [PATCH 0575/1024] =?UTF-8?q?CCodeBase=E3=81=AE=E5=A4=89=E6=8F=9B?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 無理なく実装できる部分を先行して実装する。 --- sakura_core/charset/CCodeBase.h | 48 +++- sakura_core/charset/CCodeFactory.h | 12 +- tests/unittests/test-ccodebase.cpp | 385 ++++++++++++++++++++++++++++- 3 files changed, 440 insertions(+), 5 deletions(-) diff --git a/sakura_core/charset/CCodeBase.h b/sakura_core/charset/CCodeBase.h index 2caab31323..97ae94bbcc 100644 --- a/sakura_core/charset/CCodeBase.h +++ b/sakura_core/charset/CCodeBase.h @@ -27,6 +27,10 @@ #define SAKURA_CCODEBASE_1AB194FB_933C_495E_A3A3_62E117C72644_H_ #pragma once +#include +#include +#include + #include "mem/CNativeW.h" #include "CEol.h" @@ -39,6 +43,12 @@ enum EConvertResult{ struct CommonSetting_Statusbar; +//! 変換元バイナリシーケンスを表す型。 +using BinarySequenceView = std::basic_string_view; + +//! 復元後バイナリシーケンスを表す型。 +using BinarySequence = std::basic_string; + /*! 文字コード基底クラス。 @@ -47,8 +57,42 @@ struct CommonSetting_Statusbar; */ class CCodeBase{ public: - virtual ~CCodeBase(){} -// virtual bool IsCode(const CMemory* pMem){return false;} //!< 特定コードであればtrue + virtual ~CCodeBase() noexcept = default; + + /*! + 特定コードをUnicodeにエンコードする + + @param [in] cSrc 変換対象のバイナリシーケンス + @param [out,opt] pResult 変換結果を受け取る変数 + @returns サクラエディタ仕様のUnicode文字列 + */ + virtual CNativeW CodeToUnicode( BinarySequenceView cSrc, bool* pResult = nullptr ) + { + CMemory cmemSrc( cSrc.data(), cSrc.size() ); + CNativeW cDest; + auto result = CodeToUnicode( cmemSrc, &cDest ); + if( pResult ){ + *pResult = result == RESULT_COMPLETE; + } + return cDest; + } + + /*! + Unicodeを特定コードにデコードする + + @param [in] cSrc 変換対象のUnicodeシーケンス + @param [out,opt] pResult 変換結果を受け取る変数 + @returns バイナリシーケンス + */ + virtual BinarySequence UnicodeToCode( const CNativeW& cSrc, bool* pResult = nullptr ) + { + CMemory cDest; + auto result = UnicodeToCode( cSrc, &cDest ); + if( pResult ){ + *pResult = result == RESULT_COMPLETE; + } + return BinarySequence( static_cast(cDest.GetRawPtr()), cDest.GetRawLength() ); + } //文字コード変換 virtual EConvertResult CodeToUnicode(const CMemory& cSrc, CNativeW* pDst)=0; //!< 特定コード → UNICODE 変換 diff --git a/sakura_core/charset/CCodeFactory.h b/sakura_core/charset/CCodeFactory.h index 1f3d8f397e..85eb6a6133 100644 --- a/sakura_core/charset/CCodeFactory.h +++ b/sakura_core/charset/CCodeFactory.h @@ -27,7 +27,8 @@ #define SAKURA_CCODEFACTORY_A5C6C204_F9BD_42BA_A5CD_1B086833CCA4_H_ #pragma once -class CCodeBase; +#include +#include "charset/CCodeBase.h" class CCodeFactory{ public: @@ -36,5 +37,14 @@ class CCodeFactory{ ECodeType eCodeType, //!< 文字コード int nFlag //!< bit 0: MIME Encodeされたヘッダをdecodeするかどうか ); + + //! eCodeTypeに適合する CCodeBaseインスタンス を生成 + static std::unique_ptr CreateCodeBase( + ECodeType eCodeType //!< 文字コード + ) + { + return std::unique_ptr( CreateCodeBase( eCodeType, 0 ) ); + } }; + #endif /* SAKURA_CCODEFACTORY_A5C6C204_F9BD_42BA_A5CD_1B086833CCA4_H_ */ diff --git a/tests/unittests/test-ccodebase.cpp b/tests/unittests/test-ccodebase.cpp index 5fe4c60ca9..d1692badeb 100644 --- a/tests/unittests/test-ccodebase.cpp +++ b/tests/unittests/test-ccodebase.cpp @@ -23,8 +23,9 @@ */ #include -#include -#include "charset/CCodeBase.h" +#include "charset/CCodeFactory.h" + +#include TEST(CCodeBase, MIMEHeaderDecode) { @@ -64,3 +65,383 @@ TEST(CCodeBase, MIMEHeaderDecode) EXPECT_TRUE(CCodeBase::MIMEHeaderDecode(source6.c_str(), source6.length(), &m, CODE_JIS)); EXPECT_STREQ(static_cast(m.GetRawPtr()), source6.c_str()); } + +/*! + * @brief 文字コード変換のテスト + */ +TEST(CCodeBase, codeSJis) +{ + const auto eCodeType = CODE_SJIS; + auto pCodeBase = CCodeFactory::CreateCodeBase( eCodeType ); + + // 7bit ASCII範囲(等価変換) + constexpr const auto& mbsAscii = "\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F"; + constexpr const auto& wcsAscii = L"\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F"; + + bool bComplete1_1 = false; + auto encoded1 = pCodeBase->CodeToUnicode( BinarySequenceView( reinterpret_cast(mbsAscii), _countof(mbsAscii) ), &bComplete1_1 ); + EXPECT_STREQ( wcsAscii, encoded1.GetStringPtr() ); + EXPECT_TRUE( bComplete1_1 ); + + bool bComplete1_2 = false; + auto decoded1 = pCodeBase->UnicodeToCode( encoded1, &bComplete1_2 ); + EXPECT_EQ( 0, memcmp( mbsAscii, decoded1.data(), decoded1.size() ) ); + EXPECT_TRUE( bComplete1_2 ); + + // かな漢字の変換(Shift-JIS仕様) + constexpr const auto& wcsKanaKanji = L"カナかなカナ漢字"; + constexpr const auto& mbsKanaKanji = "\xB6\xC5\x82\xA9\x82\xC8\x83\x4A\x83\x69\x8A\xBF\x8E\x9A"; + + bool bComplete2_1 = false; + auto encoded2 = pCodeBase->CodeToUnicode( BinarySequenceView( reinterpret_cast(mbsKanaKanji), _countof(mbsKanaKanji) ), &bComplete2_1 ); + ASSERT_STREQ( wcsKanaKanji, encoded2.GetStringPtr() ); + ASSERT_TRUE( bComplete2_1 ); + + bool bComplete2_2 = false; + auto decoded2 = pCodeBase->UnicodeToCode( encoded2, &bComplete2_2 ); + ASSERT_EQ( 0, memcmp( mbsKanaKanji, decoded2.data(), decoded2.size() ) ); + ASSERT_TRUE( bComplete2_2 ); + + // Unicodeから変換できない文字(Shift-JIS仕様) + // 1. SJIS⇒Unicode変換ができても、元に戻せない文字は変換失敗と看做す。 + // 該当するのは NEC選定IBM拡張文字 と呼ばれる約400字。 + // 2. 先行バイトが範囲外 + // (ch1 >= 0x81 && ch1 <= 0x9F) || + // (ch1 >= 0xE0 && ch1 <= 0xFC) + // 3. 後続バイトが範囲外 + // ch2 >= 0x40 && ch2 != 0xFC && + // ch2 <= 0x7F + constexpr const auto& mbsCantConvSJis = + "\x87\x40\xED\x40\xFA\x40" // "①纊ⅰ" NEC拡張、NEC選定IBM拡張、IBM拡張 + "\x80\x40\xFD\x40\xFE\x40\xFF\x40" // 第1バイト不正 + "\x81\x0A\x81\x7F\x81\xFD\x81\xFE\x81\xFF" // 第2バイト不正 + ; + constexpr const auto& wcsCantConvSJis = + L"①\xDCED\xDC40ⅰ" + L"\xDC80@\xDCFD@\xDCFE@\xDCFF@" + L"\xDC81\n\xDC81\x7F\xDC81\xDCFD\xDC81\xDCFE\xDC81\xDCFF" + ; + + bool bComplete3_1 = true; + auto encoded3 = pCodeBase->CodeToUnicode( BinarySequenceView( reinterpret_cast(mbsCantConvSJis), _countof(mbsCantConvSJis) ), &bComplete3_1 ); + ASSERT_STREQ( wcsCantConvSJis, encoded3.GetStringPtr() ); + ASSERT_TRUE( bComplete3_1 ); //👈 仕様バグ。変換できないので false が返るべき。 + + // Unicodeから変換できない文字(Shift-JIS仕様) + constexpr const auto& wcsOGuy = L"森鷗外"; + constexpr const auto& mbsOGuy = "\x90\x58\x3F\x8A\x4F"; //森?外 + + bool bComplete4_2 = true; + auto decoded4 = pCodeBase->UnicodeToCode( wcsOGuy, &bComplete4_2 ); + ASSERT_EQ( 0, memcmp( mbsOGuy, decoded4.data(), decoded4.size() ) ); + ASSERT_FALSE( bComplete4_2 ); +} + +/*! + * @brief 文字コード変換のテスト + */ +TEST(CCodeBase, codeEucJp) +{ + const auto eCodeType = CODE_EUC; + auto pCodeBase = CCodeFactory::CreateCodeBase( eCodeType ); + + // 7bit ASCII範囲(等価変換) + constexpr const auto& mbsAscii = "\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F"; + constexpr const auto& wcsAscii = L"\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F"; + + bool bComplete1_1 = false; + auto encoded1 = pCodeBase->CodeToUnicode( BinarySequenceView( reinterpret_cast(mbsAscii), _countof(mbsAscii) ), &bComplete1_1 ); + EXPECT_STREQ( wcsAscii, encoded1.GetStringPtr() ); + EXPECT_TRUE( bComplete1_1 ); + + bool bComplete1_2 = false; + auto decoded1 = pCodeBase->UnicodeToCode( encoded1, &bComplete1_2 ); + EXPECT_EQ( 0, memcmp( mbsAscii, decoded1.data(), decoded1.size() ) ); + EXPECT_TRUE( bComplete1_2 ); + + // かな漢字の変換(EUC-JP仕様) + constexpr const auto& wcsKanaKanji = L"カナかなカナ漢字"; + constexpr const auto& mbsKanaKanji = "\x8E\xB6\x8E\xC5\xA4\xAB\xA4\xCA\xA5\xAB\xA5\xCA\xB4\xC1\xBB\xFA"; + + bool bComplete2_1 = false; + auto encoded2 = pCodeBase->CodeToUnicode( BinarySequenceView( reinterpret_cast(mbsKanaKanji), _countof(mbsKanaKanji) ), &bComplete2_1 ); + ASSERT_STREQ( wcsKanaKanji, encoded2.GetStringPtr() ); + ASSERT_TRUE( bComplete2_1 ); + + bool bComplete2_2 = false; + auto decoded2 = pCodeBase->UnicodeToCode( encoded2, &bComplete2_2 ); + ASSERT_EQ( 0, memcmp( mbsKanaKanji, decoded2.data(), decoded2.size() ) ); + ASSERT_TRUE( bComplete2_2 ); + + // Unicodeから変換できない文字(EUC-JP仕様) + // (保留) + constexpr const auto& mbsCantConvEucJp = + "" // 第1バイト不正 + "" // 第2バイト不正 + ; + constexpr const auto& wcsCantConvEucJp = + L"" + L"" + ; + + bool bComplete3_1 = true; + auto encoded3 = pCodeBase->CodeToUnicode( BinarySequenceView( reinterpret_cast(mbsCantConvEucJp), _countof(mbsCantConvEucJp) ), &bComplete3_1 ); + //ASSERT_STREQ( wcsCantConvEucJp, encoded3.GetStringPtr() ); + //ASSERT_FALSE( bComplete3_1 ); + + // Unicodeから変換できない文字(EUC-JP仕様) + constexpr const auto& wcsOGuy = L"森鷗外"; + constexpr const auto& mbsOGuy = "\xBF\xB9\x3F\xB3\xB0"; //森?外 + + // 本来のEUC-JPは「森鷗外」を正確に表現できるため、不具合と考えられる。 + //constexpr const auto& wcsOGuy = L"森鷗外"; + //constexpr const auto& mbsOGuy = "\xBF\xB9\x8F\xEC\xBF\xB3\xB0"; + + bool bComplete4_2 = true; + auto decoded4 = pCodeBase->UnicodeToCode( wcsOGuy, &bComplete4_2 ); + ASSERT_EQ( 0, memcmp( mbsOGuy, decoded4.data(), decoded4.size() ) ); + ASSERT_FALSE( bComplete4_2 ); +} + +/*! + * @brief 文字コード変換のテスト + */ +TEST(CCodeBase, codeLatin1) +{ + const auto eCodeType = CODE_LATIN1; + auto pCodeBase = CCodeFactory::CreateCodeBase( eCodeType ); + + // 7bit ASCII範囲(等価変換) + constexpr const auto& mbsAscii = "\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F"; + constexpr const auto& wcsAscii = L"\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F"; + + bool bComplete1_1 = false; + auto encoded1 = pCodeBase->CodeToUnicode( BinarySequenceView( reinterpret_cast(mbsAscii), _countof(mbsAscii) ), &bComplete1_1 ); + EXPECT_STREQ( wcsAscii, encoded1.GetStringPtr() ); + EXPECT_TRUE( bComplete1_1 ); + + bool bComplete1_2 = false; + auto decoded1 = pCodeBase->UnicodeToCode( encoded1, &bComplete1_2 ); + EXPECT_EQ( 0, memcmp( mbsAscii, decoded1.data(), decoded1.size() ) ); + EXPECT_TRUE( bComplete1_2 ); + + // Latin1はかな漢字変換非サポート +} + +/*! + * @brief 文字コード変換のテスト + */ +TEST(CCodeBase, codeUtf8) +{ + const auto eCodeType = CODE_UTF8; + auto pCodeBase = CCodeFactory::CreateCodeBase( eCodeType ); + + // 7bit ASCII範囲(等価変換) + constexpr const auto& mbsAscii = "\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F"; + constexpr const auto& wcsAscii = L"\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F"; + + bool bComplete1_1 = false; + auto encoded1 = pCodeBase->CodeToUnicode( BinarySequenceView( reinterpret_cast(mbsAscii), _countof(mbsAscii) ), &bComplete1_1 ); + EXPECT_STREQ( wcsAscii, encoded1.GetStringPtr() ); + EXPECT_TRUE( bComplete1_1 ); + + bool bComplete1_2 = false; + auto decoded1 = pCodeBase->UnicodeToCode( encoded1, &bComplete1_2 ); + EXPECT_EQ( 0, memcmp( mbsAscii, decoded1.data(), decoded1.size() ) ); + EXPECT_TRUE( bComplete1_2 ); + + // かな漢字の変換(UTF-8仕様) + constexpr const auto& wcsKanaKanji = L"カナかなカナ漢字"; + constexpr const auto& mbsKanaKanji = u8"カナかなカナ漢字"; + + bool bComplete2_1 = false; + auto encoded2 = pCodeBase->CodeToUnicode( BinarySequenceView( reinterpret_cast(mbsKanaKanji), _countof(mbsKanaKanji) ), &bComplete2_1 ); + ASSERT_STREQ( wcsKanaKanji, encoded2.GetStringPtr() ); + ASSERT_TRUE( bComplete2_1 ); + + bool bComplete2_2 = false; + auto decoded2 = pCodeBase->UnicodeToCode( encoded2, &bComplete2_2 ); + ASSERT_EQ( 0, memcmp( mbsKanaKanji, decoded2.data(), decoded2.size() ) ); + ASSERT_TRUE( bComplete2_2 ); +} + +/*! + * @brief 文字コード変換のテスト + */ +TEST(CCodeBase, codeUtf8_OracleImplementation) +{ + const auto eCodeType = CODE_CESU8; + auto pCodeBase = CCodeFactory::CreateCodeBase( eCodeType ); + + // 7bit ASCII範囲(等価変換) + constexpr const auto& mbsAscii = "\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F"; + constexpr const auto& wcsAscii = L"\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F"; + + bool bComplete1_1 = false; + auto encoded1 = pCodeBase->CodeToUnicode( BinarySequenceView( reinterpret_cast(mbsAscii), _countof(mbsAscii) ), &bComplete1_1 ); + EXPECT_STREQ( wcsAscii, encoded1.GetStringPtr() ); + EXPECT_TRUE( bComplete1_1 ); + + bool bComplete1_2 = false; + auto decoded1 = pCodeBase->UnicodeToCode( encoded1, &bComplete1_2 ); + EXPECT_EQ( 0, memcmp( mbsAscii, decoded1.data(), decoded1.size() ) ); + EXPECT_TRUE( bComplete1_2 ); + + // かな漢字の変換(UTF-8仕様) + constexpr const auto& wcsKanaKanji = L"カナかなカナ漢字"; + constexpr const auto& mbsKanaKanji = u8"カナかなカナ漢字"; + + bool bComplete2_1 = false; + auto encoded2 = pCodeBase->CodeToUnicode( BinarySequenceView( reinterpret_cast(mbsKanaKanji), _countof(mbsKanaKanji) ), &bComplete2_1 ); + ASSERT_STREQ( wcsKanaKanji, encoded2.GetStringPtr() ); + ASSERT_TRUE( bComplete2_1 ); + + bool bComplete2_2 = false; + auto decoded2 = pCodeBase->UnicodeToCode( encoded2, &bComplete2_2 ); + ASSERT_EQ( 0, memcmp( mbsKanaKanji, decoded2.data(), decoded2.size() ) ); + ASSERT_TRUE( bComplete2_2 ); +} + +/*! + * @brief 文字コード変換のテスト + */ +TEST(CCodeBase, codeUtf16Le) +{ + const auto eCodeType = CODE_UNICODE; + auto pCodeBase = CCodeFactory::CreateCodeBase( eCodeType ); + + // 7bit ASCII範囲(等価変換) + constexpr auto& mbsAscii = "\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F"; + constexpr auto& wcsAscii = L"\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F"; + + // リトルエンディアンのバイナリを作成 + std::basic_string bin; + for( const auto ch : mbsAscii ){ + bin.append( 1, ch ); + } + + bool bComplete1_1 = false; + auto encoded1 = pCodeBase->CodeToUnicode( BinarySequenceView( reinterpret_cast(bin.data()), bin.size() * sizeof(decltype(bin)::value_type) ), &bComplete1_1 ); + ASSERT_STREQ( wcsAscii, encoded1.GetStringPtr() ); + ASSERT_TRUE( bComplete1_1 ); + + bool bComplete1_2 = false; + auto decoded1 = pCodeBase->UnicodeToCode( encoded1, &bComplete1_2 ); + ASSERT_EQ( 0, memcmp( bin.data(), decoded1.data(), decoded1.size() ) ); + ASSERT_TRUE( bComplete1_2 ); + + // かな漢字の変換(UTF-16LE仕様) + constexpr const auto& wcsKanaKanji = L"カナかなカナ漢字"; + + // リトルエンディアンのバイナリを作成 + bin.clear(); + for( const auto ch : wcsKanaKanji ){ + bin.append( 1, ch ); + } + + bool bComplete2_1 = false; + auto encoded2 = pCodeBase->CodeToUnicode( BinarySequenceView( reinterpret_cast(bin.data()), bin.size() * sizeof(decltype(bin)::value_type) ), &bComplete2_1 ); + ASSERT_STREQ( wcsKanaKanji, encoded2.GetStringPtr() ); + ASSERT_TRUE( bComplete2_1 ); + + bool bComplete2_2 = false; + auto decoded2 = pCodeBase->UnicodeToCode( encoded2, &bComplete2_2 ); + ASSERT_EQ( 0, memcmp( bin.data(), decoded2.data(), decoded2.size() ) ); + ASSERT_TRUE( bComplete2_2 ); +} + +/*! + * @brief 文字コード変換のテスト + */ +TEST(CCodeBase, codeUtf16Be) +{ + const auto eCodeType = CODE_UNICODEBE; + auto pCodeBase = CCodeFactory::CreateCodeBase( eCodeType ); + + // 7bit ASCII範囲(等価変換) + constexpr auto& mbsAscii = "\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F"; + constexpr auto& wcsAscii = L"\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F"; + + // ビッグエンディアンのバイナリを作成 + std::basic_string bin; + for( const auto ch : mbsAscii ){ + bin.append( 1, ::_byteswap_ushort( ch ) ); + } + + bool bComplete1_1 = false; + auto encoded = pCodeBase->CodeToUnicode( BinarySequenceView( reinterpret_cast(bin.data()), bin.size() * sizeof(decltype(bin)::value_type)), &bComplete1_1 ); + ASSERT_STREQ( wcsAscii, encoded.GetStringPtr() ); + ASSERT_TRUE( bComplete1_1 ); + + bool bComplete1_2 = false; + auto decoded = pCodeBase->UnicodeToCode( encoded, &bComplete1_2 ); + ASSERT_EQ( 0, memcmp( bin.data(), decoded.data(), decoded.size() ) ); + ASSERT_TRUE( bComplete1_2 ); + + // かな漢字の変換(UTF-16BE仕様) + constexpr const auto& wcsKanaKanji = L"カナかなカナ漢字"; + + // ビッグエンディアンのバイナリを作成 + bin.clear(); + for( const auto ch : wcsKanaKanji ){ + bin.append( 1, ::_byteswap_ushort( ch ) ); + } + + bool bComplete2_1 = false; + auto encoded2 = pCodeBase->CodeToUnicode( BinarySequenceView( reinterpret_cast(bin.data()), bin.size() * sizeof(decltype(bin)::value_type) ), &bComplete2_1 ); + ASSERT_STREQ( wcsKanaKanji, encoded2.GetStringPtr() ); + ASSERT_TRUE( bComplete2_1 ); + + bool bComplete2_2 = false; + auto decoded2 = pCodeBase->UnicodeToCode( encoded2, &bComplete2_2 ); + ASSERT_EQ( 0, memcmp( bin.data(), decoded2.data(), decoded2.size() ) ); + ASSERT_TRUE( bComplete2_2 ); +} + +/*! + * @brief 文字コード変換のテスト + */ +TEST(CCodeBase, codeUtf32Le) +{ + const auto eCodeType = (ECodeType)12000; + auto pCodeBase = CCodeFactory::CreateCodeBase( eCodeType ); + + // 7bit ASCII範囲(等価変換) + constexpr auto& mbsAscii = "\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F"; + constexpr auto& wcsAscii = L"\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F"; + + // リトルエンディアンのバイナリを作成 + std::basic_string bin; + for( const auto ch : mbsAscii ){ + bin.append( 1, ch ); + } + + bool bComplete1_1 = false; + auto encoded = pCodeBase->CodeToUnicode( BinarySequenceView( reinterpret_cast(bin.data()), bin.size() * sizeof(decltype(bin)::value_type)), &bComplete1_1 ); + ASSERT_STREQ( wcsAscii, encoded.GetStringPtr() ); + ASSERT_TRUE( bComplete1_1 ); + + bool bComplete1_2 = false; + auto decoded = pCodeBase->UnicodeToCode( encoded, &bComplete1_2 ); + ASSERT_EQ( 0, memcmp( bin.data(), decoded.data(), decoded.size() ) ); + ASSERT_TRUE( bComplete1_2 ); + + // かな漢字の変換(UTF-32LE仕様) + constexpr const auto& wcsKanaKanji = L"カナかなカナ漢字"; + + // リトルエンディアンのバイナリを作成 + bin.clear(); + for( const auto ch : wcsKanaKanji ){ + bin.append( 1, ch ); + } + + bool bComplete2_1 = false; + auto encoded2 = pCodeBase->CodeToUnicode( BinarySequenceView( reinterpret_cast(bin.data()), bin.size() * sizeof(decltype(bin)::value_type) ), &bComplete2_1 ); + ASSERT_STREQ( wcsKanaKanji, encoded2.GetStringPtr() ); + ASSERT_TRUE( bComplete2_1 ); + + bool bComplete2_2 = false; + auto decoded2 = pCodeBase->UnicodeToCode( encoded2, &bComplete2_2 ); + ASSERT_EQ( 0, memcmp( bin.data(), decoded2.data(), decoded2.size() ) ); + ASSERT_TRUE( bComplete2_2 ); +} From 5dd13bf601f2ec76b09a73990745f5c695c881bc Mon Sep 17 00:00:00 2001 From: Ocelot <16898663+Ocelot1210@users.noreply.github.com> Date: Fri, 2 Apr 2021 19:44:21 +0900 Subject: [PATCH 0576/1024] =?UTF-8?q?SelectDir()=20=E3=81=AB=E3=83=86?= =?UTF-8?q?=E3=83=B3=E3=83=97=E3=83=AC=E3=83=BC=E3=83=88=E5=BC=95=E6=95=B0?= =?UTF-8?q?=E3=81=A7=E5=9B=BA=E5=AE=9A=E9=95=B7=E9=85=8D=E5=88=97=E3=81=AE?= =?UTF-8?q?=E8=A6=81=E7=B4=A0=E6=95=B0=E3=82=92=E5=8F=96=E3=82=8B=E3=82=AA?= =?UTF-8?q?=E3=83=BC=E3=83=90=E3=83=BC=E3=83=AD=E3=83=BC=E3=83=89=E9=96=A2?= =?UTF-8?q?=E6=95=B0=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgGrep.cpp | 2 +- sakura_core/dlg/CDlgPluginOption.cpp | 2 +- sakura_core/dlg/CDlgTagsMake.cpp | 2 +- sakura_core/macro/CMacro.cpp | 2 +- sakura_core/outline/CDlgFileTree.cpp | 2 +- sakura_core/prop/CPropComBackup.cpp | 2 +- sakura_core/prop/CPropComEdit.cpp | 2 +- sakura_core/prop/CPropComHelper.cpp | 2 +- sakura_core/prop/CPropComMacro.cpp | 2 +- sakura_core/util/shell.h | 7 +++++++ 10 files changed, 16 insertions(+), 9 deletions(-) diff --git a/sakura_core/dlg/CDlgGrep.cpp b/sakura_core/dlg/CDlgGrep.cpp index dddf5f5478..f79c088dd6 100644 --- a/sakura_core/dlg/CDlgGrep.cpp +++ b/sakura_core/dlg/CDlgGrep.cpp @@ -509,7 +509,7 @@ BOOL CDlgGrep::OnBnClicked( int wID ) if( szFolder[0] == L'\0' ){ ::GetCurrentDirectory( nMaxPath, szFolder ); } - if( SelectDir( GetHwnd(), LS(STR_DLGGREP1), szFolder, szFolder, _countof(szFolder) ) ){ + if( SelectDir( GetHwnd(), LS(STR_DLGGREP1), szFolder, szFolder ) ){ SetGrepFolder( GetItemHwnd(IDC_COMBO_FOLDER), szFolder ); } } diff --git a/sakura_core/dlg/CDlgPluginOption.cpp b/sakura_core/dlg/CDlgPluginOption.cpp index 42418c4f04..11e2c79219 100644 --- a/sakura_core/dlg/CDlgPluginOption.cpp +++ b/sakura_core/dlg/CDlgPluginOption.cpp @@ -730,7 +730,7 @@ void CDlgPluginOption::SelectDirectory( int iLine ) WCHAR sTitle[MAX_LENGTH_VALUE+10]; auto_sprintf( sTitle, LS(STR_DLGPLUGINOPT_SELECT), buf); - if (SelectDir( GetHwnd(), (const WCHAR*)sTitle /*L"ディレクトリの選択"*/, szDir, szDir, _countof(szDir) )) { + if (SelectDir( GetHwnd(), (const WCHAR*)sTitle /*L"ディレクトリの選択"*/, szDir, szDir )) { // 末尾に\マークを追加する. AddLastChar( szDir, _countof(szDir), L'\\' ); ::DlgItem_SetText( GetHwnd(), IDC_EDIT_PLUGIN_OPTION_DIR, szDir ); diff --git a/sakura_core/dlg/CDlgTagsMake.cpp b/sakura_core/dlg/CDlgTagsMake.cpp index 40fe075b1e..06a7e62d81 100644 --- a/sakura_core/dlg/CDlgTagsMake.cpp +++ b/sakura_core/dlg/CDlgTagsMake.cpp @@ -125,7 +125,7 @@ void CDlgTagsMake::SelectFolder( HWND hwndDlg ) /* フォルダ */ ::DlgItem_GetText( hwndDlg, IDC_EDIT_TAG_MAKE_FOLDER, szPath, _MAX_PATH ); - if( SelectDir( hwndDlg, LS(STR_DLGTAGMAK_SELECTDIR), szPath, szPath, _countof(szPath) ) ) + if( SelectDir( hwndDlg, LS(STR_DLGTAGMAK_SELECTDIR), szPath, szPath ) ) { //末尾に\\マークを追加する. ::PathAddBackslashW( szPath ); diff --git a/sakura_core/macro/CMacro.cpp b/sakura_core/macro/CMacro.cpp index bb47eaf95d..3e822a1f35 100644 --- a/sakura_core/macro/CMacro.cpp +++ b/sakura_core/macro/CMacro.cpp @@ -1939,7 +1939,7 @@ bool CMacro::HandleFunction(CEditView *View, EFunctionCode ID, const VARIANT *Ar } WCHAR szPath[ _MAX_PATH ]; - int nRet = SelectDir( View->GetHwnd(), sMessage.c_str(), sDefault.c_str(), szPath, _countof(szPath) ); + int nRet = SelectDir( View->GetHwnd(), sMessage.c_str(), sDefault.c_str(), szPath ); if( nRet == IDOK ){ SysString S( szPath, wcslen(szPath) ); Wrap( &Result )->Receive( S ); diff --git a/sakura_core/outline/CDlgFileTree.cpp b/sakura_core/outline/CDlgFileTree.cpp index 7b0a18c5eb..fa659c8ca5 100644 --- a/sakura_core/outline/CDlgFileTree.cpp +++ b/sakura_core/outline/CDlgFileTree.cpp @@ -537,7 +537,7 @@ BOOL CDlgFileTree::OnBnClicked( int wID ) // RADIO_GREP == folder WCHAR szDir[MAX_PATH]; DlgItem_GetText(GetHwnd(), IDC_EDIT_PATH, szDir, _countof(szDir) ); - if( SelectDir(hwndDlg, LS(STR_DLGGREP1), szDir, szDir, _countof(szDir) ) ){ + if( SelectDir(hwndDlg, LS(STR_DLGGREP1), szDir, szDir ) ){ DlgItem_SetText(GetHwnd(), IDC_EDIT_PATH, szDir ); } }else{ diff --git a/sakura_core/prop/CPropComBackup.cpp b/sakura_core/prop/CPropComBackup.cpp index 09529c121c..b2a33d2d5d 100644 --- a/sakura_core/prop/CPropComBackup.cpp +++ b/sakura_core/prop/CPropComBackup.cpp @@ -174,7 +174,7 @@ INT_PTR CPropBackup::DispatchEvent( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPAR WCHAR szFolder[_MAX_PATH]; ::DlgItem_GetText( hwndDlg, IDC_EDIT_BACKUPFOLDER, szFolder, _countof( szFolder )); - if( SelectDir( hwndDlg, LS(STR_PROPCOMBK_SEL_FOLDER), szFolder, szFolder, _countof( szFolder ) ) ){ + if( SelectDir( hwndDlg, LS(STR_PROPCOMBK_SEL_FOLDER), szFolder, szFolder ) ){ wcscpy( m_Common.m_sBackup.m_szBackUpFolder, szFolder ); ::DlgItem_SetText( hwndDlg, IDC_EDIT_BACKUPFOLDER, m_Common.m_sBackup.m_szBackUpFolder ); } diff --git a/sakura_core/prop/CPropComEdit.cpp b/sakura_core/prop/CPropComEdit.cpp index 4693714f55..c70bea0df4 100644 --- a/sakura_core/prop/CPropComEdit.cpp +++ b/sakura_core/prop/CPropComEdit.cpp @@ -118,7 +118,7 @@ INT_PTR CPropEdit::DispatchEvent( WCHAR szPath[_MAX_PATH]; ::DlgItem_GetText( hwndDlg, IDC_EDIT_FILEOPENDIR, szMetaPath, _countof(szMetaPath) ); CFileNameManager::ExpandMetaToFolder( szMetaPath, szPath, _countof(szPath) ); - if( SelectDir( hwndDlg, LS(STR_PROPEDIT_SELECT_DIR), szPath, szPath, _countof(szPath) ) ){ + if( SelectDir( hwndDlg, LS(STR_PROPEDIT_SELECT_DIR), szPath, szPath ) ){ CNativeW cmem(szPath); cmem.Replace(L"%", L"%%"); ::DlgItem_SetText( hwndDlg, IDC_EDIT_FILEOPENDIR, cmem.GetStringPtr() ); diff --git a/sakura_core/prop/CPropComHelper.cpp b/sakura_core/prop/CPropComHelper.cpp index 4795daeb79..9eed90c925 100644 --- a/sakura_core/prop/CPropComHelper.cpp +++ b/sakura_core/prop/CPropComHelper.cpp @@ -168,7 +168,7 @@ INT_PTR CPropHelper::DispatchEvent( }else{ wcscpy( szPath, m_Common.m_sHelper.m_szMigemoDict ); } - if( SelectDir( hwndDlg, LS(STR_PROPCOMHELP_MIGEMODIR), szPath, szPath, _countof(szPath) ) ){ + if( SelectDir( hwndDlg, LS(STR_PROPCOMHELP_MIGEMODIR), szPath, szPath ) ){ wcscpy( m_Common.m_sHelper.m_szMigemoDict, GetRelPath(szPath) ); // 2015.03.03 可能なら相対パスにする ::DlgItem_SetText( hwndDlg, IDC_EDIT_MIGEMO_DICT, m_Common.m_sHelper.m_szMigemoDict ); } diff --git a/sakura_core/prop/CPropComMacro.cpp b/sakura_core/prop/CPropComMacro.cpp index 13a3136cb7..ecb1828c49 100644 --- a/sakura_core/prop/CPropComMacro.cpp +++ b/sakura_core/prop/CPropComMacro.cpp @@ -581,7 +581,7 @@ void CPropMacro::SelectBaseDir_Macro( HWND hwndDlg ) GetInidirOrExedir( szDir, folder ); } - if( SelectDir( hwndDlg, LS(STR_PROPCOMMACR_SEL_DIR), szDir, szDir, _countof(szDir) ) ){ + if( SelectDir( hwndDlg, LS(STR_PROPCOMMACR_SEL_DIR), szDir, szDir ) ){ // 末尾に\\マークを追加する. AddLastChar( szDir, _countof(szDir), L'\\' ); ::DlgItem_SetText( hwndDlg, IDC_MACRODIR, GetRelPath(szDir) ); // 2015.03.03 可能なら相対パスにする diff --git a/sakura_core/util/shell.h b/sakura_core/util/shell.h index 9a407d5a3c..c07f34c9f8 100644 --- a/sakura_core/util/shell.h +++ b/sakura_core/util/shell.h @@ -33,6 +33,13 @@ BOOL MyWinHelp(HWND hwndCaller, UINT uCommand, DWORD_PTR dwData); /* WinHelp の /* Shell Interface系(?) */ BOOL SelectDir(HWND hWnd, const WCHAR* pszTitle, const WCHAR* pszInitFolder, WCHAR* strFolderName, size_t nMaxCount ); /* フォルダ選択ダイアログ */ + +template +BOOL SelectDir(HWND hWnd, const WCHAR* pszTitle, const WCHAR* pszInitFolder, WCHAR(&strFolderName)[nMaxCount]) +{ + return SelectDir( hWnd, pszTitle, pszInitFolder, strFolderName, nMaxCount ); +} + BOOL ResolveShortcutLink(HWND hwnd, LPCWSTR lpszLinkFile, LPWSTR lpszPath);/* ショートカット(.lnk)の解決 */ HWND OpenHtmlHelp( HWND hWnd, LPCWSTR szFile, UINT uCmd, DWORD_PTR data,bool msgflag = true); From f27a8d3a1effc516fff4f29ac5d798330a0a1afb Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Sat, 3 Apr 2021 08:50:25 +0900 Subject: [PATCH 0577/1024] =?UTF-8?q?=E3=83=A1=E3=83=A2=E3=83=AADC?= =?UTF-8?q?=E3=82=92=E5=88=A9=E7=94=A8=E3=81=97=E3=81=AA=E3=81=84=E5=A0=B4?= =?UTF-8?q?=E5=90=88=E3=81=AF=E3=82=A2=E3=83=B3=E3=83=80=E3=83=BC=E3=83=A9?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E6=8F=8F=E7=94=BB=E3=82=92=E8=A1=8C=E6=8F=8F?= =?UTF-8?q?=E7=94=BB=E3=81=AE=E7=9B=B4=E5=BE=8C=E3=81=AB=E8=A1=8C=E3=81=86?= =?UTF-8?q?=E4=BA=8B=E3=81=A7=E3=81=A1=E3=82=89=E3=81=A4=E3=81=8D=E3=82=92?= =?UTF-8?q?=E6=8A=91=E3=81=88=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CEditView_Paint.cpp | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/sakura_core/view/CEditView_Paint.cpp b/sakura_core/view/CEditView_Paint.cpp index f5e32be6f8..f3561db0fd 100644 --- a/sakura_core/view/CEditView_Paint.cpp +++ b/sakura_core/view/CEditView_Paint.cpp @@ -780,6 +780,7 @@ void CEditView::OnPaint2( HDC _hdc, PAINTSTRUCT *pPs, BOOL bDrawFromComptibleBmp sPos.ForwardLayoutLineRef(1); //レイアウト行++ } }else{ + auto caretY = GetCaret().GetCaretLayoutPos().GetY2(); SColorStrategyInfo sInfo(gr); sInfo.m_pDispPos = &sPos; sInfo.m_pcView = this; @@ -788,6 +789,8 @@ void CEditView::OnPaint2( HDC _hdc, PAINTSTRUCT *pPs, BOOL bDrawFromComptibleBmp //描画X位置リセット sPos.ResetDrawCol(); + auto nLayoutLine = sPos.GetLayoutLineRef(); + //1行描画 bool bDispResult = DrawLogicLine( &sInfo, @@ -812,6 +815,14 @@ void CEditView::OnPaint2( HDC _hdc, PAINTSTRUCT *pPs, BOOL bDrawFromComptibleBmp DeleteObject(hdcBgImg); } } + // メモリDCを利用しない場合はアンダーライン描画を行描画の直後に行う事でちらつきを抑える + if (!bUseMemoryDC && nLayoutLine == caretY) + { + if (m_pcEditWnd->GetActivePane() == m_nMyIndex) { + /* アクティブペインは、アンダーライン描画 */ + GetCaret().m_cUnderLine.CaretUnderLineON(true, false); + } + } } } @@ -844,16 +855,15 @@ void CEditView::OnPaint2( HDC _hdc, PAINTSTRUCT *pPs, BOOL bDrawFromComptibleBmp pPs->rcPaint.top, SRCCOPY ); + // From Here 2007.09.09 Moca 互換BMPによる画面バッファ + // アンダーライン描画をメモリDCからのコピー前処理から後に移動 + if ( m_pcEditWnd->GetActivePane() == m_nMyIndex ){ + /* アクティブペインは、アンダーライン描画 */ + GetCaret().m_cUnderLine.CaretUnderLineON( true, false ); + } + // To Here 2007.09.09 Moca } - // From Here 2007.09.09 Moca 互換BMPによる画面バッファ - // アンダーライン描画をメモリDCからのコピー前処理から後に移動 - if ( m_pcEditWnd->GetActivePane() == m_nMyIndex ){ - /* アクティブペインは、アンダーライン描画 */ - GetCaret().m_cUnderLine.CaretUnderLineON( true, false ); - } - // To Here 2007.09.09 Moca - /* 03/02/18 対括弧の強調表示(描画) ai */ DrawBracketPair( true ); From 127b8b439f579158ab23737f389d71365901ea72 Mon Sep 17 00:00:00 2001 From: Ocelot <16898663+Ocelot1210@users.noreply.github.com> Date: Sat, 3 Apr 2021 15:41:40 +0900 Subject: [PATCH 0578/1024] =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB?= =?UTF-8?q?=E3=81=AE=E5=B7=AE=E5=88=86=E3=81=AE=E5=8E=9F=E5=9B=A0=E3=82=92?= =?UTF-8?q?=E8=A7=A3=E6=B6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/outline/CDlgFileTree.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/outline/CDlgFileTree.cpp b/sakura_core/outline/CDlgFileTree.cpp index fa659c8ca5..a72a138492 100644 --- a/sakura_core/outline/CDlgFileTree.cpp +++ b/sakura_core/outline/CDlgFileTree.cpp @@ -537,7 +537,7 @@ BOOL CDlgFileTree::OnBnClicked( int wID ) // RADIO_GREP == folder WCHAR szDir[MAX_PATH]; DlgItem_GetText(GetHwnd(), IDC_EDIT_PATH, szDir, _countof(szDir) ); - if( SelectDir(hwndDlg, LS(STR_DLGGREP1), szDir, szDir ) ){ + if( SelectDir(hwndDlg, LS(STR_DLGGREP1), szDir, szDir) ){ DlgItem_SetText(GetHwnd(), IDC_EDIT_PATH, szDir ); } }else{ From df7c2cd9433b39e8b6154dd877a15d5409bfd214 Mon Sep 17 00:00:00 2001 From: kagari Date: Sun, 4 Apr 2021 05:17:36 +0900 Subject: [PATCH 0579/1024] =?UTF-8?q?stdafx.h=20=E3=81=8B=E3=82=89?= =?UTF-8?q?=E3=83=97=E3=83=AD=E3=82=B8=E3=82=A7=E3=82=AF=E3=83=88=E5=86=85?= =?UTF-8?q?=E3=81=AE=E3=83=98=E3=83=83=E3=83=80=E3=83=BC=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=A4=E3=83=AB=E3=82=92=E5=8F=96=E3=82=8A=E9=99=A4=E3=81=8F?= =?UTF-8?q?=20(#1615)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CAutoReloadAgent.cpp | 2 + sakura_core/CBackupAgent.cpp | 2 + sakura_core/CCodeChecker.cpp | 3 + sakura_core/CDicMgr.cpp | 4 + sakura_core/CDicMgr.h | 2 + sakura_core/CEditApp.h | 2 + sakura_core/CEol.h | 1 + sakura_core/CGrepAgent.cpp | 4 + sakura_core/CHokanMgr.cpp | 2 + sakura_core/CHokanMgr.h | 1 + sakura_core/CKeyWordSetMgr.cpp | 1 + sakura_core/CLoadAgent.cpp | 3 + sakura_core/CMarkMgr.h | 1 + sakura_core/CProfile.cpp | 1 + sakura_core/CPropertyManager.cpp | 2 + sakura_core/CReadManager.cpp | 2 + sakura_core/CRegexKeyword.cpp | 1 + sakura_core/CSaveAgent.cpp | 1 + sakura_core/CSearchAgent.cpp | 2 + sakura_core/CSearchAgent.h | 3 + sakura_core/CSelectLang.cpp | 2 + sakura_core/CSortedTagJumpList.cpp | 2 + sakura_core/CSortedTagJumpList.h | 1 + sakura_core/CWriteManager.cpp | 2 + sakura_core/StdAfx.h | 116 +++++------------- sakura_core/_main/CCommandLine.cpp | 3 + sakura_core/_main/CControlProcess.cpp | 3 + sakura_core/_main/CControlTray.cpp | 4 + sakura_core/_main/CNormalProcess.cpp | 4 + sakura_core/_main/CProcess.cpp | 3 + sakura_core/_main/CProcess.h | 1 - sakura_core/_main/CProcessFactory.cpp | 2 + sakura_core/_main/WinMain.cpp | 3 + sakura_core/_os/CClipboard.cpp | 1 + sakura_core/_os/CClipboard.h | 2 + sakura_core/_os/CDropTarget.cpp | 2 + sakura_core/apiwrap/StdApi.h | 2 - sakura_core/apiwrap/StdControl.cpp | 1 + sakura_core/basis/CMyPoint.h | 1 + sakura_core/basis/CMyRect.cpp | 1 + sakura_core/basis/CMyString.h | 1 + sakura_core/basis/CStrictPoint.h | 2 + sakura_core/basis/CStrictRect.h | 2 + sakura_core/charset/CCodeBase.cpp | 5 +- sakura_core/charset/CCodeBase.h | 1 + sakura_core/charset/CCodeFactory.h | 1 + sakura_core/charset/CCodeMediator.cpp | 1 + sakura_core/charset/CCodePage.cpp | 1 + sakura_core/charset/CESI.cpp | 1 + sakura_core/charset/CEuc.cpp | 5 +- sakura_core/charset/CJis.cpp | 5 +- sakura_core/charset/CShiftJis.cpp | 6 +- sakura_core/charset/CUtf8.cpp | 6 +- sakura_core/charset/charset.cpp | 2 + sakura_core/charset/charset.h | 2 + sakura_core/charset/codechecker.h | 1 + sakura_core/charset/codeutil.cpp | 1 + sakura_core/charset/codeutil.h | 1 + sakura_core/cmd/CViewCommander.cpp | 4 + sakura_core/cmd/CViewCommander.h | 5 +- sakura_core/cmd/CViewCommander_Bookmark.cpp | 2 + sakura_core/cmd/CViewCommander_Clipboard.cpp | 1 + sakura_core/cmd/CViewCommander_Convert.cpp | 1 + sakura_core/cmd/CViewCommander_Cursor.cpp | 2 + sakura_core/cmd/CViewCommander_CustMenu.cpp | 2 + sakura_core/cmd/CViewCommander_Diff.cpp | 3 + sakura_core/cmd/CViewCommander_Edit.cpp | 1 + .../cmd/CViewCommander_Edit_advanced.cpp | 3 + sakura_core/cmd/CViewCommander_File.cpp | 4 + sakura_core/cmd/CViewCommander_Grep.cpp | 2 + sakura_core/cmd/CViewCommander_Macro.cpp | 1 + sakura_core/cmd/CViewCommander_Outline.cpp | 1 + sakura_core/cmd/CViewCommander_Search.cpp | 5 + sakura_core/cmd/CViewCommander_Settings.cpp | 3 +- sakura_core/cmd/CViewCommander_Support.cpp | 5 + sakura_core/cmd/CViewCommander_TagJump.cpp | 4 + sakura_core/cmd/CViewCommander_Window.cpp | 1 + sakura_core/convert/CConvert.h | 1 + .../convert/CConvert_HaneisuToZeneisu.cpp | 1 + .../convert/CConvert_HankataToZenhira.cpp | 1 + .../convert/CConvert_HankataToZenkata.cpp | 1 + sakura_core/convert/CConvert_SpaceToTab.cpp | 1 + sakura_core/convert/CConvert_TabToSpace.cpp | 1 + sakura_core/convert/CConvert_ToHankaku.cpp | 1 + sakura_core/convert/CConvert_ToLower.cpp | 1 + sakura_core/convert/CConvert_ToUpper.cpp | 1 + sakura_core/convert/CConvert_ToZenhira.cpp | 1 + sakura_core/convert/CConvert_ToZenkata.cpp | 1 + sakura_core/convert/CConvert_Trim.cpp | 1 + .../convert/CConvert_ZeneisuToHaneisu.cpp | 1 + .../convert/CConvert_ZenkataToHankata.cpp | 1 + sakura_core/convert/CDecode_Base64Decode.cpp | 1 + sakura_core/convert/CDecode_UuDecode.cpp | 1 + sakura_core/convert/convert_util2.h | 2 + sakura_core/debug/CRunningTimer.cpp | 1 + sakura_core/dlg/CDialog.cpp | 2 + sakura_core/dlg/CDlgAbout.cpp | 5 + sakura_core/dlg/CDlgCancel.cpp | 2 + sakura_core/dlg/CDlgCompare.cpp | 3 + sakura_core/dlg/CDlgCtrlCode.cpp | 3 + sakura_core/dlg/CDlgDiff.cpp | 3 + sakura_core/dlg/CDlgDiff.h | 5 +- sakura_core/dlg/CDlgExec.cpp | 3 + sakura_core/dlg/CDlgFavorite.cpp | 4 + sakura_core/dlg/CDlgFileUpdateQuery.cpp | 3 + sakura_core/dlg/CDlgFind.cpp | 4 + sakura_core/dlg/CDlgGrep.cpp | 5 + sakura_core/dlg/CDlgGrepReplace.cpp | 4 + sakura_core/dlg/CDlgInput1.cpp | 2 + sakura_core/dlg/CDlgInput1.h | 2 + sakura_core/dlg/CDlgJump.cpp | 3 + sakura_core/dlg/CDlgOpenFile.cpp | 1 + sakura_core/dlg/CDlgOpenFile.h | 1 + .../dlg/CDlgOpenFile_CommonFileDialog.cpp | 3 + .../dlg/CDlgOpenFile_CommonItemDialog.cpp | 2 + sakura_core/dlg/CDlgPluginOption.cpp | 3 + sakura_core/dlg/CDlgPrintSetting.cpp | 4 + sakura_core/dlg/CDlgProfileMgr.cpp | 4 + sakura_core/dlg/CDlgProperty.cpp | 2 + sakura_core/dlg/CDlgReplace.cpp | 4 + sakura_core/dlg/CDlgSetCharSet.cpp | 1 + sakura_core/dlg/CDlgSetCharSet.h | 2 + sakura_core/dlg/CDlgTagJumpList.cpp | 6 + sakura_core/dlg/CDlgTagJumpList.h | 1 + sakura_core/dlg/CDlgTagsMake.cpp | 3 + sakura_core/dlg/CDlgWinSize.cpp | 4 + sakura_core/dlg/CDlgWindowList.cpp | 8 ++ sakura_core/doc/CBlockComment.cpp | 2 + sakura_core/doc/CDocFile.h | 2 + sakura_core/doc/CDocFileOperation.cpp | 2 + sakura_core/doc/CDocLocker.cpp | 2 + sakura_core/doc/CDocOutline.cpp | 3 + sakura_core/doc/CDocOutline.h | 1 + sakura_core/doc/CDocReader.cpp | 2 + sakura_core/doc/CDocReader.h | 2 + sakura_core/doc/CDocTypeSetting.cpp | 2 + sakura_core/doc/CEditDoc.cpp | 2 + sakura_core/doc/CLineComment.cpp | 2 + sakura_core/doc/layout/CLayoutMgr.cpp | 1 + sakura_core/doc/layout/CLayoutMgr_New.cpp | 1 + sakura_core/doc/logic/CDocLine.cpp | 1 + sakura_core/doc/logic/CDocLine.h | 1 + sakura_core/docplus/CDiffManager.h | 2 + sakura_core/docplus/CFuncListManager.h | 3 + sakura_core/env/CAppNodeManager.cpp | 3 + sakura_core/env/CDocTypeManager.cpp | 3 + sakura_core/env/CDocTypeManager.h | 5 +- sakura_core/env/CFileNameManager.cpp | 2 + sakura_core/env/CFileNameManager.h | 5 +- sakura_core/env/CFormatManager.cpp | 1 + sakura_core/env/CFormatManager.h | 4 +- sakura_core/env/CHelpManager.h | 4 +- sakura_core/env/CSakuraEnvironment.cpp | 3 + sakura_core/env/CSearchKeywordManager.h | 6 +- sakura_core/env/CShareData.cpp | 3 + sakura_core/env/CShareData.h | 1 + sakura_core/env/CShareData_IO.cpp | 2 + sakura_core/env/CShareData_IO.h | 2 + sakura_core/env/CTagJumpManager.h | 6 +- sakura_core/env/CommonSetting.h | 1 + sakura_core/env/DLLSHAREDATA.cpp | 4 + sakura_core/env/DLLSHAREDATA.h | 31 ++--- sakura_core/extmodule/CBregexp.cpp | 2 + sakura_core/extmodule/CBregexp.h | 1 + sakura_core/extmodule/CMigemo.cpp | 2 + sakura_core/extmodule/CMigemo.h | 2 + sakura_core/func/CFuncKeyWnd.cpp | 3 + sakura_core/func/CFuncLookup.cpp | 3 + sakura_core/func/CKeyBind.cpp | 3 + sakura_core/func/CKeyBind.h | 1 + sakura_core/func/Funccode.cpp | 1 + sakura_core/io/CFile.cpp | 2 + sakura_core/io/CStream.cpp | 1 + sakura_core/io/CTextStream.h | 2 + sakura_core/io/CZipFile.cpp | 1 + sakura_core/macro/CIfObj.cpp | 3 + sakura_core/macro/CKeyMacroMgr.cpp | 3 + sakura_core/macro/CMacro.cpp | 3 + sakura_core/macro/CPPA.cpp | 2 + sakura_core/macro/CPPA.h | 1 + sakura_core/macro/CPPAMacroMgr.cpp | 4 +- sakura_core/macro/CPPAMacroMgr.h | 1 + sakura_core/macro/CWSH.cpp | 3 + sakura_core/mem/CMemory.cpp | 5 + sakura_core/mem/CMemory.h | 2 - sakura_core/mem/CNative.h | 2 - sakura_core/mem/CNativeA.cpp | 1 + sakura_core/outline/CDlgFileTree.cpp | 4 + sakura_core/outline/CDlgFuncList.cpp | 6 + sakura_core/outline/CFuncInfo.h | 1 + sakura_core/outline/CFuncInfoArr.h | 2 + sakura_core/parse/CWordParse.cpp | 1 + sakura_core/plugin/CDllPlugin.cpp | 3 + sakura_core/plugin/CJackManager.h | 1 + sakura_core/plugin/CPluginManager.cpp | 2 + sakura_core/plugin/CWSHPlugin.cpp | 2 + sakura_core/print/CPrint.cpp | 3 + sakura_core/print/CPrint.h | 1 + sakura_core/print/CPrintPreview.cpp | 5 + sakura_core/print/CPrintPreview.h | 2 + sakura_core/prop/CPropComBackup.cpp | 3 + sakura_core/prop/CPropComCustmenu.cpp | 3 + sakura_core/prop/CPropComEdit.cpp | 3 + sakura_core/prop/CPropComFile.cpp | 3 + sakura_core/prop/CPropComFileName.cpp | 3 + sakura_core/prop/CPropComFormat.cpp | 1 + sakura_core/prop/CPropComGeneral.cpp | 5 + sakura_core/prop/CPropComGrep.cpp | 3 + sakura_core/prop/CPropComHelper.cpp | 3 + sakura_core/prop/CPropComKeybind.cpp | 4 + sakura_core/prop/CPropComKeyword.cpp | 3 + sakura_core/prop/CPropComMacro.cpp | 3 + sakura_core/prop/CPropComMainMenu.cpp | 3 + sakura_core/prop/CPropComPlugin.cpp | 3 + sakura_core/prop/CPropComTab.cpp | 3 + sakura_core/prop/CPropComToolbar.cpp | 4 + sakura_core/prop/CPropComWin.cpp | 2 + sakura_core/prop/CPropCommon.cpp | 2 + sakura_core/recent/CMruListener.cpp | 2 + sakura_core/typeprop/CDlgKeywordSelect.cpp | 1 + sakura_core/typeprop/CDlgSameColor.cpp | 4 + sakura_core/typeprop/CDlgTypeAscertain.cpp | 4 + sakura_core/typeprop/CDlgTypeList.cpp | 5 + sakura_core/typeprop/CImpExpManager.cpp | 4 + sakura_core/typeprop/CPropTypes.cpp | 4 + sakura_core/typeprop/CPropTypesColor.cpp | 4 + sakura_core/typeprop/CPropTypesKeyHelp.cpp | 3 + sakura_core/typeprop/CPropTypesRegex.cpp | 3 + sakura_core/typeprop/CPropTypesScreen.cpp | 6 + sakura_core/typeprop/CPropTypesSupport.cpp | 3 + sakura_core/typeprop/CPropTypesWindow.cpp | 3 + sakura_core/types/CType.cpp | 1 + sakura_core/types/CType.h | 1 + sakura_core/types/CType_Basis.cpp | 1 + sakura_core/types/CType_Cpp.cpp | 2 + sakura_core/types/CType_Erlang.cpp | 2 + sakura_core/types/CType_Java.cpp | 2 + sakura_core/types/CType_Python.cpp | 2 + sakura_core/types/CType_Text.cpp | 2 + sakura_core/uiparts/CGraphics.cpp | 1 + sakura_core/uiparts/CGraphics.h | 1 + sakura_core/uiparts/CImageListMgr.cpp | 1 + sakura_core/uiparts/CMenuDrawer.h | 1 + sakura_core/uiparts/CSoundSet.cpp | 1 + sakura_core/uiparts/CVisualProgress.cpp | 1 + sakura_core/util/MessageBoxF.cpp | 3 + sakura_core/util/StaticType.h | 1 + sakura_core/util/design_template.h | 2 + sakura_core/util/format.cpp | 1 + sakura_core/util/input.cpp | 2 + sakura_core/util/os.cpp | 1 + sakura_core/util/shell.cpp | 2 + sakura_core/util/string_ex.h | 2 + sakura_core/util/string_ex2.cpp | 1 + sakura_core/util/tchar_convert.cpp | 1 + sakura_core/util/tchar_convert.h | 2 + sakura_core/util/tchar_template.cpp | 1 + sakura_core/util/window.cpp | 2 + sakura_core/view/CCaret.cpp | 3 + sakura_core/view/CCaret.h | 3 + sakura_core/view/CEditView.cpp | 2 + sakura_core/view/CEditView_Cmdgrep.cpp | 1 + sakura_core/view/CEditView_Cmdisrch.cpp | 2 + sakura_core/view/CEditView_Command.cpp | 4 + sakura_core/view/CEditView_Diff.cpp | 3 + sakura_core/view/CEditView_ExecCmd.cpp | 3 + sakura_core/view/CEditView_Ime.cpp | 4 +- sakura_core/view/CEditView_Mouse.cpp | 5 + sakura_core/view/CEditView_Scroll.cpp | 1 + sakura_core/view/CEditView_Search.cpp | 2 + sakura_core/view/CTextArea.cpp | 1 + sakura_core/view/CTextArea.h | 4 +- sakura_core/view/CTextDrawer.cpp | 1 + sakura_core/view/CTextMetrics.cpp | 1 + sakura_core/view/CViewFont.cpp | 1 + sakura_core/view/CViewParser.h | 1 + sakura_core/view/colors/CColorStrategy.h | 1 + sakura_core/view/figures/CFigureStrategy.cpp | 1 + sakura_core/view/figures/CFigure_Comma.cpp | 3 +- sakura_core/view/figures/CFigure_CtrlCode.cpp | 1 + sakura_core/view/figures/CFigure_Eol.cpp | 3 +- sakura_core/view/figures/CFigure_HanSpace.cpp | 1 + sakura_core/view/figures/CFigure_Tab.cpp | 3 +- sakura_core/view/figures/CFigure_ZenSpace.cpp | 1 + sakura_core/window/CAutoScrollWnd.h | 2 + sakura_core/window/CEditWnd.cpp | 5 + sakura_core/window/CMainStatusBar.cpp | 1 + sakura_core/window/CMainToolBar.cpp | 4 + sakura_core/window/CSplitBoxWnd.cpp | 2 + sakura_core/window/CSplitterWnd.cpp | 4 + sakura_core/window/CTabWnd.cpp | 4 + sakura_core/window/CTabWnd.h | 1 + 292 files changed, 678 insertions(+), 156 deletions(-) diff --git a/sakura_core/CAutoReloadAgent.cpp b/sakura_core/CAutoReloadAgent.cpp index 6cda3d6918..fa2b4c39fd 100644 --- a/sakura_core/CAutoReloadAgent.cpp +++ b/sakura_core/CAutoReloadAgent.cpp @@ -28,7 +28,9 @@ // #include "doc/CEditDoc.h" // in under CEditWnd.h #include "window/CEditWnd.h" #include "dlg/CDlgFileUpdateQuery.h" +#include "CSelectLang.h" #include "sakura_rc.h" +#include "String_define.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // コンストラクタ・デストラクタ // diff --git a/sakura_core/CBackupAgent.cpp b/sakura_core/CBackupAgent.cpp index 2d322e67e5..e92d33a381 100644 --- a/sakura_core/CBackupAgent.cpp +++ b/sakura_core/CBackupAgent.cpp @@ -30,6 +30,8 @@ #include "CBackupAgent.h" #include "window/CEditWnd.h" #include "util/format.h" //GetDateTimeFormat +#include "CSelectLang.h" +#include "String_define.h" /*! セーブ前おまけ処理 @param pSaveInfo [in] 保存ファイル情報 diff --git a/sakura_core/CCodeChecker.cpp b/sakura_core/CCodeChecker.cpp index ea4dc40721..11d888d3ec 100644 --- a/sakura_core/CCodeChecker.cpp +++ b/sakura_core/CCodeChecker.cpp @@ -33,6 +33,9 @@ #include "doc/logic/CDocLineMgr.h" #include "window/CEditWnd.h" #include "util/string_ex.h" +#include "CSelectLang.h" +#include "config/app_constants.h" +#include "String_define.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // セーブ時チェック // diff --git a/sakura_core/CDicMgr.cpp b/sakura_core/CDicMgr.cpp index e8a5ff5b9a..ef698e0763 100644 --- a/sakura_core/CDicMgr.cpp +++ b/sakura_core/CDicMgr.cpp @@ -20,8 +20,12 @@ #include #include "CDicMgr.h" #include "mem/CMemory.h" // 2002/2/10 aroka ヘッダ整理 +#include "mem/CNativeW.h" #include "debug/CRunningTimer.h" #include "io/CTextStream.h" +#include "util/string_ex.h" +#include "config/system_constants.h" + using namespace std; CDicMgr::CDicMgr() diff --git a/sakura_core/CDicMgr.h b/sakura_core/CDicMgr.h index 7f6c7b35d9..d13196c4d5 100644 --- a/sakura_core/CDicMgr.h +++ b/sakura_core/CDicMgr.h @@ -20,6 +20,8 @@ #include "util/container.h" #include "_main/global.h" +class CNativeW; + /*----------------------------------------------------------------------- クラスの宣言 -----------------------------------------------------------------------*/ diff --git a/sakura_core/CEditApp.h b/sakura_core/CEditApp.h index f2ea66999c..2274d6b25b 100644 --- a/sakura_core/CEditApp.h +++ b/sakura_core/CEditApp.h @@ -32,6 +32,8 @@ #include "util/design_template.h" #include "uiparts/CSoundSet.h" #include "uiparts/CImageListMgr.h" +#include "types/CType.h" + class CEditDoc; class CEditWnd; class CLoadAgent; diff --git a/sakura_core/CEol.h b/sakura_core/CEol.h index 2990303646..6ec5a8dc02 100644 --- a/sakura_core/CEol.h +++ b/sakura_core/CEol.h @@ -35,6 +35,7 @@ #pragma once #include "_main/global.h" +#include "basis/primitive.h" #include "basis/SakuraBasis.h" /*! diff --git a/sakura_core/CGrepAgent.cpp b/sakura_core/CGrepAgent.cpp index 92215675dd..4b6e5af145 100644 --- a/sakura_core/CGrepAgent.cpp +++ b/sakura_core/CGrepAgent.cpp @@ -46,7 +46,11 @@ #include #include #include +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" #include "sakura_rc.h" +#include "config/system_constants.h" +#include "String_define.h" #define UICHECK_INTERVAL_MILLISEC 100 // UI確認の時間間隔 #define ADDTAIL_INTERVAL_MILLISEC 50 // 結果出力の時間間隔 diff --git a/sakura_core/CHokanMgr.cpp b/sakura_core/CHokanMgr.cpp index 22f0522aa3..ac271a81e1 100644 --- a/sakura_core/CHokanMgr.cpp +++ b/sakura_core/CHokanMgr.cpp @@ -25,6 +25,8 @@ #include "plugin/CComplementIfObj.h" #include "util/input.h" #include "util/os.h" +#include "apiwrap/StdApi.h" +#include "apiwrap/StdControl.h" #include "sakura_rc.h" WNDPROC gm_wpHokanListProc; diff --git a/sakura_core/CHokanMgr.h b/sakura_core/CHokanMgr.h index 1e7358ddd4..23a5a531e2 100644 --- a/sakura_core/CHokanMgr.h +++ b/sakura_core/CHokanMgr.h @@ -20,6 +20,7 @@ #include #include "dlg/CDialog.h" #include "util/container.h" +#include "mem/CNativeW.h" /*! @brief キーワード補完 diff --git a/sakura_core/CKeyWordSetMgr.cpp b/sakura_core/CKeyWordSetMgr.cpp index 706f03aed2..1370f15e9f 100644 --- a/sakura_core/CKeyWordSetMgr.cpp +++ b/sakura_core/CKeyWordSetMgr.cpp @@ -37,6 +37,7 @@ #include "StdAfx.h" #include "CKeyWordSetMgr.h" #include +#include "basis/CMyString.h" //! 1ブロック当たりのキーワード数 static const int nKeyWordSetBlockSize = 50; diff --git a/sakura_core/CLoadAgent.cpp b/sakura_core/CLoadAgent.cpp index b3360247dd..bcfa9b8fa1 100644 --- a/sakura_core/CLoadAgent.cpp +++ b/sakura_core/CLoadAgent.cpp @@ -37,6 +37,9 @@ #include "uiparts/CVisualProgress.h" #include "util/file.h" #include "io/CFileLoad.h" +#include "apiwrap/StdApi.h" +#include "config/app_constants.h" +#include "String_define.h" ECallbackResult CLoadAgent::OnCheckLoad(SLoadInfo* pLoadInfo) { diff --git a/sakura_core/CMarkMgr.h b/sakura_core/CMarkMgr.h index d76711e163..caca41969f 100644 --- a/sakura_core/CMarkMgr.h +++ b/sakura_core/CMarkMgr.h @@ -35,6 +35,7 @@ #pragma once #include +#include "basis/SakuraBasis.h" /*! 行マークを管理するクラス。 diff --git a/sakura_core/CProfile.cpp b/sakura_core/CProfile.cpp index 8a9764c20f..b94d329389 100644 --- a/sakura_core/CProfile.cpp +++ b/sakura_core/CProfile.cpp @@ -47,6 +47,7 @@ #include "charset/CUtf8.h" // Resource読み込みに使用 #include "CEol.h" #include "util/file.h" +#include "apiwrap/StdApi.h" void EnsureDirectoryExist( const std::wstring& strProfileName ) { diff --git a/sakura_core/CPropertyManager.cpp b/sakura_core/CPropertyManager.cpp index ff8627cdc7..ff2482ef93 100644 --- a/sakura_core/CPropertyManager.cpp +++ b/sakura_core/CPropertyManager.cpp @@ -28,7 +28,9 @@ #include "CPropertyManager.h" #include "env/DLLSHAREDATA.h" #include "env/CDocTypeManager.h" +#include "apiwrap/StdApi.h" #include +#include "config/system_constants.h" void CPropertyManager::Create( HWND hwndOwner, CImageListMgr* pImageList, CMenuDrawer* pMenuDrawer ) { diff --git a/sakura_core/CReadManager.cpp b/sakura_core/CReadManager.cpp index f1640b2ac3..6b7d94fcce 100644 --- a/sakura_core/CReadManager.cpp +++ b/sakura_core/CReadManager.cpp @@ -31,6 +31,8 @@ #include "charset/CCodeMediator.h" #include "io/CFileLoad.h" #include "util/window.h" +#include "CSelectLang.h" +#include "String_define.h" /*! ファイルを読み込んで格納する(分割読み込みテスト版) diff --git a/sakura_core/CRegexKeyword.cpp b/sakura_core/CRegexKeyword.cpp index e841750f2f..558f668416 100644 --- a/sakura_core/CRegexKeyword.cpp +++ b/sakura_core/CRegexKeyword.cpp @@ -23,6 +23,7 @@ #include "extmodule/CBregexp.h" #include "types/CType.h" #include "view/colors/EColorIndexType.h" +#include "mem/CNativeW.h" #if 0 #include diff --git a/sakura_core/CSaveAgent.cpp b/sakura_core/CSaveAgent.cpp index 1b993f0745..49ee32b492 100644 --- a/sakura_core/CSaveAgent.cpp +++ b/sakura_core/CSaveAgent.cpp @@ -35,6 +35,7 @@ #include "CEditApp.h" #include "_main/CAppMode.h" #include "env/CShareData.h" +#include "String_define.h" CSaveAgent::CSaveAgent() { diff --git a/sakura_core/CSearchAgent.cpp b/sakura_core/CSearchAgent.cpp index 7e25f96cbb..92b5017f0c 100644 --- a/sakura_core/CSearchAgent.cpp +++ b/sakura_core/CSearchAgent.cpp @@ -36,6 +36,8 @@ #include "sakura_rc.h" #include "CEditApp.h" #include "CGrepAgent.h" +#include "apiwrap/CommonControl.h" +#include "env/DLLSHAREDATA.h" //#define MEASURE_SEARCH_TIME #ifdef MEASURE_SEARCH_TIME diff --git a/sakura_core/CSearchAgent.h b/sakura_core/CSearchAgent.h index 85bc411b0c..acff13392f 100644 --- a/sakura_core/CSearchAgent.h +++ b/sakura_core/CSearchAgent.h @@ -28,10 +28,13 @@ #pragma once #include "_main/global.h" +#include "util/design_template.h" +#include "basis/SakuraBasis.h" class CDocLineMgr; struct DocLineReplaceArg; class CBregexp; +class CNativeW; // #define SEARCH_STRING_KMP #define SEARCH_STRING_SUNDAY_QUICK diff --git a/sakura_core/CSelectLang.cpp b/sakura_core/CSelectLang.cpp index 148c518fcf..baa91b9962 100644 --- a/sakura_core/CSelectLang.cpp +++ b/sakura_core/CSelectLang.cpp @@ -16,6 +16,8 @@ #include "CSelectLang.h" #include "util/os.h" #include "util/module.h" +#include "debug/Debug2.h" +#include "String_define.h" #include diff --git a/sakura_core/CSortedTagJumpList.cpp b/sakura_core/CSortedTagJumpList.cpp index 06915ae8ef..8f88449803 100644 --- a/sakura_core/CSortedTagJumpList.cpp +++ b/sakura_core/CSortedTagJumpList.cpp @@ -32,6 +32,8 @@ #include "StdAfx.h" #include "CSortedTagJumpList.h" +#include "util/tchar_convert.h" + /*! @date 2005.04.23 genta 管理数の最大値を指定する引数追加 */ diff --git a/sakura_core/CSortedTagJumpList.h b/sakura_core/CSortedTagJumpList.h index 21e362e9e8..c529a19ecd 100644 --- a/sakura_core/CSortedTagJumpList.h +++ b/sakura_core/CSortedTagJumpList.h @@ -33,6 +33,7 @@ #define SAKURA_CSORTEDTAGJUMPLIST_54B68DB2_20F2_4F62_BB2C_47629293620F_H_ #pragma once +#include "basis/primitive.h" #include "util/design_template.h" #define MAX_TAG_STRING_LENGTH _MAX_PATH //管理する文字列の最大長 diff --git a/sakura_core/CWriteManager.cpp b/sakura_core/CWriteManager.cpp index 233f449f3f..c02650d3ff 100644 --- a/sakura_core/CWriteManager.cpp +++ b/sakura_core/CWriteManager.cpp @@ -35,6 +35,8 @@ #include "io/CIoBridge.h" #include "io/CBinaryStream.h" #include "util/window.h" +#include "CSelectLang.h" +#include "String_define.h" /*! バッファ内容をファイルに書き出す (テスト用) diff --git a/sakura_core/StdAfx.h b/sakura_core/StdAfx.h index 69a3391df8..d08b9d0385 100644 --- a/sakura_core/StdAfx.h +++ b/sakura_core/StdAfx.h @@ -70,66 +70,40 @@ #define _wcstok wcstok #endif -//グローバル -#include "_main/global.h" - -//ビルドオプション的なヘッダ -#include "config/build_config.h" -#include "config/maxdata.h" - -//定数(プリコンパイル日付に依存) -#include "config/system_constants.h" //システム定数 -#include "config/app_constants.h" //アプリケーション定数 - -//高頻度API等 -// #include // WIN32_LEAN_AND_MEANでは必要。OpenFileDialg系 -#include // コモンコントロール -#include // _MAX_PATH -#include - -#ifndef SAKURA_PCH_MODE_MIN -// 2010.04.19 重そうなので追加 -#include -#include -#include -#include -#include -#include #include +#include +#include +#include #include -#include -#include -#include +#include + #include +#include +#include +#include +#include +#include +#include #include -#endif // ifndef SAKURA_PCH_MODE_MIN - -//デバッグ -#include "debug/Debug1.h" -#include "debug/Debug2.h" -#include "debug/Debug3.h" - -//シンプルでよく使うもの -#include "basis/primitive.h" -#include "util/std_macro.h" - -//MFC互換 -#include "basis/CMyString.h" -#include "basis/CMyRect.h" -#include "basis/CMyPoint.h" -#include "basis/CMySize.h" - -//サクラエディタ固有型 -#include "basis/SakuraBasis.h" +#include +#include +#include +#include +#include -//よく使うヘッダ -#include "mem/CNativeW.h" -#include "mem/CNativeA.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include -#include "util/string_ex.h" -#include "util/MessageBoxF.h" -#include "CSelectLang.h" -#include "String_define.h" +// プロジェクト内のファイルだがプリコンパイル対象とする。 +// プリコンパイルの有無がビルドパフォーマンスに大きく影響するため。 +#include "env/DLLSHAREDATA.h" //その他 #define malloc_char (char*)malloc @@ -138,39 +112,5 @@ #define GlobalLockWChar (wchar_t*)::GlobalLock #define GlobalLockBYTE (BYTE*)::GlobalLock -//APIラップ -#include "apiwrap/StdControl.h" -#include "apiwrap/CommonControl.h" -#include "apiwrap/StdApi.h" - -//TCHARユーティリティ -#include "util/tchar_convert.h" - -// 2010.04.19 Moca includeの大規模整理 -#ifndef SAKURA_PCH_MODE_MIN -#define SAKURA_PCH_MODE_DLLSHARE 1 -#endif - -#if defined(SAKURA_PCH_MODE_MAX) || defined(SAKURA_PCH_MODE_DLLSHARE) -#include "env/DLLSHAREDATA.h" -#endif - -#ifdef SAKURA_PCH_MODE_MAX -#include "env/CShareData.h" -#include "_main/CNormalProcess.h" -#include "_main/CAppMode.h" -#include "window/CEditWnd.h" -#include "CEditApp.h" -#include "doc/CDocReader.h" -#include "docplus/CModifyManager.h" -#include "docplus/CDiffManager.h" -#include "docplus/CBookmarkManager.h" -#include "CReadManager.h" -#include "CWriteManager.h" -#include "CSearchAgent.h" -//###########超仮 -#include "uiparts/CGraphics.h" -#endif // SAKURA_PCH_MODE_MAX - //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ は前行の直前に追加の宣言を挿入します。 diff --git a/sakura_core/_main/CCommandLine.cpp b/sakura_core/_main/CCommandLine.cpp index 5ec6b048ff..21a2ef0752 100644 --- a/sakura_core/_main/CCommandLine.cpp +++ b/sakura_core/_main/CCommandLine.cpp @@ -30,6 +30,9 @@ #include "util/shell.h" #include "util/file.h" #include "env/CSakuraEnvironment.h" +#include "CSelectLang.h" +#include "util/string_ex.h" +#include "String_define.h" /* コマンドラインオプション用定数 */ #define CMDLINEOPT_R 1002 //!< ビューモード diff --git a/sakura_core/_main/CControlProcess.cpp b/sakura_core/_main/CControlProcess.cpp index 54071048ce..d739941a18 100644 --- a/sakura_core/_main/CControlProcess.cpp +++ b/sakura_core/_main/CControlProcess.cpp @@ -22,7 +22,10 @@ #include "CCommandLine.h" #include "env/CShareData_IO.h" #include "debug/CRunningTimer.h" +#include "env/CShareData.h" #include "sakura_rc.h"/// IDD_EXITTING 2002/2/10 aroka ヘッダ整理 +#include "config/system_constants.h" +#include "String_define.h" //------------------------------------------------- diff --git a/sakura_core/_main/CControlTray.cpp b/sakura_core/_main/CControlTray.cpp index 306fef6c85..cefed045f0 100644 --- a/sakura_core/_main/CControlTray.cpp +++ b/sakura_core/_main/CControlTray.cpp @@ -50,7 +50,11 @@ #include "recent/CMRUFolder.h" #include "_main/CCommandLine.h" #include "CGrepEnumKeys.h" +#include "apiwrap/StdApi.h" #include "sakura_rc.h" +#include "config/system_constants.h" +#include "config/app_constants.h" +#include "String_define.h" #define ID_HOTKEY_TRAYMENU 0x1234 diff --git a/sakura_core/_main/CNormalProcess.cpp b/sakura_core/_main/CNormalProcess.cpp index a91df68a9e..d981a423f4 100644 --- a/sakura_core/_main/CNormalProcess.cpp +++ b/sakura_core/_main/CNormalProcess.cpp @@ -35,6 +35,10 @@ #include "plugin/CJackManager.h" #include "CAppMode.h" #include "env/CDocTypeManager.h" +#include "apiwrap/StdApi.h" +#include "CSelectLang.h" +#include "env/CShareData.h" +#include "config/system_constants.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // コンストラクタ・デストラクタ // diff --git a/sakura_core/_main/CProcess.cpp b/sakura_core/_main/CProcess.cpp index de5a81840f..5864443212 100644 --- a/sakura_core/_main/CProcess.cpp +++ b/sakura_core/_main/CProcess.cpp @@ -18,6 +18,9 @@ #include "StdAfx.h" #include "CProcess.h" #include "util/module.h" +#include "env/CShareData.h" +#include "env/DLLSHAREDATA.h" +#include "config/app_constants.h" /*! @brief プロセス基底クラス diff --git a/sakura_core/_main/CProcess.h b/sakura_core/_main/CProcess.h index dba80427a3..561a9f929b 100644 --- a/sakura_core/_main/CProcess.h +++ b/sakura_core/_main/CProcess.h @@ -22,7 +22,6 @@ #include "global.h" #include "util/design_template.h" #include "env/CShareData.h" -#include "env/DLLSHAREDATA.h" #ifdef MINIDUMP_TYPE #define USE_CRASHDUMP diff --git a/sakura_core/_main/CProcessFactory.cpp b/sakura_core/_main/CProcessFactory.cpp index 70afae3ffc..2fb7ec8944 100644 --- a/sakura_core/_main/CProcessFactory.cpp +++ b/sakura_core/_main/CProcessFactory.cpp @@ -27,6 +27,8 @@ #include "util/os.h" #include #include +#include "CSelectLang.h" +#include "config/system_constants.h" class CProcess; diff --git a/sakura_core/_main/WinMain.cpp b/sakura_core/_main/WinMain.cpp index 9948d99a49..995bc2bb2f 100644 --- a/sakura_core/_main/WinMain.cpp +++ b/sakura_core/_main/WinMain.cpp @@ -30,6 +30,9 @@ #include "util/module.h" #include "debug/CRunningTimer.h" #include "version.h" +#include "util/std_macro.h" +#include "env/DLLSHAREDATA.h" +#include "config/app_constants.h" // アプリ名。2007.09.21 kobake 整理 #define _APP_NAME_(TYPE) TYPE("sakura") diff --git a/sakura_core/_os/CClipboard.cpp b/sakura_core/_os/CClipboard.cpp index efb2c3e7b7..577c60ed43 100644 --- a/sakura_core/_os/CClipboard.cpp +++ b/sakura_core/_os/CClipboard.cpp @@ -33,6 +33,7 @@ #include "charset/CShiftJis.h" #include "charset/CUtf8.h" #include "CEol.h" +#include "mem/CNativeA.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // コンストラクタ・デストラクタ // diff --git a/sakura_core/_os/CClipboard.h b/sakura_core/_os/CClipboard.h index d31d5cc3cd..c274d56e46 100644 --- a/sakura_core/_os/CClipboard.h +++ b/sakura_core/_os/CClipboard.h @@ -28,6 +28,8 @@ #pragma once class CEol; +class CNativeW; +class CStringRef; //!サクラエディタ用クリップボードクラス。後々はこの中で全てのクリップボードAPIを呼ばせたい。 class CClipboard{ diff --git a/sakura_core/_os/CDropTarget.cpp b/sakura_core/_os/CDropTarget.cpp index d883904c5e..68acb8a70a 100644 --- a/sakura_core/_os/CDropTarget.cpp +++ b/sakura_core/_os/CDropTarget.cpp @@ -20,6 +20,8 @@ #include "view/CEditView.h"// 2002/2/3 aroka #include "_main/global.h" #include "CClipboard.h" +#include "CSelectLang.h" +#include "String_define.h" COleLibrary CYbInterfaceBase::m_olelib; diff --git a/sakura_core/apiwrap/StdApi.h b/sakura_core/apiwrap/StdApi.h index cb98a86587..45a7451c06 100644 --- a/sakura_core/apiwrap/StdApi.h +++ b/sakura_core/apiwrap/StdApi.h @@ -30,8 +30,6 @@ //ランタイム情報ライブラリにアクセスするWindowsヘッダを参照する #include -#include "mem/CNativeW.h" - //デバッグ用。 //VistaだとExtTextOutの結果が即反映されない。この関数を用いると即反映されるので、 //デバッグ時ステップ実行する際に便利になる。ただし、当然重くなる。 diff --git a/sakura_core/apiwrap/StdControl.cpp b/sakura_core/apiwrap/StdControl.cpp index b6b72bb957..9fd2546770 100644 --- a/sakura_core/apiwrap/StdControl.cpp +++ b/sakura_core/apiwrap/StdControl.cpp @@ -24,6 +24,7 @@ */ #include "StdAfx.h" #include "StdControl.h" +#include "StdApi.h" #include diff --git a/sakura_core/basis/CMyPoint.h b/sakura_core/basis/CMyPoint.h index a06698c976..05abf9f70b 100644 --- a/sakura_core/basis/CMyPoint.h +++ b/sakura_core/basis/CMyPoint.h @@ -28,6 +28,7 @@ #pragma once #include //POINT +#include "basis/primitive.h" class CMyPoint : public POINT{ public: diff --git a/sakura_core/basis/CMyRect.cpp b/sakura_core/basis/CMyRect.cpp index 12c42f1e60..bbb5c6cb67 100644 --- a/sakura_core/basis/CMyRect.cpp +++ b/sakura_core/basis/CMyRect.cpp @@ -24,6 +24,7 @@ */ #include "StdAfx.h" #include "CMyRect.h" +#include "util/std_macro.h" CMyRect MergeRect(const CMyRect& rc1, const CMyRect& rc2) { diff --git a/sakura_core/basis/CMyString.h b/sakura_core/basis/CMyString.h index 3003eced21..0316bb38fb 100644 --- a/sakura_core/basis/CMyString.h +++ b/sakura_core/basis/CMyString.h @@ -30,6 +30,7 @@ #include #include "util/string_ex.h" #include "util/StaticType.h" +#include "config/maxdata.h" #define m_delete2(p) { if(p){ delete[] p; p=0; } } diff --git a/sakura_core/basis/CStrictPoint.h b/sakura_core/basis/CStrictPoint.h index ecac666bd2..e454d33042 100644 --- a/sakura_core/basis/CStrictPoint.h +++ b/sakura_core/basis/CStrictPoint.h @@ -27,6 +27,8 @@ #define SAKURA_CSTRICTPOINT_61EFDE2B_5ACD_464A_8F49_7FB76A4A34C4_H_ #pragma once +#include "basis/primitive.h" + //単位が明示的に区別されたポイント型。※POINTは継承しないことにした /* template class CStrictPoint : public CMyPoint{ diff --git a/sakura_core/basis/CStrictRect.h b/sakura_core/basis/CStrictRect.h index a0b8c013dc..3b3a18d205 100644 --- a/sakura_core/basis/CStrictRect.h +++ b/sakura_core/basis/CStrictRect.h @@ -27,6 +27,8 @@ #define SAKURA_CSTRICTRECT_B41F0F96_8886_4ED1_B6FE_1B4EA70F58D8_H_ #pragma once +#include "util/std_macro.h" + template class CStrictRect{ private: typedef CStrictRect Me; diff --git a/sakura_core/charset/CCodeBase.cpp b/sakura_core/charset/CCodeBase.cpp index d7625cb578..c5c67dea3b 100644 --- a/sakura_core/charset/CCodeBase.cpp +++ b/sakura_core/charset/CCodeBase.cpp @@ -28,10 +28,7 @@ #include "convert/convert_util2.h" #include "charset/codechecker.h" #include "CEol.h" - -// 非依存推奨 -#include "env/CShareData.h" -#include "env/DLLSHAREDATA.h" +#include "env/CommonSetting.h" void CCodeBase::GetBom(CMemory* pcmemBom){ pcmemBom->Clear(); } //!< BOMデータ取得 diff --git a/sakura_core/charset/CCodeBase.h b/sakura_core/charset/CCodeBase.h index 97ae94bbcc..2b14af52ba 100644 --- a/sakura_core/charset/CCodeBase.h +++ b/sakura_core/charset/CCodeBase.h @@ -32,6 +32,7 @@ #include #include "mem/CNativeW.h" +#include "charset/charset.h" #include "CEol.h" //定数 diff --git a/sakura_core/charset/CCodeFactory.h b/sakura_core/charset/CCodeFactory.h index 85eb6a6133..9704f638b5 100644 --- a/sakura_core/charset/CCodeFactory.h +++ b/sakura_core/charset/CCodeFactory.h @@ -27,6 +27,7 @@ #define SAKURA_CCODEFACTORY_A5C6C204_F9BD_42BA_A5CD_1B086833CCA4_H_ #pragma once +#include "charset/charset.h" #include #include "charset/CCodeBase.h" diff --git a/sakura_core/charset/CCodeMediator.cpp b/sakura_core/charset/CCodeMediator.cpp index e93298e6a6..5b0a3907ea 100644 --- a/sakura_core/charset/CCodeMediator.cpp +++ b/sakura_core/charset/CCodeMediator.cpp @@ -27,6 +27,7 @@ #include "charset/icu4c/CharsetDetector.h" #include "charset/CESI.h" #include "io/CBinaryStream.h" +#include "mem/CMemory.h" /* 日本語コードセット判別 diff --git a/sakura_core/charset/CCodePage.cpp b/sakura_core/charset/CCodePage.cpp index 8cfaa930be..19a94f878e 100644 --- a/sakura_core/charset/CCodePage.cpp +++ b/sakura_core/charset/CCodePage.cpp @@ -35,6 +35,7 @@ #include "dlg/CDialog.h" #include "util/tchar_convert.h" #include +#include "apiwrap/StdControl.h" typedef BOOL (WINAPI *pfn_GetCPInfoExT_t)(UINT, DWORD, CPINFOEX*); diff --git a/sakura_core/charset/CESI.cpp b/sakura_core/charset/CESI.cpp index 9cee7ce635..1b2ff3c458 100644 --- a/sakura_core/charset/CESI.cpp +++ b/sakura_core/charset/CESI.cpp @@ -41,6 +41,7 @@ #include "charset/CCodeMediator.h" #include "charset/CEuc.h" #include "charset/codeutil.h" +#include "String_define.h" // 非依存推奨 #include "window/CEditWnd.h" diff --git a/sakura_core/charset/CEuc.cpp b/sakura_core/charset/CEuc.cpp index cb659007dd..2f91e3554d 100644 --- a/sakura_core/charset/CEuc.cpp +++ b/sakura_core/charset/CEuc.cpp @@ -24,10 +24,7 @@ */ #include "StdAfx.h" #include "CEuc.h" - -// 非依存推奨 -#include "env/CShareData.h" -#include "env/DLLSHAREDATA.h" +#include "env/CommonSetting.h" /*! EUCJP → Unicode 変換関数 diff --git a/sakura_core/charset/CJis.cpp b/sakura_core/charset/CJis.cpp index b4fb473c08..1f887166f8 100644 --- a/sakura_core/charset/CJis.cpp +++ b/sakura_core/charset/CJis.cpp @@ -30,10 +30,7 @@ #include "charset/charcode.h" #include "charset/codeutil.h" #include "charset/codechecker.h" - -// 非依存推奨 -#include "env/CShareData.h" -#include "env/DLLSHAREDATA.h" +#include "env/CommonSetting.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 各種判定定数 // diff --git a/sakura_core/charset/CShiftJis.cpp b/sakura_core/charset/CShiftJis.cpp index 45d1c38b73..f746da8271 100644 --- a/sakura_core/charset/CShiftJis.cpp +++ b/sakura_core/charset/CShiftJis.cpp @@ -26,11 +26,7 @@ #include "CShiftJis.h" #include "charset/charcode.h" #include "charset/codechecker.h" - -// 非依存推奨 -#include "env/CShareData.h" -#include "env/DLLSHAREDATA.h" - +#include "env/CommonSetting.h" #include //! 指定した位置の文字が何バイト文字かを返す diff --git a/sakura_core/charset/CUtf8.cpp b/sakura_core/charset/CUtf8.cpp index b46e9f4bf6..e7211ae1df 100644 --- a/sakura_core/charset/CUtf8.cpp +++ b/sakura_core/charset/CUtf8.cpp @@ -27,10 +27,8 @@ #include "StdAfx.h" #include "CUtf8.h" #include "charset/codechecker.h" - -// 非依存推奨 -#include "env/CShareData.h" -#include "env/DLLSHAREDATA.h" +#include "CEol.h" +#include "env/CommonSetting.h" //! BOMデータ取得 void CUtf8::GetBom(CMemory* pcmemBom) diff --git a/sakura_core/charset/charset.cpp b/sakura_core/charset/charset.cpp index 61e2f21f38..6f08eb18d9 100644 --- a/sakura_core/charset/charset.cpp +++ b/sakura_core/charset/charset.cpp @@ -39,6 +39,8 @@ #include "CCodePage.h" #include #include +#include "CSelectLang.h" +#include "String_define.h" struct SCodeSet { ECodeType m_eCodeSet; diff --git a/sakura_core/charset/charset.h b/sakura_core/charset/charset.h index fb47128b64..89f4abe225 100644 --- a/sakura_core/charset/charset.h +++ b/sakura_core/charset/charset.h @@ -27,6 +27,8 @@ #define SAKURA_CHARSET_CD85F6F9_5224_44A2_9BC4_5F631B467701_H_ #pragma once +#include + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 定数 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // diff --git a/sakura_core/charset/codechecker.h b/sakura_core/charset/codechecker.h index 0dd98d31fe..38933c9893 100644 --- a/sakura_core/charset/codechecker.h +++ b/sakura_core/charset/codechecker.h @@ -38,6 +38,7 @@ #include "_main/global.h" #include "convert/convert_util2.h" +#include "basis/primitive.h" /*! 認識する文字コード種別 diff --git a/sakura_core/charset/codeutil.cpp b/sakura_core/charset/codeutil.cpp index a9eeadec8a..8c88dbd9a5 100644 --- a/sakura_core/charset/codeutil.cpp +++ b/sakura_core/charset/codeutil.cpp @@ -23,6 +23,7 @@ distribution. */ #include "StdAfx.h" +#include #include #include "charset/codeutil.h" #include "charset/charcode.h" diff --git a/sakura_core/charset/codeutil.h b/sakura_core/charset/codeutil.h index d9858b725e..f5b5ee6dd0 100644 --- a/sakura_core/charset/codeutil.h +++ b/sakura_core/charset/codeutil.h @@ -28,6 +28,7 @@ #pragma once #include +#include "basis/primitive.h" #if 0 // 未使用 // Oct. 3, 2002 genta diff --git a/sakura_core/cmd/CViewCommander.cpp b/sakura_core/cmd/CViewCommander.cpp index cb14998de3..bbab8606f5 100644 --- a/sakura_core/cmd/CViewCommander.cpp +++ b/sakura_core/cmd/CViewCommander.cpp @@ -34,6 +34,10 @@ #include "macro/CSMacroMgr.h" #include "CEditApp.h" #include "plugin/CJackManager.h" +#include "apiwrap/StdApi.h" +#include "CSelectLang.h" +#include "config/app_constants.h" +#include "String_define.h" CViewCommander::CViewCommander(CEditView* pEditView) : m_pCommanderView(pEditView) { diff --git a/sakura_core/cmd/CViewCommander.h b/sakura_core/cmd/CViewCommander.h index 6c4aa2a0da..65c90f2d37 100644 --- a/sakura_core/cmd/CViewCommander.h +++ b/sakura_core/cmd/CViewCommander.h @@ -27,6 +27,9 @@ #define SAKURA_CVIEWCOMMANDER_2790DAD1_148B_4DC5_8BCB_A2CE3D595F50_H_ #pragma once +#include "CEol.h" +#include "types/CType.h" + class CEditView; enum EFunctionCode; class CEditDoc; @@ -37,7 +40,7 @@ class CEditWnd; class CColorStrategy; class CColorStrategyPool; class CSMacroMgr; -#include "CEol.h" +class CStringRef; class CViewCommander{ public: diff --git a/sakura_core/cmd/CViewCommander_Bookmark.cpp b/sakura_core/cmd/CViewCommander_Bookmark.cpp index 750f51fc68..0afb828f85 100644 --- a/sakura_core/cmd/CViewCommander_Bookmark.cpp +++ b/sakura_core/cmd/CViewCommander_Bookmark.cpp @@ -18,6 +18,8 @@ #include "CViewCommander.h" #include "CViewCommander_inline.h" #include "docplus/CFuncListManager.h" +#include "CSelectLang.h" +#include "String_define.h" // from CViewCommander_New.cpp /*! 検索開始位置へ戻る diff --git a/sakura_core/cmd/CViewCommander_Clipboard.cpp b/sakura_core/cmd/CViewCommander_Clipboard.cpp index 3a0bd6a040..9cb591ae9b 100644 --- a/sakura_core/cmd/CViewCommander_Clipboard.cpp +++ b/sakura_core/cmd/CViewCommander_Clipboard.cpp @@ -25,6 +25,7 @@ #include "view/colors/CColor_Found.h" #include "uiparts/CWaitCursor.h" #include "util/os.h" +#include "apiwrap/CommonControl.h" /** 切り取り(選択範囲をクリップボードにコピーして削除) diff --git a/sakura_core/cmd/CViewCommander_Convert.cpp b/sakura_core/cmd/CViewCommander_Convert.cpp index 93ddefd49f..ca4a801d01 100644 --- a/sakura_core/cmd/CViewCommander_Convert.cpp +++ b/sakura_core/cmd/CViewCommander_Convert.cpp @@ -21,6 +21,7 @@ #include "convert/CDecode_Base64Decode.h" #include "convert/CDecode_UuDecode.h" #include "io/CBinaryStream.h" +#include "CSelectLang.h" /* 小文字 */ void CViewCommander::Command_TOLOWER( void ) diff --git a/sakura_core/cmd/CViewCommander_Cursor.cpp b/sakura_core/cmd/CViewCommander_Cursor.cpp index 8f9f9cd230..6143b870a5 100644 --- a/sakura_core/cmd/CViewCommander_Cursor.cpp +++ b/sakura_core/cmd/CViewCommander_Cursor.cpp @@ -25,6 +25,8 @@ #include "CMarkMgr.h"/// 2002/2/3 aroka 追加 #include "mem/CMemoryIterator.h" // @@@ 2002.09.28 YAZAKI +#include "CSelectLang.h" +#include "String_define.h" void CViewCommander::Command_MOVECURSOR(CLogicPoint pos, int option) { diff --git a/sakura_core/cmd/CViewCommander_CustMenu.cpp b/sakura_core/cmd/CViewCommander_CustMenu.cpp index 91c420625f..19f4360689 100644 --- a/sakura_core/cmd/CViewCommander_CustMenu.cpp +++ b/sakura_core/cmd/CViewCommander_CustMenu.cpp @@ -21,6 +21,8 @@ #include "CViewCommander.h" #include "CViewCommander_inline.h" +#include "apiwrap/StdApi.h" + /* 右クリックメニュー */ void CViewCommander::Command_MENU_RBUTTON( void ) { diff --git a/sakura_core/cmd/CViewCommander_Diff.cpp b/sakura_core/cmd/CViewCommander_Diff.cpp index 6bf326bf24..089dd17261 100644 --- a/sakura_core/cmd/CViewCommander_Diff.cpp +++ b/sakura_core/cmd/CViewCommander_Diff.cpp @@ -31,6 +31,9 @@ #include "util/window.h" #include "util/os.h" #include "_main/CMutex.h" +#include "apiwrap/StdApi.h" +#include "config/system_constants.h" +#include "String_define.h" /*! @return true:正常終了 / false:エラー終了 diff --git a/sakura_core/cmd/CViewCommander_Edit.cpp b/sakura_core/cmd/CViewCommander_Edit.cpp index 9c35c7c133..adacbae8cd 100644 --- a/sakura_core/cmd/CViewCommander_Edit.cpp +++ b/sakura_core/cmd/CViewCommander_Edit.cpp @@ -27,6 +27,7 @@ #include "plugin/CJackManager.h" #include "plugin/CSmartIndentIfObj.h" #include "debug/CRunningTimer.h" +#include "apiwrap/CommonControl.h" /* wchar_t1個分の文字を入力 */ void CViewCommander::Command_WCHAR( wchar_t wcChar, bool bConvertEOL ) diff --git a/sakura_core/cmd/CViewCommander_Edit_advanced.cpp b/sakura_core/cmd/CViewCommander_Edit_advanced.cpp index c29de8742a..f77430b366 100644 --- a/sakura_core/cmd/CViewCommander_Edit_advanced.cpp +++ b/sakura_core/cmd/CViewCommander_Edit_advanced.cpp @@ -30,6 +30,9 @@ #include "uiparts/CWaitCursor.h" #include "mem/CMemoryIterator.h" // @@@ 2002.09.28 YAZAKI +#include "apiwrap/CommonControl.h" +#include "CSelectLang.h" +#include "String_define.h" using namespace std; // 2002/2/3 aroka to here diff --git a/sakura_core/cmd/CViewCommander_File.cpp b/sakura_core/cmd/CViewCommander_File.cpp index 72ce1d18be..13ffa00009 100644 --- a/sakura_core/cmd/CViewCommander_File.cpp +++ b/sakura_core/cmd/CViewCommander_File.cpp @@ -59,7 +59,11 @@ #include "env/CSakuraEnvironment.h" #include "debug/CRunningTimer.h" #include "util/os.h" +#include "apiwrap/CommonControl.h" +#include "CSelectLang.h" #include "sakura_rc.h" +#include "config/app_constants.h" +#include "String_define.h" /* 新規作成 */ void CViewCommander::Command_FILENEW( void ) diff --git a/sakura_core/cmd/CViewCommander_Grep.cpp b/sakura_core/cmd/CViewCommander_Grep.cpp index a014314324..cbf661bae8 100644 --- a/sakura_core/cmd/CViewCommander_Grep.cpp +++ b/sakura_core/cmd/CViewCommander_Grep.cpp @@ -21,6 +21,8 @@ #include "CGrepAgent.h" #include "plugin/CPlugin.h" #include "plugin/CJackManager.h" +#include "CSelectLang.h" +#include "String_define.h" /*! GREPダイアログの表示 diff --git a/sakura_core/cmd/CViewCommander_Macro.cpp b/sakura_core/cmd/CViewCommander_Macro.cpp index ea37e8a64a..4f33e373bf 100644 --- a/sakura_core/cmd/CViewCommander_Macro.cpp +++ b/sakura_core/cmd/CViewCommander_Macro.cpp @@ -32,6 +32,7 @@ #include "util/module.h" #include "env/CShareData.h" #include "env/CSakuraEnvironment.h" +#include "String_define.h" /* キーマクロの記録開始/終了 */ void CViewCommander::Command_RECKEYMACRO( void ) diff --git a/sakura_core/cmd/CViewCommander_Outline.cpp b/sakura_core/cmd/CViewCommander_Outline.cpp index b824dd6fdb..a719c9435a 100644 --- a/sakura_core/cmd/CViewCommander_Outline.cpp +++ b/sakura_core/cmd/CViewCommander_Outline.cpp @@ -26,6 +26,7 @@ #include "outline/CFuncInfoArr.h" #include "plugin/CJackManager.h" #include "plugin/COutlineIfObj.h" +#include "apiwrap/StdApi.h" #include "sakura_rc.h" /*! アウトライン解析 diff --git a/sakura_core/cmd/CViewCommander_Search.cpp b/sakura_core/cmd/CViewCommander_Search.cpp index 99eafaf63b..a744675b07 100644 --- a/sakura_core/cmd/CViewCommander_Search.cpp +++ b/sakura_core/cmd/CViewCommander_Search.cpp @@ -31,7 +31,12 @@ #include "util/window.h" #include "util/string_ex2.h" #include +#include "apiwrap/CommonControl.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" #include "sakura_rc.h" +#include "config/app_constants.h" +#include "String_define.h" /*! 検索(ボックス)コマンド実行. diff --git a/sakura_core/cmd/CViewCommander_Settings.cpp b/sakura_core/cmd/CViewCommander_Settings.cpp index 9f67705c84..5362eaeca6 100644 --- a/sakura_core/cmd/CViewCommander_Settings.cpp +++ b/sakura_core/cmd/CViewCommander_Settings.cpp @@ -31,7 +31,8 @@ #include "util/window.h" #include "util/zoom.h" #include - +#include "config/system_constants.h" +#include "config/app_constants.h" /*! ツールバーの表示/非表示 diff --git a/sakura_core/cmd/CViewCommander_Support.cpp b/sakura_core/cmd/CViewCommander_Support.cpp index 423516ec3c..a93298df6c 100644 --- a/sakura_core/cmd/CViewCommander_Support.cpp +++ b/sakura_core/cmd/CViewCommander_Support.cpp @@ -31,6 +31,11 @@ #include "env/CHelpManager.h" #include "util/module.h" #include "util/shell.h" +#include "apiwrap/StdApi.h" +#include "CSelectLang.h" +#include "config/system_constants.h" +#include "config/app_constants.h" +#include "String_define.h" /*! 入力補完 Ctrl+Spaceでここに到着。 diff --git a/sakura_core/cmd/CViewCommander_TagJump.cpp b/sakura_core/cmd/CViewCommander_TagJump.cpp index 77a0077a12..926c4896b0 100644 --- a/sakura_core/cmd/CViewCommander_TagJump.cpp +++ b/sakura_core/cmd/CViewCommander_TagJump.cpp @@ -35,7 +35,11 @@ #include "util/string_ex2.h" #include "env/CSakuraEnvironment.h" #include "CGrepAgent.h" +#include "apiwrap/StdApi.h" +#include "CSelectLang.h" #include "sakura_rc.h" +#include "config/system_constants.h" +#include "String_define.h" // "までを切り取る static bool GetQuoteFilePath( const wchar_t* pLine, wchar_t* pFile, size_t size ){ diff --git a/sakura_core/cmd/CViewCommander_Window.cpp b/sakura_core/cmd/CViewCommander_Window.cpp index ecc98b19e3..baab9b67bc 100644 --- a/sakura_core/cmd/CViewCommander_Window.cpp +++ b/sakura_core/cmd/CViewCommander_Window.cpp @@ -29,6 +29,7 @@ #include "util/os.h" #include "env/CSakuraEnvironment.h" #include "env/CShareData.h" +#include "config/system_constants.h" /* 上下に分割 */ //Sept. 17, 2000 jepro 説明の「縦」を「上下に」に変更 void CViewCommander::Command_SPLIT_V( void ) diff --git a/sakura_core/convert/CConvert.h b/sakura_core/convert/CConvert.h index be109482ad..be520e4418 100644 --- a/sakura_core/convert/CConvert.h +++ b/sakura_core/convert/CConvert.h @@ -33,6 +33,7 @@ #include "Funccode_enum.h" // EFunctionCode #include "String_define.h" #include "basis/SakuraBasis.h" +#include "debug/Debug2.h" #include "util/MessageBoxF.h" class CNativeW; diff --git a/sakura_core/convert/CConvert_HaneisuToZeneisu.cpp b/sakura_core/convert/CConvert_HaneisuToZeneisu.cpp index 471b5558d4..a69fe1b9bf 100644 --- a/sakura_core/convert/CConvert_HaneisuToZeneisu.cpp +++ b/sakura_core/convert/CConvert_HaneisuToZeneisu.cpp @@ -25,6 +25,7 @@ #include "StdAfx.h" #include "CConvert_HaneisuToZeneisu.h" #include "convert_util.h" +#include "mem/CNativeW.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // インターフェース // diff --git a/sakura_core/convert/CConvert_HankataToZenhira.cpp b/sakura_core/convert/CConvert_HankataToZenhira.cpp index c409c72c2c..729860c64e 100644 --- a/sakura_core/convert/CConvert_HankataToZenhira.cpp +++ b/sakura_core/convert/CConvert_HankataToZenhira.cpp @@ -25,6 +25,7 @@ #include "StdAfx.h" #include "CConvert_HankataToZenhira.h" #include "convert_util.h" +#include "mem/CNativeW.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // インターフェース // diff --git a/sakura_core/convert/CConvert_HankataToZenkata.cpp b/sakura_core/convert/CConvert_HankataToZenkata.cpp index 7cb5889a8a..e542e52550 100644 --- a/sakura_core/convert/CConvert_HankataToZenkata.cpp +++ b/sakura_core/convert/CConvert_HankataToZenkata.cpp @@ -25,6 +25,7 @@ #include "StdAfx.h" #include "CConvert_HankataToZenkata.h" #include "convert_util.h" +#include "mem/CNativeW.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // インターフェース // diff --git a/sakura_core/convert/CConvert_SpaceToTab.cpp b/sakura_core/convert/CConvert_SpaceToTab.cpp index 748de37b9c..fb8b6f6345 100644 --- a/sakura_core/convert/CConvert_SpaceToTab.cpp +++ b/sakura_core/convert/CConvert_SpaceToTab.cpp @@ -27,6 +27,7 @@ #include "charset/charcode.h" #include "CEol.h" #include "util/string_ex2.h" +#include "mem/CNativeW.h" //! 空白→TAB変換。単独のスペースは変換しない bool CConvert_SpaceToTab::DoConvert(CNativeW* pcData) diff --git a/sakura_core/convert/CConvert_TabToSpace.cpp b/sakura_core/convert/CConvert_TabToSpace.cpp index fe7766ce09..4ca8de55ba 100644 --- a/sakura_core/convert/CConvert_TabToSpace.cpp +++ b/sakura_core/convert/CConvert_TabToSpace.cpp @@ -27,6 +27,7 @@ #include "charset/charcode.h" #include "CEol.h" #include "util/string_ex2.h" +#include "mem/CNativeW.h" //! TAB→空白 bool CConvert_TabToSpace::DoConvert(CNativeW* pcData) diff --git a/sakura_core/convert/CConvert_ToHankaku.cpp b/sakura_core/convert/CConvert_ToHankaku.cpp index 855162c3ec..0a9ce2f6b3 100644 --- a/sakura_core/convert/CConvert_ToHankaku.cpp +++ b/sakura_core/convert/CConvert_ToHankaku.cpp @@ -25,6 +25,7 @@ #include "StdAfx.h" #include "CConvert_ToHankaku.h" #include "convert_util.h" +#include "mem/CNativeW.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // インターフェース // diff --git a/sakura_core/convert/CConvert_ToLower.cpp b/sakura_core/convert/CConvert_ToLower.cpp index 0ee7a103fc..6a47170c18 100644 --- a/sakura_core/convert/CConvert_ToLower.cpp +++ b/sakura_core/convert/CConvert_ToLower.cpp @@ -24,6 +24,7 @@ */ #include "StdAfx.h" #include "CConvert_ToLower.h" +#include "mem/CNativeW.h" // 小文字へ変換 // 変換できないキリル文字Ёの修正 2010/6/5 Uchi diff --git a/sakura_core/convert/CConvert_ToUpper.cpp b/sakura_core/convert/CConvert_ToUpper.cpp index db8b36b25c..240ec1f72d 100644 --- a/sakura_core/convert/CConvert_ToUpper.cpp +++ b/sakura_core/convert/CConvert_ToUpper.cpp @@ -24,6 +24,7 @@ */ #include "StdAfx.h" #include "CConvert_ToUpper.h" +#include "mem/CNativeW.h" // 大文字へ変換 // 変換できないキリル文字ёの修正 2010/6/5 Uchi diff --git a/sakura_core/convert/CConvert_ToZenhira.cpp b/sakura_core/convert/CConvert_ToZenhira.cpp index ead16d8bf0..e76856e2d7 100644 --- a/sakura_core/convert/CConvert_ToZenhira.cpp +++ b/sakura_core/convert/CConvert_ToZenhira.cpp @@ -25,6 +25,7 @@ #include "StdAfx.h" #include "CConvert_ToZenhira.h" #include "convert_util.h" +#include "mem/CNativeW.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // インターフェース // diff --git a/sakura_core/convert/CConvert_ToZenkata.cpp b/sakura_core/convert/CConvert_ToZenkata.cpp index 96d49a04a0..59c2964d0e 100644 --- a/sakura_core/convert/CConvert_ToZenkata.cpp +++ b/sakura_core/convert/CConvert_ToZenkata.cpp @@ -25,6 +25,7 @@ #include "StdAfx.h" #include "CConvert_ToZenkata.h" #include "convert_util.h" +#include "mem/CNativeW.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // インターフェース // diff --git a/sakura_core/convert/CConvert_Trim.cpp b/sakura_core/convert/CConvert_Trim.cpp index ca9f1e5e1b..6526c4e949 100644 --- a/sakura_core/convert/CConvert_Trim.cpp +++ b/sakura_core/convert/CConvert_Trim.cpp @@ -28,6 +28,7 @@ #include "CEol.h" #include "charset/charcode.h" #include "util/string_ex2.h" +#include "mem/CNativeW.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // インターフェース // diff --git a/sakura_core/convert/CConvert_ZeneisuToHaneisu.cpp b/sakura_core/convert/CConvert_ZeneisuToHaneisu.cpp index e97872e7d9..4c9446acdd 100644 --- a/sakura_core/convert/CConvert_ZeneisuToHaneisu.cpp +++ b/sakura_core/convert/CConvert_ZeneisuToHaneisu.cpp @@ -25,6 +25,7 @@ #include "StdAfx.h" #include "CConvert_ZeneisuToHaneisu.h" #include "convert_util.h" +#include "mem/CNativeW.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // インターフェース // diff --git a/sakura_core/convert/CConvert_ZenkataToHankata.cpp b/sakura_core/convert/CConvert_ZenkataToHankata.cpp index 63cf6f62f1..d186f8cee0 100644 --- a/sakura_core/convert/CConvert_ZenkataToHankata.cpp +++ b/sakura_core/convert/CConvert_ZenkataToHankata.cpp @@ -25,6 +25,7 @@ #include "StdAfx.h" #include "CConvert_ZenkataToHankata.h" #include "convert_util.h" +#include "mem/CNativeW.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // インターフェース // diff --git a/sakura_core/convert/CDecode_Base64Decode.cpp b/sakura_core/convert/CDecode_Base64Decode.cpp index 4dd071839d..7d64d99c89 100644 --- a/sakura_core/convert/CDecode_Base64Decode.cpp +++ b/sakura_core/convert/CDecode_Base64Decode.cpp @@ -33,6 +33,7 @@ #include "charset/charcode.h" #include "convert/convert_util2.h" #include "charset/codechecker.h" +#include "mem/CNativeW.h" /* Base64デコード */ bool CDecode_Base64Decode::DoDecode( const CNativeW& pcSrc, CMemory* pcDst ) diff --git a/sakura_core/convert/CDecode_UuDecode.cpp b/sakura_core/convert/CDecode_UuDecode.cpp index 3f74d92971..1406ec8c3e 100644 --- a/sakura_core/convert/CDecode_UuDecode.cpp +++ b/sakura_core/convert/CDecode_UuDecode.cpp @@ -28,6 +28,7 @@ #include "convert/convert_util2.h" #include "util/string_ex2.h" #include "CEol.h" +#include "mem/CNativeW.h" /* Uudecode (デコード)*/ bool CDecode_UuDecode::DoDecode( const CNativeW& pcSrc, CMemory* pcDst ) diff --git a/sakura_core/convert/convert_util2.h b/sakura_core/convert/convert_util2.h index a4aae0c475..6cb81b4a95 100644 --- a/sakura_core/convert/convert_util2.h +++ b/sakura_core/convert/convert_util2.h @@ -34,6 +34,8 @@ #include "charset/charcode.h" #include "parse/CWordParse.h" #include "mem/CMemory.h" +#include "util/string_ex.h" +#include "charset/charset.h" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // diff --git a/sakura_core/debug/CRunningTimer.cpp b/sakura_core/debug/CRunningTimer.cpp index 89fc62187d..fa80864ea9 100644 --- a/sakura_core/debug/CRunningTimer.cpp +++ b/sakura_core/debug/CRunningTimer.cpp @@ -19,6 +19,7 @@ #include #include "debug/CRunningTimer.h" #include "_main/global.h" +#include "debug/Debug2.h" #ifdef _DEBUG diff --git a/sakura_core/dlg/CDialog.cpp b/sakura_core/dlg/CDialog.cpp index dd60c2d88c..c314b2254b 100644 --- a/sakura_core/dlg/CDialog.cpp +++ b/sakura_core/dlg/CDialog.cpp @@ -32,6 +32,8 @@ #include "util/shell.h" #include "util/module.h" #include "util/window.h" +#include "apiwrap/StdApi.h" +#include "apiwrap/StdControl.h" /* ダイアログプロシージャ */ INT_PTR CALLBACK MyDialogProc( diff --git a/sakura_core/dlg/CDlgAbout.cpp b/sakura_core/dlg/CDlgAbout.cpp index d88e2ac48f..3ae11ff25a 100644 --- a/sakura_core/dlg/CDlgAbout.cpp +++ b/sakura_core/dlg/CDlgAbout.cpp @@ -28,7 +28,12 @@ #include "util/window.h" #include "sakura_rc.h" // 2002/2/10 aroka 復帰 #include "version.h" +#include "apiwrap/StdApi.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" #include "sakura.hh" +#include "config/system_constants.h" +#include "String_define.h" // バージョン情報 CDlgAbout.cpp //@@@ 2002.01.07 add start MIK const DWORD p_helpids[] = { //12900 diff --git a/sakura_core/dlg/CDlgCancel.cpp b/sakura_core/dlg/CDlgCancel.cpp index 11c08a6052..d20c141739 100644 --- a/sakura_core/dlg/CDlgCancel.cpp +++ b/sakura_core/dlg/CDlgCancel.cpp @@ -14,6 +14,8 @@ #include "StdAfx.h" #include "dlg/CDlgCancel.h" +#include "apiwrap/StdApi.h" + CDlgCancel::CDlgCancel() { m_bCANCEL = FALSE; /* IDCANCELボタンが押された */ diff --git a/sakura_core/dlg/CDlgCompare.cpp b/sakura_core/dlg/CDlgCompare.cpp index 0bb2c1abe0..e182781473 100644 --- a/sakura_core/dlg/CDlgCompare.cpp +++ b/sakura_core/dlg/CDlgCompare.cpp @@ -24,8 +24,11 @@ #include "util/shell.h" #include "util/file.h" #include "util/string_ex2.h" +#include "apiwrap/StdApi.h" +#include "apiwrap/StdControl.h" #include "sakura_rc.h" #include "sakura.hh" +#include "config/system_constants.h" // ファイル内容比較 CDlgCompare.cpp //@@@ 2002.01.07 add start MIK const DWORD p_helpids[] = { //12300 diff --git a/sakura_core/dlg/CDlgCtrlCode.cpp b/sakura_core/dlg/CDlgCtrlCode.cpp index a57e45e8e8..ee392e8c42 100644 --- a/sakura_core/dlg/CDlgCtrlCode.cpp +++ b/sakura_core/dlg/CDlgCtrlCode.cpp @@ -35,8 +35,11 @@ #include "dlg/CDlgCtrlCode.h" #include "func/Funccode.h" #include "util/shell.h" +#include "CSelectLang.h" +#include "basis/CMyString.h" #include "sakura_rc.h" #include "sakura.hh" +#include "String_define.h" const DWORD p_helpids[] = { //13300 IDC_LIST_CTRLCODE, HIDC_LIST_CTRLCODE, diff --git a/sakura_core/dlg/CDlgDiff.cpp b/sakura_core/dlg/CDlgDiff.cpp index c47aa11ec4..b6e9bb386a 100644 --- a/sakura_core/dlg/CDlgDiff.cpp +++ b/sakura_core/dlg/CDlgDiff.cpp @@ -26,8 +26,11 @@ #include "util/shell.h" #include "util/string_ex2.h" #include "util/file.h" +#include "apiwrap/StdApi.h" +#include "apiwrap/StdControl.h" #include "sakura_rc.h" #include "sakura.hh" +#include "config/system_constants.h" const DWORD p_helpids[] = { //13200 IDC_BUTTON_DIFF_DST, HIDC_BUTTON_DIFF_DST, diff --git a/sakura_core/dlg/CDlgDiff.h b/sakura_core/dlg/CDlgDiff.h index 51c384c6ad..ca77455ed7 100644 --- a/sakura_core/dlg/CDlgDiff.h +++ b/sakura_core/dlg/CDlgDiff.h @@ -34,9 +34,12 @@ #define SAKURA_CDLGDIFF_57739DBD_0797_4F83_9DB0_F4D51A54157F_H_ #pragma once +#include "dlg/CDialog.h" +#include "basis/CMyString.h" +#include "charset/charset.h" + class CDlgDiff; -#include "dlg/CDialog.h" /*! @brief DIFF差分表示ダイアログボックス */ diff --git a/sakura_core/dlg/CDlgExec.cpp b/sakura_core/dlg/CDlgExec.cpp index ecf8be4016..ab371d3e58 100644 --- a/sakura_core/dlg/CDlgExec.cpp +++ b/sakura_core/dlg/CDlgExec.cpp @@ -25,8 +25,11 @@ #include "util/window.h" #include "_main/CAppMode.h" #include "doc/CEditDoc.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" #include "sakura_rc.h" #include "sakura.hh" +#include "String_define.h" //外部コマンド CDlgExec.cpp //@@@ 2002.01.07 add start MIK const DWORD p_helpids[] = { //12100 diff --git a/sakura_core/dlg/CDlgFavorite.cpp b/sakura_core/dlg/CDlgFavorite.cpp index 24ca0d69cd..29d494fb3b 100644 --- a/sakura_core/dlg/CDlgFavorite.cpp +++ b/sakura_core/dlg/CDlgFavorite.cpp @@ -42,8 +42,12 @@ #include "util/file.h" #include "util/os.h" #include "util/input.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" #include "sakura_rc.h" #include "sakura.hh" +#include "config/system_constants.h" +#include "String_define.h" const DWORD p_helpids[] = { IDC_TAB_FAVORITE, HIDC_TAB_FAVORITE, //タブ diff --git a/sakura_core/dlg/CDlgFileUpdateQuery.cpp b/sakura_core/dlg/CDlgFileUpdateQuery.cpp index 2e97cae46c..faf288f8dc 100644 --- a/sakura_core/dlg/CDlgFileUpdateQuery.cpp +++ b/sakura_core/dlg/CDlgFileUpdateQuery.cpp @@ -33,7 +33,10 @@ #include "StdAfx.h" #include "dlg/CDlgFileUpdateQuery.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" #include "sakura_rc.h" +#include "String_define.h" BOOL CDlgFileUpdateQuery::OnInitDialog( HWND hWnd, WPARAM wParam, LPARAM lParam ) { diff --git a/sakura_core/dlg/CDlgFind.cpp b/sakura_core/dlg/CDlgFind.cpp index 58cac371a1..5b0e96c482 100644 --- a/sakura_core/dlg/CDlgFind.cpp +++ b/sakura_core/dlg/CDlgFind.cpp @@ -23,8 +23,12 @@ #include "dlg/CDlgFind.h" #include "view/CEditView.h" #include "util/shell.h" +#include "apiwrap/StdApi.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" #include "sakura_rc.h" #include "sakura.hh" +#include "String_define.h" //検索 CDlgFind.cpp //@@@ 2002.01.07 add start MIK const DWORD p_helpids[] = { //11800 diff --git a/sakura_core/dlg/CDlgGrep.cpp b/sakura_core/dlg/CDlgGrep.cpp index f79c088dd6..a58c89a67b 100644 --- a/sakura_core/dlg/CDlgGrep.cpp +++ b/sakura_core/dlg/CDlgGrep.cpp @@ -29,8 +29,13 @@ #include "util/window.h" #include "env/DLLSHAREDATA.h" #include "env/CSakuraEnvironment.h" +#include "apiwrap/StdApi.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" #include "sakura_rc.h" #include "sakura.hh" +#include "config/system_constants.h" +#include "String_define.h" //GREP CDlgGrep.cpp //@@@ 2002.01.07 add start MIK const DWORD p_helpids[] = { //12000 diff --git a/sakura_core/dlg/CDlgGrepReplace.cpp b/sakura_core/dlg/CDlgGrepReplace.cpp index 10a9d8adbf..d6e6ae897f 100644 --- a/sakura_core/dlg/CDlgGrepReplace.cpp +++ b/sakura_core/dlg/CDlgGrepReplace.cpp @@ -26,8 +26,12 @@ #include "util/window.h" #include "env/DLLSHAREDATA.h" #include "env/CSakuraEnvironment.h" +#include "apiwrap/StdApi.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" #include "sakura_rc.h" #include "sakura.hh" +#include "String_define.h" const DWORD p_helpids[] = { IDC_BUTTON_FOLDER, HIDC_GREP_REP_BUTTON_FOLDER, //フォルダ diff --git a/sakura_core/dlg/CDlgInput1.cpp b/sakura_core/dlg/CDlgInput1.cpp index 09cac87a99..cb3eb9bec8 100644 --- a/sakura_core/dlg/CDlgInput1.cpp +++ b/sakura_core/dlg/CDlgInput1.cpp @@ -22,6 +22,8 @@ #include "sakura_rc.h" #include "sakura.hh" #include "util/window.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" // 入力 CDlgInput1.cpp //@@@ 2002.01.07 add start MIK static const DWORD p_helpids[] = { //13000 diff --git a/sakura_core/dlg/CDlgInput1.h b/sakura_core/dlg/CDlgInput1.h index 5b385477bb..8b02a3d90e 100644 --- a/sakura_core/dlg/CDlgInput1.h +++ b/sakura_core/dlg/CDlgInput1.h @@ -15,6 +15,8 @@ #define SAKURA_CDLGINPUT1_43CB765B_D257_4DBC_85E9_D2587B7E9D8E_H_ #pragma once +#include "mem/CNativeW.h" + class CDlgInput1; /*----------------------------------------------------------------------- diff --git a/sakura_core/dlg/CDlgJump.cpp b/sakura_core/dlg/CDlgJump.cpp index e3ff2c22c2..711116066d 100644 --- a/sakura_core/dlg/CDlgJump.cpp +++ b/sakura_core/dlg/CDlgJump.cpp @@ -25,8 +25,11 @@ #include "util/shell.h" #include "util/os.h" #include "window/CEditWnd.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" #include "sakura_rc.h" #include "sakura.hh" +#include "String_define.h" // ジャンプ CDlgJump.cpp //@@@ 2002.01.07 add start MIK const DWORD p_helpids[] = { //12800 diff --git a/sakura_core/dlg/CDlgOpenFile.cpp b/sakura_core/dlg/CDlgOpenFile.cpp index b9cb31f6bd..d935976dc2 100644 --- a/sakura_core/dlg/CDlgOpenFile.cpp +++ b/sakura_core/dlg/CDlgOpenFile.cpp @@ -20,6 +20,7 @@ #include "StdAfx.h" #include "dlg/CDlgOpenFile.h" +#include "env/DLLSHAREDATA.h" extern std::shared_ptr New_CDlgOpenFile_CommonFileDialog(); extern std::shared_ptr New_CDlgOpenFile_CommonItemDialog(); diff --git a/sakura_core/dlg/CDlgOpenFile.h b/sakura_core/dlg/CDlgOpenFile.h index a458aba995..6e7efb5fce 100644 --- a/sakura_core/dlg/CDlgOpenFile.h +++ b/sakura_core/dlg/CDlgOpenFile.h @@ -24,6 +24,7 @@ #include #include +#include "util/design_template.h" struct SLoadInfo; // doc/CDocListener.h struct SSaveInfo; // doc/CDocListener.h diff --git a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp index e139171db1..021bf33f9e 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp @@ -40,8 +40,11 @@ #include "util/module.h" #include "util/design_template.h" #include "basis/CMyString.h" +#include "apiwrap/StdApi.h" +#include "apiwrap/StdControl.h" #include "sakura_rc.h" #include "sakura.hh" +#include "String_define.h" static const DWORD p_helpids[] = { //13100 // IDOK, HIDOK_OPENDLG, //Winのヘルプで勝手に出てくる diff --git a/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp index 5520b65f3b..4750deddc3 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp @@ -33,6 +33,8 @@ #include "util/os.h" #include "util/module.h" #include "CFileExt.h" +#include "env/DLLSHAREDATA.h" +#include "String_define.h" struct CDlgOpenFile_CommonItemDialog final : diff --git a/sakura_core/dlg/CDlgPluginOption.cpp b/sakura_core/dlg/CDlgPluginOption.cpp index 11e2c79219..0206812f12 100644 --- a/sakura_core/dlg/CDlgPluginOption.cpp +++ b/sakura_core/dlg/CDlgPluginOption.cpp @@ -37,8 +37,11 @@ #include "util/window.h" #include "util/string_ex2.h" #include "util/module.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" #include "sakura_rc.h" #include "sakura.hh" +#include "String_define.h" // BOOL変数の表示 #define BOOL_DISP_TRUE L"\u2611" diff --git a/sakura_core/dlg/CDlgPrintSetting.cpp b/sakura_core/dlg/CDlgPrintSetting.cpp index ecff2c9930..5343b5605e 100644 --- a/sakura_core/dlg/CDlgPrintSetting.cpp +++ b/sakura_core/dlg/CDlgPrintSetting.cpp @@ -41,8 +41,12 @@ #include "util/shell.h" #include "util/window.h" #include "util/os.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" +#include "util/string_ex.h" #include "sakura_rc.h" // 2002/2/10 aroka #include "sakura.hh" +#include "String_define.h" // 印刷設定 CDlgPrintSetting.cpp //@@@ 2002.01.07 add start MIK const DWORD p_helpids[] = { //12500 diff --git a/sakura_core/dlg/CDlgProfileMgr.cpp b/sakura_core/dlg/CDlgProfileMgr.cpp index eaa10716f0..5929083748 100644 --- a/sakura_core/dlg/CDlgProfileMgr.cpp +++ b/sakura_core/dlg/CDlgProfileMgr.cpp @@ -35,8 +35,12 @@ #include "util/file.h" #include "util/shell.h" #include "util/window.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" +#include "func/Funccode.h" #include "sakura_rc.h" #include "sakura.hh" +#include "String_define.h" const DWORD p_helpids[] = { IDC_LIST_PROFILE, HIDC_LIST_PROFILE, //プロファイル一覧 diff --git a/sakura_core/dlg/CDlgProperty.cpp b/sakura_core/dlg/CDlgProperty.cpp index 8823495130..ea4a077244 100644 --- a/sakura_core/dlg/CDlgProperty.cpp +++ b/sakura_core/dlg/CDlgProperty.cpp @@ -45,7 +45,9 @@ #include "charset/CESI.h" #include "io/CBinaryStream.h" #include "util/shell.h" +#include "apiwrap/StdControl.h" #include "sakura_rc.h" +#include "String_define.h" // プロパティ CDlgProperty.cpp //@@@ 2002.01.07 add start MIK #include "sakura.hh" diff --git a/sakura_core/dlg/CDlgReplace.cpp b/sakura_core/dlg/CDlgReplace.cpp index ff68388898..aac234b14a 100644 --- a/sakura_core/dlg/CDlgReplace.cpp +++ b/sakura_core/dlg/CDlgReplace.cpp @@ -22,8 +22,12 @@ #include "view/CEditView.h" #include "util/shell.h" #include "util/window.h" +#include "apiwrap/StdApi.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" #include "sakura_rc.h" #include "sakura.hh" +#include "String_define.h" //置換 CDlgReplace.cpp //@@@ 2002.01.07 add start MIK const DWORD p_helpids[] = { //11900 diff --git a/sakura_core/dlg/CDlgSetCharSet.cpp b/sakura_core/dlg/CDlgSetCharSet.cpp index f71712dc01..bfcb7f39b8 100644 --- a/sakura_core/dlg/CDlgSetCharSet.cpp +++ b/sakura_core/dlg/CDlgSetCharSet.cpp @@ -17,6 +17,7 @@ #include "util/shell.h" #include "env/DLLSHAREDATA.h" #include "charset/CCodePage.h" +#include "apiwrap/StdControl.h" #include "sakura_rc.h" #include "sakura.hh" diff --git a/sakura_core/dlg/CDlgSetCharSet.h b/sakura_core/dlg/CDlgSetCharSet.h index 5bdfb8f1d0..18b9219375 100644 --- a/sakura_core/dlg/CDlgSetCharSet.h +++ b/sakura_core/dlg/CDlgSetCharSet.h @@ -18,6 +18,8 @@ #include "dlg/CDialog.h" +enum ECodeType; + //! 文字コードセット設定ダイアログボックス class CDlgSetCharSet final : public CDialog { diff --git a/sakura_core/dlg/CDlgTagJumpList.cpp b/sakura_core/dlg/CDlgTagJumpList.cpp index 0877da592d..c8e1067145 100644 --- a/sakura_core/dlg/CDlgTagJumpList.cpp +++ b/sakura_core/dlg/CDlgTagJumpList.cpp @@ -42,6 +42,12 @@ #include "util/shell.h" #include "util/file.h" #include "util/window.h" +#include "util/tchar_convert.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" +#include "mem/CNativeA.h" +#include "String_define.h" + #include "sakura_rc.h" #include "sakura.hh" diff --git a/sakura_core/dlg/CDlgTagJumpList.h b/sakura_core/dlg/CDlgTagJumpList.h index 68c597088b..be4a74166c 100644 --- a/sakura_core/dlg/CDlgTagJumpList.h +++ b/sakura_core/dlg/CDlgTagJumpList.h @@ -37,6 +37,7 @@ #include "dlg/CDialog.h" #include "recent/CRecentTagjumpKeyword.h" +#include "mem/CNativeW.h" //タグファイル名 // @@ 2005.03.31 MIK 定数化 #define TAG_FILENAME_T L"tags" diff --git a/sakura_core/dlg/CDlgTagsMake.cpp b/sakura_core/dlg/CDlgTagsMake.cpp index 06a7e62d81..a687ec1e5e 100644 --- a/sakura_core/dlg/CDlgTagsMake.cpp +++ b/sakura_core/dlg/CDlgTagsMake.cpp @@ -38,8 +38,11 @@ #include "env/DLLSHAREDATA.h" #include "func/Funccode.h" #include "util/shell.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" #include "sakura_rc.h" #include "sakura.hh" +#include "String_define.h" const DWORD p_helpids[] = { //13700 IDC_EDIT_TAG_MAKE_FOLDER, HIDC_EDIT_TAG_MAKE_FOLDER, //タグ作成フォルダ diff --git a/sakura_core/dlg/CDlgWinSize.cpp b/sakura_core/dlg/CDlgWinSize.cpp index ba5d5d2f18..6ef4508a1a 100644 --- a/sakura_core/dlg/CDlgWinSize.cpp +++ b/sakura_core/dlg/CDlgWinSize.cpp @@ -34,8 +34,12 @@ #include "dlg/CDlgWinSize.h" #include "util/shell.h" #include "util/os.h" +#include "apiwrap/CommonControl.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" #include "sakura_rc.h" #include "sakura.hh" +#include "String_define.h" static const DWORD p_helpids[] = { // 2006.10.10 ryoji IDOK, HIDOK_WINSIZE, // 閉じる diff --git a/sakura_core/dlg/CDlgWindowList.cpp b/sakura_core/dlg/CDlgWindowList.cpp index 3dcd5ed53f..54760780d7 100644 --- a/sakura_core/dlg/CDlgWindowList.cpp +++ b/sakura_core/dlg/CDlgWindowList.cpp @@ -24,8 +24,16 @@ #include "Funccode_enum.h" #include "util/shell.h" #include "util/window.h" +#include "apiwrap/StdApi.h" +#include "debug/Debug2.h" +#include "util/string_ex.h" +#include "env/CAppNodeManager.h" +#include "env/DLLSHAREDATA.h" #include "sakura_rc.h" #include "sakura.hh" +#include "config/system_constants.h" + +struct EditInfo; const DWORD p_helpids[] = { IDC_LIST_WINDOW, HIDC_WINLIST_LIST_WINDOW, diff --git a/sakura_core/doc/CBlockComment.cpp b/sakura_core/doc/CBlockComment.cpp index 3c582ab786..8fa1495190 100644 --- a/sakura_core/doc/CBlockComment.cpp +++ b/sakura_core/doc/CBlockComment.cpp @@ -16,6 +16,8 @@ #include "StdAfx.h" #include "CBlockComment.h" #include "mem/CMemory.h" +#include "mem/CNativeW.h" +#include "util/string_ex.h" CBlockComment::CBlockComment() { diff --git a/sakura_core/doc/CDocFile.h b/sakura_core/doc/CDocFile.h index 15d9ac1aa1..756e8fce71 100644 --- a/sakura_core/doc/CDocFile.h +++ b/sakura_core/doc/CDocFile.h @@ -30,6 +30,8 @@ #include "io/CFile.h" #include "util/file.h" +#include "charset/charset.h" + class CEditDoc; //####本来はここにあるべきでは無い diff --git a/sakura_core/doc/CDocFileOperation.cpp b/sakura_core/doc/CDocFileOperation.cpp index 906a94918a..eb64c5531f 100644 --- a/sakura_core/doc/CDocFileOperation.cpp +++ b/sakura_core/doc/CDocFileOperation.cpp @@ -42,6 +42,8 @@ #include "plugin/CPlugin.h" #include "plugin/CJackManager.h" #include "util/format.h" +#include "CSelectLang.h" +#include "String_define.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // ロック // diff --git a/sakura_core/doc/CDocLocker.cpp b/sakura_core/doc/CDocLocker.cpp index 1d14ed1a96..e0f88b04a5 100644 --- a/sakura_core/doc/CDocLocker.cpp +++ b/sakura_core/doc/CDocLocker.cpp @@ -26,6 +26,8 @@ #include "CDocLocker.h" #include "CDocFile.h" #include "window/CEditWnd.h" +#include "CSelectLang.h" +#include "String_define.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // コンストラクタ・デストラクタ // diff --git a/sakura_core/doc/CDocOutline.cpp b/sakura_core/doc/CDocOutline.cpp index a8c49a2934..1e08b37128 100644 --- a/sakura_core/doc/CDocOutline.cpp +++ b/sakura_core/doc/CDocOutline.cpp @@ -29,6 +29,9 @@ #include "charset/charcode.h" #include "io/CTextStream.h" #include "extmodule/CBregexp.h" +#include "CSelectLang.h" +#include "config/system_constants.h" +#include "String_define.h" /*! ルールファイルの1行を管理する構造体 diff --git a/sakura_core/doc/CDocOutline.h b/sakura_core/doc/CDocOutline.h index cb16462821..cd6e18ebd9 100644 --- a/sakura_core/doc/CDocOutline.h +++ b/sakura_core/doc/CDocOutline.h @@ -30,6 +30,7 @@ class CEditDoc; class CFuncInfoArr; struct SOneRule; +enum EOutlineType; class CDocOutline{ public: diff --git a/sakura_core/doc/CDocReader.cpp b/sakura_core/doc/CDocReader.cpp index e57a1abce8..b703866ece 100644 --- a/sakura_core/doc/CDocReader.cpp +++ b/sakura_core/doc/CDocReader.cpp @@ -26,6 +26,8 @@ #include "CDocReader.h" #include "logic/CDocLine.h" #include "logic/CDocLineMgr.h" +#include "CSelectLang.h" +#include "String_define.h" /* 全行データを返す 改行コードは、CRLFに統一される。 diff --git a/sakura_core/doc/CDocReader.h b/sakura_core/doc/CDocReader.h index e15fbcb371..9087e08008 100644 --- a/sakura_core/doc/CDocReader.h +++ b/sakura_core/doc/CDocReader.h @@ -27,6 +27,8 @@ #define SAKURA_CDOCREADER_0183B68F_2942_40E1_B2A4_59FE0C20268F_H_ #pragma once +#include "basis/SakuraBasis.h" + class CDocLineMgr; //as decorator diff --git a/sakura_core/doc/CDocTypeSetting.cpp b/sakura_core/doc/CDocTypeSetting.cpp index e35e44b817..9be3d474b0 100644 --- a/sakura_core/doc/CDocTypeSetting.cpp +++ b/sakura_core/doc/CDocTypeSetting.cpp @@ -32,6 +32,8 @@ #include "StdAfx.h" #include "CDocTypeSetting.h" +#include "CSelectLang.h" +#include "String_define.h" //! 色設定(保存用) struct ColorInfoIni { diff --git a/sakura_core/doc/CEditDoc.cpp b/sakura_core/doc/CEditDoc.cpp index 225d6f4c17..bdf0364e20 100644 --- a/sakura_core/doc/CEditDoc.cpp +++ b/sakura_core/doc/CEditDoc.cpp @@ -80,6 +80,8 @@ #include "util/string_ex2.h" #include "util/window.h" #include "sakura_rc.h" +#include "config/app_constants.h" +#include "String_define.h" #define IDT_ROLLMOUSE 1 diff --git a/sakura_core/doc/CLineComment.cpp b/sakura_core/doc/CLineComment.cpp index b60f281685..38a4e6bf88 100644 --- a/sakura_core/doc/CLineComment.cpp +++ b/sakura_core/doc/CLineComment.cpp @@ -14,6 +14,8 @@ */ #include "StdAfx.h" #include "CLineComment.h" +#include "mem/CNativeW.h" +#include "util/string_ex.h" CLineComment::CLineComment() { diff --git a/sakura_core/doc/layout/CLayoutMgr.cpp b/sakura_core/doc/layout/CLayoutMgr.cpp index 90c67f8f1f..fcbc59c600 100644 --- a/sakura_core/doc/layout/CLayoutMgr.cpp +++ b/sakura_core/doc/layout/CLayoutMgr.cpp @@ -33,6 +33,7 @@ #include "CSearchAgent.h" #include "debug/CRunningTimer.h" #include "charset/charcode.h" +#include "config/app_constants.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 生成と破棄 // diff --git a/sakura_core/doc/layout/CLayoutMgr_New.cpp b/sakura_core/doc/layout/CLayoutMgr_New.cpp index b24f331d26..b5ff4ef52f 100644 --- a/sakura_core/doc/layout/CLayoutMgr_New.cpp +++ b/sakura_core/doc/layout/CLayoutMgr_New.cpp @@ -24,6 +24,7 @@ #include "charset/charcode.h" #include "mem/CMemoryIterator.h" #include "util/window.h" +#include "config/app_constants.h" /*! 行頭禁則文字に該当するかを調べる. diff --git a/sakura_core/doc/logic/CDocLine.cpp b/sakura_core/doc/logic/CDocLine.cpp index ca373ebe95..135e95998f 100644 --- a/sakura_core/doc/logic/CDocLine.cpp +++ b/sakura_core/doc/logic/CDocLine.cpp @@ -16,6 +16,7 @@ #include "StdAfx.h" #include "CDocLine.h" #include "mem/CMemory.h" +#include "env/DLLSHAREDATA.h" CDocLine::CDocLine() : m_pPrev( NULL ), m_pNext( NULL ) diff --git a/sakura_core/doc/logic/CDocLine.h b/sakura_core/doc/logic/CDocLine.h index 1b21f5b30c..ae2890b7ee 100644 --- a/sakura_core/doc/logic/CDocLine.h +++ b/sakura_core/doc/logic/CDocLine.h @@ -23,6 +23,7 @@ #include "util/design_template.h" #include "CEol.h" #include "mem/CMemory.h" +#include "mem/CNativeW.h" #include "docplus/CBookmarkManager.h" #include "docplus/CDiffManager.h" diff --git a/sakura_core/docplus/CDiffManager.h b/sakura_core/docplus/CDiffManager.h index 43c077191d..13210ed8b7 100644 --- a/sakura_core/docplus/CDiffManager.h +++ b/sakura_core/docplus/CDiffManager.h @@ -31,6 +31,8 @@ #include "view/colors/EColorIndexType.h" #include "util/design_template.h" //TSingleton +#include "basis/SakuraBasis.h" +#include "_main/global.h" class CDocLine; class CDocLineMgr; diff --git a/sakura_core/docplus/CFuncListManager.h b/sakura_core/docplus/CFuncListManager.h index 6184108551..1c6937f5f6 100644 --- a/sakura_core/docplus/CFuncListManager.h +++ b/sakura_core/docplus/CFuncListManager.h @@ -28,6 +28,9 @@ #define SAKURA_CFUNCLISTMANAGER_C2C5861D_3B93_4B1F_B241_E3314414A2C1_H_ #pragma once +#include "basis/SakuraBasis.h" +#include "_main/global.h" + class CDocLine; class CDocLineMgr; diff --git a/sakura_core/env/CAppNodeManager.cpp b/sakura_core/env/CAppNodeManager.cpp index 0cccb12618..0e8171b2e0 100644 --- a/sakura_core/env/CAppNodeManager.cpp +++ b/sakura_core/env/CAppNodeManager.cpp @@ -39,6 +39,9 @@ #include "recent/CRecentEditNode.h" #include "util/window.h" #include "_main/CMutex.h" +#include "config/system_constants.h" +#include "config/app_constants.h" +#include "String_define.h" // GetOpenedWindowArr用静的変数/構造体 static BOOL s_bSort; // ソート指定 diff --git a/sakura_core/env/CDocTypeManager.cpp b/sakura_core/env/CDocTypeManager.cpp index e787770ecf..aa622b98d8 100644 --- a/sakura_core/env/CDocTypeManager.cpp +++ b/sakura_core/env/CDocTypeManager.cpp @@ -32,6 +32,9 @@ #include "_main/CMutex.h" #include "CFileExt.h" #include // PathMatchSpec +#include "apiwrap/StdApi.h" +#include "env/DLLSHAREDATA.h" +#include "config/system_constants.h" const WCHAR* CDocTypeManager::m_typeExtSeps = L" ;,"; // タイプ別拡張子 区切り文字 const WCHAR* CDocTypeManager::m_typeExtWildcards = L"*?"; // タイプ別拡張子 ワイルドカード diff --git a/sakura_core/env/CDocTypeManager.h b/sakura_core/env/CDocTypeManager.h index 49a55e2340..631fe62c39 100644 --- a/sakura_core/env/CDocTypeManager.h +++ b/sakura_core/env/CDocTypeManager.h @@ -30,7 +30,10 @@ #define SAKURA_CDOCTYPEMANAGER_ACE5AE64_5C6A_4A70_BACF_99F9A448360D_H_ #pragma once -#include "DLLSHAREDATA.h" +#include "types/CType.h" + +struct DLLSHAREDATA; +DLLSHAREDATA& GetDllShareData(); //! ドキュメントタイプ管理 class CDocTypeManager{ diff --git a/sakura_core/env/CFileNameManager.cpp b/sakura_core/env/CFileNameManager.cpp index e4af6c847d..a1b2bcaef7 100644 --- a/sakura_core/env/CFileNameManager.cpp +++ b/sakura_core/env/CFileNameManager.cpp @@ -38,6 +38,8 @@ #include "util/string_ex2.h" #include "util/file.h" #include "util/window.h" +#include "CSelectLang.h" +#include "String_define.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // ファイル名管理 // diff --git a/sakura_core/env/CFileNameManager.h b/sakura_core/env/CFileNameManager.h index d2f144a763..5ca1114724 100644 --- a/sakura_core/env/CFileNameManager.h +++ b/sakura_core/env/CFileNameManager.h @@ -32,13 +32,12 @@ #include -// 要先行定義 -// #include "DLLSHAREDATA.h" - #include "util/design_template.h" #include "config/maxdata.h" +struct DLLSHAREDATA; struct EditInfo; +DLLSHAREDATA& GetDllShareData(); //!ファイル名管理 class CFileNameManager : public TSingleton{ diff --git a/sakura_core/env/CFormatManager.cpp b/sakura_core/env/CFormatManager.cpp index 5a7212cab0..8dc6d70c57 100644 --- a/sakura_core/env/CFormatManager.cpp +++ b/sakura_core/env/CFormatManager.cpp @@ -31,6 +31,7 @@ #include "DLLSHAREDATA.h" #include "CFormatManager.h" +#include "CSelectLang.h" /*! 日付をフォーマット systime:時刻データ diff --git a/sakura_core/env/CFormatManager.h b/sakura_core/env/CFormatManager.h index 07c3c5261d..44833475af 100644 --- a/sakura_core/env/CFormatManager.h +++ b/sakura_core/env/CFormatManager.h @@ -30,8 +30,8 @@ #define SAKURA_CFORMATMANAGER_4161FE80_FFA1_4619_BD0A_74FF4F59BDDA_H_ #pragma once -// 要先行定義 -// #include "DLLSHAREDATA.h" +struct DLLSHAREDATA; +DLLSHAREDATA& GetDllShareData(); //!書式管理 class CFormatManager{ diff --git a/sakura_core/env/CHelpManager.h b/sakura_core/env/CHelpManager.h index ad8846bf20..f330ed8c05 100644 --- a/sakura_core/env/CHelpManager.h +++ b/sakura_core/env/CHelpManager.h @@ -30,8 +30,8 @@ #define SAKURA_CHELPMANAGER_57445D73_99E9_4B85_A905_47685753D1DF_H_ #pragma once -// 要先行定義 -// #include "DLLSHAREDATA.h" +struct DLLSHAREDATA; +DLLSHAREDATA& GetDllShareData(); //!ヘルプ管理 class CHelpManager{ diff --git a/sakura_core/env/CSakuraEnvironment.cpp b/sakura_core/env/CSakuraEnvironment.cpp index 2a9db4492d..902fd054ba 100644 --- a/sakura_core/env/CSakuraEnvironment.cpp +++ b/sakura_core/env/CSakuraEnvironment.cpp @@ -44,6 +44,9 @@ #include "util/module.h" //GetAppVersionInfo #include "util/shell.h" #include "util/window.h" +#include "config/system_constants.h" +#include "config/app_constants.h" +#include "String_define.h" typedef std::wstring wstring; diff --git a/sakura_core/env/CSearchKeywordManager.h b/sakura_core/env/CSearchKeywordManager.h index 88720da049..61c4a63a19 100644 --- a/sakura_core/env/CSearchKeywordManager.h +++ b/sakura_core/env/CSearchKeywordManager.h @@ -30,9 +30,6 @@ #define SAKURA_CSEARCHKEYWORDMANAGER_AFD28203_4738_46B7_9A7F_E758A94DB290_H_ #pragma once -// 要先行定義 -// #include "DLLSHAREDATA.h" - //共有メモリ内構造体 struct SShare_SearchKeywords{ // -- -- 検索キー -- -- // @@ -44,6 +41,9 @@ struct SShare_SearchKeywords{ StaticVector< StaticString, MAX_EXCLUDEFOLDER, const WCHAR*> m_aExcludeFolders; }; +struct DLLSHAREDATA; +DLLSHAREDATA& GetDllShareData(); + //! 検索キーワード管理 class CSearchKeywordManager{ public: diff --git a/sakura_core/env/CShareData.cpp b/sakura_core/env/CShareData.cpp index 9592f2268c..1f2b108747 100644 --- a/sakura_core/env/CShareData.cpp +++ b/sakura_core/env/CShareData.cpp @@ -43,7 +43,10 @@ #include "util/window.h" #include "util/os.h" #include "CDataProfile.h" +#include "apiwrap/StdApi.h" #include "sakura_rc.h" +#include "config/system_constants.h" +#include "String_define.h" struct ARRHEAD { int nLength; diff --git a/sakura_core/env/CShareData.h b/sakura_core/env/CShareData.h index 6905f7a076..9353e810b3 100644 --- a/sakura_core/env/CShareData.h +++ b/sakura_core/env/CShareData.h @@ -37,6 +37,7 @@ #include "CSelectLang.h" // 2011.04.10 nasukoji #include "charset/charset.h" #include "util/design_template.h" +#include "charset/charset.h" // 2010.04.19 Moca DLLSHAREDATA関連はDLLSHAREDATA.h等最低限必要な場所へ移動 // CShareData.hは、自分のInterfaceしか提供しません。別にDLLSHAREDATA.hをincludeすること。 diff --git a/sakura_core/env/CShareData_IO.cpp b/sakura_core/env/CShareData_IO.cpp index 497063c446..8f82c94e77 100644 --- a/sakura_core/env/CShareData_IO.cpp +++ b/sakura_core/env/CShareData_IO.cpp @@ -37,6 +37,8 @@ #include "uiparts/CMenuDrawer.h" #include "_main/CCommandLine.h" #include "_main/CControlProcess.h" +#include "config/app_constants.h" +#include "String_define.h" void ShareData_IO_Sub_LogFont( CDataProfile& cProfile, const WCHAR* pszSecName, const WCHAR* pszKeyLf, const WCHAR* pszKeyPointSize, const WCHAR* pszKeyFaceName, LOGFONT& lf, INT& nPointSize ); diff --git a/sakura_core/env/CShareData_IO.h b/sakura_core/env/CShareData_IO.h index 3e0de2d749..edd0284a03 100644 --- a/sakura_core/env/CShareData_IO.h +++ b/sakura_core/env/CShareData_IO.h @@ -34,6 +34,8 @@ struct CommonSetting_MainMenu; // defined CommonSetting.h struct CommonSetting_KeyBind; // defined CommonSetting.h struct ColorInfo; // defined doc/CDocTypeSetting.h struct SFileTree; +struct SFileTreeItem; +struct STypeConfig; // 2008.XX.XX kobake CShareDataから分離 // 2008.05.24 Uchi ShareData_IO_CustMenu, ShareData_IO_KeyBind move Export、Importに使用 diff --git a/sakura_core/env/CTagJumpManager.h b/sakura_core/env/CTagJumpManager.h index 0cb63e1c5a..8aedd927d8 100644 --- a/sakura_core/env/CTagJumpManager.h +++ b/sakura_core/env/CTagJumpManager.h @@ -30,8 +30,7 @@ #define SAKURA_CTAGJUMPMANAGER_487A43FC_EB78_44CF_B1E4_6FD78EF1F35A_H_ #pragma once -// 要先行定義 -// #define DLLSHAREDATA.h +#include "basis/SakuraBasis.h" // 2004/06/21 novice タグジャンプ機能追加 //! タグジャンプ情報 @@ -59,6 +58,9 @@ struct SShare_TagJump{ BOOL m_bTagJumpPartialMatch; //!< 文字列の途中にマッチ }; +struct DLLSHAREDATA; +DLLSHAREDATA& GetDllShareData(); + class CTagJumpManager{ public: CTagJumpManager() diff --git a/sakura_core/env/CommonSetting.h b/sakura_core/env/CommonSetting.h index 3d8524d802..4a9c24541b 100644 --- a/sakura_core/env/CommonSetting.h +++ b/sakura_core/env/CommonSetting.h @@ -32,6 +32,7 @@ #include "func/CKeyBind.h" #include "func/CFuncLookup.h" //MacroRec #include "io/CFile.h" //EShareMode +#include "basis/SakuraBasis.h" // Apr. 05, 2003 genta WindowCaption用領域(変換前)の長さ static const int MAX_CAPTION_CONF_LEN = 256; diff --git a/sakura_core/env/DLLSHAREDATA.cpp b/sakura_core/env/DLLSHAREDATA.cpp index 3d0a8f59a0..ce0c2cd1c6 100644 --- a/sakura_core/env/DLLSHAREDATA.cpp +++ b/sakura_core/env/DLLSHAREDATA.cpp @@ -31,7 +31,11 @@ #include "uiparts/CWaitCursor.h" #include "util/os.h" #include "util/window.h" +#include "apiwrap/CommonControl.h" +#include "CSelectLang.h" #include "sakura_rc.h" +#include "config/system_constants.h" +#include "String_define.h" //GetDllShareData用グローバル変数 DLLSHAREDATA* g_theDLLSHAREDATA = NULL; diff --git a/sakura_core/env/DLLSHAREDATA.h b/sakura_core/env/DLLSHAREDATA.h index 2284dd7f6c..c63022f98c 100644 --- a/sakura_core/env/DLLSHAREDATA.h +++ b/sakura_core/env/DLLSHAREDATA.h @@ -27,6 +27,23 @@ #define SAKURA_DLLSHAREDATA_13672D62_A18D_4E76_B3E7_A8192BCDC6A1_H_ #pragma once +#include "debug/Debug2.h" +#include "config/maxdata.h" + +#include "env/CAppNodeManager.h" //SShare_Nodes +//2007.09.28 kobake Common構造体をCShareData.hから分離 +#include "env/CommonSetting.h" +#include "env/CSearchKeywordManager.h" //SShare_SearchKeywords +#include "env/CTagJumpManager.h" //SShare_TagJump +#include "env/CFileNameManager.h" //SShare_FileNameManagement + +#include "EditInfo.h" +#include "types/CType.h" // STypeConfig +#include "print/CPrint.h" //PRINTSETTING +#include "recent/SShare_History.h" //SShare_History +#include "charset/charcode.h" + + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // アクセサ // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // @@ -67,20 +84,6 @@ inline void SetDllShareData(DLLSHAREDATA* pShareData) // 2010.04.19 Moca CShareDataからDLLSHAREDATAメンバのincludeをDLLSHAREDATA.hに移動 -#include "config/maxdata.h" - -#include "env/CAppNodeManager.h" //SShare_Nodes -//2007.09.28 kobake Common構造体をCShareData.hから分離 -#include "env/CommonSetting.h" -#include "env/CSearchKeywordManager.h" //SShare_SearchKeywords -#include "env/CTagJumpManager.h" //SShare_TagJump -#include "env/CFileNameManager.h" //SShare_FileNameManagement - -#include "EditInfo.h" -#include "types/CType.h" // STypeConfig -#include "print/CPrint.h" //PRINTSETTING -#include "recent/SShare_History.h" //SShare_History - //! 共有フラグ struct SShare_Flags{ BOOL m_bEditWndChanging; // 編集ウィンドウ切替中 // 2007.04.03 ryoji diff --git a/sakura_core/extmodule/CBregexp.cpp b/sakura_core/extmodule/CBregexp.cpp index 89e7ded815..58cf687823 100644 --- a/sakura_core/extmodule/CBregexp.cpp +++ b/sakura_core/extmodule/CBregexp.cpp @@ -48,6 +48,8 @@ #include "charset/charcode.h" #include "env/CShareData.h" #include "env/DLLSHAREDATA.h" +#include "apiwrap/StdControl.h" +#include "String_define.h" // Compile時、行頭置換(len=0)の時にダミー文字列(1つに統一) by かろと const wchar_t CBregexp::m_tmpBuf[2] = L"\0"; diff --git a/sakura_core/extmodule/CBregexp.h b/sakura_core/extmodule/CBregexp.h index f924be3607..59d05ab1c2 100644 --- a/sakura_core/extmodule/CBregexp.h +++ b/sakura_core/extmodule/CBregexp.h @@ -45,6 +45,7 @@ #pragma once #include "CBregexpDll2.h" +#include "basis/SakuraBasis.h" /*! @brief Perl互換正規表現 BREGEXP.DLL をサポートするクラス diff --git a/sakura_core/extmodule/CMigemo.cpp b/sakura_core/extmodule/CMigemo.cpp index 0378fd73b3..2c0b887c6a 100644 --- a/sakura_core/extmodule/CMigemo.cpp +++ b/sakura_core/extmodule/CMigemo.cpp @@ -24,6 +24,8 @@ #include "charset/codechecker.h" #include "util/module.h" #include "util/file.h" +#include "util/tchar_convert.h" +#include "mem/CNativeA.h" /*! @brief PCRE メタキャラクタのエスケープ処理を行う。 (CMigemo::migemo_setproc_int2char の引数として使用) diff --git a/sakura_core/extmodule/CMigemo.h b/sakura_core/extmodule/CMigemo.h index ba4192d2e5..3fa4a6f8d9 100644 --- a/sakura_core/extmodule/CMigemo.h +++ b/sakura_core/extmodule/CMigemo.h @@ -23,6 +23,8 @@ Migemo はローマ字のまま日本語をインクリメンタル検索する #define SAKURA_CMIGEMO_BEF7C3E9_DC35_4C9D_BC69_8B7F9EBB4463_H_ #pragma once +#include "basis/primitive.h" + #define MIGEMO_VERSION "1.1" /* for migemo_load() */ diff --git a/sakura_core/func/CFuncKeyWnd.cpp b/sakura_core/func/CFuncKeyWnd.cpp index 572a41479e..85431c81c4 100644 --- a/sakura_core/func/CFuncKeyWnd.cpp +++ b/sakura_core/func/CFuncKeyWnd.cpp @@ -26,6 +26,9 @@ #include "doc/CEditDoc.h" #include "util/input.h" #include "util/window.h" +#include "apiwrap/StdApi.h" +#include "apiwrap/StdControl.h" +#include "String_define.h" #define IDT_FUNCWND 1248 #define TIMER_TIMEOUT 100 diff --git a/sakura_core/func/CFuncLookup.cpp b/sakura_core/func/CFuncLookup.cpp index 972cab6887..9b9fd37f6a 100644 --- a/sakura_core/func/CFuncLookup.cpp +++ b/sakura_core/func/CFuncLookup.cpp @@ -36,6 +36,9 @@ #include "StdAfx.h" #include "func/CFuncLookup.h" #include "plugin/CJackManager.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" +#include "String_define.h" // オフセット値 const int LUOFFSET_MACRO = 0; diff --git a/sakura_core/func/CKeyBind.cpp b/sakura_core/func/CKeyBind.cpp index d61a6147cb..bd53597975 100644 --- a/sakura_core/func/CKeyBind.cpp +++ b/sakura_core/func/CKeyBind.cpp @@ -21,6 +21,9 @@ #include "func/CKeyBind.h" #include "env/CShareData.h" #include "macro/CSMacroMgr.h"// 2002/2/10 aroka +#include "mem/CNativeW.h" +#include "config/system_constants.h" +#include "String_define.h" //! KEYDATAとほぼ同じ struct KEYDATAINIT { diff --git a/sakura_core/func/CKeyBind.h b/sakura_core/func/CKeyBind.h index c8fd387c65..8420975404 100644 --- a/sakura_core/func/CKeyBind.h +++ b/sakura_core/func/CKeyBind.h @@ -21,6 +21,7 @@ #include "Funccode_enum.h" class CFuncLookup; +class CNativeW; //! キー情報を保持する struct KEYDATA { diff --git a/sakura_core/func/Funccode.cpp b/sakura_core/func/Funccode.cpp index b0963af873..7b7f685177 100644 --- a/sakura_core/func/Funccode.cpp +++ b/sakura_core/func/Funccode.cpp @@ -60,6 +60,7 @@ #include "CMarkMgr.h" // CAutoMarkMgr #include "util/os.h" #include "sakura.hh" +#include "String_define.h" //using namespace nsFuncCode; diff --git a/sakura_core/io/CFile.cpp b/sakura_core/io/CFile.cpp index b25530e9e8..dc50862393 100644 --- a/sakura_core/io/CFile.cpp +++ b/sakura_core/io/CFile.cpp @@ -26,6 +26,8 @@ #include "io/CFile.h" #include "window/CEditWnd.h" // 変更予定 #include +#include "CSelectLang.h" +#include "String_define.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // コンストラクタ・デストラクタ // diff --git a/sakura_core/io/CStream.cpp b/sakura_core/io/CStream.cpp index e2fe0a0e84..b8bdf2a95c 100644 --- a/sakura_core/io/CStream.cpp +++ b/sakura_core/io/CStream.cpp @@ -25,6 +25,7 @@ #include "StdAfx.h" #include "CStream.h" #include +#include "util/std_macro.h" // ::fflush(m_hFile); // ネットワーク上のファイルを扱っている場合、 diff --git a/sakura_core/io/CTextStream.h b/sakura_core/io/CTextStream.h index f8997725c7..646521d006 100644 --- a/sakura_core/io/CTextStream.h +++ b/sakura_core/io/CTextStream.h @@ -37,6 +37,8 @@ #include #include "CStream.h" +#include "charset/charset.h" + class CCodeBase; //テキスト入力ストリーム (UTF-8, SJIS) diff --git a/sakura_core/io/CZipFile.cpp b/sakura_core/io/CZipFile.cpp index 9451927878..a51eb0db1b 100644 --- a/sakura_core/io/CZipFile.cpp +++ b/sakura_core/io/CZipFile.cpp @@ -29,6 +29,7 @@ #include "StdAfx.h" #include #include "CZipFile.h" +#include "basis/CMyString.h" // コンストラクタ CZipFile::CZipFile() { diff --git a/sakura_core/macro/CIfObj.cpp b/sakura_core/macro/CIfObj.cpp index 2ac64afc04..fa0d53227d 100644 --- a/sakura_core/macro/CIfObj.cpp +++ b/sakura_core/macro/CIfObj.cpp @@ -37,6 +37,9 @@ #include "StdAfx.h" #include "macro/CIfObj.h" +#include "debug/Debug1.h" +#include "debug/Debug2.h" + //トレースメッセージ有無 #if defined( _DEBUG ) #define TEST diff --git a/sakura_core/macro/CKeyMacroMgr.cpp b/sakura_core/macro/CKeyMacroMgr.cpp index f52534018a..95f3cdb814 100644 --- a/sakura_core/macro/CKeyMacroMgr.cpp +++ b/sakura_core/macro/CKeyMacroMgr.cpp @@ -27,6 +27,9 @@ #include "mem/CMemory.h" #include "CMacroFactory.h" #include "io/CTextStream.h" +#include "CSelectLang.h" +#include "mem/CNativeW.h" +#include "String_define.h" CKeyMacroMgr::CKeyMacroMgr() { diff --git a/sakura_core/macro/CMacro.cpp b/sakura_core/macro/CMacro.cpp index 4335dcf1d1..c0ac8fe5a1 100644 --- a/sakura_core/macro/CMacro.cpp +++ b/sakura_core/macro/CMacro.cpp @@ -58,6 +58,9 @@ #include "util/ole_convert.h" #include "util/os.h" #include "uiparts/CWaitCursor.h" +#include "CSelectLang.h" +#include "config/app_constants.h" +#include "String_define.h" CMacro::CMacro( EFunctionCode nFuncID ) { diff --git a/sakura_core/macro/CPPA.cpp b/sakura_core/macro/CPPA.cpp index 7d5d31d3e7..db1fc90191 100644 --- a/sakura_core/macro/CPPA.cpp +++ b/sakura_core/macro/CPPA.cpp @@ -42,6 +42,8 @@ #include "env/CShareData.h" #include "env/DLLSHAREDATA.h" #include "_os/OleTypes.h" +#include "util/tchar_convert.h" +#include "String_define.h" #define NEVER_USED_PARAM(p) ((void)p) diff --git a/sakura_core/macro/CPPA.h b/sakura_core/macro/CPPA.h index e4fe449c65..ca64bc0617 100644 --- a/sakura_core/macro/CPPA.h +++ b/sakura_core/macro/CPPA.h @@ -44,6 +44,7 @@ PPA(Poor-Pascal for Application)はDelphi/C++Builder用のPascalインタプリ #include #include "macro/CSMacroMgr.h" #include "extmodule/CDllHandler.h" +#include "mem/CNativeA.h" #define PPADLL_VER 123 diff --git a/sakura_core/macro/CPPAMacroMgr.cpp b/sakura_core/macro/CPPAMacroMgr.cpp index accc2f195d..31e920c5eb 100644 --- a/sakura_core/macro/CPPAMacroMgr.cpp +++ b/sakura_core/macro/CPPAMacroMgr.cpp @@ -14,10 +14,12 @@ */ #include "StdAfx.h" #include "CPPAMacroMgr.h" -#include "mem/CMemory.h" +#include "mem/CNativeW.h" #include "CMacroFactory.h" #include #include "io/CTextStream.h" +#include "util/tchar_convert.h" + using namespace std; CPPA CPPAMacroMgr::m_cPPA; diff --git a/sakura_core/macro/CPPAMacroMgr.h b/sakura_core/macro/CPPAMacroMgr.h index d0eae1db57..aa1cb47b62 100644 --- a/sakura_core/macro/CPPAMacroMgr.h +++ b/sakura_core/macro/CPPAMacroMgr.h @@ -21,6 +21,7 @@ #include #include "CKeyMacroMgr.h" #include "CPPA.h" +#include "mem/CNativeW.h" /*----------------------------------------------------------------------- クラスの宣言 diff --git a/sakura_core/macro/CWSH.cpp b/sakura_core/macro/CWSH.cpp index af2591f89b..212264f1fe 100644 --- a/sakura_core/macro/CWSH.cpp +++ b/sakura_core/macro/CWSH.cpp @@ -48,7 +48,10 @@ #include "util/module.h" #include "util/window.h" // BlockingHook #include "dlg/CDlgCancel.h" +#include "CSelectLang.h" #include "sakura_rc.h" +#include "config/app_constants.h" +#include "String_define.h" #ifdef USE_JSCRIPT9 const GUID CLSID_JSScript9 = diff --git a/sakura_core/mem/CMemory.cpp b/sakura_core/mem/CMemory.cpp index b3464713c8..49a587b4ac 100644 --- a/sakura_core/mem/CMemory.cpp +++ b/sakura_core/mem/CMemory.cpp @@ -38,6 +38,11 @@ #include "StdAfx.h" #include "mem/CMemory.h" #include "_main/global.h" +#include "CSelectLang.h" +#include "util/MessageBoxF.h" +#include "debug/Debug2.h" +#include "config/app_constants.h" +#include "String_define.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // コンストラクタ・デストラクタ // diff --git a/sakura_core/mem/CMemory.h b/sakura_core/mem/CMemory.h index 2b911a935b..11a0a295a6 100644 --- a/sakura_core/mem/CMemory.h +++ b/sakura_core/mem/CMemory.h @@ -36,8 +36,6 @@ #define SAKURA_CMEMORY_EE37AF3F_6B73_412E_8F0C_8A64F4250AE3_H_ #pragma once -#include "_main/global.h" - /*! ファイル文字コードセット判別時の先読み最大サイズ */ #define CheckKanjiCode_MAXREADLENGTH 16384 diff --git a/sakura_core/mem/CNative.h b/sakura_core/mem/CNative.h index ca8b5be4b6..5f1dfcadc2 100644 --- a/sakura_core/mem/CNative.h +++ b/sakura_core/mem/CNative.h @@ -44,6 +44,4 @@ class CNative : protected CMemory{ // 派生クラスでメンバー追加禁止 static_assert(sizeof(CNative) == sizeof(CMemory), "size check"); -#include "mem/CNativeA.h" -#include "mem/CNativeW.h" #endif /* SAKURA_CNATIVE_D712C69D_7FA3_49CE_B63A_49273441B558_H_ */ diff --git a/sakura_core/mem/CNativeA.cpp b/sakura_core/mem/CNativeA.cpp index ee0fbf3fa6..3ff7a05815 100644 --- a/sakura_core/mem/CNativeA.cpp +++ b/sakura_core/mem/CNativeA.cpp @@ -24,6 +24,7 @@ */ #include "StdAfx.h" #include "CNativeA.h" +#include "debug/Debug1.h" CNativeA::CNativeA( const char* szData, size_t cchData ) : CNative() diff --git a/sakura_core/outline/CDlgFileTree.cpp b/sakura_core/outline/CDlgFileTree.cpp index a72a138492..0aeffcce84 100644 --- a/sakura_core/outline/CDlgFileTree.cpp +++ b/sakura_core/outline/CDlgFileTree.cpp @@ -41,8 +41,12 @@ #include "util/shell.h" #include "util/window.h" #include "util/os.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" #include "sakura_rc.h" #include "sakura.hh" +#include "config/app_constants.h" +#include "String_define.h" const DWORD p_helpids[] = { //13300 IDC_CHECK_LOADINI, HIDC_CHECK_FILETREE_LOADINI, diff --git a/sakura_core/outline/CDlgFuncList.cpp b/sakura_core/outline/CDlgFuncList.cpp index c9634bcb71..cec4d46375 100644 --- a/sakura_core/outline/CDlgFuncList.cpp +++ b/sakura_core/outline/CDlgFuncList.cpp @@ -48,8 +48,14 @@ #include "CDataProfile.h" #include "dlg/CDlgTagJumpList.h" #include "typeprop/CImpExpManager.h" +#include "apiwrap/StdApi.h" +#include "apiwrap/CommonControl.h" +#include "apiwrap/StdControl.h" #include "sakura_rc.h" #include "sakura.hh" +#include "config/system_constants.h" +#include "config/app_constants.h" +#include "String_define.h" // 画面ドッキング用の定義 // 2010.06.05 ryoji #define DEFINE_SYNCCOLOR diff --git a/sakura_core/outline/CFuncInfo.h b/sakura_core/outline/CFuncInfo.h index 3c03b70b4b..1bc992bdae 100644 --- a/sakura_core/outline/CFuncInfo.h +++ b/sakura_core/outline/CFuncInfo.h @@ -21,6 +21,7 @@ class CFuncInfo; #include "mem/CMemory.h" +#include "mem/CNativeW.h" // CDlgFuncList::SetTree()用 m_Info #define FUNCINFO_INFOMASK 0xFFFF diff --git a/sakura_core/outline/CFuncInfoArr.h b/sakura_core/outline/CFuncInfoArr.h index a20f11b7c9..38479c53c4 100644 --- a/sakura_core/outline/CFuncInfoArr.h +++ b/sakura_core/outline/CFuncInfoArr.h @@ -21,6 +21,8 @@ class CFuncInfo; #include #include #include "util/design_template.h" +#include "basis/SakuraBasis.h" +#include "basis/CMyString.h" // 標準的な付加情報定数 #define FL_OBJ_DEFINITION 0 // 親クラスの定義位置 diff --git a/sakura_core/parse/CWordParse.cpp b/sakura_core/parse/CWordParse.cpp index a576ed720e..3e4a3c4aaa 100644 --- a/sakura_core/parse/CWordParse.cpp +++ b/sakura_core/parse/CWordParse.cpp @@ -26,6 +26,7 @@ #include "CWordParse.h" #include "charset/charcode.h" #include "charset/codechecker.h" +#include "mem/CNativeW.h" //@@@ 2001.06.23 N.Nakatani /*! diff --git a/sakura_core/plugin/CDllPlugin.cpp b/sakura_core/plugin/CDllPlugin.cpp index 007f699c54..f433565d8b 100644 --- a/sakura_core/plugin/CDllPlugin.cpp +++ b/sakura_core/plugin/CDllPlugin.cpp @@ -29,6 +29,9 @@ #include "StdAfx.h" #include "plugin/CDllPlugin.h" #include "view/CEditView.h" +#include "util/tchar_convert.h" +#include "CSelectLang.h" +#include "String_define.h" // デストラクタ CDllPlugin::~CDllPlugin(void) diff --git a/sakura_core/plugin/CJackManager.h b/sakura_core/plugin/CJackManager.h index 3fcbeb7b8f..6e4408da57 100644 --- a/sakura_core/plugin/CJackManager.h +++ b/sakura_core/plugin/CJackManager.h @@ -32,6 +32,7 @@ #include "plugin/CPlugin.h" #include +#include "util/design_template.h" #define PP_COMMAND_STR L"Command" diff --git a/sakura_core/plugin/CPluginManager.cpp b/sakura_core/plugin/CPluginManager.cpp index 5beeeeb728..dfcd5a1756 100644 --- a/sakura_core/plugin/CPluginManager.cpp +++ b/sakura_core/plugin/CPluginManager.cpp @@ -33,6 +33,8 @@ #include "plugin/CDllPlugin.h" #include "util/module.h" #include "io/CZipFile.h" +#include "CSelectLang.h" +#include "String_define.h" //コンストラクタ CPluginManager::CPluginManager() diff --git a/sakura_core/plugin/CWSHPlugin.cpp b/sakura_core/plugin/CWSHPlugin.cpp index c275225047..20a8349bcb 100644 --- a/sakura_core/plugin/CWSHPlugin.cpp +++ b/sakura_core/plugin/CWSHPlugin.cpp @@ -30,6 +30,8 @@ #include "plugin/CWSHPlugin.h" #include "plugin/CPluginIfObj.h" #include "macro/CWSHManager.h" +#include "CSelectLang.h" +#include "String_define.h" // デストラクタ CWSHPlugin::~CWSHPlugin(void) diff --git a/sakura_core/print/CPrint.cpp b/sakura_core/print/CPrint.cpp index a30d94c896..7c6ff926c2 100644 --- a/sakura_core/print/CPrint.cpp +++ b/sakura_core/print/CPrint.cpp @@ -38,6 +38,9 @@ #include #include "CPrint.h" #include "_main/global.h" +#include "CSelectLang.h" +#include "basis/CMyString.h" +#include "String_define.h" // 2006.08.14 Moca 用紙名一覧の重複削除・情報の統合 const PAPER_INFO CPrint::m_paperInfoArr[] = { diff --git a/sakura_core/print/CPrint.h b/sakura_core/print/CPrint.h index a7e42cb31b..147ee95dbc 100644 --- a/sakura_core/print/CPrint.h +++ b/sakura_core/print/CPrint.h @@ -36,6 +36,7 @@ #include #include // PRINTDLG +#include "basis/primitive.h" struct MYDEVMODE { BOOL m_bPrinterNotFound; /* プリンタがなかったフラグ */ diff --git a/sakura_core/print/CPrintPreview.cpp b/sakura_core/print/CPrintPreview.cpp index f481916347..6a3601915d 100644 --- a/sakura_core/print/CPrintPreview.cpp +++ b/sakura_core/print/CPrintPreview.cpp @@ -50,7 +50,12 @@ #include "env/CSakuraEnvironment.h" // CColorStrategyは本来はCEditViewが必要だが、CEditWnd.hあたりでinclude済み #include "view/colors/CColorStrategy.h" +#include "apiwrap/StdApi.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" #include "sakura_rc.h" +#include "config/system_constants.h" +#include "String_define.h" using namespace std; diff --git a/sakura_core/print/CPrintPreview.h b/sakura_core/print/CPrintPreview.h index 81daff494e..ba5ff89ba7 100644 --- a/sakura_core/print/CPrintPreview.h +++ b/sakura_core/print/CPrintPreview.h @@ -38,6 +38,7 @@ #include "basis/SakuraBasis.h" #include "util/design_template.h" #include "CPrint.h" // 2002/2/10 aroka +#include "types/CType.h" class CColorStrategy; class CColorStrategyPool; @@ -45,6 +46,7 @@ class CDlgCancel; class CEditWnd; class CLayout; class CLayoutMgr; +class CStringRef; class CPrintPreview { /* メンバ関数宣言 */ diff --git a/sakura_core/prop/CPropComBackup.cpp b/sakura_core/prop/CPropComBackup.cpp index b2a33d2d5d..a501fb16aa 100644 --- a/sakura_core/prop/CPropComBackup.cpp +++ b/sakura_core/prop/CPropComBackup.cpp @@ -23,8 +23,11 @@ #include "prop/CPropCommon.h" #include "util/shell.h" #include "util/window.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" #include "sakura_rc.h" #include "sakura.hh" +#include "String_define.h" //@@@ 2001.02.04 Start by MIK: Popup Help static const DWORD p_helpids[] = { //10000 diff --git a/sakura_core/prop/CPropComCustmenu.cpp b/sakura_core/prop/CPropComCustmenu.cpp index 0c2beb3798..7d1c73a66a 100644 --- a/sakura_core/prop/CPropComCustmenu.cpp +++ b/sakura_core/prop/CPropComCustmenu.cpp @@ -24,8 +24,11 @@ #include "util/shell.h" #include "util/window.h" #include "typeprop/CImpExpManager.h" // 20210/4/23 Uchi +#include "apiwrap/StdApi.h" +#include "apiwrap/StdControl.h" #include "sakura_rc.h" #include "sakura.hh" +#include "String_define.h" using namespace std; diff --git a/sakura_core/prop/CPropComEdit.cpp b/sakura_core/prop/CPropComEdit.cpp index c70bea0df4..6c1c929ba3 100644 --- a/sakura_core/prop/CPropComEdit.cpp +++ b/sakura_core/prop/CPropComEdit.cpp @@ -23,8 +23,11 @@ #include "env/CFileNameManager.h" #include "util/shell.h" #include "util/window.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" #include "sakura_rc.h" #include "sakura.hh" +#include "String_define.h" //@@@ 2001.02.04 Start by MIK: Popup Help static const DWORD p_helpids[] = { //10210 diff --git a/sakura_core/prop/CPropComFile.cpp b/sakura_core/prop/CPropComFile.cpp index 8a69259209..209a9c06dd 100644 --- a/sakura_core/prop/CPropComFile.cpp +++ b/sakura_core/prop/CPropComFile.cpp @@ -21,8 +21,11 @@ #include "util/shell.h" #include "util/window.h" #include "util/os.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" #include "sakura_rc.h" #include "sakura.hh" +#include "String_define.h" static const DWORD p_helpids[] = { //01310 IDC_COMBO_FILESHAREMODE, HIDC_COMBO_FILESHAREMODE, //排他制御 diff --git a/sakura_core/prop/CPropComFileName.cpp b/sakura_core/prop/CPropComFileName.cpp index 3bb53bef05..3cb67e545f 100644 --- a/sakura_core/prop/CPropComFileName.cpp +++ b/sakura_core/prop/CPropComFileName.cpp @@ -37,8 +37,11 @@ #include "util/shell.h" #include "util/window.h" #include "util/os.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" #include "sakura_rc.h" #include "sakura.hh" +#include "String_define.h" static const DWORD p_helpids[] = { //13400 IDC_CHECK_SHORTPATH, HIDC_CHECK_FNAME_SHORTPATH, diff --git a/sakura_core/prop/CPropComFormat.cpp b/sakura_core/prop/CPropComFormat.cpp index b1764f6c0d..87e2560807 100644 --- a/sakura_core/prop/CPropComFormat.cpp +++ b/sakura_core/prop/CPropComFormat.cpp @@ -21,6 +21,7 @@ #include "util/shell.h" #include "env/DLLSHAREDATA.h" // CFormatManager.hより前に必要 #include "env/CFormatManager.h" +#include "apiwrap/StdControl.h" #include "sakura_rc.h" #include "sakura.hh" diff --git a/sakura_core/prop/CPropComGeneral.cpp b/sakura_core/prop/CPropComGeneral.cpp index b77360611f..de6690082c 100644 --- a/sakura_core/prop/CPropComGeneral.cpp +++ b/sakura_core/prop/CPropComGeneral.cpp @@ -19,8 +19,13 @@ #include "recent/CMRUFolder.h" #include "util/shell.h" #include "util/os.h" +#include "apiwrap/CommonControl.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" #include "sakura_rc.h" #include "sakura.hh" +#include "config/app_constants.h" +#include "String_define.h" //@@@ 2001.02.04 Start by MIK: Popup Help TYPE_NAME_ID SpecialScrollModeArr[] = { diff --git a/sakura_core/prop/CPropComGrep.cpp b/sakura_core/prop/CPropComGrep.cpp index 6296078107..1992c688f3 100644 --- a/sakura_core/prop/CPropComGrep.cpp +++ b/sakura_core/prop/CPropComGrep.cpp @@ -20,8 +20,11 @@ #include "extmodule/CBregexp.h" // 2007.08/12 genta バージョン取得 #include "util/shell.h" #include "util/window.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" #include "sakura_rc.h" #include "sakura.hh" +#include "String_define.h" //@@@ 2001.02.04 Start by MIK: Popup Help static const DWORD p_helpids[] = { //10500 diff --git a/sakura_core/prop/CPropComHelper.cpp b/sakura_core/prop/CPropComHelper.cpp index 9eed90c925..bbb857b350 100644 --- a/sakura_core/prop/CPropComHelper.cpp +++ b/sakura_core/prop/CPropComHelper.cpp @@ -42,8 +42,11 @@ #include "dlg/CDlgOpenFile.h" #include "util/shell.h" #include "util/module.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" #include "sakura_rc.h" #include "sakura.hh" +#include "String_define.h" //@@@ 2001.02.04 Start by MIK: Popup Help static const DWORD p_helpids[] = { //10600 diff --git a/sakura_core/prop/CPropComKeybind.cpp b/sakura_core/prop/CPropComKeybind.cpp index 992889944d..67cf90e4c1 100644 --- a/sakura_core/prop/CPropComKeybind.cpp +++ b/sakura_core/prop/CPropComKeybind.cpp @@ -22,8 +22,12 @@ #include "env/CShareData.h" #include "typeprop/CImpExpManager.h" // 20210/4/23 Uchi #include "util/shell.h" +#include "apiwrap/StdApi.h" +#include "apiwrap/StdControl.h" #include "sakura_rc.h" #include "sakura.hh" +#include "config/system_constants.h" +#include "String_define.h" #define STR_SHIFT_PLUS L"Shift+" //@@@ 2001.11.08 add MIK #define STR_CTRL_PLUS L"Ctrl+" //@@@ 2001.11.08 add MIK diff --git a/sakura_core/prop/CPropComKeyword.cpp b/sakura_core/prop/CPropComKeyword.cpp index 37bdf4b8b3..d7c27a4703 100644 --- a/sakura_core/prop/CPropComKeyword.cpp +++ b/sakura_core/prop/CPropComKeyword.cpp @@ -28,8 +28,11 @@ #include "util/shell.h" #include "util/window.h" #include +#include "apiwrap/StdControl.h" #include "sakura_rc.h" #include "sakura.hh" +#include "config/app_constants.h" +#include "String_define.h" //@@@ 2001.02.04 Start by MIK: Popup Help static const DWORD p_helpids[] = { //10800 diff --git a/sakura_core/prop/CPropComMacro.cpp b/sakura_core/prop/CPropComMacro.cpp index ecb1828c49..fe8d060c65 100644 --- a/sakura_core/prop/CPropComMacro.cpp +++ b/sakura_core/prop/CPropComMacro.cpp @@ -41,8 +41,11 @@ #include "util/string_ex2.h" #include "util/module.h" #include "util/os.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" #include "sakura_rc.h" #include "sakura.hh" +#include "String_define.h" //! Popup Help用ID //@@@ 2001.12.22 Start by MIK: Popup Help diff --git a/sakura_core/prop/CPropComMainMenu.cpp b/sakura_core/prop/CPropComMainMenu.cpp index 19e04c8615..3f0a8044cb 100644 --- a/sakura_core/prop/CPropComMainMenu.cpp +++ b/sakura_core/prop/CPropComMainMenu.cpp @@ -35,8 +35,11 @@ #include "typeprop/CImpExpManager.h" #include "dlg/CDlgInput1.h" #include "util/shell.h" +#include "apiwrap/StdControl.h" #include "sakura_rc.h" #include "sakura.hh" +#include "config/app_constants.h" +#include "String_define.h" using std::wstring; diff --git a/sakura_core/prop/CPropComPlugin.cpp b/sakura_core/prop/CPropComPlugin.cpp index 1a5ad6b7db..7c9e67dae5 100644 --- a/sakura_core/prop/CPropComPlugin.cpp +++ b/sakura_core/prop/CPropComPlugin.cpp @@ -39,8 +39,11 @@ #include "dlg/CDlgPluginOption.h" // 2010/3/22 Uchi #include "io/CTextStream.h" #include "io/CZipFile.h" +#include "CSelectLang.h" #include "sakura_rc.h" #include "sakura.hh" +#include "config/app_constants.h" +#include "String_define.h" static void LoadPluginTemp(CommonSetting& common, CMenuDrawer& cMenuDrawer); diff --git a/sakura_core/prop/CPropComTab.cpp b/sakura_core/prop/CPropComTab.cpp index 42967017db..aac6bfb9aa 100644 --- a/sakura_core/prop/CPropComTab.cpp +++ b/sakura_core/prop/CPropComTab.cpp @@ -42,8 +42,11 @@ #include "CPropertyManager.h" #include "util/shell.h" #include "util/window.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" #include "sakura_rc.h" #include "sakura.hh" +#include "String_define.h" static const DWORD p_helpids[] = { IDC_CHECK_DispTabWnd, HIDC_CHECK_DispTabWnd, //タブウインドウ表示 //@@@ 2003.05.31 MIK diff --git a/sakura_core/prop/CPropComToolbar.cpp b/sakura_core/prop/CPropComToolbar.cpp index 66686cfa18..ae202c9e04 100644 --- a/sakura_core/prop/CPropComToolbar.cpp +++ b/sakura_core/prop/CPropComToolbar.cpp @@ -24,8 +24,12 @@ #include "uiparts/CMenuDrawer.h" // 2002/2/10 aroka #include "util/shell.h" #include "util/window.h" +#include "apiwrap/StdApi.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" #include "sakura_rc.h" #include "sakura.hh" +#include "String_define.h" //@@@ 2001.02.04 Start by MIK: Popup Help static const DWORD p_helpids[] = { //11000 diff --git a/sakura_core/prop/CPropComWin.cpp b/sakura_core/prop/CPropComWin.cpp index e78483a9b0..84caeea1cc 100644 --- a/sakura_core/prop/CPropComWin.cpp +++ b/sakura_core/prop/CPropComWin.cpp @@ -23,9 +23,11 @@ #include "dlg/CDlgWinSize.h" // 2004.05.13 Moca #include "util/shell.h" #include "util/os.h" +#include "apiwrap/StdControl.h" #include "sakura_rc.h" #include "sakura.hh" #include "_main/CProcess.h" +#include "CSelectLang.h" //@@@ 2001.02.04 Start by MIK: Popup Help static const DWORD p_helpids[] = { //11200 diff --git a/sakura_core/prop/CPropCommon.cpp b/sakura_core/prop/CPropCommon.cpp index 4e81f85ed1..711016e37a 100644 --- a/sakura_core/prop/CPropCommon.cpp +++ b/sakura_core/prop/CPropCommon.cpp @@ -46,7 +46,9 @@ #include "CEditApp.h" #include "util/shell.h" #include "util/window.h" +#include "apiwrap/StdControl.h" #include "sakura_rc.h" +#include "String_define.h" int CPropCommon::SearchIntArr( int nKey, int* pnArr, int nArrNum ) { diff --git a/sakura_core/recent/CMruListener.cpp b/sakura_core/recent/CMruListener.cpp index f518fa2927..57e81a27b6 100644 --- a/sakura_core/recent/CMruListener.cpp +++ b/sakura_core/recent/CMruListener.cpp @@ -33,6 +33,8 @@ #include "charset/CCodePage.h" #include "charset/CCodeMediator.h" #include "util/file.h" +#include "CSelectLang.h" +#include "String_define.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // セーブ前後 // diff --git a/sakura_core/typeprop/CDlgKeywordSelect.cpp b/sakura_core/typeprop/CDlgKeywordSelect.cpp index e09cc32b26..9b1f5f4637 100644 --- a/sakura_core/typeprop/CDlgKeywordSelect.cpp +++ b/sakura_core/typeprop/CDlgKeywordSelect.cpp @@ -34,6 +34,7 @@ #include "CDlgKeywordSelect.h" #include "env/DLLSHAREDATA.h" #include "CKeyWordSetMgr.h" +#include "apiwrap/StdControl.h" #include "sakura_rc.h" #include "sakura.hh" diff --git a/sakura_core/typeprop/CDlgSameColor.cpp b/sakura_core/typeprop/CDlgSameColor.cpp index 749922ea8d..0036084728 100644 --- a/sakura_core/typeprop/CDlgSameColor.cpp +++ b/sakura_core/typeprop/CDlgSameColor.cpp @@ -35,8 +35,12 @@ #include "view/colors/EColorIndexType.h" #include "uiparts/CGraphics.h" #include "util/shell.h" +#include "apiwrap/StdApi.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" #include "sakura_rc.h" #include "sakura.hh" +#include "String_define.h" static const DWORD p_helpids[] = { // 2006.10.10 ryoji IDOK, HIDOK_SAMECOLOR, // OK diff --git a/sakura_core/typeprop/CDlgTypeAscertain.cpp b/sakura_core/typeprop/CDlgTypeAscertain.cpp index dbbbf7dbb9..b88d1a2764 100644 --- a/sakura_core/typeprop/CDlgTypeAscertain.cpp +++ b/sakura_core/typeprop/CDlgTypeAscertain.cpp @@ -33,8 +33,12 @@ #include "env/CDocTypeManager.h" #include "util/shell.h" #include "util/window.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" +#include "env/DLLSHAREDATA.h" #include "sakura.hh" #include "sakura_rc.h" +#include "String_define.h" // タイプ別設定インポート確認 CDlgTypeAscertain.cpp const DWORD p_helpids[] = { diff --git a/sakura_core/typeprop/CDlgTypeList.cpp b/sakura_core/typeprop/CDlgTypeList.cpp index 7025b7a16b..4dafbd388b 100644 --- a/sakura_core/typeprop/CDlgTypeList.cpp +++ b/sakura_core/typeprop/CDlgTypeList.cpp @@ -27,8 +27,13 @@ #include "util/RegKey.h" #include "util/string_ex2.h" #include +#include "apiwrap/StdApi.h" +#include "apiwrap/StdControl.h" #include "sakura_rc.h" #include "sakura.hh" +#include "config/system_constants.h" +#include "config/app_constants.h" +#include "String_define.h" using std::wstring; diff --git a/sakura_core/typeprop/CImpExpManager.cpp b/sakura_core/typeprop/CImpExpManager.cpp index 67689252e2..ecc2af8d4d 100644 --- a/sakura_core/typeprop/CImpExpManager.cpp +++ b/sakura_core/typeprop/CImpExpManager.cpp @@ -40,6 +40,10 @@ #include "plugin/CPlugin.h" #include "view/CEditView.h" #include "view/colors/CColorStrategy.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" +#include "config/app_constants.h" +#include "String_define.h" /*----------------------------------------------------------------------- 定数 diff --git a/sakura_core/typeprop/CPropTypes.cpp b/sakura_core/typeprop/CPropTypes.cpp index 839ac997c5..d007b4432a 100644 --- a/sakura_core/typeprop/CPropTypes.cpp +++ b/sakura_core/typeprop/CPropTypes.cpp @@ -28,7 +28,11 @@ #include "view/colors/EColorIndexType.h" #include "util/shell.h" #include "util/window.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" +#include "env/DLLSHAREDATA.h" #include "sakura_rc.h" +#include "String_define.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // メッセージ処理 // diff --git a/sakura_core/typeprop/CPropTypesColor.cpp b/sakura_core/typeprop/CPropTypesColor.cpp index 4d77137caf..79a77ab4b3 100644 --- a/sakura_core/typeprop/CPropTypesColor.cpp +++ b/sakura_core/typeprop/CPropTypesColor.cpp @@ -35,6 +35,10 @@ #include "sakura_rc.h" #include "sakura.hh" #include "prop/CPropCommon.h" +#include "apiwrap/StdApi.h" +#include "apiwrap/StdControl.h" +#include "config/app_constants.h" +#include "String_define.h" using namespace std; diff --git a/sakura_core/typeprop/CPropTypesKeyHelp.cpp b/sakura_core/typeprop/CPropTypesKeyHelp.cpp index 0254b4dc87..cc88eb9003 100644 --- a/sakura_core/typeprop/CPropTypesKeyHelp.cpp +++ b/sakura_core/typeprop/CPropTypesKeyHelp.cpp @@ -39,8 +39,11 @@ #include "io/CTextStream.h" #include "util/shell.h" #include "util/module.h" +#include "apiwrap/StdApi.h" +#include "apiwrap/StdControl.h" #include "sakura_rc.h" #include "sakura.hh" +#include "String_define.h" using namespace std; diff --git a/sakura_core/typeprop/CPropTypesRegex.cpp b/sakura_core/typeprop/CPropTypesRegex.cpp index 24d74d2d20..2e8db77aa7 100644 --- a/sakura_core/typeprop/CPropTypesRegex.cpp +++ b/sakura_core/typeprop/CPropTypesRegex.cpp @@ -25,8 +25,11 @@ #include "typeprop/CImpExpManager.h" // 2010/4/23 Uchi #include "util/shell.h" #include "view/colors/EColorIndexType.h" +#include "apiwrap/StdControl.h" #include "sakura_rc.h" #include "sakura.hh" +#include "config/app_constants.h" +#include "String_define.h" using namespace std; diff --git a/sakura_core/typeprop/CPropTypesScreen.cpp b/sakura_core/typeprop/CPropTypesScreen.cpp index 5a70e475be..5415ff2de1 100644 --- a/sakura_core/typeprop/CPropTypesScreen.cpp +++ b/sakura_core/typeprop/CPropTypesScreen.cpp @@ -28,9 +28,15 @@ #include "util/window.h" #include "util/file.h" // _IS_REL_PATH #include "util/os.h" +#include "apiwrap/CommonControl.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" #include "sakura_rc.h" #include "sakura.hh" #include "doc/layout/CTsvModeInfo.h" +#include "env/DLLSHAREDATA.h" +#include "config/app_constants.h" +#include "String_define.h" static const DWORD p_helpids1[] = { //11300 IDC_EDIT_TYPENAME, HIDC_EDIT_TYPENAME, //設定の名前 diff --git a/sakura_core/typeprop/CPropTypesSupport.cpp b/sakura_core/typeprop/CPropTypesSupport.cpp index 0e0159b3a0..19c3e0d134 100644 --- a/sakura_core/typeprop/CPropTypesSupport.cpp +++ b/sakura_core/typeprop/CPropTypesSupport.cpp @@ -27,8 +27,11 @@ #include "util/shell.h" #include "util/file.h" // _IS_REL_PATH #include "util/window.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" #include "sakura_rc.h" #include "sakura.hh" +#include "String_define.h" static const DWORD p_helpids3[] = { //11500 IDC_EDIT_HOKANFILE, HIDC_EDIT_HOKANFILE, //単語ファイル名 diff --git a/sakura_core/typeprop/CPropTypesWindow.cpp b/sakura_core/typeprop/CPropTypesWindow.cpp index d723764f53..0031068556 100644 --- a/sakura_core/typeprop/CPropTypesWindow.cpp +++ b/sakura_core/typeprop/CPropTypesWindow.cpp @@ -40,8 +40,11 @@ #include "util/shell.h" #include "util/window.h" #include "util/os.h" +#include "apiwrap/StdControl.h" #include "sakura_rc.h" #include "sakura.hh" +#include "config/app_constants.h" +#include "String_define.h" using namespace std; diff --git a/sakura_core/types/CType.cpp b/sakura_core/types/CType.cpp index 5ca81b8ae8..f3501fd66b 100644 --- a/sakura_core/types/CType.cpp +++ b/sakura_core/types/CType.cpp @@ -30,6 +30,7 @@ #include "env/CDocTypeManager.h" #include "env/CShareData.h" #include "env/DLLSHAREDATA.h" +#include "config/app_constants.h" void _DefaultConfig(STypeConfig* pType); diff --git a/sakura_core/types/CType.h b/sakura_core/types/CType.h index 05368a8495..dfef85180d 100644 --- a/sakura_core/types/CType.h +++ b/sakura_core/types/CType.h @@ -34,6 +34,7 @@ #include "doc/CBlockComment.h" #include "charset/charset.h" // ECodeType #include "CRegexKeyword.h" // RegexKeywordInfo +#include "charset/charcode.h" //! タブ表示方法 enum ETabArrow { diff --git a/sakura_core/types/CType_Basis.cpp b/sakura_core/types/CType_Basis.cpp index f1cc2e27b9..6969e54b71 100644 --- a/sakura_core/types/CType_Basis.cpp +++ b/sakura_core/types/CType_Basis.cpp @@ -28,6 +28,7 @@ #include "types/CType.h" #include "doc/CDocOutline.h" #include "view/colors/EColorIndexType.h" +#include "config/app_constants.h" void CType_Basis::InitTypeConfigImp(STypeConfig* pType) { diff --git a/sakura_core/types/CType_Cpp.cpp b/sakura_core/types/CType_Cpp.cpp index 7868515257..c8fdc60912 100644 --- a/sakura_core/types/CType_Cpp.cpp +++ b/sakura_core/types/CType_Cpp.cpp @@ -33,6 +33,8 @@ #include "cmd/CViewCommander_inline.h" #include "view/CEditView.h" #include "view/colors/EColorIndexType.h" +#include "CSelectLang.h" +#include "String_define.h" /*! * @brief C/C++のファイル名による判定 diff --git a/sakura_core/types/CType_Erlang.cpp b/sakura_core/types/CType_Erlang.cpp index 082b98524a..456f1cbda5 100644 --- a/sakura_core/types/CType_Erlang.cpp +++ b/sakura_core/types/CType_Erlang.cpp @@ -36,6 +36,8 @@ #include "doc/CDocOutline.h" #include "doc/logic/CDocLine.h" #include "outline/CFuncInfoArr.h" +#include "CSelectLang.h" +#include "String_define.h" /** Erlang アウトライン解析 管理&解析 */ diff --git a/sakura_core/types/CType_Java.cpp b/sakura_core/types/CType_Java.cpp index 9894d9b282..c18ef07132 100644 --- a/sakura_core/types/CType_Java.cpp +++ b/sakura_core/types/CType_Java.cpp @@ -31,6 +31,8 @@ #include "doc/logic/CDocLine.h" #include "outline/CFuncInfoArr.h" #include "view/Colors/EColorIndexType.h" +#include "CSelectLang.h" +#include "String_define.h" /* Java */ void CType_Java::InitTypeConfigImp(STypeConfig* pType) diff --git a/sakura_core/types/CType_Python.cpp b/sakura_core/types/CType_Python.cpp index 92b9e1ca38..ea19df21c7 100644 --- a/sakura_core/types/CType_Python.cpp +++ b/sakura_core/types/CType_Python.cpp @@ -34,6 +34,8 @@ #include "doc/CDocOutline.h" #include "doc/logic/CDocLine.h" #include "outline/CFuncInfoArr.h" +#include "CSelectLang.h" +#include "String_define.h" /*! 関数に用いることができる文字かどうかの判定 diff --git a/sakura_core/types/CType_Text.cpp b/sakura_core/types/CType_Text.cpp index bb65ee3c52..4403257f23 100644 --- a/sakura_core/types/CType_Text.cpp +++ b/sakura_core/types/CType_Text.cpp @@ -33,6 +33,8 @@ #include "outline/CFuncInfo.h" #include "outline/CFuncInfoArr.h" #include "view/colors/EColorIndexType.h" +#include "CSelectLang.h" +#include "String_define.h" /* テキスト */ //Sep. 20, 2000 JEPRO テキストの規定値を80→120に変更(不具合一覧.txtがある程度読みやすい桁数) diff --git a/sakura_core/uiparts/CGraphics.cpp b/sakura_core/uiparts/CGraphics.cpp index 795dd0e644..9651b29a82 100644 --- a/sakura_core/uiparts/CGraphics.cpp +++ b/sakura_core/uiparts/CGraphics.cpp @@ -30,6 +30,7 @@ #include "StdAfx.h" #include "CGraphics.h" #include "util/std_macro.h" +#include "apiwrap/StdApi.h" class CGDIStock { diff --git a/sakura_core/uiparts/CGraphics.h b/sakura_core/uiparts/CGraphics.h index a1aacda1f7..d88c93c266 100644 --- a/sakura_core/uiparts/CGraphics.h +++ b/sakura_core/uiparts/CGraphics.h @@ -34,6 +34,7 @@ #include #include #include +#include "doc/CDocTypeSetting.h" /*! * @brief API関数FillRectの高速版(ブラシ用) diff --git a/sakura_core/uiparts/CImageListMgr.cpp b/sakura_core/uiparts/CImageListMgr.cpp index 8eca6f7727..9c81c74f41 100644 --- a/sakura_core/uiparts/CImageListMgr.cpp +++ b/sakura_core/uiparts/CImageListMgr.cpp @@ -28,6 +28,7 @@ #include "util/module.h" #include "debug/CRunningTimer.h" #include "sakura_rc.h" +#include "config/system_constants.h" // 2010/06/29 syat MAX_X, MAX_Yの値をCommonSettings.hに移動 // Jul. 21, 2003 genta 他でも使うので関数の外に出した diff --git a/sakura_core/uiparts/CMenuDrawer.h b/sakura_core/uiparts/CMenuDrawer.h index 879c4780d5..935a5674b5 100644 --- a/sakura_core/uiparts/CMenuDrawer.h +++ b/sakura_core/uiparts/CMenuDrawer.h @@ -21,6 +21,7 @@ #pragma once #include "Funccode_enum.h" +#include "mem/CNativeW.h" class CMenuDrawer; diff --git a/sakura_core/uiparts/CSoundSet.cpp b/sakura_core/uiparts/CSoundSet.cpp index d379c4382e..f4859b19e0 100644 --- a/sakura_core/uiparts/CSoundSet.cpp +++ b/sakura_core/uiparts/CSoundSet.cpp @@ -24,6 +24,7 @@ */ #include "StdAfx.h" #include "CSoundSet.h" +#include "util/MessageBoxF.h" void CSoundSet::NeedlessToSaveBeep() { diff --git a/sakura_core/uiparts/CVisualProgress.cpp b/sakura_core/uiparts/CVisualProgress.cpp index 8ab635c12d..bdc460a0a9 100644 --- a/sakura_core/uiparts/CVisualProgress.cpp +++ b/sakura_core/uiparts/CVisualProgress.cpp @@ -27,6 +27,7 @@ #include "CWaitCursor.h" #include "window/CEditWnd.h" +#include "apiwrap/CommonControl.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // コンストラクタ・デストラクタ // diff --git a/sakura_core/util/MessageBoxF.cpp b/sakura_core/util/MessageBoxF.cpp index 714ec34b05..0ac4e290e3 100644 --- a/sakura_core/util/MessageBoxF.cpp +++ b/sakura_core/util/MessageBoxF.cpp @@ -37,6 +37,9 @@ #include #include "MessageBoxF.h" #include "window/CEditWnd.h" +#include "CSelectLang.h" +#include "config/app_constants.h" +#include "String_define.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // メッセージボックス:実装 // diff --git a/sakura_core/util/StaticType.h b/sakura_core/util/StaticType.h index 9519370855..7bae3dd0fe 100644 --- a/sakura_core/util/StaticType.h +++ b/sakura_core/util/StaticType.h @@ -28,6 +28,7 @@ #pragma once #include "util/string_ex.h" +#include "debug/Debug2.h" //! ヒープを用いないvector //2007.09.23 kobake 作成。 diff --git a/sakura_core/util/design_template.h b/sakura_core/util/design_template.h index e2824c4c0c..da26e80ef2 100644 --- a/sakura_core/util/design_template.h +++ b/sakura_core/util/design_template.h @@ -36,6 +36,8 @@ #include #include +#include "debug/Debug2.h" + // http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Copy_Constructors // A macro to disallow the copy constructor and operator= functions #define DISALLOW_COPY_AND_ASSIGN(TypeName) \ diff --git a/sakura_core/util/format.cpp b/sakura_core/util/format.cpp index 911e31fe0e..3ceee5a619 100644 --- a/sakura_core/util/format.cpp +++ b/sakura_core/util/format.cpp @@ -26,6 +26,7 @@ #include "StdAfx.h" #include "format.h" +#include "basis/CMyString.h" /*! 書式文字列に従い日時を変換 diff --git a/sakura_core/util/input.cpp b/sakura_core/util/input.cpp index be7af62089..023fb5ddc7 100644 --- a/sakura_core/util/input.cpp +++ b/sakura_core/util/input.cpp @@ -24,6 +24,8 @@ */ #include "StdAfx.h" #include "input.h" +#include "apiwrap/StdApi.h" +#include "config/system_constants.h" // novice 2004/10/10 マウスサイドボタン対応 /*! diff --git a/sakura_core/util/os.cpp b/sakura_core/util/os.cpp index 77ac77c5b9..9bf96d2d12 100644 --- a/sakura_core/util/os.cpp +++ b/sakura_core/util/os.cpp @@ -26,6 +26,7 @@ #include "os.h" #include "util/module.h" #include "extmodule/CUxTheme.h" +#include "basis/CMyString.h" /*! Comctl32.dll のバージョン番号を取得 diff --git a/sakura_core/util/shell.cpp b/sakura_core/util/shell.cpp index e6f1468148..e6f422e688 100644 --- a/sakura_core/util/shell.cpp +++ b/sakura_core/util/shell.cpp @@ -38,6 +38,8 @@ #include "env/CShareData.h" #include "env/DLLSHAREDATA.h" #include "extmodule/CHtmlHelp.h" +#include "config/app_constants.h" +#include "String_define.h" int CALLBACK MYBrowseCallbackProc( HWND hwnd, diff --git a/sakura_core/util/string_ex.h b/sakura_core/util/string_ex.h index 20968643e5..74f586f60e 100644 --- a/sakura_core/util/string_ex.h +++ b/sakura_core/util/string_ex.h @@ -29,6 +29,8 @@ #include #include +#include "basis/primitive.h" +#include "debug/Debug2.h" // 2007.10.19 kobake // string.h で定義されている関数を拡張したようなモノ達 diff --git a/sakura_core/util/string_ex2.cpp b/sakura_core/util/string_ex2.cpp index 45ebfccd55..785461b9b5 100644 --- a/sakura_core/util/string_ex2.cpp +++ b/sakura_core/util/string_ex2.cpp @@ -26,6 +26,7 @@ #include "string_ex2.h" #include "charset/charcode.h" #include "CEol.h" +#include "mem/CNativeW.h" wchar_t *wcs_pushW(wchar_t *dst, size_t dst_count, const wchar_t* src, size_t src_count) { diff --git a/sakura_core/util/tchar_convert.cpp b/sakura_core/util/tchar_convert.cpp index 7784b703f7..15ac4d702e 100644 --- a/sakura_core/util/tchar_convert.cpp +++ b/sakura_core/util/tchar_convert.cpp @@ -25,6 +25,7 @@ #include "StdAfx.h" #include "util/tchar_convert.h" #include "mem/CRecycledBuffer.h" +#include "charset/charcode.h" static CRecycledBuffer g_bufSmall; static CRecycledBufferDynamic g_bufBig; diff --git a/sakura_core/util/tchar_convert.h b/sakura_core/util/tchar_convert.h index e97fd3af26..170fbd3c7f 100644 --- a/sakura_core/util/tchar_convert.h +++ b/sakura_core/util/tchar_convert.h @@ -27,6 +27,8 @@ #define SAKURA_TCHAR_CONVERT_2F41312D_27C8_4366_89F5_046BF7ED3B32_H_ #pragma once +#include "basis/primitive.h" + //WCHARに変換 const WCHAR* to_wchar(const ACHAR* src); const WCHAR* to_wchar(const ACHAR* pSrcData, int nSrcLength); diff --git a/sakura_core/util/tchar_template.cpp b/sakura_core/util/tchar_template.cpp index ea5bd3ded8..98bf0c2b0d 100644 --- a/sakura_core/util/tchar_template.cpp +++ b/sakura_core/util/tchar_template.cpp @@ -24,6 +24,7 @@ */ #include "StdAfx.h" #include "tchar_template.h" +#include "util/std_macro.h" // -- -- 必要な文字群を手動で定義 -- -- // //アルファベット diff --git a/sakura_core/util/window.cpp b/sakura_core/util/window.cpp index 8228eefacd..b8b765ed8e 100644 --- a/sakura_core/util/window.cpp +++ b/sakura_core/util/window.cpp @@ -29,6 +29,8 @@ #include #include "window.h" #include +#include "apiwrap/StdApi.h" +#include "config/system_constants.h" int CDPI::nDpiX = 96; int CDPI::nDpiY = 96; diff --git a/sakura_core/view/CCaret.cpp b/sakura_core/view/CCaret.cpp index f79772bf8c..f64f769c2f 100644 --- a/sakura_core/view/CCaret.cpp +++ b/sakura_core/view/CCaret.cpp @@ -49,6 +49,9 @@ #include "charset/CCodeFactory.h" #include "charset/CCodeBase.h" #include "window/CEditWnd.h" +#include "CSelectLang.h" +#include "apiwrap/CommonControl.h" +#include "String_define.h" using namespace std; diff --git a/sakura_core/view/CCaret.h b/sakura_core/view/CCaret.h index 5f1ad47371..2bd985f7ba 100644 --- a/sakura_core/view/CCaret.h +++ b/sakura_core/view/CCaret.h @@ -27,6 +27,9 @@ #define SAKURA_CCARET_78A7C1D0_0D47_4FF9_AE73_3421E35ABCB0_H_ #pragma once +#include "basis/SakuraBasis.h" +#include "basis/CMySize.h" + #define _CARETMARGINRATE 20 class CTextArea; class CEditView; diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index c842ef5172..7d2f6a6e12 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -60,6 +60,8 @@ #include "util/os.h" //WM_MOUSEWHEEL,IMR_RECONVERTSTRING,WM_XBUTTON*,IMR_CONFIRMRECONVERTSTRING #include "util/module.h" #include "debug/CRunningTimer.h" +#include "apiwrap/StdApi.h" +#include "config/system_constants.h" LRESULT CALLBACK EditViewWndProc( HWND, UINT, WPARAM, LPARAM ); VOID CALLBACK EditViewTimerProc( HWND, UINT, UINT_PTR, DWORD ); diff --git a/sakura_core/view/CEditView_Cmdgrep.cpp b/sakura_core/view/CEditView_Cmdgrep.cpp index 4c54440c1b..661c33f181 100644 --- a/sakura_core/view/CEditView_Cmdgrep.cpp +++ b/sakura_core/view/CEditView_Cmdgrep.cpp @@ -22,6 +22,7 @@ #include "charset/charcode.h" #include "CEditApp.h" #include "CGrepAgent.h" +#include "apiwrap/StdApi.h" #include "sakura_rc.h" /*! diff --git a/sakura_core/view/CEditView_Cmdisrch.cpp b/sakura_core/view/CEditView_Cmdisrch.cpp index 9d9f39bde1..6bee46e5bc 100644 --- a/sakura_core/view/CEditView_Cmdisrch.cpp +++ b/sakura_core/view/CEditView_Cmdisrch.cpp @@ -19,7 +19,9 @@ #include "doc/CEditDoc.h" #include "doc/logic/CDocLine.h" #include "extmodule/CMigemo.h" +#include "CSelectLang.h" #include "sakura_rc.h" +#include "String_define.h" /*! コマンドコードの変換(ISearch時)及び diff --git a/sakura_core/view/CEditView_Command.cpp b/sakura_core/view/CEditView_Command.cpp index 41faaab851..4acd37125c 100644 --- a/sakura_core/view/CEditView_Command.cpp +++ b/sakura_core/view/CEditView_Command.cpp @@ -38,6 +38,10 @@ #include "_main/CControlTray.h" #include "charset/charcode.h" #include "recent/CRecent.h" +#include "apiwrap/StdApi.h" +#include "apiwrap/CommonControl.h" +#include "config/system_constants.h" +#include "config/app_constants.h" /* 指定ファイルの指定位置にタグジャンプする。 diff --git a/sakura_core/view/CEditView_Diff.cpp b/sakura_core/view/CEditView_Diff.cpp index 0df7cb0bce..733af362be 100644 --- a/sakura_core/view/CEditView_Diff.cpp +++ b/sakura_core/view/CEditView_Diff.cpp @@ -56,7 +56,10 @@ #include "io/CTextStream.h" #include "io/CFileLoad.h" #include "CWriteManager.h" +#include "apiwrap/StdApi.h" #include "sakura_rc.h" +#include "config/system_constants.h" +#include "String_define.h" #define SAKURA_DIFF_TEMP_PREFIX L"sakura_diff_" diff --git a/sakura_core/view/CEditView_ExecCmd.cpp b/sakura_core/view/CEditView_ExecCmd.cpp index 08052a3a4c..d85b6babfd 100644 --- a/sakura_core/view/CEditView_ExecCmd.cpp +++ b/sakura_core/view/CEditView_ExecCmd.cpp @@ -33,7 +33,10 @@ #include "charset/CShiftJis.h" #include "util/window.h" #include "util/tchar_template.h" +#include "apiwrap/StdControl.h" +#include "mem/CNativeA.h" #include "sakura_rc.h" // IDD_EXECRUNNING +#include "String_define.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 外部コマンド // diff --git a/sakura_core/view/CEditView_Ime.cpp b/sakura_core/view/CEditView_Ime.cpp index 36f551642c..69f9b82bf2 100644 --- a/sakura_core/view/CEditView_Ime.cpp +++ b/sakura_core/view/CEditView_Ime.cpp @@ -26,9 +26,9 @@ #include #include "charset/CShiftJis.h" #include "doc/CEditDoc.h" -#include "env/DLLSHAREDATA.h" -#include "_main/CAppMode.h" #include "window/CEditWnd.h" +#include "util/tchar_convert.h" +#include "mem/CNativeA.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // IME // diff --git a/sakura_core/view/CEditView_Mouse.cpp b/sakura_core/view/CEditView_Mouse.cpp index dd86ab7eab..798b6407af 100644 --- a/sakura_core/view/CEditView_Mouse.cpp +++ b/sakura_core/view/CEditView_Mouse.cpp @@ -40,7 +40,12 @@ #include "util/os.h" #include "charset/CCodeBase.h" #include "charset/CCodeFactory.h" +#include "apiwrap/StdApi.h" +#include "CSelectLang.h" +#include "mem/CNativeA.h" #include "sakura_rc.h" +#include "config/system_constants.h" +#include "String_define.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // マウスイベント // diff --git a/sakura_core/view/CEditView_Scroll.cpp b/sakura_core/view/CEditView_Scroll.cpp index 70c4e4adb1..74c280f37d 100644 --- a/sakura_core/view/CEditView_Scroll.cpp +++ b/sakura_core/view/CEditView_Scroll.cpp @@ -30,6 +30,7 @@ #include "window/CEditWnd.h" #include "types/CTypeSupport.h" #include +#include "config/app_constants.h" /*! スクロールバー作成 @date 2006.12.19 ryoji 新規作成(CEditView::Createから分離) diff --git a/sakura_core/view/CEditView_Search.cpp b/sakura_core/view/CEditView_Search.cpp index f7a45893d8..6a8edfed1d 100644 --- a/sakura_core/view/CEditView_Search.cpp +++ b/sakura_core/view/CEditView_Search.cpp @@ -30,6 +30,8 @@ #include "window/CEditWnd.h" #include "parse/CWordParse.h" #include "util/string_ex2.h" +#include "CSelectLang.h" +#include "String_define.h" const int STRNCMP_MAX = 100; /* MAXキーワード長:_strnicmp文字列比較最大値(CEditView::KeySearchCore) */ // 2006.04.10 fon diff --git a/sakura_core/view/CTextArea.cpp b/sakura_core/view/CTextArea.cpp index d0f9c47442..ac28afa8d9 100644 --- a/sakura_core/view/CTextArea.cpp +++ b/sakura_core/view/CTextArea.cpp @@ -30,6 +30,7 @@ #include "env/CShareData.h" #include "env/DLLSHAREDATA.h" #include "doc/CEditDoc.h" +#include "config/app_constants.h" // 2014.07.26 katze //#define USE_LOG10 // この行のコメントを外すと行番号の最小桁数の計算にlog10()を用いる diff --git a/sakura_core/view/CTextArea.h b/sakura_core/view/CTextArea.h index 18ab4782b4..92da7ba53b 100644 --- a/sakura_core/view/CTextArea.h +++ b/sakura_core/view/CTextArea.h @@ -27,10 +27,12 @@ #define SAKURA_CTEXTAREA_E3BB290D_608F_4F86_B460_8D84F171CB11_H_ #pragma once +#include "DispPos.h" + class CViewFont; class CEditView; class CLayoutMgr; -#include "DispPos.h" +class CMySize; class CTextArea{ public: diff --git a/sakura_core/view/CTextDrawer.cpp b/sakura_core/view/CTextDrawer.cpp index 6faa7e8ddd..0889740050 100644 --- a/sakura_core/view/CTextDrawer.cpp +++ b/sakura_core/view/CTextDrawer.cpp @@ -36,6 +36,7 @@ #include "types/CTypeSupport.h" #include "charset/charcode.h" #include "doc/layout/CLayout.h" +#include "apiwrap/StdApi.h" const CTextArea* CTextDrawer::GetTextArea() const { diff --git a/sakura_core/view/CTextMetrics.cpp b/sakura_core/view/CTextMetrics.cpp index d066e3d68c..2a5878c142 100644 --- a/sakura_core/view/CTextMetrics.cpp +++ b/sakura_core/view/CTextMetrics.cpp @@ -28,6 +28,7 @@ #include #include "CTextMetrics.h" #include "charset/codechecker.h" +#include "mem/CNativeW.h" void CTextMetrics::CopyTextMetricsStatus(CTextMetrics* pDst) const { diff --git a/sakura_core/view/CViewFont.cpp b/sakura_core/view/CViewFont.cpp index aa0a0c292d..3587f494cf 100644 --- a/sakura_core/view/CViewFont.cpp +++ b/sakura_core/view/CViewFont.cpp @@ -26,6 +26,7 @@ #include "StdAfx.h" #include "CViewFont.h" +#include "env/DLLSHAREDATA.h" /*! フォント作成 */ diff --git a/sakura_core/view/CViewParser.h b/sakura_core/view/CViewParser.h index e5f0ddec02..458d7cb6d7 100644 --- a/sakura_core/view/CViewParser.h +++ b/sakura_core/view/CViewParser.h @@ -28,6 +28,7 @@ #pragma once class CEditView; +class CNativeW; //!品詞解析クラス class CViewParser{ diff --git a/sakura_core/view/colors/CColorStrategy.h b/sakura_core/view/colors/CColorStrategy.h index 5ee97b977b..8edb07907b 100644 --- a/sakura_core/view/colors/CColorStrategy.h +++ b/sakura_core/view/colors/CColorStrategy.h @@ -33,6 +33,7 @@ #include "uiparts/CGraphics.h" class CEditView; +class CStringRef; bool _IsPosKeywordHead(const CStringRef& cStr, int nPos); diff --git a/sakura_core/view/figures/CFigureStrategy.cpp b/sakura_core/view/figures/CFigureStrategy.cpp index 9d5c2f05b5..1dfaa07b25 100644 --- a/sakura_core/view/figures/CFigureStrategy.cpp +++ b/sakura_core/view/figures/CFigureStrategy.cpp @@ -31,6 +31,7 @@ #include "doc/layout/CLayout.h" #include "charset/charcode.h" #include "types/CTypeSupport.h" +#include "apiwrap/StdApi.h" FigureRenderType CFigure_Text::GetRenderType(SColorStrategyInfo* pInfo) { diff --git a/sakura_core/view/figures/CFigure_Comma.cpp b/sakura_core/view/figures/CFigure_Comma.cpp index 29d3829466..4af965b1c7 100644 --- a/sakura_core/view/figures/CFigure_Comma.cpp +++ b/sakura_core/view/figures/CFigure_Comma.cpp @@ -25,9 +25,8 @@ #include "StdAfx.h" #include "view/CEditView.h" // SColorStrategyInfo #include "CFigure_Comma.h" -#include "env/CShareData.h" -#include "env/DLLSHAREDATA.h" #include "types/CTypeSupport.h" +#include "apiwrap/StdApi.h" void _DispTab( CGraphics& gr, DispPos* pDispPos, const CEditView* pcView ); diff --git a/sakura_core/view/figures/CFigure_CtrlCode.cpp b/sakura_core/view/figures/CFigure_CtrlCode.cpp index db9df66acd..8242c5c47e 100644 --- a/sakura_core/view/figures/CFigure_CtrlCode.cpp +++ b/sakura_core/view/figures/CFigure_CtrlCode.cpp @@ -26,6 +26,7 @@ #include "view/CEditView.h" // SColorStrategyInfo #include "CFigure_CtrlCode.h" #include "types/CTypeSupport.h" +#include "apiwrap/StdApi.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // CFigure_CtrlCode // diff --git a/sakura_core/view/figures/CFigure_Eol.cpp b/sakura_core/view/figures/CFigure_Eol.cpp index a731889716..a2eecfb6b8 100644 --- a/sakura_core/view/figures/CFigure_Eol.cpp +++ b/sakura_core/view/figures/CFigure_Eol.cpp @@ -28,9 +28,8 @@ #include "view/CEditView.h" // SColorStrategyInfo #include "CFigure_Eol.h" #include "types/CTypeSupport.h" -#include "env/CShareData.h" -#include "env/DLLSHAREDATA.h" #include "window/CEditWnd.h" +#include "apiwrap/StdApi.h" //折り返し描画 void _DispWrap(CGraphics& gr, DispPos* pDispPos, const CEditView* pcView); diff --git a/sakura_core/view/figures/CFigure_HanSpace.cpp b/sakura_core/view/figures/CFigure_HanSpace.cpp index 4c2e1658ca..42f7c2ba86 100644 --- a/sakura_core/view/figures/CFigure_HanSpace.cpp +++ b/sakura_core/view/figures/CFigure_HanSpace.cpp @@ -27,6 +27,7 @@ #include "CFigure_HanSpace.h" #include "types/CTypeSupport.h" +#include "apiwrap/StdApi.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // CFigure_HanSpace // diff --git a/sakura_core/view/figures/CFigure_Tab.cpp b/sakura_core/view/figures/CFigure_Tab.cpp index 9cddefd661..ee33303985 100644 --- a/sakura_core/view/figures/CFigure_Tab.cpp +++ b/sakura_core/view/figures/CFigure_Tab.cpp @@ -25,9 +25,8 @@ #include "StdAfx.h" #include "view/CEditView.h" // SColorStrategyInfo #include "CFigure_Tab.h" -#include "env/CShareData.h" -#include "env/DLLSHAREDATA.h" #include "types/CTypeSupport.h" +#include "apiwrap/StdApi.h" //2007.08.28 kobake 追加 void _DispTab( CGraphics& gr, DispPos* pDispPos, const CEditView* pcView ); diff --git a/sakura_core/view/figures/CFigure_ZenSpace.cpp b/sakura_core/view/figures/CFigure_ZenSpace.cpp index 18e36b7291..290768fe49 100644 --- a/sakura_core/view/figures/CFigure_ZenSpace.cpp +++ b/sakura_core/view/figures/CFigure_ZenSpace.cpp @@ -26,6 +26,7 @@ #include "view/CEditView.h" // SColorStrategyInfo #include "CFigure_ZenSpace.h" #include "types/CTypeSupport.h" +#include "apiwrap/StdApi.h" void Draw_ZenSpace( CGraphics& gr, const CMyRect& rc ); diff --git a/sakura_core/window/CAutoScrollWnd.h b/sakura_core/window/CAutoScrollWnd.h index 051cd7eff7..56a785a8c7 100644 --- a/sakura_core/window/CAutoScrollWnd.h +++ b/sakura_core/window/CAutoScrollWnd.h @@ -28,7 +28,9 @@ #pragma once #include "CWnd.h" + class CEditView; +class CMyPoint; class CAutoScrollWnd final: public CWnd { diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index 780a1d1153..ce4f85506b 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -70,7 +70,12 @@ #include "CMarkMgr.h" #include "doc/layout/CLayout.h" #include "debug/CRunningTimer.h" +#include "apiwrap/StdApi.h" +#include "apiwrap/CommonControl.h" #include "sakura_rc.h" +#include "config/system_constants.h" +#include "config/app_constants.h" +#include "String_define.h" //@@@ 2002.01.14 YAZAKI 印刷プレビューをCPrintPreviewに独立させたので // 定義を削除 diff --git a/sakura_core/window/CMainStatusBar.cpp b/sakura_core/window/CMainStatusBar.cpp index ccf0a22664..4d20f02302 100644 --- a/sakura_core/window/CMainStatusBar.cpp +++ b/sakura_core/window/CMainStatusBar.cpp @@ -26,6 +26,7 @@ #include "CMainStatusBar.h" #include "window/CEditWnd.h" #include "CEditApp.h" +#include "apiwrap/CommonControl.h" CMainStatusBar::CMainStatusBar(CEditWnd* pOwner) : m_pOwner(pOwner) diff --git a/sakura_core/window/CMainToolBar.cpp b/sakura_core/window/CMainToolBar.cpp index 40d6c9867c..33659b608f 100644 --- a/sakura_core/window/CMainToolBar.cpp +++ b/sakura_core/window/CMainToolBar.cpp @@ -33,6 +33,10 @@ #include "util/os.h" #include "util/window.h" #include "uiparts/CImageListMgr.h" +#include "apiwrap/CommonControl.h" +#include "apiwrap/StdControl.h" +#include "CSelectLang.h" +#include "String_define.h" CMainToolBar::CMainToolBar(CEditWnd* pOwner) : m_pOwner(pOwner) diff --git a/sakura_core/window/CSplitBoxWnd.cpp b/sakura_core/window/CSplitBoxWnd.cpp index 3e8a0f29c9..3399d5487b 100644 --- a/sakura_core/window/CSplitBoxWnd.cpp +++ b/sakura_core/window/CSplitBoxWnd.cpp @@ -16,6 +16,8 @@ #include "StdAfx.h" #include "window/CSplitBoxWnd.h" #include "uiparts/CGraphics.h" +#include "apiwrap/StdApi.h" +#include "config/system_constants.h" CSplitBoxWnd::CSplitBoxWnd() : CWnd(L"::CSplitBoxWnd") diff --git a/sakura_core/window/CSplitterWnd.cpp b/sakura_core/window/CSplitterWnd.cpp index ee19df962e..27a324b8e2 100644 --- a/sakura_core/window/CSplitterWnd.cpp +++ b/sakura_core/window/CSplitterWnd.cpp @@ -23,6 +23,10 @@ #include "outline/CDlgFuncList.h" #include "env/DLLSHAREDATA.h" #include "uiparts/CGraphics.h" +#include "apiwrap/StdApi.h" +#include "CSelectLang.h" +#include "config/system_constants.h" +#include "String_define.h" constexpr auto SPLITTER_FRAME_WIDTH = 3; constexpr auto SPLITTER_MARGIN = 2; diff --git a/sakura_core/window/CTabWnd.cpp b/sakura_core/window/CTabWnd.cpp index 3855dd83d9..a48dbda8f8 100644 --- a/sakura_core/window/CTabWnd.cpp +++ b/sakura_core/window/CTabWnd.cpp @@ -52,8 +52,12 @@ #include "util/window.h" #include "util/module.h" #include "util/string_ex2.h" +#include "apiwrap/StdApi.h" +#include "apiwrap/CommonControl.h" #include "sakura_rc.h" #include +#include "config/system_constants.h" +#include "String_define.h" // 2006.01.30 ryoji タブのサイズ/位置に関する定義 // 2009.10.01 ryoji 高DPI対応スケーリング diff --git a/sakura_core/window/CTabWnd.h b/sakura_core/window/CTabWnd.h index 9dc82eabb0..65ee6f9a21 100644 --- a/sakura_core/window/CTabWnd.h +++ b/sakura_core/window/CTabWnd.h @@ -41,6 +41,7 @@ #include "CWnd.h" #include "util/design_template.h" +#include "env/CommonSetting.h" class CGraphics; struct EditNode; From 5c5cdeff63e644fc63d3c0a5af9e126989e17d06 Mon Sep 17 00:00:00 2001 From: Ocelot <16898663+Ocelot1210@users.noreply.github.com> Date: Sun, 4 Apr 2021 22:06:16 +0900 Subject: [PATCH 0580/1024] =?UTF-8?q?SetInitialDir()=20=E3=81=AE=E5=BC=95?= =?UTF-8?q?=E6=95=B0=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/shell.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/sakura_core/util/shell.cpp b/sakura_core/util/shell.cpp index 20d310501b..0bd626770e 100644 --- a/sakura_core/util/shell.cpp +++ b/sakura_core/util/shell.cpp @@ -38,12 +38,9 @@ #include "env/CShareData.h" #include "env/DLLSHAREDATA.h" #include "extmodule/CHtmlHelp.h" -<<<<<<< HEAD -#include -======= #include "config/app_constants.h" #include "String_define.h" ->>>>>>> master +#include /*! @@ -52,11 +49,11 @@ @param [in] pDialog 設定対象のダイアログ @param [in] pszInitFolder 初期フォルダに設定したいパス */ -static void SetInitialDir( Microsoft::WRL::ComPtr pDialog, const WCHAR* pszInitFolder ) +static void SetInitialDir( IFileDialog* pDialog, std::wstring_view pszInitFolder ) { WCHAR szInitFolder[MAX_PATH]; - wcscpy_s( szInitFolder, _countof(szInitFolder), pszInitFolder ); + wcscpy_s( szInitFolder, _countof(szInitFolder), pszInitFolder.data() ); // フォルダの最後が半角かつ'\\'の場合は、取り除く "c:\\"等のルートは取り除かない CutLastYenFromDirectoryPath( szInitFolder ); @@ -96,7 +93,7 @@ BOOL SelectDir( HWND hWnd, const WCHAR* pszTitle, const WCHAR* pszInitFolder, WC } // 初期フォルダを設定 - SetInitialDir( pDialog, pszInitFolder ); + SetInitialDir( pDialog.Get(), pszInitFolder ); // タイトル文字列を設定 hres = pDialog->SetTitle( pszTitle ); From 45ab17790413bf1319f71058de326a5ee4baaa61 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Thu, 25 Mar 2021 16:41:02 +0900 Subject: [PATCH 0581/1024] =?UTF-8?q?=E3=82=BF=E3=82=B0=E3=82=B8=E3=83=A3?= =?UTF-8?q?=E3=83=B3=E3=83=97=E3=81=AE=E4=B8=80=E9=83=A8=E3=83=AA=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=AF=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0=E4=B8=8D?= =?UTF-8?q?=E5=85=B7=E5=90=88=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ・Grep結果のタグジャンプで「◆」と「■」がある形式でバッファオーバーフローが発生する不具合の修正 --- sakura_core/cmd/CViewCommander.h | 1 + sakura_core/cmd/CViewCommander_TagJump.cpp | 151 +++++++++++++++------ sakura_core/util/file.cpp | 13 ++ sakura_core/util/file.h | 1 + 4 files changed, 123 insertions(+), 43 deletions(-) diff --git a/sakura_core/cmd/CViewCommander.h b/sakura_core/cmd/CViewCommander.h index 65c90f2d37..44938e9f6e 100644 --- a/sakura_core/cmd/CViewCommander.h +++ b/sakura_core/cmd/CViewCommander.h @@ -295,6 +295,7 @@ class CViewCommander{ // To Here 2001.12.03 hor // Apr. 03, 2003 genta 引数追加 bool Command_TAGJUMP( bool bClose = false ); /* タグジャンプ機能 */ + bool Command_TagJumpNoMessage( bool bClose ); // タグジャンプ機能(メッセージ通知なし) void Command_TAGJUMPBACK( void ); /* タグジャンプバック機能 */ bool Command_TagJumpByTagsFileMsg(bool bMsg); //ダイレクトタグジャンプ(通知つき) bool Command_TagJumpByTagsFile(bool bClose); //ダイレクトタグジャンプ //@@@ 2003.04.13 MIK diff --git a/sakura_core/cmd/CViewCommander_TagJump.cpp b/sakura_core/cmd/CViewCommander_TagJump.cpp index 926c4896b0..28dd00e541 100644 --- a/sakura_core/cmd/CViewCommander_TagJump.cpp +++ b/sakura_core/cmd/CViewCommander_TagJump.cpp @@ -41,18 +41,20 @@ #include "config/system_constants.h" #include "String_define.h" -// "までを切り取る -static bool GetQuoteFilePath( const wchar_t* pLine, wchar_t* pFile, size_t size ){ +//! "までを切り取る +// sizeは切り出し文字列のNULL終端を含む長さ(wstring::length()+1の値) +static std::wstring GetQuoteFilePath(const wchar_t* pLine, size_t size) +{ const wchar_t* pFileEnd = wcschr( pLine, L'\"' ); - if( pFileEnd ){ - int nFileLen = pFileEnd - pLine; - if( 0 < nFileLen && nFileLen < (int)size ){ - wmemcpy( pFile, pLine, nFileLen ); - pFile[nFileLen] = L'\0'; - return true; - } + if (pFileEnd == nullptr) { + return L""; } - return false; + size_t nFileLen = pFileEnd - pLine; + if (0 == nFileLen || size <= nFileLen) { + return L""; + } + std::wstring str(pLine, nFileLen); + return str; } static bool IsFileExists2( const wchar_t* pszFile ) @@ -77,6 +79,15 @@ static bool IsFileExists2( const wchar_t* pszFile ) @date 2011.11.24 Moca Grepフォルダ毎表示対応 */ bool CViewCommander::Command_TAGJUMP( bool bClose ) +{ + bool ret = Command_TagJumpNoMessage(bClose); + if(ret == false){ + m_pCommanderView->SendStatusMessage(LS(STR_ERR_TAGJMP1)); //@@@ 2003.04.13 + } + return ret; +} + +bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) { // 2004.05.13 Moca 初期値を1ではなく元の位置を継承するように // 0以下は未指定扱い。(1開始) @@ -86,11 +97,8 @@ bool CViewCommander::Command_TAGJUMP( bool bClose ) nJumpToColumn = 0; //ファイル名バッファ - wchar_t szJumpToFile[1024]; - wchar_t szFile[_MAX_PATH] = {L'\0'}; size_t nBgn; size_t nPathLen; - wmemset( szJumpToFile, 0, _countof(szJumpToFile) ); /* カーソル位置変換 @@ -109,9 +117,22 @@ bool CViewCommander::Command_TAGJUMP( bool bClose ) CLogicInt nLineLen; const wchar_t* pLine = CDocLine::GetDocLineStrWithEOL_Safe(GetDocument()->m_cDocLineMgr.GetLine(ptXY.GetY2()), &nLineLen); if( NULL == pLine ){ - goto can_not_tagjump; + return false; } +#ifdef _DEBUG + assert(std::wstring(L"abc") == GetQuoteFilePath(L"abc\"def", 100)); + assert(std::wstring(L"") == GetQuoteFilePath(L"\"abcdef", 100)); + assert(std::wstring(L"a") == GetQuoteFilePath(L"a\"bcdef", 100)); + assert(std::wstring(L"ab") == GetQuoteFilePath(L"ab\"cdef", 100)); + assert(std::wstring(L"abcde") == GetQuoteFilePath(L"abcde\"f", 100)); + assert(std::wstring(L"abcdef") == GetQuoteFilePath(L"abcdef\"", 100)); + assert(std::wstring(L"") == GetQuoteFilePath(L"abcdefg", 100)); + assert(std::wstring(L"abc") == GetQuoteFilePath(L"abc\"def", 5)); + assert(std::wstring(L"abc") == GetQuoteFilePath(L"abc\"def", 4)); + assert(std::wstring(L"") == GetQuoteFilePath(L"abc\"def", 3)); +#endif + // ノーマル // C:\RootFolder\SubFolders\FileName.ext(5395,11): str @@ -131,6 +152,14 @@ bool CViewCommander::Command_TAGJUMP( bool bClose ) // ・SubFolders\FileName2.ext(5396,11): str // ・SubFolders\FileName3.ext(123,11): str + // ノーマル/フォルダ毎 + // ■"C:\RootFolder" + // ・FileName.cpp(5395,11): str + // ■"C:\RootFolder\SubFolders" + // ・FileName2.ext(5395,11): str + // ・FileName2.ext(5396,11): str + // ・FileName3.ext(123,11): str + // ファイル毎(WZ風) // ■"C:\RootFolder\FileName.ext" // ・( 5395,11 ): str @@ -162,8 +191,41 @@ bool CViewCommander::Command_TAGJUMP( bool bClose ) // ◆"FileName3.ext" // ・( 123,12 ): str + // ファイル毎/フォルダ毎 + // ■"C:\RootFolder" + // ◆"FileName.ext" + // ・( 5395,11 ): str + // ■"C:\RootFolder\SubFolders" + // ◆"FileName2.ext" + // ・( 5395,11 ): str + // ・( 5396,11 ): str + + // Grep結果のタグジャンプ検索 // ・→◆→■→◎ の順に検索してパスを結合する + + // 自動選択を選ぶとエンコード名表示 + // C:\RootFolder\SubFolders\FileName.ext(150,6) [UTF-8]: str + // ・SubFolders\FileName.ext(150,6) [UTF-8]: str + // ・FileName.ext(150,6) [UTF-8]: str + + // ■"C:\RootFolder\SubFolders\FileName.ext" [UTF-8] + // ・( 150,6 ): str + + // ◎"C:\RootFolder" + // ■"FileName.ext" [UTF-8] + // ・( 5395,11 ): str + // ■"SubFolders\FileName2.ext" [UTF-8] + // ・( 5395,11 ): str + + // ■"C:\RootFolder\SubFolders\" + // ◆"FileName.ext" [UTF-8] + // ・( 150,60 ): str + + std::wstring strJumpToFile; + std::wstring strFile; + constexpr int MAX_TAG_PATH = MAX_PATH; + do{ enum TagListSeachMode{ TAGLIST_FILEPATH, @@ -173,22 +235,22 @@ bool CViewCommander::Command_TAGJUMP( bool bClose ) if( 0 == wmemcmp( pLine, L"■\"", 2 ) ){ /* WZ風のタグリストか */ if( IsFilePath( &pLine[2], &nBgn, &nPathLen ) && !_IS_REL_PATH( &pLine[2] ) ){ - wmemcpy( szJumpToFile, &pLine[2 + nBgn], nPathLen ); + strJumpToFile.assign(&pLine[2 + nBgn], nPathLen); GetLineColumn( &pLine[2 + nPathLen], &nJumpToLine, &nJumpToColumn ); break; - }else if( !GetQuoteFilePath( &pLine[2], szFile, _countof(szFile) ) ){ + }else if (strFile = GetQuoteFilePath(&pLine[2], MAX_TAG_PATH); strFile.empty()) { break; } searchMode = TAGLIST_ROOT; }else if( 0 == wmemcmp( pLine, L"◆\"", 2 ) ){ - if( !GetQuoteFilePath( &pLine[2], szFile, _countof(szFile) ) ){ + if (strFile = GetQuoteFilePath(&pLine[2], MAX_TAG_PATH); strFile.empty()) { break; } searchMode = TAGLIST_SUBPATH; }else if( 0 == wmemcmp( pLine, L"・", 1 ) ){ if( pLine[1] == L'"' ){ // ・"FileName.ext" - if( !GetQuoteFilePath( &pLine[2], szFile, _countof(szFile) ) ){ + if (strFile = GetQuoteFilePath(&pLine[2], MAX_TAG_PATH); strFile.empty()) { break; } searchMode = TAGLIST_SUBPATH; @@ -224,9 +286,8 @@ bool CViewCommander::Command_TAGJUMP( bool bClose ) for( ; 1 < fileEnd && (L'0' <= pLine[fileEnd] && pLine[fileEnd] <= L'9'); fileEnd-- ){} if( 1 < fileEnd && (L',' == pLine[fileEnd]) ){ fileEnd--; } for( ; 1 < fileEnd && (L'0' <= pLine[fileEnd] && pLine[fileEnd] <= L'9'); fileEnd-- ){} - if( 1 < fileEnd && L'(' == pLine[fileEnd] && fileEnd - 1 < (int)_countof(szFile) ){ - wmemcpy( szFile, pLine + 1, fileEnd - 1 ); - szFile[fileEnd - 1] = L'\0'; + if( 1 < fileEnd && L'(' == pLine[fileEnd] && fileEnd - 1 < MAX_TAG_PATH ){ + strFile.assign(pLine + 1, fileEnd - 1); GetLineColumn( &pLine[fileEnd + 1], &nJumpToLine, &nJumpToColumn ); searchMode = TAGLIST_SUBPATH; }else{ @@ -251,7 +312,7 @@ bool CViewCommander::Command_TAGJUMP( bool bClose ) continue; } // フォルダ毎:ファイル名 - if( GetQuoteFilePath(&pLine[2], szFile, _countof(szFile)) ){ + if (strFile = GetQuoteFilePath(&pLine[2], MAX_TAG_PATH); strFile.empty() == false ){ searchMode = TAGLIST_SUBPATH; continue; } @@ -268,31 +329,37 @@ bool CViewCommander::Command_TAGJUMP( bool bClose ) } // ファイル毎(WZ風):フルパス if( IsFilePath( &pLine[2], &nBgn, &nPathLen ) && !_IS_REL_PATH( &pLine[2] ) ){ - wmemcpy( szJumpToFile, &pLine[2 + nBgn], nPathLen ); + strJumpToFile.assign(&pLine[2 + nBgn], nPathLen); break; } // 相対フォルダorファイル名 - wchar_t szPath[_MAX_PATH]; - if( GetQuoteFilePath( &pLine[2], szPath, _countof(szPath) ) ){ - if( szFile[0] ){ - AddLastYenFromDirectoryPath( szPath ); + if (std::wstring strPath = GetQuoteFilePath(&pLine[2], MAX_TAG_PATH); strFile.empty() == false) { + if (strFile.empty() == false) { + strPath = AddLastYenPath(strPath); } - wcscat( szPath, szFile ); - if( IsFileExists2( szPath ) ){ - wcscpy( szJumpToFile, szPath ); + strPath.append(strFile); + if( MAX_TAG_PATH <= strPath.size() ){ + break; + } + if( IsFileExists2(strFile.c_str()) ){ + strJumpToFile = strFile; break; } // 相対パスだった→◎”を探す - wcscpy( szFile, szPath ); + strFile = strPath; searchMode = TAGLIST_ROOT; continue; } break; }else if( 3 <= nLineLen && 0 == wmemcmp( pLine, L"◎\"", 2 ) ){ - if( GetQuoteFilePath( &pLine[2], szJumpToFile, _countof(szJumpToFile) ) ){ - AddLastYenFromDirectoryPath( szJumpToFile ); - wcscat( szJumpToFile, szFile ); - if( IsFileExists2( szJumpToFile ) ){ + if (std::wstring strPath = GetQuoteFilePath(&pLine[2], MAX_TAG_PATH); strFile.empty() == false) { + strPath = AddLastYenPath(strPath); + strPath.append(strFile); + if (MAX_TAG_PATH <= strPath.size()) { + break; + } + if (IsFileExists2(strPath.c_str())) { + strJumpToFile = strPath; break; } } @@ -304,10 +371,10 @@ bool CViewCommander::Command_TAGJUMP( bool bClose ) } }while(0); - if( szJumpToFile[0] == L'\0' ){ + if (strJumpToFile.empty()) { pLine = GetDocument()->m_cDocLineMgr.GetLine(ptXYOrg.GetY2())->GetDocLineStrWithEOL(&nLineLen); if( NULL == pLine ){ - goto can_not_tagjump; + return false; } //@@@ 2001.12.31 YAZAKI const wchar_t *p = pLine; @@ -324,7 +391,7 @@ bool CViewCommander::Command_TAGJUMP( bool bClose ) // Check Path if( IsFilePath( p, &nBgn, &nPathLen ) ){ - wmemcpy( szJumpToFile, &p[nBgn], nPathLen ); + strJumpToFile.assign(&p[nBgn], nPathLen); GetLineColumn( &p[nBgn + nPathLen], &nJumpToLine, &nJumpToColumn ); break; } @@ -337,7 +404,7 @@ bool CViewCommander::Command_TAGJUMP( bool bClose ) } // 2011.11.29 Grep形式で失敗した後もTagsを検索する - if( szJumpToFile[0] == L'\0' ){ + if (strJumpToFile.empty()) { if( Command_TagJumpByTagsFile(bClose) ){ //@@@ 2003.04.13 return true; } @@ -345,14 +412,12 @@ bool CViewCommander::Command_TAGJUMP( bool bClose ) } // Apr. 21, 2003 genta bClose追加 - if( szJumpToFile[0] ){ - if( m_pCommanderView->TagJumpSub( szJumpToFile, CMyPoint(nJumpToColumn, nJumpToLine), bClose ) ){ //@@@ 2003.04.13 + if (strJumpToFile.empty() == false) { + if( m_pCommanderView->TagJumpSub(strJumpToFile.c_str(), CMyPoint(nJumpToColumn, nJumpToLine), bClose ) ){ //@@@ 2003.04.13 return true; } } -can_not_tagjump:; - m_pCommanderView->SendStatusMessage(LS(STR_ERR_TAGJMP1)); //@@@ 2003.04.13 return false; } diff --git a/sakura_core/util/file.cpp b/sakura_core/util/file.cpp index 568dbba7b9..22eee51012 100644 --- a/sakura_core/util/file.cpp +++ b/sakura_core/util/file.cpp @@ -298,6 +298,19 @@ void AddLastYenFromDirectoryPath( WCHAR* pszFolder ) return; } +//! パスらしき文字列の末尾に'\\'または'/'がなかったら'\\'を付加する +std::wstring AddLastYenPath(std::wstring_view path) +{ + std::wstring ret{ path }; + if (0 == ret.size()) { + return ret; + } + if (auto c = ret.back(); !(c == L'\\' || c == L'/')) { + ret.append(L"\\"); + } + return ret; +} + /* ファイルのフルパスを、フォルダとファイル名に分割 */ /* [c:\work\test\aaa.txt] → [c:\work\test] + [aaa.txt] */ void SplitPath_FolderAndFile( const WCHAR* pszFilePath, WCHAR* pszFolder, WCHAR* pszFile ) diff --git a/sakura_core/util/file.h b/sakura_core/util/file.h index adbefb4285..42a22c0fd6 100644 --- a/sakura_core/util/file.h +++ b/sakura_core/util/file.h @@ -55,6 +55,7 @@ FILE *_wfopen_absini(LPCWSTR fname, LPCWSTR mode, BOOL bOrExedir = TRUE); // 200 //パス文字列処理 void CutLastYenFromDirectoryPath( WCHAR* pszFolder ); /* フォルダの最後が半角かつ'\\'の場合は、取り除く "c:\\"等のルートは取り除かない*/ void AddLastYenFromDirectoryPath( WCHAR* pszFolder ); /* フォルダの最後が半角かつ'\\'でない場合は、付加する */ +std::wstring AddLastYenPath(std::wstring_view path); void SplitPath_FolderAndFile( const WCHAR* pszFilePath, WCHAR* pszFolder, WCHAR* pszFile ); /* ファイルのフルパスを、フォルダとファイル名に分割 */ void Concat_FolderAndFile( const WCHAR* pszDir, const WCHAR* pszTitle, WCHAR* pszPath );/* フォルダ、ファイル名から、結合したパスを作成 */ BOOL GetLongFileName( const WCHAR* pszFilePathSrc, WCHAR* pszFilePathDes ); /* ロングファイル名を取得する */ From afd1649d8677fa07ac22b29fcc9744cf5c04d6a0 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sat, 27 Mar 2021 00:15:12 +0900 Subject: [PATCH 0582/1024] =?UTF-8?q?GetQuoteFilePath=E3=81=AE=E5=8D=98?= =?UTF-8?q?=E4=BD=93=E3=83=86=E3=82=B9=E3=83=88=E3=82=82=E3=81=A9=E3=81=8D?= =?UTF-8?q?=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/cmd/CViewCommander_TagJump.cpp | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/sakura_core/cmd/CViewCommander_TagJump.cpp b/sakura_core/cmd/CViewCommander_TagJump.cpp index 28dd00e541..11a3f9947e 100644 --- a/sakura_core/cmd/CViewCommander_TagJump.cpp +++ b/sakura_core/cmd/CViewCommander_TagJump.cpp @@ -120,19 +120,6 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) return false; } -#ifdef _DEBUG - assert(std::wstring(L"abc") == GetQuoteFilePath(L"abc\"def", 100)); - assert(std::wstring(L"") == GetQuoteFilePath(L"\"abcdef", 100)); - assert(std::wstring(L"a") == GetQuoteFilePath(L"a\"bcdef", 100)); - assert(std::wstring(L"ab") == GetQuoteFilePath(L"ab\"cdef", 100)); - assert(std::wstring(L"abcde") == GetQuoteFilePath(L"abcde\"f", 100)); - assert(std::wstring(L"abcdef") == GetQuoteFilePath(L"abcdef\"", 100)); - assert(std::wstring(L"") == GetQuoteFilePath(L"abcdefg", 100)); - assert(std::wstring(L"abc") == GetQuoteFilePath(L"abc\"def", 5)); - assert(std::wstring(L"abc") == GetQuoteFilePath(L"abc\"def", 4)); - assert(std::wstring(L"") == GetQuoteFilePath(L"abc\"def", 3)); -#endif - // ノーマル // C:\RootFolder\SubFolders\FileName.ext(5395,11): str From 681c0f51c91b204509346dfaa5e015720fa0e615 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sat, 27 Mar 2021 22:50:59 +0900 Subject: [PATCH 0583/1024] =?UTF-8?q?SonarCloud=20=E6=8C=87=E6=91=98?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/cmd/CViewCommander_TagJump.cpp | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/sakura_core/cmd/CViewCommander_TagJump.cpp b/sakura_core/cmd/CViewCommander_TagJump.cpp index 11a3f9947e..ab5345ad8c 100644 --- a/sakura_core/cmd/CViewCommander_TagJump.cpp +++ b/sakura_core/cmd/CViewCommander_TagJump.cpp @@ -391,18 +391,15 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) } // 2011.11.29 Grep形式で失敗した後もTagsを検索する - if (strJumpToFile.empty()) { - if( Command_TagJumpByTagsFile(bClose) ){ //@@@ 2003.04.13 - return true; - } + if (strJumpToFile.empty() && Command_TagJumpByTagsFile(bClose) ){ //@@@ 2003.04.13 + return true; // From Here Aug. 27, 2001 genta } // Apr. 21, 2003 genta bClose追加 - if (strJumpToFile.empty() == false) { - if( m_pCommanderView->TagJumpSub(strJumpToFile.c_str(), CMyPoint(nJumpToColumn, nJumpToLine), bClose ) ){ //@@@ 2003.04.13 - return true; - } + if (strJumpToFile.empty() == false && + m_pCommanderView->TagJumpSub(strJumpToFile.c_str(), CMyPoint(nJumpToColumn, nJumpToLine), bClose ) ){ //@@@ 2003.04.13 + return true; } return false; From 62af8cf087dfff9dea746d8b89a1b2c5d9abef91 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Sat, 27 Mar 2021 23:23:07 +0900 Subject: [PATCH 0584/1024] =?UTF-8?q?=E3=82=BF=E3=82=B0=E3=82=B8=E3=83=A3?= =?UTF-8?q?=E3=83=B3=E3=83=97=E3=81=AE=E4=BF=AE=E6=AD=A3=E3=81=A7=E5=A4=89?= =?UTF-8?q?=E6=95=B0=E3=81=AE=E5=8F=96=E3=82=8A=E9=81=95=E3=81=84=E3=81=AB?= =?UTF-8?q?=E3=82=88=E3=82=8A=E3=82=BF=E3=82=B0=E3=82=B8=E3=83=A3=E3=83=B3?= =?UTF-8?q?=E3=83=97=E3=81=A7=E3=81=8D=E3=81=AA=E3=81=8F=E3=81=AA=E3=81=A6?= =?UTF-8?q?=E3=81=84=E3=81=9F=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/cmd/CViewCommander_TagJump.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sakura_core/cmd/CViewCommander_TagJump.cpp b/sakura_core/cmd/CViewCommander_TagJump.cpp index ab5345ad8c..f4f54018f3 100644 --- a/sakura_core/cmd/CViewCommander_TagJump.cpp +++ b/sakura_core/cmd/CViewCommander_TagJump.cpp @@ -320,7 +320,7 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) break; } // 相対フォルダorファイル名 - if (std::wstring strPath = GetQuoteFilePath(&pLine[2], MAX_TAG_PATH); strFile.empty() == false) { + if (std::wstring strPath = GetQuoteFilePath(&pLine[2], MAX_TAG_PATH); strPath.empty() == false) { if (strFile.empty() == false) { strPath = AddLastYenPath(strPath); } @@ -328,8 +328,8 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) if( MAX_TAG_PATH <= strPath.size() ){ break; } - if( IsFileExists2(strFile.c_str()) ){ - strJumpToFile = strFile; + if( IsFileExists2(strPath.c_str()) ){ + strJumpToFile = strPath; break; } // 相対パスだった→◎”を探す @@ -339,7 +339,7 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) } break; }else if( 3 <= nLineLen && 0 == wmemcmp( pLine, L"◎\"", 2 ) ){ - if (std::wstring strPath = GetQuoteFilePath(&pLine[2], MAX_TAG_PATH); strFile.empty() == false) { + if (std::wstring strPath = GetQuoteFilePath(&pLine[2], MAX_TAG_PATH); strPath.empty() == false) { strPath = AddLastYenPath(strPath); strPath.append(strFile); if (MAX_TAG_PATH <= strPath.size()) { From feaa5524f2b17d3c8f7365b70d06c1762672d534 Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Mon, 5 Apr 2021 00:15:56 +0900 Subject: [PATCH 0585/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/cmd/CViewCommander_TagJump.cpp | 25 ++++++++++++---------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/sakura_core/cmd/CViewCommander_TagJump.cpp b/sakura_core/cmd/CViewCommander_TagJump.cpp index f4f54018f3..78fb1921a5 100644 --- a/sakura_core/cmd/CViewCommander_TagJump.cpp +++ b/sakura_core/cmd/CViewCommander_TagJump.cpp @@ -43,18 +43,19 @@ //! "までを切り取る // sizeは切り出し文字列のNULL終端を含む長さ(wstring::length()+1の値) -static std::wstring GetQuoteFilePath(const wchar_t* pLine, size_t size) +static bool GetQuoteFilePath(const wchar_t* pLine, std::wstring& str, size_t size) { const wchar_t* pFileEnd = wcschr( pLine, L'\"' ); + str = L""; if (pFileEnd == nullptr) { - return L""; + return false; } size_t nFileLen = pFileEnd - pLine; if (0 == nFileLen || size <= nFileLen) { - return L""; + return false; } - std::wstring str(pLine, nFileLen); - return str; + str.assign(pLine, nFileLen); + return !str.empty(); } static bool IsFileExists2( const wchar_t* pszFile ) @@ -225,19 +226,19 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) strJumpToFile.assign(&pLine[2 + nBgn], nPathLen); GetLineColumn( &pLine[2 + nPathLen], &nJumpToLine, &nJumpToColumn ); break; - }else if (strFile = GetQuoteFilePath(&pLine[2], MAX_TAG_PATH); strFile.empty()) { + }else if (!GetQuoteFilePath(&pLine[2], strFile, MAX_TAG_PATH)) { break; } searchMode = TAGLIST_ROOT; }else if( 0 == wmemcmp( pLine, L"◆\"", 2 ) ){ - if (strFile = GetQuoteFilePath(&pLine[2], MAX_TAG_PATH); strFile.empty()) { + if (!GetQuoteFilePath(&pLine[2], strFile, MAX_TAG_PATH)) { break; } searchMode = TAGLIST_SUBPATH; }else if( 0 == wmemcmp( pLine, L"・", 1 ) ){ if( pLine[1] == L'"' ){ // ・"FileName.ext" - if (strFile = GetQuoteFilePath(&pLine[2], MAX_TAG_PATH); strFile.empty()) { + if (!GetQuoteFilePath(&pLine[2], strFile, MAX_TAG_PATH)) { break; } searchMode = TAGLIST_SUBPATH; @@ -299,7 +300,7 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) continue; } // フォルダ毎:ファイル名 - if (strFile = GetQuoteFilePath(&pLine[2], MAX_TAG_PATH); strFile.empty() == false ){ + if (GetQuoteFilePath(&pLine[2], strFile, MAX_TAG_PATH)) { searchMode = TAGLIST_SUBPATH; continue; } @@ -320,7 +321,8 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) break; } // 相対フォルダorファイル名 - if (std::wstring strPath = GetQuoteFilePath(&pLine[2], MAX_TAG_PATH); strPath.empty() == false) { + std::wstring strPath; + if (GetQuoteFilePath(&pLine[2], strPath, MAX_TAG_PATH)) { if (strFile.empty() == false) { strPath = AddLastYenPath(strPath); } @@ -339,7 +341,8 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) } break; }else if( 3 <= nLineLen && 0 == wmemcmp( pLine, L"◎\"", 2 ) ){ - if (std::wstring strPath = GetQuoteFilePath(&pLine[2], MAX_TAG_PATH); strPath.empty() == false) { + std::wstring strPath; + if (GetQuoteFilePath(&pLine[2], strPath, MAX_TAG_PATH)) { strPath = AddLastYenPath(strPath); strPath.append(strFile); if (MAX_TAG_PATH <= strPath.size()) { From ad890c47c8c84b92ae78076a0013d36f483aca53 Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Tue, 6 Apr 2021 22:46:38 +0900 Subject: [PATCH 0586/1024] =?UTF-8?q?=E3=82=AB=E3=83=BC=E3=82=BD=E3=83=AB?= =?UTF-8?q?=E8=A1=8C=E3=82=A2=E3=83=B3=E3=83=80=E3=83=BC=E3=83=A9=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E6=8F=8F=E7=94=BB=E3=82=92=E8=A1=8C=E6=8F=8F=E7=94=BB?= =?UTF-8?q?=E3=83=AB=E3=83=BC=E3=83=97=E5=86=85=E3=81=A7=E8=A1=8C=E3=81=86?= =?UTF-8?q?=E3=81=8B=E3=81=A9=E3=81=86=E3=81=8B=E3=81=AE=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CEditView_Paint.cpp | 39 ++++++++++++++++------------ 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/sakura_core/view/CEditView_Paint.cpp b/sakura_core/view/CEditView_Paint.cpp index f3561db0fd..f8c08fb288 100644 --- a/sakura_core/view/CEditView_Paint.cpp +++ b/sakura_core/view/CEditView_Paint.cpp @@ -762,6 +762,16 @@ void CEditView::OnPaint2( HDC _hdc, PAINTSTRUCT *pPs, BOOL bDrawFromComptibleBmp // 全部の行を描画 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // + /* アクティブペインは、アンダーライン描画 */ + const bool bDrawUnderLine = m_pcEditWnd->GetActivePane() == m_nMyIndex; + // カーソル行アンダーライン描画を行描画ループ内で行うかどうか + const bool bDrawUnderLineWithoutDelay = + bDrawUnderLine + && !bUseMemoryDC // メモリDCを利用しない場合はアンダーライン描画を行描画の直後に行う事でちらつきを抑える + && !m_pTypeData->m_ColorInfoArr[COLORIDX_CURSORVLINE].m_bDisp // カーソル行より下にあるカーソル位置縦線が消えてしまうので、非表示設定でのみ行う + && m_pTypeData->m_nLineSpace > 0 // 行間を0以下にすると、カーソル行アンダーラインの位置が一つ下の行に含まれるようになるため、レンダリングの対象行が変わるので、行間が0より大きい場合のみ行う + ; + //必要な行を描画する // 2009.03.26 ryoji 行番号のみ描画を通常の行描画と分離(効率化) if(pPs->rcPaint.right <= GetTextArea().GetAreaLeft()){ while(sPos.GetLayoutLineRef() <= nLayoutLineTo) @@ -789,8 +799,9 @@ void CEditView::OnPaint2( HDC _hdc, PAINTSTRUCT *pPs, BOOL bDrawFromComptibleBmp //描画X位置リセット sPos.ResetDrawCol(); - auto nLayoutLine = sPos.GetLayoutLineRef(); - + //DrawLogicLineを呼ぶと値が変わるので呼ぶ前に取得 + auto nCurrLine = sPos.GetLayoutLineRef(); + //1行描画 bool bDispResult = DrawLogicLine( &sInfo, @@ -815,13 +826,8 @@ void CEditView::OnPaint2( HDC _hdc, PAINTSTRUCT *pPs, BOOL bDrawFromComptibleBmp DeleteObject(hdcBgImg); } } - // メモリDCを利用しない場合はアンダーライン描画を行描画の直後に行う事でちらつきを抑える - if (!bUseMemoryDC && nLayoutLine == caretY) - { - if (m_pcEditWnd->GetActivePane() == m_nMyIndex) { - /* アクティブペインは、アンダーライン描画 */ - GetCaret().m_cUnderLine.CaretUnderLineON(true, false); - } + if (bDrawUnderLineWithoutDelay && nCurrLine == caretY) { + GetCaret().m_cUnderLine.CaretUnderLineON(true, false); } } } @@ -855,15 +861,16 @@ void CEditView::OnPaint2( HDC _hdc, PAINTSTRUCT *pPs, BOOL bDrawFromComptibleBmp pPs->rcPaint.top, SRCCOPY ); - // From Here 2007.09.09 Moca 互換BMPによる画面バッファ - // アンダーライン描画をメモリDCからのコピー前処理から後に移動 - if ( m_pcEditWnd->GetActivePane() == m_nMyIndex ){ - /* アクティブペインは、アンダーライン描画 */ - GetCaret().m_cUnderLine.CaretUnderLineON( true, false ); - } - // To Here 2007.09.09 Moca } + // From Here 2007.09.09 Moca 互換BMPによる画面バッファ + // アンダーライン描画をメモリDCからのコピー前処理から後に移動 + if ( bDrawUnderLine && !bDrawUnderLineWithoutDelay ){ + /* アクティブペインは、アンダーライン描画 */ + GetCaret().m_cUnderLine.CaretUnderLineON( true, false ); + } + // To Here 2007.09.09 Moca + /* 03/02/18 対括弧の強調表示(描画) ai */ DrawBracketPair( true ); From 1b6628eaa3f19dc47f41ecb457822608bc6ab063 Mon Sep 17 00:00:00 2001 From: Ocelot <16898663+Ocelot1210@users.noreply.github.com> Date: Wed, 7 Apr 2021 21:34:48 +0900 Subject: [PATCH 0587/1024] =?UTF-8?q?=E6=96=87=E5=AD=97=E5=88=97=E9=95=B7?= =?UTF-8?q?=E3=81=8C=20MAX=5FPATH=20=E3=82=92=E8=B6=85=E3=81=88=E3=82=8B?= =?UTF-8?q?=E5=A0=B4=E5=90=88=E3=80=81=E5=AE=9F=E8=A1=8C=E6=99=82=E3=82=A8?= =?UTF-8?q?=E3=83=A9=E3=83=BC=E3=81=8C=E7=99=BA=E7=94=9F=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=81=AE=E3=82=92=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/shell.cpp | 29 +++++------------------------ 1 file changed, 5 insertions(+), 24 deletions(-) diff --git a/sakura_core/util/shell.cpp b/sakura_core/util/shell.cpp index 0bd626770e..9dc609c83d 100644 --- a/sakura_core/util/shell.cpp +++ b/sakura_core/util/shell.cpp @@ -43,29 +43,6 @@ #include -/*! - @brief IFileDialog の初期フォルダを設定する - - @param [in] pDialog 設定対象のダイアログ - @param [in] pszInitFolder 初期フォルダに設定したいパス -*/ -static void SetInitialDir( IFileDialog* pDialog, std::wstring_view pszInitFolder ) -{ - - WCHAR szInitFolder[MAX_PATH]; - wcscpy_s( szInitFolder, _countof(szInitFolder), pszInitFolder.data() ); - - // フォルダの最後が半角かつ'\\'の場合は、取り除く "c:\\"等のルートは取り除かない - CutLastYenFromDirectoryPath( szInitFolder ); - - // 初期フォルダを設定 - Microsoft::WRL::ComPtr psiFolder; - HRESULT hres = SHCreateItemFromParsingName( szInitFolder, nullptr, IID_PPV_ARGS(&psiFolder) ); - if ( SUCCEEDED(hres) ) { - pDialog->SetFolder( psiFolder.Get() ); - } -} - /* フォルダ選択ダイアログ */ BOOL SelectDir( HWND hWnd, const WCHAR* pszTitle, const WCHAR* pszInitFolder, WCHAR* strFolderName, size_t nMaxCount ) { @@ -93,7 +70,11 @@ BOOL SelectDir( HWND hWnd, const WCHAR* pszTitle, const WCHAR* pszInitFolder, WC } // 初期フォルダを設定 - SetInitialDir( pDialog.Get(), pszInitFolder ); + ComPtr psiFolder; + hres = SHCreateItemFromParsingName( pszInitFolder, nullptr, IID_PPV_ARGS(&psiFolder) ); + if ( SUCCEEDED(hres) ) { + pDialog->SetFolder( psiFolder.Get() ); + } // タイトル文字列を設定 hres = pDialog->SetTitle( pszTitle ); From 54bc397b318a301a2780decde2288cf66e2c230a Mon Sep 17 00:00:00 2001 From: Ocelot <16898663+Ocelot1210@users.noreply.github.com> Date: Thu, 8 Apr 2021 21:04:12 +0900 Subject: [PATCH 0588/1024] =?UTF-8?q?=E6=A0=BC=E7=B4=8D=E5=85=88=E3=81=AE?= =?UTF-8?q?=E3=83=90=E3=83=83=E3=83=95=E3=82=A1=E3=82=B5=E3=82=A4=E3=82=BA?= =?UTF-8?q?=E3=81=8C=E8=B6=B3=E3=82=8A=E3=81=AA=E3=81=84=E5=A0=B4=E5=90=88?= =?UTF-8?q?=E3=80=81=E5=AE=9F=E8=A1=8C=E6=99=82=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=81=8C=E7=99=BA=E7=94=9F=E3=81=99=E3=82=8B=E3=81=AE=E3=82=92?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/shell.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sakura_core/util/shell.cpp b/sakura_core/util/shell.cpp index 9dc609c83d..d888a8a5f7 100644 --- a/sakura_core/util/shell.cpp +++ b/sakura_core/util/shell.cpp @@ -101,6 +101,11 @@ BOOL SelectDir( HWND hWnd, const WCHAR* pszTitle, const WCHAR* pszInitFolder, WC return FALSE; } + if ( nMaxCount < wcslen(pszResult) ) { + CoTaskMemFree( pszResult ); + return FALSE; + } + wcscpy_s( strFolderName, nMaxCount, pszResult ); CoTaskMemFree( pszResult ); From 82c0bcba81377cf463e1b79155f401ab17fc77ce Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 7 Apr 2021 23:49:58 +0900 Subject: [PATCH 0589/1024] =?UTF-8?q?CMemory=E3=81=AE=E3=83=AA=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=AF=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0(x64?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C=E6=BA=96=E5=82=99)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/_os/CClipboard.cpp | 2 +- sakura_core/charset/CCodeBase.cpp | 2 +- sakura_core/charset/CCodePage.cpp | 4 +- sakura_core/charset/CUnicode.cpp | 13 +- sakura_core/convert/CDecode_UuDecode.cpp | 4 +- sakura_core/mem/CMemory.cpp | 382 ++++++++--------------- sakura_core/mem/CMemory.h | 97 +++--- sakura_core/mem/CNativeW.cpp | 2 +- tests/unittests/test-ccodebase.cpp | 14 +- tests/unittests/test-cdecode.cpp | 8 +- tests/unittests/test-cmemory.cpp | 89 ++++++ 11 files changed, 286 insertions(+), 331 deletions(-) diff --git a/sakura_core/_os/CClipboard.cpp b/sakura_core/_os/CClipboard.cpp index 577c60ed43..4f98e23e2c 100644 --- a/sakura_core/_os/CClipboard.cpp +++ b/sakura_core/_os/CClipboard.cpp @@ -337,7 +337,7 @@ bool CClipboard::GetText(CNativeW* cmemBuf, bool* pbColumnSelect, bool* pbLineSe CMemory cmemSjis( szData, GlobalSize(hText) ); CNativeW cmemUni; CShiftJis::SJISToUnicode(cmemSjis, &cmemUni); - cmemSjis.Clean(); + cmemSjis.Reset(); // '\0'までを取得 cmemUni._SetStringLength(wcslen(cmemUni.GetStringPtr())); cmemUni.swap(*cmemBuf); diff --git a/sakura_core/charset/CCodeBase.cpp b/sakura_core/charset/CCodeBase.cpp index c5c67dea3b..19b85a190d 100644 --- a/sakura_core/charset/CCodeBase.cpp +++ b/sakura_core/charset/CCodeBase.cpp @@ -30,7 +30,7 @@ #include "CEol.h" #include "env/CommonSetting.h" -void CCodeBase::GetBom(CMemory* pcmemBom){ pcmemBom->Clear(); } //!< BOMデータ取得 +void CCodeBase::GetBom(CMemory* pcmemBom){ pcmemBom->Reset(); } //!< BOMデータ取得 // 表示用16表示 UNICODE → Hex 変換 2008/6/9 Uchi EConvertResult CCodeBase::UnicodeToHex(const wchar_t* cSrc, const int iSLen, WCHAR* pDst, const CommonSetting_Statusbar* psStatusbar) diff --git a/sakura_core/charset/CCodePage.cpp b/sakura_core/charset/CCodePage.cpp index 19a94f878e..5e59dbf8ea 100644 --- a/sakura_core/charset/CCodePage.cpp +++ b/sakura_core/charset/CCodePage.cpp @@ -225,7 +225,7 @@ void CCodePage::GetEol(CMemory* pcmemEol, EEolType eEolType) CodeToUnicode(*pcmemEol, &temp2); // 双方向変換ができる場合だけ設定 if( !CNativeW::IsEqual(temp, temp2) ){ - pcmemEol->Clear(); + pcmemEol->Reset(); } } @@ -237,7 +237,7 @@ void CCodePage::GetBom(CMemory* pcmemBom) CNativeW temp2; CodeToUnicode(*pcmemBom, &temp2); if( !CNativeW::IsEqual(temp, temp2) ){ - pcmemBom->Clear(); + pcmemBom->Reset(); } } diff --git a/sakura_core/charset/CUnicode.cpp b/sakura_core/charset/CUnicode.cpp index d72f522fdf..99fa8ad602 100644 --- a/sakura_core/charset/CUnicode.cpp +++ b/sakura_core/charset/CUnicode.cpp @@ -57,11 +57,9 @@ EConvertResult CUnicode::_UnicodeToUnicode_in( const CMemory& cSrc, CNativeW* pD if( bBigEndian ){ if( &cSrc != pDstMem2 && !bCopy ){ - // コピーしつつ UnicodeBe -> Unicode - pDstMem2->SwabHLByte(cSrc); - }else{ - pDstMem2->SwapHLByte(); // UnicodeBe -> Unicode + pDstMem2->SetRawDataHoldBuffer( cSrc ); } + pDstMem2->SwapHLByte(); // UnicodeBe -> Unicode }else if( !bCopy ){ pDstMem2->SetRawDataHoldBuffer(pSrc, nSrcLen); } @@ -71,11 +69,10 @@ EConvertResult CUnicode::_UnicodeToUnicode_in( const CMemory& cSrc, CNativeW* pD EConvertResult CUnicode::_UnicodeToUnicode_out( const CNativeW& cSrc, CMemory* pDstMem, const bool bBigEndian ) { if( bBigEndian == true ){ - if( cSrc._GetMemory() == pDstMem ){ - pDstMem->SwapHLByte(); // Unicode -> UnicodeBe - }else{ - pDstMem->SwabHLByte(*(cSrc._GetMemory())); + if( cSrc._GetMemory() != pDstMem ){ + pDstMem->SetRawDataHoldBuffer( *(cSrc._GetMemory()) ); } + pDstMem->SwapHLByte(); // Unicode -> UnicodeBe }else{ if( cSrc._GetMemory() != pDstMem ){ pDstMem->SetRawDataHoldBuffer(*(cSrc._GetMemory())); diff --git a/sakura_core/convert/CDecode_UuDecode.cpp b/sakura_core/convert/CDecode_UuDecode.cpp index 1406ec8c3e..c4b902f5a7 100644 --- a/sakura_core/convert/CDecode_UuDecode.cpp +++ b/sakura_core/convert/CDecode_UuDecode.cpp @@ -40,7 +40,7 @@ bool CDecode_UuDecode::DoDecode( const CNativeW& pcSrc, CMemory* pcDst ) CEol ceol; bool bsuccess = false; - pcDst->Clear(); + pcDst->Reset(); psrc = pcSrc.GetStringPtr(); nsrclen = pcSrc.GetStringLength(); @@ -49,7 +49,7 @@ bool CDecode_UuDecode::DoDecode( const CNativeW& pcSrc, CMemory* pcDst ) return false; } pcDst->AllocBuffer( (nsrclen / 4) * 3 + 10 ); - pw_base = pw = static_cast( pcDst->GetRawPtr() ); + pw_base = pw = reinterpret_cast( pcDst->GetRawPtr() ); // 先頭の改行・空白文字をスキップ for( ncuridx = 0; ncuridx < nsrclen; ++ncuridx ){ diff --git a/sakura_core/mem/CMemory.cpp b/sakura_core/mem/CMemory.cpp index 49a587b4ac..4642e218e6 100644 --- a/sakura_core/mem/CMemory.cpp +++ b/sakura_core/mem/CMemory.cpp @@ -37,43 +37,36 @@ #include "StdAfx.h" #include "mem/CMemory.h" + +#include +#include + #include "_main/global.h" -#include "CSelectLang.h" +#include "config/app_constants.h" #include "util/MessageBoxF.h" #include "debug/Debug2.h" -#include "config/app_constants.h" +#include "CSelectLang.h" #include "String_define.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // コンストラクタ・デストラクタ // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -/*! - * @brief デフォルトコンストラクタ - */ -CMemory::CMemory() noexcept - : m_pRawData(NULL) - , m_nRawLen(0) - , m_nDataBufSize(0) -{ -} - /* @note 格納データにはNULLを含むことができる */ CMemory::CMemory( const void* pData, //!< 格納データアドレス - int nDataLenBytes //!< 格納データの有効長 -) : CMemory() + size_t nDataLen //!< 格納データの有効長 +) { - SetRawData( pData, nDataLenBytes ); + SetRawData( pData, nDataLen ); } /*! * @brief コピーコンストラクタ */ -CMemory::CMemory(const CMemory& rhs) - : CMemory() +CMemory::CMemory( const CMemory& rhs ) { SetRawData(rhs); } @@ -81,312 +74,209 @@ CMemory::CMemory(const CMemory& rhs) /*! * @brief ムーブコンストラクタ */ -CMemory::CMemory(CMemory&& other) noexcept - : CMemory() +CMemory::CMemory( CMemory&& other ) noexcept { swap(other); } -CMemory::~CMemory() +CMemory::~CMemory() noexcept { - _Empty(); + Reset(); } // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 実装補助 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -/* -|| バッファの最後にデータを追加する(protectメンバ -*/ -void CMemory::_AddData( const void* pData, int nDataLen ) -{ - if( NULL == m_pRawData ){ - return; - } - memcpy( &m_pRawData[m_nRawLen], pData, nDataLen ); - m_nRawLen += nDataLen; - m_pRawData[m_nRawLen] = '\0'; - m_pRawData[m_nRawLen+1] = '\0'; //終端'\0'を2つ付加する('\0''\0'==L'\0')。 2007.08.13 kobake 追加 - return; -} - /* 等しい内容か */ -int CMemory::IsEqual(const CMemory& cmem1, const CMemory& cmem2) +bool CMemory::IsEqual(const CMemory& cmem1, const CMemory& cmem2) { - const int nLen1 = cmem1.GetRawLength(); - const int nLen2 = cmem2.GetRawLength(); + const auto nLen1 = cmem1.GetRawLength(); + const auto nLen2 = cmem2.GetRawLength(); if( nLen1 == nLen2 ){ - const char* psz1 = reinterpret_cast(cmem1.GetRawPtr()); - const char* psz2 = reinterpret_cast(cmem2.GetRawPtr()); + const auto psz1 = cmem1.GetRawPtr(); + const auto psz2 = cmem2.GetRawPtr(); if( 0 == memcmp( psz1, psz2, nLen1 ) ){ - return TRUE; + return true; } } - return FALSE; + return false; } /* !上位バイトと下位バイトを交換する @author Moca @date 2002/5/27 - - @note nBufLen が2の倍数でないときは、最後の1バイトは交換されない -*/ -void CMemory::SwapHLByte( char* pData, const int nDataLen ){ - unsigned char *p; - unsigned char *p_end; - unsigned int *pdwchar; - unsigned int *pdw_end; - unsigned char* pBuf; - int nBufLen; - - //pBuf = (unsigned char*)GetRawPtr( &nBufLen ); - pBuf = reinterpret_cast( pData ); - nBufLen = nDataLen; - - if( nBufLen < 2){ - return; - } - // 高速化のため - pdwchar = (unsigned int*)pBuf; - if( (size_t)pBuf % 2 == 0){ - if( (size_t)pBuf % 4 == 2 ){ - std::swap( pBuf[0], pBuf[1] ); - pdwchar = (unsigned int*)(pBuf + 2); - } - pdw_end = (unsigned int*)(pBuf + nBufLen - sizeof(unsigned int)); - for(; pdwchar <= pdw_end ; ++pdwchar ){ - pdwchar[0] = ((pdwchar[0] & (unsigned int)0xff00ff00) >> 8) | - ((pdwchar[0] & (unsigned int)0x00ff00ff) << 8); - } - } - p = (unsigned char*)pdwchar; - p_end = pBuf + nBufLen - 2; - - for(; p <= p_end ; p+=2){ - std::swap( p[0], p[1] ); + @note nDataLenが2の倍数でないときは、最後の1バイトは交換されない +*/ +void CMemory::SwapHLByte( char* pData, const size_t nDataLen ) noexcept +{ + CMemory cmem( pData, nDataLen ); + cmem.SwapHLByte(); + if( cmem.GetRawPtr() != nullptr ){ + ::memcpy( pData, cmem.GetRawPtr(), nDataLen ); } - return; } -/* !上位バイトと下位バイトを交換する +/* ! + データをWORD値の配列とみなしてエンディアンを反転する @author Moca @date 2002/5/27 - @note nBufLen が2の倍数でないときは、最後の1バイトは交換されない + @note サイズが2の倍数でないときは、最後の1バイトは交換されない */ -void CMemory::SwapHLByte( void ){ - int nBufLen = GetRawLength(); - char* pBuf = reinterpret_cast( GetRawPtr() ); - SwapHLByte( pBuf, nBufLen ); - return; -/* - unsigned char *p; - unsigned char ctemp; - unsigned char *p_end; - unsigned int *pdwchar; - unsigned int *pdw_end; - unsigned char* pBuf; - int nBufLen; +void CMemory::SwapHLByte( void ) noexcept +{ + auto p0 = reinterpret_cast(GetRawPtr()); + const auto p1 = p0 + GetRawLength() / 2; + std::for_each(p0, p1, []( auto& w ) { w = ::_byteswap_ushort( w ); } ); +} - pBuf = (unsigned char*)GetRawPtr( &nBufLen ); +/*! + バッファサイズの調整 - if( nBufLen < 2){ - return; - } - // 高速化のため - if( (size_t)pBuf % 2 == 0){ - if( (size_t)pBuf % 4 == 2 ){ - ctemp = pBuf[0]; - pBuf[0] = pBuf[1]; - pBuf[1] = ctemp; - pdwchar = (unsigned int*)(pBuf + 2); - }else{ - pdwchar = (unsigned int*)pBuf; - } - pdw_end = (unsigned int*)(pdwchar + nBufLen / sizeof(int)) - 1; + @date 2007/08/13 kobake 変更 + @date 2014/06/25 有効データ長が0の場合はfree & malloc + */ +void CMemory::AllocBuffer( size_t nNewDataLen ) +{ + // 確保サイズは 8byte 単位に切り上げる + // また、必要サイズは 2byte 多く見積もっておく(終端L'\0'を入れるため) + size_t nAllocSize = ((nNewDataLen + sizeof(wchar_t)) + 7) & (~7); - for(; pdwchar <= pdw_end ; ++pdwchar ){ - pdwchar[0] = ((pdwchar[0] & (unsigned int)0xff00ff00) >> 8) | - ((pdwchar[0] & (unsigned int)0x00ff00ff) << 8); - } - } - p = (unsigned char*)pdwchar; - p_end = pBuf + nBufLen - 2; - - for(; p <= p_end ; p+=2){ - ctemp = p[0]; - p[0] = p[1]; - p[1] = ctemp; + // 既に必要サイズを確保できている場合、直ちに抜ける + if( nAllocSize < m_nDataBufSize ){ + return; } -*/ -} -bool CMemory::SwabHLByte( const CMemory& mem ) -{ - if( this == &mem ){ - SwapHLByte(); - return true; + // メモリ確保済み、かつ、有効データ長が0の場合は一旦クリアする + if( m_pRawData != nullptr && m_nRawLen == 0 ){ + Reset(); } - int nSize = mem.GetRawLength(); - if( m_pRawData && nSize + 2 <= m_nDataBufSize ) { - // データが短い時はバッファの再利用 - _SetRawLength(0); - }else{ - _Empty(); - } - AllocBuffer(nSize); - char* pSrc = reinterpret_cast(const_cast(mem.GetRawPtr())); - char* pDst = reinterpret_cast(GetRawPtr()); - if( pDst == NULL ){ - return false; - } - _swab(pSrc, pDst, nSize); - _SetRawLength(nSize); - return true; -} - -/* -|| バッファサイズの調整 -*/ -void CMemory::AllocBuffer( int nNewDataLen ) -{ - int nWorkLen; - char* pWork = NULL; - // 2バイト多くメモリ確保しておく('\0'またはL'\0'を入れるため) 2007.08.13 kobake 変更 - nWorkLen = ((nNewDataLen + 2) + 7) & (~7); // 8Byteごとに整列 + void* pAllocated = nullptr; - if( m_nDataBufSize == 0 ){ - /* 未確保の状態 */ - pWork = malloc_char( nWorkLen ); - }else{ - /* 現在のバッファサイズより大きくなった場合のみ再確保する */ - if( m_nDataBufSize < nWorkLen ){ - // 2014.06.25 有効データ長が0の場合はfree & malloc - if( m_nRawLen == 0 ){ - free( m_pRawData ); - m_pRawData = NULL; - pWork = malloc_char( nWorkLen ); - }else{ - pWork = (char*)realloc( m_pRawData, nWorkLen ); - } - }else{ - return; - } + if( m_nDataBufSize == 0 && nAllocSize <= INT_MAX ){ + pAllocated = ::malloc( nAllocSize ); + }else if( nAllocSize <= INT_MAX ){ + pAllocated = ::realloc( m_pRawData, nAllocSize ); } - if( NULL == pWork ){ - ::MYMESSAGEBOX( NULL, MB_OKCANCEL | MB_ICONQUESTION | MB_TOPMOST, GSTR_APPNAME, - LS(STR_ERR_DLGMEM1), nNewDataLen + if( pAllocated != nullptr ){ + m_pRawData = static_cast(pAllocated); + m_nDataBufSize = static_cast(nAllocSize); + }else{ + // "CMemory::AllocBuffer(nNewDataLen==%d)\nメモリ確保に失敗しました。\n" + TopCustomMessage( + nullptr, + MB_OKCANCEL | MB_ICONQUESTION, + LS(STR_ERR_DLGMEM1), + nNewDataLen ); - if( NULL != m_pRawData && 0 != nWorkLen ){ - /* 古いバッファを解放して初期化 */ - _Empty(); + + if( m_pRawData != nullptr && nAllocSize != 0 ){ + Reset(); } - return; } - m_pRawData = pWork; - m_nDataBufSize = nWorkLen; - return; } /* バッファの内容を置き換える */ -void CMemory::SetRawData( const void* pData, int nDataLen ) +void CMemory::SetRawData( const void* pData, size_t nDataLen ) { - _Empty(); - AllocBuffer( nDataLen ); - _AddData( pData, nDataLen ); - return; + if( m_pRawData != pData ){ + // バッファをクリアして末尾に追加 + Reset(); + AppendRawData( pData, nDataLen ); + } } /* バッファの内容を置き換える */ -void CMemory::SetRawData( const CMemory& pcmemData ) +void CMemory::SetRawData( const CMemory& cmemData ) { - int nDataLen = pcmemData.GetRawLength(); - const void* pData = pcmemData.GetRawPtr(); - _Empty(); - AllocBuffer( nDataLen ); - _AddData( pData, nDataLen ); - return; + // バッファの内容を置き換える + SetRawData( cmemData.GetRawPtr(), cmemData.GetRawLength() ); } /*! バッファの内容を置き換える */ -void CMemory::SetRawDataHoldBuffer( const void* pData, int nDataLen ) +void CMemory::SetRawDataHoldBuffer( const void* pData, size_t nDataLen ) { - // this 重複不可 - assert( m_pRawData != pData ); - if( m_nRawLen != 0 ){ - _SetRawLength(0); + if( m_pRawData != pData ){ + // 有効データ長をクリアして末尾(先頭)に追加 + if( m_nRawLen != 0 ){ + _SetRawLength( 0 ); + } + AppendRawData( pData, nDataLen ); } - AllocBuffer( nDataLen ); - _AddData( pData, nDataLen ); - return; } /*! バッファの内容を置き換える */ -void CMemory::SetRawDataHoldBuffer( const CMemory& pcmemData ) +void CMemory::SetRawDataHoldBuffer( const CMemory& cmemData ) { - if( this == &pcmemData ){ - return; - } - int nDataLen = pcmemData.GetRawLength(); - const void* pData = pcmemData.GetRawPtr(); - SetRawDataHoldBuffer( pData, nDataLen ); - return; + // バッファの内容を置き換える + SetRawDataHoldBuffer( cmemData.GetRawPtr(), cmemData.GetRawLength() ); } /* バッファの最後にデータを追加する(publicメンバ)*/ -void CMemory::AppendRawData( const void* pData, int nDataLenBytes ) +void CMemory::AppendRawData( const void* pData, size_t nDataLen ) { - if(nDataLenBytes<=0)return; - AllocBuffer( m_nRawLen + nDataLenBytes ); - _AddData( pData, nDataLenBytes ); -} + // メモリが足りなければ確保する + if( m_nDataBufSize <= m_nRawLen + nDataLen ){ + AllocBuffer( m_nRawLen + nDataLen ); + } -/* バッファの最後にデータを追加する(publicメンバ)*/ -void CMemory::AppendRawData( const CMemory* pcmemData ) -{ - if( this == pcmemData ){ - CMemory cm = *pcmemData; - AppendRawData(&cm); + // メモリを確保できた場合のみコピーする + if( m_pRawData != nullptr && m_nRawLen + nDataLen + sizeof(wchar_t) <= m_nDataBufSize ){ + ::memcpy( &m_pRawData[m_nRawLen], pData, nDataLen ); + _SetRawLength( m_nRawLen + nDataLen ); } - int nDataLen = pcmemData->GetRawLength(); - const void* pData = pcmemData->GetRawPtr(); - AllocBuffer( m_nRawLen + nDataLen ); - _AddData( pData, nDataLen ); } -void CMemory::_Empty( void ) +void CMemory::Reset( void ) noexcept { - free( m_pRawData ); - m_pRawData = NULL; - m_nDataBufSize = 0; + ::free( m_pRawData ); + m_pRawData = nullptr; m_nRawLen = 0; - return; + m_nDataBufSize = 0; } -void CMemory::_AppendSz(const char* str) +void CMemory::_AppendSz( std::string_view str ) { - int len=strlen(str); - AllocBuffer( m_nRawLen + len ); - _AddData(str,len); + // バッファの最後にデータを追加する + AppendRawData( str.data(), str.length() ); } -void CMemory::_SetRawLength(int nLength) +void CMemory::_SetRawLength( size_t nLength ) { - if (m_pRawData == NULL || m_nDataBufSize <= 0) - { - // バッファが確保されていない状態の場合、有効データサイズを 0 にする要求しか来ないはず - assert(nLength == 0); - return; + if( m_pRawData != nullptr && nLength + sizeof(wchar_t) <= m_nDataBufSize ){ + m_nRawLen = static_cast(nLength); + wchar_t chNul = L'\0'; //ワイド文字のNUL終端を付加する + ::memcpy( &m_pRawData[m_nRawLen], &chNul, sizeof(wchar_t) ); + } +} + +void CMemory::swap( CMemory& left ) noexcept { + std::swap(m_nDataBufSize, left.m_nDataBufSize); + std::swap(m_pRawData, left.m_pRawData); + std::swap(m_nRawLen, left.m_nRawLen); +} + +//! コピー代入演算子 +CMemory& CMemory::operator = ( const CMemory& rhs ) +{ + if( this != &rhs ){ + SetRawData( rhs ); + } + return *this; +} + +//! ムーブ代入演算子 +CMemory& CMemory::operator = ( CMemory&& rhs ) noexcept +{ + if( this != &rhs ){ + Reset(); + swap( rhs ); } - assert(m_nRawLen <= m_nDataBufSize-2); // m_nRawLen を変更する前に必要な条件が成立しているか確認する - m_nRawLen = nLength; - assert(m_nRawLen <= m_nDataBufSize-2); // m_nRawLen を変更した後も必要な条件が成立しているか確認する - m_pRawData[m_nRawLen ]=0; - m_pRawData[m_nRawLen+1]=0; //終端'\0'を2つ付加する('\0''\0'==L'\0')。 + return *this; } diff --git a/sakura_core/mem/CMemory.h b/sakura_core/mem/CMemory.h index 11a0a295a6..c18add4095 100644 --- a/sakura_core/mem/CMemory.h +++ b/sakura_core/mem/CMemory.h @@ -36,89 +36,68 @@ #define SAKURA_CMEMORY_EE37AF3F_6B73_412E_8F0C_8A64F4250AE3_H_ #pragma once +#include +#include + /*! ファイル文字コードセット判別時の先読み最大サイズ */ #define CheckKanjiCode_MAXREADLENGTH 16384 -//! メモリバッファクラス +/*! + メモリバッファクラス + + ヒープメモリにバッファ領域を確保する + 内部バッファのサイズは8の倍数に切り上げて確保される。 + NUL文字(\0)を含むバイナリシーケンスを格納することができる。 + */ class CMemory { //コンストラクタ・デストラクタ public: - CMemory() noexcept; - CMemory(const void* pData, int nDataLenBytes); - CMemory(const CMemory& rhs); - CMemory(CMemory&& other) noexcept; + CMemory() noexcept = default; + CMemory( const void* pData, size_t nDataLen ); + CMemory( const CMemory& rhs ); + CMemory( CMemory&& other ) noexcept; // デストラクタを仮想にすると仮想関数テーブルへのポインタを持つ為にインスタンスの容量が増えてしまうので仮想にしない // 仮想デストラクタでは無いので派生クラスでメンバー変数を追加しない事 - ~CMemory(); + ~CMemory() noexcept; //インターフェース public: - void AllocBuffer(int nNewDataLen); //!< バッファサイズの調整。必要に応じて拡大する。 - void SetRawData( const void* pData, int nDataLen ); //!< バッファの内容を置き換える - void SetRawData(const CMemory& pcmemData); //!< バッファの内容を置き換える - void SetRawDataHoldBuffer( const void* pData, int nDataLen ); //!< バッファの内容を置き換える(バッファを保持) - void SetRawDataHoldBuffer(const CMemory& pcmemData); //!< バッファの内容を置き換える(バッファを保持) - void AppendRawData( const void* pData, int nDataLen ); //!< バッファの最後にデータを追加する - void AppendRawData(const CMemory* pcmemData); //!< バッファの最後にデータを追加する - void Clean(){ _Empty(); } - void Clear(){ _Empty(); } - - inline const void* GetRawPtr() const{ return m_pRawData; } //!< データへのポインタを返す - inline void* GetRawPtr(){ return m_pRawData; } //!< データへのポインタを返す - int GetRawLength() const { return m_nRawLen; } //!<データ長を返す。バイト単位。 + void AllocBuffer( size_t nNewDataLen ); //!< バッファサイズの調整。必要に応じて拡大する。 + void SetRawData( const void* pData, size_t nDataLen ); //!< バッファの内容を置き換える + void SetRawData( const CMemory& cmemData ); //!< バッファの内容を置き換える + void SetRawDataHoldBuffer( const void* pData, size_t nDataLen ); //!< バッファの内容を置き換える(バッファを保持) + void SetRawDataHoldBuffer( const CMemory& cmemData ); //!< バッファの内容を置き換える(バッファを保持) + void AppendRawData( const void* pData, size_t nDataLen ); //!< バッファの最後にデータを追加する + void Reset( void ) noexcept; //!< バッファをリセットする + + [[nodiscard]] const std::byte* GetRawPtr() const noexcept { return m_pRawData; } //!< データへのポインタを返す + std::byte* GetRawPtr() noexcept { return m_pRawData; } //!< データへのポインタを返す + [[nodiscard]] int GetRawLength() const noexcept { return static_cast(m_nRawLen); } //!<データ長を返す。バイト単位。 // 演算子 - //! コピー代入演算子 - CMemory& operator = (const CMemory& rhs) { - if (this != &rhs) { - SetRawData(rhs); - } - return *this; - } - //! ムーブ代入演算子 - CMemory& operator = (CMemory&& rhs) noexcept { - if (this != &rhs) { - _Empty(); - swap(rhs); - } - return *this; - } + CMemory& operator = ( const CMemory& rhs ); + CMemory& operator = ( CMemory&& rhs ) noexcept; // 比較 - static int IsEqual(const CMemory& cmem1, const CMemory& cmem2); /* 等しい内容か */ + static bool IsEqual( const CMemory& cmem1, const CMemory& cmem2 ); /* 等しい内容か */ // 変換関数 - static void SwapHLByte(char* pData, const int nDataLen); // 下記関数のstatic関数版 - void SwapHLByte(); // Byteを交換する - bool SwabHLByte(const CMemory& mem); // Byteを交換する(コピー版) + static void SwapHLByte( char* pData, const size_t nDataLen ) noexcept; // 下記関数のstatic関数版 + void SwapHLByte() noexcept; //!< データをWORD値の配列とみなして上下BYTEを交換する -protected: - /* - || 実装ヘルパ関数 - */ - void _Empty( void ); //!< 解放する。m_pRawDataはNULLになる。 - void _AddData(const void* pData, int nDataLen); -public: - void _AppendSz(const char* str); - void _SetRawLength(int nLength); - void swap( CMemory& left ) noexcept { - std::swap( m_nDataBufSize, left.m_nDataBufSize ); - std::swap( m_pRawData, left.m_pRawData ); - std::swap( m_nRawLen, left.m_nRawLen ); - } - int capacity() const { return m_nDataBufSize ? m_nDataBufSize - 2: 0; } + void _AppendSz( std::string_view str ); + void _SetRawLength( size_t nLength ); + void swap( CMemory& left ) noexcept; + [[nodiscard]] int capacity() const noexcept { return 8 <= m_nDataBufSize ? m_nDataBufSize - 2: 0; } private: // 2002/2/10 aroka アクセス権変更 /* || メンバ変数 */ - char* m_pRawData; //バッファ - int m_nRawLen; //データサイズ(m_nDataBufSize以内)。バイト単位。 - int m_nDataBufSize; //バッファサイズ。バイト単位。 + std::byte* m_pRawData = nullptr; //!< バッファ + unsigned m_nRawLen = 0; //!< データサイズ(m_nDataBufSize未満)。バイト単位。 + unsigned m_nDataBufSize = 0; //!< バッファサイズ。バイト単位。 }; -// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -// inline関数の実装 // -// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // #endif /* SAKURA_CMEMORY_EE37AF3F_6B73_412E_8F0C_8A64F4250AE3_H_ */ diff --git a/sakura_core/mem/CNativeW.cpp b/sakura_core/mem/CNativeW.cpp index 6a0a8046a2..7067cfd2b3 100644 --- a/sakura_core/mem/CNativeW.cpp +++ b/sakura_core/mem/CNativeW.cpp @@ -63,7 +63,7 @@ void CNativeW::SetString( const wchar_t* pszData ) if (pszData) CNative::SetRawData(pszData,wcslen(pszData) * sizeof(wchar_t)); else - CMemory::Clear(); + CMemory::Reset(); } void CNativeW::SetStringHoldBuffer( const wchar_t* pData, int nDataLen ) diff --git a/tests/unittests/test-ccodebase.cpp b/tests/unittests/test-ccodebase.cpp index d1692badeb..7d7d6a715d 100644 --- a/tests/unittests/test-ccodebase.cpp +++ b/tests/unittests/test-ccodebase.cpp @@ -34,36 +34,36 @@ TEST(CCodeBase, MIMEHeaderDecode) // Base64 JIS std::string source1("From: =?iso-2022-jp?B?GyRCJTUlLyVpGyhC?="); EXPECT_TRUE(CCodeBase::MIMEHeaderDecode(source1.c_str(), source1.length(), &m, CODE_JIS)); - EXPECT_STREQ(static_cast(m.GetRawPtr()), "From: $B%5%/%i(B"); + EXPECT_STREQ(reinterpret_cast(m.GetRawPtr()), "From: $B%5%/%i(B"); // Base64 UTF-8 std::string source2("From: =?utf-8?B?44K144Kv44Op?="); EXPECT_TRUE(CCodeBase::MIMEHeaderDecode(source2.c_str(), source2.length(), &m, CODE_UTF8)); - EXPECT_STREQ(static_cast(m.GetRawPtr()), "From: \xe3\x82\xb5\xe3\x82\xaf\xe3\x83\xa9"); + EXPECT_STREQ(reinterpret_cast(m.GetRawPtr()), "From: \xe3\x82\xb5\xe3\x82\xaf\xe3\x83\xa9"); // QP UTF-8 std::string source3("From: =?utf-8?Q?=E3=82=B5=E3=82=AF=E3=83=A9!?="); EXPECT_TRUE(CCodeBase::MIMEHeaderDecode(source3.c_str(), source3.length(), &m, CODE_UTF8)); - EXPECT_STREQ(static_cast(m.GetRawPtr()), "From: \xe3\x82\xb5\xe3\x82\xaf\xe3\x83\xa9!"); + EXPECT_STREQ(reinterpret_cast(m.GetRawPtr()), "From: \xe3\x82\xb5\xe3\x82\xaf\xe3\x83\xa9!"); // 引数の文字コードとヘッダー内の文字コードが異なる場合は変換しない EXPECT_TRUE(CCodeBase::MIMEHeaderDecode(source1.c_str(), source1.length(), &m, CODE_UTF8)); - EXPECT_STREQ(static_cast(m.GetRawPtr()), source1.c_str()); + EXPECT_STREQ(reinterpret_cast(m.GetRawPtr()), source1.c_str()); // 対応していない文字コードなら変換しない std::string source4("From: =?utf-7?B?+MLUwrzDp-"); EXPECT_TRUE(CCodeBase::MIMEHeaderDecode(source4.c_str(), source4.length(), &m, CODE_UTF7)); - EXPECT_STREQ(static_cast(m.GetRawPtr()), source4.c_str()); + EXPECT_STREQ(reinterpret_cast(m.GetRawPtr()), source4.c_str()); // 謎の符号化方式が指定されていたら何もしない std::string source5("From: =?iso-2022-jp?X?GyRCJTUlLyVpGyhC?="); EXPECT_TRUE(CCodeBase::MIMEHeaderDecode(source5.c_str(), source5.length(), &m, CODE_JIS)); - EXPECT_STREQ(static_cast(m.GetRawPtr()), source5.c_str()); + EXPECT_STREQ(reinterpret_cast(m.GetRawPtr()), source5.c_str()); // 末尾の ?= がなければ変換しない std::string source6("From: =?iso-2022-jp?B?GyRCJTUlLyVpGyhC"); EXPECT_TRUE(CCodeBase::MIMEHeaderDecode(source6.c_str(), source6.length(), &m, CODE_JIS)); - EXPECT_STREQ(static_cast(m.GetRawPtr()), source6.c_str()); + EXPECT_STREQ(reinterpret_cast(m.GetRawPtr()), source6.c_str()); } /*! diff --git a/tests/unittests/test-cdecode.cpp b/tests/unittests/test-cdecode.cpp index 8f60161cad..457a99b76c 100644 --- a/tests/unittests/test-cdecode.cpp +++ b/tests/unittests/test-cdecode.cpp @@ -50,13 +50,13 @@ TEST(CDecode, Base64) for (const auto& testCase : testCases) { s.SetString(testCase.input); EXPECT_TRUE(CDecode_Base64Decode().DoDecode(s, &m)); - EXPECT_STREQ(static_cast(m.GetRawPtr()), testCase.output); + EXPECT_STREQ(reinterpret_cast(m.GetRawPtr()), testCase.output); } // 空白は無視する s.SetString(L"c2Fr \t dQ=="); EXPECT_TRUE(CDecode_Base64Decode().DoDecode(s, &m)); - EXPECT_STREQ(static_cast(m.GetRawPtr()), "saku"); + EXPECT_STREQ(reinterpret_cast(m.GetRawPtr()), "saku"); // 異常な文字があったら変換を中止する s.SetString(L"c2Fr?dQ=="); @@ -81,7 +81,7 @@ TEST(CDecode, uuencode) CDecode_UuDecode decoder; EXPECT_TRUE(decoder.DoDecode(s, &m)); - EXPECT_STREQ(static_cast(m.GetRawPtr()), testCase.output); + EXPECT_STREQ(reinterpret_cast(m.GetRawPtr()), testCase.output); wchar_t fileName[_MAX_PATH]; decoder.CopyFilename(fileName); @@ -91,7 +91,7 @@ TEST(CDecode, uuencode) // ヘッダーおよびフッターの先頭と末尾の空白は無視する s.SetString(L"\tbegin 666 test \r\n!

                    (m.GetRawPtr()), "s"); + EXPECT_STREQ(reinterpret_cast(m.GetRawPtr()), "s"); // 入力文字列が空の場合 s.SetString(L""); diff --git a/tests/unittests/test-cmemory.cpp b/tests/unittests/test-cmemory.cpp index d8a3e5f6c8..1c1fd3b2a0 100644 --- a/tests/unittests/test-cmemory.cpp +++ b/tests/unittests/test-cmemory.cpp @@ -55,3 +55,92 @@ TEST(CMemory, CheckEmpty) // → データサイズが 0 であることを確認する。 EXPECT_EQ(0, memory.GetRawLength()); } + +/*! + CMemoryのテスト + 比較用static関数。 + */ +TEST(CMemory, StaticIsEqual) +{ + constexpr auto& v1 = u8"これはテストです。"; + constexpr auto& v2 = u8"これはテストですか?"; + constexpr auto& v3 = u8"これはテストです?"; + + CMemory m1(v1, _countof(v1)); + CMemory m2(v2, _countof(v2)); + CMemory m3(v3, _countof(v3)); + CMemory m4(v1, _countof(v1)); + + // 長さが違う場合、false + ASSERT_FALSE(CMemory::IsEqual(m1, m2)); + + // 長さが同じでも、内容が異なればfalse + ASSERT_FALSE(CMemory::IsEqual(m1, m3)); + + // 同内容なら、true + ASSERT_TRUE(CMemory::IsEqual(m1, m4)); +} + +/*! + CMemoryのテスト + データをWORD配列とみなしてエンディアンを反転させる機能。 + */ +TEST(CMemory, SwapHLByte) +{ + constexpr auto& source = "B+saci-"; + constexpr auto& expected = "+Basic-"; + + CMemory cmem1(source, _countof(source) - 1); + cmem1.SwapHLByte(); + ASSERT_TRUE(0 == memcmp(expected, cmem1.GetRawPtr(), cmem1.GetRawLength())); + + std::string buff(source); + CMemory::SwapHLByte(buff.data(), buff.length()); + ASSERT_TRUE(0 == memcmp(expected, buff.data(), buff.length())); +} + +/*! + CMemoryのテスト + ヒープに確保できる限界量を越えるサイズを要求した場合の挙動確認 + */ +TEST(CMemory, OverHeapMaxReq) +{ + CMemory cmem; + + // _HEAP_MAXREQを越える値を指定すると、メモリは確保されない + cmem.AllocBuffer(static_cast(_HEAP_MAXREQ) + 1); + ASSERT_TRUE(cmem.GetRawPtr() == nullptr); + + // 検証用のデータを入れる + constexpr auto& data = L"テストデータ"; + cmem.SetRawData(data, (_countof(data) - 1) * sizeof(wchar_t)); + ASSERT_STREQ(data, reinterpret_cast(cmem.GetRawPtr())); + ASSERT_EQ((_countof(data) - 1) * sizeof(wchar_t), cmem.GetRawLength()); + + // メモリ確保失敗時は、メモリが解放される + cmem.AllocBuffer(static_cast(_HEAP_MAXREQ) + 1); + ASSERT_TRUE(cmem.GetRawPtr() == nullptr); +} + +/*! + CMemoryのテスト + 仕様上の上限値を越えるサイズを要求した場合の挙動確認 + */ +TEST(CMemory, OverMaxSize) +{ + CMemory cmem; + + // INT_MAXを越える値を指定すると、メモリは確保されない + cmem.AllocBuffer(static_cast(INT_MAX) + 1); + ASSERT_TRUE(cmem.GetRawPtr() == nullptr); + + // 検証用のデータを入れる + constexpr auto& data = L"テストデータ"; + cmem.SetRawData(data, (_countof(data) - 1) * sizeof(wchar_t)); + ASSERT_STREQ(data, reinterpret_cast(cmem.GetRawPtr())); + ASSERT_EQ((_countof(data) - 1) * sizeof(wchar_t), cmem.GetRawLength()); + + // メモリ確保失敗時は、メモリが解放される + cmem.AllocBuffer(static_cast(INT_MAX) + 1); + ASSERT_TRUE(cmem.GetRawPtr() == nullptr); +} From f17f17e53c7ae3846b312f50f926af03a4a62283 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Thu, 8 Apr 2021 01:02:24 +0900 Subject: [PATCH 0590/1024] =?UTF-8?q?CNativeW=E3=81=AE=E3=83=AA=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=AF=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0(x64?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C=E6=BA=96=E5=82=99)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/mem/CNativeW.cpp | 127 +++++++++++++++++---------- sakura_core/mem/CNativeW.h | 70 ++++++--------- sakura_core/outline/CDlgFuncList.cpp | 2 +- tests/unittests/test-cnative.cpp | 39 +++++++- 4 files changed, 149 insertions(+), 89 deletions(-) diff --git a/sakura_core/mem/CNativeW.cpp b/sakura_core/mem/CNativeW.cpp index 7067cfd2b3..c243500105 100644 --- a/sakura_core/mem/CNativeW.cpp +++ b/sakura_core/mem/CNativeW.cpp @@ -31,18 +31,53 @@ #include "CEol.h" +/*! + コンストラクタ + + C文字列の先頭アドレスと有効文字数を指定してCStringRefを構築する。 + */ +CStringRef::CStringRef( const wchar_t* pData, size_t nDataLen ) noexcept + : m_pData(pData) + , m_nDataLen(static_cast(nDataLen)) +{ +} + +/*! + コンストラクタ + + 指定したCNativeWを参照するCStringRefを構築する。 + */ +CStringRef::CStringRef( const CNativeW& cmem ) noexcept + : m_pData(cmem.GetStringPtr()) + , m_nDataLen(cmem.GetStringLength()) +{ +} + +/*! + 指定位置の文字を取得する + + 標準ライブラリの実装とは異なり、範囲外を指定すると0が返る。 + サクラエディタの内部データは拡張UTF-16LEなので、 + 取得した値が「1文字」であるとは限らないことに注意。 + */ +[[nodiscard]] wchar_t CStringRef::At( size_t nIndex ) const noexcept +{ + if( m_pData != nullptr && nIndex < m_nDataLen ){ + return m_pData[nIndex]; + } + return 0; +} + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // コンストラクタ・デストラクタ // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // //! nDataLenは文字単位。 -CNativeW::CNativeW( const wchar_t* pData, int nDataLen ) - : CNative() +CNativeW::CNativeW( const wchar_t* pData, size_t nDataLen ) { - SetString(pData, nDataLen); + SetString( pData, nDataLen ); } CNativeW::CNativeW( const wchar_t* pData ) - : CNative() { SetString(pData); } @@ -52,23 +87,25 @@ CNativeW::CNativeW( const wchar_t* pData ) // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // バッファの内容を置き換える -void CNativeW::SetString( const wchar_t* pData, int nDataLen ) +void CNativeW::SetString( const wchar_t* pData, size_t nDataLen ) { - CNative::SetRawData(pData,nDataLen * sizeof(wchar_t)); + CMemory::SetRawData( pData,nDataLen * sizeof(wchar_t) ); } // バッファの内容を置き換える void CNativeW::SetString( const wchar_t* pszData ) { - if (pszData) - CNative::SetRawData(pszData,wcslen(pszData) * sizeof(wchar_t)); - else + if( pszData != nullptr ){ + std::wstring_view data(pszData); + SetString( data.data(), data.length() ); + }else{ CMemory::Reset(); + } } -void CNativeW::SetStringHoldBuffer( const wchar_t* pData, int nDataLen ) +void CNativeW::SetStringHoldBuffer( const wchar_t* pData, size_t nDataLen ) { - CNative::SetRawDataHoldBuffer(pData, nDataLen * sizeof(wchar_t)); + CMemory::SetRawDataHoldBuffer( pData, nDataLen * sizeof(wchar_t) ); } // バッファの内容を置き換える @@ -78,45 +115,45 @@ void CNativeW::SetNativeData( const CNativeW& pcNative ) } //! (重要:nDataLenは文字単位) バッファサイズの調整。必要に応じて拡大する。 -void CNativeW::AllocStringBuffer( int nDataLen ) +void CNativeW::AllocStringBuffer( size_t nDataLen ) { - CNative::AllocBuffer(nDataLen * sizeof(wchar_t)); + CMemory::AllocBuffer( nDataLen * sizeof(wchar_t) ); } -//! バッファの最後にデータを追加する -void CNativeW::AppendString( const wchar_t* pszData ) +//! バッファの最後にデータを追加する。nLengthは文字単位。 +void CNativeW::AppendString( const wchar_t* pszData, size_t nDataLen ) { - CNative::AppendRawData(pszData,wcslen(pszData) * sizeof(wchar_t)); + CMemory::AppendRawData( pszData, nDataLen * sizeof(wchar_t) ); } -//! バッファの最後にデータを追加する。nLengthは文字単位。 -void CNativeW::AppendString( const wchar_t* pszData, int nLength ) +//! バッファの最後にデータを追加する +void CNativeW::AppendString( std::wstring_view data ) { - CNative::AppendRawData(pszData, nLength * sizeof(wchar_t)); + AppendString( data.data(), data.length() ); } /*! * バッファの最後にデータを追加する (フォーマット機能付き) * - * @param pszFormat フォーマット書式文字列 + * @param format フォーマット書式文字列 * @param va_args C-style の可変長引数 - * @throws std::invalid_argument pszFormatがNULL + * @throws std::invalid_argument formatがNULL * @throws std::bad_alloc メモリ確保に失敗 * @remark 不正なフォーマットを指定すると無効なパラメータ例外で即死します。 */ -void CNativeW::AppendStringF( const wchar_t* pszFormat, ... ) +void CNativeW::AppendStringF( std::wstring_view format, ... ) { // _vscwprintf に NULL を渡してはならないので除外する - if( !pszFormat ){ + if( format.empty() || format.data() == nullptr ){ throw std::invalid_argument( "pszFormat can't be nullptr" ); } // 可変長引数のポインタを取得 va_list v; - va_start( v, pszFormat ); + va_start( v, format ); // 整形によって追加される文字数をカウント - const int additional = ::_vscwprintf( pszFormat, v ); + const int additional = ::_vscwprintf( format.data(), v ); // 現在の文字列長を取得 const auto currentLength = GetStringLength(); @@ -128,7 +165,7 @@ void CNativeW::AppendStringF( const wchar_t* pszFormat, ... ) int added = 0; if( additional > 0 ){ // 追加処理の実体はCRTに委譲。この関数は無効な書式を与えると即死する。 - added = ::_vsnwprintf_s( &GetStringPtr()[currentLength], additional + 1, _TRUNCATE, pszFormat, v ); + added = ::_vsnwprintf_s( &GetStringPtr()[currentLength], static_cast(additional) + 1, _TRUNCATE, format.data(), v ); } // 可変長引数のポインタを解放 @@ -178,9 +215,9 @@ CNativeW operator + (const wchar_t* lhs, const CNativeW& rhs) noexcept(false) // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // GetAt()と同機能 -wchar_t CNativeW::operator[](int nIndex) const +[[nodiscard]] wchar_t CNativeW::operator[]( size_t nIndex ) const { - if( nIndex < GetStringLength() ){ + if( static_cast(nIndex) < GetStringLength() ){ return GetStringPtr()[nIndex]; }else{ return 0; @@ -234,7 +271,7 @@ int CNativeW::Compare(const wchar_t* rhs) const noexcept const int rhsIsValid = rhs ? 1 : 0; if (!rhsIsValid || !lhsIsValid) return lhsIsValid - rhsIsValid; const wchar_t* lhs = GetStringPtr(); - const int lhsLength = GetStringLength(); + const size_t lhsLength = GetStringLength(); // NUL終端考慮のために終端を拡張し、比較自体はCRTに丸投げする return wcsncmp(lhs, rhs, lhsLength + 1); } @@ -313,28 +350,21 @@ bool operator != (const wchar_t* lhs, const CNativeW& rhs) noexcept // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // //! 文字列置換 -void CNativeW::Replace( const wchar_t* pszFrom, const wchar_t* pszTo ) -{ - int nFromLen = wcslen( pszFrom ); - int nToLen = wcslen( pszTo ); - Replace( pszFrom, nFromLen, pszTo, nToLen ); -} - -void CNativeW::Replace( const wchar_t* pszFrom, int nFromLen, const wchar_t* pszTo, int nToLen ) +void CNativeW::Replace( std::wstring_view strFrom, std::wstring_view strTo ) { CNativeW cmemWork; - int nBgnOld = 0; - int nBgn = 0; - while( nBgn <= GetStringLength() - nFromLen ){ - if( 0 == wmemcmp( &GetStringPtr()[nBgn], pszFrom, nFromLen ) ){ - if( nBgnOld == 0 && nFromLen <= nToLen ){ + size_t nBgnOld = 0; + size_t nBgn = 0; + while( nBgn <= GetStringLength() - strFrom.length() ){ + if( 0 == wmemcmp( &GetStringPtr()[nBgn], strFrom.data(), strFrom.length() ) ){ + if( nBgnOld == 0 && strFrom.length() <= strTo.length() ){ cmemWork.AllocStringBuffer( GetStringLength() ); } if( 0 < nBgn - nBgnOld ){ cmemWork.AppendString( &GetStringPtr()[nBgnOld], nBgn - nBgnOld ); } - cmemWork.AppendString( pszTo, nToLen ); - nBgn = nBgn + nFromLen; + cmemWork.AppendString( strTo.data(), strTo.length() ); + nBgn = nBgn + strFrom.length(); nBgnOld = nBgn; }else{ nBgn++; @@ -346,12 +376,17 @@ void CNativeW::Replace( const wchar_t* pszFrom, int nFromLen, const wchar_t* psz } SetNativeData( cmemWork ); }else{ - if( this->GetStringPtr() == NULL ){ - this->SetString(L""); + if( GetStringPtr() == nullptr ){ + SetString(L""); } } } +void CNativeW::Replace( const wchar_t* pszFrom, size_t nFromLen, const wchar_t* pszTo, size_t nToLen ) +{ + Replace( std::wstring_view( pszFrom, nFromLen ), std::wstring_view( pszTo, nToLen ) ); +} + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // staticインターフェース // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // diff --git a/sakura_core/mem/CNativeW.h b/sakura_core/mem/CNativeW.h index d264056526..c87b9331bc 100644 --- a/sakura_core/mem/CNativeW.h +++ b/sakura_core/mem/CNativeW.h @@ -32,35 +32,26 @@ #include "charset/charcode.h" #include "debug/Debug2.h" //assert -//! 文字列への参照を取得するインターフェース -class IStringRef{ -public: - virtual const wchar_t* GetPtr() const = 0; - virtual int GetLength() const = 0; -}; +class CNativeW; //! 文字列への参照を保持するクラス -class CStringRef final : public IStringRef{ +class CStringRef final{ public: - CStringRef() : m_pData(NULL), m_nDataLen(0) { } - CStringRef(const wchar_t* pData, int nDataLen) : m_pData(pData), m_nDataLen(nDataLen) { } - const wchar_t* GetPtr() const override{ return m_pData; } - int GetLength() const override{ return m_nDataLen; } - - //########補助 - bool IsValid() const{ return m_pData!=NULL; } - wchar_t At(int nIndex) const - { - assert(nIndex>=0 && nIndex(m_nDataLen); } + [[nodiscard]] bool IsValid() const noexcept { return m_pData != nullptr; } + [[nodiscard]] wchar_t At( size_t nIndex ) const noexcept; + private: - const wchar_t* m_pData; - int m_nDataLen; + const wchar_t* m_pData = nullptr; + unsigned m_nDataLen = 0; }; // グローバル演算子の前方宣言 -class CNativeW; bool operator == (const CNativeW& lhs, const wchar_t* rhs) noexcept; bool operator != (const CNativeW& lhs, const wchar_t* rhs) noexcept; bool operator == (const wchar_t* lhs, const CNativeW& rhs) noexcept; @@ -75,32 +66,28 @@ class CNativeW final : public CNative{ public: //コンストラクタ・デストラクタ CNativeW() noexcept = default; - CNativeW( const CNativeW& rhs ) = default; - CNativeW( CNativeW&& other ) noexcept = default; - CNativeW( const wchar_t* pData, int nDataLen ); //!< nDataLenは文字単位。 - CNativeW( const wchar_t* pData); + CNativeW( const wchar_t* pData, size_t nDataLen ); //!< nDataLenは文字単位。 + CNativeW( const wchar_t* pData ); /*! メモリ確保済みかどうか */ - bool IsValid() const noexcept { return GetStringPtr() != nullptr; } + [[nodiscard]] bool IsValid() const noexcept { return GetStringPtr() != nullptr; } //管理 - void AllocStringBuffer( int nDataLen ); //!< (重要:nDataLenは文字単位) バッファサイズの調整。必要に応じて拡大する。 + void AllocStringBuffer( size_t nDataLen ); //!< (重要:nDataLenは文字単位) バッファサイズの調整。必要に応じて拡大する。 //WCHAR - void SetString( const wchar_t* pData, int nDataLen ); //!< バッファの内容を置き換える。nDataLenは文字単位。 - void SetString( const wchar_t* pszData ); //!< バッファの内容を置き換える。NULL 指定時はメモリ解放を行い、文字列長はゼロになる - void SetStringHoldBuffer( const wchar_t* pData, int nDataLen ); - void AppendString( const wchar_t* pszData ); //!< バッファの最後にデータを追加する - void AppendString( const wchar_t* pszData, int nLength ); //!< バッファの最後にデータを追加する。nLengthは文字単位。成功すればtrue。メモリ確保に失敗したらfalseを返す。 - void AppendStringF(const wchar_t* pszData, ...); //!< バッファの最後にデータを追加する (フォーマット機能付き) + void SetString( const wchar_t* pData, size_t nDataLen ); //!< バッファの内容を置き換える。nDataLenは文字単位。 + void SetString( const wchar_t* pszData ); //!< バッファの内容を置き換える。 + void SetStringHoldBuffer( const wchar_t* pData, size_t nDataLen ); + void AppendString( const wchar_t* pszData, size_t nDataLen ); //!< バッファの最後にデータを追加する。nLengthは文字単位。成功すればtrue。メモリ確保に失敗したらfalseを返す。 + void AppendString( std::wstring_view data ); //!< バッファの最後にデータを追加する + void AppendStringF( std::wstring_view format, ... ); //!< バッファの最後にデータを追加する (フォーマット機能付き) //CNativeW void SetNativeData( const CNativeW& pcNative ); //!< バッファの内容を置き換える void AppendNativeData( const CNativeW& ); //!< バッファの最後にデータを追加する //演算子 - CNativeW& operator = (const CNativeW& rhs) { CNative::operator=(rhs); return *this; } - CNativeW& operator = (CNativeW&& rhs) noexcept { CNative::operator=(std::move(rhs)); return *this; } CNativeW operator + (const CNativeW& rhs) const { return (CNativeW(*this) += rhs); } CNativeW& operator += (const CNativeW& rhs) { AppendNativeData(rhs); return *this; } CNativeW& operator += (wchar_t ch) { return (*this += CNativeW(&ch, 1)); } @@ -108,7 +95,7 @@ class CNativeW final : public CNative{ bool operator != (const CNativeW& rhs) const noexcept { return !(*this == rhs); } //ネイティブ取得インターフェース - wchar_t operator[](int nIndex) const; //!< 任意位置の文字取得。nIndexは文字単位。 + [[nodiscard]] wchar_t operator[]( size_t nIndex ) const; //!< 任意位置の文字取得。nIndexは文字単位。 CLogicInt GetStringLength() const //!< 文字列長を返す。文字単位。 { return CLogicInt(CNative::GetRawLength() / sizeof(wchar_t)); @@ -123,9 +110,9 @@ class CNativeW final : public CNative{ } //特殊 - void _SetStringLength(int nLength) + void _SetStringLength( size_t nLength ) { - CNative::_SetRawLength(nLength*sizeof(wchar_t)); + CNative::_SetRawLength( nLength * sizeof(wchar_t) ); } //末尾を1文字削る void Chop() @@ -159,8 +146,8 @@ class CNativeW final : public CNative{ // 変換 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // - void Replace( const wchar_t* pszFrom, const wchar_t* pszTo ); //!< 文字列置換 - void Replace( const wchar_t* pszFrom, int nFromLen, const wchar_t* pszTo, int nToLen ); //!< 文字列置換 + void Replace( std::wstring_view strFrom, std::wstring_view strTo ); //!< 文字列置換 + void Replace( const wchar_t* pszFrom, size_t nFromLen, const wchar_t* pszTo, size_t nToLen ); //!< 文字列置換 public: // -- -- staticインターフェース -- -- // @@ -186,4 +173,5 @@ class CNativeW final : public CNative{ // 派生クラスでメンバー追加禁止 static_assert(sizeof(CNativeW) == sizeof(CNative), "size check"); + #endif /* SAKURA_CNATIVEW_3B48F63E_5B62_4FAB_9718_0D80114E20C1_H_ */ diff --git a/sakura_core/outline/CDlgFuncList.cpp b/sakura_core/outline/CDlgFuncList.cpp index cec4d46375..4a3bd9002b 100644 --- a/sakura_core/outline/CDlgFuncList.cpp +++ b/sakura_core/outline/CDlgFuncList.cpp @@ -1547,7 +1547,7 @@ void CDlgFuncList::SetTreeFile() const WCHAR* pszFrom = szPath; if( m_fileTreeSetting.m_szLoadProjectIni[0] != L'\0'){ CNativeW strTemp(pszFrom); - strTemp.Replace(L"", IniDirPath); + strTemp.Replace(L"", IniDirPath.c_str()); if( _countof(szPath2) <= strTemp.GetStringLength() ){ wcscpy_s(szPath2, _countof(szPath), L""); }else{ diff --git a/tests/unittests/test-cnative.cpp b/tests/unittests/test-cnative.cpp index 4ec7e9ac17..5982fc2ff5 100644 --- a/tests/unittests/test-cnative.cpp +++ b/tests/unittests/test-cnative.cpp @@ -28,6 +28,42 @@ #include "mem/CNativeW.h" #include "mem/CNativeA.h" +/*! + CStringRefのテスト + */ +TEST(CStringRef, CStringRef) +{ + constexpr const wchar_t sz[] = L"test"; + constexpr const size_t cch = _countof(sz) - 1; + + CStringRef v1; + EXPECT_EQ(nullptr, v1.GetPtr()); + EXPECT_EQ(0, v1.GetLength()); + EXPECT_FALSE(v1.IsValid()); + EXPECT_EQ(L'\0', v1.At(0)); + + CStringRef v2(sz, cch); + EXPECT_STREQ(sz, v2.GetPtr()); + EXPECT_EQ(cch, v2.GetLength()); + EXPECT_TRUE(v2.IsValid()); + EXPECT_EQ(L't', v2.At(0)); + EXPECT_EQ(L'e', v2.At(1)); + EXPECT_EQ(L's', v2.At(2)); + EXPECT_EQ(L't', v2.At(3)); + EXPECT_EQ(L'\0', v2.At(4)); + + CNativeW cmem(sz, cch); + CStringRef v3(cmem); + EXPECT_STREQ(sz, v3.GetPtr()); + EXPECT_EQ(cch, v3.GetLength()); + EXPECT_TRUE(v3.IsValid()); + EXPECT_EQ(L't', v3.At(0)); + EXPECT_EQ(L'e', v3.At(1)); + EXPECT_EQ(L's', v3.At(2)); + EXPECT_EQ(L't', v3.At(3)); + EXPECT_EQ(L'\0', v3.At(4)); +} + /*! * @brief コンストラクタ(パラメータなし)の仕様 * @remark バッファは確保されない @@ -328,7 +364,8 @@ TEST(CNativeW, AppendStringWithFormatting) ASSERT_STREQ(L"いちご100%", value.GetStringPtr()); // フォーマットに NULL を渡したケースをテストする - ASSERT_THROW(value.AppendStringF(NULL), std::invalid_argument); + ASSERT_THROW(value.AppendStringF(std::wstring_view(nullptr, 0)), std::invalid_argument); + ASSERT_THROW(value.AppendStringF(std::wstring_view(L"ダミー", 0)), std::invalid_argument); // 文字列長を0にして、追加確保が行われないケースをテストする value = L"いちご100%"; //テスト前の初期値(念のため再代入しておく From 003157ff50a2d0fc9e1db539bfebbcb69aa3f51a Mon Sep 17 00:00:00 2001 From: berryzplus Date: Thu, 8 Apr 2021 01:10:33 +0900 Subject: [PATCH 0591/1024] =?UTF-8?q?CNativeA=E3=81=AE=E3=83=AA=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=AF=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0(x64?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C=E6=BA=96=E5=82=99)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/mem/CNativeA.cpp | 27 ++++++++++++--------------- sakura_core/mem/CNativeA.h | 19 ++++++++----------- 2 files changed, 20 insertions(+), 26 deletions(-) diff --git a/sakura_core/mem/CNativeA.cpp b/sakura_core/mem/CNativeA.cpp index 3ff7a05815..c3cb249447 100644 --- a/sakura_core/mem/CNativeA.cpp +++ b/sakura_core/mem/CNativeA.cpp @@ -27,13 +27,11 @@ #include "debug/Debug1.h" CNativeA::CNativeA( const char* szData, size_t cchData ) - : CNative() { SetString(szData, cchData); } CNativeA::CNativeA(const char* szData) - : CNative() { SetString(szData); } @@ -49,16 +47,15 @@ void CNativeA::SetString( const char* pszData ) } // バッファの内容を置き換える。nLenは文字単位。 -void CNativeA::SetString( const char* pData, int nDataLen ) +void CNativeA::SetString( const char* pData, size_t nDataLen ) { - int nDataLenBytes = nDataLen * sizeof(char); - CNative::SetRawData(pData, nDataLenBytes); + CNative::SetRawData( pData, nDataLen ); } // バッファの内容を置き換える -void CNativeA::SetNativeData( const CNativeA& pcNative ) +void CNativeA::SetNativeData( const CNativeA& cNative ) { - CNative::SetRawData(pcNative); + CNative::SetRawData( cNative.GetRawPtr(), cNative.GetRawLength() ); } // バッファの最後にデータを追加する @@ -68,9 +65,9 @@ void CNativeA::AppendString( const char* pszData ) } //! バッファの最後にデータを追加する。nLengthは文字単位。 -void CNativeA::AppendString( const char* pszData, int nLength ) +void CNativeA::AppendString( const char* pszData, size_t nLength ) { - CNative::AppendRawData(pszData, nLength * sizeof(char)); + CNative::AppendRawData( pszData, nLength ); } //! バッファの最後にデータを追加する (フォーマット機能付き) @@ -104,15 +101,15 @@ const CNativeA& CNativeA::operator = ( char cChar ) } //! バッファの最後にデータを追加する -void CNativeA::AppendNativeData( const CNativeA& pcNative ) +void CNativeA::AppendNativeData( const CNativeA& cNative ) { - AppendString(pcNative.GetStringPtr(), pcNative.GetStringLength()); + CNativeA::AppendRawData( cNative.GetRawPtr(), cNative.GetRawLength() ); } //! (重要:nDataLenは文字単位) バッファサイズの調整。必要に応じて拡大する。 -void CNativeA::AllocStringBuffer( int nDataLen ) +void CNativeA::AllocStringBuffer( size_t nDataLen ) { - CNative::AllocBuffer(nDataLen * sizeof(char)); + CNative::AllocBuffer( nDataLen ); } const CNativeA& CNativeA::operator += ( char ch ) @@ -132,9 +129,9 @@ int CNativeA::GetStringLength() const } // 任意位置の文字取得。nIndexは文字単位。 -char CNativeA::operator[](int nIndex) const +char CNativeA::operator[]( size_t nIndex ) const { - if( nIndex < GetStringLength() ){ + if( static_cast(nIndex) < GetStringLength() ){ return GetStringPtr()[nIndex]; }else{ return 0; diff --git a/sakura_core/mem/CNativeA.h b/sakura_core/mem/CNativeA.h index 059388373b..4728f9781e 100644 --- a/sakura_core/mem/CNativeA.h +++ b/sakura_core/mem/CNativeA.h @@ -32,24 +32,22 @@ class CNativeA final : public CNative{ public: CNativeA() noexcept = default; - CNativeA( const CNativeA& rhs ) = default; - CNativeA( CNativeA&& other ) noexcept = default; CNativeA( const char* szData, size_t cchData ); - CNativeA( const char* szData); + CNativeA( const char* szData ); //ネイティブ設定 void SetString( const char* pszData ); //!< バッファの内容を置き換える - void SetString( const char* pData, int nDataLen ); //!< バッファの内容を置き換える。nDataLenは文字単位。 - void SetNativeData( const CNativeA& pcNative ); //!< バッファの内容を置き換える + void SetString( const char* pData, size_t nDataLen ); //!< バッファの内容を置き換える。nDataLenは文字単位。 + void SetNativeData( const CNativeA& cNative ); //!< バッファの内容を置き換える void AppendString( const char* pszData ); //!< バッファの最後にデータを追加する - void AppendString( const char* pszData, int nLength ); //!< バッファの最後にデータを追加する。nLengthは文字単位。 + void AppendString( const char* pszData, size_t nLength ); //!< バッファの最後にデータを追加する。nLengthは文字単位。 void AppendStringF(const char* pszData, ...); //!< バッファの最後にデータを追加する (フォーマット機能付き) - void AppendNativeData( const CNativeA& pcNative ); //!< バッファの最後にデータを追加する - void AllocStringBuffer( int nDataLen ); //!< (重要:nDataLenは文字単位) バッファサイズの調整。必要に応じて拡大する。 + void AppendNativeData( const CNativeA& cNative ); //!< バッファの最後にデータを追加する + void AllocStringBuffer( size_t nDataLen ); //!< (重要:nDataLenは文字単位) バッファサイズの調整。必要に応じて拡大する。 //ネイティブ取得 int GetStringLength() const; - char operator[](int nIndex) const; //!< 任意位置の文字取得。nIndexは文字単位。 + char operator[]( size_t nIndex ) const; //!< 任意位置の文字取得。nIndexは文字単位。 const char* GetStringPtr() const { return reinterpret_cast(GetRawPtr()); @@ -60,9 +58,8 @@ class CNativeA final : public CNative{ } //演算子 - CNativeA& operator = (const CNativeA& rhs) { CNative::operator=(rhs); return *this; } - CNativeA& operator = (CNativeA&& rhs) noexcept { CNative::operator=(std::move(rhs)); return *this; } const CNativeA& operator=( char ); const CNativeA& operator+=( char ); }; + #endif /* SAKURA_CNATIVEA_03C02187_A42C_4403_9D24_8B4CA20EEA81_H_ */ From 875b687a6ff1210cf67fad3678303f37c5c4477b Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 9 Apr 2021 00:55:55 +0900 Subject: [PATCH 0592/1024] =?UTF-8?q?SonarCloud=E8=AD=A6=E5=91=8A=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/mem/CNativeW.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/mem/CNativeW.h b/sakura_core/mem/CNativeW.h index c87b9331bc..d22b42a836 100644 --- a/sakura_core/mem/CNativeW.h +++ b/sakura_core/mem/CNativeW.h @@ -39,7 +39,7 @@ class CStringRef final{ public: CStringRef() noexcept = default; CStringRef( const wchar_t* pData, size_t nDataLen ) noexcept; - CStringRef( const CNativeW& cmem ) noexcept; + explicit CStringRef( const CNativeW& cmem ) noexcept; [[nodiscard]] const wchar_t* GetPtr() const noexcept { return m_pData; } [[nodiscard]] int GetLength() const noexcept { return static_cast(m_nDataLen); } From 96999fab88d40fc8a2f3553a06e2889b32522b6b Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 9 Apr 2021 09:45:37 +0900 Subject: [PATCH 0593/1024] =?UTF-8?q?CNativeW::Replace=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit サイズ変数をsize_t化した際の修正が不十分でVA発生いたため、追加修正 --- sakura_core/mem/CNativeW.cpp | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/sakura_core/mem/CNativeW.cpp b/sakura_core/mem/CNativeW.cpp index c243500105..23f4819c3e 100644 --- a/sakura_core/mem/CNativeW.cpp +++ b/sakura_core/mem/CNativeW.cpp @@ -352,15 +352,12 @@ bool operator != (const wchar_t* lhs, const CNativeW& rhs) noexcept //! 文字列置換 void CNativeW::Replace( std::wstring_view strFrom, std::wstring_view strTo ) { - CNativeW cmemWork; - size_t nBgnOld = 0; + CNativeW cmemWork(L""); size_t nBgn = 0; - while( nBgn <= GetStringLength() - strFrom.length() ){ + size_t nBgnOld = 0; + while( CLogicInt(nBgn + strFrom.length()) <= GetStringLength() ){ if( 0 == wmemcmp( &GetStringPtr()[nBgn], strFrom.data(), strFrom.length() ) ){ - if( nBgnOld == 0 && strFrom.length() <= strTo.length() ){ - cmemWork.AllocStringBuffer( GetStringLength() ); - } - if( 0 < nBgn - nBgnOld ){ + if( nBgnOld < nBgn ){ cmemWork.AppendString( &GetStringPtr()[nBgnOld], nBgn - nBgnOld ); } cmemWork.AppendString( strTo.data(), strTo.length() ); @@ -370,16 +367,10 @@ void CNativeW::Replace( std::wstring_view strFrom, std::wstring_view strTo ) nBgn++; } } - if( nBgnOld != 0 ){ - if( 0 < GetStringLength() - nBgnOld ){ - cmemWork.AppendString( &GetStringPtr()[nBgnOld], GetStringLength() - nBgnOld ); - } - SetNativeData( cmemWork ); - }else{ - if( GetStringPtr() == nullptr ){ - SetString(L""); - } + if( CLogicInt(nBgnOld) < GetStringLength() ){ + cmemWork.AppendString( &GetStringPtr()[nBgnOld], GetStringLength() - nBgnOld ); } + SetRawDataHoldBuffer( cmemWork ); } void CNativeW::Replace( const wchar_t* pszFrom, size_t nFromLen, const wchar_t* pszTo, size_t nToLen ) From 5ddfecc7b267a9c450e5b9fed852c90f18eb692b Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 9 Apr 2021 13:00:44 +0900 Subject: [PATCH 0594/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/mem/CNativeA.cpp | 23 ++++++++++++++--------- sakura_core/mem/CNativeW.cpp | 30 +++++++++++++++--------------- sakura_core/mem/CNativeW.h | 12 ++++++------ 3 files changed, 35 insertions(+), 30 deletions(-) diff --git a/sakura_core/mem/CNativeA.cpp b/sakura_core/mem/CNativeA.cpp index c3cb249447..f6b5bf56b7 100644 --- a/sakura_core/mem/CNativeA.cpp +++ b/sakura_core/mem/CNativeA.cpp @@ -43,19 +43,24 @@ CNativeA::CNativeA(const char* szData) // バッファの内容を置き換える void CNativeA::SetString( const char* pszData ) { - SetString(pszData,strlen(pszData)); + if( pszData != nullptr ){ + std::string_view data( pszData ); + SetString( data.data(), data.length() ); + }else{ + Reset(); + } } // バッファの内容を置き換える。nLenは文字単位。 void CNativeA::SetString( const char* pData, size_t nDataLen ) { - CNative::SetRawData( pData, nDataLen ); + SetRawData( pData, nDataLen ); } // バッファの内容を置き換える void CNativeA::SetNativeData( const CNativeA& cNative ) { - CNative::SetRawData( cNative.GetRawPtr(), cNative.GetRawLength() ); + SetRawData( cNative.GetRawPtr(), cNative.GetRawLength() ); } // バッファの最後にデータを追加する @@ -67,7 +72,7 @@ void CNativeA::AppendString( const char* pszData ) //! バッファの最後にデータを追加する。nLengthは文字単位。 void CNativeA::AppendString( const char* pszData, size_t nLength ) { - CNative::AppendRawData( pszData, nLength ); + AppendRawData( pszData, nLength ); } //! バッファの最後にデータを追加する (フォーマット機能付き) @@ -88,7 +93,7 @@ void CNativeA::AppendStringF(const char* pszData, ...) } // 追加 - this->AppendString(buf, len); + AppendString( buf, len ); } const CNativeA& CNativeA::operator = ( char cChar ) @@ -103,13 +108,13 @@ const CNativeA& CNativeA::operator = ( char cChar ) //! バッファの最後にデータを追加する void CNativeA::AppendNativeData( const CNativeA& cNative ) { - CNativeA::AppendRawData( cNative.GetRawPtr(), cNative.GetRawLength() ); + AppendRawData( cNative.GetRawPtr(), cNative.GetRawLength() ); } //! (重要:nDataLenは文字単位) バッファサイズの調整。必要に応じて拡大する。 void CNativeA::AllocStringBuffer( size_t nDataLen ) { - CNative::AllocBuffer( nDataLen ); + AllocBuffer( nDataLen ); } const CNativeA& CNativeA::operator += ( char ch ) @@ -125,13 +130,13 @@ const CNativeA& CNativeA::operator += ( char ch ) int CNativeA::GetStringLength() const { - return CNative::GetRawLength() / sizeof(char); + return GetRawLength(); } // 任意位置の文字取得。nIndexは文字単位。 char CNativeA::operator[]( size_t nIndex ) const { - if( static_cast(nIndex) < GetStringLength() ){ + if( nIndex < static_cast(GetStringLength()) ){ return GetStringPtr()[nIndex]; }else{ return 0; diff --git a/sakura_core/mem/CNativeW.cpp b/sakura_core/mem/CNativeW.cpp index 23f4819c3e..5d4b98c629 100644 --- a/sakura_core/mem/CNativeW.cpp +++ b/sakura_core/mem/CNativeW.cpp @@ -49,7 +49,7 @@ CStringRef::CStringRef( const wchar_t* pData, size_t nDataLen ) noexcept */ CStringRef::CStringRef( const CNativeW& cmem ) noexcept : m_pData(cmem.GetStringPtr()) - , m_nDataLen(cmem.GetStringLength()) + , m_nDataLen(static_cast(cmem.GetStringLength())) { } @@ -89,7 +89,7 @@ CNativeW::CNativeW( const wchar_t* pData ) // バッファの内容を置き換える void CNativeW::SetString( const wchar_t* pData, size_t nDataLen ) { - CMemory::SetRawData( pData,nDataLen * sizeof(wchar_t) ); + SetRawData( pData,nDataLen * sizeof(wchar_t) ); } // バッファの内容を置き換える @@ -99,31 +99,31 @@ void CNativeW::SetString( const wchar_t* pszData ) std::wstring_view data(pszData); SetString( data.data(), data.length() ); }else{ - CMemory::Reset(); + Reset(); } } void CNativeW::SetStringHoldBuffer( const wchar_t* pData, size_t nDataLen ) { - CMemory::SetRawDataHoldBuffer( pData, nDataLen * sizeof(wchar_t) ); + SetRawDataHoldBuffer( pData, nDataLen * sizeof(wchar_t) ); } // バッファの内容を置き換える -void CNativeW::SetNativeData( const CNativeW& pcNative ) +void CNativeW::SetNativeData( const CNativeW& cNative ) { - CNative::SetRawData(pcNative); + SetRawData( cNative ); } //! (重要:nDataLenは文字単位) バッファサイズの調整。必要に応じて拡大する。 void CNativeW::AllocStringBuffer( size_t nDataLen ) { - CMemory::AllocBuffer( nDataLen * sizeof(wchar_t) ); + AllocBuffer( nDataLen * sizeof(wchar_t) ); } //! バッファの最後にデータを追加する。nLengthは文字単位。 void CNativeW::AppendString( const wchar_t* pszData, size_t nDataLen ) { - CMemory::AppendRawData( pszData, nDataLen * sizeof(wchar_t) ); + AppendRawData( pszData, nDataLen * sizeof(wchar_t) ); } //! バッファの最後にデータを追加する @@ -137,15 +137,15 @@ void CNativeW::AppendString( std::wstring_view data ) * * @param format フォーマット書式文字列 * @param va_args C-style の可変長引数 - * @throws std::invalid_argument formatがNULL + * @throws std::invalid_argument formatが無効値 * @throws std::bad_alloc メモリ確保に失敗 * @remark 不正なフォーマットを指定すると無効なパラメータ例外で即死します。 */ void CNativeW::AppendStringF( std::wstring_view format, ... ) { // _vscwprintf に NULL を渡してはならないので除外する - if( format.empty() || format.data() == nullptr ){ - throw std::invalid_argument( "pszFormat can't be nullptr" ); + if( format.empty() ){ + throw std::invalid_argument( "format can't be empty" ); } // 可変長引数のポインタを取得 @@ -178,7 +178,7 @@ void CNativeW::AppendStringF( std::wstring_view format, ... ) //! バッファの最後にデータを追加する void CNativeW::AppendNativeData( const CNativeW& cmemData ) { - CNative::AppendRawData(cmemData.GetStringPtr(), cmemData.GetRawLength()); + AppendRawData(cmemData.GetStringPtr(), cmemData.GetRawLength()); } /*! @@ -217,7 +217,7 @@ CNativeW operator + (const wchar_t* lhs, const CNativeW& rhs) noexcept(false) // GetAt()と同機能 [[nodiscard]] wchar_t CNativeW::operator[]( size_t nIndex ) const { - if( static_cast(nIndex) < GetStringLength() ){ + if( nIndex < static_cast(GetStringLength()) ){ return GetStringPtr()[nIndex]; }else{ return 0; @@ -355,7 +355,7 @@ void CNativeW::Replace( std::wstring_view strFrom, std::wstring_view strTo ) CNativeW cmemWork(L""); size_t nBgn = 0; size_t nBgnOld = 0; - while( CLogicInt(nBgn + strFrom.length()) <= GetStringLength() ){ + while( nBgn + strFrom.length() <= static_cast(GetStringLength()) ){ if( 0 == wmemcmp( &GetStringPtr()[nBgn], strFrom.data(), strFrom.length() ) ){ if( nBgnOld < nBgn ){ cmemWork.AppendString( &GetStringPtr()[nBgnOld], nBgn - nBgnOld ); @@ -367,7 +367,7 @@ void CNativeW::Replace( std::wstring_view strFrom, std::wstring_view strTo ) nBgn++; } } - if( CLogicInt(nBgnOld) < GetStringLength() ){ + if( nBgnOld < static_cast(GetStringLength()) ){ cmemWork.AppendString( &GetStringPtr()[nBgnOld], GetStringLength() - nBgnOld ); } SetRawDataHoldBuffer( cmemWork ); diff --git a/sakura_core/mem/CNativeW.h b/sakura_core/mem/CNativeW.h index d22b42a836..11ab2aaeec 100644 --- a/sakura_core/mem/CNativeW.h +++ b/sakura_core/mem/CNativeW.h @@ -84,8 +84,8 @@ class CNativeW final : public CNative{ void AppendStringF( std::wstring_view format, ... ); //!< バッファの最後にデータを追加する (フォーマット機能付き) //CNativeW - void SetNativeData( const CNativeW& pcNative ); //!< バッファの内容を置き換える - void AppendNativeData( const CNativeW& ); //!< バッファの最後にデータを追加する + void SetNativeData( const CNativeW& cNative ); //!< バッファの内容を置き換える + void AppendNativeData( const CNativeW& cNative ); //!< バッファの最後にデータを追加する //演算子 CNativeW operator + (const CNativeW& rhs) const { return (CNativeW(*this) += rhs); } @@ -112,7 +112,7 @@ class CNativeW final : public CNative{ //特殊 void _SetStringLength( size_t nLength ) { - CNative::_SetRawLength( nLength * sizeof(wchar_t) ); + _SetRawLength( nLength * sizeof(wchar_t) ); } //末尾を1文字削る void Chop() @@ -124,10 +124,10 @@ class CNativeW final : public CNative{ } } void swap( CNativeW& left ){ - CNative::swap(left); + CMemory::swap( left ); } - int capacity() const noexcept { - return CNative::capacity() / sizeof(wchar_t); + [[nodiscard]] int capacity() const noexcept { + return CMemory::capacity() / sizeof(wchar_t); } // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // From 2c8ee416668574fe5e4f0f12db48d7594d29dfe4 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 9 Apr 2021 16:40:07 +0900 Subject: [PATCH 0595/1024] =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/mem/CMemory.h | 3 ++- sakura_core/mem/CNativeW.h | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/sakura_core/mem/CMemory.h b/sakura_core/mem/CMemory.h index c18add4095..618517b33d 100644 --- a/sakura_core/mem/CMemory.h +++ b/sakura_core/mem/CMemory.h @@ -89,7 +89,8 @@ class CMemory void _AppendSz( std::string_view str ); void _SetRawLength( size_t nLength ); void swap( CMemory& left ) noexcept; - [[nodiscard]] int capacity() const noexcept { return 8 <= m_nDataBufSize ? m_nDataBufSize - 2: 0; } + //! メモリ再確保を行わずに格納できる最大バイト数を求める + [[nodiscard]] virtual int capacity() const noexcept { return 8 <= m_nDataBufSize ? m_nDataBufSize - 2: 0; } private: // 2002/2/10 aroka アクセス権変更 /* diff --git a/sakura_core/mem/CNativeW.h b/sakura_core/mem/CNativeW.h index 11ab2aaeec..c2712dafc0 100644 --- a/sakura_core/mem/CNativeW.h +++ b/sakura_core/mem/CNativeW.h @@ -123,10 +123,10 @@ class CNativeW final : public CNative{ _SetStringLength(n); } } - void swap( CNativeW& left ){ - CMemory::swap( left ); - } - [[nodiscard]] int capacity() const noexcept { + //! メモリバッファを入れ替える + using CMemory::swap; + //! メモリ再確保を行わずに格納できる最大文字数を求める + [[nodiscard]] int capacity() const noexcept override { return CMemory::capacity() / sizeof(wchar_t); } From c0e687c5aa9ab5c47fad6f758230c684e4f08255 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 9 Apr 2021 16:56:51 +0900 Subject: [PATCH 0596/1024] =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/mem/CNativeW.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sakura_core/mem/CNativeW.h b/sakura_core/mem/CNativeW.h index c2712dafc0..8133cae421 100644 --- a/sakura_core/mem/CNativeW.h +++ b/sakura_core/mem/CNativeW.h @@ -124,7 +124,9 @@ class CNativeW final : public CNative{ } } //! メモリバッファを入れ替える - using CMemory::swap; + void swap( CNativeW& left ){ + CMemory::swap( left ); + } //! メモリ再確保を行わずに格納できる最大文字数を求める [[nodiscard]] int capacity() const noexcept override { return CMemory::capacity() / sizeof(wchar_t); From 690659c7c9a702bf993a1c4f78c72741e10527da Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 9 Apr 2021 19:07:28 +0900 Subject: [PATCH 0597/1024] =?UTF-8?q?CMemory::capacity()=E3=81=AEvirtual?= =?UTF-8?q?=E3=82=92=E3=82=84=E3=82=81=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/mem/CMemory.h | 2 +- sakura_core/mem/CNativeW.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sakura_core/mem/CMemory.h b/sakura_core/mem/CMemory.h index 618517b33d..73c550dd79 100644 --- a/sakura_core/mem/CMemory.h +++ b/sakura_core/mem/CMemory.h @@ -90,7 +90,7 @@ class CMemory void _SetRawLength( size_t nLength ); void swap( CMemory& left ) noexcept; //! メモリ再確保を行わずに格納できる最大バイト数を求める - [[nodiscard]] virtual int capacity() const noexcept { return 8 <= m_nDataBufSize ? m_nDataBufSize - 2: 0; } + [[nodiscard]] int capacity() const noexcept { return 8 <= m_nDataBufSize ? m_nDataBufSize - 2: 0; } private: // 2002/2/10 aroka アクセス権変更 /* diff --git a/sakura_core/mem/CNativeW.h b/sakura_core/mem/CNativeW.h index 8133cae421..e96cb59bf4 100644 --- a/sakura_core/mem/CNativeW.h +++ b/sakura_core/mem/CNativeW.h @@ -128,7 +128,7 @@ class CNativeW final : public CNative{ CMemory::swap( left ); } //! メモリ再確保を行わずに格納できる最大文字数を求める - [[nodiscard]] int capacity() const noexcept override { + [[nodiscard]] int capacity() const noexcept { return CMemory::capacity() / sizeof(wchar_t); } From 38e017ab4f3f0574fe8b264d47d9a228e71cd844 Mon Sep 17 00:00:00 2001 From: Ocelot <16898663+Ocelot1210@users.noreply.github.com> Date: Sat, 10 Apr 2021 14:38:56 +0900 Subject: [PATCH 0598/1024] =?UTF-8?q?Security=20Hotspot=20=E3=81=8C?= =?UTF-8?q?=E6=A4=9C=E5=87=BA=E3=81=95=E3=82=8C=E3=81=AA=E3=81=84=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E8=A9=A6=E3=81=BF=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/shell.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/sakura_core/util/shell.cpp b/sakura_core/util/shell.cpp index d888a8a5f7..72adb3f02b 100644 --- a/sakura_core/util/shell.cpp +++ b/sakura_core/util/shell.cpp @@ -46,6 +46,10 @@ /* フォルダ選択ダイアログ */ BOOL SelectDir( HWND hWnd, const WCHAR* pszTitle, const WCHAR* pszInitFolder, WCHAR* strFolderName, size_t nMaxCount ) { + if ( nullptr == strFolderName ) { + return FALSE; + } + using namespace Microsoft::WRL; ComPtr pDialog; HRESULT hres; @@ -101,15 +105,15 @@ BOOL SelectDir( HWND hWnd, const WCHAR* pszTitle, const WCHAR* pszInitFolder, WC return FALSE; } - if ( nMaxCount < wcslen(pszResult) ) { - CoTaskMemFree( pszResult ); - return FALSE; + BOOL bRet = TRUE; + if ( 0 != wcsncpy_s( strFolderName, nMaxCount, pszResult, _TRUNCATE ) ) { + wcsncpy_s( strFolderName, nMaxCount, L"", _TRUNCATE ); + bRet = FALSE; } - wcscpy_s( strFolderName, nMaxCount, pszResult ); CoTaskMemFree( pszResult ); - return TRUE; + return bRet; } /*! 特殊フォルダのパスを取得する From 4f93674cc910dea7fc110029e3a8919c3a04d597 Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Sun, 11 Apr 2021 13:35:14 +0900 Subject: [PATCH 0599/1024] =?UTF-8?q?=E3=82=BF=E3=82=A4=E3=83=97=E5=88=A5?= =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E3=81=AE=E3=80=8C=E3=82=AB=E3=83=BC=E3=82=BD?= =?UTF-8?q?=E3=83=AB=E4=BD=8D=E7=BD=AE=E7=B8=A6=E7=B7=9A=E3=80=8D=E3=82=92?= =?UTF-8?q?=E6=9C=89=E5=8A=B9=E6=99=82=E3=81=AB=E3=80=81=E3=82=AB=E3=83=BC?= =?UTF-8?q?=E3=82=BD=E3=83=AB=E3=81=8C=E5=85=88=E9=A0=AD=E8=A1=8C=E3=81=AB?= =?UTF-8?q?=E3=81=82=E3=82=8B=E7=8A=B6=E6=85=8B=E3=81=A7=20PageUp=20?= =?UTF-8?q?=E3=82=AD=E3=83=BC=E3=82=92=E6=8A=BC=E3=81=97=E3=81=9F=E5=BE=8C?= =?UTF-8?q?=E3=81=AB=E3=82=AB=E3=83=BC=E3=82=BD=E3=83=AB=E5=B7=A6=E5=8F=B3?= =?UTF-8?q?=E7=A7=BB=E5=8B=95=E3=81=99=E3=82=8B=E3=81=A8=E3=82=AB=E3=83=BC?= =?UTF-8?q?=E3=82=BD=E3=83=AB=E4=BD=8D=E7=BD=AE=E7=B8=A6=E7=B7=9A=E3=81=8C?= =?UTF-8?q?=E6=AE=8B=E3=82=8B=E5=95=8F=E9=A1=8C=E3=82=92=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=20=E3=82=AB=E3=83=BC=E3=82=BD=E3=83=AB=E3=81=8C=E6=9C=80?= =?UTF-8?q?=E7=B5=82=E8=A1=8C=E6=99=82=E3=81=AE=20PageDown=20=E3=82=AD?= =?UTF-8?q?=E3=83=BC=E5=BE=8C=E3=81=AE=E3=82=AB=E3=83=BC=E3=82=BD=E3=83=AB?= =?UTF-8?q?=E5=B7=A6=E5=8F=B3=E7=A7=BB=E5=8B=95=E3=81=AB=E3=81=A4=E3=81=84?= =?UTF-8?q?=E3=81=A6=E3=82=82=E5=90=8C=E6=A7=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/cmd/CViewCommander_Cursor.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sakura_core/cmd/CViewCommander_Cursor.cpp b/sakura_core/cmd/CViewCommander_Cursor.cpp index 6143b870a5..9096e95299 100644 --- a/sakura_core/cmd/CViewCommander_Cursor.cpp +++ b/sakura_core/cmd/CViewCommander_Cursor.cpp @@ -745,13 +745,15 @@ void CViewCommander::Command_1PageUp( bool bSelect, CLayoutYInt nScrollNum ) } auto& caret = GetCaret(); auto prevCaretPos = caret.GetCaretLayoutPos(); + bool bCursorVLine = m_pCommanderView->m_pTypeData->m_ColorInfoArr[COLORIDX_CURSORVLINE].m_bDisp; caret.Cursor_UPDOWN( -nScrollNum, bSelect ); auto currCaretPos = caret.GetCaretLayoutPos(); CLayoutInt nScrolled = m_pCommanderView->ScrollAtV( nViewTopLine - nScrollNum ); m_pCommanderView->SyncScrollV(nScrolled); m_pCommanderView->SetDrawSwitch(bDrawSwitchOld); // カーソル位置が変化しなかった、かつ、スクロール行数が0だった場合、描画を省く - if (prevCaretPos == currCaretPos && nScrolled == 0) { + // タイプ別設定の「カーソル位置縦線」有効時には省かない + if (!bCursorVLine && prevCaretPos == currCaretPos && nScrolled == 0) { return; } m_pCommanderView->RedrawAll(); @@ -780,13 +782,15 @@ void CViewCommander::Command_1PageDown( bool bSelect, CLayoutYInt nScrollNum ) } auto& caret = GetCaret(); auto prevCaretPos = caret.GetCaretLayoutPos(); + bool bCursorVLine = m_pCommanderView->m_pTypeData->m_ColorInfoArr[COLORIDX_CURSORVLINE].m_bDisp; caret.Cursor_UPDOWN( nScrollNum, bSelect ); auto currCaretPos = caret.GetCaretLayoutPos(); CLayoutInt nScrolled = m_pCommanderView->ScrollAtV( nViewTopLine + nScrollNum ); m_pCommanderView->SyncScrollV(nScrolled); m_pCommanderView->SetDrawSwitch(bDrawSwitchOld); // カーソル位置が変化しなかった、かつ、スクロール行数が0だった場合、描画を省く - if (prevCaretPos == currCaretPos && nScrolled == 0) { + // タイプ別設定の「カーソル位置縦線」有効時には省かない + if (!bCursorVLine && prevCaretPos == currCaretPos && nScrolled == 0) { return; } m_pCommanderView->RedrawAll(); From 48ac7eb8f9c489172b937e4a31605aa052c33d60 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 10 Apr 2021 16:19:34 +0900 Subject: [PATCH 0600/1024] =?UTF-8?q?CConvert=5FCodeAutoToSjis=E3=82=92?= =?UTF-8?q?=E6=8A=BD=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura/sakura.vcxproj | 2 + sakura/sakura.vcxproj.filters | 6 ++ sakura_core/convert/CConvert.cpp | 28 +------ .../convert/CConvert_CodeAutoToSjis.cpp | 80 +++++++++++++++++++ sakura_core/convert/CConvert_CodeAutoToSjis.h | 37 +++++++++ 5 files changed, 128 insertions(+), 25 deletions(-) create mode 100644 sakura_core/convert/CConvert_CodeAutoToSjis.cpp create mode 100644 sakura_core/convert/CConvert_CodeAutoToSjis.h diff --git a/sakura/sakura.vcxproj b/sakura/sakura.vcxproj index f774ff79e5..8973e5ce62 100644 --- a/sakura/sakura.vcxproj +++ b/sakura/sakura.vcxproj @@ -317,6 +317,7 @@ + @@ -678,6 +679,7 @@ + diff --git a/sakura/sakura.vcxproj.filters b/sakura/sakura.vcxproj.filters index 5d7697408d..bb20bcbcd5 100644 --- a/sakura/sakura.vcxproj.filters +++ b/sakura/sakura.vcxproj.filters @@ -1103,6 +1103,9 @@ Cpp Source Files\basis + + Cpp Source Files\convert + @@ -2288,6 +2291,9 @@ Cpp Source Files\basis + + Cpp Source Files\convert + diff --git a/sakura_core/convert/CConvert.cpp b/sakura_core/convert/CConvert.cpp index 30a6225e2f..578134d586 100644 --- a/sakura_core/convert/CConvert.cpp +++ b/sakura_core/convert/CConvert.cpp @@ -27,7 +27,6 @@ #include "func/Funccode.h" #include "CEol.h" #include "charset/charcode.h" -#include "charset/CCodeMediator.h" #include "charset/CCodeFactory.h" #include "charset/CShiftJis.h" #include "charset/CJis.h" @@ -35,6 +34,7 @@ #include "charset/CUnicodeBe.h" #include "charset/CUtf8.h" #include "charset/CUtf7.h" +#include "CConvert_CodeAutoToSjis.h" #include "CConvert_ToLower.h" #include "CConvert_ToUpper.h" #include "CConvert_ToHankaku.h" @@ -64,7 +64,6 @@ void CConvertMediator::ConvMemory( CNativeW* pCMemory, EFunctionCode nFuncCode, switch( nFuncCode ){ //コード変換(xxx2SJIS) - case F_CODECNV_AUTO2SJIS: case F_CODECNV_EMAIL: case F_CODECNV_EUC2SJIS: case F_CODECNV_UNICODE2SJIS: @@ -80,22 +79,8 @@ void CConvertMediator::ConvMemory( CNativeW* pCMemory, EFunctionCode nFuncCode, case F_CODECNV_SJIS2UTF7: CUtf7::UnicodeToUTF7(*pCMemory, pCMemory->_GetMemory()); break; } - ECodeType ecode = CODE_NONE; - if( nFuncCode == F_CODECNV_AUTO2SJIS ){ - CCodeMediator ccode( CEditWnd::getInstance()->GetDocument()->m_cDocType.GetDocumentAttribute().m_encoding ); - ecode = ccode.CheckKanjiCode( - reinterpret_cast(pCMemory->_GetMemory()->GetRawPtr()), - pCMemory->_GetMemory()->GetRawLength() ); - switch( ecode ){ - case CODE_JIS: nFuncCode = F_CODECNV_EMAIL; break; - case CODE_EUC: nFuncCode = F_CODECNV_EUC2SJIS; break; - case CODE_UNICODE: nFuncCode = F_CODECNV_UNICODE2SJIS; break; - case CODE_UNICODEBE: nFuncCode = F_CODECNV_UNICODEBE2SJIS; break; - case CODE_UTF8: nFuncCode = F_CODECNV_UTF82SJIS; break; - case CODE_UTF7: nFuncCode = F_CODECNV_UTF72SJIS; break; - } - } bool bExtEol = GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol; + const SEncodingConfig& sEncodingConfig = CEditWnd::getInstance()->GetDocument()->m_cDocType.GetDocumentAttribute().m_encoding; switch( nFuncCode ){ //文字種変換、整形 @@ -115,14 +100,7 @@ void CConvertMediator::ConvMemory( CNativeW* pCMemory, EFunctionCode nFuncCode, case F_LTRIM: CConvert_Trim(true, bExtEol).CallConvert(pCMemory); break; // 2001.12.03 hor case F_RTRIM: CConvert_Trim(false, bExtEol).CallConvert(pCMemory); break; // 2001.12.03 hor //コード変換(xxx2SJIS) - // 2014.02.10 Moca F_CODECNV_AUTO2SJIS追加。自動判別でSJIS, Latin1, CESU8になった場合をサポート - case F_CODECNV_AUTO2SJIS: - { - int nFlag = true; - std::unique_ptr pcCode( CCodeFactory::CreateCodeBase(ecode, nFlag) ); - pcCode->CodeToUnicode(*(pCMemory->_GetMemory()), pCMemory); - } - break; + case F_CODECNV_AUTO2SJIS: CConvert_CodeAutoToSjis(sEncodingConfig).CallConvert(pCMemory); break; case F_CODECNV_EMAIL: CJis::JISToUnicode(*(pCMemory->_GetMemory()), pCMemory, true); break; case F_CODECNV_EUC2SJIS: CEuc::EUCToUnicode(*(pCMemory->_GetMemory()), pCMemory); break; case F_CODECNV_UNICODE2SJIS: /* 無変換 */ break; diff --git a/sakura_core/convert/CConvert_CodeAutoToSjis.cpp b/sakura_core/convert/CConvert_CodeAutoToSjis.cpp new file mode 100644 index 0000000000..d524091181 --- /dev/null +++ b/sakura_core/convert/CConvert_CodeAutoToSjis.cpp @@ -0,0 +1,80 @@ +/*! @file */ +/* + Copyright (C) 2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include "StdAfx.h" +#include "CConvert_CodeAutoToSjis.h" + +#include "charset/CCodeFactory.h" +#include "charset/CCodeMediator.h" + +/*! + コンストラクタ + */ +CConvert_CodeAutoToSjis::CConvert_CodeAutoToSjis(const SEncodingConfig& sEncodingConfig) noexcept + : m_sEncodingConfig(sEncodingConfig) +{ +} + +/*! + 文字コード変換 自動判別→SJIS + + @date 2014/02/10 Moca F_CODECNV_AUTO2SJIS追加。 + */ +bool CConvert_CodeAutoToSjis::DoConvert(CNativeW* pcData) +{ + // Shift-JISに変換する(変換エラーは無視する) + const auto bin = CCodeFactory::CreateCodeBase(CODE_SJIS)->UnicodeToCode(*pcData); + + // バイナリシーケンスの文字コードを自動検出する + CCodeMediator m(m_sEncodingConfig); + ECodeType eCodeType = m.CheckKanjiCode(reinterpret_cast(bin.data()), bin.length()); + + // 検出された文字コードに基づいて変換に使うCCodeBaseを生成する + std::unique_ptr pcCodeBase; + switch (eCodeType) + { + case CODE_JIS: + // JIS変換はbase64デコードを行うモードを使う + pcCodeBase = std::unique_ptr(CCodeFactory::CreateCodeBase(CODE_JIS, true)); + break; + + case CODE_EUC: + case CODE_UNICODE: + case CODE_UNICODEBE: + case CODE_UTF8: + case CODE_UTF7: + // サポートされているその他の変換 + pcCodeBase = CCodeFactory::CreateCodeBase(eCodeType); + break; + + default: + // サポートされていない変換は失敗扱いにする(変換しない) + return false; + } + + // 検出された文字コードに基づいてUnicode変換する(変換エラーは無視する) + *pcData = pcCodeBase->CodeToUnicode(bin); + + return true; +} diff --git a/sakura_core/convert/CConvert_CodeAutoToSjis.h b/sakura_core/convert/CConvert_CodeAutoToSjis.h new file mode 100644 index 0000000000..48fc30a03f --- /dev/null +++ b/sakura_core/convert/CConvert_CodeAutoToSjis.h @@ -0,0 +1,37 @@ +/*! @file */ +/* + Copyright (C) 2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#pragma once + +#include "CConvert.h" +#include "types/CType.h" //SEncodingConfig + +//! 文字コード変換 自動判別→SJIS +class CConvert_CodeAutoToSjis final : public CConvert{ + SEncodingConfig m_sEncodingConfig; + +public: + explicit CConvert_CodeAutoToSjis(const SEncodingConfig& sEncodingConfig ) noexcept; + bool DoConvert(CNativeW* pcData) override; +}; From f76e09c90598e70130b3eede2d01172c6335a7a9 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 10 Apr 2021 16:56:53 +0900 Subject: [PATCH 0601/1024] =?UTF-8?q?CConvert=5FCodeFromSjis=E3=82=92?= =?UTF-8?q?=E6=8A=BD=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura/sakura.vcxproj | 2 + sakura/sakura.vcxproj.filters | 6 +++ sakura_core/convert/CConvert.cpp | 19 ++----- sakura_core/convert/CConvert_CodeFromSjis.cpp | 53 +++++++++++++++++++ sakura_core/convert/CConvert_CodeFromSjis.h | 37 +++++++++++++ 5 files changed, 103 insertions(+), 14 deletions(-) create mode 100644 sakura_core/convert/CConvert_CodeFromSjis.cpp create mode 100644 sakura_core/convert/CConvert_CodeFromSjis.h diff --git a/sakura/sakura.vcxproj b/sakura/sakura.vcxproj index 8973e5ce62..584169431f 100644 --- a/sakura/sakura.vcxproj +++ b/sakura/sakura.vcxproj @@ -318,6 +318,7 @@ + @@ -680,6 +681,7 @@ + diff --git a/sakura/sakura.vcxproj.filters b/sakura/sakura.vcxproj.filters index bb20bcbcd5..54b1a987dd 100644 --- a/sakura/sakura.vcxproj.filters +++ b/sakura/sakura.vcxproj.filters @@ -1106,6 +1106,9 @@ Cpp Source Files\convert + + Cpp Source Files\convert + @@ -2294,6 +2297,9 @@ Cpp Source Files\convert + + Cpp Source Files\convert + diff --git a/sakura_core/convert/CConvert.cpp b/sakura_core/convert/CConvert.cpp index 578134d586..73ef6ed5ba 100644 --- a/sakura_core/convert/CConvert.cpp +++ b/sakura_core/convert/CConvert.cpp @@ -35,6 +35,7 @@ #include "charset/CUtf8.h" #include "charset/CUtf7.h" #include "CConvert_CodeAutoToSjis.h" +#include "CConvert_CodeFromSjis.h" #include "CConvert_ToLower.h" #include "CConvert_ToUpper.h" #include "CConvert_ToHankaku.h" @@ -58,9 +59,6 @@ void CConvertMediator::ConvMemory( CNativeW* pCMemory, EFunctionCode nFuncCode, // xxx2SJIS: // 1. バッファの内容がANSI版相当になるよう Unicode→SJIS 変換する // 2. xxx→SJIS 変換後にバッファ内容をUNICODE版相当に戻す(SJIS→Unicode)のと等価な結果を得るために xxx→Unicode 変換する - // SJIS2xxx: - // 1. バッファ内容をANSI版相当に変換(Unicode→SJIS)後に SJIS→xxx 変換するのと等価な結果を得るために Unicode→xxx 変換する - // 2. バッファ内容をUNICODE版相当に戻すために SJIS→Unicode 変換する switch( nFuncCode ){ //コード変換(xxx2SJIS) @@ -72,11 +70,6 @@ void CConvertMediator::ConvMemory( CNativeW* pCMemory, EFunctionCode nFuncCode, case F_CODECNV_UTF72SJIS: CShiftJis::UnicodeToSJIS(*pCMemory, pCMemory->_GetMemory()); break; - //コード変換(SJIS2xxx) - case F_CODECNV_SJIS2JIS: CJis::UnicodeToJIS(*pCMemory, pCMemory->_GetMemory()); break; - case F_CODECNV_SJIS2EUC: CEuc::UnicodeToEUC(*pCMemory, pCMemory->_GetMemory()); break; - case F_CODECNV_SJIS2UTF8: CUtf8::UnicodeToUTF8(*pCMemory, pCMemory->_GetMemory()); break; - case F_CODECNV_SJIS2UTF7: CUtf7::UnicodeToUTF7(*pCMemory, pCMemory->_GetMemory()); break; } bool bExtEol = GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol; @@ -108,12 +101,10 @@ void CConvertMediator::ConvMemory( CNativeW* pCMemory, EFunctionCode nFuncCode, case F_CODECNV_UTF82SJIS: CUtf8::UTF8ToUnicode(*(pCMemory->_GetMemory()), pCMemory); break; case F_CODECNV_UTF72SJIS: CUtf7::UTF7ToUnicode(*(pCMemory->_GetMemory()), pCMemory); break; //コード変換(SJIS2xxx) - case F_CODECNV_SJIS2JIS: - case F_CODECNV_SJIS2EUC: - case F_CODECNV_SJIS2UTF8: - case F_CODECNV_SJIS2UTF7: - CShiftJis::SJISToUnicode(*(pCMemory->_GetMemory()), pCMemory); - break; + case F_CODECNV_SJIS2JIS: CConvert_CodeFromSjis(CODE_JIS).CallConvert(pCMemory); break; + case F_CODECNV_SJIS2EUC: CConvert_CodeFromSjis(CODE_EUC).CallConvert(pCMemory); break; + case F_CODECNV_SJIS2UTF8: CConvert_CodeFromSjis(CODE_UTF8).CallConvert(pCMemory); break; + case F_CODECNV_SJIS2UTF7: CConvert_CodeFromSjis(CODE_UTF7).CallConvert(pCMemory); break; } return; diff --git a/sakura_core/convert/CConvert_CodeFromSjis.cpp b/sakura_core/convert/CConvert_CodeFromSjis.cpp new file mode 100644 index 0000000000..6e2eae2d10 --- /dev/null +++ b/sakura_core/convert/CConvert_CodeFromSjis.cpp @@ -0,0 +1,53 @@ +/*! @file */ +/* + Copyright (C) 2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include "StdAfx.h" +#include "CConvert_CodeFromSjis.h" + +#include "charset/CCodeFactory.h" + +/*! + コンストラクタ + */ +CConvert_CodeFromSjis::CConvert_CodeFromSjis(ECodeType eCodeType) noexcept + : m_eCodeType(eCodeType) +{ +} + +/*! + 文字コード変換 SJIS→xxx + + @date 2009/03/26 ryoji コード変換はできるだけANSI版のsakuraと互換の結果が得られるように実装する + */ +bool CConvert_CodeFromSjis::DoConvert(CNativeW* pcData) +{ + // バッファ内容をANSI版相当に変換(Unicode→SJIS)後に SJIS→xxx 変換するのと等価な結果を得るために + // Unicode→xxx 変換する + const auto bin = CCodeFactory::CreateCodeBase(m_eCodeType)->UnicodeToCode(*pcData); + + // バッファ内容をUNICODE版相当に戻すために SJIS→Unicode 変換する + *pcData = CCodeFactory::CreateCodeBase(CODE_SJIS)->CodeToUnicode(bin); + + return true; +} diff --git a/sakura_core/convert/CConvert_CodeFromSjis.h b/sakura_core/convert/CConvert_CodeFromSjis.h new file mode 100644 index 0000000000..6949066d7c --- /dev/null +++ b/sakura_core/convert/CConvert_CodeFromSjis.h @@ -0,0 +1,37 @@ +/*! @file */ +/* + Copyright (C) 2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#pragma once + +#include "CConvert.h" +#include "charset/charset.h" + +//! 文字コード変換 SJIS→xxx +class CConvert_CodeFromSjis final : public CConvert{ + ECodeType m_eCodeType; + +public: + explicit CConvert_CodeFromSjis(ECodeType eCoceType) noexcept; + bool DoConvert(CNativeW* pcData) override; +}; From 0ed03fda777f63f951df41cd7f2d4c275cb34f69 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 10 Apr 2021 17:15:26 +0900 Subject: [PATCH 0602/1024] =?UTF-8?q?CConvert=5FCodeToSjis=E3=82=92?= =?UTF-8?q?=E6=8A=BD=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura/sakura.vcxproj | 2 + sakura/sakura.vcxproj.filters | 6 ++ sakura_core/convert/CConvert.cpp | 37 +++--------- sakura_core/convert/CConvert_CodeToSjis.cpp | 64 +++++++++++++++++++++ sakura_core/convert/CConvert_CodeToSjis.h | 37 ++++++++++++ 5 files changed, 116 insertions(+), 30 deletions(-) create mode 100644 sakura_core/convert/CConvert_CodeToSjis.cpp create mode 100644 sakura_core/convert/CConvert_CodeToSjis.h diff --git a/sakura/sakura.vcxproj b/sakura/sakura.vcxproj index 584169431f..a3c8836a57 100644 --- a/sakura/sakura.vcxproj +++ b/sakura/sakura.vcxproj @@ -319,6 +319,7 @@ + @@ -682,6 +683,7 @@ + diff --git a/sakura/sakura.vcxproj.filters b/sakura/sakura.vcxproj.filters index 54b1a987dd..34baf00529 100644 --- a/sakura/sakura.vcxproj.filters +++ b/sakura/sakura.vcxproj.filters @@ -1109,6 +1109,9 @@ Cpp Source Files\convert + + Cpp Source Files\convert + @@ -2300,6 +2303,9 @@ Cpp Source Files\convert + + Cpp Source Files\convert + diff --git a/sakura_core/convert/CConvert.cpp b/sakura_core/convert/CConvert.cpp index 73ef6ed5ba..283ae856ed 100644 --- a/sakura_core/convert/CConvert.cpp +++ b/sakura_core/convert/CConvert.cpp @@ -27,15 +27,9 @@ #include "func/Funccode.h" #include "CEol.h" #include "charset/charcode.h" -#include "charset/CCodeFactory.h" -#include "charset/CShiftJis.h" -#include "charset/CJis.h" -#include "charset/CEuc.h" -#include "charset/CUnicodeBe.h" -#include "charset/CUtf8.h" -#include "charset/CUtf7.h" #include "CConvert_CodeAutoToSjis.h" #include "CConvert_CodeFromSjis.h" +#include "CConvert_CodeToSjis.h" #include "CConvert_ToLower.h" #include "CConvert_ToUpper.h" #include "CConvert_ToHankaku.h" @@ -55,23 +49,6 @@ /* 機能種別によるバッファの変換 */ void CConvertMediator::ConvMemory( CNativeW* pCMemory, EFunctionCode nFuncCode, CKetaXInt nTabWidth, int nStartColumn ) { - // コード変換はできるだけANSI版のsakuraと互換の結果が得られるように実装する // 2009.03.26 ryoji - // xxx2SJIS: - // 1. バッファの内容がANSI版相当になるよう Unicode→SJIS 変換する - // 2. xxx→SJIS 変換後にバッファ内容をUNICODE版相当に戻す(SJIS→Unicode)のと等価な結果を得るために xxx→Unicode 変換する - - switch( nFuncCode ){ - //コード変換(xxx2SJIS) - case F_CODECNV_EMAIL: - case F_CODECNV_EUC2SJIS: - case F_CODECNV_UNICODE2SJIS: - case F_CODECNV_UNICODEBE2SJIS: - case F_CODECNV_UTF82SJIS: - case F_CODECNV_UTF72SJIS: - CShiftJis::UnicodeToSJIS(*pCMemory, pCMemory->_GetMemory()); - break; - } - bool bExtEol = GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol; const SEncodingConfig& sEncodingConfig = CEditWnd::getInstance()->GetDocument()->m_cDocType.GetDocumentAttribute().m_encoding; @@ -94,12 +71,12 @@ void CConvertMediator::ConvMemory( CNativeW* pCMemory, EFunctionCode nFuncCode, case F_RTRIM: CConvert_Trim(false, bExtEol).CallConvert(pCMemory); break; // 2001.12.03 hor //コード変換(xxx2SJIS) case F_CODECNV_AUTO2SJIS: CConvert_CodeAutoToSjis(sEncodingConfig).CallConvert(pCMemory); break; - case F_CODECNV_EMAIL: CJis::JISToUnicode(*(pCMemory->_GetMemory()), pCMemory, true); break; - case F_CODECNV_EUC2SJIS: CEuc::EUCToUnicode(*(pCMemory->_GetMemory()), pCMemory); break; - case F_CODECNV_UNICODE2SJIS: /* 無変換 */ break; - case F_CODECNV_UNICODEBE2SJIS: CUnicodeBe::UnicodeBEToUnicode(*(pCMemory->_GetMemory()), pCMemory); break; - case F_CODECNV_UTF82SJIS: CUtf8::UTF8ToUnicode(*(pCMemory->_GetMemory()), pCMemory); break; - case F_CODECNV_UTF72SJIS: CUtf7::UTF7ToUnicode(*(pCMemory->_GetMemory()), pCMemory); break; + case F_CODECNV_EMAIL: CConvert_CodeToSjis(CODE_JIS).CallConvert(pCMemory); break; + case F_CODECNV_EUC2SJIS: CConvert_CodeToSjis(CODE_EUC).CallConvert(pCMemory); break; + case F_CODECNV_UNICODE2SJIS: CConvert_CodeToSjis(CODE_UNICODE).CallConvert(pCMemory); break; + case F_CODECNV_UNICODEBE2SJIS: CConvert_CodeToSjis(CODE_UNICODEBE).CallConvert(pCMemory); break; + case F_CODECNV_UTF82SJIS: CConvert_CodeToSjis(CODE_UTF8).CallConvert(pCMemory); break; + case F_CODECNV_UTF72SJIS: CConvert_CodeToSjis(CODE_UTF7).CallConvert(pCMemory); break; //コード変換(SJIS2xxx) case F_CODECNV_SJIS2JIS: CConvert_CodeFromSjis(CODE_JIS).CallConvert(pCMemory); break; case F_CODECNV_SJIS2EUC: CConvert_CodeFromSjis(CODE_EUC).CallConvert(pCMemory); break; diff --git a/sakura_core/convert/CConvert_CodeToSjis.cpp b/sakura_core/convert/CConvert_CodeToSjis.cpp new file mode 100644 index 0000000000..f79e5b8f70 --- /dev/null +++ b/sakura_core/convert/CConvert_CodeToSjis.cpp @@ -0,0 +1,64 @@ +/*! @file */ +/* + Copyright (C) 2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include "StdAfx.h" +#include "CConvert_CodeToSjis.h" + +#include "charset/CCodeFactory.h" + +/*! + コンストラクタ + */ +CConvert_CodeToSjis::CConvert_CodeToSjis(ECodeType eCodeType) noexcept + : m_eCodeType(eCodeType) +{ +} + +/*! + 文字コード変換 xxx→SJIS + + @date 2009/03/26 ryoji コード変換はできるだけANSI版のsakuraと互換の結果が得られるように実装する + */ +bool CConvert_CodeToSjis::DoConvert(CNativeW* pcData) +{ + // バッファの内容がANSI版相当になるよう Unicode→SJIS 変換する + const auto bin = CCodeFactory::CreateCodeBase(CODE_SJIS)->UnicodeToCode(*pcData); + + // xxx→SJIS 変換後にバッファ内容をUNICODE版相当に戻す(SJIS→Unicode)のと等価な結果を得るために + // xxx→Unicode 変換する + std::unique_ptr pcCodeBase; + if (m_eCodeType == CODE_JIS) { + // JIS変換はbase64デコードを行うモードを使う + pcCodeBase = std::unique_ptr(CCodeFactory::CreateCodeBase(CODE_JIS, true)); + } + else { + // その他の変換 + pcCodeBase = CCodeFactory::CreateCodeBase(m_eCodeType); + } + + // 指定された文字コードに基づいてUnicode変換する(変換エラーは無視する) + *pcData = pcCodeBase->CodeToUnicode(bin); + + return true; +} diff --git a/sakura_core/convert/CConvert_CodeToSjis.h b/sakura_core/convert/CConvert_CodeToSjis.h new file mode 100644 index 0000000000..affdcffa06 --- /dev/null +++ b/sakura_core/convert/CConvert_CodeToSjis.h @@ -0,0 +1,37 @@ +/*! @file */ +/* + Copyright (C) 2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#pragma once + +#include "CConvert.h" +#include "charset/charset.h" + +//! 文字コード変換 xxx→SJIS +class CConvert_CodeToSjis final : public CConvert{ + ECodeType m_eCodeType; + +public: + explicit CConvert_CodeToSjis(ECodeType eCoceType) noexcept; + bool DoConvert(CNativeW* pcData) override; +}; From af457d3347b5679af5fbec09ce230f845c672fee Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Sun, 11 Apr 2021 19:30:17 +0900 Subject: [PATCH 0603/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/cmd/CViewCommander_Cursor.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sakura_core/cmd/CViewCommander_Cursor.cpp b/sakura_core/cmd/CViewCommander_Cursor.cpp index 9096e95299..2f0ea2a32d 100644 --- a/sakura_core/cmd/CViewCommander_Cursor.cpp +++ b/sakura_core/cmd/CViewCommander_Cursor.cpp @@ -745,7 +745,7 @@ void CViewCommander::Command_1PageUp( bool bSelect, CLayoutYInt nScrollNum ) } auto& caret = GetCaret(); auto prevCaretPos = caret.GetCaretLayoutPos(); - bool bCursorVLine = m_pCommanderView->m_pTypeData->m_ColorInfoArr[COLORIDX_CURSORVLINE].m_bDisp; + bool bNoDispCursorVLine = m_pCommanderView->m_pTypeData->m_ColorInfoArr[COLORIDX_CURSORVLINE].m_bDisp == false; caret.Cursor_UPDOWN( -nScrollNum, bSelect ); auto currCaretPos = caret.GetCaretLayoutPos(); CLayoutInt nScrolled = m_pCommanderView->ScrollAtV( nViewTopLine - nScrollNum ); @@ -753,7 +753,7 @@ void CViewCommander::Command_1PageUp( bool bSelect, CLayoutYInt nScrollNum ) m_pCommanderView->SetDrawSwitch(bDrawSwitchOld); // カーソル位置が変化しなかった、かつ、スクロール行数が0だった場合、描画を省く // タイプ別設定の「カーソル位置縦線」有効時には省かない - if (!bCursorVLine && prevCaretPos == currCaretPos && nScrolled == 0) { + if (bNoDispCursorVLine && prevCaretPos == currCaretPos && nScrolled == 0) { return; } m_pCommanderView->RedrawAll(); @@ -782,7 +782,7 @@ void CViewCommander::Command_1PageDown( bool bSelect, CLayoutYInt nScrollNum ) } auto& caret = GetCaret(); auto prevCaretPos = caret.GetCaretLayoutPos(); - bool bCursorVLine = m_pCommanderView->m_pTypeData->m_ColorInfoArr[COLORIDX_CURSORVLINE].m_bDisp; + bool bNoDispCursorVLine = m_pCommanderView->m_pTypeData->m_ColorInfoArr[COLORIDX_CURSORVLINE].m_bDisp == false; caret.Cursor_UPDOWN( nScrollNum, bSelect ); auto currCaretPos = caret.GetCaretLayoutPos(); CLayoutInt nScrolled = m_pCommanderView->ScrollAtV( nViewTopLine + nScrollNum ); @@ -790,7 +790,7 @@ void CViewCommander::Command_1PageDown( bool bSelect, CLayoutYInt nScrollNum ) m_pCommanderView->SetDrawSwitch(bDrawSwitchOld); // カーソル位置が変化しなかった、かつ、スクロール行数が0だった場合、描画を省く // タイプ別設定の「カーソル位置縦線」有効時には省かない - if (!bCursorVLine && prevCaretPos == currCaretPos && nScrolled == 0) { + if (bNoDispCursorVLine && prevCaretPos == currCaretPos && nScrolled == 0) { return; } m_pCommanderView->RedrawAll(); From e54ee7617feac6c75715d8c20d77bbc7eae6902c Mon Sep 17 00:00:00 2001 From: dep5 <66961537+dep5@users.noreply.github.com> Date: Sun, 11 Apr 2021 23:47:40 +0900 Subject: [PATCH 0604/1024] =?UTF-8?q?10.0(=E6=9C=80=E6=96=B0=E3=81=AE?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=82=B9=E3=83=88=E3=83=BC=E3=83=AB=E3=81=95?= =?UTF-8?q?=E3=82=8C=E3=81=A6=E3=81=84=E3=82=8B=E3=83=90=E3=83=BC=E3=82=B8?= =?UTF-8?q?=E3=83=A7=E3=83=B3)=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vcx-props/vcxcompat.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vcx-props/vcxcompat.props b/vcx-props/vcxcompat.props index 4716c13a17..d83904fe00 100644 --- a/vcx-props/vcxcompat.props +++ b/vcx-props/vcxcompat.props @@ -4,7 +4,7 @@ 10.0.17763.0 - 10.0.18362.0 + 10.0 v141 From e1b12faf61207ebc3ae03634323b2a5459472bd0 Mon Sep 17 00:00:00 2001 From: dep5 <66961537+dep5@users.noreply.github.com> Date: Mon, 12 Apr 2021 21:04:36 +0900 Subject: [PATCH 0605/1024] =?UTF-8?q?windows10sdk=E3=82=92=E5=89=8A?= =?UTF-8?q?=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vsconfig | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.vsconfig b/.vsconfig index c27351ed92..71986b1a96 100644 --- a/.vsconfig +++ b/.vsconfig @@ -6,10 +6,9 @@ "microsoft.visualstudio.component.vc.diagnostictools", "microsoft.visualstudio.component.vc.cmake.project", "microsoft.visualstudio.component.vc.atl", - "microsoft.visualstudio.component.windows10sdk.17763", "microsoft.visualstudio.component.vc.cmake.project", "microsoft.visualstudio.component.vc.testadapterforboosttest", "microsoft.visualstudio.component.vc.testadapterforgoogletest", "microsoft.visualstudio.componentgroup.nativedesktop.win81" ] -} \ No newline at end of file +} From ebb36479f93f060868fb513331387c59dec2a6ed Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 11 Apr 2021 16:58:19 +0900 Subject: [PATCH 0606/1024] =?UTF-8?q?=E6=A9=9F=E8=83=BD=E7=A8=AE=E5=88=A5?= =?UTF-8?q?=E3=81=AB=E3=82=88=E3=82=8B=E3=83=90=E3=83=83=E3=83=95=E3=82=A1?= =?UTF-8?q?=E5=A4=89=E6=8F=9B=E3=81=ABfacade=E3=83=91=E3=82=BF=E3=83=BC?= =?UTF-8?q?=E3=83=B3=E3=82=92=E4=BD=BF=E3=81=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/convert/CConvert.cpp | 99 +++++++++++++-------- sakura_core/convert/CConvert.h | 63 ++++++++----- sakura_core/view/CEditView.cpp | 8 +- tests/unittests/test-cconvert.cpp | 73 ++++++++++++++- tests/unittests/test-printEFunctionCode.cpp | 66 ++++++++++++++ tests/unittests/tests1.vcxproj | 1 + tests/unittests/tests1.vcxproj.filters | 3 + 7 files changed, 250 insertions(+), 63 deletions(-) create mode 100644 tests/unittests/test-printEFunctionCode.cpp diff --git a/sakura_core/convert/CConvert.cpp b/sakura_core/convert/CConvert.cpp index 283ae856ed..19563d3e0b 100644 --- a/sakura_core/convert/CConvert.cpp +++ b/sakura_core/convert/CConvert.cpp @@ -24,9 +24,7 @@ */ #include "StdAfx.h" #include "CConvert.h" -#include "func/Funccode.h" -#include "CEol.h" -#include "charset/charcode.h" + #include "CConvert_CodeAutoToSjis.h" #include "CConvert_CodeFromSjis.h" #include "CConvert_CodeToSjis.h" @@ -44,45 +42,76 @@ #include "CConvert_ToZenkata.h" #include "CConvert_Trim.h" -#include "window/CEditWnd.h" +#include "CSelectLang.h" +#include "String_define.h" +#include "util/MessageBoxF.h" + +/*! + コンストラクタ + */ +CConversionFacade::CConversionFacade( + CKetaXInt nTabWidth, + int nStartColumn, + bool bEnableExtEol, + const SEncodingConfig& sEncodingConfig, + CCharWidthCache& cCharWidthCache +) + : m_nTabWidth((Int)nTabWidth) + , m_nStartColumn(nStartColumn) + , m_bEnableExtEol(bEnableExtEol) + , m_sEncodingConfig(sEncodingConfig) + , m_cCharWidthCache(cCharWidthCache) +{ +} /* 機能種別によるバッファの変換 */ -void CConvertMediator::ConvMemory( CNativeW* pCMemory, EFunctionCode nFuncCode, CKetaXInt nTabWidth, int nStartColumn ) +bool CConversionFacade::ConvMemory(EFunctionCode eFuncCode, CNativeW& cData) noexcept { - bool bExtEol = GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol; - const SEncodingConfig& sEncodingConfig = CEditWnd::getInstance()->GetDocument()->m_cDocType.GetDocumentAttribute().m_encoding; + if (CallConvert(eFuncCode, &cData)) { + return true; + } + else { + // L"変換でエラーが発生しました" + ErrorMessage(nullptr, LS(STR_CONVERT_ERR)); + return false; + } +} - switch( nFuncCode ){ +//! 変換機能を呼び出す +bool CConversionFacade::CallConvert(EFunctionCode eFuncCode, CNativeW* pcData) noexcept +{ + switch( eFuncCode ){ //文字種変換、整形 - case F_TOLOWER: CConvert_ToLower().CallConvert(pCMemory); break; // 小文字 - case F_TOUPPER: CConvert_ToUpper().CallConvert(pCMemory); break; // 大文字 - case F_TOHANKAKU: CConvert_ToHankaku().CallConvert(pCMemory); break; // 全角→半角 - case F_TOHANKATA: CConvert_ZenkataToHankata().CallConvert(pCMemory); break; // 全角カタカナ→半角カタカナ - case F_TOZENEI: CConvert_HaneisuToZeneisu().CallConvert(pCMemory); break; // 半角英数→全角英数 - case F_TOHANEI: CConvert_ZeneisuToHaneisu().CallConvert(pCMemory); break; // 全角英数→半角英数 - case F_TOZENKAKUKATA: CConvert_ToZenkata().CallConvert(pCMemory); break; // 半角+全ひら→全角・カタカナ - case F_TOZENKAKUHIRA: CConvert_ToZenhira().CallConvert(pCMemory); break; // 半角+全カタ→全角・ひらがな - case F_HANKATATOZENKATA: CConvert_HankataToZenkata().CallConvert(pCMemory); break; // 半角カタカナ→全角カタカナ - case F_HANKATATOZENHIRA: CConvert_HankataToZenhira().CallConvert(pCMemory); break; // 半角カタカナ→全角ひらがな + case F_TOLOWER: return CConvert_ToLower().DoConvert(pcData); // 小文字 + case F_TOUPPER: return CConvert_ToUpper().DoConvert(pcData); // 大文字 + case F_TOHANKAKU: return CConvert_ToHankaku().DoConvert(pcData); // 全角→半角 + case F_TOHANKATA: return CConvert_ZenkataToHankata().DoConvert(pcData); // 全角カタカナ→半角カタカナ + case F_TOZENEI: return CConvert_HaneisuToZeneisu().DoConvert(pcData); // 半角英数→全角英数 + case F_TOHANEI: return CConvert_ZeneisuToHaneisu().DoConvert(pcData); // 全角英数→半角英数 + case F_TOZENKAKUKATA: return CConvert_ToZenkata().DoConvert(pcData); // 半角+全ひら→全角・カタカナ + case F_TOZENKAKUHIRA: return CConvert_ToZenhira().DoConvert(pcData); // 半角+全カタ→全角・ひらがな + case F_HANKATATOZENKATA: return CConvert_HankataToZenkata().DoConvert(pcData); // 半角カタカナ→全角カタカナ + case F_HANKATATOZENHIRA: return CConvert_HankataToZenhira().DoConvert(pcData); // 半角カタカナ→全角ひらがな //文字種変換、整形 - case F_TABTOSPACE: CConvert_TabToSpace((Int)nTabWidth, nStartColumn, bExtEol).CallConvert(pCMemory);break; // TAB→空白 - case F_SPACETOTAB: CConvert_SpaceToTab((Int)nTabWidth, nStartColumn, bExtEol, GetCharWidthCache()).CallConvert(pCMemory);break; // 空白→TAB - case F_LTRIM: CConvert_Trim(true, bExtEol).CallConvert(pCMemory); break; // 2001.12.03 hor - case F_RTRIM: CConvert_Trim(false, bExtEol).CallConvert(pCMemory); break; // 2001.12.03 hor + case F_TABTOSPACE: return CConvert_TabToSpace(m_nTabWidth, m_nStartColumn, m_bEnableExtEol).DoConvert(pcData); // TAB→空白 + case F_SPACETOTAB: return CConvert_SpaceToTab(m_nTabWidth, m_nStartColumn, m_bEnableExtEol, m_cCharWidthCache).DoConvert(pcData); // 空白→TAB + case F_LTRIM: return CConvert_Trim(true, m_bEnableExtEol).DoConvert(pcData); + case F_RTRIM: return CConvert_Trim(false, m_bEnableExtEol).DoConvert(pcData); //コード変換(xxx2SJIS) - case F_CODECNV_AUTO2SJIS: CConvert_CodeAutoToSjis(sEncodingConfig).CallConvert(pCMemory); break; - case F_CODECNV_EMAIL: CConvert_CodeToSjis(CODE_JIS).CallConvert(pCMemory); break; - case F_CODECNV_EUC2SJIS: CConvert_CodeToSjis(CODE_EUC).CallConvert(pCMemory); break; - case F_CODECNV_UNICODE2SJIS: CConvert_CodeToSjis(CODE_UNICODE).CallConvert(pCMemory); break; - case F_CODECNV_UNICODEBE2SJIS: CConvert_CodeToSjis(CODE_UNICODEBE).CallConvert(pCMemory); break; - case F_CODECNV_UTF82SJIS: CConvert_CodeToSjis(CODE_UTF8).CallConvert(pCMemory); break; - case F_CODECNV_UTF72SJIS: CConvert_CodeToSjis(CODE_UTF7).CallConvert(pCMemory); break; + case F_CODECNV_AUTO2SJIS: return CConvert_CodeAutoToSjis(m_sEncodingConfig).DoConvert(pcData); + case F_CODECNV_EMAIL: return CConvert_CodeToSjis(CODE_JIS).DoConvert(pcData); + case F_CODECNV_EUC2SJIS: return CConvert_CodeToSjis(CODE_EUC).DoConvert(pcData); + case F_CODECNV_UNICODE2SJIS: return CConvert_CodeToSjis(CODE_UNICODE).DoConvert(pcData); + case F_CODECNV_UNICODEBE2SJIS: return CConvert_CodeToSjis(CODE_UNICODEBE).DoConvert(pcData); + case F_CODECNV_UTF82SJIS: return CConvert_CodeToSjis(CODE_UTF8).DoConvert(pcData); + case F_CODECNV_UTF72SJIS: return CConvert_CodeToSjis(CODE_UTF7).DoConvert(pcData); //コード変換(SJIS2xxx) - case F_CODECNV_SJIS2JIS: CConvert_CodeFromSjis(CODE_JIS).CallConvert(pCMemory); break; - case F_CODECNV_SJIS2EUC: CConvert_CodeFromSjis(CODE_EUC).CallConvert(pCMemory); break; - case F_CODECNV_SJIS2UTF8: CConvert_CodeFromSjis(CODE_UTF8).CallConvert(pCMemory); break; - case F_CODECNV_SJIS2UTF7: CConvert_CodeFromSjis(CODE_UTF7).CallConvert(pCMemory); break; + case F_CODECNV_SJIS2JIS: return CConvert_CodeFromSjis(CODE_JIS).DoConvert(pcData); + case F_CODECNV_SJIS2EUC: return CConvert_CodeFromSjis(CODE_EUC).DoConvert(pcData); + case F_CODECNV_SJIS2UTF8: return CConvert_CodeFromSjis(CODE_UTF8).DoConvert(pcData); + case F_CODECNV_SJIS2UTF7: return CConvert_CodeFromSjis(CODE_UTF7).DoConvert(pcData); + default: + break; } - - return; + return false; } diff --git a/sakura_core/convert/CConvert.h b/sakura_core/convert/CConvert.h index be520e4418..9895924172 100644 --- a/sakura_core/convert/CConvert.h +++ b/sakura_core/convert/CConvert.h @@ -27,40 +27,55 @@ #define SAKURA_CCONVERT_781CEC40_5400_4D47_959B_0718AEA82A9B_H_ #pragma once -//2007.10.02 kobake CEditViewから分離 +#include "Funccode_enum.h" // EFunctionCode +#include "basis/SakuraBasis.h" // CKetaXInt +#include "charset/charcode.h" // CCharWidthCache +#include "mem/CNativeW.h" +#include "types/CType.h" // SEncodingConfig -#include "CSelectLang.h" -#include "Funccode_enum.h" // EFunctionCode -#include "String_define.h" -#include "basis/SakuraBasis.h" -#include "debug/Debug2.h" -#include "util/MessageBoxF.h" +/*! + 各種変換機能呼出の窓口となるクラス + */ +class CConversionFacade { + int m_nTabWidth; + int m_nStartColumn; + bool m_bEnableExtEol; + SEncodingConfig m_sEncodingConfig; + CCharWidthCache& m_cCharWidthCache; -class CNativeW; - -class CConvertMediator{ public: + explicit CConversionFacade( + CKetaXInt nTabWidth, + int nStartColumn, + bool bEnableExtEol, + const SEncodingConfig& sEncodingConfig, + CCharWidthCache& cCharWidthCache + ); + //! 機能種別によるバッファの変換 - static void ConvMemory( CNativeW* pCMemory, EFunctionCode nFuncCode, CKetaXInt nTabWidth, int nStartColumn ); + bool ConvMemory(EFunctionCode eFuncCode, CNativeW& cData) noexcept; -protected: - static void Command_TRIM2( CNativeW* pCMemory , BOOL bLeft ); +private: + //! 変換機能を呼び出す + bool CallConvert(EFunctionCode eFuncCode, CNativeW* pcData) noexcept; }; +/*! + 各種コンバータの基底クラス + + @date 2007/10/02 kobake CEditViewから分離 + */ class CConvert{ public: - virtual ~CConvert(){} - - //インターフェース - void CallConvert( CNativeW* pcData ) - { - bool bRet=DoConvert(pcData); - if(!bRet){ - ErrorMessage(NULL,LS(STR_CONVERT_ERR)); - } - } + CConvert() noexcept = default; + CConvert(const CConvert&) = delete; + CConvert& operator = (const CConvert&) = delete; + CConvert(CConvert&&) noexcept = delete; + CConvert& operator = (CConvert&&) noexcept = delete; + virtual ~CConvert() noexcept = default; //実装 - virtual bool DoConvert( CNativeW* pcData )=0; + virtual bool DoConvert(CNativeW* pcData) = 0; }; + #endif /* SAKURA_CCONVERT_781CEC40_5400_4D47_959B_0718AEA82A9B_H_ */ diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index 7d2f6a6e12..0af4366993 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -55,6 +55,7 @@ #include "CMarkMgr.h"/// #include "types/CTypeSupport.h" #include "convert/CConvert.h" +#include "util/MessageBoxF.h" #include "util/RegKey.h" #include "util/string_ex2.h" #include "util/os.h" //WM_MOUSEWHEEL,IMR_RECONVERTSTRING,WM_XBUTTON*,IMR_CONFIRMRECONVERTSTRING @@ -63,6 +64,9 @@ #include "apiwrap/StdApi.h" #include "config/system_constants.h" +#include "CSelectLang.h" +#include "String_define.h" + LRESULT CALLBACK EditViewWndProc( HWND, UINT, WPARAM, LPARAM ); VOID CALLBACK EditViewTimerProc( HWND, UINT, UINT_PTR, DWORD ); @@ -1407,7 +1411,7 @@ void CEditView::ConvSelectedArea( EFunctionCode nFuncCode ) { /* 機能種別によるバッファの変換 */ int nStartColumn = (Int)sPos.GetX2() / (Int)GetTextMetrics().GetLayoutXDefault(); - CConvertMediator::ConvMemory( &cmemBuf, nFuncCode, m_pcEditDoc->m_cLayoutMgr.GetTabSpaceKetas(), nStartColumn ); + CConversionFacade(m_pcEditDoc->m_cLayoutMgr.GetTabSpaceKetas(), nStartColumn, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol, m_pcEditDoc->m_cDocType.GetDocumentAttribute().m_encoding, GetCharWidthCache()).ConvMemory(nFuncCode, cmemBuf); /* 現在位置にデータを挿入 */ CLayoutPoint ptLayoutNew; // 挿入された部分の次の位置 @@ -1445,7 +1449,7 @@ void CEditView::ConvSelectedArea( EFunctionCode nFuncCode ) /* 機能種別によるバッファの変換 */ int nStartColum = (Int)GetSelectionInfo().m_sSelect.GetFrom().GetX2() / (Int)GetTextMetrics().GetLayoutXDefault(); - CConvertMediator::ConvMemory( &cmemBuf, nFuncCode, m_pcEditDoc->m_cLayoutMgr.GetTabSpaceKetas(), nStartColum ); + CConversionFacade(m_pcEditDoc->m_cLayoutMgr.GetTabSpaceKetas(), nStartColum, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol, m_pcEditDoc->m_cDocType.GetDocumentAttribute().m_encoding, GetCharWidthCache()).ConvMemory(nFuncCode, cmemBuf); /* データ置換 削除&挿入にも使える */ ReplaceData_CEditView( diff --git a/tests/unittests/test-cconvert.cpp b/tests/unittests/test-cconvert.cpp index 89b232b0f7..3016e9d07a 100644 --- a/tests/unittests/test-cconvert.cpp +++ b/tests/unittests/test-cconvert.cpp @@ -23,8 +23,11 @@ */ #include -#include "charset/charcode.h" #include "convert/CConvert.h" + +#include +#include + #include "convert/CConvert_HaneisuToZeneisu.h" #include "convert/CConvert_HankataToZenhira.h" #include "convert/CConvert_HankataToZenkata.h" @@ -38,7 +41,6 @@ #include "convert/CConvert_Trim.h" #include "convert/CConvert_ZeneisuToHaneisu.h" #include "convert/CConvert_ZenkataToHankata.h" -#include "mem/CNativeW.h" TEST(CConvert, ZenkataToHankata) { @@ -388,3 +390,70 @@ TEST(CConvert, Trim) EXPECT_TRUE(CConvert_Trim(true, false).DoConvert(&actual)); EXPECT_EQ(actual, expected); } + +//! googletestの出力に機能IDを出力させる +std::ostream& operator << (std::ostream& os, const EFunctionCode& eFuncCode); + +//!変換テストのためのテストパラメータ型 +using ConvTestParamType = std::tuple; + +//!変換テストのためのフィクスチャクラス +class ConvTest : public ::testing::TestWithParam {}; + +/*! + * @brief 機能コードによるバッファ変換のテスト + */ +TEST_P(ConvTest, test) +{ + const auto eFuncCode = std::get<0>(GetParam()); + std::wstring_view source = std::get<1>(GetParam()); + std::wstring_view expected = std::get<2>(GetParam()); + SEncodingConfig encoding; + CNativeW cmemBuf(source.data(), source.length()); + CConversionFacade( + 4, // タブ幅(タブ幅が半角スペース何個分かを指定する) + 0, // 変換開始桁位置 + false, // 拡張改行コードを有効にするかどうか + encoding, // 文字コード自動検出のオプション + CCharWidthCache() // 文字幅キャッシュ + ).ConvMemory(eFuncCode, cmemBuf); + + EXPECT_STREQ(expected.data(), cmemBuf.GetStringPtr()); +} + +/*! + * @brief パラメータテストをインスタンス化する + * 各変換機能の正常系をチェックするパターンで実体化させる + */ +INSTANTIATE_TEST_CASE_P(ParameterizedTestConv + , ConvTest + , ::testing::Values( + ConvTestParamType{ F_TOLOWER, L"AbCd", L"abcd" }, + ConvTestParamType{ F_TOUPPER, L"AbCd", L"ABCD" }, + ConvTestParamType{ F_TOHANKAKU, L"カナかなカナ", L"カナカナカナ" }, + ConvTestParamType{ F_TOHANKATA, L"カナかなカナ", L"カナかなカナ" }, + ConvTestParamType{ F_TOZENEI, L"AbCd", L"AbCd" }, + ConvTestParamType{ F_TOHANEI, L"AbCd", L"AbCd" }, + ConvTestParamType{ F_TOZENKAKUKATA, L"カナかなカナ", L"カナカナカナ" }, + ConvTestParamType{ F_TOZENKAKUHIRA, L"カナかなカナ", L"かなかなかな" }, + ConvTestParamType{ F_HANKATATOZENKATA, L"カナかなカナ", L"カナかなカナ" }, + ConvTestParamType{ F_HANKATATOZENHIRA, L"カナかなカナ", L"カナかなかな" }, + ConvTestParamType{ F_TABTOSPACE, L"\t", L" " }, + ConvTestParamType{ F_SPACETOTAB, L" ", L"\t" }, + ConvTestParamType{ F_LTRIM, L" x ", L"x " }, + ConvTestParamType{ F_RTRIM, L" x ", L" x" }, + ConvTestParamType{ F_CODECNV_EMAIL, L"\x1b$B2=$1%i%C%?\x1b(B!!", L"化けラッタ!!" }, + ConvTestParamType{ F_CODECNV_EUC2SJIS, L"イス、ア・鬣テ・ソ!!", L"化けラッタ!!" }, + ConvTestParamType{ F_CODECNV_UNICODE2SJIS, L"", L"" }, //FIXME: 機能しないため、呼出確認のみ。 + ConvTestParamType{ F_CODECNV_UNICODEBE2SJIS, L"", L"" }, //FIXME: 機能しないため、呼出確認のみ + ConvTestParamType{ F_CODECNV_UTF82SJIS, L"", L"" }, //FIXME: 機能しないため、呼出確認のみ + ConvTestParamType{ F_CODECNV_UTF72SJIS, L"+UxYwUTDpMMMwvwAhACE-", L"化けラッタ!!" }, + ConvTestParamType{ F_CODECNV_AUTO2SJIS, L"化けラッタ!!", L"化けラッタ!!" }, + ConvTestParamType{ F_CODECNV_AUTO2SJIS, L"\x1b$B2=$1%i%C%?\x1b(B!!", L"化けラッタ!!" }, + ConvTestParamType{ F_CODECNV_AUTO2SJIS, L"イス、ア・鬣テ・ソ!!", L"化けラッタ!!" }, + ConvTestParamType{ F_CODECNV_SJIS2JIS, L"化けラッタ!!", L"\x1b$B2=$1%i%C%?\x1b(B!!" }, + ConvTestParamType{ F_CODECNV_SJIS2EUC, L"化けラッタ!!", L"イス、ア・鬣テ・ソ!!" }, + ConvTestParamType{ F_CODECNV_SJIS2UTF8, L"", L"" }, //FIXME: 機能しないため、呼出確認のみ + ConvTestParamType{ F_CODECNV_SJIS2UTF7, L"化けラッタ!!", L"+UxYwUTDpMMMwvwAhACE-" } + ) +); diff --git a/tests/unittests/test-printEFunctionCode.cpp b/tests/unittests/test-printEFunctionCode.cpp new file mode 100644 index 0000000000..181eb0a004 --- /dev/null +++ b/tests/unittests/test-printEFunctionCode.cpp @@ -0,0 +1,66 @@ +/* + Copyright (C) 2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include + +#include "Funccode_enum.h" + +/*! + googletestの出力にEFunctionCodeを出力させる + + パラメータテストのパラメータにEFunctionCodeを渡した場合に文字列を併記して分かりやすくする。 + + テストで使用するコード値のみを定義してあるので、必要があれば追加定義すること。 + */ +std::ostream& operator << (std::ostream& os, const EFunctionCode& eFuncCode) +{ + switch( eFuncCode ){ + case F_TOLOWER: return os << u8"TOLOWER"; + case F_TOUPPER: return os << u8"TOUPPER"; + case F_TOHANKAKU: return os << u8"TOHANKAKU"; + case F_TOHANKATA: return os << u8"TOHANKATA"; + case F_TOZENEI: return os << u8"TOZENEI"; + case F_TOHANEI: return os << u8"TOHANEI"; + case F_TOZENKAKUKATA: return os << u8"TOZENKAKUKATA"; + case F_TOZENKAKUHIRA: return os << u8"TOZENKAKUHIRA"; + case F_HANKATATOZENKATA: return os << u8"HANKATATOZENKATA"; + case F_HANKATATOZENHIRA: return os << u8"HANKATATOZENHIRA"; + case F_TABTOSPACE: return os << u8"TABTOSPACE"; + case F_SPACETOTAB: return os << u8"SPACETOTAB"; + case F_LTRIM: return os << u8"LTRIM"; + case F_RTRIM: return os << u8"RTRIM"; + case F_CODECNV_AUTO2SJIS: return os << u8"CODECNV_AUTO2SJIS"; + case F_CODECNV_EMAIL: return os << u8"CODECNV_JIS2SJIS"; + case F_CODECNV_EUC2SJIS: return os << u8"CODECNV_EUC2SJIS"; + case F_CODECNV_UNICODE2SJIS: return os << u8"CODECNV_UTF16LE2SJIS"; + case F_CODECNV_UNICODEBE2SJIS: return os << u8"CODECNV_UTF16BE2SJIS"; + case F_CODECNV_UTF82SJIS: return os << u8"CODECNV_UTF82SJIS"; + case F_CODECNV_UTF72SJIS: return os << u8"CODECNV_UTF72SJIS"; + case F_CODECNV_SJIS2JIS: return os << u8"CODECNV_SJIS2JIS"; + case F_CODECNV_SJIS2EUC: return os << u8"CODECNV_SJIS2EUC"; + case F_CODECNV_SJIS2UTF8: return os << u8"CODECNV_SJIS2UTF8"; + case F_CODECNV_SJIS2UTF7: return os << u8"CODECNV_SJIS2UTF7"; + default: + throw std::invalid_argument("unknown functionCode"); + } +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index 3b75376cc6..8195146b92 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -106,6 +106,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index 1a67573ea1..0e3d69e9f7 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -133,6 +133,9 @@ Test Files + + Other Files + From 3720aebf2ab97f3e8ba65663079abf703a1d5f48 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 11 Apr 2021 18:32:26 +0900 Subject: [PATCH 0607/1024] =?UTF-8?q?MinGW=E3=83=93=E3=83=AB=E3=83=89?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MinGWはlvalueの判定がvc++よりも厳しいのでエラーが発生。 ついでにencodingの変数名を修正。 --- tests/unittests/test-cconvert.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/unittests/test-cconvert.cpp b/tests/unittests/test-cconvert.cpp index 3016e9d07a..4f4c4d01a4 100644 --- a/tests/unittests/test-cconvert.cpp +++ b/tests/unittests/test-cconvert.cpp @@ -408,14 +408,15 @@ TEST_P(ConvTest, test) const auto eFuncCode = std::get<0>(GetParam()); std::wstring_view source = std::get<1>(GetParam()); std::wstring_view expected = std::get<2>(GetParam()); - SEncodingConfig encoding; + SEncodingConfig sEncodingConfig; + CCharWidthCache cCharWidthCache; CNativeW cmemBuf(source.data(), source.length()); CConversionFacade( 4, // タブ幅(タブ幅が半角スペース何個分かを指定する) 0, // 変換開始桁位置 false, // 拡張改行コードを有効にするかどうか - encoding, // 文字コード自動検出のオプション - CCharWidthCache() // 文字幅キャッシュ + sEncodingConfig, // 文字コード自動検出のオプション + cCharWidthCache // 文字幅キャッシュ ).ConvMemory(eFuncCode, cmemBuf); EXPECT_STREQ(expected.data(), cmemBuf.GetStringPtr()); From 3d7208e847fa6bee1ac2714ef0b434ee9da1616d Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Tue, 13 Apr 2021 02:25:38 +0900 Subject: [PATCH 0608/1024] =?UTF-8?q?.vsconfig=E3=83=95=E3=82=A1=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E3=82=92=E6=9B=B4=E6=96=B0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 不要なコンポーネントを除外 - 重複した記述を削除 --- .vsconfig | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.vsconfig b/.vsconfig index c27351ed92..dcd96b09b2 100644 --- a/.vsconfig +++ b/.vsconfig @@ -5,11 +5,8 @@ "microsoft.visualstudio.component.debugger.justintime", "microsoft.visualstudio.component.vc.diagnostictools", "microsoft.visualstudio.component.vc.cmake.project", - "microsoft.visualstudio.component.vc.atl", + "microsoft.visualstudio.component.vc.atlmfc", "microsoft.visualstudio.component.windows10sdk.17763", - "microsoft.visualstudio.component.vc.cmake.project", - "microsoft.visualstudio.component.vc.testadapterforboosttest", - "microsoft.visualstudio.component.vc.testadapterforgoogletest", - "microsoft.visualstudio.componentgroup.nativedesktop.win81" + "microsoft.visualstudio.component.vc.testadapterforgoogletest" ] } \ No newline at end of file From e947f74d5271bf3b1c3b33ceb206dfe4de665afe Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Tue, 13 Apr 2021 02:44:01 +0900 Subject: [PATCH 0609/1024] =?UTF-8?q?.vsconfig=E3=83=95=E3=82=A1=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E3=81=AE=E6=9B=B4=E6=96=B0=E3=81=AB=E5=90=88=E3=82=8F?= =?UTF-8?q?=E3=81=9B=E3=81=9F=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1=E3=83=B3?= =?UTF-8?q?=E3=83=88=E3=81=AE=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 9 ++------- build.md | 14 ++++++-------- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index a8c98d4992..10f5aded22 100644 --- a/README.md +++ b/README.md @@ -78,12 +78,7 @@ Sakura Editor をコンパイルするためにはいずれかが必要 正式バイナリは [Visual Studio Community 2017][Visual Studio Community 2017] でビルドされます。 ### Visual Studio Install options required -- Windows SDK -- Windows XP Support for C++ -- Windows 8.1 SDK と UCRT SDK -- C++ に関する Windows XP サポート - -More information: https://github.com/sakura-editor/sakura/issues/6 +- Windows 10 SDK ### Visual Studio Community 2019 対応に関して @@ -121,7 +116,7 @@ Visaul Studio 2019 で `sakura.sln` を開くと必要なコンポーネント ## How to build - [7Zip](https://sevenzip.osdn.jp/) のインストールして 7z.exe へのパスを通します。 -- Visual Studio Community 2017 で `sakura.sln` を開いてビルドします。 +- Visual Studio で `sakura.sln` を開いてビルドします。 ### 詳細情報 diff --git a/build.md b/build.md index 7bf3172743..c30a6303f6 100644 --- a/build.md +++ b/build.md @@ -32,22 +32,20 @@ ### 実行ファイルのビルドに必要なもの - (オプション) [7Zip](https://sevenzip.osdn.jp/) (外部依存ファイルの解凍に使用) -- Visual Studio 2017 Comminity Edition - 以下オプションも必要です。 - - Windows XP Support for C++ - - Windows 8.1 SDK と UCRT SDK - - C++ に関する Windows XP サポート +- Visual Studio 2017 または Visual Studio 2019 + - Windows 10 SDK のインストールも必要です。 ### HTML ヘルプのビルドに必要なもの - HTML ヘルプコンパイラ (hhc.exe) - - Visual Studio 2017 のインストールにて以下のオプションを有効にすることにより導入されます。 + - Visual Studio のインストールにて以下のオプションを有効にすることにより導入されます。 - 「C++ によるデスクトップ開発」を有効にする - 右のペインで 「C++ によるデスクトップ開発」を選ぶ - - 「x86用とx64用のVisual C++ MFC」をチェックする + - Visual Studio 2017 の場合は「x86用とx64用のVisual C++ MFC」を、Visual Studio 2019 の場合は「最新 v142 ビルド ツールの C++ MFC (x86 & x64)」をチェックする - 変更を確定する - VSインストール後でもVisual Studio Installerを起動して導入可能です。 ![vsi](https://user-images.githubusercontent.com/39618965/44622575-012dcc80-a8f6-11e8-906a-14d8cd6dfac9.PNG) + - [.vsconfig](.vsconfig) を使用してインストールした場合は自動的にインストールされます。 - ヘルプファイルを編集する場合 HTML Help Workshop 等の編集ソフトも別途必要になります。 ### インストーラのビルドに必要なもの @@ -68,7 +66,7 @@ #### 方法1 (GUI) -Visual Studio Community 2017 で `sakura.sln` をダブルクリックして開いてビルドします。 +Visual Studio で `sakura.sln` をダブルクリックして開いてビルドします。 #### 方法2 (コマンドライン) From 45ab9a4ab6ab23bcd59e71236e862d9ff7b7df04 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Tue, 30 Mar 2021 02:24:13 +0900 Subject: [PATCH 0610/1024] =?UTF-8?q?GetEol=E3=81=AE=E4=BB=A3=E6=9B=BF?= =?UTF-8?q?=E9=96=A2=E6=95=B0GetEolDefinitions=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/CCodeBase.cpp | 35 +++++++++++++++++ sakura_core/charset/CCodeBase.h | 2 + tests/unittests/test-ccodebase.cpp | 44 +++++++++++++++++++++ tests/unittests/test-printECodeType.cpp | 52 +++++++++++++++++++++++++ tests/unittests/tests1.vcxproj | 1 + tests/unittests/tests1.vcxproj.filters | 3 ++ 6 files changed, 137 insertions(+) create mode 100644 tests/unittests/test-printECodeType.cpp diff --git a/sakura_core/charset/CCodeBase.cpp b/sakura_core/charset/CCodeBase.cpp index 19b85a190d..1f23ba9857 100644 --- a/sakura_core/charset/CCodeBase.cpp +++ b/sakura_core/charset/CCodeBase.cpp @@ -125,3 +125,38 @@ void CCodeBase::S_GetEol(CMemory* pcmemEol, EEolType eEolType) auto& data = aEolTable[static_cast(eEolType)]; pcmemEol->SetRawData(data.szData, data.nLen); } + +/*! + 改行データ取得 + + 各種行終端子に対する特定コードによるバイナリ表現のセットを取得する。 + 特定コードで利用できない行終端子については空のバイナリ表現が返る。 + */ +[[nodiscard]] std::map CCodeBase::GetEolDifinitions() +{ + constexpr struct { + EEolType type; + std::wstring_view str; + } + aEolTable[] = { + { EEolType::cr_and_lf, L"\x0d\x0a", }, + { EEolType::line_feed, L"\x0a", }, + { EEolType::carriage_return, L"\x0d", }, + { EEolType::next_line, L"\x85", }, + { EEolType::line_separator, L"\u2028", }, + { EEolType::paragraph_separator, L"\u2029", }, + }; + + std::map map; + for( auto& eolData : aEolTable ){ + bool bComplete = false; + const auto& str = eolData.str; + auto converted = UnicodeToCode( CNativeW( str.data(), str.length() ), &bComplete ); + if( !bComplete ){ + converted.clear(); + } + map.try_emplace( eolData.type, std::move(converted) ); + } + + return map; +} diff --git a/sakura_core/charset/CCodeBase.h b/sakura_core/charset/CCodeBase.h index 2b14af52ba..d621513b8f 100644 --- a/sakura_core/charset/CCodeBase.h +++ b/sakura_core/charset/CCodeBase.h @@ -28,6 +28,7 @@ #pragma once #include +#include #include #include @@ -106,6 +107,7 @@ class CCodeBase{ //ファイル形式 virtual void GetBom(CMemory* pcmemBom); //!< BOMデータ取得 + [[nodiscard]] virtual std::map GetEolDifinitions(); virtual void GetEol(CMemory* pcmemEol, EEolType eEolType){ S_GetEol(pcmemEol,eEolType); } //!< 改行データ取得 // 文字コード表示用 2008/6/9 Uchi diff --git a/tests/unittests/test-ccodebase.cpp b/tests/unittests/test-ccodebase.cpp index 7d7d6a715d..d4d1abd15c 100644 --- a/tests/unittests/test-ccodebase.cpp +++ b/tests/unittests/test-ccodebase.cpp @@ -26,6 +26,7 @@ #include "charset/CCodeFactory.h" #include +#include TEST(CCodeBase, MIMEHeaderDecode) { @@ -445,3 +446,46 @@ TEST(CCodeBase, codeUtf32Le) ASSERT_EQ( 0, memcmp( bin.data(), decoded2.data(), decoded2.size() ) ); ASSERT_TRUE( bComplete2_2 ); } + +//! googletestの出力に文字セットIDを出力させる +std::ostream& operator << (std::ostream& os, const ECodeType& eCodeType); + +//! EOLテストのためのフィクスチャクラス +class EolTest : public ::testing::TestWithParam {}; + +/*! + * @brief GetEol代替関数のテスト + */ +TEST_P(EolTest, test) +{ + const auto eCodeType = GetParam(); + auto pCodeBase = CCodeFactory::CreateCodeBase(eCodeType); + + auto map = pCodeBase->GetEolDifinitions(); + for( const auto&[t,bin] : map ){ + CMemory m; + pCodeBase->GetEol( &m, t ); + EXPECT_EQ(0, memcmp(m.GetRawPtr(), bin.data(), bin.length())); + EXPECT_EQ(m.GetRawLength(), bin.length()); + } +} + +/*! + * @brief パラメータテストをインスタンス化する + */ +INSTANTIATE_TEST_CASE_P(ParameterizedTestEol + , EolTest + , ::testing::Values( + CODE_SJIS, + CODE_JIS, + CODE_EUC, + CODE_UNICODE, + CODE_UTF8, + CODE_UTF7, + CODE_UNICODEBE, + (ECodeType)12000, // UTF-32LE +// (ECodeType)12001, // UTF-32BE実装は機能していないため除外 +// CODE_CESU8, // CESU8のGetEolは実装漏れ。SJISと同じになるのでコメントアウト。 + CODE_LATIN1 + ) +); diff --git a/tests/unittests/test-printECodeType.cpp b/tests/unittests/test-printECodeType.cpp new file mode 100644 index 0000000000..7a5c72a449 --- /dev/null +++ b/tests/unittests/test-printECodeType.cpp @@ -0,0 +1,52 @@ +/* + Copyright (C) 2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include + +#include "charset/charset.h" + +/*! + googletestの出力にECodeTypeを出力させる + + パラメータテストのパラメータにECodeTypeを渡した場合に文字列を併記して分かりやすくする。 + + テストで使用するコード値のみを定義してあるので、必要があれば追加定義すること。 + */ +std::ostream& operator << (std::ostream& os, const ECodeType& eCodeType) +{ + switch(eCodeType){ + case CODE_SJIS: return os << u8"SJIS"; + case CODE_JIS: return os << u8"JIS"; + case CODE_EUC: return os << u8"EUC"; + case CODE_UTF8: return os << u8"UTF8"; + case CODE_UNICODE: return os << u8"UTF16LE"; + case CODE_UNICODEBE: return os << u8"UTF16BE"; + case (ECodeType)12000: return os << u8"UTF32LE"; + case (ECodeType)12001: return os << u8"UTF32BE"; + case CODE_UTF7: return os << u8"UTF7"; + case CODE_CESU8: return os << u8"CESU8"; + case CODE_LATIN1: return os << u8"LATIN1"; + default: + throw std::invalid_argument("unknown ECodeType"); + } +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index 8195146b92..2f1906a98d 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -136,6 +136,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index 0e3d69e9f7..bf6a6e6f83 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -133,6 +133,9 @@ Test Files + + Other Files + Other Files From b79836e9c1d0d1cd8b62e5fe879631dfc9718fcd Mon Sep 17 00:00:00 2001 From: berryzplus Date: Tue, 30 Mar 2021 02:39:07 +0900 Subject: [PATCH 0611/1024] =?UTF-8?q?CCodeBase::GetEol=E5=86=8D=E5=AE=9F?= =?UTF-8?q?=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/CCesu8.cpp | 1 - sakura_core/charset/CCodeBase.cpp | 42 ++++++++++++++---------------- sakura_core/charset/CCodeBase.h | 5 +--- sakura_core/charset/CCodePage.cpp | 13 --------- sakura_core/charset/CCodePage.h | 1 - sakura_core/charset/CLatin1.cpp | 1 - sakura_core/charset/CUnicode.cpp | 20 -------------- sakura_core/charset/CUnicode.h | 1 - sakura_core/charset/CUnicodeBe.cpp | 20 -------------- sakura_core/charset/CUnicodeBe.h | 2 -- sakura_core/charset/CUtf7.cpp | 20 -------------- sakura_core/charset/CUtf7.h | 1 - sakura_core/charset/CUtf8.cpp | 18 ------------- sakura_core/charset/CUtf8.h | 1 - tests/unittests/test-ccodebase.cpp | 2 +- 15 files changed, 21 insertions(+), 127 deletions(-) diff --git a/sakura_core/charset/CCesu8.cpp b/sakura_core/charset/CCesu8.cpp index c1cef7af5c..39d6fa60a0 100644 --- a/sakura_core/charset/CCesu8.cpp +++ b/sakura_core/charset/CCesu8.cpp @@ -24,7 +24,6 @@ */ #include "StdAfx.h" #include "CCesu8.h" -#include "CEol.h" //! BOMデータ取得 void CCesu8::GetBom(CMemory* pcmemBom) diff --git a/sakura_core/charset/CCodeBase.cpp b/sakura_core/charset/CCodeBase.cpp index 1f23ba9857..5633aa6ca7 100644 --- a/sakura_core/charset/CCodeBase.cpp +++ b/sakura_core/charset/CCodeBase.cpp @@ -103,29 +103,6 @@ bool CCodeBase::MIMEHeaderDecode( const char* pSrc, const int nSrcLen, CMemory* return true; } -/*! - 改行データ取得 -*/ -// CShiftJisより移動 2010/6/13 Uchi -void CCodeBase::S_GetEol(CMemory* pcmemEol, EEolType eEolType) -{ - static const struct{ - const char* szData; - int nLen; - } - aEolTable[EOL_TYPE_NUM] = { - { "", 0 }, // EEolType::none - { "\x0d\x0a", 2 }, // EEolType::cr_and_lf - { "\x0a", 1 }, // EEolType::line_feed - { "\x0d", 1 }, // EEolType::carriage_return - { "", 0 }, // EEolType::next_line - { "", 0 }, // EEolType::line_separator - { "", 0 }, // EEolType::paragraph_separator - }; - auto& data = aEolTable[static_cast(eEolType)]; - pcmemEol->SetRawData(data.szData, data.nLen); -} - /*! 改行データ取得 @@ -160,3 +137,22 @@ void CCodeBase::S_GetEol(CMemory* pcmemEol, EEolType eEolType) return map; } + +/*! + 改行データ取得 + + 指定した行終端子に対する特定コードによるバイナリ表現を取得する。 + コードポイントとバイナリシーケンスが1対1に対応付けられる文字コードの改行を検出するのに使う。 + */ +void CCodeBase::GetEol( CMemory* pcmemEol, EEolType eEolType ) +{ + if( pcmemEol != nullptr ){ + const auto map = GetEolDifinitions(); + if( auto it = map.find( eEolType ); it != map.end() ){ + const auto& bin = it->second; + pcmemEol->SetRawData( bin.data(), bin.length() ); + }else{ + pcmemEol->Reset(); + } + } +} diff --git a/sakura_core/charset/CCodeBase.h b/sakura_core/charset/CCodeBase.h index d621513b8f..dab417816a 100644 --- a/sakura_core/charset/CCodeBase.h +++ b/sakura_core/charset/CCodeBase.h @@ -108,7 +108,7 @@ class CCodeBase{ //ファイル形式 virtual void GetBom(CMemory* pcmemBom); //!< BOMデータ取得 [[nodiscard]] virtual std::map GetEolDifinitions(); - virtual void GetEol(CMemory* pcmemEol, EEolType eEolType){ S_GetEol(pcmemEol,eEolType); } //!< 改行データ取得 + void GetEol( CMemory* pcmemEol, EEolType eEolType ); // 文字コード表示用 2008/6/9 Uchi virtual EConvertResult UnicodeToHex(const wchar_t* cSrc, const int iSLen, WCHAR* pDst, const CommonSetting_Statusbar* psStatusbar); //!< UNICODE → Hex 変換 @@ -119,9 +119,6 @@ class CCodeBase{ // MIME Header デコーダ static bool MIMEHeaderDecode(const char* pSrc, const int nSrcLen, CMemory* pcMem, const ECodeType eCodetype); - - // CShiftJisより移動 2010/6/13 Uchi - static void S_GetEol(CMemory* pcmemEol, EEolType eEolType); //!< 改行データ取得 }; /*! diff --git a/sakura_core/charset/CCodePage.cpp b/sakura_core/charset/CCodePage.cpp index 5e59dbf8ea..49fae61b75 100644 --- a/sakura_core/charset/CCodePage.cpp +++ b/sakura_core/charset/CCodePage.cpp @@ -216,19 +216,6 @@ EConvertResult CCodePage::UnicodeToCP(const CNativeW& cSrc, CMemory* pDst, int c return ret; } -void CCodePage::GetEol(CMemory* pcmemEol, EEolType eEolType) -{ - CNativeW temp; - CUnicode().GetEol(temp._GetMemory(), eEolType); - UnicodeToCode(temp, pcmemEol); - CNativeW temp2; - CodeToUnicode(*pcmemEol, &temp2); - // 双方向変換ができる場合だけ設定 - if( !CNativeW::IsEqual(temp, temp2) ){ - pcmemEol->Reset(); - } -} - void CCodePage::GetBom(CMemory* pcmemBom) { CNativeW temp; diff --git a/sakura_core/charset/CCodePage.h b/sakura_core/charset/CCodePage.h index 5db1a8b0f4..c932793597 100644 --- a/sakura_core/charset/CCodePage.h +++ b/sakura_core/charset/CCodePage.h @@ -59,7 +59,6 @@ class CCodePage : public CCodeBase{ //CCodeBaseインターフェース EConvertResult CodeToUnicode(const CMemory& cSrc, CNativeW* pDst) override{ return CPToUnicode(cSrc, pDst, m_nCodePageEx); } //!< 特定コード → UNICODE 変換 EConvertResult UnicodeToCode(const CNativeW& cSrc, CMemory* pDst) override{ return UnicodeToCP(cSrc, pDst, m_nCodePageEx); } //!< UNICODE → 特定コード 変換 - void GetEol(CMemory* pcmemEol, EEolType eEolType) override; //!< 改行データ取得 void GetBom(CMemory* pcmemBom) override; //!< BOMデータ取得 EConvertResult UnicodeToHex(const wchar_t* cSrc, const int iSLen, WCHAR* pDst, const CommonSetting_Statusbar* psStatusbar); //!< UNICODE → Hex 変換 diff --git a/sakura_core/charset/CLatin1.cpp b/sakura_core/charset/CLatin1.cpp index d5ebc4dce8..b1358e393e 100644 --- a/sakura_core/charset/CLatin1.cpp +++ b/sakura_core/charset/CLatin1.cpp @@ -32,7 +32,6 @@ #include "CLatin1.h" #include "charset/charcode.h" #include "charset/codechecker.h" -#include "CEol.h" //#include "env/CShareData.h" #include "env/CommonSetting.h" diff --git a/sakura_core/charset/CUnicode.cpp b/sakura_core/charset/CUnicode.cpp index 99fa8ad602..db88786ec6 100644 --- a/sakura_core/charset/CUnicode.cpp +++ b/sakura_core/charset/CUnicode.cpp @@ -27,7 +27,6 @@ #include "CUnicode.h" #include "codechecker.h" #include "mem/CMemory.h" -#include "CEol.h" EConvertResult CUnicode::_UnicodeToUnicode_in( const CMemory& cSrc, CNativeW* pDstMem, const bool bBigEndian ) { @@ -89,22 +88,3 @@ void CUnicode::GetBom(CMemory* pcmemBom) static const BYTE UTF16LE_BOM[]={0xFF,0xFE}; pcmemBom->SetRawData(UTF16LE_BOM, sizeof(UTF16LE_BOM)); } - -void CUnicode::GetEol(CMemory* pcmemEol, EEolType eEolType) -{ - static const struct{ - const void* pData; - int nLen; - } - aEolTable[EOL_TYPE_NUM] = { - { L"", 0 * sizeof(wchar_t) }, // EEolType::none - { L"\x0d\x0a", 2 * sizeof(wchar_t) }, // EEolType::cr_and_lf - { L"\x0a", 1 * sizeof(wchar_t) }, // EEolType::line_feed - { L"\x0d", 1 * sizeof(wchar_t) }, // EEolType::carriage_return - { L"\x85", 1 * sizeof(wchar_t) }, // EEolType::next_line - { L"\u2028", 1 * sizeof(wchar_t) }, // EEolType::line_separator - { L"\u2029", 1 * sizeof(wchar_t) }, // EEolType::paragraph_separator - }; - auto& data = aEolTable[static_cast(eEolType)]; - pcmemEol->SetRawData(data.pData, data.nLen); -} diff --git a/sakura_core/charset/CUnicode.h b/sakura_core/charset/CUnicode.h index b2f2adbc7c..546316b684 100644 --- a/sakura_core/charset/CUnicode.h +++ b/sakura_core/charset/CUnicode.h @@ -40,7 +40,6 @@ class CUnicode : public CCodeBase{ return UnicodeToUnicode_out(cSrc, pDst); } void GetBom(CMemory* pcmemBom) override; //!< BOMデータ取得 - void GetEol(CMemory* pcmemEol, EEolType eEolType) override; //!< 改行データ取得 public: //実装 diff --git a/sakura_core/charset/CUnicodeBe.cpp b/sakura_core/charset/CUnicodeBe.cpp index 23201238a5..d6609a68dd 100644 --- a/sakura_core/charset/CUnicodeBe.cpp +++ b/sakura_core/charset/CUnicodeBe.cpp @@ -25,7 +25,6 @@ #include "StdAfx.h" #include "CUnicodeBe.h" -#include "CEol.h" #include "codechecker.h" @@ -34,22 +33,3 @@ void CUnicodeBe::GetBom(CMemory* pcmemBom) static const BYTE UTF16BE_BOM[]={0xFE,0xFF}; pcmemBom->SetRawData(UTF16BE_BOM, sizeof(UTF16BE_BOM)); } - -void CUnicodeBe::GetEol(CMemory* pcmemEol, EEolType eEolType) -{ - static const struct{ - const void* pData; - int nLen; - } - aEolTable[EOL_TYPE_NUM] = { - { "", 0 * sizeof(wchar_t) }, // EEolType::none - { "\x00\x0d\x00\x0a", 2 * sizeof(wchar_t) }, // EEolType::cr_and_lf - { "\x00\x0a", 1 * sizeof(wchar_t) }, // EEolType::line_feed - { "\x00\x0d", 1 * sizeof(wchar_t) }, // EEolType::carriage_return - { "\x00\x85", 1 * sizeof(wchar_t) }, // EEolType::next_line - { "\x20\x28", 1 * sizeof(wchar_t) }, // EEolType::line_separator - { "\x20\x29", 1 * sizeof(wchar_t) }, // EEolType::paragraph_separator - }; - auto& data = aEolTable[static_cast(eEolType)]; - pcmemEol->SetRawData(data.pData, data.nLen); -} diff --git a/sakura_core/charset/CUnicodeBe.h b/sakura_core/charset/CUnicodeBe.h index db0d64b6a5..67931bdaa4 100644 --- a/sakura_core/charset/CUnicodeBe.h +++ b/sakura_core/charset/CUnicodeBe.h @@ -29,7 +29,6 @@ #include "CCodeBase.h" #include "CUnicode.h" -#include "CEol.h" class CUnicodeBe : public CCodeBase{ public: @@ -37,7 +36,6 @@ class CUnicodeBe : public CCodeBase{ EConvertResult CodeToUnicode(const CMemory& cSrc, CNativeW* pDst) override{ return UnicodeBEToUnicode(cSrc, pDst); } //!< 特定コード → UNICODE 変換 EConvertResult UnicodeToCode(const CNativeW& cSrc, CMemory* pDst) override{ return UnicodeToUnicodeBE(cSrc, pDst); } //!< UNICODE → 特定コード 変換 void GetBom(CMemory* pcmemBom) override; //!< BOMデータ取得 - void GetEol(CMemory* pcmemEol, EEolType eEolType) override; //!< 改行データ取得 public: diff --git a/sakura_core/charset/CUtf7.cpp b/sakura_core/charset/CUtf7.cpp index ca014412e3..7b354cefe7 100644 --- a/sakura_core/charset/CUtf7.cpp +++ b/sakura_core/charset/CUtf7.cpp @@ -29,7 +29,6 @@ #include "charset/charcode.h" #include "charset/codechecker.h" #include "convert/convert_util2.h" -#include "CEol.h" /*! UTF-7 Set D 部分の読み込み。 @@ -281,22 +280,3 @@ void CUtf7::GetBom(CMemory* pcmemBom) static const BYTE UTF7_BOM[]= {'+','/','v','8','-'}; pcmemBom->SetRawData(UTF7_BOM, sizeof(UTF7_BOM)); } - -void CUtf7::GetEol(CMemory* pcmemEol, EEolType eEolType) -{ - static const struct{ - const char* szData; - int nLen; - } - aEolTable[EOL_TYPE_NUM] = { - { "", 0 }, // EEolType::none - { "\x0d\x0a", 2 }, // EEolType::cr_and_lf - { "\x0a", 1 }, // EEolType::line_feed - { "\x0d", 1 }, // EEolType::carriage_return - { "+AIU-", 5 }, // EEolType::next_line - { "+ICg-", 5 }, // EEolType::line_separator - { "+ICk-", 5 }, // EEolType::paragraph_separator - }; - auto& data = aEolTable[static_cast(eEolType)]; - pcmemEol->SetRawData(data.szData, data.nLen); -} diff --git a/sakura_core/charset/CUtf7.h b/sakura_core/charset/CUtf7.h index 68940bbe78..d4e876d466 100644 --- a/sakura_core/charset/CUtf7.h +++ b/sakura_core/charset/CUtf7.h @@ -35,7 +35,6 @@ class CUtf7 : public CCodeBase{ EConvertResult CodeToUnicode(const CMemory& cSrc, CNativeW* pDst) override{ return UTF7ToUnicode(cSrc, pDst); } //!< 特定コード → UNICODE 変換 EConvertResult UnicodeToCode(const CNativeW& cSrc, CMemory* pDst) override{ return UnicodeToUTF7(cSrc, pDst); } //!< UNICODE → 特定コード 変換 void GetBom(CMemory* pcmemBom) override; //!< BOMデータ取得 - void GetEol(CMemory* pcmemEol, EEolType eEolType) override; public: //実装 diff --git a/sakura_core/charset/CUtf8.cpp b/sakura_core/charset/CUtf8.cpp index e7211ae1df..1c13399a48 100644 --- a/sakura_core/charset/CUtf8.cpp +++ b/sakura_core/charset/CUtf8.cpp @@ -37,24 +37,6 @@ void CUtf8::GetBom(CMemory* pcmemBom) pcmemBom->SetRawData(UTF8_BOM, sizeof(UTF8_BOM)); } -void CUtf8::GetEol(CMemory* pcmemEol, EEolType eEolType){ - static const struct{ - const char* szData; - int nLen; - } - aEolTable[EOL_TYPE_NUM] = { - "", 0, // EEolType::none - "\x0d\x0a", 2, // EEolType::cr_and_lf - "\x0a", 1, // EEolType::line_feed - "\x0d", 1, // EEolType::carriage_return - "\xc2\x85", 2, // EEolType::next_line - "\xe2\x80\xa8", 3, // EEolType::line_separator - "\xe2\x80\xa9", 3, // EEolType::paragraph_separator - }; - auto& data = aEolTable[static_cast(eEolType)]; - pcmemEol->SetRawData(data.szData, data.nLen); -} - /*! UTF-8 → Unicode 実装 diff --git a/sakura_core/charset/CUtf8.h b/sakura_core/charset/CUtf8.h index bb5209779b..4af8c8cce3 100644 --- a/sakura_core/charset/CUtf8.h +++ b/sakura_core/charset/CUtf8.h @@ -43,7 +43,6 @@ class CUtf8 : public CCodeBase{ return UnicodeToUTF8(cSrc, pDst); } void GetBom(CMemory* pcmemBom) override; //!< BOMデータ取得 - void GetEol(CMemory* pcmemEol, EEolType eEolType) override; EConvertResult _UnicodeToHex(const wchar_t* cSrc, const int iSLen, WCHAR* pDst, const CommonSetting_Statusbar* psStatusbar, const bool CESU8Mode); //!< UNICODE → Hex 変換 EConvertResult UnicodeToHex(const wchar_t* ps, const int nsl, WCHAR* pd, const CommonSetting_Statusbar* psStatusbar) override{ return _UnicodeToHex(ps, nsl, pd, psStatusbar, false); } diff --git a/tests/unittests/test-ccodebase.cpp b/tests/unittests/test-ccodebase.cpp index d4d1abd15c..9ba8059920 100644 --- a/tests/unittests/test-ccodebase.cpp +++ b/tests/unittests/test-ccodebase.cpp @@ -485,7 +485,7 @@ INSTANTIATE_TEST_CASE_P(ParameterizedTestEol CODE_UNICODEBE, (ECodeType)12000, // UTF-32LE // (ECodeType)12001, // UTF-32BE実装は機能していないため除外 -// CODE_CESU8, // CESU8のGetEolは実装漏れ。SJISと同じになるのでコメントアウト。 + CODE_CESU8, CODE_LATIN1 ) ); From 5801cdef1d46d96b2efbdb2cc7646470e2cfe228 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Tue, 30 Mar 2021 04:54:38 +0900 Subject: [PATCH 0612/1024] =?UTF-8?q?GetBom=E3=81=AE=E4=BB=A3=E6=9B=BF?= =?UTF-8?q?=E9=96=A2=E6=95=B0GetBomDifinition=E3=82=92=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/CCodeBase.cpp | 19 +++++++++++++ sakura_core/charset/CCodeBase.h | 1 + tests/unittests/test-ccodebase.cpp | 45 ++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+) diff --git a/sakura_core/charset/CCodeBase.cpp b/sakura_core/charset/CCodeBase.cpp index 5633aa6ca7..7d8606af54 100644 --- a/sakura_core/charset/CCodeBase.cpp +++ b/sakura_core/charset/CCodeBase.cpp @@ -103,6 +103,25 @@ bool CCodeBase::MIMEHeaderDecode( const char* pSrc, const int nSrcLen, CMemory* return true; } +/*! + BOMデータ取得 + + ByteOrderMarkに対する特定コードによるバイナリ表現を取得する。 + UTF16以上のマルチバイトUnicodeのバイト順を識別するのに使う。 + */ +[[nodiscard]] BinarySequence CCodeBase::GetBomDefinition() +{ + const CNativeW cBom( L"\xFEFF" ); + + bool bComplete = false; + auto converted = UnicodeToCode( cBom, &bComplete ); + if( !bComplete ){ + converted.clear(); + } + + return converted; +} + /*! 改行データ取得 diff --git a/sakura_core/charset/CCodeBase.h b/sakura_core/charset/CCodeBase.h index dab417816a..86e6643512 100644 --- a/sakura_core/charset/CCodeBase.h +++ b/sakura_core/charset/CCodeBase.h @@ -106,6 +106,7 @@ class CCodeBase{ } //ファイル形式 + [[nodiscard]] virtual BinarySequence GetBomDefinition(); virtual void GetBom(CMemory* pcmemBom); //!< BOMデータ取得 [[nodiscard]] virtual std::map GetEolDifinitions(); void GetEol( CMemory* pcmemEol, EEolType eEolType ); diff --git a/tests/unittests/test-ccodebase.cpp b/tests/unittests/test-ccodebase.cpp index 9ba8059920..b969a5b510 100644 --- a/tests/unittests/test-ccodebase.cpp +++ b/tests/unittests/test-ccodebase.cpp @@ -489,3 +489,48 @@ INSTANTIATE_TEST_CASE_P(ParameterizedTestEol CODE_LATIN1 ) ); + +//! BOMテストのためのパラメータ型 +using BomTestParamType = std::tuple; + +//! BOMテストのためのフィクスチャクラス +class BomTest : public ::testing::TestWithParam {}; + +/*! + * @brief GetBom代替関数のテスト + */ +TEST_P(BomTest, test) { + const auto eCodeType = std::get<0>(GetParam()); + auto pCodeBase = CCodeFactory::CreateCodeBase(eCodeType); + + const auto str = std::get<1>(GetParam()); + BinarySequenceView expected(reinterpret_cast(str.data()), str.length()); + + const auto actual = pCodeBase->GetBomDefinition(); + + ASSERT_EQ(expected, actual); + + CMemory m; + pCodeBase->GetBom( &m ); + EXPECT_EQ(0, memcmp(m.GetRawPtr(), actual.data(), actual.length())); + EXPECT_EQ(m.GetRawLength(), actual.length()); +} + +/*! + * @brief パラメータテストをインスタンス化する + */ +INSTANTIATE_TEST_CASE_P(ParameterizedTestBom + , BomTest + , ::testing::Values( + BomTestParamType{ CODE_SJIS, {} }, // 非Unicodeなので実施する意味はない + BomTestParamType{ CODE_JIS, {} }, // 非Unicodeなので実施する意味はない + BomTestParamType{ CODE_EUC, {} }, // 非Unicodeなので実施する意味はない + BomTestParamType{ CODE_UNICODE, "\xFF\xFE" }, + BomTestParamType{ CODE_UTF8, "\xEF\xBB\xBF" }, + BomTestParamType{ CODE_UTF7, "+/v8-" }, // 対象外なので実施する意味はない + BomTestParamType{ CODE_UNICODEBE, "\xFE\xFF" }, + BomTestParamType{ CODE_LATIN1, {} }, // 非Unicodeなので実施する意味はない + BomTestParamType{ CODE_CESU8, "\xEF\xBB\xBF" } + ) +); + From 3388b35e1e2992a6a89c4c4c4e95c09c7a2aeb2b Mon Sep 17 00:00:00 2001 From: berryzplus Date: Tue, 30 Mar 2021 09:40:36 +0900 Subject: [PATCH 0613/1024] =?UTF-8?q?CCodeBase::GetBom=E3=81=AE=E5=86=8D?= =?UTF-8?q?=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/CCesu8.cpp | 7 ------- sakura_core/charset/CCesu8.h | 2 -- sakura_core/charset/CCodeBase.cpp | 22 +++++++++++++++++++--- sakura_core/charset/CCodeBase.h | 2 +- sakura_core/charset/CCodePage.cpp | 13 ------------- sakura_core/charset/CCodePage.h | 1 - sakura_core/charset/CUnicode.cpp | 6 ------ sakura_core/charset/CUnicode.h | 1 - sakura_core/charset/CUnicodeBe.cpp | 8 -------- sakura_core/charset/CUnicodeBe.h | 1 - sakura_core/charset/CUtf7.cpp | 7 ------- sakura_core/charset/CUtf7.h | 1 - sakura_core/charset/CUtf8.cpp | 7 ------- sakura_core/charset/CUtf8.h | 1 - 14 files changed, 20 insertions(+), 59 deletions(-) diff --git a/sakura_core/charset/CCesu8.cpp b/sakura_core/charset/CCesu8.cpp index 39d6fa60a0..c6e40323cd 100644 --- a/sakura_core/charset/CCesu8.cpp +++ b/sakura_core/charset/CCesu8.cpp @@ -24,10 +24,3 @@ */ #include "StdAfx.h" #include "CCesu8.h" - -//! BOMデータ取得 -void CCesu8::GetBom(CMemory* pcmemBom) -{ - static const BYTE UTF8_BOM[]={0xEF,0xBB,0xBF}; - pcmemBom->SetRawData(UTF8_BOM, sizeof(UTF8_BOM)); -} diff --git a/sakura_core/charset/CCesu8.h b/sakura_core/charset/CCesu8.h index 1a5c71dfe3..1f1c09d07f 100644 --- a/sakura_core/charset/CCesu8.h +++ b/sakura_core/charset/CCesu8.h @@ -40,8 +40,6 @@ class CCesu8 : public CCodeBase { EConvertResult UnicodeToCode(const CNativeW& cSrc, CMemory* pDst) override{ //!< UNICODE → 特定コード 変換 return CUtf8::UnicodeToCESU8(cSrc, pDst); } - void GetBom(CMemory* pcmemBom) override; //!< BOMデータ取得 -// GetEolはCCodeBaseに移動 2010/6/13 Uchi EConvertResult UnicodeToHex(const wchar_t* cSrc, const int iSLen, WCHAR* pDst, const CommonSetting_Statusbar* psStatusbar){ //!< UNICODE → Hex 変換 return CUtf8()._UnicodeToHex( cSrc, iSLen, pDst, psStatusbar, true ); } diff --git a/sakura_core/charset/CCodeBase.cpp b/sakura_core/charset/CCodeBase.cpp index 7d8606af54..f989180f96 100644 --- a/sakura_core/charset/CCodeBase.cpp +++ b/sakura_core/charset/CCodeBase.cpp @@ -30,8 +30,6 @@ #include "CEol.h" #include "env/CommonSetting.h" -void CCodeBase::GetBom(CMemory* pcmemBom){ pcmemBom->Reset(); } //!< BOMデータ取得 - // 表示用16表示 UNICODE → Hex 変換 2008/6/9 Uchi EConvertResult CCodeBase::UnicodeToHex(const wchar_t* cSrc, const int iSLen, WCHAR* pDst, const CommonSetting_Statusbar* psStatusbar) { @@ -107,7 +105,7 @@ bool CCodeBase::MIMEHeaderDecode( const char* pSrc, const int nSrcLen, CMemory* BOMデータ取得 ByteOrderMarkに対する特定コードによるバイナリ表現を取得する。 - UTF16以上のマルチバイトUnicodeのバイト順を識別するのに使う。 + マルチバイトなUnicode文字セットのバイト順を識別するのに使う。 */ [[nodiscard]] BinarySequence CCodeBase::GetBomDefinition() { @@ -122,6 +120,24 @@ bool CCodeBase::MIMEHeaderDecode( const char* pSrc, const int nSrcLen, CMemory* return converted; } +/*! + BOMデータ取得 + + ByteOrderMarkに対する特定コードによるバイナリ表現を取得する。 + マルチバイトなUnicode文字セットのバイト順を識別するのに使う。 + */ +void CCodeBase::GetBom( CMemory* pcmemBom ) +{ + if( pcmemBom != nullptr ){ + if( const auto bom = GetBomDefinition(); 0 < bom.length() ){ + pcmemBom->SetRawData( bom.data(), bom.length() ); + }else{ + pcmemBom->Reset(); + } + } +} + + /*! 改行データ取得 diff --git a/sakura_core/charset/CCodeBase.h b/sakura_core/charset/CCodeBase.h index 86e6643512..72fe8956b3 100644 --- a/sakura_core/charset/CCodeBase.h +++ b/sakura_core/charset/CCodeBase.h @@ -107,7 +107,7 @@ class CCodeBase{ //ファイル形式 [[nodiscard]] virtual BinarySequence GetBomDefinition(); - virtual void GetBom(CMemory* pcmemBom); //!< BOMデータ取得 + void GetBom( CMemory* pcmemBom ); [[nodiscard]] virtual std::map GetEolDifinitions(); void GetEol( CMemory* pcmemEol, EEolType eEolType ); diff --git a/sakura_core/charset/CCodePage.cpp b/sakura_core/charset/CCodePage.cpp index 49fae61b75..b94033e5ab 100644 --- a/sakura_core/charset/CCodePage.cpp +++ b/sakura_core/charset/CCodePage.cpp @@ -29,7 +29,6 @@ */ #include "StdAfx.h" #include "CCodePage.h" -#include "CUnicode.h" #include "charcode.h" #include "codechecker.h" #include "dlg/CDialog.h" @@ -216,18 +215,6 @@ EConvertResult CCodePage::UnicodeToCP(const CNativeW& cSrc, CMemory* pDst, int c return ret; } -void CCodePage::GetBom(CMemory* pcmemBom) -{ - CNativeW temp; - CUnicode().GetBom(temp._GetMemory()); - UnicodeToCode(temp, pcmemBom); - CNativeW temp2; - CodeToUnicode(*pcmemBom, &temp2); - if( !CNativeW::IsEqual(temp, temp2) ){ - pcmemBom->Reset(); - } -} - // 文字コード表示用 UNICODE → Hex 変換 EConvertResult CCodePage::UnicodeToHex(const wchar_t* cSrc, const int iSLen, WCHAR* pDst, const CommonSetting_Statusbar* psStatusbar) { diff --git a/sakura_core/charset/CCodePage.h b/sakura_core/charset/CCodePage.h index c932793597..db1174d83c 100644 --- a/sakura_core/charset/CCodePage.h +++ b/sakura_core/charset/CCodePage.h @@ -59,7 +59,6 @@ class CCodePage : public CCodeBase{ //CCodeBaseインターフェース EConvertResult CodeToUnicode(const CMemory& cSrc, CNativeW* pDst) override{ return CPToUnicode(cSrc, pDst, m_nCodePageEx); } //!< 特定コード → UNICODE 変換 EConvertResult UnicodeToCode(const CNativeW& cSrc, CMemory* pDst) override{ return UnicodeToCP(cSrc, pDst, m_nCodePageEx); } //!< UNICODE → 特定コード 変換 - void GetBom(CMemory* pcmemBom) override; //!< BOMデータ取得 EConvertResult UnicodeToHex(const wchar_t* cSrc, const int iSLen, WCHAR* pDst, const CommonSetting_Statusbar* psStatusbar); //!< UNICODE → Hex 変換 public: diff --git a/sakura_core/charset/CUnicode.cpp b/sakura_core/charset/CUnicode.cpp index db88786ec6..6fdb1b9461 100644 --- a/sakura_core/charset/CUnicode.cpp +++ b/sakura_core/charset/CUnicode.cpp @@ -82,9 +82,3 @@ EConvertResult CUnicode::_UnicodeToUnicode_out( const CNativeW& cSrc, CMemory* p return RESULT_COMPLETE; // 何もしない } - -void CUnicode::GetBom(CMemory* pcmemBom) -{ - static const BYTE UTF16LE_BOM[]={0xFF,0xFE}; - pcmemBom->SetRawData(UTF16LE_BOM, sizeof(UTF16LE_BOM)); -} diff --git a/sakura_core/charset/CUnicode.h b/sakura_core/charset/CUnicode.h index 546316b684..8fc687f5c6 100644 --- a/sakura_core/charset/CUnicode.h +++ b/sakura_core/charset/CUnicode.h @@ -39,7 +39,6 @@ class CUnicode : public CCodeBase{ EConvertResult UnicodeToCode(const CNativeW& cSrc, CMemory* pDst) override{ //!< UNICODE → 特定コード 変換 return UnicodeToUnicode_out(cSrc, pDst); } - void GetBom(CMemory* pcmemBom) override; //!< BOMデータ取得 public: //実装 diff --git a/sakura_core/charset/CUnicodeBe.cpp b/sakura_core/charset/CUnicodeBe.cpp index d6609a68dd..11008776dc 100644 --- a/sakura_core/charset/CUnicodeBe.cpp +++ b/sakura_core/charset/CUnicodeBe.cpp @@ -25,11 +25,3 @@ #include "StdAfx.h" #include "CUnicodeBe.h" - -#include "codechecker.h" - -void CUnicodeBe::GetBom(CMemory* pcmemBom) -{ - static const BYTE UTF16BE_BOM[]={0xFE,0xFF}; - pcmemBom->SetRawData(UTF16BE_BOM, sizeof(UTF16BE_BOM)); -} diff --git a/sakura_core/charset/CUnicodeBe.h b/sakura_core/charset/CUnicodeBe.h index 67931bdaa4..c3c95791aa 100644 --- a/sakura_core/charset/CUnicodeBe.h +++ b/sakura_core/charset/CUnicodeBe.h @@ -35,7 +35,6 @@ class CUnicodeBe : public CCodeBase{ //CCodeBaseインターフェース EConvertResult CodeToUnicode(const CMemory& cSrc, CNativeW* pDst) override{ return UnicodeBEToUnicode(cSrc, pDst); } //!< 特定コード → UNICODE 変換 EConvertResult UnicodeToCode(const CNativeW& cSrc, CMemory* pDst) override{ return UnicodeToUnicodeBE(cSrc, pDst); } //!< UNICODE → 特定コード 変換 - void GetBom(CMemory* pcmemBom) override; //!< BOMデータ取得 public: diff --git a/sakura_core/charset/CUtf7.cpp b/sakura_core/charset/CUtf7.cpp index 7b354cefe7..2b94ecf14d 100644 --- a/sakura_core/charset/CUtf7.cpp +++ b/sakura_core/charset/CUtf7.cpp @@ -273,10 +273,3 @@ EConvertResult CUtf7::UnicodeToUTF7( const CNativeW& cSrc, CMemory* pDstMem ) return RESULT_COMPLETE; } - -//! BOMデータ取得 -void CUtf7::GetBom(CMemory* pcmemBom) -{ - static const BYTE UTF7_BOM[]= {'+','/','v','8','-'}; - pcmemBom->SetRawData(UTF7_BOM, sizeof(UTF7_BOM)); -} diff --git a/sakura_core/charset/CUtf7.h b/sakura_core/charset/CUtf7.h index d4e876d466..fab6836a6a 100644 --- a/sakura_core/charset/CUtf7.h +++ b/sakura_core/charset/CUtf7.h @@ -34,7 +34,6 @@ class CUtf7 : public CCodeBase{ //CCodeBaseインターフェース EConvertResult CodeToUnicode(const CMemory& cSrc, CNativeW* pDst) override{ return UTF7ToUnicode(cSrc, pDst); } //!< 特定コード → UNICODE 変換 EConvertResult UnicodeToCode(const CNativeW& cSrc, CMemory* pDst) override{ return UnicodeToUTF7(cSrc, pDst); } //!< UNICODE → 特定コード 変換 - void GetBom(CMemory* pcmemBom) override; //!< BOMデータ取得 public: //実装 diff --git a/sakura_core/charset/CUtf8.cpp b/sakura_core/charset/CUtf8.cpp index 1c13399a48..d8bae8203e 100644 --- a/sakura_core/charset/CUtf8.cpp +++ b/sakura_core/charset/CUtf8.cpp @@ -30,13 +30,6 @@ #include "CEol.h" #include "env/CommonSetting.h" -//! BOMデータ取得 -void CUtf8::GetBom(CMemory* pcmemBom) -{ - static const BYTE UTF8_BOM[]={0xEF,0xBB,0xBF}; - pcmemBom->SetRawData(UTF8_BOM, sizeof(UTF8_BOM)); -} - /*! UTF-8 → Unicode 実装 diff --git a/sakura_core/charset/CUtf8.h b/sakura_core/charset/CUtf8.h index 4af8c8cce3..3b449ab33c 100644 --- a/sakura_core/charset/CUtf8.h +++ b/sakura_core/charset/CUtf8.h @@ -42,7 +42,6 @@ class CUtf8 : public CCodeBase{ EConvertResult UnicodeToCode(const CNativeW& cSrc, CMemory* pDst) override{ //!< UNICODE → 特定コード 変換 return UnicodeToUTF8(cSrc, pDst); } - void GetBom(CMemory* pcmemBom) override; //!< BOMデータ取得 EConvertResult _UnicodeToHex(const wchar_t* cSrc, const int iSLen, WCHAR* pDst, const CommonSetting_Statusbar* psStatusbar, const bool CESU8Mode); //!< UNICODE → Hex 変換 EConvertResult UnicodeToHex(const wchar_t* ps, const int nsl, WCHAR* pd, const CommonSetting_Statusbar* psStatusbar) override{ return _UnicodeToHex(ps, nsl, pd, psStatusbar, false); } From 21fba2c811aafa8f4538f28417d2c864689fffe8 Mon Sep 17 00:00:00 2001 From: dep5 Date: Tue, 13 Apr 2021 22:11:05 +0900 Subject: [PATCH 0614/1024] =?UTF-8?q?Revert=20"windows10sdk=E3=82=92?= =?UTF-8?q?=E5=89=8A=E9=99=A4"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit e1b12faf61207ebc3ae03634323b2a5459472bd0. --- .vsconfig | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.vsconfig b/.vsconfig index 71986b1a96..c27351ed92 100644 --- a/.vsconfig +++ b/.vsconfig @@ -6,9 +6,10 @@ "microsoft.visualstudio.component.vc.diagnostictools", "microsoft.visualstudio.component.vc.cmake.project", "microsoft.visualstudio.component.vc.atl", + "microsoft.visualstudio.component.windows10sdk.17763", "microsoft.visualstudio.component.vc.cmake.project", "microsoft.visualstudio.component.vc.testadapterforboosttest", "microsoft.visualstudio.component.vc.testadapterforgoogletest", "microsoft.visualstudio.componentgroup.nativedesktop.win81" ] -} +} \ No newline at end of file From 0990ab0cd782720b6d5c83a6a0b4c0020d8addb5 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Tue, 13 Apr 2021 18:43:47 +0900 Subject: [PATCH 0615/1024] =?UTF-8?q?UnicodeToHex=E3=81=AE=E4=BB=A3?= =?UTF-8?q?=E6=9B=BF=E9=96=A2=E6=95=B0CodeToHex=E3=82=92=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/CCodeBase.cpp | 25 ++++- sakura_core/charset/CCodeBase.h | 2 + tests/unittests/test-ccodebase.cpp | 162 +++++++++++++++++++++++++++++ 3 files changed, 187 insertions(+), 2 deletions(-) diff --git a/sakura_core/charset/CCodeBase.cpp b/sakura_core/charset/CCodeBase.cpp index f989180f96..eecb826581 100644 --- a/sakura_core/charset/CCodeBase.cpp +++ b/sakura_core/charset/CCodeBase.cpp @@ -24,13 +24,34 @@ */ #include "StdAfx.h" #include "CCodeBase.h" -#include "charcode.h" + +#include "charset/CCodeFactory.h" #include "convert/convert_util2.h" #include "charset/codechecker.h" #include "CEol.h" #include "env/CommonSetting.h" -// 表示用16表示 UNICODE → Hex 変換 2008/6/9 Uchi +/*! + 文字コードの16進表示 + + ステータスバー表示用に文字を16進表記に変換する + + @param [in] cSrc 変換する文字 + @param [in] sStatusbar 共通設定 ステータスバー + @param [in,opt] bUseFallback cSrcが特定コードで表現できない場合にフォールバックするかどうか + */ +std::wstring CCodeBase::CodeToHex(const CNativeW& cSrc, const CommonSetting_Statusbar& sStatusbar, bool bUseFallback /* = true */) +{ + std::wstring buff(32, L'\0'); + if (const auto ret = UnicodeToHex(cSrc.GetStringPtr(), cSrc.GetStringLength(), buff.data(), &sStatusbar); + ret != RESULT_COMPLETE && bUseFallback) { + // うまくコードが取れなかった(Unicodeで表示) + return CCodeFactory::CreateCodeBase(CODE_UNICODE)->CodeToHex(cSrc, sStatusbar, false); + } + return buff.data(); +} + +// 表示用16進表示 UNICODE → Hex 変換 2008/6/9 Uchi EConvertResult CCodeBase::UnicodeToHex(const wchar_t* cSrc, const int iSLen, WCHAR* pDst, const CommonSetting_Statusbar* psStatusbar) { if (IsUTF16High(cSrc[0]) && iSLen >= 2 && IsUTF16Low(cSrc[1])) { diff --git a/sakura_core/charset/CCodeBase.h b/sakura_core/charset/CCodeBase.h index 72fe8956b3..ed0364c731 100644 --- a/sakura_core/charset/CCodeBase.h +++ b/sakura_core/charset/CCodeBase.h @@ -111,6 +111,8 @@ class CCodeBase{ [[nodiscard]] virtual std::map GetEolDifinitions(); void GetEol( CMemory* pcmemEol, EEolType eEolType ); + // 文字コードの16進表示 + virtual std::wstring CodeToHex(const CNativeW& cSrc, const CommonSetting_Statusbar& sStatusbar, bool bUseFallback = true); // 文字コード表示用 2008/6/9 Uchi virtual EConvertResult UnicodeToHex(const wchar_t* cSrc, const int iSLen, WCHAR* pDst, const CommonSetting_Statusbar* psStatusbar); //!< UNICODE → Hex 変換 diff --git a/tests/unittests/test-ccodebase.cpp b/tests/unittests/test-ccodebase.cpp index b969a5b510..01a5c86f39 100644 --- a/tests/unittests/test-ccodebase.cpp +++ b/tests/unittests/test-ccodebase.cpp @@ -28,6 +28,8 @@ #include #include +#include "env/CommonSetting.h" + TEST(CCodeBase, MIMEHeaderDecode) { CMemory m; @@ -534,3 +536,163 @@ INSTANTIATE_TEST_CASE_P(ParameterizedTestBom ) ); +//! 表示用16進変換テストのためのフィクスチャクラス +class CodeToHexTest : public ::testing::TestWithParam {}; + +/*! + * @brief UnicodeToHex代替関数のテスト + */ +TEST_P(CodeToHexTest, test) +{ + const auto eCodeType = GetParam(); + auto pCodeBase = CCodeFactory::CreateCodeBase(eCodeType); + + // Unicodeコードポイントを表示する設定 + CommonSetting_Statusbar sStatusbar; + sStatusbar.m_bDispUniInSjis = true; + sStatusbar.m_bDispUniInJis = true; + sStatusbar.m_bDispUniInEuc = true; + sStatusbar.m_bDispUtf8Codepoint = true; + sStatusbar.m_bDispSPCodepoint = true; + + // 日本語 ひらがな「あ」(文字セットがサポートしない文字でも統一仕様) + EXPECT_STREQ(L"U+3042", pCodeBase->CodeToHex(L"あ", sStatusbar).c_str()); + + // カラー絵文字「男性のシンボル」(サロゲートペア) + EXPECT_STREQ(L"U+1F6B9", pCodeBase->CodeToHex(L"\U0001F6B9", sStatusbar).c_str()); +} + +/*! + * @brief パラメータテストをインスタンス化する + */ +INSTANTIATE_TEST_CASE_P(ParameterizedTestToHex + , CodeToHexTest + , ::testing::Values( + CODE_SJIS, + CODE_JIS, + CODE_EUC, + CODE_UNICODE, + CODE_UTF8, + CODE_UTF7, + CODE_UNICODEBE, + (ECodeType)12000, + (ECodeType)12001, + CODE_CESU8, + CODE_LATIN1 + ) +); + +/*! + * @brief UnicodeToHex代替関数のテスト + */ +TEST(CCodeBase, SjisToHex) +{ + const auto eCodeType = CODE_SJIS; + auto pCodeBase = CCodeFactory::CreateCodeBase(eCodeType); + + // 特定コードのマルチバイトを表示する設定 + CommonSetting_Statusbar sStatusbar; + sStatusbar.m_bDispUniInSjis = false; + sStatusbar.m_bDispUniInJis = false; + sStatusbar.m_bDispUniInEuc = false; + sStatusbar.m_bDispUtf8Codepoint = false; + sStatusbar.m_bDispSPCodepoint = false; + + // 日本語 ひらがな「あ」(文字セットがサポートしない文字でも統一仕様) + EXPECT_STREQ(L"82A0", pCodeBase->CodeToHex(L"あ", sStatusbar).c_str()); + + // カラー絵文字「男性のシンボル」(サロゲートペア) + EXPECT_STREQ(L"D83DDEB9", pCodeBase->CodeToHex(L"\U0001F6B9", sStatusbar).c_str()); +} + +/*! + * @brief UnicodeToHex代替関数のテスト + */ +TEST(CCodeBase, JisToHex) +{ + const auto eCodeType = CODE_JIS; + auto pCodeBase = CCodeFactory::CreateCodeBase(eCodeType); + + // 特定コードのマルチバイトを表示する設定 + CommonSetting_Statusbar sStatusbar; + sStatusbar.m_bDispUniInSjis = false; + sStatusbar.m_bDispUniInJis = false; + sStatusbar.m_bDispUniInEuc = false; + sStatusbar.m_bDispUtf8Codepoint = false; + sStatusbar.m_bDispSPCodepoint = false; + + // 日本語 ひらがな「あ」(文字セットがサポートしない文字でも統一仕様) + EXPECT_STREQ(L"2422", pCodeBase->CodeToHex(L"あ", sStatusbar).c_str()); + + // カラー絵文字「男性のシンボル」(サロゲートペア) + EXPECT_STREQ(L"D83DDEB9", pCodeBase->CodeToHex(L"\U0001F6B9", sStatusbar).c_str()); +} + +/*! + * @brief UnicodeToHex代替関数のテスト + */ +TEST(CCodeBase, EucToHex) +{ + const auto eCodeType = CODE_EUC; + auto pCodeBase = CCodeFactory::CreateCodeBase(eCodeType); + + // 特定コードのマルチバイトを表示する設定 + CommonSetting_Statusbar sStatusbar; + sStatusbar.m_bDispUniInSjis = false; + sStatusbar.m_bDispUniInJis = false; + sStatusbar.m_bDispUniInEuc = false; + sStatusbar.m_bDispUtf8Codepoint = false; + sStatusbar.m_bDispSPCodepoint = false; + + // 日本語 ひらがな「あ」(文字セットがサポートしない文字でも統一仕様) + EXPECT_STREQ(L"A4A2", pCodeBase->CodeToHex(L"あ", sStatusbar).c_str()); + + // カラー絵文字「男性のシンボル」(サロゲートペア) + EXPECT_STREQ(L"D83DDEB9", pCodeBase->CodeToHex(L"\U0001F6B9", sStatusbar).c_str()); +} + +/*! + * @brief UnicodeToHex代替関数のテスト + */ +TEST(CCodeBase, Utf8ToHex) +{ + const auto eCodeType = CODE_UTF8; + auto pCodeBase = CCodeFactory::CreateCodeBase(eCodeType); + + // 特定コードのマルチバイトを表示する設定 + CommonSetting_Statusbar sStatusbar; + sStatusbar.m_bDispUniInSjis = false; + sStatusbar.m_bDispUniInJis = false; + sStatusbar.m_bDispUniInEuc = false; + sStatusbar.m_bDispUtf8Codepoint = false; + sStatusbar.m_bDispSPCodepoint = false; + + // 日本語 ひらがな「あ」(文字セットがサポートしない文字でも統一仕様) + EXPECT_STREQ(L"E38182", pCodeBase->CodeToHex(L"あ", sStatusbar).c_str()); + + // カラー絵文字「男性のシンボル」(サロゲートペア) + EXPECT_STREQ(L"F09F9AB9", pCodeBase->CodeToHex(L"\U0001F6B9", sStatusbar).c_str()); +} + +/*! + * @brief UnicodeToHex代替関数のテスト + */ +TEST(CCodeBase, Latin1ToHex) +{ + const auto eCodeType = CODE_LATIN1; + auto pCodeBase = CCodeFactory::CreateCodeBase(eCodeType); + + // 特定コードのマルチバイトを表示する設定 + CommonSetting_Statusbar sStatusbar; + sStatusbar.m_bDispUniInSjis = false; + sStatusbar.m_bDispUniInJis = false; + sStatusbar.m_bDispUniInEuc = false; + sStatusbar.m_bDispUtf8Codepoint = false; + sStatusbar.m_bDispSPCodepoint = false; + + // 日本語 ひらがな「あ」(文字セットがサポートしない文字でも統一仕様) + EXPECT_STREQ(L"U+3042", pCodeBase->CodeToHex(L"あ", sStatusbar).c_str()); + + // カラー絵文字「男性のシンボル」(サロゲートペア) + EXPECT_STREQ(L"D83DDEB9", pCodeBase->CodeToHex(L"\U0001F6B9", sStatusbar).c_str()); +} From 3e09237e2795070e8604039938ca561bc604899f Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Wed, 14 Apr 2021 14:58:08 +0900 Subject: [PATCH 0616/1024] =?UTF-8?q?Visual=20Studio=E3=81=AE=E3=82=A8?= =?UTF-8?q?=E3=83=87=E3=82=A3=E3=82=B7=E3=83=A7=E3=83=B3=E3=81=AB=E9=96=A2?= =?UTF-8?q?=E3=81=99=E3=82=8B=E8=A8=98=E8=BF=B0=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Community/Professiona以上のエディションが必要であることを明記 - Communityエディションに限定するような記述の残存箇所を修正 --- README.md | 14 ++++++-------- build.md | 2 +- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 10f5aded22..b12e3e4e81 100644 --- a/README.md +++ b/README.md @@ -11,8 +11,8 @@ -[Visual Studio Community 2017]: https://visualstudio.microsoft.com/vs/older-downloads/ "Visual Studio Community 2017" -[Visual Studio Community 2019]: https://visualstudio.microsoft.com/ja/downloads/ "Visual Studio Community 2019" +[Visual Studio 2017]: https://visualstudio.microsoft.com/ja/vs/older-downloads/ "Visual Studio 2017" +[Visual Studio 2019]: https://visualstudio.microsoft.com/ja/downloads/ "Visual Studio 2019" [Markdown をローカルで確認する方法]: https://github.com/sakura-editor/sakura/wiki/markdown-%E3%82%92%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%81%A7%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95 [How to extract currently installed Visual Studio component IDs?]: https://stackoverflow.com/questions/52946333/how-to-extract-currently-installed-visual-studio-component-ids [Configure Visual Studio across your organization with .vsconfig]: https://devblogs.microsoft.com/setup/configure-visual-studio-across-your-organization-with-vsconfig/ @@ -28,7 +28,7 @@ - [開発参加ポリシー](#開発参加ポリシー) - [Build Requirements](#build-requirements) - [Visual Studio Install options required](#visual-studio-install-options-required) - - [Visual Studio Community 2019 対応に関して](#visual-studio-community-2019-対応に関して) + - [Visual Studio 2019 対応に関して](#visual-studio-2019-対応に関して) - [.vsconfig に関して](#vsconfig-に関して) - [Visaul Studio 2017/2019 共通](#visaul-studio-20172019-共通) - [Visaul Studio 2019 のみ](#visaul-studio-2019-のみ) @@ -71,16 +71,14 @@ https://github.com/sakura-editor/sakura/wiki ## Build Requirements -Sakura Editor をコンパイルするためにはいずれかが必要 -- [Visual Studio Community 2017][Visual Studio Community 2017] -- [Visual Studio Community 2019][Visual Studio Community 2019] +Sakura Editor をコンパイルするためには、 Community または Professional エディション以上の [Visual Studio 2017][Visual Studio 2017] または [Visual Studio 2019][Visual Studio 2019] が必要です。 -正式バイナリは [Visual Studio Community 2017][Visual Studio Community 2017] でビルドされます。 +正式バイナリは [Visual Studio Community 2017][Visual Studio 2017] でビルドされます。 ### Visual Studio Install options required - Windows 10 SDK -### Visual Studio Community 2019 対応に関して +### Visual Studio 2019 対応に関して Visual Studio 2017/2019 の両対応に関しては [#866](https://github.com/sakura-editor/sakura/issues/866) で対処済みです。 [仕組みに関してはこちらを参照](vcx-props/project-PlatformToolset.md) diff --git a/build.md b/build.md index c30a6303f6..0309b468b3 100644 --- a/build.md +++ b/build.md @@ -32,7 +32,7 @@ ### 実行ファイルのビルドに必要なもの - (オプション) [7Zip](https://sevenzip.osdn.jp/) (外部依存ファイルの解凍に使用) -- Visual Studio 2017 または Visual Studio 2019 +- Community または Professional エディション以上の Visual Studio 2017 または Visual Studio 2019 - Windows 10 SDK のインストールも必要です。 ### HTML ヘルプのビルドに必要なもの From fa997dec7ebda82d2861a923ebe3458758e4807e Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 14 Apr 2021 19:48:03 +0900 Subject: [PATCH 0617/1024] =?UTF-8?q?typo=E4=BF=AE=E6=AD=A3(=E3=83=AC?= =?UTF-8?q?=E3=83=93=E3=83=A5=E3=83=BC=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/CCodeBase.cpp | 6 +++--- sakura_core/charset/CCodeBase.h | 2 +- tests/unittests/test-ccodebase.cpp | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sakura_core/charset/CCodeBase.cpp b/sakura_core/charset/CCodeBase.cpp index eecb826581..43219c5ff2 100644 --- a/sakura_core/charset/CCodeBase.cpp +++ b/sakura_core/charset/CCodeBase.cpp @@ -48,7 +48,7 @@ std::wstring CCodeBase::CodeToHex(const CNativeW& cSrc, const CommonSetting_Stat // うまくコードが取れなかった(Unicodeで表示) return CCodeFactory::CreateCodeBase(CODE_UNICODE)->CodeToHex(cSrc, sStatusbar, false); } - return buff.data(); + return buff; } // 表示用16進表示 UNICODE → Hex 変換 2008/6/9 Uchi @@ -165,7 +165,7 @@ void CCodeBase::GetBom( CMemory* pcmemBom ) 各種行終端子に対する特定コードによるバイナリ表現のセットを取得する。 特定コードで利用できない行終端子については空のバイナリ表現が返る。 */ -[[nodiscard]] std::map CCodeBase::GetEolDifinitions() +[[nodiscard]] std::map CCodeBase::GetEolDefinitions() { constexpr struct { EEolType type; @@ -203,7 +203,7 @@ void CCodeBase::GetBom( CMemory* pcmemBom ) void CCodeBase::GetEol( CMemory* pcmemEol, EEolType eEolType ) { if( pcmemEol != nullptr ){ - const auto map = GetEolDifinitions(); + const auto map = GetEolDefinitions(); if( auto it = map.find( eEolType ); it != map.end() ){ const auto& bin = it->second; pcmemEol->SetRawData( bin.data(), bin.length() ); diff --git a/sakura_core/charset/CCodeBase.h b/sakura_core/charset/CCodeBase.h index ed0364c731..800d29322b 100644 --- a/sakura_core/charset/CCodeBase.h +++ b/sakura_core/charset/CCodeBase.h @@ -108,7 +108,7 @@ class CCodeBase{ //ファイル形式 [[nodiscard]] virtual BinarySequence GetBomDefinition(); void GetBom( CMemory* pcmemBom ); - [[nodiscard]] virtual std::map GetEolDifinitions(); + [[nodiscard]] virtual std::map GetEolDefinitions(); void GetEol( CMemory* pcmemEol, EEolType eEolType ); // 文字コードの16進表示 diff --git a/tests/unittests/test-ccodebase.cpp b/tests/unittests/test-ccodebase.cpp index 01a5c86f39..608f88cd52 100644 --- a/tests/unittests/test-ccodebase.cpp +++ b/tests/unittests/test-ccodebase.cpp @@ -463,7 +463,7 @@ TEST_P(EolTest, test) const auto eCodeType = GetParam(); auto pCodeBase = CCodeFactory::CreateCodeBase(eCodeType); - auto map = pCodeBase->GetEolDifinitions(); + auto map = pCodeBase->GetEolDefinitions(); for( const auto&[t,bin] : map ){ CMemory m; pCodeBase->GetEol( &m, t ); From d5e332d5660fdbc7b33dabdf97ea9c9a4535f26c Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 14 Apr 2021 20:36:38 +0900 Subject: [PATCH 0618/1024] Apply rule of five | CGrepEnumFileBase --- sakura_core/CGrepEnumFileBase.h | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/sakura_core/CGrepEnumFileBase.h b/sakura_core/CGrepEnumFileBase.h index 7a25ef44a7..294a4d710e 100644 --- a/sakura_core/CGrepEnumFileBase.h +++ b/sakura_core/CGrepEnumFileBase.h @@ -60,10 +60,14 @@ class CGrepEnumFileBase { private: VPGrepEnumItem m_vpItems; -public: - CGrepEnumFileBase(){ - } + using Me = CGrepEnumFileBase; +public: + CGrepEnumFileBase() noexcept = default; + CGrepEnumFileBase(const Me&) = delete; + Me& operator = (const Me&) = delete; + CGrepEnumFileBase(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; virtual ~CGrepEnumFileBase(){ ClearItems(); } @@ -180,4 +184,5 @@ class CGrepEnumFileBase { return found; } }; + #endif /* SAKURA_CGREPENUMFILEBASE_6B85547E_13E4_4183_AE06_B4D6395ABC88_H_ */ From 14881d678c4b24d9ae1c049ad0f5a1cd7493a5fd Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 14 Apr 2021 20:42:12 +0900 Subject: [PATCH 0619/1024] Apply rule of five | CGrepEnumKeys --- sakura_core/CGrepEnumKeys.h | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/sakura_core/CGrepEnumKeys.h b/sakura_core/CGrepEnumKeys.h index 5eb1e1a96b..902cf4d18d 100644 --- a/sakura_core/CGrepEnumKeys.h +++ b/sakura_core/CGrepEnumKeys.h @@ -45,6 +45,9 @@ typedef std::vector< LPCWSTR > VGrepEnumKeys; class CGrepEnumKeys { + + using Me = CGrepEnumKeys; + public: VGrepEnumKeys m_vecSearchFileKeys; VGrepEnumKeys m_vecSearchFolderKeys; @@ -56,9 +59,11 @@ class CGrepEnumKeys { VGrepEnumKeys m_vecExceptAbsFolderKeys; public: - CGrepEnumKeys(){ - } - + CGrepEnumKeys() noexcept = default; + CGrepEnumKeys(const Me&) = delete; + Me& operator = (const Me&) = delete; + CGrepEnumKeys(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; ~CGrepEnumKeys(){ ClearItems(); } From 35bfabe468e1c20cc8aa43ec63bd2799ba79a54d Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 14 Apr 2021 21:13:30 +0900 Subject: [PATCH 0620/1024] Apply rule of zero | CKeyWordSetMgr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 実効性のないコードしか持たないデストラクタ、コピー演算子を削除する --- sakura_core/CKeyWordSetMgr.cpp | 27 --------------------------- sakura_core/CKeyWordSetMgr.h | 7 +------ 2 files changed, 1 insertion(+), 33 deletions(-) diff --git a/sakura_core/CKeyWordSetMgr.cpp b/sakura_core/CKeyWordSetMgr.cpp index 1370f15e9f..fd1156c62b 100644 --- a/sakura_core/CKeyWordSetMgr.cpp +++ b/sakura_core/CKeyWordSetMgr.cpp @@ -62,12 +62,6 @@ CKeyWordSetMgr::CKeyWordSetMgr( void ) return; } -CKeyWordSetMgr::~CKeyWordSetMgr( void) -{ - m_nKeyWordSetNum = 0; - return; -} - /*! @brief 全キーワードセットの削除と初期化 @@ -87,27 +81,6 @@ void CKeyWordSetMgr::ResetAllKeyWordSet( void ) } } -const CKeyWordSetMgr& CKeyWordSetMgr::operator=( CKeyWordSetMgr& cKeyWordSetMgr ) -{ -// int nDataLen; -// char* pData; -// int i; - if( this == &cKeyWordSetMgr ){ - return *this; - } - m_nCurrentKeyWordSetIdx = cKeyWordSetMgr.m_nCurrentKeyWordSetIdx; - m_nKeyWordSetNum = cKeyWordSetMgr.m_nKeyWordSetNum; - //配列まるごとコピー - memcpy_raw( m_szSetNameArr , cKeyWordSetMgr.m_szSetNameArr , sizeof( m_szSetNameArr ) ); - memcpy_raw( m_bKEYWORDCASEArr, cKeyWordSetMgr.m_bKEYWORDCASEArr, sizeof( m_bKEYWORDCASEArr ) ); - memcpy_raw( m_nStartIdx , cKeyWordSetMgr.m_nStartIdx , sizeof( m_nStartIdx ) );// 2004.07.29 Moca - memcpy_raw( m_nKeyWordNumArr , cKeyWordSetMgr.m_nKeyWordNumArr , sizeof( m_nKeyWordNumArr ) ); - memcpy_raw( m_szKeyWordArr , cKeyWordSetMgr.m_szKeyWordArr , sizeof( m_szKeyWordArr ) ); - memcpy_raw( m_IsSorted , cKeyWordSetMgr.m_IsSorted , sizeof( m_IsSorted ) ); //MIK 2000.12.01 binary search - memcpy_raw( m_nKeyWordMaxLenArr, cKeyWordSetMgr.m_nKeyWordMaxLenArr, sizeof( m_nKeyWordMaxLenArr ) ); //2014.05.04 Moca - return *this; -} - /*! @brief キーワードセットの追加 @date 2005.01.26 Moca 新規作成 diff --git a/sakura_core/CKeyWordSetMgr.h b/sakura_core/CKeyWordSetMgr.h index fa11367300..130b667462 100644 --- a/sakura_core/CKeyWordSetMgr.h +++ b/sakura_core/CKeyWordSetMgr.h @@ -74,8 +74,7 @@ class CKeyWordSetMgr || Constructors */ CKeyWordSetMgr(); - ~CKeyWordSetMgr(); - + /// @name キーワードセット操作 bool AddKeyWordSet( //!< セットの追加 const wchar_t* pszSetName, //!< [in] セット名 @@ -124,10 +123,6 @@ class CKeyWordSetMgr void ResetAllKeyWordSet( void ); // 全キーワードセットの削除と初期化 // To Here 2004.07.29 Moca - /* - || 演算子 - */ - const CKeyWordSetMgr& operator=( CKeyWordSetMgr& ); /* || Attributes & Operations */ From 571c61b1d9a93810a3d07b7857741854e4c67d13 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 14 Apr 2021 21:16:50 +0900 Subject: [PATCH 0621/1024] Apply rule of five | COpeBlk --- sakura_core/COpeBlk.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sakura_core/COpeBlk.h b/sakura_core/COpeBlk.h index d817bc65a7..fcdfd26433 100644 --- a/sakura_core/COpeBlk.h +++ b/sakura_core/COpeBlk.h @@ -30,9 +30,16 @@ class COpeBlk; COpe を複数束ねるためのもの。Undo, Redoはこのブロック単位で行われる。 */ class COpeBlk { + + using Me = COpeBlk; + public: //コンストラクタ・デストラクタ COpeBlk(); + COpeBlk(const Me&) = delete; + Me& operator = (const Me&) = delete; + COpeBlk(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; ~COpeBlk(); //インターフェース From a08df3dfeebf2ce0be16ad399bae65f0ea93d286 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 14 Apr 2021 21:23:55 +0900 Subject: [PATCH 0622/1024] Apply rule of five | COpeBuf --- sakura_core/COpeBuf.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sakura_core/COpeBuf.h b/sakura_core/COpeBuf.h index 510bc9b25f..9cebf2da43 100644 --- a/sakura_core/COpeBuf.h +++ b/sakura_core/COpeBuf.h @@ -29,9 +29,16 @@ class COpeBlk;/// 2002/2/10 aroka @brief アンドゥ・リドゥバッファ */ class COpeBuf { + + using Me = COpeBuf; + public: //コンストラクタ・デストラクタ COpeBuf(); + COpeBuf(const Me&) = delete; + Me& operator = (const Me&) = delete; + COpeBuf(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; ~COpeBuf(); //状態 From 48955f3c17542a50c0a1caf09c7cb5c1556495c5 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 14 Apr 2021 21:32:37 +0900 Subject: [PATCH 0623/1024] Apply rule of five | CDllImp --- sakura_core/extmodule/CDllHandler.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sakura_core/extmodule/CDllHandler.h b/sakura_core/extmodule/CDllHandler.h index 63d36e5892..04f37ee075 100644 --- a/sakura_core/extmodule/CDllHandler.h +++ b/sakura_core/extmodule/CDllHandler.h @@ -87,6 +87,9 @@ enum EDllResult{ @date 2008.05.10 kobake 整理。派生クラスは、~Impをオーバーロードすれば良いという方式です。 */ class CDllImp{ + + using Me = CDllImp; + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 型 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // @@ -107,6 +110,10 @@ class CDllImp{ public: //コンストラクタ・デストラクタ CDllImp(); + CDllImp(const Me&) = delete; + Me& operator = (const Me&) = delete; + CDllImp(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; virtual ~CDllImp(); // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // From ab22035319ddfa1c2a3814ade7e8c6f0ad69525f Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 14 Apr 2021 21:41:57 +0900 Subject: [PATCH 0624/1024] Apply rule of five | CSelectLang --- sakura_core/CSelectLang.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/sakura_core/CSelectLang.h b/sakura_core/CSelectLang.h index 538f324fb8..7efd60a9f9 100644 --- a/sakura_core/CSelectLang.h +++ b/sakura_core/CSelectLang.h @@ -23,6 +23,9 @@ class CSelectLang { + + using Me = CSelectLang; + public: // メッセージリソース用構造体 struct SSelLangInfo { @@ -44,7 +47,11 @@ class CSelectLang /* || Constructors */ - CSelectLang(){} + CSelectLang() noexcept = default; + CSelectLang(const Me&) = delete; + Me& operator = (const Me&) = delete; + CSelectLang(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; ~CSelectLang(); /* From f101c49275d7c28e3e495ab2da7e37d7d0263583 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 14 Apr 2021 21:47:50 +0900 Subject: [PATCH 0625/1024] Apply rule of five | CESI --- sakura_core/charset/CESI.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sakura_core/charset/CESI.h b/sakura_core/charset/CESI.h index c9afb042b4..76279506d1 100644 --- a/sakura_core/charset/CESI.h +++ b/sakura_core/charset/CESI.h @@ -85,8 +85,15 @@ enum EBOMType { //*/ class CESI { + + using Me = CESI; + public: + CESI(const Me&) = delete; + Me& operator = (const Me&) = delete; + CESI(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; virtual ~CESI() { ; } explicit CESI( const SEncodingConfig& ref ) : m_pEncodingConfig(&ref) { m_dwStatus = ESI_NOINFORMATION; From 46b974baa346bd871a174d1b2d84936d77d3043b Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 14 Apr 2021 21:51:44 +0900 Subject: [PATCH 0626/1024] Apply rule of zefo | CIcu4cI18n --- sakura_core/extmodule/CIcu4cI18n.cpp | 4 ---- sakura_core/extmodule/CIcu4cI18n.h | 1 - 2 files changed, 5 deletions(-) diff --git a/sakura_core/extmodule/CIcu4cI18n.cpp b/sakura_core/extmodule/CIcu4cI18n.cpp index 301716e9a4..1527ca4891 100644 --- a/sakura_core/extmodule/CIcu4cI18n.cpp +++ b/sakura_core/extmodule/CIcu4cI18n.cpp @@ -33,10 +33,6 @@ CIcu4cI18n::CIcu4cI18n() noexcept { } -CIcu4cI18n::~CIcu4cI18n() noexcept -{ -} - /*! * @brief DLLの名前を返す */ diff --git a/sakura_core/extmodule/CIcu4cI18n.h b/sakura_core/extmodule/CIcu4cI18n.h index 3b085f4b1a..f9c09fbdba 100644 --- a/sakura_core/extmodule/CIcu4cI18n.h +++ b/sakura_core/extmodule/CIcu4cI18n.h @@ -57,7 +57,6 @@ class CIcu4cI18n final : public CDllImp public: CIcu4cI18n() noexcept; - virtual ~CIcu4cI18n() noexcept; protected: // CDllImpインタフェース From aca59cdf5b27c2d36cda152089c3ffd432dc6cf5 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 14 Apr 2021 21:55:17 +0900 Subject: [PATCH 0627/1024] Apply rule of five | CDialog --- sakura_core/dlg/CDialog.h | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/sakura_core/dlg/CDialog.h b/sakura_core/dlg/CDialog.h index 51b2c6d4aa..fee57884b3 100644 --- a/sakura_core/dlg/CDialog.h +++ b/sakura_core/dlg/CDialog.h @@ -62,13 +62,19 @@ struct SAnchorList @date 2002.2.17 YAZAKI CShareDataのインスタンスは、CProcessにひとつあるのみ。 */ -class CDialog -{ +class CDialog{ + + using Me = CDialog; + public: /* || Constructors */ CDialog( bool bSizable = false, bool bCheckShareData = true ); + CDialog(const Me&) = delete; + Me& operator = (const Me&) = delete; + CDialog(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; virtual ~CDialog(); /* || Attributes & Operations From c5f7cbfd75733d277ff0d5039f19c71c58e5a07e Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 14 Apr 2021 22:01:16 +0900 Subject: [PATCH 0628/1024] Apply rule of five | CWnd --- sakura_core/window/CWnd.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/sakura_core/window/CWnd.h b/sakura_core/window/CWnd.h index bfd011dfdf..43805a633f 100644 --- a/sakura_core/window/CWnd.h +++ b/sakura_core/window/CWnd.h @@ -37,12 +37,20 @@ */ class CWnd { + + using Me = CWnd; + protected: friend LRESULT CALLBACK CWndProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); public: /* Constructors */ CWnd(const WCHAR* pszInheritanceAppend = L""); + CWnd(const Me&) = delete; + Me& operator = (const Me&) = delete; + CWnd(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; virtual ~CWnd(); + /* || Attributes & Operations */ From 532755e04785b896d06b01e0600bbcf9ab4062fc Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 14 Apr 2021 22:32:28 +0900 Subject: [PATCH 0629/1024] =?UTF-8?q?UTF32BE=E3=81=AE=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-ccodebase.cpp | 48 ++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/tests/unittests/test-ccodebase.cpp b/tests/unittests/test-ccodebase.cpp index 608f88cd52..ec772cf68f 100644 --- a/tests/unittests/test-ccodebase.cpp +++ b/tests/unittests/test-ccodebase.cpp @@ -451,6 +451,54 @@ TEST(CCodeBase, codeUtf32Le) //! googletestの出力に文字セットIDを出力させる std::ostream& operator << (std::ostream& os, const ECodeType& eCodeType); +/*! + * @brief 文字コード変換のテスト + */ +TEST(CCodeBase, codeUtf32Be) +{ + const auto eCodeType = (ECodeType)12001; + auto pCodeBase = CCodeFactory::CreateCodeBase( eCodeType ); + + // 7bit ASCII範囲(等価変換) + constexpr auto& mbsAscii = "\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F"; + constexpr auto& wcsAscii = L"\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F"; + + // ビッグエンディアンのバイナリを作成 + std::basic_string bin; + for( const auto ch : mbsAscii ){ + bin.append( 1, ::_byteswap_ulong( ch ) ); + } + + bool bComplete1_1 = false; + auto encoded = pCodeBase->CodeToUnicode( BinarySequenceView( reinterpret_cast(bin.data()), bin.size() * sizeof(decltype(bin)::value_type)), &bComplete1_1 ); + ASSERT_STREQ( wcsAscii, encoded.GetStringPtr() ); + ASSERT_TRUE( bComplete1_1 ); + + bool bComplete1_2 = false; + auto decoded = pCodeBase->UnicodeToCode( encoded, &bComplete1_2 ); + ASSERT_EQ( 0, memcmp( bin.data(), decoded.data(), decoded.size() ) ); + ASSERT_TRUE( bComplete1_2 ); + + // かな漢字の変換(UTF-32BE仕様) + constexpr const auto& wcsKanaKanji = L"カナかなカナ漢字"; + + // ビッグエンディアンのバイナリを作成 + bin.clear(); + for( const auto ch : wcsKanaKanji ){ + bin.append( 1, ::_byteswap_ulong( ch ) ); + } + + bool bComplete2_1 = false; + auto encoded2 = pCodeBase->CodeToUnicode( BinarySequenceView( reinterpret_cast(bin.data()), bin.size() * sizeof(decltype(bin)::value_type) ), &bComplete2_1 ); + ASSERT_STREQ( wcsKanaKanji, encoded2.GetStringPtr() ); + ASSERT_TRUE( bComplete2_1 ); + + bool bComplete2_2 = false; + auto decoded2 = pCodeBase->UnicodeToCode( encoded2, &bComplete2_2 ); + ASSERT_EQ( 0, memcmp( bin.data(), decoded2.data(), decoded2.size() ) ); + ASSERT_TRUE( bComplete2_2 ); +} + //! EOLテストのためのフィクスチャクラス class EolTest : public ::testing::TestWithParam {}; From ae87b19c7641e777b800ac3ffd9b86ab7154c0f8 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 14 Apr 2021 22:32:45 +0900 Subject: [PATCH 0630/1024] =?UTF-8?q?CCodePage::S=5FUTF32BEToUnicode?= =?UTF-8?q?=E3=81=8C7bitASCII=E3=82=92=E5=A4=89=E6=8F=9B=E3=81=A7=E3=81=8D?= =?UTF-8?q?=E3=81=AA=E3=81=84=E4=B8=8D=E5=85=B7=E5=90=88=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/CCodePage.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sakura_core/charset/CCodePage.cpp b/sakura_core/charset/CCodePage.cpp index b94033e5ab..ea41d1b1c7 100644 --- a/sakura_core/charset/CCodePage.cpp +++ b/sakura_core/charset/CCodePage.cpp @@ -569,7 +569,7 @@ int CCodePage::S_UTF32BEToUnicode( const char* pSrc, int nSrcLen, wchar_t* pDst, for(; i < nSrcLen; ){ if( i + 3 < nSrcLen ){ if( pSrcByte[i+1] == 0x00 && pSrcByte[i] == 0x00 ){ - wchar_t c = static_cast(pSrcByte[i+1] << 8 | pSrcByte[i]); + wchar_t c = static_cast(pSrcByte[i+2] << 8 | pSrcByte[i+3]); if( IsUtf16SurrogHi(c) || IsUtf16SurrogLow(c) ){ // サロゲート断片。バイトごとに出力する) nDstUseLen += 4; @@ -597,7 +597,7 @@ int CCodePage::S_UTF32BEToUnicode( const char* pSrc, int nSrcLen, wchar_t* pDst, for(; i < nSrcLen; ){ if( i + 3 < nSrcLen ){ if( pSrcByte[i] == 0x00 && pSrcByte[i+1] == 0x00 ){ - wchar_t c = static_cast(pSrcByte[i+1] << 8 | pSrcByte[i]); + wchar_t c = static_cast(pSrcByte[i+2] << 8 | pSrcByte[i+3]); if( IsUtf16SurrogHi(c) || IsUtf16SurrogLow(c) ){ nDstUseCharLen = 4; if( nDstUseLen + nDstUseCharLen <= nDstLen ){ From 3c08b68c981810e431c1b9b1f972f7e806db6bfe Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 17 Apr 2021 14:07:44 +0900 Subject: [PATCH 0631/1024] =?UTF-8?q?CMemory=E5=A4=89=E6=9B=B4=E3=81=AE?= =?UTF-8?q?=E3=83=87=E3=82=B0=E3=83=AC=E5=AF=BE=E7=AD=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #1618変更前のコードでは、サイズゼロのインスタンスをコピーした場合にメモリが確保されていたのが、#1618の変更で確保されなくなってしまった。処理内容的には後者が正しいが、#1626の不具合が発生したので暫定的に元に戻す。 --- sakura_core/mem/CMemory.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sakura_core/mem/CMemory.cpp b/sakura_core/mem/CMemory.cpp index 4642e218e6..1b5fe035c6 100644 --- a/sakura_core/mem/CMemory.cpp +++ b/sakura_core/mem/CMemory.cpp @@ -189,6 +189,11 @@ void CMemory::SetRawData( const void* pData, size_t nDataLen ) // バッファをクリアして末尾に追加 Reset(); AppendRawData( pData, nDataLen ); + }else if( m_pRawData == nullptr ){ + // インスタンスコピーするとバッファが確保される既存の挙動を変えないために追加 + // これを入れないと取得したCNativeWのNULLチェックを忘れてGetStringPtr()する不作法なコードが落ちます。 + // 論理的には無駄な処理であるため、いつか削除したいです。 + AppendRawData( nullptr, 0 ); } } From 8465a19261d7bf48b09bdc67bb6e0d97892296e9 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 18 Apr 2021 02:37:04 +0900 Subject: [PATCH 0632/1024] =?UTF-8?q?CUtf7::Utf7ToUni=E3=81=AE=E3=83=A1?= =?UTF-8?q?=E3=83=A2=E3=83=AA=E7=AF=84=E5=9B=B2=E5=A4=96=E3=82=A8=E3=83=A9?= =?UTF-8?q?=E3=83=BC=E3=82=92=E5=AF=BE=E7=AD=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/CUtf7.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/charset/CUtf7.cpp b/sakura_core/charset/CUtf7.cpp index 2b94ecf14d..e1fffff3f5 100644 --- a/sakura_core/charset/CUtf7.cpp +++ b/sakura_core/charset/CUtf7.cpp @@ -109,7 +109,7 @@ int CUtf7::Utf7ToUni( const char* pSrc, const int nSrcLen, wchar_t* pDst, bool* if( berror_tmp ){ berror = true; } - if( nblocklen < 1 && *(pr_next-1) == '-' ){ + if( nblocklen < 1 && pr < pr_next && *(pr_next - 1) == '-' ){ // +- → + 変換 *pw = L'+'; ++pw; From 815b15df816651e2b0dff5814661126c628e6461 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 18 Apr 2021 14:45:24 +0900 Subject: [PATCH 0633/1024] =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=81=AE?= =?UTF-8?q?=E6=8C=BF=E5=85=A5=E4=BD=8D=E7=BD=AE=E3=82=92=E9=96=93=E9=81=95?= =?UTF-8?q?=E3=81=A3=E3=81=A6=E3=81=84=E3=81=9F=E3=81=AE=E3=81=AB=E5=AF=BE?= =?UTF-8?q?=E5=87=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-ccodebase.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/unittests/test-ccodebase.cpp b/tests/unittests/test-ccodebase.cpp index ec772cf68f..34fe44b339 100644 --- a/tests/unittests/test-ccodebase.cpp +++ b/tests/unittests/test-ccodebase.cpp @@ -449,8 +449,6 @@ TEST(CCodeBase, codeUtf32Le) ASSERT_TRUE( bComplete2_2 ); } -//! googletestの出力に文字セットIDを出力させる -std::ostream& operator << (std::ostream& os, const ECodeType& eCodeType); /*! * @brief 文字コード変換のテスト */ @@ -499,6 +497,8 @@ TEST(CCodeBase, codeUtf32Be) ASSERT_TRUE( bComplete2_2 ); } +//! googletestの出力に文字セットIDを出力させる +std::ostream& operator << (std::ostream& os, const ECodeType& eCodeType); //! EOLテストのためのフィクスチャクラス class EolTest : public ::testing::TestWithParam {}; From 839af6d985dd1f703218fd3416466132dec5cb43 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 18 Apr 2021 14:47:11 +0900 Subject: [PATCH 0634/1024] =?UTF-8?q?Latin1=E3=83=86=E3=82=B9=E3=83=88?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 実装されている仕様を明確するようにテストを修正 --- tests/unittests/test-ccodebase.cpp | 44 +++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/tests/unittests/test-ccodebase.cpp b/tests/unittests/test-ccodebase.cpp index 34fe44b339..40994ac9f5 100644 --- a/tests/unittests/test-ccodebase.cpp +++ b/tests/unittests/test-ccodebase.cpp @@ -228,7 +228,49 @@ TEST(CCodeBase, codeLatin1) EXPECT_EQ( 0, memcmp( mbsAscii, decoded1.data(), decoded1.size() ) ); EXPECT_TRUE( bComplete1_2 ); - // Latin1はかな漢字変換非サポート + // Latin1はかな漢字変換非サポートなので、0x80以上の変換できる文字をチェックする + // 符号位置 81, 8D, 8F, 90, および 9D は未使用だが、そのまま出力される。 + constexpr const auto& wcsLatin1ExtChars = + L"€\x81‚ƒ„…†‡ˆ‰Š‹Œ\x8DŽ\x8F" + L"\x90‘’“”•–—˜™š›œ\x9DžŸ" + L"\xA0¡¢£¤¥¦§¨©ª«¬\xAD®¯" + L"°±²³´µ¶·¸¹º»¼½¾¿" + L"ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ" + L"ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß" + L"àáâãäåæçèéêëìíîï" + L"ðñòóôõö÷øùúûüýþÿ" + ; + constexpr const auto& mbsLatin1ExtChars = + "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F" + "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F" + "\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF" + "\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF" + "\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF" + "\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF" + "\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF" + "\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF" + ; + + bool bComplete2_1 = false; + auto encoded2 = pCodeBase->CodeToUnicode(BinarySequenceView(reinterpret_cast(mbsLatin1ExtChars), _countof(mbsLatin1ExtChars)), &bComplete2_1); + ASSERT_STREQ(wcsLatin1ExtChars, encoded2.GetStringPtr()); + ASSERT_TRUE(bComplete2_1); + + bool bComplete2_2 = false; + auto decoded2 = pCodeBase->UnicodeToCode(encoded2, &bComplete2_2); + ASSERT_EQ(0, memcmp(mbsLatin1ExtChars, decoded2.data(), decoded2.size())); + ASSERT_TRUE(bComplete2_2); + + // Unicodeに変換できない文字はない(Latin1仕様) + + // Unicodeから変換できない文字(Latin1仕様) + constexpr const auto& wcsOGuy = L"カナかなカナ漢字"; + constexpr const auto& mbsOGuy = "????????"; + + bool bComplete4_2 = true; + auto decoded4 = pCodeBase->UnicodeToCode(wcsOGuy, &bComplete4_2); + ASSERT_EQ(0, memcmp(mbsOGuy, decoded4.data(), decoded4.size())); + ASSERT_FALSE(bComplete4_2); } /*! From 9c017ffd067114a79e8797a3a5c02cf1893de18b Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sun, 18 Apr 2021 23:13:15 +0900 Subject: [PATCH 0635/1024] =?UTF-8?q?CConvert=5FTabsToSpace::DoConvert=20?= =?UTF-8?q?=E3=81=A7=20std::wstring=20=E3=82=92=E4=BD=BF=E7=94=A8=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/convert/CConvert_TabToSpace.cpp | 84 ++++++--------------- 1 file changed, 23 insertions(+), 61 deletions(-) diff --git a/sakura_core/convert/CConvert_TabToSpace.cpp b/sakura_core/convert/CConvert_TabToSpace.cpp index 4ca8de55ba..52fdb328b4 100644 --- a/sakura_core/convert/CConvert_TabToSpace.cpp +++ b/sakura_core/convert/CConvert_TabToSpace.cpp @@ -32,70 +32,32 @@ //! TAB→空白 bool CConvert_TabToSpace::DoConvert(CNativeW* pcData) { - using namespace WCODE; - - const wchar_t* pLine; - int nLineLen; - wchar_t* pDes; - int nBgn; - int i; - int nPosDes; - int nPosX; - int nWork; - CEol cEol; - nBgn = 0; - nPosDes = 0; - /* CRLFで区切られる「行」を返す。CRLFは行長に加えない */ - while( NULL != ( pLine = GetNextLineW( pcData->GetStringPtr(), pcData->GetStringLength(), &nLineLen, &nBgn, &cEol, m_bExtEol ) ) ){ - if( 0 < nLineLen ){ - // 先頭行については開始桁位置を考慮する(さらに折り返し関連の対策が必要?) - nPosX = (pcData->GetStringPtr() == pLine)? m_nStartColumn: 0; - for( i = 0; i < nLineLen; ++i ){ - if( TAB == pLine[i] ){ - nWork = m_nTabWidth - ( nPosX % m_nTabWidth ); - nPosDes += nWork; - nPosX += nWork; - }else{ - nPosDes++; - nPosX++; - if(WCODE::IsZenkaku(pLine[i])) nPosX++; //全角文字ずれ対応 2008.10.15 matsumo - } + std::wstring buffer; + int begin = 0; + while (true) { + int lineLength; + CEol eol; + /* CRLFで区切られる「行」を返す。CRLFは行長に加えない */ + const wchar_t* line = GetNextLineW(pcData->GetStringPtr(), + pcData->GetStringLength(), &lineLength, &begin, &eol, m_bExtEol); + if (!line) + break; + // 先頭行については開始桁位置を考慮する(さらに折り返し関連の対策が必要?) + int pos = (pcData->GetStringPtr() == line) ? m_nStartColumn : 0; + for (int i = 0; i < lineLength; ++i) { + if (line[i] == WCODE::TAB) { + const int width = m_nTabWidth - (pos % m_nTabWidth); + buffer.append(width, L' '); + pos += width; + } else { + buffer.push_back(line[i]); + pos += WCODE::IsZenkaku(line[i]) ? 2 : 1; //全角文字ずれ対応 2008.10.15 matsumo } } - nPosDes += cEol.GetLen(); + buffer.append(eol.GetValue2(), eol.GetLen()); } - if( 0 >= nPosDes ){ + if (buffer.empty()) return false; - } - pDes = new wchar_t[nPosDes + 1]; - nBgn = 0; - nPosDes = 0; - /* CRLFで区切られる「行」を返す。CRLFは行長に加えない */ - while( NULL != ( pLine = GetNextLineW( pcData->GetStringPtr(), pcData->GetStringLength(), &nLineLen, &nBgn, &cEol, m_bExtEol ) ) ){ - if( 0 < nLineLen ){ - // 先頭行については開始桁位置を考慮する(さらに折り返し関連の対策が必要?) - nPosX = (pcData->GetStringPtr() == pLine)? m_nStartColumn: 0; - for( i = 0; i < nLineLen; ++i ){ - if( TAB == pLine[i] ){ - nWork = m_nTabWidth - ( nPosX % m_nTabWidth ); - wmemset( &pDes[nPosDes], L' ', nWork ); - nPosDes += nWork; - nPosX += nWork; - }else{ - pDes[nPosDes] = pLine[i]; - nPosDes++; - nPosX++; - if(WCODE::IsZenkaku(pLine[i])) nPosX++; //全角文字ずれ対応 2008.10.15 matsumo - } - } - } - wmemcpy( &pDes[nPosDes], cEol.GetValue2(), cEol.GetLen() ); - nPosDes += cEol.GetLen(); - } - pDes[nPosDes] = L'\0'; - - pcData->SetString( pDes, nPosDes ); - delete [] pDes; - pDes = NULL; + pcData->SetString(buffer.c_str(), buffer.length()); return true; } From ac1fcb31119aa69d5e9b9d734fdd3a565a8cea85 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 19 Apr 2021 13:05:41 +0900 Subject: [PATCH 0636/1024] =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E5=A4=89?= =?UTF-8?q?=E6=95=B0=E5=90=8D=E3=82=92=E8=A8=82=E6=AD=A3(=E3=83=AC?= =?UTF-8?q?=E3=83=93=E3=83=A5=E3=83=BC=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-ccodebase.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/unittests/test-ccodebase.cpp b/tests/unittests/test-ccodebase.cpp index 40994ac9f5..001235122e 100644 --- a/tests/unittests/test-ccodebase.cpp +++ b/tests/unittests/test-ccodebase.cpp @@ -264,12 +264,12 @@ TEST(CCodeBase, codeLatin1) // Unicodeに変換できない文字はない(Latin1仕様) // Unicodeから変換できない文字(Latin1仕様) - constexpr const auto& wcsOGuy = L"カナかなカナ漢字"; - constexpr const auto& mbsOGuy = "????????"; + constexpr const auto& wcsKanaKanji = L"カナかなカナ漢字"; + constexpr const auto& mbsKanaKanji = "????????"; bool bComplete4_2 = true; - auto decoded4 = pCodeBase->UnicodeToCode(wcsOGuy, &bComplete4_2); - ASSERT_EQ(0, memcmp(mbsOGuy, decoded4.data(), decoded4.size())); + auto decoded4 = pCodeBase->UnicodeToCode(wcsKanaKanji, &bComplete4_2); + ASSERT_EQ(0, memcmp(mbsKanaKanji, decoded4.data(), decoded4.size())); ASSERT_FALSE(bComplete4_2); } From e689610c3a26dfb034ed765477f8c35b45400aea Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Mon, 19 Apr 2021 15:08:50 +0900 Subject: [PATCH 0637/1024] =?UTF-8?q?=E5=A4=89=E6=8F=9B=E5=89=8D=E3=81=AB?= =?UTF-8?q?=20reserve=20=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/convert/CConvert_TabToSpace.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/sakura_core/convert/CConvert_TabToSpace.cpp b/sakura_core/convert/CConvert_TabToSpace.cpp index 52fdb328b4..518fc39ffe 100644 --- a/sakura_core/convert/CConvert_TabToSpace.cpp +++ b/sakura_core/convert/CConvert_TabToSpace.cpp @@ -24,6 +24,9 @@ */ #include "StdAfx.h" #include "CConvert_TabToSpace.h" + +#include +#include #include "charset/charcode.h" #include "CEol.h" #include "util/string_ex2.h" @@ -32,20 +35,24 @@ //! TAB→空白 bool CConvert_TabToSpace::DoConvert(CNativeW* pcData) { + const std::wstring_view source(pcData->GetStringPtr(), pcData->GetStringLength()); + const std::ptrdiff_t numOfTabs = std::count(source.begin(), source.end(), L'\t'); std::wstring buffer; + buffer.reserve(source.length() + numOfTabs * (m_nTabWidth - 1)); + int begin = 0; while (true) { int lineLength; CEol eol; /* CRLFで区切られる「行」を返す。CRLFは行長に加えない */ - const wchar_t* line = GetNextLineW(pcData->GetStringPtr(), - pcData->GetStringLength(), &lineLength, &begin, &eol, m_bExtEol); + const wchar_t* line = GetNextLineW(source.data(), + source.length(), &lineLength, &begin, &eol, m_bExtEol); if (!line) break; // 先頭行については開始桁位置を考慮する(さらに折り返し関連の対策が必要?) - int pos = (pcData->GetStringPtr() == line) ? m_nStartColumn : 0; + int pos = (source.data() == line) ? m_nStartColumn : 0; for (int i = 0; i < lineLength; ++i) { - if (line[i] == WCODE::TAB) { + if (line[i] == L'\t') { const int width = m_nTabWidth - (pos % m_nTabWidth); buffer.append(width, L' '); pos += width; From 0df19e40eebcbc5ec94d8c750fdf1edbf34d34df Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Mon, 19 Apr 2021 15:27:21 +0900 Subject: [PATCH 0638/1024] =?UTF-8?q?Code=20Smell=20=E3=81=AB=E5=AF=BE?= =?UTF-8?q?=E5=87=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/convert/CConvert_TabToSpace.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/convert/CConvert_TabToSpace.cpp b/sakura_core/convert/CConvert_TabToSpace.cpp index 518fc39ffe..37f45cc703 100644 --- a/sakura_core/convert/CConvert_TabToSpace.cpp +++ b/sakura_core/convert/CConvert_TabToSpace.cpp @@ -46,7 +46,7 @@ bool CConvert_TabToSpace::DoConvert(CNativeW* pcData) CEol eol; /* CRLFで区切られる「行」を返す。CRLFは行長に加えない */ const wchar_t* line = GetNextLineW(source.data(), - source.length(), &lineLength, &begin, &eol, m_bExtEol); + static_cast(source.length()), &lineLength, &begin, &eol, m_bExtEol); if (!line) break; // 先頭行については開始桁位置を考慮する(さらに折り返し関連の対策が必要?) From c41f950e7cf8af17850cadb62c7ca4635585c1d4 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Wed, 21 Apr 2021 17:31:50 +0900 Subject: [PATCH 0639/1024] =?UTF-8?q?CI=E3=81=AB=E9=96=A2=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=82=92=E6=9B=B4=E6=96=B0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- appveyor.md | 131 ++++++++++++++++++++++----------------------- azure-pipelines.md | 9 +++- ci-build.md | 10 ++-- 4 files changed, 77 insertions(+), 75 deletions(-) diff --git a/README.md b/README.md index b12e3e4e81..fefa7c32d9 100644 --- a/README.md +++ b/README.md @@ -122,7 +122,7 @@ Visaul Studio 2019 で `sakura.sln` を開くと必要なコンポーネント ## CI Buildおよびローカルビルドの環境変数 -[CI でのビルド](ci-build.md) を参照 +[こちら](ci-build.md) を参照してください。 ## PR(Pull Request) を簡単にローカルに取得する方法 diff --git a/appveyor.md b/appveyor.md index 678e594655..246f759cd8 100644 --- a/appveyor.md +++ b/appveyor.md @@ -5,19 +5,17 @@ - [appveyor でのビルド](#appveyor-でのビルド) - [CI でのビルドをスキップする方法](#ci-でのビルドをスキップする方法) - [参考サイト](#参考サイト) - - [CI Buildおよびローカルビルドの環境変数](#ci-buildおよびローカルビルドの環境変数) - [ビルドに使用するバッチファイル](#ビルドに使用するバッチファイル) + - [関連情報](#関連情報) - [呼び出し構造](#呼び出し構造) - [ビルドに使用するバッチファイルの引数](#ビルドに使用するバッチファイルの引数) - [バッチファイルの仕組み](#バッチファイルの仕組み) - - [preBuild.bat の構造](#prebuildbat-の構造) + - [githash.bat の構造](#githashbat-の構造) - [処理の流れ](#処理の流れ) - [postBuild.bat の構造](#postbuildbat-の構造) - [処理の流れ](#処理の流れ-1) - - [mingw32-del.bat の構造](#mingw32-delbat-の構造) - - [処理の流れ](#処理の流れ-2) - [zipArtifacts.bat の構造](#zipartifactsbat-の構造) - - [処理の流れ](#処理の流れ-3) + - [処理の流れ](#処理の流れ-2) @@ -33,10 +31,6 @@ - https://www.appveyor.com/docs/how-to/filtering-commits/#skip-commits -## CI Buildおよびローカルビルドの環境変数 - -[CI でのビルド](ci-build.md) を参照 - ## ビルドに使用するバッチファイル | バッチファイル | 説明 | @@ -44,57 +38,70 @@ |[build-all.bat](build-all.bat)| appveyor.yml から呼ばれるバッチファイル | |[build-sln.bat](build-sln.bat)| solution をビルドするバッチファイル | |[build-gnu.bat](build-gnu.bat)| Makefile をビルドするバッチファイル | -|[sakura\preBuild.bat](sakura/preBuild.bat) | solution のビルド前に Visual Studio から呼ばれるバッチファイル | -|[sakura\postBuild.bat](sakura/postBuild.bat)| 特に何もしない | -|[sakura\mingw32-del.bat](sakura/mingw32-del.bat)| MinGW の clean でファイルを削除するバッチファイル | +|[build-sonar-qube-start.bat](build-sonar-qube-start.bat) | SonarQube の準備を行う | +|[build-sonar-qube-env.bat](build-sonar-qube-env.bat) | SonarQube の実行に必要な環境変数の設定を行う | +|[sakura\preBuild.bat](sakura/preBuild.bat) | 特に何もしない | +|[sakura\githash.bat](sakura/githash.bat) | Git や CI の環境変数から githash.h を生成する | +|[sakura\postBuild.bat](sakura/postBuild.bat) | bregonig.dll と ctags.exe を展開しコピーする | +|[tests\googletest.build.cmd](tests/googletest.build.cmd) | Google Test をビルドする | +|[tests\compiletests.run.cmd](tests/compiletests.run.cmd) | コンパイルテストを実行する | +|[build-sonar-qube-finish.bat](build-sonar-qube-finish.bat) | SonarQube の解析結果をアップロードする | |[parse-buildlog.bat](parse-buildlog.bat) | ビルドログを解析するバッチファイル | |[build-chm.bat](build-chm.bat) | compiled HTML ファイルをビルドするバッチファイル | -|[help\make-artifacts.bat](help\make-artifacts.bat) | compiled HTML ファイルを zip に固めるバッチファイル | -|[help\extract-chm-from-artifact.ps1](help\extract-chm-from-artifact.ps1) | ビルド済み compiled HTML ファイルをダウンロードして解凍するバッチファイル | |[build-installer.bat](build-installer.bat) | インストーラをビルドするバッチファイル | -|[run-cppcheck.bat](run-cppcheck.bat) | cppcheck を実行するバッチファイル | -|[run-doxygen.bat](run-doxygen.bat) | doxygen を実行するバッチファイル | |[zipArtifacts.bat](zipArtifacts.bat) | 成果物を zip に固めるバッチファイル | |[calc-hash.bat](calc-hash.bat) | 成果物の sha256 を計算するバッチファイル | +### 関連情報 + +SonarQube に関しては [こちら](SonarQube.md) も参照してください。 + ## 呼び出し構造 - [build-all.bat](build-all.bat) - - [build-sln.bat](build-sln.bat) : ソリューションファイルのビルド - - msbuild sakura.sln - - [sakura\preBuild.bat](sakura/preBuild.bat) : ビルド前の準備。 - - HeaderMake.exe : Funccode_define.h, Funccode_enum.h を生成する - - MakefileMake.exe : Makefile を更新する (MinGW 用) - - git.exe : git や appveyor 関連の情報を githash.h に出力する - - [sakura\postBuild.bat](sakura/postBuild.bat) : bregonig.dll のコピー - - [unzip.bat](tools/zip/unzip.bat) : 外部依存ファイルを展開する - - [7z.exe](https://sevenzip.osdn.jp/) : zip ファイルの展開に使用 - - [unzip.ps1](tools/zip/unzip.ps1) : powershell 版の ZIP ファイルの展開スクリプト - - [parse-buildlog.bat](parse-buildlog.bat) : ビルドログを解析する - - [appveyor_env.py](appveyor_env.py) : 環境変数を再現できる `set_appveyor_env.bat` を生成する。(成果物に含まれる) + - [build-sln.bat](build-sln.bat) + - [build-sonar-qube-start.bat](build-sonar-qube-start.bat) + - [build-sonar-qube-env.bat](build-sonar-qube-env.bat) + - [tools\zip\unzip.bat](tools/zip/unzip.bat) : ZIP ファイルを展開する + - 7z.exe または [tools\zip\unzip.ps1](tools/zip/unzip.ps1) + - MSBuild.exe sakura.sln + - [sakura\preBuild.bat](sakura/preBuild.bat) + - HeaderMake.exe : Funccode_define.h, Funccode_enum.h を生成する + - [sakura\githash.bat](sakura/githash.bat) + - git.exe + - [sakura\postBuild.bat](sakura/postBuild.bat) + - [tools\zip\unzip.bat](tools/zip/unzip.bat) + - 7z.exe または [tools\zip\unzip.ps1](tools/zip/unzip.ps1) + - [tests\googletest.build.cmd](tests/googletest.build.cmd) + - git.exe + - cmake.exe + - [tests\compiletests.run.cmd](tests/compiletests.run.cmd) + - cmake.exe + - [build-sonar-qube-finish.bat](build-sonar-qube-finish.bat) + - [build-sonar-qube-env.bat](build-sonar-qube-env.bat) + - [parse-buildlog.bat](parse-buildlog.bat) + - [appveyor_env.py](appveyor_env.py) : AppVeyor の環境変数を再現できる `set_appveyor_env.bat` を生成する。(成果物に含まれる) - [parse-buildlog.py](parse-buildlog.py) - [appveyor_env.py](appveyor_env.py) - - [build-gnu.bat](build-gnu.bat) : (Platform="MinGW"のみ) Makefileをビルドしてbuild-all.batの処理を終了する - - [build-chm.bat](build-chm.bat) : HTML Help をビルドする - - [remove-comment.py](help/remove-comment.py) : UTF-8 でのコンパイルエラーの回避のために日本語を削除するために [sakura.hh](sakura_core/sakura.hh) から一行コメントを削除する - - hhc.exe (Visual Studio 2017 に同梱) : compiled HTML をビルドするコンパイラ。かなり古いツールであり、日本語HTMLをビルドするためにはWindowsのシステムロケールを日本語に変更する必要がある。 - - [help\extract-chm-from-artifact.ps1](help\extract-chm-from-artifact.ps1) : compiled HTML が必要なタイミングで、あらかじめ作成したビルド済みCHMをダウンロード&解凍してその場でビルドを行ったのと同じ状態にする。 - - [help\make-artifacts.bat](help\make-artifacts.bat) : HTML Help を zip に固める - - [run-cppcheck.bat](run-cppcheck.bat) : cppcheck を実行する - - cppcheck.exe - - [run-doxygen.bat](run-doxygen.bat) : doxygen を実行する - - doxygen.exe - - [build-installer.bat](build-installer.bat) : Installer をビルドする - - [ISCC.exe](http://www.jrsoftware.org/isinfo.php) : InnoSetup でインストーラをビルドする - - [zipArtifacts.bat](zipArtifacts.bat) : 成果物を zip で固める - - [calc-hash.bat](calc-hash.bat) : 各成果物の sha256 を計算する + - [build-gnu.bat](build-gnu.bat) + - mingw32-make.exe sakura_core + - [sakura\githash.bat](sakura/githash.bat) + - git.exe + - HeaderMake.exe + - [build-chm.bat](build-chm.bat) + - [help\remove-comment.py](help/remove-comment.py) : [sakura_core\sakura.hh](sakura_core/sakura.hh) に記述された日本語を含む行コメントを削除する + - ChmSourceConverter.exe : ヘルプファイルの文字コードを UTF-8 から Shift_JIS に変換する + - [help\CompileChm.ps1](help/CompileChm.ps1) + - hhc.exe (Visual Studio に同梱) : compiled HTML をビルドするコンパイラ。かなり古いツールであり、日本語 HTML をビルドするためには Windows のシステムロケールを日本語に変更する必要がある。 + - [build-installer.bat](build-installer.bat) + - ISCC.exe : [InnoSetup](https://www.jrsoftware.org/isinfo.php) でインストーラをビルドする + - [zipArtifacts.bat](zipArtifacts.bat) + - [sakura\githash.bat](sakura/githash.bat) + - git.exe + - [calc-hash.bat](calc-hash.bat) - [calc-hash.py](calc-hash.py) - - [zip.bat](tools/zip/zip.bat) : 成果物を zip に固める - - [7z.exe](https://sevenzip.osdn.jp/) - - [zip.ps1](tools/zip/zip.ps1) : powershell 版の ZIP ファイルの圧縮スクリプト - - [listzip.bat](tools/zip/listzip.bat) : 成果物の zip の中身を確認する - - [7z.exe](https://sevenzip.osdn.jp/) - - [listzip.ps1](tools/zip/listzip.ps1) : powershell 版の ZIP ファイルの内容確認スクリプト + - [tools\zip\zip.bat](tools/zip/zip.bat) : 成果物を ZIP ファイルにまとめる + - 7z.exe または [tools\zip\zip.ps1](tools/zip/zip.ps1) ## ビルドに使用するバッチファイルの引数 @@ -103,46 +110,36 @@ |build-all.bat | platform ("Win32" または "x64" または "MinGW") | configuration ("Debug" または "Release") | |build-sln.bat | platform ("Win32" または "x64") | configuration ("Debug" または "Release") | |build-gnu.bat | platform ("MinGW") | configuration ("Debug" または "Release") | -|sakura\preBuild.bat | HeaderMake.exe または MakefileMake.exe の実行ファイルのフォルダパス | なし | +|sakura\preBuild.bat | HeaderMake.exe の実行ファイルのフォルダパス | なし | |sakura\postBuild.bat| platform ("Win32" または "x64") | configuration ("Debug" または "Release") | -|sakura\mingw32-del.bat| 削除するファイルパス1 | 削除するファイルパス2(2つ目以降は省略可能) | |parse-buildlog.bat | msbuild のビルドログパス | なし | |build-chm.bat | なし | なし | -|help\make-artifacts.bat | なし | なし | -|help\extract-chm-from-artifact.ps1 | なし | なし | |build-installer.bat | platform ("Win32" または "x64") | configuration ("Debug" または "Release") | -|run-cppcheck.bat | platform ("Win32" または "x64") | configuration ("Debug" または "Release") | -|run-doxygen.bat | platform ("Win32" または "x64") | configuration ("Debug" または "Release") | |zipArtifacts.bat | platform ("Win32" または "x64") | configuration ("Debug" または "Release") | |calc-hash.bat | sha256 のハッシュ値の出力先ファイル | ハッシュ値を計算するフォルダパス | ## バッチファイルの仕組み -### preBuild.bat の構造 +### githash.bat の構造 #### 処理の流れ -* HeaderMake.exe で [Funccode_x.hsrc](sakura_core/Funccode_x.hsrc) を入力に Funccode_define.h と Funccode_enum.h を生成する -* MakefileMake.exe で MinGW 用の [Makefile](sakura_core/Makefile) を更新する -* Git や appveyor の環境変数を元に githash.h を生成する (output_githash のサブルーチン) - -### postBuild.bat の構造 - -#### 処理の流れ +- Git や CI の環境変数を元に githash.h を生成する + - 設定される環境変数については [こちら](ci-build.md) を参照してください。 -* リポジトリに登録している bregonig の zipファイルを解凍して bregonig.dll を sakura.exe のビルドの出力先にコピーする - -### mingw32-del.bat の構造 +### postBuild.bat の構造 #### 処理の流れ -* 引数で渡されたパスに含まれるスラッシュ(`/`)をバックスラッシュ(`\`)に置換してdelコマンドに渡し、ファイルを削除する +* リポジトリに登録している bregonig と ctags の zip ファイルを解凍して bregonig.dll と ctags.exe を sakura.exe のビルド出力先にコピーする ### zipArtifacts.bat の構造 #### 処理の流れ * if 文の条件判定を元に、成果物のファイル名、フォルダ名を構築して環境変数に設定する + - 設定される環境変数については [こちら](ci-build.md#zipartifactsbat-で設定する環境変数) を参照してください。 * 作業用フォルダに必要なファイルをコピーする * [calc-hash.bat](calc-hash.bat) で sha256 のハッシュを計算して、作業用フォルダにコピーする -* 7z コマンドで作業用フォルダの中身を zip に固める +* [tools\zip\zip.bat](tools/zip/zip.bat) を使用して作業用フォルダの中身を zip ファイルにまとめる + - [7-Zip](https://sevenzip.osdn.jp/) が利用できる場合は 7z.exe を、利用できない場合は PowerShell を利用してファイルを作成します。 diff --git a/azure-pipelines.md b/azure-pipelines.md index 3a2a24bec4..298158d74e 100644 --- a/azure-pipelines.md +++ b/azure-pipelines.md @@ -56,10 +56,13 @@ https://azure.microsoft.com/ja-jp/services/devops/pipelines/ にアクセスし - [azure-pipelines.yml](azure-pipelines.yml) 最上位の設定ファイル - [ci/azure-pipelines/template.job.build-unittest.yml](ci/azure-pipelines/template.job.build-unittest.yml) sakura editor 本体のビルド、HTML ヘルプのビルド、インストーラのビルド、単体テストのビルド、実行 - [ci/azure-pipelines/template.steps.install-python-modules.yml](ci/azure-pipelines/template.steps.install-python-modules.yml) 必要な python モジュールのインストール + - [ci/azure-pipelines/template.job.build-on-msys2.yml](ci/azure-pipelines/template.job.build-on-msys2.yml) sakura editor 本体を MinGW でビルド、単体テストを MinGW でビルド、実行 + - [ci/azure-pipelines/template.steps.install-mingw-w64-gcc.yml](ci/azure-pipelines/template.steps.install-mingw-w64-gcc.yml) mingw-w64-gcc のインストール - [ci/azure-pipelines/template.job.SonarQube.yml](ci/azure-pipelines/template.job.SonarQube.yml) SonarQube での解析 - [ci/azure-pipelines/template.job.checkEncoding.yml](ci/azure-pipelines/template.job.checkEncoding.yml) 文字コードの確認 - [ci/azure-pipelines/template.job.cppcheck.yml](ci/azure-pipelines/template.job.cppcheck.yml) cppcheck の実行 - [ci/azure-pipelines/template.job.doxygen.yml](ci/azure-pipelines/template.job.doxygen.yml) doxygen の実行 + - [ci/azure-pipelines/template.job.python-check.yml](ci/azure-pipelines/template.job.python-check.yml) python スクリプトのコンパイル確認 - [ci/azure-pipelines/template.steps.install-python-modules.yml](ci/azure-pipelines/template.steps.install-python-modules.yml) 必要な python モジュールのインストール ## Azure Pipelines の template ファイルの命名規則 @@ -73,7 +76,9 @@ https://azure.microsoft.com/ja-jp/services/devops/pipelines/ にアクセスし | JOB 名 | 説明 | job を定義する template | ----|----|---- -|VS2017 | サクラエディタのビルドを行う | [ci/azure-pipelines/template.job.build-unittest.yml](ci/azure-pipelines/template.job.build-unittest.yml) | +|VS2017 | Visual Studio 2017 でサクラエディタのビルドを行う | [ci/azure-pipelines/template.job.build-unittest.yml](ci/azure-pipelines/template.job.build-unittest.yml) | +|VS2019 | Visual Studio 2019 でサクラエディタのビルドを行う | [ci/azure-pipelines/template.job.build-unittest.yml](ci/azure-pipelines/template.job.build-unittest.yml) | +|MinGW | MinGW でサクラエディタのビルドを行う | [ci/azure-pipelines/template.job.build-on-msys2.yml](ci/azure-pipelines/template.job.build-on-msys2.yml) | |SonarQube | SonarQube での解析を行う | [ci/azure-pipelines/template.job.SonarQube.yml](ci/azure-pipelines/template.job.SonarQube.yml) | |cppcheck | cppcheck を行う | [ci/azure-pipelines/template.job.cppcheck.yml](ci/azure-pipelines/template.job.cppcheck.yml) | |doxygen | doxygen を行う | [ci/azure-pipelines/template.job.doxygen.yml](ci/azure-pipelines/template.job.doxygen.yml) | @@ -103,4 +108,4 @@ googletest でテストを実施するにあたって、googletest のテスト ## CI Buildおよびローカルビルドの環境変数 -[CI でのビルド](ci-build.md) を参照 +[こちら](ci-build.md) を参照してください。 diff --git a/ci-build.md b/ci-build.md index a264780aad..20fd990d8a 100644 --- a/ci-build.md +++ b/ci-build.md @@ -1,4 +1,4 @@ -# CI でのビルド +# CI でのビルドにて使用される環境変数 ## githash.bat で設定する環境変数 @@ -18,7 +18,6 @@ |GITHUB_PR_HEAD_COMMIT|GitHub の PR の Head Revision|×|○ (PRのみ)|○ (PRのみ)|○ (PRのみ)| |GITHUB_PR_HEAD_SHORT_COMMIT|GitHub の PR の Head Revision 短縮形|×|○ (PRのみ)|○ (PRのみ)|○ (PRのみ)| |GITHUB_PR_NUMBER|GitHub の PR 番号|×|○ (PRのみ)|○ (PRのみ)|○ (PRのみ)| -|DEV_VERSION|開発バージョンかどうか|◎|◎|◎|◎| ## 入力として使用する環境変数 @@ -31,19 +30,17 @@ |APPVEYOR_BUILD_NUMBER | ビルド番号 | |APPVEYOR_URL | https://ci.appveyor.com | |APPVEYOR_BUILD_VERSION | appveyor.yml の version フィールドの値 | -|APPVEYOR_BUILD_ID | ビルドID (ビルド結果URLに含まれる数値です。`build-chm.bat`が実行中のビルドを識別するために使います。) | |APPVEYOR_PROJECT_SLUG | project slug (appveyor の URL 名) | |APPVEYOR_PULL_REQUEST_NUMBER | Pull Request 番号 | |APPVEYOR_PULL_REQUEST_HEAD_COMMIT | Pull Request の Head commit Hash | |APPVEYOR_REPO_NAME | リポジトリ名 (owner-name/repo-name) | |APPVEYOR_REPO_PROVIDER | appveyor の参照するリポジトリ種別 (GitHub の場合 "gitHub") | -|~~READONLY_TOKEN~~ | デバッグ用です。 appveyor の REST API に渡す [Bearer Token](https://www.appveyor.com/docs/api/#Authentication) をスクリプト外から渡せるように定義しています。 appveyor では使いません。(未定義なので値は''になります。) | APPVEYOR_REPO_TAG_NAME は利用をやめて 代わりに GIT_TAG_NAME を使うようにしました。[#876](https://github.com/sakura-editor/sakura/pull/876) * 上記環境変数をローカル環境で set コマンドで設定することにより appveyor でビルドしなくてもローカルでテストできます。 + - 成果物に含まれる `set_appveyor_env.bat` を使用して設定することもできます。 * 上記の環境変数がどんな値になるのかは、過去の appveyor ビルドでのログを見ることによって確認できます。 -* `build-chm.bat`をローカルでテストするには完了済みのビルドIDが必要です。ビルドIDは[history](https://ci.appveyor.com/project/sakuraeditor/sakura/history)から各ビルド結果を表示するとURL末尾に付いている数字です。 ### Azure Pipelines @@ -55,6 +52,9 @@ APPVEYOR_REPO_TAG_NAME は利用をやめて 代わりに GIT_TAG_NAME を使う |BUILD_BUILDNUMBER|ビルドバージョン (文字列)| |SYSTEM_PULLREQUEST_PULLREQUESTNUMBER|Pull Request 番号| |SYSTEM_PULLREQUEST_SOURCECOMMITID|Pull Request の Head commit Hash| +|SYSTEM_TEAMFOUNDATIONSERVERURI | `https://dev.azure.com/sakuraeditor/` | +|SYSTEM_TEAMPROJECT | プロジェクト名 | +|BUILD_REPOSITORY_PROVIDER | Pipeline が参照するリポジトリの種別 (GitHubの場合 "GitHub") | ## githash.h で生成するマクロ From 21b76865115eb7611c34e3f9502baea2128a5949 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Wed, 21 Apr 2021 17:32:56 +0900 Subject: [PATCH 0640/1024] =?UTF-8?q?=E8=A8=98=E8=BF=B0=E9=A0=86=E3=81=AE?= =?UTF-8?q?=E8=A6=8B=E7=9B=B4=E3=81=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - azure-pipelines.ymlの記載順に倣って並び替え - CIにおける環境変数の一覧を、同じ意味のものが同じ順序になるように並び替え --- azure-pipelines.md | 2 +- ci-build.md | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/azure-pipelines.md b/azure-pipelines.md index 298158d74e..9a569500eb 100644 --- a/azure-pipelines.md +++ b/azure-pipelines.md @@ -59,9 +59,9 @@ https://azure.microsoft.com/ja-jp/services/devops/pipelines/ にアクセスし - [ci/azure-pipelines/template.job.build-on-msys2.yml](ci/azure-pipelines/template.job.build-on-msys2.yml) sakura editor 本体を MinGW でビルド、単体テストを MinGW でビルド、実行 - [ci/azure-pipelines/template.steps.install-mingw-w64-gcc.yml](ci/azure-pipelines/template.steps.install-mingw-w64-gcc.yml) mingw-w64-gcc のインストール - [ci/azure-pipelines/template.job.SonarQube.yml](ci/azure-pipelines/template.job.SonarQube.yml) SonarQube での解析 - - [ci/azure-pipelines/template.job.checkEncoding.yml](ci/azure-pipelines/template.job.checkEncoding.yml) 文字コードの確認 - [ci/azure-pipelines/template.job.cppcheck.yml](ci/azure-pipelines/template.job.cppcheck.yml) cppcheck の実行 - [ci/azure-pipelines/template.job.doxygen.yml](ci/azure-pipelines/template.job.doxygen.yml) doxygen の実行 + - [ci/azure-pipelines/template.job.checkEncoding.yml](ci/azure-pipelines/template.job.checkEncoding.yml) 文字コードの確認 - [ci/azure-pipelines/template.job.python-check.yml](ci/azure-pipelines/template.job.python-check.yml) python スクリプトのコンパイル確認 - [ci/azure-pipelines/template.steps.install-python-modules.yml](ci/azure-pipelines/template.steps.install-python-modules.yml) 必要な python モジュールのインストール diff --git a/ci-build.md b/ci-build.md index 20fd990d8a..349714d989 100644 --- a/ci-build.md +++ b/ci-build.md @@ -26,15 +26,15 @@ | 環境変数 | 説明 | ----|---- |APPVEYOR | バッチが appveyor で実行されているかどうか | -|APPVEYOR_ACCOUNT_NAME | appveyor のアカウント名 (sakura editor の場合 "sakuraeditor") | -|APPVEYOR_BUILD_NUMBER | ビルド番号 | |APPVEYOR_URL | https://ci.appveyor.com | -|APPVEYOR_BUILD_VERSION | appveyor.yml の version フィールドの値 | +|APPVEYOR_ACCOUNT_NAME | appveyor のアカウント名 (sakura editor の場合 "sakuraeditor") | |APPVEYOR_PROJECT_SLUG | project slug (appveyor の URL 名) | +|APPVEYOR_REPO_PROVIDER | appveyor の参照するリポジトリ種別 (GitHub の場合 "gitHub") | +|APPVEYOR_REPO_NAME | リポジトリ名 (owner-name/repo-name) | +|APPVEYOR_BUILD_VERSION | appveyor.yml の version フィールドの値 | +|APPVEYOR_BUILD_NUMBER | ビルド番号 | |APPVEYOR_PULL_REQUEST_NUMBER | Pull Request 番号 | |APPVEYOR_PULL_REQUEST_HEAD_COMMIT | Pull Request の Head commit Hash | -|APPVEYOR_REPO_NAME | リポジトリ名 (owner-name/repo-name) | -|APPVEYOR_REPO_PROVIDER | appveyor の参照するリポジトリ種別 (GitHub の場合 "gitHub") | APPVEYOR_REPO_TAG_NAME は利用をやめて 代わりに GIT_TAG_NAME を使うようにしました。[#876](https://github.com/sakura-editor/sakura/pull/876) @@ -46,15 +46,15 @@ APPVEYOR_REPO_TAG_NAME は利用をやめて 代わりに GIT_TAG_NAME を使う |環境変数|説明| |--|--| -|BUILD_REPOSITORY_NAME|リポジトリ名 (owner-name/repo-name)| +|SYSTEM_TEAMFOUNDATIONSERVERURI | `https://dev.azure.com/sakuraeditor/` | |BUILD_DEFINITIONNAME|アカウント名| -|BUILD_BUILDID|ビルド番号 (数値)| +|SYSTEM_TEAMPROJECT | プロジェクト名 | +|BUILD_REPOSITORY_PROVIDER | Pipeline が参照するリポジトリの種別 (GitHubの場合 "GitHub") | +|BUILD_REPOSITORY_NAME|リポジトリ名 (owner-name/repo-name)| |BUILD_BUILDNUMBER|ビルドバージョン (文字列)| +|BUILD_BUILDID|ビルド番号 (数値)| |SYSTEM_PULLREQUEST_PULLREQUESTNUMBER|Pull Request 番号| |SYSTEM_PULLREQUEST_SOURCECOMMITID|Pull Request の Head commit Hash| -|SYSTEM_TEAMFOUNDATIONSERVERURI | `https://dev.azure.com/sakuraeditor/` | -|SYSTEM_TEAMPROJECT | プロジェクト名 | -|BUILD_REPOSITORY_PROVIDER | Pipeline が参照するリポジトリの種別 (GitHubの場合 "GitHub") | ## githash.h で生成するマクロ From f44fcea4be5f033d8aa782dd97dc0aba05fd2b88 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Wed, 21 Apr 2021 17:33:29 +0900 Subject: [PATCH 0641/1024] =?UTF-8?q?SonarQube=E3=81=AB=E9=96=A2=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Markdown記法の修正 - 表現の修正 --- SonarQube.md | 39 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/SonarQube.md b/SonarQube.md index 949ae48760..ea571737f9 100644 --- a/SonarQube.md +++ b/SonarQube.md @@ -17,7 +17,7 @@ - [SonarQube に関する情報](#sonarqube-に関する情報) - [SonarQube の使用方法に関するサイト](#sonarqube-の使用方法に関するサイト) - [SonarScanner の使用方法](#sonarscanner-の使用方法) - - [CI でのビルド](#ci-でのビルド) + - [CI での実行](#ci-での実行) - [azure pipelines の設定](#azure-pipelines-の設定) - [環境変数](#環境変数) - [スケジュール設定](#スケジュール設定) @@ -59,17 +59,14 @@ ### SonarQube -[SonarQube][SonarQube] は -[sonarsource][sonarsource] が提供する静的解析サービス。 - +[SonarQube][SonarQube] は [sonarsource][sonarsource] が提供する静的解析サービス。 ### SonarCloud [SonarCloud][SonarCloud] は [SonarQube][SonarQube] のクラウド版。 いつものごとく、オープンソースに対してはタダです。 -サクラエディタのソースコード解析には 1時間半ほどかかるので、並列実行が可能な Azure Pipelines で夜間の定期タスクのみで解析を実施します。 -(Appveyor では実施しない。定期タスク以外でも実施しない。) +サクラエディタのソースコード解析には 1時間半ほどかかるので、並列実行が可能な Azure Pipelines における夜間の定期タスクでのみ解析を実施します。 ## SonarQube のローカルでの使用方法 @@ -94,21 +91,21 @@ https://sonarcloud.io/account/security/ のページでいつでも Access Token ### ローカルで実行する場合の環境設定 (事前準備) -1. chocolatey をインストールする - https://chocolatey.org/install#install-with-cmdexe を参考にインストールする。 +1. chocolatey をインストールする + https://chocolatey.org/install#install-with-cmdexe を参考にインストールする。 ※powershellコンソールを「管理者として実行」して、サイトにあるスクリプトをコピペ実行するだけです。 -3. SonarScanner実行環境として Java 11 をインストールする - 1. JDKを使う場合 https://chocolatey.org/packages/openjdk11 - 2. JREを使う場合 https://chocolatey.org/packages/openjdk11jre - 3. Oracleに開発者登録している場合 Oracle JDK/JRE で代替してもよいです。 - 1. 普通のJava Runtime Envirionment(jre8)は使えません。 - https://java.com/ja/download/manual.jsp (2019/05/02 現在) - 2. 参考: [Prerequisites and Overview (Supported Platforms)](https://docs.sonarqube.org/latest/requirements/requirements/#header-3) - 3. 参考: [SonarQubeの Java 11 対応状況](https://qiita.com/hayao_k/items/2cd81161f8dffd3a178b) - 4. SonarSource(=SonarQubeの開発元)が方針転換してJava8を使った静的解析ができなくなりました。 - -4. `JAVA_HOME` の環境変数を設定する +2. SonarScanner実行環境として Java 11 をインストールする + 1. JDKを使う場合 https://chocolatey.org/packages/openjdk11 + 2. JREを使う場合 https://chocolatey.org/packages/openjdk11jre + 3. Oracleに開発者登録している場合 Oracle JDK/JRE で代替してもよいです。 + 4. 参考情報 + - 普通の [Java Runtime Envirionment (jre8)](https://java.com/ja/download/manual.jsp) は使えません。 + SonarSource の方針により Java8 を使った静的解析はできなくなりました。 + - [Prerequisites and Overview (Supported Platforms)](https://docs.sonarqube.org/latest/requirements/requirements/#header-3) + - [SonarQubeの Java 11 対応状況](https://qiita.com/hayao_k/items/2cd81161f8dffd3a178b) + +3. `JAVA_HOME` の環境変数を設定する ※コマンドプロンプトで `set J` して `JAVA_HOME` が表示されない場合のみ 例 @@ -163,7 +160,7 @@ build-sln.bat Win32 Release https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+MSBuild#AnalyzingwithSonarQubeScannerforMSBuild-Usage -## CI でのビルド +## CI での実行 ### azure pipelines の設定 @@ -263,7 +260,7 @@ steps: ### Appveyor の設定 -**appveyor で実施する場合、タイムアウトになってビルドに成功しないので現状で使用していない ** +**AppVeyor ではタイムアウトになってビルドが成功しないため、現状では実施していません** Appveyor のプロジェクトで Settings の Environment にアクセスして `Add variable` を押して環境変数を追加する。 From 2a35cfa4ec4d7df76e8e49551b8d0d92b6ce41c4 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Wed, 21 Apr 2021 22:46:47 +0900 Subject: [PATCH 0642/1024] =?UTF-8?q?=E8=A1=A8=E7=8F=BE=E3=82=92=E7=B5=B1?= =?UTF-8?q?=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 生成される環境変数の記載順を入力側の表での順序にあわせた - 各表で使用する用語を統一した - 冗長な表現を修正した --- appveyor.md | 14 +++++++------- ci-build.md | 24 ++++++++++++------------ 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/appveyor.md b/appveyor.md index 246f759cd8..7a27c81f55 100644 --- a/appveyor.md +++ b/appveyor.md @@ -36,8 +36,8 @@ | バッチファイル | 説明 | ----|---- |[build-all.bat](build-all.bat)| appveyor.yml から呼ばれるバッチファイル | -|[build-sln.bat](build-sln.bat)| solution をビルドするバッチファイル | -|[build-gnu.bat](build-gnu.bat)| Makefile をビルドするバッチファイル | +|[build-sln.bat](build-sln.bat) | solution をビルドする | +|[build-gnu.bat](build-gnu.bat) | Makefile をビルドする | |[build-sonar-qube-start.bat](build-sonar-qube-start.bat) | SonarQube の準備を行う | |[build-sonar-qube-env.bat](build-sonar-qube-env.bat) | SonarQube の実行に必要な環境変数の設定を行う | |[sakura\preBuild.bat](sakura/preBuild.bat) | 特に何もしない | @@ -46,11 +46,11 @@ |[tests\googletest.build.cmd](tests/googletest.build.cmd) | Google Test をビルドする | |[tests\compiletests.run.cmd](tests/compiletests.run.cmd) | コンパイルテストを実行する | |[build-sonar-qube-finish.bat](build-sonar-qube-finish.bat) | SonarQube の解析結果をアップロードする | -|[parse-buildlog.bat](parse-buildlog.bat) | ビルドログを解析するバッチファイル | -|[build-chm.bat](build-chm.bat) | compiled HTML ファイルをビルドするバッチファイル | -|[build-installer.bat](build-installer.bat) | インストーラをビルドするバッチファイル | -|[zipArtifacts.bat](zipArtifacts.bat) | 成果物を zip に固めるバッチファイル | -|[calc-hash.bat](calc-hash.bat) | 成果物の sha256 を計算するバッチファイル | +|[parse-buildlog.bat](parse-buildlog.bat) | ビルドログを解析する | +|[build-chm.bat](build-chm.bat) | compiled HTML ファイルをビルドする | +|[build-installer.bat](build-installer.bat) | インストーラをビルドする | +|[zipArtifacts.bat](zipArtifacts.bat) | 成果物を zip ファイルにまとめる | +|[calc-hash.bat](calc-hash.bat) | 成果物のハッシュ値を計算する | ### 関連情報 diff --git a/ci-build.md b/ci-build.md index 349714d989..20d85b0239 100644 --- a/ci-build.md +++ b/ci-build.md @@ -9,15 +9,15 @@ |GIT_REMOTE_ORIGIN_URL|git remote origin URL|◎|◎|◎|◎| |GIT_TAG_NAME|git の tag|◎|◎|◎|◎| |CI_ACCOUNT_NAME|CI のアカウント名|×|◎|◎|◎| +|CI_REPO_NAME|リポジトリ名|×|◎|◎|◎| +|CI_BUILD_VERSION|CI のビルドバージョン (文字列)|×|◎|◎|◎| |CI_BUILD_NUMBER|CI のビルド番号 (数値)|×|◎|◎|◎| |CI_BUILD_URL|CI のビルドURL|×|◎|◎|◎| -|CI_BUILD_VERSION|CI のビルドバージョン (文字列)|×|◎|◎|◎| -|CI_REPO_NAME|リポジトリ名|×|◎|◎|◎| |GITHUB_COMMIT_URL|GitHub の Commit URL|×|◎|◎|◎| -|GITHUB_PR_HEAD_URL|GitHub の PR の Head の URL|×|○ (PRのみ)|○ (PRのみ)|○ (PRのみ)| -|GITHUB_PR_HEAD_COMMIT|GitHub の PR の Head Revision|×|○ (PRのみ)|○ (PRのみ)|○ (PRのみ)| -|GITHUB_PR_HEAD_SHORT_COMMIT|GitHub の PR の Head Revision 短縮形|×|○ (PRのみ)|○ (PRのみ)|○ (PRのみ)| |GITHUB_PR_NUMBER|GitHub の PR 番号|×|○ (PRのみ)|○ (PRのみ)|○ (PRのみ)| +|GITHUB_PR_HEAD_COMMIT | GitHub の PR の Head commit Hash | × | ○ (PRのみ) | ○ (PRのみ) | ○ (PRのみ) | +|GITHUB_PR_HEAD_SHORT_COMMIT | GitHub の PR の Head commit Hash 短縮形 | × | ○ (PRのみ) | ○ (PRのみ) | ○ (PRのみ) | +|GITHUB_PR_HEAD_URL | GitHub の PR の Head commit の URL | × | ○ (PRのみ) | ○ (PRのみ) | ○ (PRのみ) | ## 入力として使用する環境変数 @@ -27,12 +27,12 @@ ----|---- |APPVEYOR | バッチが appveyor で実行されているかどうか | |APPVEYOR_URL | https://ci.appveyor.com | -|APPVEYOR_ACCOUNT_NAME | appveyor のアカウント名 (sakura editor の場合 "sakuraeditor") | -|APPVEYOR_PROJECT_SLUG | project slug (appveyor の URL 名) | -|APPVEYOR_REPO_PROVIDER | appveyor の参照するリポジトリ種別 (GitHub の場合 "gitHub") | +|APPVEYOR_ACCOUNT_NAME | AppVeyor のアカウント名 (sakura editor の場合 "sakuraeditor") | +|APPVEYOR_PROJECT_SLUG | AppVeyor のプロジェクト名 | +|APPVEYOR_REPO_PROVIDER | AppVeyor が参照するリポジトリの種別 (GitHub の場合 "gitHub") | |APPVEYOR_REPO_NAME | リポジトリ名 (owner-name/repo-name) | -|APPVEYOR_BUILD_VERSION | appveyor.yml の version フィールドの値 | -|APPVEYOR_BUILD_NUMBER | ビルド番号 | +|APPVEYOR_BUILD_VERSION | ビルドバージョン (文字列) | +|APPVEYOR_BUILD_NUMBER | ビルド番号 (数値) | |APPVEYOR_PULL_REQUEST_NUMBER | Pull Request 番号 | |APPVEYOR_PULL_REQUEST_HEAD_COMMIT | Pull Request の Head commit Hash | @@ -47,8 +47,8 @@ APPVEYOR_REPO_TAG_NAME は利用をやめて 代わりに GIT_TAG_NAME を使う |環境変数|説明| |--|--| |SYSTEM_TEAMFOUNDATIONSERVERURI | `https://dev.azure.com/sakuraeditor/` | -|BUILD_DEFINITIONNAME|アカウント名| -|SYSTEM_TEAMPROJECT | プロジェクト名 | +|BUILD_DEFINITIONNAME | Azure Pipeline のアカウント名 | +|SYSTEM_TEAMPROJECT | Azure Pipelines のプロジェクト名 | |BUILD_REPOSITORY_PROVIDER | Pipeline が参照するリポジトリの種別 (GitHubの場合 "GitHub") | |BUILD_REPOSITORY_NAME|リポジトリ名 (owner-name/repo-name)| |BUILD_BUILDNUMBER|ビルドバージョン (文字列)| From 63e9203984bf42c9bcbca0cdb7c74002168c68e6 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Thu, 22 Apr 2021 19:02:21 +0900 Subject: [PATCH 0643/1024] =?UTF-8?q?[skip=20ci]=20CI=E3=83=93=E3=83=AB?= =?UTF-8?q?=E3=83=89=E3=81=AE=E7=9C=81=E7=95=A5=E6=96=B9=E6=B3=95=E3=81=AB?= =?UTF-8?q?=E9=96=A2=E3=81=99=E3=82=8B=E8=A8=98=E8=BF=B0=E3=82=92=E7=A7=BB?= =?UTF-8?q?=E5=8B=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- appveyor.md | 24 +++++------------------- build.md | 12 ++++++++++++ 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/appveyor.md b/appveyor.md index 7a27c81f55..8aa84a64e5 100644 --- a/appveyor.md +++ b/appveyor.md @@ -1,11 +1,9 @@ -# appveyor でのビルド +# ビルドに使用するバッチファイル -- [appveyor でのビルド](#appveyor-でのビルド) - - [CI でのビルドをスキップする方法](#ci-でのビルドをスキップする方法) - - [参考サイト](#参考サイト) - - [ビルドに使用するバッチファイル](#ビルドに使用するバッチファイル) +- [ビルドに使用するバッチファイル](#ビルドに使用するバッチファイル) + - [使用するバッチファイルの一覧](#使用するバッチファイルの一覧) - [関連情報](#関連情報) - [呼び出し構造](#呼び出し構造) - [ビルドに使用するバッチファイルの引数](#ビルドに使用するバッチファイルの引数) @@ -19,21 +17,9 @@ -## CI でのビルドをスキップする方法 +## 使用するバッチファイルの一覧 -ビルドに関係ない修正 (ドキュメントの修正など)を行った場合に、コミットメッセージの中に -`[ci skip]` を含めることで、Appveyor での CI ビルドを行わないようにすることができます。 -ただし PR をマージするときには、CI のビルドは走ります。 - -### 参考サイト - -- https://srz-zumix.blogspot.com/2018/03/ci-ci-20183.html -- https://www.appveyor.com/docs/how-to/filtering-commits/#skip-commits - - -## ビルドに使用するバッチファイル - -| バッチファイル | 説明 | +| ファイル名 | 説明 | ----|---- |[build-all.bat](build-all.bat)| appveyor.yml から呼ばれるバッチファイル | |[build-sln.bat](build-sln.bat) | solution をビルドする | diff --git a/build.md b/build.md index 0309b468b3..6d63e138a9 100644 --- a/build.md +++ b/build.md @@ -23,6 +23,7 @@ - [開発者向けの情報](#開発者向けの情報) - [githash.h の更新のスキップ](#githashh-の更新のスキップ) - [Powershell によるZIPファイルの圧縮、解凍、内容確認の強制](#powershell-によるzipファイルの圧縮解凍内容確認の強制) + - [CI でのビルドをスキップする方法](#ci-でのビルドをスキップする方法) - [MinGW w64 ビルド](#mingw-w64-ビルド) @@ -169,6 +170,17 @@ build-sln.bat x64 Release build-sln.bat x64 Debug ``` +### CI でのビルドをスキップする方法 + +ビルドに関係ない修正 (ドキュメントの修正など)を行った場合に、コミットメッセージの中に +`[ci skip]` を含めることで、Appveyor での CI ビルドを行わないようにすることができます。 +ただし PR をマージするときには、CI のビルドは走ります。 + +#### 参考サイト + +- https://srz-zumix.blogspot.com/2018/03/ci-ci-20183.html +- https://www.appveyor.com/docs/how-to/filtering-commits/#skip-commits + ### MinGW w64 ビルド 生成されるバイナリは正しく動作しないが、MinGWでのビルドも可能。 From 4b8ec126f72a2d8bfc81479e7f5707f4f359a008 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Thu, 22 Apr 2021 19:04:59 +0900 Subject: [PATCH 0644/1024] =?UTF-8?q?[skip=20ci]=20CI=E3=81=AE=E3=82=B9?= =?UTF-8?q?=E3=82=AD=E3=83=83=E3=83=97=E3=81=AB=E9=96=A2=E3=81=99=E3=82=8B?= =?UTF-8?q?=E8=A8=98=E8=BF=B0=E3=81=AE=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 「skip ci」及び「ci skip」はAzure_PipelinsとGitHub_Actionsでも使える。 --- build.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/build.md b/build.md index 6d63e138a9..b3363f2002 100644 --- a/build.md +++ b/build.md @@ -172,14 +172,16 @@ build-sln.bat x64 Debug ### CI でのビルドをスキップする方法 -ビルドに関係ない修正 (ドキュメントの修正など)を行った場合に、コミットメッセージの中に -`[ci skip]` を含めることで、Appveyor での CI ビルドを行わないようにすることができます。 -ただし PR をマージするときには、CI のビルドは走ります。 +ビルドに関係ない修正 (ドキュメントの修正など) を行った場合に、 +コミットメッセージの中に `[ci skip]` または `[skip ci]` というキーワードを含めることで、 CI ビルドを行わないようにすることができます。 +ただし PR をマージするときは実行されます。 -#### 参考サイト +#### 参考情報 -- https://srz-zumix.blogspot.com/2018/03/ci-ci-20183.html -- https://www.appveyor.com/docs/how-to/filtering-commits/#skip-commits +- https://qiita.com/vmmhypervisor/items/f10c77a375c2a663b300 +- https://www.appveyor.com/docs/how-to/filtering-commits/#skip-directive-in-commit-message +- https://docs.microsoft.com/ja-jp/azure/devops/pipelines/repos/azure-repos-git?view=azure-devops&tabs=yaml#skipping-ci-for-individual-commits +- https://github.blog/changelog/2021-02-08-github-actions-skip-pull-request-and-push-workflows-with-skip-ci/ ### MinGW w64 ビルド From 440be99a07fa7b3af5c05c0d35941425ee352b9f Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Thu, 22 Apr 2021 19:15:53 +0900 Subject: [PATCH 0645/1024] =?UTF-8?q?CI=E9=96=A2=E4=BF=82=E3=81=AE?= =?UTF-8?q?=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1=E3=83=B3=E3=83=88=E3=82=92?= =?UTF-8?q?ci=E3=83=87=E3=82=A3=E3=83=AC=E3=82=AF=E3=83=88=E3=83=AA?= =?UTF-8?q?=E3=81=AB=E7=A7=BB=E5=8B=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - appveyor.md は build-batchfiles.md に名称変更 - ci-build.md は build-envvars.md に名称変更 --- azure-pipelines.md => ci/azure-pipelines/azure-pipelines.md | 0 appveyor.md => ci/build-batchfiles.md | 0 ci-build.md => ci/build-envvars.md | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename azure-pipelines.md => ci/azure-pipelines/azure-pipelines.md (100%) rename appveyor.md => ci/build-batchfiles.md (100%) rename ci-build.md => ci/build-envvars.md (100%) diff --git a/azure-pipelines.md b/ci/azure-pipelines/azure-pipelines.md similarity index 100% rename from azure-pipelines.md rename to ci/azure-pipelines/azure-pipelines.md diff --git a/appveyor.md b/ci/build-batchfiles.md similarity index 100% rename from appveyor.md rename to ci/build-batchfiles.md diff --git a/ci-build.md b/ci/build-envvars.md similarity index 100% rename from ci-build.md rename to ci/build-envvars.md From abe73095b454e783c51ce15112c67edde9127c53 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Thu, 22 Apr 2021 19:46:45 +0900 Subject: [PATCH 0646/1024] =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB?= =?UTF-8?q?=E7=A7=BB=E5=8B=95=E3=81=AB=E4=BC=B4=E3=81=86=E3=83=AA=E3=83=B3?= =?UTF-8?q?=E3=82=AF=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 +- azure-pipelines.yml | 12 +-- build.md | 5 +- ci/azure-pipelines/azure-pipelines.md | 40 +++++----- ci/build-batchfiles.md | 104 +++++++++++++------------- 5 files changed, 85 insertions(+), 83 deletions(-) diff --git a/README.md b/README.md index fefa7c32d9..ca89aaf39e 100644 --- a/README.md +++ b/README.md @@ -122,7 +122,7 @@ Visaul Studio 2019 で `sakura.sln` を開くと必要なコンポーネント ## CI Buildおよびローカルビルドの環境変数 -[こちら](ci-build.md) を参照してください。 +[こちら](ci/build-envvars.md) を参照してください。 ## PR(Pull Request) を簡単にローカルに取得する方法 @@ -132,13 +132,14 @@ Visaul Studio 2019 で `sakura.sln` を開くと必要なコンポーネント ### ビルドの仕組み (Azure Pipelines) -[azure-pipelines.md](azure-pipelines.md) でビルドの仕組みを説明しています。 +[azure-pipelines.md](ci/azure-pipelines/azure-pipelines.md) でビルドの仕組みを説明しています。 ## CI Build (AppVeyor) ### ビルドの仕組み (AppVeyor) -[appveyor.md](appveyor.md) でビルドの仕組みを説明しています。 +AppVeyor では、 [build-all.bat](build-all.bat) を使用してビルドを行っています。 +ビルドに使用されるバッチファイルについては [build-batchfiles.md](ci/build-batchfiles.md) を参照してください。 ### ビルド成果物を利用する上での注意事項 diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 793e95bba8..d98da94b41 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -22,13 +22,13 @@ trigger: - README.md - SonarQube.md - addDoxygenFileComment.md - - appveyor.md - - azure-pipelines.md - build.md - - ci-build.md - create-big-file.md - debug-tasktray-menu.md - get-PR.md + - ci/azure-pipelines/azure-pipelines.md + - ci/build-batchfiles.md + - ci/build-envvars.md - installer/externals/bregonig/README.md - installer/externals/universal-ctags/README.md - installer/readme.md @@ -63,13 +63,13 @@ pr: - README.md - SonarQube.md - addDoxygenFileComment.md - - appveyor.md - - azure-pipelines.md - build.md - - ci-build.md - create-big-file.md - debug-tasktray-menu.md - get-PR.md + - ci/azure-pipelines/azure-pipelines.md + - ci/build-batchfiles.md + - ci/build-envvars.md - installer/externals/bregonig/README.md - installer/externals/universal-ctags/README.md - installer/readme.md diff --git a/build.md b/build.md index b3363f2002..6252483dd8 100644 --- a/build.md +++ b/build.md @@ -110,11 +110,12 @@ build-all.bat Win32 Release ### appveyor でのビルドの仕組み -[こちら](appveyor.md) で appveyor 上でのビルドの仕組みを説明しています。 +AppVeyor では、 [build-all.bat](build-all.bat) を使用してビルドを行っています。 +ビルドに使用されるバッチファイルについては [build-batchfiles.md](ci/build-batchfiles.md) を参照してください。 ### Azure Pipelines でのビルドの仕組み -[こちら](azure-pipelines.md) で [Azure Pipelines](https://azure.microsoft.com/ja-jp/services/devops/pipelines/) 上でのビルドの仕組みを説明しています。 +[こちら](ci/azure-pipelines/azure-pipelines.md) で [Azure Pipelines](https://azure.microsoft.com/ja-jp/services/devops/pipelines/) 上でのビルドの仕組みを説明しています。 ### インストーラの仕組み diff --git a/ci/azure-pipelines/azure-pipelines.md b/ci/azure-pipelines/azure-pipelines.md index 9a569500eb..8b159118c4 100644 --- a/ci/azure-pipelines/azure-pipelines.md +++ b/ci/azure-pipelines/azure-pipelines.md @@ -53,17 +53,17 @@ https://azure.microsoft.com/ja-jp/services/devops/pipelines/ にアクセスし ## Azure Pipelines の設定ファイルの構成 -- [azure-pipelines.yml](azure-pipelines.yml) 最上位の設定ファイル - - [ci/azure-pipelines/template.job.build-unittest.yml](ci/azure-pipelines/template.job.build-unittest.yml) sakura editor 本体のビルド、HTML ヘルプのビルド、インストーラのビルド、単体テストのビルド、実行 - - [ci/azure-pipelines/template.steps.install-python-modules.yml](ci/azure-pipelines/template.steps.install-python-modules.yml) 必要な python モジュールのインストール - - [ci/azure-pipelines/template.job.build-on-msys2.yml](ci/azure-pipelines/template.job.build-on-msys2.yml) sakura editor 本体を MinGW でビルド、単体テストを MinGW でビルド、実行 - - [ci/azure-pipelines/template.steps.install-mingw-w64-gcc.yml](ci/azure-pipelines/template.steps.install-mingw-w64-gcc.yml) mingw-w64-gcc のインストール - - [ci/azure-pipelines/template.job.SonarQube.yml](ci/azure-pipelines/template.job.SonarQube.yml) SonarQube での解析 - - [ci/azure-pipelines/template.job.cppcheck.yml](ci/azure-pipelines/template.job.cppcheck.yml) cppcheck の実行 - - [ci/azure-pipelines/template.job.doxygen.yml](ci/azure-pipelines/template.job.doxygen.yml) doxygen の実行 - - [ci/azure-pipelines/template.job.checkEncoding.yml](ci/azure-pipelines/template.job.checkEncoding.yml) 文字コードの確認 - - [ci/azure-pipelines/template.job.python-check.yml](ci/azure-pipelines/template.job.python-check.yml) python スクリプトのコンパイル確認 - - [ci/azure-pipelines/template.steps.install-python-modules.yml](ci/azure-pipelines/template.steps.install-python-modules.yml) 必要な python モジュールのインストール +- [azure-pipelines.yml](../../azure-pipelines.yml) 最上位の設定ファイル + - [ci/azure-pipelines/template.job.build-unittest.yml](template.job.build-unittest.yml) sakura editor 本体のビルド、HTML ヘルプのビルド、インストーラのビルド、単体テストのビルド、実行 + - [ci/azure-pipelines/template.steps.install-python-modules.yml](template.steps.install-python-modules.yml) 必要な python モジュールのインストール + - [ci/azure-pipelines/template.job.build-on-msys2.yml](template.job.build-on-msys2.yml) sakura editor 本体を MinGW でビルド、単体テストを MinGW でビルド、実行 + - [ci/azure-pipelines/template.steps.install-mingw-w64-gcc.yml](template.steps.install-mingw-w64-gcc.yml) mingw-w64-gcc のインストール + - [ci/azure-pipelines/template.job.SonarQube.yml](template.job.SonarQube.yml) SonarQube での解析 + - [ci/azure-pipelines/template.job.cppcheck.yml](template.job.cppcheck.yml) cppcheck の実行 + - [ci/azure-pipelines/template.job.doxygen.yml](template.job.doxygen.yml) doxygen の実行 + - [ci/azure-pipelines/template.job.checkEncoding.yml](template.job.checkEncoding.yml) 文字コードの確認 + - [ci/azure-pipelines/template.job.python-check.yml](template.job.python-check.yml) python スクリプトのコンパイル確認 + - [ci/azure-pipelines/template.steps.install-python-modules.yml](template.steps.install-python-modules.yml) 必要な python モジュールのインストール ## Azure Pipelines の template ファイルの命名規則 @@ -76,14 +76,14 @@ https://azure.microsoft.com/ja-jp/services/devops/pipelines/ にアクセスし | JOB 名 | 説明 | job を定義する template | ----|----|---- -|VS2017 | Visual Studio 2017 でサクラエディタのビルドを行う | [ci/azure-pipelines/template.job.build-unittest.yml](ci/azure-pipelines/template.job.build-unittest.yml) | -|VS2019 | Visual Studio 2019 でサクラエディタのビルドを行う | [ci/azure-pipelines/template.job.build-unittest.yml](ci/azure-pipelines/template.job.build-unittest.yml) | -|MinGW | MinGW でサクラエディタのビルドを行う | [ci/azure-pipelines/template.job.build-on-msys2.yml](ci/azure-pipelines/template.job.build-on-msys2.yml) | -|SonarQube | SonarQube での解析を行う | [ci/azure-pipelines/template.job.SonarQube.yml](ci/azure-pipelines/template.job.SonarQube.yml) | -|cppcheck | cppcheck を行う | [ci/azure-pipelines/template.job.cppcheck.yml](ci/azure-pipelines/template.job.cppcheck.yml) | -|doxygen | doxygen を行う | [ci/azure-pipelines/template.job.doxygen.yml](ci/azure-pipelines/template.job.doxygen.yml) | -|checkEncoding | 文字コードのチェックを行う | [ci/azure-pipelines/template.job.checkEncoding.yml](ci/azure-pipelines/template.job.checkEncoding.yml) | -|script_check | python のコンパイルのチェックを行う | [ci/azure-pipelines/template.job.python-check.yml](ci/azure-pipelines/template.job.python-check.yml) | +|VS2017 | Visual Studio 2017 でサクラエディタのビルドを行う | [template.job.build-unittest.yml](template.job.build-unittest.yml) | +|VS2019 | Visual Studio 2019 でサクラエディタのビルドを行う | [template.job.build-unittest.yml](template.job.build-unittest.yml) | +|MinGW | MinGW でサクラエディタのビルドを行う | [template.job.build-on-msys2.yml](template.job.build-on-msys2.yml) | +|SonarQube | SonarQube での解析を行う | [template.job.SonarQube.yml](template.job.SonarQube.yml) | +|cppcheck | cppcheck を行う | [template.job.cppcheck.yml](template.job.cppcheck.yml) | +|doxygen | doxygen を行う | [template.job.doxygen.yml](template.job.doxygen.yml) | +|checkEncoding | 文字コードのチェックを行う | [template.job.checkEncoding.yml](template.job.checkEncoding.yml) | +|script_check | python のコンパイルのチェックを行う | [template.job.python-check.yml](template.job.python-check.yml) | ## Azure Pipelines の TIPS @@ -108,4 +108,4 @@ googletest でテストを実施するにあたって、googletest のテスト ## CI Buildおよびローカルビルドの環境変数 -[こちら](ci-build.md) を参照してください。 +[こちら](../build-envvars.md) を参照してください。 diff --git a/ci/build-batchfiles.md b/ci/build-batchfiles.md index 8aa84a64e5..3ea58479bc 100644 --- a/ci/build-batchfiles.md +++ b/ci/build-batchfiles.md @@ -21,73 +21,73 @@ | ファイル名 | 説明 | ----|---- -|[build-all.bat](build-all.bat)| appveyor.yml から呼ばれるバッチファイル | -|[build-sln.bat](build-sln.bat) | solution をビルドする | -|[build-gnu.bat](build-gnu.bat) | Makefile をビルドする | -|[build-sonar-qube-start.bat](build-sonar-qube-start.bat) | SonarQube の準備を行う | -|[build-sonar-qube-env.bat](build-sonar-qube-env.bat) | SonarQube の実行に必要な環境変数の設定を行う | -|[sakura\preBuild.bat](sakura/preBuild.bat) | 特に何もしない | -|[sakura\githash.bat](sakura/githash.bat) | Git や CI の環境変数から githash.h を生成する | -|[sakura\postBuild.bat](sakura/postBuild.bat) | bregonig.dll と ctags.exe を展開しコピーする | -|[tests\googletest.build.cmd](tests/googletest.build.cmd) | Google Test をビルドする | -|[tests\compiletests.run.cmd](tests/compiletests.run.cmd) | コンパイルテストを実行する | -|[build-sonar-qube-finish.bat](build-sonar-qube-finish.bat) | SonarQube の解析結果をアップロードする | -|[parse-buildlog.bat](parse-buildlog.bat) | ビルドログを解析する | -|[build-chm.bat](build-chm.bat) | compiled HTML ファイルをビルドする | -|[build-installer.bat](build-installer.bat) | インストーラをビルドする | -|[zipArtifacts.bat](zipArtifacts.bat) | 成果物を zip ファイルにまとめる | -|[calc-hash.bat](calc-hash.bat) | 成果物のハッシュ値を計算する | +|[build-all.bat](../build-all.bat)| appveyor.yml から呼ばれるバッチファイル | +|[build-sln.bat](../build-sln.bat) | solution をビルドする | +|[build-gnu.bat](../build-gnu.bat) | Makefile をビルドする | +|[build-sonar-qube-start.bat](../build-sonar-qube-start.bat) | SonarQube の準備を行う | +|[build-sonar-qube-env.bat](../build-sonar-qube-env.bat) | SonarQube の実行に必要な環境変数の設定を行う | +|[sakura\preBuild.bat](../sakura/preBuild.bat) | 特に何もしない | +|[sakura\githash.bat](../sakura/githash.bat) | Git や CI の環境変数から githash.h を生成する | +|[sakura\postBuild.bat](../sakura/postBuild.bat) | bregonig.dll と ctags.exe を展開しコピーする | +|[tests\googletest.build.cmd](../tests/googletest.build.cmd) | Google Test をビルドする | +|[tests\compiletests.run.cmd](../tests/compiletests.run.cmd) | コンパイルテストを実行する | +|[build-sonar-qube-finish.bat](../build-sonar-qube-finish.bat) | SonarQube の解析結果をアップロードする | +|[parse-buildlog.bat](../parse-buildlog.bat) | ビルドログを解析する | +|[build-chm.bat](../build-chm.bat) | compiled HTML ファイルをビルドする | +|[build-installer.bat](../build-installer.bat) | インストーラをビルドする | +|[zipArtifacts.bat](../zipArtifacts.bat) | 成果物を zip ファイルにまとめる | +|[calc-hash.bat](../calc-hash.bat) | 成果物のハッシュ値を計算する | ### 関連情報 -SonarQube に関しては [こちら](SonarQube.md) も参照してください。 +SonarQube に関しては [こちら](../SonarQube.md) も参照してください。 ## 呼び出し構造 -- [build-all.bat](build-all.bat) - - [build-sln.bat](build-sln.bat) - - [build-sonar-qube-start.bat](build-sonar-qube-start.bat) - - [build-sonar-qube-env.bat](build-sonar-qube-env.bat) - - [tools\zip\unzip.bat](tools/zip/unzip.bat) : ZIP ファイルを展開する - - 7z.exe または [tools\zip\unzip.ps1](tools/zip/unzip.ps1) +- [build-all.bat](../build-all.bat) + - [build-sln.bat](../build-sln.bat) + - [build-sonar-qube-start.bat](../build-sonar-qube-start.bat) + - [build-sonar-qube-env.bat](../build-sonar-qube-env.bat) + - [tools\zip\unzip.bat](../tools/zip/unzip.bat) : ZIP ファイルを展開する + - 7z.exe または [tools\zip\unzip.ps1](../tools/zip/unzip.ps1) - MSBuild.exe sakura.sln - - [sakura\preBuild.bat](sakura/preBuild.bat) + - [sakura\preBuild.bat](../sakura/preBuild.bat) - HeaderMake.exe : Funccode_define.h, Funccode_enum.h を生成する - - [sakura\githash.bat](sakura/githash.bat) + - [sakura\githash.bat](../sakura/githash.bat) - git.exe - - [sakura\postBuild.bat](sakura/postBuild.bat) - - [tools\zip\unzip.bat](tools/zip/unzip.bat) - - 7z.exe または [tools\zip\unzip.ps1](tools/zip/unzip.ps1) - - [tests\googletest.build.cmd](tests/googletest.build.cmd) + - [sakura\postBuild.bat](../sakura/postBuild.bat) + - [tools\zip\unzip.bat](../tools/zip/unzip.bat) + - 7z.exe または [tools\zip\unzip.ps1](../tools/zip/unzip.ps1) + - [tests\googletest.build.cmd](../tests/googletest.build.cmd) - git.exe - cmake.exe - - [tests\compiletests.run.cmd](tests/compiletests.run.cmd) + - [tests\compiletests.run.cmd](../tests/compiletests.run.cmd) - cmake.exe - - [build-sonar-qube-finish.bat](build-sonar-qube-finish.bat) - - [build-sonar-qube-env.bat](build-sonar-qube-env.bat) - - [parse-buildlog.bat](parse-buildlog.bat) - - [appveyor_env.py](appveyor_env.py) : AppVeyor の環境変数を再現できる `set_appveyor_env.bat` を生成する。(成果物に含まれる) - - [parse-buildlog.py](parse-buildlog.py) - - [appveyor_env.py](appveyor_env.py) - - [build-gnu.bat](build-gnu.bat) + - [build-sonar-qube-finish.bat](../build-sonar-qube-finish.bat) + - [build-sonar-qube-env.bat](../build-sonar-qube-env.bat) + - [parse-buildlog.bat](../parse-buildlog.bat) + - [appveyor_env.py](../appveyor_env.py) : AppVeyor の環境変数を再現できる `set_appveyor_env.bat` を生成する。(成果物に含まれる) + - [parse-buildlog.py](../parse-buildlog.py) + - [appveyor_env.py](../appveyor_env.py) + - [build-gnu.bat](../build-gnu.bat) - mingw32-make.exe sakura_core - - [sakura\githash.bat](sakura/githash.bat) + - [sakura\githash.bat](../sakura/githash.bat) - git.exe - HeaderMake.exe - - [build-chm.bat](build-chm.bat) - - [help\remove-comment.py](help/remove-comment.py) : [sakura_core\sakura.hh](sakura_core/sakura.hh) に記述された日本語を含む行コメントを削除する + - [build-chm.bat](../build-chm.bat) + - [help\remove-comment.py](../help/remove-comment.py) : [sakura_core\sakura.hh](../sakura_core/sakura.hh) に記述された日本語を含む行コメントを削除する - ChmSourceConverter.exe : ヘルプファイルの文字コードを UTF-8 から Shift_JIS に変換する - - [help\CompileChm.ps1](help/CompileChm.ps1) + - [help\CompileChm.ps1](../help/CompileChm.ps1) - hhc.exe (Visual Studio に同梱) : compiled HTML をビルドするコンパイラ。かなり古いツールであり、日本語 HTML をビルドするためには Windows のシステムロケールを日本語に変更する必要がある。 - - [build-installer.bat](build-installer.bat) + - [build-installer.bat](../build-installer.bat) - ISCC.exe : [InnoSetup](https://www.jrsoftware.org/isinfo.php) でインストーラをビルドする - - [zipArtifacts.bat](zipArtifacts.bat) - - [sakura\githash.bat](sakura/githash.bat) + - [zipArtifacts.bat](../zipArtifacts.bat) + - [sakura\githash.bat](../sakura/githash.bat) - git.exe - - [calc-hash.bat](calc-hash.bat) - - [calc-hash.py](calc-hash.py) - - [tools\zip\zip.bat](tools/zip/zip.bat) : 成果物を ZIP ファイルにまとめる - - 7z.exe または [tools\zip\zip.ps1](tools/zip/zip.ps1) + - [calc-hash.bat](../calc-hash.bat) + - [calc-hash.py](../calc-hash.py) + - [tools\zip\zip.bat](../tools/zip/zip.bat) : 成果物を ZIP ファイルにまとめる + - 7z.exe または [tools\zip\zip.ps1](../tools/zip/zip.ps1) ## ビルドに使用するバッチファイルの引数 @@ -111,7 +111,7 @@ SonarQube に関しては [こちら](SonarQube.md) も参照してください #### 処理の流れ - Git や CI の環境変数を元に githash.h を生成する - - 設定される環境変数については [こちら](ci-build.md) を参照してください。 + - 設定される環境変数については [こちら](build-envvars.md) を参照してください。 ### postBuild.bat の構造 @@ -124,8 +124,8 @@ SonarQube に関しては [こちら](SonarQube.md) も参照してください #### 処理の流れ * if 文の条件判定を元に、成果物のファイル名、フォルダ名を構築して環境変数に設定する - - 設定される環境変数については [こちら](ci-build.md#zipartifactsbat-で設定する環境変数) を参照してください。 + - 設定される環境変数については [こちら](build-envvars.md#zipartifactsbat-で設定する環境変数) を参照してください。 * 作業用フォルダに必要なファイルをコピーする -* [calc-hash.bat](calc-hash.bat) で sha256 のハッシュを計算して、作業用フォルダにコピーする -* [tools\zip\zip.bat](tools/zip/zip.bat) を使用して作業用フォルダの中身を zip ファイルにまとめる +* [calc-hash.bat](../calc-hash.bat) で sha256 のハッシュを計算して、作業用フォルダにコピーする +* [tools\zip\zip.bat](../tools/zip/zip.bat) を使用して作業用フォルダの中身を zip ファイルにまとめる - [7-Zip](https://sevenzip.osdn.jp/) が利用できる場合は 7z.exe を、利用できない場合は PowerShell を利用してファイルを作成します。 From bde1bc08b334dcd1fe31900d77f424e548e511cf Mon Sep 17 00:00:00 2001 From: usagisita <40428610+usagisita@users.noreply.github.com> Date: Thu, 22 Apr 2021 20:18:06 +0900 Subject: [PATCH 0647/1024] =?UTF-8?q?CMemory::AppendRawData()=E3=81=A7Allo?= =?UTF-8?q?cBuffer=E6=9D=A1=E4=BB=B6=E3=83=9F=E3=82=B9=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/mem/CMemory.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/mem/CMemory.cpp b/sakura_core/mem/CMemory.cpp index 1b5fe035c6..9d876dd815 100644 --- a/sakura_core/mem/CMemory.cpp +++ b/sakura_core/mem/CMemory.cpp @@ -227,7 +227,7 @@ void CMemory::SetRawDataHoldBuffer( const CMemory& cmemData ) void CMemory::AppendRawData( const void* pData, size_t nDataLen ) { // メモリが足りなければ確保する - if( m_nDataBufSize <= m_nRawLen + nDataLen ){ + if( m_nDataBufSize <= m_nRawLen + nDataLen + sizeof(wchar_t) ){ AllocBuffer( m_nRawLen + nDataLen ); } From 0535462ec9d8bb453913eed130391e26f5ba7243 Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Fri, 23 Apr 2021 22:57:08 +0900 Subject: [PATCH 0648/1024] =?UTF-8?q?#1601=20=E3=81=AE=E3=82=AD=E3=83=A3?= =?UTF-8?q?=E3=83=AC=E3=83=83=E3=83=88=E4=BD=8D=E7=BD=AE=E3=81=AE=E6=96=87?= =?UTF-8?q?=E5=AD=97=E6=83=85=E5=A0=B1=E3=82=92=E3=82=B9=E3=83=86=E3=83=BC?= =?UTF-8?q?=E3=82=BF=E3=82=B9=E3=83=90=E3=83=BC=E3=81=AB=E8=A8=AD=E5=AE=9A?= =?UTF-8?q?=E3=81=99=E3=82=8B=E9=9A=9B=E3=81=AE=E5=86=8D=E6=8F=8F=E7=94=BB?= =?UTF-8?q?=E3=82=92=E3=81=BE=E3=81=A8=E3=82=81=E3=81=9F=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=E3=81=A7=20UpdateWindow=20=E3=81=AE=E5=91=BC=E3=81=B3=E5=87=BA?= =?UTF-8?q?=E3=81=97=E3=81=8C=E5=BF=85=E8=A6=81=E3=81=AA=E3=81=AE=E3=81=AB?= =?UTF-8?q?=E6=BC=8F=E3=82=8C=E3=81=A6=E3=81=84=E3=81=9F=E3=81=AE=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CCaret.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/sakura_core/view/CCaret.cpp b/sakura_core/view/CCaret.cpp index f64f769c2f..05a3cb055f 100644 --- a/sakura_core/view/CCaret.cpp +++ b/sakura_core/view/CCaret.cpp @@ -873,6 +873,7 @@ void CCaret::ShowCaretPosInfo() setStatusText( nIndex++, 0, szFontSize ); ::SendMessage(hWnd, WM_SETREDRAW, TRUE, 0); InvalidateRect(hWnd, &updatedRect, TRUE); + UpdateWindow(hWnd); } } From 700d99b9e93af60a00cd096d2fdb3c8a390f26d9 Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Sat, 24 Apr 2021 01:21:28 +0900 Subject: [PATCH 0649/1024] =?UTF-8?q?CMemory::AppendRawData=E3=81=AE?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-cmemory.cpp | 34 ++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/tests/unittests/test-cmemory.cpp b/tests/unittests/test-cmemory.cpp index 1c1fd3b2a0..b99b4ee78f 100644 --- a/tests/unittests/test-cmemory.cpp +++ b/tests/unittests/test-cmemory.cpp @@ -144,3 +144,37 @@ TEST(CMemory, OverMaxSize) cmem.AllocBuffer(static_cast(INT_MAX) + 1); ASSERT_TRUE(cmem.GetRawPtr() == nullptr); } + +/*! + CMemory::AppendRawDataのテスト + 様々なサイズのデータ追加が正常に行える事の確認 + */ +TEST(CMemory, AppendRawData) +{ + const size_t n = 2 * 5000; + const size_t sumAnswer = n / 2 * (n + 1); + std::vector buff(n); + for (size_t i = 0; i < n; ++i) { + buff[i] = '0' + (i % 10); + } + const void* pData = &buff[0]; + CMemory cmem; + cmem.AllocBuffer(sumAnswer); + size_t sum = 0; + for (size_t i = 0; i <= n; ++i) { + { + cmem.AppendRawData(pData, i); + sum += i; + ASSERT_TRUE(cmem.GetRawLength() == sum); + } + { + // #1638 の修正に関連した試験 + CMemory cmemTmp; + cmemTmp.AllocBuffer(1); + cmemTmp.AppendRawData(pData, i); + auto rawLen = cmemTmp.GetRawLength(); + ASSERT_TRUE(rawLen == i); + } + } + ASSERT_TRUE(sum == sumAnswer); +} From ce217c74e6a0e881c824cb7235e63b1526924a52 Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Sun, 25 Apr 2021 08:08:14 +0900 Subject: [PATCH 0650/1024] =?UTF-8?q?C=E3=83=97=E3=83=AA=E3=83=97=E3=83=AD?= =?UTF-8?q?=E3=82=BB=E3=83=83=E3=82=B5=E3=81=AE=E5=88=A4=E5=AE=9A=E3=82=92?= =?UTF-8?q?=E5=BC=B7=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CCppPreprocessMng::ScanLine において #elif にも対応 この処理はアウトライン解析ウィンドウに表示するC/C++関数リストを作成する処理で使用される --- sakura_core/types/CType_Cpp.cpp | 110 ++++++++++++++++++++------------ 1 file changed, 69 insertions(+), 41 deletions(-) diff --git a/sakura_core/types/CType_Cpp.cpp b/sakura_core/types/CType_Cpp.cpp index c8fdc60912..95243f32c1 100644 --- a/sakura_core/types/CType_Cpp.cpp +++ b/sakura_core/types/CType_Cpp.cpp @@ -198,26 +198,25 @@ static bool CPP_IsFunctionAfterKeyword( const wchar_t* s ) class CCppPreprocessMng { public: - CCppPreprocessMng(void) : - // 2007.12.15 genta : m_bitpatternを0にしないと, - // いきなり#elseが現れたときにパターンがおかしくなる - m_ismultiline( false ), m_maxnestlevel( 32 ), m_stackptr( 0 ), m_bitpattern( 0 ), m_enablebuf( 0 ) - {} + CCppPreprocessMng(void) = default; CLogicInt ScanLine(const wchar_t*, CLogicInt); private: - bool m_ismultiline; //!< 複数行のディレクティブ - int m_maxnestlevel; //!< ネストレベルの最大値 + bool m_ismultiline = false; //!< 複数行のディレクティブ + int m_maxnestlevel = 32; //!< ネストレベルの最大値 - int m_stackptr; //!< ネストレベル + int m_stackptr = 0; //!< ネストレベル /*! ネストレベルに対応するビットパターン m_stackptr = n の時,下から(n-1)bit目に1が入っている */ - unsigned int m_bitpattern; - unsigned int m_enablebuf; //!< 処理の有無を保存するバッファ + // 2007.12.15 genta : m_bitpatternを0にしないと, + // いきなり#elseが現れたときにパターンがおかしくなる + unsigned int m_bitpattern = 0; + unsigned int m_enablebuf = 0; //!< 処理の有無を保存するバッファ + unsigned int m_activated = 0; //!< 処理しない有効化したコードが有ったかどうかを記録するバッファ }; /*! @@ -280,13 +279,29 @@ CLogicInt CCppPreprocessMng::ScanLine( const wchar_t* str, CLogicInt _length ) for( ; C_IsSpace( *p, bExtEol ) && p < lastptr ; ++p ) ; + enum CppDirectiveType { + Directive_None, + Directive_If, + Directive_Ifdef, + Directive_Ifndef, + Directive_Else, + Directive_Elif, + Directive_Endif, + } directive = Directive_None; + if (p + 5 < lastptr && wcsncmp_literal(p, L"ifdef" ) == 0) { directive = Directive_Ifdef; p += 5; } + else if (p + 6 < lastptr && wcsncmp_literal(p, L"ifndef") == 0) { directive = Directive_Ifndef; p += 6; } + else if (p + 2 < lastptr && wcsncmp_literal(p, L"if" ) == 0) { directive = Directive_If; p += 2; } + else if (p + 4 < lastptr && wcsncmp_literal(p, L"else" ) == 0) { directive = Directive_Else; p += 4; } + else if (p + 4 < lastptr && wcsncmp_literal(p, L"elif" ) == 0) { directive = Directive_Elif; p += 4; } + else if (p + 5 < lastptr && wcsncmp_literal(p, L"endif" ) == 0) { directive = Directive_Endif; p += 5; } + + // ここからPreprocessor directive解析 - if( p + 2 + 2 < lastptr && wcsncmp_literal( p, L"if" ) == 0 ){ - // if - p += 2; - - int enable = 0; // 0: 処理しない, 1: else以降が有効, 2: 最初が有効, - + switch (directive) { + case Directive_If: + case Directive_Ifdef: + case Directive_Ifndef: + case Directive_Elif: // if 0は最初が無効部分とみなす. // それ以外のif/ifdef/ifndefは最初が有効部分と見なす // 最初の条件によってこの時点ではp < lastptrなので判定省略 @@ -297,42 +312,55 @@ CLogicInt CCppPreprocessMng::ScanLine( const wchar_t* str, CLogicInt _length ) // 2007.12.15 genta for( ; ( C_IsSpace( *p, bExtEol ) || *p == L'(' ) && p < lastptr ; ++p ) ; - if( *p == L'0' ){ - enable = 1; - } - else { - enable = 2; + bool bZero = (*p == L'0'); + // 保存領域の確保とビットパターンの設定 + if (directive == Directive_If || directive == Directive_Ifdef || directive == Directive_Ifndef) { + m_bitpattern = 1 << m_stackptr; + ++m_stackptr; + if (bZero) { + m_enablebuf |= m_bitpattern; + } + else if (m_stackptr == 1 || m_activated & (1 << (m_stackptr - 2))) { + m_activated |= m_bitpattern; + } } - } - else if( - ( p + 3 < lastptr && wcsncmp_literal( p, L"def" ) == 0 ) || - ( p + 4 < lastptr && wcsncmp_literal( p, L"ndef" ) == 0 )){ - enable = 2; - } - - // 保存領域の確保とビットパターンの設定 - if( enable > 0 ){ - m_bitpattern = 1 << m_stackptr; - ++m_stackptr; - if( enable == 1 ){ - m_enablebuf |= m_bitpattern; + else if (0 < m_stackptr && m_stackptr < m_maxnestlevel) { + if (bZero || (m_activated & m_bitpattern)) { + m_enablebuf |= m_bitpattern; + } + else if (!(m_activated & m_bitpattern)) { + m_enablebuf &= ~m_bitpattern; + m_activated |= m_bitpattern; + } } } - } - else if( p + 4 < lastptr && wcsncmp_literal( p, L"else" ) == 0 ){ + break; + case Directive_Else: // 2007.12.14 genta : #ifが無く#elseが出たときのガード追加 if( 0 < m_stackptr && m_stackptr < m_maxnestlevel ){ - m_enablebuf ^= m_bitpattern; + if (m_activated & m_bitpattern) { + m_enablebuf |= m_bitpattern; + } + else { + if (!(m_activated & m_bitpattern)) { + m_enablebuf &= ~m_bitpattern; + } + if (m_stackptr == 1 || m_activated & (1 << (m_stackptr - 2))) { + m_activated |= m_bitpattern; + } + } } - } - else if( p + 5 < lastptr && wcsncmp_literal( p, L"endif" ) == 0 ){ + break; + case Directive_Endif: if( m_stackptr > 0 ){ --m_stackptr; m_enablebuf &= ~m_bitpattern; + m_activated &= ~m_bitpattern; m_bitpattern = ( 1 << ( m_stackptr - 1 )); } - } - else{ + break; + case Directive_None: + default: m_ismultiline = C_IsLineEsc(str, length); // 行末が \ で終わっていないか } From fc866ba428f334bfba47c2432cbed328afcc77ef Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Mon, 26 Apr 2021 20:10:22 +0900 Subject: [PATCH 0651/1024] =?UTF-8?q?=E3=83=97=E3=83=AD=E3=82=B8=E3=82=A7?= =?UTF-8?q?=E3=82=AF=E3=83=88=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AB?= =?UTF-8?q?=E5=90=AB=E3=81=BE=E3=82=8C=E3=81=A6=E3=81=84=E3=81=AA=E3=81=84?= =?UTF-8?q?=20SShare=5FHistory.h=20=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura/sakura.vcxproj | 1 + sakura/sakura.vcxproj.filters | 3 +++ 2 files changed, 4 insertions(+) diff --git a/sakura/sakura.vcxproj b/sakura/sakura.vcxproj index a3c8836a57..5d9b690e27 100644 --- a/sakura/sakura.vcxproj +++ b/sakura/sakura.vcxproj @@ -492,6 +492,7 @@ + diff --git a/sakura/sakura.vcxproj.filters b/sakura/sakura.vcxproj.filters index 34baf00529..25db040118 100644 --- a/sakura/sakura.vcxproj.filters +++ b/sakura/sakura.vcxproj.filters @@ -1112,6 +1112,9 @@ Cpp Source Files\convert + + Cpp Source Files\recent + From f30ff8a25348dd9c59f10a76283a4764046a20fe Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Wed, 28 Apr 2021 07:02:54 +0900 Subject: [PATCH 0652/1024] =?UTF-8?q?=E3=82=A2=E3=82=A6=E3=83=88=E3=83=A9?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E8=A7=A3=E6=9E=90=E3=82=A6=E3=82=A3=E3=83=B3?= =?UTF-8?q?=E3=83=89=E3=82=A6=E3=81=AE=E3=83=84=E3=83=AA=E3=83=BC=E3=83=93?= =?UTF-8?q?=E3=83=A5=E3=83=BC=E3=81=AE=E8=A8=AD=E5=AE=9A=E5=87=A6=E7=90=86?= =?UTF-8?q?=E3=81=AE=E9=AB=98=E9=80=9F=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CDlgFuncList::SetTree においてアイテムを追加するループの前後で WM_SETREDRAW メッセージを使用する事で描画の抑制 ソート種別が SORTTYPE_DEFAULT もしくは SORTTYPE_DEFAULT_DESC の場合は、ツリービューへのデータ追加方法を調整する事で CDlgFuncList::SortTree の呼び出しを行う必要が無くして高速化 --- sakura_core/outline/CDlgFuncList.cpp | 66 +++++++++++++--------------- sakura_core/outline/CDlgFuncList.h | 4 +- 2 files changed, 33 insertions(+), 37 deletions(-) diff --git a/sakura_core/outline/CDlgFuncList.cpp b/sakura_core/outline/CDlgFuncList.cpp index 4a3bd9002b..f789a518b8 100644 --- a/sakura_core/outline/CDlgFuncList.cpp +++ b/sakura_core/outline/CDlgFuncList.cpp @@ -431,52 +431,53 @@ void CDlgFuncList::SetData() ListView_DeleteAllItems( hwndList ); TreeView_DeleteAllItems( hwndTree ); ::ShowWindow( GetItemHwnd(IDC_BUTTON_SETTING), SW_HIDE ); + const HTREEITEM hInsertAfter = (m_nSortType == SORTTYPE_DEFAULT_DESC) ? TVI_FIRST : TVI_LAST; SetDocLineFuncList(); if( OUTLINE_C_CPP == m_nListType || OUTLINE_CPP == m_nListType ){ /* C++メソッドリスト */ m_nViewType = VIEWTYPE_TREE; - SetTreeJava( GetHwnd(), TRUE ); // Jan. 04, 2002 genta Java Method Treeに統合 + SetTreeJava( GetHwnd(), hwndTree, hInsertAfter, TRUE ); // Jan. 04, 2002 genta Java Method Treeに統合 ::SetWindowText( GetHwnd(), LS(STR_DLGFNCLST_TITLE_CPP) ); } else if( OUTLINE_FILE == m_nListType ){ //@@@ 2002.04.01 YAZAKI アウトライン解析にルールファイル導入 m_nViewType = VIEWTYPE_TREE; - SetTree(); + SetTree(hwndTree, hInsertAfter); ::SetWindowText( GetHwnd(), LS(STR_DLGFNCLST_TITLE_RULE) ); } else if( OUTLINE_WZTXT == m_nListType ){ //@@@ 2003.05.20 zenryaku 階層付テキストアウトライン解析 m_nViewType = VIEWTYPE_TREE; - SetTree(); + SetTree(hwndTree, hInsertAfter); ::SetWindowText( GetHwnd(), LS(STR_DLGFNCLST_TITLE_WZ) ); // 2003.06.22 Moca 名前変更 } else if( OUTLINE_HTML == m_nListType ){ //@@@ 2003.05.20 zenryaku HTMLアウトライン解析 m_nViewType = VIEWTYPE_TREE; - SetTree(); + SetTree(hwndTree, hInsertAfter); ::SetWindowText( GetHwnd(), L"HTML" ); } else if( OUTLINE_TEX == m_nListType ){ //@@@ 2003.07.20 naoh TeXアウトライン解析 m_nViewType = VIEWTYPE_TREE; - SetTree(); + SetTree(hwndTree, hInsertAfter); ::SetWindowText( GetHwnd(), L"TeX" ); } else if( OUTLINE_TEXT == m_nListType ){ /* テキスト・トピックリスト */ m_nViewType = VIEWTYPE_TREE; - SetTree(); //@@@ 2002.04.01 YAZAKI テキストトピックツリーも、汎用SetTreeを呼ぶように変更。 + SetTree(hwndTree, hInsertAfter); //@@@ 2002.04.01 YAZAKI テキストトピックツリーも、汎用SetTreeを呼ぶように変更。 ::SetWindowText( GetHwnd(), LS(STR_DLGFNCLST_TITLE_TEXT) ); } else if( OUTLINE_JAVA == m_nListType ){ /* Javaメソッドツリー */ m_nViewType = VIEWTYPE_TREE; - SetTreeJava( GetHwnd(), TRUE ); + SetTreeJava( GetHwnd(), hwndTree, hInsertAfter, TRUE ); ::SetWindowText( GetHwnd(), LS(STR_DLGFNCLST_TITLE_JAVA) ); } // 2007.02.08 genta Python追加 else if( OUTLINE_PYTHON == m_nListType ){ /* Python メソッドツリー */ m_nViewType = VIEWTYPE_TREE; - SetTree( true ); + SetTree( hwndTree, hInsertAfter, true ); ::SetWindowText( GetHwnd(), LS(STR_DLGFNCLST_TITLE_PYTHON) ); } else if( OUTLINE_COBOL == m_nListType ){ /* COBOL アウトライン */ m_nViewType = VIEWTYPE_TREE; - SetTreeJava( GetHwnd(), FALSE ); + SetTreeJava( GetHwnd(), hwndTree, hInsertAfter, FALSE ); ::SetWindowText( GetHwnd(), LS(STR_DLGFNCLST_TITLE_COBOL) ); } else if( OUTLINE_VB == m_nListType ){ /* VisualBasic アウトライン */ @@ -486,7 +487,7 @@ void CDlgFuncList::SetData() } else if( OUTLINE_XML == m_nListType ){ // XMLツリー m_nViewType = VIEWTYPE_TREE; - SetTree(); + SetTree(hwndTree, hInsertAfter); ::SetWindowText( GetHwnd(), L"XML" ); } else if ( OUTLINE_FILETREE == m_nListType ){ @@ -496,17 +497,17 @@ void CDlgFuncList::SetData() } else if( OUTLINE_TREE == m_nListType ){ /* 汎用ツリー */ m_nViewType = VIEWTYPE_TREE; - SetTree(); + SetTree(hwndTree, hInsertAfter); ::SetWindowText( GetHwnd(), L"" ); } else if( OUTLINE_TREE_TAGJUMP == m_nListType ){ /* 汎用ツリー(タグジャンプ付き) */ m_nViewType = VIEWTYPE_TREE; - SetTree( true ); + SetTree( hwndTree, hInsertAfter, true ); ::SetWindowText( GetHwnd(), L"" ); } else if( OUTLINE_CLSTREE == m_nListType ){ /* 汎用クラスツリー */ m_nViewType = VIEWTYPE_TREE; - SetTreeJava( GetHwnd(), TRUE ); + SetTreeJava( GetHwnd(), hwndTree, hInsertAfter, TRUE ); ::SetWindowText( GetHwnd(), L"" ); } else{ @@ -700,13 +701,6 @@ void CDlgFuncList::SetData() ::EnableWindow( GetItemHwnd( IDC_CHECK_bFunclistSetFocusOnJump ), TRUE ); } - //2002.02.08 hor - //(IDC_LIST_FLもIDC_TREE_FLも常に存在していて、m_nViewTypeによって、どちらを表示するかを選んでいる) - HWND hwndShow = (VIEWTYPE_LIST == m_nViewType)? hwndList: hwndTree; - ::ShowWindow( hwndShow, SW_SHOW ); - if( ::GetForegroundWindow() == MyGetAncestor( GetHwnd(), GA_ROOT ) && IsChild( GetHwnd(), GetFocus()) ) - ::SetFocus( hwndShow ); - //2002.02.08 hor //空行をどう扱うかのチェックボックスはブックマーク一覧のときだけ表示する if(OUTLINE_BOOKMARK == m_nListType){ @@ -743,8 +737,8 @@ void CDlgFuncList::SetData() Combo_AddString( hWnd_Combo_Sort , LS(STR_DLGFNCLST_SORTTYPE2_2)); // SORTTYPE_ZTOA Combo_SetCurSel( hWnd_Combo_Sort , m_nSortType ); ::ShowWindow( GetItemHwnd( IDC_STATIC_nSortType ), SW_SHOW ); - // 2002.11.10 Moca 追加 ソートする - SortTree(GetItemHwnd( IDC_TREE_FL),TVI_ROOT); + if (m_nSortType != SORTTYPE_DEFAULT && m_nSortType != SORTTYPE_DEFAULT_DESC) + SortTree(hwndTree, TVI_ROOT); }else if( m_nListType == OUTLINE_FILETREE ){ ::ShowWindow( GetItemHwnd(IDC_COMBO_nSortType), SW_HIDE ); ::ShowWindow( GetItemHwnd(IDC_STATIC_nSortType), SW_HIDE ); @@ -756,6 +750,13 @@ void CDlgFuncList::SetData() //ListView_SortItems( hwndList, CompareFunc_Asc, (LPARAM)this ); // 2005.04.05 zenryaku ソート状態を保持 SortListView( hwndList, m_nSortCol ); // 2005.04.23 genta 関数化(ヘッダ書き換えのため) } + + //2002.02.08 hor + //(IDC_LIST_FLもIDC_TREE_FLも常に存在していて、m_nViewTypeによって、どちらを表示するかを選んでいる) + HWND hwndShow = (VIEWTYPE_LIST == m_nViewType) ? hwndList : hwndTree; + ::ShowWindow(hwndShow, SW_SHOW); + if (::GetForegroundWindow() == MyGetAncestor(GetHwnd(), GA_ROOT) && IsChild(GetHwnd(), GetFocus())) + ::SetFocus(hwndShow); } bool CDlgFuncList::GetTreeFileFullName(HWND hwndTree, HTREEITEM target, std::wstring* pPath, int* pnItem) @@ -890,11 +891,10 @@ int CDlgFuncList::GetData( void ) @date 2002.01.04 genta C++ツリーを統合 @date 2020.09.12 選択処理をGetFuncInfoIndex,SetItemSelectionへ移動 */ -void CDlgFuncList::SetTreeJava( HWND hwndDlg, BOOL bAddClass ) +void CDlgFuncList::SetTreeJava( HWND hwndDlg, HWND hwndTree, HTREEITEM hInsertAfter, BOOL bAddClass ) { int i; const CFuncInfo* pcFuncInfo; - HWND hwndTree; int bSelected; CLayoutInt nFuncLineOld; CLayoutInt nFuncColOld; @@ -916,8 +916,6 @@ void CDlgFuncList::SetTreeJava( HWND hwndDlg, BOOL bAddClass ) m_vecDummylParams.clear(); int nlParamCount = 0; - hwndTree = GetItemHwnd( IDC_TREE_FL ); - m_cmemClipText.SetString( L"" ); { const int nBuffLenTag = 13 + wcslen(m_pcFuncInfoArr->m_szFilePath); @@ -1061,7 +1059,7 @@ void CDlgFuncList::SetTreeJava( HWND hwndDlg, BOOL bAddClass ) strClassName += m_pcFuncInfoArr->GetAppendText(FL_OBJ_CLASS); } tvis.hParent = htiParent; - tvis.hInsertAfter = TVI_LAST; + tvis.hInsertAfter = hInsertAfter; tvis.item.mask = TVIF_TEXT | TVIF_PARAM; tvis.item.pszText = const_cast(strClassName.c_str()); // 2016.03.06 item.lParamは登録順の連番に変更 @@ -1098,7 +1096,7 @@ void CDlgFuncList::SetTreeJava( HWND hwndDlg, BOOL bAddClass ) ::ZeroMemory( &tvg, sizeof(tvg)); tvg.hParent = TVI_ROOT; - tvg.hInsertAfter = TVI_LAST; + tvg.hInsertAfter = hInsertAfter; tvg.item.mask = TVIF_TEXT | TVIF_PARAM; //tvg.item.pszText = const_cast(L"グローバル"); tvg.item.pszText = const_cast(sGlobal.c_str()); @@ -1125,7 +1123,7 @@ void CDlgFuncList::SetTreeJava( HWND hwndDlg, BOOL bAddClass ) /* 該当クラス名のアイテムの子として、メソッドのアイテムを登録 */ tvis.hParent = htiClass; - tvis.hInsertAfter = TVI_LAST; + tvis.hInsertAfter = hInsertAfter; tvis.item.mask = TVIF_TEXT | TVIF_PARAM; tvis.item.pszText = const_cast(strFuncName.c_str()); tvis.item.lParam = nlParamCount; @@ -1379,10 +1377,8 @@ void CDlgFuncList::SetListVB (void) @date 2014.06.06 Moca 他ファイルへのタグジャンプ機能を追加 @date 2020.09.12 選択処理をGetFuncInfoIndex,SetItemSelectionへ移動 */ -void CDlgFuncList::SetTree(bool tagjump, bool nolabel) +void CDlgFuncList::SetTree(HWND hwndTree, HTREEITEM hInsertAfter, bool tagjump, bool nolabel) { - HWND hwndTree = GetItemHwnd( IDC_TREE_FL ); - int i; int nFuncInfoArrNum = m_pcFuncInfoArr->GetNum(); int nStackPointer = 0; @@ -1409,6 +1405,7 @@ void CDlgFuncList::SetTree(bool tagjump, bool nolabel) m_cmemClipText.AllocStringBuffer( nBuffLen + nBuffLenTag * nCount ); } + ::SendMessage(hwndTree, WM_SETREDRAW, (WPARAM)FALSE, 0); for (i = 0; i < nFuncInfoArrNum; i++){ CFuncInfo* pcFuncInfo = m_pcFuncInfoArr->GetAt(i); @@ -1418,8 +1415,7 @@ void CDlgFuncList::SetTree(bool tagjump, bool nolabel) HTREEITEM hItem; TV_INSERTSTRUCT cTVInsertStruct; cTVInsertStruct.hParent = phParentStack[ nStackPointer ]; - // 2016.04.24 TVI_LASTは要素数が多いとすごく遅い。TVI_FIRSTを使い後でソートしなおす - cTVInsertStruct.hInsertAfter = TVI_FIRST; + cTVInsertStruct.hInsertAfter = hInsertAfter; cTVInsertStruct.item.mask = TVIF_TEXT | TVIF_PARAM; cTVInsertStruct.item.pszText = pcFuncInfo->m_cmemFuncName.GetStringPtr(); cTVInsertStruct.item.lParam = i; // あとでこの数値(=m_pcFuncInfoArrの何番目のアイテムか)を見て、目的地にジャンプするぜ!!。 @@ -1490,7 +1486,7 @@ void CDlgFuncList::SetTree(bool tagjump, bool nolabel) } end_of_func:; - + ::SendMessage(hwndTree, WM_SETREDRAW, (WPARAM)TRUE, 0); ::EnableWindow( GetItemHwnd( IDC_BUTTON_COPY ), TRUE ); free( phParentStack ); diff --git a/sakura_core/outline/CDlgFuncList.h b/sakura_core/outline/CDlgFuncList.h index 7a046080c3..c4e8a4e6ce 100644 --- a/sakura_core/outline/CDlgFuncList.h +++ b/sakura_core/outline/CDlgFuncList.h @@ -137,8 +137,8 @@ class CDlgFuncList final : public CDialog || 実装ヘルパ関数 */ BOOL OnJump( bool bCheckAutoClose = true, bool bFileJump = true ); // bCheckAutoClose:「このダイアログを自動的に閉じる」をチェックするかどうか - void SetTreeJava(HWND hwndDlg, BOOL bAddClass); /* ツリーコントロールの初期化:Javaメソッドツリー */ - void SetTree(bool tagjump = false, bool nolabel = false); /* ツリーコントロールの初期化:汎用品 */ + void SetTreeJava(HWND hwndDlg, HWND hwndTree, HTREEITEM hInsertAfter, BOOL bAddClass); /* ツリーコントロールの初期化:Javaメソッドツリー */ + void SetTree(HWND hwndTree, HTREEITEM hInsertAfter, bool tagjump = false, bool nolabel = false); /* ツリーコントロールの初期化:汎用品 */ void SetTreeFile(); // ツリーコントロールの初期化:ファイルツリー void SetListVB( void ); /* リストビューコントロールの初期化:VisualBasic */ // Jul 10, 2003 little YOSHI void SetDocLineFuncList(); From 3a73b61f648f0e202dfb2633a03eb6e6e32766d7 Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Fri, 30 Apr 2021 05:48:57 +0900 Subject: [PATCH 0653/1024] =?UTF-8?q?=E5=85=88=E9=A0=AD=E8=A1=8C=E3=81=A7P?= =?UTF-8?q?ageUp=E3=83=BB=E6=9C=AB=E5=B0=BE=E8=A1=8C=E3=81=A7PageDown?= =?UTF-8?q?=E3=81=97=E3=81=9F=E5=BE=8C=E3=81=AE=E3=82=AB=E3=83=BC=E3=82=BD?= =?UTF-8?q?=E3=83=AB=E7=A7=BB=E5=8B=95=E3=81=A7=E4=B8=8B=E7=B7=9A=E3=81=8C?= =?UTF-8?q?=E6=AE=8B=E3=82=8B=E4=B8=8D=E5=85=B7=E5=90=88=E3=81=AB=E5=AF=BE?= =?UTF-8?q?=E5=87=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/cmd/CViewCommander_Cursor.cpp | 6 ++---- sakura_core/view/CCaret.cpp | 5 +++++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/sakura_core/cmd/CViewCommander_Cursor.cpp b/sakura_core/cmd/CViewCommander_Cursor.cpp index 2f0ea2a32d..1f574021d1 100644 --- a/sakura_core/cmd/CViewCommander_Cursor.cpp +++ b/sakura_core/cmd/CViewCommander_Cursor.cpp @@ -745,7 +745,6 @@ void CViewCommander::Command_1PageUp( bool bSelect, CLayoutYInt nScrollNum ) } auto& caret = GetCaret(); auto prevCaretPos = caret.GetCaretLayoutPos(); - bool bNoDispCursorVLine = m_pCommanderView->m_pTypeData->m_ColorInfoArr[COLORIDX_CURSORVLINE].m_bDisp == false; caret.Cursor_UPDOWN( -nScrollNum, bSelect ); auto currCaretPos = caret.GetCaretLayoutPos(); CLayoutInt nScrolled = m_pCommanderView->ScrollAtV( nViewTopLine - nScrollNum ); @@ -753,7 +752,7 @@ void CViewCommander::Command_1PageUp( bool bSelect, CLayoutYInt nScrollNum ) m_pCommanderView->SetDrawSwitch(bDrawSwitchOld); // カーソル位置が変化しなかった、かつ、スクロール行数が0だった場合、描画を省く // タイプ別設定の「カーソル位置縦線」有効時には省かない - if (bNoDispCursorVLine && prevCaretPos == currCaretPos && nScrolled == 0) { + if (prevCaretPos == currCaretPos && nScrolled == 0) { return; } m_pCommanderView->RedrawAll(); @@ -782,7 +781,6 @@ void CViewCommander::Command_1PageDown( bool bSelect, CLayoutYInt nScrollNum ) } auto& caret = GetCaret(); auto prevCaretPos = caret.GetCaretLayoutPos(); - bool bNoDispCursorVLine = m_pCommanderView->m_pTypeData->m_ColorInfoArr[COLORIDX_CURSORVLINE].m_bDisp == false; caret.Cursor_UPDOWN( nScrollNum, bSelect ); auto currCaretPos = caret.GetCaretLayoutPos(); CLayoutInt nScrolled = m_pCommanderView->ScrollAtV( nViewTopLine + nScrollNum ); @@ -790,7 +788,7 @@ void CViewCommander::Command_1PageDown( bool bSelect, CLayoutYInt nScrollNum ) m_pCommanderView->SetDrawSwitch(bDrawSwitchOld); // カーソル位置が変化しなかった、かつ、スクロール行数が0だった場合、描画を省く // タイプ別設定の「カーソル位置縦線」有効時には省かない - if (bNoDispCursorVLine && prevCaretPos == currCaretPos && nScrolled == 0) { + if (prevCaretPos == currCaretPos && nScrolled == 0) { return; } m_pCommanderView->RedrawAll(); diff --git a/sakura_core/view/CCaret.cpp b/sakura_core/view/CCaret.cpp index 05a3cb055f..90cb59f087 100644 --- a/sakura_core/view/CCaret.cpp +++ b/sakura_core/view/CCaret.cpp @@ -964,6 +964,11 @@ CLayoutInt CCaret::Cursor_UPDOWN( CLayoutInt nMoveLines, bool bSelect ) bVertLineDoNotOFF = false; } GetAdjustCursorPos( &ptTo ); + + if (ptTo == ptCaret) { + return CLayoutInt(0); + } + if( bSelect ) { /* 現在のカーソル位置によって選択範囲を変更 */ m_pEditView->GetSelectionInfo().ChangeSelectAreaByCurrentCursor( ptTo ); From ad15b1a52de10547d503ce6af9fd839902ad60cc Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Sat, 1 May 2021 05:17:01 +0900 Subject: [PATCH 0654/1024] =?UTF-8?q?SetTreeJava=20=E3=81=A8=20SetTree=20?= =?UTF-8?q?=E3=81=AE=E5=BC=95=E6=95=B0=E3=81=AB=20hwndTree=20=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B=E5=A4=89=E6=9B=B4=E3=82=92?= =?UTF-8?q?=E3=82=84=E3=82=81=E3=82=8B=20hwndList=20=E3=81=A8=20hwndTree?= =?UTF-8?q?=20=E3=82=92=E9=9D=9E=E8=A1=A8=E7=A4=BA=E3=81=AB=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=82=BF=E3=82=A4=E3=83=9F=E3=83=B3=E3=82=B0=E3=81=AE?= =?UTF-8?q?=E5=A4=89=E6=9B=B4=20hwndList=20=E3=81=A8=20hwndTree=20?= =?UTF-8?q?=E3=81=AE=E6=8F=8F=E7=94=BB=E3=82=92=20WM=5FSETREDRAW=E3=80=80?= =?UTF-8?q?=E3=83=A1=E3=83=83=E3=82=BB=E3=83=BC=E3=82=B8=E3=81=A7=E6=8A=91?= =?UTF-8?q?=E3=81=88=E3=82=8B=E7=AF=84=E5=9B=B2=E3=82=92=E5=BA=83=E3=81=92?= =?UTF-8?q?=E3=82=8B=20=E9=81=B8=E6=8A=9E=E7=8A=B6=E6=85=8B=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E5=87=A6=E7=90=86=E3=81=AF=E6=9C=80=E5=BE=8C=E3=81=AB?= =?UTF-8?q?=E8=A1=8C=E3=81=86=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=EF=BC=88WM=5FSETREDRAW=E3=83=A1=E3=83=83=E3=82=BB=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E3=81=A7=E6=8F=8F=E7=94=BB=E3=82=92=E6=8A=91=E3=81=88?= =?UTF-8?q?=E3=81=A6=E3=81=84=E3=82=8B=E9=96=93=E3=81=AF=E6=A9=9F=E8=83=BD?= =?UTF-8?q?=E3=81=97=E3=81=AA=E3=81=84=E6=A8=A1=E6=A7=98=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/outline/CDlgFuncList.cpp | 64 ++++++++++++++++------------ sakura_core/outline/CDlgFuncList.h | 4 +- 2 files changed, 38 insertions(+), 30 deletions(-) diff --git a/sakura_core/outline/CDlgFuncList.cpp b/sakura_core/outline/CDlgFuncList.cpp index f789a518b8..b2354a24d2 100644 --- a/sakura_core/outline/CDlgFuncList.cpp +++ b/sakura_core/outline/CDlgFuncList.cpp @@ -426,8 +426,8 @@ void CDlgFuncList::SetData() m_vecDummylParams.clear(); //2002.02.08 hor 隠しといてアイテム削除→あとで表示 - ::ShowWindow( hwndList, SW_HIDE ); - ::ShowWindow( hwndTree, SW_HIDE ); + ::SendMessage(hwndList, WM_SETREDRAW, (WPARAM)FALSE, 0); + ::SendMessage(hwndTree, WM_SETREDRAW, (WPARAM)FALSE, 0); ListView_DeleteAllItems( hwndList ); TreeView_DeleteAllItems( hwndTree ); ::ShowWindow( GetItemHwnd(IDC_BUTTON_SETTING), SW_HIDE ); @@ -436,48 +436,48 @@ void CDlgFuncList::SetData() SetDocLineFuncList(); if( OUTLINE_C_CPP == m_nListType || OUTLINE_CPP == m_nListType ){ /* C++メソッドリスト */ m_nViewType = VIEWTYPE_TREE; - SetTreeJava( GetHwnd(), hwndTree, hInsertAfter, TRUE ); // Jan. 04, 2002 genta Java Method Treeに統合 + SetTreeJava( GetHwnd(), hInsertAfter, TRUE ); // Jan. 04, 2002 genta Java Method Treeに統合 ::SetWindowText( GetHwnd(), LS(STR_DLGFNCLST_TITLE_CPP) ); } else if( OUTLINE_FILE == m_nListType ){ //@@@ 2002.04.01 YAZAKI アウトライン解析にルールファイル導入 m_nViewType = VIEWTYPE_TREE; - SetTree(hwndTree, hInsertAfter); + SetTree(hInsertAfter); ::SetWindowText( GetHwnd(), LS(STR_DLGFNCLST_TITLE_RULE) ); } else if( OUTLINE_WZTXT == m_nListType ){ //@@@ 2003.05.20 zenryaku 階層付テキストアウトライン解析 m_nViewType = VIEWTYPE_TREE; - SetTree(hwndTree, hInsertAfter); + SetTree(hInsertAfter); ::SetWindowText( GetHwnd(), LS(STR_DLGFNCLST_TITLE_WZ) ); // 2003.06.22 Moca 名前変更 } else if( OUTLINE_HTML == m_nListType ){ //@@@ 2003.05.20 zenryaku HTMLアウトライン解析 m_nViewType = VIEWTYPE_TREE; - SetTree(hwndTree, hInsertAfter); + SetTree(hInsertAfter); ::SetWindowText( GetHwnd(), L"HTML" ); } else if( OUTLINE_TEX == m_nListType ){ //@@@ 2003.07.20 naoh TeXアウトライン解析 m_nViewType = VIEWTYPE_TREE; - SetTree(hwndTree, hInsertAfter); + SetTree(hInsertAfter); ::SetWindowText( GetHwnd(), L"TeX" ); } else if( OUTLINE_TEXT == m_nListType ){ /* テキスト・トピックリスト */ m_nViewType = VIEWTYPE_TREE; - SetTree(hwndTree, hInsertAfter); //@@@ 2002.04.01 YAZAKI テキストトピックツリーも、汎用SetTreeを呼ぶように変更。 + SetTree(hInsertAfter); //@@@ 2002.04.01 YAZAKI テキストトピックツリーも、汎用SetTreeを呼ぶように変更。 ::SetWindowText( GetHwnd(), LS(STR_DLGFNCLST_TITLE_TEXT) ); } else if( OUTLINE_JAVA == m_nListType ){ /* Javaメソッドツリー */ m_nViewType = VIEWTYPE_TREE; - SetTreeJava( GetHwnd(), hwndTree, hInsertAfter, TRUE ); + SetTreeJava( GetHwnd(), hInsertAfter, TRUE ); ::SetWindowText( GetHwnd(), LS(STR_DLGFNCLST_TITLE_JAVA) ); } // 2007.02.08 genta Python追加 else if( OUTLINE_PYTHON == m_nListType ){ /* Python メソッドツリー */ m_nViewType = VIEWTYPE_TREE; - SetTree( hwndTree, hInsertAfter, true ); + SetTree( hInsertAfter, true ); ::SetWindowText( GetHwnd(), LS(STR_DLGFNCLST_TITLE_PYTHON) ); } else if( OUTLINE_COBOL == m_nListType ){ /* COBOL アウトライン */ m_nViewType = VIEWTYPE_TREE; - SetTreeJava( GetHwnd(), hwndTree, hInsertAfter, FALSE ); + SetTreeJava( GetHwnd(), hInsertAfter, FALSE ); ::SetWindowText( GetHwnd(), LS(STR_DLGFNCLST_TITLE_COBOL) ); } else if( OUTLINE_VB == m_nListType ){ /* VisualBasic アウトライン */ @@ -487,7 +487,7 @@ void CDlgFuncList::SetData() } else if( OUTLINE_XML == m_nListType ){ // XMLツリー m_nViewType = VIEWTYPE_TREE; - SetTree(hwndTree, hInsertAfter); + SetTree(hInsertAfter); ::SetWindowText( GetHwnd(), L"XML" ); } else if ( OUTLINE_FILETREE == m_nListType ){ @@ -497,17 +497,17 @@ void CDlgFuncList::SetData() } else if( OUTLINE_TREE == m_nListType ){ /* 汎用ツリー */ m_nViewType = VIEWTYPE_TREE; - SetTree(hwndTree, hInsertAfter); + SetTree(hInsertAfter); ::SetWindowText( GetHwnd(), L"" ); } else if( OUTLINE_TREE_TAGJUMP == m_nListType ){ /* 汎用ツリー(タグジャンプ付き) */ m_nViewType = VIEWTYPE_TREE; - SetTree( hwndTree, hInsertAfter, true ); + SetTree( hInsertAfter, true ); ::SetWindowText( GetHwnd(), L"" ); } else if( OUTLINE_CLSTREE == m_nListType ){ /* 汎用クラスツリー */ m_nViewType = VIEWTYPE_TREE; - SetTreeJava( GetHwnd(), hwndTree, hInsertAfter, TRUE ); + SetTreeJava( GetHwnd(), hInsertAfter, TRUE ); ::SetWindowText( GetHwnd(), L"" ); } else{ @@ -675,12 +675,6 @@ void CDlgFuncList::SetData() ListView_SetExtendedListViewStyle( hwndList, dwExStyle ); } - // 選択状態更新 - int nFuncInfoIndex = -1; - if( GetFuncInfoIndex( m_nCurLine, m_nCurCol, &nFuncInfoIndex ) ){ - SetItemSelection( nFuncInfoIndex, true ); - } - /* アウトライン ダイアログを自動的に閉じる */ ::CheckDlgButton( GetHwnd(), IDC_CHECK_bAutoCloseDlgFuncList, m_pShareData->m_Common.m_sOutline.m_bAutoCloseDlgFuncList ); /* アウトライン ブックマーク一覧で空行を無視する */ @@ -754,7 +748,16 @@ void CDlgFuncList::SetData() //2002.02.08 hor //(IDC_LIST_FLもIDC_TREE_FLも常に存在していて、m_nViewTypeによって、どちらを表示するかを選んでいる) HWND hwndShow = (VIEWTYPE_LIST == m_nViewType) ? hwndList : hwndTree; + ::ShowWindow(hwndTree, SW_HIDE); + ::ShowWindow(hwndList, SW_HIDE); ::ShowWindow(hwndShow, SW_SHOW); + ::SendMessage(hwndList, WM_SETREDRAW, (WPARAM)TRUE, 0); + ::SendMessage(hwndTree, WM_SETREDRAW, (WPARAM)TRUE, 0); + // 選択状態更新 + int nFuncInfoIndex = -1; + if (GetFuncInfoIndex(m_nCurLine, m_nCurCol, &nFuncInfoIndex)) { + SetItemSelection(nFuncInfoIndex, true); + } if (::GetForegroundWindow() == MyGetAncestor(GetHwnd(), GA_ROOT) && IsChild(GetHwnd(), GetFocus())) ::SetFocus(hwndShow); } @@ -891,10 +894,11 @@ int CDlgFuncList::GetData( void ) @date 2002.01.04 genta C++ツリーを統合 @date 2020.09.12 選択処理をGetFuncInfoIndex,SetItemSelectionへ移動 */ -void CDlgFuncList::SetTreeJava( HWND hwndDlg, HWND hwndTree, HTREEITEM hInsertAfter, BOOL bAddClass ) +void CDlgFuncList::SetTreeJava( HWND hwndDlg, HTREEITEM hInsertAfter, BOOL bAddClass ) { int i; const CFuncInfo* pcFuncInfo; + HWND hwndTree; int bSelected; CLayoutInt nFuncLineOld; CLayoutInt nFuncColOld; @@ -916,6 +920,8 @@ void CDlgFuncList::SetTreeJava( HWND hwndDlg, HWND hwndTree, HTREEITEM hInsertAf m_vecDummylParams.clear(); int nlParamCount = 0; + hwndTree = GetItemHwnd( IDC_TREE_FL ); + m_cmemClipText.SetString( L"" ); { const int nBuffLenTag = 13 + wcslen(m_pcFuncInfoArr->m_szFilePath); @@ -1377,8 +1383,10 @@ void CDlgFuncList::SetListVB (void) @date 2014.06.06 Moca 他ファイルへのタグジャンプ機能を追加 @date 2020.09.12 選択処理をGetFuncInfoIndex,SetItemSelectionへ移動 */ -void CDlgFuncList::SetTree(HWND hwndTree, HTREEITEM hInsertAfter, bool tagjump, bool nolabel) +void CDlgFuncList::SetTree(HTREEITEM hInsertAfter, bool tagjump, bool nolabel) { + HWND hwndTree = GetItemHwnd( IDC_TREE_FL ); + int i; int nFuncInfoArrNum = m_pcFuncInfoArr->GetNum(); int nStackPointer = 0; @@ -1405,7 +1413,6 @@ void CDlgFuncList::SetTree(HWND hwndTree, HTREEITEM hInsertAfter, bool tagjump, m_cmemClipText.AllocStringBuffer( nBuffLen + nBuffLenTag * nCount ); } - ::SendMessage(hwndTree, WM_SETREDRAW, (WPARAM)FALSE, 0); for (i = 0; i < nFuncInfoArrNum; i++){ CFuncInfo* pcFuncInfo = m_pcFuncInfoArr->GetAt(i); @@ -1486,7 +1493,7 @@ void CDlgFuncList::SetTree(HWND hwndTree, HTREEITEM hInsertAfter, bool tagjump, } end_of_func:; - ::SendMessage(hwndTree, WM_SETREDRAW, (WPARAM)TRUE, 0); + ::EnableWindow( GetItemHwnd( IDC_BUTTON_COPY ), TRUE ); free( phParentStack ); @@ -2338,7 +2345,10 @@ BOOL CDlgFuncList::OnCbnSelEndOk( HWND hwndCtl, int wID ) type->m_nOutlineSortType = m_nSortType; SetTypeConfig( CTypeConfig(m_nDocType), *type ); delete type; - SortTree(GetItemHwnd(IDC_TREE_FL),TVI_ROOT); + HWND hWndTree = GetItemHwnd(IDC_TREE_FL); + ::SendMessageAny(hWndTree, WM_SETREDRAW, (WPARAM)FALSE, 0); + SortTree(hWndTree,TVI_ROOT); + ::SendMessageAny(hWndTree, WM_SETREDRAW, (WPARAM)TRUE, 0); } return TRUE; } @@ -2400,9 +2410,7 @@ void CDlgFuncList::SortTree(HWND hWndTree,HTREEITEM htiParent) size = m_nTreeItemCount; } data.m_vecText.resize(size); - ::SendMessageAny(hWndTree, WM_SETREDRAW, (WPARAM)FALSE, 0); SortTree_Sub(hWndTree, htiParent, data, m_nSortType); - ::SendMessageAny(hWndTree, WM_SETREDRAW, (WPARAM)TRUE, 0); } bool CDlgFuncList::TagJumpTimer( const WCHAR* pFile, CMyPoint point, bool bCheckAutoClose ) diff --git a/sakura_core/outline/CDlgFuncList.h b/sakura_core/outline/CDlgFuncList.h index c4e8a4e6ce..057eda54e9 100644 --- a/sakura_core/outline/CDlgFuncList.h +++ b/sakura_core/outline/CDlgFuncList.h @@ -137,8 +137,8 @@ class CDlgFuncList final : public CDialog || 実装ヘルパ関数 */ BOOL OnJump( bool bCheckAutoClose = true, bool bFileJump = true ); // bCheckAutoClose:「このダイアログを自動的に閉じる」をチェックするかどうか - void SetTreeJava(HWND hwndDlg, HWND hwndTree, HTREEITEM hInsertAfter, BOOL bAddClass); /* ツリーコントロールの初期化:Javaメソッドツリー */ - void SetTree(HWND hwndTree, HTREEITEM hInsertAfter, bool tagjump = false, bool nolabel = false); /* ツリーコントロールの初期化:汎用品 */ + void SetTreeJava(HWND hwndDlg, HTREEITEM hInsertAfter, BOOL bAddClass); /* ツリーコントロールの初期化:Javaメソッドツリー */ + void SetTree(HTREEITEM hInsertAfter, bool tagjump = false, bool nolabel = false); /* ツリーコントロールの初期化:汎用品 */ void SetTreeFile(); // ツリーコントロールの初期化:ファイルツリー void SetListVB( void ); /* リストビューコントロールの初期化:VisualBasic */ // Jul 10, 2003 little YOSHI void SetDocLineFuncList(); From bf7f72c399d2eed6e359a83ed17b87debabde262 Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Sat, 1 May 2021 17:22:51 +0900 Subject: [PATCH 0655/1024] =?UTF-8?q?=E5=8F=A4=E3=81=84=E3=82=B3=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=81=AE=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/outline/CDlgFuncList.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/sakura_core/outline/CDlgFuncList.cpp b/sakura_core/outline/CDlgFuncList.cpp index b2354a24d2..d7a7dfeb3a 100644 --- a/sakura_core/outline/CDlgFuncList.cpp +++ b/sakura_core/outline/CDlgFuncList.cpp @@ -425,7 +425,6 @@ void CDlgFuncList::SetData() m_bDummyLParamMode = false; m_vecDummylParams.clear(); - //2002.02.08 hor 隠しといてアイテム削除→あとで表示 ::SendMessage(hwndList, WM_SETREDRAW, (WPARAM)FALSE, 0); ::SendMessage(hwndTree, WM_SETREDRAW, (WPARAM)FALSE, 0); ListView_DeleteAllItems( hwndList ); From 0996cc480e79185a6bf52827aa388b0a9d765f9d Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sun, 2 May 2021 16:50:31 +0900 Subject: [PATCH 0656/1024] =?UTF-8?q?=E5=8D=98=E4=BD=93=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=81=AB=E9=96=A2=E3=81=99=E3=82=8B=E3=83=89=E3=82=AD?= =?UTF-8?q?=E3=83=A5=E3=83=A1=E3=83=B3=E3=83=88=E3=82=92=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- unittest.md | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/unittest.md b/unittest.md index 78cd4f3da3..ce2bbf5ef2 100644 --- a/unittest.md +++ b/unittest.md @@ -31,13 +31,14 @@ cmake を実行することにより、各プラットフォームに固有の googletest を使用して作成する単体テストも cmake でビルド設定を行います。 -cmake は Visual Studio 2017 用のプロジェクト生成に対応しているため -Visual Studio 2017 用のプロジェクトを生成してビルドすれば +cmake は Visual Studio 用のプロジェクト生成に対応しているため +Visual Studio 用のプロジェクトを生成してビルドすれば GUI でステップ実行することができます。 ## 単体テストのディレクトリ構造 - tests + - compiletests (コンパイルテスト用のファイルを置くディレクトリ) - googletest (googletest 用のフォルダ。git submodule) - unittests (単体テストの実体を置く。中の構成は要検討) - build (ビルド時に生成されるフォルダ。git には登録しない) @@ -50,31 +51,36 @@ GUI でステップ実行することができます。 | バッチファイル | 説明 | ----|---- -|[tests\create-project.bat](tests/create-project.bat)| 単体テスト用のプロジェクトファイル作成するバッチファイル | -|[tests\build-project.bat](tests/build-project.bat) | 単体テスト用のプロジェクトをビルドするバッチファイル | -|[tests\run-tests.bat](tests/run-tests.bat) | 単体テストを実行するバッチファイル | -|[tests\build-and-test.bat](tests/build-and-test.bat)| appveyor.yml から呼ばれて上記を呼び出すバッチファイル | +|[tests\build-and-test.bat](tests/build-and-test.bat) | ビルドと単体テストを順に行う | +|[tests\create-project.bat](tests/create-project.bat) | 単体テスト用のプロジェクトファイルを作成する | +|[tests\build-project.bat](tests/build-project.bat) | 単体テスト用のプロジェクトをビルドする | +|[tests\run-tests.bat](tests/run-tests.bat) | 単体テストを実行する | ### 呼び出し構造 - [tests\build-and-test.bat](tests/build-and-test.bat) - [tests\create-project.bat](tests/create-project.bat) - - cmake + - build-gnu.bat : Makefile をビルドする (platform が MinGW の場合) + - build-sln.bat : ソリューションをビルドする (platform が Win32 または x64 の場合) + - git.exe + - cmake.exe - [tests\build-project.bat](tests/build-project.bat) - - cmake --build + - git.exe + - cmake.exe - [tests\run-tests.bat](tests/run-tests.bat) - - tests*.exe を実行 + - tests\tests*.exe : 単体テストを実行する + - tests\test_result_filter_tell_AppVeyor.bat : AppVeyor のテストタブにテスト結果を出力する ### 使用するバッチファイルの引数 | バッチファイル | 第一引数 | 第二引数 | ----|----|---- +|[tests\build-and-test.bat](tests/build-and-test.bat)| platform ("Win32" または "x64" または "MinGW") | configuration ("Debug" または "Release") | |[tests\create-project.bat](tests/create-project.bat)| platform ("Win32" または "x64") | configuration ("Debug" または "Release") | |[tests\build-project.bat](tests/build-project.bat) | platform ("Win32" または "x64") | configuration ("Debug" または "Release") | |[tests\run-tests.bat](tests/run-tests.bat) | platform ("Win32" または "x64") | configuration ("Debug" または "Release") | -|[tests\build-and-test.bat](tests/build-and-test.bat)| platform ("Win32" または "x64" または "MinGW") | configuration ("Debug" または "Release") | ## インクルードディレクトリ -[単体テスト用のCMakeLists.txt](tests/unittests/CMakeLists.txt) で [サクラエディタ用のディレクトリ](sakura_core) に +単体テスト用の [CMakeLists.txt](tests/unittests/CMakeLists.txt) で [サクラエディタ用のディレクトリ](sakura_core) に インクルードディレクトリを指定するので、そこからの相対パスを指定すれば、サクラエディタのヘッダをインクルードできます。 From f1518603d530ac1445bd668a796a2a4f105d251b Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sun, 2 May 2021 16:51:02 +0900 Subject: [PATCH 0657/1024] =?UTF-8?q?=E5=8D=98=E4=BD=93=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=81=AB=E9=96=A2=E3=81=99=E3=82=8B=E3=83=89=E3=82=AD?= =?UTF-8?q?=E3=83=A5=E3=83=A1=E3=83=B3=E3=83=88=E3=82=92=E3=83=AB=E3=83=BC?= =?UTF-8?q?=E3=83=88=E3=83=87=E3=82=A3=E3=83=AC=E3=82=AF=E3=83=88=E3=83=AA?= =?UTF-8?q?=E3=81=8B=E3=82=89=E7=A7=BB=E5=8B=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- unittest.md => tests/unittest.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename unittest.md => tests/unittest.md (100%) diff --git a/unittest.md b/tests/unittest.md similarity index 100% rename from unittest.md rename to tests/unittest.md From c463792775aba07b42db031e09eb1855b2f9e904 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sun, 2 May 2021 18:25:30 +0900 Subject: [PATCH 0658/1024] =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB?= =?UTF-8?q?=E7=A7=BB=E5=8B=95=E3=81=AB=E4=BC=B4=E3=81=86=E3=83=AA=E3=83=B3?= =?UTF-8?q?=E3=82=AF=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- azure-pipelines.yml | 4 ++-- tests/unittest.md | 32 ++++++++++++++++---------------- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index ca89aaf39e..4d08754254 100644 --- a/README.md +++ b/README.md @@ -172,7 +172,7 @@ https://ci.appveyor.com/project/sakuraeditor/sakura/history ### 単体テスト -[単体テスト](unittest.md) を参照 +[こちら](tests/unittest.md) を参照してください。 ### デバッグ方法 diff --git a/azure-pipelines.yml b/azure-pipelines.yml index d98da94b41..fdce3c6ab8 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -36,7 +36,7 @@ trigger: - tools/find-tools.md - tools/macro/macro.md - tools/zip/readme.md - - unittest.md + - tests/unittest.md - vcx-props/project-PlatformToolset.md ############################################################################################################################### @@ -77,7 +77,7 @@ pr: - tools/find-tools.md - tools/macro/macro.md - tools/zip/readme.md - - unittest.md + - tests/unittest.md - vcx-props/project-PlatformToolset.md ############################################################################################################################### diff --git a/tests/unittest.md b/tests/unittest.md index ce2bbf5ef2..5d7c09e95f 100644 --- a/tests/unittest.md +++ b/tests/unittest.md @@ -51,36 +51,36 @@ GUI でステップ実行することができます。 | バッチファイル | 説明 | ----|---- -|[tests\build-and-test.bat](tests/build-and-test.bat) | ビルドと単体テストを順に行う | -|[tests\create-project.bat](tests/create-project.bat) | 単体テスト用のプロジェクトファイルを作成する | -|[tests\build-project.bat](tests/build-project.bat) | 単体テスト用のプロジェクトをビルドする | -|[tests\run-tests.bat](tests/run-tests.bat) | 単体テストを実行する | +|[tests\build-and-test.bat](build-and-test.bat) | ビルドと単体テストを順に行う | +|[tests\create-project.bat](create-project.bat) | 単体テスト用のプロジェクトファイルを作成する | +|[tests\build-project.bat](build-project.bat) | 単体テスト用のプロジェクトをビルドする | +|[tests\run-tests.bat](run-tests.bat) | 単体テストを実行する | ### 呼び出し構造 -- [tests\build-and-test.bat](tests/build-and-test.bat) - - [tests\create-project.bat](tests/create-project.bat) - - build-gnu.bat : Makefile をビルドする (platform が MinGW の場合) - - build-sln.bat : ソリューションをビルドする (platform が Win32 または x64 の場合) +- [tests\build-and-test.bat](build-and-test.bat) + - [tests\create-project.bat](create-project.bat) + - [build-gnu.bat](../build-gnu.bat) : Makefile をビルドする (platform が MinGW の場合) + - [build-sln.bat](../build-sln.bat) : ソリューションをビルドする (platform が Win32 または x64 の場合) - git.exe - cmake.exe - - [tests\build-project.bat](tests/build-project.bat) + - [tests\build-project.bat](build-project.bat) - git.exe - cmake.exe - - [tests\run-tests.bat](tests/run-tests.bat) + - [tests\run-tests.bat](run-tests.bat) - tests\tests*.exe : 単体テストを実行する - - tests\test_result_filter_tell_AppVeyor.bat : AppVeyor のテストタブにテスト結果を出力する + - [tests\test_result_filter_tell_AppVeyor.bat](test_result_filter_tell_AppVeyor.bat) : AppVeyor のテストタブにテスト結果を出力する ### 使用するバッチファイルの引数 | バッチファイル | 第一引数 | 第二引数 | ----|----|---- -|[tests\build-and-test.bat](tests/build-and-test.bat)| platform ("Win32" または "x64" または "MinGW") | configuration ("Debug" または "Release") | -|[tests\create-project.bat](tests/create-project.bat)| platform ("Win32" または "x64") | configuration ("Debug" または "Release") | -|[tests\build-project.bat](tests/build-project.bat) | platform ("Win32" または "x64") | configuration ("Debug" または "Release") | -|[tests\run-tests.bat](tests/run-tests.bat) | platform ("Win32" または "x64") | configuration ("Debug" または "Release") | +|[tests\build-and-test.bat](build-and-test.bat) | platform ("Win32" または "x64" または "MinGW") | configuration ("Debug" または "Release") | +|[tests\create-project.bat](create-project.bat) | platform ("Win32" または "x64") | configuration ("Debug" または "Release") | +|[tests\build-project.bat](build-project.bat) | platform ("Win32" または "x64") | configuration ("Debug" または "Release") | +|[tests\run-tests.bat](run-tests.bat) | platform ("Win32" または "x64") | configuration ("Debug" または "Release") | ## インクルードディレクトリ -単体テスト用の [CMakeLists.txt](tests/unittests/CMakeLists.txt) で [サクラエディタ用のディレクトリ](sakura_core) に +単体テスト用の [CMakeLists.txt](unittests/CMakeLists.txt) で [サクラエディタ用のディレクトリ](../sakura_core) に インクルードディレクトリを指定するので、そこからの相対パスを指定すれば、サクラエディタのヘッダをインクルードできます。 From e5f9c0dc7cdb3664f17741235948c075eeaa4065 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sun, 2 May 2021 18:30:52 +0900 Subject: [PATCH 0659/1024] =?UTF-8?q?=E8=A1=A8=E7=8F=BE=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittest.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/unittest.md b/tests/unittest.md index 5d7c09e95f..39bbd05a09 100644 --- a/tests/unittest.md +++ b/tests/unittest.md @@ -82,5 +82,5 @@ GUI でステップ実行することができます。 ## インクルードディレクトリ -単体テスト用の [CMakeLists.txt](unittests/CMakeLists.txt) で [サクラエディタ用のディレクトリ](../sakura_core) に -インクルードディレクトリを指定するので、そこからの相対パスを指定すれば、サクラエディタのヘッダをインクルードできます。 +単体テスト用の [CMakeLists.txt](unittests/CMakeLists.txt) で [サクラエディタ用のディレクトリ](../sakura_core) を +インクルードディレクトリに指定しているので、そこからの相対パスを指定すれば、サクラエディタのヘッダをインクルードできます。 From cdf0373628f30bd64597a39f86bb76d226f77f89 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sun, 2 May 2021 23:27:51 +0900 Subject: [PATCH 0660/1024] =?UTF-8?q?CDocLine::SetEol=20=E3=81=AE=E5=85=B1?= =?UTF-8?q?=E6=9C=89=E3=83=87=E3=83=BC=E3=82=BF=E4=BE=9D=E5=AD=98=E3=82=92?= =?UTF-8?q?=E9=99=A4=E5=8E=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CSearchAgent.cpp | 22 +++++++++++----------- sakura_core/doc/CDocEditor.cpp | 2 +- sakura_core/doc/logic/CDocLine.cpp | 17 ++++++++--------- sakura_core/doc/logic/CDocLine.h | 8 ++++---- sakura_core/macro/CMacro.cpp | 2 +- 5 files changed, 25 insertions(+), 26 deletions(-) diff --git a/sakura_core/CSearchAgent.cpp b/sakura_core/CSearchAgent.cpp index 92b5017f0c..0b32a66123 100644 --- a/sakura_core/CSearchAgent.cpp +++ b/sakura_core/CSearchAgent.cpp @@ -942,14 +942,14 @@ void CSearchAgent::ReplaceData( DocLineReplaceArg* pArg ) ref._SetStringLength(nWorkPos); ref.AppendString(pInsData, nInsLen); ref.AppendNativeData(pCDocLineNext->_GetDocLineDataWithEOL()); - pCDocLine->SetEol(); + pCDocLine->SetEol(GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol); }else{ CNativeW tmp; tmp.AllocStringBuffer(nNewLen); tmp.AppendString(pLine, nWorkPos); tmp.AppendString(pInsData, nInsLen); tmp.AppendNativeData(pCDocLineNext->_GetDocLineDataWithEOL()); - pCDocLine->SetDocLineStringMove(&tmp); + pCDocLine->SetDocLineStringMove(&tmp, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol); } if( bChangeOneLine ){ pArg->nInsSeq = CModifyVisitor().GetLineModifiedSeq(pCDocLine); @@ -975,7 +975,7 @@ void CSearchAgent::ReplaceData( DocLineReplaceArg* pArg ) /* 行内データ削除 */ CNativeW tmp; tmp.SetString(pLine, nWorkPos); - pCDocLine->SetDocLineStringMove(&tmp); + pCDocLine->SetDocLineStringMove(&tmp, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol); CModifyVisitor().SetLineModified(pCDocLine, pArg->nDelSeq); /* 変更フラグ */ } } @@ -1012,7 +1012,7 @@ void CSearchAgent::ReplaceData( DocLineReplaceArg* pArg ) tmp.AppendString(pLine, nWorkPos); tmp.AppendString(pInsData, nInsLen); tmp.AppendString(&pLine[nWorkPos + nWorkLen], nAfterLen); - pCDocLine->SetDocLineStringMove(&tmp); + pCDocLine->SetDocLineStringMove(&tmp, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol); } } if( bChangeOneLine ){ @@ -1133,10 +1133,10 @@ prev_line:; tmp.AllocStringBuffer(cPrevLine.GetLength() + cmemLine.GetStringLength()); tmp.AppendString(cPrevLine.GetPtr(), cPrevLine.GetLength()); tmp.AppendNativeData(cmemLine); - pCDocLineNew->SetDocLineStringMove(&tmp); + pCDocLineNew->SetDocLineStringMove(&tmp, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol); } else{ - pCDocLineNew->SetDocLineStringMove(&cmemLine); + pCDocLineNew->SetDocLineStringMove(&cmemLine, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol); } CModifyVisitor().SetLineModified(pCDocLineNew, (*pArg->pInsData)[nCount].nSeq); } @@ -1152,21 +1152,21 @@ prev_line:; cmemCurLine.swap(tmp); tmp._SetStringLength(cPrevLine.GetLength()); tmp.AppendNativeData(cmemLine); - pCDocLine->SetDocLineStringMove(&tmp); + pCDocLine->SetDocLineStringMove(&tmp, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol); cNextLine = CStringRef(cmemCurLine.GetStringPtr(), cmemCurLine.GetStringLength()); }else{ CNativeW tmp; tmp.AllocStringBuffer(cPrevLine.GetLength() + cmemLine.GetStringLength()); tmp.AppendString(cPrevLine.GetPtr(), cPrevLine.GetLength()); tmp.AppendNativeData(cmemLine); - pCDocLine->SetDocLineStringMove(&tmp); + pCDocLine->SetDocLineStringMove(&tmp, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol); } CModifyVisitor().SetLineModified(pCDocLine, (*pArg->pInsData)[nCount].nSeq); pCDocLine = pCDocLine->GetNextLine(); } else{ CDocLine* pCDocLineNew = m_pcDocLineMgr->InsertNewLine(pCDocLine); //pCDocLineの前に挿入 - pCDocLineNew->SetDocLineStringMove(&cmemLine); + pCDocLineNew->SetDocLineStringMove(&cmemLine, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol); CModifyVisitor().SetLineModified(pCDocLineNew, (*pArg->pInsData)[nCount].nSeq); } } @@ -1199,7 +1199,7 @@ prev_line:; tmp.AppendString(cNextLine.GetPtr(), cNextLine.GetLength()); if( NULL == pCDocLine ){ CDocLine* pCDocLineNew = m_pcDocLineMgr->AddNewLine(); //末尾に追加 - pCDocLineNew->SetDocLineStringMove(&tmp); + pCDocLineNew->SetDocLineStringMove(&tmp, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol); pCDocLineNew->m_sMark = markNext; if( !bLastEOLReplace || !bSetMark ){ CModifyVisitor().SetLineModified(pCDocLineNew, nSeq); @@ -1213,7 +1213,7 @@ prev_line:; pCDocLine = m_pcDocLineMgr->InsertNewLine(pCDocLine); //pCDocLineの前に挿入 pCDocLine->m_sMark = markNext; } - pCDocLine->SetDocLineStringMove(&tmp); + pCDocLine->SetDocLineStringMove(&tmp, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol); if( !bLastEOLReplace || !bSetMark ){ CModifyVisitor().SetLineModified(pCDocLine, nSeq); } diff --git a/sakura_core/doc/CDocEditor.cpp b/sakura_core/doc/CDocEditor.cpp index a841149335..2195a17cd6 100644 --- a/sakura_core/doc/CDocEditor.cpp +++ b/sakura_core/doc/CDocEditor.cpp @@ -182,5 +182,5 @@ void CDocEditAgent::AddLineStrX( const wchar_t* pData, int nDataLen ) CDocLine* pDocLine = m_pcDocLineMgr->AddNewLine(); //インスタンス設定 - pDocLine->SetDocLineString(pData, nDataLen); + pDocLine->SetDocLineString(pData, nDataLen, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol); } diff --git a/sakura_core/doc/logic/CDocLine.cpp b/sakura_core/doc/logic/CDocLine.cpp index 135e95998f..1f05973355 100644 --- a/sakura_core/doc/logic/CDocLine.cpp +++ b/sakura_core/doc/logic/CDocLine.cpp @@ -16,7 +16,6 @@ #include "StdAfx.h" #include "CDocLine.h" #include "mem/CMemory.h" -#include "env/DLLSHAREDATA.h" CDocLine::CDocLine() : m_pPrev( NULL ), m_pNext( NULL ) @@ -46,13 +45,13 @@ bool CDocLine::IsEmptyLine() const return true; // すべてスペースかタブだけだったらtrue。 } -void CDocLine::SetEol() +void CDocLine::SetEol(bool bEnableExtEol) { const wchar_t* pData = m_cLine.GetStringPtr(); int nLength = m_cLine.GetStringLength(); //改行コード設定 const wchar_t* p = &pData[nLength] - 1; - while(p>=pData && WCODE::IsLineDelimiter(*p, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol))p--; + while(p>=pData && WCODE::IsLineDelimiter(*p, bEnableExtEol))p--; p++; if(p>=pData){ m_cEol.SetTypeByString(p, &pData[nLength]-p); @@ -62,21 +61,21 @@ void CDocLine::SetEol() } } -void CDocLine::SetDocLineString(const wchar_t* pData, int nLength) +void CDocLine::SetDocLineString(const wchar_t* pData, int nLength, bool bEnableExtEol) { m_cLine.SetString(pData, nLength); - SetEol(); + SetEol(bEnableExtEol); } -void CDocLine::SetDocLineString(const CNativeW& cData) +void CDocLine::SetDocLineString(const CNativeW& cData, bool bEnableExtEol) { - SetDocLineString(cData.GetStringPtr(), cData.GetStringLength()); + SetDocLineString(cData.GetStringPtr(), cData.GetStringLength(), bEnableExtEol); } -void CDocLine::SetDocLineStringMove(CNativeW* pcDataFrom) +void CDocLine::SetDocLineStringMove(CNativeW* pcDataFrom, bool bEnableExtEol) { m_cLine.swap(*pcDataFrom); - SetEol(); + SetEol(bEnableExtEol); } void CDocLine::SetEol(const CEol& cEol, COpeBlk* pcOpeBlk) diff --git a/sakura_core/doc/logic/CDocLine.h b/sakura_core/doc/logic/CDocLine.h index ae2890b7ee..88003aa49a 100644 --- a/sakura_core/doc/logic/CDocLine.h +++ b/sakura_core/doc/logic/CDocLine.h @@ -98,15 +98,15 @@ class CDocLine{ } const CEol& GetEol() const{ return m_cEol; } void SetEol(const CEol& cEol, COpeBlk* pcOpeBlk); - void SetEol(); // 現在のバッファから設定 + void SetEol(bool bEnableExtEol); // 現在のバッファから設定 const CNativeW& _GetDocLineDataWithEOL() const { return m_cLine; } //###仮 CNativeW& _GetDocLineData() { return m_cLine; } //データ設定 - void SetDocLineString(const wchar_t* pData, int nLength); - void SetDocLineString(const CNativeW& cData); - void SetDocLineStringMove(CNativeW* pcData); + void SetDocLineString(const wchar_t* pData, int nLength, bool bEnableExtEol); + void SetDocLineString(const CNativeW& cData, bool bEnableExtEol); + void SetDocLineStringMove(CNativeW* pcData, bool bEnableExtEol); //チェーン属性 CDocLine* GetPrevLine(){ return m_pPrev; } diff --git a/sakura_core/macro/CMacro.cpp b/sakura_core/macro/CMacro.cpp index c0ac8fe5a1..d3baf4ecae 100644 --- a/sakura_core/macro/CMacro.cpp +++ b/sakura_core/macro/CMacro.cpp @@ -2192,7 +2192,7 @@ bool CMacro::HandleFunction(CEditView *View, EFunctionCode ID, const VARIANT *Ar varCopy2.Data.lVal = 1; } CDocLine tmpDocLine; - tmpDocLine.SetDocLineString(varCopy.Data.bstrVal, ::SysStringLen(varCopy.Data.bstrVal)); + tmpDocLine.SetDocLineString(varCopy.Data.bstrVal, ::SysStringLen(varCopy.Data.bstrVal), GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol); const int tmpLenWithEol1 = tmpDocLine.GetLengthWithoutEOL() + (0 < tmpDocLine.GetEol().GetLen() ? 1: 0); const CLayoutXInt offset(varCopy2.Data.lVal - 1); const CLayout tmpLayout( From 611cd711c55b8ea03b7271beb8d0a51edceccdc7 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Mon, 3 May 2021 00:33:44 +0900 Subject: [PATCH 0661/1024] =?UTF-8?q?=E5=9B=BA=E6=9C=89=E5=90=8D=E8=A9=9E?= =?UTF-8?q?=E3=81=A7=E3=81=AF=E6=96=87=E5=AD=97=E3=81=AE=E5=A4=A7=E5=B0=8F?= =?UTF-8?q?=E3=82=92=E5=8C=BA=E5=88=A5=E3=81=97=E3=81=A6=E8=A8=98=E8=BF=B0?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittest.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/tests/unittest.md b/tests/unittest.md index 39bbd05a09..661b0a9716 100644 --- a/tests/unittest.md +++ b/tests/unittest.md @@ -3,8 +3,8 @@ - [単体テスト](#単体テスト) - - [googletest](#googletest) - - [cmake](#cmake) + - [GoogleTest](#googletest) + - [CMake](#cmake) - [単体テストのディレクトリ構造](#単体テストのディレクトリ構造) - [単体テスト関連のバッチファイル](#単体テスト関連のバッチファイル) - [一覧](#一覧) @@ -14,24 +14,24 @@ -## googletest +## GoogleTest 単体テストフレームワークとしてオープンソースでいくつか公開されていますが、 -google が開発している [googletest](https://github.com/google/googletest) を使用します。 +Google が開発している [GoogleTest](https://github.com/google/googletest) を使用します。 -[googletest](https://github.com/google/googletest) は github でソースコードが公開されているので +[GoogleTest](https://github.com/google/googletest) は GitHub でソースコードが公開されているので git submodule の機能を使用してソースコードを参照してテストと同時にビルドします。 -## cmake +## CMake -googletest はビルドシステムに [cmake](https://cmake.org/) を使用します。 -cmake は CMakeLists.txt というテキストファイルにビルド設定を記載して -cmake を実行することにより、各プラットフォームに固有のネイティブの +GoogleTest はビルドシステムに [CMake](https://cmake.org/) を使用します。 +CMake は CMakeLists.txt というテキストファイルにビルド設定を記載して +CMake を実行することにより、各プラットフォームに固有のネイティブの ビルドシステム用のファイルを生成してビルドします。 -googletest を使用して作成する単体テストも cmake でビルド設定を行います。 +GoogleTest を使用して作成する単体テストも CMake でビルド設定を行います。 -cmake は Visual Studio 用のプロジェクト生成に対応しているため +CMake は Visual Studio 用のプロジェクト生成に対応しているため Visual Studio 用のプロジェクトを生成してビルドすれば GUI でステップ実行することができます。 From 0d790685706855f79f4d7897c74e69e70f79334f Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sun, 2 May 2021 23:11:35 +0900 Subject: [PATCH 0662/1024] =?UTF-8?q?CDocLine=20=E3=81=AE=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-cdocline.cpp | 237 +++++++++++++++++++++++++ tests/unittests/tests1.vcxproj | 1 + tests/unittests/tests1.vcxproj.filters | 3 + 3 files changed, 241 insertions(+) create mode 100644 tests/unittests/test-cdocline.cpp diff --git a/tests/unittests/test-cdocline.cpp b/tests/unittests/test-cdocline.cpp new file mode 100644 index 0000000000..50d3998ff6 --- /dev/null +++ b/tests/unittests/test-cdocline.cpp @@ -0,0 +1,237 @@ +/* + Copyright (C) 2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ + +#include +#include "doc/logic/CDocLine.h" + +#include + +TEST(CDocLine, IsEmptyLine) +{ + { + CDocLine line; + EXPECT_TRUE(line.IsEmptyLine()); + } + { + CDocLine line; + line.SetDocLineString(L"空行ではない\n", 6, false); + EXPECT_FALSE(line.IsEmptyLine()); + } + { + CDocLine line; + line.SetDocLineString(L" \t\r\n", 4, false); + EXPECT_TRUE(line.IsEmptyLine()); + } +} + +TEST(CDocLine, GetLengthWithoutEOL) +{ + { + CDocLine line; + EXPECT_EQ(line.GetLengthWithoutEOL(), CLogicInt(0)); + } + { + CDocLine line; + line.SetDocLineString(L"改行がありません", 8, false); + EXPECT_EQ(line.GetLengthWithoutEOL(), CLogicInt(8)); + } + { + CDocLine line; + line.SetDocLineString(L"LFがあります\n", 8, false); + EXPECT_EQ(line.GetLengthWithoutEOL(), CLogicInt(7)); + } + { + CDocLine line; + line.SetDocLineString(L"CRLFがあります\r\n", 11, false); + EXPECT_EQ(line.GetLengthWithoutEOL(), CLogicInt(9)); + } +} + +TEST(CDocLine, GetPtr) +{ + { + CDocLine line; + EXPECT_EQ(nullptr, line.GetPtr()); + } + { + std::wstring_view s = L"てきとうなもじれつ"; + CDocLine line; + line.SetDocLineString(s.data(), s.length(), false); + EXPECT_STREQ(line.GetPtr(), s.data()); + } +} + +TEST(CDocLine, GetLengthWithEOL) +{ + { + CDocLine line; + EXPECT_EQ(line.GetLengthWithEOL(), CLogicInt(0)); + } + { + CDocLine line; + line.SetDocLineString(L"改行がありません", 8, false); + EXPECT_EQ(line.GetLengthWithEOL(), CLogicInt(8)); + } + { + CDocLine line; + line.SetDocLineString(L"LFがあります\n", 8, false); + EXPECT_EQ(line.GetLengthWithEOL(), CLogicInt(8)); + } + { + CDocLine line; + line.SetDocLineString(L"CRLFがあります\r\n", 11, false); + EXPECT_EQ(line.GetLengthWithEOL(), CLogicInt(11)); + } +} + +TEST(CDocLine, GetDocLineStrWithEOL) +{ + { + CDocLine line; + line.SetDocLineString(L"もじれつ", 4, false); + CLogicInt n(123); + EXPECT_EQ(line.GetDocLineStrWithEOL(&n), line.GetPtr()); + EXPECT_EQ(n, line.GetLengthWithEOL()); + + n = 123; + EXPECT_EQ(CDocLine::GetDocLineStrWithEOL_Safe(&line, &n), line.GetPtr()); + EXPECT_EQ(n, line.GetLengthWithEOL()); + +#ifdef USE_STRICT_INT + int n2 = 123; + EXPECT_EQ(line.GetDocLineStrWithEOL(&n), line.GetPtr()); + EXPECT_EQ(n, line.GetLengthWithEOL()); +#endif + } + { + CLogicInt n(123); + CDocLine* p = reinterpret_cast(0); + EXPECT_EQ(p->GetDocLineStrWithEOL(&n), nullptr); + EXPECT_EQ(n, CLogicInt(0)); + + n = 123; + EXPECT_EQ(CDocLine::GetDocLineStrWithEOL_Safe(nullptr, &n), nullptr); + EXPECT_EQ(n, CLogicInt(0)); + +#ifdef USE_STRICT_INT + int n2 = 123; + EXPECT_EQ(p->GetDocLineStrWithEOL(&n), nullptr); + EXPECT_EQ(n, 0); +#endif + } +} + +TEST(CDocLine, GetStringRefWithEOL) +{ + { + CDocLine line; + line.SetDocLineString(L"もじれつ", 4, false); + CStringRef ref = line.GetStringRefWithEOL(); + EXPECT_EQ(ref.GetPtr(), line.GetPtr()); + EXPECT_EQ(ref.GetLength(), line.GetLengthWithEOL()); + + ref = CDocLine::GetStringRefWithEOL_Safe(&line); + EXPECT_EQ(ref.GetPtr(), line.GetPtr()); + EXPECT_EQ(ref.GetLength(), line.GetLengthWithEOL()); + } + { + CLogicInt n(123); + CDocLine* p = reinterpret_cast(0); + CStringRef ref = p->GetStringRefWithEOL(); + EXPECT_EQ(ref.GetPtr(), nullptr); + EXPECT_EQ(ref.GetLength(), 0); + + ref = CDocLine::GetStringRefWithEOL_Safe(nullptr); + EXPECT_EQ(ref.GetPtr(), nullptr); + EXPECT_EQ(ref.GetLength(), 0); + } +} + + +TEST(CDocLine, GetEol) +{ + { + CDocLine line; + CEol eol; + EXPECT_EQ(line.GetEol(), eol); + } + { + CDocLine line; + line.SetDocLineString(L"\n", 1, false); + CEol eol(EEolType::line_feed); + EXPECT_EQ(line.GetEol(), eol); + } +} + +TEST(CDocLine, SetEol) +{ + // 改行コードを再設定するテスト + CDocLine line; + line.SetDocLineString(L"てすと", 3, false); + EXPECT_STREQ(line.GetPtr(), L"てすと"); + + line.SetEol(CEol(EEolType::cr_and_lf), nullptr); + EXPECT_STREQ(line.GetPtr(), L"てすと\r\n"); + + line.SetEol(CEol(EEolType::line_feed), nullptr); + EXPECT_STREQ(line.GetPtr(), L"てすと\n"); + + line.SetEol(CEol(EEolType::none), nullptr); + EXPECT_STREQ(line.GetPtr(), L"てすと"); +} + +TEST(CDocLine, GetDocLineData) +{ + const CNativeW data(L"データ\n"); + CDocLine line; + line.SetDocLineString(data, false); + EXPECT_EQ(line._GetDocLineDataWithEOL(), data); + EXPECT_EQ(line._GetDocLineData(), data); +} + +TEST(CDocLine, SetDocLineStringMove) +{ + CNativeW data(L"データ\r\n"); + const wchar_t* originalPtr = data.GetStringPtr(); + + CDocLine line; + line.SetDocLineStringMove(&data, false); + EXPECT_EQ(line.GetPtr(), originalPtr); + EXPECT_EQ(line.GetEol(), CEol(EEolType::cr_and_lf)); + EXPECT_EQ(data.GetStringPtr(), nullptr); +} + +TEST(CDocLine, GetPrevAndNextLine) +{ + CDocLine line; + EXPECT_EQ(line.GetPrevLine(), nullptr); + EXPECT_EQ(line.GetNextLine(), nullptr); + + CDocLine prev; + CDocLine next; + line._SetPrevLine(&prev); + EXPECT_EQ(line.GetPrevLine(), &prev); + line._SetNextLine(&next); + EXPECT_EQ(line.GetNextLine(), &next); +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index 2f1906a98d..0e3188f92e 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -106,6 +106,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index bf6a6e6f83..36cc9a030e 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -139,6 +139,9 @@ Other Files + + Test Files + From eb650aed8876aa62298e4c2690ca2fe75d10b7b8 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Mon, 3 May 2021 12:24:26 +0900 Subject: [PATCH 0663/1024] =?UTF-8?q?MinGW=20=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-cdocline.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/tests/unittests/test-cdocline.cpp b/tests/unittests/test-cdocline.cpp index 50d3998ff6..2093309f83 100644 --- a/tests/unittests/test-cdocline.cpp +++ b/tests/unittests/test-cdocline.cpp @@ -118,23 +118,23 @@ TEST(CDocLine, GetDocLineStrWithEOL) EXPECT_EQ(CDocLine::GetDocLineStrWithEOL_Safe(&line, &n), line.GetPtr()); EXPECT_EQ(n, line.GetLengthWithEOL()); -#ifdef USE_STRICT_INT + // USE_STRICT_INT 定義時は別の関数が呼ばれる int n2 = 123; EXPECT_EQ(line.GetDocLineStrWithEOL(&n), line.GetPtr()); EXPECT_EQ(n, line.GetLengthWithEOL()); -#endif } { CLogicInt n(123); - CDocLine* p = reinterpret_cast(0); - EXPECT_EQ(p->GetDocLineStrWithEOL(&n), nullptr); + EXPECT_EQ(CDocLine::GetDocLineStrWithEOL_Safe(nullptr, &n), nullptr); EXPECT_EQ(n, CLogicInt(0)); +#ifdef _MSC_VER n = 123; - EXPECT_EQ(CDocLine::GetDocLineStrWithEOL_Safe(nullptr, &n), nullptr); + CDocLine* p = reinterpret_cast(0); + EXPECT_EQ(p->GetDocLineStrWithEOL(&n), nullptr); EXPECT_EQ(n, CLogicInt(0)); -#ifdef USE_STRICT_INT + // USE_STRICT_INT 定義時は別の関数が呼ばれる int n2 = 123; EXPECT_EQ(p->GetDocLineStrWithEOL(&n), nullptr); EXPECT_EQ(n, 0); @@ -157,14 +157,16 @@ TEST(CDocLine, GetStringRefWithEOL) } { CLogicInt n(123); - CDocLine* p = reinterpret_cast(0); - CStringRef ref = p->GetStringRefWithEOL(); + CStringRef ref = CDocLine::GetStringRefWithEOL_Safe(nullptr); EXPECT_EQ(ref.GetPtr(), nullptr); EXPECT_EQ(ref.GetLength(), 0); - ref = CDocLine::GetStringRefWithEOL_Safe(nullptr); +#ifdef _MSC_VER + CDocLine* p = reinterpret_cast(0); + ref = p->GetStringRefWithEOL(); EXPECT_EQ(ref.GetPtr(), nullptr); EXPECT_EQ(ref.GetLength(), 0); +#endif } } From f3e39533fd746c514fd133a2ff0674010a5d3766 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Mon, 3 May 2021 12:31:49 +0900 Subject: [PATCH 0664/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E3=81=AB=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CSearchAgent.cpp | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/sakura_core/CSearchAgent.cpp b/sakura_core/CSearchAgent.cpp index 0b32a66123..0a54ce1d09 100644 --- a/sakura_core/CSearchAgent.cpp +++ b/sakura_core/CSearchAgent.cpp @@ -814,6 +814,8 @@ void CSearchAgent::ReplaceData( DocLineReplaceArg* pArg ) pArg->pcmemDeleted->reserve( pArg->sDelRange.GetTo().y + CLogicInt(1) - pArg->sDelRange.GetFrom().y ); } + const bool bEnableExtEol = GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol; + // 2012.01.10 行内の削除&挿入のときの操作を1つにする bool bChangeOneLine = false; // 行内の挿入 bool bInsOneLine = false; @@ -822,7 +824,7 @@ void CSearchAgent::ReplaceData( DocLineReplaceArg* pArg ) const CNativeW& cmemLine = pArg->pInsData->back().cmemLine; int nLen = cmemLine.GetStringLength(); const wchar_t* pInsLine = cmemLine.GetStringPtr(); - if( 0 < nLen && WCODE::IsLineDelimiter(pInsLine[nLen - 1], GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol) ){ + if( 0 < nLen && WCODE::IsLineDelimiter(pInsLine[nLen - 1], bEnableExtEol) ){ // 行挿入 bLastEOLReplace = true; // 仮。後で修正 }else{ @@ -942,14 +944,14 @@ void CSearchAgent::ReplaceData( DocLineReplaceArg* pArg ) ref._SetStringLength(nWorkPos); ref.AppendString(pInsData, nInsLen); ref.AppendNativeData(pCDocLineNext->_GetDocLineDataWithEOL()); - pCDocLine->SetEol(GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol); + pCDocLine->SetEol(bEnableExtEol); }else{ CNativeW tmp; tmp.AllocStringBuffer(nNewLen); tmp.AppendString(pLine, nWorkPos); tmp.AppendString(pInsData, nInsLen); tmp.AppendNativeData(pCDocLineNext->_GetDocLineDataWithEOL()); - pCDocLine->SetDocLineStringMove(&tmp, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol); + pCDocLine->SetDocLineStringMove(&tmp, bEnableExtEol); } if( bChangeOneLine ){ pArg->nInsSeq = CModifyVisitor().GetLineModifiedSeq(pCDocLine); @@ -975,7 +977,7 @@ void CSearchAgent::ReplaceData( DocLineReplaceArg* pArg ) /* 行内データ削除 */ CNativeW tmp; tmp.SetString(pLine, nWorkPos); - pCDocLine->SetDocLineStringMove(&tmp, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol); + pCDocLine->SetDocLineStringMove(&tmp, bEnableExtEol); CModifyVisitor().SetLineModified(pCDocLine, pArg->nDelSeq); /* 変更フラグ */ } } @@ -1012,7 +1014,7 @@ void CSearchAgent::ReplaceData( DocLineReplaceArg* pArg ) tmp.AppendString(pLine, nWorkPos); tmp.AppendString(pInsData, nInsLen); tmp.AppendString(&pLine[nWorkPos + nWorkLen], nAfterLen); - pCDocLine->SetDocLineStringMove(&tmp, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol); + pCDocLine->SetDocLineStringMove(&tmp, bEnableExtEol); } } if( bChangeOneLine ){ @@ -1079,7 +1081,7 @@ prev_line:; CNativeW& cmemLine = pArg->pInsData->back().cmemLine; int nLen = cmemLine.GetStringLength(); const wchar_t* pInsLine = cmemLine.GetStringPtr(); - if( 0 < nLen && WCODE::IsLineDelimiter(pInsLine[nLen - 1], GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol) ){ + if( 0 < nLen && WCODE::IsLineDelimiter(pInsLine[nLen - 1], bEnableExtEol) ){ if( 0 == pArg->sDelRange.GetFrom().x ){ // 挿入データの最後が改行で行頭に挿入するとき、現在行を維持する bInsertLineMode = true; @@ -1121,7 +1123,7 @@ prev_line:; #ifdef _DEBUG int nLen = cmemLine.GetStringLength(); const wchar_t* pInsLine = cmemLine.GetStringPtr(); - assert( 0 < nLen && WCODE::IsLineDelimiter(pInsLine[nLen - 1], GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol) ); + assert( 0 < nLen && WCODE::IsLineDelimiter(pInsLine[nLen - 1], bEnableExtEol) ); #endif { if( NULL == pCDocLine ){ @@ -1133,10 +1135,10 @@ prev_line:; tmp.AllocStringBuffer(cPrevLine.GetLength() + cmemLine.GetStringLength()); tmp.AppendString(cPrevLine.GetPtr(), cPrevLine.GetLength()); tmp.AppendNativeData(cmemLine); - pCDocLineNew->SetDocLineStringMove(&tmp, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol); + pCDocLineNew->SetDocLineStringMove(&tmp, bEnableExtEol); } else{ - pCDocLineNew->SetDocLineStringMove(&cmemLine, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol); + pCDocLineNew->SetDocLineStringMove(&cmemLine, bEnableExtEol); } CModifyVisitor().SetLineModified(pCDocLineNew, (*pArg->pInsData)[nCount].nSeq); } @@ -1152,21 +1154,21 @@ prev_line:; cmemCurLine.swap(tmp); tmp._SetStringLength(cPrevLine.GetLength()); tmp.AppendNativeData(cmemLine); - pCDocLine->SetDocLineStringMove(&tmp, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol); + pCDocLine->SetDocLineStringMove(&tmp, bEnableExtEol); cNextLine = CStringRef(cmemCurLine.GetStringPtr(), cmemCurLine.GetStringLength()); }else{ CNativeW tmp; tmp.AllocStringBuffer(cPrevLine.GetLength() + cmemLine.GetStringLength()); tmp.AppendString(cPrevLine.GetPtr(), cPrevLine.GetLength()); tmp.AppendNativeData(cmemLine); - pCDocLine->SetDocLineStringMove(&tmp, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol); + pCDocLine->SetDocLineStringMove(&tmp, bEnableExtEol); } CModifyVisitor().SetLineModified(pCDocLine, (*pArg->pInsData)[nCount].nSeq); pCDocLine = pCDocLine->GetNextLine(); } else{ CDocLine* pCDocLineNew = m_pcDocLineMgr->InsertNewLine(pCDocLine); //pCDocLineの前に挿入 - pCDocLineNew->SetDocLineStringMove(&cmemLine, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol); + pCDocLineNew->SetDocLineStringMove(&cmemLine, bEnableExtEol); CModifyVisitor().SetLineModified(pCDocLineNew, (*pArg->pInsData)[nCount].nSeq); } } @@ -1199,7 +1201,7 @@ prev_line:; tmp.AppendString(cNextLine.GetPtr(), cNextLine.GetLength()); if( NULL == pCDocLine ){ CDocLine* pCDocLineNew = m_pcDocLineMgr->AddNewLine(); //末尾に追加 - pCDocLineNew->SetDocLineStringMove(&tmp, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol); + pCDocLineNew->SetDocLineStringMove(&tmp, bEnableExtEol); pCDocLineNew->m_sMark = markNext; if( !bLastEOLReplace || !bSetMark ){ CModifyVisitor().SetLineModified(pCDocLineNew, nSeq); @@ -1213,7 +1215,7 @@ prev_line:; pCDocLine = m_pcDocLineMgr->InsertNewLine(pCDocLine); //pCDocLineの前に挿入 pCDocLine->m_sMark = markNext; } - pCDocLine->SetDocLineStringMove(&tmp, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol); + pCDocLine->SetDocLineStringMove(&tmp, bEnableExtEol); if( !bLastEOLReplace || !bSetMark ){ CModifyVisitor().SetLineModified(pCDocLine, nSeq); } From a9f05ceb0296c9d822b9f66a0e59d817dc6f8546 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Mon, 3 May 2021 14:29:59 +0900 Subject: [PATCH 0665/1024] =?UTF-8?q?[skip=20ci]=20find-tools.bat=E3=81=AE?= =?UTF-8?q?=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1=E3=83=B3=E3=83=88=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - CMake と Ninja を外部ツールの一覧に追加した - 固有名詞における文字の大小を区別するようにした --- tools/find-tools.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/tools/find-tools.md b/tools/find-tools.md index bc8990779e..4a81f06241 100644 --- a/tools/find-tools.md +++ b/tools/find-tools.md @@ -17,12 +17,14 @@ | 7-Zip | CMD_7Z | 7-Zip | 7z | | HTML Help Workshop | CMD_HHC | HTML Help Workshop | hhc.exe | | Inno Setup 5 | CMD_ISCC | Inno Setup 5 | ISCC.exe | -| cppcheck | CMD_CPPCHECK | cppcheck | cppcheck.exe | -| doxygen | CMD_DOXYGEN | doxygen\bin | doxygen.exe | +| Cppcheck | CMD_CPPCHECK | cppcheck | cppcheck.exe | +| Doxygen | CMD_DOXYGEN | doxygen\bin | doxygen.exe | | vswhere | CMD_VSWHERE | Microsoft Visual Studio\Installer | vswhere.exe | | MSBuild | CMD_MSBUILD | 特殊 | MSBuild.exe | | Locale Emulator | CMD_LEPROC | なし | LEProc.exe | -| python | CMD_PYTHON | なし | py.exe(python.exe) | +| Python | CMD_PYTHON | なし | py.exe (python.exe) | +| CMake | CMD_CMAKE | CMake\bin | cmake | +| Ninja | CMD_NINJA | なし | ninja | ## MSBuild以外の探索手順 MSBuild以外の探索手順は同一であり、7-Zipを例に説明する。 @@ -79,12 +81,12 @@ MSBuild以外の探索手順は同一であり、7-Zipを例に説明する。 ## python -ビルドバッチで利用するpythonインタープリターの存在確認をします。 -適切なpythonインタープリターが見つかると、環境変数 `CMD_PYTHON` が定義されます。 -適切なpythonインタープリターが見つからない場合、`CMD_PYTHON` は定義されません。 -pythonインタープリターはビルド要件ではないのでpythonを利用するバッチには `CMD_PYTHON` チェックを挟む必要があります。 +ビルドバッチで利用する Python インタープリターの存在確認をします。 +適切な Python インタープリターが見つかると、環境変数 `CMD_PYTHON` が定義されます。 +適切な Python インタープリターが見つからない場合、 `CMD_PYTHON` は定義されません。 +Python インタープリターはビルド要件ではないので、 Python を利用するバッチには `CMD_PYTHON` チェックを挟む必要があります。 -1. python Launcher(py.exe)が存在し、`py.exe --version`でバージョンが取れたら、それを使う。 +1. Python Launcher (py.exe) が存在し、 `py.exe --version` でバージョンが取れたら、それを使う。 1. パスが通っているpython.exeで`python.exe --version`してバージョンが取れたら、それを使う。 From 9b1b838c74a033c563f06ec9dac10cbbf3ecadc7 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Mon, 3 May 2021 19:07:50 +0900 Subject: [PATCH 0666/1024] =?UTF-8?q?CDocLineMgr=20=E3=81=AE=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-cdoclinemgr.cpp | 153 +++++++++++++++++++++++++ tests/unittests/tests1.vcxproj | 1 + tests/unittests/tests1.vcxproj.filters | 3 + 3 files changed, 157 insertions(+) create mode 100644 tests/unittests/test-cdoclinemgr.cpp diff --git a/tests/unittests/test-cdoclinemgr.cpp b/tests/unittests/test-cdoclinemgr.cpp new file mode 100644 index 0000000000..5bd5de0ba9 --- /dev/null +++ b/tests/unittests/test-cdoclinemgr.cpp @@ -0,0 +1,153 @@ +/* + Copyright (C) 2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ + +#include +#include "doc/logic/CDocLineMgr.h" + +#include + +TEST(CDocLineMgr, ListManipulations) +{ + CDocLineMgr m; + + // 初期状態。行数0。 + EXPECT_EQ(m.GetLineCount(), 0); + EXPECT_EQ(m.GetLine(CLogicInt(0)), nullptr); + EXPECT_EQ(m.GetLine(CLogicInt(1)), nullptr); + EXPECT_EQ(m.GetDocLineTop(), nullptr); + EXPECT_EQ(m.GetDocLineBottom(), nullptr); + + // 1行追加する。行数1。 + CDocLine* a = m.AddNewLine(); + ASSERT_NE(a, nullptr); + a->SetDocLineString(L"A", 1, false); + EXPECT_EQ(m.GetLineCount(), 1); + EXPECT_EQ(m.GetLine(CLogicInt(0)), a); + EXPECT_EQ(m.GetLine(CLogicInt(1)), nullptr); + EXPECT_EQ(m.GetDocLineTop(), a); + EXPECT_EQ(m.GetDocLineBottom(), a); + + // 先頭に1行入れる。行数2。 + CDocLine* b = m.InsertNewLine(m.GetDocLineTop()); + ASSERT_NE(b, nullptr); + b->SetDocLineString(L"B", 1, false); + EXPECT_EQ(m.GetLineCount(), 2); + //EXPECT_EQ(m.GetLine(CLogicInt(0)), b); + //EXPECT_EQ(m.GetLine(CLogicInt(1)), a); + EXPECT_EQ(m.GetLine(CLogicInt(2)), nullptr); + EXPECT_EQ(m.GetDocLineTop(), b); + EXPECT_EQ(m.GetDocLineBottom(), a); + + // 中間に1行入れる。行数3。 + CDocLine* c = m.InsertNewLine(m.GetDocLineBottom()); + ASSERT_NE(c, nullptr); + c->SetDocLineString(L"C", 1, false); + EXPECT_EQ(m.GetLineCount(), 3); + //EXPECT_EQ(m.GetLine(CLogicInt(0)), b); + //EXPECT_EQ(m.GetLine(CLogicInt(1)), c); + EXPECT_EQ(m.GetLine(CLogicInt(2)), a); + EXPECT_EQ(m.GetDocLineTop(), b); + EXPECT_EQ(m.GetDocLineBottom(), a); + + // 末尾に1行追加する。行数4。 + CDocLine* d = m.InsertNewLine(nullptr); + ASSERT_NE(d, nullptr); + d->SetDocLineString(L"D", 1, false); + EXPECT_EQ(m.GetLineCount(), 4); + EXPECT_EQ(m.GetLine(CLogicInt(0)), b); + EXPECT_EQ(m.GetLine(CLogicInt(1)), c); + EXPECT_EQ(m.GetLine(CLogicInt(2)), a); + EXPECT_EQ(m.GetLine(CLogicInt(3)), d); + EXPECT_EQ(m.GetDocLineTop(), b); + EXPECT_EQ(m.GetDocLineBottom(), d); + + // 末尾に1行追加する。行数5。 + CDocLine* e = m.AddNewLine(); + ASSERT_NE(e, nullptr); + e->SetDocLineString(L"E", 1, false); + EXPECT_EQ(m.GetLineCount(), 5); + EXPECT_EQ(m.GetLine(CLogicInt(0)), b); + EXPECT_EQ(m.GetLine(CLogicInt(1)), c); + EXPECT_EQ(m.GetLine(CLogicInt(2)), a); + EXPECT_EQ(m.GetLine(CLogicInt(4)), e); + EXPECT_EQ(m.GetLine(CLogicInt(3)), d); + EXPECT_EQ(m.GetDocLineTop(), b); + EXPECT_EQ(m.GetDocLineBottom(), e); + + // 先頭の1行を削除する。行数4。 + m.DeleteLine(b); + EXPECT_EQ(m.GetLineCount(), 4); + EXPECT_EQ(m.GetLine(CLogicInt(0)), c); + EXPECT_EQ(m.GetLine(CLogicInt(1)), a); + EXPECT_EQ(m.GetLine(CLogicInt(2)), d); + EXPECT_EQ(m.GetLine(CLogicInt(3)), e); + EXPECT_EQ(m.GetDocLineTop(), c); + EXPECT_EQ(m.GetDocLineBottom(), e); + + // 中間の1行を削除する。行数3。 + m.DeleteLine(a); + EXPECT_EQ(m.GetLineCount(), 3); + EXPECT_EQ(m.GetLine(CLogicInt(0)), c); + EXPECT_EQ(m.GetLine(CLogicInt(1)), d); + EXPECT_EQ(m.GetLine(CLogicInt(2)), e); + EXPECT_EQ(m.GetDocLineTop(), c); + EXPECT_EQ(m.GetDocLineBottom(), e); + + // 末尾の1行を削除する。行数2。 + m.DeleteLine(e); + EXPECT_EQ(m.GetLineCount(), 2); + EXPECT_EQ(m.GetLine(CLogicInt(0)), c); + EXPECT_EQ(m.GetLine(CLogicInt(1)), d); + EXPECT_EQ(m.GetDocLineTop(), c); + EXPECT_EQ(m.GetDocLineBottom(), d); + + // すべて削除する。行数0。 + m.DeleteAllLine(); + EXPECT_EQ(m.GetLineCount(), 0); + EXPECT_EQ(m.GetLine(CLogicInt(0)), nullptr); + EXPECT_EQ(m.GetLine(CLogicInt(1)), nullptr); + EXPECT_EQ(m.GetDocLineTop(), nullptr); + EXPECT_EQ(m.GetDocLineBottom(), nullptr); + + // 最後の行を DeleteLine で削除するケース。 + m.DeleteLine(m.AddNewLine()); + EXPECT_EQ(m.GetLineCount(), 0); + EXPECT_EQ(m.GetLine(CLogicInt(0)), nullptr); + EXPECT_EQ(m.GetLine(CLogicInt(1)), nullptr); + EXPECT_EQ(m.GetDocLineTop(), nullptr); + EXPECT_EQ(m.GetDocLineBottom(), nullptr); +} + +TEST(CDocLineMgr, RandomAccess) +{ + std::array lines; + CDocLineMgr m; + for (int i = 0; i < lines.size(); ++i) + lines[i] = m.AddNewLine(); + + EXPECT_EQ(m.GetLine(CLogicInt(10)), lines[10]); + EXPECT_EQ(m.GetLine(CLogicInt(90)), lines[90]); + EXPECT_EQ(m.GetLine(CLogicInt(60)), lines[60]); + EXPECT_EQ(m.GetLine(CLogicInt(70)), lines[70]); +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index 0e3188f92e..ef960a2e78 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -107,6 +107,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index 36cc9a030e..8577262fe3 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -142,6 +142,9 @@ Test Files + + Test Files + From 9586733adf6b5cc794f2f319153608b6c85edb7d Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sun, 11 Apr 2021 10:53:25 +0900 Subject: [PATCH 0667/1024] =?UTF-8?q?CNativeW::GetSizeOfChar=E3=81=ABCStri?= =?UTF-8?q?ngRef=E5=9E=8B=E3=81=AE=E6=96=87=E5=AD=97=E5=88=97=E3=82=92?= =?UTF-8?q?=E5=8F=97=E3=81=91=E5=85=A5=E3=82=8C=E3=82=8B=E3=82=AA=E3=83=BC?= =?UTF-8?q?=E3=83=90=E3=83=BC=E3=83=AD=E3=83=BC=E3=83=89=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/mem/CNativeW.h | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/sakura_core/mem/CNativeW.h b/sakura_core/mem/CNativeW.h index e96cb59bf4..ed82ed2d08 100644 --- a/sakura_core/mem/CNativeW.h +++ b/sakura_core/mem/CNativeW.h @@ -153,19 +153,20 @@ class CNativeW final : public CNative{ public: // -- -- staticインターフェース -- -- // - static CLogicInt GetSizeOfChar( const wchar_t* pData, int nDataLen, int nIdx ); //!< 指定した位置の文字がwchar_t何個分かを返す - static CHabaXInt GetHabaOfChar( const wchar_t* pData, int nDataLen, int nIdx, - bool bEnableExtEol, CCharWidthCache& cache = GetCharWidthCache() ); + //! 指定した位置の文字がwchar_t何個分かを返す + static CLogicInt GetSizeOfChar( const wchar_t* pData, int nDataLen, int nIdx ); + static CLogicInt GetSizeOfChar( const CStringRef& cStr, int nIdx ) + { return GetSizeOfChar( cStr.GetPtr(), cStr.GetLength(), nIdx ); } //! 指定した位置の文字が半角何個分かを返す static CKetaXInt GetKetaOfChar( const wchar_t* pData, int nDataLen, int nIdx, CCharWidthCache& cache = GetCharWidthCache() ); + static CKetaXInt GetKetaOfChar( const CStringRef& cStr, int nIdx ) + { return GetKetaOfChar( cStr.GetPtr(), cStr.GetLength(), nIdx ); } static const wchar_t* GetCharNext( const wchar_t* pData, int nDataLen, const wchar_t* pDataCurrent ); //!< ポインタで示した文字の次にある文字の位置を返します static const wchar_t* GetCharPrev(const wchar_t* pData, size_t nDataLen, const wchar_t* pDataCurrent); //!< ポインタで示した文字の直前にある文字の位置を返します - static CKetaXInt GetKetaOfChar( const CStringRef& cStr, int nIdx ) //!< 指定した位置の文字が半角何個分かを返す - { - return GetKetaOfChar(cStr.GetPtr(), cStr.GetLength(), nIdx); - } + static CHabaXInt GetHabaOfChar( const wchar_t* pData, int nDataLen, int nIdx, + bool bEnableExtEol, CCharWidthCache& cache = GetCharWidthCache() ); static CLayoutXInt GetColmOfChar( const wchar_t* pData, int nDataLen, int nIdx, bool bEnableExtEol ) { return GetHabaOfChar(pData,nDataLen,nIdx, bEnableExtEol); } From ffa332caacca1c98f9a2d6b8e9562e8d3a819bc4 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Fri, 23 Apr 2021 14:46:41 +0900 Subject: [PATCH 0668/1024] =?UTF-8?q?=E3=83=AC=E3=82=A4=E3=82=A2=E3=82=A6?= =?UTF-8?q?=E3=83=88=E4=BD=9C=E6=88=90=E3=83=95=E3=83=AD=E3=83=BC=E3=81=AB?= =?UTF-8?q?=E3=81=8A=E3=81=84=E3=81=A6=E7=89=A9=E7=90=86=E3=83=87=E3=83=BC?= =?UTF-8?q?=E3=82=BF=E5=8F=82=E7=85=A7=E4=BD=8D=E7=BD=AE=E3=81=AE=E5=A2=97?= =?UTF-8?q?=E5=88=86=E3=82=92=E6=96=87=E5=AD=97=E3=81=94=E3=81=A8=E3=81=AB?= =?UTF-8?q?=E9=83=BD=E5=BA=A6=E8=A8=88=E7=AE=97=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../doc/layout/CLayoutMgr_DoLayout.cpp | 41 ++++++++----------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp b/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp index 2de5300a63..16b87369b7 100644 --- a/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp +++ b/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp @@ -49,12 +49,13 @@ static bool _GetKeywordLength( CLogicInt nWordLen = CLogicInt(0); CLayoutInt nWordKetas = CLayoutInt(0); while(nPos0){ @@ -188,7 +189,7 @@ void CLayoutMgr::_DoKutoBurasage(SLayoutWork* pWork) const if( _IsKinsokuPosKuto( GetMaxLineLayout() - pWork->nPosX, nCharKetas ) && IsKinsokuKuto( pWork->cLineStr.At( pWork->nPos ) ) ) { pWork->nWordBgn = pWork->nPos; - pWork->nWordLen = 1; + pWork->nWordLen = CNativeW::GetSizeOfChar( pWork->cLineStr, pWork->nPos ); pWork->eKinsokuType = KINSOKU_TYPE_KINSOKU_KUTO; } } @@ -203,24 +204,17 @@ void CLayoutMgr::_DoGyotoKinsoku(SLayoutWork* pWork, PF_OnLine pfOnLine) && (pWork->eKinsokuType == KINSOKU_TYPE_NONE) ) { // 2007.09.07 kobake レイアウトとロジックの区別 - CLayoutInt nCharKetas2 = GetLayoutXOfChar( pWork->cLineStr, pWork->nPos ); - CLayoutInt nCharKetas3 = GetLayoutXOfChar( pWork->cLineStr, pWork->nPos+1 ); - bool bLowSurrogate = false; + CLogicXInt nCharSize = CNativeW::GetSizeOfChar( pWork->cLineStr, pWork->nPos ); + CLayoutXInt nCharKetas1 = GetLayoutXOfChar( pWork->cLineStr, pWork->nPos ); + CLayoutXInt nCharKetas2 = GetLayoutXOfChar( pWork->cLineStr, pWork->nPos + nCharSize ); - if( nCharKetas3 == 0 && pWork->nPos + 2 < pWork->cLineStr.GetLength() ) - { - // サロゲートペア対策(取得した文字幅が0だったら下位側を読み取ったと判断し、次の位置に進ませる) - bLowSurrogate = true; - nCharKetas3 = GetLayoutXOfChar( pWork->cLineStr, pWork->nPos + 2 ); - } - - if( _IsKinsokuPosHead( GetMaxLineLayout() - pWork->nPosX, nCharKetas2, nCharKetas3 ) - && IsKinsokuHead( pWork->cLineStr.At( pWork->nPos + ( bLowSurrogate ? 2 : 1 ) ) ) + if( _IsKinsokuPosHead( GetMaxLineLayout() - pWork->nPosX, nCharKetas1, nCharKetas2 ) + && IsKinsokuHead( pWork->cLineStr.At( pWork->nPos + nCharSize ) ) && !IsKinsokuHead( pWork->cLineStr.At( pWork->nPos ) ) // 1字前が行頭禁則の対象でないこと && !IsKinsokuKuto( pWork->cLineStr.At( pWork->nPos ) ) ) // 1字前が句読点ぶら下げの対象でないこと { pWork->nWordBgn = pWork->nPos; - pWork->nWordLen = ( bLowSurrogate ? 3 : 2 ); + pWork->nWordLen = nCharSize + CNativeW::GetSizeOfChar( pWork->cLineStr, pWork->nPos + nCharSize ); pWork->eKinsokuType = KINSOKU_TYPE_KINSOKU_HEAD; (this->*pfOnLine)(pWork); @@ -236,13 +230,14 @@ void CLayoutMgr::_DoGyomatsuKinsoku(SLayoutWork* pWork, PF_OnLine pfOnLine) && ( pWork->nPosX > pWork->nIndent ) // 2004.04.09 pWork->nPosXの解釈変更のため,行頭チェックも変更 && (pWork->eKinsokuType == KINSOKU_TYPE_NONE) ) { - CLayoutInt nCharKetas2 = GetLayoutXOfChar( pWork->cLineStr, pWork->nPos ); - CLayoutInt nCharKetas3 = GetLayoutXOfChar( pWork->cLineStr, pWork->nPos+1 ); + CLogicXInt nCharSize = CNativeW::GetSizeOfChar( pWork->cLineStr, pWork->nPos ); + CLayoutXInt nCharKetas1 = GetLayoutXOfChar( pWork->cLineStr, pWork->nPos ); + CLayoutXInt nCharKetas2 = GetLayoutXOfChar( pWork->cLineStr, pWork->nPos + nCharSize ); - if( _IsKinsokuPosTail( GetMaxLineLayout() - pWork->nPosX, nCharKetas2, nCharKetas3 ) && IsKinsokuTail( pWork->cLineStr.At( pWork->nPos ) ) ) + if( _IsKinsokuPosTail( GetMaxLineLayout() - pWork->nPosX, nCharKetas1, nCharKetas2 ) && IsKinsokuTail( pWork->cLineStr.At( pWork->nPos ) ) ) { pWork->nWordBgn = pWork->nPos; - pWork->nWordLen = 1; + pWork->nWordLen = nCharSize; pWork->eKinsokuType = KINSOKU_TYPE_KINSOKU_TAIL; (this->*pfOnLine)(pWork); @@ -260,7 +255,7 @@ bool CLayoutMgr::_DoTab(SLayoutWork* pWork, PF_OnLine pfOnLine) return true; } pWork->nPosX += nCharKetas; - pWork->nPos += CLogicInt(1); + pWork->nPos += CNativeW::GetSizeOfChar( pWork->cLineStr, pWork->nPos ); return false; } @@ -336,7 +331,7 @@ void CLayoutMgr::_MakeOneLine(SLayoutWork* pWork, PF_OnLine pfOnLine) } } } - pWork->nPos += 1; + pWork->nPos += CNativeW::GetSizeOfChar( pWork->cLineStr, pWork->nPos ); pWork->nPosX += nCharKetas; } } From fe56cedaa6e8e9653e57a0257eb0c3c25a1a8f1f Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Wed, 28 Apr 2021 00:12:43 +0900 Subject: [PATCH 0669/1024] =?UTF-8?q?=E3=82=B5=E3=83=AD=E3=82=B2=E3=83=BC?= =?UTF-8?q?=E3=83=88=E3=83=9A=E3=82=A2=E5=AF=BE=E7=AD=96=E3=81=A8=E3=81=97?= =?UTF-8?q?=E3=81=A6=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88=E3=82=A2=E3=82=A6?= =?UTF-8?q?=E3=83=88=E3=81=97=E3=81=9F=E3=82=B3=E3=83=BC=E3=83=89=E3=82=92?= =?UTF-8?q?=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/doc/layout/CLayoutMgr.cpp | 4 ---- sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp | 4 ---- sakura_core/mem/CMemoryIterator.h | 2 -- 3 files changed, 10 deletions(-) diff --git a/sakura_core/doc/layout/CLayoutMgr.cpp b/sakura_core/doc/layout/CLayoutMgr.cpp index fcbc59c600..dc09c52a1e 100644 --- a/sakura_core/doc/layout/CLayoutMgr.cpp +++ b/sakura_core/doc/layout/CLayoutMgr.cpp @@ -873,8 +873,6 @@ void CLayoutMgr::LogicToLayout( else{ nCharKetas = GetLayoutXOfChar( pData, nDataLen, i ); } -// if( nCharKetas == 0 ) // 削除 サロゲートペア対策 2008/7/5 Uchi -// nCharKetas = CLayoutInt(1); //レイアウト加算 nCaretPosX += nCharKetas; @@ -1007,8 +1005,6 @@ checkloop:; else{ nCharKetas = GetLayoutXOfChar( pData, nDataLen, i ); } -// if( nCharKetas == 0 ) // 削除 サロゲートペア対策 2008/7/5 Uchi -// nCharKetas = CLayoutInt(1); //レイアウト加算 if( nX + nCharKetas > ptLayout.GetX2() && !bEOF ){ diff --git a/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp b/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp index 16b87369b7..10973b8f5d 100644 --- a/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp +++ b/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp @@ -51,7 +51,6 @@ static bool _GetKeywordLength( while(nPoscLineStr, pWork->nPos ); -// if( 0 == nCharKetas ){ // 削除 サロゲートペア対策 2008/7/5 Uchi -// nCharKetas = CLayoutInt(1); -// } if( pWork->nPosX + nCharKetas > GetMaxLineLayout() ){ if( pWork->eKinsokuType != KINSOKU_TYPE_KINSOKU_KUTO ) diff --git a/sakura_core/mem/CMemoryIterator.h b/sakura_core/mem/CMemoryIterator.h index 6f41e873a9..ef985b32b7 100644 --- a/sakura_core/mem/CMemoryIterator.h +++ b/sakura_core/mem/CMemoryIterator.h @@ -110,8 +110,6 @@ class CMemoryIterator if( m_nSpacing ){ m_nColumn_Delta += CLayoutXInt(CNativeW::GetKetaOfChar(m_pLine, m_nLineLen, m_nIndex) * m_nSpacing); } -// if( 0 == m_nColumn_Delta ) // 削除 サロゲートペア対策 2008/7/5 Uchi -// m_nColumn_Delta = CLayoutInt(1); } } From bf6a3aff9429e1ed01247d5bb005889e846f5084 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Tue, 4 May 2021 20:06:52 +0900 Subject: [PATCH 0670/1024] =?UTF-8?q?CNativeW::GetSizeOfChar=20=E5=8F=8A?= =?UTF-8?q?=E3=81=B3=20CNativeW::GetKetaOfChar=20=E3=81=AE=E3=82=AA?= =?UTF-8?q?=E3=83=BC=E3=83=90=E3=83=BC=E3=83=AD=E3=83=BC=E3=83=89=E3=81=AB?= =?UTF-8?q?=E5=AF=BE=E3=81=99=E3=82=8B=E3=83=86=E3=82=B9=E3=83=88=E3=81=AE?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/mem/CNativeW.h | 4 ++-- tests/unittests/test-cnative.cpp | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/sakura_core/mem/CNativeW.h b/sakura_core/mem/CNativeW.h index ed82ed2d08..a3b2ee3cc5 100644 --- a/sakura_core/mem/CNativeW.h +++ b/sakura_core/mem/CNativeW.h @@ -160,8 +160,8 @@ class CNativeW final : public CNative{ //! 指定した位置の文字が半角何個分かを返す static CKetaXInt GetKetaOfChar( const wchar_t* pData, int nDataLen, int nIdx, CCharWidthCache& cache = GetCharWidthCache() ); - static CKetaXInt GetKetaOfChar( const CStringRef& cStr, int nIdx ) - { return GetKetaOfChar( cStr.GetPtr(), cStr.GetLength(), nIdx ); } + static CKetaXInt GetKetaOfChar(const CStringRef& cStr, int nIdx, CCharWidthCache& cache = GetCharWidthCache()) + { return GetKetaOfChar(cStr.GetPtr(), cStr.GetLength(), nIdx, cache); } static const wchar_t* GetCharNext( const wchar_t* pData, int nDataLen, const wchar_t* pDataCurrent ); //!< ポインタで示した文字の次にある文字の位置を返します static const wchar_t* GetCharPrev(const wchar_t* pData, size_t nDataLen, const wchar_t* pDataCurrent); //!< ポインタで示した文字の直前にある文字の位置を返します diff --git a/tests/unittests/test-cnative.cpp b/tests/unittests/test-cnative.cpp index 5982fc2ff5..6a795fd4f2 100644 --- a/tests/unittests/test-cnative.cpp +++ b/tests/unittests/test-cnative.cpp @@ -788,12 +788,16 @@ TEST(CNativeW, GetSizeOfChar) { // 基本多言語面の文字ならば1を返す。 EXPECT_EQ(CNativeW::GetSizeOfChar(L"a", 1, 0), 1); + EXPECT_EQ(CNativeW::GetSizeOfChar(CStringRef(L"a", 1), 0), 1); // 範囲外なら0を返す。 EXPECT_EQ(CNativeW::GetSizeOfChar(L"", 0, 0), 0); + EXPECT_EQ(CNativeW::GetSizeOfChar(CStringRef(L"", 0), 0), 0); // 上位・下位サロゲートの組み合わせであれば2を返す。 EXPECT_EQ(CNativeW::GetSizeOfChar(L"\xd83c\xdf38", 2, 0), 2); + EXPECT_EQ(CNativeW::GetSizeOfChar(CStringRef(L"\xd83c\xdf38", 2), 0), 2); // 指定位置が下位サロゲートならその他の文字と同様に1を返す。 EXPECT_EQ(CNativeW::GetSizeOfChar(L"\xd83c\xdf38", 2, 1), 1); + EXPECT_EQ(CNativeW::GetSizeOfChar(CStringRef(L"\xd83c\xdf38", 2), 1), 1); } /*! @@ -804,12 +808,16 @@ TEST(CNativeW, GetKetaOfChar) { // 範囲外なら0を返す。 EXPECT_EQ(CNativeW::GetKetaOfChar(L"", 0, 0), 0); + EXPECT_EQ(CNativeW::GetKetaOfChar(CStringRef(L"", 0), 0), 0); // 上位サロゲートなら2を返す。 EXPECT_EQ(CNativeW::GetKetaOfChar(L"\xd83c\xdf38", 2, 0), 2); + EXPECT_EQ(CNativeW::GetKetaOfChar(CStringRef(L"\xd83c\xdf38", 2), 0), 2); // 上位サロゲートに続く下位サロゲートであれば0を返す。 EXPECT_EQ(CNativeW::GetKetaOfChar(L"\xd83c\xdf38", 2, 1), 0); + EXPECT_EQ(CNativeW::GetKetaOfChar(CStringRef(L"\xd83c\xdf38", 2), 1), 0); // 下位サロゲートだけなら2を返す。 EXPECT_EQ(CNativeW::GetKetaOfChar(L"\xdf38", 1, 0), 2); + EXPECT_EQ(CNativeW::GetKetaOfChar(CStringRef(L"\xdf38", 1), 0), 2); // サクラエディタでは Unicode で表現できない文字コードの破壊を防ぐため、 // 不明バイトを下位サロゲートにマップして保持している。 @@ -819,12 +827,17 @@ TEST(CNativeW, GetKetaOfChar) // https://sourceforge.net/p/sakura-editor/patchunicode/57/ // http://sakura-editor.sourceforge.net/cgi-bin/cyclamen/cyclamen.cgi?log=unicode&v=833 EXPECT_EQ(CNativeW::GetKetaOfChar(L"\xdbff", 1, 0), 2); - for (wchar_t ch = 0xdc00; ch <= 0xdcff; ++ch) + EXPECT_EQ(CNativeW::GetKetaOfChar(CStringRef(L"\xdbff", 1), 0), 2); + for (wchar_t ch = 0xdc00; ch <= 0xdcff; ++ch) { EXPECT_EQ(CNativeW::GetKetaOfChar(&ch, 1, 0), 1); + EXPECT_EQ(CNativeW::GetKetaOfChar(CStringRef(&ch, 1), 0), 1); + } EXPECT_EQ(CNativeW::GetKetaOfChar(L"\xdd00", 1, 0), 2); + EXPECT_EQ(CNativeW::GetKetaOfChar(CStringRef(L"\xdd00", 1), 0), 2); // 文字が半角なら1を返す。 EXPECT_EQ(CNativeW::GetKetaOfChar(L"a", 1, 0), 1); + EXPECT_EQ(CNativeW::GetKetaOfChar(CStringRef(L"a", 1), 0), 1); // 文字が全角なら2を返す。 class FakeCache : public CCharWidthCache { @@ -832,6 +845,7 @@ TEST(CNativeW, GetKetaOfChar) bool CalcHankakuByFont(wchar_t c) override { return false; } } cache; EXPECT_EQ(CNativeW::GetKetaOfChar(L"あ", 1, 0, cache), 2); + EXPECT_EQ(CNativeW::GetKetaOfChar(CStringRef(L"あ", 1), 0, cache), 2); } /*! From a6973c5637160bd7e943a8296c81b2b5deb12a20 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Tue, 4 May 2021 10:45:25 +0900 Subject: [PATCH 0671/1024] =?UTF-8?q?=E3=83=AA=E3=82=BD=E3=83=BC=E3=82=B9?= =?UTF-8?q?=E3=81=8Cout-of-source=E3=83=93=E3=83=AB=E3=83=89=E3=81=A7?= =?UTF-8?q?=E3=81=8D=E3=81=AA=E3=81=8F=E3=81=AA=E3=81=A3=E3=81=A6=E3=81=84?= =?UTF-8?q?=E3=81=9F=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/Makefile b/sakura_core/Makefile index d984b90302..23b970c2bc 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -152,7 +152,7 @@ sakura_rc.o: sakura_rc.rc.utf8 sakura_rc.rc2.utf8 githash.h Funccode_define.h $(RC) -c utf-8 --language=0411 $(DEFINES) -I. -I$(SRCDIR) $< -o $@ sakura_rc.rc.utf8 sakura_rc.rc2.utf8: sakura_rc.rc sakura_rc.rc2 - $(ICONV) -f utf-16 -t utf-8 $(subst .utf8,,$(@F)) | $(SED) -e 1i'#pragma code_page(65001)' -e '/#include/s/.rc2\b/.rc2.utf8/' > $@ + $(ICONV) -f utf-16 -t utf-8 $(SRCDIR)/$(subst .utf8,,$(@F)) | $(SED) -e 1i'#pragma code_page(65001)' -e '/#include/s/.rc2\b/.rc2.utf8/' > $@ clean: -$(RM) $(subst /,$(DIRSEP),$(exe) $(OBJS) $(HEADERMAKE)) StdAfx.h.gch $(GENERATED_FILES) sakura_rc.o sakura_rc.*.utf8 From 119d2d5f47082ce8ff7af5d847ce4922cff6fd25 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sat, 8 May 2021 22:48:42 +0900 Subject: [PATCH 0672/1024] =?UTF-8?q?CSearchAgent::ReplaceData=20=E3=81=AE?= =?UTF-8?q?=E5=85=B1=E6=9C=89=E3=83=87=E3=83=BC=E3=82=BF=E4=BE=9D=E5=AD=98?= =?UTF-8?q?=E3=82=92=E9=99=A4=E5=8E=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CSearchAgent.cpp | 7 +++---- sakura_core/CSearchAgent.h | 2 +- sakura_core/basis/primitive.h | 1 + sakura_core/doc/layout/CLayoutMgr_New2.cpp | 2 +- sakura_core/view/CEditView_Command_New.cpp | 3 ++- 5 files changed, 8 insertions(+), 7 deletions(-) diff --git a/sakura_core/CSearchAgent.cpp b/sakura_core/CSearchAgent.cpp index 0a54ce1d09..27903fa1ff 100644 --- a/sakura_core/CSearchAgent.cpp +++ b/sakura_core/CSearchAgent.cpp @@ -747,7 +747,7 @@ end_of_func:; Fromを含む位置からToの直前を含むデータを削除する Fromの位置へテキストを挿入する */ -void CSearchAgent::ReplaceData( DocLineReplaceArg* pArg ) +void CSearchAgent::ReplaceData( DocLineReplaceArg* pArg, bool bEnableExtEol ) { // MY_RUNNINGTIMER( cRunningTimer, "CDocLineMgr::ReplaceData()" ); @@ -796,7 +796,8 @@ void CSearchAgent::ReplaceData( DocLineReplaceArg* pArg ) CDLgCandelCloser closer(pCDlgCancel); const CLogicInt nDelLines = pArg->sDelRange.GetTo().y - pArg->sDelRange.GetFrom().y; const CLogicInt nEditLines = std::max(CLogicInt(1), nDelLines + CLogicInt(pArg->pInsData ? pArg->pInsData->size(): 0)); - if( !CEditApp::getInstance()->m_pcGrepAgent->m_bGrepRunning ){ + if( const CGrepAgent *pcGrepAgent = CEditApp::getInstance()->m_pcGrepAgent; + pcGrepAgent && !pcGrepAgent->m_bGrepRunning ){ if( 3000 < nEditLines ){ /* 進捗ダイアログの表示 */ pCDlgCancel = new CDlgCancel; @@ -814,8 +815,6 @@ void CSearchAgent::ReplaceData( DocLineReplaceArg* pArg ) pArg->pcmemDeleted->reserve( pArg->sDelRange.GetTo().y + CLogicInt(1) - pArg->sDelRange.GetFrom().y ); } - const bool bEnableExtEol = GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol; - // 2012.01.10 行内の削除&挿入のときの操作を1つにする bool bChangeOneLine = false; // 行内の挿入 bool bInsOneLine = false; diff --git a/sakura_core/CSearchAgent.h b/sakura_core/CSearchAgent.h index acff13392f..b133e7ee87 100644 --- a/sakura_core/CSearchAgent.h +++ b/sakura_core/CSearchAgent.h @@ -131,7 +131,7 @@ class CSearchAgent{ // Jun. 26, 2001 genta 正規表現ライブラリの差し替え int SearchWord( CLogicPoint ptSerachBegin, ESearchDirection eDirection, CLogicRange* pMatchRange, const CSearchStringPattern& pattern ); /* 単語検索 */ - void ReplaceData( DocLineReplaceArg* pArg ); + void ReplaceData( DocLineReplaceArg* pArg, bool bEnableExtEol ); private: CDocLineMgr* m_pcDocLineMgr; }; diff --git a/sakura_core/basis/primitive.h b/sakura_core/basis/primitive.h index f4f745196a..567c852dac 100644 --- a/sakura_core/basis/primitive.h +++ b/sakura_core/basis/primitive.h @@ -27,6 +27,7 @@ #define SAKURA_PRIMITIVE_C8059DE4_C986_492E_9C09_7F044049C481_H_ #pragma once +#include #include "config/build_config.h" // -- -- -- -- 文字 -- -- -- -- // diff --git a/sakura_core/doc/layout/CLayoutMgr_New2.cpp b/sakura_core/doc/layout/CLayoutMgr_New2.cpp index df5b495ce8..c901e87244 100644 --- a/sakura_core/doc/layout/CLayoutMgr_New2.cpp +++ b/sakura_core/doc/layout/CLayoutMgr_New2.cpp @@ -67,7 +67,7 @@ void CLayoutMgr::ReplaceData_CLayoutMgr( DLRArg.pInsData = pArg->pInsData; // 挿入するデータ DLRArg.nDelSeq = pArg->nDelSeq; CSearchAgent(m_pcDocLineMgr).ReplaceData( - &DLRArg + &DLRArg, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol ); pArg->nInsSeq = DLRArg.nInsSeq; diff --git a/sakura_core/view/CEditView_Command_New.cpp b/sakura_core/view/CEditView_Command_New.cpp index c75ca30b26..a6f1e67098 100644 --- a/sakura_core/view/CEditView_Command_New.cpp +++ b/sakura_core/view/CEditView_Command_New.cpp @@ -821,7 +821,8 @@ bool CEditView::ReplaceData_CEditView3( DLRArg.pInsData = pInsData; DLRArg.nDelSeq = nDelSeq; // DLRArg.ptNewPos; - CSearchAgent(&GetDocument()->m_cDocLineMgr).ReplaceData( &DLRArg ); + CSearchAgent(&GetDocument()->m_cDocLineMgr).ReplaceData( + &DLRArg, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol); }else{ LRArg.sDelRange = sDelRange; //!< 削除範囲レイアウト LRArg.pcmemDeleted = pcMemDeleted; //!< [out] 削除されたデータ From c61a2f10a9689e07b4b98be5fc68002c42655477 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sat, 8 May 2021 22:50:12 +0900 Subject: [PATCH 0673/1024] =?UTF-8?q?CSearchAgent::ReplaceData=20=E3=81=AE?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-csearchagent.cpp | 435 +++++++++++++++++++++++++ tests/unittests/tests1.vcxproj | 1 + tests/unittests/tests1.vcxproj.filters | 3 + 3 files changed, 439 insertions(+) create mode 100644 tests/unittests/test-csearchagent.cpp diff --git a/tests/unittests/test-csearchagent.cpp b/tests/unittests/test-csearchagent.cpp new file mode 100644 index 0000000000..feb4baf58f --- /dev/null +++ b/tests/unittests/test-csearchagent.cpp @@ -0,0 +1,435 @@ +/* + Copyright (C) 2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ + +#include +#include "CSaveAgent.h" + +#include +#include +#include +#include +#include "doc/logic/CDocLineMgr.h" + +namespace { + +template void SetLines(CDocLineMgr& m, int seq, T begin, T end) +{ + for (auto it = begin; it != end; ++it) { + CDocLine* line = m.AddNewLine(); + line->SetDocLineString(it->data(), it->length()); + line->m_sMark.m_cModified = seq; + } +} + +void SetLines(CDocLineMgr& m, int seq, std::initializer_list args) +{ + SetLines(m, seq, args.begin(), args.end()); +} + +struct RawLineData { + const wchar_t* line; + int seq; +}; + +COpeLineData MakeOpeLineData(std::initializer_list lines) +{ + COpeLineData data; + for (RawLineData rawLine : lines) { + CLineData line; + line.cmemLine = rawLine.line; + line.nSeq = rawLine.seq; + data.push_back(line); + } + return data; +} + +} + +/*! + CSearchAgent::ReplaceData のテスト + + 行の一部を置き換える。 + */ +TEST(CSearchAgent, ReplaceData1) +{ + CDocLineMgr m; + SetLines(m, 1, {L"AAA\n", L"BBB\n", L"CCC\n"}); + + COpeLineData insData = MakeOpeLineData({{L"DDD", 2}}); + COpeLineData delData; + + DocLineReplaceArg arg; + arg.sDelRange = CLogicRange(CLogicPoint(0, 1), CLogicPoint(3, 1)); + arg.pcmemDeleted = &delData; + arg.pInsData = &insData; + arg.nDelSeq = 1; + arg.nInsSeq = -1; + CSearchAgent(&m).ReplaceData(&arg, false); + + EXPECT_EQ(m.GetLineCount(), 3); + EXPECT_STREQ(m.GetLine(CLogicInt(0))->GetPtr(), L"AAA\n"); + EXPECT_EQ(m.GetLine(CLogicInt(0))->m_sMark.m_cModified.GetSeq(), 1); + EXPECT_STREQ(m.GetLine(CLogicInt(1))->GetPtr(), L"DDD\n"); + EXPECT_EQ(m.GetLine(CLogicInt(1))->m_sMark.m_cModified.GetSeq(), 2); + EXPECT_STREQ(m.GetLine(CLogicInt(2))->GetPtr(), L"CCC\n"); + EXPECT_EQ(m.GetLine(CLogicInt(2))->m_sMark.m_cModified.GetSeq(), 1); + + EXPECT_EQ(arg.nInsSeq, 1); + EXPECT_EQ(arg.pcmemDeleted->size(), 1); + EXPECT_STREQ(arg.pcmemDeleted->at(0).cmemLine.GetStringPtr(), L"BBB"); + EXPECT_EQ(arg.pcmemDeleted->at(0).nSeq, 1); + EXPECT_EQ(arg.nDeletedLineNum, 0); + EXPECT_EQ(arg.nInsLineNum, 0); + EXPECT_EQ(arg.ptNewPos, CLogicPoint(3, 1)); +} + +/*! + CSearchAgent::ReplaceData のテスト + + 行全体を置き換える。 + */ +TEST(CSearchAgent, ReplaceData2) +{ + CDocLineMgr m; + SetLines(m, 1, {L"AAA\n", L"BBB\n", L"CCC\n"}); + + COpeLineData insData = MakeOpeLineData({{L"DDD\n", 2}}); + COpeLineData delData; + + DocLineReplaceArg arg; + arg.sDelRange = CLogicRange(CLogicPoint(0, 1), CLogicPoint(4, 1)); + arg.pcmemDeleted = &delData; + arg.pInsData = &insData; + arg.nDelSeq = 1; + arg.nInsSeq = -1; + CSearchAgent(&m).ReplaceData(&arg, false); + + EXPECT_EQ(m.GetLineCount(), 3); + EXPECT_STREQ(m.GetLine(CLogicInt(0))->GetPtr(), L"AAA\n"); + EXPECT_EQ(m.GetLine(CLogicInt(0))->m_sMark.m_cModified.GetSeq(), 1); + EXPECT_STREQ(m.GetLine(CLogicInt(1))->GetPtr(), L"DDD\n"); + EXPECT_EQ(m.GetLine(CLogicInt(1))->m_sMark.m_cModified.GetSeq(), 2); + EXPECT_STREQ(m.GetLine(CLogicInt(2))->GetPtr(), L"CCC\n"); + EXPECT_EQ(m.GetLine(CLogicInt(2))->m_sMark.m_cModified.GetSeq(), 1); + + EXPECT_EQ(arg.nInsSeq, 0); + EXPECT_EQ(arg.pcmemDeleted->size(), 1); + EXPECT_STREQ(arg.pcmemDeleted->at(0).cmemLine.GetStringPtr(), L"BBB\n"); + EXPECT_EQ(arg.pcmemDeleted->at(0).nSeq, 1); + EXPECT_EQ(arg.nDeletedLineNum, 1); + EXPECT_EQ(arg.nInsLineNum, 1); + EXPECT_EQ(arg.ptNewPos, CLogicPoint(0, 2)); +} + +/*! + CSearchAgent::ReplaceData のテスト + + 行末の改行を削除する。 + */ +TEST(CSearchAgent, ReplaceData3) +{ + CDocLineMgr m; + SetLines(m, 1, {L"AAA\n", L"BBB\n", L"CCC\n"}); + + COpeLineData delData; + + DocLineReplaceArg arg; + arg.sDelRange = CLogicRange(CLogicPoint(3, 1), CLogicPoint(4, 1)); + arg.pcmemDeleted = &delData; + arg.pInsData = nullptr; + arg.nDelSeq = 1; + arg.nInsSeq = -1; + CSearchAgent(&m).ReplaceData(&arg, false); + + EXPECT_EQ(m.GetLineCount(), 2); + EXPECT_STREQ(m.GetLine(CLogicInt(0))->GetPtr(), L"AAA\n"); + EXPECT_EQ(m.GetLine(CLogicInt(0))->m_sMark.m_cModified.GetSeq(), 1); + EXPECT_STREQ(m.GetLine(CLogicInt(1))->GetPtr(), L"BBBCCC\n"); + EXPECT_EQ(m.GetLine(CLogicInt(1))->m_sMark.m_cModified.GetSeq(), 1); + + EXPECT_EQ(arg.nInsSeq, 0); + EXPECT_EQ(arg.pcmemDeleted->size(), 2); + EXPECT_STREQ(arg.pcmemDeleted->at(0).cmemLine.GetStringPtr(), L"\n"); + EXPECT_EQ(arg.pcmemDeleted->at(0).nSeq, 1); + EXPECT_STREQ(arg.pcmemDeleted->at(1).cmemLine.GetStringPtr(), L""); + EXPECT_EQ(arg.pcmemDeleted->at(1).nSeq, 1); + EXPECT_EQ(arg.nDeletedLineNum, 1); + EXPECT_EQ(arg.nInsLineNum, 0); + EXPECT_EQ(arg.ptNewPos, CLogicPoint(3, 1)); +} + +/*! + CSearchAgent::ReplaceData のテスト + + 行末の改行を削除する。削除するデータ長が長いケース。 + */ +TEST(CSearchAgent, ReplaceData4) +{ + CDocLineMgr m; + SetLines(m, 1, {L"AAA\n", L"BBB\n", L"CCC\n"}); + + COpeLineData delData; + + DocLineReplaceArg arg; + arg.sDelRange = CLogicRange(CLogicPoint(1, 1), CLogicPoint(4, 1)); + arg.pcmemDeleted = &delData; + arg.pInsData = nullptr; + arg.nDelSeq = 1; + arg.nInsSeq = -1; + CSearchAgent(&m).ReplaceData(&arg, false); + + EXPECT_EQ(m.GetLineCount(), 2); + EXPECT_STREQ(m.GetLine(CLogicInt(0))->GetPtr(), L"AAA\n"); + EXPECT_EQ(m.GetLine(CLogicInt(0))->m_sMark.m_cModified.GetSeq(), 1); + EXPECT_STREQ(m.GetLine(CLogicInt(1))->GetPtr(), L"BCCC\n"); + EXPECT_EQ(m.GetLine(CLogicInt(1))->m_sMark.m_cModified.GetSeq(), 1); + + EXPECT_EQ(arg.nInsSeq, 0); + EXPECT_EQ(arg.pcmemDeleted->size(), 2); + EXPECT_STREQ(arg.pcmemDeleted->at(0).cmemLine.GetStringPtr(), L"BB\n"); + EXPECT_EQ(arg.pcmemDeleted->at(0).nSeq, 1); + EXPECT_STREQ(arg.pcmemDeleted->at(1).cmemLine.GetStringPtr(), L""); + EXPECT_EQ(arg.pcmemDeleted->at(1).nSeq, 1); + EXPECT_EQ(arg.nDeletedLineNum, 1); + EXPECT_EQ(arg.nInsLineNum, 0); + EXPECT_EQ(arg.ptNewPos, CLogicPoint(1, 1)); +} + +/*! + CSearchAgent::ReplaceData のテスト + + 行末の改行を削除する。対象行がデータ末尾であるケース。 + */ +TEST(CSearchAgent, ReplaceData5) +{ + CDocLineMgr m; + SetLines(m, 1, {L"AAA\n"}); + + COpeLineData delData; + + DocLineReplaceArg arg; + arg.sDelRange = CLogicRange(CLogicPoint(3, 0), CLogicPoint(4, 0)); + arg.pcmemDeleted = &delData; + arg.pInsData = nullptr; + arg.nDelSeq = 1; + arg.nInsSeq = -1; + CSearchAgent(&m).ReplaceData(&arg, false); + + EXPECT_EQ(m.GetLineCount(), 1); + EXPECT_STREQ(m.GetLine(CLogicInt(0))->GetPtr(), L"AAA"); + EXPECT_EQ(m.GetLine(CLogicInt(0))->m_sMark.m_cModified.GetSeq(), 1); + + EXPECT_EQ(arg.nInsSeq, 0); + EXPECT_EQ(arg.pcmemDeleted->size(), 1); + EXPECT_STREQ(arg.pcmemDeleted->at(0).cmemLine.GetStringPtr(), L"\n"); + EXPECT_EQ(arg.pcmemDeleted->at(0).nSeq, 1); + EXPECT_EQ(arg.nDeletedLineNum, 0); + EXPECT_EQ(arg.nInsLineNum, 0); + EXPECT_EQ(arg.ptNewPos, CLogicPoint(3, 0)); +} + +/*! + CSearchAgent::ReplaceData のテスト + + 文字を挿入して複数行を連結する。 + */ +TEST(CSearchAgent, ReplaceData6) +{ + CDocLineMgr m; + SetLines(m, 1, {L"AAA\n", L"BBB\n", L"CCC\n"}); + + COpeLineData insData = MakeOpeLineData({{L" ", 2}}); + COpeLineData delData; + + DocLineReplaceArg arg; + arg.sDelRange = CLogicRange(CLogicPoint(2, 1), CLogicPoint(1, 2)); + arg.pcmemDeleted = &delData; + arg.pInsData = &insData; + arg.nDelSeq = 1; + arg.nInsSeq = -1; + CSearchAgent(&m).ReplaceData(&arg, false); + + EXPECT_EQ(m.GetLineCount(), 2); + EXPECT_STREQ(m.GetLine(CLogicInt(0))->GetPtr(), L"AAA\n"); + EXPECT_EQ(m.GetLine(CLogicInt(0))->m_sMark.m_cModified.GetSeq(), 1); + EXPECT_STREQ(m.GetLine(CLogicInt(1))->GetPtr(), L"BB CC\n"); + EXPECT_EQ(m.GetLine(CLogicInt(1))->m_sMark.m_cModified.GetSeq(), 2); + + EXPECT_EQ(arg.nInsSeq, 1); + EXPECT_EQ(arg.pcmemDeleted->size(), 2); + EXPECT_STREQ(arg.pcmemDeleted->at(0).cmemLine.GetStringPtr(), L"B\n"); + EXPECT_EQ(arg.pcmemDeleted->at(0).nSeq, 1); + EXPECT_STREQ(arg.pcmemDeleted->at(1).cmemLine.GetStringPtr(), L"C"); + EXPECT_EQ(arg.pcmemDeleted->at(1).nSeq, 1); + EXPECT_EQ(arg.nDeletedLineNum, 1); + EXPECT_EQ(arg.nInsLineNum, 0); + EXPECT_EQ(arg.ptNewPos, CLogicPoint(3, 1)); +} + +/*! + CSearchAgent::ReplaceData のテスト + + 既存行の間に行を挿入し、次の行の先頭に文字を挿入する。 + 先頭に文字を挿入した行がデータの末尾であるケース。 + */ +TEST(CSearchAgent, ReplaceData7) +{ + CDocLineMgr m; + SetLines(m, 1, {L"AAA\n", L"BBB\n"}); + + COpeLineData insData = MakeOpeLineData({{L"CCC\n", 2}, {L"DDD", 3}}); + COpeLineData delData; + + DocLineReplaceArg arg; + arg.sDelRange = CLogicRange(CLogicPoint(0, 1), CLogicPoint(0, 1)); + arg.pcmemDeleted = &delData; + arg.pInsData = &insData; + arg.nDelSeq = 0; + arg.nInsSeq = -1; + CSearchAgent(&m).ReplaceData(&arg, false); + + EXPECT_EQ(m.GetLineCount(), 3); + EXPECT_STREQ(m.GetLine(CLogicInt(0))->GetPtr(), L"AAA\n"); + EXPECT_EQ(m.GetLine(CLogicInt(0))->m_sMark.m_cModified.GetSeq(), 1); + EXPECT_STREQ(m.GetLine(CLogicInt(1))->GetPtr(), L"CCC\n"); + EXPECT_EQ(m.GetLine(CLogicInt(1))->m_sMark.m_cModified.GetSeq(), 2); + EXPECT_STREQ(m.GetLine(CLogicInt(2))->GetPtr(), L"DDDBBB\n"); + EXPECT_EQ(m.GetLine(CLogicInt(2))->m_sMark.m_cModified.GetSeq(), 3); + + EXPECT_EQ(arg.nInsSeq, 1); + EXPECT_TRUE(arg.pcmemDeleted->empty()); + EXPECT_EQ(arg.nDeletedLineNum, 0); + EXPECT_EQ(arg.nInsLineNum, 1); + EXPECT_EQ(arg.ptNewPos, CLogicPoint(3, 2)); +} + +/*! + CSearchAgent::ReplaceData のテスト + + 既存行の間に行を挿入し、次の行の先頭に文字を挿入する。 + 先頭に文字を挿入した行がデータの末尾ではないケース。 + */ +TEST(CSearchAgent, ReplaceData8) +{ + CDocLineMgr m; + SetLines(m, 1, {L"AAA\n", L"BBB\n", L"CCC\n"}); + + COpeLineData insData = MakeOpeLineData({{L"DDD\n", 2}, {L"EEE", 3}}); + COpeLineData delData; + + DocLineReplaceArg arg; + arg.sDelRange = CLogicRange(CLogicPoint(0, 1), CLogicPoint(0, 1)); + arg.pcmemDeleted = &delData; + arg.pInsData = &insData; + arg.nDelSeq = 0; + arg.nInsSeq = -1; + CSearchAgent(&m).ReplaceData(&arg, false); + + EXPECT_EQ(m.GetLineCount(), 4); + EXPECT_STREQ(m.GetLine(CLogicInt(0))->GetPtr(), L"AAA\n"); + EXPECT_EQ(m.GetLine(CLogicInt(0))->m_sMark.m_cModified.GetSeq(), 1); + EXPECT_STREQ(m.GetLine(CLogicInt(1))->GetPtr(), L"DDD\n"); + EXPECT_EQ(m.GetLine(CLogicInt(1))->m_sMark.m_cModified.GetSeq(), 2); + EXPECT_STREQ(m.GetLine(CLogicInt(2))->GetPtr(), L"EEEBBB\n"); + EXPECT_EQ(m.GetLine(CLogicInt(2))->m_sMark.m_cModified.GetSeq(), 3); + EXPECT_STREQ(m.GetLine(CLogicInt(3))->GetPtr(), L"CCC\n"); + EXPECT_EQ(m.GetLine(CLogicInt(3))->m_sMark.m_cModified.GetSeq(), 1); + + EXPECT_EQ(arg.nInsSeq, 1); + EXPECT_TRUE(arg.pcmemDeleted->empty()); + EXPECT_EQ(arg.nDeletedLineNum, 0); + EXPECT_EQ(arg.nInsLineNum, 1); + EXPECT_EQ(arg.ptNewPos, CLogicPoint(3, 2)); +} + +/*! + CSearchAgent::ReplaceData のテスト + + 既存行の末尾に新しい行を追加する。 + */ +TEST(CSearchAgent, ReplaceData9) +{ + CDocLineMgr m; + SetLines(m, 1, {L"AAA\n", L"BBB\n"}); + + COpeLineData insData = MakeOpeLineData({{L"CCC\n", 2}}); + COpeLineData delData; + + DocLineReplaceArg arg; + arg.sDelRange = CLogicRange(CLogicPoint(0, 2), CLogicPoint(0, 2)); + arg.pcmemDeleted = &delData; + arg.pInsData = &insData; + arg.nDelSeq = 0; + arg.nInsSeq = -1; + CSearchAgent(&m).ReplaceData(&arg, false); + + EXPECT_EQ(m.GetLineCount(), 3); + EXPECT_STREQ(m.GetLine(CLogicInt(0))->GetPtr(), L"AAA\n"); + EXPECT_EQ(m.GetLine(CLogicInt(0))->m_sMark.m_cModified.GetSeq(), 1); + EXPECT_STREQ(m.GetLine(CLogicInt(1))->GetPtr(), L"BBB\n"); + EXPECT_EQ(m.GetLine(CLogicInt(1))->m_sMark.m_cModified.GetSeq(), 1); + EXPECT_STREQ(m.GetLine(CLogicInt(2))->GetPtr(), L"CCC\n"); + EXPECT_EQ(m.GetLine(CLogicInt(2))->m_sMark.m_cModified.GetSeq(), 2); + + EXPECT_EQ(arg.nInsSeq, 0); + EXPECT_TRUE(arg.pcmemDeleted->empty()); + EXPECT_EQ(arg.nDeletedLineNum, 0); + EXPECT_EQ(arg.nInsLineNum, 1); + EXPECT_EQ(arg.ptNewPos, CLogicPoint(0, 3)); +} + +/*! + CSearchAgent::ReplaceData のテスト + + 置換後の文字列が既存の行バッファの有効長に収まる場合の最適化済みコードパスの検査。 + */ +TEST(CSearchAgent, ReplaceData10) +{ + CDocLineMgr m; + SetLines(m, 1, {L"0123456789\n"}); + m.GetLine(CLogicInt(0))->_GetDocLineData().AllocStringBuffer(15); + + COpeLineData insData = MakeOpeLineData({{L"0123", 2}}); + COpeLineData delData; + + DocLineReplaceArg arg; + arg.sDelRange = CLogicRange(CLogicPoint(9, 0), CLogicPoint(10, 0)); + arg.pcmemDeleted = &delData; + arg.pInsData = &insData; + arg.nDelSeq = 0; + arg.nInsSeq = -1; + CSearchAgent(&m).ReplaceData(&arg, false); + + EXPECT_EQ(m.GetLineCount(), 1); + EXPECT_STREQ(m.GetLine(CLogicInt(0))->GetPtr(), L"0123456780123\n"); + EXPECT_EQ(m.GetLine(CLogicInt(0))->m_sMark.m_cModified.GetSeq(), 2); + + EXPECT_EQ(arg.nInsSeq, 1); + EXPECT_EQ(arg.pcmemDeleted->size(), 1); + EXPECT_STREQ(arg.pcmemDeleted->at(0).cmemLine.GetStringPtr(), L"9"); + EXPECT_EQ(arg.pcmemDeleted->at(0).nSeq, 1); + EXPECT_EQ(arg.nDeletedLineNum, 0); + EXPECT_EQ(arg.nInsLineNum, 0); + EXPECT_EQ(arg.ptNewPos, CLogicPoint(13, 0)); +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index ef960a2e78..547d655a06 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -108,6 +108,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index 8577262fe3..371c58a62f 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -145,6 +145,9 @@ Test Files + + Test Files + From 9655fa358906af7c3df5f4ad258156f9c719ed1d Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 9 May 2021 16:45:37 +0900 Subject: [PATCH 0674/1024] =?UTF-8?q?MinGW=20Makefile=E3=81=ABbregonig?= =?UTF-8?q?=E3=81=A8ctags=E3=81=AEzip=E5=B1=95=E9=96=8B=E3=82=92=E7=B5=84?= =?UTF-8?q?=E3=81=BF=E8=BE=BC=E3=82=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../template.steps.install-mingw-w64-gcc.yml | 3 +++ sakura_core/Makefile | 14 +++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/ci/azure-pipelines/template.steps.install-mingw-w64-gcc.yml b/ci/azure-pipelines/template.steps.install-mingw-w64-gcc.yml index 07f0075568..ec2938ad21 100644 --- a/ci/azure-pipelines/template.steps.install-mingw-w64-gcc.yml +++ b/ci/azure-pipelines/template.steps.install-mingw-w64-gcc.yml @@ -5,5 +5,8 @@ # なし ############################################################################################################# steps: + - script: C:\msys64\usr\bin\bash --login -c "pacman -S --noconfirm p7zip" + displayName: install 7zip + - script: C:\msys64\usr\bin\bash --login -c "pacman -S --noconfirm mingw-w64-x86_64-gtest" displayName: install MinGW-w64-gtest diff --git a/sakura_core/Makefile b/sakura_core/Makefile index d984b90302..6348d1c88f 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -31,6 +31,7 @@ DIRSEP = $(strip \ ) DEVNULL = NUL ICONV = C:\msys64\usr\bin\iconv.exe SED = C:\msys64\usr\bin\sed.exe +P7Z = "C:\Program Files\7-Zip\7z.exe" else # If unix-like shell is used. MKDIR = mkdir -p @@ -39,6 +40,7 @@ DIRSEP = / DEVNULL = /dev/null ICONV = iconv SED = sed +P7Z = 7z endif ifndef PREFIX @@ -100,6 +102,8 @@ LIBS= \ $(MYLIBS) exe= $(or $(OUTDIR),.)/sakura.exe +bregonig= $(or $(OUTDIR),.)/bregonig.dll +ctags= $(or $(OUTDIR),.)/ctags.exe SRCS = $(wildcard $(SRCDIR)/*.cpp) \ $(wildcard $(SRCDIR)/*/*.cpp) \ @@ -120,11 +124,19 @@ GENERATED_FILES= \ HEADERMAKETOOLDIR= $(SRCDIR)/../HeaderMake HEADERMAKE= $(or $(OUTDIR),$(HEADERMAKETOOLDIR))/HeaderMake.exe -all: $(exe) +all: $(exe) \ + $(bregonig) \ + $(ctags) $(exe): $(OBJS) sakura_rc.o $(CXX) -o $@ $(OBJS) sakura_rc.o $(LIBS) +$(bregonig): ../installer/externals/bregonig/bron420.zip + $(P7Z) e $< -o$(@D) -y x64/$(@F) + +$(ctags): ../installer/externals/universal-ctags/ctags-2020-01-12_feffe43a-x64.zip + $(P7Z) e $< -o$(@D) -y $(@F) + Funccode_define.h: Funccode_x.hsrc $(HEADERMAKE) $(HEADERMAKE) -in=$< -out=$@ -mode=define From 32e7b9fb8fea2addb80802c8f6d9ac7374586082 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 9 May 2021 19:35:38 +0900 Subject: [PATCH 0675/1024] =?UTF-8?q?MSVC=E3=83=97=E3=83=AD=E3=82=B8?= =?UTF-8?q?=E3=82=A7=E3=82=AF=E3=83=88=E3=81=ABbregonig=E3=81=A8ctags?= =?UTF-8?q?=E3=81=AEzip=E5=B1=95=E9=96=8B=E3=82=92=E7=B5=84=E3=81=BF?= =?UTF-8?q?=E8=BE=BC=E3=82=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit postBuild.batに実装されていた展開処理をプロジェクトに組み込む。 build-installer.batにライセンスファイルの展開処理を復元する。 --- build-installer.bat | 19 +++++++++++++++++++ sakura/postBuild.bat | 38 -------------------------------------- sakura/sakura.vcxproj | 10 ++++++++++ 3 files changed, 29 insertions(+), 38 deletions(-) diff --git a/build-installer.bat b/build-installer.bat index eeae517ba8..e4a5da3184 100644 --- a/build-installer.bat +++ b/build-installer.bat @@ -42,6 +42,25 @@ mkdir %INSTALLER_WORK%\license\bregonig mkdir %INSTALLER_WORK%\keyword mkdir %INSTALLER_WORK%\license\ctags\ +set BREGONIG_DLL=bregonig.dll +set BRON_ZIP=installer\externals\bregonig\bron420.zip +7z e %BRON_ZIP% -o%INSTALLER_RESOURCES_BRON% -y *.txt +if "%platform%" == "x64" ( + 7z e %BRON_ZIP% -o%platform%\%configuration% -y x64/%BREGONIG_DLL% +) else ( + 7z e %BRON_ZIP% -o%platform%\%configuration% -y %BREGONIG_DLL% +) + +set CTAGS_EXE=ctags.exe +if "%PLATFORM%" == "x64" ( + set CTAGS_PREFIX=x64 +) else if "%PLATFORM%" == "Win32" ( + set CTAGS_PREFIX=x86 +) +set CTAGS_ZIP=installer\externals\universal-ctags\ctags-2020-01-12_feffe43a-%CTAGS_PREFIX%.zip +7z x %CTAGS_ZIP% -o%INSTALLER_RESOURCES_CTAGS% -y license +7z e %CTAGS_ZIP% -o%platform%\%configuration% -y %CTAGS_EXE% + copy /Y .\LICENSE %INSTALLER_WORK%\license\ > NUL copy /Y %INSTALLER_RESOURCES_SINT%\sakura.exe.manifest.x %INSTALLER_WORK%\ > NUL copy /Y %INSTALLER_RESOURCES_SINT%\sakura.exe.manifest.v %INSTALLER_WORK%\ > NUL diff --git a/sakura/postBuild.bat b/sakura/postBuild.bat index 24557bdd31..785fd75a93 100644 --- a/sakura/postBuild.bat +++ b/sakura/postBuild.bat @@ -20,42 +20,4 @@ set CONFIGURATION=%2 set DEST_DIR=%PLATFORM%\%CONFIGURATION% set OUT_DIR=%~dp0..\%DEST_DIR% -: ---- bregonig.dll ---- : -set BREGONIG_DLL=bregonig.dll -set BRON_ZIP=..\installer\externals\bregonig\bron420.zip -set BRON_TMP=..\installer\temp\bron -if "%platform%" == "x64" ( - set BRON_DIR=%~dp0%BRON_TMP%\x64 -) else ( - set BRON_DIR=%~dp0%BRON_TMP% -) -if not exist "%BRON_DIR%\%BREGONIG_DLL%" ( - call "%UNZIP_CMD%" "%~dp0%BRON_ZIP%" "%~dp0%BRON_TMP%" > NUL || (echo error && exit /b 1) -) -if not exist "%OUT_DIR%\%BREGONIG_DLL%" ( - @echo %BRON_ZIP% -^> %DEST_DIR%\%BREGONIG_DLL% - copy /Y /B "%BRON_DIR%\%BREGONIG_DLL%" "%OUT_DIR%\" > NUL -) - -: ---- ctags.exe ---- : -set CTAGS_EXE=ctags.exe -if "%PLATFORM%" == "Win32" ( - set CTAGS_PREFIX=x86 -) else if "%PLATFORM%" == "x64" ( - set CTAGS_PREFIX=x64 -) else ( - echo unknown PLATFORM %PLATFORM% - exit /b 1 -) -set CTAGS_ZIP=..\installer\externals\universal-ctags\ctags-2020-01-12_feffe43a-%CTAGS_PREFIX%.zip -set CTAGS_TMP=..\installer\temp\ctags -set CTAGS_DIR=%~dp0%CTAGS_TMP% -if not exist "%CTAGS_DIR%\%CTAGS_EXE%" ( - call "%UNZIP_CMD%" "%~dp0%CTAGS_ZIP%" "%CTAGS_DIR%" > NUL || (echo error && exit /b 1) -) -if not exist "%OUT_DIR%\%CTAGS_EXE%" ( - @echo %CTAGS_ZIP% -^> %DEST_DIR%\%CTAGS_EXE% - copy /Y /B "%CTAGS_DIR%\%CTAGS_EXE%" "%OUT_DIR%\" > NUL -) - ENDLOCAL diff --git a/sakura/sakura.vcxproj b/sakura/sakura.vcxproj index 5d9b690e27..3d8bcdc4aa 100644 --- a/sakura/sakura.vcxproj +++ b/sakura/sakura.vcxproj @@ -1017,6 +1017,16 @@ + + + + + + + + + + From 8d31778d3050293bf06ef4d9d4e91597960ab129 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 10 May 2021 18:28:05 +0900 Subject: [PATCH 0676/1024] =?UTF-8?q?=E8=8B=B1=E8=AA=9EDLL=E3=81=8CMinGW?= =?UTF-8?q?=E3=83=93=E3=83=AB=E3=83=89=E3=81=A7=E3=81=8D=E3=81=AA=E3=81=8F?= =?UTF-8?q?=E3=81=AA=E3=81=A3=E3=81=A6=E3=81=84=E3=81=9F=E3=81=AE=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_lang_en_US/Makefile | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/sakura_lang_en_US/Makefile b/sakura_lang_en_US/Makefile index 817a730586..20fc942c95 100644 --- a/sakura_lang_en_US/Makefile +++ b/sakura_lang_en_US/Makefile @@ -37,12 +37,16 @@ MKDIR = md RM = del DIRSEP = $(strip \ ) DEVNULL = NUL +ICONV = C:\msys64\usr\bin\iconv.exe +SED = C:\msys64\usr\bin\sed.exe else # If unix-like shell is used. MKDIR = mkdir -p RM = rm -f DIRSEP = / DEVNULL = /dev/null +ICONV = iconv +SED = sed endif ifndef PREFIX @@ -97,9 +101,12 @@ ifneq ($(SAKURA_CORE),.) endif $(MAKE) -f $< -C $(@D) $(@F) -sakura_lang_rc.o: sakura_lang_rc.rc $(sakura_rc) +sakura_lang_rc.o: sakura_lang_rc.rc.utf8 sakura_lang_rc.rc2.utf8 $(sakura_rc) $(RC) -c utf-8 --language=0409 $(DEFINES) -I$(SAKURA_CORE) -I$(SRCDIR)/../sakura_core $< -o $@ +sakura_lang_rc.rc.utf8 sakura_lang_rc.rc2.utf8: sakura_lang_rc.rc sakura_lang_rc.rc2 + $(ICONV) -f utf-16 -t utf-8 $(SRCDIR)/$(subst .utf8,,$(@F)) | $(SED) -e 1i'#pragma code_page(65001)' -e '/#include/s/.rc2\b/.rc2.utf8/' > $@ + clean: -$(RM) $(subst /,$(DIRSEP),$(dll) $(OBJS)) From 9c5387b181b0aa0b275daaaab0155f948f3d8493 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 10 May 2021 19:05:38 +0900 Subject: [PATCH 0677/1024] =?UTF-8?q?7z=E3=81=AE=E3=83=91=E3=82=B9?= =?UTF-8?q?=E3=82=92=E8=A8=82=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit windows向けの7zではなくmsys2版のパスを記載するよう修正 --- sakura_core/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/Makefile b/sakura_core/Makefile index 6348d1c88f..1dad0cf0e0 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -31,7 +31,7 @@ DIRSEP = $(strip \ ) DEVNULL = NUL ICONV = C:\msys64\usr\bin\iconv.exe SED = C:\msys64\usr\bin\sed.exe -P7Z = "C:\Program Files\7-Zip\7z.exe" +P7Z = C:\msys64\usr\bin\7z else # If unix-like shell is used. MKDIR = mkdir -p From a4b3fd1dcdb4a238c497756dbd01ec487f59dbfc Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 10 May 2021 19:10:57 +0900 Subject: [PATCH 0678/1024] =?UTF-8?q?SonarScan=E3=81=AB=E3=83=A2=E3=82=B8?= =?UTF-8?q?=E3=83=A5=E3=83=BC=E3=83=AB=E3=82=92=E6=A4=9C=E7=B4=A2=E3=82=92?= =?UTF-8?q?=E5=B0=8E=E5=85=A5=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/sonarscan.yml | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/.github/workflows/sonarscan.yml b/.github/workflows/sonarscan.yml index a014ae65a7..088813a861 100644 --- a/.github/workflows/sonarscan.yml +++ b/.github/workflows/sonarscan.yml @@ -98,16 +98,17 @@ jobs: env: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} if: env.SONAR_TOKEN - shell: cmd - run: OpenCppCoverage.exe - --export_type xml:tests1-coverage.xml - --modules ${{ github.workspace }}\tests\build\${{ env.BUILD_PLATFORM }}\${{ env.BUILD_CONFIGURATION }}\unittests\tests1.exe - --sources ${{ github.workspace }} - --excluded_sources ${{ github.workspace }}\tests\googletest - --working_dir .\${{ env.BUILD_PLATFORM }}\${{ env.BUILD_CONFIGURATION }} - --cover_children - -- - .\tests\build\${{ env.BUILD_PLATFORM }}\${{ env.BUILD_CONFIGURATION }}\unittests\tests1.exe + run: | + $env:CMD_TESTS1 = $(Get-ChildItem -Recurse tests1.exe)[0].FullName + OpenCppCoverage.exe ` + --export_type xml:tests1-coverage.xml ` + --modules $env:CMD_TESTS1 ` + --sources ${{ github.workspace }} ` + --excluded_sources ${{ github.workspace }}\tests\googletest ` + --working_dir .\${{ env.BUILD_PLATFORM }}\${{ env.BUILD_CONFIGURATION }} ` + --cover_children ` + -- ` + $env:CMD_TESTS1 ` --gtest_output=xml:${{ github.workspace }}\tests1-googletest.xml - name: Set up JDK 11 @@ -147,4 +148,4 @@ jobs: -D"sonar.cfamily.threads=2" ` -D"sonar.coverage.exclusions=help\**\*.js,tests\unittests\coverage.cpp,tools\**\*.js" ` -D"sonar.coverageReportPaths=tests1-coverage.xml" ` - -D"sonar.exclusions=.sonar\**\*,bw-output\**\*,HeaderMake\**\*,tests\build\**\*,tests\googletest\**\*,**\test-*,tests*-*.xml" + -D"sonar.exclusions=.sonar\**\*,build\**\*,bw-output\**\*,HeaderMake\**\*,tests\build\**\*,tests\googletest\**\*,**\test-*,tests*-*.xml" From a9b3796b4cab2cf38b117f7e6a761049888b3564 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sat, 1 May 2021 00:39:42 +0900 Subject: [PATCH 0679/1024] =?UTF-8?q?=E3=82=AA=E3=83=BC=E3=83=90=E3=83=BC?= =?UTF-8?q?=E3=83=98=E3=83=83=E3=83=89=E5=89=8A=E6=B8=9B=E3=81=A8=E3=82=BF?= =?UTF-8?q?=E3=82=A4=E3=83=9E=E3=83=BC=E5=88=86=E8=A7=A3=E8=83=BD=E5=90=91?= =?UTF-8?q?=E4=B8=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/debug/CRunningTimer.cpp | 46 +++++++++++++++++++++++++---- sakura_core/debug/CRunningTimer.h | 13 ++++++-- 2 files changed, 51 insertions(+), 8 deletions(-) diff --git a/sakura_core/debug/CRunningTimer.cpp b/sakura_core/debug/CRunningTimer.cpp index fa80864ea9..a22e7612d8 100644 --- a/sakura_core/debug/CRunningTimer.cpp +++ b/sakura_core/debug/CRunningTimer.cpp @@ -29,31 +29,34 @@ int CRunningTimer::m_nNestCount = 0; CRunningTimer::CRunningTimer( const char* pszText ) { + ::QueryPerformanceFrequency( &m_nPerformanceFrequency ); + Reset(); + if( pszText != NULL ) strcpy( m_szText, pszText ); else m_szText[0] = '\0'; m_nDeapth = m_nNestCount++; - MYTRACE( L"%3d:\"%hs\" : Enter \n", m_nDeapth, m_szText ); + OutputTrace( m_nStartTime, "Enter", OutputTiming::Enter ); return; } CRunningTimer::~CRunningTimer() { - WriteTrace("Exit Scope"); + OutputTrace( GetTime(), "Exit Scope" ); m_nNestCount--; return; } void CRunningTimer::Reset() { - m_nStartTime = timeGetTime(); + m_nStartTime = GetTime(); } DWORD CRunningTimer::Read() { - return timeGetTime() - m_nStartTime; + return (DWORD)(GetTime() - m_nStartTime); } /*! @@ -61,6 +64,39 @@ DWORD CRunningTimer::Read() */ void CRunningTimer::WriteTrace(const char* msg) const { - MYTRACE( L"%3d:\"%hs\", %d㍉秒 : %hs\n", m_nDeapth, m_szText, timeGetTime() - m_nStartTime, msg ); + OutputTrace( GetTime(), msg ); +} + +void CRunningTimer::OutputTrace( double nCurrentTime, const char* msg, OutputTiming timing ) const +{ + if( timing == OutputTiming::Enter ) + { + Output( L"%3d:\"%hs\" : %hs \n", m_nDeapth, m_szText, msg ); + } + else + { + Output( L"%3d:\"%hs\", %d㍉秒 : %hs\n", m_nDeapth, m_szText, (int)(nCurrentTime - m_nStartTime), msg ); + } +} + +double CRunningTimer::GetTime() const +{ + LARGE_INTEGER nCounter; + ::QueryPerformanceCounter( &nCounter ); + return (double)nCounter.QuadPart / m_nPerformanceFrequency.QuadPart * 1000.0; +} + +void CRunningTimer::Output( std::wstring_view fmt, ... ) const +{ + va_list args; + va_start( args, fmt ); + + std::wstring str; + vstrprintf( str, fmt.data(), args ); + + va_end( args ); + + OutputDebugStringW( str.data() ); } + #endif diff --git a/sakura_core/debug/CRunningTimer.h b/sakura_core/debug/CRunningTimer.h index f2a6835830..fdf5b825bc 100644 --- a/sakura_core/debug/CRunningTimer.h +++ b/sakura_core/debug/CRunningTimer.h @@ -70,9 +70,16 @@ class CRunningTimer void WriteTrace(const char* msg = "") const; protected: - DWORD m_nStartTime; - char m_szText[100]; //!< タイマー名 - int m_nDeapth; //!< このオブジェクトのネストの深さ + double m_nStartTime; // 計測開始時間(ms) + char m_szText[100]; //!< タイマー名 + int m_nDeapth; //!< このオブジェクトのネストの深さ + LARGE_INTEGER m_nPerformanceFrequency; // 計時用 + + enum class OutputTiming { Normal, Enter }; + + double GetTime() const; + void OutputTrace( double time, const char* msg, OutputTiming timing = OutputTiming::Normal ) const; + void Output( std::wstring_view fmt, ... ) const; #ifdef _DEBUG static int m_nNestCount; From 44a3ab8712b6416530af4d757d69c4deb9f11f81 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sun, 2 May 2021 03:14:00 +0900 Subject: [PATCH 0680/1024] =?UTF-8?q?=E5=85=A5=E5=8A=9B=E6=96=87=E5=AD=97?= =?UTF-8?q?=E5=88=97=E3=81=AE=E3=83=A6=E3=83=8B=E3=82=B3=E3=83=BC=E3=83=89?= =?UTF-8?q?=E5=8C=96=E3=81=A8=E3=83=90=E3=83=83=E3=83=95=E3=82=A1=E3=82=AA?= =?UTF-8?q?=E3=83=BC=E3=83=90=E3=83=BC=E3=83=95=E3=83=AD=E3=83=BC=E7=99=BA?= =?UTF-8?q?=E7=94=9F=E5=87=A6=E7=90=86=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CDicMgr.cpp | 2 +- sakura_core/CGrepAgent.cpp | 2 +- sakura_core/_main/CCommandLine.cpp | 2 +- sakura_core/_main/CControlProcess.cpp | 6 +++--- sakura_core/_main/CControlTray.cpp | 2 +- sakura_core/_main/CNormalProcess.cpp | 14 ++++++------- sakura_core/_main/CProcessFactory.cpp | 2 +- sakura_core/_main/WinMain.cpp | 4 ++-- sakura_core/cmd/CViewCommander_Edit.cpp | 4 ++-- sakura_core/cmd/CViewCommander_File.cpp | 2 +- sakura_core/debug/CRunningTimer.cpp | 21 ++++++++----------- sakura_core/debug/CRunningTimer.h | 13 +++++++----- sakura_core/doc/CEditDoc.cpp | 6 +++--- sakura_core/doc/layout/CLayoutMgr.cpp | 4 ++-- .../doc/layout/CLayoutMgr_DoLayout.cpp | 2 +- sakura_core/doc/logic/CDocLineMgr.cpp | 2 +- sakura_core/env/CShareData.cpp | 2 +- sakura_core/macro/CSMacroMgr.cpp | 2 +- sakura_core/uiparts/CImageListMgr.cpp | 2 +- sakura_core/view/CEditView.cpp | 2 +- sakura_core/view/CEditView_Command_New.cpp | 6 +++--- sakura_core/window/CEditWnd.cpp | 4 ++-- 22 files changed, 53 insertions(+), 53 deletions(-) diff --git a/sakura_core/CDicMgr.cpp b/sakura_core/CDicMgr.cpp index ef698e0763..8489200783 100644 --- a/sakura_core/CDicMgr.cpp +++ b/sakura_core/CDicMgr.cpp @@ -49,7 +49,7 @@ BOOL CDicMgr::Search( ) { #ifdef _DEBUG - CRunningTimer cRunningTimer( "CDicMgr::Search" ); + CRunningTimer cRunningTimer( L"CDicMgr::Search" ); #endif long i; const wchar_t* pszDelimit = L" /// "; diff --git a/sakura_core/CGrepAgent.cpp b/sakura_core/CGrepAgent.cpp index 4b6e5af145..1e8e76931e 100644 --- a/sakura_core/CGrepAgent.cpp +++ b/sakura_core/CGrepAgent.cpp @@ -239,7 +239,7 @@ DWORD CGrepAgent::DoGrep( bool bGrepBackup ) { - MY_RUNNINGTIMER( cRunningTimer, "CEditView::DoGrep" ); + MY_RUNNINGTIMER( cRunningTimer, L"CEditView::DoGrep" ); // 再入不可 if( this->m_bGrepRunning ){ diff --git a/sakura_core/_main/CCommandLine.cpp b/sakura_core/_main/CCommandLine.cpp index 21a2ef0752..c69370c719 100644 --- a/sakura_core/_main/CCommandLine.cpp +++ b/sakura_core/_main/CCommandLine.cpp @@ -243,7 +243,7 @@ void CCommandLine::ParseKanjiCodeFromFileName(LPWSTR pszExeFileName, int cchExeF */ void CCommandLine::ParseCommandLine( LPCWSTR pszCmdLineSrc, bool bResponse ) { - MY_RUNNINGTIMER( cRunningTimer, "CCommandLine::Parse" ); + MY_RUNNINGTIMER( cRunningTimer, L"CCommandLine::Parse" ); WCHAR szPath[_MAX_PATH]; bool bFind = false; // ファイル名発見フラグ diff --git a/sakura_core/_main/CControlProcess.cpp b/sakura_core/_main/CControlProcess.cpp index d739941a18..d4334504b4 100644 --- a/sakura_core/_main/CControlProcess.cpp +++ b/sakura_core/_main/CControlProcess.cpp @@ -115,7 +115,7 @@ std::filesystem::path CControlProcess::GetPrivateIniFileName(const std::wstring& */ bool CControlProcess::InitializeProcess() { - MY_RUNNINGTIMER( cRunningTimer, "CControlProcess::InitializeProcess" ); + MY_RUNNINGTIMER( cRunningTimer, L"CControlProcess::InitializeProcess" ); // アプリケーション実行検出用(インストーラで使用) m_hMutex = ::CreateMutex( NULL, FALSE, GSTR_MUTEX_SAKURA ); @@ -171,12 +171,12 @@ bool CControlProcess::InitializeProcess() CSelectLang::ChangeLang( GetDllShareData().m_Common.m_sWindow.m_szLanguageDll ); RefreshString(); - MY_TRACETIME( cRunningTimer, "Before new CControlTray" ); + MY_TRACETIME( cRunningTimer, L"Before new CControlTray" ); /* タスクトレイにアイコン作成 */ m_pcTray = new CControlTray; - MY_TRACETIME( cRunningTimer, "After new CControlTray" ); + MY_TRACETIME( cRunningTimer, L"After new CControlTray" ); HWND hwnd = m_pcTray->Create( GetProcessInstance() ); if( !hwnd ){ diff --git a/sakura_core/_main/CControlTray.cpp b/sakura_core/_main/CControlTray.cpp index cefed045f0..e39d304c81 100644 --- a/sakura_core/_main/CControlTray.cpp +++ b/sakura_core/_main/CControlTray.cpp @@ -223,7 +223,7 @@ CControlTray::~CControlTray() /* 作成 */ HWND CControlTray::Create( HINSTANCE hInstance ) { - MY_RUNNINGTIMER( cRunningTimer, "CControlTray::Create" ); + MY_RUNNINGTIMER( cRunningTimer, L"CControlTray::Create" ); //同名同クラスのウィンドウが既に存在していたら、失敗 m_hInstance = hInstance; diff --git a/sakura_core/_main/CNormalProcess.cpp b/sakura_core/_main/CNormalProcess.cpp index d981a423f4..012ae52a88 100644 --- a/sakura_core/_main/CNormalProcess.cpp +++ b/sakura_core/_main/CNormalProcess.cpp @@ -73,7 +73,7 @@ CNormalProcess::~CNormalProcess() */ bool CNormalProcess::InitializeProcess() { - MY_RUNNINGTIMER( cRunningTimer, "NormalProcess::Init" ); + MY_RUNNINGTIMER( cRunningTimer, L"NormalProcess::Init" ); /* プロセス初期化の目印 */ HANDLE hMutex = _GetInitializeMutex(); // 2002/2/8 aroka 込み入っていたので分離 @@ -137,15 +137,15 @@ bool CNormalProcess::InitializeProcess() } // プラグイン読み込み - MY_TRACETIME( cRunningTimer, "Before Init Jack" ); + MY_TRACETIME( cRunningTimer, L"Before Init Jack" ); /* ジャック初期化 */ CJackManager::getInstance(); - MY_TRACETIME( cRunningTimer, "After Init Jack" ); + MY_TRACETIME( cRunningTimer, L"After Init Jack" ); - MY_TRACETIME( cRunningTimer, "Before Load Plugins" ); + MY_TRACETIME( cRunningTimer, L"Before Load Plugins" ); /* プラグイン読み込み */ CPluginManager::getInstance()->LoadAllPlugin(); - MY_TRACETIME( cRunningTimer, "After Load Plugins" ); + MY_TRACETIME( cRunningTimer, L"After Load Plugins" ); // エディタアプリケーションを作成。2007.10.23 kobake // グループIDを取得 @@ -168,7 +168,7 @@ bool CNormalProcess::InitializeProcess() bGrepMode = CCommandLine::getInstance()->IsGrepMode(); bGrepDlg = CCommandLine::getInstance()->IsGrepDlg(); - MY_TRACETIME( cRunningTimer, "CheckFile" ); + MY_TRACETIME( cRunningTimer, L"CheckFile" ); // -1: SetDocumentTypeWhenCreate での強制指定なし const CTypeConfig nType = (fi.m_szDocType[0] == '\0' ? CTypeConfig(-1) : CDocTypeManager().GetDocumentTypeOfExt(fi.m_szDocType)); @@ -478,7 +478,7 @@ void CNormalProcess::OnExitProcess() */ HANDLE CNormalProcess::_GetInitializeMutex() const { - MY_RUNNINGTIMER( cRunningTimer, "NormalProcess::_GetInitializeMutex" ); + MY_RUNNINGTIMER( cRunningTimer, L"NormalProcess::_GetInitializeMutex" ); HANDLE hMutex; const auto pszProfileName = CCommandLine::getInstance()->GetProfileName(); std::wstring strMutexInitName = GSTR_MUTEX_SAKURA_INIT; diff --git a/sakura_core/_main/CProcessFactory.cpp b/sakura_core/_main/CProcessFactory.cpp index 2fb7ec8944..d960e707be 100644 --- a/sakura_core/_main/CProcessFactory.cpp +++ b/sakura_core/_main/CProcessFactory.cpp @@ -169,7 +169,7 @@ bool CProcessFactory::IsExistControlProcess() */ bool CProcessFactory::StartControlProcess() { - MY_RUNNINGTIMER(cRunningTimer,"StartControlProcess" ); + MY_RUNNINGTIMER(cRunningTimer,L"StartControlProcess" ); // プロセスの起動 PROCESS_INFORMATION p; diff --git a/sakura_core/_main/WinMain.cpp b/sakura_core/_main/WinMain.cpp index 995bc2bb2f..59eee1c13e 100644 --- a/sakura_core/_main/WinMain.cpp +++ b/sakura_core/_main/WinMain.cpp @@ -85,7 +85,7 @@ int WINAPI wWinMain( ::_CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF | _CRTDBG_ALLOC_MEM_DF); #endif - MY_RUNNINGTIMER(cRunningTimer, "WinMain" ); + MY_RUNNINGTIMER(cRunningTimer, L"WinMain" ); { // 2014.04.24 DLLの検索パスからカレントディレクトリを削除する ::SetDllDirectory( L"" ); @@ -107,7 +107,7 @@ int WINAPI wWinMain( CProcess *process = 0; try{ process = aFactory.Create( hInstance, lpCmdLine ); - MY_TRACETIME( cRunningTimer, "ProcessObject Created" ); + MY_TRACETIME( cRunningTimer, L"ProcessObject Created" ); } catch(...){ } diff --git a/sakura_core/cmd/CViewCommander_Edit.cpp b/sakura_core/cmd/CViewCommander_Edit.cpp index adacbae8cd..fbe2b8cf31 100644 --- a/sakura_core/cmd/CViewCommander_Edit.cpp +++ b/sakura_core/cmd/CViewCommander_Edit.cpp @@ -297,7 +297,7 @@ void CViewCommander::Command_UNDO( void ) return; } - MY_RUNNINGTIMER( cRunningTimer, "CViewCommander::Command_UNDO()" ); + MY_RUNNINGTIMER( cRunningTimer, L"CViewCommander::Command_UNDO()" ); COpe* pcOpe = NULL; @@ -554,7 +554,7 @@ void CViewCommander::Command_REDO( void ) if( !GetDocument()->m_cDocEditor.IsEnableRedo() ){ /* Redo(やり直し)可能な状態か? */ return; } - MY_RUNNINGTIMER( cRunningTimer, "CViewCommander::Command_REDO()" ); + MY_RUNNINGTIMER( cRunningTimer, L"CViewCommander::Command_REDO()" ); COpe* pcOpe = NULL; COpeBlk* pcOpeBlk; diff --git a/sakura_core/cmd/CViewCommander_File.cpp b/sakura_core/cmd/CViewCommander_File.cpp index 13ffa00009..251ea0c312 100644 --- a/sakura_core/cmd/CViewCommander_File.cpp +++ b/sakura_core/cmd/CViewCommander_File.cpp @@ -502,7 +502,7 @@ void CViewCommander::Command_PROPERTY_FILE( void ) /* 全行データを返すテスト */ wchar_t* pDataAll; int nDataAllLen; - CRunningTimer cRunningTimer( "CViewCommander::Command_PROPERTY_FILE 全行データを返すテスト" ); + CRunningTimer cRunningTimer( L"CViewCommander::Command_PROPERTY_FILE 全行データを返すテスト" ); cRunningTimer.Reset(); pDataAll = CDocReader(GetDocument()->m_cDocLineMgr).GetAllData( &nDataAllLen ); // MYTRACE( L"全データ取得 (%dバイト) 所要時間(ミリ秒) = %d\n", nDataAllLen, cRunningTimer.Read() ); diff --git a/sakura_core/debug/CRunningTimer.cpp b/sakura_core/debug/CRunningTimer.cpp index a22e7612d8..4c8abbe0fa 100644 --- a/sakura_core/debug/CRunningTimer.cpp +++ b/sakura_core/debug/CRunningTimer.cpp @@ -27,24 +27,21 @@ int CRunningTimer::m_nNestCount = 0; -CRunningTimer::CRunningTimer( const char* pszText ) +CRunningTimer::CRunningTimer( std::wstring_view name ) : + m_timerName( name ) { ::QueryPerformanceFrequency( &m_nPerformanceFrequency ); Reset(); - if( pszText != NULL ) - strcpy( m_szText, pszText ); - else - m_szText[0] = '\0'; - m_nDeapth = m_nNestCount++; - OutputTrace( m_nStartTime, "Enter", OutputTiming::Enter ); + m_nDepth = m_nNestCount++; + OutputTrace( m_nStartTime, L"Enter", OutputTiming::Enter ); return; } CRunningTimer::~CRunningTimer() { - OutputTrace( GetTime(), "Exit Scope" ); + OutputTrace( GetTime(), L"Exit Scope" ); m_nNestCount--; return; } @@ -62,20 +59,20 @@ DWORD CRunningTimer::Read() /*! @date 2002.10.15 genta */ -void CRunningTimer::WriteTrace(const char* msg) const +void CRunningTimer::WriteTrace( std::wstring_view msg ) const { OutputTrace( GetTime(), msg ); } -void CRunningTimer::OutputTrace( double nCurrentTime, const char* msg, OutputTiming timing ) const +void CRunningTimer::OutputTrace( double nCurrentTime, std::wstring_view msg, OutputTiming timing ) const { if( timing == OutputTiming::Enter ) { - Output( L"%3d:\"%hs\" : %hs \n", m_nDeapth, m_szText, msg ); + Output( L"%3d:\"%s\" : %s \n", m_nDepth, m_timerName.c_str(), msg.data() ); } else { - Output( L"%3d:\"%hs\", %d㍉秒 : %hs\n", m_nDeapth, m_szText, (int)(nCurrentTime - m_nStartTime), msg ); + Output( L"%3d:\"%s\", %d㍉秒 : %s\n", m_nDepth, m_timerName.c_str(), (int)(nCurrentTime - m_nStartTime), msg.data() ); } } diff --git a/sakura_core/debug/CRunningTimer.h b/sakura_core/debug/CRunningTimer.h index fdf5b825bc..d2112f1ae0 100644 --- a/sakura_core/debug/CRunningTimer.h +++ b/sakura_core/debug/CRunningTimer.h @@ -37,6 +37,9 @@ #pragma once #include +#include +#include + // RunningTimerで経過時間の測定を行う場合にはコメントを外してください //#define TIME_MEASURE @@ -58,7 +61,7 @@ class CRunningTimer /* || Constructors */ - CRunningTimer( const char* Text = NULL); + CRunningTimer( std::wstring_view name = L"" ); ~CRunningTimer(); /* @@ -67,18 +70,18 @@ class CRunningTimer void Reset(); DWORD Read(); - void WriteTrace(const char* msg = "") const; + void WriteTrace( std::wstring_view msg = L"" ) const; protected: double m_nStartTime; // 計測開始時間(ms) - char m_szText[100]; //!< タイマー名 - int m_nDeapth; //!< このオブジェクトのネストの深さ + std::wstring m_timerName; // タイマー名 + int m_nDepth; // このオブジェクトのネストの深さ LARGE_INTEGER m_nPerformanceFrequency; // 計時用 enum class OutputTiming { Normal, Enter }; double GetTime() const; - void OutputTrace( double time, const char* msg, OutputTiming timing = OutputTiming::Normal ) const; + void OutputTrace( double time, std::wstring_view msg, OutputTiming timing = OutputTiming::Normal ) const; void Output( std::wstring_view fmt, ... ) const; #ifdef _DEBUG diff --git a/sakura_core/doc/CEditDoc.cpp b/sakura_core/doc/CEditDoc.cpp index bdf0364e20..a845fac8f9 100644 --- a/sakura_core/doc/CEditDoc.cpp +++ b/sakura_core/doc/CEditDoc.cpp @@ -174,7 +174,7 @@ CEditDoc::CEditDoc(CEditApp* pcApp) , m_nCommandExecNum( 0 ) /* コマンド実行回数 */ , m_hBackImg(NULL) { - MY_RUNNINGTIMER( cRunningTimer, "CEditDoc::CEditDoc" ); + MY_RUNNINGTIMER( cRunningTimer, L"CEditDoc::CEditDoc" ); // レイアウト管理情報の初期化 m_cLayoutMgr.Create( this, &m_cDocLineMgr ); @@ -420,7 +420,7 @@ void CEditDoc::InitAllView( void ) */ BOOL CEditDoc::Create( CEditWnd* pcEditWnd ) { - MY_RUNNINGTIMER( cRunningTimer, "CEditDoc::Create" ); + MY_RUNNINGTIMER( cRunningTimer, L"CEditDoc::Create" ); m_pcEditWnd = pcEditWnd; @@ -429,7 +429,7 @@ BOOL CEditDoc::Create( CEditWnd* pcEditWnd ) SetBackgroundImage(); - MY_TRACETIME( cRunningTimer, "End: PropSheet" ); + MY_TRACETIME( cRunningTimer, L"End: PropSheet" ); return TRUE; } diff --git a/sakura_core/doc/layout/CLayoutMgr.cpp b/sakura_core/doc/layout/CLayoutMgr.cpp index dc09c52a1e..47b6e7c82d 100644 --- a/sakura_core/doc/layout/CLayoutMgr.cpp +++ b/sakura_core/doc/layout/CLayoutMgr.cpp @@ -123,7 +123,7 @@ void CLayoutMgr::SetLayoutInfo( CCharWidthCache& cache ) { - MY_RUNNINGTIMER( cRunningTimer, "CLayoutMgr::SetLayoutInfo" ); + MY_RUNNINGTIMER( cRunningTimer, L"CLayoutMgr::SetLayoutInfo" ); assert_warning( (!bDoLayout && m_nMaxLineKetas == nMaxLineKetas) || bDoLayout ); assert_warning( (!bDoLayout && m_nTabSpace == refType.m_nTabSpace) || bDoLayout ); @@ -616,7 +616,7 @@ CLayout* CLayoutMgr::DeleteLayoutAsLogical( /* 論理行が挿入された場合は0より大きい行数 */ void CLayoutMgr::ShiftLogicalLineNum( CLayout* pLayoutPrev, CLogicInt nShiftLines ) { - MY_RUNNINGTIMER( cRunningTimer, "CLayoutMgr::ShiftLogicalLineNum" ); + MY_RUNNINGTIMER( cRunningTimer, L"CLayoutMgr::ShiftLogicalLineNum" ); CLayout* pLayout; if( 0 == nShiftLines ){ diff --git a/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp b/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp index 10973b8f5d..cabbfcd265 100644 --- a/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp +++ b/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp @@ -357,7 +357,7 @@ void CLayoutMgr::_OnLine1(SLayoutWork* pWork) */ void CLayoutMgr::_DoLayout(bool bBlockingHook) { - MY_RUNNINGTIMER( cRunningTimer, "CLayoutMgr::_DoLayout" ); + MY_RUNNINGTIMER( cRunningTimer, L"CLayoutMgr::_DoLayout" ); /* 表示上のX位置 2004.03.28 Moca nPosXはインデント幅を含むように変更(TAB位置調整のため) diff --git a/sakura_core/doc/logic/CDocLineMgr.cpp b/sakura_core/doc/logic/CDocLineMgr.cpp index ff2d283073..4bd77233dd 100644 --- a/sakura_core/doc/logic/CDocLineMgr.cpp +++ b/sakura_core/doc/logic/CDocLineMgr.cpp @@ -162,7 +162,7 @@ const CDocLine* CDocLineMgr::GetLine( CLogicInt nLine ) const || m_nLines - nLine < nPrevToLineNumDiff ){ if( m_pCodePrevRefer == NULL ){ - MY_RUNNINGTIMER( cRunningTimer, "CDocLineMgr::GetLine() m_pCodePrevRefer == NULL" ); + MY_RUNNINGTIMER( cRunningTimer, L"CDocLineMgr::GetLine() m_pCodePrevRefer == NULL" ); } if( nLine < (m_nLines / 2) ){ diff --git a/sakura_core/env/CShareData.cpp b/sakura_core/env/CShareData.cpp index 1f2b108747..efa09572b0 100644 --- a/sakura_core/env/CShareData.cpp +++ b/sakura_core/env/CShareData.cpp @@ -110,7 +110,7 @@ CMutex& CShareData::GetMutexShareWork(){ */ bool CShareData::InitShareData() { - MY_RUNNINGTIMER(cRunningTimer,"CShareData::InitShareData" ); + MY_RUNNINGTIMER(cRunningTimer,L"CShareData::InitShareData" ); m_hwndTraceOutSource = NULL; // 2006.06.26 ryoji diff --git a/sakura_core/macro/CSMacroMgr.cpp b/sakura_core/macro/CSMacroMgr.cpp index 2b40524580..ae15a56b3a 100644 --- a/sakura_core/macro/CSMacroMgr.cpp +++ b/sakura_core/macro/CSMacroMgr.cpp @@ -491,7 +491,7 @@ MacroFuncInfo CSMacroMgr::m_MacroFuncInfoArr[] = */ CSMacroMgr::CSMacroMgr() { - MY_RUNNINGTIMER( cRunningTimer, "CSMacroMgr::CSMacroMgr" ); + MY_RUNNINGTIMER( cRunningTimer, L"CSMacroMgr::CSMacroMgr" ); m_pShareData = &GetDllShareData(); diff --git a/sakura_core/uiparts/CImageListMgr.cpp b/sakura_core/uiparts/CImageListMgr.cpp index 9c81c74f41..7e21da82b9 100644 --- a/sakura_core/uiparts/CImageListMgr.cpp +++ b/sakura_core/uiparts/CImageListMgr.cpp @@ -148,7 +148,7 @@ HBITMAP ConvertTo32bppBMP(HBITMAP hbmpSrc) */ bool CImageListMgr::Create(HINSTANCE hInstance) { - MY_RUNNINGTIMER( cRunningTimer, "CImageListMgr::Create" ); + MY_RUNNINGTIMER( cRunningTimer, L"CImageListMgr::Create" ); if( m_hIconBitmap != NULL ){ // 既に構築済みなら無視する return true; } diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index 0af4366993..a29b93c715 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -1201,7 +1201,7 @@ bool CEditView::IsCurrentPositionURL( std::wstring* pstrURL //!< [out] URL文字列受け取り先。NULLを指定した場合はURL文字列を受け取らない。 ) { - MY_RUNNINGTIMER( cRunningTimer, "CEditView::IsCurrentPositionURL" ); + MY_RUNNINGTIMER( cRunningTimer, L"CEditView::IsCurrentPositionURL" ); // URLを強調表示するかどうかチェックする // 2009.05.27 ryoji bool bDispUrl = CTypeSupport(this,COLORIDX_URL).IsDisp(); diff --git a/sakura_core/view/CEditView_Command_New.cpp b/sakura_core/view/CEditView_Command_New.cpp index a6f1e67098..b4a2152bd8 100644 --- a/sakura_core/view/CEditView_Command_New.cpp +++ b/sakura_core/view/CEditView_Command_New.cpp @@ -74,7 +74,7 @@ void CEditView::InsertData_CEditView( ) { #ifdef _DEBUG - MY_RUNNINGTIMER( cRunningTimer, "CEditView::InsertData_CEditView" ); + MY_RUNNINGTIMER( cRunningTimer, L"CEditView::InsertData_CEditView" ); #endif //2007.10.18 kobake COpe処理をここにまとめる @@ -359,7 +359,7 @@ void CEditView::DeleteData2( ) { #ifdef _DEBUG - MY_RUNNINGTIMER( cRunningTimer, "CEditView::DeleteData(1)" ); + MY_RUNNINGTIMER( cRunningTimer, L"CEditView::DeleteData(1)" ); #endif const wchar_t* pLine; CLogicInt nLineLen; @@ -442,7 +442,7 @@ void CEditView::DeleteData( ) { #ifdef _DEBUG - MY_RUNNINGTIMER( cRunningTimer, "CEditView::DeleteData(2)" ); + MY_RUNNINGTIMER( cRunningTimer, L"CEditView::DeleteData(2)" ); #endif const wchar_t* pLine; CLogicInt nLineLen; diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index ce4f85506b..5b16b2f0fa 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -585,7 +585,7 @@ HWND CEditWnd::Create( int nGroup //!< [in] グループID ) { - MY_RUNNINGTIMER( cRunningTimer, "CEditWnd::Create" ); + MY_RUNNINGTIMER( cRunningTimer, L"CEditWnd::Create" ); /* 共有データ構造体のアドレスを返す */ m_pShareData = &GetDllShareData(); @@ -683,7 +683,7 @@ HWND CEditWnd::Create( hWndArr[1] = NULL; m_cSplitterWnd.SetChildWndArr( hWndArr ); - MY_TRACETIME( cRunningTimer, "View created" ); + MY_TRACETIME( cRunningTimer, L"View created" ); // -- -- -- -- 各種バー作成 -- -- -- -- // From 426234278cc899302ac58be7fd656ccd69c9cb74 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Thu, 6 May 2021 02:00:15 +0900 Subject: [PATCH 0681/1024] =?UTF-8?q?=E8=A8=88=E6=B8=AC=E7=94=A8=E3=82=BF?= =?UTF-8?q?=E3=82=A4=E3=83=9E=E3=83=BC=E3=82=92std::chrono::high=5Fresolut?= =?UTF-8?q?ion=5Fclock=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/debug/CRunningTimer.cpp | 30 +++++++++++++++-------------- sakura_core/debug/CRunningTimer.h | 14 ++++++++++---- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/sakura_core/debug/CRunningTimer.cpp b/sakura_core/debug/CRunningTimer.cpp index 4c8abbe0fa..40e64c2d9b 100644 --- a/sakura_core/debug/CRunningTimer.cpp +++ b/sakura_core/debug/CRunningTimer.cpp @@ -25,17 +25,16 @@ #pragma comment(lib, "winmm.lib") +CRunningTimer::TimePoint CRunningTimer::m_initialTime = std::chrono::high_resolution_clock::now(); int CRunningTimer::m_nNestCount = 0; CRunningTimer::CRunningTimer( std::wstring_view name ) : m_timerName( name ) { - ::QueryPerformanceFrequency( &m_nPerformanceFrequency ); - Reset(); m_nDepth = m_nNestCount++; - OutputTrace( m_nStartTime, L"Enter", OutputTiming::Enter ); + OutputTrace( m_startTime, L"Enter", OutputTiming::Enter ); return; } @@ -48,12 +47,12 @@ CRunningTimer::~CRunningTimer() void CRunningTimer::Reset() { - m_nStartTime = GetTime(); + m_startTime = GetTime(); } DWORD CRunningTimer::Read() { - return (DWORD)(GetTime() - m_nStartTime); + return (DWORD)(GetElapsedTimeInSeconds( m_startTime, GetTime() ) * 1000.0); } /*! @@ -64,7 +63,17 @@ void CRunningTimer::WriteTrace( std::wstring_view msg ) const OutputTrace( GetTime(), msg ); } -void CRunningTimer::OutputTrace( double nCurrentTime, std::wstring_view msg, OutputTiming timing ) const +double CRunningTimer::GetElapsedTimeInSeconds( TimePoint from, TimePoint to ) +{ + return (double)std::chrono::duration_cast( to - from ).count() / 1000.0 / 1000.0 / 1000.0; +} + +CRunningTimer::TimePoint CRunningTimer::GetTime() const +{ + return std::chrono::high_resolution_clock::now(); +} + +void CRunningTimer::OutputTrace( TimePoint currentTime, std::wstring_view msg, OutputTiming timing ) const { if( timing == OutputTiming::Enter ) { @@ -72,17 +81,10 @@ void CRunningTimer::OutputTrace( double nCurrentTime, std::wstring_view msg, Out } else { - Output( L"%3d:\"%s\", %d㍉秒 : %s\n", m_nDepth, m_timerName.c_str(), (int)(nCurrentTime - m_nStartTime), msg.data() ); + Output( L"%3d:\"%s\", %d㍉秒 : %s\n", m_nDepth, m_timerName.c_str(), (int)(GetElapsedTimeInSeconds( m_startTime, currentTime ) * 1000.0), msg.data() ); } } -double CRunningTimer::GetTime() const -{ - LARGE_INTEGER nCounter; - ::QueryPerformanceCounter( &nCounter ); - return (double)nCounter.QuadPart / m_nPerformanceFrequency.QuadPart * 1000.0; -} - void CRunningTimer::Output( std::wstring_view fmt, ... ) const { va_list args; diff --git a/sakura_core/debug/CRunningTimer.h b/sakura_core/debug/CRunningTimer.h index d2112f1ae0..da52ea19a8 100644 --- a/sakura_core/debug/CRunningTimer.h +++ b/sakura_core/debug/CRunningTimer.h @@ -39,6 +39,7 @@ #include #include #include +#include // RunningTimerで経過時間の測定を行う場合にはコメントを外してください //#define TIME_MEASURE @@ -69,19 +70,24 @@ class CRunningTimer */ void Reset(); DWORD Read(); - + void WriteTrace( std::wstring_view msg = L"" ) const; protected: - double m_nStartTime; // 計測開始時間(ms) + typedef std::chrono::high_resolution_clock::time_point TimePoint; + + static TimePoint m_initialTime; // タイムスタンプ基準時間 + + TimePoint m_startTime; // 計測開始時間 std::wstring m_timerName; // タイマー名 int m_nDepth; // このオブジェクトのネストの深さ LARGE_INTEGER m_nPerformanceFrequency; // 計時用 enum class OutputTiming { Normal, Enter }; - double GetTime() const; - void OutputTrace( double time, std::wstring_view msg, OutputTiming timing = OutputTiming::Normal ) const; + static double GetElapsedTimeInSeconds( TimePoint from, TimePoint to ); + TimePoint GetTime() const; + void OutputTrace( TimePoint currentTime, std::wstring_view msg, OutputTiming timing = OutputTiming::Normal ) const; void Output( std::wstring_view fmt, ... ) const; #ifdef _DEBUG From 41597420380e54f8875d8089e4ba4b55f39136dc Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sun, 2 May 2021 03:52:46 +0900 Subject: [PATCH 0682/1024] =?UTF-8?q?Markdown=E8=A1=A8=E5=BD=A2=E5=BC=8F?= =?UTF-8?q?=E3=81=A7=E3=81=AE=E8=A8=88=E6=B8=AC=E7=B5=90=E6=9E=9C=E5=87=BA?= =?UTF-8?q?=E5=8A=9B=E3=82=92=E3=82=B5=E3=83=9D=E3=83=BC=E3=83=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/debug/CRunningTimer.cpp | 98 ++++++++++++++++++++++++++--- sakura_core/debug/CRunningTimer.h | 19 ++++-- 2 files changed, 102 insertions(+), 15 deletions(-) diff --git a/sakura_core/debug/CRunningTimer.cpp b/sakura_core/debug/CRunningTimer.cpp index 40e64c2d9b..ba9b3f0141 100644 --- a/sakura_core/debug/CRunningTimer.cpp +++ b/sakura_core/debug/CRunningTimer.cpp @@ -28,19 +28,42 @@ CRunningTimer::TimePoint CRunningTimer::m_initialTime = std::chrono::high_resolution_clock::now(); int CRunningTimer::m_nNestCount = 0; -CRunningTimer::CRunningTimer( std::wstring_view name ) : - m_timerName( name ) +CRunningTimer::CRunningTimer( std::wstring_view name, OutputStyle style ) : + m_timerName( name ), + m_nNameOutputWidthMin( 40 ), + m_outputStyle( style ) { Reset(); + if( m_timerName.length() == 0 && m_outputStyle == OutputStyle::Markdown ) + { + // 字下げ位置がわかるように何か文字列を入れておく + m_timerName = L"(no name)"; + } + + m_nNameOutputWidth = m_nNameOutputWidthMin; + if( m_nNameOutputWidth < m_timerName.size() ) + { + m_nNameOutputWidth = m_timerName.size(); + } + m_nDepth = m_nNestCount++; - OutputTrace( m_startTime, L"Enter", OutputTiming::Enter ); + if( m_nDepth == 0 ) + { + OutputHeader(); + } + OutputTrace( m_startTime, TraceType::Enter ); + return; } CRunningTimer::~CRunningTimer() { - OutputTrace( GetTime(), L"Exit Scope" ); + OutputTrace( GetTime(), TraceType::ExitScope ); + if( m_nDepth == 0 ) + { + OutputFooter(); + } m_nNestCount--; return; } @@ -48,6 +71,7 @@ CRunningTimer::~CRunningTimer() void CRunningTimer::Reset() { m_startTime = GetTime(); + m_lastTime = m_startTime; } DWORD CRunningTimer::Read() @@ -58,9 +82,11 @@ DWORD CRunningTimer::Read() /*! @date 2002.10.15 genta */ -void CRunningTimer::WriteTrace( std::wstring_view msg ) const +void CRunningTimer::WriteTrace( std::wstring_view msg ) { - OutputTrace( GetTime(), msg ); + auto currentTime = GetTime(); + OutputTrace( currentTime, TraceType::Normal, msg ); + m_lastTime = currentTime; } double CRunningTimer::GetElapsedTimeInSeconds( TimePoint from, TimePoint to ) @@ -73,15 +99,67 @@ CRunningTimer::TimePoint CRunningTimer::GetTime() const return std::chrono::high_resolution_clock::now(); } -void CRunningTimer::OutputTrace( TimePoint currentTime, std::wstring_view msg, OutputTiming timing ) const +void CRunningTimer::OutputHeader() const +{ + if( m_outputStyle == OutputStyle::Markdown ) + { + Output( L"| timestamp (s) | %-*s | time (ms) | diff (ms) | message\n", m_nNameOutputWidth, L"name" ); + Output( L"|--------------:|-%.*s-|----------:|----------:|--------\n", m_nNameOutputWidth, L"----------------------------------------------------------------------------------------------------" ); + } + else + { + ; + } +} + +void CRunningTimer::OutputFooter() const +{ + if( m_outputStyle == OutputStyle::Markdown ) + { + Output( L"\n" ); + } + else + { + ; + } +} + +void CRunningTimer::OutputTrace( TimePoint currentTime, TraceType traceType, std::wstring_view msg ) const { - if( timing == OutputTiming::Enter ) + if( m_outputStyle == OutputStyle::Markdown ) { - Output( L"%3d:\"%s\" : %s \n", m_nDepth, m_timerName.c_str(), msg.data() ); + msg = + (traceType == TraceType::Enter) ? L"== Enter ==" : + (traceType == TraceType::ExitScope) ? L"== Exit Scope ==" : + msg; + Output( L"| %13.6f | %.*s%-*s | %9.3f | %9.3f | %s\n", + GetElapsedTimeInSeconds( m_initialTime, currentTime ), + m_nDepth * 2, L"_ _ _ _ _ _ _ _ _ _ ", (m_nNameOutputWidth - (m_nDepth * 2)), m_timerName.c_str(), + GetElapsedTimeInSeconds( m_startTime, currentTime ) * 1000.0, + GetElapsedTimeInSeconds( m_lastTime, currentTime ) * 1000.0, + msg.data() ); } else { - Output( L"%3d:\"%s\", %d㍉秒 : %s\n", m_nDepth, m_timerName.c_str(), (int)(GetElapsedTimeInSeconds( m_startTime, currentTime ) * 1000.0), msg.data() ); + msg = + (traceType == TraceType::Enter) ? L"Enter" : + (traceType == TraceType::ExitScope) ? L"Exit Scope" : + msg; + if( traceType == TraceType::Enter ) + { + Output( L"%3d:\"%s\" : %s\n", + m_nDepth, + m_timerName.c_str(), + msg.data() ); + } + else + { + Output( L"%3d:\"%s\", %d㍉秒 : %s\n", + m_nDepth, + m_timerName.c_str(), + (int)(GetElapsedTimeInSeconds( m_startTime, currentTime ) * 1000.0), + msg.data() ); + } } } diff --git a/sakura_core/debug/CRunningTimer.h b/sakura_core/debug/CRunningTimer.h index da52ea19a8..7479769399 100644 --- a/sakura_core/debug/CRunningTimer.h +++ b/sakura_core/debug/CRunningTimer.h @@ -59,10 +59,12 @@ class CRunningTimer { public: + enum class OutputStyle { Conventional, Markdown }; + /* || Constructors */ - CRunningTimer( std::wstring_view name = L"" ); + CRunningTimer( std::wstring_view name = L"", OutputStyle style = OutputStyle::Markdown ); ~CRunningTimer(); /* @@ -70,24 +72,31 @@ class CRunningTimer */ void Reset(); DWORD Read(); - - void WriteTrace( std::wstring_view msg = L"" ) const; + void WriteTrace( std::wstring_view msg = L"" ); protected: + enum class TraceType { Normal, Enter, ExitScope }; typedef std::chrono::high_resolution_clock::time_point TimePoint; static TimePoint m_initialTime; // タイムスタンプ基準時間 + const size_t m_nNameOutputWidthMin; // タイマー名最低出力幅(文字数) + TimePoint m_startTime; // 計測開始時間 + TimePoint m_lastTime; // 最後に出力した時間 std::wstring m_timerName; // タイマー名 int m_nDepth; // このオブジェクトのネストの深さ + OutputStyle m_outputStyle; // ログの出力形式 + size_t m_nNameOutputWidth; // タイマー名出力幅(文字数) LARGE_INTEGER m_nPerformanceFrequency; // 計時用 enum class OutputTiming { Normal, Enter }; static double GetElapsedTimeInSeconds( TimePoint from, TimePoint to ); TimePoint GetTime() const; - void OutputTrace( TimePoint currentTime, std::wstring_view msg, OutputTiming timing = OutputTiming::Normal ) const; + void OutputHeader() const; + void OutputFooter() const; + void OutputTrace( TimePoint currentTime, TraceType traceType, std::wstring_view msg = L"" ) const; void Output( std::wstring_view fmt, ... ) const; #ifdef _DEBUG @@ -99,7 +108,7 @@ class CRunningTimer // #ifdef _DEBUG~#endifで逐一囲まなくても簡単にタイマーのON/OFFを行うためのマクロ #if defined(_DEBUG) && defined(TIME_MEASURE) #define MY_TRACETIME(c,m) (c).WriteTrace(m) - #define MY_RUNNINGTIMER(c,m) CRunningTimer c(m) + #define MY_RUNNINGTIMER(c,m) CRunningTimer c(m, CRunningTimer::OutputStyle::Conventional) #else #define MY_TRACETIME(c,m) #define MY_RUNNINGTIMER(c,m) From ed78f8421c6d8c267e58394a5e1657167f6434cb Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sun, 2 May 2021 04:15:27 +0900 Subject: [PATCH 0683/1024] =?UTF-8?q?CRunningTimer=E3=82=AF=E3=83=A9?= =?UTF-8?q?=E3=82=B9=E3=82=92Release=E3=83=93=E3=83=AB=E3=83=89=E6=99=82?= =?UTF-8?q?=E3=81=AB=E3=82=82=E9=96=8B=E6=94=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/debug/CRunningTimer.cpp | 4 ---- sakura_core/debug/CRunningTimer.h | 28 ++++++++++++---------------- 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/sakura_core/debug/CRunningTimer.cpp b/sakura_core/debug/CRunningTimer.cpp index ba9b3f0141..e0d01c4a50 100644 --- a/sakura_core/debug/CRunningTimer.cpp +++ b/sakura_core/debug/CRunningTimer.cpp @@ -21,8 +21,6 @@ #include "_main/global.h" #include "debug/Debug2.h" -#ifdef _DEBUG - #pragma comment(lib, "winmm.lib") CRunningTimer::TimePoint CRunningTimer::m_initialTime = std::chrono::high_resolution_clock::now(); @@ -175,5 +173,3 @@ void CRunningTimer::Output( std::wstring_view fmt, ... ) const OutputDebugStringW( str.data() ); } - -#endif diff --git a/sakura_core/debug/CRunningTimer.h b/sakura_core/debug/CRunningTimer.h index 7479769399..f4bd611567 100644 --- a/sakura_core/debug/CRunningTimer.h +++ b/sakura_core/debug/CRunningTimer.h @@ -41,18 +41,26 @@ #include #include -// RunningTimerで経過時間の測定を行う場合にはコメントを外してください +// 本番コードに組み込まれている時間計測の結果を出力ペインに出したい時にコメントを外して下さい //#define TIME_MEASURE +#if defined(TIME_MEASURE) + #define MY_TRACETIME(c,m) (c).WriteTrace(m) + #define MY_RUNNINGTIMER(c,m) CRunningTimer c(m, CRunningTimer::OutputStyle::Conventional) +#else + #define MY_TRACETIME(c,m) + #define MY_RUNNINGTIMER(c,m) +#endif + /*----------------------------------------------------------------------- クラスの宣言 -----------------------------------------------------------------------*/ /*! @brief 処理所要時間の計測クラス - 定義の切り替えのみでタイマーのON/OFFを行えるようにするため, - このクラスを直接使わず,後ろにあるMY_RUNNINGTIMERとMY_TRACETIMEを - 使うこと. + 本番コードに時間計測箇所を組み込む場合には、 + このクラスを直接使わず代わりにMY_RUNNINGTIMER,MY_TRACETIMEマクロを使用して下さい。 + (計測が必要な時以外で出力ペインを計測ログが埋め尽くさないようにするため) @date 2002/10/16 genta WriteTrace及びマクロ追加 */ @@ -99,18 +107,6 @@ class CRunningTimer void OutputTrace( TimePoint currentTime, TraceType traceType, std::wstring_view msg = L"" ) const; void Output( std::wstring_view fmt, ... ) const; -#ifdef _DEBUG static int m_nNestCount; -#endif }; - -// Oct. 16, 2002 genta -// #ifdef _DEBUG~#endifで逐一囲まなくても簡単にタイマーのON/OFFを行うためのマクロ -#if defined(_DEBUG) && defined(TIME_MEASURE) - #define MY_TRACETIME(c,m) (c).WriteTrace(m) - #define MY_RUNNINGTIMER(c,m) CRunningTimer c(m, CRunningTimer::OutputStyle::Conventional) -#else - #define MY_TRACETIME(c,m) - #define MY_RUNNINGTIMER(c,m) -#endif #endif /* SAKURA_CRUNNINGTIMER_B4A1B7C4_EA83_41F2_9132_21DE3A57470D_H_ */ From 5767d5428175b4227a7b290fe9dc2500a32d71e5 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Thu, 6 May 2021 03:27:17 +0900 Subject: [PATCH 0684/1024] =?UTF-8?q?CodeSmell=E5=AF=BE=E5=BF=9C=E3=81=A8?= =?UTF-8?q?=E3=82=B3=E3=83=BC=E3=83=87=E3=82=A3=E3=83=B3=E3=82=B0=E3=82=B9?= =?UTF-8?q?=E3=82=BF=E3=82=A4=E3=83=AB=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/debug/CRunningTimer.cpp | 76 +++++++++++++---------------- sakura_core/debug/CRunningTimer.h | 29 +++++------ 2 files changed, 45 insertions(+), 60 deletions(-) diff --git a/sakura_core/debug/CRunningTimer.cpp b/sakura_core/debug/CRunningTimer.cpp index e0d01c4a50..cd0322654a 100644 --- a/sakura_core/debug/CRunningTimer.cpp +++ b/sakura_core/debug/CRunningTimer.cpp @@ -23,31 +23,26 @@ #pragma comment(lib, "winmm.lib") -CRunningTimer::TimePoint CRunningTimer::m_initialTime = std::chrono::high_resolution_clock::now(); int CRunningTimer::m_nNestCount = 0; +CRunningTimer::TimePoint CRunningTimer::m_initialTime = std::chrono::high_resolution_clock::now(); CRunningTimer::CRunningTimer( std::wstring_view name, OutputStyle style ) : m_timerName( name ), - m_nNameOutputWidthMin( 40 ), m_outputStyle( style ) { Reset(); - if( m_timerName.length() == 0 && m_outputStyle == OutputStyle::Markdown ) - { + if( m_timerName.length() == 0 && m_outputStyle == OutputStyle::Markdown ){ // 字下げ位置がわかるように何か文字列を入れておく m_timerName = L"(no name)"; } - m_nNameOutputWidth = m_nNameOutputWidthMin; - if( m_nNameOutputWidth < m_timerName.size() ) - { + if( m_nNameOutputWidth < m_timerName.size() ){ m_nNameOutputWidth = m_timerName.size(); } - m_nDepth = m_nNestCount++; - if( m_nDepth == 0 ) - { + m_nDepth = CRunningTimer::m_nNestCount++; + if( m_nDepth == 0 ){ OutputHeader(); } OutputTrace( m_startTime, TraceType::Enter ); @@ -58,8 +53,7 @@ CRunningTimer::CRunningTimer( std::wstring_view name, OutputStyle style ) : CRunningTimer::~CRunningTimer() { OutputTrace( GetTime(), TraceType::ExitScope ); - if( m_nDepth == 0 ) - { + if( m_nDepth == 0 ){ OutputFooter(); } m_nNestCount--; @@ -99,59 +93,55 @@ CRunningTimer::TimePoint CRunningTimer::GetTime() const void CRunningTimer::OutputHeader() const { - if( m_outputStyle == OutputStyle::Markdown ) - { + if( m_outputStyle == OutputStyle::Markdown ){ Output( L"| timestamp (s) | %-*s | time (ms) | diff (ms) | message\n", m_nNameOutputWidth, L"name" ); Output( L"|--------------:|-%.*s-|----------:|----------:|--------\n", m_nNameOutputWidth, L"----------------------------------------------------------------------------------------------------" ); - } - else - { - ; + }else{ + // 従来形式では出力するものなし } } void CRunningTimer::OutputFooter() const { - if( m_outputStyle == OutputStyle::Markdown ) - { + if( m_outputStyle == OutputStyle::Markdown ){ Output( L"\n" ); - } - else - { - ; + }else{ + // 従来形式では出力するものなし } } void CRunningTimer::OutputTrace( TimePoint currentTime, TraceType traceType, std::wstring_view msg ) const { - if( m_outputStyle == OutputStyle::Markdown ) - { - msg = - (traceType == TraceType::Enter) ? L"== Enter ==" : - (traceType == TraceType::ExitScope) ? L"== Exit Scope ==" : - msg; + if( m_outputStyle == OutputStyle::Markdown ){ + if( traceType == TraceType::Enter ){ + msg = L"== Enter =="; + }else if( traceType == TraceType::ExitScope ){ + msg = L"== Exit Scope =="; + }else{ + //msg = msg; + } + Output( L"| %13.6f | %.*s%-*s | %9.3f | %9.3f | %s\n", - GetElapsedTimeInSeconds( m_initialTime, currentTime ), + GetElapsedTimeInSeconds( CRunningTimer::m_initialTime, currentTime ), m_nDepth * 2, L"_ _ _ _ _ _ _ _ _ _ ", (m_nNameOutputWidth - (m_nDepth * 2)), m_timerName.c_str(), GetElapsedTimeInSeconds( m_startTime, currentTime ) * 1000.0, GetElapsedTimeInSeconds( m_lastTime, currentTime ) * 1000.0, msg.data() ); - } - else - { - msg = - (traceType == TraceType::Enter) ? L"Enter" : - (traceType == TraceType::ExitScope) ? L"Exit Scope" : - msg; - if( traceType == TraceType::Enter ) - { + }else{ + if( traceType == TraceType::Enter ){ + msg = L"Enter"; + }else if( traceType == TraceType::ExitScope ){ + msg = L"Exit Scope"; + }else{ + //msg = msg; + } + + if( traceType == TraceType::Enter ){ Output( L"%3d:\"%s\" : %s\n", m_nDepth, m_timerName.c_str(), msg.data() ); - } - else - { + }else{ Output( L"%3d:\"%s\", %d㍉秒 : %s\n", m_nDepth, m_timerName.c_str(), diff --git a/sakura_core/debug/CRunningTimer.h b/sakura_core/debug/CRunningTimer.h index f4bd611567..d93f394615 100644 --- a/sakura_core/debug/CRunningTimer.h +++ b/sakura_core/debug/CRunningTimer.h @@ -15,8 +15,8 @@ warranty. In no event will the authors be held liable for any damages arising from the use of this software. - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; @@ -25,7 +25,7 @@ in the product documentation would be appreciated but is not required. - 2. Altered source versions must be plainly marked as such, + 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source @@ -84,22 +84,11 @@ class CRunningTimer protected: enum class TraceType { Normal, Enter, ExitScope }; - typedef std::chrono::high_resolution_clock::time_point TimePoint; + using TimePoint = std::chrono::high_resolution_clock::time_point; + static int m_nNestCount; static TimePoint m_initialTime; // タイムスタンプ基準時間 - const size_t m_nNameOutputWidthMin; // タイマー名最低出力幅(文字数) - - TimePoint m_startTime; // 計測開始時間 - TimePoint m_lastTime; // 最後に出力した時間 - std::wstring m_timerName; // タイマー名 - int m_nDepth; // このオブジェクトのネストの深さ - OutputStyle m_outputStyle; // ログの出力形式 - size_t m_nNameOutputWidth; // タイマー名出力幅(文字数) - LARGE_INTEGER m_nPerformanceFrequency; // 計時用 - - enum class OutputTiming { Normal, Enter }; - static double GetElapsedTimeInSeconds( TimePoint from, TimePoint to ); TimePoint GetTime() const; void OutputHeader() const; @@ -107,6 +96,12 @@ class CRunningTimer void OutputTrace( TimePoint currentTime, TraceType traceType, std::wstring_view msg = L"" ) const; void Output( std::wstring_view fmt, ... ) const; - static int m_nNestCount; +private: + TimePoint m_startTime; // 計測開始時間 + TimePoint m_lastTime; // 最後に出力した時間 + std::wstring m_timerName; // タイマー名 + int m_nDepth; // このオブジェクトのネストの深さ + OutputStyle m_outputStyle; // ログの出力形式 + size_t m_nNameOutputWidth = 40; // タイマー名出力幅(文字数)(初期値は最小幅) }; #endif /* SAKURA_CRUNNINGTIMER_B4A1B7C4_EA83_41F2_9132_21DE3A57470D_H_ */ From 193d3726ec213bfe166f6313af096603277a12dc Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sun, 9 May 2021 10:22:27 +0900 Subject: [PATCH 0685/1024] =?UTF-8?q?=E3=83=AD=E3=82=B0=E5=87=BA=E5=8A=9B?= =?UTF-8?q?=E3=83=A2=E3=83=BC=E3=83=89/WriteTraceFormat=E3=81=AE=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/debug/CRunningTimer.cpp | 59 ++++++++++++++++++++---- sakura_core/debug/CRunningTimer.h | 69 +++++++++++++++++++++++++---- 2 files changed, 110 insertions(+), 18 deletions(-) diff --git a/sakura_core/debug/CRunningTimer.cpp b/sakura_core/debug/CRunningTimer.cpp index cd0322654a..b8a81bf508 100644 --- a/sakura_core/debug/CRunningTimer.cpp +++ b/sakura_core/debug/CRunningTimer.cpp @@ -26,12 +26,11 @@ int CRunningTimer::m_nNestCount = 0; CRunningTimer::TimePoint CRunningTimer::m_initialTime = std::chrono::high_resolution_clock::now(); -CRunningTimer::CRunningTimer( std::wstring_view name, OutputStyle style ) : +CRunningTimer::CRunningTimer( std::wstring_view name, OutputMode mode, OutputStyle style ) : m_timerName( name ), + m_outputMode( mode ), m_outputStyle( style ) { - Reset(); - if( m_timerName.length() == 0 && m_outputStyle == OutputStyle::Markdown ){ // 字下げ位置がわかるように何か文字列を入れておく m_timerName = L"(no name)"; @@ -45,14 +44,16 @@ CRunningTimer::CRunningTimer( std::wstring_view name, OutputStyle style ) : if( m_nDepth == 0 ){ OutputHeader(); } - OutputTrace( m_startTime, TraceType::Enter ); + Reset(); + WriteTraceInternal( m_startTime, TraceType::Enter ); return; } CRunningTimer::~CRunningTimer() { - OutputTrace( GetTime(), TraceType::ExitScope ); + WriteTraceInternal( GetTime(), TraceType::ExitScope ); + FlushPendingTraces(); if( m_nDepth == 0 ){ OutputFooter(); } @@ -62,23 +63,42 @@ CRunningTimer::~CRunningTimer() void CRunningTimer::Reset() { + FlushPendingTraces(); m_startTime = GetTime(); m_lastTime = m_startTime; } -DWORD CRunningTimer::Read() +uint32_t CRunningTimer::Read() { - return (DWORD)(GetElapsedTimeInSeconds( m_startTime, GetTime() ) * 1000.0); + return (uint32_t)(GetElapsedTimeInSeconds( m_startTime, GetTime() ) * 1000.0); } /*! @date 2002.10.15 genta */ void CRunningTimer::WriteTrace( std::wstring_view msg ) +{ + WriteTraceFormat( L"%s", msg ); +} + +void CRunningTimer::WriteTrace( int32_t n ) +{ + WriteTraceFormat( L"%d", n ); +} + +void CRunningTimer::WriteTraceFormat( std::wstring_view fmt, ... ) { auto currentTime = GetTime(); - OutputTrace( currentTime, TraceType::Normal, msg ); - m_lastTime = currentTime; + + va_list args; + va_start( args, fmt ); + + std::wstring msg; + vstrprintf( msg, fmt.data(), args ); + + va_end( args ); + + WriteTraceInternal( currentTime, TraceType::Normal, msg ); } double CRunningTimer::GetElapsedTimeInSeconds( TimePoint from, TimePoint to ) @@ -91,6 +111,27 @@ CRunningTimer::TimePoint CRunningTimer::GetTime() const return std::chrono::high_resolution_clock::now(); } +void CRunningTimer::WriteTraceInternal( TimePoint currentTime, TraceType traceType, std::wstring_view msg ) +{ + if( m_outputMode == OutputMode::OnExitScope ){ + // 溜めておいて後でまとめて出力 + m_pendingTraces.emplace_back( TraceEntry( currentTime, traceType, msg ) ); + }else{ + // 溜めずにすぐ出力 + OutputTrace( currentTime, traceType, msg ); + m_lastTime = currentTime; + } +} + +void CRunningTimer::FlushPendingTraces() +{ + for( const auto& p : m_pendingTraces ){ + OutputTrace( p.m_timePoint, p.m_traceType, p.m_msg ); + m_lastTime = p.m_timePoint; + } + m_pendingTraces.clear(); +} + void CRunningTimer::OutputHeader() const { if( m_outputStyle == OutputStyle::Markdown ){ diff --git a/sakura_core/debug/CRunningTimer.h b/sakura_core/debug/CRunningTimer.h index d93f394615..382ece2328 100644 --- a/sakura_core/debug/CRunningTimer.h +++ b/sakura_core/debug/CRunningTimer.h @@ -36,7 +36,6 @@ #define SAKURA_CRUNNINGTIMER_B4A1B7C4_EA83_41F2_9132_21DE3A57470D_H_ #pragma once -#include #include #include #include @@ -46,7 +45,7 @@ #if defined(TIME_MEASURE) #define MY_TRACETIME(c,m) (c).WriteTrace(m) - #define MY_RUNNINGTIMER(c,m) CRunningTimer c(m, CRunningTimer::OutputStyle::Conventional) + #define MY_RUNNINGTIMER(c,m) CRunningTimer c(m, CRunningTimer::OutputMode::OnWriteTrace, CRunningTimer::OutputStyle::Conventional) #else #define MY_TRACETIME(c,m) #define MY_RUNNINGTIMER(c,m) @@ -67,33 +66,83 @@ class CRunningTimer { public: + /*! @brief ログ出力モード */ + enum class OutputMode { + // WriteTraceを呼び出す度にログ出力します。 + // 計測オーバーヘッドは大きめです。(Release:200us程度 Debug:400us程度) + OnWriteTrace, + + // 計測終了時(インスタンス破棄時)にまとめてログ出力します。 + // 計測オーバーヘッドは小さめです。(Release:5us程度 Debug:50us程度) + // 入れ子で計測する場合においてログの出力順がWriteTraceの呼び出し順とならないため注意して下さい。 + OnExitScope + }; + + /*! @brief ログ出力形式 */ enum class OutputStyle { Conventional, Markdown }; - /* - || Constructors + /*! + @param[in] name タイマー名称 + @param[in] mode ログの出力モード + @param[in] name ログの出力形式 */ - CRunningTimer( std::wstring_view name = L"", OutputStyle style = OutputStyle::Markdown ); + CRunningTimer( std::wstring_view name = L"", OutputMode mode = OutputMode::OnWriteTrace, OutputStyle style = OutputStyle::Markdown ); ~CRunningTimer(); - /* - || 関数 + /*! + 経過時間を0に戻す */ void Reset(); - DWORD Read(); + + /*! + 現在の経過時間を取得 + @return 経過時間(ms) + */ + uint32_t Read(); + + /*! + 現在の経過時間に対してログ書き込む + @param[in] msg ログのメッセージ欄に出力する文字列 + */ void WriteTrace( std::wstring_view msg = L"" ); + /*! + 現在の経過時間に対してログ書き込む + @param[in] n ログのメッセージ欄に出力する数値 + */ + void WriteTrace( int32_t n ); + + /*! + 現在の経過時間に対してログ書き込む + @param[in] fmt 書式文字列 + @param[in] ... 書式文字列に対応する引数 + */ + void WriteTraceFormat( std::wstring_view fmt, ... ); + protected: enum class TraceType { Normal, Enter, ExitScope }; using TimePoint = std::chrono::high_resolution_clock::time_point; + struct TraceEntry { + TraceEntry( TimePoint timePoint, TraceType traceType, std::wstring_view msg ) : + m_timePoint( timePoint ), + m_traceType( traceType ), + m_msg( msg ) + {} + TimePoint m_timePoint; + TraceType m_traceType; + std::wstring m_msg; + }; static int m_nNestCount; static TimePoint m_initialTime; // タイムスタンプ基準時間 static double GetElapsedTimeInSeconds( TimePoint from, TimePoint to ); + void WriteTraceInternal( TimePoint currentTime, TraceType traceType, std::wstring_view msg = L"" ); + void FlushPendingTraces(); TimePoint GetTime() const; void OutputHeader() const; void OutputFooter() const; - void OutputTrace( TimePoint currentTime, TraceType traceType, std::wstring_view msg = L"" ) const; + void OutputTrace( TimePoint currentTime, TraceType traceType, std::wstring_view msg ) const; void Output( std::wstring_view fmt, ... ) const; private: @@ -101,7 +150,9 @@ class CRunningTimer TimePoint m_lastTime; // 最後に出力した時間 std::wstring m_timerName; // タイマー名 int m_nDepth; // このオブジェクトのネストの深さ + OutputMode m_outputMode; // ログの出力モード OutputStyle m_outputStyle; // ログの出力形式 size_t m_nNameOutputWidth = 40; // タイマー名出力幅(文字数)(初期値は最小幅) + std::vector m_pendingTraces; // 出力保留中の情報 }; #endif /* SAKURA_CRUNNINGTIMER_B4A1B7C4_EA83_41F2_9132_21DE3A57470D_H_ */ From 1960a6551410935ce9bf0cc2dc88c5734d3f621b Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Tue, 11 May 2021 00:40:08 +0900 Subject: [PATCH 0686/1024] =?UTF-8?q?=E5=8D=98=E4=BD=93=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E8=BF=BD=E5=8A=A0=E3=81=A8=E4=B8=8D=E8=A6=81include?= =?UTF-8?q?=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/debug/CRunningTimer.cpp | 5 --- tests/unittests/test-crunningtimer.cpp | 59 ++++++++++++++++++++++++++ tests/unittests/tests1.vcxproj | 1 + tests/unittests/tests1.vcxproj.filters | 3 ++ 4 files changed, 63 insertions(+), 5 deletions(-) create mode 100644 tests/unittests/test-crunningtimer.cpp diff --git a/sakura_core/debug/CRunningTimer.cpp b/sakura_core/debug/CRunningTimer.cpp index b8a81bf508..41a08f416a 100644 --- a/sakura_core/debug/CRunningTimer.cpp +++ b/sakura_core/debug/CRunningTimer.cpp @@ -16,12 +16,7 @@ */ #include "StdAfx.h" -#include #include "debug/CRunningTimer.h" -#include "_main/global.h" -#include "debug/Debug2.h" - -#pragma comment(lib, "winmm.lib") int CRunningTimer::m_nNestCount = 0; CRunningTimer::TimePoint CRunningTimer::m_initialTime = std::chrono::high_resolution_clock::now(); diff --git a/tests/unittests/test-crunningtimer.cpp b/tests/unittests/test-crunningtimer.cpp new file mode 100644 index 0000000000..5f13990105 --- /dev/null +++ b/tests/unittests/test-crunningtimer.cpp @@ -0,0 +1,59 @@ +/*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include +#include "debug/CRunningTimer.h" + +/*! + * @brief 基本動作 + */ +TEST( CRunningTimer, Basic ) +{ + CRunningTimer t0; + CRunningTimer t1( L"t1" ); + CRunningTimer t2( L"t2", CRunningTimer::OutputMode::OnExitScope ); + CRunningTimer t3( L"t3", CRunningTimer::OutputMode::OnWriteTrace, CRunningTimer::OutputStyle::Conventional ); + std::vector vt { &t1, &t2, &t3 }; + for( auto t : vt ){ + t->WriteTrace(); + t->WriteTrace( L"test" ); + t->WriteTrace( 1234567890 ); + t->WriteTraceFormat( L"%s:%d", L"test", 1234567890 ); + t->Read(); + t->Reset(); + } +} + +/*! + * @brief 長い文字列の入力 + */ +TEST( CRunningTimer, LongString ) +{ + auto str = L"012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"; + CRunningTimer t( str ); + t.WriteTrace( str ); + t.WriteTrace( INT32_MAX ); + t.WriteTrace( INT32_MIN ); + t.WriteTraceFormat( L"%s%s%s", str, str, str ); +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index 547d655a06..cf9bf7813d 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -109,6 +109,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index 371c58a62f..926e82b5ef 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -148,6 +148,9 @@ Test Files + + Test Files + From 16449a0508137831a1f08e2349e1360a9c3bc992 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Thu, 13 May 2021 17:45:08 +0900 Subject: [PATCH 0687/1024] =?UTF-8?q?GitHub=20Actions=20=E3=81=A7=E3=83=93?= =?UTF-8?q?=E3=83=AB=E3=83=89=E3=81=99=E3=82=8B=E6=99=82=E3=82=82=E5=BF=85?= =?UTF-8?q?=E8=A6=81=E3=81=AA=E7=92=B0=E5=A2=83=E5=A4=89=E6=95=B0=E3=82=92?= =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build-sakura.yml | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/.github/workflows/build-sakura.yml b/.github/workflows/build-sakura.yml index f93b306441..2e0817a46c 100644 --- a/.github/workflows/build-sakura.yml +++ b/.github/workflows/build-sakura.yml @@ -44,6 +44,11 @@ jobs: platform: - Win32 - x64 + env: + CI_ACCOUNT_NAME: ${{github.actor}} + CI_REPO_NAME: ${{github.repository}} + CI_BUILD_VERSION: ${{github.run_id}} + CI_BUILD_NUMBER: ${{github.run_number}} # Steps represent a sequence of tasks that will be executed as part of the job steps: @@ -54,6 +59,30 @@ jobs: - name: Add msbuild to PATH uses: microsoft/setup-msbuild@v1 + - name: Setup environment variables + run: | + echo("CI_BUILD_URL=" ` + + "${env:GITHUB_SERVER_URL}/${{github.repository}}/" ` + + "actions/runs/${{github.run_id}}") >> $env:GITHUB_ENV + + echo("GITHUB_COMMIT_URL=" ` + + "${env:GITHUB_SERVER_URL}/${{github.repository}}/" ` + + "commit/${{github.sha}}") >> $env:GITHUB_ENV + + if ('pull_request' -eq '${{github.event_name}}') { + echo("GITHUB_PR_NUMBER=" ` + + "${{github.event.pull_request.number}}") >> $env:GITHUB_ENV + echo("GITHUB_PR_HEAD_SHORT_COMMIT=" ` + + "${{github.event.pull_request.head.sha}}".SubString(0, 8)) >> $env:GITHUB_ENV + echo("GITHUB_PR_HEAD_COMMIT=" ` + + "${{github.event.pull_request.head.sha}}") >> $env:GITHUB_ENV + echo("GITHUB_PR_HEAD_URL=" ` + + "${env:GITHUB_SERVER_URL}/${{github.repository}}/" ` + + "pull/${{github.event.pull_request.number}}/" ` + + "commits/${{github.event.pull_request.head.sha}}") >> $env:GITHUB_ENV + } + shell: pwsh + - name: MSBuild run: build-sln.bat ${{ matrix.platform }} ${{ matrix.config }} shell: cmd From ff15c35e41559bf47e58e858ea7985d5d4a060c4 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Fri, 14 May 2021 07:44:17 +0900 Subject: [PATCH 0688/1024] =?UTF-8?q?githash.bat=20=E3=81=AB=E3=81=8A?= =?UTF-8?q?=E3=81=91=E3=82=8B=20GITHUB=5FPR=5FHEAD=5FSHORT=5FCOMMIT=20?= =?UTF-8?q?=E3=81=AE=E8=A8=AD=E5=AE=9A=E6=96=B9=E6=B3=95=E3=82=92=E5=A4=89?= =?UTF-8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura/githash.bat | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/sakura/githash.bat b/sakura/githash.bat index 7c27175313..8ecfbdad37 100644 --- a/sakura/githash.bat +++ b/sakura/githash.bat @@ -112,17 +112,13 @@ exit /b 0 ) if defined APPVEYOR_PULL_REQUEST_HEAD_COMMIT ( + set GITHUB_PR_HEAD_SHORT_COMMIT=%APPVEYOR_PULL_REQUEST_HEAD_COMMIT:~0,8% set GITHUB_PR_HEAD_COMMIT=%APPVEYOR_PULL_REQUEST_HEAD_COMMIT% ) else if defined SYSTEM_PULLREQUEST_SOURCECOMMITID ( + set GITHUB_PR_HEAD_SHORT_COMMIT=%SYSTEM_PULLREQUEST_SOURCECOMMITID:~0,8% set GITHUB_PR_HEAD_COMMIT=%SYSTEM_PULLREQUEST_SOURCECOMMITID% ) - if not "%GITHUB_PR_HEAD_COMMIT%" == "" ( - set GITHUB_PR_HEAD_SHORT_COMMIT=%GITHUB_PR_HEAD_COMMIT:~0,8% - ) else ( - set GITHUB_PR_HEAD_SHORT_COMMIT= - ) - if "%BUILD_REPOSITORY_PROVIDER%"=="GitHub" ( set GITHUB_ON=1 ) From 04595d8c0069c8915ccf79dad9be8576277e474f Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Wed, 12 May 2021 01:44:42 +0900 Subject: [PATCH 0689/1024] =?UTF-8?q?githash.bat=20=E3=81=AE=E3=83=AD?= =?UTF-8?q?=E3=82=B0=E3=81=AB=20GITHUB=5FPR=5FNUMBER=20=E3=82=92=E5=87=BA?= =?UTF-8?q?=E5=8A=9B=E3=81=95=E3=81=9B=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura/githash.bat | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/sakura/githash.bat b/sakura/githash.bat index 8ecfbdad37..ca959b6cb7 100644 --- a/sakura/githash.bat +++ b/sakura/githash.bat @@ -187,24 +187,26 @@ exit /b 0 del "%GITHASH_H_TMP%" @echo %GITHASH_H% was not updated. ) else ( + @echo GIT_TAG_NAME : %GIT_TAG_NAME% @echo GIT_SHORT_COMMIT_HASH : %GIT_SHORT_COMMIT_HASH% @echo GIT_COMMIT_HASH : %GIT_COMMIT_HASH% @echo GIT_REMOTE_ORIGIN_URL : %GIT_REMOTE_ORIGIN_URL% - @echo GIT_TAG_NAME : %GIT_TAG_NAME% @echo. + @echo CI_ACCOUNT_NAME : %CI_ACCOUNT_NAME% @echo CI_REPO_NAME : %CI_REPO_NAME% - @echo CI_ACCOUNT_NAME : %CI_ACCOUNT_NAME% - @echo CI_BUILD_VERSION : %CI_BUILD_VERSION% - @echo CI_BUILD_NUMBER : %CI_BUILD_NUMBER% - @echo CI_BUILD_URL : %CI_BUILD_URL% + @echo CI_BUILD_VERSION : %CI_BUILD_VERSION% + @echo CI_BUILD_NUMBER : %CI_BUILD_NUMBER% + @echo CI_BUILD_URL : %CI_BUILD_URL% @echo. @echo GITHUB_COMMIT_URL : %GITHUB_COMMIT_URL% - @echo GITHUB_PR_HEAD_URL : %GITHUB_PR_HEAD_URL% - @echo GITHUB_PR_HEAD_COMMIT : %GITHUB_PR_HEAD_COMMIT% + @echo GITHUB_PR_NUMBER : %GITHUB_PR_NUMBER% @echo GITHUB_PR_HEAD_SHORT_COMMIT : %GITHUB_PR_HEAD_SHORT_COMMIT% + @echo GITHUB_PR_HEAD_COMMIT : %GITHUB_PR_HEAD_COMMIT% + @echo GITHUB_PR_HEAD_URL : %GITHUB_PR_HEAD_URL% @echo. @echo APPVEYOR_URL : %APPVEYOR_URL% @echo APPVEYOR_PROJECT_SLUG : %APPVEYOR_PROJECT_SLUG% + @echo. if exist "%GITHASH_H%" del "%GITHASH_H%" move /y "%GITHASH_H_TMP%" "%GITHASH_H%" From 4bc7517058f3ed8e0f0c29b93c967d241f1923b1 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sat, 15 May 2021 02:12:28 +0900 Subject: [PATCH 0690/1024] =?UTF-8?q?CodeSmell=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/debug/CRunningTimer.cpp | 22 ++++------------------ sakura_core/debug/CRunningTimer.h | 14 ++++++++++++-- 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/sakura_core/debug/CRunningTimer.cpp b/sakura_core/debug/CRunningTimer.cpp index 41a08f416a..46e8faf132 100644 --- a/sakura_core/debug/CRunningTimer.cpp +++ b/sakura_core/debug/CRunningTimer.cpp @@ -17,6 +17,7 @@ #include "StdAfx.h" #include "debug/CRunningTimer.h" +#include int CRunningTimer::m_nNestCount = 0; CRunningTimer::TimePoint CRunningTimer::m_initialTime = std::chrono::high_resolution_clock::now(); @@ -63,7 +64,7 @@ void CRunningTimer::Reset() m_lastTime = m_startTime; } -uint32_t CRunningTimer::Read() +uint32_t CRunningTimer::Read() const { return (uint32_t)(GetElapsedTimeInSeconds( m_startTime, GetTime() ) * 1000.0); } @@ -81,21 +82,6 @@ void CRunningTimer::WriteTrace( int32_t n ) WriteTraceFormat( L"%d", n ); } -void CRunningTimer::WriteTraceFormat( std::wstring_view fmt, ... ) -{ - auto currentTime = GetTime(); - - va_list args; - va_start( args, fmt ); - - std::wstring msg; - vstrprintf( msg, fmt.data(), args ); - - va_end( args ); - - WriteTraceInternal( currentTime, TraceType::Normal, msg ); -} - double CRunningTimer::GetElapsedTimeInSeconds( TimePoint from, TimePoint to ) { return (double)std::chrono::duration_cast( to - from ).count() / 1000.0 / 1000.0 / 1000.0; @@ -154,7 +140,7 @@ void CRunningTimer::OutputTrace( TimePoint currentTime, TraceType traceType, std }else if( traceType == TraceType::ExitScope ){ msg = L"== Exit Scope =="; }else{ - //msg = msg; + //msg = msg } Output( L"| %13.6f | %.*s%-*s | %9.3f | %9.3f | %s\n", @@ -169,7 +155,7 @@ void CRunningTimer::OutputTrace( TimePoint currentTime, TraceType traceType, std }else if( traceType == TraceType::ExitScope ){ msg = L"Exit Scope"; }else{ - //msg = msg; + //msg = msg } if( traceType == TraceType::Enter ){ diff --git a/sakura_core/debug/CRunningTimer.h b/sakura_core/debug/CRunningTimer.h index 382ece2328..4a2c71cff1 100644 --- a/sakura_core/debug/CRunningTimer.h +++ b/sakura_core/debug/CRunningTimer.h @@ -36,9 +36,11 @@ #define SAKURA_CRUNNINGTIMER_B4A1B7C4_EA83_41F2_9132_21DE3A57470D_H_ #pragma once +#include "util/string_ex.h" #include #include #include +#include // 本番コードに組み込まれている時間計測の結果を出力ペインに出したい時にコメントを外して下さい //#define TIME_MEASURE @@ -87,6 +89,7 @@ class CRunningTimer @param[in] name ログの出力形式 */ CRunningTimer( std::wstring_view name = L"", OutputMode mode = OutputMode::OnWriteTrace, OutputStyle style = OutputStyle::Markdown ); + ~CRunningTimer(); /*! @@ -98,7 +101,7 @@ class CRunningTimer 現在の経過時間を取得 @return 経過時間(ms) */ - uint32_t Read(); + uint32_t Read() const; /*! 現在の経過時間に対してログ書き込む @@ -117,7 +120,14 @@ class CRunningTimer @param[in] fmt 書式文字列 @param[in] ... 書式文字列に対応する引数 */ - void WriteTraceFormat( std::wstring_view fmt, ... ); + template + void WriteTraceFormat( std::wstring_view fmt, T... args ) + { + auto currentTime = GetTime(); + std::wstring msg; + strprintf( msg, fmt.data(), args... ); + WriteTraceInternal( currentTime, TraceType::Normal, msg ); + } protected: enum class TraceType { Normal, Enter, ExitScope }; From cf59e152fe4e7a92422fdb8776624c9b6d7d18d5 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sat, 15 May 2021 12:53:21 +0900 Subject: [PATCH 0691/1024] =?UTF-8?q?=E8=A8=98=E8=BF=B0=E4=BD=8D=E7=BD=AE?= =?UTF-8?q?=E3=82=92=E3=81=BE=E3=81=A8=E3=82=81=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build-sakura.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-sakura.yml b/.github/workflows/build-sakura.yml index 2e0817a46c..6d7c69e703 100644 --- a/.github/workflows/build-sakura.yml +++ b/.github/workflows/build-sakura.yml @@ -44,11 +44,6 @@ jobs: platform: - Win32 - x64 - env: - CI_ACCOUNT_NAME: ${{github.actor}} - CI_REPO_NAME: ${{github.repository}} - CI_BUILD_VERSION: ${{github.run_id}} - CI_BUILD_NUMBER: ${{github.run_number}} # Steps represent a sequence of tasks that will be executed as part of the job steps: @@ -61,6 +56,11 @@ jobs: - name: Setup environment variables run: | + echo "CI_ACCOUNT_NAME=${{github.actor}}" >> $env:GITHUB_ENV + echo "CI_REPO_NAME=${{github.repository}}" >> $env:GITHUB_ENV + echo "CI_BUILD_VERSION=${{github.run_id}}" >> $env:GITHUB_ENV + echo "CI_BUILD_NUMBER=${{github.run_number}}" >> $env:GITHUB_ENV + echo("CI_BUILD_URL=" ` + "${env:GITHUB_SERVER_URL}/${{github.repository}}/" ` + "actions/runs/${{github.run_id}}") >> $env:GITHUB_ENV From eca0a6dfde0c53d04d9d01b80cba9063ae447849 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sat, 15 May 2021 11:51:57 +0900 Subject: [PATCH 0692/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C=E3=81=AA=E3=81=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chrono::duration()を使って経過秒数を得る * RunningTimer::GetTimeをstaticメソッドに変更 * 変なコメントを修正 * msgをmsg.data()に修正(CRunningTimer::WriteTrace) --- sakura_core/debug/CRunningTimer.cpp | 10 +++++----- sakura_core/debug/CRunningTimer.h | 9 +++++---- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/sakura_core/debug/CRunningTimer.cpp b/sakura_core/debug/CRunningTimer.cpp index 46e8faf132..eaf5573237 100644 --- a/sakura_core/debug/CRunningTimer.cpp +++ b/sakura_core/debug/CRunningTimer.cpp @@ -74,7 +74,7 @@ uint32_t CRunningTimer::Read() const */ void CRunningTimer::WriteTrace( std::wstring_view msg ) { - WriteTraceFormat( L"%s", msg ); + WriteTraceFormat( L"%s", msg.data() ); } void CRunningTimer::WriteTrace( int32_t n ) @@ -82,14 +82,14 @@ void CRunningTimer::WriteTrace( int32_t n ) WriteTraceFormat( L"%d", n ); } -double CRunningTimer::GetElapsedTimeInSeconds( TimePoint from, TimePoint to ) +CRunningTimer::TimePoint CRunningTimer::GetTime() { - return (double)std::chrono::duration_cast( to - from ).count() / 1000.0 / 1000.0 / 1000.0; + return std::chrono::high_resolution_clock::now(); } -CRunningTimer::TimePoint CRunningTimer::GetTime() const +double CRunningTimer::GetElapsedTimeInSeconds( TimePoint from, TimePoint to ) { - return std::chrono::high_resolution_clock::now(); + return std::chrono::duration(to - from).count(); } void CRunningTimer::WriteTraceInternal( TimePoint currentTime, TraceType traceType, std::wstring_view msg ) diff --git a/sakura_core/debug/CRunningTimer.h b/sakura_core/debug/CRunningTimer.h index 4a2c71cff1..477ae6a8c3 100644 --- a/sakura_core/debug/CRunningTimer.h +++ b/sakura_core/debug/CRunningTimer.h @@ -104,19 +104,19 @@ class CRunningTimer uint32_t Read() const; /*! - 現在の経過時間に対してログ書き込む + 現在の経過時間でログを書き込む @param[in] msg ログのメッセージ欄に出力する文字列 */ void WriteTrace( std::wstring_view msg = L"" ); /*! - 現在の経過時間に対してログ書き込む + 現在の経過時間でログを書き込む @param[in] n ログのメッセージ欄に出力する数値 */ void WriteTrace( int32_t n ); /*! - 現在の経過時間に対してログ書き込む + 現在の経過時間でログを書き込む @param[in] fmt 書式文字列 @param[in] ... 書式文字列に対応する引数 */ @@ -146,10 +146,11 @@ class CRunningTimer static int m_nNestCount; static TimePoint m_initialTime; // タイムスタンプ基準時間 + static TimePoint GetTime(); static double GetElapsedTimeInSeconds( TimePoint from, TimePoint to ); + void WriteTraceInternal( TimePoint currentTime, TraceType traceType, std::wstring_view msg = L"" ); void FlushPendingTraces(); - TimePoint GetTime() const; void OutputHeader() const; void OutputFooter() const; void OutputTrace( TimePoint currentTime, TraceType traceType, std::wstring_view msg ) const; From 11755f1a606241a8d34fc82204fcfa71e48205ab Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 12 May 2021 03:31:40 +0900 Subject: [PATCH 0693/1024] =?UTF-8?q?MinGW=E7=94=A8=E3=81=AE=E3=83=93?= =?UTF-8?q?=E3=83=AB=E3=83=89=E3=83=90=E3=83=83=E3=83=81=E3=82=92=E7=B5=84?= =?UTF-8?q?=E3=81=BF=E3=81=AA=E3=81=8A=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build-gnu.bat | 61 ++++++- .../template.job.build-on-msys2.yml | 3 +- .../template.steps.install-mingw-w64-gcc.yml | 7 +- sakura_core/Makefile | 6 +- sakura_lang_en_US/Makefile | 4 +- tests/googletest.build.cmd | 54 ++++--- tests/unittests/Makefile | 150 ++++++++++++++++++ 7 files changed, 249 insertions(+), 36 deletions(-) create mode 100644 tests/unittests/Makefile diff --git a/build-gnu.bat b/build-gnu.bat index 5ca914952b..389d3eb306 100644 --- a/build-gnu.bat +++ b/build-gnu.bat @@ -26,14 +26,69 @@ if "%configuration%" == "Release" ( @rem https://www.appveyor.com/docs/environment-variables/ @rem path=C:\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev1\mingw64\bin;%path% -path=C:\msys64\mingw64\bin;%path% +path=C:\msys64\usr\bin;%path:C:\msys64\usr\bin;=% +path=C:\msys64\mingw64\bin;%path:C:\msys64\mingw64\bin;=% -@echo mingw32-make -C sakura_core MYDEFINES="%MYDEFINES%" MYCFLAGS="%MYCFLAGS%" MYLIBS="%MYLIBS%" -mingw32-make -C sakura_core MYDEFINES="%MYDEFINES%" MYCFLAGS="%MYCFLAGS%" MYLIBS="%MYLIBS%" -j4 +:: find generic tools +if not defined CMD_NINJA call %~dp0tools\find-tools.bat + +@rem create output directory, all executables will be placed here. +set OUTDIR=../../../../%platform%/%configuration% +mkdir "%~dp0%platform%\%configuration%" > NUL 2>&1 + +@rem build "sakura_core". +set SAKURA_CORE_MAKEFILE=%~dp0sakura_core\Makefile +set SAKURA_CORE_BUILD_DIR=%~dp0build\%platform%\%configuration%\sakura_core +mkdir "%SAKURA_CORE_BUILD_DIR%" > NUL 2>&1 +pushd "%SAKURA_CORE_BUILD_DIR%" +mingw32-make -f "%SAKURA_CORE_MAKEFILE%" MYDEFINES="%MYDEFINES%" MYCFLAGS="%MYCFLAGS%" MYLIBS="%MYLIBS%" OUTDIR=%OUTDIR% StdAfx.h.gch sakura_rc.o +if errorlevel 1 ( + echo error 2 errorlevel %errorlevel% + popd + exit /b 1 +) +mingw32-make -f "%SAKURA_CORE_MAKEFILE%" MYDEFINES="%MYDEFINES%" MYCFLAGS="%MYCFLAGS%" MYLIBS="%MYLIBS%" OUTDIR=%OUTDIR% -j4 +if errorlevel 1 ( + echo error 2 errorlevel %errorlevel% + popd + exit /b 1 +) +popd + +@rem build "sakura_lang_en_US". +set SAKURA_LANG_EN_US_MAKEFILE=%~dp0sakura_lang_en_US\Makefile +set SAKURA_LANG_EN_US_BUILD_DIR=%~dp0build\%platform%\%configuration%\sakura_lang_en_US +mkdir "%SAKURA_LANG_EN_US_BUILD_DIR%" > NUL 2>&1 +pushd "%SAKURA_LANG_EN_US_BUILD_DIR%" +mingw32-make -f "%SAKURA_LANG_EN_US_MAKEFILE%" MYDEFINES="%MYDEFINES%" SAKURA_CORE=../sakura_core OUTDIR=%OUTDIR% if errorlevel 1 ( echo error 2 errorlevel %errorlevel% + popd exit /b 1 ) +popd + +@rem build "googletest". +call %~dp0tests\googletest.build.cmd %~dp0build\%platform%\%configuration%\gtest_build\ %~dp0build\%platform%\%configuration%\googletest\ +if errorlevel 1 ( + echo error 2 errorlevel %errorlevel% + popd + exit /b 1 +) + +@rem build "tests1". +set TESTS1_MAKEFILE=%~dp0tests\unittests\Makefile +set TESTS1_BUILD_DIR=%~dp0build\%platform%\%configuration%\tests1 +mkdir "%TESTS1_BUILD_DIR%" > NUL 2>&1 +pushd "%TESTS1_BUILD_DIR%" +mingw32-make -f "%TESTS1_MAKEFILE%" MYDEFINES="%MYDEFINES%" SAKURA_CORE=../sakura_core OUTDIR=%OUTDIR% -j4 +if errorlevel 1 ( + echo error 2 errorlevel %errorlevel% + popd + exit /b 1 +) +popd + exit /b 0 diff --git a/ci/azure-pipelines/template.job.build-on-msys2.yml b/ci/azure-pipelines/template.job.build-on-msys2.yml index b33555019f..960aee9a4a 100644 --- a/ci/azure-pipelines/template.job.build-on-msys2.yml +++ b/ci/azure-pipelines/template.job.build-on-msys2.yml @@ -37,7 +37,8 @@ jobs: displayName: Build with MinGW-w64-gcc # Unit tests - - script: tests\build-and-test.bat $(BuildPlatform) $(Configuration) + - pwsh: .\tests1.exe --gtest_output=xml:$(build.sourcesDirectory)\tests1.exe-googletest-$(BuildPlatform)-$(Configuration).xml + workingDirectory: $(build.sourcesDirectory)\$(BuildPlatform)\$(Configuration) displayName: Unit test # see https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/copy-files?view=azure-devops&tabs=yaml diff --git a/ci/azure-pipelines/template.steps.install-mingw-w64-gcc.yml b/ci/azure-pipelines/template.steps.install-mingw-w64-gcc.yml index ec2938ad21..021e73102f 100644 --- a/ci/azure-pipelines/template.steps.install-mingw-w64-gcc.yml +++ b/ci/azure-pipelines/template.steps.install-mingw-w64-gcc.yml @@ -5,8 +5,5 @@ # なし ############################################################################################################# steps: - - script: C:\msys64\usr\bin\bash --login -c "pacman -S --noconfirm p7zip" - displayName: install 7zip - - - script: C:\msys64\usr\bin\bash --login -c "pacman -S --noconfirm mingw-w64-x86_64-gtest" - displayName: install MinGW-w64-gtest + - script: echo nothing to do. + displayName: nothing to do diff --git a/sakura_core/Makefile b/sakura_core/Makefile index 0029bace33..0d9c527c99 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -29,9 +29,9 @@ MKDIR = md RM = del DIRSEP = $(strip \ ) DEVNULL = NUL -ICONV = C:\msys64\usr\bin\iconv.exe -SED = C:\msys64\usr\bin\sed.exe -P7Z = C:\msys64\usr\bin\7z +ICONV = iconv.exe +SED = sed.exe +P7Z = 7z.exe else # If unix-like shell is used. MKDIR = mkdir -p diff --git a/sakura_lang_en_US/Makefile b/sakura_lang_en_US/Makefile index 20fc942c95..e6367ab006 100644 --- a/sakura_lang_en_US/Makefile +++ b/sakura_lang_en_US/Makefile @@ -37,8 +37,8 @@ MKDIR = md RM = del DIRSEP = $(strip \ ) DEVNULL = NUL -ICONV = C:\msys64\usr\bin\iconv.exe -SED = C:\msys64\usr\bin\sed.exe +ICONV = iconv.exe +SED = sed.exe else # If unix-like shell is used. MKDIR = mkdir -p diff --git a/tests/googletest.build.cmd b/tests/googletest.build.cmd index 13d964e7c0..6c5923b53c 100644 --- a/tests/googletest.build.cmd +++ b/tests/googletest.build.cmd @@ -5,15 +5,18 @@ set GOOGLETEST_INSTALL_PATH=%~dp2 set SOURCE_DIR=%~dp0googletest :: find generic tools -if not defined CMD_VSWHERE call %~dp0..\tools\find-tools.bat - -set /a NUM_VSVERSION_NEXT=NUM_VSVERSION + 1 +if not defined CMD_NINJA call %~dp0..\tools\find-tools.bat if not exist "%CMD_CMAKE%" ( echo "no cmake found." exit /b 1 ) +if not exist "%CMD_NINJA%" ( + echo "no ninja found." + exit /b 1 +) + pushd "%SOURCE_DIR%" || exit /b 1 if not exist CMakeLists.txt ( if not exist "%CMD_GIT%" ( @@ -24,16 +27,6 @@ if not exist CMakeLists.txt ( ) popd -if not exist "%CMD_NINJA%" ( - set GENERATOR="%CMAKE_G_PARAM%" - set GENERATOR_OPTS=-A %PLATFORM% "-DCMAKE_CONFIGURATION_TYPES=Debug;Release" - set "MAKE_PROGRAM=%CMD_MSBUILD%" -) else ( - set GENERATOR=Ninja - set GENERATOR_OPTS=-DCMAKE_BUILD_TYPE=%CONFIGURATION% - set "MAKE_PROGRAM=%CMD_NINJA%" -) - mkdir %BUILD_DIR% > NUL 2>&1 pushd %BUILD_DIR% @@ -47,10 +40,15 @@ call :run_cmake_configure goto :EOF :run_cmake_configure -call :find_cl_compiler - -:: replace back-slash to slash in the path. -set CL_COMPILER=%CMD_CL:\=/% +if "%PLATFORM%" == "Win32" ( + call :find_cl_compilers +) +if "%PLATFORM%" == "x64" ( + call :find_cl_compilers +) +if "%PLATFORM%" == "MinGW" ( + call :find_gcc_compilers +) :: install lib64 for x64-platform. if "%PLATFORM%" == "x64" ( @@ -58,10 +56,11 @@ if "%PLATFORM%" == "x64" ( ) :: run cmake configuration. -"%CMD_CMAKE%" -G %GENERATOR% ^ - "-DCMAKE_MAKE_PROGRAM=%MAKE_PROGRAM%" ^ - "-DCMAKE_C_COMPILER=%CL_COMPILER%" ^ - "-DCMAKE_CXX_COMPILER=%CL_COMPILER%" ^ +"%CMD_CMAKE%" -G Ninja ^ + "-DCMAKE_MAKE_PROGRAM=%CMD_NINJA%" ^ + "-DCMAKE_C_COMPILER=%C_COMPILER%" ^ + "-DCMAKE_CXX_COMPILER=%CXX_COMPILER%" ^ + -DCMAKE_BUILD_TYPE=%CONFIGURATION% ^ -DCMAKE_INSTALL_PREFIX=%GOOGLETEST_INSTALL_PATH% ^ %GENERATOR_OPTS% ^ -DBUILD_GMOCK=OFF ^ @@ -71,9 +70,20 @@ if "%PLATFORM%" == "x64" ( || endlocal && exit /b 1 goto :EOF -:find_cl_compiler +:find_cl_compilers +call :find_cl +set C_COMPILER=%CMD_CL:\=/% +set CXX_COMPILER=%CMD_CL:\=/% +goto :EOF + +:find_cl for /f "usebackq delims=" %%a in (`where cl.exe`) do ( set "CMD_CL=%%a" goto :EOF ) goto :EOF + +:find_gcc_compilers +set C_COMPILER=C:/msys64/mingw64/bin/gcc.exe +set CXX_COMPILER=C:/msys64/mingw64/bin/g++.exe +goto :EOF diff --git a/tests/unittests/Makefile b/tests/unittests/Makefile new file mode 100644 index 0000000000..eee8066fbc --- /dev/null +++ b/tests/unittests/Makefile @@ -0,0 +1,150 @@ +# Makefile for MinGW32/MinGW-W64 + +# Example usages: +# Out-of-source build (build in the same directory as sakura_core): +# $ mkdir -p build/MinGW/Release/ +# $ cd build/MinGW/Release +# $ mingw32-make -f ../../../tests/unittests/Makefile SAKURA_CORE=. OUTDIR=. -j4 +# +# Out-of-source build (create tests1 and sakura_core in a common directory): +# $ mkdir -p build/MinGW/Release/tests1/ +# $ cd build/MinGW/Release/tests1 +# $ mingw32-make -f ../../../../tests/unittests/Makefile OUTDIR=.. -j4 +# +# Debug build with coverage: +# $ cd tests/unittests +# $ mingw32-make MYCFLAGS="-g --coverage" MYLIBS=--coverage -j4 + +# Path of "sakura_core" directory. Compute it from the path of Makefile. +SRCDIR = $(patsubst %/,%,$(subst \,/,$(dir $(firstword $(MAKEFILE_LIST))))) + +# If SRCDIR is different from the current directory, set it to VPATH. +# (If SRCDIR ends with a backslash, remove it before set to VPATH.) +ifneq ($(SRCDIR),.) +VPATH = $(patsubst %\,%,$(SRCDIR)) +endif + +# The directory where "sakura_core" is built. +SAKURA_CORE = ../sakura_core + +GOOGLETEST_INSTALL_DIR = ../googletest + +# The directory where the .exe files will be output. +# If empty, they will be output to the default directories. +OUTDIR = + +ifeq ($(SHELL),sh.exe) +# If cmd.exe is used as a shell. +MKDIR = md +RM = del +DIRSEP = $(strip \ ) +DEVNULL = NUL +else +# If unix-like shell is used. +MKDIR = mkdir -p +RM = rm -f +DIRSEP = / +DEVNULL = /dev/null +endif + +ifndef PREFIX +PREFIX= +RCPREFIX= +else ifeq ($(PREFIX),x86_64-w64-mingw32-) +RCPREFIX=$(PREFIX) +else ifeq ($(PREFIX),i686-w64-mingw32-) +ifeq ($(OS),Windows_NT) +RCPREFIX= +else +RCPREFIX=$(PREFIX) +endif +endif + +CC= $(PREFIX)gcc +CXX= $(PREFIX)g++ +RC= $(RCPREFIX)windres + +DEFINES= \ + -DWIN32 \ + -D_WIN32_WINNT=_WIN32_WINNT_WIN7 \ + -D_UNICODE \ + -DUNICODE \ + $(MYDEFINES) + +ifeq (,$(findstring -D_DEBUG,$(DEFINES))) +ifeq (,$(findstring -DNDEBUG,$(DEFINES))) +DEFINES += -DNDEBUG +endif +else +LIB_SUFFIX = d +endif + +CFLAGS= \ + -finput-charset=utf-8 \ + -fexec-charset=cp932 \ + -MMD \ + -isystem $(GOOGLETEST_INSTALL_DIR)/include \ + -I$(SAKURA_CORE) \ + -I$(SRCDIR)/../../sakura_core \ + -I. \ + -I$(SRCDIR) \ + $(DEFINES) $(MYCFLAGS) + +CXXFLAGS= $(CFLAGS) \ + -std=c++17 \ + $(MYCXXFLAGS) + +LIBS= \ + -static \ + -lwinspool \ + -lole32 \ + -loleaut32 \ + -luuid \ + -lcomctl32 \ + -limm32 \ + -lmpr \ + -limagehlp \ + -lshlwapi \ + -lwinmm \ + -lwindowscodecs \ + -lmsimg32 \ + -lkernel32 \ + -lgdi32 \ + -lcomdlg32 \ + -L$(GOOGLETEST_INSTALL_DIR)/lib \ + -lgtest$(or $(LIB_SUFFIX),) \ + -lgtest_main$(or $(LIB_SUFFIX),) \ + $(MYLIBS) + +exe= $(or $(OUTDIR),.)/tests1.exe + +SRCS = $(wildcard $(SRCDIR)/test-*.cpp) \ + $(wildcard $(SRCDIR)/code-*.cpp) +OBJS = $(SRCS:$(SRCDIR)/%.cpp=%.o) + +DEPS= $(OBJS:%.o=%.d) + +SAKURA_SRCS = $(wildcard $(SRCDIR)/../../sakura_core/*.cpp) \ + $(wildcard $(SRCDIR)/../../sakura_core/*/*.cpp) \ + $(wildcard $(SRCDIR)/../../sakura_core/*/*/*.cpp) +SAKURA_OBJS = $(SAKURA_SRCS:$(SRCDIR)/../../sakura_core/%.cpp=$(SAKURA_CORE)/%.o) \ + $(SAKURA_CORE)/sakura_rc.o + +all: $(exe) + +$(exe): $(OBJS) $(SAKURA_OBJS) + $(CXX) -o $@ $(OBJS) $(SAKURA_OBJS) $(LIBS) + +.cpp.o: + $(CXX) $(CXXFLAGS) -o $@ -c $< + +$(OBJS): + +clean: + -$(RM) $(subst /,$(DIRSEP),$(exe) $(OBJS)) + -$(RM) $(subst /,$(DIRSEP),$(DEPS)) + +.SUFFIXES: .cpp .o +.PHONY: all clean + +-include $(DEPS) From 6dba3a6f842f7a4e0e899dcce1a3165b90071c03 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 12 May 2021 03:59:08 +0900 Subject: [PATCH 0694/1024] =?UTF-8?q?MSVC=E3=81=AE=E3=83=97=E3=83=AD?= =?UTF-8?q?=E3=82=B8=E3=82=A7=E3=82=AF=E3=83=88=E6=A7=8B=E6=88=90=E3=82=92?= =?UTF-8?q?=E7=B5=84=E3=81=BF=E3=81=AA=E3=81=8A=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HeaderMake/HeaderMake.vcxproj | 9 ++++----- ci/azure-pipelines/template.job.build-unittest.yml | 9 +++++---- sakura/sakura.vcxproj | 14 +++++--------- sakura_lang_en_US/sakura_lang_en_US.vcxproj | 13 ++++--------- tests/compiletests.targets | 9 +++++++-- tests/googletest.build.cmd | 2 +- tests/googletest.targets | 4 ++-- tests/unittests/tests1.vcxproj | 11 +++++------ 8 files changed, 33 insertions(+), 38 deletions(-) diff --git a/HeaderMake/HeaderMake.vcxproj b/HeaderMake/HeaderMake.vcxproj index 3fe2440a65..347a89a0f6 100644 --- a/HeaderMake/HeaderMake.vcxproj +++ b/HeaderMake/HeaderMake.vcxproj @@ -35,18 +35,17 @@ - + + $(SolutionDir)build\$(Platform)\$(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + <_ProjectFileVersion>15.0.27130.2020 - $(SolutionDir)$(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ true - $(SolutionDir)$(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ false diff --git a/ci/azure-pipelines/template.job.build-unittest.yml b/ci/azure-pipelines/template.job.build-unittest.yml index b10265d452..a4f410e0ed 100644 --- a/ci/azure-pipelines/template.job.build-unittest.yml +++ b/ci/azure-pipelines/template.job.build-unittest.yml @@ -41,6 +41,11 @@ jobs: - script: build-sln.bat $(BuildPlatform) $(Configuration) displayName: Build solution + # Unit tests + - pwsh: .\tests1.exe --gtest_output=xml:$(build.sourcesDirectory)\tests1.exe-googletest-$(BuildPlatform)-$(Configuration).xml + workingDirectory: $(build.sourcesDirectory)\$(BuildPlatform)\$(Configuration) + displayName: Unit test + # Toolbar Bitmap Split/Mux - script: build-bmp-tools.bat $(Configuration) displayName: Bitmap Split/Mux @@ -62,10 +67,6 @@ jobs: condition: eq(variables['Configuration'], 'Release') displayName: Zip files for artifacts - # Unit tests - - script: tests\run-tests.bat $(BuildPlatform) $(Configuration) - displayName: Unit test - # see https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/copy-files?view=azure-devops&tabs=yaml # # "condition:" に関しては以下を参照 diff --git a/sakura/sakura.vcxproj b/sakura/sakura.vcxproj index 3d8bcdc4aa..459e28a553 100644 --- a/sakura/sakura.vcxproj +++ b/sakura/sakura.vcxproj @@ -62,28 +62,23 @@ - + + $(SolutionDir)build\$(Platform)\$(Configuration)\sakura_core\ + $(SolutionDir)$(Platform)\$(Configuration)\ + <_ProjectFileVersion>15.0.27130.2020 - $(SolutionDir)$(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ false - $(SolutionDir)$(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ false - $(SolutionDir)$(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ true - $(SolutionDir)$(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ true @@ -1017,6 +1012,7 @@ + diff --git a/sakura_lang_en_US/sakura_lang_en_US.vcxproj b/sakura_lang_en_US/sakura_lang_en_US.vcxproj index fc20cb319d..5221d452cb 100644 --- a/sakura_lang_en_US/sakura_lang_en_US.vcxproj +++ b/sakura_lang_en_US/sakura_lang_en_US.vcxproj @@ -50,31 +50,26 @@ - + + $(SolutionDir)build\$(Platform)\$(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + <_ProjectFileVersion>15.0.27130.2020 - $(SolutionDir)$(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ true true - $(SolutionDir)$(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ true true - $(SolutionDir)$(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ true false - $(SolutionDir)$(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ true false diff --git a/tests/compiletests.targets b/tests/compiletests.targets index 9bf16c03d8..b200c132cb 100644 --- a/tests/compiletests.targets +++ b/tests/compiletests.targets @@ -1,12 +1,17 @@ $(MSBuildThisFileDirectory)compiletests\ - $(MSBuildThisFileDirectory)build\$(Platform)\$(Configuration)\compiletests\ + $(SolutionDir)build\$(Platform)\$(Configuration)\compiletests\ + + + + + - + $([System.Text.RegularExpressions.Regex]::Replace('$(VisualStudioVersion)', '^(\d+).*', '$1')) diff --git a/tests/googletest.build.cmd b/tests/googletest.build.cmd index 6c5923b53c..ceeecc6248 100644 --- a/tests/googletest.build.cmd +++ b/tests/googletest.build.cmd @@ -63,7 +63,7 @@ if "%PLATFORM%" == "x64" ( -DCMAKE_BUILD_TYPE=%CONFIGURATION% ^ -DCMAKE_INSTALL_PREFIX=%GOOGLETEST_INSTALL_PATH% ^ %GENERATOR_OPTS% ^ - -DBUILD_GMOCK=OFF ^ + -DBUILD_GMOCK=ON ^ -Dgtest_build_tests=OFF ^ -Dgtest_build_samples=OFF ^ %SOURCE_DIR% ^ diff --git a/tests/googletest.targets b/tests/googletest.targets index c07eb8912b..3c6efdf7b8 100644 --- a/tests/googletest.targets +++ b/tests/googletest.targets @@ -1,8 +1,8 @@ $(MSBuildThisFileDirectory)googletest - $(MSBuildThisFileDirectory)build\$(Platform)\$(Configuration)\gtest_build\ - $([MsBuild]::NormalizePath('$(GoogleTestBuildDir)..\googletest\')) + $(SolutionDir)build\$(Platform)\$(Configuration)\gtest_build\ + $(SolutionDir)build\$(Platform)\$(Configuration)\googletest\ $(GoogleTestInstallDir)include;$(IncludePath) $(GoogleTestInstallDir)lib $(GoogleTestInstallDir)lib64 diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index cf9bf7813d..6c0988cf28 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -36,11 +36,10 @@ - (ProjectDir)..\..\..\build\$(Platform)\$(Configuration)\unittests\ - $(Platform)\$(Configuration)\ + $(SolutionDir)build\$(Platform)\$(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Platform)\$(Configuration)\ - $(SolutionDir)sakura_core;%(AdditionalIncludeDirectories) @@ -101,8 +100,8 @@ - - + + @@ -156,7 +155,7 @@ - + {af03508c-515e-4a0e-87be-67ed1e254bd0} From 0125ca91d5ce18b42116e7cf3fad0c8bc9da7500 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 3 May 2021 17:21:21 +0900 Subject: [PATCH 0695/1024] =?UTF-8?q?tests1.exe=E3=81=A7zip=E3=83=AA?= =?UTF-8?q?=E3=82=BD=E3=83=BC=E3=82=B9=E3=82=92=E4=BD=BF=E3=81=88=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build-gnu.bat | 12 + tests/unittests/Makefile | 15 +- tests/unittests/resources/en-US/Makefile | 58 +++++ .../resources/en-US/test-plugin/plugin.def | 1 + tests/unittests/resources/ja-JP/Makefile | 58 +++++ .../resources/ja-JP/test-plugin/plugin.def | 1 + tests/unittests/test-czipfile.cpp | 227 ++++++++++++++++++ tests/unittests/tests1.vcxproj | 26 ++ tests/unittests/tests1.vcxproj.filters | 11 + tests/unittests/tests1_rc.h | 16 ++ tests/unittests/tests1_rc.rc | 108 +++++++++ 11 files changed, 532 insertions(+), 1 deletion(-) create mode 100644 tests/unittests/resources/en-US/Makefile create mode 100644 tests/unittests/resources/en-US/test-plugin/plugin.def create mode 100644 tests/unittests/resources/ja-JP/Makefile create mode 100644 tests/unittests/resources/ja-JP/test-plugin/plugin.def create mode 100644 tests/unittests/test-czipfile.cpp create mode 100644 tests/unittests/tests1_rc.h create mode 100644 tests/unittests/tests1_rc.rc diff --git a/build-gnu.bat b/build-gnu.bat index 389d3eb306..99ae970ca2 100644 --- a/build-gnu.bat +++ b/build-gnu.bat @@ -81,6 +81,18 @@ set TESTS1_MAKEFILE=%~dp0tests\unittests\Makefile set TESTS1_BUILD_DIR=%~dp0build\%platform%\%configuration%\tests1 mkdir "%TESTS1_BUILD_DIR%" > NUL 2>&1 pushd "%TESTS1_BUILD_DIR%" +mingw32-make -f "%~dp0tests\unittests\resources\ja-JP\Makefile" -C "%~dp0tests\unittests\resources\ja-JP" OUTDIR="%TESTS1_BUILD_DIR%" +if errorlevel 1 ( + echo error 2 errorlevel %errorlevel% + popd + exit /b 1 +) +mingw32-make -f "%~dp0tests\unittests\resources\en-US\Makefile" -C "%~dp0tests\unittests\resources\en-US" OUTDIR="%TESTS1_BUILD_DIR%" +if errorlevel 1 ( + echo error 2 errorlevel %errorlevel% + popd + exit /b 1 +) mingw32-make -f "%TESTS1_MAKEFILE%" MYDEFINES="%MYDEFINES%" SAKURA_CORE=../sakura_core OUTDIR=%OUTDIR% -j4 if errorlevel 1 ( echo error 2 errorlevel %errorlevel% diff --git a/tests/unittests/Makefile b/tests/unittests/Makefile index eee8066fbc..dd008c1700 100644 --- a/tests/unittests/Makefile +++ b/tests/unittests/Makefile @@ -39,12 +39,18 @@ MKDIR = md RM = del DIRSEP = $(strip \ ) DEVNULL = NUL +ICONV = iconv.exe +SED = sed.exe +P7Z = 7z.exe else # If unix-like shell is used. MKDIR = mkdir -p RM = rm -f DIRSEP = / DEVNULL = /dev/null +ICONV = iconv +SED = sed +P7Z = 7z endif ifndef PREFIX @@ -120,7 +126,8 @@ exe= $(or $(OUTDIR),.)/tests1.exe SRCS = $(wildcard $(SRCDIR)/test-*.cpp) \ $(wildcard $(SRCDIR)/code-*.cpp) -OBJS = $(SRCS:$(SRCDIR)/%.cpp=%.o) +OBJS = $(SRCS:$(SRCDIR)/%.cpp=%.o) \ + tests1_rc.o DEPS= $(OBJS:%.o=%.d) @@ -140,6 +147,12 @@ $(exe): $(OBJS) $(SAKURA_OBJS) $(OBJS): +tests1_rc.o: tests1_rc.rc.utf8 $(sakura_rc) resources.ja-JP.zip resources.en-US.zip + $(RC) -c utf-8 -I. -I$(SRCDIR) $(DEFINES) $< -o $@ + +tests1_rc.rc.utf8: tests1_rc.rc + $(ICONV) -f utf-16 -t utf-8 $(SRCDIR)/$(subst .utf8,,$(@F)) | $(SED) -e 1i'#pragma code_page(65001)' > $@ + clean: -$(RM) $(subst /,$(DIRSEP),$(exe) $(OBJS)) -$(RM) $(subst /,$(DIRSEP),$(DEPS)) diff --git a/tests/unittests/resources/en-US/Makefile b/tests/unittests/resources/en-US/Makefile new file mode 100644 index 0000000000..74fd6ef65e --- /dev/null +++ b/tests/unittests/resources/en-US/Makefile @@ -0,0 +1,58 @@ +# Makefile for MinGW32/MinGW-W64 + +SRCDIR = $(patsubst %/,%,$(subst \,/,$(dir $(firstword $(MAKEFILE_LIST))))) + +# If SRCDIR is different from the current directory, set it to VPATH. +# (If SRCDIR ends with a backslash, remove it before set to VPATH.) +ifneq ($(SRCDIR),.) +VPATH = $(patsubst %\,%,$(SRCDIR)) +endif + +# The directory where the .exe files will be output. +# If empty, they will be output to the default directories. +OUTDIR = + +ifeq ($(SHELL),sh.exe) +# If cmd.exe is used as a shell. +MKDIR = md +RM = del +DIRSEP = $(strip \ ) +DEVNULL = NUL +P7Z = 7z +else +# If unix-like shell is used. +MKDIR = mkdir -p +RM = rm -f +DIRSEP = / +DEVNULL = /dev/null +P7Z = 7z +endif + +ifndef PREFIX +PREFIX= +RCPREFIX= +else ifeq ($(PREFIX),x86_64-w64-mingw32-) +RCPREFIX=$(PREFIX) +else ifeq ($(PREFIX),i686-w64-mingw32-) +ifeq ($(OS),Windows_NT) +RCPREFIX= +else +RCPREFIX=$(PREFIX) +endif +endif + +RC= $(RCPREFIX)windres + +TARGET = $(or $(OUTDIR),.)/resources.en-US.zip + +SRC_DIRS = test-plugin + +all: $(TARGET) + +$(TARGET): + $(P7Z) u $@ -tzip -mcu=on -r $(SRC_DIRS) + +clean: + -$(RM) $(TARGET) + +.PHONY: all clean diff --git a/tests/unittests/resources/en-US/test-plugin/plugin.def b/tests/unittests/resources/en-US/test-plugin/plugin.def new file mode 100644 index 0000000000..0930e38b46 --- /dev/null +++ b/tests/unittests/resources/en-US/test-plugin/plugin.def @@ -0,0 +1 @@ +plugin.def diff --git a/tests/unittests/resources/ja-JP/Makefile b/tests/unittests/resources/ja-JP/Makefile new file mode 100644 index 0000000000..b24e920efa --- /dev/null +++ b/tests/unittests/resources/ja-JP/Makefile @@ -0,0 +1,58 @@ +# Makefile for MinGW32/MinGW-W64 + +SRCDIR = $(patsubst %/,%,$(subst \,/,$(dir $(firstword $(MAKEFILE_LIST))))) + +# If SRCDIR is different from the current directory, set it to VPATH. +# (If SRCDIR ends with a backslash, remove it before set to VPATH.) +ifneq ($(SRCDIR),.) +VPATH = $(patsubst %\,%,$(SRCDIR)) +endif + +# The directory where the .exe files will be output. +# If empty, they will be output to the default directories. +OUTDIR = + +ifeq ($(SHELL),sh.exe) +# If cmd.exe is used as a shell. +MKDIR = md +RM = del +DIRSEP = $(strip \ ) +DEVNULL = NUL +P7Z = 7z +else +# If unix-like shell is used. +MKDIR = mkdir -p +RM = rm -f +DIRSEP = / +DEVNULL = /dev/null +P7Z = 7z +endif + +ifndef PREFIX +PREFIX= +RCPREFIX= +else ifeq ($(PREFIX),x86_64-w64-mingw32-) +RCPREFIX=$(PREFIX) +else ifeq ($(PREFIX),i686-w64-mingw32-) +ifeq ($(OS),Windows_NT) +RCPREFIX= +else +RCPREFIX=$(PREFIX) +endif +endif + +RC= $(RCPREFIX)windres + +TARGET = $(or $(OUTDIR),.)/resources.ja-JP.zip + +SRC_DIRS = test-plugin + +all: $(TARGET) + +$(TARGET): + $(P7Z) u $@ -tzip -mcu=on -r $(SRC_DIRS) + +clean: + -$(RM) $(TARGET) + +.PHONY: all clean diff --git a/tests/unittests/resources/ja-JP/test-plugin/plugin.def b/tests/unittests/resources/ja-JP/test-plugin/plugin.def new file mode 100644 index 0000000000..0930e38b46 --- /dev/null +++ b/tests/unittests/resources/ja-JP/test-plugin/plugin.def @@ -0,0 +1 @@ +plugin.def diff --git a/tests/unittests/test-czipfile.cpp b/tests/unittests/test-czipfile.cpp new file mode 100644 index 0000000000..9565bbb485 --- /dev/null +++ b/tests/unittests/test-czipfile.cpp @@ -0,0 +1,227 @@ +/*! @file */ +/* + Copyright (C) 2021 Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include + +#ifndef NOMINMAX +#define NOMINMAX +#endif /* #ifndef NOMINMAX */ + +#include +#include +#include + +#include "io/CZipFile.h" + +#include +#include +#include +#include +#include + +#include "tests1_rc.h" + +#define RT_ZIPRES MAKEINTRESOURCE(101) + +using BinarySequence = std::basic_string; +using BinarySequenceView = std::basic_string_view; + +/*! + リソースに埋め込まれたデータを取得する + */ +BinarySequence CopyBinaryFromResource(uint16_t nResourceId, LPCWSTR resource_type) +{ + const auto hInst = static_cast(nullptr); + + const auto hRsrc = ::FindResourceW(hInst, MAKEINTRESOURCE(nResourceId), resource_type); + if (!hRsrc) { + throw std::runtime_error("missing resource!"); + } + + // 見つかったリソースを読み込む + if (const auto hGlobal = ::LoadResource(hInst, hRsrc)) { + if (uint32_t cbSize = ::SizeofResource(hInst, hRsrc)) { + // リソースのデータポインタを取得する + const auto data = static_cast(::LockResource(hGlobal)); + + // リソースデータをコピーする + BinarySequence ret(data, cbSize); + + // リソースポインタを解放する + // ※注意:現代のWindows SDKにおいて、UnlockResourceマクロの実装はnop。 + // この実装では、あえて古代の慣習に従いロック開放をコーディングしてある。 + UnlockResource(hGlobal); + + return ret; + } + } + + return {}; +} + +/*! + バイナリデータをファイルに書き込む + + @param [in] bin バイナリデータ + @param [in] path 書き込み先ファイルパス + */ +bool WriteBinaryToFile(BinarySequenceView bin, std::filesystem::path path) +{ + if (bin.length()) { + using std::ios; + + // 内部的なストリームインスタンスを用意する + // std::byteでパラメータ化したstd::basic_ofstreamだとMinGWビルドが動作しないので、 + // あえて標準の1バイト実装を使う + std::ofstream os; + os.open(path.c_str(), ios::binary | ios::trunc); + + if (os) { + os.write(reinterpret_cast(bin.data()), bin.length()); + return true; + } + } + + return false; +} + +/*! + 新しいテンポラリファイルパスを生成する + Windows APIが生成したパスを開いて閉じるため、呼ぶとファイルが生成される + + 生成されるパスの形式は以下の通り。 + C:\Users\berryzplus\AppData\Local\Temp\tesC85A.tmp + + @param [in] prefix ファイル名の前に付ける3文字の接頭辞。 + */ +std::filesystem::path GetTempFilePath(std::wstring_view prefix) +{ + // 一時フォルダのパスを取得する + const std::wstring tempDir = std::filesystem::temp_directory_path(); + + // パス生成に必要なバッファを確保する + // (一時フォルダのパス+接頭辞(3文字)+4桁の16進数+拡張子+NUL終端) + std::wstring buf(tempDir.length() + 3 + 4 + 4 + 1, L'\0'); + + // Windows API関数を呼び出す。 + // (オーバーフローしないので、エラーチェック省略) + constexpr uint16_t uUnique = 0; + ::GetTempFileNameW(tempDir.c_str(), prefix.data(), uUnique, buf.data()); + + return buf.c_str(); +} + +/*! + 新しいテンポラリファイルパスを生成する + (拡張子を指定できるオーバーロード版) + + @param [in] prefix ファイル名の前に付ける3文字の接頭辞。 + */ +std::filesystem::path GetTempFilePath(std::wstring_view prefix, std::wstring_view extension) +{ + // 1回だけリトライする + for (auto n = 0; n <= 1; ++n) { + // 拡張子指定なし版を呼び出す + auto tempPath = GetTempFilePath(prefix); + + // 作成された一時ファイルを削除する + std::filesystem::remove(tempPath); + + tempPath.replace_extension(extension.data()); + + if (std::error_code ec; !std::filesystem::exists(tempPath, ec)); { + return tempPath; + } + } + + return {}; +} + +/*! + * @brief CZipFIleのテスト + */ +TEST(CZipFIle, IsNG) +{ + // IShellDispatchを使うためにOLEを初期化する必要がある + // このテストでは初期化を忘れた場合の挙動を確認する + CZipFile cZipFile; + ASSERT_FALSE(cZipFile.IsOk()); + + // この場合、他のメソッドを呼び出すと落ちる。 +} + +/*! + * @brief CZipFIleのテスト + */ +TEST(CZipFIle, CZipFIle) +{ + // IShellDispatchを使うためにOLEを初期化する + if (FAILED(::OleInitialize(nullptr))) { + FAIL(); + } + else { + // インスタンス作成時にOLEが初期化されていればIsOkはtrueを返す + CZipFile cZipFile; + ASSERT_TRUE(cZipFile.IsOk()); + + // 一時ファイル名を生成する + // zipファイルパスの拡張子はzipにしないと動かない。 + auto tempPath = GetTempFilePath(L"tes", L"zip"); + + // リソースからzipファイルデータを抽出して一時ファイルに書き込む + const auto bin = CopyBinaryFromResource(IDR_ZIPRES1, RT_ZIPRES); + ASSERT_FALSE(bin.empty()); + ASSERT_TRUE(WriteBinaryToFile(bin, tempPath)); + ASSERT_TRUE(std::filesystem::exists(tempPath)); + + // zipファイルパスを設定する + ASSERT_TRUE(cZipFile.SetZip(tempPath.c_str())); + + // Azure PipelinesとGitHub Actionsで機能しないため、以下テスト省略。 + //// プラグイン設定があるかチェックする + //std::wstring folderName; + //ASSERT_TRUE(cZipFile.ChkPluginDef(L"plugin.def", folderName)); + std::wstring folderName = L"test-plugin"; + + // zipファイルを解凍する + // 展開自体はWindowsの機能なので、展開後パスの存在チェックのみ行う + const auto dest = std::filesystem::current_path().append(L"unzipped").append(L""); + std::filesystem::create_directories(dest); + ASSERT_TRUE(cZipFile.Unzip(dest.c_str())); + ASSERT_TRUE(std::filesystem::exists(dest / folderName.c_str() / L"plugin.def")); + std::filesystem::remove_all(dest); + + // zipファイルパスをクリアする + ASSERT_TRUE(cZipFile.SetZip(L"")); + + // 存在しないzipファイルパスを設定する + ASSERT_FALSE(cZipFile.SetZip(L"not found")); + + // 作成した一時ファイルを削除する + std::filesystem::remove(tempPath); + } + + // OLEをシャットダウンする + ::OleUninitialize(); +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index 6c0988cf28..338ed156f5 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -49,6 +49,9 @@ stdcpp17 /source-charset:utf-8 /execution-charset:shift_jis %(AdditionalOptions) + + $(IntDir);%(AdditionalIncludeDirectories) + Console comctl32.lib;Imm32.lib;mpr.lib;imagehlp.lib;Shlwapi.lib;%(AdditionalDependencies) @@ -109,6 +112,7 @@ + @@ -148,6 +152,12 @@ + + + + + + @@ -166,4 +176,20 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index 926e82b5ef..82692d2da3 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -151,10 +151,21 @@ Test Files + + Test Files + Other Files + + + Other Files + + + Other Files + + \ No newline at end of file diff --git a/tests/unittests/tests1_rc.h b/tests/unittests/tests1_rc.h new file mode 100644 index 0000000000..2f4cefb6d8 --- /dev/null +++ b/tests/unittests/tests1_rc.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ で生成されたインクルード ファイル。 +// test1_rc.rc で使用 +// +#define IDR_ZIPRES1 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/tests/unittests/tests1_rc.rc b/tests/unittests/tests1_rc.rc new file mode 100644 index 0000000000..ed7dace791 --- /dev/null +++ b/tests/unittests/tests1_rc.rc @@ -0,0 +1,108 @@ +// Microsoft Visual C++ generated resource script. +// +#include "tests1_rc.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// 日本語 (日本) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN) +LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "tests1_rc.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// 101 +// +IDR_ZIPRES1 101 "resources.ja-JP.zip" + +#endif // 日本語 (日本) resources +///////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////// +// 英語 (米国) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "tests1_rc.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// 101 +// +IDR_ZIPRES1 101 "resources.en-US.zip" + +#endif // 英語 (米国) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + From f44aaf232e2858322ba9695f2070cc6e9af2d076 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Tue, 18 May 2021 23:20:24 +0900 Subject: [PATCH 0696/1024] =?UTF-8?q?=E3=82=A2=E3=82=A6=E3=83=88=E3=83=A9?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E8=A7=A3=E6=9E=90=E3=82=92=E8=A1=A8=E7=A4=BA?= =?UTF-8?q?=E3=81=97=E3=81=A6=E9=96=89=E3=81=98=E3=82=8B=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E3=81=8C=E3=83=86=E3=82=B9=E3=83=88=E3=81=A7=E5=AE=9F=E8=A1=8C?= =?UTF-8?q?=E3=81=95=E3=82=8C=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit テスト不可な機能「アウトライン解析」の一部コードを自動テストで実行するようにします。 --- tests/unittests/test-winmain.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/unittests/test-winmain.cpp b/tests/unittests/test-winmain.cpp index 114621137f..da6b49be0a 100644 --- a/tests/unittests/test-winmain.cpp +++ b/tests/unittests/test-winmain.cpp @@ -308,6 +308,7 @@ TEST_P(WinMainTest, runEditorProcess) strStartupMacro += L"Up();"; strStartupMacro += L"Right();"; strStartupMacro += L"Left();"; + strStartupMacro += L"Outline(0);"; //アウトライン解析 strStartupMacro += L"ShowFunckey();"; //ShowFunckey 出す strStartupMacro += L"ShowMiniMap();"; //ShowMiniMap 出す strStartupMacro += L"ShowTab();"; //ShowTab 出す @@ -336,6 +337,7 @@ TEST_P(WinMainTest, runEditorProcess) strStartupMacro += L"SetFontSize(0, -1, 2);"; // 相対指定 - これ以上縮小できない strStartupMacro += L"SetFontSize(100, 0, 2);"; // 元に戻す // フォントサイズ設定のテスト(ここまで) + strStartupMacro += L"Outline(2);"; //アウトライン解析を閉じる strStartupMacro += L"ExitAll();"; //NOTE: このコマンドにより、エディタプロセスは起動された直後に終了する。 // コマンドラインを組み立てる From a280a3d5258db998bb1a516db61700d1edc07a3a Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Fri, 21 May 2021 02:37:37 +0900 Subject: [PATCH 0697/1024] =?UTF-8?q?Grep/Grep=E7=BD=AE=E6=8F=9B=E3=83=80?= =?UTF-8?q?=E3=82=A4=E3=82=A2=E3=83=AD=E3=82=B0=E3=81=AE=E9=81=8E=E5=89=B0?= =?UTF-8?q?=E3=81=AA=E4=BD=99=E7=99=BD=E3=82=92=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/sakura_rc.rc | 129 +++++++++++++------------ sakura_lang_en_US/sakura_lang_rc.rc | 140 ++++++++++++++++------------ 2 files changed, 145 insertions(+), 124 deletions(-) diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index 9612b17fc8..fded062960 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -128,7 +128,7 @@ BEGIN COMBOBOX IDC_COMBO_nSortType,34,3,94,65,CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP END -IDD_GREP DIALOGEX 0, 0, 390, 192 +IDD_GREP DIALOGEX 0, 0, 390, 188 STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP CAPTION "Grep" @@ -140,41 +140,41 @@ BEGIN CONTROL "英大小文字区別(&C)",IDC_CHK_LOHICASE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,28,80,8 CONTROL "正規表現(&E)",IDC_CHK_REGULAREXP,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,38,80,8 RTEXT "(ここに正規表現ライブラリのバージョン情報が表示されます)",IDC_STATIC_JRE32VER,144,38,188,8 - RTEXT "検索場所(&L):",IDC_STATIC,4,52,52,8 - COMBOBOX IDC_COMBO_FOLDER,60,52,254,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "&...",IDC_BUTTON_FOLDER,316,52,16,10 - CONTROL "編集中のファイルから検索(&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,66,100,8 - CONTROL "サブフォルダも検索(&S)",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,76,100,8 - CONTROL "カレントフォルダが初期値(&D)",IDC_CHK_DEFAULTFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,86,100,8 - PUSHBUTTON "上階層へ(&U)",IDC_BUTTON_FOLDER_UP,230,66,50,14 - PUSHBUTTON "現フォルダ(&G)",IDC_BUTTON_CURRENTFOLDER,282,66,50,14,BS_MULTILINE - RTEXT "対象ファイル(&I):",IDC_STATIC,4,100,52,8,NOT WS_GROUP - COMBOBOX IDC_COMBO_FILE,60,100,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - RTEXT "除外ファイル(&J):",IDC_STATIC,4,114,52,8,NOT WS_GROUP - COMBOBOX IDC_COMBO_EXCLUDE_FILE,60,114,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - RTEXT "除外フォルダ(&K):",IDC_STATIC,4,128,53,8 - COMBOBOX IDC_COMBO_EXCLUDE_FOLDER,60,128,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - GROUPBOX "結果出力",IDC_STATIC,60,144,68,44,WS_GROUP - CONTROL "該当行(&1)",IDC_RADIO_OUTPUTLINE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,68,156,56,8 - CONTROL "該当部分(&2)",IDC_RADIO_OUTPUTMARKED,"Button",BS_AUTORADIOBUTTON,68,166,56,8 - CONTROL "否該当行(&3)",IDC_RADIO_NOHIT,"Button",BS_AUTORADIOBUTTON,68,176,56,8 - GROUPBOX "結果出力形式",IDC_STATIC,132,144,68,44,WS_GROUP - CONTROL "ノーマル(&4)",IDC_RADIO_OUTPUTSTYLE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,140,156,52,8 - CONTROL "ファイル毎(&5)",IDC_RADIO_OUTPUTSTYLE2,"Button",BS_AUTORADIOBUTTON,140,166,52,8 - CONTROL "結果のみ(&6)",IDC_RADIO_OUTPUTSTYLE3,"Button",BS_AUTORADIOBUTTON,140,176,52,8 - GROUPBOX "その他",IDC_STATIC,204,144,180,44,WS_GROUP - CONTROL "ファイル毎最初のみ検索(&7)",IDC_CHECK_FILE_ONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,156,92,8 - CONTROL "フォルダ毎に表示(&8)",IDC_CHECK_SEP_FOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,166,92,8 - CONTROL "ベースフォルダ表示(&9)",IDC_CHECK_BASE_PATH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,176,92,8 - LTEXT "文字コードセット(&A):",IDC_STATIC,312,152,62,8 - COMBOBOX IDC_COMBO_CHARSET,312,162,64,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,312,176,30,8 + RTEXT "検索場所(&L):",IDC_STATIC,4,50,52,8 + COMBOBOX IDC_COMBO_FOLDER,60,50,254,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "&...",IDC_BUTTON_FOLDER,316,50,16,10 + CONTROL "編集中のファイルから検索(&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,64,100,8 + CONTROL "サブフォルダも検索(&S)",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,74,100,8 + CONTROL "カレントフォルダが初期値(&D)",IDC_CHK_DEFAULTFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,84,100,8 + PUSHBUTTON "上階層へ(&U)",IDC_BUTTON_FOLDER_UP,230,64,50,14 + PUSHBUTTON "現フォルダ(&G)",IDC_BUTTON_CURRENTFOLDER,282,64,50,14,BS_MULTILINE + RTEXT "対象ファイル(&I):",IDC_STATIC,4,96,52,8,NOT WS_GROUP + COMBOBOX IDC_COMBO_FILE,60,96,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + RTEXT "除外ファイル(&J):",IDC_STATIC,4,110,52,8,NOT WS_GROUP + COMBOBOX IDC_COMBO_EXCLUDE_FILE,60,110,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + RTEXT "除外フォルダ(&K):",IDC_STATIC,4,124,53,8 + COMBOBOX IDC_COMBO_EXCLUDE_FOLDER,60,124,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + GROUPBOX "結果出力",IDC_STATIC,60,140,68,44,WS_GROUP + CONTROL "該当行(&1)",IDC_RADIO_OUTPUTLINE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,68,152,56,8 + CONTROL "該当部分(&2)",IDC_RADIO_OUTPUTMARKED,"Button",BS_AUTORADIOBUTTON,68,162,56,8 + CONTROL "否該当行(&3)",IDC_RADIO_NOHIT,"Button",BS_AUTORADIOBUTTON,68,172,56,8 + GROUPBOX "結果出力形式",IDC_STATIC,132,140,68,44,WS_GROUP + CONTROL "ノーマル(&4)",IDC_RADIO_OUTPUTSTYLE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,140,152,52,8 + CONTROL "ファイル毎(&5)",IDC_RADIO_OUTPUTSTYLE2,"Button",BS_AUTORADIOBUTTON,140,162,52,8 + CONTROL "結果のみ(&6)",IDC_RADIO_OUTPUTSTYLE3,"Button",BS_AUTORADIOBUTTON,140,172,52,8 + GROUPBOX "その他",IDC_STATIC,204,140,180,44,WS_GROUP + CONTROL "ファイル毎最初のみ検索(&7)",IDC_CHECK_FILE_ONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,152,92,8 + CONTROL "フォルダ毎に表示(&8)",IDC_CHECK_SEP_FOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,162,92,8 + CONTROL "ベースフォルダ表示(&9)",IDC_CHECK_BASE_PATH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,172,92,8 + LTEXT "文字コードセット(&A):",IDC_STATIC,312,148,62,8 + COMBOBOX IDC_COMBO_CHARSET,312,158,64,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,312,172,30,8 DEFPUSHBUTTON "検索(&F)",IDOK,336,4,50,14,WS_GROUP PUSHBUTTON "キャンセル(&X)",IDCANCEL,336,20,50,14 PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,336,36,50,14 END -IDD_GREP_REPLACE DIALOGEX 0, 0, 390, 204 +IDD_GREP_REPLACE DIALOGEX 0, 0, 390, 202 STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP CAPTION "Grep置換" @@ -198,26 +198,26 @@ BEGIN CONTROL "カレントフォルダが初期値(&D)",IDC_CHK_DEFAULTFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,98,100,8 PUSHBUTTON "上階層へ(&U)",IDC_BUTTON_FOLDER_UP,230,78,50,14 PUSHBUTTON "現フォルダ(&G)",IDC_BUTTON_CURRENTFOLDER,282,78,50,14,BS_MULTILINE - RTEXT "対象ファイル(&I):",IDC_STATIC,4,114,52,8,NOT WS_GROUP - COMBOBOX IDC_COMBO_FILE,60,114,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - RTEXT "除外ファイル(&J):",IDC_STATIC,4,128,52,8,NOT WS_GROUP - COMBOBOX IDC_COMBO_EXCLUDE_FILE,60,128,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - RTEXT "除外フォルダ(&K):",IDC_STATIC,4,142,52,8 - COMBOBOX IDC_COMBO_EXCLUDE_FOLDER,60,142,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - GROUPBOX "結果出力",IDC_STATIC,60,156,68,44,WS_GROUP - CONTROL "該当行(&1)",IDC_RADIO_OUTPUTLINE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,68,168,56,8 - CONTROL "該当部分(&2)",IDC_RADIO_OUTPUTMARKED,"Button",BS_AUTORADIOBUTTON,68,178,56,8 - GROUPBOX "結果出力形式",IDC_STATIC,132,156,68,44,WS_GROUP - CONTROL "ノーマル(&4)",IDC_RADIO_OUTPUTSTYLE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,140,168,52,8 - CONTROL "ファイル毎(&5)",IDC_RADIO_OUTPUTSTYLE2,"Button",BS_AUTORADIOBUTTON,140,178,52,8 - CONTROL "結果のみ(&6)",IDC_RADIO_OUTPUTSTYLE3,"Button",BS_AUTORADIOBUTTON,140,188,52,8 - GROUPBOX "その他",IDC_STATIC,204,156,180,44,WS_GROUP - CONTROL "ファイル毎最初のみ検索(&7)",IDC_CHECK_FILE_ONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,168,92,8 - CONTROL "フォルダ毎に表示(&8)",IDC_CHECK_SEP_FOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,178,92,8 - CONTROL "ベースフォルダ表示(&9)",IDC_CHECK_BASE_PATH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,188,92,8 - LTEXT "文字コードセット(&A):",IDC_STATIC,312,164,62,8 - COMBOBOX IDC_COMBO_CHARSET,312,174,64,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,312,188,30,8 + RTEXT "対象ファイル(&I):",IDC_STATIC,4,110,52,8,NOT WS_GROUP + COMBOBOX IDC_COMBO_FILE,60,110,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + RTEXT "除外ファイル(&J):",IDC_STATIC,4,124,52,8,NOT WS_GROUP + COMBOBOX IDC_COMBO_EXCLUDE_FILE,60,124,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + RTEXT "除外フォルダ(&K):",IDC_STATIC,4,138,52,8 + COMBOBOX IDC_COMBO_EXCLUDE_FOLDER,60,138,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + GROUPBOX "結果出力",IDC_STATIC,60,154,68,44,WS_GROUP + CONTROL "該当行(&1)",IDC_RADIO_OUTPUTLINE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,68,166,56,8 + CONTROL "該当部分(&2)",IDC_RADIO_OUTPUTMARKED,"Button",BS_AUTORADIOBUTTON,68,176,56,8 + GROUPBOX "結果出力形式",IDC_STATIC,132,154,68,44,WS_GROUP + CONTROL "ノーマル(&4)",IDC_RADIO_OUTPUTSTYLE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,140,166,52,8 + CONTROL "ファイル毎(&5)",IDC_RADIO_OUTPUTSTYLE2,"Button",BS_AUTORADIOBUTTON,140,176,52,8 + CONTROL "結果のみ(&6)",IDC_RADIO_OUTPUTSTYLE3,"Button",BS_AUTORADIOBUTTON,140,186,52,8 + GROUPBOX "その他",IDC_STATIC,204,154,180,44,WS_GROUP + CONTROL "ファイル毎最初のみ検索(&7)",IDC_CHECK_FILE_ONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,166,92,8 + CONTROL "フォルダ毎に表示(&8)",IDC_CHECK_SEP_FOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,176,92,8 + CONTROL "ベースフォルダ表示(&9)",IDC_CHECK_BASE_PATH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,186,92,8 + LTEXT "文字コードセット(&A):",IDC_STATIC,312,162,62,8 + COMBOBOX IDC_COMBO_CHARSET,312,172,64,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,312,186,30,8 DEFPUSHBUTTON "置換(&R)",IDOK,336,4,50,14,WS_GROUP PUSHBUTTON "キャンセル(&X)",IDCANCEL,336,20,50,14 PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,336,36,50,14 @@ -1736,7 +1736,7 @@ BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 303 TOPMARGIN, 7 - BOTTOMMARGIN, 136 + BOTTOMMARGIN, 132 END IDD_GREP_REPLACE, DIALOG @@ -1744,7 +1744,7 @@ BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 303 TOPMARGIN, 7 - BOTTOMMARGIN, 158 + BOTTOMMARGIN, 156 END IDD_GREPRUNNING, DIALOG @@ -2183,6 +2183,11 @@ BEGIN 0 END +IDD_GREP_REPLACE AFX_DIALOG_LAYOUT +BEGIN + 0 +END + ///////////////////////////////////////////////////////////////////////////// // @@ -3409,8 +3414,6 @@ BEGIN STR_ERR_DLGEDITVW6 "■" STR_MENU_KEYWORDINFO "キーワードの説明をクリップボードにコピー" STR_MENU_OPENKEYWORDDIC "キーワード辞書を開く" - STR_STATUS_FONTZOOM_0 "%4.0f %%" - STR_STATUS_FONTZOOM_1 "%4.1f %%" STR_STATUS_ROW_COL "%5d 行 %4d 桁" STR_INS_MODE_INS "挿入" STR_INS_MODE_OVR "上書" @@ -3423,6 +3426,15 @@ BEGIN STR_GREP_COMPLETE_WORD " (単語単位で探す)\r\n" END +STRINGTABLE +BEGIN + STR_FILEDIALOG_MRU "最近のファイル(&F):" + STR_FILEDIALOG_OPENFOLDER "最近のフォルダ(&D):" + STR_IMPEXP_REGEX4 "キーワードが長過ぎるため切り捨てました。" + STR_STATUS_FONTZOOM_0 "%4.0f %%" + STR_STATUS_FONTZOOM_1 "%4.1f %%" +END + STRINGTABLE BEGIN STR_GREP_CASE_SENSITIVE " (英大文字小文字を区別する)\r\n" @@ -3905,13 +3917,6 @@ BEGIN STR_ERR_CSHAREDATA18 "${w?$h$:アウトプット$:$f$}${U?(更新)$} - sakura $V ${R?(読みとり専用)$:(上書き禁止)$}${M? 【キーマクロの記録中】$}" END -STRINGTABLE -BEGIN - STR_FILEDIALOG_MRU "最近のファイル(&F):" - STR_FILEDIALOG_OPENFOLDER "最近のフォルダ(&D):" - STR_IMPEXP_REGEX4 "キーワードが長過ぎるため切り捨てました。" -END - STRINGTABLE BEGIN STR_ERR_CSHAREDATA19 "同時に複数の編集用ウィンドウを閉じようとしています。これらを閉じますか?" diff --git a/sakura_lang_en_US/sakura_lang_rc.rc b/sakura_lang_en_US/sakura_lang_rc.rc index 85c9bceb84..25c507c09e 100644 --- a/sakura_lang_en_US/sakura_lang_rc.rc +++ b/sakura_lang_en_US/sakura_lang_rc.rc @@ -134,7 +134,7 @@ BEGIN COMBOBOX IDC_COMBO_nSortType,34,3,94,65,CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP END -IDD_GREP DIALOGEX 0, 0, 430, 192 +IDD_GREP DIALOGEX 0, 0, 430, 188 STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP CAPTION "Grep" @@ -146,44 +146,44 @@ BEGIN CONTROL "&Case sensitive",IDC_CHK_LOHICASE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,72,28,80,8 CONTROL "Regular &expression",IDC_CHK_REGULAREXP,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,72,38,80,8 RTEXT "(Regular expression libraly version is displayed here)",IDC_STATIC_JRE32VER,172,38,200,8 - RTEXT "&Look in:",IDC_STATIC,4,52,64,8 - COMBOBOX IDC_COMBO_FOLDER,72,52,282,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "&...",IDC_BUTTON_FOLDER,356,52,16,10 - CONTROL "Current file (&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,66,120,8 - CONTROL "Include &subfolders",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,76,120,8 + RTEXT "&Look in:",IDC_STATIC,4,50,64,8 + COMBOBOX IDC_COMBO_FOLDER,72,50,282,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "&...",IDC_BUTTON_FOLDER,356,50,16,10 + CONTROL "Current file (&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,64,120,8 + CONTROL "Include &subfolders",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,74,120,8 CONTROL "Set current folder as &default",IDC_CHK_DEFAULTFOLDER, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,86,120,8 - PUSHBUTTON "Move &Up",IDC_BUTTON_FOLDER_UP,260,66,50,14 - PUSHBUTTON "Curr. Folder (&G)",IDC_BUTTON_CURRENTFOLDER,312,66,60,14,BS_MULTILINE - RTEXT "Filters (&I):",IDC_STATIC,4,100,64,8,NOT WS_GROUP - COMBOBOX IDC_COMBO_FILE,72,100,300,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - RTEXT "Exclude file (&J):",IDC_STATIC,4,114,64,8,NOT WS_GROUP - COMBOBOX IDC_COMBO_EXCLUDE_FILE,72,114,300,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - RTEXT "Exclude folder (&K):",IDC_STATIC,4,128,64,8 - COMBOBOX IDC_COMBO_EXCLUDE_FOLDER,72,128,300,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - GROUPBOX "Result output",IDC_STATIC,72,144,92,44,WS_GROUP - CONTROL "Matched line (&1)",IDC_RADIO_OUTPUTLINE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,80,156,80,8 - CONTROL "Matched part (&2)",IDC_RADIO_OUTPUTMARKED,"Button",BS_AUTORADIOBUTTON,80,166,80,8 - CONTROL "Not matched line (&3)",IDC_RADIO_NOHIT,"Button",BS_AUTORADIOBUTTON,80,176,80,8 - GROUPBOX "Output format",IDC_STATIC,168,144,72,44,WS_GROUP - CONTROL "Normal (&4)",IDC_RADIO_OUTPUTSTYLE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,176,156,60,8 - CONTROL "Each file (&5)",IDC_RADIO_OUTPUTSTYLE2,"Button",BS_AUTORADIOBUTTON,176,166,60,8 - CONTROL "Result only (&6)",IDC_RADIO_OUTPUTSTYLE3,"Button",BS_AUTORADIOBUTTON,176,176,60,8 - GROUPBOX "Other",IDC_STATIC,244,144,180,44,WS_GROUP + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,84,120,8 + PUSHBUTTON "Move &Up",IDC_BUTTON_FOLDER_UP,260,64,50,14 + PUSHBUTTON "Curr. Folder (&G)",IDC_BUTTON_CURRENTFOLDER,312,64,60,14,BS_MULTILINE + RTEXT "Filters (&I):",IDC_STATIC,4,96,64,8,NOT WS_GROUP + COMBOBOX IDC_COMBO_FILE,72,96,300,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + RTEXT "Exclude file (&J):",IDC_STATIC,4,110,64,8,NOT WS_GROUP + COMBOBOX IDC_COMBO_EXCLUDE_FILE,72,110,300,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + RTEXT "Exclude folder (&K):",IDC_STATIC,4,124,64,8 + COMBOBOX IDC_COMBO_EXCLUDE_FOLDER,72,124,300,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Result output",IDC_STATIC,72,140,92,44,WS_GROUP + CONTROL "Matched line (&1)",IDC_RADIO_OUTPUTLINE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,80,152,80,8 + CONTROL "Matched part (&2)",IDC_RADIO_OUTPUTMARKED,"Button",BS_AUTORADIOBUTTON,80,162,80,8 + CONTROL "Not matched line (&3)",IDC_RADIO_NOHIT,"Button",BS_AUTORADIOBUTTON,80,172,80,8 + GROUPBOX "Output format",IDC_STATIC,168,140,72,44,WS_GROUP + CONTROL "Normal (&4)",IDC_RADIO_OUTPUTSTYLE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,176,152,60,8 + CONTROL "Each file (&5)",IDC_RADIO_OUTPUTSTYLE2,"Button",BS_AUTORADIOBUTTON,176,162,60,8 + CONTROL "Result only (&6)",IDC_RADIO_OUTPUTSTYLE3,"Button",BS_AUTORADIOBUTTON,176,172,60,8 + GROUPBOX "Other",IDC_STATIC,244,140,180,44,WS_GROUP CONTROL "Only first match each file (&7)",IDC_CHECK_FILE_ONLY, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,252,156,108,8 - CONTROL "Output each folder (&8)",IDC_CHECK_SEP_FOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,252,166,108,8 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,252,152,108,8 + CONTROL "Output each folder (&8)",IDC_CHECK_SEP_FOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,252,162,108,8 CONTROL "Output with relative path (&9)",IDC_CHECK_BASE_PATH, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,252,176,108,8 - LTEXT "Encoding (&A):",IDC_STATIC,360,152,60,8 - COMBOBOX IDC_COMBO_CHARSET,360,162,60,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,360,176,60,8 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,252,172,108,8 + LTEXT "Encoding (&A):",IDC_STATIC,360,148,60,8 + COMBOBOX IDC_COMBO_CHARSET,360,158,60,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,360,172,60,8 DEFPUSHBUTTON "&Find",IDOK,376,4,50,14,WS_GROUP PUSHBUTTON "Cancel (&X)",IDCANCEL,376,20,50,14 PUSHBUTTON "&Help",IDC_BUTTON_HELP,376,36,50,14 END -IDD_GREP_REPLACE DIALOGEX 0, 0, 430, 208 +IDD_GREP_REPLACE DIALOGEX 0, 0, 430, 202 STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP CAPTION "Grep Replace" @@ -208,28 +208,28 @@ BEGIN "Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,98,120,8 PUSHBUTTON "Move &Up",IDC_BUTTON_FOLDER_UP,260,78,50,14 PUSHBUTTON "Curr. Folder (&G)",IDC_BUTTON_CURRENTFOLDER,312,78,60,14,BS_MULTILINE - RTEXT "Filters (&I):",IDC_STATIC,4,114,64,8,NOT WS_GROUP - COMBOBOX IDC_COMBO_FILE,72,114,300,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - RTEXT "Exclude file (&J):",IDC_STATIC,4,128,64,8,NOT WS_GROUP - COMBOBOX IDC_COMBO_EXCLUDE_FILE,72,128,300,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - RTEXT "Exclude folder (&K):",IDC_STATIC,4,142,64,8 - COMBOBOX IDC_COMBO_EXCLUDE_FOLDER,72,142,300,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - GROUPBOX "Result output",IDC_STATIC,72,160,92,44,WS_GROUP - CONTROL "Matched line (&1)",IDC_RADIO_OUTPUTLINE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,80,172,80,8 - CONTROL "Matched part (&2)",IDC_RADIO_OUTPUTMARKED,"Button",BS_AUTORADIOBUTTON,80,182,80,8 - GROUPBOX "Output format",IDC_STATIC,168,160,72,44,WS_GROUP - CONTROL "Normal (&4)",IDC_RADIO_OUTPUTSTYLE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,176,172,60,8 - CONTROL "Each file (&5)",IDC_RADIO_OUTPUTSTYLE2,"Button",BS_AUTORADIOBUTTON,176,182,60,8 - CONTROL "Result only (&6)",IDC_RADIO_OUTPUTSTYLE3,"Button",BS_AUTORADIOBUTTON,176,192,60,8 - GROUPBOX "Other",IDC_STATIC,244,160,180,44,WS_GROUP + RTEXT "Filters (&I):",IDC_STATIC,4,110,64,8,NOT WS_GROUP + COMBOBOX IDC_COMBO_FILE,72,110,300,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + RTEXT "Exclude file (&J):",IDC_STATIC,4,124,64,8,NOT WS_GROUP + COMBOBOX IDC_COMBO_EXCLUDE_FILE,72,124,300,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + RTEXT "Exclude folder (&K):",IDC_STATIC,4,138,64,8 + COMBOBOX IDC_COMBO_EXCLUDE_FOLDER,72,138,300,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Result output",IDC_STATIC,72,154,92,44,WS_GROUP + CONTROL "Matched line (&1)",IDC_RADIO_OUTPUTLINE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,80,166,80,8 + CONTROL "Matched part (&2)",IDC_RADIO_OUTPUTMARKED,"Button",BS_AUTORADIOBUTTON,80,176,80,8 + GROUPBOX "Output format",IDC_STATIC,168,154,72,44,WS_GROUP + CONTROL "Normal (&4)",IDC_RADIO_OUTPUTSTYLE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,176,166,60,8 + CONTROL "Each file (&5)",IDC_RADIO_OUTPUTSTYLE2,"Button",BS_AUTORADIOBUTTON,176,176,60,8 + CONTROL "Result only (&6)",IDC_RADIO_OUTPUTSTYLE3,"Button",BS_AUTORADIOBUTTON,176,186,60,8 + GROUPBOX "Other",IDC_STATIC,244,154,180,44,WS_GROUP CONTROL "Only first match each file (&7)",IDC_CHECK_FILE_ONLY, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,252,172,104,8 - CONTROL "Output each folder (&8)",IDC_CHECK_SEP_FOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,252,182,104,8 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,252,166,104,8 + CONTROL "Output each folder (&8)",IDC_CHECK_SEP_FOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,252,176,104,8 CONTROL "Output with relative path (&9)",IDC_CHECK_BASE_PATH, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,252,192,104,8 - LTEXT "Encoding (&A):",IDC_STATIC,360,168,60,8 - COMBOBOX IDC_COMBO_CHARSET,360,178,60,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,360,192,60,8 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,252,186,104,8 + LTEXT "Encoding (&A):",IDC_STATIC,360,162,60,8 + COMBOBOX IDC_COMBO_CHARSET,360,172,60,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,360,186,60,8 DEFPUSHBUTTON "&Replace",IDOK,376,4,50,14,WS_GROUP PUSHBUTTON "Cancel (&X)",IDCANCEL,376,20,50,14 PUSHBUTTON "&Help",IDC_BUTTON_HELP,376,36,50,14 @@ -1792,7 +1792,7 @@ BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 303 TOPMARGIN, 7 - BOTTOMMARGIN, 136 + BOTTOMMARGIN, 132 END IDD_GREP_REPLACE, DIALOG @@ -1800,7 +1800,7 @@ BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 303 TOPMARGIN, 7 - BOTTOMMARGIN, 158 + BOTTOMMARGIN, 152 END IDD_GREPRUNNING, DIALOG @@ -2229,6 +2229,22 @@ IDC_CURSOR_AUTOSCROLL_DOWN_RIGHT CURSOR "../resource/auto_scrol IDR_MENU1 100 "../resource/MainMenu.ini" +///////////////////////////////////////////////////////////////////////////// +// +// AFX_DIALOG_LAYOUT +// + +IDD_GREP AFX_DIALOG_LAYOUT +BEGIN + 0 +END + +IDD_GREP_REPLACE AFX_DIALOG_LAYOUT +BEGIN + 0 +END + + ///////////////////////////////////////////////////////////////////////////// // // String Table @@ -3460,8 +3476,6 @@ BEGIN STR_ERR_DLGEDITVW6 "■" STR_MENU_KEYWORDINFO "Copy Keyword description to clipboard" STR_MENU_OPENKEYWORDDIC "Open keyword dictionary" - STR_STATUS_FONTZOOM_0 "%4.0f %%" - STR_STATUS_FONTZOOM_1 "%4.1f %%" STR_STATUS_ROW_COL "%5d Ln %4d Col" STR_INS_MODE_INS "INS" STR_INS_MODE_OVR "OVR" @@ -3474,6 +3488,15 @@ BEGIN STR_GREP_COMPLETE_WORD " (Match Whole Word)\r\n" END +STRINGTABLE +BEGIN + STR_FILEDIALOG_MRU "Recent &File:" + STR_FILEDIALOG_OPENFOLDER "Recent Fol&der:" + STR_IMPEXP_REGEX4 "keyword truncated because too long." + STR_STATUS_FONTZOOM_0 "%4.0f %%" + STR_STATUS_FONTZOOM_1 "%4.1f %%" +END + STRINGTABLE BEGIN STR_GREP_CASE_SENSITIVE " (Case Sensitivity = Yes)\r\n" @@ -3964,13 +3987,6 @@ BEGIN STR_ERR_CSHAREDATA18 "${w?$h$:Output$:$f$}${U?(Changed)$} - sakura $V ${R?(Read Only)$:(Write Protected)$}${M? 【Recording Macro】$}" END -STRINGTABLE -BEGIN - STR_FILEDIALOG_MRU "Recent &File:" - STR_FILEDIALOG_OPENFOLDER "Recent Fol&der:" - STR_IMPEXP_REGEX4 "keyword truncated because too long." -END - STRINGTABLE BEGIN STR_ERR_CSHAREDATA19 "Attempting to close multiple editor windows, sure you want to do this?" From e4ec7a674ffacdc429db885588e95bcccb8c4be6 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Fri, 21 May 2021 02:40:37 +0900 Subject: [PATCH 0698/1024] =?UTF-8?q?=E5=8D=98=E8=AA=9E=E5=8D=98=E4=BD=8D/?= =?UTF-8?q?=E5=A4=A7=E6=96=87=E5=AD=97=E5=B0=8F=E6=96=87=E5=AD=97=E5=8C=BA?= =?UTF-8?q?=E5=88=A5=E3=81=AE=E6=96=87=E8=A8=80=E3=82=92=E6=A4=9C=E7=B4=A2?= =?UTF-8?q?=E3=83=80=E3=82=A4=E3=82=A2=E3=83=AD=E3=82=B0=E3=81=A8=E7=B5=B1?= =?UTF-8?q?=E4=B8=80=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/sakura_rc.rc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index fded062960..bb24519b24 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -136,8 +136,8 @@ FONT 9, "Yu Gothic UI", 0, 0, 0x1 BEGIN RTEXT "条件(&N):",IDC_STATIC,4,4,52,8 COMBOBOX IDC_COMBO_TEXT,60,4,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - CONTROL "単語単位(&W)",IDC_CHK_WORD,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,60,18,80,8 - CONTROL "英大小文字区別(&C)",IDC_CHK_LOHICASE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,28,80,8 + CONTROL "単語単位で探す(&W)",IDC_CHK_WORD,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,60,18,80,8 + CONTROL "英大文字と小文字を区別する(&C)",IDC_CHK_LOHICASE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,28,108,8 CONTROL "正規表現(&E)",IDC_CHK_REGULAREXP,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,38,80,8 RTEXT "(ここに正規表現ライブラリのバージョン情報が表示されます)",IDC_STATIC_JRE32VER,144,38,188,8 RTEXT "検索場所(&L):",IDC_STATIC,4,50,52,8 @@ -184,8 +184,8 @@ BEGIN COMBOBOX IDC_COMBO_TEXT,60,4,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP RTEXT "置換後(&Z):",IDC_STATIC,4,18,52,10 COMBOBOX IDC_COMBO_TEXT2,60,18,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - CONTROL "単語単位(&W)",IDC_CHK_WORD,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,60,32,80,8 - CONTROL "英大小文字区別(&C)",IDC_CHK_LOHICASE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,42,80,8 + CONTROL "単語単位で探す(&W)",IDC_CHK_WORD,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,60,32,80,8 + CONTROL "英大文字と小文字を区別する(&C)",IDC_CHK_LOHICASE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,42,108,8 CONTROL "正規表現(&E)",IDC_CHK_REGULAREXP,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,52,80,8 CONTROL "クリップボードの内容で置換(&V)",IDC_CHK_PASTE,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,196,32,120,8 CONTROL "バックアップ作成(&B)",IDC_CHK_BACKUP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,196,42,120,8 From f62e9485e8f16f413a080531a087cc5f3d3b41c4 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Fri, 21 May 2021 17:23:39 +0900 Subject: [PATCH 0699/1024] =?UTF-8?q?=E3=83=A1=E3=82=A4=E3=83=AA=E3=82=AA?= =?UTF-8?q?=E3=81=A7=E3=81=AE=E6=96=87=E5=AD=97=E5=88=87=E3=82=8C=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/sakura_rc.rc | 42 ++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index bb24519b24..e3402246ca 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -137,15 +137,15 @@ BEGIN RTEXT "条件(&N):",IDC_STATIC,4,4,52,8 COMBOBOX IDC_COMBO_TEXT,60,4,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP CONTROL "単語単位で探す(&W)",IDC_CHK_WORD,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,60,18,80,8 - CONTROL "英大文字と小文字を区別する(&C)",IDC_CHK_LOHICASE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,28,108,8 + CONTROL "英大文字と小文字を区別する(&C)",IDC_CHK_LOHICASE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,28,120,8 CONTROL "正規表現(&E)",IDC_CHK_REGULAREXP,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,38,80,8 RTEXT "(ここに正規表現ライブラリのバージョン情報が表示されます)",IDC_STATIC_JRE32VER,144,38,188,8 RTEXT "検索場所(&L):",IDC_STATIC,4,50,52,8 COMBOBOX IDC_COMBO_FOLDER,60,50,254,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "&...",IDC_BUTTON_FOLDER,316,50,16,10 - CONTROL "編集中のファイルから検索(&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,64,100,8 - CONTROL "サブフォルダも検索(&S)",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,74,100,8 - CONTROL "カレントフォルダが初期値(&D)",IDC_CHK_DEFAULTFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,84,100,8 + CONTROL "編集中のファイルから検索(&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,64,120,8 + CONTROL "サブフォルダも検索(&S)",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,74,120,8 + CONTROL "カレントフォルダが初期値(&D)",IDC_CHK_DEFAULTFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,84,120,8 PUSHBUTTON "上階層へ(&U)",IDC_BUTTON_FOLDER_UP,230,64,50,14 PUSHBUTTON "現フォルダ(&G)",IDC_BUTTON_CURRENTFOLDER,282,64,50,14,BS_MULTILINE RTEXT "対象ファイル(&I):",IDC_STATIC,4,96,52,8,NOT WS_GROUP @@ -159,14 +159,14 @@ BEGIN CONTROL "該当部分(&2)",IDC_RADIO_OUTPUTMARKED,"Button",BS_AUTORADIOBUTTON,68,162,56,8 CONTROL "否該当行(&3)",IDC_RADIO_NOHIT,"Button",BS_AUTORADIOBUTTON,68,172,56,8 GROUPBOX "結果出力形式",IDC_STATIC,132,140,68,44,WS_GROUP - CONTROL "ノーマル(&4)",IDC_RADIO_OUTPUTSTYLE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,140,152,52,8 - CONTROL "ファイル毎(&5)",IDC_RADIO_OUTPUTSTYLE2,"Button",BS_AUTORADIOBUTTON,140,162,52,8 - CONTROL "結果のみ(&6)",IDC_RADIO_OUTPUTSTYLE3,"Button",BS_AUTORADIOBUTTON,140,172,52,8 + CONTROL "ノーマル(&4)",IDC_RADIO_OUTPUTSTYLE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,140,152,56,8 + CONTROL "ファイル毎(&5)",IDC_RADIO_OUTPUTSTYLE2,"Button",BS_AUTORADIOBUTTON,140,162,56,8 + CONTROL "結果のみ(&6)",IDC_RADIO_OUTPUTSTYLE3,"Button",BS_AUTORADIOBUTTON,140,172,56,8 GROUPBOX "その他",IDC_STATIC,204,140,180,44,WS_GROUP - CONTROL "ファイル毎最初のみ検索(&7)",IDC_CHECK_FILE_ONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,152,92,8 - CONTROL "フォルダ毎に表示(&8)",IDC_CHECK_SEP_FOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,162,92,8 - CONTROL "ベースフォルダ表示(&9)",IDC_CHECK_BASE_PATH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,172,92,8 - LTEXT "文字コードセット(&A):",IDC_STATIC,312,148,62,8 + CONTROL "ファイル毎最初のみ検索(&7)",IDC_CHECK_FILE_ONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,152,96,8 + CONTROL "フォルダ毎に表示(&8)",IDC_CHECK_SEP_FOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,162,96,8 + CONTROL "ベースフォルダ表示(&9)",IDC_CHECK_BASE_PATH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,172,96,8 + LTEXT "文字コードセット(&A):",IDC_STATIC,312,148,66,8 COMBOBOX IDC_COMBO_CHARSET,312,158,64,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,312,172,30,8 DEFPUSHBUTTON "検索(&F)",IDOK,336,4,50,14,WS_GROUP @@ -185,7 +185,7 @@ BEGIN RTEXT "置換後(&Z):",IDC_STATIC,4,18,52,10 COMBOBOX IDC_COMBO_TEXT2,60,18,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP CONTROL "単語単位で探す(&W)",IDC_CHK_WORD,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,60,32,80,8 - CONTROL "英大文字と小文字を区別する(&C)",IDC_CHK_LOHICASE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,42,108,8 + CONTROL "英大文字と小文字を区別する(&C)",IDC_CHK_LOHICASE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,42,120,8 CONTROL "正規表現(&E)",IDC_CHK_REGULAREXP,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,60,52,80,8 CONTROL "クリップボードの内容で置換(&V)",IDC_CHK_PASTE,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,196,32,120,8 CONTROL "バックアップ作成(&B)",IDC_CHK_BACKUP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,196,42,120,8 @@ -193,9 +193,9 @@ BEGIN RTEXT "検索場所(&L):",IDC_STATIC,4,64,52,8 COMBOBOX IDC_COMBO_FOLDER,60,64,254,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "&...",IDC_BUTTON_FOLDER,316,64,16,10 - CONTROL "編集中のファイルから検索(&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,78,100,8 - CONTROL "サブフォルダも検索(&S)",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,88,100,8 - CONTROL "カレントフォルダが初期値(&D)",IDC_CHK_DEFAULTFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,98,100,8 + CONTROL "編集中のファイルから検索(&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,78,120,8 + CONTROL "サブフォルダも検索(&S)",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,88,120,8 + CONTROL "カレントフォルダが初期値(&D)",IDC_CHK_DEFAULTFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,98,120,8 PUSHBUTTON "上階層へ(&U)",IDC_BUTTON_FOLDER_UP,230,78,50,14 PUSHBUTTON "現フォルダ(&G)",IDC_BUTTON_CURRENTFOLDER,282,78,50,14,BS_MULTILINE RTEXT "対象ファイル(&I):",IDC_STATIC,4,110,52,8,NOT WS_GROUP @@ -208,13 +208,13 @@ BEGIN CONTROL "該当行(&1)",IDC_RADIO_OUTPUTLINE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,68,166,56,8 CONTROL "該当部分(&2)",IDC_RADIO_OUTPUTMARKED,"Button",BS_AUTORADIOBUTTON,68,176,56,8 GROUPBOX "結果出力形式",IDC_STATIC,132,154,68,44,WS_GROUP - CONTROL "ノーマル(&4)",IDC_RADIO_OUTPUTSTYLE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,140,166,52,8 - CONTROL "ファイル毎(&5)",IDC_RADIO_OUTPUTSTYLE2,"Button",BS_AUTORADIOBUTTON,140,176,52,8 - CONTROL "結果のみ(&6)",IDC_RADIO_OUTPUTSTYLE3,"Button",BS_AUTORADIOBUTTON,140,186,52,8 + CONTROL "ノーマル(&4)",IDC_RADIO_OUTPUTSTYLE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,140,166,56,8 + CONTROL "ファイル毎(&5)",IDC_RADIO_OUTPUTSTYLE2,"Button",BS_AUTORADIOBUTTON,140,176,56,8 + CONTROL "結果のみ(&6)",IDC_RADIO_OUTPUTSTYLE3,"Button",BS_AUTORADIOBUTTON,140,186,56,8 GROUPBOX "その他",IDC_STATIC,204,154,180,44,WS_GROUP - CONTROL "ファイル毎最初のみ検索(&7)",IDC_CHECK_FILE_ONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,166,92,8 - CONTROL "フォルダ毎に表示(&8)",IDC_CHECK_SEP_FOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,176,92,8 - CONTROL "ベースフォルダ表示(&9)",IDC_CHECK_BASE_PATH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,186,92,8 + CONTROL "ファイル毎最初のみ検索(&7)",IDC_CHECK_FILE_ONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,166,96,8 + CONTROL "フォルダ毎に表示(&8)",IDC_CHECK_SEP_FOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,176,96,8 + CONTROL "ベースフォルダ表示(&9)",IDC_CHECK_BASE_PATH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,186,96,8 LTEXT "文字コードセット(&A):",IDC_STATIC,312,162,62,8 COMBOBOX IDC_COMBO_CHARSET,312,172,64,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,312,186,30,8 From 28dc64abb3087c50521c93f6d540f22ac8677ad2 Mon Sep 17 00:00:00 2001 From: dep5 <66961537+dep5@users.noreply.github.com> Date: Mon, 12 Apr 2021 21:17:40 +0900 Subject: [PATCH 0700/1024] =?UTF-8?q?=E5=8D=B0=E5=88=B7=E3=83=9A=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E8=A8=AD=E5=AE=9A=E3=81=AE=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/sakura_rc.rc | 82 ++++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index 9612b17fc8..6916b10a1a 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -346,7 +346,7 @@ BEGIN LTEXT "Static",IDC_STATIC_PAPER,251,19,149,10 END -IDD_PRINTSETTING DIALOGEX 0, 0, 302, 253 +IDD_PRINTSETTING DIALOGEX 0, 0, 302, 257 STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP CAPTION "印刷ページ設定" @@ -355,73 +355,73 @@ BEGIN LTEXT "ページ設定(&1)",IDC_STATIC,7,9,45,10 COMBOBOX IDC_COMBO_SETTINGNAME,56,7,163,170,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "設定名変更(&2)...",IDC_BUTTON_EDITSETTINGNAME,224,7,69,14 - GROUPBOX "設定",IDC_STATIC,4,22,289,204 + GROUPBOX "設定",IDC_STATIC,4,22,294,208 RTEXT "半角フォント(&F)",IDC_STATIC,7,37,45,10 - COMBOBOX IDC_COMBO_FONT_HAN,56,35,84,230,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_COMBO_FONT_HAN,56,35,114,230,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP RTEXT "全角フォント(&K)",IDC_STATIC,7,52,45,10 - COMBOBOX IDC_COMBO_FONT_ZEN,56,50,84,230,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_COMBO_FONT_ZEN,56,50,114,230,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP RTEXT "フォント高(&P)",IDC_STATIC,7,71,45,10 EDITTEXT IDC_EDIT_FONTHEIGHT,56,69,30,12,ES_AUTOHSCROLL CONTROL "Spin1",IDC_SPIN_FONTHEIGHT,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,69,9,12 - LTEXT "(1/10mm)",IDC_STATIC,88,71,32,10 - RTEXT "144.5pt",IDC_STATIC_FONTSIZE,120,71,22,10 + LTEXT "(1/10mm)",IDC_STATIC,88,71,40,10 + RTEXT "144.5pt",IDC_STATIC_FONTSIZE,128,71,24,10 RTEXT "行送り(&S)",IDC_STATIC,7,85,45,10 EDITTEXT IDC_EDIT_LINESPACE,56,83,30,12,ES_AUTOHSCROLL CONTROL "Spin2",IDC_SPIN_LINESPACE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,83,9,12 - LTEXT "(%)",IDC_STATIC,88,85,10,10 + LTEXT "(%)",IDC_STATIC,88,85,20,10 RTEXT "段数 (&C)",IDC_STATIC,7,99,45,10 EDITTEXT IDC_EDIT_DANSUU,56,97,30,12,ES_AUTOHSCROLL CONTROL "Spin3",IDC_SPIN_DANSUU,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,97,9,12 RTEXT "段の隙間(&E)",IDC_STATIC,7,113,45,10 EDITTEXT IDC_EDIT_DANSPACE,56,111,30,12,ES_AUTOHSCROLL CONTROL "Spin4",IDC_SPIN_DANSPACE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,111,9,12 - LTEXT "(mm)",IDC_STATIC,88,113,17,10 + LTEXT "(mm)",IDC_STATIC,88,113,25,10 RTEXT "用紙サイズ(&Z)",IDC_STATIC,7,131,45,10 COMBOBOX IDC_COMBO_PAPER,56,129,169,145,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - RTEXT "用紙の向き",IDC_STATIC,7,146,45,10 - CONTROL "縦(&I)",IDC_RADIO_PORTRAIT,"Button",BS_AUTORADIOBUTTON | WS_GROUP,58,145,40,10 - CONTROL "横(&A)",IDC_RADIO_LANDSCAPE,"Button",BS_AUTORADIOBUTTON,102,145,40,10 + RTEXT "用紙の向き",IDC_STATIC,7,148,45,10 + CONTROL "縦(&I)",IDC_RADIO_PORTRAIT,"Button",BS_AUTORADIOBUTTON | WS_GROUP,58,147,40,10 + CONTROL "横(&A)",IDC_RADIO_LANDSCAPE,"Button",BS_AUTORADIOBUTTON,102,147,40,10 RTEXT "余白/上(&T)",IDC_STATIC,7,163,45,10 EDITTEXT IDC_EDIT_MARGINTY,56,161,30,12,ES_AUTOHSCROLL CONTROL "Spin5",IDC_SPIN_MARGINTY,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,161,9,12 - LTEXT "(mm)",IDC_STATIC,88,163,17,10 + LTEXT "(mm)",IDC_STATIC,88,163,25,10 RTEXT "下(&B)",IDC_STATIC,7,177,45,10 EDITTEXT IDC_EDIT_MARGINBY,56,175,30,12,ES_AUTOHSCROLL CONTROL "Spin6",IDC_SPIN_MARGINBY,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,175,9,12 - LTEXT "(mm)",IDC_STATIC,88,177,17,10 + LTEXT "(mm)",IDC_STATIC,88,177,25,10 RTEXT "左(&L)",IDC_STATIC,7,191,45,10 EDITTEXT IDC_EDIT_MARGINLX,56,189,30,12,ES_AUTOHSCROLL CONTROL "Spin7",IDC_SPIN_MARGINLX,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,189,9,12 - LTEXT "(mm)",IDC_STATIC,88,191,17,10 + LTEXT "(mm)",IDC_STATIC,88,191,25,10 RTEXT "右(&R)",IDC_STATIC,7,205,45,10 - EDITTEXT IDC_EDIT_MARGINRX,56,202,30,12,ES_AUTOHSCROLL - CONTROL "Spin8",IDC_SPIN_MARGINRX,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,202,9,12 - LTEXT "(mm)",IDC_STATIC,88,205,17,10 - CONTROL "行番号を印刷(&N)",IDC_CHECK_LINENUMBER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,35,70,10 - CONTROL "英文ワードラップ(&W)",IDC_CHECK_WORDWRAP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,49,78,10 - CONTROL "行頭禁則",IDC_CHECK_PS_KINSOKUHEAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,63,46,10 - CONTROL "行末禁則",IDC_CHECK_PS_KINSOKUTAIL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,77,46,10 - CONTROL "改行ぶら下げ",IDC_CHECK_PS_KINSOKURET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,197,63,60,10 - CONTROL "句読点ぶら下げ",IDC_CHECK_PS_KINSOKUKUTO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,197,77,67,10 - LTEXT "行あたりの文字数:",IDC_STATIC,150,96,65,10 - LTEXT "縦方向の行数:",IDC_STATIC,150,110,65,10 - RTEXT "0",IDC_STATIC_ENABLECOLUMNS,215,96,20,10 - RTEXT "0",IDC_STATIC_ENABLELINES,215,110,20,10 - GROUPBOX "",IDC_STATIC,145,87,112,37 - CONTROL "カラー印刷(&V)",IDC_CHECK_COLORPRINT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,145,61,10 - LTEXT "ヘッダー(&U)",IDC_STATIC,107,163,38,10 - EDITTEXT IDC_EDIT_HEAD1,107,175,50,12,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_HEAD2,158,175,50,12,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_HEAD3,209,175,50,12,ES_AUTOHSCROLL - CONTROL "使用",IDC_CHECK_USE_FONT_HEAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,260,164,30,10 - PUSHBUTTON "フォント",IDC_BUTTON_FONT_HEAD,260,174,30,14 + EDITTEXT IDC_EDIT_MARGINRX,56,203,30,12,ES_AUTOHSCROLL + CONTROL "Spin8",IDC_SPIN_MARGINRX,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,203,9,12 + LTEXT "(mm)",IDC_STATIC,88,205,25,10 + CONTROL "行番号を印刷(&N)",IDC_CHECK_LINENUMBER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,174,35,70,10 + CONTROL "英文ワードラップ(&W)",IDC_CHECK_WORDWRAP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,174,49,78,10 + CONTROL "行頭禁則",IDC_CHECK_PS_KINSOKUHEAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,174,63,46,10 + CONTROL "行末禁則",IDC_CHECK_PS_KINSOKUTAIL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,174,77,46,10 + CONTROL "改行ぶら下げ",IDC_CHECK_PS_KINSOKURET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,227,63,60,10 + CONTROL "句読点ぶら下げ",IDC_CHECK_PS_KINSOKUKUTO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,227,77,67,10 + LTEXT "行あたりの文字数:",IDC_STATIC,174,96,65,10 + LTEXT "縦方向の行数:",IDC_STATIC,174,110,65,10 + RTEXT "0",IDC_STATIC_ENABLECOLUMNS,229,96,20,10 + RTEXT "0",IDC_STATIC_ENABLELINES,229,110,20,10 + GROUPBOX "",IDC_STATIC,169,87,112,37 + CONTROL "カラー印刷(&V)",IDC_CHECK_COLORPRINT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,147,61,10 + LTEXT "ヘッダー(&U)",IDC_STATIC,111,163,38,10 + EDITTEXT IDC_EDIT_HEAD1,111,175,50,12,ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_HEAD2,162,175,50,12,ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_HEAD3,213,175,50,12,ES_AUTOHSCROLL + CONTROL "使用",IDC_CHECK_USE_FONT_HEAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,164,30,10 + PUSHBUTTON "フォント",IDC_BUTTON_FONT_HEAD,264,174,30,14 RTEXT "Font(xxpt/xx.xmm)",IDC_STATIC_FONT_HEAD,145,160,114,14,SS_CENTERIMAGE - LTEXT "フッター(&D)",IDC_STATIC,107,191,38,10 - EDITTEXT IDC_EDIT_FOOT1,107,203,50,12,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_FOOT2,158,203,50,12,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_FOOT3,209,203,50,12,ES_AUTOHSCROLL - CONTROL "使用",IDC_CHECK_USE_FONT_FOOT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,260,192,30,10 - PUSHBUTTON "フォント",IDC_BUTTON_FONT_FOOT,260,202,30,14 + LTEXT "フッター(&D)",IDC_STATIC,111,191,38,10 + EDITTEXT IDC_EDIT_FOOT1,111,203,50,12,ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_FOOT2,162,203,50,12,ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_FOOT3,213,203,50,12,ES_AUTOHSCROLL + CONTROL "使用",IDC_CHECK_USE_FONT_FOOT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,192,30,10 + PUSHBUTTON "フォント",IDC_BUTTON_FONT_FOOT,264,202,30,14 RTEXT "Font(xxpt/xx.xmm)",IDC_STATIC_FONT_FOOT,145,189,114,14,SS_CENTERIMAGE DEFPUSHBUTTON "&OK",IDOK,128,234,50,14 PUSHBUTTON "キャンセル(&X)",IDCANCEL,183,234,50,14 From 3de243ad3dcae7171430f198067d6e91255edcc4 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Fri, 21 May 2021 23:44:03 +0900 Subject: [PATCH 0701/1024] =?UTF-8?q?=E3=83=A1=E3=82=A4=E3=83=AA=E3=82=AA/?= =?UTF-8?q?=E8=8B=B1=E8=AA=9E=E3=83=A2=E3=83=BC=E3=83=89=E3=81=AE=E6=99=82?= =?UTF-8?q?=E3=81=AE=E6=96=87=E5=AD=97=E5=88=87=E3=82=8C=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/sakura_rc.rc | 4 ++-- sakura_lang_en_US/sakura_lang_rc.rc | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index 6916b10a1a..b9c00b7d65 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -415,14 +415,14 @@ BEGIN EDITTEXT IDC_EDIT_HEAD3,213,175,50,12,ES_AUTOHSCROLL CONTROL "使用",IDC_CHECK_USE_FONT_HEAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,164,30,10 PUSHBUTTON "フォント",IDC_BUTTON_FONT_HEAD,264,174,30,14 - RTEXT "Font(xxpt/xx.xmm)",IDC_STATIC_FONT_HEAD,145,160,114,14,SS_CENTERIMAGE + RTEXT "Font(xxpt/xx.xmm)",IDC_STATIC_FONT_HEAD,149,160,110,14,SS_CENTERIMAGE LTEXT "フッター(&D)",IDC_STATIC,111,191,38,10 EDITTEXT IDC_EDIT_FOOT1,111,203,50,12,ES_AUTOHSCROLL EDITTEXT IDC_EDIT_FOOT2,162,203,50,12,ES_AUTOHSCROLL EDITTEXT IDC_EDIT_FOOT3,213,203,50,12,ES_AUTOHSCROLL CONTROL "使用",IDC_CHECK_USE_FONT_FOOT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,192,30,10 PUSHBUTTON "フォント",IDC_BUTTON_FONT_FOOT,264,202,30,14 - RTEXT "Font(xxpt/xx.xmm)",IDC_STATIC_FONT_FOOT,145,189,114,14,SS_CENTERIMAGE + RTEXT "Font(xxpt/xx.xmm)",IDC_STATIC_FONT_FOOT,149,188,110,14,SS_CENTERIMAGE DEFPUSHBUTTON "&OK",IDOK,128,234,50,14 PUSHBUTTON "キャンセル(&X)",IDCANCEL,183,234,50,14 PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,238,234,50,14 diff --git a/sakura_lang_en_US/sakura_lang_rc.rc b/sakura_lang_en_US/sakura_lang_rc.rc index 85c9bceb84..a5738d6b87 100644 --- a/sakura_lang_en_US/sakura_lang_rc.rc +++ b/sakura_lang_en_US/sakura_lang_rc.rc @@ -383,7 +383,7 @@ BEGIN RTEXT "Line &Spacing",IDC_STATIC,5,85,49,8 EDITTEXT IDC_EDIT_LINESPACE,56,83,30,12,ES_AUTOHSCROLL CONTROL "Spin2",IDC_SPIN_LINESPACE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,83,9,12 - LTEXT "(%)",IDC_STATIC,88,85,10,8 + LTEXT "(%)",IDC_STATIC,88,85,14,8 RTEXT "&Col sz",IDC_STATIC,7,99,45,8 EDITTEXT IDC_EDIT_DANSUU,56,97,30,12,ES_AUTOHSCROLL CONTROL "Spin3",IDC_SPIN_DANSUU,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,76,97,9,12 @@ -430,14 +430,14 @@ BEGIN EDITTEXT IDC_EDIT_HEAD3,209,175,50,12,ES_AUTOHSCROLL CONTROL "Use",IDC_CHECK_USE_FONT_HEAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,260,164,30,10 PUSHBUTTON "Font",IDC_BUTTON_FONT_HEAD,260,174,30,14 - RTEXT "Font(xxpt/xx.xmm)",IDC_STATIC_FONT_HEAD,145,161,114,14,SS_CENTERIMAGE + RTEXT "Font(xxpt/xx.xmm)",IDC_STATIC_FONT_HEAD,145,160,114,14,SS_CENTERIMAGE LTEXT "Footer(&D)",IDC_STATIC,107,193,38,8 EDITTEXT IDC_EDIT_FOOT1,107,203,50,12,ES_AUTOHSCROLL EDITTEXT IDC_EDIT_FOOT2,158,203,50,12,ES_AUTOHSCROLL EDITTEXT IDC_EDIT_FOOT3,209,203,50,12,ES_AUTOHSCROLL CONTROL "Use",IDC_CHECK_USE_FONT_FOOT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,260,192,30,10 PUSHBUTTON "Font",IDC_BUTTON_FONT_FOOT,260,202,30,14 - RTEXT "Font(xxpt/xx.xmm)",IDC_STATIC_FONT_FOOT,145,189,114,14,SS_CENTERIMAGE + RTEXT "Font(xxpt/xx.xmm)",IDC_STATIC_FONT_FOOT,145,188,114,14,SS_CENTERIMAGE DEFPUSHBUTTON "&OK",IDOK,128,234,50,14 PUSHBUTTON "Cancel(&X)",IDCANCEL,183,234,50,14 PUSHBUTTON "&Help",IDC_BUTTON_HELP,238,234,50,14 From 6b4f0a8d9ebe8776b5407c00afe32c2994a56914 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sat, 22 May 2021 13:40:25 +0900 Subject: [PATCH 0702/1024] =?UTF-8?q?=E3=82=BF=E3=83=96=E5=B9=85=E3=81=8C?= =?UTF-8?q?=E5=8D=8A=E8=A7=92=E5=8D=98=E4=BD=8D8=E6=A1=81=E3=82=92?= =?UTF-8?q?=E8=B6=85=E3=81=88=E3=82=8B=E5=A0=B4=E5=90=88=E3=81=A7=E3=82=82?= =?UTF-8?q?=E4=B8=8B=E7=B7=9A=E3=81=8C=E6=9C=80=E5=BE=8C=E3=81=BE=E3=81=A7?= =?UTF-8?q?=E6=8F=8F=E7=94=BB=E3=81=95=E3=82=8C=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/figures/CFigure_Comma.cpp | 30 +++++++++--------- sakura_core/view/figures/CFigure_Tab.cpp | 36 ++++++++++++---------- 2 files changed, 34 insertions(+), 32 deletions(-) diff --git a/sakura_core/view/figures/CFigure_Comma.cpp b/sakura_core/view/figures/CFigure_Comma.cpp index 4af965b1c7..e21e2ba16c 100644 --- a/sakura_core/view/figures/CFigure_Comma.cpp +++ b/sakura_core/view/figures/CFigure_Comma.cpp @@ -28,10 +28,8 @@ #include "types/CTypeSupport.h" #include "apiwrap/StdApi.h" -void _DispTab( CGraphics& gr, DispPos* pDispPos, const CEditView* pcView ); - // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -// CFigure_Comma // +// CFigure_Comma // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // bool CFigure_Comma::Match(const wchar_t* pText, int nTextLen) const @@ -58,51 +56,53 @@ void CFigure_Comma::DispSpace(CGraphics& gr, DispPos* pDispPos, CEditView* pcVie DispPos& sPos=*pDispPos; //必要なインターフェース + const CLayoutMgr& pcLayoutMgr = pcView->GetDocument()->m_cLayoutMgr; const CTextMetrics* pMetrics=&pcView->GetTextMetrics(); const CTextArea* pArea=&pcView->GetTextArea(); int nLineHeight = pMetrics->GetHankakuDy(); - int nCharWidth = pMetrics->GetCharPxWidth(); // Layout→Px CTypeSupport cTabType(pcView,COLORIDX_TAB); // これから描画するタブ幅 - CLayoutXInt tabDispWidthLayout = pcView->m_pcEditDoc->m_cLayoutMgr.GetActualTsvSpace( sPos.GetDrawCol(), L',' ); - int tabDispWidth = (Int)tabDispWidthLayout; + CLayoutXInt nTabLayoutWidth = pcLayoutMgr.GetActualTsvSpace(sPos.GetDrawCol(), L','); + size_t nTabDispWidth = static_cast(nTabLayoutWidth) / pcLayoutMgr.GetWidthPerKeta(); if( pcView->m_bMiniMap ){ CLayoutMgr mgrTemp; - mgrTemp.SetTabSpaceInfo(pcView->m_pcEditDoc->m_cLayoutMgr.GetTabSpaceKetas(), - CLayoutXInt(pcView->GetTextMetrics().GetHankakuWidth()) ); - tabDispWidthLayout = mgrTemp.GetActualTabSpace(sPos.GetDrawCol()); - tabDispWidth = (Int)tabDispWidthLayout; + mgrTemp.SetTabSpaceInfo(pcLayoutMgr.GetTabSpaceKetas(), static_cast(pMetrics->GetHankakuWidth())); + nTabLayoutWidth = mgrTemp.GetActualTabSpace(sPos.GetDrawCol()); + nTabDispWidth = static_cast(nTabLayoutWidth) / mgrTemp.GetWidthPerKeta(); } // タブ記号領域 RECT rcClip2; rcClip2.left = sPos.GetDrawPos().x; - rcClip2.right = rcClip2.left + nCharWidth * tabDispWidth; + rcClip2.right = rcClip2.left + static_cast(nTabLayoutWidth); if( rcClip2.left < pArea->GetAreaLeft() ){ rcClip2.left = pArea->GetAreaLeft(); } rcClip2.top = sPos.GetDrawPos().y; rcClip2.bottom = sPos.GetDrawPos().y + nLineHeight; - int nLen = wcslen( m_pTypeData->m_szTabViewString ); if( pArea->IsRectIntersected(rcClip2) ){ if( cTabType.IsDisp() ){ //CSVモード + std::wstring szViewString = L","; + if (szViewString.length() < nTabDispWidth) { + szViewString.append(nTabDispWidth - szViewString.length(), L' '); + } ::ExtTextOut( gr, sPos.GetDrawPos().x, sPos.GetDrawPos().y, ExtTextOutOption() & ~(bTrans? ETO_OPAQUE: 0), &rcClip2, - L", ", - tabDispWidth <= 8 ? tabDispWidth : 8, // Sep. 22, 2002 genta + szViewString.c_str(), + static_cast(szViewString.length()), pMetrics->GetDxArray_AllHankaku() ); } } //Xを進める - sPos.ForwardDrawCol(tabDispWidthLayout); + sPos.ForwardDrawCol(nTabLayoutWidth); } diff --git a/sakura_core/view/figures/CFigure_Tab.cpp b/sakura_core/view/figures/CFigure_Tab.cpp index ee33303985..3eb3584d73 100644 --- a/sakura_core/view/figures/CFigure_Tab.cpp +++ b/sakura_core/view/figures/CFigure_Tab.cpp @@ -61,39 +61,41 @@ void CFigure_Tab::DispSpace(CGraphics& gr, DispPos* pDispPos, CEditView* pcView, DispPos& sPos=*pDispPos; //必要なインターフェース + const CLayoutMgr& pcLayoutMgr = pcView->GetDocument()->m_cLayoutMgr; const CTextMetrics* pMetrics=&pcView->GetTextMetrics(); const CTextArea* pArea=&pcView->GetTextArea(); int nLineHeight = pMetrics->GetHankakuDy(); - int nCharWidth = pMetrics->GetCharPxWidth(); // Layout→Px CTypeSupport cTabType(pcView,COLORIDX_TAB); // これから描画するタブ幅 - CLayoutXInt tabDispWidthLayout = pcView->m_pcEditDoc->m_cLayoutMgr.GetActualTsvSpace( sPos.GetDrawCol(), WCODE::TAB ); - int tabDispWidth = (Int)tabDispWidthLayout; + CLayoutXInt nTabLayoutWidth = pcLayoutMgr.GetActualTsvSpace(sPos.GetDrawCol(), WCODE::TAB); + size_t nTabDispWidth = static_cast(nTabLayoutWidth) / pcLayoutMgr.GetWidthPerKeta(); if( pcView->m_bMiniMap ){ CLayoutMgr mgrTemp; - mgrTemp.SetTabSpaceInfo(pcView->m_pcEditDoc->m_cLayoutMgr.GetTabSpaceKetas(), - CLayoutXInt(pcView->GetTextMetrics().GetHankakuWidth()) ); - tabDispWidthLayout = mgrTemp.GetActualTabSpace(sPos.GetDrawCol()); - tabDispWidth = (Int)tabDispWidthLayout; + mgrTemp.SetTabSpaceInfo(pcLayoutMgr.GetTabSpaceKetas(), static_cast(pMetrics->GetHankakuWidth())); + nTabLayoutWidth = mgrTemp.GetActualTabSpace(sPos.GetDrawCol()); + nTabDispWidth = static_cast(nTabLayoutWidth) / mgrTemp.GetWidthPerKeta(); } // タブ記号領域 RECT rcClip2; rcClip2.left = sPos.GetDrawPos().x; - rcClip2.right = rcClip2.left + nCharWidth * tabDispWidth; + rcClip2.right = rcClip2.left + static_cast(nTabLayoutWidth); if( rcClip2.left < pArea->GetAreaLeft() ){ rcClip2.left = pArea->GetAreaLeft(); } rcClip2.top = sPos.GetDrawPos().y; rcClip2.bottom = sPos.GetDrawPos().y + nLineHeight; - int nLen = wcslen( m_pTypeData->m_szTabViewString ); if( pArea->IsRectIntersected(rcClip2) ){ if( cTabType.IsDisp() && TABARROW_STRING == m_pTypeData->m_bTabArrow ){ //タブ通常表示 //@@@ 2003.03.26 MIK - int fontNo = WCODE::GetFontNo(m_pTypeData->m_szTabViewString[0]); + std::wstring szForeViewString = m_pTypeData->m_szTabViewString; + if (szForeViewString.length() < nTabDispWidth) { + szForeViewString.append(nTabDispWidth - szForeViewString.length(), L' '); + } + int fontNo = WCODE::GetFontNo(szForeViewString[0]); if( fontNo ){ SFONT sFont; sFont.m_sFontAttr = gr.GetCurrentMyFontAttr(); @@ -108,9 +110,8 @@ void CFigure_Tab::DispSpace(CGraphics& gr, DispPos* pDispPos, CEditView* pcView, sPos.GetDrawPos().y + nHeightMargin, ExtTextOutOption() & ~(bTrans? ETO_OPAQUE: 0), &rcClip2, - m_pTypeData->m_szTabViewString, - // tabDispWidth <= 8 ? tabDispWidth : 8, // Sep. 22, 2002 genta - nLen, + szForeViewString.c_str(), + static_cast(szForeViewString.length()), pMetrics->GetDxArray_AllHankaku() // FIXME:半角固定? ); if( fontNo ){ @@ -118,14 +119,15 @@ void CFigure_Tab::DispSpace(CGraphics& gr, DispPos* pDispPos, CEditView* pcView, } }else{ //背景 + std::wstring szBackViewString(nTabDispWidth, L' '); ::ExtTextOut( gr, sPos.GetDrawPos().x, sPos.GetDrawPos().y, ExtTextOutOption() & ~(bTrans? ETO_OPAQUE: 0), &rcClip2, - L" ", - 8, + szBackViewString.c_str(), + static_cast(szBackViewString.length()), pMetrics->GetDxArray_AllHankaku() ); @@ -154,7 +156,7 @@ void CFigure_Tab::DispSpace(CGraphics& gr, DispPos* pDispPos, CEditView* pcView, gr, nPosLeft, sPos.GetDrawPos().y, - nCharWidth * tabDispWidth - (nPosLeft - sPos.GetDrawPos().x), // Tab Area一杯に 2013/4/11 Uchi + static_cast(nTabLayoutWidth) - (nPosLeft - sPos.GetDrawPos().x), // Tab Area一杯に 2013/4/11 Uchi pMetrics->GetHankakuHeight(), gr.GetCurrentMyFontBold() || m_pTypeData->m_ColorInfoArr[COLORIDX_TAB].m_sFontAttr.m_bBoldFont, gr.GetCurrentTextForeColor() @@ -165,7 +167,7 @@ void CFigure_Tab::DispSpace(CGraphics& gr, DispPos* pDispPos, CEditView* pcView, } //Xを進める - sPos.ForwardDrawCol(tabDispWidthLayout); + sPos.ForwardDrawCol(nTabLayoutWidth); } /* From ca38606c247799571d8fe4b7ee9c213f70026206 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 22 May 2021 19:41:28 +0900 Subject: [PATCH 0703/1024] =?UTF-8?q?UTF-8=E3=81=A7=E7=99=BB=E9=8C=B2?= =?UTF-8?q?=E3=81=95=E3=82=8C=E3=81=A6=E3=81=84=E3=81=9Fpowershell?= =?UTF-8?q?=E3=82=B9=E3=82=AF=E3=83=AA=E3=83=97=E3=83=88=E3=82=92=E7=99=BB?= =?UTF-8?q?=E9=8C=B2=E3=81=97=E7=9B=B4=E3=81=99=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/includeGuard/includeGuard.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/includeGuard/includeGuard.ps1 b/tools/includeGuard/includeGuard.ps1 index e1f0e865fc..fa579e9b8b 100644 --- a/tools/includeGuard/includeGuard.ps1 +++ b/tools/includeGuard/includeGuard.ps1 @@ -1,4 +1,4 @@ -<# +<# .SYNOPSIS インクルードガード付加マクロ(powershell版) From 8f78730c65df8c8fbf1eec3cc6d14fb8421e6d79 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 22 May 2021 20:00:19 +0900 Subject: [PATCH 0704/1024] =?UTF-8?q?.gitignore=E3=81=AB=E3=83=93=E3=83=AB?= =?UTF-8?q?=E3=83=89=E6=A7=8B=E6=88=90=E3=81=AE=E5=A4=89=E6=9B=B4=E3=82=92?= =?UTF-8?q?=E5=8F=8D=E6=98=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index a466343847..428bf4ac82 100644 --- a/.gitignore +++ b/.gitignore @@ -11,9 +11,8 @@ /cppcheck-*.xml /cppcheck-install.log /help/sakura/sakura.hh -/tests/build -/tests/unittests/Win32 -/tests/unittests/x64 +/build +/MinGW /Win32 /x64 Backup @@ -32,4 +31,3 @@ sha256.txt tags testData_*.txt UpgradeLog.htm -/tools/googletest From 17ec176d1d91dab3d065c1595c761e91fd3e9abe Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 23 May 2021 16:12:59 +0900 Subject: [PATCH 0705/1024] =?UTF-8?q?StaticVector::push=5Fback=E3=81=AE?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-statictype.cpp | 70 ++++++++++++++++++++++++++ tests/unittests/tests1.vcxproj | 1 + tests/unittests/tests1.vcxproj.filters | 3 ++ 3 files changed, 74 insertions(+) create mode 100644 tests/unittests/test-statictype.cpp diff --git a/tests/unittests/test-statictype.cpp b/tests/unittests/test-statictype.cpp new file mode 100644 index 0000000000..4136a3c599 --- /dev/null +++ b/tests/unittests/test-statictype.cpp @@ -0,0 +1,70 @@ +/*! @file */ +/* + Copyright (C) 2021 Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include + +#ifndef NOMINMAX +#define NOMINMAX +#endif /* #ifndef NOMINMAX */ + +#include +#include +#include + +#include "util/StaticType.h" + +/*! + @brief StaticVectorのテスト + */ +TEST(StaticVector, push_back) +{ + // サイズ1の配列を用意する + auto vec = StaticVector(); + const auto& constVec = vec; + EXPECT_EQ(0, vec.size()); + EXPECT_EQ(1, vec.max_size()); + + // 1つめのデータを登録する + vec.push_back(0xabcdef); + EXPECT_EQ(1, vec.size()); + EXPECT_EQ(0xabcdef, vec[0]); + EXPECT_EQ(0xabcdef, constVec[0]); + + // 飽和したのでこれ以上追加できない + EXPECT_EQ(vec.max_size(), vec.size()); + + // 追加しようとしてもできないことを確認する + +#ifdef _DEBUG + // デバッグビルドでは、正常にクラッシュする + EXPECT_DEATH({ vec.push_back(0xffffff); }, ""); +#else + // リリースビルドではクラッシュしない + // 呼出元が例外に対応していないため、例外を投げるべきではない + EXPECT_NO_THROW({ vec.push_back(0xffffff); }); + + // 追加できないので、サイズをカウントアップしてはいけない + EXPECT_EQ(1, vec.size()); +#endif +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index 338ed156f5..5f1799f3f5 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -147,6 +147,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index 82692d2da3..c5ec04926c 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -154,6 +154,9 @@ Test Files + + Test Files + From 563986cef2de4e639dc226fc502b51c55c4e8a5a Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 23 May 2021 16:15:51 +0900 Subject: [PATCH 0706/1024] =?UTF-8?q?=E3=82=AD=E3=83=BC=E3=83=AF=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=83=AA=E3=82=B9=E3=83=88=E3=81=AE=E5=87=BA=E5=8A=9B?= =?UTF-8?q?=E3=81=ABstd::wstring=E3=82=92=E4=BD=BF=E3=81=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/env/CShareData_IO.cpp | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/sakura_core/env/CShareData_IO.cpp b/sakura_core/env/CShareData_IO.cpp index 8f82c94e77..b1e99c779f 100644 --- a/sakura_core/env/CShareData_IO.cpp +++ b/sakura_core/env/CShareData_IO.cpp @@ -1839,7 +1839,6 @@ void CShareData_IO::ShareData_IO_KeyWords( CDataProfile& cProfile ) DLLSHAREDATA* pShare = &GetDllShareData(); const WCHAR* pszSecName = LTEXT("KeyWords"); - int i, j; WCHAR szKeyName[64]; WCHAR szKeyData[1024]; CKeyWordSetMgr* pCKeyWordSetMgr = &pShare->m_Common.m_sSpecialKeyword.m_CKeyWordSetMgr; @@ -1853,7 +1852,7 @@ void CShareData_IO::ShareData_IO_KeyWords( CDataProfile& cProfile ) // 2004.11.25 Moca キーワードセットの情報は、直接書き換えないで関数を利用する // 初期設定されているため、先に削除しないと固定メモリの確保に失敗する可能性がある pCKeyWordSetMgr->ResetAllKeyWordSet(); - for( i = 0; i < nKeyWordSetNum; ++i ){ + for( int i = 0; i < nKeyWordSetNum; ++i ){ bool bKEYWORDCASE = false; int nKeyWordNum = 0; //値の取得 @@ -1874,8 +1873,10 @@ void CShareData_IO::ShareData_IO_KeyWords( CDataProfile& cProfile ) } } }else{ + auto strMem = std::wstring(); + strMem.reserve(MAX_KEYWORDNUM); int nSize = pCKeyWordSetMgr->m_nKeyWordSetNum; - for( i = 0; i < nSize; ++i ){ + for( int i = 0; i < nSize; ++i ){ auto_sprintf( szKeyName, LTEXT("szSN[%02d]"), i ); cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(pCKeyWordSetMgr->m_szSetNameArr[i])); auto_sprintf( szKeyName, LTEXT("nCASE[%02d]"), i ); @@ -1883,27 +1884,17 @@ void CShareData_IO::ShareData_IO_KeyWords( CDataProfile& cProfile ) auto_sprintf( szKeyName, LTEXT("nKWN[%02d]"), i ); cProfile.IOProfileData( pszSecName, szKeyName, pCKeyWordSetMgr->m_nKeyWordNumArr[i] ); - int nMemLen = 0; - for( j = 0; j < pCKeyWordSetMgr->m_nKeyWordNumArr[i]; ++j ){ - nMemLen += wcslen( pCKeyWordSetMgr->GetKeyWord( i, j ) ); - nMemLen ++; + strMem.clear(); + for( int j = 0; j < pCKeyWordSetMgr->m_nKeyWordNumArr[i]; ++j ){ + strMem += pCKeyWordSetMgr->GetKeyWord( i, j ); + strMem += L'\t'; } - nMemLen ++; + auto nMemLen = static_cast(strMem.length() + 1); + auto pszMem = strMem.data(); auto_sprintf( szKeyName, LTEXT("szKW[%02d].Size"), i ); cProfile.IOProfileData( pszSecName, szKeyName, nMemLen ); - wchar_t* pszMem = new wchar_t[nMemLen + 1]; // May 25, 2003 genta 区切りをTABに変更したので,最後の\0の分を追加 - wchar_t* pMem = pszMem; - for( j = 0; j < pCKeyWordSetMgr->m_nKeyWordNumArr[i]; ++j ){ - // May 25, 2003 genta 区切りをTABに変更 - int kwlen = wcslen( pCKeyWordSetMgr->GetKeyWord( i, j ) ); - wmemcpy( pMem, pCKeyWordSetMgr->GetKeyWord( i, j ), kwlen ); - pMem += kwlen; - *pMem++ = L'\t'; - } - *pMem = L'\0'; auto_sprintf( szKeyName, LTEXT("szKW[%02d]"), i ); cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(pszMem, nMemLen)); - delete [] pszMem; } } } From 16c69df8d1181f1e6e8f5a50f3be8b7a94496382 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 23 May 2021 16:18:58 +0900 Subject: [PATCH 0707/1024] =?UTF-8?q?StaticVector::push=5Fback=E3=81=8C?= =?UTF-8?q?=E3=83=AA=E3=83=AA=E3=83=BC=E3=82=B9=E3=83=93=E3=83=AB=E3=83=89?= =?UTF-8?q?=E3=81=A7=E7=AF=84=E5=9B=B2=E5=A4=96=E3=82=A2=E3=82=AF=E3=82=BB?= =?UTF-8?q?=E3=82=B9=E3=81=99=E3=82=8B=E4=B8=8D=E5=85=B7=E5=90=88=E3=81=AE?= =?UTF-8?q?=E5=AF=BE=E7=AD=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/StaticType.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sakura_core/util/StaticType.h b/sakura_core/util/StaticType.h index 7bae3dd0fe..6e733cd167 100644 --- a/sakura_core/util/StaticType.h +++ b/sakura_core/util/StaticType.h @@ -62,8 +62,9 @@ class StaticVector{ void push_back(SET_TYPE e) { assert(m_nCount Date: Sun, 23 May 2021 18:45:46 +0900 Subject: [PATCH 0708/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/env/CShareData_IO.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/sakura_core/env/CShareData_IO.cpp b/sakura_core/env/CShareData_IO.cpp index b1e99c779f..cd83b5abb3 100644 --- a/sakura_core/env/CShareData_IO.cpp +++ b/sakura_core/env/CShareData_IO.cpp @@ -1874,7 +1874,6 @@ void CShareData_IO::ShareData_IO_KeyWords( CDataProfile& cProfile ) } }else{ auto strMem = std::wstring(); - strMem.reserve(MAX_KEYWORDNUM); int nSize = pCKeyWordSetMgr->m_nKeyWordSetNum; for( int i = 0; i < nSize; ++i ){ auto_sprintf( szKeyName, LTEXT("szSN[%02d]"), i ); From 9935c808bb0314dc044ee7c9d4005670bcc469fb Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 24 May 2021 01:17:20 +0900 Subject: [PATCH 0709/1024] =?UTF-8?q?CDocOutline::MakeFuncList=5FC?= =?UTF-8?q?=E3=81=AE=E7=AF=84=E5=9B=B2=E5=A4=96=E3=82=A2=E3=82=AF=E3=82=BB?= =?UTF-8?q?=E3=82=B9=E3=81=AB=E5=AF=BE=E5=87=A6=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/types/CType_Cpp.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sakura_core/types/CType_Cpp.cpp b/sakura_core/types/CType_Cpp.cpp index 95243f32c1..57d5e40cac 100644 --- a/sakura_core/types/CType_Cpp.cpp +++ b/sakura_core/types/CType_Cpp.cpp @@ -1225,8 +1225,7 @@ void CDocOutline::MakeFuncList_C( CFuncInfoArr* pcFuncInfoArr ,EOutlineType& nOu // 長さチェックは必須 if( nWordIdx < nMaxWordLeng ){ nMode = 1; - szWord[nWordIdx] = pLine[i]; - szWord[nWordIdx + 1] = L'\0'; + ::wcsncpy_s(&szWord[nWordIdx], nMaxWordLeng - nWordIdx, &pLine[i], 1); } else{ nMode = 999; From 2766d31c47d9eac774916ae21ab7bcfc2594d1ad Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 24 May 2021 01:17:42 +0900 Subject: [PATCH 0710/1024] =?UTF-8?q?CDocOutline::MakeTopicList=5Fcobol?= =?UTF-8?q?=E3=81=AE=E7=AF=84=E5=9B=B2=E5=A4=96=E3=82=A2=E3=82=AF=E3=82=BB?= =?UTF-8?q?=E3=82=B9=E3=81=AB=E5=AF=BE=E5=87=A6=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/types/CType_Cobol.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sakura_core/types/CType_Cobol.cpp b/sakura_core/types/CType_Cobol.cpp index a53de18170..dee58a5b63 100644 --- a/sakura_core/types/CType_Cobol.cpp +++ b/sakura_core/types/CType_Cobol.cpp @@ -110,8 +110,7 @@ void CDocOutline::MakeTopicList_cobol( CFuncInfoArr* pcFuncInfoArr ) int nLen = (int)wcslen( szLabel ) - nKeyWordLen; for( i = 0; i <= nLen ; ++i ){ if( 0 == wmemicmp( &szLabel[i], pszKeyWord, nKeyWordLen ) ){ - szLabel[i + nKeyWordLen] = L'\0'; - wcscpy( szDivision, szLabel ); + ::wcsncpy_s( szDivision, szLabel, i + nKeyWordLen - 1); bDivision = TRUE; break; } From 7f09cbfad664a5f527af72254e708b43d977c903 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 23 May 2021 20:46:26 +0900 Subject: [PATCH 0711/1024] =?UTF-8?q?Tex=20TagProcessor=E3=81=AE=E7=AF=84?= =?UTF-8?q?=E5=9B=B2=E5=A4=96=E3=82=A2=E3=82=AF=E3=82=BB=E3=82=B9=E3=81=AB?= =?UTF-8?q?=E5=AF=BE=E5=87=A6=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/types/CType_Tex.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sakura_core/types/CType_Tex.cpp b/sakura_core/types/CType_Tex.cpp index 90976f070b..6ca370c8f1 100644 --- a/sakura_core/types/CType_Tex.cpp +++ b/sakura_core/types/CType_Tex.cpp @@ -149,7 +149,7 @@ class TagProcessor treeDepth の増加幅を1に抑えた結果としてトピックアイテムが 本来の位置(tagDepth)より浅い位置に置かれていることがある。その補正。 */ - if (0 == serials[i]) { + if (i < _countof(serials) && 0 == serials[i]) { treeDepth += 1; } } @@ -160,7 +160,7 @@ class TagProcessor // 2. トピック番号を更新する。 serials[depth] += 1; // インクリメント - for (int i = depth + 1; i <= tagDepth; ++i) { + for (int i = depth + 1; i <= tagDepth && i < _countof(serials); ++i) { serials[i] = 0; // リセット } @@ -178,7 +178,7 @@ class TagProcessor while (i <= tagDepth && serials[i] == 0) { i += 1; // "0." プリフィックスを表示しないようにスキップする。 } - for (; i <= tagDepth; ++i) { + for (; i <= tagDepth && i < _countof(serials); ++i) { // "1.", "2.", "3.",..., "10.",..., "100.",...,"999.", "000.", "001.",... pTopicEnd += auto_sprintf(pTopicEnd, serials[i]/1000 ? L"%03d." : L"%d.", serials[i]%1000); } From d9196a3712bedb05de69929c1f340b5b61ca74a7 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 24 May 2021 01:18:21 +0900 Subject: [PATCH 0712/1024] =?UTF-8?q?MyRGBQUAD=E3=81=AE=E6=9C=AA=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E3=82=B3=E3=83=B3=E3=82=B9=E3=83=88=E3=83=A9=E3=82=AF?= =?UTF-8?q?=E3=82=BF=E3=82=92=E5=89=8A=E9=99=A4=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/uiparts/CImageListMgr.cpp | 9 --------- 1 file changed, 9 deletions(-) diff --git a/sakura_core/uiparts/CImageListMgr.cpp b/sakura_core/uiparts/CImageListMgr.cpp index 7e21da82b9..0d367edbd2 100644 --- a/sakura_core/uiparts/CImageListMgr.cpp +++ b/sakura_core/uiparts/CImageListMgr.cpp @@ -238,15 +238,6 @@ struct MyRGBQUAD : tagRGBQUAD rgbRed = 0; rgbReserved = 0; } - MyRGBQUAD( std::initializer_list a ) noexcept - : tagRGBQUAD() - { - assert( a.size() <= 4 ); - decltype(rgbBlue) *p = &rgbBlue; - for ( auto it = a.begin(); it != a.end(); ++it, ++p ) { - *p = *it; - } - } bool operator == ( const RGBQUAD &rhs ) const noexcept { return rgbBlue == rhs.rgbBlue From aa615db6bcef253ac7884d9d274ce7ffa39bf54e Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Tue, 25 May 2021 01:06:49 +0900 Subject: [PATCH 0713/1024] =?UTF-8?q?=E5=8D=B0=E5=88=B7=E3=83=9A=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E8=A8=AD=E5=AE=9A=E3=83=80=E3=82=A4=E3=82=A2=E3=83=AD?= =?UTF-8?q?=E3=82=B0=E3=81=AE=E3=83=95=E3=82=A9=E3=83=B3=E3=83=88=E3=81=8C?= =?UTF-8?q?=E5=B7=A8=E5=A4=A7=E5=8C=96=E3=81=99=E3=82=8B=E5=95=8F=E9=A1=8C?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDialog.cpp | 4 ++-- sakura_core/dlg/CDlgPrintSetting.cpp | 20 ++++++++------------ sakura_core/dlg/CDlgPrintSetting.h | 1 - 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/sakura_core/dlg/CDialog.cpp b/sakura_core/dlg/CDialog.cpp index c314b2254b..37944d8236 100644 --- a/sakura_core/dlg/CDialog.cpp +++ b/sakura_core/dlg/CDialog.cpp @@ -185,13 +185,13 @@ BOOL CDialog::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) // Modified by KEITA for WIN64 2003.9.6 ::SetWindowLongPtr( m_hWnd, DWLP_USER, lParam ); + m_hFontDialog = UpdateDialogFont( hwndDlg ); + /* ダイアログデータの設定 */ SetData(); SetDialogPosSize(); - m_hFontDialog = UpdateDialogFont( hwndDlg ); - m_bInited = TRUE; return TRUE; } diff --git a/sakura_core/dlg/CDlgPrintSetting.cpp b/sakura_core/dlg/CDlgPrintSetting.cpp index 5343b5605e..d2b297e82a 100644 --- a/sakura_core/dlg/CDlgPrintSetting.cpp +++ b/sakura_core/dlg/CDlgPrintSetting.cpp @@ -160,14 +160,7 @@ BOOL CDlgPrintSetting::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam // ::SetTimer( GetHwnd(), IDT_PRINTSETTING, 500, NULL ); //UpdatePrintableLineAndColumn(); - BOOL bRet = CDialog::OnInitDialog( GetHwnd(), wParam, lParam ); - - // ダイアログフォントの寸法を得ておく - LOGFONT lf; - ::GetObject(GetDialogFont(), sizeof(LOGFONT), &lf); - m_nFontHeight = lf.lfHeight; // フォントサイズ - - return bRet; + return CDialog::OnInitDialog( GetHwnd(), wParam, lParam ); } BOOL CDlgPrintSetting::OnDestroy( void ) @@ -905,14 +898,17 @@ void CDlgPrintSetting::SetFontName( int idTxt, int idUse, LOGFONT& lf, int nPoin CheckDlgButtonBool( GetHwnd(), idUse, bUseFont); ::EnableWindow( GetItemHwnd( idUse ), bUseFont ); if (bUseFont) { - LOGFONT lft; - lft = lf; - lft.lfHeight = m_nFontHeight; // フォントサイズをダイアログに合せる + // サイズだけはダイアログフォントに合わせ + // それ以外は引数lfで指定された設定を採用 + LOGFONT lfCreate = lf; + LOGFONT lfDialogFont = {}; + ::GetObject( GetDialogFont(), sizeof(LOGFONT), &lfDialogFont ); + lfCreate.lfHeight = lfDialogFont.lfHeight; HFONT hFontOld = (HFONT)::SendMessage(GetItemHwnd( idTxt ), WM_GETFONT, 0, 0 ); // 論理フォントを作成 - HFONT hFont = ::CreateFontIndirect( &lft ); + HFONT hFont = ::CreateFontIndirect( &lfCreate ); if (hFont) { // フォントの設定 ::SendMessage( GetItemHwnd( idTxt ), WM_SETFONT, (WPARAM)hFont, MAKELPARAM(FALSE, 0) ); diff --git a/sakura_core/dlg/CDlgPrintSetting.h b/sakura_core/dlg/CDlgPrintSetting.h index 7110f295a2..6b60c5c9fa 100644 --- a/sakura_core/dlg/CDlgPrintSetting.h +++ b/sakura_core/dlg/CDlgPrintSetting.h @@ -58,7 +58,6 @@ class CDlgPrintSetting final : public CDialog PRINTSETTING m_PrintSettingArr[MAX_PRINTSETTINGARR]; int m_nLineNumberColumns; // 行番号表示する場合の桁数 bool m_bPrintableLinesAndColumnInvalid; - int m_nFontHeight; // ダイアログのフォントのサイズ protected: /* From 2ac84f21b21e64d146729ed434a3a425c1a0316c Mon Sep 17 00:00:00 2001 From: berryzplus Date: Tue, 25 May 2021 20:16:52 +0900 Subject: [PATCH 0714/1024] =?UTF-8?q?=E3=83=AA=E3=83=AA=E3=83=BC=E3=82=B9?= =?UTF-8?q?=E3=83=93=E3=83=AB=E3=83=89=E3=81=8A=E7=AF=84=E5=9B=B2=E5=A4=96?= =?UTF-8?q?=E3=82=A2=E3=82=AF=E3=82=BB=E3=82=B9=E5=AF=BE=E7=AD=96=E3=81=AB?= =?UTF-8?q?=E4=BE=8B=E5=A4=96=E3=82=92=E4=BD=BF=E3=81=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/StaticType.h | 7 +++++-- tests/unittests/test-statictype.cpp | 7 +++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/sakura_core/util/StaticType.h b/sakura_core/util/StaticType.h index 6e733cd167..c51cd507d8 100644 --- a/sakura_core/util/StaticType.h +++ b/sakura_core/util/StaticType.h @@ -27,6 +27,8 @@ #define SAKURA_STATICTYPE_54CC2BD5_4C7C_4584_B515_EF8C533B90EA_H_ #pragma once +#include + #include "util/string_ex.h" #include "debug/Debug2.h" @@ -62,9 +64,10 @@ class StaticVector{ void push_back(SET_TYPE e) { assert(m_nCount Date: Fri, 28 May 2021 04:12:41 +0900 Subject: [PATCH 0715/1024] =?UTF-8?q?=E3=82=A2=E3=82=AF=E3=83=86=E3=82=A3?= =?UTF-8?q?=E3=83=96=E3=82=BF=E3=83=96=E3=81=AE=E4=B8=8A=E9=83=A8=E3=81=AB?= =?UTF-8?q?=E3=83=88=E3=83=83=E3=83=97=E3=83=90=E3=83=B3=E3=83=89=E3=82=92?= =?UTF-8?q?=E6=8F=8F=E7=94=BB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/window/CTabWnd.cpp | 87 ++++++++++++++++++---------------- sakura_core/window/CTabWnd.h | 1 + 2 files changed, 47 insertions(+), 41 deletions(-) diff --git a/sakura_core/window/CTabWnd.cpp b/sakura_core/window/CTabWnd.cpp index a48dbda8f8..b09384fb0f 100644 --- a/sakura_core/window/CTabWnd.cpp +++ b/sakura_core/window/CTabWnd.cpp @@ -1575,6 +1575,49 @@ LRESULT CTabWnd::OnTimer( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) return 0L; } +/*! 指定したタブの上部にその位置を示す帯を描画 + @param[in] gr 描画管理 + @param[in] lprcClient タブウィンドウのクライアント領域 + @param[in] nTabIndex 対象タブのインデックス +*/ +void CTabWnd::DrawTopBand( CGraphics& gr, const LPRECT lprcClient, int nTabIndex ) +{ + POINT pt; + RECT rcCurSel; + + TabCtrl_GetItemRect( m_hwndTab, nTabIndex, &rcCurSel ); + pt.x = rcCurSel.left; + pt.y = 0; + ::ClientToScreen( m_hwndTab, &pt ); + ::ScreenToClient( GetHwnd(), &pt ); + rcCurSel.right = pt.x + (rcCurSel.right - rcCurSel.left) - 1; + rcCurSel.left = pt.x + 1; + rcCurSel.top = lprcClient->top + TAB_MARGIN_TOP - 2; + rcCurSel.bottom = lprcClient->top + TAB_MARGIN_TOP; + + if( rcCurSel.left < lprcClient->left + TAB_MARGIN_LEFT ) + rcCurSel.left = lprcClient->left + TAB_MARGIN_LEFT; // 左端限界値 + + HWND hwndUpDown = ::FindWindowEx( m_hwndTab, NULL, UPDOWN_CLASS, 0 ); // タブ内の Up-Down コントロール + if( hwndUpDown && ::IsWindowVisible( hwndUpDown ) ) + { + POINT ptREnd; + RECT rcUpDown; + + ::GetWindowRect( hwndUpDown, &rcUpDown ); + ptREnd.x = rcUpDown.left; + ptREnd.y = 0; + ::ScreenToClient( GetHwnd(), &ptREnd ); + if( rcCurSel.right > ptREnd.x ) + rcCurSel.right = ptREnd.x; // 右端限界値 + } + + if( rcCurSel.left < rcCurSel.right ) + { + ::MyFillRect( gr, rcCurSel, RGB( 255, 128, 0 ) ); + } +} + /*! WM_PAINT処理 @date 2005.09.01 ryoji タブの上に境界線を追加 @@ -1604,47 +1647,9 @@ LRESULT CTabWnd::OnPaint( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) // 上側に境界線を描画する ::DrawEdge(gr, &rc, EDGE_ETCHED, BF_TOP); - // Windowsクラシックスタイルの場合はアクティブタブの上部にトップバンドを描画する // 2006.03.27 ryoji - if( !m_bVisualStyle ) - { - int nCurSel = TabCtrl_GetCurSel( m_hwndTab ); - if( nCurSel >= 0 ) - { - POINT pt; - RECT rcCurSel; - - TabCtrl_GetItemRect( m_hwndTab, nCurSel, &rcCurSel ); - pt.x = rcCurSel.left; - pt.y = 0; - ::ClientToScreen( m_hwndTab, &pt ); - ::ScreenToClient( GetHwnd(), &pt ); - rcCurSel.right = pt.x + (rcCurSel.right - rcCurSel.left) - 1; - rcCurSel.left = pt.x + 1; - rcCurSel.top = rc.top + TAB_MARGIN_TOP - 2; - rcCurSel.bottom = rc.top + TAB_MARGIN_TOP; - - if( rcCurSel.left < rc.left + TAB_MARGIN_LEFT ) - rcCurSel.left = rc.left + TAB_MARGIN_LEFT; // 左端限界値 - - HWND hwndUpDown = ::FindWindowEx( m_hwndTab, NULL, UPDOWN_CLASS, 0 ); // タブ内の Up-Down コントロール - if( hwndUpDown && ::IsWindowVisible( hwndUpDown ) ) - { - POINT ptREnd; - RECT rcUpDown; - - ::GetWindowRect( hwndUpDown, &rcUpDown ); - ptREnd.x = rcUpDown.left; - ptREnd.y = 0; - ::ScreenToClient( GetHwnd(), &ptREnd ); - if( rcCurSel.right > ptREnd.x ) - rcCurSel.right = ptREnd.x; // 右端限界値 - } - - if( rcCurSel.left < rcCurSel.right ) - { - ::MyFillRect( gr, rcCurSel, RGB( 255, 128, 0 ) ); - } - } + // トップバンドを描画する + if( int nCurSel = TabCtrl_GetCurSel( m_hwndTab ); 0 <= nCurSel ){ + DrawTopBand( gr, &rc, nCurSel ); } // サイズボックスを描画する diff --git a/sakura_core/window/CTabWnd.h b/sakura_core/window/CTabWnd.h index 65ee6f9a21..c5591d1b7f 100644 --- a/sakura_core/window/CTabWnd.h +++ b/sakura_core/window/CTabWnd.h @@ -147,6 +147,7 @@ class CTabWnd final : public CWnd void DrawCloseFigure( CGraphics& gr, const RECT &btnRect ); /*!< 閉じるマーク描画処理 */ void DrawCloseBtn( CGraphics& gr, const LPRECT lprcClient ); /*!< 閉じるボタン描画処理 */ // 2006.10.21 ryoji void DrawTabCloseBtn( CGraphics& gr, const LPRECT lprcClient, bool selected, bool bHover ); /*!< タブを閉じるボタン描画処理 */ // 2012.04.14 syat + void DrawTopBand( CGraphics& gr, const LPRECT lprcClient, int nTabIndex ); void GetListBtnRect( const LPRECT lprcClient, LPRECT lprc ); /*!< 一覧ボタンの矩形取得処理 */ void GetCloseBtnRect( const LPRECT lprcClient, LPRECT lprc ); /*!< 閉じるボタンの矩形取得処理 */ // 2006.10.21 ryoji void GetTabCloseBtnRect( const LPRECT lprcClient, LPRECT lprc, bool selected ); /*!< タブを閉じるボタンの矩形取得処理 */ // 2012.04.14 syat From aea43a8b4a759fc0638cff429069eb3fde8b6a85 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sat, 29 May 2021 09:14:56 +0900 Subject: [PATCH 0716/1024] =?UTF-8?q?=E3=83=88=E3=83=83=E3=83=97=E3=83=90?= =?UTF-8?q?=E3=83=B3=E3=83=89=E3=81=AE=E5=A4=A7=E3=81=8D=E3=81=95=E8=AA=BF?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * トップバンドの横幅がタブに対してすこし狭く見えるのを調整する * 表示スケールが100%より大きい時にトップバンドの上に隙間が空かないようにする * 左側はみだし判定が冗長なので廃止する --- sakura_core/window/CTabWnd.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/sakura_core/window/CTabWnd.cpp b/sakura_core/window/CTabWnd.cpp index b09384fb0f..8134d7806f 100644 --- a/sakura_core/window/CTabWnd.cpp +++ b/sakura_core/window/CTabWnd.cpp @@ -20,8 +20,8 @@ warranty. In no event will the authors be held liable for any damages arising from the use of this software. - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; @@ -30,7 +30,7 @@ in the product documentation would be appreciated but is not required. - 2. Altered source versions must be plainly marked as such, + 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source @@ -1019,7 +1019,7 @@ void CTabWnd::Close( void ) ::SetWindowLongPtr( m_hwndTab, GWLP_WNDPROC, (LONG_PTR)gm_pOldWndProc ); gm_pOldWndProc = NULL; } - + // Modified by KEITA for WIN64 2003.9.6 ::SetWindowLongPtr( m_hwndTab, GWLP_USERDATA, (LONG_PTR)NULL ); @@ -1086,7 +1086,7 @@ LRESULT CTabWnd::OnDestroy( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) return 0L; } - + /*! WM_LBUTTONDBLCLK処理 @date 2006.03.26 ryoji 新規作成 */ @@ -1590,14 +1590,14 @@ void CTabWnd::DrawTopBand( CGraphics& gr, const LPRECT lprcClient, int nTabIndex pt.y = 0; ::ClientToScreen( m_hwndTab, &pt ); ::ScreenToClient( GetHwnd(), &pt ); - rcCurSel.right = pt.x + (rcCurSel.right - rcCurSel.left) - 1; - rcCurSel.left = pt.x + 1; - rcCurSel.top = lprcClient->top + TAB_MARGIN_TOP - 2; + rcCurSel.left = pt.x; + rcCurSel.right = pt.x + (rcCurSel.right - rcCurSel.left); + rcCurSel.top = lprcClient->top + 1; rcCurSel.bottom = lprcClient->top + TAB_MARGIN_TOP; - if( rcCurSel.left < lprcClient->left + TAB_MARGIN_LEFT ) - rcCurSel.left = lprcClient->left + TAB_MARGIN_LEFT; // 左端限界値 - + // 左右の範囲制限 + // - 左側はそのまま + // - 右側は[<][>]ボタンが表示中ならその左端まで HWND hwndUpDown = ::FindWindowEx( m_hwndTab, NULL, UPDOWN_CLASS, 0 ); // タブ内の Up-Down コントロール if( hwndUpDown && ::IsWindowVisible( hwndUpDown ) ) { @@ -1653,7 +1653,7 @@ LRESULT CTabWnd::OnPaint( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) } // サイズボックスを描画する - if (!m_pShareData->m_Common.m_sWindow.m_bDispSTATUSBAR + if (!m_pShareData->m_Common.m_sWindow.m_bDispSTATUSBAR && !m_pShareData->m_Common.m_sWindow.m_bDispFUNCKEYWND && m_pShareData->m_Common.m_sTabBar.m_eTabPosition == TabPosition_Bottom) { SizeBox_ONOFF(true); @@ -1934,7 +1934,7 @@ int CTabWnd::FindTabIndexByHWND( HWND hWnd ) tcitem.mask = TCIF_PARAM; tcitem.lParam = (LPARAM)0; TabCtrl_GetItem( m_hwndTab, i, &tcitem ); - + if( (HWND)tcitem.lParam == hWnd ) return i; } From b67d091400010ccf652d8f6a319ab1f3aecc5c8b Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sat, 29 May 2021 10:15:12 +0900 Subject: [PATCH 0717/1024] =?UTF-8?q?=E3=83=88=E3=83=83=E3=83=97=E3=83=90?= =?UTF-8?q?=E3=83=B3=E3=83=89=E3=81=AE=E8=89=B2=E3=81=AB=E3=82=A2=E3=82=AF?= =?UTF-8?q?=E3=82=BB=E3=83=B3=E3=83=88=E3=82=AB=E3=83=A9=E3=83=BC=E3=82=92?= =?UTF-8?q?=E4=BD=BF=E3=81=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura/sakura.vcxproj | 8 ++++---- sakura_core/util/window.cpp | 21 +++++++++++++++++++++ sakura_core/util/window.h | 2 ++ sakura_core/window/CTabWnd.cpp | 4 +++- tests/unittests/tests1.vcxproj | 2 +- 5 files changed, 31 insertions(+), 6 deletions(-) diff --git a/sakura/sakura.vcxproj b/sakura/sakura.vcxproj index 459e28a553..424bb14734 100644 --- a/sakura/sakura.vcxproj +++ b/sakura/sakura.vcxproj @@ -103,7 +103,7 @@ true - comctl32.lib;Imm32.lib;mpr.lib;imagehlp.lib;Shlwapi.lib;%(AdditionalDependencies) + comctl32.lib;Imm32.lib;mpr.lib;imagehlp.lib;Shlwapi.lib;Dwmapi.lib;%(AdditionalDependencies) true Windows true @@ -147,7 +147,7 @@ true - comctl32.lib;Imm32.lib;mpr.lib;imagehlp.lib;Shlwapi.lib;%(AdditionalDependencies) + comctl32.lib;Imm32.lib;mpr.lib;imagehlp.lib;Shlwapi.lib;Dwmapi.lib;%(AdditionalDependencies) true Windows true @@ -188,7 +188,7 @@ true - comctl32.lib;Imm32.lib;mpr.lib;imagehlp.lib;Shlwapi.lib;%(AdditionalDependencies) + comctl32.lib;Imm32.lib;mpr.lib;imagehlp.lib;Shlwapi.lib;Dwmapi.lib;%(AdditionalDependencies) true Windows MachineX86 @@ -229,7 +229,7 @@ true - comctl32.lib;Imm32.lib;mpr.lib;imagehlp.lib;Shlwapi.lib;%(AdditionalDependencies) + comctl32.lib;Imm32.lib;mpr.lib;imagehlp.lib;Shlwapi.lib;Dwmapi.lib;%(AdditionalDependencies) true Windows false diff --git a/sakura_core/util/window.cpp b/sakura_core/util/window.cpp index b8b765ed8e..4aad911013 100644 --- a/sakura_core/util/window.cpp +++ b/sakura_core/util/window.cpp @@ -31,6 +31,7 @@ #include #include "apiwrap/StdApi.h" #include "config/system_constants.h" +#include //DwmGetColorizationColor int CDPI::nDpiX = 96; int CDPI::nDpiY = 96; @@ -430,3 +431,23 @@ HFONT UpdateDialogFont( HWND hwnd, BOOL force ) return hFontDialog; } + +/*! + アクセントカラーを取得 + @param[out] pColorOut アクセントカラーを格納(nullptr許容) + @retval true 取得成功 + @retval false 取得失敗 +*/ +bool GetSystemAccentColor( COLORREF* pColorOut ) +{ + DWORD dwArgb = 0; + BOOL bOpaque = FALSE; + bool bResult = FALSE; + if( SUCCEEDED( ::DwmGetColorizationColor( &dwArgb, &bOpaque ) ) ){ + if( pColorOut != nullptr ){ + *pColorOut = RGB( (dwArgb >> 16) & 0xFFU, (dwArgb >> 8) & 0xFFU, dwArgb & 0xFFU ); + } + bResult = TRUE; + } + return bResult; +} diff --git a/sakura_core/util/window.h b/sakura_core/util/window.h index dd80d25977..b3d050c747 100644 --- a/sakura_core/util/window.h +++ b/sakura_core/util/window.h @@ -195,4 +195,6 @@ class CDCFont HFONT UpdateDialogFont( HWND hwnd, BOOL force = FALSE ); +bool GetSystemAccentColor( COLORREF* pColorOut ); + #endif /* SAKURA_WINDOW_A0833476_5E32_46BE_87B6_ECD55F10D34A_H_ */ diff --git a/sakura_core/window/CTabWnd.cpp b/sakura_core/window/CTabWnd.cpp index 8134d7806f..8938e0ff61 100644 --- a/sakura_core/window/CTabWnd.cpp +++ b/sakura_core/window/CTabWnd.cpp @@ -1614,7 +1614,9 @@ void CTabWnd::DrawTopBand( CGraphics& gr, const LPRECT lprcClient, int nTabIndex if( rcCurSel.left < rcCurSel.right ) { - ::MyFillRect( gr, rcCurSel, RGB( 255, 128, 0 ) ); + COLORREF color = RGB( 255, 128, 0 ); + ::GetSystemAccentColor( &color ); + ::MyFillRect( gr, rcCurSel, color ); } } diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index 5f1799f3f5..9c08a294fa 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -54,7 +54,7 @@ Console - comctl32.lib;Imm32.lib;mpr.lib;imagehlp.lib;Shlwapi.lib;%(AdditionalDependencies) + comctl32.lib;Imm32.lib;mpr.lib;imagehlp.lib;Shlwapi.lib;Dwmapi.lib;%(AdditionalDependencies) true From 07e616731b60a2889a323d068b976baf103f8e2e Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sat, 29 May 2021 10:39:06 +0900 Subject: [PATCH 0718/1024] =?UTF-8?q?CodeSmell=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/window.cpp | 2 +- sakura_core/window/CTabWnd.cpp | 44 +++++++++++++++------------------- sakura_core/window/CTabWnd.h | 2 +- 3 files changed, 21 insertions(+), 27 deletions(-) diff --git a/sakura_core/util/window.cpp b/sakura_core/util/window.cpp index 4aad911013..bafb85aa0a 100644 --- a/sakura_core/util/window.cpp +++ b/sakura_core/util/window.cpp @@ -31,7 +31,7 @@ #include #include "apiwrap/StdApi.h" #include "config/system_constants.h" -#include //DwmGetColorizationColor +#include //DwmGetColorizationColor int CDPI::nDpiX = 96; int CDPI::nDpiY = 96; diff --git a/sakura_core/window/CTabWnd.cpp b/sakura_core/window/CTabWnd.cpp index 8938e0ff61..61af00bd84 100644 --- a/sakura_core/window/CTabWnd.cpp +++ b/sakura_core/window/CTabWnd.cpp @@ -1580,43 +1580,37 @@ LRESULT CTabWnd::OnTimer( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) @param[in] lprcClient タブウィンドウのクライアント領域 @param[in] nTabIndex 対象タブのインデックス */ -void CTabWnd::DrawTopBand( CGraphics& gr, const LPRECT lprcClient, int nTabIndex ) +void CTabWnd::DrawTopBand( const CGraphics& gr, const RECT* prcClient, int nTabIndex ) const { - POINT pt; - RECT rcCurSel; - - TabCtrl_GetItemRect( m_hwndTab, nTabIndex, &rcCurSel ); - pt.x = rcCurSel.left; - pt.y = 0; + RECT rcTab = {}; + TabCtrl_GetItemRect( m_hwndTab, nTabIndex, &rcTab ); + POINT pt = { rcTab.left, 0 }; ::ClientToScreen( m_hwndTab, &pt ); ::ScreenToClient( GetHwnd(), &pt ); - rcCurSel.left = pt.x; - rcCurSel.right = pt.x + (rcCurSel.right - rcCurSel.left); - rcCurSel.top = lprcClient->top + 1; - rcCurSel.bottom = lprcClient->top + TAB_MARGIN_TOP; + RECT rcTopBand = {}; + rcTopBand.left = pt.x; + rcTopBand.right = pt.x + (rcTab.right - rcTab.left); + rcTopBand.top = prcClient->top + 1; + rcTopBand.bottom = prcClient->top + TAB_MARGIN_TOP; // 左右の範囲制限 // - 左側はそのまま // - 右側は[<][>]ボタンが表示中ならその左端まで - HWND hwndUpDown = ::FindWindowEx( m_hwndTab, NULL, UPDOWN_CLASS, 0 ); // タブ内の Up-Down コントロール - if( hwndUpDown && ::IsWindowVisible( hwndUpDown ) ) - { - POINT ptREnd; - RECT rcUpDown; - + if( auto hwndUpDown = ::FindWindowEx( m_hwndTab, nullptr, UPDOWN_CLASS, nullptr ); + ::IsWindowVisible( hwndUpDown ) ){ + RECT rcUpDown = {}; ::GetWindowRect( hwndUpDown, &rcUpDown ); - ptREnd.x = rcUpDown.left; - ptREnd.y = 0; + POINT ptREnd = { rcUpDown.left, 0 }; ::ScreenToClient( GetHwnd(), &ptREnd ); - if( rcCurSel.right > ptREnd.x ) - rcCurSel.right = ptREnd.x; // 右端限界値 + if( rcTopBand.right > ptREnd.x ){ + rcTopBand.right = ptREnd.x; // 右端限界値 + } } - if( rcCurSel.left < rcCurSel.right ) - { + if( rcTopBand.left < rcTopBand.right ){ COLORREF color = RGB( 255, 128, 0 ); ::GetSystemAccentColor( &color ); - ::MyFillRect( gr, rcCurSel, color ); + ::MyFillRect( gr, rcTopBand, color ); } } @@ -1650,7 +1644,7 @@ LRESULT CTabWnd::OnPaint( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) ::DrawEdge(gr, &rc, EDGE_ETCHED, BF_TOP); // トップバンドを描画する - if( int nCurSel = TabCtrl_GetCurSel( m_hwndTab ); 0 <= nCurSel ){ + if( auto nCurSel = TabCtrl_GetCurSel( m_hwndTab ); 0 <= nCurSel ){ DrawTopBand( gr, &rc, nCurSel ); } diff --git a/sakura_core/window/CTabWnd.h b/sakura_core/window/CTabWnd.h index c5591d1b7f..34ffcf213d 100644 --- a/sakura_core/window/CTabWnd.h +++ b/sakura_core/window/CTabWnd.h @@ -147,7 +147,7 @@ class CTabWnd final : public CWnd void DrawCloseFigure( CGraphics& gr, const RECT &btnRect ); /*!< 閉じるマーク描画処理 */ void DrawCloseBtn( CGraphics& gr, const LPRECT lprcClient ); /*!< 閉じるボタン描画処理 */ // 2006.10.21 ryoji void DrawTabCloseBtn( CGraphics& gr, const LPRECT lprcClient, bool selected, bool bHover ); /*!< タブを閉じるボタン描画処理 */ // 2012.04.14 syat - void DrawTopBand( CGraphics& gr, const LPRECT lprcClient, int nTabIndex ); + void DrawTopBand( const CGraphics& gr, const RECT* prcClient, int nTabIndex ) const; void GetListBtnRect( const LPRECT lprcClient, LPRECT lprc ); /*!< 一覧ボタンの矩形取得処理 */ void GetCloseBtnRect( const LPRECT lprcClient, LPRECT lprc ); /*!< 閉じるボタンの矩形取得処理 */ // 2006.10.21 ryoji void GetTabCloseBtnRect( const LPRECT lprcClient, LPRECT lprc, bool selected ); /*!< タブを閉じるボタンの矩形取得処理 */ // 2012.04.14 syat From cd89abc6a05fa2445d5dd57ec3023e5aed9c3770 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 01:09:38 +0900 Subject: [PATCH 0719/1024] =?UTF-8?q?CDLgCandelCloser=E3=81=ABrule-of-five?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 未定義だったコピー/ムーブのコンストラクタ/演算子を定義する --- sakura_core/CSearchAgent.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sakura_core/CSearchAgent.cpp b/sakura_core/CSearchAgent.cpp index 27903fa1ff..27ffa3a45d 100644 --- a/sakura_core/CSearchAgent.cpp +++ b/sakura_core/CSearchAgent.cpp @@ -783,6 +783,10 @@ void CSearchAgent::ReplaceData( DocLineReplaceArg* pArg, bool bEnableExtEol ) CDlgCancel*& m_pDlg; public: CDLgCandelCloser(CDlgCancel*& pDlg): m_pDlg(pDlg){} + CDLgCandelCloser(const CDLgCandelCloser&) = delete; + CDLgCandelCloser& operator = (const CDLgCandelCloser&) = delete; + CDLgCandelCloser(CDLgCandelCloser&&) noexcept = delete; + CDLgCandelCloser& operator = (CDLgCandelCloser&&) noexcept = delete; ~CDLgCandelCloser(){ if( NULL != m_pDlg ){ // 進捗ダイアログを表示しない場合と同じ動きになるようにダイアログは遅延破棄する From e5d1f2d0877da70e410d44da58f8f9247bd46105 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 01:15:45 +0900 Subject: [PATCH 0720/1024] =?UTF-8?q?CResponsefileDeleter=E3=81=ABrule-of-?= =?UTF-8?q?five=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 未定義だったコピー/ムーブのコンストラクタ/演算子を定義 --- sakura_core/_main/CControlTray.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sakura_core/_main/CControlTray.cpp b/sakura_core/_main/CControlTray.cpp index e39d304c81..19786f4e2a 100644 --- a/sakura_core/_main/CControlTray.cpp +++ b/sakura_core/_main/CControlTray.cpp @@ -1156,6 +1156,10 @@ bool CControlTray::OpenNewEditor( struct CResponsefileDeleter{ LPCWSTR fileName; CResponsefileDeleter(): fileName(NULL){} + CResponsefileDeleter(const CResponsefileDeleter&) = delete; + CResponsefileDeleter operator = (const CResponsefileDeleter&) = delete; + CResponsefileDeleter(CResponsefileDeleter&&) noexcept = delete; + CResponsefileDeleter operator = (CResponsefileDeleter&&) noexcept = delete; ~CResponsefileDeleter(){ if( fileName && fileName[0] ){ ::DeleteFile( fileName ); From d73da1c9909646c4db29f1f4ba7b97756a1c9818 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 01:20:00 +0900 Subject: [PATCH 0721/1024] =?UTF-8?q?CMutex=E3=81=ABrule-of-five=E3=82=92?= =?UTF-8?q?=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/_main/CMutex.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/_main/CMutex.h b/sakura_core/_main/CMutex.h index c62fb34502..a7ec685834 100644 --- a/sakura_core/_main/CMutex.h +++ b/sakura_core/_main/CMutex.h @@ -40,11 +40,17 @@ */ class CMutex { + using Me = CMutex; + public: CMutex( BOOL bInitialOwner, LPCWSTR pszName, LPSECURITY_ATTRIBUTES psa = NULL ) { m_hObj = ::CreateMutex( psa, bInitialOwner, pszName ); } + CMutex(const Me&) = delete; + Me& operator = (const Me&) = delete; + CMutex(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; ~CMutex() { if( NULL != m_hObj ) From 1e414087747badf36c0b25089b2e35a7318ef7b0 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 01:24:17 +0900 Subject: [PATCH 0722/1024] =?UTF-8?q?LockGuard=E3=81=ABrule-of-five?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/_main/CMutex.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/sakura_core/_main/CMutex.h b/sakura_core/_main/CMutex.h index a7ec685834..f3f42ab284 100644 --- a/sakura_core/_main/CMutex.h +++ b/sakura_core/_main/CMutex.h @@ -98,6 +98,8 @@ class CMutex */ template class LockGuard { + using Me = LockGuard< EXCLUSIVE_OBJECT>; + EXCLUSIVE_OBJECT& o_; public: LockGuard(EXCLUSIVE_OBJECT& ex) : o_( ex ){ @@ -107,7 +109,10 @@ class LockGuard { LockGuard(EXCLUSIVE_OBJECT& ex, PARAM p) : o_( ex ){ o_.Lock(p); } - + LockGuard(const Me&) = delete; + Me& operator = (const Me&) = delete; + LockGuard(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; ~LockGuard() { o_.Unlock(); } From e38323dbb31806e306c179e483f437e3c3aab202 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 01:24:25 +0900 Subject: [PATCH 0723/1024] =?UTF-8?q?CClipboard=E3=81=ABrule-of-five?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/_os/CClipboard.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/_os/CClipboard.h b/sakura_core/_os/CClipboard.h index c274d56e46..33b74bb21b 100644 --- a/sakura_core/_os/CClipboard.h +++ b/sakura_core/_os/CClipboard.h @@ -33,9 +33,15 @@ class CStringRef; //!サクラエディタ用クリップボードクラス。後々はこの中で全てのクリップボードAPIを呼ばせたい。 class CClipboard{ + using Me = CClipboard; + public: //コンストラクタ・デストラクタ CClipboard(HWND hwnd); //!< コンストラクタ内でクリップボードが開かれる + CClipboard(const Me&) = delete; + Me& operator = (const Me&) = delete; + CClipboard(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; virtual ~CClipboard(); //!< デストラクタ内でCloseが呼ばれる //インターフェース From b1513857b6220530be8493c333becadd84f5d0ce Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 01:33:06 +0900 Subject: [PATCH 0724/1024] =?UTF-8?q?COleLibrary=E3=81=ABrule-of-five?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/_os/CDropTarget.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/_os/CDropTarget.h b/sakura_core/_os/CDropTarget.h index abdc00e42b..647731d04b 100644 --- a/sakura_core/_os/CDropTarget.h +++ b/sakura_core/_os/CDropTarget.h @@ -31,11 +31,17 @@ class CEditView;// 2002/2/3 aroka ヘッダ軽量化 -----------------------------------------------------------------------*/ class COleLibrary { + using Me = COleLibrary; + friend class CYbInterfaceBase; private: // DWORD m_dwCount; // 2009.01.08 ryoji m_dwCount削除 COleLibrary(); public: + COleLibrary(const Me&) = delete; + Me& operator = (const Me&) = delete; + COleLibrary(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; ~COleLibrary(); private: void Initialize(); From ebd74dd42f2b2a54bcbaa59415bc29260b16e343 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 01:37:52 +0900 Subject: [PATCH 0725/1024] =?UTF-8?q?CYbInterfaceBase=E3=81=ABrule-of-five?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/_os/CDropTarget.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/_os/CDropTarget.h b/sakura_core/_os/CDropTarget.h index 647731d04b..eaf06189be 100644 --- a/sakura_core/_os/CDropTarget.h +++ b/sakura_core/_os/CDropTarget.h @@ -50,10 +50,16 @@ class COleLibrary class CYbInterfaceBase { + using Me = CYbInterfaceBase; + private: static COleLibrary m_olelib; protected: CYbInterfaceBase(); + CYbInterfaceBase(const Me&) = delete; + Me& operator = (const Me&) = delete; + CYbInterfaceBase(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; ~CYbInterfaceBase(); static HRESULT QueryInterfaceImpl( IUnknown*, REFIID, REFIID, void** ); }; From 55368cc964aa978d4d433734a30568cf773a312b Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 01:41:37 +0900 Subject: [PATCH 0726/1024] =?UTF-8?q?CDropTarget=E3=81=ABrule-of-five?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/_os/CDropTarget.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/_os/CDropTarget.h b/sakura_core/_os/CDropTarget.h index eaf06189be..57d401c635 100644 --- a/sakura_core/_os/CDropTarget.h +++ b/sakura_core/_os/CDropTarget.h @@ -81,12 +81,18 @@ class CYbInterfaceImpl : public BASEINTERFACE, public CYbInterfaceBase class CDropTarget : public CYbInterfaceImpl { + using Me = CDropTarget; + public: /* || Constructors */ CDropTarget( CEditWnd* ); // 2008.06.20 ryoji CDropTarget( CEditView* ); + CDropTarget(const Me&) = delete; + Me& operator = (const Me&) = delete; + CDropTarget(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; ~CDropTarget(); /* || Attributes & Operations From eb602e3a0dca6e701263cd40a8195eb262f22ad0 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 13:36:01 +0900 Subject: [PATCH 0727/1024] =?UTF-8?q?SSoftTabData=E3=81=ABrule-of-five?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/cmd/CViewCommander_Edit_advanced.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sakura_core/cmd/CViewCommander_Edit_advanced.cpp b/sakura_core/cmd/CViewCommander_Edit_advanced.cpp index f77430b366..56743ea76e 100644 --- a/sakura_core/cmd/CViewCommander_Edit_advanced.cpp +++ b/sakura_core/cmd/CViewCommander_Edit_advanced.cpp @@ -74,6 +74,10 @@ void CViewCommander::Command_INDENT( const wchar_t* const pData, const CLogicInt } IsIndentChar; struct SSoftTabData { SSoftTabData( CLayoutXInt nTab, int width ) : m_szTab(NULL), m_nTab((Int)nTab), m_nXWidth(width - 1), m_nSpWidth(width) {} + SSoftTabData(const SSoftTabData&) = delete; + SSoftTabData& operator = (const SSoftTabData&) = delete; + SSoftTabData(SSoftTabData&&) noexcept = delete; + SSoftTabData& operator = (SSoftTabData&&) noexcept = delete; ~SSoftTabData() { delete []m_szTab; } operator const wchar_t* () { From ef054c13a7553751599516fb251ee4b1698aa095 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 13:53:36 +0900 Subject: [PATCH 0728/1024] =?UTF-8?q?CShareDataLockCounter=E3=81=ABrule-of?= =?UTF-8?q?-five=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/env/DLLSHAREDATA.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/env/DLLSHAREDATA.h b/sakura_core/env/DLLSHAREDATA.h index c63022f98c..a2de7beff3 100644 --- a/sakura_core/env/DLLSHAREDATA.h +++ b/sakura_core/env/DLLSHAREDATA.h @@ -186,8 +186,14 @@ struct DLLSHAREDATA{ }; class CShareDataLockCounter{ + using Me = CShareDataLockCounter; + public: CShareDataLockCounter(); + CShareDataLockCounter(const Me&) = delete; + Me& operator = (const Me&) = delete; + CShareDataLockCounter(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; ~CShareDataLockCounter(); static int GetLockCounter(); From fe00aebff7c10b91252d552d1780bacfdedc77d9 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 14:00:26 +0900 Subject: [PATCH 0729/1024] =?UTF-8?q?CFile=E3=81=ABrule-of-five=E3=82=92?= =?UTF-8?q?=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/io/CFile.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/io/CFile.h b/sakura_core/io/CFile.h index 84910b1d95..b63f95b851 100644 --- a/sakura_core/io/CFile.h +++ b/sakura_core/io/CFile.h @@ -38,9 +38,15 @@ enum EShareMode{ }; class CFile{ + using Me = CFile; + public: //コンストラクタ・デストラクタ CFile(LPCWSTR pszPath = NULL); + CFile(const Me&) = delete; + Me& operator = (const Me&) = delete; + CFile(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; virtual ~CFile(); //パス const CFilePath& GetFilePathClass() const { return m_szFilePath; } From 30516e0916adc18cd7191c65d550f17536ecf465 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 14:12:24 +0900 Subject: [PATCH 0730/1024] =?UTF-8?q?CTmpFile=E3=81=ABrule-of-five?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/io/CFile.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/io/CFile.h b/sakura_core/io/CFile.h index b63f95b851..1913003f8d 100644 --- a/sakura_core/io/CFile.h +++ b/sakura_core/io/CFile.h @@ -72,8 +72,14 @@ class CFile{ //!一時ファイル class CTmpFile{ + using Me = CTmpFile; + public: CTmpFile(){ m_fp = tmpfile(); } + CTmpFile(const Me&) = delete; + Me& operator = (const Me&) = delete; + CTmpFile(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; ~CTmpFile(){ fclose(m_fp); } FILE* GetFilePointer() const{ return m_fp; } private: From c8cd8ac2a27d7387259c339673d9f7319d91d33e Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 14:15:48 +0900 Subject: [PATCH 0731/1024] =?UTF-8?q?CStream=E3=81=ABrule-of-five=E3=82=92?= =?UTF-8?q?=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/io/CStream.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/sakura_core/io/CStream.h b/sakura_core/io/CStream.h index 3ccaa6c541..e44e7930cf 100644 --- a/sakura_core/io/CStream.h +++ b/sakura_core/io/CStream.h @@ -49,10 +49,15 @@ class CError_FileRead{}; //!< 例外:ファイル読み込み失敗 //ストリーム基底クラス class CStream{ + using Me = CStream; + public: //コンストラクタ・デストラクタ CStream(const WCHAR* pszPath, const WCHAR* pszMode, bool bExceptionMode = false); -// CStream(); + CStream(const Me&) = delete; + Me& operator = (const Me&) = delete; + CStream(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; virtual ~CStream(); //演算子 From e009bdbc692d6144b9b27ca0cd8e3ec5c1f82859 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 14:21:51 +0900 Subject: [PATCH 0732/1024] =?UTF-8?q?CTextOutputStream=E3=81=ABrule-of-fiv?= =?UTF-8?q?e=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/io/CTextStream.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/io/CTextStream.h b/sakura_core/io/CTextStream.h index 646521d006..9113d5cd25 100644 --- a/sakura_core/io/CTextStream.h +++ b/sakura_core/io/CTextStream.h @@ -59,9 +59,15 @@ class CTextInputStream : public CStream{ //テキスト出力ストリーム // 2008.01.26 kobake 出力文字コードを任意で指定できるように変更 class CTextOutputStream final : public COutputStream{ + using Me = CTextOutputStream; + public: //コンストラクタ・デストラクタ CTextOutputStream(const WCHAR* pszPath, ECodeType eCodeType = CODE_UTF8, bool bExceptionMode = false, bool bBom = true); + CTextOutputStream(const Me&) = delete; + Me& operator = (const Me&) = delete; + CTextOutputStream(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; virtual ~CTextOutputStream(); //文字列書込。改行を入れたい場合は、文字列内に'\n'を含めること。(クラス側で適切な改行コードに変換して出力します) From 4a52880084d93b2086a178c5834e67bac1217177 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 14:24:12 +0900 Subject: [PATCH 0733/1024] =?UTF-8?q?CZipFile=E3=81=ABrule-of-five?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/io/CZipFile.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/io/CZipFile.h b/sakura_core/io/CZipFile.h index 2f39a0f6c2..ef20c47ae1 100644 --- a/sakura_core/io/CZipFile.h +++ b/sakura_core/io/CZipFile.h @@ -38,8 +38,14 @@ class CZipFile { Folder* pZipFile; std::wstring sZipName; + using Me = CZipFile; + public: CZipFile(); // コンストラクタ + CZipFile(const Me&) = delete; + Me& operator = (const Me&) = delete; + CZipFile(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; ~CZipFile(); // デストラクタ public: From 71da4e2a0c7638201a030f9926ed475a3709a210 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 14:38:19 +0900 Subject: [PATCH 0734/1024] =?UTF-8?q?CKeyMacroMgr=E3=81=ABrule-of-five?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/macro/CKeyMacroMgr.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/macro/CKeyMacroMgr.h b/sakura_core/macro/CKeyMacroMgr.h index d48c7d7df8..8f6c5eb539 100644 --- a/sakura_core/macro/CKeyMacroMgr.h +++ b/sakura_core/macro/CKeyMacroMgr.h @@ -34,11 +34,17 @@ class CMacro; */ class CKeyMacroMgr : public CMacroManagerBase { + using Me = CKeyMacroMgr; + public: /* || Constructors */ CKeyMacroMgr(); + CKeyMacroMgr(const Me&) = delete; + Me& operator = (const Me&) = delete; + CKeyMacroMgr(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; ~CKeyMacroMgr(); /* From e78fbdca06493d934637f73b1b99ff4f3fd2266f Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 14:53:49 +0900 Subject: [PATCH 0735/1024] =?UTF-8?q?CMacroParam=E3=81=ABrule-of-five?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/macro/CMacro.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sakura_core/macro/CMacro.h b/sakura_core/macro/CMacro.h index 558776663d..f581eb77ca 100644 --- a/sakura_core/macro/CMacro.h +++ b/sakura_core/macro/CMacro.h @@ -65,6 +65,9 @@ struct CMacroParam{ m_nDataLen = obj.m_nDataLen; m_eType = obj.m_eType; } + CMacroParam& operator = (const CMacroParam&) = delete; + CMacroParam(CMacroParam&&) noexcept = delete; + CMacroParam& operator = (CMacroParam&&) noexcept = delete; ~CMacroParam(){ Clear(); } From 8558284f3d250973d6266ce7b5c826746379c26d Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 14:55:28 +0900 Subject: [PATCH 0736/1024] =?UTF-8?q?CMacro=E3=81=ABrule-of-five=E3=82=92?= =?UTF-8?q?=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/macro/CMacro.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/macro/CMacro.h b/sakura_core/macro/CMacro.h index f581eb77ca..8b47e5bd3a 100644 --- a/sakura_core/macro/CMacro.h +++ b/sakura_core/macro/CMacro.h @@ -98,11 +98,17 @@ struct CMacroParam{ */ class CMacro { + using Me = CMacro; + public: /* || Constructors */ CMacro( EFunctionCode nFuncID ); // 機能IDを指定して初期化 + CMacro(const Me&) = delete; + Me& operator = (const Me&) = delete; + CMacro(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; ~CMacro(); void ClearMacroParam(); From 7e34f20c0d017204180342c95aa3b8b392dc7481 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 14:59:07 +0900 Subject: [PATCH 0737/1024] =?UTF-8?q?CWSHClient=E3=81=ABrule-of-five?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/macro/CWSH.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/macro/CWSH.h b/sakura_core/macro/CWSH.h index 7a360f04b5..111cb1c424 100644 --- a/sakura_core/macro/CWSH.h +++ b/sakura_core/macro/CWSH.h @@ -35,6 +35,8 @@ typedef void (*ScriptErrorHandler)(BSTR Description, BSTR Source, void *Data); class CWSHClient final : IWSHClient { + using Me = CWSHClient; + public: // 型定義 typedef std::vector List; // 所有しているインタフェースオブジェクトのリスト @@ -42,6 +44,10 @@ class CWSHClient final : IWSHClient // コンストラクタ・デストラクタ CWSHClient(const wchar_t *AEngine, ScriptErrorHandler AErrorHandler, void *AData); + CWSHClient(const Me&) = delete; + Me& operator = (const Me&) = delete; + CWSHClient(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; ~CWSHClient(); // フィールド・アクセサ From c70acb0a4c3f1c46e7ca1abd467bb7a24f8217bb Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 15:00:55 +0900 Subject: [PATCH 0738/1024] =?UTF-8?q?CPoolResource=E3=81=ABrule-of-five?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/mem/CPoolResource.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sakura_core/mem/CPoolResource.h b/sakura_core/mem/CPoolResource.h index 8fc773b0bf..d9a500773f 100644 --- a/sakura_core/mem/CPoolResource.h +++ b/sakura_core/mem/CPoolResource.h @@ -34,6 +34,8 @@ template class CPoolResource : public std::pmr::memory_resource { + using Me = CPoolResource; + public: CPoolResource() { @@ -41,6 +43,11 @@ class CPoolResource : public std::pmr::memory_resource AllocateBlock(); } + CPoolResource(const Me&) = delete; + Me& operator = (const Me&) = delete; + CPoolResource(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; + virtual ~CPoolResource() { // メモリ確保した領域の連結リストを辿って全てのブロック分のメモリ解放 From 3fe08932be7334093a5df20ccf2b9cf51e79e415 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 15:03:01 +0900 Subject: [PATCH 0739/1024] =?UTF-8?q?CRecycledBufferDynamic=E3=81=ABrule-o?= =?UTF-8?q?f-five=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/mem/CRecycledBuffer.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/mem/CRecycledBuffer.h b/sakura_core/mem/CRecycledBuffer.h index e43d1495b3..b271dcd8c3 100644 --- a/sakura_core/mem/CRecycledBuffer.h +++ b/sakura_core/mem/CRecycledBuffer.h @@ -71,6 +71,8 @@ class CRecycledBuffer{ }; class CRecycledBufferDynamic{ + using Me = CRecycledBufferDynamic; + //コンフィグ private: static const int CHAIN_COUNT = 64; //再利用可能なブロック数。 @@ -84,6 +86,10 @@ class CRecycledBufferDynamic{ m_buf[i]=NULL; } } + CRecycledBufferDynamic(const Me&) = delete; + Me& operator = (const Me&) = delete; + CRecycledBufferDynamic(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; ~CRecycledBufferDynamic() { for(int i=0;i<_countof(m_buf);i++){ From af29b62269a3e9a9db9123e1f8d818647e7a9331 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 15:05:53 +0900 Subject: [PATCH 0740/1024] =?UTF-8?q?SAutoSwitch=E3=81=ABrule-of-five?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/outline/CDlgFuncList.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sakura_core/outline/CDlgFuncList.cpp b/sakura_core/outline/CDlgFuncList.cpp index d7a7dfeb3a..0a430a6380 100644 --- a/sakura_core/outline/CDlgFuncList.cpp +++ b/sakura_core/outline/CDlgFuncList.cpp @@ -3417,6 +3417,10 @@ bool CDlgFuncList::ChangeLayout( int nId ) struct SAutoSwitch { SAutoSwitch( bool* pbSwitch ): m_pbSwitch( pbSwitch ) { *m_pbSwitch = true; } + SAutoSwitch(const SAutoSwitch&) = delete; + SAutoSwitch& operator = (const SAutoSwitch&) = delete; + SAutoSwitch(SAutoSwitch&&) noexcept = delete; + SAutoSwitch& operator = (SAutoSwitch&&) noexcept = delete; ~SAutoSwitch() { *m_pbSwitch = false; } bool* m_pbSwitch; } SAutoSwitch( &m_bInChangeLayout ); // 処理中は m_bInChangeLayout フラグを ON にしておく From 4d0884d54b7dde4b196854f3bb0c433a119c1e14 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 15:09:05 +0900 Subject: [PATCH 0741/1024] =?UTF-8?q?SLockWindowUpdate=E3=81=ABrule-of-fiv?= =?UTF-8?q?e=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/outline/CDlgFuncList.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sakura_core/outline/CDlgFuncList.cpp b/sakura_core/outline/CDlgFuncList.cpp index 0a430a6380..dd92ac1163 100644 --- a/sakura_core/outline/CDlgFuncList.cpp +++ b/sakura_core/outline/CDlgFuncList.cpp @@ -3716,6 +3716,10 @@ BOOL CDlgFuncList::Track( POINT ptDrag ) struct SLockWindowUpdate { // 画面にゴミが残らないように SLockWindowUpdate(){ ::LockWindowUpdate( ::GetDesktopWindow() ); } + SLockWindowUpdate(const SLockWindowUpdate&) = delete; + SLockWindowUpdate& operator = (const SLockWindowUpdate&) = delete; + SLockWindowUpdate(SLockWindowUpdate&&) noexcept = delete; + SLockWindowUpdate& operator = (SLockWindowUpdate&&) noexcept = delete; ~SLockWindowUpdate(){ ::LockWindowUpdate( NULL ); } } sLockWindowUpdate; From 5ab5c6df70ae01590cf8c9d0624e410379d9d432 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 15:14:22 +0900 Subject: [PATCH 0742/1024] =?UTF-8?q?CPlugin=E3=81=ABrule-of-five=E3=82=92?= =?UTF-8?q?=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/plugin/CPlugin.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/plugin/CPlugin.h b/sakura_core/plugin/CPlugin.h index 93e3817e4d..579aec2bf6 100644 --- a/sakura_core/plugin/CPlugin.h +++ b/sakura_core/plugin/CPlugin.h @@ -232,6 +232,8 @@ class CPluginOption class CPlugin { + using Me = CPlugin; + //型定義 protected: typedef std::wstring wstring; @@ -244,6 +246,10 @@ class CPlugin //コンストラクタ public: CPlugin( const wstring& sBaseDir ); + CPlugin(const Me&) = delete; + Me& operator = (const Me&) = delete; + CPlugin(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; //デストラクタ public: From bf0e00fc24dfd10e5b0508553162b94dc506ef01 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 15:24:36 +0900 Subject: [PATCH 0743/1024] =?UTF-8?q?CWSHPlug=E3=81=ABrule-of-five?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/plugin/CWSHPlugin.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/plugin/CWSHPlugin.h b/sakura_core/plugin/CWSHPlugin.h index 5f105b199a..6b08e6b932 100644 --- a/sakura_core/plugin/CWSHPlugin.h +++ b/sakura_core/plugin/CWSHPlugin.h @@ -39,12 +39,18 @@ class CWSHPlug final : public CPlug { + using Me = CWSHPlug; + public: CWSHPlug( CPlugin& plugin, PlugId id, wstring sJack, wstring sHandler, wstring sLabel ) : CPlug( plugin, id, sJack, sHandler, sLabel ) { m_Wsh = NULL; } + CWSHPlug(const Me&) = delete; + Me& operator = (const Me&) = delete; + CWSHPlug(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; virtual ~CWSHPlug() { if( m_Wsh ){ delete m_Wsh; From e7f5f61041ae76bbbed9c65fff92accf08b84f77 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 15:26:52 +0900 Subject: [PATCH 0744/1024] =?UTF-8?q?CWSHPlugin=E3=81=ABrule-of-five?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/plugin/CWSHPlugin.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/plugin/CWSHPlugin.h b/sakura_core/plugin/CWSHPlugin.h index 6b08e6b932..2254b768ef 100644 --- a/sakura_core/plugin/CWSHPlugin.h +++ b/sakura_core/plugin/CWSHPlugin.h @@ -63,11 +63,17 @@ class CWSHPlug final : class CWSHPlugin final : public CPlugin { + using Me = CWSHPlugin; + //コンストラクタ public: CWSHPlugin( const wstring& sBaseDir ) : CPlugin( sBaseDir ) { m_bUseCache = false; } + CWSHPlugin(const Me&) = delete; + Me& operator = (const Me&) = delete; + CWSHPlugin(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; //デストラクタ public: From 389feeadf7f3fd26b3e06f132a990ad99c4d56a3 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 15:29:41 +0900 Subject: [PATCH 0745/1024] =?UTF-8?q?CPrint=E3=81=ABrule-of-five=E3=82=92?= =?UTF-8?q?=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/print/CPrint.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/print/CPrint.h b/sakura_core/print/CPrint.h index 147ee95dbc..e3936570da 100644 --- a/sakura_core/print/CPrint.h +++ b/sakura_core/print/CPrint.h @@ -132,6 +132,8 @@ struct PRINTSETTING { */ class CPrint { + using Me = CPrint; + public: static const PAPER_INFO m_paperInfoArr[]; //!< 用紙情報一覧 static const int m_nPaperInfoArrNum; //!< 用紙情報一覧の要素数 @@ -160,6 +162,10 @@ class CPrint || Constructors */ CPrint(); + CPrint(const Me&) = delete; + Me& operator = (const Me&) = delete; + CPrint(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; ~CPrint(); /* From 18e88ea44e159eedb909502aa992dbf4d442afc3 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 15:34:28 +0900 Subject: [PATCH 0746/1024] =?UTF-8?q?CMRUFile=E3=81=ABrule-of-five?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/recent/CMRUFile.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/recent/CMRUFile.h b/sakura_core/recent/CMRUFile.h index 72912c64f0..f0e7cfae63 100644 --- a/sakura_core/recent/CMRUFile.h +++ b/sakura_core/recent/CMRUFile.h @@ -46,9 +46,15 @@ class CMenuDrawer; // @date 2002.2.17 YAZAKI CShareDataのインスタンスは、CProcessにひとつあるのみ。 class CMRUFile { + using Me = CMRUFile; + public: // コンストラクタ CMRUFile(); + CMRUFile(const Me&) = delete; + Me& operator = (const Me&) = delete; + CMRUFile(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; ~CMRUFile(); // メニューを取得する From da52585401b8236915cffa643d9f9185c66ba561 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 15:37:28 +0900 Subject: [PATCH 0747/1024] =?UTF-8?q?CMRUFolder=E3=81=ABrule-of-five?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/recent/CMRUFolder.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/recent/CMRUFolder.h b/sakura_core/recent/CMRUFolder.h index 2ab57dd89f..65a53600db 100644 --- a/sakura_core/recent/CMRUFolder.h +++ b/sakura_core/recent/CMRUFolder.h @@ -43,9 +43,15 @@ class CMenuDrawer; // @date 2002.2.17 YAZAKI CShareDataのインスタンスは、CProcessにひとつあるのみ。 class CMRUFolder { + using Me = CMRUFolder; + public: // コンストラクタ CMRUFolder(); + CMRUFolder(const Me&) = delete; + Me& operator = (const Me&) = delete; + CMRUFolder(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; ~CMRUFolder(); // メニューを取得する From 0819323b33880b05b035539cda0adb80cc2694d9 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 15:40:06 +0900 Subject: [PATCH 0748/1024] =?UTF-8?q?CRecentImp=E3=81=ABrule-of-five?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/recent/CRecentImp.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/recent/CRecentImp.h b/sakura_core/recent/CRecentImp.h index bce804f1bc..18f15d6626 100644 --- a/sakura_core/recent/CRecentImp.h +++ b/sakura_core/recent/CRecentImp.h @@ -34,6 +34,8 @@ template < class DATA_TYPE, class RECEIVE_TYPE = const DATA_TYPE* > class CRecentImp : public CRecent{ + using Me = CRecentImp; + private: typedef CRecentImp Me; typedef DATA_TYPE DataType; @@ -41,6 +43,10 @@ class CRecentImp : public CRecent{ public: CRecentImp(){ Terminate(); } + CRecentImp(const Me&) = delete; + Me& operator = (const Me&) = delete; + CRecentImp(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; virtual ~CRecentImp(){ Terminate(); } protected: From b3b9f3258fb3c9b6891968e26f915fddce2767d2 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 15:44:02 +0900 Subject: [PATCH 0749/1024] =?UTF-8?q?CTypeSupport=E3=81=ABrule-of-five?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/types/CTypeSupport.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/types/CTypeSupport.h b/sakura_core/types/CTypeSupport.h index 0d871bee39..4db3709b62 100644 --- a/sakura_core/types/CTypeSupport.h +++ b/sakura_core/types/CTypeSupport.h @@ -38,6 +38,8 @@ 今のところタイプ別設定の色情報取得の補助 */ class CTypeSupport{ + using Me = CTypeSupport; + private: static const COLORREF INVALID_COLOR=0xFFFFFFFF; //無効な色定数 @@ -52,6 +54,10 @@ class CTypeSupport{ m_gr = NULL; } + CTypeSupport(const Me&) = delete; + Me& operator = (const Me&) = delete; + CTypeSupport(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; virtual ~CTypeSupport() { if(m_gr){ From 5474f5adef5470657f99c1444faec6e001167710 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 15:46:22 +0900 Subject: [PATCH 0750/1024] =?UTF-8?q?CGDIStock=E3=81=ABrule-of-five?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/uiparts/CGraphics.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/uiparts/CGraphics.cpp b/sakura_core/uiparts/CGraphics.cpp index 9651b29a82..4329f90f07 100644 --- a/sakura_core/uiparts/CGraphics.cpp +++ b/sakura_core/uiparts/CGraphics.cpp @@ -34,8 +34,14 @@ class CGDIStock { + using Me = CGDIStock; + public: CGDIStock(){} + CGDIStock(const Me&) = delete; + Me& operator = (const Me&) = delete; + CGDIStock(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; ~CGDIStock() { while(!m_vObjects.empty()){ From 6d193053c14b0e1301e59ce48c8ca4d65180d0a2 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 16:08:54 +0900 Subject: [PATCH 0751/1024] =?UTF-8?q?CImageListMgr=E3=81=ABrule-of-five?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/uiparts/CImageListMgr.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/uiparts/CImageListMgr.h b/sakura_core/uiparts/CImageListMgr.h index 848f95c0e5..5dbe8b0e66 100644 --- a/sakura_core/uiparts/CImageListMgr.h +++ b/sakura_core/uiparts/CImageListMgr.h @@ -52,10 +52,16 @@ 当初の独自描画に戻した. */ class CImageListMgr { + using Me = CImageListMgr; + public: // constructor CImageListMgr(); + CImageListMgr(const Me&) = delete; + Me& operator = (const Me&) = delete; + CImageListMgr(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; ~CImageListMgr(); bool Create(HINSTANCE hInstance); // 生成 From d8061b3023f6ca5e0e030ddde1cdb17eea9eac93 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 16:12:40 +0900 Subject: [PATCH 0752/1024] =?UTF-8?q?CMenuDrawer=E3=81=ABrule-of-five?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/uiparts/CMenuDrawer.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/uiparts/CMenuDrawer.h b/sakura_core/uiparts/CMenuDrawer.h index 935a5674b5..0b02534bc4 100644 --- a/sakura_core/uiparts/CMenuDrawer.h +++ b/sakura_core/uiparts/CMenuDrawer.h @@ -47,11 +47,17 @@ struct DLLSHAREDATA; */ class CMenuDrawer { + using Me = CMenuDrawer; + public: /* || Constructors */ CMenuDrawer(); + CMenuDrawer(const Me&) = delete; + Me& operator = (const Me&) = delete; + CMenuDrawer(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; ~CMenuDrawer(); void Create( HINSTANCE hInstance, HWND hWndOwner, CImageListMgr* pcIcons ); From 939db1bbdfbfd0695e1f26de93768b0bcced95b8 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 16:24:05 +0900 Subject: [PATCH 0753/1024] =?UTF-8?q?CWaitCursor=E3=81=ABrule-of-five?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/uiparts/CWaitCursor.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/uiparts/CWaitCursor.h b/sakura_core/uiparts/CWaitCursor.h index 9b517cd81c..e969fc205f 100644 --- a/sakura_core/uiparts/CWaitCursor.h +++ b/sakura_core/uiparts/CWaitCursor.h @@ -28,11 +28,17 @@ */ class CWaitCursor { + using Me = CWaitCursor; + public: /* || Constructors */ CWaitCursor( HWND, bool bEnable = true ); + CWaitCursor(const Me&) = delete; + Me& operator = (const Me&) = delete; + CWaitCursor(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; ~CWaitCursor(); bool IsEnable(){ return m_bEnable; } From 597569108bbfa4f09070dfe64acd60978f544bf6 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 16:26:42 +0900 Subject: [PATCH 0754/1024] =?UTF-8?q?CRegKey=E3=81=ABrule-of-five=E3=82=92?= =?UTF-8?q?=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/RegKey.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sakura_core/util/RegKey.h b/sakura_core/util/RegKey.h index 007bbafd59..ded31a11de 100644 --- a/sakura_core/util/RegKey.h +++ b/sakura_core/util/RegKey.h @@ -29,6 +29,8 @@ class CRegKey { + using Me = CRegKey; + protected: HKEY _root; HKEY _key; @@ -39,6 +41,11 @@ class CRegKey _key = NULL; } + CRegKey(const Me&) = delete; + Me& operator = (const Me&) = delete; + CRegKey(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; + virtual ~CRegKey() { Close(); From 18e1ea488cb7ae3b3cdbf9cb26ebcd5a4eccf047 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 16:30:12 +0900 Subject: [PATCH 0755/1024] =?UTF-8?q?CCurrentDirectoryBackupPoint=E3=81=AB?= =?UTF-8?q?rule-of-five=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/os.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/util/os.h b/sakura_core/util/os.h index 7c97046d01..1fe16bde55 100644 --- a/sakura_core/util/os.h +++ b/sakura_core/util/os.h @@ -91,8 +91,14 @@ class CDisableWow64FsRedirect final { //コンストラクタでカレントディレクトリを保存し、デストラクタでカレントディレクトリを復元するモノ。 //2008.03.01 kobake 作成 class CCurrentDirectoryBackupPoint{ + using Me = CCurrentDirectoryBackupPoint; + public: CCurrentDirectoryBackupPoint(); + CCurrentDirectoryBackupPoint(const Me&) = delete; + Me& operator = (const Me&) = delete; + CCurrentDirectoryBackupPoint(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; ~CCurrentDirectoryBackupPoint(); private: WCHAR m_szCurDir[_MAX_PATH]; From c83b0a16f9388347ca2abbf572cac3423b26e215 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 16:34:02 +0900 Subject: [PATCH 0756/1024] =?UTF-8?q?CSubject=E3=81=ABrule-of-five?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/relation_tool.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/util/relation_tool.h b/sakura_core/util/relation_tool.h index ef7df70dcd..9df621b65b 100644 --- a/sakura_core/util/relation_tool.h +++ b/sakura_core/util/relation_tool.h @@ -36,9 +36,15 @@ class CListener; //! 複数のCListenerからウォッチされる class CSubject{ + using Me = CSubject; + public: //コンストラクタ・デストラクタ CSubject(); + CSubject(const Me&) = delete; + Me& operator = (const Me&) = delete; + CSubject(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; virtual ~CSubject(); //公開インターフェース From de2cba2e113f36354571862478a705fe5f61c906 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 16:39:26 +0900 Subject: [PATCH 0757/1024] =?UTF-8?q?CListener=E3=81=ABrule-of-five?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/relation_tool.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/util/relation_tool.h b/sakura_core/util/relation_tool.h index 9df621b65b..ed602b17ce 100644 --- a/sakura_core/util/relation_tool.h +++ b/sakura_core/util/relation_tool.h @@ -62,8 +62,14 @@ class CSubject{ //! 1つのCSubjectをウォッチする class CListener{ + using Me = CListener; + public: CListener(); + CListener(const Me&) = delete; + Me& operator = (const Me&) = delete; + CListener(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; virtual ~CListener(); //公開インターフェース From d6e32c37a24c4e91526fea52cc2d94c70014d97b Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 16:39:41 +0900 Subject: [PATCH 0758/1024] =?UTF-8?q?CTextWidthCalc=E3=81=ABrule-of-five?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/window.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/util/window.h b/sakura_core/util/window.h index dd80d25977..0e269c1cdd 100644 --- a/sakura_core/util/window.h +++ b/sakura_core/util/window.h @@ -112,11 +112,17 @@ inline bool DlgItem_Enable(HWND hwndDlg, int nIDDlgItem, bool nEnable) // 最大の幅を報告します class CTextWidthCalc { + using Me = CTextWidthCalc; + public: CTextWidthCalc(HWND hParentDlg, int nID); CTextWidthCalc(HWND hwndThis); CTextWidthCalc(HFONT font); CTextWidthCalc(HDC hdc); + CTextWidthCalc(const Me&) = delete; + Me& operator = (const Me&) = delete; + CTextWidthCalc(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; virtual ~CTextWidthCalc(); void Reset(){ nCx = 0; nExt = 0; } void SetCx(int cx = 0){ nCx = cx; } From 76717c9fb3a5a289962f55c183d2339aa00f57bc Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 16:47:12 +0900 Subject: [PATCH 0759/1024] =?UTF-8?q?CDCFont=E3=81=ABrule-of-five=E3=82=92?= =?UTF-8?q?=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/window.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/util/window.h b/sakura_core/util/window.h index 0e269c1cdd..539a9504fc 100644 --- a/sakura_core/util/window.h +++ b/sakura_core/util/window.h @@ -175,6 +175,8 @@ class CFontAutoDeleter class CDCFont { + using Me = CDCFont; + public: CDCFont(LOGFONT& font, HWND hwnd = NULL){ m_hwnd = hwnd; @@ -182,6 +184,10 @@ class CDCFont m_hFont = ::CreateFontIndirect(&font); m_hFontOld = (HFONT)::SelectObject(m_hDC, m_hFont); } + CDCFont(const Me&) = delete; + Me& operator = (const Me&) = delete; + CDCFont(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; ~CDCFont(){ if( m_hDC ){ ::SelectObject(m_hDC, m_hFontOld); From b7d95b74d28a69c1d1ddc146979d5358488b3ac7 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 16:51:07 +0900 Subject: [PATCH 0760/1024] =?UTF-8?q?CCaret=E3=81=ABrule-of-five=E3=82=92?= =?UTF-8?q?=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CCaret.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/view/CCaret.h b/sakura_core/view/CCaret.h index 2bd985f7ba..740beda434 100644 --- a/sakura_core/view/CCaret.h +++ b/sakura_core/view/CCaret.h @@ -88,8 +88,14 @@ class CCaretUnderLine }; class CCaret{ + using Me = CCaret; + public: CCaret(CEditView* pEditView, const CEditDoc* pEditDoc); + CCaret(const Me&) = delete; + Me& operator = (const Me&) = delete; + CCaret(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; virtual ~CCaret(); // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // From b40ccdb9b70bc5936ab83c09f707b075c6101a62 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 16:54:44 +0900 Subject: [PATCH 0761/1024] =?UTF-8?q?CRuler=E3=81=ABrule-of-five=E3=82=92?= =?UTF-8?q?=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CRuler.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/view/CRuler.h b/sakura_core/view/CRuler.h index 4ac00e615f..287b28ee19 100644 --- a/sakura_core/view/CRuler.h +++ b/sakura_core/view/CRuler.h @@ -34,8 +34,14 @@ class CTextMetrics; class CGraphics; class CRuler{ + using Me = CRuler; + public: CRuler(const CEditView* pEditView, const CEditDoc* pEditDoc); + CRuler(const Me&) = delete; + Me& operator = (const Me&) = delete; + CRuler(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; virtual ~CRuler(); // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // From 3db8b4269e07c3686bef625648879dc0245082f4 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 16:57:48 +0900 Subject: [PATCH 0762/1024] =?UTF-8?q?CViewFont=E3=81=ABrule-of-five?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CViewFont.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/view/CViewFont.h b/sakura_core/view/CViewFont.h index 1f011b6fc1..0f0a0ce57d 100644 --- a/sakura_core/view/CViewFont.h +++ b/sakura_core/view/CViewFont.h @@ -30,12 +30,18 @@ #include "doc/CDocTypeSetting.h" // ColorInfo !! class CViewFont{ + using Me = CViewFont; + public: CViewFont(const LOGFONT *plf, bool bMiniMap = false) { m_bMiniMap = bMiniMap; CreateFont(plf); } + CViewFont(const Me&) = delete; + Me& operator = (const Me&) = delete; + CViewFont(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; virtual ~CViewFont() { DeleteFont(); From 71d07e15554e68c563c19f667edd75527bc86e6e Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 17:01:49 +0900 Subject: [PATCH 0763/1024] =?UTF-8?q?CFigure=5FEol=E3=81=ABrule-of-five?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/figures/CFigure_Eol.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sakura_core/view/figures/CFigure_Eol.h b/sakura_core/view/figures/CFigure_Eol.h index a850d6b013..6d5d5fac77 100644 --- a/sakura_core/view/figures/CFigure_Eol.h +++ b/sakura_core/view/figures/CFigure_Eol.h @@ -31,7 +31,14 @@ //! 改行描画 class CFigure_Eol final : public CFigureSpace{ + using Me = CFigure_Eol; + public: + CFigure_Eol() noexcept = default; + CFigure_Eol(const Me&) = delete; + Me& operator = (const Me&) = delete; + CFigure_Eol(Me&&) noexcept = delete; + Me& operator = (Me&&) noexcept = delete; ~CFigure_Eol() { if (m_hPen) { From e36a24d7629fed4593f913359ef733c728e39192 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 19:57:37 +0900 Subject: [PATCH 0764/1024] =?UTF-8?q?CodeSmells=E5=AF=BE=E7=AD=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove this redundant access specifier; it does not change the accessibility level. --- sakura_core/_os/CDropTarget.h | 1 - sakura_core/mem/CRecycledBuffer.h | 2 -- sakura_core/recent/CRecentImp.h | 1 - sakura_core/types/CTypeSupport.h | 1 - 4 files changed, 5 deletions(-) diff --git a/sakura_core/_os/CDropTarget.h b/sakura_core/_os/CDropTarget.h index 57d401c635..4531f3feef 100644 --- a/sakura_core/_os/CDropTarget.h +++ b/sakura_core/_os/CDropTarget.h @@ -52,7 +52,6 @@ class CYbInterfaceBase { using Me = CYbInterfaceBase; -private: static COleLibrary m_olelib; protected: CYbInterfaceBase(); diff --git a/sakura_core/mem/CRecycledBuffer.h b/sakura_core/mem/CRecycledBuffer.h index b271dcd8c3..b839912f07 100644 --- a/sakura_core/mem/CRecycledBuffer.h +++ b/sakura_core/mem/CRecycledBuffer.h @@ -73,8 +73,6 @@ class CRecycledBuffer{ class CRecycledBufferDynamic{ using Me = CRecycledBufferDynamic; -//コンフィグ -private: static const int CHAIN_COUNT = 64; //再利用可能なブロック数。 //コンストラクタ・デストラクタ diff --git a/sakura_core/recent/CRecentImp.h b/sakura_core/recent/CRecentImp.h index 18f15d6626..5366b711c5 100644 --- a/sakura_core/recent/CRecentImp.h +++ b/sakura_core/recent/CRecentImp.h @@ -36,7 +36,6 @@ template < class DATA_TYPE, class RECEIVE_TYPE = const DATA_TYPE* > class CRecentImp : public CRecent{ using Me = CRecentImp; -private: typedef CRecentImp Me; typedef DATA_TYPE DataType; typedef RECEIVE_TYPE ReceiveType; diff --git a/sakura_core/types/CTypeSupport.h b/sakura_core/types/CTypeSupport.h index 4db3709b62..3faeb0db75 100644 --- a/sakura_core/types/CTypeSupport.h +++ b/sakura_core/types/CTypeSupport.h @@ -40,7 +40,6 @@ class CTypeSupport{ using Me = CTypeSupport; -private: static const COLORREF INVALID_COLOR=0xFFFFFFFF; //無効な色定数 public: From 40db9f001356bd2139c6f6dc52b51f8999f22e08 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 20:10:29 +0900 Subject: [PATCH 0765/1024] =?UTF-8?q?using=20Me=E3=81=8C=E9=87=8D=E8=A4=87?= =?UTF-8?q?=E3=81=97=E3=81=A6=E3=81=84=E3=81=9F=E3=81=AE=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/recent/CRecentImp.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sakura_core/recent/CRecentImp.h b/sakura_core/recent/CRecentImp.h index 5366b711c5..a11540492d 100644 --- a/sakura_core/recent/CRecentImp.h +++ b/sakura_core/recent/CRecentImp.h @@ -34,9 +34,8 @@ template < class DATA_TYPE, class RECEIVE_TYPE = const DATA_TYPE* > class CRecentImp : public CRecent{ - using Me = CRecentImp; + using Me = CRecentImp; - typedef CRecentImp Me; typedef DATA_TYPE DataType; typedef RECEIVE_TYPE ReceiveType; From d90a9ca1334b5698bebbd6c49279af6a3414440f Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sat, 29 May 2021 21:59:37 +0900 Subject: [PATCH 0766/1024] =?UTF-8?q?=E6=84=8F=E5=9B=B3=E3=81=9B=E3=81=9A?= =?UTF-8?q?=E6=B6=88=E3=81=97=E3=81=A6=E3=81=97=E3=81=BE=E3=81=A3=E3=81=9F?= =?UTF-8?q?=E8=A1=8C=E6=9C=AB=E7=A9=BA=E7=99=BD=E3=82=92=E5=85=83=E3=81=AB?= =?UTF-8?q?=E6=88=BB=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/window/CTabWnd.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/sakura_core/window/CTabWnd.cpp b/sakura_core/window/CTabWnd.cpp index 61af00bd84..4c8f038aa7 100644 --- a/sakura_core/window/CTabWnd.cpp +++ b/sakura_core/window/CTabWnd.cpp @@ -20,8 +20,8 @@ warranty. In no event will the authors be held liable for any damages arising from the use of this software. - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; @@ -30,7 +30,7 @@ in the product documentation would be appreciated but is not required. - 2. Altered source versions must be plainly marked as such, + 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source @@ -1019,7 +1019,7 @@ void CTabWnd::Close( void ) ::SetWindowLongPtr( m_hwndTab, GWLP_WNDPROC, (LONG_PTR)gm_pOldWndProc ); gm_pOldWndProc = NULL; } - + // Modified by KEITA for WIN64 2003.9.6 ::SetWindowLongPtr( m_hwndTab, GWLP_USERDATA, (LONG_PTR)NULL ); @@ -1086,7 +1086,7 @@ LRESULT CTabWnd::OnDestroy( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) return 0L; } - + /*! WM_LBUTTONDBLCLK処理 @date 2006.03.26 ryoji 新規作成 */ @@ -1649,7 +1649,7 @@ LRESULT CTabWnd::OnPaint( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) } // サイズボックスを描画する - if (!m_pShareData->m_Common.m_sWindow.m_bDispSTATUSBAR + if (!m_pShareData->m_Common.m_sWindow.m_bDispSTATUSBAR && !m_pShareData->m_Common.m_sWindow.m_bDispFUNCKEYWND && m_pShareData->m_Common.m_sTabBar.m_eTabPosition == TabPosition_Bottom) { SizeBox_ONOFF(true); @@ -1930,7 +1930,7 @@ int CTabWnd::FindTabIndexByHWND( HWND hWnd ) tcitem.mask = TCIF_PARAM; tcitem.lParam = (LPARAM)0; TabCtrl_GetItem( m_hwndTab, i, &tcitem ); - + if( (HWND)tcitem.lParam == hWnd ) return i; } From de374ff6933722ba020d2986a0831bd46da37705 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sat, 29 May 2021 22:45:42 +0900 Subject: [PATCH 0767/1024] =?UTF-8?q?MinGW=E3=83=93=E3=83=AB=E3=83=89?= =?UTF-8?q?=E3=82=A8=E3=83=A9=E3=83=BC=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/Makefile | 1 + tests/unittests/Makefile | 1 + 2 files changed, 2 insertions(+) diff --git a/sakura_core/Makefile b/sakura_core/Makefile index 0d9c527c99..d58763fc0e 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -94,6 +94,7 @@ LIBS= \ -lmpr \ -limagehlp \ -lshlwapi \ + -ldwmapi \ -lwinmm \ -lwindowscodecs \ -lmsimg32 \ diff --git a/tests/unittests/Makefile b/tests/unittests/Makefile index dd008c1700..bcc3f35924 100644 --- a/tests/unittests/Makefile +++ b/tests/unittests/Makefile @@ -111,6 +111,7 @@ LIBS= \ -lmpr \ -limagehlp \ -lshlwapi \ + -ldwmapi \ -lwinmm \ -lwindowscodecs \ -lmsimg32 \ From 54a79bdd6b1b91173e96d822f8e6abcbda008224 Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sat, 29 May 2021 23:20:36 +0900 Subject: [PATCH 0768/1024] =?UTF-8?q?CTabWnd::DrawTopBand=E3=81=AE?= =?UTF-8?q?=E5=BC=95=E6=95=B0=E3=82=92=E5=8F=82=E7=85=A7=E6=B8=A1=E3=81=97?= =?UTF-8?q?=E3=81=AB=E3=81=99=E3=82=8B/=E5=AE=9A=E7=BE=A9=E4=BD=8D?= =?UTF-8?q?=E7=BD=AE=E3=82=92=E7=A7=BB=E5=8B=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/window/CTabWnd.cpp | 80 +++++++++++++++++----------------- sakura_core/window/CTabWnd.h | 2 +- 2 files changed, 41 insertions(+), 41 deletions(-) diff --git a/sakura_core/window/CTabWnd.cpp b/sakura_core/window/CTabWnd.cpp index 4c8f038aa7..3c7b9e0a96 100644 --- a/sakura_core/window/CTabWnd.cpp +++ b/sakura_core/window/CTabWnd.cpp @@ -1575,45 +1575,6 @@ LRESULT CTabWnd::OnTimer( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) return 0L; } -/*! 指定したタブの上部にその位置を示す帯を描画 - @param[in] gr 描画管理 - @param[in] lprcClient タブウィンドウのクライアント領域 - @param[in] nTabIndex 対象タブのインデックス -*/ -void CTabWnd::DrawTopBand( const CGraphics& gr, const RECT* prcClient, int nTabIndex ) const -{ - RECT rcTab = {}; - TabCtrl_GetItemRect( m_hwndTab, nTabIndex, &rcTab ); - POINT pt = { rcTab.left, 0 }; - ::ClientToScreen( m_hwndTab, &pt ); - ::ScreenToClient( GetHwnd(), &pt ); - RECT rcTopBand = {}; - rcTopBand.left = pt.x; - rcTopBand.right = pt.x + (rcTab.right - rcTab.left); - rcTopBand.top = prcClient->top + 1; - rcTopBand.bottom = prcClient->top + TAB_MARGIN_TOP; - - // 左右の範囲制限 - // - 左側はそのまま - // - 右側は[<][>]ボタンが表示中ならその左端まで - if( auto hwndUpDown = ::FindWindowEx( m_hwndTab, nullptr, UPDOWN_CLASS, nullptr ); - ::IsWindowVisible( hwndUpDown ) ){ - RECT rcUpDown = {}; - ::GetWindowRect( hwndUpDown, &rcUpDown ); - POINT ptREnd = { rcUpDown.left, 0 }; - ::ScreenToClient( GetHwnd(), &ptREnd ); - if( rcTopBand.right > ptREnd.x ){ - rcTopBand.right = ptREnd.x; // 右端限界値 - } - } - - if( rcTopBand.left < rcTopBand.right ){ - COLORREF color = RGB( 255, 128, 0 ); - ::GetSystemAccentColor( &color ); - ::MyFillRect( gr, rcTopBand, color ); - } -} - /*! WM_PAINT処理 @date 2005.09.01 ryoji タブの上に境界線を追加 @@ -1645,7 +1606,7 @@ LRESULT CTabWnd::OnPaint( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) // トップバンドを描画する if( auto nCurSel = TabCtrl_GetCurSel( m_hwndTab ); 0 <= nCurSel ){ - DrawTopBand( gr, &rc, nCurSel ); + DrawTopBand( gr, rc, nCurSel ); } // サイズボックスを描画する @@ -2740,6 +2701,45 @@ void CTabWnd::DrawTabCloseBtn( CGraphics& gr, const LPRECT lprcClient, bool sele DrawCloseFigure( gr, rcBtn ); } +/*! 指定したタブの上部にその位置を示す帯を描画 + @param[in] gr 描画管理 + @param[in] rcClient タブウィンドウのクライアント領域 + @param[in] nTabIndex 対象タブのインデックス +*/ +void CTabWnd::DrawTopBand( const CGraphics& gr, const RECT& rcClient, int nTabIndex ) const +{ + RECT rcTab = {}; + TabCtrl_GetItemRect( m_hwndTab, nTabIndex, &rcTab ); + POINT pt = { rcTab.left, 0 }; + ::ClientToScreen( m_hwndTab, &pt ); + ::ScreenToClient( GetHwnd(), &pt ); + RECT rcTopBand = {}; + rcTopBand.left = pt.x; + rcTopBand.right = pt.x + (rcTab.right - rcTab.left); + rcTopBand.top = rcClient.top + 1; // DrawEdgeで描画した境界線(1px)をよける + rcTopBand.bottom = rcClient.top + TAB_MARGIN_TOP; + + // 左右の範囲制限 + // - 左側はそのまま + // - 右側は[<][>]ボタンが表示中ならその左端まで + if( auto hwndUpDown = ::FindWindowEx( m_hwndTab, nullptr, UPDOWN_CLASS, nullptr ); + ::IsWindowVisible( hwndUpDown ) ){ + RECT rcUpDown = {}; + ::GetWindowRect( hwndUpDown, &rcUpDown ); + POINT ptREnd = { rcUpDown.left, 0 }; + ::ScreenToClient( GetHwnd(), &ptREnd ); + if( rcTopBand.right > ptREnd.x ){ + rcTopBand.right = ptREnd.x; // 右端限界値 + } + } + + if( rcTopBand.left < rcTopBand.right ){ + COLORREF color = RGB( 255, 128, 0 ); + ::GetSystemAccentColor( &color ); + ::MyFillRect( gr, rcTopBand, color ); + } +} + /*! 一覧ボタンの矩形取得処理 @date 2006.02.01 ryoji 新規作成 */ diff --git a/sakura_core/window/CTabWnd.h b/sakura_core/window/CTabWnd.h index 34ffcf213d..202d0dcd4b 100644 --- a/sakura_core/window/CTabWnd.h +++ b/sakura_core/window/CTabWnd.h @@ -147,7 +147,7 @@ class CTabWnd final : public CWnd void DrawCloseFigure( CGraphics& gr, const RECT &btnRect ); /*!< 閉じるマーク描画処理 */ void DrawCloseBtn( CGraphics& gr, const LPRECT lprcClient ); /*!< 閉じるボタン描画処理 */ // 2006.10.21 ryoji void DrawTabCloseBtn( CGraphics& gr, const LPRECT lprcClient, bool selected, bool bHover ); /*!< タブを閉じるボタン描画処理 */ // 2012.04.14 syat - void DrawTopBand( const CGraphics& gr, const RECT* prcClient, int nTabIndex ) const; + void DrawTopBand( const CGraphics& gr, const RECT& rcClient, int nTabIndex ) const; void GetListBtnRect( const LPRECT lprcClient, LPRECT lprc ); /*!< 一覧ボタンの矩形取得処理 */ void GetCloseBtnRect( const LPRECT lprcClient, LPRECT lprc ); /*!< 閉じるボタンの矩形取得処理 */ // 2006.10.21 ryoji void GetTabCloseBtnRect( const LPRECT lprcClient, LPRECT lprc, bool selected ); /*!< タブを閉じるボタンの矩形取得処理 */ // 2012.04.14 syat From 02acf8b5fba615e822838a6eba7c540e550b0161 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 30 May 2021 23:15:35 +0900 Subject: [PATCH 0769/1024] =?UTF-8?q?Appveyor=E3=81=AEDebug=E3=83=93?= =?UTF-8?q?=E3=83=AB=E3=83=89=E3=82=92=E5=81=9C=E6=AD=A2=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- appveyor.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 127185e448..959d7b5941 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -3,7 +3,6 @@ image: Visual Studio 2017 configuration: - Release - - Debug platform: - Win32 From 5cae89a1259f998c2c058dbd7bac6250a1518530 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 01:06:06 +0900 Subject: [PATCH 0770/1024] =?UTF-8?q?CLineData=E3=81=ABrule-of-zero?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/COpe.h | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/sakura_core/COpe.h b/sakura_core/COpe.h index 5a98055dff..850b661014 100644 --- a/sakura_core/COpe.h +++ b/sakura_core/COpe.h @@ -33,24 +33,6 @@ class CLineData final { public: CNativeW cmemLine; int nSeq; - CLineData() = default; - CLineData(const CLineData& source) = default; - CLineData(CLineData&& other) noexcept { - swap(other); - } - -private: - void swap(CLineData& o) noexcept { - std::swap(cmemLine, o.cmemLine); - std::swap(nSeq, o.nSeq); - } - -public: - CLineData& operator = (const CLineData& rhs) = default; - CLineData& operator = (CLineData&& rhs) noexcept { - swap(rhs); - return *this; - } }; typedef std::vector COpeLineData; From f09eb315865a7e5479622ffe850a82cb76f901cc Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 13:45:55 +0900 Subject: [PATCH 0771/1024] =?UTF-8?q?CUrlWnd=E3=81=ABrule-of-zero=E3=82=92?= =?UTF-8?q?=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgAbout.h | 1 - 1 file changed, 1 deletion(-) diff --git a/sakura_core/dlg/CDlgAbout.h b/sakura_core/dlg/CDlgAbout.h index 01f55d7838..1c2271560d 100644 --- a/sakura_core/dlg/CDlgAbout.h +++ b/sakura_core/dlg/CDlgAbout.h @@ -30,7 +30,6 @@ class CUrlWnd { public: CUrlWnd() { m_hWnd = NULL; m_hFont = NULL; m_bHilighted = FALSE; m_pOldProc = NULL; } - virtual ~CUrlWnd() { ; } BOOL SetSubclassWindow( HWND hWnd ); HWND GetHwnd() const{ return m_hWnd; } protected: From 78dbae63bd8b5c8fd5052b81debd1f43780947c0 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 20:24:03 +0900 Subject: [PATCH 0772/1024] =?UTF-8?q?CDlgInput1=E3=81=ABrule-of-zero?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgInput1.cpp | 10 ---------- sakura_core/dlg/CDlgInput1.h | 5 ----- 2 files changed, 15 deletions(-) diff --git a/sakura_core/dlg/CDlgInput1.cpp b/sakura_core/dlg/CDlgInput1.cpp index cb3eb9bec8..edadc43805 100644 --- a/sakura_core/dlg/CDlgInput1.cpp +++ b/sakura_core/dlg/CDlgInput1.cpp @@ -64,16 +64,6 @@ INT_PTR CALLBACK CDlgInput1Proc( } } -CDlgInput1::CDlgInput1() -{ - return; -} - -CDlgInput1::~CDlgInput1() -{ - return; -} - /* モードレスダイアログの表示 */ BOOL CDlgInput1::DoModal( HINSTANCE hInstApp, diff --git a/sakura_core/dlg/CDlgInput1.h b/sakura_core/dlg/CDlgInput1.h index 8b02a3d90e..43d62fe0a3 100644 --- a/sakura_core/dlg/CDlgInput1.h +++ b/sakura_core/dlg/CDlgInput1.h @@ -28,11 +28,6 @@ class CDlgInput1; class CDlgInput1 { public: - /* - || Constructors - */ - CDlgInput1(); - ~CDlgInput1(); BOOL DoModal( HINSTANCE hInstApp, HWND hwndParent, const WCHAR* pszTitle, const WCHAR* pszMessage, int nMaxTextLen, WCHAR* pszText ); /* モードレスダイアログの表示 */ From e8ec2d509bed21df79014506685cb3ad49b9f2a0 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 12:59:18 +0900 Subject: [PATCH 0773/1024] =?UTF-8?q?CLaxInteger=E3=81=ABrule-of-three?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/basis/CLaxInteger.h | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/sakura_core/basis/CLaxInteger.h b/sakura_core/basis/CLaxInteger.h index 83208133c0..811e4432e5 100644 --- a/sakura_core/basis/CLaxInteger.h +++ b/sakura_core/basis/CLaxInteger.h @@ -29,20 +29,21 @@ //!型チェックの緩い整数型 class CLaxInteger{ -private: - typedef CLaxInteger Me; + using Me = CLaxInteger; public: //コンストラクタ・デストラクタ - CLaxInteger(){ m_value=0; } - CLaxInteger(const Me& rhs){ m_value=rhs.m_value; } - CLaxInteger(int value){ m_value=value; } + CLaxInteger() noexcept = default; + CLaxInteger(int value) { m_value = value; } + CLaxInteger(const Me&) = default; + Me& operator = (const Me&) = default; + ~CLaxInteger() noexcept = default; //暗黙の変換 operator const int&() const{ return m_value; } operator int&() { return m_value; } private: - int m_value; + int m_value = 0; }; #endif /* SAKURA_CLAXINTEGER_B3F68913_E6AE_472E_AC4F_E8985190BD7E_H_ */ From c7a7146b768e7ee6c28b33827c1975e9448f60b3 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 13:04:27 +0900 Subject: [PATCH 0774/1024] =?UTF-8?q?CStrictInteger=E3=81=ABrule-of-three?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/basis/CStrictInteger.h | 1 + 1 file changed, 1 insertion(+) diff --git a/sakura_core/basis/CStrictInteger.h b/sakura_core/basis/CStrictInteger.h index 70df26453b..b4c190311c 100644 --- a/sakura_core/basis/CStrictInteger.h +++ b/sakura_core/basis/CStrictInteger.h @@ -85,6 +85,7 @@ class CStrictInteger{ //コンストラクタ・デストラクタ CStrictInteger(){ m_value=0; } CStrictInteger(const Me& rhs){ m_value=rhs.m_value; } + ~CStrictInteger() noexcept = default; //intからの変換は、「明示的に指定したときのみ」可能 explicit CStrictInteger(int value){ m_value=value; } From 035d91e7d47ca658a240a3f9fee6fbd9a0a07a51 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 29 May 2021 13:30:10 +0900 Subject: [PATCH 0775/1024] =?UTF-8?q?CharPointer=E3=81=AEANSI=E7=89=88?= =?UTF-8?q?=E5=BB=83=E6=AD=A2=E3=81=AE=E6=AE=8B=E4=BB=B6=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/CharPointer.h | 43 ---------------------- sakura_core/typeprop/CPropTypesKeyHelp.cpp | 2 +- sakura_core/util/file.cpp | 4 +- 3 files changed, 3 insertions(+), 46 deletions(-) diff --git a/sakura_core/charset/CharPointer.h b/sakura_core/charset/CharPointer.h index 43e06a89c1..ceeff2f9dd 100644 --- a/sakura_core/charset/CharPointer.h +++ b/sakura_core/charset/CharPointer.h @@ -30,48 +30,6 @@ #include "charset/charcode.h" #include "charset/codechecker.h" -//!< ディレクトリを除いた、ファイル名だけを取得する -class CharPointerA{ -public: - CharPointerA(){ } - CharPointerA(const char* p) : m_p(p) { } - CharPointerA(const CharPointerA& rhs) : m_p(rhs.m_p) { } - - //進む - const char* operator ++ () { _forward(); return this->m_p; } //!< ++p; - const char* operator ++ (int){ CharPointerA tmp; _forward(); return tmp.m_p; } //!< p++; - const char* operator += (size_t n){ while(n-->0)_forward(); return this->m_p; } //!< p+=n; - - //進んだ値 - const char* operator + (size_t n) const{ CharPointerA tmp=*this; return tmp+=n; } - WORD operator[](size_t n) const{ CharPointerA tmp=*this; tmp+=n; return *tmp; } - - //代入 - const char* operator = (const char* p){ m_p=p; return this->m_p; } - - //文字取得 - WORD operator * () const{ return _get(); } - - //ポインタ取得 -// operator const char*() const{ return m_p; } //※operator + と競合するので、このキャスト演算子は提供しない - const char* GetPointer() const{ return m_p; } - -protected: - void _forward() //!< 1文字進む - { - if(_IS_SJIS_1(m_p[0]) && _IS_SJIS_2(m_p[1]))m_p+=2; - else m_p+=1; - } - WORD _get() const //!< 1文字取得する - { - if(_IS_SJIS_1(m_p[0]) && _IS_SJIS_2(m_p[1]))return *((WORD*)m_p); - else return *m_p; - } - -private: - const char* m_p; -}; - class CharPointerW{ public: CharPointerW(){ } @@ -111,5 +69,4 @@ class CharPointerW{ const wchar_t* m_p; }; -typedef CharPointerW CharPointerT; #endif /* SAKURA_CHARPOINTER_B649A129_0BBB_4ABE_BE02_0389CF537319_H_ */ diff --git a/sakura_core/typeprop/CPropTypesKeyHelp.cpp b/sakura_core/typeprop/CPropTypesKeyHelp.cpp index cc88eb9003..51cc1b81c7 100644 --- a/sakura_core/typeprop/CPropTypesKeyHelp.cpp +++ b/sakura_core/typeprop/CPropTypesKeyHelp.cpp @@ -681,7 +681,7 @@ static WCHAR* strcnv(WCHAR *str) static WCHAR* GetFileName(const WCHAR* fullpath) { const WCHAR* pszName = fullpath; - CharPointerT p = fullpath; + CharPointerW p = fullpath; while( *p != L'\0' ){ if( *p == L'\\' ){ pszName = p + 1; diff --git a/sakura_core/util/file.cpp b/sakura_core/util/file.cpp index 22eee51012..aaaeb80f99 100644 --- a/sakura_core/util/file.cpp +++ b/sakura_core/util/file.cpp @@ -205,7 +205,7 @@ bool IsLocalDrive( const WCHAR* pszDrive ) const WCHAR* GetFileTitlePointer(const WCHAR* pszPath) { - CharPointerT p; + CharPointerW p; const WCHAR* pszName; p = pszName = pszPath; while( *p ) @@ -447,7 +447,7 @@ int CalcDirectoryDepth( int depth = 0; // とりあえず\の数を数える - for( CharPointerT p = path; *p != L'\0'; ++p ){ + for( CharPointerW p = path; *p != L'\0'; ++p ){ if( *p == L'\\' ){ ++depth; // フルパスには入っていないはずだが念のため From 0135d88e66e9033df62f3dafefa7d007a9b7ca1e Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 6 Jun 2021 17:50:46 +0900 Subject: [PATCH 0776/1024] =?UTF-8?q?util/file.cpp=E3=81=AE=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-file.cpp | 39 +++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/tests/unittests/test-file.cpp b/tests/unittests/test-file.cpp index 45392e400c..ec59b6fba8 100644 --- a/tests/unittests/test-file.cpp +++ b/tests/unittests/test-file.cpp @@ -477,6 +477,45 @@ TEST(file, GetIniFileNameForIO) ASSERT_FALSE(fexist(iniPath.c_str())); } +/*! + * @brief フルパスからファイル名を取り出す + */ +TEST(file, GetFileTitlePointer) +{ + // フルパスからファイル名を取得する + EXPECT_STREQ(L"test.txt", GetFileTitlePointer(LR"(C:\Temp\test.txt)")); + + // フルパスにファイル名が含まれていない場合 + EXPECT_STREQ(L"", GetFileTitlePointer(LR"(C:\Temp\)")); + + // フルパスに\\が含まれていない場合 + EXPECT_STREQ(L"test.txt", GetFileTitlePointer(L"test.txt")); + + // 渡したパスが無効な場合は落ちます。 + EXPECT_DEATH({ GetFileTitlePointer(nullptr); }, ".*"); +} + +/*! + * @brief ディレクトリの深さを計算する + */ +TEST(file, CalcDirectoryDepth) +{ + // ドライブ文字を含むフルパス + EXPECT_EQ(1, CalcDirectoryDepth(LR"(C:\Temp\test.txt)")); + + // 共有フォルダを含むフルパス + EXPECT_EQ(1, CalcDirectoryDepth(LR"(\\host\Temp\test.txt)")); + + // ドライブなしのフルパス + EXPECT_EQ(1, CalcDirectoryDepth(LR"(\Temp\test.txt)")); + + // 相対パス(?) + EXPECT_EQ(1, CalcDirectoryDepth(LR"(C:\Temp\.\test.txt)")); + + // 渡したパスが無効な場合は落ちます。 + EXPECT_DEATH({ CalcDirectoryDepth(nullptr); }, ".*"); +} + /*! GetExtのテスト */ From b47ccff492bba1f98be27b924097d004306b7b1e Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 6 Jun 2021 23:54:29 +0900 Subject: [PATCH 0777/1024] =?UTF-8?q?CharPointer.h=E3=82=92=E5=89=8A?= =?UTF-8?q?=E9=99=A4=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura/sakura.vcxproj | 1 - sakura/sakura.vcxproj.filters | 3 - sakura_core/charset/CharPointer.h | 72 ---------------------- sakura_core/typeprop/CPropTypesKeyHelp.cpp | 24 +------- sakura_core/util/file.cpp | 57 +++++++++-------- sakura_core/window/CEditWnd.cpp | 1 - 6 files changed, 34 insertions(+), 124 deletions(-) delete mode 100644 sakura_core/charset/CharPointer.h diff --git a/sakura/sakura.vcxproj b/sakura/sakura.vcxproj index 424bb14734..7d606076de 100644 --- a/sakura/sakura.vcxproj +++ b/sakura/sakura.vcxproj @@ -289,7 +289,6 @@ - diff --git a/sakura/sakura.vcxproj.filters b/sakura/sakura.vcxproj.filters index 25db040118..659a552187 100644 --- a/sakura/sakura.vcxproj.filters +++ b/sakura/sakura.vcxproj.filters @@ -274,9 +274,6 @@ Cpp Source Files\charset - - Cpp Source Files\charset - Cpp Source Files\charset diff --git a/sakura_core/charset/CharPointer.h b/sakura_core/charset/CharPointer.h deleted file mode 100644 index ceeff2f9dd..0000000000 --- a/sakura_core/charset/CharPointer.h +++ /dev/null @@ -1,72 +0,0 @@ -/*! @file */ -/* - Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; - you must not claim that you wrote the original software. - If you use this software in a product, an acknowledgment - in the product documentation would be appreciated but is - not required. - - 2. Altered source versions must be plainly marked as such, - and must not be misrepresented as being the original software. - - 3. This notice may not be removed or altered from any source - distribution. -*/ -#ifndef SAKURA_CHARPOINTER_B649A129_0BBB_4ABE_BE02_0389CF537319_H_ -#define SAKURA_CHARPOINTER_B649A129_0BBB_4ABE_BE02_0389CF537319_H_ -#pragma once - -#include "charset/charcode.h" -#include "charset/codechecker.h" - -class CharPointerW{ -public: - CharPointerW(){ } - CharPointerW(const wchar_t* p) : m_p(p) { } - CharPointerW(const CharPointerW& rhs) : m_p(rhs.m_p) { } - - //進む - const wchar_t* operator ++ () { _forward(); return this->m_p; } //!< ++p; - const wchar_t* operator ++ (int){ CharPointerW tmp; _forward(); return tmp.m_p; } //!< p++; - const wchar_t* operator += (size_t n){ while(n-->0)_forward(); return this->m_p; } //!< p+=n; - - //進んだ値 - const wchar_t* operator + (size_t n) const{ CharPointerW tmp=*this; return tmp+=n; } - WORD operator[](size_t n) const{ CharPointerW tmp=*this; tmp+=n; return *tmp; } - - //代入 - const wchar_t* operator = (const wchar_t* p){ m_p=p; return this->m_p; } - - //文字取得 - WORD operator * () const{ return _get(); } - - //ポインタ取得 -// operator const wchar_t*() const{ return m_p; } //※operator + と競合するので、このキャスト演算子は提供しない - const wchar_t* GetPointer() const{ return m_p; } - -protected: - void _forward() //!< 1文字進む - { - ++m_p; - } - WORD _get() const //!< 1文字取得する - { - return *m_p; - } - -private: - const wchar_t* m_p; -}; - -#endif /* SAKURA_CHARPOINTER_B649A129_0BBB_4ABE_BE02_0389CF537319_H_ */ diff --git a/sakura_core/typeprop/CPropTypesKeyHelp.cpp b/sakura_core/typeprop/CPropTypesKeyHelp.cpp index 51cc1b81c7..81afaeee78 100644 --- a/sakura_core/typeprop/CPropTypesKeyHelp.cpp +++ b/sakura_core/typeprop/CPropTypesKeyHelp.cpp @@ -35,8 +35,8 @@ #include "env/CShareData.h" #include "typeprop/CImpExpManager.h" // 2010/4/23 Uchi #include "dlg/CDlgOpenFile.h" -#include "charset/CharPointer.h" #include "io/CTextStream.h" +#include "util/file.h" #include "util/shell.h" #include "util/module.h" #include "apiwrap/StdApi.h" @@ -69,7 +69,7 @@ static const DWORD p_helpids[] = { // 2006.10.10 ryoji }; static WCHAR* strcnv(WCHAR *str); -static WCHAR* GetFileName(const WCHAR *fullpath); +#define GetFileName(path) const_cast(GetFileTitlePointer(path)) static int nKeyHelpRMenuType[] = { STR_KEYHELP_RMENU_NONE, @@ -672,23 +672,3 @@ static WCHAR* strcnv(WCHAR *str) } return str; } - -/*! フルパスからファイル名を返す - - @date 2006.04.10 fon 新規作成 - @date 2006.09.14 genta ディレクトリがない場合に最初の1文字が切れないように -*/ -static WCHAR* GetFileName(const WCHAR* fullpath) -{ - const WCHAR* pszName = fullpath; - CharPointerW p = fullpath; - while( *p != L'\0' ){ - if( *p == L'\\' ){ - pszName = p + 1; - p++; - }else{ - p++; - } - } - return const_cast(pszName); -} diff --git a/sakura_core/util/file.cpp b/sakura_core/util/file.cpp index aaaeb80f99..2f8c6c8c88 100644 --- a/sakura_core/util/file.cpp +++ b/sakura_core/util/file.cpp @@ -31,7 +31,10 @@ #include -#include "charset/CharPointer.h" +#include +#include + +#include "charset/codechecker.h" #include "util/module.h" #include "util/window.h" #include "env/CShareData.h" @@ -203,22 +206,21 @@ bool IsLocalDrive( const WCHAR* pszDrive ) return true; } +/*! フルパスからファイル名を返す + + @date 2006.04.10 fon 新規作成 + @date 2006.09.14 genta ディレクトリがない場合に最初の1文字が切れないように + */ const WCHAR* GetFileTitlePointer(const WCHAR* pszPath) { - CharPointerW p; - const WCHAR* pszName; - p = pszName = pszPath; - while( *p ) - { - if( *p == L'\\' ){ - pszName = p + 1; - p++; - } - else{ - p++; + std::wstring_view name(pszPath); + if (const size_t sep = name.find_last_of(L'\\'); sep != std::wstring_view::npos) { + if (sep + 1 == name.length()) { + return pszPath + name.length(); } + return pszPath + sep + 1; } - return pszName; + return pszPath; } /*! fnameが相対パスの場合は、実行ファイルのパスからの相対パスとして開く @@ -445,23 +447,28 @@ int CalcDirectoryDepth( ) { int depth = 0; - + // とりあえず\の数を数える - for( CharPointerW p = path; *p != L'\0'; ++p ){ - if( *p == L'\\' ){ - ++depth; - // フルパスには入っていないはずだが念のため - // .\はカレントディレクトリなので,深さに関係ない. - while( p[1] == L'.' && p[2] == L'\\' ){ - p += 2; - } + std::wstring_view p(path); + std::wstring_view::size_type pos = 0; + do { + pos = p.find_first_of(L'\\', pos); + if (pos == std::wstring_view::npos) break; + ++depth; + ++pos; + + // フルパスには入っていないはずだが念のため + // .\はカレントディレクトリなので,深さに関係ない. + while (pos + 2 <= p.length() + && p[pos + 0] == L'.' + && p[pos + 1] == L'\\') { + pos += 2; } - } + } while (pos < p.length()); // 補正 // ドライブ名はパスの深さに数えない - if( ((L'A' <= path[0] && path[0] <= L'Z') || (L'a' <= path[0] && path[0] <= L'z')) - && path[1] == L':' && path[2] == L'\\' ){ + if (std::regex_search(path, std::wregex(LR"(^[A-Z]:\\)", std::wregex::icase))) { //フルパス --depth; // C:\ の \ はルートの記号なので階層深さではない } diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index 5b16b2f0fa..e283889e9a 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -54,7 +54,6 @@ #include "env/CShareData.h" #include "env/CSakuraEnvironment.h" #include "print/CPrintPreview.h" /// 2002/2/3 aroka -#include "charset/CharPointer.h" #include "charset/CCodeFactory.h" #include "charset/CCodeBase.h" #include "CEditApp.h" From 7c3a13d38b10d7f735b9359966da3339c187ab63 Mon Sep 17 00:00:00 2001 From: toduq Date: Mon, 7 Jun 2021 17:10:55 +0900 Subject: [PATCH 0778/1024] Fix typo on README.md "Visaul" --- README.md | 10 +++++----- vcx-props/project-PlatformToolset.md | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 4d08754254..6c428ff81d 100644 --- a/README.md +++ b/README.md @@ -30,8 +30,8 @@ - [Visual Studio Install options required](#visual-studio-install-options-required) - [Visual Studio 2019 対応に関して](#visual-studio-2019-対応に関して) - [.vsconfig に関して](#vsconfig-に関して) - - [Visaul Studio 2017/2019 共通](#visaul-studio-20172019-共通) - - [Visaul Studio 2019 のみ](#visaul-studio-2019-のみ) + - [Visual Studio 2017/2019 共通](#visual-studio-20172019-共通) + - [Visual Studio 2019 のみ](#visual-studio-2019-のみ) - [参照](#参照) - [How to build](#how-to-build) - [詳細情報](#詳細情報) @@ -89,7 +89,7 @@ Sakura Editor のコンパイルに必要なコンポーネントを Visual Stud [#1162](https://github.com/sakura-editor/sakura/pull/1162) で [.vsconfig](.vsconfig) というファイルを sakura.sln と同じディレクトリに配置しています。 -#### Visaul Studio 2017/2019 共通 +#### Visual Studio 2017/2019 共通 `vs_community__XXXXX.exe` でインストールする際に、--config オプションをつけてインストールする。 あるいは構成変更することにより、必要なコンポーネントを自動的にインストールします。 @@ -98,10 +98,10 @@ Sakura Editor のコンパイルに必要なコンポーネントを Visual Stud vs_community__XXXXX.exe --config <.vsconfig のファイルパス> ``` -#### Visaul Studio 2019 のみ +#### Visual Studio 2019 のみ `sakura.sln` と同じディレクトリに [.vsconfig](.vsconfig) が存在するので、 -Visaul Studio 2019 で `sakura.sln` を開くと必要なコンポーネントが足りない場合、インストールを促す表示が出るので、インストールをクリックすると自動的にインストールする。 +Visual Studio 2019 で `sakura.sln` を開くと必要なコンポーネントが足りない場合、インストールを促す表示が出るので、インストールをクリックすると自動的にインストールする。 #### 参照 diff --git a/vcx-props/project-PlatformToolset.md b/vcx-props/project-PlatformToolset.md index 1c5d2ffbb8..97272b6ba5 100644 --- a/vcx-props/project-PlatformToolset.md +++ b/vcx-props/project-PlatformToolset.md @@ -19,11 +19,11 @@ Visual Studio の各バージョンごとにデフォルトの PlatformToolset ( |Visual Studio のバージョン|PlatformToolset| |--|--| |Visual Studio 2017|v141| -|Visaul Studio 2019|v142| +|Visual Studio 2019|v142| ## 異なる Visual Studio のバージョンで開いたときの動作 -Visual Studio 2017 で作成したソリューション/プロジェクトを Visual Studio 2019 で開くと Visaul Studio 2019 の標準の v142 に変換するか +Visual Studio 2017 で作成したソリューション/プロジェクトを Visual Studio 2019 で開くと Visual Studio 2019 の標準の v142 に変換するか 確認するダイアログが出ます。一度ソリューションを開くとユーザーの選択がローカルに保存されるので同じソリューションを再度開いても再度確認される ことはありません。 @@ -32,7 +32,7 @@ Visual Studio 2017 で作成したソリューション/プロジェクトを Vi ## 解決策 1. `PlatformToolset` の設定を[外部のファイル](vcxcompat.props) にまとめます -2. そのファイルでは、 `Condition` の指定で開かれた Visaul Studio のバージョンによって、 `デフォルトで 使用する PlatformToolset` を指定します。 +2. そのファイルでは、 `Condition` の指定で開かれた Visual Studio のバージョンによって、 `デフォルトで 使用する PlatformToolset` を指定します。 3. 各プロジェクトファイルで上記ファイルを [Import Project](https://docs.microsoft.com/ja-jp/visualstudio/msbuild/import-element-msbuild?view=vs-2019) でインクルードします。 ### 参考情報 From a1616b4e9f1b960af99ef8be7fba2904795329d6 Mon Sep 17 00:00:00 2001 From: Moca Date: Fri, 18 Jun 2021 21:45:11 +0900 Subject: [PATCH 0779/1024] =?UTF-8?q?PatchUnicode-1051=20=E7=8F=BE?= =?UTF-8?q?=E5=9C=A8=E3=81=AE=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1=E3=83=B3?= =?UTF-8?q?=E3=83=88=E5=86=85=E5=AE=B9=E3=82=92Grep?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CGrepAgent.cpp | 262 ++++++++++++++++++--- sakura_core/CGrepAgent.h | 1 + sakura_core/String_define.h | 1 + sakura_core/_main/CControlTray.cpp | 2 + sakura_core/cmd/CViewCommander_TagJump.cpp | 132 ++++++++--- sakura_core/config/system_constants.h | 3 + sakura_core/dlg/CDlgGrep.cpp | 35 ++- sakura_core/dlg/CDlgGrep.h | 1 + sakura_core/env/CFileNameManager.cpp | 4 +- sakura_core/sakura_rc.rc | 1 + sakura_core/view/CEditView_Command.cpp | 40 +++- sakura_core/window/CEditWnd.cpp | 4 + sakura_lang_en_US/sakura_lang_rc.rc | 1 + 13 files changed, 402 insertions(+), 85 deletions(-) diff --git a/sakura_core/CGrepAgent.cpp b/sakura_core/CGrepAgent.cpp index 1e8e76931e..e5398051e2 100644 --- a/sakura_core/CGrepAgent.cpp +++ b/sakura_core/CGrepAgent.cpp @@ -30,6 +30,9 @@ #include "CSearchAgent.h" #include "dlg/CDlgCancel.h" #include "_main/CAppMode.h" +#include "_main/CMutex.h" +#include "env/CShareData.h" +#include "env/CSakuraEnvironment.h" #include "COpeBlk.h" #include "window/CEditWnd.h" #include "charset/CCodeMediator.h" @@ -105,6 +108,93 @@ std::wstring FormatPathList( const ContainerType& containter ) return strPatterns; } +class CFileLoadOrWnd{ + CFileLoad m_cfl; + HWND m_hWnd; + int m_nLineCurrent; + int m_nLineNum; +public: + CFileLoadOrWnd(const SEncodingConfig& encode, HWND hWnd) + : m_cfl(encode) + , m_hWnd(hWnd) + , m_nLineCurrent(0) + , m_nLineNum(0) + { + } + ~CFileLoadOrWnd(){ + } + ECodeType FileOpen(const TCHAR* pszFile, bool bBigFile, ECodeType charCode, int nFlag) + { + if( m_hWnd ){ + DWORD_PTR dwMsgResult = 0; + if( 0 == ::SendMessageTimeout(m_hWnd, MYWM_GETLINECOUNT, 0, 0, SMTO_NORMAL, 10000, &dwMsgResult) ){ + // エラーかタイムアウト + throw CError_FileOpen(); + } + m_nLineCurrent = 0; + m_nLineNum = (int)dwMsgResult; + ::SendMessageAny(m_hWnd, MYWM_GETFILEINFO, 0, 0); + const EditInfo* editInfo = &GetDllShareData().m_sWorkBuffer.m_EditInfo_MYWM_GETFILEINFO; + return editInfo->m_nCharCode; + } + return m_cfl.FileOpen(pszFile, bBigFile, charCode, nFlag); + } + EConvertResult ReadLine(CNativeW* buffer, CEol* pcEol){ + if( m_hWnd ){ + const int max_size = (int)GetDllShareData().m_sWorkBuffer.GetWorkBufferCount(); + const WCHAR* pLineData = GetDllShareData().m_sWorkBuffer.GetWorkBuffer(); + buffer->SetStringHoldBuffer(L"", 0); + if( m_nLineNum <= m_nLineCurrent ){ + return RESULT_FAILURE; + } + int nLineOffset = 0; + int nLineLen = 0; //初回用仮値 + do{ + // m_sWorkBuffer#m_Workの排他制御。外部コマンド出力/TraceOut/Diffが対象 + LockGuard guard( CShareData::GetMutexShareWork() ); + { + nLineLen = ::SendMessageAny(m_hWnd, MYWM_GETLINEDATA, m_nLineCurrent, nLineOffset); + if( nLineLen == 0 ){ return RESULT_FAILURE; } // EOF => 正常終了 + if( nLineLen < 0 ){ return RESULT_FAILURE; } // 何かエラー + buffer->AllocStringBuffer(max_size); + buffer->AppendString(pLineData, t_min(nLineLen, max_size)); + } + nLineOffset += max_size; + }while(max_size < nLineLen); + if( 0 < nLineLen ){ + if( 1 < nLineLen && (*buffer)[nLineLen - 2] == WCODE::CR && + (*buffer)[nLineLen - 1] == WCODE::LF){ + pcEol->SetType(EOL_CRLF); + }else{ + pcEol->SetTypeByString(buffer->GetStringPtr() + nLineLen - 1, 1); + } + } + m_nLineCurrent++; + return RESULT_COMPLETE; + } + return m_cfl.ReadLine(buffer, pcEol); + } + LONGLONG GetFileSize(){ + if( m_hWnd ){ + return 0; + } + return m_cfl.GetFileSize(); + } + int GetPercent(){ + if( m_hWnd ){ + return (int)(m_nLineCurrent * 100.0 / m_nLineNum); + } + return m_cfl.GetPercent(); + } + + void FileClose(){ + if( m_hWnd ){ + return; + } + m_cfl.FileClose(); + } +}; + CGrepAgent::CGrepAgent() : m_bGrepMode( false ) /* Grepモードか */ , m_bGrepRunning( false ) /* Grep処理中 */ @@ -207,6 +297,60 @@ void CGrepAgent::AddTail( CEditView* pcEditView, const CNativeW& cmem, bool bAdd } } +int GetHwndTitle(HWND& hWndTarget, CNativeW* pmemTitle, TCHAR* pszWindowName, TCHAR* pszWindowPath, const TCHAR* pszFile) +{ + if( 0 != auto_strncmp(_T(":HWND:"), pszFile, 6) ){ + return 0; // ハンドルGrepではない + } +#ifdef _WIN64 + _stscanf(pszFile + 6, _T("%016I64x"), &hWndTrget); +#else + _stscanf(pszFile + 6, _T("%08x"), &hWndTarget); +#endif + if( pmemTitle ){ + const wchar_t* p = L"Window:["; + pmemTitle->SetStringHoldBuffer(p, auto_strlen(p)); + } + if( !IsSakuraMainWindow(hWndTarget) ){ + return -1; + } + ::SendMessageAny(hWndTarget, MYWM_GETFILEINFO, 0, 0); + EditInfo* editInfo = &(GetDllShareData().m_sWorkBuffer.m_EditInfo_MYWM_GETFILEINFO); + if( '\0' == editInfo->m_szPath[0] ){ + // Grepかアウトプットか無題 + TCHAR szTitle[_MAX_PATH]; + TCHAR szGrep[100]; + editInfo->m_bIsModified = false; + const EditNode* node = CAppNodeManager::getInstance()->GetEditNode(hWndTarget); + TCHAR* pszTagName = szTitle; + if( editInfo->m_bIsGrep ){ + // Grepは検索キーとタグがぶつかることがあるので単に(Grep)と表示 + pszTagName = szGrep; + auto_strcpy(pszTagName, _T("(Grep)")); + } + CFileNameManager::getInstance()->GetMenuFullLabel_WinListNoEscape(szTitle, _countof(szTitle), editInfo, node->m_nId, -1, NULL ); +#ifdef _WIN64 + auto_sprintf(pszWindowName, _T(":HWND:[%016I64x]%ts"), hWndTrget, pszTagName); +#else + auto_sprintf(pszWindowName, _T(":HWND:[%08x]%ts"), hWndTarget, pszTagName); +#endif + if( pmemTitle ){ + pmemTitle->AppendStringT(szTitle); + } + pszWindowPath[0] = L'\0'; + }else{ + SplitPath_FolderAndFile(editInfo->m_szPath, pszWindowPath, pszWindowName); + if( pmemTitle ){ + pmemTitle->AppendStringT(pszWindowName); + } + } + if( pmemTitle ){ + pmemTitle->AppendString(L"]"); + } + return 1; +} + + /*! Grep実行 @param[in] pcmGrepKey 検索パターン @@ -458,6 +602,21 @@ DWORD CGrepAgent::DoGrep( } } + HWND hWndTarget = NULL; + TCHAR szWindowName[_MAX_PATH]; + TCHAR szWindowPath[_MAX_PATH]; + { + int nHwndRet = GetHwndTitle(hWndTarget, &cmemWork, szWindowName, szWindowPath, pcmGrepFile->GetStringPtr()); + if( -1 == nHwndRet ){ + cmemMessage.AppendString(L"HWND handle error.\n"); + if( sGrepOption.bGrepHeader ){ + AddTail(pcViewDst, cmemMessage, sGrepOption.bGrepStdout); + } + return 0; + }else if( 0 == nHwndRet ){ + cmemWork.SetStringT( pcmGrepFile->GetStringPtr() ); + } + } cmemMessage.AppendString( LS( STR_GREP_SEARCH_TARGET ) ); //L"検索対象 " { // 解析済みのファイルパターン配列を取得する @@ -586,34 +745,79 @@ DWORD CGrepAgent::DoGrep( int nGrepTreeResult = 0; - for( int nPath = 0; nPath < (int)vPaths.size(); nPath++ ){ - bool bOutputBaseFolder = false; - std::wstring sPath = ChopYen( vPaths[nPath] ); - int nTreeRet = DoGrepTree( - pcViewDst, - &cDlgCancel, - pcmGrepKey->GetStringPtr(), - cmemReplace, - cGrepEnumKeys, - cGrepExceptAbsFiles, - cGrepExceptAbsFolders, - sPath.c_str(), - sPath.c_str(), - sSearchOption, - sGrepOption, - pattern, - &cRegexp, - 0, - bOutputBaseFolder, - &nHitCount, - cmemMessage, - cUnicodeBuffer - ); - if( nTreeRet == -1 ){ - nGrepTreeResult = -1; - break; + if( hWndTarget ){ + for( HWND hwnd = hWndTarget; NULL != hwnd; hwnd = NULL ){ + bool bOutputBaseFolder = false; + bool bOutputFolderName = false; + // 複数ウィンドウループ予約 + int nPathLen = auto_strlen(szWindowPath); + std::tstring currentFile = szWindowPath; + if( currentFile.size() ){ + currentFile += _T('\\'); + nPathLen += 1; + } + currentFile += szWindowName; + int nHitCount = nGrepTreeResult; + int nTreeRet = DoGrepFile( + pcViewDst, + &cDlgCancel, + hwnd, + pcmGrepKey->GetStringPtr(), + szWindowName, + sSearchOption, + sGrepOption, + pattern, + &cRegexp, + &nHitCount, + currentFile.c_str(), + szWindowPath, + (sGrepOption.bGrepSeparateFolder && sGrepOption.bGrepOutputBaseFolder ? _T("") : szWindowPath), + (sGrepOption.bGrepSeparateFolder ? szWindowName : currentFile.c_str() + nPathLen), + bOutputBaseFolder, + bOutputFolderName, + cmemMessage + ); + if( nTreeRet == -1 ){ + nGrepTreeResult = -1; + break; + } + nGrepTreeResult += nTreeRet; + } + if( 0 < cmemMessage.GetStringLength() ){ + AddTail( pcViewDst, cmemMessage, sGrepOption.bGrepStdout ); + pcViewDst->GetCommander().Command_GOFILEEND( false ); + if( !CEditWnd::getInstance()->UpdateTextWrap() ) + CEditWnd::getInstance()->RedrawAllViews( pcViewDst ); + cmemMessage.Clear(); + } + }else{ + for( int nPath = 0; nPath < (int)vPaths.size(); nPath++ ){ + bool bOutputBaseFolder = false; + std::tstring sPath = ChopYen( vPaths[nPath] ); + int nTreeRet = DoGrepTree( + pcViewDst, + &cDlgCancel, + pcmGrepKey->GetStringPtr(), + cmemReplace, + cGrepEnumKeys, + cGrepExceptAbsFiles, + cGrepExceptAbsFolders, + sPath.c_str(), + sPath.c_str(), + sSearchOption, + sGrepOption, + pattern, + &cRegexp, + 0, + bOutputBaseFolder, + &nHitCount + ); + if( nTreeRet == -1 ){ + nGrepTreeResult = -1; + break; + } + nGrepTreeResult += nTreeRet; } - nGrepTreeResult += nTreeRet; } if( 0 < cmemMessage.GetStringLength() ) { AddTail( pcViewDst, cmemMessage, sGrepOption.bGrepStdout ); @@ -781,6 +985,7 @@ int CGrepAgent::DoGrepTree( nRet = DoGrepFile( pcViewDst, pcDlgCancel, + NULL, pszKey, lpFileName, sSearchOption, @@ -1101,6 +1306,7 @@ static void OutputPathInfo( int CGrepAgent::DoGrepFile( CEditView* pcViewDst, //!< CDlgCancel* pcDlgCancel, //!< [in] Cancelダイアログへのポインタ + HWND hWndTarget, //!< [in] 対象Windows(NULLでファイル) const wchar_t* pszKey, //!< [in] 検索パターン const WCHAR* pszFile, //!< [in] 処理対象ファイル名(表示用) const SSearchOption& sSearchOption, //!< [in] 検索オプション @@ -1132,7 +1338,7 @@ int CGrepAgent::DoGrepFile( if( !CDocTypeManager().GetTypeConfigMini( CDocTypeManager().GetDocumentTypeOfPath( pszFile ), &type ) ){ return -1; } - CFileLoad cfl( type->m_encoding ); // 2012/12/18 Uchi 検査するファイルのデフォルトの文字コードを取得する様に + CFileLoadOrWnd cfl( type->m_encoding, hWndTarget ); // 2012/12/18 Uchi 検査するファイルのデフォルトの文字コードを取得する様に int nOldPercent = 0; int nKeyLen = wcslen( pszKey ); diff --git a/sakura_core/CGrepAgent.h b/sakura_core/CGrepAgent.h index 84fd9ab0a9..10769c6a5c 100644 --- a/sakura_core/CGrepAgent.h +++ b/sakura_core/CGrepAgent.h @@ -129,6 +129,7 @@ class CGrepAgent : public CDocListenerEx{ int DoGrepFile( CEditView* pcViewDst, CDlgCancel* pcDlgCancel, + HWND hWndTarget, const wchar_t* pszKey, const WCHAR* pszFile, const SSearchOption& sSearchOption, diff --git a/sakura_core/String_define.h b/sakura_core/String_define.h index 53614215fc..e2db330255 100644 --- a/sakura_core/String_define.h +++ b/sakura_core/String_define.h @@ -1306,6 +1306,7 @@ #define STR_TSV_MODE_NONE 35020 #define STR_TSV_MODE_TSV 35021 #define STR_TSV_MODE_CSV 35022 +#define STR_DLGGREP_THISDOC 35023 #define STR_DLGFNCLST_SORTTYPE1_2 35023 #define STR_DLGFNCLST_SORTTYPE2_2 35024 #define STR_DLGFNCLST_MENU_EXPAND 35025 diff --git a/sakura_core/_main/CControlTray.cpp b/sakura_core/_main/CControlTray.cpp index 19786f4e2a..4f99a0e4fe 100644 --- a/sakura_core/_main/CControlTray.cpp +++ b/sakura_core/_main/CControlTray.cpp @@ -68,6 +68,8 @@ static LRESULT CALLBACK CControlTrayWndProc( HWND, UINT, WPARAM, LPARAM ); //Stonee, 2001/07/01 多重起動された場合は前回のダイアログを前面に出すようにした。 void CControlTray::DoGrep() { + m_cDlgGrep.m_bEnableThisText = false; + //Stonee, 2001/06/30 //前回のダイアログがあれば前面に (suggested by genta) if ( ::IsWindow(m_cDlgGrep.GetHwnd()) ){ diff --git a/sakura_core/cmd/CViewCommander_TagJump.cpp b/sakura_core/cmd/CViewCommander_TagJump.cpp index 78fb1921a5..bed5d2c3e4 100644 --- a/sakura_core/cmd/CViewCommander_TagJump.cpp +++ b/sakura_core/cmd/CViewCommander_TagJump.cpp @@ -71,6 +71,67 @@ static bool IsFileExists2( const wchar_t* pszFile ) return IsFileExists(pszFile, true); } +static bool IsHWNDTag( const wchar_t* pLine, wchar_t* pFile, int* pnLen = NULL ) +{ + if( 0 == wcsncmp(pLine, L":HWND:[", 7) ){ + const wchar_t* pFileEnd = wcsstr( pLine, L"]" ); + if( pFileEnd ){ + const int nLen = pFileEnd - pLine + 1; + int i = 7; + for( ; i < nLen; i++ ){ + if( !(WCODE::Is09(pLine[i]) || (L'a' <= pLine[i] && L'f' <= pLine[i])) ){ + break; + } + } + if( i != nLen && nLen <= 16 + 7 ){ + if( pFile ){ + auto_memcpy(pFile, pLine, nLen); + } + if( pnLen ){ + *pnLen = nLen; + } + return true; + } + } + } + return false; +} + +static int GetLineColumnPos(const wchar_t* pLine) +{ + // filename(1234,56): str + const wchar_t* pTagEnd = wcsstr( pLine, L"): " ); + if( !pTagEnd ){ + // filename(1234,56) [SJIS]: str + pTagEnd = wcsstr( pLine, L"]: " ); + if( pTagEnd ){ + int fileEnd = pTagEnd - pLine - 1; + for( ; 1 < fileEnd; fileEnd-- ){ + if( L'[' == pLine[fileEnd] ){ + fileEnd--; + break; + } + } + for( ; 1 < fileEnd && L' ' == pLine[fileEnd]; fileEnd-- ){} + if( ')' == pLine[fileEnd] ){ + pTagEnd = &pLine[fileEnd]; + }else{ + pTagEnd = NULL; + } + } + } + if( pTagEnd ){ + int fileEnd = pTagEnd - pLine - 1; + for( ; 1 < fileEnd && (L'0' <= pLine[fileEnd] && pLine[fileEnd] <= L'9'); fileEnd-- ){} + if( 1 < fileEnd && (L',' == pLine[fileEnd]) ){ fileEnd--; } + for( ; 1 < fileEnd && (L'0' <= pLine[fileEnd] && pLine[fileEnd] <= L'9'); fileEnd-- ){} + if( 1 < fileEnd && L'(' == pLine[fileEnd] ){ + return fileEnd; + } + } + return 0; +} + /*! タグジャンプ @param bClose [in] true:元ウィンドウを閉じる @@ -123,6 +184,8 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) // ノーマル // C:\RootFolder\SubFolders\FileName.ext(5395,11): str + // :HWND:[01234567] 無題1(1234,56): str + // :HWND:[01234567] 無題1(1234,56) [SJIS]: str // ノーマル/ベースフォルダ/フォルダ毎 // ◎"C:\RootFolder" @@ -228,12 +291,17 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) break; }else if (!GetQuoteFilePath(&pLine[2], strFile, MAX_TAG_PATH)) { break; + }else if( IsHWNDTag(&pLine[2], szJumpToFile) ){ + break; } searchMode = TAGLIST_ROOT; }else if( 0 == wmemcmp( pLine, L"◆\"", 2 ) ){ if (!GetQuoteFilePath(&pLine[2], strFile, MAX_TAG_PATH)) { break; } + if( IsHWNDTag(&pLine[2], szJumpToFile) ){ + break; + } searchMode = TAGLIST_SUBPATH; }else if( 0 == wmemcmp( pLine, L"・", 1 ) ){ if( pLine[1] == L'"' ){ @@ -244,43 +312,26 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) searchMode = TAGLIST_SUBPATH; }else if( pLine[1] == L'(' ){ // ファイル毎(WZ風) + // ・( 12,34 ): str GetLineColumn( &pLine[1], &nJumpToLine, &nJumpToColumn ); searchMode = TAGLIST_FILEPATH; }else{ // ノーマル/ファイル相対パス - // ・FileName.ext(123,45): str - // ・FileName.ext(123,45) [SJIS]: str - const wchar_t* pTagEnd = wcsstr( pLine, L"): " ); - if( !pTagEnd ){ - pTagEnd = wcsstr( pLine, L"]: " ); - if( pTagEnd ){ - int fileEnd = pTagEnd - pLine - 1; - for( ; 1 < fileEnd; fileEnd-- ){ - if( L'[' == pLine[fileEnd] ){ - fileEnd--; - break; - } - } - for( ; 1 < fileEnd && L' ' == pLine[fileEnd]; fileEnd-- ){} - if( ')' == pLine[fileEnd] ){ - pTagEnd = &pLine[fileEnd]; - }else{ - pTagEnd = NULL; - } - } - } - if( pTagEnd ){ - int fileEnd = pTagEnd - pLine - 1; - for( ; 1 < fileEnd && (L'0' <= pLine[fileEnd] && pLine[fileEnd] <= L'9'); fileEnd-- ){} - if( 1 < fileEnd && (L',' == pLine[fileEnd]) ){ fileEnd--; } - for( ; 1 < fileEnd && (L'0' <= pLine[fileEnd] && pLine[fileEnd] <= L'9'); fileEnd-- ){} - if( 1 < fileEnd && L'(' == pLine[fileEnd] && fileEnd - 1 < MAX_TAG_PATH ){ - strFile.assign(pLine + 1, fileEnd - 1); - GetLineColumn( &pLine[fileEnd + 1], &nJumpToLine, &nJumpToColumn ); - searchMode = TAGLIST_SUBPATH; - }else{ + // ・FileName.ext(123,45): str + // ・FileName.ext(123,45) [SJIS]: str + // ・subpath\FileName.ext(123,45): str + // ・:HWND:[01234567](無題)2(123,45): str + int fileEnd = GetLineColumnPos(pLine); + if( 0 < fileEnd && fileEnd - 1 < (int)_countof(szFile) ){ + wmemcpy( szFile, pLine + 1, fileEnd - 1 ); + szFile[fileEnd - 1] = L'\0'; + GetLineColumn( &pLine[fileEnd + 1], &nJumpToLine, &nJumpToColumn ); + if( IsHWNDTag(pLine + 1, szJumpToFile) ){ break; } + searchMode = TAGLIST_SUBPATH; + }else{ + break; } } }else{ @@ -299,6 +350,9 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) if( searchMode == TAGLIST_SUBPATH || searchMode == TAGLIST_ROOT ){ continue; } + if( IsHWNDTag(&pLine[2], szJumpToFile) ){ + break; + } // フォルダ毎:ファイル名 if (GetQuoteFilePath(&pLine[2], strFile, MAX_TAG_PATH)) { searchMode = TAGLIST_SUBPATH; @@ -315,6 +369,9 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) if( searchMode == TAGLIST_ROOT ){ continue; } + if( IsHWNDTag(&pLine[2], szJumpToFile) ){ + break; + } // ファイル毎(WZ風):フルパス if( IsFilePath( &pLine[2], &nBgn, &nPathLen ) && !_IS_REL_PATH( &pLine[2] ) ){ strJumpToFile.assign(&pLine[2 + nBgn], nPathLen); @@ -366,6 +423,17 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) if( NULL == pLine ){ return false; } + int nLen = 0; + if( IsHWNDTag(pLine, NULL, &nLen) ){ + int nFileEnd = GetLineColumnPos(pLine); + if( nFileEnd ){ + auto_memcpy(szJumpToFile, pLine, nLen); + szJumpToFile[nLen] = L'\0'; + GetLineColumn(&pLine[nFileEnd + 1], &nJumpToLine, &nJumpToColumn); + } + } + } + if( szJumpToFile[0] == L'\0' ){ //@@@ 2001.12.31 YAZAKI const wchar_t *p = pLine; const wchar_t *p_end = p + nLineLen; @@ -402,6 +470,8 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) // Apr. 21, 2003 genta bClose追加 if (strJumpToFile.empty() == false && m_pCommanderView->TagJumpSub(strJumpToFile.c_str(), CMyPoint(nJumpToColumn, nJumpToLine), bClose ) ){ //@@@ 2003.04.13 + std::tstring tstrFile = to_tchar(szJumpToFile); + if( m_pCommanderView->TagJumpSub( tstrFile.c_str(), CMyPoint(nJumpToColumn, nJumpToLine), bClose ) ){ //@@@ 2003.04.13 return true; } diff --git a/sakura_core/config/system_constants.h b/sakura_core/config/system_constants.h index e9bedb5ac9..2bb59a6ded 100644 --- a/sakura_core/config/system_constants.h +++ b/sakura_core/config/system_constants.h @@ -750,6 +750,9 @@ enum e_PM_SETCARETPOS_SELECTSTATE { //! タイプ別を削除 #define MYWM_DEL_TYPESETTING (WM_APP+224) +//! 行数を取得 +#define MYWM_GETLINECOUNT (WM_APP+225) + //! ウィンドウ一覧表示 #define MYWM_DLGWINLIST (WM_APP+225) #endif /* SAKURA_SYSTEM_CONSTANTS_DACC287C_DAC4_4FC7_8AEC_8DB5BE6BFB8B_H_ */ diff --git a/sakura_core/dlg/CDlgGrep.cpp b/sakura_core/dlg/CDlgGrep.cpp index a58c89a67b..89af1b9812 100644 --- a/sakura_core/dlg/CDlgGrep.cpp +++ b/sakura_core/dlg/CDlgGrep.cpp @@ -75,6 +75,7 @@ static void SetGrepFolder( HWND hwndCtrl, LPCWSTR folder ); CDlgGrep::CDlgGrep() { + m_bEnableThisText = true; m_bSubFolder = FALSE; // サブフォルダからも検索する m_bFromThisText = FALSE; // この編集中のテキストから検索する m_sSearchOption.Reset(); // 検索オプション @@ -685,7 +686,7 @@ void CDlgGrep::SetData( void ) } // To Here Jun. 29, 2001 genta - if( m_szCurrentFilePath[0] != L'\0' ){ + if( m_bEnableThisText ){ ::EnableWindow( GetItemHwnd( IDC_CHK_FROMTHISTEXT ), TRUE ); }else{ ::EnableWindow( GetItemHwnd( IDC_CHK_FROMTHISTEXT ), FALSE ); @@ -707,19 +708,17 @@ void CDlgGrep::SetData( void ) void CDlgGrep::SetDataFromThisText( bool bChecked ) { BOOL bEnableControls = TRUE; - if( 0 != m_szCurrentFilePath[0] && bChecked ){ - WCHAR szWorkFolder[MAX_PATH]; - WCHAR szWorkFile[MAX_PATH]; - // 2003.08.01 Moca ファイル名はスペースなどは区切り記号になるので、""で囲い、エスケープする - szWorkFile[0] = L'"'; - SplitPath_FolderAndFile( m_szCurrentFilePath, szWorkFolder, szWorkFile + 1 ); - wcscat( szWorkFile, L"\"" ); // 2003.08.01 Moca - ::DlgItem_SetText( GetHwnd(), IDC_COMBO_FILE, szWorkFile ); - - SetGrepFolder( GetItemHwnd(IDC_COMBO_FOLDER), szWorkFolder ); + if( bChecked ){ + ::DlgItem_GetText(GetHwnd(), IDC_COMBO_FILE, m_szFile, _countof2(m_szFile)); + ::DlgItem_GetText(GetHwnd(), IDC_COMBO_FOLDER, m_szFolder, _countof2(m_szFolder)); + ::DlgItem_SetText( GetHwnd(), IDC_COMBO_FILE, LS(STR_DLGGREP_THISDOC) ); + SetGrepFolder( GetItemHwnd(IDC_COMBO_FOLDER), LS(STR_DLGGREP_THISDOC) ); ::CheckDlgButton( GetHwnd(), IDC_CHK_SUBFOLDER, BST_UNCHECKED ); bEnableControls = FALSE; + }else{ + ::DlgItem_SetText(GetHwnd(), IDC_COMBO_FILE, m_szFile); + ::DlgItem_SetText(GetHwnd(), IDC_COMBO_FOLDER, m_szFolder); } ::EnableWindow( GetItemHwnd( IDC_COMBO_FILE ), bEnableControls ); ::EnableWindow( GetItemHwnd( IDC_COMBO_FOLDER ), bEnableControls ); @@ -790,6 +789,16 @@ int CDlgGrep::GetData( void ) /* 検索ファイル */ ::DlgItem_GetText( GetHwnd(), IDC_COMBO_FILE, m_szFile, _countof2(m_szFile) ); + bool bFromThisText = IsDlgButtonCheckedBool(GetHwnd(), IDC_CHK_FROMTHISTEXT); + if( bFromThisText ){ + TCHAR szHwnd[_MAX_PATH]; +#ifdef _WIN64 + auto_sprintf(szHwnd, _T(":HWND:%016I64x"), ::GetParent(GetHwnd())); +#else + auto_sprintf(szHwnd, _T(":HWND:%08x"), ::GetParent(GetHwnd())); +#endif + m_szFile = szHwnd; + } /* 検索フォルダ */ ::DlgItem_GetText( GetHwnd(), IDC_COMBO_FOLDER, m_szFolder, _countof2(m_szFolder) ); /* 除外ファイル */ @@ -827,7 +836,9 @@ int CDlgGrep::GetData( void ) return FALSE; } - { + if( bFromThisText ){ + m_szFolder[0] = L'\0'; + }else{ //カレントディレクトリを保存。このブロックから抜けるときに自動でカレントディレクトリは復元される。 CCurrentDirectoryBackupPoint cCurDirBackup; diff --git a/sakura_core/dlg/CDlgGrep.h b/sakura_core/dlg/CDlgGrep.h index d5c7b29018..67b61cda80 100644 --- a/sakura_core/dlg/CDlgGrep.h +++ b/sakura_core/dlg/CDlgGrep.h @@ -42,6 +42,7 @@ class CDlgGrep : public CDialog int DoModal( HINSTANCE, HWND, const WCHAR* ); /* モーダルダイアログの表示 */ // HWND DoModeless( HINSTANCE, HWND, const char* ); /* モードレスダイアログの表示 */ + bool m_bEnableThisText; BOOL m_bSubFolder;/*!< サブフォルダからも検索する */ BOOL m_bFromThisText;/*!< この編集中のテキストから検索する */ diff --git a/sakura_core/env/CFileNameManager.cpp b/sakura_core/env/CFileNameManager.cpp index a1b2bcaef7..357b083581 100644 --- a/sakura_core/env/CFileNameManager.cpp +++ b/sakura_core/env/CFileNameManager.cpp @@ -453,9 +453,9 @@ bool CFileNameManager::GetMenuFullLabel( pszCharset = szCodePageName; } - int ret = auto_snprintf_s( pszOutput, nBuffSize, L"%s%s%s %s%s", + int ret = auto_snprintf_s( pszOutput, nBuffSize, _T("%ts%ts%ts%ts%ts"), szAccKey, (bFavorite ? L"★ " : L""), pszName, - (bModified ? L"*":L" "), pszCharset + (bModified ? _T(" *"):_T("")), pszCharset ); return 0 < ret; } diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index a829f5847d..10860fb2ca 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -3175,6 +3175,7 @@ BEGIN STR_DLGGREP4 "検索対象フォルダを指定してください。" STR_DLGGREP5 "検索対象フォルダが正しくありません。" STR_DLGGREP6 "検索対象フォルダが長すぎます。" + STR_DLGGREP_THISDOC "(現在のドキュメント)" STR_DLGJUMP1 "正しく行番号を入力してください。" STR_DLGJUMP_PSLQL "%d 行 %s パッケージ仕様部" STR_DLGOPNFL1 "変換なし" diff --git a/sakura_core/view/CEditView_Command.cpp b/sakura_core/view/CEditView_Command.cpp index 4acd37125c..add970fd88 100644 --- a/sakura_core/view/CEditView_Command.cpp +++ b/sakura_core/view/CEditView_Command.cpp @@ -32,6 +32,7 @@ #include "env/CShareData.h" #include "env/DLLSHAREDATA.h" #include "env/CTagJumpManager.h" +#include "env/CSakuraEnvironment.h" #include "util/file.h" #include "util/module.h" #include "util/window.h" @@ -76,18 +77,30 @@ bool CEditView::TagJumpSub( // 予め絶対パスに変換する.(キーワードヘルプジャンプで用いる) // 2007.05.19 ryoji 相対パスは設定ファイルからのパスを優先 WCHAR szJumpToFile[1024]; - if( bRelFromIni && _IS_REL_PATH( pszFileName ) ){ - GetInidirOrExedir( szJumpToFile, pszFileName ); - } - else { - wcscpy( szJumpToFile, pszFileName ); - } + HWND hwndTarget = NULL; + if( 0 == auto_strncmp(pszFileName, _T(":HWND:["), 7) ){ +#ifdef _WIN64 + _stscanf(pszFileName + 7, _T("%016I64x"), &hwndTrget); +#else + _stscanf(pszFileName + 7, _T("%08x"), &hwndTarget); +#endif + if( !IsSakuraMainWindow(hwndTarget) ){ + return false; + } + }else{ + if( bRelFromIni && _IS_REL_PATH( pszFileName ) ){ + GetInidirOrExedir( szJumpToFile, pszFileName ); + } + else { + _tcscpy( szJumpToFile, pszFileName ); + } - /* ロングファイル名を取得する */ - WCHAR szWork[1024]; - if( FALSE != ::GetLongFileName( szJumpToFile, szWork ) ) - { - wcscpy( szJumpToFile, szWork ); + /* ロングファイル名を取得する */ + TCHAR szWork[1024]; + if( FALSE != ::GetLongFileName( szJumpToFile, szWork ) ) + { + _tcscpy( szJumpToFile, szWork ); + } } // 2004/06/21 novice タグジャンプ機能追加 @@ -108,8 +121,11 @@ bool CEditView::TagJumpSub( /* 指定ファイルが開かれているか調べる */ /* 開かれている場合は開いているウィンドウのハンドルも返す */ /* ファイルを開いているか */ - if( CShareData::getInstance()->IsPathOpened( szJumpToFile, &hwndOwner ) ) + if( hwndTarget || CShareData::getInstance()->IsPathOpened( szJumpToFile, &hwndOwner ) ) { + if( hwndTarget ){ + hwndOwner = hwndTarget; + } // 2004.05.13 Moca マイナス値は無効 if( 0 < ptJumpTo.y ){ /* カーソルを移動させる */ diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index e283889e9a..953627c96f 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -1945,6 +1945,10 @@ LRESULT CEditWnd::DispatchEvent( wmemcpy( m_pShareData->m_sWorkBuffer.GetWorkBuffer(), pLine, nEnd ); return nLineLen; } + case MYWM_GETLINECOUNT: + { + return GetDocument()->m_cDocLineMgr.GetLineCount(); + } // 2010.05.11 Moca MYWM_ADDSTRINGLEN_Wを追加 NULセーフ case MYWM_ADDSTRINGLEN_W: diff --git a/sakura_lang_en_US/sakura_lang_rc.rc b/sakura_lang_en_US/sakura_lang_rc.rc index 2cd03ae46b..660f26968b 100644 --- a/sakura_lang_en_US/sakura_lang_rc.rc +++ b/sakura_lang_en_US/sakura_lang_rc.rc @@ -3212,6 +3212,7 @@ BEGIN STR_DLGGREP4 "Please define the target search folder." STR_DLGGREP5 "Target folder is not correct." STR_DLGGREP6 "Target folder is too long" + STR_DLGGREP_THISDOC "(Current document)" STR_DLGJUMP1 "Please input correct line number" STR_DLGJUMP_PSLQL "%d Ln %s Package Specification" STR_DLGOPNFL1 "as is" From 4971d3e8efd2ab4cf2669f22842d9bf0a2a29a7f Mon Sep 17 00:00:00 2001 From: Moca Date: Fri, 18 Jun 2021 21:45:11 +0900 Subject: [PATCH 0780/1024] =?UTF-8?q?PatchUnicode-1051=20=E7=8F=BE?= =?UTF-8?q?=E5=9C=A8=E3=81=AE=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1=E3=83=B3?= =?UTF-8?q?=E3=83=88=E5=86=85=E5=AE=B9=E3=82=92Grep=20v0.2=20=E3=82=B3?= =?UTF-8?q?=E3=83=B3=E3=83=95=E3=83=AA=E3=82=AF=E3=83=88=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/String_define.h | 2 +- sakura_core/config/system_constants.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sakura_core/String_define.h b/sakura_core/String_define.h index e2db330255..f23c5ef9de 100644 --- a/sakura_core/String_define.h +++ b/sakura_core/String_define.h @@ -1306,7 +1306,6 @@ #define STR_TSV_MODE_NONE 35020 #define STR_TSV_MODE_TSV 35021 #define STR_TSV_MODE_CSV 35022 -#define STR_DLGGREP_THISDOC 35023 #define STR_DLGFNCLST_SORTTYPE1_2 35023 #define STR_DLGFNCLST_SORTTYPE2_2 35024 #define STR_DLGFNCLST_MENU_EXPAND 35025 @@ -1316,6 +1315,7 @@ #define STR_KEYHELP_RMENU_NONE 35029 #define STR_KEYHELP_RMENU_TOP 35030 #define STR_KEYHELP_RMENU_BOTTOM 35031 +#define STR_DLGGREP_THISDOC 35032 #define STR_ERR_FILEPATH_TOO_LONG 35034 #define STR_GREP_EXCLUDE_FILE 35035 #define STR_GREP_EXCLUDE_FOLDER 35036 diff --git a/sakura_core/config/system_constants.h b/sakura_core/config/system_constants.h index 2bb59a6ded..d2ef125a58 100644 --- a/sakura_core/config/system_constants.h +++ b/sakura_core/config/system_constants.h @@ -750,9 +750,9 @@ enum e_PM_SETCARETPOS_SELECTSTATE { //! タイプ別を削除 #define MYWM_DEL_TYPESETTING (WM_APP+224) -//! 行数を取得 -#define MYWM_GETLINECOUNT (WM_APP+225) - //! ウィンドウ一覧表示 #define MYWM_DLGWINLIST (WM_APP+225) + +//! 行数を取得 +#define MYWM_GETLINECOUNT (WM_APP+226) #endif /* SAKURA_SYSTEM_CONSTANTS_DACC287C_DAC4_4FC7_8AEC_8DB5BE6BFB8B_H_ */ From 08be77cbc41c6ee4fc75a5be99b230faff33f7a4 Mon Sep 17 00:00:00 2001 From: novice123 Date: Fri, 18 Jun 2021 21:47:05 +0900 Subject: [PATCH 0781/1024] =?UTF-8?q?PatchUnicode-1051=20=E7=8F=BE?= =?UTF-8?q?=E5=9C=A8=E3=81=AE=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1=E3=83=B3?= =?UTF-8?q?=E3=83=88=E5=86=85=E5=AE=B9=E3=82=92Grep=20v0.3=20x64=20build?= =?UTF-8?q?=E6=99=82=E3=81=AE=E3=82=A8=E3=83=A9=E3=83=BC=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CGrepAgent.cpp | 4 ++-- sakura_core/view/CEditView_Command.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sakura_core/CGrepAgent.cpp b/sakura_core/CGrepAgent.cpp index e5398051e2..e9dadbbc31 100644 --- a/sakura_core/CGrepAgent.cpp +++ b/sakura_core/CGrepAgent.cpp @@ -303,7 +303,7 @@ int GetHwndTitle(HWND& hWndTarget, CNativeW* pmemTitle, TCHAR* pszWindowName, TC return 0; // ハンドルGrepではない } #ifdef _WIN64 - _stscanf(pszFile + 6, _T("%016I64x"), &hWndTrget); + _stscanf(pszFile + 6, _T("%016I64x"), &hWndTarget); #else _stscanf(pszFile + 6, _T("%08x"), &hWndTarget); #endif @@ -330,7 +330,7 @@ int GetHwndTitle(HWND& hWndTarget, CNativeW* pmemTitle, TCHAR* pszWindowName, TC } CFileNameManager::getInstance()->GetMenuFullLabel_WinListNoEscape(szTitle, _countof(szTitle), editInfo, node->m_nId, -1, NULL ); #ifdef _WIN64 - auto_sprintf(pszWindowName, _T(":HWND:[%016I64x]%ts"), hWndTrget, pszTagName); + auto_sprintf(pszWindowName, _T(":HWND:[%016I64x]%ts"), hWndTarget, pszTagName); #else auto_sprintf(pszWindowName, _T(":HWND:[%08x]%ts"), hWndTarget, pszTagName); #endif diff --git a/sakura_core/view/CEditView_Command.cpp b/sakura_core/view/CEditView_Command.cpp index add970fd88..43d5e14fc6 100644 --- a/sakura_core/view/CEditView_Command.cpp +++ b/sakura_core/view/CEditView_Command.cpp @@ -80,7 +80,7 @@ bool CEditView::TagJumpSub( HWND hwndTarget = NULL; if( 0 == auto_strncmp(pszFileName, _T(":HWND:["), 7) ){ #ifdef _WIN64 - _stscanf(pszFileName + 7, _T("%016I64x"), &hwndTrget); + _stscanf(pszFileName + 7, _T("%016I64x"), &hwndTarget); #else _stscanf(pszFileName + 7, _T("%08x"), &hwndTarget); #endif From 9a37fd93b5d2e42095001baa661947bbacfcbf6c Mon Sep 17 00:00:00 2001 From: novice123 Date: Fri, 18 Jun 2021 21:47:05 +0900 Subject: [PATCH 0782/1024] =?UTF-8?q?PatchUnicode-1051=20=E7=8F=BE?= =?UTF-8?q?=E5=9C=A8=E3=81=AE=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1=E3=83=B3?= =?UTF-8?q?=E3=83=88=E5=86=85=E5=AE=B9=E3=82=92Grep=20v0.4=20x64=E3=81=A7?= =?UTF-8?q?=E3=82=BF=E3=82=B0=E3=82=B8=E3=83=A3=E3=83=B3=E3=83=97=E3=81=A7?= =?UTF-8?q?=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/cmd/CViewCommander_TagJump.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sakura_core/cmd/CViewCommander_TagJump.cpp b/sakura_core/cmd/CViewCommander_TagJump.cpp index bed5d2c3e4..bfd3d9e90c 100644 --- a/sakura_core/cmd/CViewCommander_TagJump.cpp +++ b/sakura_core/cmd/CViewCommander_TagJump.cpp @@ -83,7 +83,7 @@ static bool IsHWNDTag( const wchar_t* pLine, wchar_t* pFile, int* pnLen = NULL ) break; } } - if( i != nLen && nLen <= 16 + 7 ){ + if( i != nLen && nLen <= 16 + 8 ){ if( pFile ){ auto_memcpy(pFile, pLine, nLen); } @@ -837,7 +837,7 @@ bool CViewCommander::Sub_PreProcTagJumpByTagsFile( WCHAR* szCurrentPath, int cou // 現在のタイプ別の1番目の拡張子を拝借 WCHAR szExts[MAX_TYPES_EXTS]; CDocTypeManager::GetFirstExt(m_pCommanderView->m_pTypeData->m_szTypeExts, szExts, _countof(szExts)); - int nExtLen = wcslen( szExts ); + size_t nExtLen = auto_strlen( szExts ); wcscat( szCurrentPath, L"\\dmy" ); if( nExtLen ){ wcscat( szCurrentPath, L"." ); From fe7cf225a3a4ba17376335ebd0992709edcdba0e Mon Sep 17 00:00:00 2001 From: beru Date: Fri, 18 Jun 2021 21:47:15 +0900 Subject: [PATCH 0783/1024] =?UTF-8?q?PatchUnicode-1051=20v0.5=20Secutiry?= =?UTF-8?q?=20HotSpot=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CGrepAgent.cpp | 4 ++-- sakura_core/cmd/CViewCommander_TagJump.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sakura_core/CGrepAgent.cpp b/sakura_core/CGrepAgent.cpp index e9dadbbc31..1f1c3df6ee 100644 --- a/sakura_core/CGrepAgent.cpp +++ b/sakura_core/CGrepAgent.cpp @@ -309,7 +309,7 @@ int GetHwndTitle(HWND& hWndTarget, CNativeW* pmemTitle, TCHAR* pszWindowName, TC #endif if( pmemTitle ){ const wchar_t* p = L"Window:["; - pmemTitle->SetStringHoldBuffer(p, auto_strlen(p)); + pmemTitle->SetStringHoldBuffer(p, 8); } if( !IsSakuraMainWindow(hWndTarget) ){ return -1; @@ -750,7 +750,7 @@ DWORD CGrepAgent::DoGrep( bool bOutputBaseFolder = false; bool bOutputFolderName = false; // 複数ウィンドウループ予約 - int nPathLen = auto_strlen(szWindowPath); + auto nPathLen = wcsnlen_s(szWindowPath, _countof(szWindowPath)); std::tstring currentFile = szWindowPath; if( currentFile.size() ){ currentFile += _T('\\'); diff --git a/sakura_core/cmd/CViewCommander_TagJump.cpp b/sakura_core/cmd/CViewCommander_TagJump.cpp index bfd3d9e90c..3f0070bd76 100644 --- a/sakura_core/cmd/CViewCommander_TagJump.cpp +++ b/sakura_core/cmd/CViewCommander_TagJump.cpp @@ -837,7 +837,7 @@ bool CViewCommander::Sub_PreProcTagJumpByTagsFile( WCHAR* szCurrentPath, int cou // 現在のタイプ別の1番目の拡張子を拝借 WCHAR szExts[MAX_TYPES_EXTS]; CDocTypeManager::GetFirstExt(m_pCommanderView->m_pTypeData->m_szTypeExts, szExts, _countof(szExts)); - size_t nExtLen = auto_strlen( szExts ); + auto nExtLen = wcsnlen_s( szExts, _countof(szExts) ); wcscat( szCurrentPath, L"\\dmy" ); if( nExtLen ){ wcscat( szCurrentPath, L"." ); From e35dc1f297d6d0c4c791d46e3fb92e294b8fdbd9 Mon Sep 17 00:00:00 2001 From: dep5 Date: Fri, 18 Jun 2021 21:47:30 +0900 Subject: [PATCH 0784/1024] =?UTF-8?q?PatchUnicode-1051=20v0.6=20=E3=82=B3?= =?UTF-8?q?=E3=83=BC=E3=83=89=E5=A4=89=E6=9B=B4=E3=81=AB=E5=AF=BE=E5=BF=9C?= =?UTF-8?q?=20#1034?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CGrepAgent.cpp | 38 +++++++++++----------- sakura_core/cmd/CViewCommander_TagJump.cpp | 4 +-- sakura_core/dlg/CDlgGrep.cpp | 6 ++-- sakura_core/env/CFileNameManager.cpp | 4 +-- sakura_core/view/CEditView_Command.cpp | 12 +++---- 5 files changed, 32 insertions(+), 32 deletions(-) diff --git a/sakura_core/CGrepAgent.cpp b/sakura_core/CGrepAgent.cpp index 1f1c3df6ee..650fb50158 100644 --- a/sakura_core/CGrepAgent.cpp +++ b/sakura_core/CGrepAgent.cpp @@ -123,7 +123,7 @@ class CFileLoadOrWnd{ } ~CFileLoadOrWnd(){ } - ECodeType FileOpen(const TCHAR* pszFile, bool bBigFile, ECodeType charCode, int nFlag) + ECodeType FileOpen(const WCHAR* pszFile, bool bBigFile, ECodeType charCode, int nFlag) { if( m_hWnd ){ DWORD_PTR dwMsgResult = 0; @@ -297,15 +297,15 @@ void CGrepAgent::AddTail( CEditView* pcEditView, const CNativeW& cmem, bool bAdd } } -int GetHwndTitle(HWND& hWndTarget, CNativeW* pmemTitle, TCHAR* pszWindowName, TCHAR* pszWindowPath, const TCHAR* pszFile) +int GetHwndTitle(HWND& hWndTarget, CNativeW* pmemTitle, WCHAR* pszWindowName, WCHAR* pszWindowPath, const WCHAR* pszFile) { - if( 0 != auto_strncmp(_T(":HWND:"), pszFile, 6) ){ + if( 0 != wcsncmp(L":HWND:", pszFile, 6) ){ return 0; // ハンドルGrepではない } #ifdef _WIN64 - _stscanf(pszFile + 6, _T("%016I64x"), &hWndTarget); + _stscanf(pszFile + 6, L"%016I64x", &hWndTarget); #else - _stscanf(pszFile + 6, _T("%08x"), &hWndTarget); + _stscanf(pszFile + 6, L"%08x", &hWndTarget); #endif if( pmemTitle ){ const wchar_t* p = L"Window:["; @@ -318,30 +318,30 @@ int GetHwndTitle(HWND& hWndTarget, CNativeW* pmemTitle, TCHAR* pszWindowName, TC EditInfo* editInfo = &(GetDllShareData().m_sWorkBuffer.m_EditInfo_MYWM_GETFILEINFO); if( '\0' == editInfo->m_szPath[0] ){ // Grepかアウトプットか無題 - TCHAR szTitle[_MAX_PATH]; - TCHAR szGrep[100]; + WCHAR szTitle[_MAX_PATH]; + WCHAR szGrep[100]; editInfo->m_bIsModified = false; const EditNode* node = CAppNodeManager::getInstance()->GetEditNode(hWndTarget); - TCHAR* pszTagName = szTitle; + WCHAR* pszTagName = szTitle; if( editInfo->m_bIsGrep ){ // Grepは検索キーとタグがぶつかることがあるので単に(Grep)と表示 pszTagName = szGrep; - auto_strcpy(pszTagName, _T("(Grep)")); + wcsncpy_s(pszTagName, _countof(szGrep), L"(Grep)", _TRUNCATE); } CFileNameManager::getInstance()->GetMenuFullLabel_WinListNoEscape(szTitle, _countof(szTitle), editInfo, node->m_nId, -1, NULL ); #ifdef _WIN64 - auto_sprintf(pszWindowName, _T(":HWND:[%016I64x]%ts"), hWndTarget, pszTagName); + auto_sprintf(pszWindowName, L":HWND:[%016I64x]%s", hWndTarget, pszTagName); #else - auto_sprintf(pszWindowName, _T(":HWND:[%08x]%ts"), hWndTarget, pszTagName); + auto_sprintf(pszWindowName, L":HWND:[%08x]%s", hWndTarget, pszTagName); #endif if( pmemTitle ){ - pmemTitle->AppendStringT(szTitle); + pmemTitle->AppendString(szTitle); } pszWindowPath[0] = L'\0'; }else{ SplitPath_FolderAndFile(editInfo->m_szPath, pszWindowPath, pszWindowName); if( pmemTitle ){ - pmemTitle->AppendStringT(pszWindowName); + pmemTitle->AppendString(pszWindowName); } } if( pmemTitle ){ @@ -603,8 +603,8 @@ DWORD CGrepAgent::DoGrep( } HWND hWndTarget = NULL; - TCHAR szWindowName[_MAX_PATH]; - TCHAR szWindowPath[_MAX_PATH]; + WCHAR szWindowName[_MAX_PATH]; + WCHAR szWindowPath[_MAX_PATH]; { int nHwndRet = GetHwndTitle(hWndTarget, &cmemWork, szWindowName, szWindowPath, pcmGrepFile->GetStringPtr()); if( -1 == nHwndRet ){ @@ -751,9 +751,9 @@ DWORD CGrepAgent::DoGrep( bool bOutputFolderName = false; // 複数ウィンドウループ予約 auto nPathLen = wcsnlen_s(szWindowPath, _countof(szWindowPath)); - std::tstring currentFile = szWindowPath; + std::wstring currentFile = szWindowPath; if( currentFile.size() ){ - currentFile += _T('\\'); + currentFile += L'\\'; nPathLen += 1; } currentFile += szWindowName; @@ -771,7 +771,7 @@ DWORD CGrepAgent::DoGrep( &nHitCount, currentFile.c_str(), szWindowPath, - (sGrepOption.bGrepSeparateFolder && sGrepOption.bGrepOutputBaseFolder ? _T("") : szWindowPath), + (sGrepOption.bGrepSeparateFolder && sGrepOption.bGrepOutputBaseFolder ? L"" : szWindowPath), (sGrepOption.bGrepSeparateFolder ? szWindowName : currentFile.c_str() + nPathLen), bOutputBaseFolder, bOutputFolderName, @@ -793,7 +793,7 @@ DWORD CGrepAgent::DoGrep( }else{ for( int nPath = 0; nPath < (int)vPaths.size(); nPath++ ){ bool bOutputBaseFolder = false; - std::tstring sPath = ChopYen( vPaths[nPath] ); + std::wstring sPath = ChopYen( vPaths[nPath] ); int nTreeRet = DoGrepTree( pcViewDst, &cDlgCancel, diff --git a/sakura_core/cmd/CViewCommander_TagJump.cpp b/sakura_core/cmd/CViewCommander_TagJump.cpp index 3f0070bd76..b84087e64e 100644 --- a/sakura_core/cmd/CViewCommander_TagJump.cpp +++ b/sakura_core/cmd/CViewCommander_TagJump.cpp @@ -85,7 +85,7 @@ static bool IsHWNDTag( const wchar_t* pLine, wchar_t* pFile, int* pnLen = NULL ) } if( i != nLen && nLen <= 16 + 8 ){ if( pFile ){ - auto_memcpy(pFile, pLine, nLen); + wmemcpy(szJumpToFile, pLine, nLen); } if( pnLen ){ *pnLen = nLen; @@ -470,7 +470,7 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) // Apr. 21, 2003 genta bClose追加 if (strJumpToFile.empty() == false && m_pCommanderView->TagJumpSub(strJumpToFile.c_str(), CMyPoint(nJumpToColumn, nJumpToLine), bClose ) ){ //@@@ 2003.04.13 - std::tstring tstrFile = to_tchar(szJumpToFile); + std::wstring tstrFile = szJumpToFile; if( m_pCommanderView->TagJumpSub( tstrFile.c_str(), CMyPoint(nJumpToColumn, nJumpToLine), bClose ) ){ //@@@ 2003.04.13 return true; } diff --git a/sakura_core/dlg/CDlgGrep.cpp b/sakura_core/dlg/CDlgGrep.cpp index 89af1b9812..a8adb6d922 100644 --- a/sakura_core/dlg/CDlgGrep.cpp +++ b/sakura_core/dlg/CDlgGrep.cpp @@ -791,11 +791,11 @@ int CDlgGrep::GetData( void ) ::DlgItem_GetText( GetHwnd(), IDC_COMBO_FILE, m_szFile, _countof2(m_szFile) ); bool bFromThisText = IsDlgButtonCheckedBool(GetHwnd(), IDC_CHK_FROMTHISTEXT); if( bFromThisText ){ - TCHAR szHwnd[_MAX_PATH]; + WCHAR szHwnd[_MAX_PATH]; #ifdef _WIN64 - auto_sprintf(szHwnd, _T(":HWND:%016I64x"), ::GetParent(GetHwnd())); + auto_sprintf(szHwnd, L":HWND:%016I64x", ::GetParent(GetHwnd())); #else - auto_sprintf(szHwnd, _T(":HWND:%08x"), ::GetParent(GetHwnd())); + auto_sprintf(szHwnd, L":HWND:%08x", ::GetParent(GetHwnd())); #endif m_szFile = szHwnd; } diff --git a/sakura_core/env/CFileNameManager.cpp b/sakura_core/env/CFileNameManager.cpp index 357b083581..0fed19777a 100644 --- a/sakura_core/env/CFileNameManager.cpp +++ b/sakura_core/env/CFileNameManager.cpp @@ -453,9 +453,9 @@ bool CFileNameManager::GetMenuFullLabel( pszCharset = szCodePageName; } - int ret = auto_snprintf_s( pszOutput, nBuffSize, _T("%ts%ts%ts%ts%ts"), + int ret = auto_snprintf_s( pszOutput, nBuffSize, L"%s%s%s%s%s", szAccKey, (bFavorite ? L"★ " : L""), pszName, - (bModified ? _T(" *"):_T("")), pszCharset + (bModified ? L" *":L""), pszCharset ); return 0 < ret; } diff --git a/sakura_core/view/CEditView_Command.cpp b/sakura_core/view/CEditView_Command.cpp index 43d5e14fc6..18aedb2e15 100644 --- a/sakura_core/view/CEditView_Command.cpp +++ b/sakura_core/view/CEditView_Command.cpp @@ -78,11 +78,11 @@ bool CEditView::TagJumpSub( // 2007.05.19 ryoji 相対パスは設定ファイルからのパスを優先 WCHAR szJumpToFile[1024]; HWND hwndTarget = NULL; - if( 0 == auto_strncmp(pszFileName, _T(":HWND:["), 7) ){ + if( 0 == wcsncmp(pszFileName, L":HWND:[", 7) ){ #ifdef _WIN64 - _stscanf(pszFileName + 7, _T("%016I64x"), &hwndTarget); + _stscanf(pszFileName + 7, L"%016I64x", &hwndTarget); #else - _stscanf(pszFileName + 7, _T("%08x"), &hwndTarget); + _stscanf(pszFileName + 7, L"%08x", &hwndTarget); #endif if( !IsSakuraMainWindow(hwndTarget) ){ return false; @@ -92,14 +92,14 @@ bool CEditView::TagJumpSub( GetInidirOrExedir( szJumpToFile, pszFileName ); } else { - _tcscpy( szJumpToFile, pszFileName ); + wcscpy( szJumpToFile, pszFileName ); } /* ロングファイル名を取得する */ - TCHAR szWork[1024]; + WCHAR szWork[1024]; if( FALSE != ::GetLongFileName( szJumpToFile, szWork ) ) { - _tcscpy( szJumpToFile, szWork ); + wcscpy( szJumpToFile, szWork ); } } From 691f54f454c87a1f69b8409a4c65fafdc804fdec Mon Sep 17 00:00:00 2001 From: dep5 Date: Fri, 18 Jun 2021 21:47:53 +0900 Subject: [PATCH 0785/1024] =?UTF-8?q?PatchUnicode-1051=20v0.7=20=E3=81=8B?= =?UTF-8?q?=E3=81=A3=E3=81=93=E3=81=AE=E4=BD=8D=E7=BD=AE=E3=81=AA=E3=81=A9?= =?UTF-8?q?=E3=82=92=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CGrepAgent.cpp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/sakura_core/CGrepAgent.cpp b/sakura_core/CGrepAgent.cpp index 650fb50158..9936b3352b 100644 --- a/sakura_core/CGrepAgent.cpp +++ b/sakura_core/CGrepAgent.cpp @@ -614,16 +614,16 @@ DWORD CGrepAgent::DoGrep( } return 0; }else if( 0 == nHwndRet ){ - cmemWork.SetStringT( pcmGrepFile->GetStringPtr() ); + { + // 解析済みのファイルパターン配列を取得する + const auto& vecSearchFileKeys = cGrepEnumKeys.m_vecSearchFileKeys; + std::wstring strPatterns = FormatPathList( vecSearchFileKeys ); + cmemWork.SetString( strPatterns.c_str(), strPatterns.length() ); + } } } cmemMessage.AppendString( LS( STR_GREP_SEARCH_TARGET ) ); //L"検索対象 " - { - // 解析済みのファイルパターン配列を取得する - const auto& vecSearchFileKeys = cGrepEnumKeys.m_vecSearchFileKeys; - std::wstring strPatterns = FormatPathList( vecSearchFileKeys ); - cmemMessage.AppendString( strPatterns.c_str(), strPatterns.length() ); - } + cmemMessage += cmemWork; cmemMessage.AppendString( L"\r\n" ); cmemMessage.AppendString( LS( STR_GREP_SEARCH_FOLDER ) ); //L"フォルダ " @@ -790,6 +790,7 @@ DWORD CGrepAgent::DoGrep( CEditWnd::getInstance()->RedrawAllViews( pcViewDst ); cmemMessage.Clear(); } + nHitCount = nGrepTreeResult; }else{ for( int nPath = 0; nPath < (int)vPaths.size(); nPath++ ){ bool bOutputBaseFolder = false; @@ -818,10 +819,10 @@ DWORD CGrepAgent::DoGrep( } nGrepTreeResult += nTreeRet; } - } - if( 0 < cmemMessage.GetStringLength() ) { - AddTail( pcViewDst, cmemMessage, sGrepOption.bGrepStdout ); - cmemMessage._SetStringLength(0); + if( 0 < cmemMessage.GetStringLength() ) { + AddTail( pcViewDst, cmemMessage, sGrepOption.bGrepStdout ); + cmemMessage._SetStringLength(0); + } } if( -1 == nGrepTreeResult && sGrepOption.bGrepHeader ){ const wchar_t* p = LS( STR_GREP_SUSPENDED ); //L"中断しました。\r\n" From 3caf425e366cf3652d4b3cd97e0dce01e9da7aca Mon Sep 17 00:00:00 2001 From: dep5 Date: Fri, 18 Jun 2021 21:47:53 +0900 Subject: [PATCH 0786/1024] =?UTF-8?q?PatchUnicode-1051=20v0.8=20=E3=82=BF?= =?UTF-8?q?=E3=82=B0=E3=82=B8=E3=83=A3=E3=83=B3=E3=83=97=E3=81=AB=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C=20#1607?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/cmd/CViewCommander_TagJump.cpp | 36 ++++++++++------------ sakura_core/view/CEditView_Command.cpp | 2 +- 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/sakura_core/cmd/CViewCommander_TagJump.cpp b/sakura_core/cmd/CViewCommander_TagJump.cpp index b84087e64e..5a55ca59ed 100644 --- a/sakura_core/cmd/CViewCommander_TagJump.cpp +++ b/sakura_core/cmd/CViewCommander_TagJump.cpp @@ -71,7 +71,7 @@ static bool IsFileExists2( const wchar_t* pszFile ) return IsFileExists(pszFile, true); } -static bool IsHWNDTag( const wchar_t* pLine, wchar_t* pFile, int* pnLen = NULL ) +static bool IsHWNDTag( const wchar_t* pLine, std::wstring& str, int* pnLen = NULL ) { if( 0 == wcsncmp(pLine, L":HWND:[", 7) ){ const wchar_t* pFileEnd = wcsstr( pLine, L"]" ); @@ -84,12 +84,11 @@ static bool IsHWNDTag( const wchar_t* pLine, wchar_t* pFile, int* pnLen = NULL ) } } if( i != nLen && nLen <= 16 + 8 ){ - if( pFile ){ - wmemcpy(szJumpToFile, pLine, nLen); - } if( pnLen ){ *pnLen = nLen; + return true; } + str.assign(pLine, nLen); return true; } } @@ -291,15 +290,12 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) break; }else if (!GetQuoteFilePath(&pLine[2], strFile, MAX_TAG_PATH)) { break; - }else if( IsHWNDTag(&pLine[2], szJumpToFile) ){ - break; } searchMode = TAGLIST_ROOT; }else if( 0 == wmemcmp( pLine, L"◆\"", 2 ) ){ if (!GetQuoteFilePath(&pLine[2], strFile, MAX_TAG_PATH)) { break; - } - if( IsHWNDTag(&pLine[2], szJumpToFile) ){ + }else if( IsHWNDTag(&pLine[2], strJumpToFile) ){ break; } searchMode = TAGLIST_SUBPATH; @@ -309,6 +305,9 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) if (!GetQuoteFilePath(&pLine[2], strFile, MAX_TAG_PATH)) { break; } + if( IsHWNDTag(&pLine[2], strJumpToFile) ){ + break; + } searchMode = TAGLIST_SUBPATH; }else if( pLine[1] == L'(' ){ // ファイル毎(WZ風) @@ -322,11 +321,10 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) // ・subpath\FileName.ext(123,45): str // ・:HWND:[01234567](無題)2(123,45): str int fileEnd = GetLineColumnPos(pLine); - if( 0 < fileEnd && fileEnd - 1 < (int)_countof(szFile) ){ - wmemcpy( szFile, pLine + 1, fileEnd - 1 ); - szFile[fileEnd - 1] = L'\0'; + if (1 < fileEnd && L'(' == pLine[fileEnd] && fileEnd - 1 < MAX_TAG_PATH) { + strFile.assign(pLine + 1, fileEnd - 1); GetLineColumn( &pLine[fileEnd + 1], &nJumpToLine, &nJumpToColumn ); - if( IsHWNDTag(pLine + 1, szJumpToFile) ){ + if( IsHWNDTag(pLine + 1, strJumpToFile) ){ break; } searchMode = TAGLIST_SUBPATH; @@ -350,7 +348,7 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) if( searchMode == TAGLIST_SUBPATH || searchMode == TAGLIST_ROOT ){ continue; } - if( IsHWNDTag(&pLine[2], szJumpToFile) ){ + if( IsHWNDTag(&pLine[2], strJumpToFile) ){ break; } // フォルダ毎:ファイル名 @@ -369,7 +367,7 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) if( searchMode == TAGLIST_ROOT ){ continue; } - if( IsHWNDTag(&pLine[2], szJumpToFile) ){ + if( IsHWNDTag(&pLine[2], strJumpToFile) ){ break; } // ファイル毎(WZ風):フルパス @@ -424,16 +422,16 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) return false; } int nLen = 0; - if( IsHWNDTag(pLine, NULL, &nLen) ){ + std::wstring test; + if (IsHWNDTag(pLine, test, &nLen)) { int nFileEnd = GetLineColumnPos(pLine); if( nFileEnd ){ - auto_memcpy(szJumpToFile, pLine, nLen); - szJumpToFile[nLen] = L'\0'; + strJumpToFile.assign(pLine, nLen); GetLineColumn(&pLine[nFileEnd + 1], &nJumpToLine, &nJumpToColumn); } } } - if( szJumpToFile[0] == L'\0' ){ + if (strJumpToFile.empty()) { //@@@ 2001.12.31 YAZAKI const wchar_t *p = pLine; const wchar_t *p_end = p + nLineLen; @@ -470,8 +468,6 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) // Apr. 21, 2003 genta bClose追加 if (strJumpToFile.empty() == false && m_pCommanderView->TagJumpSub(strJumpToFile.c_str(), CMyPoint(nJumpToColumn, nJumpToLine), bClose ) ){ //@@@ 2003.04.13 - std::wstring tstrFile = szJumpToFile; - if( m_pCommanderView->TagJumpSub( tstrFile.c_str(), CMyPoint(nJumpToColumn, nJumpToLine), bClose ) ){ //@@@ 2003.04.13 return true; } diff --git a/sakura_core/view/CEditView_Command.cpp b/sakura_core/view/CEditView_Command.cpp index 18aedb2e15..b64327b82c 100644 --- a/sakura_core/view/CEditView_Command.cpp +++ b/sakura_core/view/CEditView_Command.cpp @@ -61,7 +61,7 @@ bool CEditView::TagJumpSub( bool* pbJumpToSelf //!< [out] オプションNULL可。自分にジャンプしたか ) { - HWND hwndOwner; + HWND hwndOwner = NULL; POINT poCaret; // 2004/06/21 novice タグジャンプ機能追加 TagJump tagJump; From 44ea603d45e69a0c84218f4389d131c194502aa3 Mon Sep 17 00:00:00 2001 From: dep5 Date: Fri, 18 Jun 2021 21:47:53 +0900 Subject: [PATCH 0787/1024] =?UTF-8?q?PatchUnicode-1051=20v0.9=20=E3=82=B3?= =?UTF-8?q?=E3=83=BC=E3=83=89=E5=A4=89=E6=9B=B4=E3=81=AB=E5=AF=BE=E5=BF=9C?= =?UTF-8?q?=20#125=20#1615=20#1610?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CGrepAgent.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/sakura_core/CGrepAgent.cpp b/sakura_core/CGrepAgent.cpp index 9936b3352b..eb110e71d6 100644 --- a/sakura_core/CGrepAgent.cpp +++ b/sakura_core/CGrepAgent.cpp @@ -49,6 +49,7 @@ #include #include #include +#include "apiwrap/StdApi.h" #include "apiwrap/StdControl.h" #include "CSelectLang.h" #include "sakura_rc.h" @@ -164,7 +165,7 @@ class CFileLoadOrWnd{ if( 0 < nLineLen ){ if( 1 < nLineLen && (*buffer)[nLineLen - 2] == WCODE::CR && (*buffer)[nLineLen - 1] == WCODE::LF){ - pcEol->SetType(EOL_CRLF); + pcEol->SetType(EEolType::cr_and_lf); }else{ pcEol->SetTypeByString(buffer->GetStringPtr() + nLineLen - 1, 1); } @@ -775,7 +776,8 @@ DWORD CGrepAgent::DoGrep( (sGrepOption.bGrepSeparateFolder ? szWindowName : currentFile.c_str() + nPathLen), bOutputBaseFolder, bOutputFolderName, - cmemMessage + cmemMessage, + cUnicodeBuffer ); if( nTreeRet == -1 ){ nGrepTreeResult = -1; @@ -811,7 +813,9 @@ DWORD CGrepAgent::DoGrep( &cRegexp, 0, bOutputBaseFolder, - &nHitCount + &nHitCount, + cmemMessage, + cUnicodeBuffer ); if( nTreeRet == -1 ){ nGrepTreeResult = -1; From 4a698c59b9cba8237f5ba948ed3132e6e2179625 Mon Sep 17 00:00:00 2001 From: dep5 Date: Fri, 18 Jun 2021 21:47:55 +0900 Subject: [PATCH 0788/1024] =?UTF-8?q?PatchUnicode-1051=20v0.10=20Grep?= =?UTF-8?q?=E3=83=80=E3=82=A4=E3=82=A2=E3=83=AD=E3=82=B0=E3=81=AE=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/String_define.h | 3 ++- sakura_core/dlg/CDlgGrep.cpp | 24 ++++++++++++++++++++++-- sakura_core/sakura.hh | 2 +- sakura_core/sakura_rc.rc | 5 +++-- sakura_lang_en_US/sakura_lang_rc.rc | 4 ++-- 5 files changed, 30 insertions(+), 8 deletions(-) diff --git a/sakura_core/String_define.h b/sakura_core/String_define.h index f23c5ef9de..0542fbdc15 100644 --- a/sakura_core/String_define.h +++ b/sakura_core/String_define.h @@ -1315,7 +1315,8 @@ #define STR_KEYHELP_RMENU_NONE 35029 #define STR_KEYHELP_RMENU_TOP 35030 #define STR_KEYHELP_RMENU_BOTTOM 35031 -#define STR_DLGGREP_THISDOC 35032 +#define STR_DLGGREP_THISDOC 35045 +#define STR_DLGGREP_THISDOC_ERROR 35046 #define STR_ERR_FILEPATH_TOO_LONG 35034 #define STR_GREP_EXCLUDE_FILE 35035 #define STR_GREP_EXCLUDE_FOLDER 35036 diff --git a/sakura_core/dlg/CDlgGrep.cpp b/sakura_core/dlg/CDlgGrep.cpp index a8adb6d922..88531cc19f 100644 --- a/sakura_core/dlg/CDlgGrep.cpp +++ b/sakura_core/dlg/CDlgGrep.cpp @@ -46,7 +46,7 @@ const DWORD p_helpids[] = { //12000 IDC_BUTTON_HELP, HIDC_GREP_BUTTON_HELP, //ヘルプ IDC_CHK_WORD, HIDC_GREP_CHK_WORD, //単語単位 IDC_CHK_SUBFOLDER, HIDC_GREP_CHK_SUBFOLDER, //サブフォルダも検索 - IDC_CHK_FROMTHISTEXT, HIDC_GREP_CHK_FROMTHISTEXT, //このファイルから + IDC_CHK_FROMTHISTEXT, HIDC_GREP_CHK_FROMTHISTEXT, //編集中のテキストから検索 IDC_CHK_LOHICASE, HIDC_GREP_CHK_LOHICASE, //大文字小文字 IDC_CHK_REGULAREXP, HIDC_GREP_CHK_REGULAREXP, //正規表現 IDC_COMBO_CHARSET, HIDC_GREP_COMBO_CHARSET, //文字コードセット @@ -711,19 +711,33 @@ void CDlgGrep::SetDataFromThisText( bool bChecked ) if( bChecked ){ ::DlgItem_GetText(GetHwnd(), IDC_COMBO_FILE, m_szFile, _countof2(m_szFile)); ::DlgItem_GetText(GetHwnd(), IDC_COMBO_FOLDER, m_szFolder, _countof2(m_szFolder)); + ::DlgItem_GetText(GetHwnd(), IDC_COMBO_EXCLUDE_FILE, m_szExcludeFile, _countof2(m_szExcludeFile)); + ::DlgItem_GetText(GetHwnd(), IDC_COMBO_EXCLUDE_FOLDER, m_szExcludeFolder, _countof2(m_szExcludeFolder)); ::DlgItem_SetText( GetHwnd(), IDC_COMBO_FILE, LS(STR_DLGGREP_THISDOC) ); SetGrepFolder( GetItemHwnd(IDC_COMBO_FOLDER), LS(STR_DLGGREP_THISDOC) ); - ::CheckDlgButton( GetHwnd(), IDC_CHK_SUBFOLDER, BST_UNCHECKED ); + ::DlgItem_SetText( GetHwnd(), IDC_COMBO_EXCLUDE_FILE, L"" ); + ::DlgItem_SetText( GetHwnd(), IDC_COMBO_EXCLUDE_FOLDER, L"" ); bEnableControls = FALSE; }else{ + std::wstring strFile(m_szFile); + if (strFile.substr(0, 6) == L":HWND:") { + wcsncpy_s(m_szFile, _countof2(m_szFile), L"*.*", _TRUNCATE); + } ::DlgItem_SetText(GetHwnd(), IDC_COMBO_FILE, m_szFile); ::DlgItem_SetText(GetHwnd(), IDC_COMBO_FOLDER, m_szFolder); + ::DlgItem_SetText(GetHwnd(), IDC_COMBO_EXCLUDE_FILE, m_szExcludeFile); + ::DlgItem_SetText(GetHwnd(), IDC_COMBO_EXCLUDE_FOLDER, m_szExcludeFolder); } ::EnableWindow( GetItemHwnd( IDC_COMBO_FILE ), bEnableControls ); ::EnableWindow( GetItemHwnd( IDC_COMBO_FOLDER ), bEnableControls ); ::EnableWindow( GetItemHwnd( IDC_BUTTON_FOLDER ), bEnableControls ); ::EnableWindow( GetItemHwnd( IDC_CHK_SUBFOLDER ), bEnableControls ); + ::EnableWindow( GetItemHwnd( IDC_BUTTON_FILEOPENDIR ), bEnableControls ); + ::EnableWindow( GetItemHwnd( IDC_COMBO_EXCLUDE_FILE ), bEnableControls ); + ::EnableWindow( GetItemHwnd( IDC_COMBO_EXCLUDE_FOLDER ), bEnableControls ); + ::EnableWindow( GetItemHwnd( IDC_BUTTON_FOLDER_UP ), bEnableControls ); + ::EnableWindow( GetItemHwnd( IDC_BUTTON_CURRENTFOLDER ), bEnableControls ); return; } @@ -798,6 +812,12 @@ int CDlgGrep::GetData( void ) auto_sprintf(szHwnd, L":HWND:%08x", ::GetParent(GetHwnd())); #endif m_szFile = szHwnd; + }else{ + std::wstring strFile(m_szFile); + if (strFile.substr(0, 6) == L":HWND:") { + ErrorMessage(GetHwnd(), LS(STR_DLGGREP_THISDOC_ERROR)); + return FALSE; + } } /* 検索フォルダ */ ::DlgItem_GetText( GetHwnd(), IDC_COMBO_FOLDER, m_szFolder, _countof2(m_szFolder) ); diff --git a/sakura_core/sakura.hh b/sakura_core/sakura.hh index 4d7e90e03b..4e5eb0b8eb 100644 --- a/sakura_core/sakura.hh +++ b/sakura_core/sakura.hh @@ -810,7 +810,7 @@ #define HIDC_GREP_BUTTON_HELP 12004 //ヘルプ #define HIDC_GREP_CHK_WORD 12005 //単語単位 #define HIDC_GREP_CHK_SUBFOLDER 12006 //サブフォルダも検索 -#define HIDC_GREP_CHK_FROMTHISTEXT 12007 //このファイルから +#define HIDC_GREP_CHK_FROMTHISTEXT 12007 //編集中のテキストから検索 #define HIDC_GREP_CHK_LOHICASE 12008 //大文字小文字 #define HIDC_GREP_CHK_REGULAREXP 12009 //正規表現 // #define HIDC_GREP_CHK_KANJICODEAUTODETECT 12010 //文字コードセット自動判別 diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index 10860fb2ca..ce29fd8a71 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -143,7 +143,7 @@ BEGIN RTEXT "検索場所(&L):",IDC_STATIC,4,50,52,8 COMBOBOX IDC_COMBO_FOLDER,60,50,254,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "&...",IDC_BUTTON_FOLDER,316,50,16,10 - CONTROL "編集中のファイルから検索(&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,64,120,8 + CONTROL "編集中のテキストから検索(&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,64,120,8 CONTROL "サブフォルダも検索(&S)",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,74,120,8 CONTROL "カレントフォルダが初期値(&D)",IDC_CHK_DEFAULTFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,84,120,8 PUSHBUTTON "上階層へ(&U)",IDC_BUTTON_FOLDER_UP,230,64,50,14 @@ -3175,7 +3175,8 @@ BEGIN STR_DLGGREP4 "検索対象フォルダを指定してください。" STR_DLGGREP5 "検索対象フォルダが正しくありません。" STR_DLGGREP6 "検索対象フォルダが長すぎます。" - STR_DLGGREP_THISDOC "(現在のドキュメント)" + STR_DLGGREP_THISDOC "(現在のドキュメント)" + STR_DLGGREP_THISDOC_ERROR "対象ファイルに:HWND:は入力できません" STR_DLGJUMP1 "正しく行番号を入力してください。" STR_DLGJUMP_PSLQL "%d 行 %s パッケージ仕様部" STR_DLGOPNFL1 "変換なし" diff --git a/sakura_lang_en_US/sakura_lang_rc.rc b/sakura_lang_en_US/sakura_lang_rc.rc index 660f26968b..9f4e5b0f68 100644 --- a/sakura_lang_en_US/sakura_lang_rc.rc +++ b/sakura_lang_en_US/sakura_lang_rc.rc @@ -149,7 +149,7 @@ BEGIN RTEXT "&Look in:",IDC_STATIC,4,50,64,8 COMBOBOX IDC_COMBO_FOLDER,72,50,282,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "&...",IDC_BUTTON_FOLDER,356,50,16,10 - CONTROL "Current file (&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,64,120,8 + CONTROL "Current text (&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,64,120,8 CONTROL "Include &subfolders",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,74,120,8 CONTROL "Set current folder as &default",IDC_CHK_DEFAULTFOLDER, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,84,120,8 @@ -3212,7 +3212,7 @@ BEGIN STR_DLGGREP4 "Please define the target search folder." STR_DLGGREP5 "Target folder is not correct." STR_DLGGREP6 "Target folder is too long" - STR_DLGGREP_THISDOC "(Current document)" + STR_DLGGREP_THISDOC "(Current document)" STR_DLGJUMP1 "Please input correct line number" STR_DLGJUMP_PSLQL "%d Ln %s Package Specification" STR_DLGOPNFL1 "as is" From 54b534504e73c8d577a2c6853c1e6006ad995018 Mon Sep 17 00:00:00 2001 From: dep5 Date: Fri, 18 Jun 2021 21:47:56 +0900 Subject: [PATCH 0789/1024] =?UTF-8?q?PatchUnicode-1051=20v0.11=20Grep?= =?UTF-8?q?=E7=BD=AE=E6=8F=9B=E3=81=A7=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF?= =?UTF-8?q?=E3=83=9C=E3=83=83=E3=82=AF=E3=82=B9=E3=82=92=E3=82=B0=E3=83=AC?= =?UTF-8?q?=E3=83=BC=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgGrepReplace.cpp | 5 ++++- sakura_core/sakura.hh | 1 + sakura_core/sakura_rc.rc | 2 +- sakura_lang_en_US/sakura_lang_rc.rc | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/sakura_core/dlg/CDlgGrepReplace.cpp b/sakura_core/dlg/CDlgGrepReplace.cpp index d6e6ae897f..8891d7cf3f 100644 --- a/sakura_core/dlg/CDlgGrepReplace.cpp +++ b/sakura_core/dlg/CDlgGrepReplace.cpp @@ -42,7 +42,7 @@ const DWORD p_helpids[] = { IDC_CHK_PASTE, HIDC_GREP_REP_CHK_PASTE, //クリップボードから貼り付け IDC_CHK_WORD, HIDC_GREP_REP_CHK_WORD, //単語単位 IDC_CHK_SUBFOLDER, HIDC_GREP_REP_CHK_SUBFOLDER, //サブフォルダも検索 -// IDC_CHK_FROMTHISTEXT, HIDC_GREP_REP_CHK_FROMTHISTEXT, //このファイルから + IDC_CHK_FROMTHISTEXT, HIDC_GREP_REP_CHK_FROMTHISTEXT, //編集中のテキストから検索 IDC_CHK_LOHICASE, HIDC_GREP_REP_CHK_LOHICASE, //大文字小文字 IDC_CHK_REGULAREXP, HIDC_GREP_REP_CHK_REGULAREXP, //正規表現 IDC_CHK_BACKUP, HIDC_GREP_REP_CHK_BACKUP, //バックアップ作成 @@ -192,6 +192,9 @@ void CDlgGrepReplace::SetData( void ) CheckDlgButtonBool( GetHwnd(), IDC_CHK_BACKUP, m_bBackup ); CDlgGrep::SetData(); + + /* 編集中テキストから検索チェックを無効化 */ + ::EnableWindow(GetItemHwnd(IDC_CHK_FROMTHISTEXT), FALSE); } /*! ダイアログデータの取得 diff --git a/sakura_core/sakura.hh b/sakura_core/sakura.hh index 4e5eb0b8eb..0b2b41ac11 100644 --- a/sakura_core/sakura.hh +++ b/sakura_core/sakura.hh @@ -1148,6 +1148,7 @@ #define HIDC_GREP_REP_CHK_PASTE 14505 //クリップボードから貼り付け #define HIDC_GREP_REP_CHK_WORD 14506 //単語単位 #define HIDC_GREP_REP_CHK_SUBFOLDER 14507 //サブフォルダも検索 +#define HIDC_GREP_REP_CHK_FROMTHISTEXT 14804 //編集中のテキストから検索 #define HIDC_GREP_REP_CHK_LOHICASE 14509 //大文字小文字 #define HIDC_GREP_REP_CHK_REGULAREXP 14510 //正規表現 #define HIDC_GREP_REP_CHK_BACKUP 14511 //バックアップ作成 diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index ce29fd8a71..79e4d6f6c7 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -193,7 +193,7 @@ BEGIN RTEXT "検索場所(&L):",IDC_STATIC,4,64,52,8 COMBOBOX IDC_COMBO_FOLDER,60,64,254,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "&...",IDC_BUTTON_FOLDER,316,64,16,10 - CONTROL "編集中のファイルから検索(&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,78,120,8 + CONTROL "編集中のテキストから検索(&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,78,120,8 CONTROL "サブフォルダも検索(&S)",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,88,120,8 CONTROL "カレントフォルダが初期値(&D)",IDC_CHK_DEFAULTFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,98,120,8 PUSHBUTTON "上階層へ(&U)",IDC_BUTTON_FOLDER_UP,230,78,50,14 diff --git a/sakura_lang_en_US/sakura_lang_rc.rc b/sakura_lang_en_US/sakura_lang_rc.rc index 9f4e5b0f68..4928a3a56b 100644 --- a/sakura_lang_en_US/sakura_lang_rc.rc +++ b/sakura_lang_en_US/sakura_lang_rc.rc @@ -202,7 +202,7 @@ BEGIN RTEXT "&Look in:",IDC_STATIC,4,64,64,8 COMBOBOX IDC_COMBO_FOLDER,72,64,282,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "&...",IDC_BUTTON_FOLDER,356,64,16,10 - CONTROL "Current file (&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,78,120,8 + CONTROL "Current text (&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,78,120,8 CONTROL "Inlucde &subfolders",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,88,120,8 CONTROL "Set current folder as &default",IDC_CHK_DEFAULTFOLDER, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,98,120,8 From 163bf04583772501e6ed1f15c6848bf6aca7bb18 Mon Sep 17 00:00:00 2001 From: dep5 Date: Sun, 20 Jun 2021 20:04:01 +0900 Subject: [PATCH 0790/1024] =?UTF-8?q?PatchUnicode-1051=20v0.10=20Grep?= =?UTF-8?q?=E3=83=80=E3=82=A4=E3=82=A2=E3=83=AD=E3=82=B0=E3=81=AE=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/String_define.h | 3 ++- sakura_core/dlg/CDlgGrep.cpp | 38 +++++++++++++++++++++++++++-- sakura_core/sakura.hh | 2 +- sakura_core/sakura_rc.rc | 5 ++-- sakura_lang_en_US/sakura_lang_rc.rc | 4 +-- 5 files changed, 44 insertions(+), 8 deletions(-) diff --git a/sakura_core/String_define.h b/sakura_core/String_define.h index f23c5ef9de..0542fbdc15 100644 --- a/sakura_core/String_define.h +++ b/sakura_core/String_define.h @@ -1315,7 +1315,8 @@ #define STR_KEYHELP_RMENU_NONE 35029 #define STR_KEYHELP_RMENU_TOP 35030 #define STR_KEYHELP_RMENU_BOTTOM 35031 -#define STR_DLGGREP_THISDOC 35032 +#define STR_DLGGREP_THISDOC 35045 +#define STR_DLGGREP_THISDOC_ERROR 35046 #define STR_ERR_FILEPATH_TOO_LONG 35034 #define STR_GREP_EXCLUDE_FILE 35035 #define STR_GREP_EXCLUDE_FOLDER 35036 diff --git a/sakura_core/dlg/CDlgGrep.cpp b/sakura_core/dlg/CDlgGrep.cpp index a8adb6d922..433bb0956c 100644 --- a/sakura_core/dlg/CDlgGrep.cpp +++ b/sakura_core/dlg/CDlgGrep.cpp @@ -46,7 +46,7 @@ const DWORD p_helpids[] = { //12000 IDC_BUTTON_HELP, HIDC_GREP_BUTTON_HELP, //ヘルプ IDC_CHK_WORD, HIDC_GREP_CHK_WORD, //単語単位 IDC_CHK_SUBFOLDER, HIDC_GREP_CHK_SUBFOLDER, //サブフォルダも検索 - IDC_CHK_FROMTHISTEXT, HIDC_GREP_CHK_FROMTHISTEXT, //このファイルから + IDC_CHK_FROMTHISTEXT, HIDC_GREP_CHK_FROMTHISTEXT, //編集中のテキストから検索 IDC_CHK_LOHICASE, HIDC_GREP_CHK_LOHICASE, //大文字小文字 IDC_CHK_REGULAREXP, HIDC_GREP_CHK_REGULAREXP, //正規表現 IDC_COMBO_CHARSET, HIDC_GREP_COMBO_CHARSET, //文字コードセット @@ -558,6 +558,20 @@ BOOL CDlgGrep::OnBnClicked( int wID ) return TRUE; case IDCANCEL: // ::EndDialog( hwndDlg, FALSE ); + if (::IsDlgButtonChecked(GetHwnd(), IDC_CHK_FROMTHISTEXT)) { + if (m_pShareData->m_sSearchKeywords.m_aGrepFiles.size()) { + wcsncpy_s(m_szFile, _countof2(m_szFile), m_pShareData->m_sSearchKeywords.m_aGrepFiles[0], _TRUNCATE); /* 検索ファイル */ + } + if (m_pShareData->m_sSearchKeywords.m_aGrepFolders.size()) { + wcsncpy_s(m_szFolder, _countof2(m_szFolder), m_pShareData->m_sSearchKeywords.m_aGrepFolders[0], _TRUNCATE); /* 検索フォルダ */ + } + if (m_pShareData->m_sSearchKeywords.m_aExcludeFiles.size()) { + wcsncpy_s(m_szExcludeFile, _countof2(m_szExcludeFile), m_pShareData->m_sSearchKeywords.m_aExcludeFiles[0], _TRUNCATE); /* 除外ファイル */ + } + if (m_pShareData->m_sSearchKeywords.m_aExcludeFolders.size()) { + wcsncpy_s(m_szExcludeFolder, _countof2(m_szExcludeFolder), m_pShareData->m_sSearchKeywords.m_aExcludeFolders[0], _TRUNCATE); /* 除外フォルダ */ + } + } CloseDialog( FALSE ); return TRUE; } @@ -711,19 +725,33 @@ void CDlgGrep::SetDataFromThisText( bool bChecked ) if( bChecked ){ ::DlgItem_GetText(GetHwnd(), IDC_COMBO_FILE, m_szFile, _countof2(m_szFile)); ::DlgItem_GetText(GetHwnd(), IDC_COMBO_FOLDER, m_szFolder, _countof2(m_szFolder)); + ::DlgItem_GetText(GetHwnd(), IDC_COMBO_EXCLUDE_FILE, m_szExcludeFile, _countof2(m_szExcludeFile)); + ::DlgItem_GetText(GetHwnd(), IDC_COMBO_EXCLUDE_FOLDER, m_szExcludeFolder, _countof2(m_szExcludeFolder)); ::DlgItem_SetText( GetHwnd(), IDC_COMBO_FILE, LS(STR_DLGGREP_THISDOC) ); SetGrepFolder( GetItemHwnd(IDC_COMBO_FOLDER), LS(STR_DLGGREP_THISDOC) ); - ::CheckDlgButton( GetHwnd(), IDC_CHK_SUBFOLDER, BST_UNCHECKED ); + ::DlgItem_SetText( GetHwnd(), IDC_COMBO_EXCLUDE_FILE, L"" ); + ::DlgItem_SetText( GetHwnd(), IDC_COMBO_EXCLUDE_FOLDER, L"" ); bEnableControls = FALSE; }else{ + std::wstring strFile(m_szFile); + if (strFile.substr(0, 6) == L":HWND:") { + wcsncpy_s(m_szFile, _countof2(m_szFile), L"*.*", _TRUNCATE); + } ::DlgItem_SetText(GetHwnd(), IDC_COMBO_FILE, m_szFile); ::DlgItem_SetText(GetHwnd(), IDC_COMBO_FOLDER, m_szFolder); + ::DlgItem_SetText(GetHwnd(), IDC_COMBO_EXCLUDE_FILE, m_szExcludeFile); + ::DlgItem_SetText(GetHwnd(), IDC_COMBO_EXCLUDE_FOLDER, m_szExcludeFolder); } ::EnableWindow( GetItemHwnd( IDC_COMBO_FILE ), bEnableControls ); ::EnableWindow( GetItemHwnd( IDC_COMBO_FOLDER ), bEnableControls ); ::EnableWindow( GetItemHwnd( IDC_BUTTON_FOLDER ), bEnableControls ); ::EnableWindow( GetItemHwnd( IDC_CHK_SUBFOLDER ), bEnableControls ); + ::EnableWindow( GetItemHwnd( IDC_BUTTON_FILEOPENDIR ), bEnableControls ); + ::EnableWindow( GetItemHwnd( IDC_COMBO_EXCLUDE_FILE ), bEnableControls ); + ::EnableWindow( GetItemHwnd( IDC_COMBO_EXCLUDE_FOLDER ), bEnableControls ); + ::EnableWindow( GetItemHwnd( IDC_BUTTON_FOLDER_UP ), bEnableControls ); + ::EnableWindow( GetItemHwnd( IDC_BUTTON_CURRENTFOLDER ), bEnableControls ); return; } @@ -798,6 +826,12 @@ int CDlgGrep::GetData( void ) auto_sprintf(szHwnd, L":HWND:%08x", ::GetParent(GetHwnd())); #endif m_szFile = szHwnd; + }else{ + std::wstring strFile(m_szFile); + if (strFile.substr(0, 6) == L":HWND:") { + ErrorMessage(GetHwnd(), LS(STR_DLGGREP_THISDOC_ERROR)); + return FALSE; + } } /* 検索フォルダ */ ::DlgItem_GetText( GetHwnd(), IDC_COMBO_FOLDER, m_szFolder, _countof2(m_szFolder) ); diff --git a/sakura_core/sakura.hh b/sakura_core/sakura.hh index 4d7e90e03b..4e5eb0b8eb 100644 --- a/sakura_core/sakura.hh +++ b/sakura_core/sakura.hh @@ -810,7 +810,7 @@ #define HIDC_GREP_BUTTON_HELP 12004 //ヘルプ #define HIDC_GREP_CHK_WORD 12005 //単語単位 #define HIDC_GREP_CHK_SUBFOLDER 12006 //サブフォルダも検索 -#define HIDC_GREP_CHK_FROMTHISTEXT 12007 //このファイルから +#define HIDC_GREP_CHK_FROMTHISTEXT 12007 //編集中のテキストから検索 #define HIDC_GREP_CHK_LOHICASE 12008 //大文字小文字 #define HIDC_GREP_CHK_REGULAREXP 12009 //正規表現 // #define HIDC_GREP_CHK_KANJICODEAUTODETECT 12010 //文字コードセット自動判別 diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index 10860fb2ca..ce29fd8a71 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -143,7 +143,7 @@ BEGIN RTEXT "検索場所(&L):",IDC_STATIC,4,50,52,8 COMBOBOX IDC_COMBO_FOLDER,60,50,254,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "&...",IDC_BUTTON_FOLDER,316,50,16,10 - CONTROL "編集中のファイルから検索(&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,64,120,8 + CONTROL "編集中のテキストから検索(&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,64,120,8 CONTROL "サブフォルダも検索(&S)",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,74,120,8 CONTROL "カレントフォルダが初期値(&D)",IDC_CHK_DEFAULTFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,84,120,8 PUSHBUTTON "上階層へ(&U)",IDC_BUTTON_FOLDER_UP,230,64,50,14 @@ -3175,7 +3175,8 @@ BEGIN STR_DLGGREP4 "検索対象フォルダを指定してください。" STR_DLGGREP5 "検索対象フォルダが正しくありません。" STR_DLGGREP6 "検索対象フォルダが長すぎます。" - STR_DLGGREP_THISDOC "(現在のドキュメント)" + STR_DLGGREP_THISDOC "(現在のドキュメント)" + STR_DLGGREP_THISDOC_ERROR "対象ファイルに:HWND:は入力できません" STR_DLGJUMP1 "正しく行番号を入力してください。" STR_DLGJUMP_PSLQL "%d 行 %s パッケージ仕様部" STR_DLGOPNFL1 "変換なし" diff --git a/sakura_lang_en_US/sakura_lang_rc.rc b/sakura_lang_en_US/sakura_lang_rc.rc index 660f26968b..9f4e5b0f68 100644 --- a/sakura_lang_en_US/sakura_lang_rc.rc +++ b/sakura_lang_en_US/sakura_lang_rc.rc @@ -149,7 +149,7 @@ BEGIN RTEXT "&Look in:",IDC_STATIC,4,50,64,8 COMBOBOX IDC_COMBO_FOLDER,72,50,282,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "&...",IDC_BUTTON_FOLDER,356,50,16,10 - CONTROL "Current file (&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,64,120,8 + CONTROL "Current text (&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,64,120,8 CONTROL "Include &subfolders",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,74,120,8 CONTROL "Set current folder as &default",IDC_CHK_DEFAULTFOLDER, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,84,120,8 @@ -3212,7 +3212,7 @@ BEGIN STR_DLGGREP4 "Please define the target search folder." STR_DLGGREP5 "Target folder is not correct." STR_DLGGREP6 "Target folder is too long" - STR_DLGGREP_THISDOC "(Current document)" + STR_DLGGREP_THISDOC "(Current document)" STR_DLGJUMP1 "Please input correct line number" STR_DLGJUMP_PSLQL "%d Ln %s Package Specification" STR_DLGOPNFL1 "as is" From d46ff926e4ffd232fdb086c4e399f7084293884c Mon Sep 17 00:00:00 2001 From: dep5 Date: Sun, 20 Jun 2021 20:04:29 +0900 Subject: [PATCH 0791/1024] =?UTF-8?q?PatchUnicode-1051=20v0.11=20Grep?= =?UTF-8?q?=E7=BD=AE=E6=8F=9B=E3=81=A7=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF?= =?UTF-8?q?=E3=83=9C=E3=83=83=E3=82=AF=E3=82=B9=E3=82=92=E3=82=B0=E3=83=AC?= =?UTF-8?q?=E3=83=BC=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgGrepReplace.cpp | 5 ++++- sakura_core/sakura.hh | 1 + sakura_core/sakura_rc.rc | 2 +- sakura_lang_en_US/sakura_lang_rc.rc | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/sakura_core/dlg/CDlgGrepReplace.cpp b/sakura_core/dlg/CDlgGrepReplace.cpp index d6e6ae897f..8891d7cf3f 100644 --- a/sakura_core/dlg/CDlgGrepReplace.cpp +++ b/sakura_core/dlg/CDlgGrepReplace.cpp @@ -42,7 +42,7 @@ const DWORD p_helpids[] = { IDC_CHK_PASTE, HIDC_GREP_REP_CHK_PASTE, //クリップボードから貼り付け IDC_CHK_WORD, HIDC_GREP_REP_CHK_WORD, //単語単位 IDC_CHK_SUBFOLDER, HIDC_GREP_REP_CHK_SUBFOLDER, //サブフォルダも検索 -// IDC_CHK_FROMTHISTEXT, HIDC_GREP_REP_CHK_FROMTHISTEXT, //このファイルから + IDC_CHK_FROMTHISTEXT, HIDC_GREP_REP_CHK_FROMTHISTEXT, //編集中のテキストから検索 IDC_CHK_LOHICASE, HIDC_GREP_REP_CHK_LOHICASE, //大文字小文字 IDC_CHK_REGULAREXP, HIDC_GREP_REP_CHK_REGULAREXP, //正規表現 IDC_CHK_BACKUP, HIDC_GREP_REP_CHK_BACKUP, //バックアップ作成 @@ -192,6 +192,9 @@ void CDlgGrepReplace::SetData( void ) CheckDlgButtonBool( GetHwnd(), IDC_CHK_BACKUP, m_bBackup ); CDlgGrep::SetData(); + + /* 編集中テキストから検索チェックを無効化 */ + ::EnableWindow(GetItemHwnd(IDC_CHK_FROMTHISTEXT), FALSE); } /*! ダイアログデータの取得 diff --git a/sakura_core/sakura.hh b/sakura_core/sakura.hh index 4e5eb0b8eb..0b2b41ac11 100644 --- a/sakura_core/sakura.hh +++ b/sakura_core/sakura.hh @@ -1148,6 +1148,7 @@ #define HIDC_GREP_REP_CHK_PASTE 14505 //クリップボードから貼り付け #define HIDC_GREP_REP_CHK_WORD 14506 //単語単位 #define HIDC_GREP_REP_CHK_SUBFOLDER 14507 //サブフォルダも検索 +#define HIDC_GREP_REP_CHK_FROMTHISTEXT 14804 //編集中のテキストから検索 #define HIDC_GREP_REP_CHK_LOHICASE 14509 //大文字小文字 #define HIDC_GREP_REP_CHK_REGULAREXP 14510 //正規表現 #define HIDC_GREP_REP_CHK_BACKUP 14511 //バックアップ作成 diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index ce29fd8a71..79e4d6f6c7 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -193,7 +193,7 @@ BEGIN RTEXT "検索場所(&L):",IDC_STATIC,4,64,52,8 COMBOBOX IDC_COMBO_FOLDER,60,64,254,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "&...",IDC_BUTTON_FOLDER,316,64,16,10 - CONTROL "編集中のファイルから検索(&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,78,120,8 + CONTROL "編集中のテキストから検索(&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,78,120,8 CONTROL "サブフォルダも検索(&S)",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,88,120,8 CONTROL "カレントフォルダが初期値(&D)",IDC_CHK_DEFAULTFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,98,120,8 PUSHBUTTON "上階層へ(&U)",IDC_BUTTON_FOLDER_UP,230,78,50,14 diff --git a/sakura_lang_en_US/sakura_lang_rc.rc b/sakura_lang_en_US/sakura_lang_rc.rc index 9f4e5b0f68..4928a3a56b 100644 --- a/sakura_lang_en_US/sakura_lang_rc.rc +++ b/sakura_lang_en_US/sakura_lang_rc.rc @@ -202,7 +202,7 @@ BEGIN RTEXT "&Look in:",IDC_STATIC,4,64,64,8 COMBOBOX IDC_COMBO_FOLDER,72,64,282,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "&...",IDC_BUTTON_FOLDER,356,64,16,10 - CONTROL "Current file (&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,78,120,8 + CONTROL "Current text (&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,78,120,8 CONTROL "Inlucde &subfolders",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,88,120,8 CONTROL "Set current folder as &default",IDC_CHK_DEFAULTFOLDER, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,98,120,8 From 2ca3f38da7fd13fc8fdffb788456887a59e83e93 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Tue, 22 Jun 2021 14:52:48 +0900 Subject: [PATCH 0792/1024] =?UTF-8?q?=E5=B1=A5=E6=AD=B4=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E3=82=AF=E3=83=A9=E3=82=B9=E3=81=AE=E3=82=A4=E3=83=B3=E3=82=AF?= =?UTF-8?q?=E3=83=AB=E3=83=BC=E3=83=89=E5=AF=BE=E8=B1=A1=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=A4=E3=83=AB=E3=82=92=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CRecent.hに代えて各派生クラスのヘッダファイルをインクルードするようにした。 Signed-off-by: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> --- sakura_core/dlg/CDlgExec.h | 1 + sakura_core/dlg/CDlgFavorite.h | 10 ++++- sakura_core/dlg/CDlgGrep.h | 6 ++- sakura_core/dlg/CDlgGrepReplace.h | 1 + .../dlg/CDlgOpenFile_CommonFileDialog.cpp | 3 +- sakura_core/dlg/CDlgReplace.h | 3 +- sakura_core/env/CSearchKeywordManager.cpp | 7 +++- sakura_core/prop/CPropComGeneral.cpp | 2 + sakura_core/recent/CRecent.h | 1 - sakura_core/recent/CRecentImp.cpp | 39 ++++++++++++------- sakura_core/recent/CRecentImp.h | 15 ------- sakura_core/view/CEditView_Command.cpp | 2 +- sakura_core/window/CEditWnd.cpp | 3 ++ sakura_core/window/CMainToolBar.h | 2 +- 14 files changed, 59 insertions(+), 36 deletions(-) diff --git a/sakura_core/dlg/CDlgExec.h b/sakura_core/dlg/CDlgExec.h index 3fb97e61e0..7cef104a13 100644 --- a/sakura_core/dlg/CDlgExec.h +++ b/sakura_core/dlg/CDlgExec.h @@ -18,6 +18,7 @@ #include "dlg/CDialog.h" #include "recent/CRecentCmd.h" +#include "recent/CRecentCurDir.h" /*----------------------------------------------------------------------- クラスの宣言 diff --git a/sakura_core/dlg/CDlgFavorite.h b/sakura_core/dlg/CDlgFavorite.h index 07ffb20417..c75c6067e4 100644 --- a/sakura_core/dlg/CDlgFavorite.h +++ b/sakura_core/dlg/CDlgFavorite.h @@ -35,7 +35,15 @@ #pragma once #include "dlg/CDialog.h" -#include "recent/CRecent.h" +#include "recent/CRecentFile.h" +#include "recent/CRecentFolder.h" +#include "recent/CRecentExceptMru.h" +#include "recent/CRecentSearch.h" +#include "recent/CRecentReplace.h" +#include "recent/CRecentGrepFile.h" +#include "recent/CRecentGrepFolder.h" +#include "recent/CRecentCmd.h" +#include "recent/CRecentCurDir.h" //!「履歴とお気に入りの管理」ダイアログ //アクセス方法:[設定] - [履歴の管理] diff --git a/sakura_core/dlg/CDlgGrep.h b/sakura_core/dlg/CDlgGrep.h index d5c7b29018..41685246cb 100644 --- a/sakura_core/dlg/CDlgGrep.h +++ b/sakura_core/dlg/CDlgGrep.h @@ -20,8 +20,12 @@ class CDlgGrep; #include "dlg/CDialog.h" -#include "recent/CRecent.h" #include "util/window.h" +#include "recent/CRecentSearch.h" +#include "recent/CRecentGrepFile.h" +#include "recent/CRecentGrepFolder.h" +#include "recent/CRecentExcludeFile.h" +#include "recent/CRecentExcludeFolder.h" #define DEFAULT_EXCLUDE_FILE_PATTERN L"*.msi;*.exe;*.obj;*.pdb;*.ilk;*.res;*.pch;*.iobj;*.ipdb" #define DEFAULT_EXCLUDE_FOLDER_PATTERN L".git;.svn;.vs" diff --git a/sakura_core/dlg/CDlgGrepReplace.h b/sakura_core/dlg/CDlgGrepReplace.h index 380b4db67a..e9659783e2 100644 --- a/sakura_core/dlg/CDlgGrepReplace.h +++ b/sakura_core/dlg/CDlgGrepReplace.h @@ -21,6 +21,7 @@ class CDlgGrep; #include "dlg/CDialog.h" #include "dlg/CDlgGrep.h" +#include "recent/CRecentReplace.h" //! GREP置換ダイアログボックス class CDlgGrepReplace final : public CDlgGrep diff --git a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp index 021bf33f9e..7597da0aba 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp @@ -32,7 +32,6 @@ #include "CEol.h" #include "charset/CCodePage.h" #include "doc/CDocListener.h" -#include "recent/CRecent.h" #include "util/window.h" #include "util/shell.h" #include "util/file.h" @@ -45,6 +44,8 @@ #include "sakura_rc.h" #include "sakura.hh" #include "String_define.h" +#include "recent/CRecentFile.h" +#include "recent/CRecentFolder.h" static const DWORD p_helpids[] = { //13100 // IDOK, HIDOK_OPENDLG, //Winのヘルプで勝手に出てくる diff --git a/sakura_core/dlg/CDlgReplace.h b/sakura_core/dlg/CDlgReplace.h index a66bf18bfd..37c7491ab4 100644 --- a/sakura_core/dlg/CDlgReplace.h +++ b/sakura_core/dlg/CDlgReplace.h @@ -21,8 +21,9 @@ #pragma once #include "dlg/CDialog.h" -#include "recent/CRecent.h" #include "util/window.h" +#include "recent/CRecentReplace.h" +#include "recent/CRecentSearch.h" /*----------------------------------------------------------------------- クラスの宣言 diff --git a/sakura_core/env/CSearchKeywordManager.cpp b/sakura_core/env/CSearchKeywordManager.cpp index 08b5078e51..bf6d3d7c3b 100644 --- a/sakura_core/env/CSearchKeywordManager.cpp +++ b/sakura_core/env/CSearchKeywordManager.cpp @@ -31,7 +31,12 @@ #include "DLLSHAREDATA.h" #include "CSearchKeywordManager.h" -#include "recent/CRecent.h" +#include "recent/CRecentSearch.h" +#include "recent/CRecentReplace.h" +#include "recent/CRecentGrepFile.h" +#include "recent/CRecentGrepFolder.h" +#include "recent/CRecentExcludeFile.h" +#include "recent/CRecentExcludeFolder.h" /*! m_aSearchKeysにpszSearchKeyを追加する。 YAZAKI diff --git a/sakura_core/prop/CPropComGeneral.cpp b/sakura_core/prop/CPropComGeneral.cpp index de6690082c..b620efef42 100644 --- a/sakura_core/prop/CPropComGeneral.cpp +++ b/sakura_core/prop/CPropComGeneral.cpp @@ -26,6 +26,8 @@ #include "sakura.hh" #include "config/app_constants.h" #include "String_define.h" +#include "recent/CRecentFile.h" +#include "recent/CRecentFolder.h" //@@@ 2001.02.04 Start by MIK: Popup Help TYPE_NAME_ID SpecialScrollModeArr[] = { diff --git a/sakura_core/recent/CRecent.h b/sakura_core/recent/CRecent.h index c0ebc6a236..173deedc8a 100644 --- a/sakura_core/recent/CRecent.h +++ b/sakura_core/recent/CRecent.h @@ -83,5 +83,4 @@ class CRecent{ } }; -#include "CRecentImp.h" #endif /* SAKURA_CRECENT_F4D70310_9FAF_4F07_9431_2B011A47142D_H_ */ diff --git a/sakura_core/recent/CRecentImp.cpp b/sakura_core/recent/CRecentImp.cpp index f922b051c5..4ffaa86c8e 100644 --- a/sakura_core/recent/CRecentImp.cpp +++ b/sakura_core/recent/CRecentImp.cpp @@ -27,8 +27,19 @@ #include "StdAfx.h" #include "CRecentImp.h" -#include "env/CAppNodeManager.h" // EditNode -#include "EditInfo.h" // EditInfo +#include "CRecentCmd.h" +#include "CRecentCurDir.h" +#include "CRecentEditNode.h" +#include "CRecentExceptMru.h" +#include "CRecentExcludeFile.h" +#include "CRecentExcludeFolder.h" +#include "CRecentFile.h" +#include "CRecentFolder.h" +#include "CRecentGrepFile.h" +#include "CRecentGrepFolder.h" +#include "CRecentReplace.h" +#include "CRecentSearch.h" +#include "CRecentTagjumpKeyword.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 生成 // @@ -548,18 +559,20 @@ bool CRecentImp::UpdateView() // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // インスタンス化 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -template class CRecentImp; -template class CRecentImp; -template class CRecentImp; -template class CRecentImp; -template class CRecentImp; +template class CRecentImp; // CRecentCmd +template class CRecentImp; // CRecentEditNode +template class CRecentImp; // CRecentFile +template class CRecentImp; // CRecentFolder +template class CRecentImp; // CRecentGrepFile #ifndef __MINGW32__ -template class CRecentImp; -template class CRecentImp; -template class CRecentImp; -template class CRecentImp; -template class CRecentImp; +template class CRecentImp; // CRecentExceptMRU +template class CRecentImp; // CRecentGrepFolder +template class CRecentImp; // CRecentSearch +template class CRecentImp; // CRecentTagjumpKeyword +template class CRecentImp; // CRecentCurDir +template class CRecentImp; // CRecentExcludeFile +template class CRecentImp; // CRecentExcludeFolder #endif #if !defined(__MINGW32__) || (defined(__MINGW32__) && !defined(UNICODE)) -template class CRecentImp; +template class CRecentImp; // CRecentReplace #endif diff --git a/sakura_core/recent/CRecentImp.h b/sakura_core/recent/CRecentImp.h index a11540492d..c35abd84e6 100644 --- a/sakura_core/recent/CRecentImp.h +++ b/sakura_core/recent/CRecentImp.h @@ -1,7 +1,5 @@ /*! @file */ // 各CRecent実装クラスのベースクラス - -// エディタ系ファイルからincludeするときは CRecent.h をinclude /* Copyright (C) 2008, kobake Copyright (C) 2018-2021, Sakura Editor Organization @@ -123,17 +121,4 @@ class CRecentImp : public CRecent{ size_t m_nTextMaxLength; //!< 最大テキスト長(終端含む) }; -#include "CRecentFile.h" -#include "CRecentFolder.h" -#include "CRecentExceptMru.h" -#include "CRecentSearch.h" -#include "CRecentReplace.h" -#include "CRecentGrepFile.h" -#include "CRecentGrepFolder.h" -#include "CRecentExcludeFile.h" -#include "CRecentExcludeFolder.h" -#include "CRecentCmd.h" -#include "CRecentCurDir.h" -#include "CRecentEditNode.h" -#include "CRecentTagjumpKeyword.h" #endif /* SAKURA_CRECENTIMP_B18E6196_5684_44E4_91E0_ADB1542BF7E1_H_ */ diff --git a/sakura_core/view/CEditView_Command.cpp b/sakura_core/view/CEditView_Command.cpp index 4acd37125c..1d7d01976e 100644 --- a/sakura_core/view/CEditView_Command.cpp +++ b/sakura_core/view/CEditView_Command.cpp @@ -37,11 +37,11 @@ #include "util/window.h" #include "_main/CControlTray.h" #include "charset/charcode.h" -#include "recent/CRecent.h" #include "apiwrap/StdApi.h" #include "apiwrap/CommonControl.h" #include "config/system_constants.h" #include "config/app_constants.h" +#include "recent/CRecentCmd.h" /* 指定ファイルの指定位置にタグジャンプする。 diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index e283889e9a..a382dfdb5e 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -75,6 +75,9 @@ #include "config/system_constants.h" #include "config/app_constants.h" #include "String_define.h" +#include "recent/CRecentEditNode.h" +#include "recent/CRecentFile.h" +#include "recent/CRecentFolder.h" //@@@ 2002.01.14 YAZAKI 印刷プレビューをCPrintPreviewに独立させたので // 定義を削除 diff --git a/sakura_core/window/CMainToolBar.h b/sakura_core/window/CMainToolBar.h index 64e7d76369..85b560ca35 100644 --- a/sakura_core/window/CMainToolBar.h +++ b/sakura_core/window/CMainToolBar.h @@ -27,8 +27,8 @@ #define SAKURA_CMAINTOOLBAR_FEA7E388_DFEC_4E15_94CC_90A7E779797B_H_ #pragma once -#include "recent/CRecent.h" #include "dlg/CDialog.h" +#include "recent/CRecentSearch.h" class CEditWnd; class CImageListMgr; From d3cc8ee1caffd98e53a3078d9f854fa1edfd3017 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Tue, 22 Jun 2021 15:00:27 +0900 Subject: [PATCH 0793/1024] =?UTF-8?q?CRecent=E5=8F=8A=E3=81=B3=E3=81=9D?= =?UTF-8?q?=E3=81=AE=E6=B4=BE=E7=94=9F=E3=82=AF=E3=83=A9=E3=82=B9=E3=81=AB?= =?UTF-8?q?=E3=81=8A=E3=81=91=E3=82=8B=E3=82=A4=E3=83=B3=E3=82=AF=E3=83=AB?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AE?= =?UTF-8?q?=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> --- sakura_core/recent/CRecent.h | 1 - sakura_core/recent/CRecentCmd.cpp | 3 --- sakura_core/recent/CRecentCurDir.cpp | 2 -- sakura_core/recent/CRecentEditNode.cpp | 2 -- sakura_core/recent/CRecentExceptMru.cpp | 7 +++---- sakura_core/recent/CRecentExcludeFile.cpp | 5 ++--- sakura_core/recent/CRecentExcludeFile.h | 4 +++- sakura_core/recent/CRecentExcludeFolder.cpp | 5 ++--- sakura_core/recent/CRecentExcludeFolder.h | 4 +++- sakura_core/recent/CRecentFile.cpp | 3 +-- sakura_core/recent/CRecentFolder.cpp | 3 +-- sakura_core/recent/CRecentFolder.h | 2 -- sakura_core/recent/CRecentGrepFile.cpp | 2 -- sakura_core/recent/CRecentGrepFile.h | 1 + sakura_core/recent/CRecentGrepFolder.cpp | 2 -- sakura_core/recent/CRecentGrepFolder.h | 1 + sakura_core/recent/CRecentReplace.cpp | 3 +-- sakura_core/recent/CRecentSearch.cpp | 2 -- sakura_core/recent/CRecentTagjumpKeyword.cpp | 3 +-- 19 files changed, 19 insertions(+), 36 deletions(-) diff --git a/sakura_core/recent/CRecent.h b/sakura_core/recent/CRecent.h index 173deedc8a..9f89912c81 100644 --- a/sakura_core/recent/CRecent.h +++ b/sakura_core/recent/CRecent.h @@ -38,7 +38,6 @@ #define SAKURA_CRECENT_F4D70310_9FAF_4F07_9431_2B011A47142D_H_ #pragma once -#include "_main/global.h" #include "env/DLLSHAREDATA.h" class CRecent{ diff --git a/sakura_core/recent/CRecentCmd.cpp b/sakura_core/recent/CRecentCmd.cpp index 504bc45edc..7ffd4bd6a9 100644 --- a/sakura_core/recent/CRecentCmd.cpp +++ b/sakura_core/recent/CRecentCmd.cpp @@ -26,9 +26,6 @@ #include "StdAfx.h" #include "CRecentCmd.h" -#include "config/maxdata.h" -#include "env/DLLSHAREDATA.h" -#include // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 生成 // diff --git a/sakura_core/recent/CRecentCurDir.cpp b/sakura_core/recent/CRecentCurDir.cpp index 298b233c3b..669e1daafa 100644 --- a/sakura_core/recent/CRecentCurDir.cpp +++ b/sakura_core/recent/CRecentCurDir.cpp @@ -27,8 +27,6 @@ #include "StdAfx.h" #include "CRecentCurDir.h" #include "config/maxdata.h" -#include "env/DLLSHAREDATA.h" -#include // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 生成 // diff --git a/sakura_core/recent/CRecentEditNode.cpp b/sakura_core/recent/CRecentEditNode.cpp index 77cf93d163..90940c83bd 100644 --- a/sakura_core/recent/CRecentEditNode.cpp +++ b/sakura_core/recent/CRecentEditNode.cpp @@ -26,8 +26,6 @@ #include "StdAfx.h" #include "CRecentEditNode.h" -#include -#include "env/DLLSHAREDATA.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 生成 // diff --git a/sakura_core/recent/CRecentExceptMru.cpp b/sakura_core/recent/CRecentExceptMru.cpp index 763111b1f6..b55a0c464d 100644 --- a/sakura_core/recent/CRecentExceptMru.cpp +++ b/sakura_core/recent/CRecentExceptMru.cpp @@ -24,10 +24,9 @@ distribution. */ -#include "stdafx.h" -#include "CRecentExceptMRU.h" -#include -#include "env/DLLSHAREDATA.h" +#include "StdAfx.h" +#include "CRecentExceptMru.h" +#include "config/maxdata.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 生成 // diff --git a/sakura_core/recent/CRecentExcludeFile.cpp b/sakura_core/recent/CRecentExcludeFile.cpp index ad82976a70..8fed849ce6 100644 --- a/sakura_core/recent/CRecentExcludeFile.cpp +++ b/sakura_core/recent/CRecentExcludeFile.cpp @@ -1,4 +1,5 @@ -/* +/*! @file + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied @@ -24,8 +25,6 @@ #include "StdAfx.h" #include "CRecentExcludeFile.h" -#include -#include "env/DLLSHAREDATA.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 生成 // diff --git a/sakura_core/recent/CRecentExcludeFile.h b/sakura_core/recent/CRecentExcludeFile.h index ee3b86e785..6e06f63733 100644 --- a/sakura_core/recent/CRecentExcludeFile.h +++ b/sakura_core/recent/CRecentExcludeFile.h @@ -1,4 +1,5 @@ -/* +/*! @file + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied @@ -27,6 +28,7 @@ #include "CRecentImp.h" #include "util/StaticType.h" +#include "config/maxdata.h" typedef StaticString CExcludeFileString; diff --git a/sakura_core/recent/CRecentExcludeFolder.cpp b/sakura_core/recent/CRecentExcludeFolder.cpp index af1182d4db..d793c07eab 100644 --- a/sakura_core/recent/CRecentExcludeFolder.cpp +++ b/sakura_core/recent/CRecentExcludeFolder.cpp @@ -1,4 +1,5 @@ -/* +/*! @file + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied @@ -23,9 +24,7 @@ */ #include "StdAfx.h" -#include #include "CRecentExcludeFolder.h" -#include "env/DLLSHAREDATA.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 生成 // diff --git a/sakura_core/recent/CRecentExcludeFolder.h b/sakura_core/recent/CRecentExcludeFolder.h index 833ccfc432..67d0e62adb 100644 --- a/sakura_core/recent/CRecentExcludeFolder.h +++ b/sakura_core/recent/CRecentExcludeFolder.h @@ -1,4 +1,5 @@ -/* +/*! @file + Copyright (C) 2018-2021, Sakura Editor Organization This software is provided 'as-is', without any express or implied @@ -27,6 +28,7 @@ #include "CRecentImp.h" #include "util/StaticType.h" +#include "config/maxdata.h" typedef StaticString CExcludeFolderString; diff --git a/sakura_core/recent/CRecentFile.cpp b/sakura_core/recent/CRecentFile.cpp index 0403912403..117228d40a 100644 --- a/sakura_core/recent/CRecentFile.cpp +++ b/sakura_core/recent/CRecentFile.cpp @@ -26,8 +26,7 @@ #include "StdAfx.h" #include "recent/CRecentFile.h" -#include -#include "env/DLLSHAREDATA.h" +#include "config/maxdata.h" /* アイテムの比較要素を取得する。 diff --git a/sakura_core/recent/CRecentFolder.cpp b/sakura_core/recent/CRecentFolder.cpp index 78c6942360..256c9d9092 100644 --- a/sakura_core/recent/CRecentFolder.cpp +++ b/sakura_core/recent/CRecentFolder.cpp @@ -26,8 +26,7 @@ #include "StdAfx.h" #include "CRecentFolder.h" -#include -#include "env/DLLSHAREDATA.h" +#include "config/maxdata.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 生成 // diff --git a/sakura_core/recent/CRecentFolder.h b/sakura_core/recent/CRecentFolder.h index 13b12bd998..9feb8feb6c 100644 --- a/sakura_core/recent/CRecentFolder.h +++ b/sakura_core/recent/CRecentFolder.h @@ -30,8 +30,6 @@ #include "CRecentImp.h" #include "util/StaticType.h" -//StaticVector< StaticString, MAX_GREPFOLDER, const WCHAR*> - typedef StaticString CPathString; //! フォルダの履歴を管理 (RECENT_FOR_FOLDER) diff --git a/sakura_core/recent/CRecentGrepFile.cpp b/sakura_core/recent/CRecentGrepFile.cpp index b52447559a..7eec1e3058 100644 --- a/sakura_core/recent/CRecentGrepFile.cpp +++ b/sakura_core/recent/CRecentGrepFile.cpp @@ -26,8 +26,6 @@ #include "StdAfx.h" #include "CRecentGrepFile.h" -#include -#include "env/DLLSHAREDATA.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 生成 // diff --git a/sakura_core/recent/CRecentGrepFile.h b/sakura_core/recent/CRecentGrepFile.h index 690a82445c..af98c6aa4b 100644 --- a/sakura_core/recent/CRecentGrepFile.h +++ b/sakura_core/recent/CRecentGrepFile.h @@ -29,6 +29,7 @@ #include "CRecentImp.h" #include "util/StaticType.h" +#include "config/maxdata.h" typedef StaticString CGrepFileString; diff --git a/sakura_core/recent/CRecentGrepFolder.cpp b/sakura_core/recent/CRecentGrepFolder.cpp index 3ca6fdc157..d519acf8af 100644 --- a/sakura_core/recent/CRecentGrepFolder.cpp +++ b/sakura_core/recent/CRecentGrepFolder.cpp @@ -25,9 +25,7 @@ */ #include "StdAfx.h" -#include #include "CRecentGrepFolder.h" -#include "env/DLLSHAREDATA.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 生成 // diff --git a/sakura_core/recent/CRecentGrepFolder.h b/sakura_core/recent/CRecentGrepFolder.h index 87be3cc2c6..f209a57159 100644 --- a/sakura_core/recent/CRecentGrepFolder.h +++ b/sakura_core/recent/CRecentGrepFolder.h @@ -29,6 +29,7 @@ #include "CRecentImp.h" #include "util/StaticType.h" +#include "config/maxdata.h" typedef StaticString CGrepFolderString; diff --git a/sakura_core/recent/CRecentReplace.cpp b/sakura_core/recent/CRecentReplace.cpp index 8c682704f2..926d0a77db 100644 --- a/sakura_core/recent/CRecentReplace.cpp +++ b/sakura_core/recent/CRecentReplace.cpp @@ -26,8 +26,7 @@ #include "StdAfx.h" #include "CRecentReplace.h" -#include -#include "env/DLLSHAREDATA.h" +#include "config/maxdata.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 生成 // diff --git a/sakura_core/recent/CRecentSearch.cpp b/sakura_core/recent/CRecentSearch.cpp index 4036ec03ec..a10cb0e63d 100644 --- a/sakura_core/recent/CRecentSearch.cpp +++ b/sakura_core/recent/CRecentSearch.cpp @@ -27,8 +27,6 @@ #include "StdAfx.h" #include "CRecentSearch.h" #include "config/maxdata.h" -#include "env/DLLSHAREDATA.h" -#include // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 生成 // diff --git a/sakura_core/recent/CRecentTagjumpKeyword.cpp b/sakura_core/recent/CRecentTagjumpKeyword.cpp index 506113ad06..ac8621d911 100644 --- a/sakura_core/recent/CRecentTagjumpKeyword.cpp +++ b/sakura_core/recent/CRecentTagjumpKeyword.cpp @@ -26,8 +26,7 @@ #include "StdAfx.h" #include "CRecentTagjumpKeyword.h" -#include "env/DLLSHAREDATA.h" -#include +#include "config/maxdata.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 生成 // From deccdada0a0125f352915388a5901aa162a3fdf4 Mon Sep 17 00:00:00 2001 From: dep5 Date: Thu, 24 Jun 2021 20:48:50 +0900 Subject: [PATCH 0794/1024] =?UTF-8?q?PatchUnicode-1051=20Grep=E3=83=80?= =?UTF-8?q?=E3=82=A4=E3=82=A2=E3=83=AD=E3=82=B0=E3=82=92=E3=82=AD=E3=83=A3?= =?UTF-8?q?=E3=83=B3=E3=82=BB=E3=83=AB=E3=81=99=E3=82=8B=E3=81=A8=E3=81=8D?= =?UTF-8?q?=E3=81=AE=E6=9D=A1=E4=BB=B6=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgGrep.cpp | 4 +++- sakura_core/dlg/CDlgGrep.h | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/sakura_core/dlg/CDlgGrep.cpp b/sakura_core/dlg/CDlgGrep.cpp index 433bb0956c..eb910cbdb4 100644 --- a/sakura_core/dlg/CDlgGrep.cpp +++ b/sakura_core/dlg/CDlgGrep.cpp @@ -76,6 +76,7 @@ static void SetGrepFolder( HWND hwndCtrl, LPCWSTR folder ); CDlgGrep::CDlgGrep() { m_bEnableThisText = true; + m_bSelectOnceThisText = false; m_bSubFolder = FALSE; // サブフォルダからも検索する m_bFromThisText = FALSE; // この編集中のテキストから検索する m_sSearchOption.Reset(); // 検索オプション @@ -558,7 +559,7 @@ BOOL CDlgGrep::OnBnClicked( int wID ) return TRUE; case IDCANCEL: // ::EndDialog( hwndDlg, FALSE ); - if (::IsDlgButtonChecked(GetHwnd(), IDC_CHK_FROMTHISTEXT)) { + if (m_bSelectOnceThisText) { if (m_pShareData->m_sSearchKeywords.m_aGrepFiles.size()) { wcsncpy_s(m_szFile, _countof2(m_szFile), m_pShareData->m_sSearchKeywords.m_aGrepFiles[0], _TRUNCATE); /* 検索ファイル */ } @@ -752,6 +753,7 @@ void CDlgGrep::SetDataFromThisText( bool bChecked ) ::EnableWindow( GetItemHwnd( IDC_COMBO_EXCLUDE_FOLDER ), bEnableControls ); ::EnableWindow( GetItemHwnd( IDC_BUTTON_FOLDER_UP ), bEnableControls ); ::EnableWindow( GetItemHwnd( IDC_BUTTON_CURRENTFOLDER ), bEnableControls ); + m_bSelectOnceThisText = true; return; } diff --git a/sakura_core/dlg/CDlgGrep.h b/sakura_core/dlg/CDlgGrep.h index 67b61cda80..19a73832a6 100644 --- a/sakura_core/dlg/CDlgGrep.h +++ b/sakura_core/dlg/CDlgGrep.h @@ -43,6 +43,7 @@ class CDlgGrep : public CDialog // HWND DoModeless( HINSTANCE, HWND, const char* ); /* モードレスダイアログの表示 */ bool m_bEnableThisText; + bool m_bSelectOnceThisText; BOOL m_bSubFolder;/*!< サブフォルダからも検索する */ BOOL m_bFromThisText;/*!< この編集中のテキストから検索する */ From 4e06a5caaa12b16ccb9ef069ba559dc179bb8606 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sat, 26 Jun 2021 12:09:23 +0900 Subject: [PATCH 0795/1024] =?UTF-8?q?=E6=98=8E=E7=A4=BA=E7=9A=84=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E3=82=B9=E3=82=BF=E3=83=B3=E3=82=B9=E5=8C=96=E3=81=AE?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=82=92=E6=92=A4=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> --- sakura_core/recent/CRecentImp.cpp | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/sakura_core/recent/CRecentImp.cpp b/sakura_core/recent/CRecentImp.cpp index 4ffaa86c8e..5aaf458778 100644 --- a/sakura_core/recent/CRecentImp.cpp +++ b/sakura_core/recent/CRecentImp.cpp @@ -559,20 +559,18 @@ bool CRecentImp::UpdateView() // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // インスタンス化 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -template class CRecentImp; // CRecentCmd -template class CRecentImp; // CRecentEditNode -template class CRecentImp; // CRecentFile -template class CRecentImp; // CRecentFolder -template class CRecentImp; // CRecentGrepFile +template class CRecentImp; +template class CRecentImp; +template class CRecentImp; +template class CRecentImp; +template class CRecentImp; #ifndef __MINGW32__ -template class CRecentImp; // CRecentExceptMRU -template class CRecentImp; // CRecentGrepFolder -template class CRecentImp; // CRecentSearch -template class CRecentImp; // CRecentTagjumpKeyword -template class CRecentImp; // CRecentCurDir -template class CRecentImp; // CRecentExcludeFile -template class CRecentImp; // CRecentExcludeFolder +template class CRecentImp; +template class CRecentImp; +template class CRecentImp; +template class CRecentImp; +template class CRecentImp; #endif #if !defined(__MINGW32__) || (defined(__MINGW32__) && !defined(UNICODE)) -template class CRecentImp; // CRecentReplace +template class CRecentImp; #endif From 7ca45cd5d98e68ebc52c724cb88613dae3191d4c Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Tue, 29 Jun 2021 13:20:34 +0900 Subject: [PATCH 0796/1024] =?UTF-8?q?CRecent=E3=82=92=E5=88=A9=E7=94=A8?= =?UTF-8?q?=E3=81=97=E3=81=A6=E3=81=84=E3=81=AA=E3=81=84=E3=82=AF=E3=83=A9?= =?UTF-8?q?=E3=82=B9=E3=83=BB=E9=96=A2=E6=95=B0=E3=81=8B=E3=82=89=E5=A4=89?= =?UTF-8?q?=E6=95=B0=E5=AE=A3=E8=A8=80=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> --- sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp | 5 ----- sakura_core/window/CTabWnd.cpp | 2 -- 2 files changed, 7 deletions(-) diff --git a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp index 7597da0aba..5263ed3b60 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp @@ -44,8 +44,6 @@ #include "sakura_rc.h" #include "sakura.hh" #include "String_define.h" -#include "recent/CRecentFile.h" -#include "recent/CRecentFolder.h" static const DWORD p_helpids[] = { //13100 // IDOK, HIDOK_OPENDLG, //Winのヘルプで勝手に出てくる @@ -123,9 +121,6 @@ class CDlgOpenFileData{ bool m_bInitCodePage; - CRecentFile m_cRecentFile; - CRecentFolder m_cRecentFolder; - OPENFILENAME* m_pOf; OPENFILENAME m_ofn; /* 2005.10.29 ryoji OPENFILENAME「ファイルを開く」ダイアログ用構造体 */ HWND m_hwndOpenDlg; diff --git a/sakura_core/window/CTabWnd.cpp b/sakura_core/window/CTabWnd.cpp index 3c7b9e0a96..15ae3472b1 100644 --- a/sakura_core/window/CTabWnd.cpp +++ b/sakura_core/window/CTabWnd.cpp @@ -47,7 +47,6 @@ #include "env/CShareData.h" #include "env/CSakuraEnvironment.h" #include "uiparts/CGraphics.h" -#include "recent/CRecentEditNode.h" #include "util/os.h" //WM_THEMECHANGED #include "util/window.h" #include "util/module.h" @@ -1781,7 +1780,6 @@ void CTabWnd::TabWindowNotify( WPARAM wParam, LPARAM lParam ) if( -1 != nIndex ) { TCITEM tcitem; - CRecentEditNode cRecentEditNode; WCHAR szName[1024]; // Jun. 19, 2004 genta EditNode *p; From 45da33084c3a8c17d16286aa7e42894b9a39613f Mon Sep 17 00:00:00 2001 From: "D.Miwa" Date: Sat, 3 Jul 2021 02:13:16 +0900 Subject: [PATCH 0797/1024] =?UTF-8?q?=E3=83=9E=E3=82=A6=E3=82=B9=E3=83=89?= =?UTF-8?q?=E3=83=A9=E3=83=83=E3=82=B0=E3=81=A7=E3=81=AE=E3=82=B9=E3=82=AF?= =?UTF-8?q?=E3=83=AD=E3=83=BC=E3=83=AB=E6=99=82=E3=81=AB=E8=A1=A8=E7=A4=BA?= =?UTF-8?q?=E3=81=8C=E3=81=8A=E3=81=8B=E3=81=97=E3=81=8F=E3=81=AA=E3=82=8B?= =?UTF-8?q?=E5=95=8F=E9=A1=8C=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CCaret.cpp | 1 + sakura_core/view/CEditView_Scroll.cpp | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sakura_core/view/CCaret.cpp b/sakura_core/view/CCaret.cpp index 90cb59f087..7b212ad1ec 100644 --- a/sakura_core/view/CCaret.cpp +++ b/sakura_core/view/CCaret.cpp @@ -300,6 +300,7 @@ CLayoutInt CCaret::MoveCursor( m_pEditView->GetTextArea().OffsetViewTopLine(-nScrollRowNum); if( m_pEditView->GetDrawSwitch() ){ m_pEditView->InvalidateRect( NULL ); + m_pEditView->UpdateWindow(); if( m_pEditView->m_pcEditWnd->GetMiniMap().GetHwnd() ){ m_pEditView->MiniMapRedraw(true); } diff --git a/sakura_core/view/CEditView_Scroll.cpp b/sakura_core/view/CEditView_Scroll.cpp index 74c280f37d..d098826c7e 100644 --- a/sakura_core/view/CEditView_Scroll.cpp +++ b/sakura_core/view/CEditView_Scroll.cpp @@ -417,7 +417,6 @@ CLayoutInt CEditView::ScrollAtV( CLayoutInt nPos, BOOL bRedrawScrollBar ) if( GetDrawSwitch() ){ RECT rcClip2 = {0,0,0,0}; ScrollDraw(nScrollRowNum, CLayoutInt(0), rcScrol, rcClip, rcClip2); - ::UpdateWindow( GetHwnd() ); } } @@ -497,7 +496,6 @@ CLayoutInt CEditView::ScrollAtH( CLayoutInt nPos, BOOL bRedrawScrollBar ) if( GetDrawSwitch() ){ RECT rcClip = {0,0,0,0}; ScrollDraw(CLayoutInt(0), nScrollColNum, rcScrol, rcClip, rcClip2); - ::UpdateWindow( GetHwnd() ); } } // 2006.1.28 aroka 判定条件誤り修正 (バーが消えてもスクロールしない) @@ -602,6 +600,7 @@ void CEditView::ScrollDraw(CLayoutInt nScrollRowNum, CLayoutInt nScrollColNum, c if( nScrollColNum != 0 ){ InvalidateRect( &rcClip2, FALSE ); } + UpdateWindow(); } void CEditView::MiniMapRedraw(bool bUpdateAll) From a733fd80c1747e368126d4a9da94c7ff7a6ca11f Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 10 Jul 2021 09:56:43 +0900 Subject: [PATCH 0798/1024] =?UTF-8?q?#1701=E4=B8=8D=E5=85=B7=E5=90=88?= =?UTF-8?q?=E3=81=AE=E7=99=BA=E7=94=9F=E5=8E=9F=E7=90=86=E3=81=A8=E5=AF=BE?= =?UTF-8?q?=E7=AD=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-loadstring.cpp | 109 ++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) diff --git a/tests/unittests/test-loadstring.cpp b/tests/unittests/test-loadstring.cpp index 024e3614ee..72dfe846e2 100644 --- a/tests/unittests/test-loadstring.cpp +++ b/tests/unittests/test-loadstring.cpp @@ -50,3 +50,112 @@ TEST(LoadString, LoadStringResource) // 古いWindows APIが言語表示名を提供してなかったことに起因するリソース。 ASSERT_STREQ( L"Japanese", LS( STR_SELLANG_NAME ) ); } + +constexpr auto TEST_STRING1 = L"文字列1"; +constexpr auto TEST_STRING2 = L"文字列2"; + +/*! + * 関数の引数で渡された文字列が、関数外部で変更されてしまうケースの検証クラス + */ +class CBadStringArgument +{ + std::list datum + { + TEST_STRING1, + TEST_STRING2, + }; + decltype(datum)::const_iterator current; + std::wstring str;; + +public: + CBadStringArgument() + { + current = datum.cbegin(); + str = current->data(); + } + + const wchar_t* GetStr() const { return str.data(); } + + void UpdateStr() { + ++current; + str = current->data(); + } +}; + +/*! #1701 不具合の再現(NG) */ +TEST(CBadStringArgument, test1) +{ + CBadStringArgument arg; + auto test = [&](const wchar_t* pszText) { + EXPECT_STREQ(TEST_STRING1, pszText); + arg.UpdateStr(); // 👈更新、👇が影響を受けてNG。 + EXPECT_STREQ(TEST_STRING1, pszText); + }; + test(arg.GetStr()); +} + +/*! 引数をC++化してみる(NG) */ +TEST(CBadStringArgument, test2) +{ + CBadStringArgument arg; + auto test = [&](std::wstring_view text) { + EXPECT_STREQ(TEST_STRING1, text.data()); + arg.UpdateStr(); // 👈更新、👇が影響を受けてNG。 + EXPECT_STREQ(TEST_STRING1, text.data()); + }; + test(arg.GetStr()); +}; + +/*! 引数を const std::wstring& に変えてみる(OK) */ +TEST(CBadStringArgument, test3) +{ + CBadStringArgument arg; + auto test = [&](const std::wstring& text) { + EXPECT_STREQ(TEST_STRING1, text.data()); + arg.UpdateStr(); // 👈更新、👇は影響を受けずOK。 + EXPECT_STREQ(TEST_STRING1, text.data()); + }; + test(arg.GetStr()); +} + +/*! 引数を const std::wstring_view& に変えてみる(NG) */ +TEST(CBadStringArgument, test4) +{ + CBadStringArgument arg; + // std::wstring_viewの使い方が間違っている... + auto test = [&](const std::wstring_view& text) { + EXPECT_STREQ(TEST_STRING1, text.data()); + arg.UpdateStr(); // 👈更新、👇が影響を受けてNG。 + EXPECT_STREQ(TEST_STRING1, text.data()); + }; + test(arg.GetStr()); +} + +/*! 最善手のプレビュー(OK) */ +TEST(CBadStringArgument, test5) +{ + CBadStringArgument arg; + auto test = [&](std::wstring_view text) { + // 関数ローカルにコピーを作成 + const std::wstring copyOfText(text); + EXPECT_STREQ(TEST_STRING1, copyOfText.data()); + arg.UpdateStr(); // 👈更新、👇は影響を受けずOK。 + EXPECT_STREQ(TEST_STRING1, copyOfText.data()); + }; + test(arg.GetStr()); +} + +/*! 妥協案のプレビュー(OK) */ +TEST(CBadStringArgument, test6) +{ + CBadStringArgument arg; + auto test = [&](const wchar_t* pszText) { + // 関数ローカルにコピーを作成 + const std::wstring copyOfText(pszText ? pszText : L""); + pszText = copyOfText.data(); + EXPECT_STREQ(TEST_STRING1, pszText); + arg.UpdateStr(); // 👈更新、👇は影響を受けずOK。 + EXPECT_STREQ(TEST_STRING1, pszText); + }; + test(arg.GetStr()); +} From 7e28a433f10671a7f881eccfa3fe840194aa76fd Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 10 Jul 2021 10:48:56 +0900 Subject: [PATCH 0799/1024] =?UTF-8?q?=E5=A6=A5=E5=8D=94=E6=A1=88=E3=81=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 --- sakura_core/cmd/CViewCommander_Search.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sakura_core/cmd/CViewCommander_Search.cpp b/sakura_core/cmd/CViewCommander_Search.cpp index a744675b07..748e3de553 100644 --- a/sakura_core/cmd/CViewCommander_Search.cpp +++ b/sakura_core/cmd/CViewCommander_Search.cpp @@ -85,6 +85,10 @@ void CViewCommander::Command_SEARCH_NEXT( CLogicRange* pcSelectLogic //!< [out] 選択範囲のロジック版。マッチ範囲を返す。すべて置換/高速モードで使用 ) { + // 見つからないときのメッセージをリソースから指定できるようにローカルコピーしておく + const std::wstring copyOfNotFoundMessage(pszNotFoundMessage ? pszNotFoundMessage : L""); + pszNotFoundMessage = pszNotFoundMessage ? copyOfNotFoundMessage.data() : nullptr; + bool bSelecting; bool bFlag1 = false; bool bSelectingLock_Old = false; From 8501185e6f03d0ad6f29f09152a8618db9bea62b Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sat, 10 Jul 2021 15:34:53 +0900 Subject: [PATCH 0800/1024] =?UTF-8?q?OpenByBrowser=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Possible OS command injection(CWE-78)対策 --- sakura_core/cmd/CViewCommander_File.cpp | 26 ++++------------------- sakura_core/dlg/CDlgAbout.cpp | 15 ++++++------- sakura_core/prop/CPropComPlugin.cpp | 3 ++- sakura_core/util/shell.cpp | 28 ++++++++++++++++++++++++- sakura_core/util/shell.h | 8 +++++++ sakura_core/view/CEditView_Mouse.cpp | 3 ++- 6 files changed, 51 insertions(+), 32 deletions(-) diff --git a/sakura_core/cmd/CViewCommander_File.cpp b/sakura_core/cmd/CViewCommander_File.cpp index 251ea0c312..e02fec3b6c 100644 --- a/sakura_core/cmd/CViewCommander_File.cpp +++ b/sakura_core/cmd/CViewCommander_File.cpp @@ -52,6 +52,7 @@ #include "CWriteManager.h" #include "CEditApp.h" #include "recent/CMRUFile.h" +#include "util/shell.h" #include "util/window.h" #include "charset/CCodeFactory.h" #include "plugin/CPlugin.h" @@ -450,28 +451,9 @@ void CViewCommander::Command_BROWSE( void ) ErrorBeep(); return; } -// char szURL[MAX_PATH + 64]; -// auto_sprintf( szURL, L"%ls", GetDocument()->m_cDocFile.GetFilePath() ); - /* URLを開く */ -// ::ShellExecuteEx( NULL, L"open", szURL, NULL, NULL, SW_SHOW ); - - SHELLEXECUTEINFO info; - info.cbSize =sizeof(info); - info.fMask = 0; - info.hwnd = NULL; - info.lpVerb = NULL; - info.lpFile = GetDocument()->m_cDocFile.GetFilePath(); - info.lpParameters = NULL; - info.lpDirectory = NULL; - info.nShow = SW_SHOWNORMAL; - info.hInstApp = 0; - info.lpIDList = NULL; - info.lpClass = NULL; - info.hkeyClass = 0; - info.dwHotKey = 0; - info.hIcon =0; - - ::ShellExecuteEx(&info); + + std::wstring_view path(GetDocument()->m_cDocFile.GetFilePath()); + OpenByBrowser(m_pCommanderView->GetHwnd(), path); return; } diff --git a/sakura_core/dlg/CDlgAbout.cpp b/sakura_core/dlg/CDlgAbout.cpp index 3ae11ff25a..f4a8fe0097 100644 --- a/sakura_core/dlg/CDlgAbout.cpp +++ b/sakura_core/dlg/CDlgAbout.cpp @@ -25,6 +25,7 @@ #include "uiparts/HandCursor.h" #include "util/file.h" #include "util/module.h" +#include "util/shell.h" #include "util/window.h" #include "sakura_rc.h" // 2002/2/10 aroka 復帰 #include "version.h" @@ -330,28 +331,28 @@ BOOL CDlgAbout::OnStnClicked( int wID ) // case IDC_STATIC_URL_ORG: del 2008/7/4 Uchi // Web Browserの起動 { - WCHAR buf[512]; - ::GetWindowText( GetItemHwnd( wID ), buf, _countof(buf) ); - ::ShellExecute( GetHwnd(), NULL, buf, NULL, NULL, SW_SHOWNORMAL ); + std::wstring url; + ApiWrap::DlgItem_GetText(GetHwnd(), wID, url); + OpenByBrowser(GetHwnd(), url); return TRUE; } case IDC_STATIC_URL_CI_BUILD: { #if defined(CI_BUILD_URL) - ::ShellExecute(GetHwnd(), NULL, _T(CI_BUILD_URL), NULL, NULL, SW_SHOWNORMAL); + OpenByBrowser(GetHwnd(), _T(CI_BUILD_URL)); #elif defined(GIT_REMOTE_ORIGIN_URL) - ::ShellExecute(GetHwnd(), NULL, _T(GIT_REMOTE_ORIGIN_URL), NULL, NULL, SW_SHOWNORMAL); + OpenByBrowser(GetHwnd(), _T(GIT_REMOTE_ORIGIN_URL)); #endif return TRUE; } case IDC_STATIC_URL_GITHUB_COMMIT: #if defined(GITHUB_COMMIT_URL) - ::ShellExecute(GetHwnd(), NULL, _T(GITHUB_COMMIT_URL), NULL, NULL, SW_SHOWNORMAL); + OpenByBrowser(GetHwnd(), _T(GITHUB_COMMIT_URL)); #endif return TRUE; case IDC_STATIC_URL_GITHUB_PR: #if defined(GITHUB_PR_HEAD_URL) - ::ShellExecute(GetHwnd(), NULL, _T(GITHUB_PR_HEAD_URL), NULL, NULL, SW_SHOWNORMAL); + OpenByBrowser(GetHwnd(), _T(GITHUB_PR_HEAD_URL)); #endif return TRUE; } diff --git a/sakura_core/prop/CPropComPlugin.cpp b/sakura_core/prop/CPropComPlugin.cpp index 7c9e67dae5..6cb69ce5aa 100644 --- a/sakura_core/prop/CPropComPlugin.cpp +++ b/sakura_core/prop/CPropComPlugin.cpp @@ -40,6 +40,7 @@ #include "io/CTextStream.h" #include "io/CZipFile.h" #include "CSelectLang.h" +#include "util/shell.h" #include "sakura_rc.h" #include "sakura.hh" #include "config/app_constants.h" @@ -267,7 +268,7 @@ INT_PTR CPropPlugin::DispatchEvent( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPAR if (sel >= 0){ CPlugin* plugin = CPluginManager::getInstance()->GetPlugin(sel); if (plugin != NULL){ - ::ShellExecute(NULL, L"Open", plugin->m_sUrl.c_str(), NULL, NULL, SW_SHOW); + OpenByBrowser( hwndDlg, plugin->m_sUrl ); } } } diff --git a/sakura_core/util/shell.cpp b/sakura_core/util/shell.cpp index 72adb3f02b..f6be16ad99 100644 --- a/sakura_core/util/shell.cpp +++ b/sakura_core/util/shell.cpp @@ -29,6 +29,9 @@ #include #include #include // Nov. 3, 2005 genta //CDERR_FINDRESFAILURE等 + +#include + #include "util/shell.h" #include "util/string_ex2.h" #include "util/file.h" @@ -591,7 +594,7 @@ BOOL MyWinHelp(HWND hwndCaller, UINT uCommand, DWORD_PTR dwData) WCHAR buf[256]; swprintf( buf, _countof(buf), L"https://sakura-editor.github.io/help/HLP%06Iu.html", dwData ); - ShellExecute( ::GetActiveWindow(), NULL, buf, NULL, NULL, SW_SHOWNORMAL ); + OpenByBrowser( ::GetActiveWindow(), buf ); } return TRUE; @@ -645,3 +648,26 @@ BOOL MySelectFont( LOGFONT* plf, INT* piPointSize, HWND hwndDlgOwner, bool Fixed return TRUE; } + +//! ブラウザで開く +bool OpenByBrowser(HWND hWnd, std::wstring_view url) +{ + if (url.empty()) { + return false; + } + + if (!std::regex_search(url.data(), std::wregex(LR"(^[a-z]+://\b)")) + && !std::regex_search(url.data(), std::wregex(LR"(^(mailto|news):)")) + && !std::regex_search(url.data(), std::wregex(LR"(^[A-Z]:\\)", std::wregex::icase)) + && !std::regex_search(url.data(), std::wregex(LR"(^\\\\:)"))) { + return false; + } + + // If the function succeeds, it returns a value greater than 32. + if (auto hInstance = ::ShellExecuteW(hWnd, L"open", url.data(), nullptr, nullptr, SW_SHOWNORMAL); + hInstance <= (decltype(hInstance))32) { + return false; + } + + return true; +} diff --git a/sakura_core/util/shell.h b/sakura_core/util/shell.h index c07f34c9f8..8c61e66974 100644 --- a/sakura_core/util/shell.h +++ b/sakura_core/util/shell.h @@ -29,6 +29,10 @@ #define SAKURA_SHELL_0A8B6454_B007_46E5_9606_8D2FD7993B91_H_ #pragma once +#include + +#include + BOOL MyWinHelp(HWND hwndCaller, UINT uCommand, DWORD_PTR dwData); /* WinHelp のかわりに HtmlHelp を呼び出す */ // 2006.07.22 ryoji /* Shell Interface系(?) */ @@ -54,4 +58,8 @@ INT_PTR MyPropertySheet( LPPROPSHEETHEADER lppsph ); // 独自拡張プロパテ //!フォント選択ダイアログ BOOL MySelectFont( LOGFONT* plf, INT* piPointSize, HWND hwndDlgOwner, bool ); // 2009.10.01 ryoji ポイントサイズ(1/10ポイント単位)引数追加 + +//! ブラウザで開く +bool OpenByBrowser(HWND hWnd, std::wstring_view url); + #endif /* SAKURA_SHELL_0A8B6454_B007_46E5_9606_8D2FD7993B91_H_ */ diff --git a/sakura_core/view/CEditView_Mouse.cpp b/sakura_core/view/CEditView_Mouse.cpp index 798b6407af..6d4c9782ce 100644 --- a/sakura_core/view/CEditView_Mouse.cpp +++ b/sakura_core/view/CEditView_Mouse.cpp @@ -38,6 +38,7 @@ #include "uiparts/HandCursor.h" #include "util/input.h" #include "util/os.h" +#include "util/shell.h" #include "charset/CCodeBase.h" #include "charset/CCodeFactory.h" #include "apiwrap/StdApi.h" @@ -1533,7 +1534,7 @@ void CEditView::OnLBUTTONUP( WPARAM fwKeys, int xPos , int yPos ) static unsigned __stdcall ShellExecuteProc( LPVOID lpParameter ) { LPWSTR pszFile = (LPWSTR)lpParameter; - ::ShellExecute( NULL, L"open", pszFile, NULL, NULL, SW_SHOW ); + OpenByBrowser( ::GetActiveWindow(), pszFile ); free( pszFile ); return 0; } From 9169b13ab370c1f4e27cffb67613e787350fc78e Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sat, 10 Jul 2021 15:59:44 +0900 Subject: [PATCH 0801/1024] =?UTF-8?q?OpenByExplorer=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Possible OS command injection(CWE-78)対策 --- sakura_core/cmd/CViewCommander_File.cpp | 14 ++---- sakura_core/prop/CPropComPlugin.cpp | 2 +- sakura_core/util/shell.cpp | 65 ++++++++++++++----------- sakura_core/util/shell.h | 4 ++ 4 files changed, 44 insertions(+), 41 deletions(-) diff --git a/sakura_core/cmd/CViewCommander_File.cpp b/sakura_core/cmd/CViewCommander_File.cpp index e02fec3b6c..f84edba409 100644 --- a/sakura_core/cmd/CViewCommander_File.cpp +++ b/sakura_core/cmd/CViewCommander_File.cpp @@ -522,17 +522,9 @@ void CViewCommander::Command_OPEN_FOLDER_IN_EXPLORER(void) return; } - // ドキュメントパスを変数に入れる - LPCWSTR pszDocPath = GetDocument()->m_cDocFile.GetFilePath(); - - // Windows Explorerの引数を作る - CNativeW explorerCommand; - explorerCommand.AppendStringF(L"/select,\"%s\"", pszDocPath); - LPCWSTR pszExplorerCommand = explorerCommand.GetStringPtr(); - - auto hInstance = ::ShellExecute(GetMainWindow(), L"open", L"explorer.exe", pszExplorerCommand, NULL, SW_SHOWNORMAL); - // If the function succeeds, it returns a value greater than 32. - if (hInstance <= (decltype(hInstance))32) { + // ドキュメントパスを変数に入れてWindowsエクスプローラーで開く + if (std::filesystem::path docPath = GetDocument()->m_cDocFile.GetFilePath(); + !OpenByExplorer(GetMainWindow(), docPath)) { ErrorBeep(); return; } diff --git a/sakura_core/prop/CPropComPlugin.cpp b/sakura_core/prop/CPropComPlugin.cpp index 6cb69ce5aa..52fc5f89cd 100644 --- a/sakura_core/prop/CPropComPlugin.cpp +++ b/sakura_core/prop/CPropComPlugin.cpp @@ -243,7 +243,7 @@ INT_PTR CPropPlugin::DispatchEvent( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPAR break; } } - ::ShellExecute( NULL, L"open", sBaseDir.c_str(), NULL, NULL, SW_SHOW ); + OpenByExplorer( hwndDlg, sBaseDir ); } break; case IDC_PLUGIN_README: // ReadMe表示 // 2011/11/2 Uchi diff --git a/sakura_core/util/shell.cpp b/sakura_core/util/shell.cpp index f6be16ad99..bf1c270b29 100644 --- a/sakura_core/util/shell.cpp +++ b/sakura_core/util/shell.cpp @@ -218,36 +218,9 @@ static LRESULT CALLBACK PropSheetWndProc( HWND hwnd, UINT uMsg, WPARAM wParam, L // 選択されたメニューの処理 switch( nId ){ case 100: // 設定フォルダを開く - WCHAR szPath[_MAX_PATH]; - GetInidir( szPath ); - - // フォルダの ITEMIDLIST を取得して ShellExecuteEx() で開く - // Note. MSDN の ShellExecute() の解説にある方法でフォルダを開こうとした場合、 - // フォルダと同じ場所に <フォルダ名>.exe があるとうまく動かない。 - // verbが"open"やNULLではexeのほうが実行され"explore"では失敗する - // (フォルダ名の末尾に'\\'を付加してもWindows 2000では付加しないのと同じ動作になってしまう) - LPSHELLFOLDER pDesktopFolder; - if( SUCCEEDED(::SHGetDesktopFolder(&pDesktopFolder)) ){ - LPMALLOC pMalloc; - if( SUCCEEDED(::SHGetMalloc(&pMalloc)) ){ - LPITEMIDLIST pIDL; - WCHAR* pszDisplayName = szPath; - if( SUCCEEDED(pDesktopFolder->ParseDisplayName(NULL, NULL, pszDisplayName, NULL, &pIDL, NULL)) ){ - SHELLEXECUTEINFO si; - ::ZeroMemory( &si, sizeof(si) ); - si.cbSize = sizeof(si); - si.fMask = SEE_MASK_IDLIST; - si.lpVerb = L"open"; - si.lpIDList = pIDL; - si.nShow = SW_SHOWNORMAL; - ::ShellExecuteEx( &si ); // フォルダを開く - pMalloc->Free( (void*)pIDL ); - } - pMalloc->Release(); - } - pDesktopFolder->Release(); - } + OpenByExplorer(hwnd, GetIniFileName()); break; + case 101: // インポート/エクスポートの起点リセット(起点を設定フォルダにする) int nMsgResult = MYMESSAGEBOX( hwnd, @@ -649,6 +622,40 @@ BOOL MySelectFont( LOGFONT* plf, INT* piPointSize, HWND hwndDlgOwner, bool Fixed return TRUE; } +//! Windows エクスプローラーで開く +bool OpenByExplorer(HWND hWnd, const std::filesystem::path& path) +{ + if (path.empty()) { + return false; + } + + std::filesystem::path explorerPath; + std::wstring_view verb = L"explore"; + std::wstring_view file = path.c_str(); + std::wstring params; + const wchar_t* lpParameters = nullptr; + + if (path.filename() != L".") { + std::wstring buf(_MAX_PATH, wchar_t()); + size_t requiredSize; + _wgetenv_s(&requiredSize, buf.data(), buf.capacity(), L"windir"); + verb = L"open"; + explorerPath = buf.data(); + explorerPath /= L"explorer.exe"; + file = explorerPath.c_str(); + params = strprintf(L"/select,\"%s\"", path.c_str()); + lpParameters = params.c_str(); + } + + // If the function succeeds, it returns a value greater than 32. + if (auto hInstance = ::ShellExecuteW(hWnd, verb.data(), file.data(), lpParameters, nullptr, SW_SHOWNORMAL); + hInstance <= (decltype(hInstance))32) { + return false; + } + + return true; +} + //! ブラウザで開く bool OpenByBrowser(HWND hWnd, std::wstring_view url) { diff --git a/sakura_core/util/shell.h b/sakura_core/util/shell.h index 8c61e66974..c29fcd8b38 100644 --- a/sakura_core/util/shell.h +++ b/sakura_core/util/shell.h @@ -31,6 +31,7 @@ #include +#include #include BOOL MyWinHelp(HWND hwndCaller, UINT uCommand, DWORD_PTR dwData); /* WinHelp のかわりに HtmlHelp を呼び出す */ // 2006.07.22 ryoji @@ -59,6 +60,9 @@ INT_PTR MyPropertySheet( LPPROPSHEETHEADER lppsph ); // 独自拡張プロパテ //!フォント選択ダイアログ BOOL MySelectFont( LOGFONT* plf, INT* piPointSize, HWND hwndDlgOwner, bool ); // 2009.10.01 ryoji ポイントサイズ(1/10ポイント単位)引数追加 +//! Windows エクスプローラーで開く +bool OpenByExplorer(HWND hWnd, const std::filesystem::path& path); + //! ブラウザで開く bool OpenByBrowser(HWND hWnd, std::wstring_view url); From 581c19d3bfda92a0789f0d29b0a177069539cac3 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sat, 10 Jul 2021 16:31:40 +0900 Subject: [PATCH 0802/1024] =?UTF-8?q?URL=E3=83=80=E3=83=96=E3=83=AB?= =?UTF-8?q?=E3=82=AF=E3=83=AA=E3=83=83=E3=82=AF=E6=99=82=E3=81=AE=E3=82=B9?= =?UTF-8?q?=E3=83=AC=E3=83=83=E3=83=89=E3=82=92C++=E3=81=A7=E5=86=8D?= =?UTF-8?q?=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CEditView.cpp | 4 ++ sakura_core/view/CEditView.h | 5 +++ sakura_core/view/CEditView_Mouse.cpp | 58 ++++++++++++++++------------ 3 files changed, 43 insertions(+), 24 deletions(-) diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index a29b93c715..1de69cbfad 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -772,6 +772,10 @@ LRESULT CEditView::DispatchEvent( m_pcDropTarget->Revoke_DropTarget(); } + if (m_threadUrlOpen.joinable()) { + m_threadUrlOpen.join(); + } + /* タイマー終了 */ ::KillTimer( GetHwnd(), IDT_ROLLMOUSE ); diff --git a/sakura_core/view/CEditView.h b/sakura_core/view/CEditView.h index d8a2b489c4..485f5a5e50 100644 --- a/sakura_core/view/CEditView.h +++ b/sakura_core/view/CEditView.h @@ -46,6 +46,9 @@ #include #include // LPDATAOBJECT #include // HDROP + +#include + #include "CTextMetrics.h" #include "CTextDrawer.h" #include "CTextArea.h" @@ -120,6 +123,8 @@ class CEditView , public CMyWnd , public CDocListenerEx { + std::thread m_threadUrlOpen; + public: const CEditDoc* GetDocument() const { diff --git a/sakura_core/view/CEditView_Mouse.cpp b/sakura_core/view/CEditView_Mouse.cpp index 6d4c9782ce..c757c693d1 100644 --- a/sakura_core/view/CEditView_Mouse.cpp +++ b/sakura_core/view/CEditView_Mouse.cpp @@ -22,9 +22,15 @@ */ #include "StdAfx.h" -#include // _beginthreadex -#include #include "CEditView.h" + +#include + +#include +#include +#include +#include + #include "_main/CAppMode.h" #include "CEditApp.h" #include "CGrepAgent.h" // use CEditApp.h @@ -1530,15 +1536,6 @@ void CEditView::OnLBUTTONUP( WPARAM fwKeys, int xPos , int yPos ) return; } -/* ShellExecuteを呼び出すプロシージャ */ -static unsigned __stdcall ShellExecuteProc( LPVOID lpParameter ) -{ - LPWSTR pszFile = (LPWSTR)lpParameter; - OpenByBrowser( ::GetActiveWindow(), pszFile ); - free( pszFile ); - return 0; -} - // マウス左ボタンダブルクリック // 2007.01.18 kobake IsCurrentPositionURL仕様変更に伴い、処理の書き換え void CEditView::OnLBUTTONDBLCLK( WPARAM fwKeys, int _xPos , int _yPos ) @@ -1582,20 +1579,33 @@ void CEditView::OnLBUTTONDBLCLK( WPARAM fwKeys, int _xPos , int _yPos ) // 2009.05.21 syat UNCパスだと1分以上無応答になることがあるのでスレッド化 CWaitCursor cWaitCursor( GetHwnd() ); // カーソルを砂時計にする - unsigned int nThreadId; - LPCWSTR szUrl = strOPEN.c_str(); - LPWSTR szUrlDup = _wcsdup( szUrl ); - HANDLE hThread = (HANDLE)_beginthreadex( NULL, 0, ShellExecuteProc, (LPVOID)szUrlDup, 0, &nThreadId ); - if( hThread != INVALID_HANDLE_VALUE ){ - // ユーザーのURL起動指示に反応した目印としてちょっとの時間だけ砂時計カーソルを表示しておく - // ShellExecute は即座にエラー終了することがちょくちょくあるので WaitForSingleObject ではなく Sleep を使用(ex.存在しないパスの起動) - // 【補足】いずれの API でも待ちを長め(2~3秒)にするとなぜか Web ブラウザ未起動からの起動が重くなる模様(PCタイプ, XP/Vista, IE/FireFox に関係なく) - ::Sleep(200); - ::CloseHandle(hThread); - }else{ - //スレッド作成失敗 - free( szUrlDup ); + if (m_threadUrlOpen.joinable()) { + m_threadUrlOpen.join(); } + + std::mutex mtx; + std::condition_variable cv; + bool initialized = false; + m_threadUrlOpen = std::thread( [this, strOPEN, &mtx, &cv, &initialized] { + // 初期化 + std::wstring url(strOPEN); + if (!initialized) + { + std::unique_lock lock( mtx ); + initialized = true; + cv.notify_one(); + } + + // 本処理 + if( !OpenByBrowser( GetHwnd(), url ) ){ + // ユーザーのURL起動指示に反応した目印としてちょっとの時間だけ砂時計カーソルを表示しておく + // ShellExecute は即座にエラー終了することがちょくちょくあるので WaitForSingleObject ではなく Sleep を使用(ex.存在しないパスの起動) + // 【補足】いずれの API でも待ちを長め(2~3秒)にするとなぜか Web ブラウザ未起動からの起動が重くなる模様(PCタイプ, XP/Vista, IE/FireFox に関係なく) + ::Sleep( 200 ); + } + }); + std::unique_lock lock( mtx ); + cv.wait(lock, [&initialized] { return initialized; }); } return; } From fdac3cac9eacb6db8c61469e090a50a08ef5ebb3 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 11 Jul 2021 11:36:09 +0900 Subject: [PATCH 0803/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C=EF=BC=88OpenBy=EF=BD=9E?= =?UTF-8?q?=E3=82=92OpenWith=EF=BD=9E=E3=81=AB=E5=A4=89=E6=9B=B4=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/cmd/CViewCommander_File.cpp | 4 ++-- sakura_core/dlg/CDlgAbout.cpp | 10 +++++----- sakura_core/prop/CPropComPlugin.cpp | 4 ++-- sakura_core/util/shell.cpp | 8 ++++---- sakura_core/util/shell.h | 4 ++-- sakura_core/view/CEditView_Mouse.cpp | 2 +- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/sakura_core/cmd/CViewCommander_File.cpp b/sakura_core/cmd/CViewCommander_File.cpp index f84edba409..c086493f73 100644 --- a/sakura_core/cmd/CViewCommander_File.cpp +++ b/sakura_core/cmd/CViewCommander_File.cpp @@ -453,7 +453,7 @@ void CViewCommander::Command_BROWSE( void ) } std::wstring_view path(GetDocument()->m_cDocFile.GetFilePath()); - OpenByBrowser(m_pCommanderView->GetHwnd(), path); + OpenWithBrowser(m_pCommanderView->GetHwnd(), path); return; } @@ -524,7 +524,7 @@ void CViewCommander::Command_OPEN_FOLDER_IN_EXPLORER(void) // ドキュメントパスを変数に入れてWindowsエクスプローラーで開く if (std::filesystem::path docPath = GetDocument()->m_cDocFile.GetFilePath(); - !OpenByExplorer(GetMainWindow(), docPath)) { + !OpenWithExplorer(GetMainWindow(), docPath)) { ErrorBeep(); return; } diff --git a/sakura_core/dlg/CDlgAbout.cpp b/sakura_core/dlg/CDlgAbout.cpp index f4a8fe0097..fcebb7ac45 100644 --- a/sakura_core/dlg/CDlgAbout.cpp +++ b/sakura_core/dlg/CDlgAbout.cpp @@ -333,26 +333,26 @@ BOOL CDlgAbout::OnStnClicked( int wID ) { std::wstring url; ApiWrap::DlgItem_GetText(GetHwnd(), wID, url); - OpenByBrowser(GetHwnd(), url); + OpenWithBrowser(GetHwnd(), url); return TRUE; } case IDC_STATIC_URL_CI_BUILD: { #if defined(CI_BUILD_URL) - OpenByBrowser(GetHwnd(), _T(CI_BUILD_URL)); + OpenWithBrowser(GetHwnd(), _T(CI_BUILD_URL)); #elif defined(GIT_REMOTE_ORIGIN_URL) - OpenByBrowser(GetHwnd(), _T(GIT_REMOTE_ORIGIN_URL)); + OpenWithBrowser(GetHwnd(), _T(GIT_REMOTE_ORIGIN_URL)); #endif return TRUE; } case IDC_STATIC_URL_GITHUB_COMMIT: #if defined(GITHUB_COMMIT_URL) - OpenByBrowser(GetHwnd(), _T(GITHUB_COMMIT_URL)); + OpenWithBrowser(GetHwnd(), _T(GITHUB_COMMIT_URL)); #endif return TRUE; case IDC_STATIC_URL_GITHUB_PR: #if defined(GITHUB_PR_HEAD_URL) - OpenByBrowser(GetHwnd(), _T(GITHUB_PR_HEAD_URL)); + OpenWithBrowser(GetHwnd(), _T(GITHUB_PR_HEAD_URL)); #endif return TRUE; } diff --git a/sakura_core/prop/CPropComPlugin.cpp b/sakura_core/prop/CPropComPlugin.cpp index 52fc5f89cd..7f26ee6169 100644 --- a/sakura_core/prop/CPropComPlugin.cpp +++ b/sakura_core/prop/CPropComPlugin.cpp @@ -243,7 +243,7 @@ INT_PTR CPropPlugin::DispatchEvent( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPAR break; } } - OpenByExplorer( hwndDlg, sBaseDir ); + OpenWithExplorer( hwndDlg, sBaseDir ); } break; case IDC_PLUGIN_README: // ReadMe表示 // 2011/11/2 Uchi @@ -268,7 +268,7 @@ INT_PTR CPropPlugin::DispatchEvent( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPAR if (sel >= 0){ CPlugin* plugin = CPluginManager::getInstance()->GetPlugin(sel); if (plugin != NULL){ - OpenByBrowser( hwndDlg, plugin->m_sUrl ); + OpenWithBrowser( hwndDlg, plugin->m_sUrl ); } } } diff --git a/sakura_core/util/shell.cpp b/sakura_core/util/shell.cpp index bf1c270b29..0d570470b7 100644 --- a/sakura_core/util/shell.cpp +++ b/sakura_core/util/shell.cpp @@ -218,7 +218,7 @@ static LRESULT CALLBACK PropSheetWndProc( HWND hwnd, UINT uMsg, WPARAM wParam, L // 選択されたメニューの処理 switch( nId ){ case 100: // 設定フォルダを開く - OpenByExplorer(hwnd, GetIniFileName()); + OpenWithExplorer(hwnd, GetIniFileName()); break; case 101: // インポート/エクスポートの起点リセット(起点を設定フォルダにする) @@ -567,7 +567,7 @@ BOOL MyWinHelp(HWND hwndCaller, UINT uCommand, DWORD_PTR dwData) WCHAR buf[256]; swprintf( buf, _countof(buf), L"https://sakura-editor.github.io/help/HLP%06Iu.html", dwData ); - OpenByBrowser( ::GetActiveWindow(), buf ); + OpenWithBrowser( ::GetActiveWindow(), buf ); } return TRUE; @@ -623,7 +623,7 @@ BOOL MySelectFont( LOGFONT* plf, INT* piPointSize, HWND hwndDlgOwner, bool Fixed } //! Windows エクスプローラーで開く -bool OpenByExplorer(HWND hWnd, const std::filesystem::path& path) +bool OpenWithExplorer(HWND hWnd, const std::filesystem::path& path) { if (path.empty()) { return false; @@ -657,7 +657,7 @@ bool OpenByExplorer(HWND hWnd, const std::filesystem::path& path) } //! ブラウザで開く -bool OpenByBrowser(HWND hWnd, std::wstring_view url) +bool OpenWithBrowser(HWND hWnd, std::wstring_view url) { if (url.empty()) { return false; diff --git a/sakura_core/util/shell.h b/sakura_core/util/shell.h index c29fcd8b38..b98e771390 100644 --- a/sakura_core/util/shell.h +++ b/sakura_core/util/shell.h @@ -61,9 +61,9 @@ INT_PTR MyPropertySheet( LPPROPSHEETHEADER lppsph ); // 独自拡張プロパテ BOOL MySelectFont( LOGFONT* plf, INT* piPointSize, HWND hwndDlgOwner, bool ); // 2009.10.01 ryoji ポイントサイズ(1/10ポイント単位)引数追加 //! Windows エクスプローラーで開く -bool OpenByExplorer(HWND hWnd, const std::filesystem::path& path); +bool OpenWithExplorer(HWND hWnd, const std::filesystem::path& path); //! ブラウザで開く -bool OpenByBrowser(HWND hWnd, std::wstring_view url); +bool OpenWithBrowser(HWND hWnd, std::wstring_view url); #endif /* SAKURA_SHELL_0A8B6454_B007_46E5_9606_8D2FD7993B91_H_ */ diff --git a/sakura_core/view/CEditView_Mouse.cpp b/sakura_core/view/CEditView_Mouse.cpp index c757c693d1..e59613e7a9 100644 --- a/sakura_core/view/CEditView_Mouse.cpp +++ b/sakura_core/view/CEditView_Mouse.cpp @@ -1597,7 +1597,7 @@ void CEditView::OnLBUTTONDBLCLK( WPARAM fwKeys, int _xPos , int _yPos ) } // 本処理 - if( !OpenByBrowser( GetHwnd(), url ) ){ + if( !OpenWithBrowser( GetHwnd(), url ) ){ // ユーザーのURL起動指示に反応した目印としてちょっとの時間だけ砂時計カーソルを表示しておく // ShellExecute は即座にエラー終了することがちょくちょくあるので WaitForSingleObject ではなく Sleep を使用(ex.存在しないパスの起動) // 【補足】いずれの API でも待ちを長め(2~3秒)にするとなぜか Web ブラウザ未起動からの起動が重くなる模様(PCタイプ, XP/Vista, IE/FireFox に関係なく) From df04e76e8b4489c3a04d4fe0426ec9b4c806b0d0 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 11 Jul 2021 14:09:19 +0900 Subject: [PATCH 0804/1024] =?UTF-8?q?Revert=20"#1701=E4=B8=8D=E5=85=B7?= =?UTF-8?q?=E5=90=88=E3=81=AE=E7=99=BA=E7=94=9F=E5=8E=9F=E7=90=86=E3=81=A8?= =?UTF-8?q?=E5=AF=BE=E7=AD=96"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit a733fd80c1747e368126d4a9da94c7ff7a6ca11f. --- tests/unittests/test-loadstring.cpp | 109 ---------------------------- 1 file changed, 109 deletions(-) diff --git a/tests/unittests/test-loadstring.cpp b/tests/unittests/test-loadstring.cpp index 72dfe846e2..024e3614ee 100644 --- a/tests/unittests/test-loadstring.cpp +++ b/tests/unittests/test-loadstring.cpp @@ -50,112 +50,3 @@ TEST(LoadString, LoadStringResource) // 古いWindows APIが言語表示名を提供してなかったことに起因するリソース。 ASSERT_STREQ( L"Japanese", LS( STR_SELLANG_NAME ) ); } - -constexpr auto TEST_STRING1 = L"文字列1"; -constexpr auto TEST_STRING2 = L"文字列2"; - -/*! - * 関数の引数で渡された文字列が、関数外部で変更されてしまうケースの検証クラス - */ -class CBadStringArgument -{ - std::list datum - { - TEST_STRING1, - TEST_STRING2, - }; - decltype(datum)::const_iterator current; - std::wstring str;; - -public: - CBadStringArgument() - { - current = datum.cbegin(); - str = current->data(); - } - - const wchar_t* GetStr() const { return str.data(); } - - void UpdateStr() { - ++current; - str = current->data(); - } -}; - -/*! #1701 不具合の再現(NG) */ -TEST(CBadStringArgument, test1) -{ - CBadStringArgument arg; - auto test = [&](const wchar_t* pszText) { - EXPECT_STREQ(TEST_STRING1, pszText); - arg.UpdateStr(); // 👈更新、👇が影響を受けてNG。 - EXPECT_STREQ(TEST_STRING1, pszText); - }; - test(arg.GetStr()); -} - -/*! 引数をC++化してみる(NG) */ -TEST(CBadStringArgument, test2) -{ - CBadStringArgument arg; - auto test = [&](std::wstring_view text) { - EXPECT_STREQ(TEST_STRING1, text.data()); - arg.UpdateStr(); // 👈更新、👇が影響を受けてNG。 - EXPECT_STREQ(TEST_STRING1, text.data()); - }; - test(arg.GetStr()); -}; - -/*! 引数を const std::wstring& に変えてみる(OK) */ -TEST(CBadStringArgument, test3) -{ - CBadStringArgument arg; - auto test = [&](const std::wstring& text) { - EXPECT_STREQ(TEST_STRING1, text.data()); - arg.UpdateStr(); // 👈更新、👇は影響を受けずOK。 - EXPECT_STREQ(TEST_STRING1, text.data()); - }; - test(arg.GetStr()); -} - -/*! 引数を const std::wstring_view& に変えてみる(NG) */ -TEST(CBadStringArgument, test4) -{ - CBadStringArgument arg; - // std::wstring_viewの使い方が間違っている... - auto test = [&](const std::wstring_view& text) { - EXPECT_STREQ(TEST_STRING1, text.data()); - arg.UpdateStr(); // 👈更新、👇が影響を受けてNG。 - EXPECT_STREQ(TEST_STRING1, text.data()); - }; - test(arg.GetStr()); -} - -/*! 最善手のプレビュー(OK) */ -TEST(CBadStringArgument, test5) -{ - CBadStringArgument arg; - auto test = [&](std::wstring_view text) { - // 関数ローカルにコピーを作成 - const std::wstring copyOfText(text); - EXPECT_STREQ(TEST_STRING1, copyOfText.data()); - arg.UpdateStr(); // 👈更新、👇は影響を受けずOK。 - EXPECT_STREQ(TEST_STRING1, copyOfText.data()); - }; - test(arg.GetStr()); -} - -/*! 妥協案のプレビュー(OK) */ -TEST(CBadStringArgument, test6) -{ - CBadStringArgument arg; - auto test = [&](const wchar_t* pszText) { - // 関数ローカルにコピーを作成 - const std::wstring copyOfText(pszText ? pszText : L""); - pszText = copyOfText.data(); - EXPECT_STREQ(TEST_STRING1, pszText); - arg.UpdateStr(); // 👈更新、👇は影響を受けずOK。 - EXPECT_STREQ(TEST_STRING1, pszText); - }; - test(arg.GetStr()); -} From 4afb43eeb66ead23f0126b67abe89b9756166ad9 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 11 Jul 2021 15:01:28 +0900 Subject: [PATCH 0805/1024] =?UTF-8?q?CStringRange=E3=81=ABrule=20of=20five?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 独自定義コンストラクタがあるためrule of zeroは利用不可。 独自定義代入演算子がdefaultと変わらなかったため汎用化。 --- sakura_core/basis/CStrictRange.h | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/sakura_core/basis/CStrictRange.h b/sakura_core/basis/CStrictRange.h index 4f4eedd027..3d2760ba8b 100644 --- a/sakura_core/basis/CStrictRange.h +++ b/sakura_core/basis/CStrictRange.h @@ -29,30 +29,23 @@ template class CRangeBase{ + using Me = CRangeBase; + public: typedef typename PointType::IntType IntType; public: //コンストラクタ - CRangeBase() - { - } - CRangeBase(const CRangeBase& rhs) - { - operator=(rhs); - } + CRangeBase() = default; + CRangeBase(const Me&) = default; + Me& operator = (const Me&) = default; + CRangeBase(Me&&) noexcept = default; + Me& operator = (Me&&) noexcept = default; CRangeBase(const PointType& _ptFrom,const PointType& _ptTo) { m_ptFrom=_ptFrom; m_ptTo=_ptTo; } - - //代入 - CRangeBase& operator = (const CRangeBase& rhs) - { - m_ptFrom=rhs.m_ptFrom; - m_ptTo=rhs.m_ptTo; - return *this; - } + ~CRangeBase() = default; //比較 bool operator == (const CRangeBase& rhs) const From f902c3c093824d8f0bcc089f67edde723eb5ead4 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 11 Jul 2021 20:13:40 +0900 Subject: [PATCH 0806/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ・処理内容のコメントを追加 ・不要なSleepを削除 ・CEditView破棄時のスレッド同期タイミングを修正 --- sakura_core/util/shell.cpp | 3 +++ sakura_core/view/CEditView.cpp | 9 ++++++--- sakura_core/view/CEditView_Mouse.cpp | 10 ++++------ 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/sakura_core/util/shell.cpp b/sakura_core/util/shell.cpp index 0d570470b7..c329e290bb 100644 --- a/sakura_core/util/shell.cpp +++ b/sakura_core/util/shell.cpp @@ -635,6 +635,9 @@ bool OpenWithExplorer(HWND hWnd, const std::filesystem::path& path) std::wstring params; const wchar_t* lpParameters = nullptr; + // ファイル名(最後の'\'に続く部分)がドット('.')でない場合、 + // Windowsエクスプローラーのコマンドを指定してファイルを選択させる。 + // ※ドットは「フォルダ自身」を表す特殊なファイル名。 if (path.filename() != L".") { std::wstring buf(_MAX_PATH, wchar_t()); size_t requiredSize; diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index 1de69cbfad..cf14f92e1e 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -772,13 +772,16 @@ LRESULT CEditView::DispatchEvent( m_pcDropTarget->Revoke_DropTarget(); } + /* タイマー終了 */ + ::KillTimer( GetHwnd(), IDT_ROLLMOUSE ); + + // 「URLを開く」処理の完了をチェックして必要があれば待機する + // 開始後、joinされてないstd::threadを破棄すると例外が起きる。 + // ダブルクリックで「URLを開く」をしてない場合、このif文には入らない。 if (m_threadUrlOpen.joinable()) { m_threadUrlOpen.join(); } - /* タイマー終了 */ - ::KillTimer( GetHwnd(), IDT_ROLLMOUSE ); - // MYTRACE( L" WM_DESTROY\n" ); /* ||子ウィンドウの破棄 diff --git a/sakura_core/view/CEditView_Mouse.cpp b/sakura_core/view/CEditView_Mouse.cpp index e59613e7a9..eaf2107430 100644 --- a/sakura_core/view/CEditView_Mouse.cpp +++ b/sakura_core/view/CEditView_Mouse.cpp @@ -1579,10 +1579,13 @@ void CEditView::OnLBUTTONDBLCLK( WPARAM fwKeys, int _xPos , int _yPos ) // 2009.05.21 syat UNCパスだと1分以上無応答になることがあるのでスレッド化 CWaitCursor cWaitCursor( GetHwnd() ); // カーソルを砂時計にする + // 前回分の「URLを開く」処理の完了をチェックして必要があれば待機する if (m_threadUrlOpen.joinable()) { m_threadUrlOpen.join(); } + // 新規スレッドで「URLを開く」を実行する + // ※初期化完了するまではメインスレッドの実行がブロックされることに注意。 std::mutex mtx; std::condition_variable cv; bool initialized = false; @@ -1597,12 +1600,7 @@ void CEditView::OnLBUTTONDBLCLK( WPARAM fwKeys, int _xPos , int _yPos ) } // 本処理 - if( !OpenWithBrowser( GetHwnd(), url ) ){ - // ユーザーのURL起動指示に反応した目印としてちょっとの時間だけ砂時計カーソルを表示しておく - // ShellExecute は即座にエラー終了することがちょくちょくあるので WaitForSingleObject ではなく Sleep を使用(ex.存在しないパスの起動) - // 【補足】いずれの API でも待ちを長め(2~3秒)にするとなぜか Web ブラウザ未起動からの起動が重くなる模様(PCタイプ, XP/Vista, IE/FireFox に関係なく) - ::Sleep( 200 ); - } + OpenWithBrowser( GetHwnd(), url ); }); std::unique_lock lock( mtx ); cv.wait(lock, [&initialized] { return initialized; }); From 933ed1c5f1df7925b6d39bd1f2d694a7a40f9c31 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Wed, 14 Jul 2021 13:05:43 +0900 Subject: [PATCH 0807/1024] =?UTF-8?q?CClipboard::SetText=20=E3=81=A8=20CCl?= =?UTF-8?q?ipboard::GetText=20=E3=81=AE=E3=83=86=E3=82=B9=E3=83=88?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-cclipboard.cpp | 111 ++++++++++++++++++---------- 1 file changed, 71 insertions(+), 40 deletions(-) diff --git a/tests/unittests/test-cclipboard.cpp b/tests/unittests/test-cclipboard.cpp index b78ef30729..6052bcbbc6 100644 --- a/tests/unittests/test-cclipboard.cpp +++ b/tests/unittests/test-cclipboard.cpp @@ -28,33 +28,36 @@ #define NOMINMAX #endif /* #ifndef NOMINMAX */ -#include +#include +#include + #include -#include #include +#include "CEol.h" #include "mem/CNativeW.h" #include "_os/CClipboard.h" -/*! - * HWND型のスマートポインタを実現するためのdeleterクラス - */ -struct window_closer -{ - void operator()(HWND hWnd) const - { - ::DestroyWindow(hWnd); +class CClipboard1 : public testing::Test { +protected: + void SetUp() override { + hInstance = ::GetModuleHandle(nullptr); + hWnd = ::CreateWindowExW(0, WC_STATICW, L"test", 0, 1, 1, 1, 1, nullptr, nullptr, hInstance, nullptr); + if (!hWnd) FAIL(); + } + void TearDown() override { + if (hWnd) + ::DestroyWindow(hWnd); } -}; - -//! HWND型のスマートポインタ -using windowHolder = std::unique_ptr::type, window_closer>; + HINSTANCE hInstance = nullptr; + HWND hWnd = nullptr; +}; /*! * @brief SetHtmlTextのテスト */ -TEST(CClipboard, SetHtmlText) +TEST_F(CClipboard1, SetHtmlText) { constexpr const wchar_t inputData[] = L"test 109"; constexpr const char expected[] = @@ -71,36 +74,64 @@ TEST(CClipboard, SetHtmlText) const UINT uHtmlFormat = ::RegisterClipboardFormat(L"HTML Format"); - auto hInstance = ::GetModuleHandleW(nullptr); - if (HWND hWnd = ::CreateWindowExW(0, WC_STATICW, L"test", 0, 1, 1, 1, 1, nullptr, nullptr, hInstance, nullptr); hWnd) { - // HWNDをスマートポインタに入れる - windowHolder holder(hWnd); - - // クリップボード操作クラスでSetHtmlTextする - CClipboard cClipBoard(hWnd); + // クリップボード操作クラスでSetHtmlTextする + CClipboard cClipBoard(hWnd); - // 操作は失敗しないはず。 - ASSERT_TRUE(cClipBoard.SetHtmlText(inputData)); + // 操作は失敗しないはず。 + ASSERT_TRUE(cClipBoard.SetHtmlText(inputData)); - // 操作に成功するとHTML形式のデータを利用できるはず。 - ASSERT_TRUE(::IsClipboardFormatAvailable(uHtmlFormat)); + // 操作に成功するとHTML形式のデータを利用できるはず。 + ASSERT_TRUE(::IsClipboardFormatAvailable(uHtmlFormat)); - // クリップボード操作クラスが対応してないので生APIを呼んで確認する。 + // クリップボード操作クラスが対応してないので生APIを呼んで確認する。 - // グローバルメモリをロックできた場合のみ中身を取得しに行く - if (HGLOBAL hClipData = ::GetClipboardData(uHtmlFormat); hClipData != nullptr) { - // データをstd::stringにコピーする - const size_t cchData = ::GlobalSize(hClipData); - const char* pData = (char*)::GlobalLock(hClipData); - std::string strClipData(pData, cchData); + // グローバルメモリをロックできた場合のみ中身を取得しに行く + if (HGLOBAL hClipData = ::GetClipboardData(uHtmlFormat); hClipData != nullptr) { + // データをstd::stringにコピーする + const size_t cchData = ::GlobalSize(hClipData); + const char* pData = (char*)::GlobalLock(hClipData); + std::string strClipData(pData, cchData); - // 使い終わったらロック解除する - ::GlobalUnlock(hClipData); + // 使い終わったらロック解除する + ::GlobalUnlock(hClipData); - ASSERT_STREQ(expected, strClipData.c_str()); - } - else { - FAIL(); - } + ASSERT_STREQ(expected, strClipData.c_str()); + } + else { + FAIL(); } } + +TEST_F(CClipboard1, SetTextAndGetText) +{ + const std::wstring_view text = L"てすと"; + CClipboard clipboard(hWnd); + CNativeW buffer; + bool column; + bool line; + CEol eol(EEolType::cr_and_lf); + + clipboard.Empty(); + + // テキストを設定する(矩形選択フラグなし・行選択フラグなし) + EXPECT_TRUE(clipboard.SetText(text.data(), text.length(), false, false, -1)); + EXPECT_TRUE(CClipboard::HasValidData()); + // Unicode文字列を取得する + EXPECT_TRUE(clipboard.GetText(&buffer, &column, &line, eol, CF_UNICODETEXT)); + EXPECT_EQ(buffer.Compare(text.data()), 0); + EXPECT_FALSE(column); + EXPECT_FALSE(line); + + clipboard.Empty(); + + // テキストを設定する(矩形選択あり・行選択あり) + EXPECT_TRUE(clipboard.SetText(text.data(), text.length(), true, true, -1)); + EXPECT_TRUE(CClipboard::HasValidData()); + // サクラエディタ独自形式データを取得する + EXPECT_TRUE(clipboard.GetText(&buffer, &column, nullptr, eol, CClipboard::GetSakuraFormat())); + EXPECT_EQ(buffer.Compare(text.data()), 0); + EXPECT_TRUE(column); + EXPECT_TRUE(clipboard.GetText(&buffer, nullptr, &line, eol, CClipboard::GetSakuraFormat())); + EXPECT_EQ(buffer.Compare(text.data()), 0); + EXPECT_TRUE(line); +} From f44540f93b644348f1498314efd68cc55a0b28d1 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 18 Jul 2021 21:49:43 +0900 Subject: [PATCH 0808/1024] =?UTF-8?q?=E3=83=96=E3=83=A9=E3=82=A6=E3=82=BA?= =?UTF-8?q?=E6=A9=9F=E8=83=BD=E3=81=8B=E3=82=89OpenWithBrowser=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=81=A8=E3=81=8D=E3=81=AE=E3=83=91=E3=83=A9=E3=83=A1?= =?UTF-8?q?=E3=83=BC=E3=82=BF=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/cmd/CViewCommander_File.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sakura_core/cmd/CViewCommander_File.cpp b/sakura_core/cmd/CViewCommander_File.cpp index c086493f73..80e37a6273 100644 --- a/sakura_core/cmd/CViewCommander_File.cpp +++ b/sakura_core/cmd/CViewCommander_File.cpp @@ -453,7 +453,8 @@ void CViewCommander::Command_BROWSE( void ) } std::wstring_view path(GetDocument()->m_cDocFile.GetFilePath()); - OpenWithBrowser(m_pCommanderView->GetHwnd(), path); + std::wstring url(strprintf(L"file:///%s", path.data())); + OpenWithBrowser(m_pCommanderView->GetHwnd(), url); return; } From 9a0ed9f1ad0d27f016f37912c8753dd0ae623301 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Tue, 20 Jul 2021 06:50:11 +0900 Subject: [PATCH 0809/1024] =?UTF-8?q?OpenWithBrowser=E3=81=ABfile=E3=83=97?= =?UTF-8?q?=E3=83=AD=E3=83=88=E3=82=B3=E3=83=AB=E5=AF=BE=E7=AD=96=E3=82=92?= =?UTF-8?q?=E7=B5=84=E3=81=BF=E8=BE=BC=E3=82=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/Makefile | 1 + sakura_core/util/shell.cpp | 135 ++++++++++++++++++++++++++++++++++--- tests/unittests/Makefile | 1 + 3 files changed, 128 insertions(+), 9 deletions(-) diff --git a/sakura_core/Makefile b/sakura_core/Makefile index d58763fc0e..39ffe880c5 100644 --- a/sakura_core/Makefile +++ b/sakura_core/Makefile @@ -98,6 +98,7 @@ LIBS= \ -lwinmm \ -lwindowscodecs \ -lmsimg32 \ + -lurlmon \ -mwindows \ -municode \ $(MYLIBS) diff --git a/sakura_core/util/shell.cpp b/sakura_core/util/shell.cpp index c329e290bb..2cee6ac4e1 100644 --- a/sakura_core/util/shell.cpp +++ b/sakura_core/util/shell.cpp @@ -25,14 +25,21 @@ */ #include "StdAfx.h" +#include "util/shell.h" + +#include // CDERR_FINDRESFAILURE等 +#include +#include +#include +#include #include +#include #include -#include -#include // Nov. 3, 2005 genta //CDERR_FINDRESFAILURE等 #include -#include "util/shell.h" +#include "debug/Debug1.h" +#include "util/RegKey.h" #include "util/string_ex2.h" #include "util/file.h" #include "util/os.h" @@ -43,8 +50,8 @@ #include "extmodule/CHtmlHelp.h" #include "config/app_constants.h" #include "String_define.h" -#include +#pragma comment(lib, "urlmon.lib") /* フォルダ選択ダイアログ */ BOOL SelectDir( HWND hWnd, const WCHAR* pszTitle, const WCHAR* pszInitFolder, WCHAR* strFolderName, size_t nMaxCount ) @@ -659,6 +666,72 @@ bool OpenWithExplorer(HWND hWnd, const std::filesystem::path& path) return true; } +/*! + * 指定したプロトコルに関連付けされたProgIDを取得する + */ +std::wstring GetProgIdForProtocol(std::wstring_view protocol) +{ + constexpr const auto& defaultProgId = L"MSEdgeHTM"; + + // HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice + if (const auto keyPath(strprintf(LR"(SOFTWARE\Microsoft\Windows\Shell\Associations\UrlAssociations\%s\UserChoice)", protocol.data())); + CRegKey::ExistsKey(HKEY_CURRENT_USER, keyPath.data())) + { + CRegKey regKey; + if (const auto errorCode = regKey.Open(HKEY_CURRENT_USER, keyPath.data(), KEY_READ); + errorCode != 0) + { + return defaultProgId; + } + + std::wstring buf(1024, wchar_t()); + if (const auto errorCode = regKey.GetValue(L"ProgId", buf.data(), static_cast(buf.capacity()), nullptr); + errorCode != 0) + { + return defaultProgId; + } + + buf.resize(::wcsnlen(buf.data(), 1024)); + + return buf; + } + + return defaultProgId; +} + +/*! + * 指定したProgIDに関連付けされたコマンドラインを取得する + */ +std::wstring GetCommandAssociatedWithProgID(std::wstring_view progId) +{ + constexpr const auto& notAssociated = L""; + + // HKEY_CLASSES_ROOT\MSEdgeHTM\shell\open\command + if (const auto keyPath(strprintf(LR"(%s\shell\open\command)", progId.data())); + CRegKey::ExistsKey(HKEY_CLASSES_ROOT, keyPath.data())) + { + CRegKey regKey; + if (const auto errorCode = regKey.Open(HKEY_CLASSES_ROOT, keyPath.data(), KEY_READ); + errorCode != 0) + { + return notAssociated; + } + + std::wstring buf(1024, wchar_t()); + if (const auto errorCode = regKey.GetValue(nullptr, buf.data(), static_cast(buf.capacity()), nullptr); + errorCode != 0) + { + return notAssociated; + } + + buf.resize(::wcsnlen(buf.data(), 1024)); + + return buf; + } + + return notAssociated; +} + //! ブラウザで開く bool OpenWithBrowser(HWND hWnd, std::wstring_view url) { @@ -666,15 +739,59 @@ bool OpenWithBrowser(HWND hWnd, std::wstring_view url) return false; } - if (!std::regex_search(url.data(), std::wregex(LR"(^[a-z]+://\b)")) - && !std::regex_search(url.data(), std::wregex(LR"(^(mailto|news):)")) - && !std::regex_search(url.data(), std::wregex(LR"(^[A-Z]:\\)", std::wregex::icase)) - && !std::regex_search(url.data(), std::wregex(LR"(^\\\\:)"))) { + using namespace Microsoft::WRL; + ComPtr pUri; + DWORD dwFlags = Uri_CREATE_NO_CRACK_UNKNOWN_SCHEMES | Uri_CREATE_NO_IE_SETTINGS; + if (const auto hr = ::CreateUri(url.data(), dwFlags, 0, &pUri); + FAILED(hr)) { + _com_error ex(hr); + auto desc = ex.Description(); + TRACE("%s", (const wchar_t*)desc); + return false; + } + + _bstr_t bstrSchemeName; + if (const auto hr = pUri->GetSchemeName(&bstrSchemeName.GetBSTR()); + FAILED(hr)) { + _com_error ex(hr); + auto desc = ex.Description(); + TRACE("%s", (const wchar_t*)desc); return false; } + std::filesystem::path browserPath; + std::wstring_view verb = L"open"; + std::wstring_view file = url.data(); + std::wstring params; + const wchar_t* lpParameters = nullptr; + + // fileプロトコル対策 + if (bstrSchemeName == _bstr_t(L"file")) { + // 実行可能ファイルはダウンロードになるので失敗させる + if (const std::filesystem::path urlPath(url.data()); + ::_wcsicmp(urlPath.extension().c_str(), L".exe") == 0) { + return false; + } + + // HTTPプロトコルに関連付けられたコマンドラインを取得し、パターンマッチでパラメータを組み立てる + // => "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" --single-argument %1 + std::wsmatch matched; + std::wregex re(LR"(^("[^"]+"|[^ ]+)\s+(.+))"); + if (auto browserCommandline = GetCommandAssociatedWithProgID(GetProgIdForProtocol(L"http")); + std::regex_search(browserCommandline, matched, re)) { + // $1 ブラウザのパス + std::wstring buf = matched[1]; + buf.erase(std::remove(buf.begin(), buf.end(), L'\"'), buf.cend()); + browserPath = buf.data(); + file = browserPath.c_str(); + // $2 パラメータ + params = std::regex_replace(matched[2].str(), std::wregex(L"%1"), url.data()); + lpParameters = params.c_str(); + } + } + // If the function succeeds, it returns a value greater than 32. - if (auto hInstance = ::ShellExecuteW(hWnd, L"open", url.data(), nullptr, nullptr, SW_SHOWNORMAL); + if (auto hInstance = ::ShellExecuteW(hWnd, verb.data(), file.data(), lpParameters, nullptr, SW_SHOWNORMAL); hInstance <= (decltype(hInstance))32) { return false; } diff --git a/tests/unittests/Makefile b/tests/unittests/Makefile index bcc3f35924..b16eb0ad16 100644 --- a/tests/unittests/Makefile +++ b/tests/unittests/Makefile @@ -115,6 +115,7 @@ LIBS= \ -lwinmm \ -lwindowscodecs \ -lmsimg32 \ + -lurlmon \ -lkernel32 \ -lgdi32 \ -lcomdlg32 \ From a68e959ea4696c111f7dec8bef849ba818cd2b7e Mon Sep 17 00:00:00 2001 From: Katsuhisa Yuasa Date: Sun, 9 Dec 2018 06:05:34 +0900 Subject: [PATCH 0810/1024] =?UTF-8?q?=E3=83=80=E3=82=A4=E3=82=A2=E3=83=AD?= =?UTF-8?q?=E3=82=B0=E3=81=AE=E8=A1=A8=E7=A4=BA=E4=BD=8D=E7=BD=AE=E3=81=8C?= =?UTF-8?q?=E8=A1=A8=E7=A4=BA=E3=81=99=E3=82=8B=E3=81=9F=E3=81=B3=E3=81=AB?= =?UTF-8?q?=E3=81=9A=E3=82=8C=E3=81=A6=E3=81=84=E3=81=8F=E5=95=8F=E9=A1=8C?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDialog.cpp | 51 +++++++++-------------------- sakura_core/dlg/CDialog.h | 8 ++--- sakura_core/dlg/CDlgCompare.cpp | 20 ++++++----- sakura_core/dlg/CDlgCompare.h | 2 +- sakura_core/dlg/CDlgDiff.cpp | 20 ++++++----- sakura_core/dlg/CDlgDiff.h | 2 +- sakura_core/dlg/CDlgFavorite.cpp | 20 ++++++----- sakura_core/dlg/CDlgFavorite.h | 2 +- sakura_core/dlg/CDlgTagJumpList.cpp | 20 ++++++----- sakura_core/dlg/CDlgTagJumpList.h | 2 +- sakura_core/dlg/CDlgWindowList.cpp | 20 ++++++----- sakura_core/dlg/CDlgWindowList.h | 2 +- 12 files changed, 80 insertions(+), 89 deletions(-) diff --git a/sakura_core/dlg/CDialog.cpp b/sakura_core/dlg/CDialog.cpp index 37944d8236..e2923604d3 100644 --- a/sakura_core/dlg/CDialog.cpp +++ b/sakura_core/dlg/CDialog.cpp @@ -235,25 +235,25 @@ void CDialog::SetDialogPosSize() rc.right = m_xPos + m_nWidth; rc.bottom = m_yPos + m_nHeight; GetMonitorWorkRect(&rc, &rcWork); - rcWork.top += 1; - rcWork.bottom -= 1; - rcWork.left += 1; - rcWork.right -= 1; - if( rc.bottom > rcWork.bottom ){ - rc.top -= (rc.bottom - rcWork.bottom); - rc.bottom = rcWork.bottom; + LONG workHeight = rcWork.bottom - rcWork.top; + LONG workWidth = rcWork.right - rcWork.left; + if( rc.bottom > workHeight ){ + LONG diff = rc.bottom - workHeight; + rc.top -= diff; + rc.bottom -= diff; } - if( rc.right > rcWork.right ){ - rc.left -= (rc.right - rcWork.right); - rc.right = rcWork.right; + if( rc.right > workWidth ){ + LONG diff = rc.right - workWidth; + rc.left -= diff; + rc.right -= diff; } - if( rc.top < rcWork.top ){ - rc.bottom += (rcWork.top - rc.top); - rc.top = rcWork.top; + if( rc.top < 0 ){ + rc.bottom += rc.top; + rc.top = 0; } - if( rc.left < rcWork.left ){ - rc.right += (rcWork.left - rc.left); - rc.left = rcWork.left; + if( rc.left < 0 ){ + rc.right += rc.left; + rc.left = 0; } m_xPos = rc.left; m_yPos = rc.top; @@ -318,12 +318,6 @@ BOOL CDialog::OnSize( WPARAM wParam, LPARAM lParam ) RECT rc; ::GetWindowRect( m_hWnd, &rc ); - /* ダイアログのサイズの記憶 */ - m_xPos = rc.left; - m_yPos = rc.top; - m_nWidth = rc.right - rc.left; - m_nHeight = rc.bottom - rc.top; - /* サイズボックスの移動 */ if( NULL != m_hwndSizeBox ){ ::GetClientRect( m_hWnd, &rc ); @@ -360,19 +354,6 @@ BOOL CDialog::OnSize( WPARAM wParam, LPARAM lParam ) BOOL CDialog::OnMove( WPARAM wParam, LPARAM lParam ) { - /* ダイアログの位置の記憶 */ - if( !m_bInited ){ - return TRUE; - } - RECT rc; - ::GetWindowRect( m_hWnd, &rc ); - - /* ダイアログのサイズの記憶 */ - m_xPos = rc.left; - m_yPos = rc.top; - m_nWidth = rc.right - rc.left; - m_nHeight = rc.bottom - rc.top; - DEBUG_TRACE( L"CDialog::OnMove() m_xPos=%d m_yPos=%d\n", m_xPos, m_yPos ); return TRUE; } diff --git a/sakura_core/dlg/CDialog.h b/sakura_core/dlg/CDialog.h index fee57884b3..f8c502bcf8 100644 --- a/sakura_core/dlg/CDialog.h +++ b/sakura_core/dlg/CDialog.h @@ -149,16 +149,16 @@ class CDialog{ BOOL m_bModal; /* モーダル ダイアログか */ bool m_bSizable; // 可変ダイアログかどうか int m_nShowCmd; // 最大化/最小化 - int m_nWidth; - int m_nHeight; - int m_xPos; - int m_yPos; // void* m_pcEditView; DLLSHAREDATA* m_pShareData; BOOL m_bInited; HINSTANCE m_hLangRsrcInstance; // メッセージリソースDLLのインスタンスハンドル // 2011.04.10 nasukoji protected: + int m_nWidth; + int m_nHeight; + int m_xPos; + int m_yPos; void CreateSizeBox( void ); BOOL OnCommand(WPARAM wParam, LPARAM lParam); diff --git a/sakura_core/dlg/CDlgCompare.cpp b/sakura_core/dlg/CDlgCompare.cpp index e182781473..f60f27a052 100644 --- a/sakura_core/dlg/CDlgCompare.cpp +++ b/sakura_core/dlg/CDlgCompare.cpp @@ -265,13 +265,22 @@ BOOL CDlgCompare::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) return CDialog::OnInitDialog( hwndDlg, wParam, lParam ); } +BOOL CDlgCompare::OnDestroy( void ) +{ + CDialog::OnDestroy(); + RECT& rect = GetDllShareData().m_Common.m_sOthers.m_rcCompareDialog; + rect.left = m_xPos; + rect.top = m_yPos; + rect.right = rect.left + m_nWidth; + rect.bottom = rect.top + m_nHeight; + return TRUE; +} + BOOL CDlgCompare::OnSize( WPARAM wParam, LPARAM lParam ) { /* 基底クラスメンバ */ CDialog::OnSize( wParam, lParam ); - ::GetWindowRect( GetHwnd(), &GetDllShareData().m_Common.m_sOthers.m_rcCompareDialog ); - RECT rc; POINT ptNew; ::GetWindowRect( GetHwnd(), &rc ); @@ -285,13 +294,6 @@ BOOL CDlgCompare::OnSize( WPARAM wParam, LPARAM lParam ) return TRUE; } -BOOL CDlgCompare::OnMove( WPARAM wParam, LPARAM lParam ) -{ - ::GetWindowRect( GetHwnd(), &GetDllShareData().m_Common.m_sOthers.m_rcCompareDialog ); - - return CDialog::OnMove( wParam, lParam ); -} - BOOL CDlgCompare::OnMinMaxInfo( LPARAM lParam ) { LPMINMAXINFO lpmmi = (LPMINMAXINFO) lParam; diff --git a/sakura_core/dlg/CDlgCompare.h b/sakura_core/dlg/CDlgCompare.h index f0b360f2ee..9838433662 100644 --- a/sakura_core/dlg/CDlgCompare.h +++ b/sakura_core/dlg/CDlgCompare.h @@ -49,8 +49,8 @@ class CDlgCompare final : public CDialog INT_PTR DispatchEvent( HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam ) override; // 標準以外のメッセージを捕捉する BOOL OnInitDialog(HWND hwndDlg, WPARAM wParam, LPARAM lParam) override; + BOOL OnDestroy() override; BOOL OnSize( WPARAM wParam, LPARAM lParam ) override; - BOOL OnMove( WPARAM wParam, LPARAM lParam ) override; BOOL OnMinMaxInfo( LPARAM lParam ); void SetData( void ) override; /* ダイアログデータの設定 */ diff --git a/sakura_core/dlg/CDlgDiff.cpp b/sakura_core/dlg/CDlgDiff.cpp index b6e9bb386a..51f5781d84 100644 --- a/sakura_core/dlg/CDlgDiff.cpp +++ b/sakura_core/dlg/CDlgDiff.cpp @@ -517,13 +517,22 @@ BOOL CDlgDiff::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) return CDialog::OnInitDialog( hwndDlg, wParam, lParam ); } +BOOL CDlgDiff::OnDestroy() +{ + CDialog::OnDestroy(); + RECT& rect = GetDllShareData().m_Common.m_sOthers.m_rcDiffDialog; + rect.left = m_xPos; + rect.top = m_yPos; + rect.right = rect.left + m_nWidth; + rect.bottom = rect.top + m_nHeight; + return TRUE; +} + BOOL CDlgDiff::OnSize( WPARAM wParam, LPARAM lParam ) { /* 基底クラスメンバ */ CDialog::OnSize( wParam, lParam ); - ::GetWindowRect( GetHwnd(), &GetDllShareData().m_Common.m_sOthers.m_rcDiffDialog ); - RECT rc; POINT ptNew; ::GetWindowRect( GetHwnd(), &rc ); @@ -537,13 +546,6 @@ BOOL CDlgDiff::OnSize( WPARAM wParam, LPARAM lParam ) return TRUE; } -BOOL CDlgDiff::OnMove( WPARAM wParam, LPARAM lParam ) -{ - ::GetWindowRect( GetHwnd(), &GetDllShareData().m_Common.m_sOthers.m_rcDiffDialog ); - - return CDialog::OnMove( wParam, lParam ); -} - BOOL CDlgDiff::OnMinMaxInfo( LPARAM lParam ) { LPMINMAXINFO lpmmi = (LPMINMAXINFO) lParam; diff --git a/sakura_core/dlg/CDlgDiff.h b/sakura_core/dlg/CDlgDiff.h index ca77455ed7..44e3cfa326 100644 --- a/sakura_core/dlg/CDlgDiff.h +++ b/sakura_core/dlg/CDlgDiff.h @@ -68,8 +68,8 @@ class CDlgDiff final : public CDialog LPVOID GetHelpIdTable(void) override; INT_PTR DispatchEvent( HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam ) override; // 標準以外のメッセージを捕捉する BOOL OnInitDialog(HWND hwndDlg, WPARAM wParam, LPARAM lParam) override; + BOOL OnDestroy() override; BOOL OnSize( WPARAM wParam, LPARAM lParam ) override; - BOOL OnMove( WPARAM wParam, LPARAM lParam ) override; BOOL OnMinMaxInfo( LPARAM lParam ); void SetData( void ) override; /* ダイアログデータの設定 */ diff --git a/sakura_core/dlg/CDlgFavorite.cpp b/sakura_core/dlg/CDlgFavorite.cpp index 29d494fb3b..4b414b7888 100644 --- a/sakura_core/dlg/CDlgFavorite.cpp +++ b/sakura_core/dlg/CDlgFavorite.cpp @@ -486,6 +486,17 @@ BOOL CDlgFavorite::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) return CDialog::OnInitDialog( GetHwnd(), wParam, lParam ); } +BOOL CDlgFavorite::OnDestroy( void ) +{ + CDialog::OnDestroy(); + RECT& rect = GetDllShareData().m_Common.m_sOthers.m_rcFavoriteDialog; + rect.left = m_xPos; + rect.top = m_yPos; + rect.right = rect.left + m_nWidth; + rect.bottom = rect.top + m_nHeight; + return TRUE; +} + BOOL CDlgFavorite::OnBnClicked( int wID ) { switch( wID ) @@ -1189,8 +1200,6 @@ BOOL CDlgFavorite::OnSize( WPARAM wParam, LPARAM lParam ) /* 基底クラスメンバ */ CDialog::OnSize( wParam, lParam ); - ::GetWindowRect( GetHwnd(), &GetDllShareData().m_Common.m_sOthers.m_rcFavoriteDialog ); - RECT rc; POINT ptNew; ::GetWindowRect( GetHwnd(), &rc ); @@ -1209,13 +1218,6 @@ BOOL CDlgFavorite::OnSize( WPARAM wParam, LPARAM lParam ) return TRUE; } -BOOL CDlgFavorite::OnMove( WPARAM wParam, LPARAM lParam ) -{ - ::GetWindowRect( GetHwnd(), &GetDllShareData().m_Common.m_sOthers.m_rcFavoriteDialog ); - - return CDialog::OnMove( wParam, lParam ); -} - BOOL CDlgFavorite::OnMinMaxInfo( LPARAM lParam ) { LPMINMAXINFO lpmmi = (LPMINMAXINFO) lParam; diff --git a/sakura_core/dlg/CDlgFavorite.h b/sakura_core/dlg/CDlgFavorite.h index c75c6067e4..ef3ea96d1c 100644 --- a/sakura_core/dlg/CDlgFavorite.h +++ b/sakura_core/dlg/CDlgFavorite.h @@ -66,13 +66,13 @@ class CDlgFavorite final : public CDialog || 実装ヘルパ関数 */ BOOL OnInitDialog(HWND hwndDlg, WPARAM wParam, LPARAM lParam) override; + BOOL OnDestroy( void ) override; BOOL OnBnClicked(int wID) override; BOOL OnNotify(NMHDR* pNMHDR) override; BOOL OnActivate( WPARAM wParam, LPARAM lParam ) override; LPVOID GetHelpIdTable( void ) override; INT_PTR DispatchEvent( HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam ) override; // 標準以外のメッセージを捕捉する BOOL OnSize( WPARAM wParam, LPARAM lParam ) override; - BOOL OnMove( WPARAM wParam, LPARAM lParam ) override; BOOL OnMinMaxInfo( LPARAM lParam ); void SetData( void ) override; /* ダイアログデータの設定 */ diff --git a/sakura_core/dlg/CDlgTagJumpList.cpp b/sakura_core/dlg/CDlgTagJumpList.cpp index c8e1067145..c9503601f5 100644 --- a/sakura_core/dlg/CDlgTagJumpList.cpp +++ b/sakura_core/dlg/CDlgTagJumpList.cpp @@ -537,6 +537,17 @@ BOOL CDlgTagJumpList::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) return bRet; } +BOOL CDlgTagJumpList::OnDestroy( void ) +{ + CDialog::OnDestroy(); + RECT& rect = GetDllShareData().m_Common.m_sOthers.m_rcTagJumpDialog; + rect.left = m_xPos; + rect.top = m_yPos; + rect.right = rect.left + m_nWidth; + rect.bottom = rect.top + m_nHeight; + return TRUE; +} + BOOL CDlgTagJumpList::OnBnClicked( int wID ) { switch( wID ) @@ -601,8 +612,6 @@ BOOL CDlgTagJumpList::OnSize( WPARAM wParam, LPARAM lParam ) /* 基底クラスメンバ */ CDialog::OnSize( wParam, lParam ); - ::GetWindowRect( GetHwnd(), &GetDllShareData().m_Common.m_sOthers.m_rcTagJumpDialog ); - RECT rc; POINT ptNew; ::GetWindowRect( GetHwnd(), &rc ); @@ -616,13 +625,6 @@ BOOL CDlgTagJumpList::OnSize( WPARAM wParam, LPARAM lParam ) return TRUE; } -BOOL CDlgTagJumpList::OnMove( WPARAM wParam, LPARAM lParam ) -{ - ::GetWindowRect( GetHwnd(), &GetDllShareData().m_Common.m_sOthers.m_rcTagJumpDialog ); - - return CDialog::OnMove( wParam, lParam ); -} - BOOL CDlgTagJumpList::OnMinMaxInfo( LPARAM lParam ) { LPMINMAXINFO lpmmi = (LPMINMAXINFO) lParam; diff --git a/sakura_core/dlg/CDlgTagJumpList.h b/sakura_core/dlg/CDlgTagJumpList.h index be4a74166c..e6dc5e900e 100644 --- a/sakura_core/dlg/CDlgTagJumpList.h +++ b/sakura_core/dlg/CDlgTagJumpList.h @@ -78,10 +78,10 @@ class CDlgTagJumpList final : public CDialog || 実装ヘルパ関数 */ BOOL OnInitDialog(HWND hwndDlg, WPARAM wParam, LPARAM lParam) override; + BOOL OnDestroy( void ) override; BOOL OnBnClicked(int wID) override; INT_PTR DispatchEvent( HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam ) override; BOOL OnSize( WPARAM wParam, LPARAM lParam ) override; - BOOL OnMove( WPARAM wParam, LPARAM lParam ) override; BOOL OnMinMaxInfo( LPARAM lParam ); BOOL OnNotify(NMHDR* pNMHDR) override; // @@ 2005.03.31 MIK キーワード入力エリアのイベント処理 diff --git a/sakura_core/dlg/CDlgWindowList.cpp b/sakura_core/dlg/CDlgWindowList.cpp index 54760780d7..6bea5b34a9 100644 --- a/sakura_core/dlg/CDlgWindowList.cpp +++ b/sakura_core/dlg/CDlgWindowList.cpp @@ -236,12 +236,21 @@ BOOL CDlgWindowList::OnInitDialog(HWND hwndDlg, WPARAM wParam, LPARAM lParam) return CDialog::OnInitDialog(hwndDlg, wParam, lParam); } +BOOL CDlgWindowList::OnDestroy( void ) +{ + CDialog::OnDestroy(); + RECT& rect = GetDllShareData().m_Common.m_sOthers.m_rcWindowListDialog; + rect.left = m_xPos; + rect.top = m_yPos; + rect.right = rect.left + m_nWidth; + rect.bottom = rect.top + m_nHeight; + return TRUE; +} + BOOL CDlgWindowList::OnSize(WPARAM wParam, LPARAM lParam) { CDialog::OnSize(wParam, lParam); - ::GetWindowRect(GetHwnd(), &GetDllShareData().m_Common.m_sOthers.m_rcWindowListDialog); - RECT rc; POINT ptNew; ::GetWindowRect(GetHwnd(), &rc); @@ -255,13 +264,6 @@ BOOL CDlgWindowList::OnSize(WPARAM wParam, LPARAM lParam) return TRUE; } -BOOL CDlgWindowList::OnMove(WPARAM wParam, LPARAM lParam) -{ - ::GetWindowRect(GetHwnd(), &GetDllShareData().m_Common.m_sOthers.m_rcWindowListDialog); - - return CDialog::OnMove(wParam, lParam); -} - BOOL CDlgWindowList::OnMinMaxInfo(LPARAM lParam) { LPMINMAXINFO lpmmi = (LPMINMAXINFO) lParam; diff --git a/sakura_core/dlg/CDlgWindowList.h b/sakura_core/dlg/CDlgWindowList.h index 4588205224..271b432051 100644 --- a/sakura_core/dlg/CDlgWindowList.h +++ b/sakura_core/dlg/CDlgWindowList.h @@ -45,8 +45,8 @@ class CDlgWindowList final : public CDialog LPVOID GetHelpIdTable() override; INT_PTR DispatchEvent(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam) override; BOOL OnInitDialog(HWND hwndDlg, WPARAM wParam, LPARAM lParam) override; + BOOL OnDestroy( void ) override; BOOL OnSize(WPARAM wParam, LPARAM lParam) override; - BOOL OnMove(WPARAM wParam, LPARAM lParam) override; BOOL OnMinMaxInfo(LPARAM lParam); BOOL OnActivate(WPARAM wParam, LPARAM lParam) override; From cd585c5efe0eb1c4761973b6f11e10cdde84bd32 Mon Sep 17 00:00:00 2001 From: Katsuhisa Yuasa Date: Sun, 9 Dec 2018 21:54:29 +0900 Subject: [PATCH 0811/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDialog.cpp | 4 ++-- sakura_core/dlg/CDlgCompare.h | 2 +- sakura_core/dlg/CDlgDiff.cpp | 2 +- sakura_core/dlg/CDlgDiff.h | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sakura_core/dlg/CDialog.cpp b/sakura_core/dlg/CDialog.cpp index e2923604d3..d02285c429 100644 --- a/sakura_core/dlg/CDialog.cpp +++ b/sakura_core/dlg/CDialog.cpp @@ -248,11 +248,11 @@ void CDialog::SetDialogPosSize() rc.right -= diff; } if( rc.top < 0 ){ - rc.bottom += rc.top; + rc.bottom -= rc.top; rc.top = 0; } if( rc.left < 0 ){ - rc.right += rc.left; + rc.right -= rc.left; rc.left = 0; } m_xPos = rc.left; diff --git a/sakura_core/dlg/CDlgCompare.h b/sakura_core/dlg/CDlgCompare.h index 9838433662..5fcfa6f35e 100644 --- a/sakura_core/dlg/CDlgCompare.h +++ b/sakura_core/dlg/CDlgCompare.h @@ -49,7 +49,7 @@ class CDlgCompare final : public CDialog INT_PTR DispatchEvent( HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam ) override; // 標準以外のメッセージを捕捉する BOOL OnInitDialog(HWND hwndDlg, WPARAM wParam, LPARAM lParam) override; - BOOL OnDestroy() override; + BOOL OnDestroy( void ) override; BOOL OnSize( WPARAM wParam, LPARAM lParam ) override; BOOL OnMinMaxInfo( LPARAM lParam ); diff --git a/sakura_core/dlg/CDlgDiff.cpp b/sakura_core/dlg/CDlgDiff.cpp index 51f5781d84..bcce0f306c 100644 --- a/sakura_core/dlg/CDlgDiff.cpp +++ b/sakura_core/dlg/CDlgDiff.cpp @@ -517,7 +517,7 @@ BOOL CDlgDiff::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) return CDialog::OnInitDialog( hwndDlg, wParam, lParam ); } -BOOL CDlgDiff::OnDestroy() +BOOL CDlgDiff::OnDestroy( void ) { CDialog::OnDestroy(); RECT& rect = GetDllShareData().m_Common.m_sOthers.m_rcDiffDialog; diff --git a/sakura_core/dlg/CDlgDiff.h b/sakura_core/dlg/CDlgDiff.h index 44e3cfa326..425bd5f1a6 100644 --- a/sakura_core/dlg/CDlgDiff.h +++ b/sakura_core/dlg/CDlgDiff.h @@ -68,7 +68,7 @@ class CDlgDiff final : public CDialog LPVOID GetHelpIdTable(void) override; INT_PTR DispatchEvent( HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam ) override; // 標準以外のメッセージを捕捉する BOOL OnInitDialog(HWND hwndDlg, WPARAM wParam, LPARAM lParam) override; - BOOL OnDestroy() override; + BOOL OnDestroy( void ) override; BOOL OnSize( WPARAM wParam, LPARAM lParam ) override; BOOL OnMinMaxInfo( LPARAM lParam ); From c2a520b385aef5160c77945c7d8fb153006d81ed Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Sat, 24 Jul 2021 21:01:22 +0900 Subject: [PATCH 0812/1024] =?UTF-8?q?CDialog::SetDialogPosSize=E3=80=80?= =?UTF-8?q?=E3=81=AE=E5=87=A6=E7=90=86=E3=82=92=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1ドットの空きを入れる処理を元に戻す ウィンドウ位置を調整する処理をワークスペース座標のオフセットを考慮して行うように変更 --- sakura_core/dlg/CDialog.cpp | 66 ++++++++++++++++++++++++++++--------- 1 file changed, 51 insertions(+), 15 deletions(-) diff --git a/sakura_core/dlg/CDialog.cpp b/sakura_core/dlg/CDialog.cpp index d02285c429..e4b5ebf0cd 100644 --- a/sakura_core/dlg/CDialog.cpp +++ b/sakura_core/dlg/CDialog.cpp @@ -230,31 +230,67 @@ void CDialog::SetDialogPosSize() RECT rc; RECT rcWork; + RECT rcMonitor; rc.left = m_xPos; rc.top = m_yPos; rc.right = m_xPos + m_nWidth; rc.bottom = m_yPos + m_nHeight; - GetMonitorWorkRect(&rc, &rcWork); + + GetMonitorWorkRect(&rc, &rcWork, &rcMonitor); + + // 1ドットの空きを入れる + rcWork.top += 1; + rcWork.bottom -= 1; + rcWork.left += 1; + rcWork.right -= 1; + + // ワークスペース座標のオフセットを求める + // タスクバーが左や上にある場合にこの考慮が必要 + LONG xOffset = rcWork.left - rcMonitor.left; + LONG yOffset = rcWork.top - rcMonitor.top; + + // ワークスペース座標のオフセットを加算 + rc.left += xOffset; + rc.right += xOffset; + rc.top += yOffset; + rc.bottom += yOffset; + + // ワークスペース領域に収まるようにウィンドウ位置調整 LONG workHeight = rcWork.bottom - rcWork.top; LONG workWidth = rcWork.right - rcWork.left; - if( rc.bottom > workHeight ){ - LONG diff = rc.bottom - workHeight; - rc.top -= diff; - rc.bottom -= diff; + if( rc.bottom > rcWork.bottom ){ + if( m_nHeight > workHeight ){ + rc.top = rcWork.top; + rc.bottom = rc.top + m_nHeight; + }else { + rc.bottom = rcWork.bottom; + rc.top = rc.bottom - m_nHeight; + } } - if( rc.right > workWidth ){ - LONG diff = rc.right - workWidth; - rc.left -= diff; - rc.right -= diff; + if( rc.right > rcWork.right ){ + if( m_nWidth > workWidth ){ + rc.left = rc.left; + rc.right = rc.left + m_nHeight; + }else { + rc.right = rcWork.right; + rc.left = rc.right - m_nWidth; + } } - if( rc.top < 0 ){ - rc.bottom -= rc.top; - rc.top = 0; + if( rc.top < rcWork.top ){ + rc.top = rcWork.top; + rc.bottom = rc.top + m_nHeight; } - if( rc.left < 0 ){ - rc.right -= rc.left; - rc.left = 0; + if( rc.left < rcWork.left ){ + rc.left = rcWork.left; + rc.right = rc.left + m_nWidth; } + + // ワークスペース座標のオフセットを引いて元に戻す + rc.left -= xOffset; + rc.right -= xOffset; + rc.top -= yOffset; + rc.bottom -= yOffset; + m_xPos = rc.left; m_yPos = rc.top; m_nWidth = rc.right - rc.left; From 5ef3be1ed319d3e1a96abe0f5ff5f0512d289898 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 31 Jul 2021 06:53:27 +0900 Subject: [PATCH 0813/1024] =?UTF-8?q?EEolType::auto=5Fdetect=E3=82=92?= =?UTF-8?q?=E5=89=8A=E9=99=A4=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit EEolTypeをenum class化した際に追加した定義だが、かえって分かりづらくなっているので削除する。 --- sakura_core/CEol.h | 3 +-- sakura_core/cmd/CViewCommander.h | 2 +- sakura_core/cmd/CViewCommander_Edit_word_line.cpp | 2 +- sakura_core/view/CEditView.cpp | 8 ++++---- sakura_core/view/CEditView.h | 2 +- sakura_core/view/CEditView_Command.cpp | 4 ++-- 6 files changed, 10 insertions(+), 11 deletions(-) diff --git a/sakura_core/CEol.h b/sakura_core/CEol.h index 6ec5a8dc02..ba0ce5ded9 100644 --- a/sakura_core/CEol.h +++ b/sakura_core/CEol.h @@ -50,8 +50,7 @@ @date 2021/03/27 berryzplus 定数に意味のある名前を付ける */ enum class EEolType : char { - auto_detect = -1, //!< 行終端子の自動検出 - none, //!< 行終端子なし + none, //!< 行終端子なし(改行コード変換では「変換しない」) cr_and_lf, //!< \x0d\x0a 復帰改行 line_feed, //!< \x0a 改行 carriage_return, //!< \x0d 復帰 diff --git a/sakura_core/cmd/CViewCommander.h b/sakura_core/cmd/CViewCommander.h index 44938e9f6e..17285f36e7 100644 --- a/sakura_core/cmd/CViewCommander.h +++ b/sakura_core/cmd/CViewCommander.h @@ -216,7 +216,7 @@ class CViewCommander{ /* クリップボード系 */ void Command_CUT( void ); /* 切り取り(選択範囲をクリップボードにコピーして削除)*/ - void Command_COPY( bool bIgnoreLockAndDisable, bool bAddCRLFWhenCopy, EEolType neweol = EEolType::auto_detect );/* コピー(選択範囲をクリップボードにコピー) */ + void Command_COPY( bool bIgnoreLockAndDisable, bool bAddCRLFWhenCopy, EEolType neweol = EEolType::none );/* コピー(選択範囲をクリップボードにコピー) */ void Command_PASTE( int option ); /* 貼り付け(クリップボードから貼り付け)*/ void Command_PASTEBOX( int option ); /* 矩形貼り付け(クリップボードから矩形貼り付け)*/ //<< 2002/03/29 Azumaiya diff --git a/sakura_core/cmd/CViewCommander_Edit_word_line.cpp b/sakura_core/cmd/CViewCommander_Edit_word_line.cpp index 9541b08a23..eae40ad3bc 100644 --- a/sakura_core/cmd/CViewCommander_Edit_word_line.cpp +++ b/sakura_core/cmd/CViewCommander_Edit_word_line.cpp @@ -300,7 +300,7 @@ void CViewCommander::Command_CUT_LINE( void ) // 2007.10.04 ryoji 処理簡素化 m_pCommanderView->CopyCurLine( GetDllShareData().m_Common.m_sEdit.m_bAddCRLFWhenCopy, - EEolType::auto_detect, + EEolType::none, GetDllShareData().m_Common.m_sEdit.m_bEnableLineModePaste ); Command_DELETE_LINE(); diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index cf14f92e1e..065133f3eb 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -1802,7 +1802,7 @@ void CEditView::SplitBoxOnOff( BOOL bVert, BOOL bHorz, BOOL bSizeBox ) */ bool CEditView::GetSelectedDataSimple( CNativeW &cmemBuf ) { - return GetSelectedData(&cmemBuf, FALSE, NULL, FALSE, false, EEolType::auto_detect); + return GetSelectedData(&cmemBuf, FALSE, NULL, FALSE, false, EEolType::none); } /* 選択範囲のデータを取得 @@ -1936,7 +1936,7 @@ bool CEditView::GetSelectedData( } // 改行コードについて。 - if ( neweol == EEolType::auto_detect ) + if ( neweol == EEolType::none ) { nBufSize += wcslen(WCODE::CRLF); } @@ -1995,7 +1995,7 @@ bool CEditView::GetSelectedData( if( nIdxTo >= nLineLen ){ cmemBuf->AppendString( &pLine[nIdxFrom], nLineLen - 1 - nIdxFrom ); // Jul. 25, 2000 genta - cmemBuf->AppendString( ( neweol == EEolType::auto_detect ) ? + cmemBuf->AppendString( ( neweol == EEolType::none ) ? (pcLayout->GetLayoutEol()).GetValue2() : // コード保存 appendEol.GetValue2() ); // 新規改行コード } @@ -2010,7 +2010,7 @@ bool CEditView::GetSelectedData( bWithLineNumber /* 行番号を付与する */ ){ // Jul. 25, 2000 genta - cmemBuf->AppendString(( neweol == EEolType::auto_detect ) ? + cmemBuf->AppendString(( neweol == EEolType::none ) ? m_pcEditDoc->m_cDocEditor.GetNewLineCode().GetValue2() : // コード保存 appendEol.GetValue2() ); // 新規改行コード } diff --git a/sakura_core/view/CEditView.h b/sakura_core/view/CEditView.h index 485f5a5e50..3caf48a996 100644 --- a/sakura_core/view/CEditView.h +++ b/sakura_core/view/CEditView.h @@ -327,7 +327,7 @@ class CEditView // 2002/01/19 novice public属性に変更 bool GetSelectedDataSimple( CNativeW& cmemBuf );// 選択範囲のデータを取得 bool GetSelectedDataOne( CNativeW& cmemBuf, int nMaxLen ); - bool GetSelectedData( CNativeW* cmemBuf, BOOL bLineOnly, const wchar_t* pszQuote, BOOL bWithLineNumber, bool bAddCRLFWhenCopy, EEolType neweol = EEolType::auto_detect);/* 選択範囲のデータを取得 */ + bool GetSelectedData( CNativeW* cmemBuf, BOOL bLineOnly, const wchar_t* pszQuote, BOOL bWithLineNumber, bool bAddCRLFWhenCopy, EEolType neweol = EEolType::none);/* 選択範囲のデータを取得 */ int IsCurrentPositionSelected( CLayoutPoint ptCaretPos ); /* 指定カーソル位置が選択エリア内にあるか */ int IsCurrentPositionSelectedTEST( const CLayoutPoint& ptCaretPos, const CLayoutRange& sSelect ) const;/* 指定カーソル位置が選択エリア内にあるか */ // 2006.07.09 genta 行桁指定によるカーソル移動(選択領域を考慮) diff --git a/sakura_core/view/CEditView_Command.cpp b/sakura_core/view/CEditView_Command.cpp index 826938c0d7..4461173568 100644 --- a/sakura_core/view/CEditView_Command.cpp +++ b/sakura_core/view/CEditView_Command.cpp @@ -452,12 +452,12 @@ void CEditView::CopyCurLine( cmemBuf.SetString( pcLayout->GetPtr(), pcLayout->GetLengthWithoutEOL() ); if( pcLayout->GetLayoutEol().GetLen() != 0 ){ cmemBuf.AppendString( - ( neweol == EEolType::auto_detect ) ? + ( neweol == EEolType::none ) ? pcLayout->GetLayoutEol().GetValue2() : CEol(neweol).GetValue2() ); }else if( bAddCRLFWhenCopy ){ // 2007.10.08 ryoji bAddCRLFWhenCopy対応処理追加 cmemBuf.AppendString( - ( neweol == EEolType::auto_detect ) ? + ( neweol == EEolType::none ) ? WCODE::CRLF : CEol(neweol).GetValue2() ); } From d8e01a42a57d11ddd044b73ea524367d01c388d7 Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Sun, 29 Aug 2021 08:47:37 +0900 Subject: [PATCH 0814/1024] =?UTF-8?q?Grep=20=E7=BD=AE=E6=8F=9B=E3=83=80?= =?UTF-8?q?=E3=82=A4=E3=82=A2=E3=83=AD=E3=82=B0=E3=82=92=E8=A1=A8=E7=A4=BA?= =?UTF-8?q?=E3=81=99=E3=82=8B=E3=81=A8=EF=BC=8C=E7=BD=AE=E6=8F=9B=E5=89=8D?= =?UTF-8?q?=20=E3=81=A8=20=E7=BD=AE=E6=8F=9B=E5=BE=8C=E3=81=AE=E4=B8=A1?= =?UTF-8?q?=E6=96=B9=E3=81=8C=E9=81=B8=E6=8A=9E=E7=8A=B6=E6=85=8B=E3=81=AB?= =?UTF-8?q?=E3=81=AA=E3=82=8B=E7=8F=BE=E8=B1=A1=E3=81=8C=E7=99=BA=E7=94=9F?= =?UTF-8?q?=E3=81=97=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgGrepReplace.cpp | 19 +++++++++++++++---- sakura_core/dlg/CDlgGrepReplace.h | 1 + 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/sakura_core/dlg/CDlgGrepReplace.cpp b/sakura_core/dlg/CDlgGrepReplace.cpp index 8891d7cf3f..0610a02272 100644 --- a/sakura_core/dlg/CDlgGrepReplace.cpp +++ b/sakura_core/dlg/CDlgGrepReplace.cpp @@ -146,6 +146,21 @@ BOOL CDlgGrepReplace::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) return bRet; } +BOOL CDlgGrepReplace::OnCbnDropDown( HWND hwndCtl, int wID ) +{ + switch( wID ){ + case IDC_COMBO_TEXT2: + if ( ::SendMessage(hwndCtl, CB_GETCOUNT, 0L, 0L) == 0) { + const auto& keys = m_pShareData->m_sSearchKeywords.m_aReplaceKeys; + for( int i = 0; i < keys.size(); ++i ){ + Combo_AddString( hwndCtl, keys[i] ); + } + } + break; + } + return CDlgGrep::OnCbnDropDown( hwndCtl, wID ); +} + BOOL CDlgGrepReplace::OnDestroy() { m_cFontText2.ReleaseOnDestroy(); @@ -184,10 +199,6 @@ void CDlgGrepReplace::SetData( void ) { /* 置換後 */ ::DlgItem_SetText( GetHwnd(), IDC_COMBO_TEXT2, m_strText2.c_str() ); - HWND hwndCombo = GetItemHwnd( IDC_COMBO_TEXT2 ); - for( int i = 0; i < m_pShareData->m_sSearchKeywords.m_aReplaceKeys.size(); ++i ){ - Combo_AddString( hwndCombo, m_pShareData->m_sSearchKeywords.m_aReplaceKeys[i] ); - } CheckDlgButtonBool( GetHwnd(), IDC_CHK_BACKUP, m_bBackup ); diff --git a/sakura_core/dlg/CDlgGrepReplace.h b/sakura_core/dlg/CDlgGrepReplace.h index e9659783e2..6614579882 100644 --- a/sakura_core/dlg/CDlgGrepReplace.h +++ b/sakura_core/dlg/CDlgGrepReplace.h @@ -50,6 +50,7 @@ class CDlgGrepReplace final : public CDlgGrep || 実装ヘルパ関数 */ BOOL OnInitDialog(HWND hwndDlg, WPARAM wParam, LPARAM lParam) override; + BOOL OnCbnDropDown( HWND hwndCtl, int wID ) override; BOOL OnDestroy() override; BOOL OnBnClicked(int wID) override; LPVOID GetHelpIdTable(void) override; //@@@ 2002.01.18 add From 242f7853570a8837a0b3f72fb26b2927b33c4b05 Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Sun, 29 Aug 2021 20:00:17 +0900 Subject: [PATCH 0815/1024] =?UTF-8?q?=E5=A4=96=E9=83=A8=E3=82=B3=E3=83=9E?= =?UTF-8?q?=E3=83=B3=E3=83=89=E5=AE=9F=E8=A1=8C=E3=81=A7=E3=82=AD=E3=83=A3?= =?UTF-8?q?=E3=83=B3=E3=82=BB=E3=83=AB=E3=81=97=E3=81=9F=E6=99=82=E3=81=AE?= =?UTF-8?q?=E3=83=A1=E3=83=83=E3=82=BB=E3=83=BC=E3=82=B8=E3=81=8C=E7=95=B0?= =?UTF-8?q?=E3=81=AA=E3=82=8B=E5=95=8F=E9=A1=8C=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CEditView_ExecCmd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/view/CEditView_ExecCmd.cpp b/sakura_core/view/CEditView_ExecCmd.cpp index d85b6babfd..82bfcdea85 100644 --- a/sakura_core/view/CEditView_ExecCmd.cpp +++ b/sakura_core/view/CEditView_ExecCmd.cpp @@ -570,7 +570,7 @@ bool CEditView::ExecCmd( const WCHAR* pszCmd, int nFlgOpt, const WCHAR* pszCurDi if( bCancelEnd && bOutputExtInfo ){ // 2006.12.03 maru アウトプットウィンドウにのみ出力 //最後にテキストを追加 - oa.OutputW( LS(STR_EDITVIEW_EXECCMD_STOP) ); + oa.OutputW( CLoadString().LoadStringW(STR_EDITVIEW_EXECCMD_STOP) ); } { From d0d63b777ad7ca9e77fb061ff3c401e61a2f10ef Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Mon, 30 Aug 2021 07:56:42 +0900 Subject: [PATCH 0816/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CEditView_ExecCmd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/view/CEditView_ExecCmd.cpp b/sakura_core/view/CEditView_ExecCmd.cpp index 82bfcdea85..b8abba2eef 100644 --- a/sakura_core/view/CEditView_ExecCmd.cpp +++ b/sakura_core/view/CEditView_ExecCmd.cpp @@ -570,7 +570,7 @@ bool CEditView::ExecCmd( const WCHAR* pszCmd, int nFlgOpt, const WCHAR* pszCurDi if( bCancelEnd && bOutputExtInfo ){ // 2006.12.03 maru アウトプットウィンドウにのみ出力 //最後にテキストを追加 - oa.OutputW( CLoadString().LoadStringW(STR_EDITVIEW_EXECCMD_STOP) ); + oa.OutputW( CLoadString().LoadString(STR_EDITVIEW_EXECCMD_STOP) ); } { From 3ca453435c08393561a82c8bed6a57ad0bbfd573 Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Wed, 8 Sep 2021 00:03:16 +0900 Subject: [PATCH 0817/1024] =?UTF-8?q?=E3=83=84=E3=83=BC=E3=83=AB=E3=83=90?= =?UTF-8?q?=E3=83=BC=E4=B8=8A=E3=81=AE=E3=82=B3=E3=83=B3=E3=83=9C=E3=83=9C?= =?UTF-8?q?=E3=83=83=E3=82=AF=E3=82=B9=E3=82=92=E4=BD=9C=E6=88=90=E5=BE=8C?= =?UTF-8?q?=E3=81=AB=E6=A8=AA=E5=B9=85=E3=82=92=E8=AA=BF=E6=95=B4=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=81=AE=E3=81=A7=E3=81=AF=E3=81=AA=E3=81=8F=E3=80=81?= =?UTF-8?q?CreateWindow=E3=80=80=E3=81=AB=E6=B8=A1=E3=81=99=E5=80=A4?= =?UTF-8?q?=E3=82=92=E8=AA=BF=E6=95=B4=20=E3=82=AD=E3=83=BC=E3=83=9C?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=83=95=E3=82=A9=E3=83=BC=E3=82=AB=E3=82=B9?= =?UTF-8?q?=E3=81=8C=E5=BD=93=E3=81=9F=E3=81=A3=E3=81=A6=E3=81=84=E3=81=AA?= =?UTF-8?q?=E3=81=84=E3=81=AB=E3=82=82=E3=81=8B=E3=81=8B=E3=82=8F=E3=82=89?= =?UTF-8?q?=E3=81=9A=EF=BC=8C=E6=96=87=E5=AD=97=E5=88=97=E3=81=8C=E9=81=B8?= =?UTF-8?q?=E6=8A=9E=E7=8A=B6=E6=85=8B=E3=81=A8=E3=81=97=E3=81=A6=E8=A1=A8?= =?UTF-8?q?=E7=A4=BA=E3=81=95=E3=82=8C=E3=82=8B=E7=8F=BE=E8=B1=A1=E3=81=8C?= =?UTF-8?q?=E8=B5=B7=E3=81=8D=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=E3=81=99=E3=82=8B=E7=82=BA=E3=81=AE=E5=AF=BE=E7=AD=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/window/CMainToolBar.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/sakura_core/window/CMainToolBar.cpp b/sakura_core/window/CMainToolBar.cpp index 33659b608f..b3d2a4b15d 100644 --- a/sakura_core/window/CMainToolBar.cpp +++ b/sakura_core/window/CMainToolBar.cpp @@ -293,6 +293,9 @@ void CMainToolBar::CreateToolBar( void ) //位置とサイズを取得する rc.right = rc.left = rc.top = rc.bottom = 0; Toolbar_GetItemRect( m_hwndToolBar, count-1, &rc ); + // Social Distance + rc.left += cxBorder; + rc.right -= cxBorder; //コンボボックスを作る m_hwndSearchBox = CreateWindow( WC_COMBOBOX, L"Combo", @@ -334,15 +337,15 @@ void CMainToolBar::CreateToolBar( void ) CDialog::SetComboBoxDeleter(m_hwndSearchBox, &m_cRecentSearch); - // コンボボックスの位置と幅を調整する + // コンボボックスの垂直位置を調整する CMyRect rcCombo; ::GetWindowRect( m_hwndSearchBox, &rcCombo ); ::SetWindowPos( m_hwndSearchBox, NULL, - rc.left + cxBorder, + rc.left, //作ったときと同じ値を指定 rc.top + (rc.bottom - rc.top - rcCombo.Height()) / 2, - rcCombo.Width() - cxBorder * 2, - rcCombo.Height(), - SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSENDCHANGING ); + 0, //rcCombo.Width()のまま変えない + 0, //rcCombo.Height()のまま変えない + SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSENDCHANGING ); } break; From 634008be283f4718b86b5fe2a3ae3c7577a482a8 Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Tue, 21 Sep 2021 00:20:26 +0900 Subject: [PATCH 0818/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E3=81=AB=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CEditView_ExecCmd.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sakura_core/view/CEditView_ExecCmd.cpp b/sakura_core/view/CEditView_ExecCmd.cpp index b8abba2eef..5f187f2da4 100644 --- a/sakura_core/view/CEditView_ExecCmd.cpp +++ b/sakura_core/view/CEditView_ExecCmd.cpp @@ -570,7 +570,9 @@ bool CEditView::ExecCmd( const WCHAR* pszCmd, int nFlgOpt, const WCHAR* pszCurDi if( bCancelEnd && bOutputExtInfo ){ // 2006.12.03 maru アウトプットウィンドウにのみ出力 //最後にテキストを追加 - oa.OutputW( CLoadString().LoadString(STR_EDITVIEW_EXECCMD_STOP) ); + // L"\r\n中断しました。\r\n" + std::wstring msg( LS(STR_EDITVIEW_EXECCMD_STOP) ); + oa.OutputW( msg.c_str(), (int)msg.length() ); } { From efe00be2af720e40c0dc0695a85ea4ab696d71f9 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Tue, 21 Sep 2021 02:12:41 +0900 Subject: [PATCH 0819/1024] =?UTF-8?q?=E3=83=97=E3=83=AD=E3=82=B0=E3=83=AC?= =?UTF-8?q?=E3=82=B9=E3=83=90=E3=83=BC=E3=81=AE=E8=A1=A8=E7=A4=BA=E5=88=87?= =?UTF-8?q?=E3=82=8A=E6=9B=BF=E3=81=88=E6=96=B9=E6=B3=95=E3=82=92=E5=A4=89?= =?UTF-8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/uiparts/CVisualProgress.cpp | 4 ++-- sakura_core/window/CMainStatusBar.cpp | 28 +++++++++++++++++++++++++ sakura_core/window/CMainStatusBar.h | 2 ++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/sakura_core/uiparts/CVisualProgress.cpp b/sakura_core/uiparts/CVisualProgress.cpp index bdc460a0a9..dbee71daf5 100644 --- a/sakura_core/uiparts/CVisualProgress.cpp +++ b/sakura_core/uiparts/CVisualProgress.cpp @@ -95,7 +95,7 @@ void CVisualProgress::_Begin() //プログレスバー HWND hwndProgress = CEditWnd::getInstance()->m_cStatusBar.GetProgressHwnd(); if( hwndProgress ){ - ::ShowWindow( hwndProgress, SW_SHOW ); + CEditWnd::getInstance()->m_cStatusBar.ShowProgressBar(); //範囲設定・リセット Progress_SetRange( hwndProgress, 0, 101 ); Progress_SetPos( hwndProgress, 0); @@ -121,7 +121,7 @@ void CVisualProgress::_End() HWND hwndProgress = CEditWnd::getInstance()->m_cStatusBar.GetProgressHwnd(); if( hwndProgress ){ Progress_SetPos( hwndProgress, 0); - ::ShowWindow( hwndProgress, SW_HIDE ); + CEditWnd::getInstance()->m_cStatusBar.HideProgressBar(); } //砂時計 diff --git a/sakura_core/window/CMainStatusBar.cpp b/sakura_core/window/CMainStatusBar.cpp index 4d20f02302..80e1b9f9f8 100644 --- a/sakura_core/window/CMainStatusBar.cpp +++ b/sakura_core/window/CMainStatusBar.cpp @@ -194,3 +194,31 @@ bool CMainStatusBar::SetStatusText(int nIndex, int nOption, const WCHAR* pszText } return bDraw; } + +/*! + @breif プログレスバーを表示する +*/ +void CMainStatusBar::ShowProgressBar() const { + if (m_hwndStatusBar && m_hwndProgressBar) { + RECT rcProgressArea = {}; + // プログレスバーを表示するステータスバー上の領域を取得 + ApiWrap::StatusBar_GetRect(m_hwndStatusBar, 0, &rcProgressArea); + ::ShowWindow(m_hwndProgressBar, SW_SHOW); + ::InvalidateRect(m_hwndStatusBar, &rcProgressArea, TRUE); + ::UpdateWindow(m_hwndStatusBar); + } +} + +/*! + @breif プログレスバーを非表示にする +*/ +void CMainStatusBar::HideProgressBar() const { + if (m_hwndStatusBar && m_hwndProgressBar) { + RECT rcProgressArea = {}; + // プログレスバーが表示されているステータスバー上の領域を取得 + ApiWrap::StatusBar_GetRect(m_hwndStatusBar, 0, &rcProgressArea); + ::ShowWindow(m_hwndProgressBar, SW_HIDE); + ::InvalidateRect(m_hwndStatusBar, &rcProgressArea, TRUE); + ::UpdateWindow(m_hwndStatusBar); + } +} diff --git a/sakura_core/window/CMainStatusBar.h b/sakura_core/window/CMainStatusBar.h index 9b8b7c2686..a4687761f3 100644 --- a/sakura_core/window/CMainStatusBar.h +++ b/sakura_core/window/CMainStatusBar.h @@ -56,6 +56,8 @@ class CMainStatusBar : public CDocListenerEx{ //設定 bool SetStatusText(int nIndex, int nOption, const WCHAR* pszText, size_t textLen = SIZE_MAX); + void ShowProgressBar() const; // プログレスバーを表示する + void HideProgressBar() const; // プログレスバーを非表示にする private: CEditWnd* m_pOwner; HWND m_hwndStatusBar; From fd450ba9ecdff440f53f817799f7b516cc99161f Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Wed, 22 Sep 2021 08:23:33 +0900 Subject: [PATCH 0820/1024] =?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=81=AE=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/window/CMainStatusBar.cpp | 6 ------ sakura_core/window/CMainStatusBar.h | 4 ++-- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/sakura_core/window/CMainStatusBar.cpp b/sakura_core/window/CMainStatusBar.cpp index 80e1b9f9f8..a9245671a6 100644 --- a/sakura_core/window/CMainStatusBar.cpp +++ b/sakura_core/window/CMainStatusBar.cpp @@ -195,9 +195,6 @@ bool CMainStatusBar::SetStatusText(int nIndex, int nOption, const WCHAR* pszText return bDraw; } -/*! - @breif プログレスバーを表示する -*/ void CMainStatusBar::ShowProgressBar() const { if (m_hwndStatusBar && m_hwndProgressBar) { RECT rcProgressArea = {}; @@ -209,9 +206,6 @@ void CMainStatusBar::ShowProgressBar() const { } } -/*! - @breif プログレスバーを非表示にする -*/ void CMainStatusBar::HideProgressBar() const { if (m_hwndStatusBar && m_hwndProgressBar) { RECT rcProgressArea = {}; diff --git a/sakura_core/window/CMainStatusBar.h b/sakura_core/window/CMainStatusBar.h index a4687761f3..e46a449aa0 100644 --- a/sakura_core/window/CMainStatusBar.h +++ b/sakura_core/window/CMainStatusBar.h @@ -56,8 +56,8 @@ class CMainStatusBar : public CDocListenerEx{ //設定 bool SetStatusText(int nIndex, int nOption, const WCHAR* pszText, size_t textLen = SIZE_MAX); - void ShowProgressBar() const; // プログレスバーを表示する - void HideProgressBar() const; // プログレスバーを非表示にする + void ShowProgressBar() const; + void HideProgressBar() const; private: CEditWnd* m_pOwner; HWND m_hwndStatusBar; From 13ee73198370145c3bbc39d13d7f25756c80bcc7 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Thu, 23 Sep 2021 00:11:10 +0900 Subject: [PATCH 0821/1024] =?UTF-8?q?=E3=83=A1=E3=82=BD=E3=83=83=E3=83=89?= =?UTF-8?q?=E3=82=92=E4=B8=80=E3=81=A4=E3=81=AB=E3=81=BE=E3=81=A8=E3=82=81?= =?UTF-8?q?=E3=80=81=E5=BC=95=E6=95=B0=E5=80=A4=E3=81=A7=E5=88=87=E3=82=8A?= =?UTF-8?q?=E6=9B=BF=E3=81=88=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89?= =?UTF-8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/uiparts/CVisualProgress.cpp | 4 ++-- sakura_core/window/CMainStatusBar.cpp | 21 ++++++++------------- sakura_core/window/CMainStatusBar.h | 3 +-- 3 files changed, 11 insertions(+), 17 deletions(-) diff --git a/sakura_core/uiparts/CVisualProgress.cpp b/sakura_core/uiparts/CVisualProgress.cpp index dbee71daf5..9b252f90c6 100644 --- a/sakura_core/uiparts/CVisualProgress.cpp +++ b/sakura_core/uiparts/CVisualProgress.cpp @@ -95,7 +95,7 @@ void CVisualProgress::_Begin() //プログレスバー HWND hwndProgress = CEditWnd::getInstance()->m_cStatusBar.GetProgressHwnd(); if( hwndProgress ){ - CEditWnd::getInstance()->m_cStatusBar.ShowProgressBar(); + CEditWnd::getInstance()->m_cStatusBar.ShowProgressBar(true); //範囲設定・リセット Progress_SetRange( hwndProgress, 0, 101 ); Progress_SetPos( hwndProgress, 0); @@ -121,7 +121,7 @@ void CVisualProgress::_End() HWND hwndProgress = CEditWnd::getInstance()->m_cStatusBar.GetProgressHwnd(); if( hwndProgress ){ Progress_SetPos( hwndProgress, 0); - CEditWnd::getInstance()->m_cStatusBar.HideProgressBar(); + CEditWnd::getInstance()->m_cStatusBar.ShowProgressBar(false); } //砂時計 diff --git a/sakura_core/window/CMainStatusBar.cpp b/sakura_core/window/CMainStatusBar.cpp index a9245671a6..df6a6eff94 100644 --- a/sakura_core/window/CMainStatusBar.cpp +++ b/sakura_core/window/CMainStatusBar.cpp @@ -195,23 +195,18 @@ bool CMainStatusBar::SetStatusText(int nIndex, int nOption, const WCHAR* pszText return bDraw; } -void CMainStatusBar::ShowProgressBar() const { +//! プログレスバーの表示/非表示を切り替える +void CMainStatusBar::ShowProgressBar(bool bShow) const { if (m_hwndStatusBar && m_hwndProgressBar) { - RECT rcProgressArea = {}; // プログレスバーを表示するステータスバー上の領域を取得 - ApiWrap::StatusBar_GetRect(m_hwndStatusBar, 0, &rcProgressArea); - ::ShowWindow(m_hwndProgressBar, SW_SHOW); - ::InvalidateRect(m_hwndStatusBar, &rcProgressArea, TRUE); - ::UpdateWindow(m_hwndStatusBar); - } -} - -void CMainStatusBar::HideProgressBar() const { - if (m_hwndStatusBar && m_hwndProgressBar) { RECT rcProgressArea = {}; - // プログレスバーが表示されているステータスバー上の領域を取得 ApiWrap::StatusBar_GetRect(m_hwndStatusBar, 0, &rcProgressArea); - ::ShowWindow(m_hwndProgressBar, SW_HIDE); + if (bShow) { + ::ShowWindow(m_hwndProgressBar, SW_SHOW); + } else { + ::ShowWindow(m_hwndProgressBar, SW_HIDE); + } + // プログレスバー表示領域を再描画 ::InvalidateRect(m_hwndStatusBar, &rcProgressArea, TRUE); ::UpdateWindow(m_hwndStatusBar); } diff --git a/sakura_core/window/CMainStatusBar.h b/sakura_core/window/CMainStatusBar.h index e46a449aa0..4720b5d2cd 100644 --- a/sakura_core/window/CMainStatusBar.h +++ b/sakura_core/window/CMainStatusBar.h @@ -56,8 +56,7 @@ class CMainStatusBar : public CDocListenerEx{ //設定 bool SetStatusText(int nIndex, int nOption, const WCHAR* pszText, size_t textLen = SIZE_MAX); - void ShowProgressBar() const; - void HideProgressBar() const; + void ShowProgressBar(bool bShow) const; private: CEditWnd* m_pOwner; HWND m_hwndStatusBar; From b43e27c648b75ea8efaa524967778482c144d881 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Thu, 23 Sep 2021 14:40:04 +0900 Subject: [PATCH 0822/1024] =?UTF-8?q?=E5=BC=95=E6=95=B0=E3=81=AE=E3=82=AD?= =?UTF-8?q?=E3=83=A3=E3=82=B9=E3=83=88=E6=BC=8F=E3=82=8C=E3=81=AB=E8=AD=A6?= =?UTF-8?q?=E5=91=8A=E3=81=8C=E5=87=BA=E3=81=A6=E3=81=84=E3=82=8B=E3=81=AE?= =?UTF-8?q?=E3=82=AD=E3=83=A3=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CGrepAgent.cpp | 4 ++-- sakura_core/view/CEditView_Command.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sakura_core/CGrepAgent.cpp b/sakura_core/CGrepAgent.cpp index eb110e71d6..d404e993ec 100644 --- a/sakura_core/CGrepAgent.cpp +++ b/sakura_core/CGrepAgent.cpp @@ -304,9 +304,9 @@ int GetHwndTitle(HWND& hWndTarget, CNativeW* pmemTitle, WCHAR* pszWindowName, WC return 0; // ハンドルGrepではない } #ifdef _WIN64 - _stscanf(pszFile + 6, L"%016I64x", &hWndTarget); + _stscanf(pszFile + 6, L"%016I64x", (size_t*)&hWndTarget); #else - _stscanf(pszFile + 6, L"%08x", &hWndTarget); + _stscanf(pszFile + 6, L"%08x", (size_t*)&hWndTarget); #endif if( pmemTitle ){ const wchar_t* p = L"Window:["; diff --git a/sakura_core/view/CEditView_Command.cpp b/sakura_core/view/CEditView_Command.cpp index 4461173568..b2d91c3af5 100644 --- a/sakura_core/view/CEditView_Command.cpp +++ b/sakura_core/view/CEditView_Command.cpp @@ -80,9 +80,9 @@ bool CEditView::TagJumpSub( HWND hwndTarget = NULL; if( 0 == wcsncmp(pszFileName, L":HWND:[", 7) ){ #ifdef _WIN64 - _stscanf(pszFileName + 7, L"%016I64x", &hwndTarget); + _stscanf(pszFileName + 7, L"%016I64x", (size_t*)&hwndTarget); #else - _stscanf(pszFileName + 7, L"%08x", &hwndTarget); + _stscanf(pszFileName + 7, L"%08x", (size_t*)&hwndTarget); #endif if( !IsSakuraMainWindow(hwndTarget) ){ return false; From df391abfbede6c50e77ccae2496742e7d99aadd2 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Thu, 23 Sep 2021 14:56:21 +0900 Subject: [PATCH 0823/1024] =?UTF-8?q?=E5=86=97=E9=95=B7=E3=81=AA=E3=83=97?= =?UTF-8?q?=E3=83=AA=E3=83=97=E3=83=AD=E3=82=BB=E3=83=83=E3=82=B5=E5=88=86?= =?UTF-8?q?=E5=B2=90=E3=82=92=E9=99=A4=E5=8E=BB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 認識できる最大文字数まで読んで構わない場合、桁数を指定しなくても分岐しなくても同じ意味になる。 --- sakura_core/CGrepAgent.cpp | 6 +----- sakura_core/view/CEditView_Command.cpp | 6 +----- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/sakura_core/CGrepAgent.cpp b/sakura_core/CGrepAgent.cpp index d404e993ec..a57ec39fa7 100644 --- a/sakura_core/CGrepAgent.cpp +++ b/sakura_core/CGrepAgent.cpp @@ -303,11 +303,7 @@ int GetHwndTitle(HWND& hWndTarget, CNativeW* pmemTitle, WCHAR* pszWindowName, WC if( 0 != wcsncmp(L":HWND:", pszFile, 6) ){ return 0; // ハンドルGrepではない } -#ifdef _WIN64 - _stscanf(pszFile + 6, L"%016I64x", (size_t*)&hWndTarget); -#else - _stscanf(pszFile + 6, L"%08x", (size_t*)&hWndTarget); -#endif + _stscanf(pszFile + 6, L"%x", (size_t*)&hWndTarget); if( pmemTitle ){ const wchar_t* p = L"Window:["; pmemTitle->SetStringHoldBuffer(p, 8); diff --git a/sakura_core/view/CEditView_Command.cpp b/sakura_core/view/CEditView_Command.cpp index b2d91c3af5..9f34c0cf83 100644 --- a/sakura_core/view/CEditView_Command.cpp +++ b/sakura_core/view/CEditView_Command.cpp @@ -79,11 +79,7 @@ bool CEditView::TagJumpSub( WCHAR szJumpToFile[1024]; HWND hwndTarget = NULL; if( 0 == wcsncmp(pszFileName, L":HWND:[", 7) ){ -#ifdef _WIN64 - _stscanf(pszFileName + 7, L"%016I64x", (size_t*)&hwndTarget); -#else - _stscanf(pszFileName + 7, L"%08x", (size_t*)&hwndTarget); -#endif + _stscanf(pszFileName + 7, L"%x", (size_t*)&hwndTarget); if( !IsSakuraMainWindow(hwndTarget) ){ return false; } From e8f0e577488096cecf0792cc11a25b739eb2c1a6 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Thu, 23 Sep 2021 15:16:18 +0900 Subject: [PATCH 0824/1024] =?UTF-8?q?=E5=91=A8=E8=BE=BA=E3=82=B3=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=82=92=E3=83=AA=E3=83=95=E3=82=A1=E3=82=AF=E3=82=BF?= =?UTF-8?q?=E3=83=AA=E3=83=B3=E3=82=B0=E3=81=97=E3=81=A6=E3=82=A8=E3=83=A9?= =?UTF-8?q?=E3=83=BC=E8=80=90=E6=80=A7=E3=82=92=E4=B8=8A=E3=81=92=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CGrepAgent.cpp | 13 ++++++++----- sakura_core/view/CEditView_Command.cpp | 9 +++++---- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/sakura_core/CGrepAgent.cpp b/sakura_core/CGrepAgent.cpp index a57ec39fa7..f8e2909231 100644 --- a/sakura_core/CGrepAgent.cpp +++ b/sakura_core/CGrepAgent.cpp @@ -300,17 +300,20 @@ void CGrepAgent::AddTail( CEditView* pcEditView, const CNativeW& cmem, bool bAdd int GetHwndTitle(HWND& hWndTarget, CNativeW* pmemTitle, WCHAR* pszWindowName, WCHAR* pszWindowPath, const WCHAR* pszFile) { - if( 0 != wcsncmp(L":HWND:", pszFile, 6) ){ + hWndTarget = nullptr; //out引数をクリアする + + constexpr auto& szTargetPrefix = L":HWND:"; + constexpr auto cchTargetPrefix = _countof(szTargetPrefix) - 1; + if( 0 != wcsncmp(pszFile, szTargetPrefix, cchTargetPrefix) ){ return 0; // ハンドルGrepではない } - _stscanf(pszFile + 6, L"%x", (size_t*)&hWndTarget); + if( 0 >= ::swscanf_s(pszFile + cchTargetPrefix, L"%x", (size_t*)&hWndTarget) || !IsSakuraMainWindow(hWndTarget) ){ + return -1; // ハンドルを読み取れなかった、または、対象ウインドウハンドルが存在しない + } if( pmemTitle ){ const wchar_t* p = L"Window:["; pmemTitle->SetStringHoldBuffer(p, 8); } - if( !IsSakuraMainWindow(hWndTarget) ){ - return -1; - } ::SendMessageAny(hWndTarget, MYWM_GETFILEINFO, 0, 0); EditInfo* editInfo = &(GetDllShareData().m_sWorkBuffer.m_EditInfo_MYWM_GETFILEINFO); if( '\0' == editInfo->m_szPath[0] ){ diff --git a/sakura_core/view/CEditView_Command.cpp b/sakura_core/view/CEditView_Command.cpp index 9f34c0cf83..f5f06a6aa6 100644 --- a/sakura_core/view/CEditView_Command.cpp +++ b/sakura_core/view/CEditView_Command.cpp @@ -77,10 +77,11 @@ bool CEditView::TagJumpSub( // 予め絶対パスに変換する.(キーワードヘルプジャンプで用いる) // 2007.05.19 ryoji 相対パスは設定ファイルからのパスを優先 WCHAR szJumpToFile[1024]; - HWND hwndTarget = NULL; - if( 0 == wcsncmp(pszFileName, L":HWND:[", 7) ){ - _stscanf(pszFileName + 7, L"%x", (size_t*)&hwndTarget); - if( !IsSakuraMainWindow(hwndTarget) ){ + HWND hwndTarget = nullptr; + constexpr auto& szTargetPrefix = L":HWND:["; + constexpr auto cchTargetPrefix = _countof(szTargetPrefix) - 1; + if( 0 == wcsncmp(pszFileName, szTargetPrefix, cchTargetPrefix) ){ + if( 0 >= ::swscanf_s(pszFileName + cchTargetPrefix, L"%x", (size_t*)&hwndTarget) || !IsSakuraMainWindow(hwndTarget) ){ return false; } }else{ From 7ff9a1aab73a4e37538ea3e3fb1e79fc5b12fd40 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sat, 25 Sep 2021 22:01:27 +0900 Subject: [PATCH 0825/1024] =?UTF-8?q?windows10SDK=E3=82=92vs2019=E5=90=91?= =?UTF-8?q?=E3=81=91=E3=81=AB=E6=9B=B4=E6=96=B0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vsconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.vsconfig b/.vsconfig index dcd96b09b2..e28e22f2de 100644 --- a/.vsconfig +++ b/.vsconfig @@ -6,7 +6,7 @@ "microsoft.visualstudio.component.vc.diagnostictools", "microsoft.visualstudio.component.vc.cmake.project", "microsoft.visualstudio.component.vc.atlmfc", - "microsoft.visualstudio.component.windows10sdk.17763", + "microsoft.visualstudio.component.windows10sdk.18362", "microsoft.visualstudio.component.vc.testadapterforgoogletest" ] } \ No newline at end of file From db3c870acdda2c3c186ab0b124ca9293b877cfb4 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sat, 25 Sep 2021 22:03:13 +0900 Subject: [PATCH 0826/1024] =?UTF-8?q?sakura.vcxproj=E3=81=AE=E3=83=93?= =?UTF-8?q?=E3=83=AB=E3=83=89=E8=A8=AD=E5=AE=9A=E3=82=92=E3=80=8C=E6=89=8B?= =?UTF-8?q?=E4=BD=9C=E3=82=8A=E4=BB=95=E6=A7=98=E3=80=8D=E3=81=AB=E6=9B=B8?= =?UTF-8?q?=E3=81=8D=E6=9B=BF=E3=81=88=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 従来IDEで作成した設定をベースに手作りしていたのを変更。 これにより、複数のビルド環境に対する共通的な変更を簡単に行えるようになります。 --- sakura/sakura.vcxproj | 158 ++++++++++++------------------------------ 1 file changed, 43 insertions(+), 115 deletions(-) diff --git a/sakura/sakura.vcxproj b/sakura/sakura.vcxproj index 7d606076de..6a192b42e6 100644 --- a/sakura/sakura.vcxproj +++ b/sakura/sakura.vcxproj @@ -81,14 +81,10 @@ true - + - MinSpace - OnlyExplicitInline ..\sakura_core;%(AdditionalIncludeDirectories) - WIN32;_WIN32_WINNT=_WIN32_WINNT_WIN7;NDEBUG;%(PreprocessorDefinitions) - true - MultiThreaded + _WIN32_WINNT=_WIN32_WINNT_WIN7;%(PreprocessorDefinitions) true true true @@ -103,150 +99,82 @@ true - comctl32.lib;Imm32.lib;mpr.lib;imagehlp.lib;Shlwapi.lib;Dwmapi.lib;%(AdditionalDependencies) - true Windows - true - true - true - MachineX86 + comctl32.lib;Imm32.lib;mpr.lib;imagehlp.lib;Shlwapi.lib;Dwmapi.lib;%(AdditionalDependencies) + true + + 0x0411 + + + true + call postBuild.bat $(Platform) $(Configuration) call preBuild.bat $(SolutionDir)Win32\$(Configuration) + + + + Disabled + _DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebug + EnableFastChecks + + + false + - NDEBUG;%(PreprocessorDefinitions) - 0x0411 + _DEBUG;%(PreprocessorDefinitions) - - true - - + MinSpace OnlyExplicitInline - ..\sakura_core;%(AdditionalIncludeDirectories) - WIN32;_WIN32_WINNT=_WIN32_WINNT_WIN7;NDEBUG;%(PreprocessorDefinitions) - true + NDEBUG;%(PreprocessorDefinitions) MultiThreaded - true - true - true - Use - StdAfx.h - Level3 ProgramDatabase - /FAsu /Fa$(IntDir) /source-charset:utf-8 /execution-charset:shift_jis %(AdditionalOptions) - true - stdcpp17 - true - true + true - comctl32.lib;Imm32.lib;mpr.lib;imagehlp.lib;Shlwapi.lib;Dwmapi.lib;%(AdditionalDependencies) - true - Windows + UseFastLinkTimeCodeGeneration true true + true - - call postBuild.bat $(Platform) $(Configuration) - - - call preBuild.bat $(SolutionDir)Win32\$(Configuration) - - NDEBUG;_WIN64;%(PreprocessorDefinitions) - 0x0411 + NDEBUG;%(PreprocessorDefinitions) - - true - - + - Disabled - ..\sakura_core;%(AdditionalIncludeDirectories) - WIN32;_WIN32_WINNT=_WIN32_WINNT_WIN7;_DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - true - true - true - Use - StdAfx.h - Level3 - EditAndContinue - /FAsu /Fa$(IntDir) /source-charset:utf-8 /execution-charset:shift_jis %(AdditionalOptions) - true - stdcpp17 - true - true + WIN32;%(PreprocessorDefinitions) - comctl32.lib;Imm32.lib;mpr.lib;imagehlp.lib;Shlwapi.lib;Dwmapi.lib;%(AdditionalDependencies) - true - Windows - MachineX86 - false + true - - call postBuild.bat $(Platform) $(Configuration) - - - call preBuild.bat $(SolutionDir)Win32\$(Configuration) - - _DEBUG;%(PreprocessorDefinitions) - 0x0411 + WIN32;%(PreprocessorDefinitions) - - true - - + - Disabled - ..\sakura_core;%(AdditionalIncludeDirectories) - WIN32;_WIN32_WINNT=_WIN32_WINNT_WIN7;_DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - true - true - true - Use - StdAfx.h - Level3 - ProgramDatabase - /FAsu /Fa$(IntDir) /source-charset:utf-8 /execution-charset:shift_jis %(AdditionalOptions) - true - stdcpp17 - true - true + X64;%(PreprocessorDefinitions) - - comctl32.lib;Imm32.lib;mpr.lib;imagehlp.lib;Shlwapi.lib;Dwmapi.lib;%(AdditionalDependencies) - true - Windows - false - - - call postBuild.bat $(Platform) $(Configuration) - - - call preBuild.bat $(SolutionDir)Win32\$(Configuration) - - _DEBUG;_WIN64;%(PreprocessorDefinitions) - 0x0411 + _WIN64;%(PreprocessorDefinitions) - - true - + + + + + + + + From fb121569593a10c67baaaa1363b27c83a1db70e0 Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Mon, 20 Sep 2021 23:30:12 +0900 Subject: [PATCH 0827/1024] =?UTF-8?q?uchardet.dll=20=E3=81=8C=E5=AD=98?= =?UTF-8?q?=E5=9C=A8=E3=81=97=E3=81=9F=E3=82=89=E3=81=9D=E3=82=8C=E3=82=92?= =?UTF-8?q?=E4=BD=BF=E3=81=A3=E3=81=A6=E6=96=87=E5=AD=97=E3=82=A8=E3=83=B3?= =?UTF-8?q?=E3=82=B3=E3=83=BC=E3=83=87=E3=82=A3=E3=83=B3=E3=82=B0=E3=81=AE?= =?UTF-8?q?=E6=A4=9C=E5=87=BA=E3=81=8C=E8=A1=8C=E3=82=8F=E3=82=8C=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E5=87=A6=E7=90=86=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura/sakura.vcxproj | 2 + sakura/sakura.vcxproj.filters | 6 ++ sakura_core/charset/icu4c/CharsetDetector.cpp | 80 +++++++++++++------ sakura_core/charset/icu4c/CharsetDetector.h | 6 +- sakura_core/extmodule/CUchardet.cpp | 58 ++++++++++++++ sakura_core/extmodule/CUchardet.h | 60 ++++++++++++++ 6 files changed, 188 insertions(+), 24 deletions(-) create mode 100644 sakura_core/extmodule/CUchardet.cpp create mode 100644 sakura_core/extmodule/CUchardet.h diff --git a/sakura/sakura.vcxproj b/sakura/sakura.vcxproj index 7d606076de..2fdc7ff9f2 100644 --- a/sakura/sakura.vcxproj +++ b/sakura/sakura.vcxproj @@ -415,6 +415,7 @@ + @@ -783,6 +784,7 @@ + diff --git a/sakura/sakura.vcxproj.filters b/sakura/sakura.vcxproj.filters index 659a552187..26e57cd9d7 100644 --- a/sakura/sakura.vcxproj.filters +++ b/sakura/sakura.vcxproj.filters @@ -1112,6 +1112,9 @@ Cpp Source Files\recent + + Cpp Source Files\extmodule + @@ -2306,6 +2309,9 @@ Cpp Source Files\convert + + Cpp Source Files\extmodule + diff --git a/sakura_core/charset/icu4c/CharsetDetector.cpp b/sakura_core/charset/icu4c/CharsetDetector.cpp index 78c3f7400f..50bb01bad9 100644 --- a/sakura_core/charset/icu4c/CharsetDetector.cpp +++ b/sakura_core/charset/icu4c/CharsetDetector.cpp @@ -28,8 +28,10 @@ CharsetDetector::CharsetDetector() noexcept : _icuin() , _csd(nullptr) + , _ud(nullptr) { _icuin.InitDll(); + _uchardet.InitDll(); } CharsetDetector::~CharsetDetector() noexcept @@ -37,32 +39,13 @@ CharsetDetector::~CharsetDetector() noexcept if (_icuin.IsAvailable()) { _icuin.ucsdet_close(_csd); } + if (_uchardet.IsAvailable()) { + _uchardet.uchardet_delete(_ud); + } } -ECodeType CharsetDetector::Detect(const std::string_view& bytes) +static ECodeType name2code(std::string_view name) { - UErrorCode status = U_ZERO_ERROR; - - _csd = _icuin.ucsdet_open(&status); - if (status != U_ZERO_ERROR) { - return CODE_ERROR; - } - - _icuin.ucsdet_setText(_csd, bytes.data(), bytes.length(), &status); - if (status != U_ZERO_ERROR) { - return CODE_ERROR; - } - - const auto csm = _icuin.ucsdet_detect(_csd, &status); - if (status != U_ZERO_ERROR) { - return CODE_ERROR; - } - - std::string_view name = _icuin.ucsdet_getName(csm, &status); - if (status != U_ZERO_ERROR) { - return CODE_ERROR; - } - // 文字セット名⇒サクラエディタ内部コードの変換 if (name == "UTF-8") return CODE_UTF8; if (name == "SHIFT_JIS") return CODE_SJIS; @@ -72,6 +55,57 @@ ECodeType CharsetDetector::Detect(const std::string_view& bytes) if (name == "ISO-2022-JP") return CODE_JIS; if (name == "UTF-7") return CODE_UTF7; if (name == "ISO-8859-1") return CODE_LATIN1; + // ここから下は数が多いのでどうしたものか… + // https://www.freedesktop.org/wiki/Software/uchardet/ + // https://docs.microsoft.com/en-us/windows/win32/intl/code-page-identifiers + if (name == "GB2312") return (ECodeType)936; + if (name == "BIG5") return (ECodeType)950; + if (name == "ISO-2022-KR") return (ECodeType)50225; + if (name == "GB18030") return (ECodeType)54936; + return CODE_ERROR; +} + +ECodeType CharsetDetector::Detect(const std::string_view& bytes) +{ + if (_icuin.IsAvailable()) { + UErrorCode status = U_ZERO_ERROR; + _csd = _icuin.ucsdet_open(&status); + if (status != U_ZERO_ERROR) { + return CODE_ERROR; + } + + _icuin.ucsdet_setText(_csd, bytes.data(), bytes.length(), &status); + if (status != U_ZERO_ERROR) { + return CODE_ERROR; + } + + const auto csm = _icuin.ucsdet_detect(_csd, &status); + if (status != U_ZERO_ERROR) { + return CODE_ERROR; + } + std::string_view name = _icuin.ucsdet_getName(csm, &status); + if (status != U_ZERO_ERROR) { + return CODE_ERROR; + } + return name2code(name); + } + if (_uchardet.IsAvailable()) { + if (!_ud) { + _ud = _uchardet.uchardet_new(); + } + if (!_ud) { + return CODE_ERROR; + } + int ret = _uchardet.uchardet_handle_data(_ud, bytes.data(), bytes.length()); + if (ret != 0) { + return CODE_ERROR; + } + _uchardet.uchardet_data_end(_ud); + std::string_view name = _uchardet.uchardet_get_charset(_ud); + auto code = name2code(name); + _uchardet.uchardet_reset(_ud); + return code; + } return CODE_ERROR; } diff --git a/sakura_core/charset/icu4c/CharsetDetector.h b/sakura_core/charset/icu4c/CharsetDetector.h index 23699a2601..1f36ff7d47 100644 --- a/sakura_core/charset/icu4c/CharsetDetector.h +++ b/sakura_core/charset/icu4c/CharsetDetector.h @@ -29,6 +29,7 @@ #include #include "extmodule/CIcu4cI18n.h" +#include "extmodule/CUchardet.h" /*! * @brief 文字コード検出クラス @@ -38,12 +39,15 @@ class CharsetDetector final CIcu4cI18n _icuin; UCharsetDetector* _csd; + CUchardet _uchardet; + uchardet_t _ud; + public: CharsetDetector() noexcept; ~CharsetDetector() noexcept; bool IsAvailable() const noexcept { - return _icuin.IsAvailable(); + return _icuin.IsAvailable() || _uchardet.IsAvailable(); } ECodeType Detect(const std::string_view& bytes); diff --git a/sakura_core/extmodule/CUchardet.cpp b/sakura_core/extmodule/CUchardet.cpp new file mode 100644 index 0000000000..5bcac38612 --- /dev/null +++ b/sakura_core/extmodule/CUchardet.cpp @@ -0,0 +1,58 @@ +/*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include "StdAfx.h" +#include "CUchardet.h" + +/*! + * @brief DLLの名前を返す + */ +LPCWSTR CUchardet::GetDllNameImp( [[maybe_unused]] int index ) +{ + return L"uchardet.dll"; +} + +/*! + DLLの初期化 + + 関数のアドレスを取得してメンバに保管する. + + @retval true 成功 + @retval false アドレス取得に失敗 +*/ +bool CUchardet::InitDllImp() +{ + // DLL内関数名リスト + const ImportTable table[] = { + { &_uchardet_new, "uchardet_new" }, + { &_uchardet_delete, "uchardet_delete" }, + { &_uchardet_handle_data, "uchardet_handle_data" }, + { &_uchardet_data_end, "uchardet_data_end" }, + { &_uchardet_reset, "uchardet_reset" }, + { &_uchardet_get_charset, "uchardet_get_charset" }, + { NULL, 0 } + }; + return RegisterEntries(table); +} + diff --git a/sakura_core/extmodule/CUchardet.h b/sakura_core/extmodule/CUchardet.h new file mode 100644 index 0000000000..cc3aee5ad7 --- /dev/null +++ b/sakura_core/extmodule/CUchardet.h @@ -0,0 +1,60 @@ +/*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#pragma once + +#include "CDllHandler.h" + +typedef struct uchardet * uchardet_t; + +/*! + * uchardet ライブラリ(uchardet.dll) をラップするクラス + */ +class CUchardet final : public CDllImp +{ +public: + CUchardet() noexcept = default; + + // DLL関数ポインタ + uchardet_t (*_uchardet_new)(void) = nullptr; + void (*_uchardet_delete)(uchardet_t ud) = nullptr; + int (*_uchardet_handle_data)(uchardet_t ud, const char * data, size_t len) = nullptr; + void (*_uchardet_data_end)(uchardet_t ud) = nullptr; + void (*_uchardet_reset)(uchardet_t ud) = nullptr; + const char * (*_uchardet_get_charset)(uchardet_t ud) = nullptr; + +protected: + // CDllImpインタフェース + LPCWSTR GetDllNameImp(int nIndex) override; + bool InitDllImp() override; + +public: + uchardet_t uchardet_new(void) { return _uchardet_new(); } + void uchardet_delete(uchardet_t ud) { _uchardet_delete(ud); } + int uchardet_handle_data(uchardet_t ud, const char * data, size_t len) { return _uchardet_handle_data(ud, data, len); } + void uchardet_data_end(uchardet_t ud) { _uchardet_data_end(ud); } + void uchardet_reset(uchardet_t ud) { _uchardet_reset(ud); } + const char * uchardet_get_charset(uchardet_t ud) { return _uchardet_get_charset(ud); } +}; + From 33b87cd1e6e8b414f149f4537b71d1865d5f54d4 Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Tue, 21 Sep 2021 00:10:48 +0900 Subject: [PATCH 0828/1024] delete default constructor of CUchardet class as it can be implicitly defined --- sakura_core/extmodule/CUchardet.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/sakura_core/extmodule/CUchardet.h b/sakura_core/extmodule/CUchardet.h index cc3aee5ad7..7ffb0661d1 100644 --- a/sakura_core/extmodule/CUchardet.h +++ b/sakura_core/extmodule/CUchardet.h @@ -34,8 +34,6 @@ typedef struct uchardet * uchardet_t; class CUchardet final : public CDllImp { public: - CUchardet() noexcept = default; - // DLL関数ポインタ uchardet_t (*_uchardet_new)(void) = nullptr; void (*_uchardet_delete)(uchardet_t ud) = nullptr; From bec37806e93fc7c7171c57a38cd3b405ec089ce8 Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Tue, 21 Sep 2021 00:57:39 +0900 Subject: [PATCH 0829/1024] =?UTF-8?q?SonarCloud=20=E3=81=AE=20Code=20Smell?= =?UTF-8?q?s=20=E6=95=B0=E3=82=92=E6=B8=9B=E3=82=89=E3=81=99=E7=82=BA?= =?UTF-8?q?=E3=81=AE=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/charset/icu4c/CharsetDetector.cpp | 6 ++---- sakura_core/charset/icu4c/CharsetDetector.h | 2 +- sakura_core/extmodule/CUchardet.cpp | 2 +- sakura_core/extmodule/CUchardet.h | 12 ++++++------ 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/sakura_core/charset/icu4c/CharsetDetector.cpp b/sakura_core/charset/icu4c/CharsetDetector.cpp index 50bb01bad9..cc13b813ff 100644 --- a/sakura_core/charset/icu4c/CharsetDetector.cpp +++ b/sakura_core/charset/icu4c/CharsetDetector.cpp @@ -28,7 +28,6 @@ CharsetDetector::CharsetDetector() noexcept : _icuin() , _csd(nullptr) - , _ud(nullptr) { _icuin.InitDll(); _uchardet.InitDll(); @@ -97,14 +96,13 @@ ECodeType CharsetDetector::Detect(const std::string_view& bytes) if (!_ud) { return CODE_ERROR; } - int ret = _uchardet.uchardet_handle_data(_ud, bytes.data(), bytes.length()); - if (ret != 0) { + _uchardet.uchardet_reset(_ud); + if (_uchardet.uchardet_handle_data(_ud, bytes.data(), bytes.length()) != 0) { return CODE_ERROR; } _uchardet.uchardet_data_end(_ud); std::string_view name = _uchardet.uchardet_get_charset(_ud); auto code = name2code(name); - _uchardet.uchardet_reset(_ud); return code; } return CODE_ERROR; diff --git a/sakura_core/charset/icu4c/CharsetDetector.h b/sakura_core/charset/icu4c/CharsetDetector.h index 1f36ff7d47..4e8171a162 100644 --- a/sakura_core/charset/icu4c/CharsetDetector.h +++ b/sakura_core/charset/icu4c/CharsetDetector.h @@ -40,7 +40,7 @@ class CharsetDetector final UCharsetDetector* _csd; CUchardet _uchardet; - uchardet_t _ud; + uchardet_t _ud = nullptr; public: CharsetDetector() noexcept; diff --git a/sakura_core/extmodule/CUchardet.cpp b/sakura_core/extmodule/CUchardet.cpp index 5bcac38612..149b8ccb20 100644 --- a/sakura_core/extmodule/CUchardet.cpp +++ b/sakura_core/extmodule/CUchardet.cpp @@ -51,7 +51,7 @@ bool CUchardet::InitDllImp() { &_uchardet_data_end, "uchardet_data_end" }, { &_uchardet_reset, "uchardet_reset" }, { &_uchardet_get_charset, "uchardet_get_charset" }, - { NULL, 0 } + { nullptr, 0 } }; return RegisterEntries(table); } diff --git a/sakura_core/extmodule/CUchardet.h b/sakura_core/extmodule/CUchardet.h index 7ffb0661d1..c73c1e972e 100644 --- a/sakura_core/extmodule/CUchardet.h +++ b/sakura_core/extmodule/CUchardet.h @@ -48,11 +48,11 @@ class CUchardet final : public CDllImp bool InitDllImp() override; public: - uchardet_t uchardet_new(void) { return _uchardet_new(); } - void uchardet_delete(uchardet_t ud) { _uchardet_delete(ud); } - int uchardet_handle_data(uchardet_t ud, const char * data, size_t len) { return _uchardet_handle_data(ud, data, len); } - void uchardet_data_end(uchardet_t ud) { _uchardet_data_end(ud); } - void uchardet_reset(uchardet_t ud) { _uchardet_reset(ud); } - const char * uchardet_get_charset(uchardet_t ud) { return _uchardet_get_charset(ud); } + uchardet_t uchardet_new(void) const { return _uchardet_new(); } + void uchardet_delete(uchardet_t ud) const { _uchardet_delete(ud); } + int uchardet_handle_data(uchardet_t ud, const char * data, size_t len) const { return _uchardet_handle_data(ud, data, len); } + void uchardet_data_end(uchardet_t ud) const { _uchardet_data_end(ud); } + void uchardet_reset(uchardet_t ud) const { _uchardet_reset(ud); } + const char * uchardet_get_charset(uchardet_t ud) const { return _uchardet_get_charset(ud); } }; From 34d4bc8afb52b9857d5a24511396b42eb2532edd Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Sun, 26 Sep 2021 05:17:16 +0900 Subject: [PATCH 0830/1024] =?UTF-8?q?CharsetDetector=20=E3=82=92=E8=A6=AA?= =?UTF-8?q?=E3=83=95=E3=82=A9=E3=83=AB=E3=83=80=E3=81=AB=E7=A7=BB=E5=8B=95?= =?UTF-8?q?=20uchardet=E3=83=A9=E3=82=A4=E3=83=96=E3=83=A9=E3=83=AA?= =?UTF-8?q?=E3=82=92=E4=BD=BF=E3=81=86=E5=A0=B4=E5=90=88=E3=81=AF=E6=A4=9C?= =?UTF-8?q?=E5=87=BA=E3=81=97=E3=81=9F=E3=82=A8=E3=83=B3=E3=82=B3=E3=83=BC?= =?UTF-8?q?=E3=83=87=E3=82=A3=E3=83=B3=E3=82=B0=E5=90=8D=E3=81=8B=E3=82=89?= =?UTF-8?q?Windows=20code=20page=E3=81=B8=E3=81=AE=E5=A4=89=E6=8F=9B?= =?UTF-8?q?=E3=81=AF=20std::unordered=5Fmap=20=E3=81=AB=E3=82=88=E3=82=8B?= =?UTF-8?q?=E8=A1=A8=E5=BC=95=E3=81=8D=E3=82=92=E8=A1=8C=E3=81=86=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura/sakura.vcxproj | 4 +- sakura/sakura.vcxproj.filters | 15 +- sakura_core/StdAfx.h | 1 + sakura_core/charset/CCodeMediator.cpp | 2 +- sakura_core/charset/CharsetDetector.cpp | 258 ++++++++++++++++++ .../charset/{icu4c => }/CharsetDetector.h | 0 sakura_core/charset/icu4c/CharsetDetector.cpp | 109 -------- 7 files changed, 268 insertions(+), 121 deletions(-) create mode 100644 sakura_core/charset/CharsetDetector.cpp rename sakura_core/charset/{icu4c => }/CharsetDetector.h (100%) delete mode 100644 sakura_core/charset/icu4c/CharsetDetector.cpp diff --git a/sakura/sakura.vcxproj b/sakura/sakura.vcxproj index 2fdc7ff9f2..91b9d93ff9 100644 --- a/sakura/sakura.vcxproj +++ b/sakura/sakura.vcxproj @@ -290,6 +290,7 @@ + @@ -299,7 +300,6 @@ - @@ -639,6 +639,7 @@ + @@ -648,7 +649,6 @@ - diff --git a/sakura/sakura.vcxproj.filters b/sakura/sakura.vcxproj.filters index 26e57cd9d7..baa41406b6 100644 --- a/sakura/sakura.vcxproj.filters +++ b/sakura/sakura.vcxproj.filters @@ -119,9 +119,6 @@ {930f3f82-ab3f-49e3-af4a-d4f9c2d51f46} - - {e4629f85-3be8-4dda-80db-1be310929433} - @@ -1085,9 +1082,6 @@ Cpp Source Files\extmodule - - Cpp Source Files\charset\icu4c - Cpp Source Files @@ -1115,6 +1109,9 @@ Cpp Source Files\extmodule + + Cpp Source Files\charset + @@ -2285,9 +2282,6 @@ Cpp Source Files\extmodule - - Cpp Source Files\charset\icu4c - Cpp Source Files @@ -2312,6 +2306,9 @@ Cpp Source Files\extmodule + + Cpp Source Files\charset + diff --git a/sakura_core/StdAfx.h b/sakura_core/StdAfx.h index d08b9d0385..c649a856af 100644 --- a/sakura_core/StdAfx.h +++ b/sakura_core/StdAfx.h @@ -84,6 +84,7 @@ #include #include #include +#include #include #include #include diff --git a/sakura_core/charset/CCodeMediator.cpp b/sakura_core/charset/CCodeMediator.cpp index 5b0a3907ea..e5ee7ca234 100644 --- a/sakura_core/charset/CCodeMediator.cpp +++ b/sakura_core/charset/CCodeMediator.cpp @@ -24,7 +24,7 @@ */ #include "StdAfx.h" #include "charset/CCodeMediator.h" -#include "charset/icu4c/CharsetDetector.h" +#include "charset/CharsetDetector.h" #include "charset/CESI.h" #include "io/CBinaryStream.h" #include "mem/CMemory.h" diff --git a/sakura_core/charset/CharsetDetector.cpp b/sakura_core/charset/CharsetDetector.cpp new file mode 100644 index 0000000000..ff6fb197a4 --- /dev/null +++ b/sakura_core/charset/CharsetDetector.cpp @@ -0,0 +1,258 @@ +/*! @file */ +/* + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include "StdAfx.h" +#include "CharsetDetector.h" + +// https://www.freedesktop.org/wiki/Software/uchardet/ +// https://docs.microsoft.com/en-us/windows/win32/intl/code-page-identifiers +static const std::unordered_map map_charsetToCodePage = { + // International (Unicode) + { "UTF-32BE", 12001, }, + { "UTF-32LE", 12000, }, + // Arabic + { "ISO-8859-6", 28596, }, + { "WINDOWS-1256", 1256, }, + // Bulgarian + { "ISO-8859-5", 28595, }, + { "WINDOWS-1251", 1251, }, + // Chinese + { "ISO-2022-CN", 50227, }, + { "BIG5", 950, }, + { "EUC-TW", 51950, }, + { "GB18030", 54936, }, + { "HZ-GB-2312", 52936, }, + // Croatian + { "ISO-8859-2", 28592, }, + { "ISO-8859-13", 28603, }, + { "ISO-8859-16", 28606, }, + { "WINDOWS-1250", 1250, }, + { "IBM852", 852, }, + { "MAC-CENTRALEUROPE", 10029, }, + // Czech + { "WINDOWS-1250", 1250, }, + { "ISO-8859-2", 28592, }, + { "IBM852", 852, }, + { "MAC-CENTRALEUROPE", 10029, }, + // Danish + { "ISO-8859-1", 28591, }, + { "ISO-8859-15", 28605, }, + { "WINDOWS-1252", 1252, }, + // English + { "ASCII", 20127, }, + // Esperanto + { "ISO-8859-3", 28593, }, + // Estonian + { "ISO-8859-4", 28594, }, + { "ISO-8859-13", 28603, }, + { "ISO-8859-13", 28603, }, + { "WINDOWS-1252", 1252, }, + { "WINDOWS-1257", 1257, }, + // Finnish + { "ISO-8859-1", 28591, }, + { "ISO-8859-4", 28594, }, + { "ISO-8859-9", 28599, }, + { "ISO-8859-13", 28603, }, + { "ISO-8859-15", 28605, }, + { "WINDOWS-1252", 1252, }, + // French + { "ISO-8859-1", 28591, }, + { "ISO-8859-15", 28605, }, + { "WINDOWS-1252", 1252, }, + // German + { "ISO-8859-1", 28591, }, + { "WINDOWS-1252", 1252, }, + // Greek + { "ISO-8859-7", 28597, }, + { "WINDOWS-1253", 1253, }, + // Hebrew + { "ISO-8859-8", 28598, }, + { "WINDOWS-1255", 1255, }, + // Hungarian + { "ISO-8859-2", 28592, }, + { "WINDOWS-1250", 1250, }, + // Irish Gaelic + { "ISO-8859-1", 28591, }, + { "ISO-8859-9", 28599, }, + { "ISO-8859-15", 28605, }, + { "WINDOWS-1252", 1252, }, + // Italian + { "ISO-8859-1", 28591, }, + { "ISO-8859-3", 28593, }, + { "ISO-8859-9", 28599, }, + { "ISO-8859-15", 28605, }, + { "WINDOWS-1252", 1252, }, + // Japanese + { "ISO-2022-JP", 50220, }, + { "SHIFT_JIS", 932, }, + { "EUC-JP", 20932, }, + // Korean + { "ISO-2022-KR", 50225, }, + { "EUC-KR", 51949, }, + // Lithuanian + { "ISO-8859-4", 28594, }, + { "ISO-8859-10", 28600, }, + { "ISO-8859-13", 28603, }, + // Latvian + { "ISO-8859-4", 28594, }, + { "ISO-8859-10", 28600, }, + { "ISO-8859-13", 28603, }, + // Maltese + { "ISO-8859-3", 28593, }, + // Polish + { "ISO-8859-2", 28592, }, + { "ISO-8859-13", 28603, }, + { "ISO-8859-16", 28606, }, + { "WINDOWS-1250", 1250, }, + { "IBM852", 852, }, + { "MAC-CENTRALEUROPE", 10029, }, + // Portuguese + { "ISO-8859-1", 28591, }, + { "ISO-8859-9", 28599, }, + { "ISO-8859-15", 28605, }, + { "WINDOWS-1252", 1252, }, + // Romanian + { "ISO-8859-2", 28592, }, + { "ISO-8859-16", 28606, }, + { "WINDOWS-1250", 1250, }, + { "IBM852", 852, }, + // Russian + { "ISO-8859-5", 28595, }, + { "KOI8-R", 20866, }, + { "WINDOWS-1251", 1251, }, + { "MAC-CYRILLIC", 10007, }, + { "IBM866", 866, }, + { "IBM855", 855, }, + // Slovak + { "WINDOWS-1250", 1250, }, + { "ISO-8859-2", 28592, }, + { "IBM852", 852, }, + { "MAC-CENTRALEUROPE", 10029, }, + // Slovene + { "ISO-8859-2", 28592, }, + { "ISO-8859-16", 28606, }, + { "WINDOWS-1250", 1250, }, + { "IBM852", 852, }, + { "MAC-CENTRALEUROPE", 10029, }, + // Spanish + { "ISO-8859-1", 28591, }, + { "ISO-8859-15", 28605, }, + { "WINDOWS-1252", 1252, }, + // Swedish + { "ISO-8859-1", 28591, }, + { "ISO-8859-4", 28594, }, + { "ISO-8859-9", 28599, }, + { "ISO-8859-15", 28605, }, + { "WINDOWS-1252", 1252, }, + // Thai + { "TIS-620", 874, }, + { "ISO-8859-11", 28601, }, + // Turkish + { "ISO-8859-3", 28593, }, + { "ISO-8859-9", 28599, }, + // Vietnamese + //{ "VISCII", , }, + { "Windows-1258", 1258, }, + // Others + { "WINDOWS-1252", 1252, }, +}; + +CharsetDetector::CharsetDetector() noexcept + : _icuin() + , _csd(nullptr) +{ + _icuin.InitDll(); + _uchardet.InitDll(); +} + +CharsetDetector::~CharsetDetector() noexcept +{ + if (_icuin.IsAvailable()) { + _icuin.ucsdet_close(_csd); + } + if (_uchardet.IsAvailable()) { + _uchardet.uchardet_delete(_ud); + } +} + +ECodeType CharsetDetector::Detect(const std::string_view& bytes) +{ + if (_icuin.IsAvailable()) { + UErrorCode status = U_ZERO_ERROR; + _csd = _icuin.ucsdet_open(&status); + if (status != U_ZERO_ERROR) { + return CODE_ERROR; + } + + _icuin.ucsdet_setText(_csd, bytes.data(), bytes.length(), &status); + if (status != U_ZERO_ERROR) { + return CODE_ERROR; + } + + const auto csm = _icuin.ucsdet_detect(_csd, &status); + if (status != U_ZERO_ERROR) { + return CODE_ERROR; + } + + std::string_view name = _icuin.ucsdet_getName(csm, &status); + if (status != U_ZERO_ERROR) { + return CODE_ERROR; + } + + // 文字セット名⇒サクラエディタ内部コードの変換 + if (name == "UTF-8") return CODE_UTF8; + if (name == "SHIFT_JIS") return CODE_SJIS; + if (name == "UTF-16BE") return CODE_UNICODEBE; + if (name == "UTF-16LE") return CODE_UNICODE; + if (name == "EUC-JP") return CODE_EUC; + if (name == "ISO-2022-JP") return CODE_JIS; + if (name == "UTF-7") return CODE_UTF7; + if (name == "ISO-8859-1") return CODE_LATIN1; + + return CODE_ERROR; + } + if (_uchardet.IsAvailable()) { + if (!_ud) { + _ud = _uchardet.uchardet_new(); + } + if (!_ud) { + return CODE_ERROR; + } + _uchardet.uchardet_reset(_ud); + if (_uchardet.uchardet_handle_data(_ud, bytes.data(), bytes.length()) != 0) { + return CODE_ERROR; + } + _uchardet.uchardet_data_end(_ud); + std::string_view name = _uchardet.uchardet_get_charset(_ud); + std::string str(name); + std::transform(str.begin(), str.end(), str.begin(), ::toupper); + auto it = map_charsetToCodePage.find(str); + if (it == map_charsetToCodePage.end()) { + return CODE_ERROR; + }else { + return (ECodeType)it->second; + } + } + return CODE_ERROR; +} diff --git a/sakura_core/charset/icu4c/CharsetDetector.h b/sakura_core/charset/CharsetDetector.h similarity index 100% rename from sakura_core/charset/icu4c/CharsetDetector.h rename to sakura_core/charset/CharsetDetector.h diff --git a/sakura_core/charset/icu4c/CharsetDetector.cpp b/sakura_core/charset/icu4c/CharsetDetector.cpp deleted file mode 100644 index cc13b813ff..0000000000 --- a/sakura_core/charset/icu4c/CharsetDetector.cpp +++ /dev/null @@ -1,109 +0,0 @@ -/*! @file */ -/* - Copyright (C) 2018-2021, Sakura Editor Organization - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; - you must not claim that you wrote the original software. - If you use this software in a product, an acknowledgment - in the product documentation would be appreciated but is - not required. - - 2. Altered source versions must be plainly marked as such, - and must not be misrepresented as being the original software. - - 3. This notice may not be removed or altered from any source - distribution. -*/ -#include "StdAfx.h" -#include "CharsetDetector.h" - -CharsetDetector::CharsetDetector() noexcept - : _icuin() - , _csd(nullptr) -{ - _icuin.InitDll(); - _uchardet.InitDll(); -} - -CharsetDetector::~CharsetDetector() noexcept -{ - if (_icuin.IsAvailable()) { - _icuin.ucsdet_close(_csd); - } - if (_uchardet.IsAvailable()) { - _uchardet.uchardet_delete(_ud); - } -} - -static ECodeType name2code(std::string_view name) -{ - // 文字セット名⇒サクラエディタ内部コードの変換 - if (name == "UTF-8") return CODE_UTF8; - if (name == "SHIFT_JIS") return CODE_SJIS; - if (name == "UTF-16BE") return CODE_UNICODEBE; - if (name == "UTF-16LE") return CODE_UNICODE; - if (name == "EUC-JP") return CODE_EUC; - if (name == "ISO-2022-JP") return CODE_JIS; - if (name == "UTF-7") return CODE_UTF7; - if (name == "ISO-8859-1") return CODE_LATIN1; - // ここから下は数が多いのでどうしたものか… - // https://www.freedesktop.org/wiki/Software/uchardet/ - // https://docs.microsoft.com/en-us/windows/win32/intl/code-page-identifiers - if (name == "GB2312") return (ECodeType)936; - if (name == "BIG5") return (ECodeType)950; - if (name == "ISO-2022-KR") return (ECodeType)50225; - if (name == "GB18030") return (ECodeType)54936; - return CODE_ERROR; -} - -ECodeType CharsetDetector::Detect(const std::string_view& bytes) -{ - if (_icuin.IsAvailable()) { - UErrorCode status = U_ZERO_ERROR; - _csd = _icuin.ucsdet_open(&status); - if (status != U_ZERO_ERROR) { - return CODE_ERROR; - } - - _icuin.ucsdet_setText(_csd, bytes.data(), bytes.length(), &status); - if (status != U_ZERO_ERROR) { - return CODE_ERROR; - } - - const auto csm = _icuin.ucsdet_detect(_csd, &status); - if (status != U_ZERO_ERROR) { - return CODE_ERROR; - } - - std::string_view name = _icuin.ucsdet_getName(csm, &status); - if (status != U_ZERO_ERROR) { - return CODE_ERROR; - } - return name2code(name); - } - if (_uchardet.IsAvailable()) { - if (!_ud) { - _ud = _uchardet.uchardet_new(); - } - if (!_ud) { - return CODE_ERROR; - } - _uchardet.uchardet_reset(_ud); - if (_uchardet.uchardet_handle_data(_ud, bytes.data(), bytes.length()) != 0) { - return CODE_ERROR; - } - _uchardet.uchardet_data_end(_ud); - std::string_view name = _uchardet.uchardet_get_charset(_ud); - auto code = name2code(name); - return code; - } - return CODE_ERROR; -} From f7e40bf49471fe4513bfa2d332671bea872691f4 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Mon, 27 Sep 2021 00:00:10 +0900 Subject: [PATCH 0831/1024] =?UTF-8?q?vs2017=E5=90=91=E3=81=91=E3=81=AE.vsc?= =?UTF-8?q?onfig=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vsconfig.vs2017 | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .vsconfig.vs2017 diff --git a/.vsconfig.vs2017 b/.vsconfig.vs2017 new file mode 100644 index 0000000000..dcd96b09b2 --- /dev/null +++ b/.vsconfig.vs2017 @@ -0,0 +1,12 @@ +{ + "version": "1.0", + "components": [ + "Microsoft.VisualStudio.Workload.NativeDesktop", + "microsoft.visualstudio.component.debugger.justintime", + "microsoft.visualstudio.component.vc.diagnostictools", + "microsoft.visualstudio.component.vc.cmake.project", + "microsoft.visualstudio.component.vc.atlmfc", + "microsoft.visualstudio.component.windows10sdk.17763", + "microsoft.visualstudio.component.vc.testadapterforgoogletest" + ] +} \ No newline at end of file From c71f22cf603d4a5ee006e2eca43dd70cf5318fd6 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 2 Oct 2021 10:28:40 +0900 Subject: [PATCH 0832/1024] =?UTF-8?q?=E3=83=9E=E3=82=AF=E3=83=ADVER=5FGITH?= =?UTF-8?q?ASH=E3=81=AE=E5=AE=9A=E7=BE=A9=E4=BD=8D=E7=BD=AE=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgAbout.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/sakura_core/dlg/CDlgAbout.cpp b/sakura_core/dlg/CDlgAbout.cpp index fcebb7ac45..e742e5db38 100644 --- a/sakura_core/dlg/CDlgAbout.cpp +++ b/sakura_core/dlg/CDlgAbout.cpp @@ -186,9 +186,6 @@ BOOL CDlgAbout::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) cmemMsg.AppendString(L" "); // バージョン情報・コンフィグ情報 // -#ifdef GIT_COMMIT_HASH -#define VER_GITHASH "(GitHash " GIT_COMMIT_HASH ")" -#endif DWORD dwVersionMS, dwVersionLS; GetAppVersionInfo( NULL, VS_VERSION_INFO, &dwVersionMS, &dwVersionLS ); @@ -211,7 +208,8 @@ BOOL CDlgAbout::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) cmemMsg.AppendString( L"\r\n" ); // 2行目 -#ifdef VER_GITHASH +#ifdef GIT_COMMIT_HASH +#define VER_GITHASH "(GitHash " GIT_COMMIT_HASH ")" cmemMsg.AppendString( _T(VER_GITHASH) L"\r\n"); #endif From e5ef188d50a3e58f7054d1c0d12cf591512e8e6b Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 2 Oct 2021 10:32:15 +0900 Subject: [PATCH 0833/1024] =?UTF-8?q?=E5=86=97=E9=95=B7=E3=81=AA=E3=83=9E?= =?UTF-8?q?=E3=82=AF=E3=83=ADVER=5FGITHASH=E3=82=92=E3=82=A4=E3=83=B3?= =?UTF-8?q?=E3=83=A9=E3=82=A4=E3=83=B3=E5=8C=96=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgAbout.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sakura_core/dlg/CDlgAbout.cpp b/sakura_core/dlg/CDlgAbout.cpp index e742e5db38..38268330b6 100644 --- a/sakura_core/dlg/CDlgAbout.cpp +++ b/sakura_core/dlg/CDlgAbout.cpp @@ -209,8 +209,7 @@ BOOL CDlgAbout::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) // 2行目 #ifdef GIT_COMMIT_HASH -#define VER_GITHASH "(GitHash " GIT_COMMIT_HASH ")" - cmemMsg.AppendString( _T(VER_GITHASH) L"\r\n"); + cmemMsg.AppendString( L"(GitHash " _T(GIT_COMMIT_HASH) L")\r\n" ); #endif // 3行目 From a11755cbf5be64ca3de548ae373990aa54d6db1d Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 2 Oct 2021 10:35:43 +0900 Subject: [PATCH 0834/1024] =?UTF-8?q?=E5=AE=9A=E6=95=B0GIT=5FTAG=5FNAME?= =?UTF-8?q?=E3=82=92=E5=9F=8B=E3=82=81=E8=BE=BC=E3=82=80=E8=A8=98=E8=BF=B0?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit コンパイル時に連結できるのに関数を使ってるのが無駄だから。 --- sakura_core/dlg/CDlgAbout.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/dlg/CDlgAbout.cpp b/sakura_core/dlg/CDlgAbout.cpp index 38268330b6..a93e3ffa66 100644 --- a/sakura_core/dlg/CDlgAbout.cpp +++ b/sakura_core/dlg/CDlgAbout.cpp @@ -203,7 +203,7 @@ BOOL CDlgAbout::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) cmemMsg.AppendString( L" " _T(ALPHA_VERSION_STR)); #endif #ifdef GIT_TAG_NAME - cmemMsg.AppendStringF(L" (tag %s)", _T(GIT_TAG_NAME)); + cmemMsg.AppendString( L" (tag " _T(GIT_TAG_NAME) L")" ); #endif cmemMsg.AppendString( L"\r\n" ); From 46f1668ae147cbb0f8a1d96f05bf58eff58eda8b Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 2 Oct 2021 11:18:42 +0900 Subject: [PATCH 0835/1024] =?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=81=8C=E5=BE=AE=E5=A6=99=E3=81=AB=E6=AD=A3=E3=81=97=E3=81=8F?= =?UTF-8?q?=E3=81=AA=E3=81=84=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgAbout.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/sakura_core/dlg/CDlgAbout.cpp b/sakura_core/dlg/CDlgAbout.cpp index a93e3ffa66..67087d14c5 100644 --- a/sakura_core/dlg/CDlgAbout.cpp +++ b/sakura_core/dlg/CDlgAbout.cpp @@ -164,8 +164,6 @@ BOOL CDlgAbout::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) /* この実行ファイルの情報 */ ::GetModuleFileName( NULL, szFile, _countof( szFile ) ); - // Oct. 22, 2005 genta タイムスタンプ取得の共通関数利用 - /* バージョン情報 */ // Nov. 6, 2000 genta Unofficial Releaseのバージョンとして設定 // Jun. 8, 2001 genta GPL化に伴い、OfficialなReleaseとしての道を歩み始める @@ -174,22 +172,24 @@ BOOL CDlgAbout::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) // 2010.04.15 Moca コンパイラ情報を分離/WINヘッダ,N_SHAREDATA_VERSION追加 // 以下の形式で出力 - //サクラエディタ Ver. 2.0.0.0 + //サクラエディタ Ver. 2.4.1.0 32bit DEBUG dev //(GitHash xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx) + //(GitURL https://github.com/sakura/sakura-editor.git) // // Share Ver: 96 // Compile Info: V 1400 WR WIN600/I601/C000/N600 // Last Modified: 1999/9/9 00:00:00 // (あればSKR_PATCH_INFOの文字列がそのまま表示) CNativeW cmemMsg; + + // 1行目 + // バージョン情報 cmemMsg.AppendString(LS(STR_DLGABOUT_APPNAME)); // e.g. "サクラエディタ", "Sakura Editor" cmemMsg.AppendString(L" "); - // バージョン情報・コンフィグ情報 // DWORD dwVersionMS, dwVersionLS; GetAppVersionInfo( NULL, VS_VERSION_INFO, &dwVersionMS, &dwVersionLS ); - // 1行目 cmemMsg.AppendStringF( L"v%d.%d.%d.%d", HIWORD(dwVersionMS), LOWORD(dwVersionMS), HIWORD(dwVersionLS), LOWORD(dwVersionLS) // e.g. {2, 3, 2, 0} @@ -228,6 +228,7 @@ BOOL CDlgAbout::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) ); // 更新日情報 + // Oct. 22, 2005 genta タイムスタンプ取得の共通関数利用 CFileTime cFileTime; GetLastWriteTimestamp( szFile, &cFileTime ); cmemMsg.AppendStringF( From 1f3d30886c36a922b7e94bd85fc11dbeddafdebe Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 2 Oct 2021 15:25:43 +0900 Subject: [PATCH 0836/1024] =?UTF-8?q?CNativeW::AllocStringBuffer=E3=81=AE?= =?UTF-8?q?=E5=A4=B1=E6=95=97=E6=99=82=E3=81=AB=E3=82=B3=E3=83=94=E3=83=BC?= =?UTF-8?q?=E3=82=92=E4=B8=AD=E6=96=AD=E3=81=95=E3=81=9B=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CEditView.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index 065133f3eb..e29ae4415a 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -1883,6 +1883,11 @@ bool CEditView::GetSelectedData( cmemBuf->AllocStringBuffer(nBufSize); //>> 2002/04/18 Azumaiya + // メモリ確保に失敗したら抜ける + if( 0 == cmemBuf->GetStringLength() ){ + return false; + } + bool bExtEol = GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol; nRowNum = 0; for( nLineNum = rcSel.top; nLineNum <= rcSel.bottom; ++nLineNum ){ @@ -1961,6 +1966,11 @@ bool CEditView::GetSelectedData( cmemBuf->AllocStringBuffer(nBufSize); //>> 2002/04/18 Azumaiya + // メモリ確保に失敗したら抜ける + if( 0 == cmemBuf->GetStringLength() ){ + return false; + } + for( nLineNum = GetSelectionInfo().m_sSelect.GetFrom().GetY2(); nLineNum <= GetSelectionInfo().m_sSelect.GetTo().y; ++nLineNum ){ pLine = m_pcEditDoc->m_cLayoutMgr.GetLineStr( nLineNum, &nLineLen, &pcLayout ); if( NULL == pLine ){ From 136ab21d2a92373be529f61c8ef96934c80a993b Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Sat, 2 Oct 2021 17:29:22 +0900 Subject: [PATCH 0837/1024] =?UTF-8?q?cbegin=20=E3=81=A8=20cend=20=E3=82=92?= =?UTF-8?q?=E3=81=AA=E3=82=8B=E3=81=B9=E3=81=8F=E4=BD=BF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CProfile.cpp | 14 +++++++------- sakura_core/_main/CControlTray.cpp | 2 +- sakura_core/charset/CCodePage.cpp | 2 +- sakura_core/convert/CConvert_TabToSpace.cpp | 2 +- sakura_core/dlg/CDlgGrep.cpp | 4 ++-- sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp | 2 +- sakura_core/dlg/CDlgPluginOption.cpp | 10 +++++----- sakura_core/env/CFileNameManager.cpp | 6 +++--- sakura_core/macro/CWSH.cpp | 2 +- sakura_core/plugin/CJackManager.cpp | 4 ++-- sakura_core/plugin/CPlugin.h | 12 ++++++------ sakura_core/plugin/CPluginIfObj.h | 2 +- sakura_core/prop/CPropComPlugin.cpp | 2 +- sakura_core/window/CEditWnd.cpp | 4 ++-- 14 files changed, 34 insertions(+), 34 deletions(-) diff --git a/sakura_core/CProfile.cpp b/sakura_core/CProfile.cpp index b94d329389..228f419672 100644 --- a/sakura_core/CProfile.cpp +++ b/sakura_core/CProfile.cpp @@ -250,10 +250,10 @@ bool CProfile::WriteProfile( vecLine.push_back( LTEXT(";") + wstring( pszComment ) ); // //->; 2008/5/24 Uchi vecLine.push_back( LTEXT("") ); } - for(auto iter = m_ProfileData.begin(); iter != m_ProfileData.end(); iter++ ) { + for(auto iter = m_ProfileData.cbegin(); iter != m_ProfileData.cend(); iter++ ) { //セクション名を書き込む vecLine.push_back( LTEXT("[") + iter->strSectionName + LTEXT("]") ); - for(auto mapiter = iter->mapEntries.cbegin(); mapiter != iter->mapEntries.end(); mapiter++ ) { + for(auto mapiter = iter->mapEntries.cbegin(); mapiter != iter->mapEntries.cend(); mapiter++ ) { //エントリを書き込む vecLine.push_back( mapiter->first + LTEXT("=") + mapiter->second ); } @@ -336,9 +336,9 @@ bool CProfile::GetProfileData( ) const { // セクション名が一致するセクションを探す - if (const auto iter = std::find_if(m_ProfileData.begin(), m_ProfileData.end(), [§ionName](const auto& section) {return section.strSectionName == sectionName; }); iter != m_ProfileData.end()) { + if (const auto iter = std::find_if(m_ProfileData.cbegin(), m_ProfileData.cend(), [§ionName](const auto& section) {return section.strSectionName == sectionName; }); iter != m_ProfileData.cend()) { // キーが一致するエントリを探す - if (const auto mapiter = iter->mapEntries.find(entryKey.data()); iter->mapEntries.end() != mapiter) { + if (const auto mapiter = iter->mapEntries.find(entryKey.data()); iter->mapEntries.cend() != mapiter) { // エントリの値をコピーする strEntryValue = mapiter->second; return true; @@ -358,7 +358,7 @@ void CProfile::SetProfileData( ) { // セクション名が一致するセクションがない場合、空のセクションを追加する - if (const auto iter = std::find_if(m_ProfileData.begin(), m_ProfileData.end(), [§ionName](const auto& section) {return section.strSectionName == sectionName; }); iter == m_ProfileData.end()) { + if (const auto iter = std::find_if(m_ProfileData.cbegin(), m_ProfileData.cend(), [§ionName](const auto& section) {return section.strSectionName == sectionName; }); iter == m_ProfileData.cend()) { m_ProfileData.emplace_back(Section{ sectionName.data() }); } // セクション名が一致するセクションを探す @@ -374,9 +374,9 @@ void CProfile::DUMP( void ) #ifdef _DEBUG // 2006.02.20 ryoji: MAP_STR_STR_ITER削除時の修正漏れによるコンパイルエラー修正 MYTRACE( L"\n\nCProfile::DUMP()======================" ); - for(auto iter = m_ProfileData.begin(); iter != m_ProfileData.end(); iter++ ) { + for(auto iter = m_ProfileData.cbegin(); iter != m_ProfileData.cend(); iter++ ) { MYTRACE( L"\n■strSectionName=%ls", iter->strSectionName.c_str() ); - for(auto mapiter = iter->mapEntries.begin(); mapiter != iter->mapEntries.end(); mapiter++ ) { + for(auto mapiter = iter->mapEntries.cbegin(); mapiter != iter->mapEntries.cend(); mapiter++ ) { MYTRACE( L"\"%ls\" = \"%ls\"\n", mapiter->first.c_str(), mapiter->second.c_str() ); } } diff --git a/sakura_core/_main/CControlTray.cpp b/sakura_core/_main/CControlTray.cpp index 4f99a0e4fe..c8a09429aa 100644 --- a/sakura_core/_main/CControlTray.cpp +++ b/sakura_core/_main/CControlTray.cpp @@ -810,7 +810,7 @@ LRESULT CControlTray::DispatchEvent( // アイコンの登録 const CPlug::Array& plugs = CJackManager::getInstance()->GetPlugs( PP_COMMAND ); m_cMenuDrawer.m_pcIcons->ResetExtend(); - for( CPlug::ArrayIter it = plugs.begin(); it != plugs.end(); it++ ) { + for( CPlug::ArrayIter it = plugs.cbegin(); it != plugs.cend(); it++ ) { int iBitmap = CMenuDrawer::TOOLBAR_ICON_PLUGCOMMAND_DEFAULT - 1; const CPlug* plug = *it; if( !plug->m_sIcon.empty() ){ diff --git a/sakura_core/charset/CCodePage.cpp b/sakura_core/charset/CCodePage.cpp index ea41d1b1c7..d77bf6047e 100644 --- a/sakura_core/charset/CCodePage.cpp +++ b/sakura_core/charset/CCodePage.cpp @@ -426,7 +426,7 @@ int CCodePage::AddComboCodePages(HWND hwnd, HWND combo, int nSelCode) } Combo_SetItemData( combo, nIdx, CODE_CPOEM ); CCodePage::CodePageList& cpList = CCodePage::GetCodePageList(); - for( auto it = cpList.begin(); it != cpList.end(); ++it ){ + for( auto it = cpList.cbegin(); it != cpList.cend(); ++it ){ nIdx = Combo_AddString(combo, it->second.c_str()); Combo_SetItemData(combo, nIdx, it->first); if( nSelCode == it->first ){ diff --git a/sakura_core/convert/CConvert_TabToSpace.cpp b/sakura_core/convert/CConvert_TabToSpace.cpp index 37f45cc703..8372a372df 100644 --- a/sakura_core/convert/CConvert_TabToSpace.cpp +++ b/sakura_core/convert/CConvert_TabToSpace.cpp @@ -36,7 +36,7 @@ bool CConvert_TabToSpace::DoConvert(CNativeW* pcData) { const std::wstring_view source(pcData->GetStringPtr(), pcData->GetStringLength()); - const std::ptrdiff_t numOfTabs = std::count(source.begin(), source.end(), L'\t'); + const std::ptrdiff_t numOfTabs = std::count(source.cbegin(), source.cend(), L'\t'); std::wstring buffer; buffer.reserve(source.length() + numOfTabs * (m_nTabWidth - 1)); diff --git a/sakura_core/dlg/CDlgGrep.cpp b/sakura_core/dlg/CDlgGrep.cpp index eb910cbdb4..0b0e7b3b2b 100644 --- a/sakura_core/dlg/CDlgGrep.cpp +++ b/sakura_core/dlg/CDlgGrep.cpp @@ -143,7 +143,7 @@ static LPCWSTR GetEscapePattern(const std::wstring& pattern) static void AppendExcludeFolderPatterns(CNativeW& cFilePattern, const CNativeW& cmWorkExcludeFolder) { auto patterns = CGrepEnumKeys::SplitPattern(cmWorkExcludeFolder.GetStringPtr()); - for (auto iter = patterns.begin(); iter != patterns.end(); ++iter) + for (auto iter = patterns.cbegin(); iter != patterns.cend(); ++iter) { const auto & pattern = (*iter); LPCWSTR escapeStr = GetEscapePattern(pattern); @@ -160,7 +160,7 @@ static void AppendExcludeFolderPatterns(CNativeW& cFilePattern, const CNativeW& static void AppendExcludeFilePatterns(CNativeW& cFilePattern, const CNativeW& cmWorkExcludeFile) { auto patterns = CGrepEnumKeys::SplitPattern(cmWorkExcludeFile.GetStringPtr()); - for (auto iter = patterns.begin(); iter != patterns.end(); ++iter) + for (auto iter = patterns.cbegin(); iter != patterns.cend(); ++iter) { const auto & pattern = (*iter); LPCWSTR escapeStr = GetEscapePattern(pattern); diff --git a/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp index 4750deddc3..a29d62cbb4 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp @@ -929,7 +929,7 @@ int CDlgOpenFile_CommonItemDialog::AddComboCodePages( int nSelCode ) nSel = nSelCode; } CCodePage::CodePageList& cpList = CCodePage::GetCodePageList(); - for( auto it = cpList.begin(); it != cpList.end(); ++it ){ + for( auto it = cpList.cbegin(); it != cpList.cend(); ++it ){ hr = AddControlItem(CtrlId::COMBO_CODE, (DWORD)it->first, it->second.c_str()); if( nSelCode == it->first ){ SetSelectedControlItem(CtrlId::COMBO_CODE, (DWORD)it->first); diff --git a/sakura_core/dlg/CDlgPluginOption.cpp b/sakura_core/dlg/CDlgPluginOption.cpp index 0206812f12..ac34116e83 100644 --- a/sakura_core/dlg/CDlgPluginOption.cpp +++ b/sakura_core/dlg/CDlgPluginOption.cpp @@ -125,7 +125,7 @@ void CDlgPluginOption::SetData( void ) CPluginOption* cOpt; CPluginOption::ArrayIter it; - for( i=0, it = m_cPlugin->m_options.begin(); it != m_cPlugin->m_options.end(); i++, it++ ){ + for( i=0, it = m_cPlugin->m_options.cbegin(); it != m_cPlugin->m_options.cend(); i++, it++ ){ cOpt = *it; auto_snprintf_s( buf, _countof(buf), L"%ls", cOpt->GetLabel().c_str()); @@ -173,7 +173,7 @@ void CDlgPluginOption::SetData( void ) selects = cOpt->GetSelects(); buf[0] = L'\0'; - for (auto it = selects.begin(); it != selects.end(); it++) { + for (auto it = selects.cbegin(); it != selects.cend(); it++) { SepSelect(*it, &sView, &sTrg); if (sValue == sTrg) { auto_snprintf_s( buf, _countof(buf), L"%ls", sView.c_str()); @@ -231,7 +231,7 @@ int CDlgPluginOption::GetData( void ) CPluginOption* cOpt; WCHAR buf[MAX_LENGTH_VALUE+1]; CPluginOption::ArrayIter it; - for( i=0, it = m_cPlugin->m_options.begin(); it != m_cPlugin->m_options.end(); i++, it++ ){ + for( i=0, it = m_cPlugin->m_options.cbegin(); it != m_cPlugin->m_options.cend(); i++, it++ ){ cOpt = *it; memset_raw( &lvi, 0, sizeof( lvi )); @@ -258,7 +258,7 @@ int CDlgPluginOption::GetData( void ) selects = cOpt->GetSelects(); wstring sWbuf = buf; - for (auto it = selects.begin(); it != selects.end(); it++) { + for (auto it = selects.cbegin(); it != selects.cend(); it++) { SepSelect(*it, &sView, &sTrg); if (sView == sWbuf) { auto_sprintf( buf, L"%ls", sTrg.c_str()); @@ -599,7 +599,7 @@ void CDlgPluginOption::SetToEdit( int iLine ) wstring sWbuf = buf; nSelIdx = -1; // 選択 i = 0; - for (auto it = selects.begin(); it != selects.end(); it++) { + for (auto it = selects.cbegin(); it != selects.cend(); it++) { SepSelect(*it, &sView, &sValue); nItemIdx = Combo_AddString( hwndCombo, sView.c_str() ); if (sView == sWbuf) { diff --git a/sakura_core/env/CFileNameManager.cpp b/sakura_core/env/CFileNameManager.cpp index 0fed19777a..f010ee3944 100644 --- a/sakura_core/env/CFileNameManager.cpp +++ b/sakura_core/env/CFileNameManager.cpp @@ -123,11 +123,11 @@ int CFileNameManager::TransformFileName_MakeCache( void ){ */ LPCWSTR CFileNameManager::GetFilePathFormat( std::wstring_view strSrc, LPWSTR pszDest, size_t nDestLen, std::wstring_view strFrom, std::wstring_view strTo ) { - auto it = strSrc.begin(); + auto it = strSrc.cbegin(); wchar_t* pDest = pszDest; const wchar_t* pEnd = pszDest + nDestLen; - while( it < strSrc.end() && pDest + 1 < pEnd ){ - if( strFrom.length() <= static_cast(strSrc.end() - it) && 0 == ::_wcsnicmp( &*it, strFrom.data(), strFrom.length() ) ){ + while( it < strSrc.cend() && pDest + 1 < pEnd ){ + if( strFrom.length() <= static_cast(strSrc.cend() - it) && 0 == ::_wcsnicmp( &*it, strFrom.data(), strFrom.length() ) ){ if( strTo.length() < static_cast(pEnd - pDest) ){ ::wcsncpy_s( pDest, pEnd - pDest, strTo.data(), strTo.length() ); }else{ diff --git a/sakura_core/macro/CWSH.cpp b/sakura_core/macro/CWSH.cpp index 212264f1fe..67fa41443c 100644 --- a/sakura_core/macro/CWSH.cpp +++ b/sakura_core/macro/CWSH.cpp @@ -362,7 +362,7 @@ bool CWSHClient::Execute(const wchar_t *AScript) { bool bAddNamedItemError = false; - for( ListIter it = m_IfObjArr.begin(); it != m_IfObjArr.end(); it++ ) + for( ListIter it = m_IfObjArr.cbegin(); it != m_IfObjArr.cend(); it++ ) { DWORD dwFlag = SCRIPTITEM_ISVISIBLE; diff --git a/sakura_core/plugin/CJackManager.cpp b/sakura_core/plugin/CJackManager.cpp index 76ec9983d8..5f31ee9142 100644 --- a/sakura_core/plugin/CJackManager.cpp +++ b/sakura_core/plugin/CJackManager.cpp @@ -217,7 +217,7 @@ EFunctionCode CJackManager::GetCommandCode( int index ) const //プラグインコマンドの名前を返す int CJackManager::GetCommandName( int funccode, WCHAR* buf, int size ) const { - for( CPlug::ArrayIter it = m_Jacks[ PP_COMMAND ].plugs.begin(); it != m_Jacks[ PP_COMMAND ].plugs.end(); it++ ){ + for( CPlug::ArrayIter it = m_Jacks[ PP_COMMAND ].plugs.cbegin(); it != m_Jacks[ PP_COMMAND ].plugs.cend(); it++ ){ if( ((CPlug*)(*it))->GetFunctionCode() == funccode ){ wcsncpy( buf, ((CPlug*)(*it))->m_sLabel.c_str(), size ); buf[ size-1 ] = L'\0'; @@ -237,7 +237,7 @@ int CJackManager::GetCommandCount() const CPlug* CJackManager::GetCommandById( int id ) const { const CPlug::Array& plugs = GetPlugs( PP_COMMAND ); - for( CPlug::ArrayIter it = plugs.begin(); it != plugs.end(); it++ ){ + for( CPlug::ArrayIter it = plugs.cbegin(); it != plugs.cend(); it++ ){ if( (*it)->GetFunctionCode() == id ){ return (*it); } diff --git a/sakura_core/plugin/CPlugin.h b/sakura_core/plugin/CPlugin.h index 579aec2bf6..6c374bc55b 100644 --- a/sakura_core/plugin/CPlugin.h +++ b/sakura_core/plugin/CPlugin.h @@ -204,18 +204,18 @@ class CPluginOption //操作 public: - wstring GetLabel( void ) { return m_sLabel; } - void GetKey( wstring* sectin, wstring* key ) { + wstring GetLabel( void ) const { return m_sLabel; } + void GetKey( wstring* sectin, wstring* key ) const { *sectin = m_sSection; *key = m_sKey; } - wstring GetType( void ) { return m_sType; } - int GetIndex( void ) { return m_index; } - std::vector GetSelects() + wstring GetType( void ) const { return m_sType; } + int GetIndex( void ) const { return m_index; } + std::vector GetSelects() const { return (wstring_split(m_sSelects, L'|')); } - wstring GetDefaultVal(){ return m_sDefaultVal; } + wstring GetDefaultVal() const { return m_sDefaultVal; } protected: CPlugin* m_parent; diff --git a/sakura_core/plugin/CPluginIfObj.h b/sakura_core/plugin/CPluginIfObj.h index 5f7efeb724..4355ced949 100644 --- a/sakura_core/plugin/CPluginIfObj.h +++ b/sakura_core/plugin/CPluginIfObj.h @@ -114,7 +114,7 @@ class CPluginIfObj : public CWSHIfObj { && LOWORD(ID) == F_PL_GETOPTION ) { // 設定されていなければデフォルトを取得 CPluginOption::ArrayIter it; - for (it = m_cPlugin.m_options.begin(); it != m_cPlugin.m_options.end(); it++) { + for (it = m_cPlugin.m_options.cbegin(); it != m_cPlugin.m_options.cend(); it++) { wstring sSectionTmp; wstring sKeyTmp; (*it)->GetKey(&sSectionTmp, &sKeyTmp); diff --git a/sakura_core/prop/CPropComPlugin.cpp b/sakura_core/prop/CPropComPlugin.cpp index 7f26ee6169..0b06296154 100644 --- a/sakura_core/prop/CPropComPlugin.cpp +++ b/sakura_core/prop/CPropComPlugin.cpp @@ -613,7 +613,7 @@ static void LoadPluginTemp(CommonSetting& common, CMenuDrawer& cMenuDrawer) // ツールバーアイコンの更新 const CPlug::Array& plugs = CJackManager::getInstance()->GetPlugs( PP_COMMAND ); cMenuDrawer.m_pcIcons->ResetExtend(); - for( CPlug::ArrayIter it = plugs.begin(); it != plugs.end(); it++ ) { + for( CPlug::ArrayIter it = plugs.cbegin(); it != plugs.cend(); it++ ) { int iBitmap = CMenuDrawer::TOOLBAR_ICON_PLUGCOMMAND_DEFAULT - 1; const CPlug* plug = *it; if( !plug->m_sIcon.empty() ){ diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index 44ba131acf..4aa1af1b0d 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -915,7 +915,7 @@ void CEditWnd::LayoutMainMenu() const CJackManager* pcJackManager = CJackManager::getInstance(); CPlug::Array plugs = pcJackManager->GetPlugs( PP_COMMAND ); - for( CPlug::ArrayIter it = plugs.begin(); it != plugs.end(); it++ ){ + for( CPlug::ArrayIter it = plugs.cbegin(); it != plugs.cend(); it++ ){ nCount++; } } @@ -2634,7 +2634,7 @@ bool CEditWnd::InitMenu_Special(HMENU hMenu, EFunctionCode eFunc) HMENU hMenuPlugin = 0; CPlug::Array plugs = pcJackManager->GetPlugs( PP_COMMAND ); - for( CPlug::ArrayIter it = plugs.begin(); it != plugs.end(); it++ ){ + for( CPlug::ArrayIter it = plugs.cbegin(); it != plugs.cend(); it++ ){ const CPlugin* curPlugin = &(*it)->m_cPlugin; if( curPlugin != prevPlugin ){ //プラグインが変わったらプラグインポップアップメニューを登録 From dd8e15d989d6858f2bb004323e0016fce392e6a4 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 2 Oct 2021 17:48:00 +0900 Subject: [PATCH 0838/1024] =?UTF-8?q?SonarCloud=E3=81=A7=E6=A4=9C=E5=87=BA?= =?UTF-8?q?=E3=81=95=E3=82=8C=E3=81=9F=E3=83=A1=E3=83=A2=E3=83=AA=E9=96=8B?= =?UTF-8?q?=E6=94=BE=E6=BC=8F=E3=82=8C=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CEditView.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index e29ae4415a..193f772db9 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -1833,12 +1833,14 @@ bool CEditView::GetSelectedData( if( !GetSelectionInfo().IsTextSelected() ){ return false; } + std::wstring strLineNum; if( bWithLineNumber ){ /* 行番号を付与する */ /* 行番号表示に必要な桁数を計算 */ // 2014.11.30 桁はレイアウト単位である必要がある nLineNumCols = GetTextArea().DetectWidthOfLineNumberArea_calculate(&m_pcEditDoc->m_cLayoutMgr, true); nLineNumCols += 1; - pszLineNum = new wchar_t[nLineNumCols + 1]; + strLineNum.assign(nLineNumCols, L'\0'); + pszLineNum = strLineNum.data(); } CLayoutRect rcSel; @@ -2031,9 +2033,6 @@ bool CEditView::GetSelectedData( } } } - if( bWithLineNumber ){ /* 行番号を付与する */ - delete [] pszLineNum; - } return true; } From eea7702172af1ec36e9e8051d93f00c7a3ed6b4e Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Sat, 2 Oct 2021 18:20:09 +0900 Subject: [PATCH 0839/1024] =?UTF-8?q?auto=E4=BD=BF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/convert/CConvert_TabToSpace.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/convert/CConvert_TabToSpace.cpp b/sakura_core/convert/CConvert_TabToSpace.cpp index 8372a372df..dc17779d31 100644 --- a/sakura_core/convert/CConvert_TabToSpace.cpp +++ b/sakura_core/convert/CConvert_TabToSpace.cpp @@ -36,7 +36,7 @@ bool CConvert_TabToSpace::DoConvert(CNativeW* pcData) { const std::wstring_view source(pcData->GetStringPtr(), pcData->GetStringLength()); - const std::ptrdiff_t numOfTabs = std::count(source.cbegin(), source.cend(), L'\t'); + const auto numOfTabs = std::count(source.cbegin(), source.cend(), L'\t'); std::wstring buffer; buffer.reserve(source.length() + numOfTabs * (m_nTabWidth - 1)); From 7be4f029ef65628a1b7746e2ab2532978273c0dd Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 2 Oct 2021 18:37:38 +0900 Subject: [PATCH 0840/1024] =?UTF-8?q?(=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= =?UTF-8?q?)=E6=96=87=E5=AD=97=E5=88=97=E9=95=B7=E3=81=A7=E3=81=AA?= =?UTF-8?q?=E3=81=8F=E3=83=90=E3=83=83=E3=83=95=E3=82=A1=E3=82=B5=E3=82=A4?= =?UTF-8?q?=E3=82=BA=E3=82=92=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CEditView.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index 193f772db9..1df0b059bc 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -1886,7 +1886,7 @@ bool CEditView::GetSelectedData( //>> 2002/04/18 Azumaiya // メモリ確保に失敗したら抜ける - if( 0 == cmemBuf->GetStringLength() ){ + if( 0 == cmemBuf->capacity() ){ return false; } @@ -1969,7 +1969,7 @@ bool CEditView::GetSelectedData( //>> 2002/04/18 Azumaiya // メモリ確保に失敗したら抜ける - if( 0 == cmemBuf->GetStringLength() ){ + if( 0 == cmemBuf->capacity() ){ return false; } From 2ece1efe366619ab8d9b93280a9215a221616c84 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 2 Oct 2021 21:57:30 +0900 Subject: [PATCH 0841/1024] =?UTF-8?q?GSTR=5FAPPNAME=E3=81=AE=E3=83=AA?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=AF=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0?= =?UTF-8?q?(=E3=83=AC=E3=83=99=E3=83=AB1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ・グローバル変数の定義位置(WinMain.cpp)が不適切なのを是正。 ・TCHAR型とWCHAR型が別定義なのを是正 ・未使用のACHAR型定義を削除 --- sakura_core/_main/WinMain.cpp | 27 --------------------------- sakura_core/_main/global.cpp | 29 ++++++++++++++++++++++++++++- sakura_core/config/app_constants.h | 7 ++----- 3 files changed, 30 insertions(+), 33 deletions(-) diff --git a/sakura_core/_main/WinMain.cpp b/sakura_core/_main/WinMain.cpp index 59eee1c13e..6c7a244f84 100644 --- a/sakura_core/_main/WinMain.cpp +++ b/sakura_core/_main/WinMain.cpp @@ -34,33 +34,6 @@ #include "env/DLLSHAREDATA.h" #include "config/app_constants.h" -// アプリ名。2007.09.21 kobake 整理 -#define _APP_NAME_(TYPE) TYPE("sakura") - -#ifdef _DEBUG -#define _APP_NAME_2_(TYPE) TYPE("(デバッグ版)") -#else -#define _APP_NAME_2_(TYPE) TYPE("") -#endif - -#ifdef ALPHA_VERSION -#define _APP_NAME_3_(TYPE) TYPE("(Alpha Version)") -#else -#define _APP_NAME_3_(TYPE) TYPE("") -#endif - -#ifdef DEV_VERSION -#define _APP_NAME_DEV_(TYPE) TYPE("(dev Version)") -#else -#define _APP_NAME_DEV_(TYPE) TYPE("") -#endif - -#define _GSTR_APPNAME_(TYPE) _APP_NAME_(TYPE) _APP_NAME_2_(TYPE) _APP_NAME_DEV_(TYPE) _APP_NAME_3_(TYPE) - -const WCHAR g_szGStrAppName[] = (_GSTR_APPNAME_(_T) ); // この変数を直接参照せずに GSTR_APPNAME を使うこと -const CHAR g_szGStrAppNameA[] = (_GSTR_APPNAME_(ATEXT)); // この変数を直接参照せずに GSTR_APPNAME_A を使うこと -const WCHAR g_szGStrAppNameW[] = (_GSTR_APPNAME_(LTEXT)); // この変数を直接参照せずに GSTR_APPNAME_W を使うこと - /*! Windows Entry point diff --git a/sakura_core/_main/global.cpp b/sakura_core/_main/global.cpp index 7112b55201..4fd40aba82 100644 --- a/sakura_core/_main/global.cpp +++ b/sakura_core/_main/global.cpp @@ -16,10 +16,37 @@ */ #include "StdAfx.h" -#include "global.h" +#include "_main/global.h" + +#include "config/app_constants.h" #include "window/CEditWnd.h" #include "CNormalProcess.h" +// アプリ名。2007.09.21 kobake 整理 +#define _APP_NAME_(TYPE) TYPE("sakura") + +#ifdef _DEBUG +#define _APP_NAME_2_(TYPE) TYPE("(デバッグ版)") +#else +#define _APP_NAME_2_(TYPE) TYPE("") +#endif + +#ifdef ALPHA_VERSION +#define _APP_NAME_3_(TYPE) TYPE("(Alpha Version)") +#else +#define _APP_NAME_3_(TYPE) TYPE("") +#endif + +#ifdef DEV_VERSION +#define _APP_NAME_DEV_(TYPE) TYPE("(dev Version)") +#else +#define _APP_NAME_DEV_(TYPE) TYPE("") +#endif + +#define _GSTR_APPNAME_(TYPE) _APP_NAME_(TYPE) _APP_NAME_2_(TYPE) _APP_NAME_DEV_(TYPE) _APP_NAME_3_(TYPE) + +const WCHAR g_szGStrAppName[] = _GSTR_APPNAME_(_T); // この変数を直接参照せずに GSTR_APPNAME を使うこと + //2007.10.02 kobake CEditWndのインスタンスへのポインタをここに保存しておく CEditWnd* g_pcEditWnd = NULL; diff --git a/sakura_core/config/app_constants.h b/sakura_core/config/app_constants.h index e61530e47b..09692bc2b8 100644 --- a/sakura_core/config/app_constants.h +++ b/sakura_core/config/app_constants.h @@ -34,12 +34,9 @@ // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // extern const WCHAR g_szGStrAppName[]; -extern const CHAR g_szGStrAppNameA[]; -extern const WCHAR g_szGStrAppNameW[]; -#define GSTR_APPNAME g_szGStrAppName //!< アプリ名の文字列 (TCHAR版) -#define GSTR_APPNAME_A g_szGStrAppNameA //!< アプリ名の文字列 (CHAR版) -#define GSTR_APPNAME_W g_szGStrAppNameW //!< アプリ名の文字列 (UNICODE版) +#define GSTR_APPNAME_W g_szGStrAppName //!< アプリ名の文字列 +#define GSTR_APPNAME GSTR_APPNAME_W // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // テキストエリア // From c2b541b81c18d305ce7f5e69b8b1ffa9e7a7e7b7 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 2 Oct 2021 22:51:20 +0900 Subject: [PATCH 0842/1024] =?UTF-8?q?GSTR=5FAPPNAME=E3=81=AE=E3=83=AA?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=AF=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0?= =?UTF-8?q?(=E3=83=AC=E3=83=99=E3=83=AB2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ・コード中に定義していた「(デバッグ版)」をリソース化 ・CSelectLangのリソースDLL変更時にグローバル変数を書き替えるように実装 --- sakura_core/CSelectLang.cpp | 8 ++++++++ sakura_core/String_define.h | 3 ++- sakura_core/_main/WinMain.cpp | 1 - sakura_core/_main/global.cpp | 24 +----------------------- sakura_core/config/app_constants.h | 2 +- sakura_core/sakura_rc.rc2 | 23 +++++++++++++++++++++++ sakura_lang_en_US/sakura_lang_rc.rc2 | 23 +++++++++++++++++++++++ 7 files changed, 58 insertions(+), 26 deletions(-) diff --git a/sakura_core/CSelectLang.cpp b/sakura_core/CSelectLang.cpp index baa91b9962..09edf8bfd3 100644 --- a/sakura_core/CSelectLang.cpp +++ b/sakura_core/CSelectLang.cpp @@ -14,6 +14,8 @@ #include "stdafx.h" #include "CSelectLang.h" + +#include "config/app_constants.h" #include "util/os.h" #include "util/module.h" #include "debug/Debug2.h" @@ -117,6 +119,9 @@ HINSTANCE CSelectLang::InitializeLanguageEnvironment( void ) psLangInfo->bValid = TRUE; // メッセージリソースDLLとして有効 m_psLangInfoList.push_back( psLangInfo ); + + // アプリ名をリソースから読み込む + ::wcsncpy_s(GSTR_APPNAME, LS(STR_GSTR_APPNAME), _TRUNCATE); } if( m_psLangInfo != NULL && m_psLangInfo->hInstance && m_psLangInfo->hInstance != GetModuleHandle(NULL) ){ @@ -404,5 +409,8 @@ HINSTANCE CSelectLang::ChangeLang( UINT nIndex ) // ロケールを設定 ::SetThreadUILanguage( m_psLangInfo->wLangId ); + // アプリ名をリソースから読み込む + ::wcsncpy_s(GSTR_APPNAME, LS(STR_GSTR_APPNAME), _TRUNCATE); + return m_psLangInfo->hInstance; } diff --git a/sakura_core/String_define.h b/sakura_core/String_define.h index 0542fbdc15..3470a46abd 100644 --- a/sakura_core/String_define.h +++ b/sakura_core/String_define.h @@ -1325,5 +1325,6 @@ #define STR_FILEDIALOG_EOL 35039 #define STR_FILEDIALOG_MRU 35040 #define STR_FILEDIALOG_OPENFOLDER 35041 +#define STR_GSTR_APPNAME 35047 -// Now using max number 35044 by STR_STATUS_FONTZOOM_1 +// Now using max number 35047 by STR_GSTR_APPNAME diff --git a/sakura_core/_main/WinMain.cpp b/sakura_core/_main/WinMain.cpp index 6c7a244f84..3754caf413 100644 --- a/sakura_core/_main/WinMain.cpp +++ b/sakura_core/_main/WinMain.cpp @@ -32,7 +32,6 @@ #include "version.h" #include "util/std_macro.h" #include "env/DLLSHAREDATA.h" -#include "config/app_constants.h" /*! Windows Entry point diff --git a/sakura_core/_main/global.cpp b/sakura_core/_main/global.cpp index 4fd40aba82..22eaf27c5c 100644 --- a/sakura_core/_main/global.cpp +++ b/sakura_core/_main/global.cpp @@ -23,29 +23,7 @@ #include "CNormalProcess.h" // アプリ名。2007.09.21 kobake 整理 -#define _APP_NAME_(TYPE) TYPE("sakura") - -#ifdef _DEBUG -#define _APP_NAME_2_(TYPE) TYPE("(デバッグ版)") -#else -#define _APP_NAME_2_(TYPE) TYPE("") -#endif - -#ifdef ALPHA_VERSION -#define _APP_NAME_3_(TYPE) TYPE("(Alpha Version)") -#else -#define _APP_NAME_3_(TYPE) TYPE("") -#endif - -#ifdef DEV_VERSION -#define _APP_NAME_DEV_(TYPE) TYPE("(dev Version)") -#else -#define _APP_NAME_DEV_(TYPE) TYPE("") -#endif - -#define _GSTR_APPNAME_(TYPE) _APP_NAME_(TYPE) _APP_NAME_2_(TYPE) _APP_NAME_DEV_(TYPE) _APP_NAME_3_(TYPE) - -const WCHAR g_szGStrAppName[] = _GSTR_APPNAME_(_T); // この変数を直接参照せずに GSTR_APPNAME を使うこと +WCHAR g_szGStrAppName[128]; // この変数を直接参照せずに GSTR_APPNAME を使うこと //2007.10.02 kobake CEditWndのインスタンスへのポインタをここに保存しておく CEditWnd* g_pcEditWnd = NULL; diff --git a/sakura_core/config/app_constants.h b/sakura_core/config/app_constants.h index 09692bc2b8..1f699de8f1 100644 --- a/sakura_core/config/app_constants.h +++ b/sakura_core/config/app_constants.h @@ -33,7 +33,7 @@ // 名前 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -extern const WCHAR g_szGStrAppName[]; +extern WCHAR g_szGStrAppName[128]; #define GSTR_APPNAME_W g_szGStrAppName //!< アプリ名の文字列 #define GSTR_APPNAME GSTR_APPNAME_W diff --git a/sakura_core/sakura_rc.rc2 b/sakura_core/sakura_rc.rc2 index fecc446220..979656e969 100644 --- a/sakura_core/sakura_rc.rc2 +++ b/sakura_core/sakura_rc.rc2 @@ -1,6 +1,28 @@ // このファイルにはリソースエディタで編集できない要素を配置します. // このファイルのエンコーディング/改行コードは UTF-16LE(BOM)/CRLF です. +#define _APP_NAME_1 "sakura" + +#ifdef _DEBUG +#define _APP_NAME_2 "(デバッグ版)" +#else +#define _APP_NAME_2 "" +#endif + +#ifdef DEV_VERSION +#define _APP_NAME_3 "(dev Version)" +#else +#define _APP_NAME_3 "" +#endif + +#ifdef ALPHA_VERSION +#define _APP_NAME_4 "(Alpha Version)" +#else +#define _APP_NAME_4 "" +#endif + +#define _GSTR_APPNAME _APP_NAME_1 _APP_NAME_2 _APP_NAME_3 _APP_NAME_4 + #define S_COPYRIGHT "Copyright (C) 1998-2021 by Norio Nakatani & Collaborators" #define FL_VER PR_VER #define FL_VER_STR PR_VER_STR @@ -137,6 +159,7 @@ BEGIN #else STR_BREGONIG_INIT "bregonig.dll の利用に失敗しました。\r\n正規表現を利用するには Unicode 版の bregonig.dll が必要です。\r\n入手方法はヘルプを参照してください。" #endif + STR_GSTR_APPNAME _GSTR_APPNAME // Select Language STR_SELLANG_NAME "Japanese" // language name [Primary language (Sublanguage)] diff --git a/sakura_lang_en_US/sakura_lang_rc.rc2 b/sakura_lang_en_US/sakura_lang_rc.rc2 index 83c24718ec..67a1a67b16 100644 --- a/sakura_lang_en_US/sakura_lang_rc.rc2 +++ b/sakura_lang_en_US/sakura_lang_rc.rc2 @@ -1,6 +1,28 @@ // このファイルにはリソースエディタで編集できない要素を配置します. // このファイルのエンコーディング/改行コードは UTF-16LE(BOM)/CRLF です. +#define _APP_NAME_1 "sakura" + +#ifdef _DEBUG +#define _APP_NAME_2 "(debug build)" +#else +#define _APP_NAME_2 "" +#endif + +#ifdef DEV_VERSION +#define _APP_NAME_3 "(dev Version)" +#else +#define _APP_NAME_3 "" +#endif + +#ifdef ALPHA_VERSION +#define _APP_NAME_4 "(Alpha Version)" +#else +#define _APP_NAME_4 "" +#endif + +#define _GSTR_APPNAME _APP_NAME_1 _APP_NAME_2 _APP_NAME_3 _APP_NAME_4 + #define S_COPYRIGHT "Copyright (C) 1998-2021 by Norio Nakatani & Collaborators" #define S_COPYRIGHT_TRANSLATION "Copyright (C) 2011-2021 by Lucien & Collaborators" #define FL_VER PR_VER @@ -148,4 +170,5 @@ BEGIN #else STR_BREGONIG_INIT "failed to init the bregonig.dll.\r\nRegex relies upon bregonig.dll(Uniocde ver) to work.\r\nPlease refer to the help for assistance." #endif + STR_GSTR_APPNAME _GSTR_APPNAME END From 9ebec840c12ad92655d04fa87d3cc06c65f21fe2 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 3 Oct 2021 22:56:44 +0900 Subject: [PATCH 0843/1024] =?UTF-8?q?GSTR=5FAPPNAME=E3=81=AE=E3=83=AA?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=AF=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0?= =?UTF-8?q?(=E3=83=AC=E3=83=99=E3=83=AB3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit アプリ名をグローバル変数で保持していたg_szGStrAppNameを、プロセスクラスのインスタンスメンバに昇格。 --- sakura_core/CSelectLang.cpp | 10 +++++----- sakura_core/_main/CProcess.cpp | 15 ++++++++++++++- sakura_core/_main/CProcess.h | 7 +++++-- sakura_core/_main/global.cpp | 18 ++++++++++++++++-- sakura_core/config/app_constants.h | 4 ++-- 5 files changed, 42 insertions(+), 12 deletions(-) diff --git a/sakura_core/CSelectLang.cpp b/sakura_core/CSelectLang.cpp index 09edf8bfd3..8136b54e7d 100644 --- a/sakura_core/CSelectLang.cpp +++ b/sakura_core/CSelectLang.cpp @@ -15,7 +15,7 @@ #include "stdafx.h" #include "CSelectLang.h" -#include "config/app_constants.h" +#include "_main/CProcess.h" #include "util/os.h" #include "util/module.h" #include "debug/Debug2.h" @@ -119,9 +119,6 @@ HINSTANCE CSelectLang::InitializeLanguageEnvironment( void ) psLangInfo->bValid = TRUE; // メッセージリソースDLLとして有効 m_psLangInfoList.push_back( psLangInfo ); - - // アプリ名をリソースから読み込む - ::wcsncpy_s(GSTR_APPNAME, LS(STR_GSTR_APPNAME), _TRUNCATE); } if( m_psLangInfo != NULL && m_psLangInfo->hInstance && m_psLangInfo->hInstance != GetModuleHandle(NULL) ){ @@ -410,7 +407,10 @@ HINSTANCE CSelectLang::ChangeLang( UINT nIndex ) ::SetThreadUILanguage( m_psLangInfo->wLangId ); // アプリ名をリソースから読み込む - ::wcsncpy_s(GSTR_APPNAME, LS(STR_GSTR_APPNAME), _TRUNCATE); + if( auto pcProcess = CProcess::getInstance() ) + { + pcProcess->UpdateAppName(LS(STR_GSTR_APPNAME)); + } return m_psLangInfo->hInstance; } diff --git a/sakura_core/_main/CProcess.cpp b/sakura_core/_main/CProcess.cpp index 5864443212..560c4c5e8d 100644 --- a/sakura_core/_main/CProcess.cpp +++ b/sakura_core/_main/CProcess.cpp @@ -16,11 +16,14 @@ */ #include "StdAfx.h" -#include "CProcess.h" +#include "_main/CProcess.h" + #include "util/module.h" #include "env/CShareData.h" #include "env/DLLSHAREDATA.h" #include "config/app_constants.h" +#include "CSelectLang.h" +#include "String_define.h" /*! @brief プロセス基底クラス @@ -38,6 +41,8 @@ CProcess::CProcess( , m_pfnMiniDumpWriteDump(NULL) #endif { + // アプリ名をリソースから読み込む + m_strAppName = LS(STR_GSTR_APPNAME); } /*! @@ -165,3 +170,11 @@ void CProcess::RefreshString() { m_cShareData.RefreshString(); } + +/*! + 言語選択後にアプリ名を更新します。 + */ +void CProcess::UpdateAppName( std::wstring_view appName ) +{ + m_strAppName = appName; +} diff --git a/sakura_core/_main/CProcess.h b/sakura_core/_main/CProcess.h index 561a9f929b..08978b8a73 100644 --- a/sakura_core/_main/CProcess.h +++ b/sakura_core/_main/CProcess.h @@ -18,6 +18,8 @@ #pragma once #include +#include +#include #include "global.h" #include "util/design_template.h" @@ -59,6 +61,8 @@ class CProcess : public TSingleInstance { HWND GetMainWindow() const{ return m_hWnd; } [[nodiscard]] const CShareData* GetShareDataPtr() const { return &m_cShareData; } + [[nodiscard]] LPCWSTR GetAppName( void ) const { return m_strAppName.c_str(); } + void UpdateAppName( std::wstring_view appName ); private: HINSTANCE m_hInstance; @@ -75,7 +79,6 @@ class CProcess : public TSingleInstance { ); #endif CShareData m_cShareData; - -private: + std::wstring m_strAppName; }; #endif /* SAKURA_CPROCESS_FECC5450_9096_4EAD_A6DA_C8B12C3A31B5_H_ */ diff --git a/sakura_core/_main/global.cpp b/sakura_core/_main/global.cpp index 22eaf27c5c..b0f52ac216 100644 --- a/sakura_core/_main/global.cpp +++ b/sakura_core/_main/global.cpp @@ -18,12 +18,26 @@ #include "StdAfx.h" #include "_main/global.h" +#include "basis/CErrorInfo.h" #include "config/app_constants.h" #include "window/CEditWnd.h" #include "CNormalProcess.h" -// アプリ名。2007.09.21 kobake 整理 -WCHAR g_szGStrAppName[128]; // この変数を直接参照せずに GSTR_APPNAME を使うこと +/*! + アプリ名を取得します。 + プロセスの生成前にアプリ名を取得することはできません。 + + @date 2007/09/21 kobake 整理 + */ +LPCWSTR GetAppName( void ) +{ + const auto pcProcess = CProcess::getInstance(); + if( !pcProcess ) + { + ::_com_raise_error(E_FAIL, MakeMsgError(L"Any process has been instantiated.")); + } + return pcProcess->GetAppName(); +} //2007.10.02 kobake CEditWndのインスタンスへのポインタをここに保存しておく CEditWnd* g_pcEditWnd = NULL; diff --git a/sakura_core/config/app_constants.h b/sakura_core/config/app_constants.h index 1f699de8f1..9916227ee0 100644 --- a/sakura_core/config/app_constants.h +++ b/sakura_core/config/app_constants.h @@ -33,9 +33,9 @@ // 名前 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -extern WCHAR g_szGStrAppName[128]; +LPCWSTR GetAppName( void ); -#define GSTR_APPNAME_W g_szGStrAppName //!< アプリ名の文字列 +#define GSTR_APPNAME_W GetAppName() //!< アプリ名の文字列 #define GSTR_APPNAME GSTR_APPNAME_W // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // From 52ce87498ea5b87c291b2879259c86bb91524e8e Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 3 Oct 2021 23:19:02 +0900 Subject: [PATCH 0844/1024] =?UTF-8?q?GSTR=5FAPPNAME=E3=81=AE=E3=83=AA?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=AF=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0?= =?UTF-8?q?(=E3=83=AC=E3=83=99=E3=83=AB4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit メッセージボックスを表示するエラーケースに、プロセスのインスタンスを生成するコードを追加 --- tests/unittests/test-cconvert.cpp | 6 ++++++ tests/unittests/test-cmemory.cpp | 10 ++++++++++ tests/unittests/test-statictype.cpp | 6 ++++++ 3 files changed, 22 insertions(+) diff --git a/tests/unittests/test-cconvert.cpp b/tests/unittests/test-cconvert.cpp index 4f4c4d01a4..b77fe42b39 100644 --- a/tests/unittests/test-cconvert.cpp +++ b/tests/unittests/test-cconvert.cpp @@ -42,6 +42,8 @@ #include "convert/CConvert_ZeneisuToHaneisu.h" #include "convert/CConvert_ZenkataToHankata.h" +#include "_main/CNormalProcess.h" + TEST(CConvert, ZenkataToHankata) { CNativeW actual; @@ -405,6 +407,10 @@ class ConvTest : public ::testing::TestWithParam {}; */ TEST_P(ConvTest, test) { + // メモリ確保失敗時に表示するメッセージボックスで、 + // 「アプリ名」を取得するためにプロセスのインスタンスが必要。 + CNormalProcess cProcess(::GetModuleHandle(nullptr), L""); + const auto eFuncCode = std::get<0>(GetParam()); std::wstring_view source = std::get<1>(GetParam()); std::wstring_view expected = std::get<2>(GetParam()); diff --git a/tests/unittests/test-cmemory.cpp b/tests/unittests/test-cmemory.cpp index b99b4ee78f..5c49c904c0 100644 --- a/tests/unittests/test-cmemory.cpp +++ b/tests/unittests/test-cmemory.cpp @@ -25,6 +25,8 @@ #include #include "mem/CMemory.h" +#include "_main/CNormalProcess.h" + /*! _SetRawLength(0) を呼び出して落ちないことを確認する */ @@ -107,6 +109,10 @@ TEST(CMemory, OverHeapMaxReq) { CMemory cmem; + // メモリ確保失敗時に表示するメッセージボックスで、 + // 「アプリ名」を取得するためにプロセスのインスタンスが必要。 + CNormalProcess cProcess(::GetModuleHandle(nullptr), L""); + // _HEAP_MAXREQを越える値を指定すると、メモリは確保されない cmem.AllocBuffer(static_cast(_HEAP_MAXREQ) + 1); ASSERT_TRUE(cmem.GetRawPtr() == nullptr); @@ -130,6 +136,10 @@ TEST(CMemory, OverMaxSize) { CMemory cmem; + // メモリ確保失敗時に表示するメッセージボックスで、 + // 「アプリ名」を取得するためにプロセスのインスタンスが必要。 + CNormalProcess cProcess(::GetModuleHandle(nullptr), L""); + // INT_MAXを越える値を指定すると、メモリは確保されない cmem.AllocBuffer(static_cast(INT_MAX) + 1); ASSERT_TRUE(cmem.GetRawPtr() == nullptr); diff --git a/tests/unittests/test-statictype.cpp b/tests/unittests/test-statictype.cpp index bfe61862f8..1ef307c696 100644 --- a/tests/unittests/test-statictype.cpp +++ b/tests/unittests/test-statictype.cpp @@ -34,11 +34,17 @@ #include "util/StaticType.h" +#include "_main/CNormalProcess.h" + /*! @brief StaticVectorのテスト */ TEST(StaticVector, push_back) { + // メモリ確保失敗時に表示するメッセージボックスで、 + // 「アプリ名」を取得するためにプロセスのインスタンスが必要。 + CNormalProcess cProcess(::GetModuleHandle(nullptr), L""); + // サイズ1の配列を用意する auto vec = StaticVector(); const auto& constVec = vec; From 79e07fa5b3c3cd662c1aad4305bddaecef8cca7d Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 10 Oct 2021 01:12:19 +0900 Subject: [PATCH 0845/1024] =?UTF-8?q?=E3=83=90=E3=83=BC=E3=82=B8=E3=83=A7?= =?UTF-8?q?=E3=83=B3=E6=83=85=E5=A0=B1=E3=82=92=E3=83=AA=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=AF=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura/githash.bat | 46 +++++++++++++++ sakura_core/_main/global.cpp | 9 ++- sakura_core/config/build_config.h | 3 - sakura_core/dlg/CDlgAbout.cpp | 24 ++------ sakura_core/sakura_rc.rc2 | 32 ++++++----- sakura_core/version.h | 86 ++++------------------------ sakura_lang_en_US/sakura_lang_rc.rc2 | 32 ++++++----- 7 files changed, 103 insertions(+), 129 deletions(-) diff --git a/sakura/githash.bat b/sakura/githash.bat index ca959b6cb7..69e03b55e1 100644 --- a/sakura/githash.bat +++ b/sakura/githash.bat @@ -63,11 +63,42 @@ exit /b 0 set GIT_TAG_NAME= ) + :: ビルド環境の名前が未定義なら local とする + if not defined BUILD_ENV_NAME ( + set BUILD_ENV_NAME=Local + ) + + :: Gitリポジトリの累積コミット数(取れない場合は0) + call :set_build_version + @rem get back to the original directory popd exit /b 0 +:set_build_version + if defined BUILD_VERSION exit /b 0 + :: MinGWビルドは判定を諦める + if "%SHELL%" == "/usr/bin/bash") do ( + set BUILD_VERSION=0 + exit /b 0 + ) + + :: gitがPATHに存在するかチェックする + set HAS_GIT_IN_PATH=0 + for /f "usebackq" %%a in (`where $PATH:git`) do ( + set HAS_GIT_IN_PATH=1 + ) + + if "%HAS_GIT_IN_PATH%" == "1" ( + for /f "usebackq" %%s in (`git log --oneline --no-merges ^| find /C " "`) do ( + set BUILD_VERSION=%%s + ) + ) else ( + set BUILD_VERSION=0 + ) + exit /b 0 + :set_repo_and_pr_variables if defined APPVEYOR_REPO_NAME ( set CI_REPO_NAME=%APPVEYOR_REPO_NAME% @@ -142,6 +173,7 @@ exit /b 0 :set_ci_build_url call :set_ci_build_url_for_appveyor call :set_ci_build_url_for_azurepipelines + call :set_ci_build_url_for_githubactions exit /b 0 :set_ci_build_url_for_appveyor @@ -150,6 +182,7 @@ exit /b 0 if not defined APPVEYOR_ACCOUNT_NAME exit /b 0 if not defined APPVEYOR_PROJECT_SLUG exit /b 0 if not defined APPVEYOR_BUILD_VERSION exit /b 0 + set BUILD_ENV_NAME=Appveyor set CI_BUILD_URL=%APPVEYOR_URL%/project/%APPVEYOR_ACCOUNT_NAME%/%APPVEYOR_PROJECT_SLUG%/build/%APPVEYOR_BUILD_VERSION% exit /b 0 @@ -157,9 +190,16 @@ exit /b 0 if not defined SYSTEM_TEAMFOUNDATIONSERVERURI exit /b 0 if not defined SYSTEM_TEAMPROJECT exit /b 0 if not defined BUILD_BUILDID exit /b 0 + set BUILD_ENV_NAME=AZP set CI_BUILD_URL=%SYSTEM_TEAMFOUNDATIONSERVERURI%%SYSTEM_TEAMPROJECT%/_build/results?buildId=%BUILD_BUILDID% exit /b 0 +:set_ci_build_url_for_githubactions + if not defined GITHUB_ACTIONS exit /b 0 + if not "%GITHUB_ACTIONS%" == "true" exit /b 0 + set BUILD_ENV_NAME=GHA + exit /b 0 + :update_output_githash @rem update githash.h if necessary set GITHASH_H=%OUT_DIR%\githash.h @@ -207,6 +247,9 @@ exit /b 0 @echo APPVEYOR_URL : %APPVEYOR_URL% @echo APPVEYOR_PROJECT_SLUG : %APPVEYOR_PROJECT_SLUG% @echo. + @echo BUILD_ENV_NAME : %BUILD_ENV_NAME% + @echo BUILD_VERSION : %BUILD_VERSION% + @echo. if exist "%GITHASH_H%" del "%GITHASH_H%" move /y "%GITHASH_H_TMP%" "%GITHASH_H%" @@ -327,4 +370,7 @@ exit /b 0 echo // APPVEYOR specific variables end echo // + echo #define BUILD_ENV_NAME "%BUILD_ENV_NAME%" + echo #define BUILD_VERSION %BUILD_VERSION% + exit /b 0 diff --git a/sakura_core/_main/global.cpp b/sakura_core/_main/global.cpp index b0f52ac216..e9fccb355b 100644 --- a/sakura_core/_main/global.cpp +++ b/sakura_core/_main/global.cpp @@ -18,10 +18,17 @@ #include "StdAfx.h" #include "_main/global.h" +#include "_main/CNormalProcess.h" #include "basis/CErrorInfo.h" #include "config/app_constants.h" #include "window/CEditWnd.h" -#include "CNormalProcess.h" +#include "version.h" + +#ifdef DEV_VERSION +#pragma message("-------------------------------------------------------------------------------------") +#pragma message("--- This is a Dev version and under development. Be careful to use this version. ---") +#pragma message("-------------------------------------------------------------------------------------") +#endif /*! アプリ名を取得します。 diff --git a/sakura_core/config/build_config.h b/sakura_core/config/build_config.h index 81be206c16..6cff0c7648 100644 --- a/sakura_core/config/build_config.h +++ b/sakura_core/config/build_config.h @@ -110,7 +110,4 @@ static const bool UNICODE_BOOL=true; #define DBG_NEW new #endif -#if _WIN64 -#define ALPHA_VERSION -#endif #endif /* SAKURA_BUILD_CONFIG_DB7D8D47_EA6A_4ABF_A081_A31875D78808_H_ */ diff --git a/sakura_core/dlg/CDlgAbout.cpp b/sakura_core/dlg/CDlgAbout.cpp index 67087d14c5..b01e9ccf2f 100644 --- a/sakura_core/dlg/CDlgAbout.cpp +++ b/sakura_core/dlg/CDlgAbout.cpp @@ -172,8 +172,7 @@ BOOL CDlgAbout::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) // 2010.04.15 Moca コンパイラ情報を分離/WINヘッダ,N_SHAREDATA_VERSION追加 // 以下の形式で出力 - //サクラエディタ Ver. 2.4.1.0 32bit DEBUG dev - //(GitHash xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx) + //サクラエディタ開発版(64bitデバッグ) v2.4.1.1234GHA (xxxxxxxx) //(GitURL https://github.com/sakura/sakura-editor.git) // // Share Ver: 96 @@ -184,28 +183,14 @@ BOOL CDlgAbout::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) // 1行目 // バージョン情報 - cmemMsg.AppendString(LS(STR_DLGABOUT_APPNAME)); // e.g. "サクラエディタ", "Sakura Editor" - cmemMsg.AppendString(L" "); - DWORD dwVersionMS, dwVersionLS; GetAppVersionInfo( NULL, VS_VERSION_INFO, &dwVersionMS, &dwVersionLS ); cmemMsg.AppendStringF( - L"v%d.%d.%d.%d", + L"%s v%d.%d.%d.%d" LTEXT(BUILD_ENV_NAME) LTEXT(VERSION_HASH) L"\r\n", + LS(STR_GSTR_APPNAME), HIWORD(dwVersionMS), LOWORD(dwVersionMS), HIWORD(dwVersionLS), LOWORD(dwVersionLS) // e.g. {2, 3, 2, 0} ); - cmemMsg.AppendString( L" " _T(VER_PLATFORM) ); - cmemMsg.AppendString( _T(SPACE_WHEN_DEBUG) _T(VER_CONFIG) ); -#ifdef DEV_VERSION - cmemMsg.AppendString( _T(DEV_VERSION_STR_WITH_SPACE) ); -#endif -#ifdef ALPHA_VERSION - cmemMsg.AppendString( L" " _T(ALPHA_VERSION_STR)); -#endif -#ifdef GIT_TAG_NAME - cmemMsg.AppendString( L" (tag " _T(GIT_TAG_NAME) L")" ); -#endif - cmemMsg.AppendString( L"\r\n" ); // 2行目 #ifdef GIT_COMMIT_HASH @@ -221,9 +206,8 @@ BOOL CDlgAbout::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) cmemMsg.AppendString( L"\r\n" ); // コンパイル情報 - cmemMsg.AppendString( L" Compile Info: " ); cmemMsg.AppendStringF( - _T(COMPILER_TYPE) _T(TARGET_M_SUFFIX) L"%d " TSTR_TARGET_MODE L" WIN%03x/I%03x/C%03x/N%03x\r\n", + L" Compile Info: " _T(COMPILER_TYPE) _T(TARGET_M_SUFFIX) L"%d " TSTR_TARGET_MODE L" WIN%03x/I%03x/C%03x/N%03x\r\n", COMPILER_VER, WINVER, _WIN32_IE, MY_WIN32_WINDOWS, MY_WIN32_WINNT ); diff --git a/sakura_core/sakura_rc.rc2 b/sakura_core/sakura_rc.rc2 index 979656e969..d1fe93e59c 100644 --- a/sakura_core/sakura_rc.rc2 +++ b/sakura_core/sakura_rc.rc2 @@ -1,31 +1,33 @@ // このファイルにはリソースエディタで編集できない要素を配置します. // このファイルのエンコーディング/改行コードは UTF-16LE(BOM)/CRLF です. -#define _APP_NAME_1 "sakura" +#define _APP_NAME_1 "サクラエディタ" -#ifdef _DEBUG -#define _APP_NAME_2 "(デバッグ版)" +#ifdef DEV_VERSION +#define _APP_NAME_2 "開発版" #else #define _APP_NAME_2 "" #endif -#ifdef DEV_VERSION -#define _APP_NAME_3 "(dev Version)" +#ifdef _WIN64 +#define _APP_NAME_3 "64bit" #else -#define _APP_NAME_3 "" +#define _APP_NAME_3 "32bit" #endif -#ifdef ALPHA_VERSION -#define _APP_NAME_4 "(Alpha Version)" +#ifdef _DEBUG +#define _APP_NAME_4 "デバッグ" #else #define _APP_NAME_4 "" #endif +#if defined(_WIN64) || defined(_DEBUG) +#define _GSTR_APPNAME _APP_NAME_1 _APP_NAME_2 "(" _APP_NAME_3 _APP_NAME_4 ")" +#else #define _GSTR_APPNAME _APP_NAME_1 _APP_NAME_2 _APP_NAME_3 _APP_NAME_4 +#endif #define S_COPYRIGHT "Copyright (C) 1998-2021 by Norio Nakatani & Collaborators" -#define FL_VER PR_VER -#define FL_VER_STR PR_VER_STR ///////////////////////////////////////////////////////////////////////////// // @@ -90,8 +92,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION FL_VER - PRODUCTVERSION PR_VER + FILEVERSION FILE_VERSION + PRODUCTVERSION PRODUCT_VERSION FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x01L @@ -109,13 +111,13 @@ BEGIN VALUE "Comments", "このソフトはフリーソフトです。\0" VALUE "CompanyName", "Project: Sakura-Editor\0" VALUE "FileDescription", "サクラエディタ\0" - VALUE "FileVersion", FL_VER_STR + VALUE "FileVersion", VERSION_STR VALUE "InternalName", "sakura\0" VALUE "LegalCopyright", S_COPYRIGHT VALUE "LegalTrademarks", " \0" VALUE "OriginalFilename", "sakura.exe\0" - VALUE "ProductName", "サクラエディタ\0" - VALUE "ProductVersion", RESOURCE_VERSION_STRING(PR_VER_STR) // e.g. "2.3.2.0 (4a0de579) UNICODE 64bit DEBUG" + VALUE "ProductName", _GSTR_APPNAME "\0" + VALUE "ProductVersion", VERSION_STR VERSION_HASH // e.g. "2.4.1.0 (4a0de579)" END END BLOCK "VarFileInfo" diff --git a/sakura_core/version.h b/sakura_core/version.h index 0dd71371d7..e4176fc832 100644 --- a/sakura_core/version.h +++ b/sakura_core/version.h @@ -30,87 +30,23 @@ #include "githash.h" // バージョン定義 // -// ver a.b.c.d -// 例: ver 2.3.2.0 -// a => 2 -// b => 3 -// c => 2 -// d => 0 -#define VER_A 2 // a of ver a.b.c.d -#define VER_B 4 // b of ver a.b.c.d -#define VER_C 2 // c of ver a.b.c.d -#ifdef CI_BUILD_NUMBER_INT -#define VER_D CI_BUILD_NUMBER_INT // d of ver a.b.c.d -#else -#define VER_D 0 // d of ver a.b.c.d -#endif +#define VER_A 2 // メジャーバージョン(2固定) +#define VER_B 4 // マイナーバージョン(4以降はGitHub版) +#define VER_C 2 // 連番(マージの通し番号) +#define VER_D BUILD_VERSION // Gitの累積コミット数 #define TO_STR(arg) #arg -#define MAKE_VERSION_STR(a, b, c, d, sep) TO_STR(a) sep TO_STR(b) sep TO_STR(c) sep TO_STR(d) -#define MAKE_VERSION_STR_PERIOD(a, b, c, d) MAKE_VERSION_STR(a, b, c, d, ".") -#define MAKE_VERSION_COMMA(a, b, c, d) a, b, c, d - -#define PR_VER_STR MAKE_VERSION_STR_PERIOD(VER_A, VER_B, VER_C, VER_D) -#define PR_VER MAKE_VERSION_COMMA(VER_A, VER_B, VER_C, VER_D) - -#define VER_CHARSET "UNICODE" - -#ifdef _WIN64 -#define VER_PLATFORM "64bit" -#else -#define VER_PLATFORM "32bit" -#endif - -#ifdef _DEBUG -#define VER_CONFIG "DEBUG" -#else -#define VER_CONFIG "" -#endif +#define _MAKE_VERSION(a, b, c, d) a, b, c, d +#define _MAKE_VERSION_STR(a, b, c, d, sep) TO_STR(a) sep TO_STR(b) sep TO_STR(c) sep TO_STR(d) -#ifdef _DEBUG -#define SPACE_WHEN_DEBUG " " -#else -#define SPACE_WHEN_DEBUG "" -#endif - -#if defined(ALPHA_VERSION) -#pragma message("----------------------------------------------------------------------------------------") -#pragma message("--- This is an alpha version and under development. Be careful to use this version. ---") -#pragma message("----------------------------------------------------------------------------------------") -#endif - -#ifdef ALPHA_VERSION -#define ALPHA_VERSION_STR "Alpha Version" -#define ALPHA_VERSION_STR_WITH_SPACE " " ALPHA_VERSION_STR -#else -#define ALPHA_VERSION_STR_WITH_SPACE "" -#endif - -#ifdef DEV_VERSION -#define DEV_VERSION_STR_WITH_SPACE " dev" -#else -#define DEV_VERSION_STR_WITH_SPACE "" -#endif +#define PRODUCT_VERSION _MAKE_VERSION(VER_A, VER_B, VER_C, 0) +#define FILE_VERSION _MAKE_VERSION(VER_A, VER_B, VER_C, VER_D) +#define VERSION_STR _MAKE_VERSION_STR(VER_A, VER_B, VER_C, VER_D, ".") -// バージョン情報埋め込み用 Git ハッシュ文字列 (存在しない場合には空文字列) #ifdef GIT_SHORT_COMMIT_HASH -#define VER_GIT_SHORTHASH " (" GIT_SHORT_COMMIT_HASH ")" +#define VERSION_HASH " (" GIT_SHORT_COMMIT_HASH ")" #else -#define VER_GIT_SHORTHASH "" +#define VERSION_HASH " (Undefined)" #endif -// リソース埋め込み用バージョン文字列 // -// e.g. "2.3.2.0 (4a0de579) UNICODE 64bit dev DEBUG" … (開発版) デバッグビルド時の例 // -// e.g. "2.3.2.0 (4a0de579) UNICODE 64bit dev" … (開発版) リリースビルド時の例 // -// e.g. "2.3.2.0 UNICODE 64bit dev" … (開発版) Git 情報無い場合の例 // -// e.g. "2.3.2.0 (4a0de579) UNICODE 64bit DEBUG" … (タグ付き) デバッグビルド時の例 // -// e.g. "2.3.2.0 (4a0de579) UNICODE 64bit" … (タグ付き) リリースビルド時の例 // -#define RESOURCE_VERSION_STRING(_VersionString) \ - _VersionString \ - VER_GIT_SHORTHASH \ - " " VER_CHARSET \ - " " VER_PLATFORM \ - DEV_VERSION_STR_WITH_SPACE \ - SPACE_WHEN_DEBUG \ - VER_CONFIG ALPHA_VERSION_STR_WITH_SPACE #endif /* SAKURA_VERSION_F8EBA970_BB7A_43D9_B89A_04FB0B586A8A_H_ */ diff --git a/sakura_lang_en_US/sakura_lang_rc.rc2 b/sakura_lang_en_US/sakura_lang_rc.rc2 index 67a1a67b16..c07846735f 100644 --- a/sakura_lang_en_US/sakura_lang_rc.rc2 +++ b/sakura_lang_en_US/sakura_lang_rc.rc2 @@ -1,32 +1,34 @@ // このファイルにはリソースエディタで編集できない要素を配置します. // このファイルのエンコーディング/改行コードは UTF-16LE(BOM)/CRLF です. -#define _APP_NAME_1 "sakura" +#define _APP_NAME_1 "SAKURA Editor" -#ifdef _DEBUG -#define _APP_NAME_2 "(debug build)" +#ifdef DEV_VERSION +#define _APP_NAME_2 " Dev" #else #define _APP_NAME_2 "" #endif -#ifdef DEV_VERSION -#define _APP_NAME_3 "(dev Version)" +#ifdef _WIN64 +#define _APP_NAME_3 "64bit" #else -#define _APP_NAME_3 "" +#define _APP_NAME_3 "32bit" #endif -#ifdef ALPHA_VERSION -#define _APP_NAME_4 "(Alpha Version)" +#ifdef _DEBUG +#define _APP_NAME_4 " Debug" #else #define _APP_NAME_4 "" #endif +#if defined(_WIN64) || defined(_DEBUG) +#define _GSTR_APPNAME _APP_NAME_1 _APP_NAME_2 "(" _APP_NAME_3 _APP_NAME_4 ")" +#else #define _GSTR_APPNAME _APP_NAME_1 _APP_NAME_2 _APP_NAME_3 _APP_NAME_4 +#endif #define S_COPYRIGHT "Copyright (C) 1998-2021 by Norio Nakatani & Collaborators" #define S_COPYRIGHT_TRANSLATION "Copyright (C) 2011-2021 by Lucien & Collaborators" -#define FL_VER PR_VER -#define FL_VER_STR PR_VER_STR ///////////////////////////////////////////////////////////////////////////// // @@ -93,8 +95,8 @@ END // Version // VS_VERSION_INFO VERSIONINFO - FILEVERSION FL_VER - PRODUCTVERSION PR_VER + FILEVERSION FILE_VERSION + PRODUCTVERSION PRODUCT_VERSION FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x01L @@ -112,13 +114,13 @@ BEGIN VALUE "Comments", "This is free software\0" VALUE "CompanyName", "Project: Sakura-Editor\0" VALUE "FileDescription", "Sakura Editor Language DLL(en_US)\0" - VALUE "FileVersion", FL_VER_STR + VALUE "FileVersion", VERSION_STR VALUE "InternalName", "sakura\0" VALUE "LegalCopyright", S_COPYRIGHT_TRANSLATION VALUE "LegalTrademarks", " \0" VALUE "OriginalFilename", "sakura.exe\0" - VALUE "ProductName", "Sakura Editor Language DLL\0" - VALUE "ProductVersion", RESOURCE_VERSION_STRING(PR_VER_STR) // e.g. "2.3.2.0 4a0de579 UNICODE 64bit DEBUG" + VALUE "ProductName", _GSTR_APPNAME "\0" + VALUE "ProductVersion", VERSION_STR VERSION_HASH // e.g. "2.4.1.0 (4a0de579)" END END BLOCK "VarFileInfo" From 4d906caf8d56a4b169816b28499df27e071df920 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 10 Oct 2021 13:06:01 +0900 Subject: [PATCH 0846/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ・BUILD_ENV_NAMEの前に空白を入れる ・英語版丸括弧の前に空白を入れる ・「v」を変更前コメントに合わせ「Ver. 」にしてみる --- sakura_core/dlg/CDlgAbout.cpp | 4 ++-- sakura_lang_en_US/sakura_lang_rc.rc2 | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sakura_core/dlg/CDlgAbout.cpp b/sakura_core/dlg/CDlgAbout.cpp index b01e9ccf2f..190c7078c5 100644 --- a/sakura_core/dlg/CDlgAbout.cpp +++ b/sakura_core/dlg/CDlgAbout.cpp @@ -172,7 +172,7 @@ BOOL CDlgAbout::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) // 2010.04.15 Moca コンパイラ情報を分離/WINヘッダ,N_SHAREDATA_VERSION追加 // 以下の形式で出力 - //サクラエディタ開発版(64bitデバッグ) v2.4.1.1234GHA (xxxxxxxx) + //サクラエディタ開発版(64bitデバッグ) Ver. 2.4.1.1234 GHA (xxxxxxxx) //(GitURL https://github.com/sakura/sakura-editor.git) // // Share Ver: 96 @@ -187,7 +187,7 @@ BOOL CDlgAbout::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) GetAppVersionInfo( NULL, VS_VERSION_INFO, &dwVersionMS, &dwVersionLS ); cmemMsg.AppendStringF( - L"%s v%d.%d.%d.%d" LTEXT(BUILD_ENV_NAME) LTEXT(VERSION_HASH) L"\r\n", + L"%s Ver. %d.%d.%d.%d " LTEXT(BUILD_ENV_NAME) LTEXT(VERSION_HASH) L"\r\n", LS(STR_GSTR_APPNAME), HIWORD(dwVersionMS), LOWORD(dwVersionMS), HIWORD(dwVersionLS), LOWORD(dwVersionLS) // e.g. {2, 3, 2, 0} ); diff --git a/sakura_lang_en_US/sakura_lang_rc.rc2 b/sakura_lang_en_US/sakura_lang_rc.rc2 index c07846735f..d5a081a36f 100644 --- a/sakura_lang_en_US/sakura_lang_rc.rc2 +++ b/sakura_lang_en_US/sakura_lang_rc.rc2 @@ -22,7 +22,7 @@ #endif #if defined(_WIN64) || defined(_DEBUG) -#define _GSTR_APPNAME _APP_NAME_1 _APP_NAME_2 "(" _APP_NAME_3 _APP_NAME_4 ")" +#define _GSTR_APPNAME _APP_NAME_1 _APP_NAME_2 " (" _APP_NAME_3 _APP_NAME_4 ")" #else #define _GSTR_APPNAME _APP_NAME_1 _APP_NAME_2 _APP_NAME_3 _APP_NAME_4 #endif From 2bee3e17744aecfa894a4bc5dfff4a1fd1cff61e Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 10 Oct 2021 16:31:23 +0900 Subject: [PATCH 0847/1024] =?UTF-8?q?CWnd=E3=81=8B=E3=82=89=E6=9C=AA?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E3=81=AE=E7=8B=AC=E8=87=AA=E3=83=8F=E3=83=B3?= =?UTF-8?q?=E3=83=89=E3=83=A9=E5=AE=9A=E7=BE=A9=E3=82=92=E5=89=8A=E9=99=A4?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/window/CWnd.cpp | 14 +------------- sakura_core/window/CWnd.h | 12 ------------ 2 files changed, 1 insertion(+), 25 deletions(-) diff --git a/sakura_core/window/CWnd.cpp b/sakura_core/window/CWnd.cpp index a73a98b79a..528c00fd70 100644 --- a/sakura_core/window/CWnd.cpp +++ b/sakura_core/window/CWnd.cpp @@ -15,8 +15,7 @@ Please contact the copyright holder to use this code for other purpose. */ #include "StdAfx.h" -#include "CWnd.h" -#include "util/os.h" //WM_MOUSEWHEEL +#include "window/CWnd.h" /* CWndウィンドウメッセージのコールバック関数 */ LRESULT CALLBACK CWndProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) @@ -194,30 +193,19 @@ LRESULT CWnd::DispatchEvent( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp ) { #define CALLH(message, method) case message: return method( hwnd, msg, wp, lp ) switch( msg ){ - CALLH( WM_CREATE , OnCreate ); - CALLH( WM_CLOSE , OnClose ); CALLH( WM_DESTROY , OnDestroy ); CALLH( WM_SIZE , OnSize ); - CALLH( WM_MOVE , OnMove ); CALLH( WM_COMMAND , OnCommand ); CALLH( WM_LBUTTONDOWN , OnLButtonDown ); CALLH( WM_LBUTTONUP , OnLButtonUp ); CALLH( WM_LBUTTONDBLCLK , OnLButtonDblClk ); CALLH( WM_RBUTTONDOWN , OnRButtonDown ); - CALLH( WM_RBUTTONUP , OnRButtonUp ); - CALLH( WM_RBUTTONDBLCLK , OnRButtonDblClk ); CALLH( WM_MBUTTONDOWN , OnMButtonDown ); - CALLH( WM_MBUTTONUP , OnMButtonUp ); - CALLH( WM_MBUTTONDBLCLK , OnMButtonDblClk ); CALLH( WM_MOUSEMOVE , OnMouseMove ); - CALLH( WM_MOUSEWHEEL , OnMouseWheel ); - CALLH( WM_MOUSEHWHEEL , OnMouseHWheel ); CALLH( WM_PAINT , OnPaint ); CALLH( WM_TIMER , OnTimer ); - CALLH( WM_QUERYENDSESSION , OnQueryEndSession ); CALLH( WM_MEASUREITEM , OnMeasureItem ); - CALLH( WM_MENUCHAR , OnMenuChar ); CALLH( WM_NOTIFY , OnNotify ); //@@@ 2003.05.31 MIK CALLH( WM_DRAWITEM , OnDrawItem ); // 2006.02.01 ryoji CALLH( WM_CAPTURECHANGED , OnCaptureChanged ); // 2006.11.30 ryoji diff --git a/sakura_core/window/CWnd.h b/sakura_core/window/CWnd.h index 43805a633f..e67b9a87f4 100644 --- a/sakura_core/window/CWnd.h +++ b/sakura_core/window/CWnd.h @@ -20,7 +20,6 @@ #pragma once #include -#include "_main/global.h" /*----------------------------------------------------------------------- クラスの宣言 @@ -89,30 +88,19 @@ class CWnd /* 仮想関数 メッセージ処理(デフォルト動作) */ #define DECLH(method) LRESULT method( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp ){return CallDefWndProc( hwnd, msg, wp, lp );} - virtual DECLH( OnCreate ); // WM_CREATE virtual DECLH( OnCommand ); // WM_COMMAND virtual DECLH( OnPaint ); // WM_PAINT virtual DECLH( OnLButtonDown ); // WM_LBUTTONDOWN virtual DECLH( OnLButtonUp ); // WM_LBUTTONUP virtual DECLH( OnLButtonDblClk ); // WM_LBUTTONDBLCLK virtual DECLH( OnRButtonDown ); // WM_RBUTTONDOWN - virtual DECLH( OnRButtonUp ); // WM_RBUTTONUP - virtual DECLH( OnRButtonDblClk ); // WM_RBUTTONDBLCLK virtual DECLH( OnMButtonDown ); // WM_MBUTTONDOWN - virtual DECLH( OnMButtonUp ); // WM_MBUTTONUP - virtual DECLH( OnMButtonDblClk ); // WM_MBUTTONDBLCLK virtual DECLH( OnMouseMove ); // WM_MOUSEMOVE - virtual DECLH( OnMouseWheel ); // WM_MOUSEWHEEL - virtual DECLH( OnMouseHWheel ); // WM_MOUSEHWHEEL virtual DECLH( OnTimer ); // WM_TIMER virtual DECLH( OnSize ); // WM_SIZE - virtual DECLH( OnMove ); // WM_MOVE - virtual DECLH( OnClose ); // WM_CLOSE virtual DECLH( OnDestroy ); // WM_DSESTROY - virtual DECLH( OnQueryEndSession); // WM_QUERYENDSESSION virtual DECLH( OnMeasureItem ); // WM_MEASUREITEM - virtual DECLH( OnMenuChar ); // WM_MENUCHAR virtual DECLH( OnNotify ); // WM_NOTIFY //@@@ 2003.05.31 MIK virtual DECLH( OnDrawItem ); // WM_DRAWITEM // 2006.02.01 ryoji virtual DECLH( OnCaptureChanged ); // WM_CAPTURECHANGED // 2006.11.30 ryoji From b8e0379a5ce4488acb396dc8315f48488f66040a Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 10 Oct 2021 16:33:12 +0900 Subject: [PATCH 0848/1024] =?UTF-8?q?CWnd=E3=81=AE=E7=8B=AC=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E7=BE=A9=E3=82=A4=E3=83=99=E3=83=B3=E3=83=88PreviCrea?= =?UTF-8?q?teWindow=E3=82=92=E5=89=8A=E9=99=A4=E3=81=99=E3=82=8B(=E6=9C=AA?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E3=81=A0=E3=81=8B=E3=82=89)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 現状で未使用、必要ならOnNcCreateなどで代用可能です。 また、Previousの省略としてはPrevやPreが一般的で、Previには違和感がありました。 --- sakura_core/window/CWnd.cpp | 3 --- sakura_core/window/CWnd.h | 1 - 2 files changed, 4 deletions(-) diff --git a/sakura_core/window/CWnd.cpp b/sakura_core/window/CWnd.cpp index 528c00fd70..1531dcbd35 100644 --- a/sakura_core/window/CWnd.cpp +++ b/sakura_core/window/CWnd.cpp @@ -151,9 +151,6 @@ HWND CWnd::Create( { m_hwndParent = hwndParent; - /* ウィンドウ作成前の処理(クラス登録前) ( virtual )*/ - PreviCreateWindow(); - /* 初期ウィンドウサイズ */ /* ウィンドウの作成 */ diff --git a/sakura_core/window/CWnd.h b/sakura_core/window/CWnd.h index e67b9a87f4..ccdf0d67b6 100644 --- a/sakura_core/window/CWnd.h +++ b/sakura_core/window/CWnd.h @@ -83,7 +83,6 @@ class CWnd protected: /* 仮想関数 */ virtual LRESULT DispatchEvent_WM_APP( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp );/* アプリケーション定義のメッセージ(WM_APP <= msg <= 0xBFFF) */ - virtual void PreviCreateWindow( void ){return;}/* ウィンドウ作成前の処理(クラス登録前) ( virtual )*/ virtual void AfterCreateWindow( void ){::ShowWindow( m_hWnd, SW_SHOW );}/* ウィンドウ作成後の処理 ( virtual )*/ /* 仮想関数 メッセージ処理(デフォルト動作) */ From e98b85e671cf0fd2e7c153963582fc001defe7de Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 10 Oct 2021 16:35:58 +0900 Subject: [PATCH 0849/1024] =?UTF-8?q?CWnd=E3=81=AE=E7=8B=AC=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E7=BE=A9=E3=82=A4=E3=83=99=E3=83=B3=E3=83=88AfterCrea?= =?UTF-8?q?teWindow=E3=82=92=E5=89=8A=E9=99=A4=E3=81=99=E3=82=8B(=E4=BD=BF?= =?UTF-8?q?=E3=81=84=E5=8B=9D=E6=89=8B=E3=81=AB=E9=9B=A3=E3=82=A2=E3=83=AA?= =?UTF-8?q?=E3=81=A0=E3=81=A3=E3=81=9F=E3=81=8B=E3=82=89)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit このイベントのせいで、初期状態を非表示としたいクラスに「何もしないオーバーライドメソッド」を実装していた。(無駄です。) 従来通りの挙動を実現したい場合はCreateメソッドのdwStyleパラメータにWS_VISIBLEを指定すること。 --- sakura_core/func/CFuncKeyWnd.h | 1 - sakura_core/window/CTabWnd.h | 1 - sakura_core/window/CTipWnd.cpp | 11 ----------- sakura_core/window/CTipWnd.h | 2 -- sakura_core/window/CWnd.cpp | 2 -- sakura_core/window/CWnd.h | 1 - 6 files changed, 18 deletions(-) diff --git a/sakura_core/func/CFuncKeyWnd.h b/sakura_core/func/CFuncKeyWnd.h index c9b7af14d0..5378ec5568 100644 --- a/sakura_core/func/CFuncKeyWnd.h +++ b/sakura_core/func/CFuncKeyWnd.h @@ -64,7 +64,6 @@ class CFuncKeyWnd final : public CWnd int CalcButtonSize( void ); /* ボタンのサイズを計算 */ /* 仮想関数 */ - void AfterCreateWindow( void ) override{} // ウィンドウ作成後の処理 // 2007.03.13 ryoji 可視化しない /* 仮想関数 メッセージ処理 詳しくは実装を参照 */ LRESULT OnTimer(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) override; // WM_TIMERタイマーの処理 diff --git a/sakura_core/window/CTabWnd.h b/sakura_core/window/CTabWnd.h index 202d0dcd4b..4ecd903a1d 100644 --- a/sakura_core/window/CTabWnd.h +++ b/sakura_core/window/CTabWnd.h @@ -99,7 +99,6 @@ class CTabWnd final : public CWnd void GetTabName( EditNode* pEditNode, BOOL bFull, BOOL bDupamp, LPWSTR pszName, int nLen ); /* タブ名取得処理 */ // 2007.06.28 ryoji 新規作成 /* 仮想関数 */ - void AfterCreateWindow( void ) override{} /*!< ウィンドウ作成後の処理 */ // 2007.03.13 ryoji 可視化しない /* 仮想関数 メッセージ処理 */ LRESULT OnSize( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) override; /*!< WM_SIZE処理 */ diff --git a/sakura_core/window/CTipWnd.cpp b/sakura_core/window/CTipWnd.cpp index 8bdd58ab2f..00e85544d8 100644 --- a/sakura_core/window/CTipWnd.cpp +++ b/sakura_core/window/CTipWnd.cpp @@ -95,17 +95,6 @@ void CTipWnd::Create( HINSTANCE hInstance, HWND hwndParent ) return; } -/*! CreateWindowの後 - - CWnd::AfterCreateWindowでウィンドウを表示するようになっているのを - 動かなくするための空関数 - - @date 2006.01.09 genta 新規作成 -*/ -void CTipWnd::AfterCreateWindow( void ) -{ -} - /* Tipを表示 */ void CTipWnd::Show( int nX, int nY, RECT* pRect ) { diff --git a/sakura_core/window/CTipWnd.h b/sakura_core/window/CTipWnd.h index 268cec9800..31864dcd1e 100644 --- a/sakura_core/window/CTipWnd.h +++ b/sakura_core/window/CTipWnd.h @@ -71,8 +71,6 @@ class CTipWnd final : public CWnd void DrawTipText( HDC hdc, const RECT& rcPaint ); /* ウィンドウのテキストを表示 */ /* 仮想関数 */ - // Jan. 9, 2006 genta - void AfterCreateWindow( void ) override; /* 仮想関数 メッセージ処理 詳しくは実装を参照 */ LRESULT OnPaint(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) override;/* 描画処理 */ diff --git a/sakura_core/window/CWnd.cpp b/sakura_core/window/CWnd.cpp index 1531dcbd35..65e1476f56 100644 --- a/sakura_core/window/CWnd.cpp +++ b/sakura_core/window/CWnd.cpp @@ -180,8 +180,6 @@ HWND CWnd::Create( return NULL; } - /* ウィンドウ作成後の処理 */ - AfterCreateWindow(); return m_hWnd; } diff --git a/sakura_core/window/CWnd.h b/sakura_core/window/CWnd.h index ccdf0d67b6..568601a3eb 100644 --- a/sakura_core/window/CWnd.h +++ b/sakura_core/window/CWnd.h @@ -83,7 +83,6 @@ class CWnd protected: /* 仮想関数 */ virtual LRESULT DispatchEvent_WM_APP( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp );/* アプリケーション定義のメッセージ(WM_APP <= msg <= 0xBFFF) */ - virtual void AfterCreateWindow( void ){::ShowWindow( m_hWnd, SW_SHOW );}/* ウィンドウ作成後の処理 ( virtual )*/ /* 仮想関数 メッセージ処理(デフォルト動作) */ #define DECLH(method) LRESULT method( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp ){return CallDefWndProc( hwnd, msg, wp, lp );} From 7f792464d05b38a1176b56e6cc893b558a6fd2fd Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 10 Oct 2021 22:31:20 +0900 Subject: [PATCH 0850/1024] =?UTF-8?q?Azure=20Pipelines=E3=81=AEMinGW?= =?UTF-8?q?=E3=83=93=E3=83=AB=E3=83=89=E3=82=92=E6=9B=B4=E6=96=B0=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ci/azure-pipelines/template.job.build-on-msys2.yml | 6 +++++- sakura/githash.bat | 13 +++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/ci/azure-pipelines/template.job.build-on-msys2.yml b/ci/azure-pipelines/template.job.build-on-msys2.yml index 960aee9a4a..01b601eef4 100644 --- a/ci/azure-pipelines/template.job.build-on-msys2.yml +++ b/ci/azure-pipelines/template.job.build-on-msys2.yml @@ -24,7 +24,11 @@ jobs: steps: - checkout: self # self represents the repo where the initial Pipelines YAML file was found clean: all # what to clean each time; if not mentioned, does not clean - fetchDepth: 5 # the depth of commits to ask Git to fetch; defaults to no limit + + - bash: | + BUILD_VERSION=`git log --oneline --no-merges | wc -l` + echo "##vso[task.setvariable variable=BUILD_VERSION]$BUILD_VERSION" + displayName: compute BUILD_VERSION # show environmental variables for debug. - script: set diff --git a/sakura/githash.bat b/sakura/githash.bat index 69e03b55e1..06560e5ca2 100644 --- a/sakura/githash.bat +++ b/sakura/githash.bat @@ -56,11 +56,15 @@ exit /b 0 for /f "usebackq" %%s in (`"%CMD_GIT%" describe --tags --contains 2^>nul`) do ( set GIT_TAG_NAME=%%s ) + + :: Gitリポジトリの累積コミット数(取れない場合は0) + call :set_build_version ) else ( set GIT_SHORT_COMMIT_HASH= set GIT_COMMIT_HASH= set GIT_REMOTE_ORIGIN_URL= set GIT_TAG_NAME= + set BUILD_VERSION=0 ) :: ビルド環境の名前が未定義なら local とする @@ -68,21 +72,14 @@ exit /b 0 set BUILD_ENV_NAME=Local ) - :: Gitリポジトリの累積コミット数(取れない場合は0) - call :set_build_version - @rem get back to the original directory popd exit /b 0 :set_build_version + if not "%GIT_ENABLED%" == "1" exit /b 0 if defined BUILD_VERSION exit /b 0 - :: MinGWビルドは判定を諦める - if "%SHELL%" == "/usr/bin/bash") do ( - set BUILD_VERSION=0 - exit /b 0 - ) :: gitがPATHに存在するかチェックする set HAS_GIT_IN_PATH=0 From cfb529082e0a3ceb5bb8b5b424be52ffe34cf7d4 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 11 Oct 2021 00:38:07 +0900 Subject: [PATCH 0851/1024] =?UTF-8?q?shallow=20clone=E3=82=92=E8=A7=A3?= =?UTF-8?q?=E9=99=A4=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build-sakura.yml | 2 ++ appveyor.yml | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-sakura.yml b/.github/workflows/build-sakura.yml index 6d7c69e703..45ccf3a8b7 100644 --- a/.github/workflows/build-sakura.yml +++ b/.github/workflows/build-sakura.yml @@ -49,6 +49,8 @@ jobs: steps: ## see https://github.com/actions/checkout - uses: actions/checkout@v2 + with: + fetch-depth: 0 ## see https://github.com/microsoft/setup-msbuild - name: Add msbuild to PATH diff --git a/appveyor.yml b/appveyor.yml index 959d7b5941..90302c0887 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -8,8 +8,9 @@ platform: - Win32 - x64 -# set clone depth -clone_depth: 5 +# comment-out clone_depth to fetch entire repository. +## set clone depth +#clone_depth: 5 # see "Skip commits" at https://www.appveyor.com/docs/how-to/filtering-commits/#commit-files-github-and-bitbucket-only skip_commits: From ab46b2dd476f2e4b86cf2f58710b661f55c3ee44 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Mon, 11 Oct 2021 20:53:41 +0900 Subject: [PATCH 0852/1024] =?UTF-8?q?Windows10=20SDK=E3=81=AEwindowsx.h?= =?UTF-8?q?=E3=82=92=E4=BD=BF=E3=81=86=E3=82=88=E3=81=86=E3=81=AB=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Windows10 SDKに定義されているプロトタイプを流用できるようにして開発効率を上げる。 サクラエディタはWinUIもATLもMFCも使わないのでメッセージハンドラ関数を完全に独自定義していた。 完全独自だとメッセージ仕様からwParamとlParamの扱い方を個別に判断する必要があって無駄。 --- sakura_core/StdAfx.h | 1 + 1 file changed, 1 insertion(+) diff --git a/sakura_core/StdAfx.h b/sakura_core/StdAfx.h index c649a856af..e0fe88f6dd 100644 --- a/sakura_core/StdAfx.h +++ b/sakura_core/StdAfx.h @@ -93,6 +93,7 @@ #include #include +#include #include #include #include From 0e0f3002303a755d0929ccc6c19515eea89dbbe4 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Mon, 11 Oct 2021 20:54:00 +0900 Subject: [PATCH 0853/1024] =?UTF-8?q?CViewFont=E3=81=AE=E3=83=97=E3=83=A9?= =?UTF-8?q?=E3=82=A4=E3=83=99=E3=83=BC=E3=83=88=E3=83=A1=E3=82=BD=E3=83=83?= =?UTF-8?q?=E3=83=89=E3=82=92=E3=83=AA=E3=83=8D=E3=83=BC=E3=83=A0=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 変更前: CViewFont::DeleteFont(); 変更後: CViewFont::DeleteFonts( void ); SDKのマクロとの衝突を回避するため。 変更前: CViewFont::CreateFont(const LOGFONT* plf); 変更後: CViewFont::CreateFonts( const LOGFONT* plf ); Deleteと名称を揃えるため。 --- sakura_core/view/CViewFont.cpp | 4 ++-- sakura_core/view/CViewFont.h | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/sakura_core/view/CViewFont.cpp b/sakura_core/view/CViewFont.cpp index 3587f494cf..a08facc633 100644 --- a/sakura_core/view/CViewFont.cpp +++ b/sakura_core/view/CViewFont.cpp @@ -30,7 +30,7 @@ /*! フォント作成 */ -void CViewFont::CreateFont(const LOGFONT *plf) +void CViewFont::CreateFonts( const LOGFONT *plf ) { LOGFONT lf; int miniSize = GetDllShareData().m_Common.m_sWindow.m_nMiniMapFontSize; @@ -88,7 +88,7 @@ void CViewFont::CreateFont(const LOGFONT *plf) /*! フォント削除 */ -void CViewFont::DeleteFont() +void CViewFont::DeleteFonts() { DeleteObject( m_hFont_HAN ); DeleteObject( m_hFont_HAN_BOLD ); diff --git a/sakura_core/view/CViewFont.h b/sakura_core/view/CViewFont.h index 0f0a0ce57d..54b952faa4 100644 --- a/sakura_core/view/CViewFont.h +++ b/sakura_core/view/CViewFont.h @@ -36,7 +36,7 @@ class CViewFont{ CViewFont(const LOGFONT *plf, bool bMiniMap = false) { m_bMiniMap = bMiniMap; - CreateFont(plf); + CreateFonts(plf); } CViewFont(const Me&) = delete; Me& operator = (const Me&) = delete; @@ -44,13 +44,13 @@ class CViewFont{ Me& operator = (Me&&) noexcept = delete; virtual ~CViewFont() { - DeleteFont(); + DeleteFonts(); } void UpdateFont(const LOGFONT *plf) { - DeleteFont(); - CreateFont(plf); + DeleteFonts(); + CreateFonts(plf); } HFONT ChooseFontHandle( int fontNo, SFontAttr sFontAttr ) const; /* フォントを選ぶ */ @@ -66,8 +66,8 @@ class CViewFont{ } private: - void CreateFont(const LOGFONT *plf); - void DeleteFont(); + void CreateFonts( const LOGFONT *plf ); + void DeleteFonts( void ); HFONT m_hFont_HAN; /* 現在のフォントハンドル */ HFONT m_hFont_HAN_BOLD; /* 現在のフォントハンドル(太字) */ From 135b33b05e64748f35e63bd8f9ffd3bde98b4276 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Tue, 12 Oct 2021 00:25:04 +0900 Subject: [PATCH 0854/1024] =?UTF-8?q?=E7=B4=AF=E7=A9=8D=E3=82=B3=E3=83=9F?= =?UTF-8?q?=E3=83=83=E3=83=88=E6=95=B0=E3=81=AE=E5=8F=96=E5=BE=97=E3=81=AB?= =?UTF-8?q?git=20rev-list=E3=82=92=E4=BD=BF=E3=81=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../template.job.build-on-msys2.yml | 5 ----- sakura/githash.bat | 15 ++------------- 2 files changed, 2 insertions(+), 18 deletions(-) diff --git a/ci/azure-pipelines/template.job.build-on-msys2.yml b/ci/azure-pipelines/template.job.build-on-msys2.yml index 01b601eef4..f0a4323c3f 100644 --- a/ci/azure-pipelines/template.job.build-on-msys2.yml +++ b/ci/azure-pipelines/template.job.build-on-msys2.yml @@ -25,11 +25,6 @@ jobs: - checkout: self # self represents the repo where the initial Pipelines YAML file was found clean: all # what to clean each time; if not mentioned, does not clean - - bash: | - BUILD_VERSION=`git log --oneline --no-merges | wc -l` - echo "##vso[task.setvariable variable=BUILD_VERSION]$BUILD_VERSION" - displayName: compute BUILD_VERSION - # show environmental variables for debug. - script: set displayName: Show environmental variables for debug diff --git a/sakura/githash.bat b/sakura/githash.bat index 06560e5ca2..70d39ae695 100644 --- a/sakura/githash.bat +++ b/sakura/githash.bat @@ -80,19 +80,8 @@ exit /b 0 :set_build_version if not "%GIT_ENABLED%" == "1" exit /b 0 if defined BUILD_VERSION exit /b 0 - - :: gitがPATHに存在するかチェックする - set HAS_GIT_IN_PATH=0 - for /f "usebackq" %%a in (`where $PATH:git`) do ( - set HAS_GIT_IN_PATH=1 - ) - - if "%HAS_GIT_IN_PATH%" == "1" ( - for /f "usebackq" %%s in (`git log --oneline --no-merges ^| find /C " "`) do ( - set BUILD_VERSION=%%s - ) - ) else ( - set BUILD_VERSION=0 + for /f "usebackq" %%s in (`"%CMD_GIT%" rev-list --count --no-merges @`) do ( + set BUILD_VERSION=%%s ) exit /b 0 From 3ca63d712bf5798e0aad70d0a822fb15ca635403 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 17 Oct 2021 16:15:09 +0900 Subject: [PATCH 0855/1024] =?UTF-8?q?=E3=82=B0=E3=83=AD=E3=83=BC=E3=83=90?= =?UTF-8?q?=E3=83=AB=E9=96=A2=E6=95=B0GetEditWnd=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/window/CEditWnd.cpp | 17 +++++++++++++++++ sakura_core/window/CEditWnd.h | 3 +++ 2 files changed, 20 insertions(+) diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index 4aa1af1b0d..603efa783f 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -49,6 +49,7 @@ #include "_main/CCommandLine.h" /// 2003/1/26 aroka #include "_main/CAppMode.h" #include "_os/CDropTarget.h" +#include "basis/CErrorInfo.h" #include "dlg/CDlgAbout.h" #include "dlg/CDlgPrintSetting.h" #include "env/CShareData.h" @@ -178,6 +179,22 @@ static void ShowCodeBox( HWND hWnd, CEditDoc* pcEditDoc ) } } +/*! + * 編集ウインドウのインスタンスを取得します。 + * + * 編集ウインドウの生存期間ははエディタプロセスと同じなので、 + * ほとんどの場合、このグローバル関数を使ってアクセスできます。 + */ +CEditWnd& GetEditWnd( void ) +{ + const auto pcEditWnd = CEditWnd::getInstance(); + if( !pcEditWnd ) + { + ::_com_raise_error(E_FAIL, MakeMsgError(L"Any CEditWnd has been instantiated.")); + } + return (CEditWnd&)*pcEditWnd; +} + // /* メッセージループ */ // DWORD MessageLoop_Thread( DWORD pCEditWndObject ); diff --git a/sakura_core/window/CEditWnd.h b/sakura_core/window/CEditWnd.h index cf4178bd3b..5438b9cde8 100644 --- a/sakura_core/window/CEditWnd.h +++ b/sakura_core/window/CEditWnd.h @@ -422,4 +422,7 @@ class CEditWnd public: ESelectCountMode m_nSelectCountMode; // 選択文字カウント方法 }; + +CEditWnd& GetEditWnd( void ); + #endif /* SAKURA_CEDITWND_6C771A35_3CC8_4932_BF15_823C40487A9F_H_ */ From 67f8ac8e1eec5dbbe4ae7700a88c5f29959ecde4 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 17 Oct 2021 16:50:08 +0900 Subject: [PATCH 0856/1024] =?UTF-8?q?=E5=86=97=E9=95=B7=E3=81=AA=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=90=E5=A4=89=E6=95=B0=20CEditVIew::m=5FpcEditWnd?= =?UTF-8?q?=20=E3=82=92=E5=89=8A=E9=99=A4=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CEditWndのインスタンスにはグローバル変数のようにアクセスできる。このため、コンストラクタでCEditWndのインスタンスを要求してクラス内外でのアクセスに流用する構造は無駄と考えられる。 --- sakura_core/view/CEditView.cpp | 3 +-- sakura_core/view/CEditView.h | 3 +-- sakura_core/window/CEditWnd.cpp | 6 +++--- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index 1df0b059bc..e2b0f87c64 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -136,9 +136,8 @@ VOID CALLBACK EditViewTimerProc( // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // @date 2002.2.17 YAZAKI CShareDataのインスタンスは、CProcessにひとつあるのみ。 -CEditView::CEditView(CEditWnd* pcEditWnd) +CEditView::CEditView( void ) : CViewCalc(this) // warning C4355: 'this' : ベース メンバー初期化子リストで使用されました。 -, m_pcEditWnd(pcEditWnd) , m_pcTextArea(NULL) , m_pcCaret(NULL) , m_pcRuler(NULL) diff --git a/sakura_core/view/CEditView.h b/sakura_core/view/CEditView.h index 3caf48a996..23c4dfed99 100644 --- a/sakura_core/view/CEditView.h +++ b/sakura_core/view/CEditView.h @@ -157,7 +157,7 @@ class CEditView // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // public: /* Constructors */ - CEditView(CEditWnd* pcEditWnd); + CEditView( void ); ~CEditView(); void Close(); /* 初期化系メンバ関数 */ @@ -620,7 +620,6 @@ class CEditView // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // public: //参照 - CEditWnd* m_pcEditWnd; //!< ウィンドウ CEditDoc* m_pcEditDoc; //!< ドキュメント const STypeConfig* m_pTypeData; diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index 603efa783f..76b8e1959d 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -619,12 +619,12 @@ HWND CEditWnd::Create( m_pcEditViewArr[i] = NULL; } // [0] - [3] まで作成・初期化していたものを[0]だけ作る。ほかは分割されるまで何もしない - m_pcEditViewArr[0] = new CEditView(this); + m_pcEditViewArr[0] = new CEditView(); m_pcEditView = m_pcEditViewArr[0]; m_pcViewFont = new CViewFont(&GetLogfont()); - m_pcEditViewMiniMap = new CEditView(this); + m_pcEditViewMiniMap = new CEditView(); m_pcViewFontMiniMap = new CViewFont(&GetLogfont(), true); @@ -4344,7 +4344,7 @@ bool CEditWnd::CreateEditViewBySplit(int nViewCount ) if( GetAllViewCount() < nViewCount ){ for( int i = GetAllViewCount(); i < nViewCount; i++ ){ assert( NULL == m_pcEditViewArr[i] ); - m_pcEditViewArr[i] = new CEditView(this); + m_pcEditViewArr[i] = new CEditView(); m_pcEditViewArr[i]->Create( m_cSplitterWnd.GetHwnd(), GetDocument(), i, FALSE, false ); } m_nEditViewCount = nViewCount; From d83ad79f9d43bf6c2a2a427f54134ed76f8d9317 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 17 Oct 2021 16:57:41 +0900 Subject: [PATCH 0857/1024] =?UTF-8?q?CEditVIew::m=5FpcEditWnd=E7=BD=AE?= =?UTF-8?q?=E6=8F=9B1=20CEditView*.cpp=E5=86=8597=E7=AE=87=E6=89=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CEditView.cpp | 62 ++++++++++---------- sakura_core/view/CEditView_CmdHokan.cpp | 16 ++--- sakura_core/view/CEditView_Cmdisrch.cpp | 2 +- sakura_core/view/CEditView_Command.cpp | 4 +- sakura_core/view/CEditView_Command_New.cpp | 18 +++--- sakura_core/view/CEditView_Diff.cpp | 2 +- sakura_core/view/CEditView_Ime.cpp | 2 +- sakura_core/view/CEditView_Mouse.cpp | 52 ++++++++-------- sakura_core/view/CEditView_Paint.cpp | 16 ++--- sakura_core/view/CEditView_Paint_Bracket.cpp | 4 +- sakura_core/view/CEditView_Scroll.cpp | 12 ++-- 11 files changed, 95 insertions(+), 95 deletions(-) diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index e2b0f87c64..e55806fab1 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -172,9 +172,9 @@ BOOL CEditView::Create( m_pcCaret = new CCaret(this, pcEditDoc); m_pcRuler = new CRuler(this, pcEditDoc); if( m_bMiniMap ){ - m_pcViewFont = m_pcEditWnd->m_pcViewFontMiniMap; + m_pcViewFont = GetEditWnd().m_pcViewFontMiniMap; }else{ - m_pcViewFont = m_pcEditWnd->m_pcViewFont; + m_pcViewFont = GetEditWnd().m_pcViewFont; } m_cHistory = new CAutoMarkMgr; @@ -442,7 +442,7 @@ LRESULT CEditView::DispatchEvent( switch ( uMsg ){ case WM_MOUSEWHEEL: - if( m_pcEditWnd->DoMouseWheel( wParam, lParam ) ){ + if( GetEditWnd().DoMouseWheel( wParam, lParam ) ){ return 0L; } return OnMOUSEWHEEL( wParam, lParam ); @@ -505,14 +505,14 @@ LRESULT CEditView::DispatchEvent( OnSetFocus(); /* 親ウィンドウのタイトルを更新 */ - m_pcEditWnd->UpdateCaption(); + GetEditWnd().UpdateCaption(); return 0L; case WM_KILLFOCUS: OnKillFocus(); // 2009.01.17 nasukoji ホイールスクロール有無状態をクリア - m_pcEditWnd->ClearMouseState(); + GetEditWnd().ClearMouseState(); return 0L; case WM_CHAR: @@ -625,7 +625,7 @@ LRESULT CEditView::DispatchEvent( // 2007.10.12 genta フォーカス移動のため,OnLBUTTONDBLCLKより移動 if(m_bActivateByMouse){ /* アクティブなペインを設定 */ - m_pcEditWnd->SetActivePane( m_nMyIndex ); + GetEditWnd().SetActivePane( m_nMyIndex ); // カーソルをクリック位置へ移動する OnLBUTTONDOWN( wParam, (short)LOWORD( lParam ), (short)HIWORD( lParam ) ); // 2007.10.02 nasukoji @@ -668,9 +668,9 @@ LRESULT CEditView::DispatchEvent( // case WM_RBUTTONDOWN: // MYTRACE( L" WM_RBUTTONDOWN wParam=%08xh, x=%d y=%d\n", wParam, LOWORD( lParam ), HIWORD( lParam ) ); // OnRBUTTONDOWN( wParam, (short)LOWORD( lParam ), (short)HIWORD( lParam ) ); -// if( m_nMyIndex != m_pcEditWnd->GetActivePane() ){ +// if( m_nMyIndex != GetEditWnd().GetActivePane() ){ // /* アクティブなペインを設定 */ -// m_pcEditWnd->SetActivePane( m_nMyIndex ); +// GetEditWnd().SetActivePane( m_nMyIndex ); // } // return 0L; case WM_RBUTTONUP: @@ -744,7 +744,7 @@ LRESULT CEditView::DispatchEvent( m_dwTipTimer = ::GetTickCount(); /* 辞書Tip起動タイマー */ } if( m_bHokan ){ - m_pcEditWnd->m_cHokanMgr.Hide(); + GetEditWnd().m_cHokanMgr.Hide(); m_bHokan = FALSE; } return 0L; @@ -811,7 +811,7 @@ LRESULT CEditView::DispatchEvent( return 0L; case MYWM_SETACTIVEPANE: - m_pcEditWnd->SetActivePane( m_nMyIndex ); + GetEditWnd().SetActivePane( m_nMyIndex ); ::PostMessageAny( m_hwndParent, MYWM_SETACTIVEPANE, (WPARAM)m_nMyIndex, 0 ); return 0L; @@ -850,7 +850,7 @@ LRESULT CEditView::DispatchEvent( // マウスクリックによりバックグラウンドウィンドウがアクティベートされた // 2007.10.08 genta オプション追加 if( GetDllShareData().m_Common.m_sGeneral.m_bNoCaretMoveByActivation && - (! m_pcEditWnd->IsActiveApp())) + (! GetEditWnd().IsActiveApp())) { m_bActivateByMouse = TRUE; // マウスによるアクティベート return MA_ACTIVATEANDEAT; // アクティベート後イベントを破棄 @@ -865,7 +865,7 @@ LRESULT CEditView::DispatchEvent( // ビュー上にマウスがあるので SetActivePane() を直接呼び出す // (個別のマウスメッセージが届く前にアクティブペインを設定しておく) if( !m_bMiniMap ){ - m_pcEditWnd->SetActivePane( m_nMyIndex ); + GetEditWnd().SetActivePane( m_nMyIndex ); } }else if( (m_pcsbwVSplitBox && hwndCursorPos == m_pcsbwVSplitBox->GetHwnd()) || (m_pcsbwHSplitBox && hwndCursorPos == m_pcsbwHSplitBox->GetHwnd()) ){ @@ -978,7 +978,7 @@ void CEditView::OnSize( int cx, int cy ) if( m_pcEditDoc->m_nTextWrapMethodCur == WRAP_WINDOW_WIDTH ){ if( m_nMyIndex == 0 ){ // 左上隅のビューのサイズ変更時のみ処理する // 右端で折り返すモードなら右端で折り返す // 2008.06.08 ryoji - wrapChanged = m_pcEditWnd->WrapWindowWidth( 0 ); + wrapChanged = GetEditWnd().WrapWindowWidth( 0 ); } } @@ -1021,10 +1021,10 @@ void CEditView::OnSize( int cx, int cy ) } /* 親ウィンドウのタイトルを更新 */ - // m_pcEditWnd->UpdateCaption(); // [Q] genta 本当に必要? + // GetEditWnd().UpdateCaption(); // [Q] genta 本当に必要? - if( m_pcEditWnd->GetMiniMap().GetHwnd() ){ - CEditView& miniMap = m_pcEditWnd->GetMiniMap(); + if( GetEditWnd().GetMiniMap().GetHwnd() ){ + CEditView& miniMap = GetEditWnd().GetMiniMap(); if( miniMap.m_nPageViewTop != GetTextArea().GetViewTopLine() || miniMap.m_nPageViewBottom != GetTextArea().GetBottomLine() ){ MiniMapRedraw(true); @@ -1061,10 +1061,10 @@ void CEditView::OnSetFocus( void ) m_bDrawBracketPairFlag = TRUE; DrawBracketPair( true ); - m_pcEditWnd->m_cToolbar.AcceptSharedSearchKey(); + GetEditWnd().m_cToolbar.AcceptSharedSearchKey(); - if( m_pcEditWnd->GetMiniMap().GetHwnd() ){ - CEditView& miniMap = m_pcEditWnd->GetMiniMap(); + if( GetEditWnd().GetMiniMap().GetHwnd() ){ + CEditView& miniMap = GetEditWnd().GetMiniMap(); if( miniMap.m_nPageViewTop != GetTextArea().GetViewTopLine() || miniMap.m_nPageViewBottom != GetTextArea().GetBottomLine() ){ MiniMapRedraw(true); @@ -1098,7 +1098,7 @@ void CEditView::OnKillFocus( void ) } if( m_bHokan ){ - m_pcEditWnd->m_cHokanMgr.Hide(); + GetEditWnd().m_cHokanMgr.Hide(); m_bHokan = FALSE; } if( m_nAutoScrollMode ){ @@ -1306,7 +1306,7 @@ VOID CEditView::OnTimer( bool bHide; if( MiniMapCursorLineTip( &po, &rc, &bHide ) ){ m_cTipWnd.m_bAlignLeft = true; - m_cTipWnd.Show( po.x, po.y + m_pcEditWnd->GetActiveView().GetTextMetrics().GetHankakuHeight() ); + m_cTipWnd.Show( po.x, po.y + GetEditWnd().GetActiveView().GetTextMetrics().GetHankakuHeight() ); }else{ if( bHide && 0 == m_dwTipTimer ){ m_cTipWnd.Hide(); @@ -1500,7 +1500,7 @@ int CEditView::CreatePopUpMenu_R( void ) HMENU hMenu; int nMenuIdx; - CMenuDrawer& cMenuDrawer = m_pcEditWnd->GetMenuDrawer(); + CMenuDrawer& cMenuDrawer = GetEditWnd().GetMenuDrawer(); cMenuDrawer.ResetContents(); /* 右クリックメニューの定義はカスタムメニュー配列の0番目 */ @@ -1518,7 +1518,7 @@ int CEditView::CreatePopUpMenu_R( void ) void CEditView::AddKeyHelpMenu(HMENU hMenu, EKeyHelpRMenuType eRmenuType) { - CMenuDrawer& cMenuDrawer = m_pcEditWnd->GetMenuDrawer(); + CMenuDrawer& cMenuDrawer = GetEditWnd().GetMenuDrawer(); // 2010.07.24 Moca オーナードロー対応のために前に移動してCMenuDrawer経由で追加する if( !GetSelectionInfo().IsMouseSelecting() && eRmenuType != KEYHELP_RMENU_NONE ){ POINT po; @@ -1547,7 +1547,7 @@ int CEditView::CreatePopUpMenuSub( HMENU hMenu, int nMenuIdx, int* pParentMenus, WCHAR szLabel[300]; int nParentMenu[MAX_CUSTOM_MENU + 1]; - CMenuDrawer& cMenuDrawer = m_pcEditWnd->GetMenuDrawer(); + CMenuDrawer& cMenuDrawer = GetEditWnd().GetMenuDrawer(); CFuncLookup& FuncLookup = m_pcEditDoc->m_cFuncLookup; int nParamIndex = 0; @@ -1617,12 +1617,12 @@ int CEditView::CreatePopUpMenuSub( HMENU hMenu, int nMenuIdx, int* pParentMenus, FuncLookup.Funccode2Name( code, szLabel, 256 ); /* キー */ if( F_SPECIAL_FIRST <= code && code <= F_SPECIAL_LAST ){ - m_pcEditWnd->InitMenu_Special( hMenu, code ); + GetEditWnd().InitMenu_Special( hMenu, code ); }else{ wchar_t keys[2]; keys[0] = GetDllShareData().m_Common.m_sCustomMenu.m_nCustMenuItemKeyArr[nMenuIdx][i]; keys[1] = 0; - m_pcEditWnd->InitMenu_Function( hMenu, code, szLabel, keys ); + GetEditWnd().InitMenu_Function( hMenu, code, szLabel, keys ); } } } @@ -1723,7 +1723,7 @@ void CEditView::OnChangeSetting() m_cTipWnd.ChangeFont( &(GetDllShareData().m_Common.m_sHelper.m_lf) ); /* 再描画 */ - if( !m_pcEditWnd->m_pPrintPreview ){ + if( !GetEditWnd().m_pPrintPreview ){ ::InvalidateRect( GetHwnd(), NULL, TRUE ); } CTypeSupport cTextType(this, COLORIDX_TEXT); @@ -2567,7 +2567,7 @@ void CEditView::CaretUnderLineOFF( bool bDraw, bool bDrawPaint, bool bResetFlag, */ void CEditView::SendStatusMessage( const WCHAR* msg ) { - m_pcEditWnd->SendStatusMessage( msg ); + GetEditWnd().SendStatusMessage( msg ); } // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // @@ -2610,7 +2610,7 @@ void CEditView::OnAfterLoad(const SLoadInfo& sLoadInfo) // -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 2004.05.13 Moca 改行コードの設定内からここに移動 - m_pcEditWnd->GetActiveView().GetCaret().ShowCaretPosInfo(); + GetEditWnd().GetActiveView().GetCaret().ShowCaretPosInfo(); } // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // @@ -2760,9 +2760,9 @@ void CEditView::SetUndoBuffer(bool bPaintLineNumber) // && m_pcEditDoc->m_cDocEditor.m_cOpeBuf.GetCurrentPointer() == 1 ) // 全Undo状態からの変更か? // 2009.03.26 ryoji // Call_OnPaint( PAINT_LINENUMBER, false ); // 自ペインの行番号(変更行)表示を更新 ← 変更行のみの表示更新で済ませている場合があるため - if( !m_pcEditWnd->UpdateTextWrap() ){ // 折り返し方法関連の更新 // 2008.06.10 ryoji + if( !GetEditWnd().UpdateTextWrap() ){ // 折り返し方法関連の更新 // 2008.06.10 ryoji if( 0 < m_cCommander.GetOpeBlk()->GetNum() - GetDocument()->m_cDocEditor.m_nOpeBlkRedawCount ){ - m_pcEditWnd->RedrawAllViews( this ); // 他のペインの表示を更新 + GetEditWnd().RedrawAllViews( this ); // 他のペインの表示を更新 } } } diff --git a/sakura_core/view/CEditView_CmdHokan.cpp b/sakura_core/view/CEditView_CmdHokan.cpp index cc458728de..a778bc4ca0 100644 --- a/sakura_core/view/CEditView_CmdHokan.cpp +++ b/sakura_core/view/CEditView_CmdHokan.cpp @@ -41,7 +41,7 @@ void CEditView::PreprocessCommand_hokan( int nCommand ) && nCommand != F_IME_CHAR // 漢字入力 && nCommand != F_DELETE_BACK // カーソル前を削除 ){ - m_pcEditWnd->m_cHokanMgr.Hide(); + GetEditWnd().m_cHokanMgr.Hide(); m_bHokan = FALSE; } } @@ -63,7 +63,7 @@ void CEditView::PostprocessCommand_hokan(void) ShowHokanMgr( cmemData, FALSE ); }else{ if( m_bHokan ){ - m_pcEditWnd->m_cHokanMgr.Hide(); + GetEditWnd().m_cHokanMgr.Hide(); m_bHokan = FALSE; } } @@ -122,14 +122,14 @@ void CEditView::ShowHokanMgr( CNativeW& cmemData, BOOL bAutoDecided ) // エディタ起動時だとエディタ可視化の途中になぜか不可視の入力補完ウィンドウが一時的にフォアグラウンドになって、 // タブバーに新規タブが追加されるときのタブ切替でタイトルバーがちらつく(一瞬非アクティブ表示になるのがはっきり見える)ことがあった。 // ※ Vista/7 の特定の PC でだけのちらつきか? 該当 PC 以外の Vista/7 PC でもたまに微妙に表示が乱れた感じになる程度の症状が見られたが、それらが同一原因かどうかは不明。 - if( !m_pcEditWnd->m_cHokanMgr.GetHwnd() ){ - m_pcEditWnd->m_cHokanMgr.DoModeless( + if( !GetEditWnd().m_cHokanMgr.GetHwnd() ){ + GetEditWnd().m_cHokanMgr.DoModeless( G_AppInstance(), - m_pcEditWnd->GetHwnd(), + GetEditWnd().GetHwnd(), (LPARAM)this ); } - nKouhoNum = m_pcEditWnd->m_cHokanMgr.CHokanMgr::Search( + nKouhoNum = GetEditWnd().m_cHokanMgr.CHokanMgr::Search( &poWin, GetTextMetrics().GetHankakuHeight(), GetTextMetrics().GetHankakuDx(), @@ -144,7 +144,7 @@ void CEditView::ShowHokanMgr( CNativeW& cmemData, BOOL bAutoDecided ) /* 補完候補の数によって動作を変える */ if (nKouhoNum <= 0) { // 候補無し if( m_bHokan ){ - m_pcEditWnd->m_cHokanMgr.Hide(); + GetEditWnd().m_cHokanMgr.Hide(); m_bHokan = FALSE; // 2003.06.25 Moca 失敗してたら、ビープ音を出して補完終了。 ErrorBeep(); @@ -152,7 +152,7 @@ void CEditView::ShowHokanMgr( CNativeW& cmemData, BOOL bAutoDecided ) } else if( bAutoDecided && nKouhoNum == 1){ // 候補1つのみ→確定。 if( m_bHokan ){ - m_pcEditWnd->m_cHokanMgr.Hide(); + GetEditWnd().m_cHokanMgr.Hide(); m_bHokan = FALSE; } // 2004.05.14 Moca CHokanMgr::Search側で改行を削除するようにし、直接書き換えるのをやめた diff --git a/sakura_core/view/CEditView_Cmdisrch.cpp b/sakura_core/view/CEditView_Cmdisrch.cpp index 6bee46e5bc..5bea8f3798 100644 --- a/sakura_core/view/CEditView_Cmdisrch.cpp +++ b/sakura_core/view/CEditView_Cmdisrch.cpp @@ -256,7 +256,7 @@ void CEditView::ISearchExit() } m_nCurSearchKeySequence = GetDllShareData().m_Common.m_sSearch.m_nSearchKeySequence; GetDllShareData().m_Common.m_sSearch.m_sSearchOption = m_sCurSearchOption; - m_pcEditWnd->m_cToolbar.AcceptSharedSearchKey(); + GetEditWnd().m_cToolbar.AcceptSharedSearchKey(); m_nISearchDirection = SEARCH_BACKWARD; m_nISearchMode = SEARCH_NONE; diff --git a/sakura_core/view/CEditView_Command.cpp b/sakura_core/view/CEditView_Command.cpp index f5f06a6aa6..3d80829ed6 100644 --- a/sakura_core/view/CEditView_Command.cpp +++ b/sakura_core/view/CEditView_Command.cpp @@ -410,7 +410,7 @@ BOOL CEditView::ChangeCurRegexp( bool bRedrawIfChanged ) if( bRedrawIfChanged ){ Redraw(); } - m_pcEditWnd->m_cToolbar.AcceptSharedSearchKey(); + GetEditWnd().m_cToolbar.AcceptSharedSearchKey(); return TRUE; } if( ! m_bCurSrchKeyMark ){ @@ -483,7 +483,7 @@ void CEditView::DrawBracketCursorLine(bool bDraw) HWND CEditView::StartProgress() { - HWND hwndProgress = m_pcEditWnd->m_cStatusBar.GetProgressHwnd(); + HWND hwndProgress = GetEditWnd().m_cStatusBar.GetProgressHwnd(); if( NULL != hwndProgress ){ ::ShowWindow( hwndProgress, SW_SHOW ); Progress_SetRange( hwndProgress, 0, 101 ); diff --git a/sakura_core/view/CEditView_Command_New.cpp b/sakura_core/view/CEditView_Command_New.cpp index b4a2152bd8..69c371e317 100644 --- a/sakura_core/view/CEditView_Command_New.cpp +++ b/sakura_core/view/CEditView_Command_New.cpp @@ -244,7 +244,7 @@ void CEditView::InsertData_CEditView( // 再描画 // 行番号表示に必要な幅を設定 - if( m_pcEditWnd->DetectWidthOfLineNumberAreaAllPane( bRedraw ) ){ + if( GetEditWnd().DetectWidthOfLineNumberAreaAllPane( bRedraw ) ){ // キャレットの表示・更新 GetCaret().ShowEditCaret(); } @@ -313,14 +313,14 @@ void CEditView::InsertData_CEditView( this->ReleaseDC( hdc ); // 2014.07.16 他のビュー(ミニマップ)の再描画を抑制する if( 0 == nInsLineNum ){ - for(int i = 0; i < m_pcEditWnd->GetAllViewCount(); i++ ){ - CEditView* pcView = &m_pcEditWnd->GetView(i); + for(int i = 0; i < GetEditWnd().GetAllViewCount(); i++ ){ + CEditView* pcView = &GetEditWnd().GetView(i); if( pcView == this ){ continue; } pcView->RedrawLines(nLayoutTop, nLayoutBottom); } - m_pcEditWnd->GetMiniMap().RedrawLines(nLayoutTop, nLayoutBottom); + GetEditWnd().GetMiniMap().RedrawLines(nLayoutTop, nLayoutBottom); if( !m_bDoing_UndoRedo && pcOpe ){ GetDocument()->m_cDocEditor.m_nOpeBlkRedawCount++; } @@ -541,7 +541,7 @@ void CEditView::DeleteData( SetDrawSwitch(true); // 2002.01.25 hor /* 行番号表示に必要な幅を設定 */ - if ( m_pcEditWnd->DetectWidthOfLineNumberAreaAllPane( true ) ){ + if ( GetEditWnd().DetectWidthOfLineNumberAreaAllPane( true ) ){ /* キャレットの表示・更新 */ GetCaret().ShowEditCaret(); } @@ -840,7 +840,7 @@ bool CEditView::ReplaceData_CEditView3( } /* 行番号表示に必要な幅を設定 */ - if( m_pcEditWnd->DetectWidthOfLineNumberAreaAllPane( bRedraw ) ){ + if( GetEditWnd().DetectWidthOfLineNumberAreaAllPane( bRedraw ) ){ /* キャレットの表示・更新 */ GetCaret().ShowEditCaret(); } @@ -890,14 +890,14 @@ bool CEditView::ReplaceData_CEditView3( CLayoutYInt nLayoutTop = LRArg.nModLineFrom; CLayoutYInt nLayoutBottom = LRArg.nModLineTo + 1 + nAddLine; - for(int i = 0; i < m_pcEditWnd->GetAllViewCount(); i++ ){ - CEditView* pcView = &m_pcEditWnd->GetView(i); + for(int i = 0; i < GetEditWnd().GetAllViewCount(); i++ ){ + CEditView* pcView = &GetEditWnd().GetView(i); if( pcView == this ){ continue; } pcView->RedrawLines(nLayoutTop, nLayoutBottom); } - m_pcEditWnd->GetMiniMap().RedrawLines(nLayoutTop, nLayoutBottom); + GetEditWnd().GetMiniMap().RedrawLines(nLayoutTop, nLayoutBottom); if( !m_bDoing_UndoRedo && pcOpeBlk ){ GetDocument()->m_cDocEditor.m_nOpeBlkRedawCount++; } diff --git a/sakura_core/view/CEditView_Diff.cpp b/sakura_core/view/CEditView_Diff.cpp index 733af362be..4703388292 100644 --- a/sakura_core/view/CEditView_Diff.cpp +++ b/sakura_core/view/CEditView_Diff.cpp @@ -208,7 +208,7 @@ void CEditView::ViewDiffInfo( } //分割したビューも更新 - m_pcEditWnd->Views_Redraw(); + GetEditWnd().Views_Redraw(); return; } diff --git a/sakura_core/view/CEditView_Ime.cpp b/sakura_core/view/CEditView_Ime.cpp index 69f9b82bf2..bf3e06e23f 100644 --- a/sakura_core/view/CEditView_Ime.cpp +++ b/sakura_core/view/CEditView_Ime.cpp @@ -101,7 +101,7 @@ void CEditView::SetIMECompFormFont( void ) // HIMC hIMC = ::ImmGetContext( GetHwnd() ); if ( hIMC ){ - ::ImmSetCompositionFont( hIMC, const_cast(&(m_pcEditWnd->GetLogfont())) ); + ::ImmSetCompositionFont( hIMC, const_cast(&(GetEditWnd().GetLogfont())) ); } ::ImmReleaseContext( GetHwnd() , hIMC ); } diff --git a/sakura_core/view/CEditView_Mouse.cpp b/sakura_core/view/CEditView_Mouse.cpp index eaf2107430..661cf41ecf 100644 --- a/sakura_core/view/CEditView_Mouse.cpp +++ b/sakura_core/view/CEditView_Mouse.cpp @@ -64,7 +64,7 @@ void CEditView::OnLBUTTONDOWN( WPARAM fwKeys, int _xPos , int _yPos ) CMyPoint ptMouse(_xPos,_yPos); if( m_bHokan ){ - m_pcEditWnd->m_cHokanMgr.Hide(); + GetEditWnd().m_cHokanMgr.Hide(); m_bHokan = FALSE; } @@ -164,12 +164,12 @@ void CEditView::OnLBUTTONDOWN( WPARAM fwKeys, int _xPos , int _yPos ) DWORD dwEffectsSrc = ( !m_pcEditDoc->IsEditable() )? DROPEFFECT_COPY: DROPEFFECT_COPY | DROPEFFECT_MOVE; int nOpe = m_pcEditDoc->m_cDocEditor.m_cOpeBuf.GetCurrentPointer(); - m_pcEditWnd->SetDragSourceView( this ); + GetEditWnd().SetDragSourceView( this ); CDataObject data( cmemCurText.GetStringPtr(), cmemCurText.GetStringLength(), GetSelectionInfo().IsBoxSelecting() ); dwEffects = data.DragDrop( TRUE, dwEffectsSrc ); - m_pcEditWnd->SetDragSourceView( NULL ); + GetEditWnd().SetDragSourceView( NULL ); if( m_pcEditDoc->m_cDocEditor.m_cOpeBuf.GetCurrentPointer() == nOpe ){ // ドキュメント変更なしか? // 2007.12.09 ryoji - m_pcEditWnd->SetActivePane( m_nMyIndex ); + GetEditWnd().SetActivePane( m_nMyIndex ); if( DROPEFFECT_MOVE == (dwEffectsSrc & dwEffects) ){ // 移動範囲を削除する // ドロップ先が移動を処理したが自ドキュメントにここまで変更が無い @@ -676,17 +676,17 @@ void CEditView::OnMBUTTONUP( WPARAM fwKeys, int xPos , int yPos ) // ホイール操作によるページスクロールあり if( GetDllShareData().m_Common.m_sGeneral.m_nPageScrollByWheel == MOUSEFUNCTION_CENTER && - m_pcEditWnd->IsPageScrollByWheel() ) + GetEditWnd().IsPageScrollByWheel() ) { - m_pcEditWnd->SetPageScrollByWheel( FALSE ); + GetEditWnd().SetPageScrollByWheel( FALSE ); return; } // ホイール操作によるページスクロールあり if( GetDllShareData().m_Common.m_sGeneral.m_nHorizontalScrollByWheel == MOUSEFUNCTION_CENTER && - m_pcEditWnd->IsHScrollByWheel() ) + GetEditWnd().IsHScrollByWheel() ) { - m_pcEditWnd->SetHScrollByWheel( FALSE ); + GetEditWnd().SetHScrollByWheel( FALSE ); return; } @@ -849,17 +849,17 @@ void CEditView::OnXLBUTTONUP( WPARAM fwKeys, int xPos , int yPos ) // ホイール操作によるページスクロールあり if( GetDllShareData().m_Common.m_sGeneral.m_nPageScrollByWheel == MOUSEFUNCTION_LEFTSIDE && - m_pcEditWnd->IsPageScrollByWheel() ) + GetEditWnd().IsPageScrollByWheel() ) { - m_pcEditWnd->SetPageScrollByWheel( FALSE ); + GetEditWnd().SetPageScrollByWheel( FALSE ); return; } // ホイール操作によるページスクロールあり if( GetDllShareData().m_Common.m_sGeneral.m_nHorizontalScrollByWheel == MOUSEFUNCTION_LEFTSIDE && - m_pcEditWnd->IsHScrollByWheel() ) + GetEditWnd().IsHScrollByWheel() ) { - m_pcEditWnd->SetHScrollByWheel( FALSE ); + GetEditWnd().SetHScrollByWheel( FALSE ); return; } @@ -909,19 +909,19 @@ void CEditView::OnXRBUTTONUP( WPARAM fwKeys, int xPos , int yPos ) // ホイール操作によるページスクロールあり if( GetDllShareData().m_Common.m_sGeneral.m_nPageScrollByWheel == MOUSEFUNCTION_RIGHTSIDE && - m_pcEditWnd->IsPageScrollByWheel() ) + GetEditWnd().IsPageScrollByWheel() ) { // ホイール操作によるページスクロールありをOFF - m_pcEditWnd->SetPageScrollByWheel( FALSE ); + GetEditWnd().SetPageScrollByWheel( FALSE ); return; } // ホイール操作によるページスクロールあり if( GetDllShareData().m_Common.m_sGeneral.m_nHorizontalScrollByWheel == MOUSEFUNCTION_RIGHTSIDE && - m_pcEditWnd->IsHScrollByWheel() ) + GetEditWnd().IsHScrollByWheel() ) { // ホイール操作による横スクロールありをOFF - m_pcEditWnd->SetHScrollByWheel( FALSE ); + GetEditWnd().SetHScrollByWheel( FALSE ); return; } @@ -1005,7 +1005,7 @@ void CEditView::OnMOUSEMOVE( WPARAM fwKeys, int xPos_, int yPos_ ) if( ptNew.y < 0 ){ ptNew.y = CLayoutYInt(0); } - CEditView& view = m_pcEditWnd->GetActiveView(); + CEditView& view = GetEditWnd().GetActiveView(); ptNew.x = 0; CLogicPoint ptNewLogic; view.GetCaret().GetAdjustCursorPos( &ptNew ); @@ -1386,14 +1386,14 @@ LRESULT CEditView::OnMOUSEWHEEL2( WPARAM wParam, LPARAM lParam, bool bHorizontal if( bKeyPageScroll ){ if( bHorizontal ){ // ホイール操作による横スクロールあり - m_pcEditWnd->SetHScrollByWheel( TRUE ); + GetEditWnd().SetHScrollByWheel( TRUE ); } // ホイール操作によるページスクロールあり - m_pcEditWnd->SetPageScrollByWheel( TRUE ); + GetEditWnd().SetPageScrollByWheel( TRUE ); }else{ if( bHorizontal ){ // ホイール操作による横スクロールあり - m_pcEditWnd->SetHScrollByWheel( TRUE ); + GetEditWnd().SetHScrollByWheel( TRUE ); } } @@ -1719,7 +1719,7 @@ STDMETHODIMP CEditView::DragEnter( LPDATAOBJECT pDataObject, DWORD dwKeyState, P } /* 自分をアクティブペインにする */ - m_pcEditWnd->SetActivePane( m_nMyIndex ); + GetEditWnd().SetActivePane( m_nMyIndex ); // 現在のカーソル位置を記憶する // 2007.12.09 ryoji m_ptCaretPos_DragEnter = GetCaret().GetCaretLayoutPos(); @@ -1748,7 +1748,7 @@ STDMETHODIMP CEditView::DragOver( DWORD dwKeyState, POINTL pt, LPDWORD pdwEffect *pdwEffect = TranslateDropEffect( m_cfDragData, dwKeyState, pt, *pdwEffect ); - CEditView* pcDragSourceView = m_pcEditWnd->GetDragSourceView(); + CEditView* pcDragSourceView = GetEditWnd().GetDragSourceView(); // ドラッグ元が他ビューで、このビューのカーソルがドラッグ元の選択範囲内の場合は禁止マークにする // ※自ビューのときは禁止マークにしない(他アプリでも多くはそうなっている模様) // 2009.06.09 ryoji @@ -1817,7 +1817,7 @@ STDMETHODIMP CEditView::Drop( LPDATAOBJECT pDataObject, DWORD dwKeyState, POINTL return PostMyDropFiles( pDataObject ); // 外部からのドロップは以後の処理ではコピーと同様に扱う - CEditView* pcDragSourceView = m_pcEditWnd->GetDragSourceView(); + CEditView* pcDragSourceView = GetEditWnd().GetDragSourceView(); bMove = (*pdwEffect == DROPEFFECT_MOVE) && pcDragSourceView; bBoxData = m_bDragBoxData; @@ -2130,7 +2130,7 @@ void CEditView::OnMyDropFiles( HDROP hDrop ) switch( nId ){ case 110: // ファイルを開く // 通常のドロップファイル処理を行う - ::SendMessageAny( m_pcEditWnd->GetHwnd(), WM_DROPFILES, (WPARAM)hDrop, 0 ); + ::SendMessageAny( GetEditWnd().GetHwnd(), WM_DROPFILES, (WPARAM)hDrop, 0 ); break; case 100: // パス名を貼り付ける @@ -2221,7 +2221,7 @@ DWORD CEditView::TranslateDropEffect( CLIPFORMAT cf, DWORD dwKeyState, POINTL pt if( cf == CF_HDROP ) // 2008.06.20 ryoji return DROPEFFECT_LINK; - CEditView* pcDragSourceView = m_pcEditWnd->GetDragSourceView(); + CEditView* pcDragSourceView = GetEditWnd().GetDragSourceView(); // 2008.06.21 ryoji // Win 98/Me 環境では外部からのドラッグ時に GetKeyState() ではキー状態を正しく取得できないため、 @@ -2244,5 +2244,5 @@ DWORD CEditView::TranslateDropEffect( CLIPFORMAT cf, DWORD dwKeyState, POINTL pt bool CEditView::IsDragSource( void ) { - return ( this == m_pcEditWnd->GetDragSourceView() ); + return ( this == GetEditWnd().GetDragSourceView() ); } diff --git a/sakura_core/view/CEditView_Paint.cpp b/sakura_core/view/CEditView_Paint.cpp index f8c08fb288..1af26836c4 100644 --- a/sakura_core/view/CEditView_Paint.cpp +++ b/sakura_core/view/CEditView_Paint.cpp @@ -114,7 +114,7 @@ void CEditView::RedrawAll() GetCaret().ShowCaretPosInfo(); // 親ウィンドウのタイトルを更新 - m_pcEditWnd->UpdateCaption(); + GetEditWnd().UpdateCaption(); // Jul. 9, 2005 genta 選択範囲の情報をステータスバーへ表示 GetSelectionInfo().PrintSelectionInfoMsg(); @@ -564,7 +564,7 @@ COLORREF CEditView::GetBackColorByColorInfo2(const ColorInfo& info, const ColorI void CEditView::OnPaint( HDC _hdc, PAINTSTRUCT *pPs, BOOL bDrawFromComptibleBmp ) { - if (m_pcEditWnd->m_pPrintPreview) { + if (GetEditWnd().m_pPrintPreview) { return; } bool bChangeFont = m_bMiniMap; @@ -573,7 +573,7 @@ void CEditView::OnPaint( HDC _hdc, PAINTSTRUCT *pPs, BOOL bDrawFromComptibleBmp } OnPaint2( _hdc, pPs, bDrawFromComptibleBmp ); if( bChangeFont ){ - SelectCharWidthCache( CWM_FONT_EDIT, m_pcEditWnd->GetLogfontCacheMode() ); + SelectCharWidthCache( CWM_FONT_EDIT, GetEditWnd().GetLogfontCacheMode() ); } } @@ -621,7 +621,7 @@ void CEditView::OnPaint2( HDC _hdc, PAINTSTRUCT *pPs, BOOL bDrawFromComptibleBmp pPs->rcPaint.top, SRCCOPY ); - if ( m_pcEditWnd->GetActivePane() == m_nMyIndex ){ + if ( GetEditWnd().GetActivePane() == m_nMyIndex ){ /* アクティブペインは、アンダーライン描画 */ GetCaret().m_cUnderLine.CaretUnderLineON( true, false ); } @@ -683,7 +683,7 @@ void CEditView::OnPaint2( HDC _hdc, PAINTSTRUCT *pPs, BOOL bDrawFromComptibleBmp DrawBracketPair( false ); } - CEditView& cActiveView = m_pcEditWnd->GetActiveView(); + CEditView& cActiveView = GetEditWnd().GetActiveView(); m_nPageViewTop = cActiveView.GetTextArea().GetViewTopLine(); m_nPageViewBottom = cActiveView.GetTextArea().GetBottomLine(); @@ -763,7 +763,7 @@ void CEditView::OnPaint2( HDC _hdc, PAINTSTRUCT *pPs, BOOL bDrawFromComptibleBmp // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // /* アクティブペインは、アンダーライン描画 */ - const bool bDrawUnderLine = m_pcEditWnd->GetActivePane() == m_nMyIndex; + const bool bDrawUnderLine = GetEditWnd().GetActivePane() == m_nMyIndex; // カーソル行アンダーライン描画を行描画ループ内で行うかどうか const bool bDrawUnderLineWithoutDelay = bDrawUnderLine @@ -1025,7 +1025,7 @@ bool CEditView::DrawLayoutLine(SColorStrategyInfo* pInfo) CTypeSupport cCaretLineBg(this, COLORIDX_CARETLINEBG); CTypeSupport cEvenLineBg(this, COLORIDX_EVENLINEBG); CTypeSupport cPageViewBg(this, COLORIDX_PAGEVIEW); - CEditView& cActiveView = m_pcEditWnd->GetActiveView(); + CEditView& cActiveView = GetEditWnd().GetActiveView(); CTypeSupport& cBackType = (cCaretLineBg.IsDisp() && GetCaret().GetCaretLayoutPos().GetY() == pInfo->m_pDispPos->GetLayoutLineRef() && !m_bMiniMap ? cCaretLineBg @@ -1318,7 +1318,7 @@ void CEditView::DispTextSelected( sSelect.GetFrom().x >= GetTextArea().GetViewLeftCol()) { HWND hWnd = ::GetForegroundWindow(); - if( hWnd && (hWnd == m_pcEditWnd->m_cDlgFind.GetHwnd() || hWnd == m_pcEditWnd->m_cDlgReplace.GetHwnd()) ){ + if( hWnd && (hWnd == GetEditWnd().m_cDlgFind.GetHwnd() || hWnd == GetEditWnd().m_cDlgReplace.GetHwnd()) ){ rcClip.right = rcClip.left + 2; bOMatch = true; } diff --git a/sakura_core/view/CEditView_Paint_Bracket.cpp b/sakura_core/view/CEditView_Paint_Bracket.cpp index 4614bdd111..4fc9bf0e75 100644 --- a/sakura_core/view/CEditView_Paint_Bracket.cpp +++ b/sakura_core/view/CEditView_Paint_Bracket.cpp @@ -122,7 +122,7 @@ void CEditView::DrawBracketPair( bool bDraw ) // アクティブなペインではない ) 場合は終了 if( bDraw &&( GetSelectionInfo().IsTextSelected() || GetSelectionInfo().m_bDrawSelectArea || !m_bDrawBracketPairFlag - || ( m_pcEditWnd->GetActivePane() != m_nMyIndex ) ) ){ + || ( GetEditWnd().GetActivePane() != m_nMyIndex ) ) ){ return; } @@ -238,7 +238,7 @@ void CEditView::DrawBracketPair( bool bDraw ) cTextType.RewindGraphicsState(gr); } - if( ( m_pcEditWnd->GetActivePane() == m_nMyIndex ) + if( ( GetEditWnd().GetActivePane() == m_nMyIndex ) && ( ( ptColLine.y == GetCaret().GetCaretLayoutPos().GetY() ) || ( ptColLine.y - 1 == GetCaret().GetCaretLayoutPos().GetY() ) ) ){ // 03/02/27 ai 行の間隔が"0"の時にアンダーラインが欠ける事がある為修正 GetCaret().m_cUnderLine.CaretUnderLineON( true, false ); } diff --git a/sakura_core/view/CEditView_Scroll.cpp b/sakura_core/view/CEditView_Scroll.cpp index d098826c7e..ce46870642 100644 --- a/sakura_core/view/CEditView_Scroll.cpp +++ b/sakura_core/view/CEditView_Scroll.cpp @@ -605,8 +605,8 @@ void CEditView::ScrollDraw(CLayoutInt nScrollRowNum, CLayoutInt nScrollColNum, c void CEditView::MiniMapRedraw(bool bUpdateAll) { - if( this == &m_pcEditWnd->GetActiveView() && m_pcEditWnd->GetMiniMap().GetHwnd() ){ - CEditView& miniMap = m_pcEditWnd->GetMiniMap(); + if( this == &GetEditWnd().GetActiveView() && GetEditWnd().GetMiniMap().GetHwnd() ){ + CEditView& miniMap = GetEditWnd().GetMiniMap(); CLayoutYInt nViewTop = miniMap.m_nPageViewTop; CLayoutYInt nViewBottom = miniMap.m_nPageViewBottom; CLayoutYInt nDiff = nViewTop - GetTextArea().GetViewTopLine(); @@ -687,10 +687,10 @@ void CEditView::MiniMapRedraw(bool bUpdateAll) void CEditView::SyncScrollV( CLayoutInt line ) { if( GetDllShareData().m_Common.m_sWindow.m_bSplitterWndVScroll && line != 0 - && m_pcEditWnd->IsEnablePane(m_nMyIndex^0x01) + && GetEditWnd().IsEnablePane(m_nMyIndex^0x01) && 0 <= m_nMyIndex ){ - CEditView& editView = m_pcEditWnd->GetView(m_nMyIndex^0x01); + CEditView& editView = GetEditWnd().GetView(m_nMyIndex^0x01); #if 0 // 差分を保ったままスクロールする場合 editView.ScrollByV( line ); @@ -715,10 +715,10 @@ void CEditView::SyncScrollV( CLayoutInt line ) void CEditView::SyncScrollH( CLayoutInt col ) { if( GetDllShareData().m_Common.m_sWindow.m_bSplitterWndHScroll && col != 0 - && m_pcEditWnd->IsEnablePane(m_nMyIndex^0x02) + && GetEditWnd().IsEnablePane(m_nMyIndex^0x02) && 0 <= m_nMyIndex ){ - CEditView& cEditView = m_pcEditWnd->GetView(m_nMyIndex^0x02); + CEditView& cEditView = GetEditWnd().GetView(m_nMyIndex^0x02); HDC hdc = ::GetDC( cEditView.GetHwnd() ); #if 0 From 2e458ad06a8f5cb86754e862f01b63e8efe65721 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 17 Oct 2021 17:00:41 +0900 Subject: [PATCH 0858/1024] =?UTF-8?q?CEditVIew::m=5FpcEditWnd=E7=BD=AE?= =?UTF-8?q?=E6=8F=9B2=20=E3=83=91=E3=82=BF=E3=83=BC=E3=83=B3=E7=BD=AE?= =?UTF-8?q?=E6=8F=9B49=E7=AE=87=E6=89=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 置換パターン \b((m_)?pc?)?(Edit)?View(Dst)?->m_pcEditWnd-> --- sakura_core/CGrepAgent.cpp | 10 +++--- sakura_core/macro/CMacro.cpp | 36 +++++++++++----------- sakura_core/macro/CMacroManagerBase.cpp | 2 +- sakura_core/outline/CDlgFuncList.cpp | 26 ++++++++-------- sakura_core/plugin/CPluginIfObj.h | 2 +- sakura_core/view/CCaret.cpp | 4 +-- sakura_core/view/CViewSelect.cpp | 14 ++++----- sakura_core/view/colors/CColorStrategy.cpp | 2 +- sakura_core/view/figures/CFigure_Eol.cpp | 2 +- 9 files changed, 49 insertions(+), 49 deletions(-) diff --git a/sakura_core/CGrepAgent.cpp b/sakura_core/CGrepAgent.cpp index f8e2909231..9a691b3e8b 100644 --- a/sakura_core/CGrepAgent.cpp +++ b/sakura_core/CGrepAgent.cpp @@ -478,13 +478,13 @@ DWORD CGrepAgent::DoGrep( } //2014.06.13 別ウィンドウで検索したとき用にGrepダイアログの検索キーを設定 - pcViewDst->m_pcEditWnd->m_cDlgGrep.m_strText = pcmGrepKey->GetStringPtr(); - pcViewDst->m_pcEditWnd->m_cDlgGrep.m_bSetText = true; - pcViewDst->m_pcEditWnd->m_cDlgGrepReplace.m_strText = pcmGrepKey->GetStringPtr(); + GetEditWnd().m_cDlgGrep.m_strText = pcmGrepKey->GetStringPtr(); + GetEditWnd().m_cDlgGrep.m_bSetText = true; + GetEditWnd().m_cDlgGrepReplace.m_strText = pcmGrepKey->GetStringPtr(); if( bGrepReplace ){ - pcViewDst->m_pcEditWnd->m_cDlgGrepReplace.m_strText2 = pcmGrepReplace->GetStringPtr(); + GetEditWnd().m_cDlgGrepReplace.m_strText2 = pcmGrepReplace->GetStringPtr(); } - pcViewDst->m_pcEditWnd->m_cDlgGrepReplace.m_bSetText = true; + GetEditWnd().m_cDlgGrepReplace.m_bSetText = true; hwndCancel = cDlgCancel.DoModeless( G_AppInstance(), pcViewDst->m_hwndParent, IDD_GREPRUNNING ); ::SetDlgItemInt( hwndCancel, IDC_STATIC_HITCOUNT, 0, FALSE ); diff --git a/sakura_core/macro/CMacro.cpp b/sakura_core/macro/CMacro.cpp index d3baf4ecae..85c1546a5c 100644 --- a/sakura_core/macro/CMacro.cpp +++ b/sakura_core/macro/CMacro.cpp @@ -178,10 +178,10 @@ void CMacro::AddLParam( const LPARAM* lParams, const CEditView* pcEditView ) case F_JUMP: // 指定行へジャンプ(ただしPL/SQLコンパイルエラー行へのジャンプは未対応) { - AddIntParam( pcEditView->m_pcEditWnd->m_cDlgJump.m_nLineNum ); + AddIntParam( GetEditWnd().m_cDlgJump.m_nLineNum ); LPARAM lFlag = 0x00; lFlag |= GetDllShareData().m_bLineNumIsCRLF_ForJump ? 0x01 : 0x00; - lFlag |= pcEditView->m_pcEditWnd->m_cDlgJump.m_bPLSQL ? 0x02 : 0x00; + lFlag |= GetEditWnd().m_cDlgJump.m_bPLSQL ? 0x02 : 0x00; AddIntParam( lFlag ); } break; @@ -206,7 +206,7 @@ void CMacro::AddLParam( const LPARAM* lParams, const CEditView* pcEditView ) case F_REPLACE_ALL: { AddStringParam( pcEditView->m_strCurSearchKey.c_str() ); // lParamを追加。 - AddStringParam( pcEditView->m_pcEditWnd->m_cDlgReplace.m_strText2.c_str() ); // lParamを追加。 + AddStringParam( GetEditWnd().m_cDlgReplace.m_strText2.c_str() ); // lParamを追加。 LPARAM lFlag = 0x00; lFlag |= pcEditView->m_sCurSearchOption.bWordOnly ? 0x01 : 0x00; @@ -215,9 +215,9 @@ void CMacro::AddLParam( const LPARAM* lParams, const CEditView* pcEditView ) lFlag |= GetDllShareData().m_Common.m_sSearch.m_bNOTIFYNOTFOUND ? 0x08 : 0x00; lFlag |= GetDllShareData().m_Common.m_sSearch.m_bAutoCloseDlgFind ? 0x10 : 0x00; lFlag |= GetDllShareData().m_Common.m_sSearch.m_bSearchAll ? 0x20 : 0x00; - lFlag |= pcEditView->m_pcEditWnd->m_cDlgReplace.m_nPaste ? 0x40 : 0x00; // CShareDataに入れなくていいの? + lFlag |= GetEditWnd().m_cDlgReplace.m_nPaste ? 0x40 : 0x00; // CShareDataに入れなくていいの? lFlag |= GetDllShareData().m_Common.m_sSearch.m_bSelectedArea ? 0x80 : 0x00; // 置換する時は選べない - lFlag |= pcEditView->m_pcEditWnd->m_cDlgReplace.m_nReplaceTarget << 8; // 8bitシフト(0x100で掛け算) + lFlag |= GetEditWnd().m_cDlgReplace.m_nReplaceTarget << 8; // 8bitシフト(0x100で掛け算) lFlag |= GetDllShareData().m_Common.m_sSearch.m_bConsecutiveAll ? 0x0400: 0x00; // 2007.01.16 ryoji AddIntParam( lFlag ); } @@ -228,13 +228,13 @@ void CMacro::AddLParam( const LPARAM* lParams, const CEditView* pcEditView ) CDlgGrep* pcDlgGrep; CDlgGrepReplace* pcDlgGrepRep; if( F_GREP == m_nFuncID ){ - pcDlgGrep = &pcEditView->m_pcEditWnd->m_cDlgGrep; + pcDlgGrep = &GetEditWnd().m_cDlgGrep; pcDlgGrepRep = NULL; AddStringParam( pcDlgGrep->m_strText.c_str() ); }else{ - pcDlgGrep = pcDlgGrepRep = &pcEditView->m_pcEditWnd->m_cDlgGrepReplace; + pcDlgGrep = pcDlgGrepRep = &GetEditWnd().m_cDlgGrepReplace; AddStringParam( pcDlgGrep->m_strText.c_str() ); - AddStringParam( pcEditView->m_pcEditWnd->m_cDlgGrepReplace.m_strText2.c_str() ); + AddStringParam( GetEditWnd().m_cDlgGrepReplace.m_strText2.c_str() ); } AddStringParam( GetDllShareData().m_sSearchKeywords.m_aGrepFiles[0] ); // lParamを追加。 AddStringParam( GetDllShareData().m_sSearchKeywords.m_aGrepFolders[0] ); // lParamを追加。 @@ -715,10 +715,10 @@ bool CMacro::HandleCommand( return false; } { - pcEditView->m_pcEditWnd->m_cDlgJump.m_nLineNum = _wtoi(Argument[0]); //ジャンプ先 + GetEditWnd().m_cDlgJump.m_nLineNum = _wtoi(Argument[0]); //ジャンプ先 LPARAM lFlag = Argument[1] != NULL ? _wtoi(Argument[1]) : 1; // デフォルト1 GetDllShareData().m_bLineNumIsCRLF_ForJump = ((lFlag & 0x01)!=0); - pcEditView->m_pcEditWnd->m_cDlgJump.m_bPLSQL = lFlag & 0x02 ? 1 : 0; + GetEditWnd().m_cDlgJump.m_bPLSQL = lFlag & 0x02 ? 1 : 0; pcEditView->GetCommander().HandleCommand( Index, true, 0, 0, 0, 0 ); // 標準 } break; @@ -933,7 +933,7 @@ bool CMacro::HandleCommand( return false; } { - CDlgReplace& cDlgReplace = pcEditView->m_pcEditWnd->m_cDlgReplace; + CDlgReplace& cDlgReplace = GetEditWnd().m_cDlgReplace; LPARAM lFlag = Argument[2] != NULL ? _wtoi(Argument[2]) : 0; SSearchOption sSearchOption; sSearchOption.bWordOnly = (0 != (lFlag & 0x01)); @@ -1328,13 +1328,13 @@ bool CMacro::HandleCommand( if( (val1 & 0x03) == 0 ){ pcEditView->SendStatusMessage( val0.c_str() ); }else if( (val1 & 0x03) == 1 ){ - if( NULL != pcEditView->m_pcEditWnd->m_cStatusBar.GetStatusHwnd() ){ + if( NULL != GetEditWnd().m_cStatusBar.GetStatusHwnd() ){ pcEditView->SendStatusMessage( val0.c_str() ); }else{ InfoMessage( pcEditView->GetHwnd(), L"%s", val0.c_str() ); } }else if( (val1 & 0x03) == 2 ){ - pcEditView->m_pcEditWnd->m_cStatusBar.SendStatusMessage2( val0.c_str() ); + GetEditWnd().m_cStatusBar.SendStatusMessage2( val0.c_str() ); } } break; @@ -1579,7 +1579,7 @@ bool CMacro::HandleFunction(CEditView *View, EFunctionCode ID, const VARIANT *Ar // 2013.04.30 Moca 条件追加。不要な場合はChangeLayoutParamを呼ばない if( 0 < varCopy.Data.iVal && nTab != varCopy.Data.iVal ){ View->GetDocument()->m_bTabSpaceCurTemp = true; - View->m_pcEditWnd->ChangeLayoutParam( + GetEditWnd().ChangeLayoutParam( false, CKetaXInt(varCopy.Data.iVal), View->m_pcEditDoc->m_cLayoutMgr.m_tsvInfo.m_nTsvMode, @@ -1591,7 +1591,7 @@ bool CMacro::HandleFunction(CEditView *View, EFunctionCode ID, const VARIANT *Ar // 最大幅の再算出時に各行のレイアウト長の計算も行う View->m_pcEditDoc->m_cLayoutMgr.CalculateTextWidth(); } - View->m_pcEditWnd->RedrawAllViews( NULL ); // TAB幅が変わったので再描画が必要 + GetEditWnd().RedrawAllViews( NULL ); // TAB幅が変わったので再描画が必要 } } return true; @@ -1683,7 +1683,7 @@ bool CMacro::HandleFunction(CEditView *View, EFunctionCode ID, const VARIANT *Ar return true; View->m_pcEditDoc->m_nTextWrapMethodCur = WRAP_SETTING_WIDTH; View->m_pcEditDoc->m_bTextWrapMethodCurTemp = !( View->m_pcEditDoc->m_nTextWrapMethodCur == View->m_pcEditDoc->m_cDocType.GetDocumentAttribute().m_nTextWrapMethod ); - View->m_pcEditWnd->ChangeLayoutParam( + GetEditWnd().ChangeLayoutParam( false, View->m_pcEditDoc->m_cLayoutMgr.GetTabSpaceKetas(), View->m_pcEditDoc->m_cLayoutMgr.m_tsvInfo.m_nTsvMode, @@ -2130,7 +2130,7 @@ bool CMacro::HandleFunction(CEditView *View, EFunctionCode ID, const VARIANT *Ar { if( 1 <= ArgSize ){ if( !VariantToI4(varCopy, Arguments[0]) ) return false; - int ret = (View->m_pcEditWnd->SetDrawSwitchOfAllViews(varCopy.Data.iVal != 0) ? 1: 0); + int ret = (GetEditWnd().SetDrawSwitchOfAllViews(varCopy.Data.iVal != 0) ? 1: 0); Wrap( &Result )->Receive( ret ); return true; } @@ -2144,7 +2144,7 @@ bool CMacro::HandleFunction(CEditView *View, EFunctionCode ID, const VARIANT *Ar } case F_ISSHOWNSTATUS: { - int ret = (NULL != View->m_pcEditWnd->m_cStatusBar.GetStatusHwnd() ? 1: 0); + int ret = (NULL != GetEditWnd().m_cStatusBar.GetStatusHwnd() ? 1: 0); Wrap( &Result )->Receive( ret ); return true; } diff --git a/sakura_core/macro/CMacroManagerBase.cpp b/sakura_core/macro/CMacroManagerBase.cpp index 9ed4e27741..0f6a083e4f 100644 --- a/sakura_core/macro/CMacroManagerBase.cpp +++ b/sakura_core/macro/CMacroManagerBase.cpp @@ -64,7 +64,7 @@ void CMacroBeforeAfter::ExecKeyMacroAfter( class CEditView* pcEditView, int flag pcEditView->SetUndoBuffer(); } } - pcEditView->m_pcEditWnd->SetDrawSwitchOfAllViews(m_bDrawSwitchOld); + GetEditWnd().SetDrawSwitchOfAllViews(m_bDrawSwitchOld); } // CMacroManagerBase diff --git a/sakura_core/outline/CDlgFuncList.cpp b/sakura_core/outline/CDlgFuncList.cpp index dd92ac1163..c2a9458f26 100644 --- a/sakura_core/outline/CDlgFuncList.cpp +++ b/sakura_core/outline/CDlgFuncList.cpp @@ -400,7 +400,7 @@ HWND CDlgFuncList::DoModeless( pDlgTemplate->style = (WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | DS_SETFONT); hwndRet = CDialog::DoModeless( hInstance, MyGetAncestor(hwndParent, GA_ROOT), pDlgTemplate, lParam, SW_HIDE ); ::GlobalFree( pDlgTemplate ); - pcEditView->m_pcEditWnd->EndLayoutBars( m_bEditWndReady ); // 画面の再レイアウト + GetEditWnd().EndLayoutBars( m_bEditWndReady ); // 画面の再レイアウト }else{ hwndRet = CDialog::DoModeless( hInstance, MyGetAncestor(hwndParent, GA_ROOT), IDD_FUNCLIST, lParam, SW_SHOW ); } @@ -1748,7 +1748,7 @@ BOOL CDlgFuncList::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) if( !IsDocking() && m_pShareData->m_Common.m_sOutline.m_bRememberOutlineWindowPos ){ WINDOWPLACEMENT cWindowPlacement; cWindowPlacement.length = sizeof( cWindowPlacement ); - if (::GetWindowPlacement( pcEditView->m_pcEditWnd->GetHwnd(), &cWindowPlacement )){ + if (::GetWindowPlacement( GetEditWnd().GetHwnd(), &cWindowPlacement )){ /* ウィンドウ位置・サイズを-1以外の値にしておくと、CDialogで使用される. */ m_xPos = m_pShareData->m_Common.m_sOutline.m_xOutlineWindowPos + cWindowPlacement.rcNormalPosition.left; m_yPos = m_pShareData->m_Common.m_sOutline.m_yOutlineWindowPos + cWindowPlacement.rcNormalPosition.top; @@ -1792,7 +1792,7 @@ BOOL CDlgFuncList::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) } // 他ウィンドウに変更を通知する if( ProfDockSync() ){ - HWND hwndEdit = pcEditView->m_pcEditWnd->GetHwnd(); + HWND hwndEdit = GetEditWnd().GetHwnd(); PostOutlineNotifyToAllEditors( (WPARAM)0, (LPARAM)hwndEdit ); } } @@ -2282,7 +2282,7 @@ BOOL CDlgFuncList::OnDestroy( void ) /* アウトライン ■位置とサイズを記憶する */ // 20060201 aroka // 前提条件:m_lParam が CDialog::OnDestroy でクリアされないこと CEditView* pcEditView=(CEditView*)m_lParam; - HWND hwndEdit = pcEditView->m_pcEditWnd->GetHwnd(); + HWND hwndEdit = GetEditWnd().GetHwnd(); if( !IsDocking() && m_pShareData->m_Common.m_sOutline.m_bRememberOutlineWindowPos ){ /* 親のウィンドウ位置・サイズを記憶 */ WINDOWPLACEMENT cWindowPlacement; @@ -2299,7 +2299,7 @@ BOOL CDlgFuncList::OnDestroy( void ) // ドッキング画面を閉じるときは画面を再レイアウトする // ドッキングでアプリ終了時には hwndEdit は NULL になっている(親に先に WM_DESTROY が送られるため) if( IsDocking() && hwndEdit ) - pcEditView->m_pcEditWnd->EndLayoutBars(); + GetEditWnd().EndLayoutBars(); // 明示的にアウトライン画面を閉じたときだけアウトライン表示フラグを OFF にする // フローティングでアプリ終了時やタブモードで裏にいる場合は ::IsWindowVisible( hwndEdit ) が FALSE を返す @@ -2636,7 +2636,7 @@ void CDlgFuncList::GetDockSpaceRect( LPRECT pRect ) hwnd[nCount] = GetHwnd(); nCount++; } - hwnd[nCount] = pcEditView->m_pcEditWnd->GetMiniMap().GetHwnd(); + hwnd[nCount] = GetEditWnd().GetMiniMap().GetHwnd(); if( hwnd[nCount] != NULL ){ nCount++; } @@ -3262,7 +3262,7 @@ void CDlgFuncList::DoMenu( POINT pt, HWND hwndFrom ) // メニュー選択された状態に切り替える EFunctionCode nFuncCode = GetFuncCodeRedraw(m_nOutlineType); - HWND hwndEdit = pcEditView->m_pcEditWnd->GetHwnd(); + HWND hwndEdit = GetEditWnd().GetHwnd(); if( nId == 450 ){ // 更新 CEditView* pcEditView = (CEditView*)m_lParam; pcEditView->GetCommander().HandleCommand( nFuncCode, true, SHOW_RELOAD, 0, 0, 0 ); @@ -3292,7 +3292,7 @@ void CDlgFuncList::DoMenu( POINT pt, HWND hwndFrom ) if( pCDocLine ){ CBookmarkSetter cBookmark(pCDocLine); cBookmark.SetBookmark(false); - pcEditView->m_pcEditWnd->Views_Redraw(); + GetEditWnd().Views_Redraw(); } } pcEditView->GetCommander().HandleCommand(nFuncCode, true, SHOW_RELOAD, 0, 0, 0); @@ -3440,7 +3440,7 @@ bool CDlgFuncList::ChangeLayout( int nId ) } // ※ 裏では一時的に Disable 化しておいて開く(タブモードでの不正な画面切り替え抑止) CEditView* pcEditView = &pDoc->m_pcEditWnd->GetActiveView(); - if( nId == OUTLINE_LAYOUT_BACKGROUND ) ::EnableWindow( pcEditView->m_pcEditWnd->GetHwnd(), FALSE ); + if( nId == OUTLINE_LAYOUT_BACKGROUND ) ::EnableWindow( GetEditWnd().GetHwnd(), FALSE ); if( m_nOutlineType == OUTLINE_DEFAULT ){ bool bType = (ProfDockSet() != 0); if( bType ){ @@ -3452,7 +3452,7 @@ bool CDlgFuncList::ChangeLayout( int nId ) } EOutlineType nOutlineType = GetOutlineTypeRedraw(m_nOutlineType); // ブックマークかアウトライン解析かは最後に開いていた時の状態を引き継ぐ(初期状態はアウトライン解析) pcEditView->GetCommander().Command_FUNCLIST( SHOW_NORMAL, nOutlineType ); // 開く ※ HandleCommand(F_OUTLINE,...) だと印刷プレビュー状態で実行されないので Command_FUNCLIST() - if( nId == OUTLINE_LAYOUT_BACKGROUND ) ::EnableWindow( pcEditView->m_pcEditWnd->GetHwnd(), TRUE ); + if( nId == OUTLINE_LAYOUT_BACKGROUND ) ::EnableWindow( GetEditWnd().GetHwnd(), TRUE ); return true; // 解析した } }else{ // 現在は表示 @@ -3477,7 +3477,7 @@ bool CDlgFuncList::ChangeLayout( int nId ) if( nId == OUTLINE_LAYOUT_FILECHANGED ) return false; // ファイル切替ではフローティングは開かない(従来互換) } // ※ 裏では一時的に Disable 化しておいて開く(タブモードでの不正な画面切り替え抑止) - if( nId == OUTLINE_LAYOUT_BACKGROUND ) ::EnableWindow( pcEditView->m_pcEditWnd->GetHwnd(), FALSE ); + if( nId == OUTLINE_LAYOUT_BACKGROUND ) ::EnableWindow( GetEditWnd().GetHwnd(), FALSE ); if( m_nOutlineType == OUTLINE_DEFAULT ){ bool bType = (ProfDockSet() != 0); if( bType ){ @@ -3489,7 +3489,7 @@ bool CDlgFuncList::ChangeLayout( int nId ) } EOutlineType nOutlineType = GetOutlineTypeRedraw(m_nOutlineType); pcEditView->GetCommander().Command_FUNCLIST( SHOW_NORMAL, nOutlineType ); // 開く ※ HandleCommand(F_OUTLINE,...) だと印刷プレビュー状態で実行されないので Command_FUNCLIST() - if( nId == OUTLINE_LAYOUT_BACKGROUND ) ::EnableWindow( pcEditView->m_pcEditWnd->GetHwnd(), TRUE ); + if( nId == OUTLINE_LAYOUT_BACKGROUND ) ::EnableWindow( GetEditWnd().GetHwnd(), TRUE ); return true; // 解析した } @@ -3532,7 +3532,7 @@ bool CDlgFuncList::ChangeLayout( int nId ) ::SetWindowPos( GetHwnd(), NULL, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, SWP_NOOWNERZORDER | SWP_NOZORDER | SWP_NOACTIVATE | ((eDockSideOld == eDockSideNew)? 0: SWP_FRAMECHANGED) ); // SWP_FRAMECHANGED 指定で WM_NCCALCSIZE(非クライアント領域の再計算)に誘導する - pcEditView->m_pcEditWnd->EndLayoutBars( m_bEditWndReady ); + GetEditWnd().EndLayoutBars( m_bEditWndReady ); } return false; } diff --git a/sakura_core/plugin/CPluginIfObj.h b/sakura_core/plugin/CPluginIfObj.h index 4355ced949..34d1cf9193 100644 --- a/sakura_core/plugin/CPluginIfObj.h +++ b/sakura_core/plugin/CPluginIfObj.h @@ -175,7 +175,7 @@ class CPluginIfObj : public CWSHIfObj { case F_PL_ADDCOMMAND: //コマンドを追加する { int id = m_cPlugin.AddCommand( Arguments[0], Arguments[1], Arguments[2], true ); - View->m_pcEditWnd->RegisterPluginCommand( id ); + GetEditWnd().RegisterPluginCommand( id ); } break; } diff --git a/sakura_core/view/CCaret.cpp b/sakura_core/view/CCaret.cpp index 7b212ad1ec..236f08ef75 100644 --- a/sakura_core/view/CCaret.cpp +++ b/sakura_core/view/CCaret.cpp @@ -301,7 +301,7 @@ CLayoutInt CCaret::MoveCursor( if( m_pEditView->GetDrawSwitch() ){ m_pEditView->InvalidateRect( NULL ); m_pEditView->UpdateWindow(); - if( m_pEditView->m_pcEditWnd->GetMiniMap().GetHwnd() ){ + if( GetEditWnd().GetMiniMap().GetHwnd() ){ m_pEditView->MiniMapRedraw(true); } } @@ -336,7 +336,7 @@ CLayoutInt CCaret::MoveCursor( if( m_pEditView->GetDrawSwitch() ){ m_pEditView->ScrollDraw(nScrollRowNum, nScrollColNum, rcScroll, rcClip, rcClip2); - if( m_pEditView->m_pcEditWnd->GetMiniMap().GetHwnd() ){ + if( GetEditWnd().GetMiniMap().GetHwnd() ){ m_pEditView->MiniMapRedraw(false); } } diff --git a/sakura_core/view/CViewSelect.cpp b/sakura_core/view/CViewSelect.cpp index 4da3e59c8f..863551c698 100644 --- a/sakura_core/view/CViewSelect.cpp +++ b/sakura_core/view/CViewSelect.cpp @@ -655,18 +655,18 @@ void CViewSelect::PrintSelectionInfoMsg() const const CEditView* pView=GetEditView(); // 出力されないなら計算を省略 - if( ! pView->m_pcEditWnd->m_cStatusBar.SendStatusMessage2IsEffective() ) + if( ! GetEditWnd().m_cStatusBar.SendStatusMessage2IsEffective() ) return; CLayoutInt nLineCount = pView->m_pcEditDoc->m_cLayoutMgr.GetLineCount(); if( ! IsTextSelected() || m_sSelect.GetFrom().y >= nLineCount ){ // 先頭行が実在しない const_cast(pView)->GetCaret().m_bClearStatus = false; if( IsBoxSelecting() ){ - pView->m_pcEditWnd->m_cStatusBar.SendStatusMessage2( L"box selecting" ); + GetEditWnd().m_cStatusBar.SendStatusMessage2( L"box selecting" ); }else if( m_bSelectingLock ){ - pView->m_pcEditWnd->m_cStatusBar.SendStatusMessage2( L"selecting" ); + GetEditWnd().m_cStatusBar.SendStatusMessage2( L"selecting" ); }else{ - pView->m_pcEditWnd->m_cStatusBar.SendStatusMessage2( L"" ); + GetEditWnd().m_cStatusBar.SendStatusMessage2( L"" ); } return; } @@ -701,9 +701,9 @@ void CViewSelect::PrintSelectionInfoMsg() const // 共通設定・選択文字数を文字単位ではなくバイト単位で表示する BOOL bCountByByteCommon = GetDllShareData().m_Common.m_sStatusbar.m_bDispSelCountByByte; - BOOL bCountByByte = ( pView->m_pcEditWnd->m_nSelectCountMode == SELECT_COUNT_TOGGLE ? + BOOL bCountByByte = ( GetEditWnd().m_nSelectCountMode == SELECT_COUNT_TOGGLE ? bCountByByteCommon : - pView->m_pcEditWnd->m_nSelectCountMode == SELECT_COUNT_BY_BYTE ); + GetEditWnd().m_nSelectCountMode == SELECT_COUNT_BY_BYTE ); // 1行目 pcLayout = pView->m_pcEditDoc->m_cLayoutMgr.SearchLineByLayoutY(m_sSelect.GetFrom().GetY2()); @@ -845,5 +845,5 @@ void CViewSelect::PrintSelectionInfoMsg() const #endif } const_cast(pView)->GetCaret().m_bClearStatus = false; - pView->m_pcEditWnd->m_cStatusBar.SendStatusMessage2( msg ); + GetEditWnd().m_cStatusBar.SendStatusMessage2( msg ); } diff --git a/sakura_core/view/colors/CColorStrategy.cpp b/sakura_core/view/colors/CColorStrategy.cpp index 96f34dbb42..576c58e743 100644 --- a/sakura_core/view/colors/CColorStrategy.cpp +++ b/sakura_core/view/colors/CColorStrategy.cpp @@ -141,7 +141,7 @@ bool SColorStrategyInfo::CheckChangeColor(const CStringRef& cLineStr) if( m_pcView->m_bMiniMap ){ CTypeSupport cPageViewBg(m_pcView, COLORIDX_PAGEVIEW); if( cPageViewBg.IsDisp() ){ - CEditView& cActiveView = m_pcView->m_pcEditWnd->GetActiveView(); + CEditView& cActiveView = GetEditWnd().GetActiveView(); CLayoutInt curLine = m_pDispPos->GetLayoutLineRef(); if( m_colorIdxBackLine == COLORIDX_PAGEVIEW ){ if( cActiveView.GetTextArea().GetViewTopLine() <= curLine && curLine < cActiveView.GetTextArea().GetBottomLine() ){ diff --git a/sakura_core/view/figures/CFigure_Eol.cpp b/sakura_core/view/figures/CFigure_Eol.cpp index a2eecfb6b8..ea611264fe 100644 --- a/sakura_core/view/figures/CFigure_Eol.cpp +++ b/sakura_core/view/figures/CFigure_Eol.cpp @@ -164,7 +164,7 @@ void _DispWrap(CGraphics& gr, DispPos* pDispPos, const CEditView* pcView, CLayou EColorIndexType eBgcolorOverwrite = COLORIDX_WRAP; bool bTrans = pcView->IsBkBitmap(); if( cWrapType.IsDisp() ){ - CEditView& cActiveView = pcView->m_pcEditWnd->GetActiveView(); + CEditView& cActiveView = GetEditWnd().GetActiveView(); if( cBgLineType.IsDisp() && pcView->GetCaret().GetCaretLayoutPos().GetY2() == nLineNum ){ if( bBgcolor ){ eBgcolorOverwrite = COLORIDX_CARETLINEBG; From 37b1cb2f2a97bfed11212a9552f1660f00370a8e Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 17 Oct 2021 17:05:09 +0900 Subject: [PATCH 0859/1024] =?UTF-8?q?CEditVIew::m=5FpcEditWnd=E7=BD=AE?= =?UTF-8?q?=E6=8F=9B3=20=E6=89=8B=E4=BD=9C=E6=A5=AD=E7=BD=AE=E6=8F=9B7?= =?UTF-8?q?=E7=AE=87=E6=89=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/cmd/CViewCommander_inline.h | 2 +- sakura_core/outline/CDlgFuncList.cpp | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/sakura_core/cmd/CViewCommander_inline.h b/sakura_core/cmd/CViewCommander_inline.h index 308c201ccf..610f67d188 100644 --- a/sakura_core/cmd/CViewCommander_inline.h +++ b/sakura_core/cmd/CViewCommander_inline.h @@ -39,7 +39,7 @@ inline CEditDoc* CViewCommander::GetDocument() } inline CEditWnd* CViewCommander::GetEditWindow() { - return m_pCommanderView->m_pcEditWnd; + return &GetEditWnd(); } inline HWND CViewCommander::GetMainWindow() { diff --git a/sakura_core/outline/CDlgFuncList.cpp b/sakura_core/outline/CDlgFuncList.cpp index c2a9458f26..33b4f3df23 100644 --- a/sakura_core/outline/CDlgFuncList.cpp +++ b/sakura_core/outline/CDlgFuncList.cpp @@ -248,9 +248,8 @@ INT_PTR CDlgFuncList::DispatchEvent( HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM // それでは都合が悪いので,特別に以下の処理を行って他と同様な挙動が得られるようにする. if( (BOOL)wParam ){ CEditView* pcEditView = (CEditView*)m_lParam; - CEditWnd* pcEditWnd = pcEditView->m_pcEditWnd; if( ::GetActiveWindow() == GetHwnd() ){ - ::SetActiveWindow( pcEditWnd->GetHwnd() ); + ::SetActiveWindow( GetEditWnd().GetHwnd() ); BlockingHook( NULL ); // キュー内に溜まっているメッセージを処理 ::SetActiveWindow( GetHwnd() ); return 0L; @@ -2485,7 +2484,7 @@ BOOL CDlgFuncList::OnJump( bool bCheckAutoClose, bool bFileJump ) //2002.02.08 h m_pShareData->m_sWorkBuffer.m_LogicPoint = poCaret; // 2006.07.09 genta 移動時に選択状態を保持するように - ::SendMessageAny( ((CEditView*)m_lParam)->m_pcEditWnd->GetHwnd(), + ::SendMessageAny( GetEditWnd().GetHwnd(), MYWM_SETCARETPOS, 0, PM_SETCARETPOS_KEEPSELECT ); } if( bCheckAutoClose && bFileJumpSelf ){ @@ -2958,7 +2957,7 @@ INT_PTR CDlgFuncList::OnMouseMove( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM l ::SetWindowPos( GetHwnd(), NULL, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, SWP_NOOWNERZORDER | SWP_NOZORDER | SWP_NOACTIVATE ); - ((CEditView*)m_lParam)->m_pcEditWnd->EndLayoutBars( m_bEditWndReady ); + GetEditWnd().EndLayoutBars( m_bEditWndReady ); // 移動後の配置情報を記憶する GetWindowRect( GetHwnd(), &rc ); @@ -3045,7 +3044,7 @@ INT_PTR CDlgFuncList::OnLButtonUp( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM l if( ProfDockSync() ){ // 他ウィンドウに変更を通知する - HWND hwndEdit = ((CEditView*)m_lParam)->m_pcEditWnd->GetHwnd(); + HWND hwndEdit = GetEditWnd().GetHwnd(); PostOutlineNotifyToAllEditors( (WPARAM)0, (LPARAM)hwndEdit ); } return 1L; @@ -3796,7 +3795,7 @@ BOOL CDlgFuncList::Track( POINT ptDrag ) ::MoveWindow( GetHwnd(), rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, TRUE ); } if( ProfDockSync() ){ - PostOutlineNotifyToAllEditors( (WPARAM)0, (LPARAM)((CEditView*)m_lParam)->m_pcEditWnd->GetHwnd() ); // 他ウィンドウにドッキング配置変更を通知する + PostOutlineNotifyToAllEditors( (WPARAM)0, (LPARAM)GetEditWnd().GetHwnd() ); // 他ウィンドウにドッキング配置変更を通知する } return TRUE; } From e64af201ad5b4d43ad4473deb79439ab9625109d Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 17 Oct 2021 17:45:59 +0900 Subject: [PATCH 0860/1024] =?UTF-8?q?=E5=86=97=E9=95=B7=E3=81=AA=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=90=E5=A4=89=E6=95=B0=20CEditDoc::m=5FpcEditWnd?= =?UTF-8?q?=20=E3=82=92=E5=89=8A=E9=99=A4=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CEditApp.cpp | 5 +++-- sakura_core/doc/CEditDoc.cpp | 4 +--- sakura_core/doc/CEditDoc.h | 3 +-- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/sakura_core/CEditApp.cpp b/sakura_core/CEditApp.cpp index d61378ad43..b578548e1a 100644 --- a/sakura_core/CEditApp.cpp +++ b/sakura_core/CEditApp.cpp @@ -64,10 +64,11 @@ void CEditApp::Create(HINSTANCE hInst, int nGroupId) //マクロ m_pcSMacroMgr = new CSMacroMgr(); + //ドキュメントの作成 + m_pcEditDoc->Create(); + //ウィンドウの作成 m_pcEditWnd = CEditWnd::getInstance(); - - m_pcEditDoc->Create( m_pcEditWnd ); m_pcEditWnd->Create( m_pcEditDoc, &m_cIcons, nGroupId ); //MRU管理 diff --git a/sakura_core/doc/CEditDoc.cpp b/sakura_core/doc/CEditDoc.cpp index a845fac8f9..40cf4b9b5e 100644 --- a/sakura_core/doc/CEditDoc.cpp +++ b/sakura_core/doc/CEditDoc.cpp @@ -418,12 +418,10 @@ void CEditDoc::InitAllView( void ) @date 2001.09.29 genta マクロクラスを渡すように @date 2002.01.03 YAZAKI m_tbMyButtonなどをCShareDataからCMenuDrawerへ移動したことによる修正。 */ -BOOL CEditDoc::Create( CEditWnd* pcEditWnd ) +BOOL CEditDoc::Create( void ) { MY_RUNNINGTIMER( cRunningTimer, L"CEditDoc::Create" ); - m_pcEditWnd = pcEditWnd; - // Oct. 2, 2001 genta m_cFuncLookup.Init( GetDllShareData().m_Common.m_sMacro.m_MacroTable, &GetDllShareData().m_Common ); diff --git a/sakura_core/doc/CEditDoc.h b/sakura_core/doc/CEditDoc.h index 535a583144..145e781c97 100644 --- a/sakura_core/doc/CEditDoc.h +++ b/sakura_core/doc/CEditDoc.h @@ -84,7 +84,7 @@ class CEditDoc ~CEditDoc(); //初期化 - BOOL Create( CEditWnd* pcEditWnd ); + BOOL Create( void ); void InitDoc(); /* 既存データのクリア */ void InitAllView(); /* 全ビューの初期化:ファイルオープン/クローズ時等に、ビューを初期化する */ void Clear(); @@ -123,7 +123,6 @@ class CEditDoc // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // public: //参照 - CEditWnd* m_pcEditWnd; // Sep. 10, 2002 //データ構造 CDocLineMgr m_cDocLineMgr; From 000c06622be94948039bfd62b4c45b0f440148f0 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 17 Oct 2021 17:48:07 +0900 Subject: [PATCH 0861/1024] =?UTF-8?q?CEditDoc::m=5FpcEditWnd=E7=BD=AE?= =?UTF-8?q?=E6=8F=9B1=20CEditDoc=E5=86=8546=E7=AE=87=E6=89=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/doc/CEditDoc.cpp | 84 ++++++++++++++++++------------------ 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/sakura_core/doc/CEditDoc.cpp b/sakura_core/doc/CEditDoc.cpp index 40cf4b9b5e..dcd98990d4 100644 --- a/sakura_core/doc/CEditDoc.cpp +++ b/sakura_core/doc/CEditDoc.cpp @@ -259,11 +259,11 @@ void CEditDoc::Clear() // 「基本」のタイプ別設定を適用 m_cDocType.SetDocumentType( CDocTypeManager().GetDocumentTypeOfPath( m_cDocFile.GetFilePath() ), true ); m_blfCurTemp = false; - m_pcEditWnd->m_pcViewFontMiniMap->UpdateFont(&m_pcEditWnd->GetLogfont()); - InitCharWidthCache( m_pcEditWnd->m_pcViewFontMiniMap->GetLogfont(), CWM_FONT_MINIMAP ); - SelectCharWidthCache( CWM_FONT_EDIT, m_pcEditWnd->GetLogfontCacheMode() ); - InitCharWidthCache( m_pcEditWnd->GetLogfont() ); - m_pcEditWnd->m_pcViewFont->UpdateFont(&m_pcEditWnd->GetLogfont()); + GetEditWnd().m_pcViewFontMiniMap->UpdateFont(&GetEditWnd().GetLogfont()); + InitCharWidthCache( GetEditWnd().m_pcViewFontMiniMap->GetLogfont(), CWM_FONT_MINIMAP ); + SelectCharWidthCache( CWM_FONT_EDIT, GetEditWnd().GetLogfontCacheMode() ); + InitCharWidthCache( GetEditWnd().GetLogfont() ); + GetEditWnd().m_pcViewFont->UpdateFont(&GetEditWnd().GetLogfont()); // 2008.06.07 nasukoji 折り返し方法の追加に対応 const STypeConfig& ref = m_cDocType.GetDocumentAttribute(); @@ -271,8 +271,8 @@ void CEditDoc::Clear() if( ref.m_nTextWrapMethod != WRAP_SETTING_WIDTH ){ nMaxLineKetas = CKetaXInt(MAXLINEKETAS); } - m_cLayoutMgr.SetLayoutInfo( true, false, ref, ref.m_nTabSpace, ref.m_nTsvMode, nMaxLineKetas, CLayoutXInt(-1), &m_pcEditWnd->GetLogfont() ); - m_pcEditWnd->ClearViewCaretPosInfo(); + m_cLayoutMgr.SetLayoutInfo( true, false, ref, ref.m_nTabSpace, ref.m_nTsvMode, nMaxLineKetas, CLayoutXInt(-1), &GetEditWnd().GetLogfont() ); + GetEditWnd().ClearViewCaretPosInfo(); } /* 既存データのクリア */ @@ -408,7 +408,7 @@ void CEditDoc::InitAllView( void ) m_cLayoutMgr.ClearLayoutLineWidth(); // 各行のレイアウト行長の記憶をクリアする // CEditWndに引越し - m_pcEditWnd->InitAllViews(); + GetEditWnd().InitAllViews(); return; } @@ -498,11 +498,11 @@ void CEditDoc::GetEditInfo( wcscpy(pfi->m_szPath, m_cDocFile.GetFilePath()); //表示域 - pfi->m_nViewTopLine = m_pcEditWnd->GetActiveView().GetTextArea().GetViewTopLine(); /* 表示域の一番上の行(0開始) */ - pfi->m_nViewLeftCol = m_pcEditWnd->GetActiveView().GetTextArea().GetViewLeftCol(); /* 表示域の一番左の桁(0開始) */ + pfi->m_nViewTopLine = GetEditWnd().GetActiveView().GetTextArea().GetViewTopLine(); /* 表示域の一番上の行(0開始) */ + pfi->m_nViewLeftCol = GetEditWnd().GetActiveView().GetTextArea().GetViewLeftCol(); /* 表示域の一番左の桁(0開始) */ //キャレット位置 - pfi->m_ptCursor.Set(m_pcEditWnd->GetActiveView().GetCaret().GetCaretLogicPos()); + pfi->m_ptCursor.Set(GetEditWnd().GetActiveView().GetCaret().GetCaretLogicPos()); //各種状態 pfi->m_bIsModified = m_cDocEditor.IsModified(); /* 変更フラグ */ @@ -593,30 +593,30 @@ BOOL CEditDoc::HandleCommand( EFunctionCode nCommand ) switch( LOWORD( nCommand )){ case F_PREVWINDOW: //前のウィンドウ { - int nPane = m_pcEditWnd->m_cSplitterWnd.GetPrevPane(); + int nPane = GetEditWnd().m_cSplitterWnd.GetPrevPane(); if( -1 != nPane ){ - m_pcEditWnd->SetActivePane( nPane ); + GetEditWnd().SetActivePane( nPane ); }else{ - CControlTray::ActiveNextWindow( m_pcEditWnd->GetHwnd() ); + CControlTray::ActiveNextWindow( GetEditWnd().GetHwnd() ); } } return TRUE; case F_NEXTWINDOW: //次のウィンドウ { - int nPane = m_pcEditWnd->m_cSplitterWnd.GetNextPane(); + int nPane = GetEditWnd().m_cSplitterWnd.GetNextPane(); if( -1 != nPane ){ - m_pcEditWnd->SetActivePane( nPane ); + GetEditWnd().SetActivePane( nPane ); } else{ - CControlTray::ActivePrevWindow( m_pcEditWnd->GetHwnd() ); + CControlTray::ActivePrevWindow( GetEditWnd().GetHwnd() ); } } return TRUE; case F_CHG_CHARSET: - return m_pcEditWnd->GetActiveView().GetCommander().HandleCommand( nCommand, true, (LPARAM)CODE_NONE, 0, 0, 0 ); + return GetEditWnd().GetActiveView().GetCommander().HandleCommand( nCommand, true, (LPARAM)CODE_NONE, 0, 0, 0 ); default: - return m_pcEditWnd->GetActiveView().GetCommander().HandleCommand( nCommand, true, 0, 0, 0, 0 ); + return GetEditWnd().GetActiveView().GetCommander().HandleCommand( nCommand, true, 0, 0, 0, 0 ); } } @@ -637,7 +637,7 @@ void CEditDoc::OnChangeType() const STypeConfig& types = m_cDocType.GetDocumentAttribute(); m_cDocFile.SetCodeSet( types.m_encoding.m_eDefaultCodetype, types.m_encoding.m_bDefaultBom ); m_cDocEditor.m_cNewLineCode = types.m_encoding.m_eDefaultEoltype; - m_pcEditWnd->GetActiveView().GetCaret().ShowCaretPosInfo(); + GetEditWnd().GetActiveView().GetCaret().ShowCaretPosInfo(); } } @@ -698,18 +698,18 @@ void CEditDoc::OnChangeSetting( CLogicPointEx* posSaveAry = NULL; - if( m_pcEditWnd->m_posSaveAry ){ + if( GetEditWnd().m_posSaveAry ){ if( bDoLayout ){ - posSaveAry = m_pcEditWnd->m_posSaveAry; - m_pcEditWnd->m_posSaveAry = NULL; + posSaveAry = GetEditWnd().m_posSaveAry; + GetEditWnd().m_posSaveAry = NULL; } }else{ - if( m_pcEditWnd->m_pPrintPreview ){ + if( GetEditWnd().m_pPrintPreview ){ // 一時的に設定を戻す SelectCharWidthCache( CWM_FONT_EDIT, CWM_CACHE_NEUTRAL ); } if( bDoLayout ){ - posSaveAry = m_pcEditWnd->SavePhysPosOfAllView(); + posSaveAry = GetEditWnd().SavePhysPosOfAllView(); } } @@ -753,12 +753,12 @@ void CEditDoc::OnChangeSetting( } // フォント更新 - m_pcEditWnd->m_pcViewFont->UpdateFont(&m_pcEditWnd->GetLogfont()); - m_pcEditWnd->m_pcViewFontMiniMap->UpdateFont(&m_pcEditWnd->GetLogfont()); + GetEditWnd().m_pcViewFont->UpdateFont(&GetEditWnd().GetLogfont()); + GetEditWnd().m_pcViewFontMiniMap->UpdateFont(&GetEditWnd().GetLogfont()); - InitCharWidthCache( m_pcEditWnd->m_pcViewFontMiniMap->GetLogfont(), CWM_FONT_MINIMAP ); - SelectCharWidthCache( CWM_FONT_EDIT, m_pcEditWnd->GetLogfontCacheMode() ); - InitCharWidthCache( m_pcEditWnd->GetLogfont() ); + InitCharWidthCache( GetEditWnd().m_pcViewFontMiniMap->GetLogfont(), CWM_FONT_MINIMAP ); + SelectCharWidthCache( CWM_FONT_EDIT, GetEditWnd().GetLogfontCacheMode() ); + InitCharWidthCache( GetEditWnd().GetLogfont() ); CKetaXInt nMaxLineKetas = ref.m_nMaxLineKetas; CKetaXInt nTabSpace = ref.m_nTabSpace; @@ -811,9 +811,9 @@ void CEditDoc::OnChangeSetting( nTabSpace = m_cLayoutMgr.GetTabSpaceKetas(); // 現在のタブ幅 } CProgressSubject* pOld = CEditApp::getInstance()->m_pcVisualProgress->CProgressListener::Listen(&m_cLayoutMgr); - m_cLayoutMgr.SetLayoutInfo( bDoLayout, bBlockingHook, ref, nTabSpace, nTsvMode, nMaxLineKetas, CLayoutXInt(-1), &m_pcEditWnd->GetLogfont() ); + m_cLayoutMgr.SetLayoutInfo( bDoLayout, bBlockingHook, ref, nTabSpace, nTsvMode, nMaxLineKetas, CLayoutXInt(-1), &GetEditWnd().GetLogfont() ); CEditApp::getInstance()->m_pcVisualProgress->CProgressListener::Listen(pOld); - m_pcEditWnd->ClearViewCaretPosInfo(); + GetEditWnd().ClearViewCaretPosInfo(); // 2009.08.28 nasukoji 「折り返さない」ならテキスト最大幅を算出、それ以外は変数をクリア if( m_nTextWrapMethodCur == WRAP_NO_TEXT_WRAP ) @@ -822,29 +822,29 @@ void CEditDoc::OnChangeSetting( m_cLayoutMgr.ClearLayoutLineWidth(); // 各行のレイアウト行長の記憶をクリアする /* ビューに設定変更を反映させる */ - int viewCount = m_pcEditWnd->GetAllViewCount(); + int viewCount = GetEditWnd().GetAllViewCount(); for( i = 0; i < viewCount; ++i ){ - m_pcEditWnd->GetView(i).OnChangeSetting(); + GetEditWnd().GetView(i).OnChangeSetting(); } - m_pcEditWnd->GetMiniMap().OnChangeSetting(); + GetEditWnd().GetMiniMap().OnChangeSetting(); if( posSaveAry ){ - m_pcEditWnd->RestorePhysPosOfAllView( posSaveAry ); + GetEditWnd().RestorePhysPosOfAllView( posSaveAry ); } for( i = 0; i < viewCount; i++ ){ - m_pcEditWnd->GetView(i).AdjustScrollBars(); // 2008.06.18 ryoji + GetEditWnd().GetView(i).AdjustScrollBars(); // 2008.06.18 ryoji } - m_pcEditWnd->GetMiniMap().AdjustScrollBars(); + GetEditWnd().GetMiniMap().AdjustScrollBars(); if( hwndProgress ){ ::ShowWindow( hwndProgress, SW_HIDE ); } - if( m_pcEditWnd->m_pPrintPreview ){ + if( GetEditWnd().m_pPrintPreview ){ // 設定を戻す SelectCharWidthCache( CWM_FONT_PRINT, CWM_CACHE_LOCAL ); } if(!bFromSetFontSize ){ // 親ウィンドウのタイトルを更新 - m_pcEditWnd->UpdateCaption(); + GetEditWnd().UpdateCaption(); } } @@ -956,7 +956,7 @@ BOOL CEditDoc::OnFileClose(bool bGrepNoConfirm) default: if (m_cDocFile.IsChgCodeSet()) { m_cDocFile.CancelChgCodeSet(); // 文字コードセットの変更をキャンセルする - this->m_pcEditWnd->GetActiveView().GetCaret().ShowCaretPosInfo(); // ステータス表示 + GetEditWnd().GetActiveView().GetCaret().ShowCaretPosInfo(); // ステータス表示 } return FALSE; } @@ -977,7 +977,7 @@ void CEditDoc::RunAutoMacro( int idx, LPCWSTR pszSaveFilePath ) { // 開ファイル/タイプ変更時はアウトラインを再解析する if( pszSaveFilePath == NULL ){ - m_pcEditWnd->m_cDlgFuncList.Refresh(); + GetEditWnd().m_cDlgFuncList.Refresh(); } static bool bRunning = false; From 2bd655f509a254103dd6c7dd45ec49e3fc140373 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 17 Oct 2021 17:51:14 +0900 Subject: [PATCH 0862/1024] =?UTF-8?q?CEditDoc::m=5FpcEditWnd=E7=BD=AE?= =?UTF-8?q?=E6=8F=9B2=20=E3=83=91=E3=82=BF=E3=83=BC=E3=83=B3=E7=BD=AE?= =?UTF-8?q?=E6=8F=9B66=E7=AE=87=E6=89=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit \b((m_)?pc?)?(Edit)?Doc(Ref)?->m_pcEditWnd-> --- sakura_core/CAutoReloadAgent.cpp | 2 +- sakura_core/CCodeChecker.cpp | 2 +- sakura_core/CLoadAgent.cpp | 24 +++++++------- sakura_core/doc/CDocEditor.cpp | 6 ++-- sakura_core/doc/CDocFileOperation.cpp | 46 +++++++++++++-------------- sakura_core/doc/CDocType.cpp | 8 ++--- sakura_core/doc/CDocVisitor.cpp | 2 +- sakura_core/func/Funccode.cpp | 18 +++++------ sakura_core/outline/CDlgFuncList.cpp | 4 +-- sakura_core/recent/CMruListener.cpp | 2 +- sakura_core/view/CCaret.cpp | 10 +++--- sakura_core/window/CEditWnd.cpp | 2 +- 12 files changed, 63 insertions(+), 63 deletions(-) diff --git a/sakura_core/CAutoReloadAgent.cpp b/sakura_core/CAutoReloadAgent.cpp index fa2b4c39fd..502960ef3e 100644 --- a/sakura_core/CAutoReloadAgent.cpp +++ b/sakura_core/CAutoReloadAgent.cpp @@ -134,7 +134,7 @@ void CAutoReloadAgent::CheckFileTimeStamp() WCHAR szText[40]; const CFileTime& ctime = pcDoc->m_cDocFile.GetFileTime(); auto_sprintf( szText, LS(STR_AUTORELOAD_NOFITY), ctime->wHour, ctime->wMinute, ctime->wSecond ); - pcDoc->m_pcEditWnd->SendStatusMessage( szText ); + GetEditWnd().SendStatusMessage( szText ); } break; case WU_AUTOLOAD: //以後未編集で再ロード diff --git a/sakura_core/CCodeChecker.cpp b/sakura_core/CCodeChecker.cpp index 11d888d3ec..cc0fc09aa4 100644 --- a/sakura_core/CCodeChecker.cpp +++ b/sakura_core/CCodeChecker.cpp @@ -218,7 +218,7 @@ ECallbackResult CCodeChecker::OnCheckSave(SSaveInfo* pSaveInfo) case IDCANCEL: { CLogicPoint pt(point.x < 0 ? CLogicInt(0) : point.x, point.y); - pcDoc->m_pcEditWnd->GetActiveView().GetCommander().Command_MOVECURSOR(pt, 0); + GetEditWnd().GetActiveView().GetCommander().Command_MOVECURSOR(pt, 0); } return CALLBACK_INTERRUPT; //中断 } diff --git a/sakura_core/CLoadAgent.cpp b/sakura_core/CLoadAgent.cpp index bcfa9b8fa1..af5c8c0246 100644 --- a/sakura_core/CLoadAgent.cpp +++ b/sakura_core/CLoadAgent.cpp @@ -207,18 +207,18 @@ ELoadResult CLoadAgent::OnLoad(const SLoadInfo& sLoadInfo) // 文書種別確定 pcDoc->m_cDocType.SetDocumentType( sLoadInfo.nType, true ); - pcDoc->m_pcEditWnd->m_pcViewFontMiniMap->UpdateFont(&pcDoc->m_pcEditWnd->GetLogfont()); - InitCharWidthCache( pcDoc->m_pcEditWnd->m_pcViewFontMiniMap->GetLogfont(), CWM_FONT_MINIMAP ); - SelectCharWidthCache( CWM_FONT_EDIT, pcDoc->m_pcEditWnd->GetLogfontCacheMode() ); - InitCharWidthCache( pcDoc->m_pcEditWnd->GetLogfont() ); - pcDoc->m_pcEditWnd->m_pcViewFont->UpdateFont(&pcDoc->m_pcEditWnd->GetLogfont()); + GetEditWnd().m_pcViewFontMiniMap->UpdateFont(&GetEditWnd().GetLogfont()); + InitCharWidthCache( GetEditWnd().m_pcViewFontMiniMap->GetLogfont(), CWM_FONT_MINIMAP ); + SelectCharWidthCache( CWM_FONT_EDIT, GetEditWnd().GetLogfontCacheMode() ); + InitCharWidthCache( GetEditWnd().GetLogfont() ); + GetEditWnd().m_pcViewFont->UpdateFont(&GetEditWnd().GetLogfont()); // 起動と同時に読む場合は予めアウトライン解析画面を配置しておく // (ファイル読み込み開始とともにビューが表示されるので、あとで配置すると画面のちらつきが大きいの) - if( !pcDoc->m_pcEditWnd->m_cDlgFuncList.m_bEditWndReady ){ - pcDoc->m_pcEditWnd->m_cDlgFuncList.Refresh(); - HWND hEditWnd = pcDoc->m_pcEditWnd->GetHwnd(); - if( !::IsIconic( hEditWnd ) && pcDoc->m_pcEditWnd->m_cDlgFuncList.GetHwnd() ){ + if( !GetEditWnd().m_cDlgFuncList.m_bEditWndReady ){ + GetEditWnd().m_cDlgFuncList.Refresh(); + HWND hEditWnd = GetEditWnd().GetHwnd(); + if( !::IsIconic( hEditWnd ) && GetEditWnd().m_cDlgFuncList.GetHwnd() ){ RECT rc; ::GetClientRect( hEditWnd, &rc ); ::SendMessageAny( hEditWnd, WM_SIZE, ::IsZoomed( hEditWnd )? SIZE_MAXIMIZED: SIZE_RESTORED, MAKELONG( rc.right - rc.left, rc.bottom - rc.top ) ); @@ -258,8 +258,8 @@ ELoadResult CLoadAgent::OnLoad(const SLoadInfo& sLoadInfo) nMaxLineKetas = CKetaXInt(MAXLINEKETAS); CProgressSubject* pOld = CEditApp::getInstance()->m_pcVisualProgress->CProgressListener::Listen(&pcDoc->m_cLayoutMgr); - pcDoc->m_cLayoutMgr.SetLayoutInfo( true, true, ref, ref.m_nTabSpace, ref.m_nTsvMode, nMaxLineKetas, CLayoutXInt(-1), &pcDoc->m_pcEditWnd->GetLogfont() ); - pcDoc->m_pcEditWnd->ClearViewCaretPosInfo(); + pcDoc->m_cLayoutMgr.SetLayoutInfo( true, true, ref, ref.m_nTabSpace, ref.m_nTsvMode, nMaxLineKetas, CLayoutXInt(-1), &GetEditWnd().GetLogfont() ); + GetEditWnd().ClearViewCaretPosInfo(); if (pcDoc->m_cLayoutMgr.m_tsvInfo.m_nTsvMode != TSV_MODE_NONE) { pcDoc->m_cLayoutMgr.m_tsvInfo.CalcTabLength(pcDoc->m_cLayoutMgr.m_pcDocLineMgr); } @@ -274,7 +274,7 @@ void CLoadAgent::OnAfterLoad(const SLoadInfo& sLoadInfo) CEditDoc* pcDoc = GetListeningDoc(); /* 親ウィンドウのタイトルを更新 */ - pcDoc->m_pcEditWnd->UpdateCaption(); + GetEditWnd().UpdateCaption(); // -- -- ※ InitAllViewでやってたこと -- -- // // 2009.08.28 nasukoji CEditView::OnAfterLoad()からここに移動 pcDoc->m_nCommandExecNum=0; diff --git a/sakura_core/doc/CDocEditor.cpp b/sakura_core/doc/CDocEditor.cpp index 2195a17cd6..f4276ba6da 100644 --- a/sakura_core/doc/CDocEditor.cpp +++ b/sakura_core/doc/CDocEditor.cpp @@ -57,7 +57,7 @@ CDocEditor::CDocEditor(CEditDoc* pcDoc) void CDocEditor::SetModified( bool flag, bool redraw) { if( redraw ){ - m_pcDocRef->m_pcEditWnd->m_cDlgFuncList.NotifyDocModification(); + GetEditWnd().m_cDlgFuncList.NotifyDocModification(); } if( m_bIsDocModified == flag ) // 変更がなければ何もしない @@ -65,7 +65,7 @@ void CDocEditor::SetModified( bool flag, bool redraw) m_bIsDocModified = flag; if( redraw ) - m_pcDocRef->m_pcEditWnd->UpdateCaption(); + GetEditWnd().UpdateCaption(); } void CDocEditor::OnBeforeLoad(SLoadInfo* sLoadInfo) @@ -129,7 +129,7 @@ void CDocEditor::SetImeMode( int mode ) { DWORD conv, sent; HIMC hIme; - HWND hwnd = m_pcDocRef->m_pcEditWnd->GetActiveView().GetHwnd(); + HWND hwnd = GetEditWnd().GetActiveView().GetHwnd(); hIme = ImmGetContext( hwnd ); //######大丈夫? // 2013.06.04 EditWndからViewに変更 diff --git a/sakura_core/doc/CDocFileOperation.cpp b/sakura_core/doc/CDocFileOperation.cpp index eb64c5531f..1c95bde3e4 100644 --- a/sakura_core/doc/CDocFileOperation.cpp +++ b/sakura_core/doc/CDocFileOperation.cpp @@ -147,7 +147,7 @@ bool CDocFileOperation::FileLoad( m_pcDocRef->RunAutoMacro( GetDllShareData().m_Common.m_sMacro.m_nMacroOnOpened ); //プラグイン:DocumentOpenイベント実行 - CJackManager::getInstance()->InvokePlugins( PP_DOCUMENT_OPEN, &m_pcDocRef->m_pcEditWnd->GetActiveView() ); + CJackManager::getInstance()->InvokePlugins( PP_DOCUMENT_OPEN, &GetEditWnd().GetActiveView() ); } return bRet; } @@ -167,21 +167,21 @@ void CDocFileOperation::ReloadCurrentFile( ) { //プラグイン:DocumentCloseイベント実行 - CJackManager::getInstance()->InvokePlugins( PP_DOCUMENT_CLOSE, &m_pcDocRef->m_pcEditWnd->GetActiveView() ); + CJackManager::getInstance()->InvokePlugins( PP_DOCUMENT_CLOSE, &GetEditWnd().GetActiveView() ); if( !fexist(m_pcDocRef->m_cDocFile.GetFilePath()) ){ /* ファイルが存在しない */ // Jul. 26, 2003 ryoji BOMを標準設定に // IsBomDefOn使用 2013/5/17 Uchi m_pcDocRef->m_cDocFile.SetCodeSet( nCharCode, CCodeTypeName( nCharCode ).IsBomDefOn() ); // カーソル位置表示を更新する // 2008.07.22 ryoji - m_pcDocRef->m_pcEditWnd->GetActiveView().GetCaret().ShowCaretPosInfo(); + GetEditWnd().GetActiveView().GetCaret().ShowCaretPosInfo(); return; } //カーソル位置保存 - CLayoutInt nViewTopLine = m_pcDocRef->m_pcEditWnd->GetActiveView().GetTextArea().GetViewTopLine(); /* 表示域の一番上の行(0開始) */ - CLayoutInt nViewLeftCol = m_pcDocRef->m_pcEditWnd->GetActiveView().GetTextArea().GetViewLeftCol(); /* 表示域の一番左の桁(0開始) */ - CLayoutPoint ptCaretPosXY = m_pcDocRef->m_pcEditWnd->GetActiveView().GetCaret().GetCaretLayoutPos(); + CLayoutInt nViewTopLine = GetEditWnd().GetActiveView().GetTextArea().GetViewTopLine(); /* 表示域の一番上の行(0開始) */ + CLayoutInt nViewLeftCol = GetEditWnd().GetActiveView().GetTextArea().GetViewLeftCol(); /* 表示域の一番左の桁(0開始) */ + CLayoutPoint ptCaretPosXY = GetEditWnd().GetActiveView().GetCaret().GetCaretLayoutPos(); //ロード SLoadInfo sLoadInfo; @@ -195,18 +195,18 @@ void CDocFileOperation::ReloadCurrentFile( // カーソル位置復元 (※ここではオプションのカーソル位置復元(=改行単位)が指定されていない場合でも復元する) // 2007.08.23 ryoji 表示領域復元 if( ptCaretPosXY.GetY2() < m_pcDocRef->m_cLayoutMgr.GetLineCount() ){ - m_pcDocRef->m_pcEditWnd->GetActiveView().GetTextArea().SetViewTopLine(nViewTopLine); - m_pcDocRef->m_pcEditWnd->GetActiveView().GetTextArea().SetViewLeftCol(nViewLeftCol); + GetEditWnd().GetActiveView().GetTextArea().SetViewTopLine(nViewTopLine); + GetEditWnd().GetActiveView().GetTextArea().SetViewLeftCol(nViewLeftCol); } - m_pcDocRef->m_pcEditWnd->GetActiveView().GetCaret().MoveCursorProperly( ptCaretPosXY, true ); // 2007.08.23 ryoji MoveCursor()->MoveCursorProperly() - m_pcDocRef->m_pcEditWnd->GetActiveView().GetCaret().m_nCaretPosX_Prev = m_pcDocRef->m_pcEditWnd->GetActiveView().GetCaret().GetCaretLayoutPos().GetX2(); + GetEditWnd().GetActiveView().GetCaret().MoveCursorProperly( ptCaretPosXY, true ); // 2007.08.23 ryoji MoveCursor()->MoveCursorProperly() + GetEditWnd().GetActiveView().GetCaret().m_nCaretPosX_Prev = GetEditWnd().GetActiveView().GetCaret().GetCaretLayoutPos().GetX2(); // 2006.09.01 ryoji オープン後自動実行マクロを実行する if( bRet ){ m_pcDocRef->RunAutoMacro( GetDllShareData().m_Common.m_sMacro.m_nMacroOnOpened ); //プラグイン:DocumentOpenイベント実行 - CJackManager::getInstance()->InvokePlugins( PP_DOCUMENT_OPEN, &m_pcDocRef->m_pcEditWnd->GetActiveView() ); + CJackManager::getInstance()->InvokePlugins( PP_DOCUMENT_OPEN, &GetEditWnd().GetActiveView() ); } } @@ -273,7 +273,7 @@ bool CDocFileOperation::SaveFileDialog( SYSTEMTIME localTime = {}; ::GetLocalTime( &localTime ); auto dateTimeString = GetDateTimeFormat( L"_%Y%m%d_%H%M%S", localTime ); - const EditNode* node = CAppNodeManager::getInstance()->GetEditNode( m_pcDocRef->m_pcEditWnd->GetHwnd() ); + const EditNode* node = CAppNodeManager::getInstance()->GetEditNode( GetEditWnd().GetHwnd() ); const int nId = (node != NULL && 0 < node->m_nId) ? node->m_nId : 0; auto_sprintf_s( pSaveInfo->cFilePath, pSaveInfo->cFilePath.GetBufferCount(), L"%s%.0d%s", LS(STR_NO_TITLE2), nId, dateTimeString.c_str() ); } @@ -339,11 +339,11 @@ bool CDocFileOperation::DoSaveFlow(SSaveInfo* pSaveInfo) m_pcDocRef->RunAutoMacro( GetDllShareData().m_Common.m_sMacro.m_nMacroOnSave, pSaveInfo->cFilePath ); //プラグイン:DocumentBeforeSaveイベント実行 - CJackManager::getInstance()->InvokePlugins( PP_DOCUMENT_BEFORE_SAVE, &m_pcDocRef->m_pcEditWnd->GetActiveView() ); + CJackManager::getInstance()->InvokePlugins( PP_DOCUMENT_BEFORE_SAVE, &GetEditWnd().GetActiveView() ); if(!pSaveInfo->bOverwriteMode){ //上書きでなければ前文書のクローズイベントを呼ぶ //プラグイン:DocumentCloseイベント実行 - CJackManager::getInstance()->InvokePlugins( PP_DOCUMENT_CLOSE, &m_pcDocRef->m_pcEditWnd->GetActiveView() ); + CJackManager::getInstance()->InvokePlugins( PP_DOCUMENT_CLOSE, &GetEditWnd().GetActiveView() ); } //セーブ処理 @@ -352,7 +352,7 @@ bool CDocFileOperation::DoSaveFlow(SSaveInfo* pSaveInfo) m_pcDocRef->NotifyAfterSave(*pSaveInfo); //後処理 //プラグイン:DocumentAfterSaveイベント実行 - CJackManager::getInstance()->InvokePlugins( PP_DOCUMENT_AFTER_SAVE, &m_pcDocRef->m_pcEditWnd->GetActiveView() ); + CJackManager::getInstance()->InvokePlugins( PP_DOCUMENT_AFTER_SAVE, &GetEditWnd().GetActiveView() ); //結果 eSaveResult = SAVED_OK; //###仮 @@ -435,7 +435,7 @@ bool CDocFileOperation::FileSaveAs( const WCHAR* filename,ECodeType eCodeType, E m_pcDocRef->RunAutoMacro( GetDllShareData().m_Common.m_sMacro.m_nMacroOnOpened ); //プラグイン:DocumentOpenイベント実行 - CJackManager::getInstance()->InvokePlugins( PP_DOCUMENT_OPEN, &m_pcDocRef->m_pcEditWnd->GetActiveView() ); + CJackManager::getInstance()->InvokePlugins( PP_DOCUMENT_OPEN, &GetEditWnd().GetActiveView() ); return true; } @@ -461,7 +461,7 @@ bool CDocFileOperation::FileClose() } //プラグイン:DocumentCloseイベント実行 - CJackManager::getInstance()->InvokePlugins( PP_DOCUMENT_CLOSE, &m_pcDocRef->m_pcEditWnd->GetActiveView() ); + CJackManager::getInstance()->InvokePlugins( PP_DOCUMENT_CLOSE, &GetEditWnd().GetActiveView() ); /* 既存データのクリア */ m_pcDocRef->InitDoc(); @@ -472,10 +472,10 @@ bool CDocFileOperation::FileClose() m_pcDocRef->SetCurDirNotitle(); // 無題番号取得 - CAppNodeManager::getInstance()->GetNoNameNumber( m_pcDocRef->m_pcEditWnd->GetHwnd() ); + CAppNodeManager::getInstance()->GetNoNameNumber( GetEditWnd().GetHwnd() ); /* 親ウィンドウのタイトルを更新 */ - m_pcDocRef->m_pcEditWnd->UpdateCaption(); + GetEditWnd().UpdateCaption(); // 2006.09.01 ryoji オープン後自動実行マクロを実行する m_pcDocRef->RunAutoMacro( GetDllShareData().m_Common.m_sMacro.m_nMacroOnOpened ); @@ -498,7 +498,7 @@ void CDocFileOperation::FileCloseOpen( const SLoadInfo& _sLoadInfo ) } //プラグイン:DocumentCloseイベント実行 - CJackManager::getInstance()->InvokePlugins( PP_DOCUMENT_CLOSE, &m_pcDocRef->m_pcEditWnd->GetActiveView() ); + CJackManager::getInstance()->InvokePlugins( PP_DOCUMENT_CLOSE, &GetEditWnd().GetActiveView() ); //ファイル名指定が無い場合はダイアログで入力させる SLoadInfo sLoadInfo = _sLoadInfo; @@ -534,16 +534,16 @@ void CDocFileOperation::FileCloseOpen( const SLoadInfo& _sLoadInfo ) if( !m_pcDocRef->m_cDocFile.GetFilePathClass().IsValidPath() ){ m_pcDocRef->SetCurDirNotitle(); - CAppNodeManager::getInstance()->GetNoNameNumber( m_pcDocRef->m_pcEditWnd->GetHwnd() ); + CAppNodeManager::getInstance()->GetNoNameNumber( GetEditWnd().GetHwnd() ); } /* 親ウィンドウのタイトルを更新 */ - m_pcDocRef->m_pcEditWnd->UpdateCaption(); + GetEditWnd().UpdateCaption(); // オープン後自動実行マクロを実行する // ※ロードしてなくても(無題)には変更済み m_pcDocRef->RunAutoMacro( GetDllShareData().m_Common.m_sMacro.m_nMacroOnOpened ); //プラグイン:DocumentOpenイベント実行 - CJackManager::getInstance()->InvokePlugins( PP_DOCUMENT_OPEN, &m_pcDocRef->m_pcEditWnd->GetActiveView() ); + CJackManager::getInstance()->InvokePlugins( PP_DOCUMENT_OPEN, &GetEditWnd().GetActiveView() ); } diff --git a/sakura_core/doc/CDocType.cpp b/sakura_core/doc/CDocType.cpp index d2c2902061..8d87b9203b 100644 --- a/sakura_core/doc/CDocType.cpp +++ b/sakura_core/doc/CDocType.cpp @@ -108,10 +108,10 @@ void CDocType::SetDocumentIcon() HICON hIconBig, hIconSmall; if( this->GetDocumentAttribute().m_bUseDocumentIcon ) - m_pcDocRef->m_pcEditWnd->GetRelatedIcon( m_pcDocRef->m_cDocFile.GetFilePath(), &hIconBig, &hIconSmall ); + GetEditWnd().GetRelatedIcon( m_pcDocRef->m_cDocFile.GetFilePath(), &hIconBig, &hIconSmall ); else - m_pcDocRef->m_pcEditWnd->GetDefaultIcon( &hIconBig, &hIconSmall ); + GetEditWnd().GetDefaultIcon( &hIconBig, &hIconSmall ); - m_pcDocRef->m_pcEditWnd->SetWindowIcon( hIconBig, ICON_BIG ); - m_pcDocRef->m_pcEditWnd->SetWindowIcon( hIconSmall, ICON_SMALL ); + GetEditWnd().SetWindowIcon( hIconBig, ICON_BIG ); + GetEditWnd().SetWindowIcon( hIconSmall, ICON_SMALL ); } diff --git a/sakura_core/doc/CDocVisitor.cpp b/sakura_core/doc/CDocVisitor.cpp index 9767ea40fb..e70d5a6d12 100644 --- a/sakura_core/doc/CDocVisitor.cpp +++ b/sakura_core/doc/CDocVisitor.cpp @@ -81,7 +81,7 @@ void CDocVisitor::SetAllEol(CEol cEol) if( bReplace ){ m_pcDocRef->m_cLayoutMgr._DoLayout(false); - m_pcDocRef->m_pcEditWnd->ClearViewCaretPosInfo(); + GetEditWnd().ClearViewCaretPosInfo(); if( m_pcDocRef->m_nTextWrapMethodCur == WRAP_NO_TEXT_WRAP ){ m_pcDocRef->m_cLayoutMgr.CalculateTextWidth(); }else{ diff --git a/sakura_core/func/Funccode.cpp b/sakura_core/func/Funccode.cpp index 7b7f685177..fd54e51727 100644 --- a/sakura_core/func/Funccode.cpp +++ b/sakura_core/func/Funccode.cpp @@ -1045,7 +1045,7 @@ bool IsFuncEnable( const CEditDoc* pcEditDoc, const DLLSHAREDATA* pShareData, EF // 02/06/26 ai Start case F_JUMP_SRCHSTARTPOS: // 検索開始位置へ戻る - if( pcEditDoc->m_pcEditWnd->GetActiveView().m_ptSrchStartPos_PHY.BothNatural() ){ + if( GetEditWnd().GetActiveView().m_ptSrchStartPos_PHY.BothNatural() ){ return true; }else{ return false; @@ -1142,7 +1142,7 @@ bool IsFuncEnable( const CEditDoc* pcEditDoc, const DLLSHAREDATA* pShareData, EF case F_COPY_COLOR_HTML: //選択範囲内色付きHTMLコピー case F_COPY_COLOR_HTML_LINENUMBER: //選択範囲内行番号色付きHTMLコピー //テキストが選択されていればtrue - return pcEditDoc->m_pcEditWnd->GetActiveView().GetSelectionInfo().IsTextSelected(); + return GetEditWnd().GetActiveView().GetSelectionInfo().IsTextSelected(); case F_TOLOWER: /* 小文字 */ case F_TOUPPER: /* 大文字 */ @@ -1170,12 +1170,12 @@ bool IsFuncEnable( const CEditDoc* pcEditDoc, const DLLSHAREDATA* pShareData, EF case F_BASE64DECODE: /* Base64デコードして保存 */ case F_UUDECODE: //uudecodeして保存 //Oct. 17, 2000 jepro 説明を「選択部分をUUENCODEデコード」から変更 // テキストが選択されていればtrue - return pcEditDoc->m_pcEditWnd->GetActiveView().GetSelectionInfo().IsTextSelected(); + return GetEditWnd().GetActiveView().GetSelectionInfo().IsTextSelected(); case F_CUT_LINE: //行切り取り(折り返し単位) case F_DELETE_LINE: //行削除(折り返し単位) // テキストが選択されていなければtrue - return !pcEditDoc->m_pcEditWnd->GetActiveView().GetSelectionInfo().IsTextSelected(); + return !GetEditWnd().GetActiveView().GetSelectionInfo().IsTextSelected(); case F_UNDO: return pcEditDoc->m_cDocEditor.IsEnableUndo(); /* Undo(元に戻す)可能な状態か? */ case F_REDO: return pcEditDoc->m_cDocEditor.IsEnableRedo(); /* Redo(やり直し)可能な状態か? */ @@ -1183,7 +1183,7 @@ bool IsFuncEnable( const CEditDoc* pcEditDoc, const DLLSHAREDATA* pShareData, EF case F_OPEN_HfromtoC: //同名のC/C++ヘッダ(ソース)を開く //Feb. 7, 2001 JEPRO 追加 // case F_OPEN_HHPP: //同名のC/C++ヘッダファイルを開く //Feb. 9, 2001 jepro「.cまたは.cppと同名の.hを開く」から変更 del 2008/6/23 Uchi // case F_OPEN_CCPP: //同名のC/C++ソースファイルを開く //Feb. 9, 2001 jepro「.hと同名の.c(なければ.cpp)を開く」から変更 del 2008/6/23 Uchi - return pcEditDoc->m_cDocFile.GetFilePathClass().IsValidPath() && pcEditDoc->m_pcEditWnd->GetActiveView().GetCommander().Command_OPEN_HfromtoC(TRUE); + return pcEditDoc->m_cDocFile.GetFilePathClass().IsValidPath() && GetEditWnd().GetActiveView().GetCommander().Command_OPEN_HfromtoC(TRUE); case F_COPYPATH: case F_COPYDIRPATH: case F_COPYTAG: @@ -1221,12 +1221,12 @@ bool IsFuncEnable( const CEditDoc* pcEditDoc, const DLLSHAREDATA* pShareData, EF return IsPowerShellAvailable(); case F_JUMPHIST_PREV: // 移動履歴: 前へ - if( pcEditDoc->m_pcEditWnd->GetActiveView().m_cHistory->CheckPrev() ) + if( GetEditWnd().GetActiveView().m_cHistory->CheckPrev() ) return true; else return false; case F_JUMPHIST_NEXT: // 移動履歴: 次へ - if( pcEditDoc->m_pcEditWnd->GetActiveView().m_cHistory->CheckNext() ) + if( GetEditWnd().GetActiveView().m_cHistory->CheckNext() ) return true; else return false; @@ -1329,10 +1329,10 @@ bool IsFuncChecked( const CEditDoc* pcEditDoc, const DLLSHAREDATA* pShareData, E case F_ISEARCH_REGEXP_PREV: case F_ISEARCH_MIGEMO_NEXT: case F_ISEARCH_MIGEMO_PREV: - return pcEditDoc->m_pcEditWnd->GetActiveView().IsISearchEnabled( nId ); + return GetEditWnd().GetActiveView().IsISearchEnabled( nId ); case F_OUTLINE_TOGGLE: // 20060201 aroka アウトラインウィンドウ // ToDo:ブックマークリストが出ているときもへこんでしまう。 - return pcEditDoc->m_pcEditWnd->m_cDlgFuncList.GetHwnd() != NULL; + return GetEditWnd().m_cDlgFuncList.GetHwnd() != NULL; } //End 2004.07.14 Kazika diff --git a/sakura_core/outline/CDlgFuncList.cpp b/sakura_core/outline/CDlgFuncList.cpp index 33b4f3df23..0859c3e5d8 100644 --- a/sakura_core/outline/CDlgFuncList.cpp +++ b/sakura_core/outline/CDlgFuncList.cpp @@ -3438,7 +3438,7 @@ bool CDlgFuncList::ChangeLayout( int nId ) if( nId == OUTLINE_LAYOUT_FILECHANGED ) return false; // ファイル切替ではフローティングは開かない(従来互換) } // ※ 裏では一時的に Disable 化しておいて開く(タブモードでの不正な画面切り替え抑止) - CEditView* pcEditView = &pDoc->m_pcEditWnd->GetActiveView(); + CEditView* pcEditView = &GetEditWnd().GetActiveView(); if( nId == OUTLINE_LAYOUT_BACKGROUND ) ::EnableWindow( GetEditWnd().GetHwnd(), FALSE ); if( m_nOutlineType == OUTLINE_DEFAULT ){ bool bType = (ProfDockSet() != 0); @@ -3548,7 +3548,7 @@ void CDlgFuncList::OnOutlineNotify( WPARAM wParam, LPARAM lParam ) CEditDoc* pDoc = CEditDoc::GetInstance(0); // 今は非表示かもしれないので (CEditView*)m_lParam は使えない switch( wParam ){ case 0: // 設定変更通知(ドッキングモード or サイズ), lParam: 通知元の HWND - if( (HWND)lParam == pDoc->m_pcEditWnd->GetHwnd() ) + if( (HWND)lParam == GetEditWnd().GetHwnd() ) return; // 自分からの通知は無視 ChangeLayout( OUTLINE_LAYOUT_BACKGROUND ); // アウトライン画面を再配置 break; diff --git a/sakura_core/recent/CMruListener.cpp b/sakura_core/recent/CMruListener.cpp index 57e81a27b6..770a63f401 100644 --- a/sakura_core/recent/CMruListener.cpp +++ b/sakura_core/recent/CMruListener.cpp @@ -160,7 +160,7 @@ void CMruListener::OnAfterLoad(const SLoadInfo& sLoadInfo) pcDoc->m_cLayoutMgr.LogicToLayout(eiOld.m_ptCursor, &ptCaretPos); //ビュー取得 - CEditView& cView = pcDoc->m_pcEditWnd->GetActiveView(); + CEditView& cView = GetEditWnd().GetActiveView(); if( ptCaretPos.GetY2() >= pcDoc->m_cLayoutMgr.GetLineCount() ){ //ファイルの最後に移動 diff --git a/sakura_core/view/CCaret.cpp b/sakura_core/view/CCaret.cpp index 236f08ef75..bf6eadc4fa 100644 --- a/sakura_core/view/CCaret.cpp +++ b/sakura_core/view/CCaret.cpp @@ -383,7 +383,7 @@ CLayoutInt CCaret::MoveCursor( // アウトライン表示の選択位置を更新 CLayoutPoint poCaret = GetCaretLayoutPos(); - m_pEditDoc->m_pcEditWnd->m_cDlgFuncList.NotifyCaretMovement( poCaret.GetY2() + 1, poCaret.GetX2() + 1 ); + GetEditWnd().m_cDlgFuncList.NotifyCaretMovement( poCaret.GetY2() + 1, poCaret.GetX2() + 1 ); return nScrollRowNum; } @@ -665,7 +665,7 @@ void CCaret::ShowCaretPosInfo() } // ステータスバーハンドルを取得 - HWND hwndStatusBar = m_pEditDoc->m_pcEditWnd->m_cStatusBar.GetStatusHwnd(); + HWND hwndStatusBar = GetEditWnd().m_cStatusBar.GetStatusHwnd(); // カーソル位置の文字列を取得 const CLayout* pcLayout; @@ -826,7 +826,7 @@ void CCaret::ShowCaretPosInfo() szLeft, szRight ); - m_pEditDoc->m_pcEditWnd->PrintMenubarMessage( szText ); + GetEditWnd().PrintMenubarMessage( szText ); } // ステータスバーに状態を書き出す else{ @@ -841,13 +841,13 @@ void CCaret::ShowCaretPosInfo() } WCHAR szFontSize[16]; - if( const double nZoomPercentage = m_pEditDoc->m_pcEditWnd->GetFontZoom() * 100.0; nZoomPercentage < 5.0 ){ + if( const double nZoomPercentage = GetEditWnd().GetFontZoom() * 100.0; nZoomPercentage < 5.0 ){ auto_sprintf_s( szFontSize, _countof(szFontSize), LS( STR_STATUS_FONTZOOM_1 ), nZoomPercentage ); }else{ auto_sprintf_s( szFontSize, _countof(szFontSize), LS( STR_STATUS_FONTZOOM_0 ), nZoomPercentage ); } - auto& statusBar = m_pEditDoc->m_pcEditWnd->m_cStatusBar; + auto& statusBar = GetEditWnd().m_cStatusBar; // SB_SETTEXT メッセージでステータスバーに文字列を設定する度に再描画が行われるのを防ぐ為に // 設定時にパートのRECTを取得し最後にまとめて再描画を行う HWND hWnd = statusBar.GetStatusHwnd(); diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index 76b8e1959d..143265dd5c 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -120,7 +120,7 @@ static void ShowCodeBox( HWND hWnd, CEditDoc* pcEditDoc ) // カーソル位置の文字列を取得 const CLayout* pcLayout; CLogicInt nLineLen; - const CEditView* pcView = &pcEditDoc->m_pcEditWnd->GetActiveView(); + const CEditView* pcView = &GetEditWnd().GetActiveView(); const CCaret* pcCaret = &pcView->GetCaret(); const CLayoutMgr* pLayoutMgr = &pcEditDoc->m_cLayoutMgr; const wchar_t* pLine = pLayoutMgr->GetLineStr( pcCaret->GetCaretLayoutPos().GetY2(), &nLineLen, &pcLayout ); From 889939f9761687c883f720b8aea4b38fbecfde73 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 17 Oct 2021 17:58:54 +0900 Subject: [PATCH 0863/1024] =?UTF-8?q?CEditDoc::m=5FpcEditWnd=E7=BD=AE?= =?UTF-8?q?=E6=8F=9B3=20=E6=89=8B=E4=BD=9C=E6=A5=AD=E7=BD=AE=E6=8F=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CAutoReloadAgent.cpp | 2 +- sakura_core/dlg/CDlgJump.cpp | 3 +-- sakura_core/doc/CDocEditor.cpp | 2 +- sakura_core/doc/CEditDoc.cpp | 2 +- sakura_core/outline/CDlgFuncList.cpp | 4 ++-- 5 files changed, 6 insertions(+), 7 deletions(-) diff --git a/sakura_core/CAutoReloadAgent.cpp b/sakura_core/CAutoReloadAgent.cpp index 502960ef3e..14f38d154f 100644 --- a/sakura_core/CAutoReloadAgent.cpp +++ b/sakura_core/CAutoReloadAgent.cpp @@ -89,7 +89,7 @@ bool CAutoReloadAgent::_ToDoChecking() const if(hwndActive!=CEditWnd::getInstance()->GetHwnd())return false; if(!GetListeningDoc()->m_cDocFile.GetFilePathClass().IsValidPath())return false; if(GetListeningDoc()->m_cDocFile.IsFileTimeZero()) return false; /* 現在編集中のファイルのタイムスタンプ */ - if(GetListeningDoc()->m_pcEditWnd->m_pPrintPreview ) return false; // 印刷プレビュー中 2013/5/8 Uchi + if(GetEditWnd().m_pPrintPreview ) return false; // 印刷プレビュー中 2013/5/8 Uchi return true; } diff --git a/sakura_core/dlg/CDlgJump.cpp b/sakura_core/dlg/CDlgJump.cpp index 711116066d..149e740050 100644 --- a/sakura_core/dlg/CDlgJump.cpp +++ b/sakura_core/dlg/CDlgJump.cpp @@ -177,8 +177,7 @@ BOOL CDlgJump::OnBnClicked( int wID ) } //To Here Feb. 20, 2001 { //@@@ 2002.2.2 YAZAKI 指定行へジャンプを、ダイアログを表示するコマンドと、実際にジャンプするコマンドに分離。 - CEditDoc* pCEditDoc = (CEditDoc*)m_lParam; - pCEditDoc->m_pcEditWnd->GetActiveView().GetCommander().HandleCommand(F_JUMP, true, 0, 0, 0, 0); // ジャンプコマンド発行 + GetEditWnd().GetActiveView().GetCommander().HandleCommand(F_JUMP, true, 0, 0, 0, 0); // ジャンプコマンド発行 } return TRUE; case IDCANCEL: diff --git a/sakura_core/doc/CDocEditor.cpp b/sakura_core/doc/CDocEditor.cpp index f4276ba6da..ce12c8f47f 100644 --- a/sakura_core/doc/CDocEditor.cpp +++ b/sakura_core/doc/CDocEditor.cpp @@ -71,7 +71,7 @@ void CDocEditor::SetModified( bool flag, bool redraw) void CDocEditor::OnBeforeLoad(SLoadInfo* sLoadInfo) { //ビューのテキスト選択解除 - GetListeningDoc()->m_pcEditWnd->Views_DisableSelectArea(true); + GetEditWnd().Views_DisableSelectArea(true); } void CDocEditor::OnAfterLoad(const SLoadInfo& sLoadInfo) diff --git a/sakura_core/doc/CEditDoc.cpp b/sakura_core/doc/CEditDoc.cpp index dcd98990d4..abca67d5ef 100644 --- a/sakura_core/doc/CEditDoc.cpp +++ b/sakura_core/doc/CEditDoc.cpp @@ -663,7 +663,7 @@ void CEditDoc::OnChangeSetting( int i; HWND hwndProgress = NULL; - CEditWnd* pCEditWnd = m_pcEditWnd; // Sep. 10, 2002 genta + CEditWnd* pCEditWnd = &GetEditWnd(); // Sep. 10, 2002 genta if( NULL != pCEditWnd ){ hwndProgress = pCEditWnd->m_cStatusBar.GetProgressHwnd(); diff --git a/sakura_core/outline/CDlgFuncList.cpp b/sakura_core/outline/CDlgFuncList.cpp index 0859c3e5d8..e8496cdac2 100644 --- a/sakura_core/outline/CDlgFuncList.cpp +++ b/sakura_core/outline/CDlgFuncList.cpp @@ -3182,7 +3182,7 @@ INT_PTR CDlgFuncList::OnNcPaint( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPa void CDlgFuncList::DoMenu( POINT pt, HWND hwndFrom ) { // メニューを作成する - CEditView* pcEditView = &CEditDoc::GetInstance(0)->m_pcEditWnd->GetActiveView(); + CEditView* pcEditView = &GetEditWnd().GetActiveView(); CDocTypeManager().GetTypeConfig( CTypeConfig(m_nDocType), m_type ); EDockSide eDockSide = ProfDockSide(); // 設定上の配置 UINT uFlags = MF_BYPOSITION | MF_STRING; @@ -3394,7 +3394,7 @@ void CDlgFuncList::DoMenu( POINT pt, HWND hwndFrom ) */ void CDlgFuncList::Refresh( void ) { - CEditWnd* pcEditWnd = CEditDoc::GetInstance(0)->m_pcEditWnd; + CEditWnd* pcEditWnd = &GetEditWnd(); BOOL bReloaded = ChangeLayout( OUTLINE_LAYOUT_FILECHANGED ); // 現在設定に従ってアウトライン画面を再配置する if( !bReloaded && pcEditWnd->m_cDlgFuncList.GetHwnd() ){ EOutlineType nOutlineType = GetOutlineTypeRedraw(m_nOutlineType); From f4779711663cb8ce08d44c9aa0512b1991e3a553 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 17 Oct 2021 18:14:18 +0900 Subject: [PATCH 0864/1024] =?UTF-8?q?=E5=86=97=E9=95=B7=E3=81=AA=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=90=E5=A4=89=E6=95=B0=20CSplitterWnd::m=5FpcEdit?= =?UTF-8?q?Wnd=E5=89=8A=E9=99=A4=20=E3=82=92=E5=89=8A=E9=99=A4=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/window/CEditWnd.cpp | 2 +- sakura_core/window/CSplitterWnd.cpp | 11 ++++------- sakura_core/window/CSplitterWnd.h | 4 ++-- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index 143265dd5c..425a7d07bc 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -690,7 +690,7 @@ HWND CEditWnd::Create( // -- -- -- -- 子ウィンドウ作成 -- -- -- -- // /* 分割フレーム作成 */ - m_cSplitterWnd.Create( G_AppInstance(), GetHwnd(), this ); + m_cSplitterWnd.Create( GetHwnd() ); /* ビュー */ GetView(0).Create( m_cSplitterWnd.GetHwnd(), GetDocument(), 0, TRUE, false ); diff --git a/sakura_core/window/CSplitterWnd.cpp b/sakura_core/window/CSplitterWnd.cpp index 27a324b8e2..9695cd9113 100644 --- a/sakura_core/window/CSplitterWnd.cpp +++ b/sakura_core/window/CSplitterWnd.cpp @@ -34,7 +34,6 @@ constexpr auto SPLITTER_MARGIN = 2; // @date 2002.2.17 YAZAKI CShareDataのインスタンスは、CProcessにひとつあるのみ。 CSplitterWnd::CSplitterWnd() : CWnd(L"::CSplitterWnd") -, m_pcEditWnd(NULL) , m_nAllSplitRows(1) /* 分割行数 */ , m_nAllSplitCols(1) /* 分割桁数 */ , m_nVSplitPos(0) /* 垂直分割位置 */ @@ -61,17 +60,15 @@ CSplitterWnd::~CSplitterWnd() } /* 初期化 */ -HWND CSplitterWnd::Create( HINSTANCE hInstance, HWND hwndParent, void* pCEditWnd ) +HWND CSplitterWnd::Create( HWND hwndParent ) { LPCWSTR pszClassName = L"SplitterWndClass"; /* 初期化 */ - m_pcEditWnd = pCEditWnd; - /* ウィンドウクラス作成 */ ATOM atWork; atWork = RegisterWC( - hInstance, + G_AppInstance(), NULL,// Handle to the class icon. NULL, //Handle to a small icon NULL,// Handle to the class cursor. @@ -247,7 +244,7 @@ void CSplitterWnd::DoSplit( int nHorizontal, int nVertical ) BOOL bVUp; BOOL bHUp; BOOL bSizeBox; - CEditWnd* pCEditWnd = (CEditWnd*)m_pcEditWnd; + CEditWnd* pCEditWnd = &GetEditWnd(); bVUp = FALSE; bHUp = FALSE; @@ -805,7 +802,7 @@ LRESULT CSplitterWnd::OnPaint( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPara /* ウィンドウサイズの変更処理 */ LRESULT CSplitterWnd::OnSize( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { - CEditWnd* pCEditWnd = (CEditWnd*)m_pcEditWnd; + CEditWnd* pCEditWnd = &GetEditWnd(); CEditView* pcViewArr[MAXCOUNTOFVIEW]; int i; RECT rcClient; diff --git a/sakura_core/window/CSplitterWnd.h b/sakura_core/window/CSplitterWnd.h index 9e60e7686c..25fd3559eb 100644 --- a/sakura_core/window/CSplitterWnd.h +++ b/sakura_core/window/CSplitterWnd.h @@ -46,7 +46,7 @@ class CSplitterWnd final : public CWnd || Attributes & Operations */ DLLSHAREDATA* m_pShareData; - void* m_pcEditWnd; + int m_nAllSplitRows; /* 分割行数 */ int m_nAllSplitCols; /* 分割桁数 */ int m_nVSplitPos; /* 垂直分割位置 */ @@ -59,7 +59,7 @@ class CSplitterWnd final : public CWnd int m_nDragPosY; /* ドラッグ位置Y */ int m_nActivePane; /* アクティブなペイン */ public: // 2002/2/3 aroka - HWND Create(HINSTANCE hInstance, HWND hwndParent, void* pCEditWnd); /* 初期化 */ + HWND Create( HWND hwndParent ); /* 初期化 */ void SetChildWndArr(HWND* hwndEditViewArr); /* 子ウィンドウの設定 */ void DoSplit(int nHorizontal, int nVertical); /* ウィンドウの分割 */ void SetActivePane(int nIndex); /* アクティブペインの設定 */ From 4b341c4a6f3cbd601fd5fcdc67d924aca6b19fed Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 17 Oct 2021 23:44:02 +0900 Subject: [PATCH 0865/1024] =?UTF-8?q?=E3=82=B0=E3=83=AD=E3=83=BC=E3=83=90?= =?UTF-8?q?=E3=83=AB=E5=A4=89=E6=95=B0g=5FpcEditWnd=E3=82=92=E5=89=8A?= =?UTF-8?q?=E9=99=A4=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CEditWndのインスタンスはクラスのstatic変数に保持されるので、グローバル変数に持つと二重保持になり無駄です。 --- sakura_core/_main/global.cpp | 3 --- sakura_core/_main/global.h | 4 ---- sakura_core/util/MessageBoxF.cpp | 23 +++++++++++++++++------ sakura_core/window/CEditWnd.cpp | 3 --- 4 files changed, 17 insertions(+), 16 deletions(-) diff --git a/sakura_core/_main/global.cpp b/sakura_core/_main/global.cpp index e9fccb355b..fbc095f8ee 100644 --- a/sakura_core/_main/global.cpp +++ b/sakura_core/_main/global.cpp @@ -46,9 +46,6 @@ LPCWSTR GetAppName( void ) return pcProcess->GetAppName(); } -//2007.10.02 kobake CEditWndのインスタンスへのポインタをここに保存しておく -CEditWnd* g_pcEditWnd = NULL; - /*! 選択領域描画用パラメータ */ const COLORREF SELECTEDAREA_RGB = RGB( 255, 255, 255 ); const int SELECTEDAREA_ROP2 = R2_XORPEN; diff --git a/sakura_core/_main/global.h b/sakura_core/_main/global.h index 479b7be128..cb4681d716 100644 --- a/sakura_core/_main/global.h +++ b/sakura_core/_main/global.h @@ -173,9 +173,5 @@ struct SSearchOption{ bool operator != (const SSearchOption& rhs) const noexcept; }; -//2007.10.02 kobake CEditWndのインスタンスへのポインタをここに保存しておく -class CEditWnd; -extern CEditWnd* g_pcEditWnd; - HINSTANCE G_AppInstance(); #endif /* SAKURA_GLOBAL_BD124BE7_A850_41F3_9F5D_8A4F0E45A4C9_H_ */ diff --git a/sakura_core/util/MessageBoxF.cpp b/sakura_core/util/MessageBoxF.cpp index 0ac4e290e3..e8f2ef5363 100644 --- a/sakura_core/util/MessageBoxF.cpp +++ b/sakura_core/util/MessageBoxF.cpp @@ -36,6 +36,7 @@ #include #include #include "MessageBoxF.h" +#include "_main/CProcess.h" #include "window/CEditWnd.h" #include "CSelectLang.h" #include "config/app_constants.h" @@ -74,14 +75,24 @@ int Wrap_MessageBox(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType) ); } -HWND GetMessageBoxOwner(HWND hwndOwner) +/*! + * メッセージボックスのオーナーウインドウを取得します。 + * + * @param [in,opt] hWndOwner オーナーウインドウ + * @returns メッセージボックスのオーナーウインドウ + * @retval 指定したオーナーウインドウが不正値で、プロセスのメインウインドウが作成済みの場合 + * @retval hWndOwner 指定したオーナーウインドウが適正値で、メインウインドウが未作成の場合 + */ +HWND GetMessageBoxOwner(HWND hWndOwner) { - if(hwndOwner==NULL && g_pcEditWnd){ - return g_pcEditWnd->GetHwnd(); - } - else{ - return hwndOwner; + if( !hWndOwner || !::IsWindow(hWndOwner) ) + { + if( const auto pcProcess = CProcess::getInstance() ) + { + hWndOwner = pcProcess->GetMainWindow(); + } } + return hWndOwner; } /*! diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index 425a7d07bc..57e896b798 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -233,13 +233,10 @@ CEditWnd::CEditWnd() , m_IconClicked(icNone) //by 鬼(2) , m_nSelectCountMode( SELECT_COUNT_TOGGLE ) //文字カウント方法の初期値はSELECT_COUNT_TOGGLE→共通設定に従う { - g_pcEditWnd=this; } CEditWnd::~CEditWnd() { - g_pcEditWnd=NULL; - delete m_pPrintPreview; m_pPrintPreview = NULL; From 22edbcefb35e6328dba82426bdda4369b3633684 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Tue, 19 Oct 2021 20:37:29 +0900 Subject: [PATCH 0866/1024] =?UTF-8?q?GetEditWnd=E3=81=AE=E6=8C=87=E6=91=98?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 変数宣言のconstを削除し、c style-castしなくて良いようにする --- sakura_core/window/CEditWnd.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index 57e896b798..e200404a02 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -187,12 +187,12 @@ static void ShowCodeBox( HWND hWnd, CEditDoc* pcEditDoc ) */ CEditWnd& GetEditWnd( void ) { - const auto pcEditWnd = CEditWnd::getInstance(); + auto pcEditWnd = CEditWnd::getInstance(); if( !pcEditWnd ) { ::_com_raise_error(E_FAIL, MakeMsgError(L"Any CEditWnd has been instantiated.")); } - return (CEditWnd&)*pcEditWnd; + return *pcEditWnd; } // /* メッセージループ */ From c83e5e5396c64407764dd6a706a2583354bcc8ea Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Tue, 19 Oct 2021 21:24:09 +0900 Subject: [PATCH 0867/1024] =?UTF-8?q?CMiniMapView=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura/sakura.vcxproj | 2 ++ sakura/sakura.vcxproj.filters | 6 ++++ sakura_core/view/CMiniMapView.cpp | 36 +++++++++++++++++++ sakura_core/view/CMiniMapView.h | 39 +++++++++++++++++++++ sakura_core/window/CEditWnd.cpp | 57 ++++++++++++++----------------- sakura_core/window/CEditWnd.h | 5 +-- 6 files changed, 112 insertions(+), 33 deletions(-) create mode 100644 sakura_core/view/CMiniMapView.cpp create mode 100644 sakura_core/view/CMiniMapView.h diff --git a/sakura/sakura.vcxproj b/sakura/sakura.vcxproj index 521393bbba..ed9d56c47a 100644 --- a/sakura/sakura.vcxproj +++ b/sakura/sakura.vcxproj @@ -460,6 +460,7 @@ + @@ -870,6 +871,7 @@ + diff --git a/sakura/sakura.vcxproj.filters b/sakura/sakura.vcxproj.filters index baa41406b6..1b4b79ed93 100644 --- a/sakura/sakura.vcxproj.filters +++ b/sakura/sakura.vcxproj.filters @@ -1112,6 +1112,9 @@ Cpp Source Files\charset + + Cpp Source Files\view + @@ -2309,6 +2312,9 @@ Cpp Source Files\charset + + Cpp Source Files\view + diff --git a/sakura_core/view/CMiniMapView.cpp b/sakura_core/view/CMiniMapView.cpp new file mode 100644 index 0000000000..8b01472bcf --- /dev/null +++ b/sakura_core/view/CMiniMapView.cpp @@ -0,0 +1,36 @@ +/*! @file */ +/* + Copyright (C) 2012, Moca + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ + +#include "StdAfx.h" +#include "view/CMiniMapView.h" + +#include "doc/CEditDoc.h" + +BOOL CMiniMapView::Create( HWND hWndParent ) +{ + auto pcEditDoc = CEditDoc::getInstance(); + return CEditView::Create( hWndParent, pcEditDoc, -1, FALSE, true ); +} \ No newline at end of file diff --git a/sakura_core/view/CMiniMapView.h b/sakura_core/view/CMiniMapView.h new file mode 100644 index 0000000000..8868b5e1ed --- /dev/null +++ b/sakura_core/view/CMiniMapView.h @@ -0,0 +1,39 @@ +/*! @file */ +/* + Copyright (C) 2012, Moca + Copyright (C) 2018-2021, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#pragma once + +#include "view/CEditView.h" + +/*! + ミニマップ + + 編集ビューのコードを流用して縮小ビューを表示する + */ +class CMiniMapView : public CEditView +{ +public: + BOOL Create( HWND hWndParent ); +}; diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index 57e896b798..59c839b5c3 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -246,9 +246,6 @@ CEditWnd::~CEditWnd() } m_pcEditView = NULL; - delete m_pcEditViewMiniMap; - m_pcEditViewMiniMap = NULL; - delete m_pcViewFont; m_pcViewFont = NULL; @@ -621,8 +618,6 @@ HWND CEditWnd::Create( m_pcViewFont = new CViewFont(&GetLogfont()); - m_pcEditViewMiniMap = new CEditView(); - m_pcViewFontMiniMap = new CViewFont(&GetLogfont(), true); wmemset( m_pszMenubarMessage, L' ', MENUBAR_MESSAGE_MAX_LEN ); // null終端は不要 @@ -1024,12 +1019,12 @@ void CEditWnd::LayoutTabBar( void ) void CEditWnd::LayoutMiniMap( void ) { if( m_pShareData->m_Common.m_sWindow.m_bDispMiniMap ){ /* タブバーを表示する */ - if( NULL == GetMiniMap().GetHwnd() ){ - GetMiniMap().Create( GetHwnd(), GetDocument(), -1, FALSE, true ); + if( !m_cMiniMapView.GetHwnd() ){ + m_cMiniMapView.Create( GetHwnd() ); } }else{ - if( NULL != GetMiniMap().GetHwnd() ){ - GetMiniMap().Close(); + if( m_cMiniMapView.GetHwnd() ){ + m_cMiniMapView.Close(); } } } @@ -1059,8 +1054,8 @@ void CEditWnd::EndLayoutBars( BOOL bAdjust/* = TRUE*/ ) // その後、ウィンドウの下部境界を上下ドラッグしてサイズ変更するとゴミが現れることがあった。 ::SetWindowPos( m_cDlgFuncList.GetHwnd(), HWND_BOTTOM, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE ); } - if (NULL != GetMiniMap().GetHwnd()) { - ::ShowWindow(GetMiniMap().GetHwnd(), nCmdShow); + if( m_cMiniMapView.GetHwnd() ){ + ::ShowWindow( m_cMiniMapView.GetHwnd(), nCmdShow ); } if( bAdjust ) @@ -2523,7 +2518,7 @@ void CEditWnd::InitMenu_Function(HMENU hMenu, EFunctionCode eFunc, const wchar_t break; case F_SHOWMINIMAP: SetMenuFuncSel( hMenu, eFunc, pszKey, - !m_pShareData->m_Common.m_sWindow.m_bMenuIcon | !GetMiniMap().GetHwnd() ); + !m_pShareData->m_Common.m_sWindow.m_bMenuIcon | !m_cMiniMapView.GetHwnd() ); break; case F_TOGGLE_KEY_SEARCH: SetMenuFuncSel( hMenu, eFunc, pszKey, @@ -2953,8 +2948,8 @@ void CEditWnd::PrintPreviewModeONOFF( void ) ::ShowWindow( m_cFuncKeyWnd.GetHwnd(), SW_SHOW ); ::ShowWindow( m_cTabWnd.GetHwnd(), SW_SHOW ); //@@@ 2003.06.25 MIK ::ShowWindow( m_cDlgFuncList.GetHwnd(), SW_SHOW ); // 2010.06.25 ryoji - if (NULL != GetMiniMap().GetHwnd()) { - ::ShowWindow(GetMiniMap().GetHwnd(), SW_SHOW); + if( m_cMiniMapView.GetHwnd() ){ + ::ShowWindow( m_cMiniMapView.GetHwnd(), SW_SHOW ); } // その他のモードレスダイアログも戻す // 2010.06.25 ryoji @@ -2987,8 +2982,8 @@ void CEditWnd::PrintPreviewModeONOFF( void ) ::ShowWindow( m_cFuncKeyWnd.GetHwnd(), SW_HIDE ); ::ShowWindow( m_cTabWnd.GetHwnd(), SW_HIDE ); //@@@ 2003.06.25 MIK ::ShowWindow( m_cDlgFuncList.GetHwnd(), SW_HIDE ); // 2010.06.25 ryoji - if (NULL != GetMiniMap().GetHwnd()) { - ::ShowWindow(GetMiniMap().GetHwnd(), SW_HIDE); + if( m_cMiniMapView.GetHwnd() ){ + ::ShowWindow( m_cMiniMapView.GetHwnd(), SW_HIDE ); } // その他のモードレスダイアログも隠す // 2010.06.25 ryoji @@ -3307,16 +3302,16 @@ LRESULT CEditWnd::OnSize2( WPARAM wParam, LPARAM lParam, bool bUpdateStatus ) // ミニマップ int nMiniMapWidth = 0; - if( GetMiniMap().GetHwnd() ){ + if( m_cMiniMapView.GetHwnd() ){ nMiniMapWidth = GetDllShareData().m_Common.m_sWindow.m_nMiniMapWidth; - ::MoveWindow( m_pcEditViewMiniMap->GetHwnd(), + ::MoveWindow( m_cMiniMapView.GetHwnd(), (eDockSideFL == DOCKSIDE_RIGHT)? cx - nFuncListWidth - nMiniMapWidth: cx - nMiniMapWidth, (eDockSideFL == DOCKSIDE_TOP)? nTop + nFuncListHeight: nTop, nMiniMapWidth, (eDockSideFL == DOCKSIDE_TOP || eDockSideFL == DOCKSIDE_BOTTOM)? nHeight - nFuncListHeight: nHeight, TRUE ); - GetMiniMap().SplitBoxOnOff( FALSE, FALSE, bMiniMapSizeBox ); + m_cMiniMapView.SplitBoxOnOff( FALSE, FALSE, bMiniMapSizeBox ); } ::MoveWindow( @@ -4312,7 +4307,7 @@ void CEditWnd::Views_DeleteCompatibleBitmap() GetView(i).DeleteCompatibleBitmap(); } } - GetMiniMap().DeleteCompatibleBitmap(); + m_cMiniMapView.DeleteCompatibleBitmap(); } LRESULT CEditWnd::Views_DispatchEvent(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) @@ -4377,7 +4372,7 @@ void CEditWnd::InitAllViews() GetView(i).GetCaret().MoveCursor( CLayoutPoint(0, 0), true ); GetView(i).GetCaret().m_nCaretPosX_Prev = CLayoutInt(0); } - GetMiniMap().OnChangeSetting(); + m_cMiniMapView.OnChangeSetting(); } void CEditWnd::Views_RedrawAll() @@ -4388,7 +4383,7 @@ void CEditWnd::Views_RedrawAll() GetView(v).RedrawAll(); } } - GetMiniMap().RedrawAll(); + m_cMiniMapView.RedrawAll(); //アクティブを再描画 GetActiveView().RedrawAll(); } @@ -4400,7 +4395,7 @@ void CEditWnd::Views_Redraw() if( m_nActivePaneIndex != v ) GetView(v).Redraw(); } - GetMiniMap().Redraw(); + m_cMiniMapView.Redraw(); //アクティブを再描画 GetActiveView().Redraw(); } @@ -4475,7 +4470,7 @@ bool CEditWnd::SetDrawSwitchOfAllViews( bool bDraw ) for( i = 0; i < GetAllViewCount(); i++ ){ GetView(i).SetDrawSwitch( bDraw ); } - GetMiniMap().SetDrawSwitch( bDraw ); + m_cMiniMapView.SetDrawSwitch( bDraw ); return bDrawSwitchOld; } @@ -4503,8 +4498,8 @@ void CEditWnd::RedrawAllViews( CEditView* pcViewExclude ) pcView->AdjustScrollBars(); } } - GetMiniMap().Redraw(); - GetMiniMap().AdjustScrollBars(); + m_cMiniMapView.Redraw(); + m_cMiniMapView.AdjustScrollBars(); } void CEditWnd::Views_DisableSelectArea(bool bRedraw) @@ -4581,8 +4576,8 @@ BOOL CEditWnd::UpdateTextWrap( void ) for( int i = 0; i < GetAllViewCount(); i++ ){ ::UpdateWindow( GetView(i).GetHwnd() ); } - if( GetMiniMap().GetHwnd() ){ - ::UpdateWindow( GetMiniMap().GetHwnd() ); + if( m_cMiniMapView.GetHwnd() ){ + ::UpdateWindow( m_cMiniMapView.GetHwnd() ); } } return bWrap; // 画面更新=折り返し変更 @@ -4629,9 +4624,9 @@ void CEditWnd::ChangeLayoutParam( bool bShowProgress, CKetaXInt nTabSize, int nT GetView(i).AdjustScrollBars(); // 2008.06.18 ryoji } } - if( GetMiniMap().GetHwnd() ){ - InvalidateRect( GetMiniMap().GetHwnd(), NULL, TRUE ); - GetMiniMap().AdjustScrollBars(); + if( m_cMiniMapView.GetHwnd() ){ + InvalidateRect( m_cMiniMapView.GetHwnd(), NULL, TRUE ); + m_cMiniMapView.AdjustScrollBars(); } GetActiveView().GetCaret().ShowCaretPosInfo(); // 2009.07.25 ryoji diff --git a/sakura_core/window/CEditWnd.h b/sakura_core/window/CEditWnd.h index 5438b9cde8..72f7e91ec6 100644 --- a/sakura_core/window/CEditWnd.h +++ b/sakura_core/window/CEditWnd.h @@ -64,6 +64,7 @@ #include "doc/CDocListener.h" #include "uiparts/CMenuDrawer.h" #include "view/CViewFont.h" +#include "view/CMiniMapView.h" static const int MENUBAR_MESSAGE_MAX_LEN = 30; @@ -275,7 +276,7 @@ class CEditWnd CEditView& GetActiveView() { return *m_pcEditView; } const CEditView& GetView(int n) const { return *m_pcEditViewArr[n]; } CEditView& GetView(int n) { return *m_pcEditViewArr[n]; } - CEditView& GetMiniMap() { return *m_pcEditViewMiniMap; } + CMiniMapView& GetMiniMap( void ) { return m_cMiniMapView; } bool IsEnablePane(int n) const { return 0 <= n && n < m_nEditViewCount; } int GetAllViewCount() const { return m_nEditViewCount; } @@ -379,7 +380,7 @@ class CEditWnd CEditDoc* m_pcEditDoc; CEditView* m_pcEditViewArr[4]; //!< ビュー CEditView* m_pcEditView; //!< 有効なビュー - CEditView* m_pcEditViewMiniMap; //!< ミニマップ + CMiniMapView m_cMiniMapView; //!< ミニマップ int m_nActivePaneIndex; //!< 有効なビューのindex int m_nEditViewCount; //!< 有効なビューの数 const int m_nEditViewMaxCount;//!< ビューの最大数=4 From 8212d55c39b6dc9c1f7b96e1d989567dcaa81780 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sun, 2 Jan 2022 10:22:54 +0900 Subject: [PATCH 0868/1024] =?UTF-8?q?=E3=83=80=E3=82=A4=E3=82=A2=E3=83=AD?= =?UTF-8?q?=E3=82=B0=E3=81=AE=E4=BD=8D=E7=BD=AE=E3=81=A8=E3=82=B5=E3=82=A4?= =?UTF-8?q?=E3=82=BA=E3=82=92=E8=A8=98=E6=86=B6=E3=81=99=E3=82=8B=E5=87=A6?= =?UTF-8?q?=E7=90=86=E3=82=92=E8=A3=9C=E5=AE=8C=E5=80=99=E8=A3=9C=E3=83=80?= =?UTF-8?q?=E3=82=A4=E3=82=A2=E3=83=AD=E3=82=B0=E3=81=AB=E9=99=90=E3=81=A3?= =?UTF-8?q?=E3=81=A6=E5=BE=A9=E5=85=83=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CHokanMgr.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sakura_core/CHokanMgr.cpp b/sakura_core/CHokanMgr.cpp index ac271a81e1..e361aa997d 100644 --- a/sakura_core/CHokanMgr.cpp +++ b/sakura_core/CHokanMgr.cpp @@ -483,6 +483,12 @@ BOOL CHokanMgr::OnSize( WPARAM wParam, LPARAM lParam ) POINT po; RECT rcDlg; + ::GetWindowRect(GetHwnd(), &rcDlg); + m_xPos = rcDlg.left; + m_xPos = rcDlg.top; + m_nWidth = rcDlg.right - rcDlg.left; + m_nHeight = rcDlg.bottom - rcDlg.top; + ::GetClientRect( GetHwnd(), &rcDlg ); nWidth = rcDlg.right - rcDlg.left; // width of client area nHeight = rcDlg.bottom - rcDlg.top; // height of client area From 62d06add280849ed77b4636a024fac8083d8d8ab Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sun, 2 Jan 2022 10:25:37 +0900 Subject: [PATCH 0869/1024] =?UTF-8?q?=E4=BC=BC=E9=80=9A=E3=81=A3=E3=81=9F?= =?UTF-8?q?=E5=A4=89=E6=95=B0=E5=90=8D=E3=82=92=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CHokanMgr.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/sakura_core/CHokanMgr.cpp b/sakura_core/CHokanMgr.cpp index e361aa997d..5056137f0f 100644 --- a/sakura_core/CHokanMgr.cpp +++ b/sakura_core/CHokanMgr.cpp @@ -475,8 +475,6 @@ BOOL CHokanMgr::OnSize( WPARAM wParam, LPARAM lParam ) IDC_LIST_WORDS }; int nControls = _countof( Controls ); - int nWidth; - int nHeight; int i; RECT rc; HWND hwndCtrl; @@ -490,8 +488,8 @@ BOOL CHokanMgr::OnSize( WPARAM wParam, LPARAM lParam ) m_nHeight = rcDlg.bottom - rcDlg.top; ::GetClientRect( GetHwnd(), &rcDlg ); - nWidth = rcDlg.right - rcDlg.left; // width of client area - nHeight = rcDlg.bottom - rcDlg.top; // height of client area + int nClientWidth = rcDlg.right - rcDlg.left; // width of client area + int nClientHeight = rcDlg.bottom - rcDlg.top; // height of client area // 2001/06/18 Start by asa-o: サイズ変更後の位置を保存 m_poWin.x = rcDlg.left - 4; @@ -518,8 +516,8 @@ BOOL CHokanMgr::OnSize( WPARAM wParam, LPARAM lParam ) NULL, rc.left, rc.top, - nWidth - rc.left * 2, - nHeight - rc.top * 2/* - 20*/, + nClientWidth - rc.left * 2, + nClientHeight - rc.top * 2/* - 20*/, SWP_NOOWNERZORDER | SWP_NOZORDER ); } From c8996484bb9d77455951610116e7c722f28eeb40 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sun, 2 Jan 2022 10:27:05 +0900 Subject: [PATCH 0870/1024] =?UTF-8?q?=E3=83=AA=E3=82=B9=E3=83=88=E3=83=9C?= =?UTF-8?q?=E3=83=83=E3=82=AF=E3=82=B9=E3=81=8B=E3=82=89=E3=81=AE=E3=83=86?= =?UTF-8?q?=E3=82=AD=E3=82=B9=E3=83=88=E5=8F=96=E5=BE=97=E5=87=A6=E7=90=86?= =?UTF-8?q?=E3=81=A7=E5=8F=96=E3=82=8A=E3=81=93=E3=81=BC=E3=81=97=E3=81=8C?= =?UTF-8?q?=E7=94=9F=E3=81=98=E3=81=A6=E3=81=84=E3=82=8B=E3=81=AE=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/apiwrap/StdControl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/apiwrap/StdControl.cpp b/sakura_core/apiwrap/StdControl.cpp index 9fd2546770..e9a824351c 100644 --- a/sakura_core/apiwrap/StdControl.cpp +++ b/sakura_core/apiwrap/StdControl.cpp @@ -108,7 +108,7 @@ namespace ApiWrap{ } // アイテムテキストを設定するのに必要なバッファを確保する - strText.resize( cchRequired ); + strText.resize(cchRequired + 1); // ListBox_GetText() はコピーした文字数を返す。 const int actualCopied = ListBox_GetText( hList, nIndex, strText.data() ); From 978a9a5e26d92b1cf17cb521a4ec57adb8419f34 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sun, 2 Jan 2022 10:28:04 +0900 Subject: [PATCH 0871/1024] =?UTF-8?q?ApiWrap::List=5FGetText()=E3=81=AE?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-StdControl.cpp | 32 +++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/tests/unittests/test-StdControl.cpp b/tests/unittests/test-StdControl.cpp index 16045afae0..b2ec2eafb4 100644 --- a/tests/unittests/test-StdControl.cpp +++ b/tests/unittests/test-StdControl.cpp @@ -48,3 +48,35 @@ TEST(StdControl, Wnd_GetText2) DestroyWindow(hwnd); ASSERT_STREQ(s.c_str(), text); } + +TEST(StdControl, List_GetText) { + std::wstring text = L"0123456789abcdef"; + HWND list = ::CreateWindow(L"LISTBOX", nullptr, 0, 1, 1, 1, 1, nullptr, nullptr, nullptr, nullptr); + ApiWrap::List_AddString(list, text.c_str()); + ApiWrap::List_AddString(list, L""); + + std::wstring result1; + ASSERT_TRUE(ApiWrap::List_GetText(list, 0, result1)); + ASSERT_EQ(result1, text); + + result1.clear(); + ASSERT_TRUE(ApiWrap::List_GetText(list, 1, result1)); + ASSERT_TRUE(result1.empty()); + + ASSERT_FALSE(ApiWrap::List_GetText(list, 2, result1)); + + wchar_t result2[15]{}; + ASSERT_EQ(ApiWrap::List_GetText(list, 0, result2), LB_ERRSPACE); + + wchar_t result3[16]{}; + ASSERT_EQ(ApiWrap::List_GetText(list, 0, result3), LB_ERRSPACE); + + wchar_t result4[17]{}; + ASSERT_EQ(ApiWrap::List_GetText(list, 0, result4), text.length()); + ASSERT_STREQ(result4, text.c_str()); + + result4[0] = L'\0'; + ASSERT_EQ(ApiWrap::List_GetText(list, 2, result4), LB_ERR); + + ::DestroyWindow(list); +} From 7508075459d8339f4f875786333ea9020ca85034 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Mon, 3 Jan 2022 23:01:03 +0900 Subject: [PATCH 0872/1024] =?UTF-8?q?=E3=82=BF=E3=82=A4=E3=83=97=E3=83=9F?= =?UTF-8?q?=E3=82=B9=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/CHokanMgr.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/CHokanMgr.cpp b/sakura_core/CHokanMgr.cpp index 5056137f0f..5745f7f65e 100644 --- a/sakura_core/CHokanMgr.cpp +++ b/sakura_core/CHokanMgr.cpp @@ -483,7 +483,7 @@ BOOL CHokanMgr::OnSize( WPARAM wParam, LPARAM lParam ) ::GetWindowRect(GetHwnd(), &rcDlg); m_xPos = rcDlg.left; - m_xPos = rcDlg.top; + m_yPos = rcDlg.top; m_nWidth = rcDlg.right - rcDlg.left; m_nHeight = rcDlg.bottom - rcDlg.top; From b18d540b4099e57edfa360bdcb3b2ef7f73e7db4 Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Tue, 4 Jan 2022 16:21:20 +0900 Subject: [PATCH 0873/1024] =?UTF-8?q?=E3=83=88=E3=83=AA=E3=83=97=E3=83=AB?= =?UTF-8?q?=E3=82=AF=E3=83=AA=E3=83=83=E3=82=AF=E6=99=82=E3=81=AB=E6=AC=A1?= =?UTF-8?q?=E3=81=AE=E8=A1=8C=E3=81=AE=E5=85=88=E9=A0=AD=E3=81=ABURL?= =?UTF-8?q?=E3=81=8C=E3=81=82=E3=82=8B=E3=81=A8=E3=81=9D=E3=82=8C=E3=81=8C?= =?UTF-8?q?=E9=81=B8=E6=8A=9E=E3=81=95=E3=82=8C=E3=81=A6=E3=81=97=E3=81=BE?= =?UTF-8?q?=E3=81=86=E7=8F=BE=E8=B1=A1=E3=81=8C=E8=B5=B7=E3=81=8D=E3=81=AA?= =?UTF-8?q?=E3=81=84=E3=82=88=E3=81=86=E3=81=AB=E5=AF=BE=E7=AD=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CEditView_Mouse.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/sakura_core/view/CEditView_Mouse.cpp b/sakura_core/view/CEditView_Mouse.cpp index 661cf41ecf..2ee3fc85cd 100644 --- a/sakura_core/view/CEditView_Mouse.cpp +++ b/sakura_core/view/CEditView_Mouse.cpp @@ -289,6 +289,7 @@ normal_action:; GetSelectionInfo().BeginSelectArea(); // 現在のカーソル位置から選択を開始する GetSelectionInfo().m_bBeginLineSelect = false; // 行単位選択中 OFF } + return; }else /* 選択開始処理 */ /* SHIFTキーが押されていたか */ From 53846169b50c696a837a2a2744f85bfa91bdd7dd Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Tue, 4 Jan 2022 17:26:50 +0900 Subject: [PATCH 0874/1024] =?UTF-8?q?=E3=82=AB=E3=83=BC=E3=82=BD=E3=83=AB?= =?UTF-8?q?=E5=89=8D=E3=82=92=E5=89=8A=E9=99=A4=E3=81=99=E3=82=8B=E5=87=A6?= =?UTF-8?q?=E7=90=86=20CViewCommander::Command=5FDELETE=5FBACK=20=E3=81=A7?= =?UTF-8?q?=20CDocEditor::m=5FnOpeBlkRedawCount=20=E3=82=92=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E3=82=AF=E3=83=AA=E3=83=A1=E3=83=B3=E3=83=88=E3=81=99?= =?UTF-8?q?=E3=82=8B=E5=87=A6=E7=90=86=E3=82=92=E8=BF=BD=E5=8A=A0=20?= =?UTF-8?q?=E3=82=AD=E3=83=A3=E3=83=AC=E3=83=83=E3=83=88=E7=A7=BB=E5=8B=95?= =?UTF-8?q?=E3=81=AE=20CMoveCaretOpe=20=E8=BF=BD=E5=8A=A0=E3=81=A7?= =?UTF-8?q?=E3=81=AF=E5=86=8D=E6=8F=8F=E7=94=BB=E3=81=AF=E5=BF=85=E8=A6=81?= =?UTF-8?q?=E7=84=A1=E3=81=84=E3=81=AF=E3=81=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/cmd/CViewCommander_Edit.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/sakura_core/cmd/CViewCommander_Edit.cpp b/sakura_core/cmd/CViewCommander_Edit.cpp index fbe2b8cf31..6af3767297 100644 --- a/sakura_core/cmd/CViewCommander_Edit.cpp +++ b/sakura_core/cmd/CViewCommander_Edit.cpp @@ -857,6 +857,7 @@ void CViewCommander::Command_DELETE_BACK( void ) GetCaret().GetCaretLogicPos() ) ); + GetDocument()->m_cDocEditor.m_nOpeBlkRedawCount++; } m_pCommanderView->DeleteData( true ); } From 8a043b30277b5e10b1475e0648fe888f5cf67816 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Wed, 5 Jan 2022 00:37:49 +0900 Subject: [PATCH 0875/1024] =?UTF-8?q?.vs=E3=83=87=E3=82=A3=E3=83=AC?= =?UTF-8?q?=E3=82=AF=E3=83=88=E3=83=AA=E3=82=92=E9=99=A4=E5=A4=96=E6=8C=87?= =?UTF-8?q?=E5=AE=9A=E3=81=AB=E5=8A=A0=E3=81=88=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/ChmSourceConverter/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/ChmSourceConverter/.gitignore b/tools/ChmSourceConverter/.gitignore index 1f1945e50e..bc5a1fc989 100644 --- a/tools/ChmSourceConverter/.gitignore +++ b/tools/ChmSourceConverter/.gitignore @@ -2,3 +2,4 @@ **/obj **/packages **/TestResults +/.vs From dd7d091a56ea7cacf610b8bc2314030fb138c196 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sun, 14 Nov 2021 16:00:01 +0900 Subject: [PATCH 0876/1024] =?UTF-8?q?ChmSourceConverter=E3=81=AE=E3=82=BF?= =?UTF-8?q?=E3=83=BC=E3=82=B2=E3=83=83=E3=83=88=E3=82=92=E3=80=8C.NET=20Fr?= =?UTF-8?q?amework=204.7.2=E3=80=8D=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ChmSourceConverter.Test.csproj | 3 ++- .../ChmSourceConverter/App.config | 13 ++++++------- .../ChmSourceConverter/ChmSourceConverter.csproj | 3 ++- .../Properties/Settings.Designer.cs | 10 +++++----- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/tools/ChmSourceConverter/ChmSourceConverter.Test/ChmSourceConverter.Test.csproj b/tools/ChmSourceConverter/ChmSourceConverter.Test/ChmSourceConverter.Test.csproj index 49a63cc716..a1bdb76456 100644 --- a/tools/ChmSourceConverter/ChmSourceConverter.Test/ChmSourceConverter.Test.csproj +++ b/tools/ChmSourceConverter/ChmSourceConverter.Test/ChmSourceConverter.Test.csproj @@ -10,7 +10,7 @@ Properties ChmSourceConverter ChmSourceConverter.Test - v4.6.1 + v4.7.2 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 15.0 @@ -20,6 +20,7 @@ UnitTest + true diff --git a/tools/ChmSourceConverter/ChmSourceConverter/App.config b/tools/ChmSourceConverter/ChmSourceConverter/App.config index b382b6cb62..8af32f6bf8 100644 --- a/tools/ChmSourceConverter/ChmSourceConverter/App.config +++ b/tools/ChmSourceConverter/ChmSourceConverter/App.config @@ -1,19 +1,18 @@ - + - -

                    + +
                    - + - + .html .css .js @@ -40,4 +39,4 @@ - \ No newline at end of file + diff --git a/tools/ChmSourceConverter/ChmSourceConverter/ChmSourceConverter.csproj b/tools/ChmSourceConverter/ChmSourceConverter/ChmSourceConverter.csproj index 77dc98c9c1..8fa227a8fe 100644 --- a/tools/ChmSourceConverter/ChmSourceConverter/ChmSourceConverter.csproj +++ b/tools/ChmSourceConverter/ChmSourceConverter/ChmSourceConverter.csproj @@ -8,10 +8,11 @@ Exe ChmSourceConverter ChmSourceConverter - v4.6.1 + v4.7.2 512 true true + AnyCPU diff --git a/tools/ChmSourceConverter/ChmSourceConverter/Properties/Settings.Designer.cs b/tools/ChmSourceConverter/ChmSourceConverter/Properties/Settings.Designer.cs index 2415c06cba..ab4300f6a0 100644 --- a/tools/ChmSourceConverter/ChmSourceConverter/Properties/Settings.Designer.cs +++ b/tools/ChmSourceConverter/ChmSourceConverter/Properties/Settings.Designer.cs @@ -1,10 +1,10 @@ //------------------------------------------------------------------------------ // -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 +// このコードはツールによって生成されました。 +// ランタイム バージョン:4.0.30319.42000 // -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. +// このファイルへの変更は、以下の状況下で不正な動作の原因になったり、 +// コードが再生成されるときに損失したりします。 // //------------------------------------------------------------------------------ @@ -12,7 +12,7 @@ namespace ChmSourceConverter.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.10.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); From 2c1f78b7a3efa7851f1bc0433f175465f069f8bd Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sun, 14 Nov 2021 16:05:26 +0900 Subject: [PATCH 0877/1024] =?UTF-8?q?ToolBarTools=E3=81=AE=E3=82=BF?= =?UTF-8?q?=E3=83=BC=E3=82=B2=E3=83=83=E3=83=88=E3=82=92=E3=80=8C.NET=20Fr?= =?UTF-8?q?amework=204.7.2=E3=80=8D=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ToolBarImageCommon/ToolBarImageCommon.csproj | 3 ++- tools/ToolBarTools/ToolBarImageMuxer/App.config | 6 +++--- .../ToolBarTools/ToolBarImageMuxer/ToolBarImageMuxer.csproj | 3 ++- tools/ToolBarTools/ToolBarImageSplitter/App.config | 6 +++--- .../ToolBarImageSplitter/ToolBarImageSplitter.csproj | 3 ++- 5 files changed, 12 insertions(+), 9 deletions(-) diff --git a/tools/ToolBarTools/ToolBarImageCommon/ToolBarImageCommon.csproj b/tools/ToolBarTools/ToolBarImageCommon/ToolBarImageCommon.csproj index ab8e259e8f..9dcdfbc28f 100644 --- a/tools/ToolBarTools/ToolBarImageCommon/ToolBarImageCommon.csproj +++ b/tools/ToolBarTools/ToolBarImageCommon/ToolBarImageCommon.csproj @@ -9,9 +9,10 @@ Properties ToolBarImageCommon ToolBarImageCommon - v4.6.1 + v4.7.2 512 true + true diff --git a/tools/ToolBarTools/ToolBarImageMuxer/App.config b/tools/ToolBarTools/ToolBarImageMuxer/App.config index 731f6de6c2..ecdcf8a54d 100644 --- a/tools/ToolBarTools/ToolBarImageMuxer/App.config +++ b/tools/ToolBarTools/ToolBarImageMuxer/App.config @@ -1,6 +1,6 @@ - + - + - \ No newline at end of file + diff --git a/tools/ToolBarTools/ToolBarImageMuxer/ToolBarImageMuxer.csproj b/tools/ToolBarTools/ToolBarImageMuxer/ToolBarImageMuxer.csproj index 5ca961c49f..596356e21a 100644 --- a/tools/ToolBarTools/ToolBarImageMuxer/ToolBarImageMuxer.csproj +++ b/tools/ToolBarTools/ToolBarImageMuxer/ToolBarImageMuxer.csproj @@ -8,10 +8,11 @@ Exe ToolBarImageMuxer ToolBarImageMuxer - v4.6.1 + v4.7.2 512 true true + AnyCPU diff --git a/tools/ToolBarTools/ToolBarImageSplitter/App.config b/tools/ToolBarTools/ToolBarImageSplitter/App.config index 731f6de6c2..ecdcf8a54d 100644 --- a/tools/ToolBarTools/ToolBarImageSplitter/App.config +++ b/tools/ToolBarTools/ToolBarImageSplitter/App.config @@ -1,6 +1,6 @@ - + - + - \ No newline at end of file + diff --git a/tools/ToolBarTools/ToolBarImageSplitter/ToolBarImageSplitter.csproj b/tools/ToolBarTools/ToolBarImageSplitter/ToolBarImageSplitter.csproj index 43fcf71dff..985c820dc5 100644 --- a/tools/ToolBarTools/ToolBarImageSplitter/ToolBarImageSplitter.csproj +++ b/tools/ToolBarTools/ToolBarImageSplitter/ToolBarImageSplitter.csproj @@ -8,10 +8,11 @@ Exe ToolBarImageSplitter ToolBarImageSplitter - v4.6.1 + v4.7.2 512 true true + AnyCPU From 992d0ea221380060688ed68c0bed78affc95cb01 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sun, 14 Nov 2021 16:18:46 +0900 Subject: [PATCH 0878/1024] =?UTF-8?q?.vsconfig=E3=83=95=E3=82=A1=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E3=81=AE=E5=86=85=E5=AE=B9=E3=82=92=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/ChmSourceConverter/.vsconfig | 5 +---- tools/ToolBarTools/.vsconfig | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/tools/ChmSourceConverter/.vsconfig b/tools/ChmSourceConverter/.vsconfig index 41cb3ceacc..e1fc733bc8 100644 --- a/tools/ChmSourceConverter/.vsconfig +++ b/tools/ChmSourceConverter/.vsconfig @@ -1,10 +1,7 @@ { "version": "1.0", "components": [ - "Microsoft.Net.ComponentGroup.DevelopmentPrerequisites", "Microsoft.VisualStudio.Workload.ManagedDesktop", - "Microsoft.VisualStudio.Component.Roslyn.Compiler", - "Microsoft.VisualStudio.Component.Roslyn.LanguageServices", - "Microsoft.Net.Component.4.6.1.TargetingPack" + "Microsoft.Net.Component.4.7.2.TargetingPack" ] } \ No newline at end of file diff --git a/tools/ToolBarTools/.vsconfig b/tools/ToolBarTools/.vsconfig index 41cb3ceacc..e1fc733bc8 100644 --- a/tools/ToolBarTools/.vsconfig +++ b/tools/ToolBarTools/.vsconfig @@ -1,10 +1,7 @@ { "version": "1.0", "components": [ - "Microsoft.Net.ComponentGroup.DevelopmentPrerequisites", "Microsoft.VisualStudio.Workload.ManagedDesktop", - "Microsoft.VisualStudio.Component.Roslyn.Compiler", - "Microsoft.VisualStudio.Component.Roslyn.LanguageServices", - "Microsoft.Net.Component.4.6.1.TargetingPack" + "Microsoft.Net.Component.4.7.2.TargetingPack" ] } \ No newline at end of file From 7db1206e1d8a7053b957e2a1d9914b4e02efc815 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 9 Jan 2022 20:37:22 +0900 Subject: [PATCH 0879/1024] =?UTF-8?q?=E4=B8=8D=E8=A6=81=E3=81=AA=E3=83=90?= =?UTF-8?q?=E3=83=83=E3=83=81=E5=A4=89=E6=95=B0=E3=82=92=E5=89=8A=E9=99=A4?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/compiletests.run.cmd | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/compiletests.run.cmd b/tests/compiletests.run.cmd index 013df2ee9b..decce3fa58 100644 --- a/tests/compiletests.run.cmd +++ b/tests/compiletests.run.cmd @@ -5,8 +5,6 @@ set SOURCE_DIR=%~dp0compiletests :: find generic tools if not defined CMD_VSWHERE call %~dp0..\tools\find-tools.bat -set /a NUM_VSVERSION_NEXT=NUM_VSVERSION + 1 - if not exist "%CMD_CMAKE%" ( echo "no cmake found." exit /b 1 From 8ed5587e4fbdbc2a21202a8baca2d699c55f3066 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 10 Jan 2022 16:15:51 +0900 Subject: [PATCH 0880/1024] =?UTF-8?q?=E3=83=9E=E3=83=AB=E3=83=81vs?= =?UTF-8?q?=E6=A7=8B=E6=88=90=E5=90=91=E3=81=91=E3=81=AE=E7=92=B0=E5=A2=83?= =?UTF-8?q?=E5=A4=89=E6=95=B0=E3=82=92=E5=89=8A=E9=99=A4=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 標準で利用できるVMImageにはマルチvs構成のものがないので、 Azure Pilelinesのビルド設定から環境変数を削除します。 --- azure-pipelines.yml | 2 -- ci/azure-pipelines/template.job.build-unittest.yml | 4 ---- 2 files changed, 6 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index fdce3c6ab8..fb432eafff 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -97,7 +97,6 @@ jobs: name: VS2017 vmImage: 'VS2017-Win2016' displayName: VS2017 - ARG_VSVERSION: 15 # サクラエディタのビルドを行う JOB (VS2019) # * サクラエディタ本体 @@ -111,7 +110,6 @@ jobs: name: VS2019 vmImage: 'windows-2019' displayName: VS2019 - ARG_VSVERSION: 16 # サクラエディタのビルドを行う JOB(MinGW) # * サクラエディタ本体 diff --git a/ci/azure-pipelines/template.job.build-unittest.yml b/ci/azure-pipelines/template.job.build-unittest.yml index a4f410e0ed..a091c06d54 100644 --- a/ci/azure-pipelines/template.job.build-unittest.yml +++ b/ci/azure-pipelines/template.job.build-unittest.yml @@ -26,10 +26,6 @@ jobs: BuildPlatform: 'x64' Configuration: 'Release' - # https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch - variables: - ARG_VSVERSION: ${{ parameters.ARG_VSVERSION }} - steps: # show environmental variables for debug. - script: set From 4c725422bd037115bf3333ea5985396e11932380 Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Mon, 10 Jan 2022 21:23:17 +0900 Subject: [PATCH 0881/1024] Checkout batch files with CRLF Using LF in batch files may cause unexpected behavior. Always use CRLF. --- .gitattributes | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitattributes b/.gitattributes index 3c472d19d2..acc0d35fef 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,7 +1,7 @@ *.kwd text *.khp text *.hkn text -*.bat text +*.bat text eol=crlf Makefile text eol=lf sakura_rc.h text eol=crlf *.rc text working-tree-encoding=utf-16le-bom eol=crlf From 1014d56774589e44519d805b81d16430ef8cedc5 Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Mon, 10 Jan 2022 22:20:33 +0900 Subject: [PATCH 0882/1024] =?UTF-8?q?=E3=83=9F=E3=83=8B=E3=83=9E=E3=83=83?= =?UTF-8?q?=E3=83=97=E3=81=AE=E3=82=A6=E3=82=A3=E3=83=B3=E3=83=89=E3=82=A6?= =?UTF-8?q?=E6=A8=AA=E5=B9=85=E3=81=A8=E3=83=95=E3=82=A9=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=82=B5=E3=82=A4=E3=82=BA=E3=82=92=E8=A1=A8=E7=A4=BA=E3=82=B9?= =?UTF-8?q?=E3=82=B1=E3=83=BC=E3=83=AB=E3=81=AB=E5=90=88=E3=82=8F=E3=81=9B?= =?UTF-8?q?=E3=81=A6=E6=8B=A1=E5=A4=A7=E3=81=99=E3=82=8B=E5=87=A6=E7=90=86?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0=20=E3=83=9F=E3=83=8B=E3=83=9E?= =?UTF-8?q?=E3=83=83=E3=83=97=E3=81=AE=E3=83=95=E3=82=A9=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=82=B5=E3=82=A4=E3=82=BA=E3=81=AE=E3=83=87=E3=83=95=E3=82=A9?= =?UTF-8?q?=E3=83=AB=E3=83=88=E5=80=A4=E3=82=92=20-1=20=E3=81=8B=E3=82=89?= =?UTF-8?q?=20-2=20=E3=81=AB=E5=A4=89=E6=9B=B4=20=E3=83=AB=E3=83=BC?= =?UTF-8?q?=E3=83=A9=E3=83=BC=E3=81=AE=E9=AB=98=E3=81=95=E3=80=81=E3=83=AB?= =?UTF-8?q?=E3=83=BC=E3=83=A9=E3=83=BC=E3=81=A8=E3=83=86=E3=82=AD=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=81=AE=E9=9A=99=E9=96=93=E3=80=81=E8=A1=8C=E7=95=AA?= =?UTF-8?q?=E5=8F=B7=E3=81=A8=E3=83=86=E3=82=AD=E3=82=B9=E3=83=88=E3=81=AE?= =?UTF-8?q?=E9=9A=99=E9=96=93=E3=82=92=E8=A1=A8=E7=A4=BA=E3=82=B9=E3=82=B1?= =?UTF-8?q?=E3=83=BC=E3=83=AB=E3=81=AB=E5=90=88=E3=82=8F=E3=81=9B=E3=81=A6?= =?UTF-8?q?=E6=8B=A1=E5=A4=A7=E3=81=99=E3=82=8B=E5=87=A6=E7=90=86=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=20=E6=96=87=E5=AD=97=E3=81=AE=E9=96=93?= =?UTF-8?q?=E9=9A=94=E3=81=A8=E8=A1=8C=E3=81=AE=E9=96=93=E9=9A=94=E3=82=92?= =?UTF-8?q?=E8=A1=A8=E7=A4=BA=E3=82=B9=E3=82=B1=E3=83=BC=E3=83=AB=E3=81=AB?= =?UTF-8?q?=E5=90=88=E3=82=8F=E3=81=9B=E3=81=A6=E6=8B=A1=E5=A4=A7=E3=81=99?= =?UTF-8?q?=E3=82=8B=E5=87=A6=E7=90=86=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/doc/layout/CLayoutMgr.cpp | 7 ++++--- sakura_core/env/CShareData.cpp | 2 +- sakura_core/view/CEditView.cpp | 16 ++++++++-------- sakura_core/view/CRuler.cpp | 3 ++- sakura_core/view/CTextArea.cpp | 5 +++-- sakura_core/view/CViewFont.cpp | 3 ++- sakura_core/view/figures/CFigure_ZenSpace.cpp | 3 ++- sakura_core/window/CEditWnd.cpp | 2 +- 8 files changed, 23 insertions(+), 18 deletions(-) diff --git a/sakura_core/doc/layout/CLayoutMgr.cpp b/sakura_core/doc/layout/CLayoutMgr.cpp index 47b6e7c82d..07fe1c4c00 100644 --- a/sakura_core/doc/layout/CLayoutMgr.cpp +++ b/sakura_core/doc/layout/CLayoutMgr.cpp @@ -34,6 +34,7 @@ #include "debug/CRunningTimer.h" #include "charset/charcode.h" #include "config/app_constants.h" +#include "util/window.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 生成と破棄 // @@ -137,7 +138,7 @@ void CLayoutMgr::SetLayoutInfo( if (nTsvModeOld != nTsvMode && nTsvMode != TSV_MODE_NONE) { m_tsvInfo.CalcTabLength(this->m_pcDocLineMgr); } - m_nSpacing = refType.m_nColumnSpace; + m_nSpacing = DpiScaleX(refType.m_nColumnSpace); if( nCharLayoutXPerKeta == -1 ) { // Viewが持ってるフォント情報は古い、しょうがないので自分で作る @@ -145,8 +146,8 @@ void CLayoutMgr::SetLayoutInfo( HDC hdc = ::GetDC(hwnd); CViewFont viewFont(pLogfont); CTextMetrics temp; - temp.Update(hdc, viewFont.GetFontHan(), refType.m_nLineSpace, refType.m_nColumnSpace); - m_nCharLayoutXPerKeta = temp.GetHankakuWidth() + m_pTypeConfig->m_nColumnSpace; + temp.Update(hdc, viewFont.GetFontHan(), DpiScaleY(refType.m_nLineSpace), DpiScaleX(refType.m_nColumnSpace)); + m_nCharLayoutXPerKeta = temp.GetHankakuWidth() + DpiScaleX(m_pTypeConfig->m_nColumnSpace); ::ReleaseDC(hwnd, hdc); }else{ m_nCharLayoutXPerKeta = nCharLayoutXPerKeta; diff --git a/sakura_core/env/CShareData.cpp b/sakura_core/env/CShareData.cpp index efa09572b0..87629e1109 100644 --- a/sakura_core/env/CShareData.cpp +++ b/sakura_core/env/CShareData.cpp @@ -272,7 +272,7 @@ bool CShareData::InitShareData() sWindow.m_bDispMiniMap = false; // ミニマップを表示する sWindow.m_nFUNCKEYWND_Place = 1; /* ファンクションキー表示位置/0:上 1:下 */ sWindow.m_nFUNCKEYWND_GroupNum = 4; // 2002/11/04 Moca ファンクションキーのグループボタン数 - sWindow.m_nMiniMapFontSize = -1; + sWindow.m_nMiniMapFontSize = -2; sWindow.m_nMiniMapQuality = NONANTIALIASED_QUALITY; sWindow.m_nMiniMapWidth = 150; diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index e55806fab1..a8d00a79e8 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -220,7 +220,7 @@ BOOL CEditView::Create( m_szComposition[0] = L'\0'; /* ルーラー表示 */ - GetTextArea().SetAreaTop(GetTextArea().GetAreaTop()+GetDllShareData().m_Common.m_sWindow.m_nRulerHeight); /* ルーラー高さ */ + GetTextArea().SetAreaTop(GetTextArea().GetAreaTop()+DpiScaleY(GetDllShareData().m_Common.m_sWindow.m_nRulerHeight)); /* ルーラー高さ */ GetRuler().SetRedrawFlag(); // ルーラー全体を描き直す時=true 2002.02.25 Add By KK m_hdcCompatDC = NULL; /* 再描画用コンパチブルDC */ m_hbmpCompatBMP = NULL; /* 再描画用メモリBMP */ @@ -274,13 +274,13 @@ BOOL CEditView::Create( m_cRegexKeyword = new CRegexKeyword( GetDllShareData().m_Common.m_sSearch.m_szRegexpLib ); //@@@ 2001.11.17 add MIK m_cRegexKeyword->RegexKeySetTypes(m_pTypeData); //@@@ 2001.11.17 add MIK - GetTextArea().SetTopYohaku( GetDllShareData().m_Common.m_sWindow.m_nRulerBottomSpace ); /* ルーラーとテキストの隙間 */ + GetTextArea().SetTopYohaku(DpiScaleY(GetDllShareData().m_Common.m_sWindow.m_nRulerBottomSpace)); /* ルーラーとテキストの隙間 */ GetTextArea().SetAreaTop( GetTextArea().GetTopYohaku() ); /* 表示域の上端座標 */ /* ルーラー表示 */ if( m_pTypeData->m_ColorInfoArr[COLORIDX_RULER].m_bDisp && !m_bMiniMap ){ - GetTextArea().SetAreaTop( GetTextArea().GetAreaTop() + GetDllShareData().m_Common.m_sWindow.m_nRulerHeight); /* ルーラー高さ */ + GetTextArea().SetAreaTop(GetTextArea().GetAreaTop() + DpiScaleY(GetDllShareData().m_Common.m_sWindow.m_nRulerHeight)); /* ルーラー高さ */ } - GetTextArea().SetLeftYohaku( GetDllShareData().m_Common.m_sWindow.m_nLineNumRightSpace ); + GetTextArea().SetLeftYohaku(DpiScaleX(GetDllShareData().m_Common.m_sWindow.m_nLineNumRightSpace)); /* ウィンドウクラスの登録 */ // Apr. 27, 2000 genta @@ -1121,7 +1121,7 @@ void CEditView::SetFont( void ) if( m_bMiniMap ){ GetTextMetrics().Update(hdc, GetFontset().GetFontHan(), 0, 0); }else{ - GetTextMetrics().Update(hdc, GetFontset().GetFontHan(), m_pTypeData->m_nLineSpace, m_pTypeData->m_nColumnSpace); + GetTextMetrics().Update(hdc, GetFontset().GetFontHan(), DpiScaleY(m_pTypeData->m_nLineSpace), DpiScaleX(m_pTypeData->m_nColumnSpace)); } ::ReleaseDC( GetHwnd(), hdc ); @@ -1690,7 +1690,7 @@ void CEditView::OnChangeSetting() } RECT rc; - GetTextArea().SetTopYohaku( GetDllShareData().m_Common.m_sWindow.m_nRulerBottomSpace ); /* ルーラーとテキストの隙間 */ + GetTextArea().SetTopYohaku(DpiScaleY(GetDllShareData().m_Common.m_sWindow.m_nRulerBottomSpace)); /* ルーラーとテキストの隙間 */ GetTextArea().SetAreaTop( GetTextArea().GetTopYohaku() ); /* 表示域の上端座標 */ // 文書種別更新 @@ -1698,9 +1698,9 @@ void CEditView::OnChangeSetting() /* ルーラー表示 */ if( m_pTypeData->m_ColorInfoArr[COLORIDX_RULER].m_bDisp && !m_bMiniMap ){ - GetTextArea().SetAreaTop(GetTextArea().GetAreaTop() + GetDllShareData().m_Common.m_sWindow.m_nRulerHeight); /* ルーラー高さ */ + GetTextArea().SetAreaTop(GetTextArea().GetAreaTop() + DpiScaleY(GetDllShareData().m_Common.m_sWindow.m_nRulerHeight)); /* ルーラー高さ */ } - GetTextArea().SetLeftYohaku( GetDllShareData().m_Common.m_sWindow.m_nLineNumRightSpace ); + GetTextArea().SetLeftYohaku(DpiScaleX(GetDllShareData().m_Common.m_sWindow.m_nLineNumRightSpace)); /* フォントの変更 */ SetFont(); diff --git a/sakura_core/view/CRuler.cpp b/sakura_core/view/CRuler.cpp index 8b8389b851..b565850514 100644 --- a/sakura_core/view/CRuler.cpp +++ b/sakura_core/view/CRuler.cpp @@ -28,6 +28,7 @@ #include "view/CEditView.h" #include "doc/CEditDoc.h" #include "types/CTypeSupport.h" +#include "util/window.h" CRuler::CRuler(const CEditView* pEditView, const CEditDoc* pEditDoc) : m_pEditView(pEditView) @@ -122,7 +123,7 @@ void CRuler::DrawRulerBg(CGraphics& gr) } if (m_hFont == NULL) { LOGFONT lf = {0}; - lf.lfHeight = 1 - pCommon->m_sWindow.m_nRulerHeight; // 2002/05/13 ai + lf.lfHeight = 1 - DpiScaleY(pCommon->m_sWindow.m_nRulerHeight); // 2002/05/13 ai lf.lfWidth = 0; lf.lfEscapement = 0; lf.lfOrientation = 0; diff --git a/sakura_core/view/CTextArea.cpp b/sakura_core/view/CTextArea.cpp index ac28afa8d9..ee88493d8a 100644 --- a/sakura_core/view/CTextArea.cpp +++ b/sakura_core/view/CTextArea.cpp @@ -31,6 +31,7 @@ #include "env/DLLSHAREDATA.h" #include "doc/CEditDoc.h" #include "config/app_constants.h" +#include "util/window.h" // 2014.07.26 katze //#define USE_LOG10 // この行のコメントを外すと行番号の最小桁数の計算にlog10()を用いる @@ -63,8 +64,8 @@ CTextArea::CTextArea(CEditView* pEditView) m_nViewRowNum = CLayoutInt(0); /* 表示域の行数 */ m_nViewTopLine = CLayoutInt(0); /* 表示域の一番上の行 */ m_nViewLeftCol = CLayoutInt(0); /* 表示域の一番左の桁 */ - SetTopYohaku( pShareData->m_Common.m_sWindow.m_nRulerBottomSpace ); /* ルーラーとテキストの隙間 */ - SetLeftYohaku( pShareData->m_Common.m_sWindow.m_nLineNumRightSpace ); + SetTopYohaku(DpiScaleY(pShareData->m_Common.m_sWindow.m_nRulerBottomSpace)); /* ルーラーとテキストの隙間 */ + SetLeftYohaku(DpiScaleX(pShareData->m_Common.m_sWindow.m_nLineNumRightSpace)); m_nViewAlignTop = GetTopYohaku(); /* 表示域の上端座標 */ } diff --git a/sakura_core/view/CViewFont.cpp b/sakura_core/view/CViewFont.cpp index a08facc633..f36e6d6dc9 100644 --- a/sakura_core/view/CViewFont.cpp +++ b/sakura_core/view/CViewFont.cpp @@ -27,13 +27,14 @@ #include "StdAfx.h" #include "CViewFont.h" #include "env/DLLSHAREDATA.h" +#include "util/window.h" /*! フォント作成 */ void CViewFont::CreateFonts( const LOGFONT *plf ) { LOGFONT lf; - int miniSize = GetDllShareData().m_Common.m_sWindow.m_nMiniMapFontSize; + int miniSize = ::DpiScaleX(GetDllShareData().m_Common.m_sWindow.m_nMiniMapFontSize); int quality = GetDllShareData().m_Common.m_sWindow.m_nMiniMapQuality; int outPrec = OUT_TT_ONLY_PRECIS; // FixedSys等でMiniMapのフォントが小さくならない修正 diff --git a/sakura_core/view/figures/CFigure_ZenSpace.cpp b/sakura_core/view/figures/CFigure_ZenSpace.cpp index 290768fe49..ee3dd34f3f 100644 --- a/sakura_core/view/figures/CFigure_ZenSpace.cpp +++ b/sakura_core/view/figures/CFigure_ZenSpace.cpp @@ -27,6 +27,7 @@ #include "CFigure_ZenSpace.h" #include "types/CTypeSupport.h" #include "apiwrap/StdApi.h" +#include "util/window.h" void Draw_ZenSpace( CGraphics& gr, const CMyRect& rc ); @@ -92,7 +93,7 @@ void CFigure_ZenSpace::DispSpace(CGraphics& gr, DispPos* pDispPos, CEditView* pc CMyRect rcZenSp; // 注:ベースライン無視 rcZenSp.SetPos(pDispPos->GetDrawPos().x, pDispPos->GetDrawPos().y); - rcZenSp.SetSize(dx[0]- pcView->m_pcEditDoc->m_cDocType.GetDocumentAttribute().m_nColumnSpace, + rcZenSp.SetSize(dx[0]- DpiScaleX(pcView->m_pcEditDoc->m_cDocType.GetDocumentAttribute().m_nColumnSpace), pcView->GetTextMetrics().GetHankakuHeight()); // 描画 diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index 475f90ff7e..9337854d86 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -3303,7 +3303,7 @@ LRESULT CEditWnd::OnSize2( WPARAM wParam, LPARAM lParam, bool bUpdateStatus ) // ミニマップ int nMiniMapWidth = 0; if( m_cMiniMapView.GetHwnd() ){ - nMiniMapWidth = GetDllShareData().m_Common.m_sWindow.m_nMiniMapWidth; + nMiniMapWidth = ::DpiScaleX(GetDllShareData().m_Common.m_sWindow.m_nMiniMapWidth); ::MoveWindow( m_cMiniMapView.GetHwnd(), (eDockSideFL == DOCKSIDE_RIGHT)? cx - nFuncListWidth - nMiniMapWidth: cx - nMiniMapWidth, (eDockSideFL == DOCKSIDE_TOP)? nTop + nFuncListHeight: nTop, From 93cf3f3eacfed6a4d0a2c30d5445b53b2599db3c Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Fri, 7 Jan 2022 13:03:57 +0900 Subject: [PATCH 0883/1024] =?UTF-8?q?"Visual=20Studio=202022"=E3=82=92?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E3=81=97=E3=81=9F=E3=83=93=E3=83=AB=E3=83=89?= =?UTF-8?q?=E3=81=AB=E5=AF=BE=E5=BF=9C=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/find-tools.bat | 4 ++++ vcx-props/vcxcompat.props | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/tools/find-tools.bat b/tools/find-tools.bat index f490f10e5b..b68b285987 100644 --- a/tools/find-tools.bat +++ b/tools/find-tools.bat @@ -167,6 +167,8 @@ exit /b set NUM_VSVERSION=15 ) else if "%ARG_VSVERSION%" == "2019" ( set NUM_VSVERSION=16 + ) else if "%ARG_VSVERSION%" == "2022" ( + set NUM_VSVERSION=17 ) else if "%ARG_VSVERSION%" == "latest" ( call :check_latest_installed_vsversion ) else ( @@ -185,6 +187,8 @@ exit /b set CMAKE_G_PARAM=Visual Studio 15 2017 ) else if "%NUM_VSVERSION%" == "16" ( set CMAKE_G_PARAM=Visual Studio 16 2019 + ) else if "%NUM_VSVERSION%" == "17" ( + set CMAKE_G_PARAM=Visual Studio 17 2022 ) else ( call :set_cmake_gparam_automatically ) diff --git a/vcx-props/vcxcompat.props b/vcx-props/vcxcompat.props index d83904fe00..1f8527903f 100644 --- a/vcx-props/vcxcompat.props +++ b/vcx-props/vcxcompat.props @@ -6,10 +6,16 @@ 10.0 + + 10.0 + v141 v142 + + v143 + From 85f88eb8fa67ab4c3ee858c5eb61d65ee4414fcc Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Fri, 14 Jan 2022 11:52:57 +0900 Subject: [PATCH 0884/1024] =?UTF-8?q?[AZP]=20=E3=82=B9=E3=82=AF=E3=83=AA?= =?UTF-8?q?=E3=83=97=E3=83=88=E3=81=AE=E3=82=B3=E3=83=B3=E3=83=91=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF=E3=81=A7=E5=88=A9?= =?UTF-8?q?=E7=94=A8=E3=81=99=E3=82=8BPython=E3=83=90=E3=83=BC=E3=82=B8?= =?UTF-8?q?=E3=83=A7=E3=83=B3=E3=82=92=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ci/azure-pipelines/template.job.python-check.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/ci/azure-pipelines/template.job.python-check.yml b/ci/azure-pipelines/template.job.python-check.yml index 6e19cb02cd..aceae8f641 100644 --- a/ci/azure-pipelines/template.job.python-check.yml +++ b/ci/azure-pipelines/template.job.python-check.yml @@ -22,10 +22,8 @@ jobs: strategy: maxParallel: 2 matrix: - python_2.7: - versionSpec: '2.7' - python_3.7: - versionSpec: '3.7' + python3: + versionSpec: '3.x' steps: # https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/tool/use-python-version?view=azure-devops From 5a45cc2068dd4cf96788ad063609a4de8ee962e3 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 16 Jan 2022 22:32:21 +0900 Subject: [PATCH 0885/1024] =?UTF-8?q?NUM=5FVSVERSION=E3=81=AE=E3=83=AD?= =?UTF-8?q?=E3=82=B0=E5=87=BA=E5=8A=9B=E3=82=92=E5=BE=A9=E6=B4=BB=E3=81=95?= =?UTF-8?q?=E3=81=9B=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/find-tools.bat | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/find-tools.bat b/tools/find-tools.bat index b68b285987..8b5f1c1bef 100644 --- a/tools/find-tools.bat +++ b/tools/find-tools.bat @@ -53,6 +53,7 @@ echo ^|- CMD_CMAKE=%CMD_CMAKE% echo ^|- CMD_NINJA=%CMD_NINJA% echo ^|- CMD_LEPROC=%CMD_LEPROC% echo ^|- CMD_PYTHON=%CMD_PYTHON% +echo ^|- NUM_VSVERSION=%NUM_VSVERSION% echo ^|- CMAKE_G_PARAM=%CMAKE_G_PARAM% endlocal ^ && set "CMD_GIT=%CMD_GIT%" ^ From 73d92e68c83068774825bfd0383a7975920d58fe Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Mon, 17 Jan 2022 00:09:21 +0900 Subject: [PATCH 0886/1024] =?UTF-8?q?[AZP]=20=E3=82=B8=E3=83=A7=E3=83=96?= =?UTF-8?q?=E3=82=92=E5=90=8C=E6=99=82=E3=81=AB=E5=AE=9F=E8=A1=8C=E3=81=A7?= =?UTF-8?q?=E3=81=8D=E3=82=8B=E4=B8=8A=E9=99=90=E3=81=AE=E8=A8=AD=E5=AE=9A?= =?UTF-8?q?=E3=82=92=E3=82=84=E3=82=81=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 当該ジョブの実行対象となるmatrixの数と同数以下であるため。 --- ci/azure-pipelines/template.job.python-check.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/ci/azure-pipelines/template.job.python-check.yml b/ci/azure-pipelines/template.job.python-check.yml index aceae8f641..547304d298 100644 --- a/ci/azure-pipelines/template.job.python-check.yml +++ b/ci/azure-pipelines/template.job.python-check.yml @@ -20,7 +20,6 @@ jobs: vmImage: ${{ parameters.vmImage }} strategy: - maxParallel: 2 matrix: python3: versionSpec: '3.x' From 9a321010e7db99e134226c16b08691b9e79530ee Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sun, 16 Jan 2022 22:42:21 +0900 Subject: [PATCH 0887/1024] =?UTF-8?q?MinGW=E3=83=93=E3=83=AB=E3=83=89?= =?UTF-8?q?=E3=81=A7=E5=BF=85=E8=A6=81=E3=81=AA=E3=83=93=E3=83=AB=E3=83=89?= =?UTF-8?q?=E3=83=84=E3=83=BC=E3=83=AB=E3=82=92=E6=98=8E=E7=A4=BA=E7=9A=84?= =?UTF-8?q?=E3=81=AB=E3=82=A4=E3=83=B3=E3=82=B9=E3=83=88=E3=83=BC=E3=83=AB?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ci/azure-pipelines/template.steps.install-mingw-w64-gcc.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/azure-pipelines/template.steps.install-mingw-w64-gcc.yml b/ci/azure-pipelines/template.steps.install-mingw-w64-gcc.yml index 021e73102f..60baa9127d 100644 --- a/ci/azure-pipelines/template.steps.install-mingw-w64-gcc.yml +++ b/ci/azure-pipelines/template.steps.install-mingw-w64-gcc.yml @@ -5,5 +5,5 @@ # なし ############################################################################################################# steps: - - script: echo nothing to do. - displayName: nothing to do + - script: C:\msys64\usr\bin\bash --login -c "pacman -S --noconfirm mingw-w64-x86_64-toolchain" + displayName: Install MinGW-w64 build tools via Pacman From a364e3cfb64ad98d911e4237aa5f72b6a3ab6b55 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Tue, 18 Jan 2022 13:45:25 +0900 Subject: [PATCH 0888/1024] =?UTF-8?q?[AZP]=20=E6=88=90=E6=9E=9C=E7=89=A9?= =?UTF-8?q?=E3=81=AE=E3=82=A2=E3=83=83=E3=83=97=E3=83=AD=E3=83=BC=E3=83=89?= =?UTF-8?q?=E3=82=BF=E3=82=B9=E3=82=AF=E3=81=AE=E5=AE=9F=E8=A1=8C=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6=E3=82=92=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ci/azure-pipelines/template.job.build-unittest.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/azure-pipelines/template.job.build-unittest.yml b/ci/azure-pipelines/template.job.build-unittest.yml index a091c06d54..53a2ac3f31 100644 --- a/ci/azure-pipelines/template.job.build-unittest.yml +++ b/ci/azure-pipelines/template.job.build-unittest.yml @@ -72,7 +72,7 @@ jobs: # https://docs.microsoft.com/en-us/azure/devops/pipelines/process/conditions?view=azure-devops&tabs=yaml#job-status-functions # - task: CopyFiles@1 - condition: succeededOrFailed() + condition: and(eq(variables['Configuration'], 'Release'), succeededOrFailed()) displayName: Copy to ArtifactStagingDirectory inputs: contents: | @@ -82,7 +82,7 @@ jobs: # see https://docs.microsoft.com/en-us/azure/devops/pipelines/artifacts/build-artifacts?view=azure-devops&tabs=yaml - task: PublishBuildArtifacts@1 - condition: succeededOrFailed() + condition: and(eq(variables['Configuration'], 'Release'), succeededOrFailed()) displayName: Publish ArtifactStagingDirectory inputs: pathtoPublish: '$(Build.ArtifactStagingDirectory)' From dd0cd25a8b26f3a63fac95b262d761fff9e7dbf8 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Fri, 21 Jan 2022 11:04:39 +0900 Subject: [PATCH 0889/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E3=82=92=E5=8F=8D=E6=98=A0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 既存のテストへの変更を差し戻し * CClipboard1 → CClipboardTestFixture * Empty の呼び出しの意図についてコメントを追加 * EXPECT_STREQ を使用する --- tests/unittests/test-cclipboard.cpp | 98 ++++++++++++++++++----------- 1 file changed, 61 insertions(+), 37 deletions(-) diff --git a/tests/unittests/test-cclipboard.cpp b/tests/unittests/test-cclipboard.cpp index 6052bcbbc6..3be8a100ca 100644 --- a/tests/unittests/test-cclipboard.cpp +++ b/tests/unittests/test-cclipboard.cpp @@ -28,8 +28,10 @@ #define NOMINMAX #endif /* #ifndef NOMINMAX */ +#include #include #include +#include #include #include @@ -38,26 +40,25 @@ #include "mem/CNativeW.h" #include "_os/CClipboard.h" -class CClipboard1 : public testing::Test { -protected: - void SetUp() override { - hInstance = ::GetModuleHandle(nullptr); - hWnd = ::CreateWindowExW(0, WC_STATICW, L"test", 0, 1, 1, 1, 1, nullptr, nullptr, hInstance, nullptr); - if (!hWnd) FAIL(); - } - void TearDown() override { - if (hWnd) - ::DestroyWindow(hWnd); +/*! + * HWND型のスマートポインタを実現するためのdeleterクラス + */ +struct window_closer +{ + void operator()(HWND hWnd) const + { + ::DestroyWindow(hWnd); } - - HINSTANCE hInstance = nullptr; - HWND hWnd = nullptr; }; +//! HWND型のスマートポインタ +using windowHolder = std::unique_ptr::type, window_closer>; + + /*! * @brief SetHtmlTextのテスト */ -TEST_F(CClipboard1, SetHtmlText) +TEST(CClipboard, SetHtmlText) { constexpr const wchar_t inputData[] = L"test 109"; constexpr const char expected[] = @@ -74,35 +75,57 @@ TEST_F(CClipboard1, SetHtmlText) const UINT uHtmlFormat = ::RegisterClipboardFormat(L"HTML Format"); - // クリップボード操作クラスでSetHtmlTextする - CClipboard cClipBoard(hWnd); + auto hInstance = ::GetModuleHandleW(nullptr); + if (HWND hWnd = ::CreateWindowExW(0, WC_STATICW, L"test", 0, 1, 1, 1, 1, nullptr, nullptr, hInstance, nullptr); hWnd) { + // HWNDをスマートポインタに入れる + windowHolder holder(hWnd); - // 操作は失敗しないはず。 - ASSERT_TRUE(cClipBoard.SetHtmlText(inputData)); + // クリップボード操作クラスでSetHtmlTextする + CClipboard cClipBoard(hWnd); - // 操作に成功するとHTML形式のデータを利用できるはず。 - ASSERT_TRUE(::IsClipboardFormatAvailable(uHtmlFormat)); + // 操作は失敗しないはず。 + ASSERT_TRUE(cClipBoard.SetHtmlText(inputData)); - // クリップボード操作クラスが対応してないので生APIを呼んで確認する。 + // 操作に成功するとHTML形式のデータを利用できるはず。 + ASSERT_TRUE(::IsClipboardFormatAvailable(uHtmlFormat)); - // グローバルメモリをロックできた場合のみ中身を取得しに行く - if (HGLOBAL hClipData = ::GetClipboardData(uHtmlFormat); hClipData != nullptr) { - // データをstd::stringにコピーする - const size_t cchData = ::GlobalSize(hClipData); - const char* pData = (char*)::GlobalLock(hClipData); - std::string strClipData(pData, cchData); + // クリップボード操作クラスが対応してないので生APIを呼んで確認する。 - // 使い終わったらロック解除する - ::GlobalUnlock(hClipData); + // グローバルメモリをロックできた場合のみ中身を取得しに行く + if (HGLOBAL hClipData = ::GetClipboardData(uHtmlFormat); hClipData != nullptr) { + // データをstd::stringにコピーする + const size_t cchData = ::GlobalSize(hClipData); + const char* pData = (char*)::GlobalLock(hClipData); + std::string strClipData(pData, cchData); - ASSERT_STREQ(expected, strClipData.c_str()); - } - else { - FAIL(); + // 使い終わったらロック解除する + ::GlobalUnlock(hClipData); + + ASSERT_STREQ(expected, strClipData.c_str()); + } + else { + FAIL(); + } } } -TEST_F(CClipboard1, SetTextAndGetText) +class CClipboardTestFixture : public testing::Test { +protected: + void SetUp() override { + hInstance = ::GetModuleHandle(nullptr); + hWnd = ::CreateWindowExW(0, WC_STATICW, L"test", 0, 1, 1, 1, 1, nullptr, nullptr, hInstance, nullptr); + if (!hWnd) FAIL(); + } + void TearDown() override { + if (hWnd) + ::DestroyWindow(hWnd); + } + + HINSTANCE hInstance = nullptr; + HWND hWnd = nullptr; +}; + +TEST_F(CClipboardTestFixture, SetTextAndGetText) { const std::wstring_view text = L"てすと"; CClipboard clipboard(hWnd); @@ -111,6 +134,7 @@ TEST_F(CClipboard1, SetTextAndGetText) bool line; CEol eol(EEolType::cr_and_lf); + // テストを実行する前にクリップボードの内容を破棄しておく。 clipboard.Empty(); // テキストを設定する(矩形選択フラグなし・行選択フラグなし) @@ -118,7 +142,7 @@ TEST_F(CClipboard1, SetTextAndGetText) EXPECT_TRUE(CClipboard::HasValidData()); // Unicode文字列を取得する EXPECT_TRUE(clipboard.GetText(&buffer, &column, &line, eol, CF_UNICODETEXT)); - EXPECT_EQ(buffer.Compare(text.data()), 0); + EXPECT_STREQ(buffer.GetStringPtr(), text.data()); EXPECT_FALSE(column); EXPECT_FALSE(line); @@ -129,9 +153,9 @@ TEST_F(CClipboard1, SetTextAndGetText) EXPECT_TRUE(CClipboard::HasValidData()); // サクラエディタ独自形式データを取得する EXPECT_TRUE(clipboard.GetText(&buffer, &column, nullptr, eol, CClipboard::GetSakuraFormat())); - EXPECT_EQ(buffer.Compare(text.data()), 0); + EXPECT_STREQ(buffer.GetStringPtr(), text.data()); EXPECT_TRUE(column); EXPECT_TRUE(clipboard.GetText(&buffer, nullptr, &line, eol, CClipboard::GetSakuraFormat())); - EXPECT_EQ(buffer.Compare(text.data()), 0); + EXPECT_STREQ(buffer.GetStringPtr(), text.data()); EXPECT_TRUE(line); } From add95b53ebbf95b5a2fafd653ebcb3cf45c9812a Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Fri, 21 Jan 2022 08:16:17 +0900 Subject: [PATCH 0890/1024] =?UTF-8?q?[AZP]=20VS=E3=81=A7=E3=81=AE=E3=83=93?= =?UTF-8?q?=E3=83=AB=E3=83=89=E3=82=92=E9=99=A4=E3=81=8F=E3=82=B8=E3=83=A7?= =?UTF-8?q?=E3=83=96=E3=81=AE=E5=AE=9F=E8=A1=8C=E3=81=AB=E6=9C=80=E6=96=B0?= =?UTF-8?q?=E3=81=AEWindows=E7=92=B0=E5=A2=83=E3=82=92=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- azure-pipelines.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index fb432eafff..acac73e1cc 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -117,35 +117,35 @@ jobs: - template: ci/azure-pipelines/template.job.build-on-msys2.yml parameters: name: MinGW - vmImage: 'VS2017-Win2016' + vmImage: 'windows-latest' displayName: MinGW # SonarQube で解析を行う JOB - template: ci/azure-pipelines/template.job.SonarQube.yml parameters: name: SonarQube - vmImage: 'VS2017-Win2016' + vmImage: 'windows-latest' displayName: SonarQube # Cppcheck を行う JOB - template: ci/azure-pipelines/template.job.cppcheck.yml parameters: name: cppcheck - vmImage: 'VS2017-Win2016' + vmImage: 'windows-latest' displayName: cppcheck # doxygen を行う JOB - template: ci/azure-pipelines/template.job.doxygen.yml parameters: name: doxygen - vmImage: 'VS2017-Win2016' + vmImage: 'windows-latest' displayName: doxygen # 文字コードのチェックを行う JOB - template: ci/azure-pipelines/template.job.checkEncoding.yml parameters: name: checkEncoding - vmImage: 'VS2017-Win2016' + vmImage: 'windows-latest' ############################################################################################################# # Python スクリプトのコンパイル確認を行う job @@ -153,5 +153,5 @@ jobs: - template: ci/azure-pipelines/template.job.python-check.yml parameters: name: script_check - vmImage: 'VS2017-Win2016' + vmImage: 'windows-latest' displayName: script_check From ceccdb53dabf743fd744eff496e207be4c3d45c6 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Fri, 21 Jan 2022 23:14:34 +0900 Subject: [PATCH 0891/1024] =?UTF-8?q?[AZP]=20VS2017=E3=81=A7=E3=81=AE?= =?UTF-8?q?=E3=83=93=E3=83=AB=E3=83=89=E3=82=B8=E3=83=A7=E3=83=96=E3=82=92?= =?UTF-8?q?=E5=BB=83=E6=AD=A2=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- azure-pipelines.yml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index acac73e1cc..2ebfc4879a 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -87,17 +87,6 @@ pr: ############################################################################################################################### jobs: -# サクラエディタのビルドを行う JOB (VS2017) -# * サクラエディタ本体 -# * HTML Help -# * Installer -# * 単体テスト -- template: ci/azure-pipelines/template.job.build-unittest.yml - parameters: - name: VS2017 - vmImage: 'VS2017-Win2016' - displayName: VS2017 - # サクラエディタのビルドを行う JOB (VS2019) # * サクラエディタ本体 # * HTML Help From dff128fcbe0dde7b97286cbb10e6d7cc16d6cb59 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sat, 22 Jan 2022 00:21:39 +0900 Subject: [PATCH 0892/1024] =?UTF-8?q?[AZP]=20=E9=96=A2=E4=BF=82=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=82=92=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ci/azure-pipelines/azure-pipelines.md | 1 - 1 file changed, 1 deletion(-) diff --git a/ci/azure-pipelines/azure-pipelines.md b/ci/azure-pipelines/azure-pipelines.md index 8b159118c4..ad3145bfc9 100644 --- a/ci/azure-pipelines/azure-pipelines.md +++ b/ci/azure-pipelines/azure-pipelines.md @@ -76,7 +76,6 @@ https://azure.microsoft.com/ja-jp/services/devops/pipelines/ にアクセスし | JOB 名 | 説明 | job を定義する template | ----|----|---- -|VS2017 | Visual Studio 2017 でサクラエディタのビルドを行う | [template.job.build-unittest.yml](template.job.build-unittest.yml) | |VS2019 | Visual Studio 2019 でサクラエディタのビルドを行う | [template.job.build-unittest.yml](template.job.build-unittest.yml) | |MinGW | MinGW でサクラエディタのビルドを行う | [template.job.build-on-msys2.yml](template.job.build-on-msys2.yml) | |SonarQube | SonarQube での解析を行う | [template.job.SonarQube.yml](template.job.SonarQube.yml) | From 63c46a99a2811e18ce1a986f7192491bf0c7e290 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 23 Jan 2022 17:43:12 +0900 Subject: [PATCH 0893/1024] =?UTF-8?q?ExtractCtags=E3=81=AEWin32=E3=83=93?= =?UTF-8?q?=E3=83=AB=E3=83=89=E3=81=AE=E4=BE=9D=E5=AD=98=E3=82=BF=E3=83=BC?= =?UTF-8?q?=E3=82=B2=E3=83=83=E3=83=88=E6=8C=87=E5=AE=9A=E3=82=92x64?= =?UTF-8?q?=E3=83=93=E3=83=AB=E3=83=89=E3=81=A8=E5=90=88=E3=82=8F=E3=81=9B?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura/sakura.vcxproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura/sakura.vcxproj b/sakura/sakura.vcxproj index ed9d56c47a..b1727b8e0c 100644 --- a/sakura/sakura.vcxproj +++ b/sakura/sakura.vcxproj @@ -951,7 +951,7 @@ - + From 4e5841b0ed14a63d39c363c5b5445f7db2a7fe0d Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 23 Jan 2022 19:48:51 +0900 Subject: [PATCH 0894/1024] =?UTF-8?q?PropertyGroup=20Label=3D"Configuratio?= =?UTF-8?q?n"=E3=81=AE=E8=A8=98=E8=BF=B0=E3=82=921=E3=81=A4=E3=81=AB?= =?UTF-8?q?=E3=81=BE=E3=81=A8=E3=82=81=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura/sakura.vcxproj | 18 ++---------------- sakura_lang_en_US/sakura_lang_en_US.vcxproj | 17 +---------------- 2 files changed, 3 insertions(+), 32 deletions(-) diff --git a/sakura/sakura.vcxproj b/sakura/sakura.vcxproj index ed9d56c47a..2381083664 100644 --- a/sakura/sakura.vcxproj +++ b/sakura/sakura.vcxproj @@ -25,26 +25,12 @@ - + Application false Unicode - - Application - false - Unicode - - - Application - false - Unicode - true - - - Application - false - Unicode + true diff --git a/sakura_lang_en_US/sakura_lang_en_US.vcxproj b/sakura_lang_en_US/sakura_lang_en_US.vcxproj index 5221d452cb..5273b81eb4 100644 --- a/sakura_lang_en_US/sakura_lang_en_US.vcxproj +++ b/sakura_lang_en_US/sakura_lang_en_US.vcxproj @@ -24,22 +24,7 @@ - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - + DynamicLibrary false Unicode From e8c8ab9f9f25c92efad22ea88f2e6f476c65efd4 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 23 Jan 2022 19:50:55 +0900 Subject: [PATCH 0895/1024] =?UTF-8?q?ImportGroup=20Label=3D"PropertySheets?= =?UTF-8?q?"=E3=81=AE=E8=A8=98=E8=BF=B0=E3=82=921=E3=81=A4=E3=81=AB?= =?UTF-8?q?=E3=81=BE=E3=81=A8=E3=82=81=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura/sakura.vcxproj | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/sakura/sakura.vcxproj b/sakura/sakura.vcxproj index 2381083664..b70b53716b 100644 --- a/sakura/sakura.vcxproj +++ b/sakura/sakura.vcxproj @@ -36,16 +36,7 @@ - - - - - - - - - - + From 7231def16438f69f3e8ad1bbc3b8b4da048cbc5b Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 23 Jan 2022 19:53:39 +0900 Subject: [PATCH 0896/1024] =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=82=AF=E3=83=AA?= =?UTF-8?q?=E3=83=A1=E3=83=B3=E3=82=BF=E3=83=AB=E3=83=AA=E3=83=B3=E3=82=AF?= =?UTF-8?q?=E3=81=AE=E6=8C=87=E5=AE=9A4=E3=81=A4=E3=82=922=E3=81=A4?= =?UTF-8?q?=E3=81=AB=E3=81=BE=E3=81=A8=E3=82=81=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura/sakura.vcxproj | 12 +++--------- sakura_lang_en_US/sakura_lang_en_US.vcxproj | 12 ++---------- 2 files changed, 5 insertions(+), 19 deletions(-) diff --git a/sakura/sakura.vcxproj b/sakura/sakura.vcxproj index b70b53716b..d190577e3b 100644 --- a/sakura/sakura.vcxproj +++ b/sakura/sakura.vcxproj @@ -46,17 +46,11 @@ <_ProjectFileVersion>15.0.27130.2020 - - false - - - false - - + true - - true + + false diff --git a/sakura_lang_en_US/sakura_lang_en_US.vcxproj b/sakura_lang_en_US/sakura_lang_en_US.vcxproj index 5273b81eb4..f1c8e52d26 100644 --- a/sakura_lang_en_US/sakura_lang_en_US.vcxproj +++ b/sakura_lang_en_US/sakura_lang_en_US.vcxproj @@ -42,19 +42,11 @@ <_ProjectFileVersion>15.0.27130.2020 - + true true - - true - true - - - true - false - - + true false From 51f1b013a87ed909485518e80e931de2262fd6f3 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sun, 23 Jan 2022 19:35:20 +0900 Subject: [PATCH 0897/1024] =?UTF-8?q?Locale=20Emulator=E3=81=AE=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E3=82=B9=E3=83=88=E3=83=BC=E3=83=AB=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E3=82=92=E5=A4=89=E6=9B=B4=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build-sakura.yml | 15 +++++++++++++-- .../template.job.build-unittest.yml | 13 ++++++++++++- ci/init-locale-emulator.ahk | 7 +++++++ 3 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 ci/init-locale-emulator.ahk diff --git a/.github/workflows/build-sakura.yml b/.github/workflows/build-sakura.yml index 45ccf3a8b7..bcb225a90d 100644 --- a/.github/workflows/build-sakura.yml +++ b/.github/workflows/build-sakura.yml @@ -90,8 +90,19 @@ jobs: shell: cmd - name: Install Locale Emulator - run: choco install locale-emulator -y - shell: cmd + run: | + choco install autohotkey.install --confirm + $LEExpandDir = "${{github.workspace}}\tools\locale-emulator" + $LEInitScript = "${{github.workspace}}\ci\init-locale-emulator.ahk" + New-Item "${LEExpandDir}" -ItemType Directory + Invoke-WebRequest ` + "https://github.com/xupefei/Locale-Emulator/releases/download/v2.5.0.1/Locale.Emulator.2.5.0.1.zip" ` + -OutFile "${LEExpandDir}\locale-emulator.zip" + Expand-Archive "${LEExpandDir}\locale-emulator.zip" "${LEExpandDir}" + Start-Process "AutoHotKey" "${LEInitScript}" + Start-Process "${LEExpandDir}\LEInstaller.exe" + echo "${LEExpandDir}" >> $env:GITHUB_PATH + shell: pwsh - name: Build HTML Help run: build-chm.bat diff --git a/ci/azure-pipelines/template.job.build-unittest.yml b/ci/azure-pipelines/template.job.build-unittest.yml index 53a2ac3f31..96a9d2ae09 100644 --- a/ci/azure-pipelines/template.job.build-unittest.yml +++ b/ci/azure-pipelines/template.job.build-unittest.yml @@ -47,7 +47,18 @@ jobs: displayName: Bitmap Split/Mux # Install Locale Emulator - - script: choco install locale-emulator -y + - pwsh: | + choco install autohotkey.install --confirm + $LEExpandDir = "$(Build.SourcesDirectory)\tools\locale-emulator" + $LEInitScript = "$(Build.SourcesDirectory)\ci\init-locale-emulator.ahk" + New-Item "${LEExpandDir}" -ItemType Directory + Invoke-WebRequest ` + "https://github.com/xupefei/Locale-Emulator/releases/download/v2.5.0.1/Locale.Emulator.2.5.0.1.zip" ` + -OutFile "${LEExpandDir}\locale-emulator.zip" + Expand-Archive "${LEExpandDir}\locale-emulator.zip" "${LEExpandDir}" + Start-Process "AutoHotKey" "${LEInitScript}" + Start-Process "${LEExpandDir}\LEInstaller.exe" + echo "##vso[task.prependpath]${LEExpandDir}" displayName: Install Locale Emulator # Build HTML Help diff --git a/ci/init-locale-emulator.ahk b/ci/init-locale-emulator.ahk new file mode 100644 index 0000000000..c1976fa341 --- /dev/null +++ b/ci/init-locale-emulator.ahk @@ -0,0 +1,7 @@ +#NoEnv +#NoTrayIcon +SetTitleMatchMode, 1 + +window_title = % "LE Context Menu Installer - V" +WinWait, %window_title%, , 20 +WinClose %window_title% From aefb3d4c0717fc6e33ae56f8f192bdaa29e30911 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sun, 23 Jan 2022 20:12:01 +0900 Subject: [PATCH 0898/1024] =?UTF-8?q?Inno=20Setup=E3=81=AE=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E3=82=B9=E3=83=88=E3=83=BC=E3=83=AB=E3=81=AA=E3=81=84?= =?UTF-8?q?=E3=81=97=E3=82=A2=E3=83=83=E3=83=97=E3=83=87=E3=83=BC=E3=83=88?= =?UTF-8?q?=E3=82=92=E8=87=AA=E5=89=8D=E3=81=A7=E8=A1=8C=E3=81=86=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build-sakura.yml | 4 ++++ ci/azure-pipelines/template.job.build-unittest.yml | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/.github/workflows/build-sakura.yml b/.github/workflows/build-sakura.yml index bcb225a90d..9cbe83ee44 100644 --- a/.github/workflows/build-sakura.yml +++ b/.github/workflows/build-sakura.yml @@ -108,6 +108,10 @@ jobs: run: build-chm.bat shell: cmd + - name: Update/Install Inno Setup + run: choco upgrade innosetup --confirm + shell: pwsh + - name: Build installer with Inno Setup run: build-installer.bat ${{ matrix.platform }} ${{ matrix.config }} shell: cmd diff --git a/ci/azure-pipelines/template.job.build-unittest.yml b/ci/azure-pipelines/template.job.build-unittest.yml index 96a9d2ae09..83ab615991 100644 --- a/ci/azure-pipelines/template.job.build-unittest.yml +++ b/ci/azure-pipelines/template.job.build-unittest.yml @@ -65,6 +65,10 @@ jobs: - script: build-chm.bat displayName: Build HTML Help + # Install/Update Inno Setup + - pwsh: choco upgrade innosetup --confirm + displayName: Install/Update Inno Setup + # Build installer with Inno Setup - script: build-installer.bat $(BuildPlatform) $(Configuration) displayName: Build installer with Inno Setup From 1cd9f56b0a0fa0b6a4cbf6f343206e1982460488 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Tue, 25 Jan 2022 01:42:07 +0900 Subject: [PATCH 0899/1024] =?UTF-8?q?CI=E3=81=A7VS2022=E3=82=92=E5=88=A9?= =?UTF-8?q?=E7=94=A8=E3=81=97=E3=81=9F=E3=83=93=E3=83=AB=E3=83=89=E3=82=82?= =?UTF-8?q?=E8=A1=8C=E3=81=86=E3=82=88=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build-sakura.yml | 5 ++++- azure-pipelines.yml | 7 +++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-sakura.yml b/.github/workflows/build-sakura.yml index 9cbe83ee44..21728dcec5 100644 --- a/.github/workflows/build-sakura.yml +++ b/.github/workflows/build-sakura.yml @@ -34,10 +34,13 @@ jobs: build: # The type of runner that the job will run on name: MSBuild - runs-on: windows-latest + runs-on: ${{matrix.os}} strategy: matrix: + os: + - windows-2019 + - windows-2022 config: - Debug - Release diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 2ebfc4879a..070593638f 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -100,6 +100,13 @@ jobs: vmImage: 'windows-2019' displayName: VS2019 +# サクラエディタのビルドを行う JOB (VS2022) +- template: ci/azure-pipelines/template.job.build-unittest.yml + parameters: + name: VS2022 + vmImage: 'windows-2022' + displayName: VS2022 + # サクラエディタのビルドを行う JOB(MinGW) # * サクラエディタ本体 # * 単体テスト From 21e190d103975e77e39cda534959fa74cdbe983a Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Wed, 26 Jan 2022 17:23:42 +0900 Subject: [PATCH 0900/1024] =?UTF-8?q?[GHA]=20=E5=8D=98=E4=BD=93=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=92=E5=AE=9F=E6=96=BD=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build-sakura.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/build-sakura.yml b/.github/workflows/build-sakura.yml index 21728dcec5..ed519cbc39 100644 --- a/.github/workflows/build-sakura.yml +++ b/.github/workflows/build-sakura.yml @@ -92,6 +92,11 @@ jobs: run: build-sln.bat ${{ matrix.platform }} ${{ matrix.config }} shell: cmd + - name: Run unit tests + run: .\tests1.exe --gtest_output=xml:${{github.workspace}}\tests1.exe-googletest-${{matrix.platform}}-${{matrix.config}}.xml + working-directory: ${{github.workspace}}\${{matrix.platform}}\${{matrix.config}} + shell: pwsh + - name: Install Locale Emulator run: | choco install autohotkey.install --confirm From 949f39909e92275003235c2670f791899ba023f4 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Wed, 26 Jan 2022 18:31:03 +0900 Subject: [PATCH 0901/1024] =?UTF-8?q?[AZP]=20=E3=82=B3=E3=83=A1=E3=83=B3?= =?UTF-8?q?=E3=83=88=E3=81=AE=E4=B8=8D=E4=B8=80=E8=87=B4=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ci/azure-pipelines/template.job.build-unittest.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/azure-pipelines/template.job.build-unittest.yml b/ci/azure-pipelines/template.job.build-unittest.yml index 83ab615991..87c5d37af8 100644 --- a/ci/azure-pipelines/template.job.build-unittest.yml +++ b/ci/azure-pipelines/template.job.build-unittest.yml @@ -65,9 +65,9 @@ jobs: - script: build-chm.bat displayName: Build HTML Help - # Install/Update Inno Setup + # Update/Install Inno Setup - pwsh: choco upgrade innosetup --confirm - displayName: Install/Update Inno Setup + displayName: Update/Install Inno Setup # Build installer with Inno Setup - script: build-installer.bat $(BuildPlatform) $(Configuration) From 2a920310e5cafbafc3ee29712cadb37196b18529 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Wed, 26 Jan 2022 12:07:41 +0900 Subject: [PATCH 0902/1024] =?UTF-8?q?=E3=83=98=E3=83=83=E3=83=80=E3=83=BC?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=82=AF=E3=83=AB=E3=83=BC=E3=83=89=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=EF=BC=88=E3=82=B3=E3=83=B3=E3=83=91=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E3=82=A8=E3=83=A9=E3=83=BC=E5=AF=BE=E7=AD=96=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-zoom.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/unittests/test-zoom.cpp b/tests/unittests/test-zoom.cpp index 6305c058db..289ea58f66 100644 --- a/tests/unittests/test-zoom.cpp +++ b/tests/unittests/test-zoom.cpp @@ -23,6 +23,7 @@ distribution. */ #include +#include #include "util/zoom.h" /*! From b9cb771c8ee531b6fae14269360bb96b7d701145 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Thu, 27 Jan 2022 15:29:28 +0900 Subject: [PATCH 0903/1024] =?UTF-8?q?GoogleTest=E3=81=8C`DEBUG=5FPOSTFIX`?= =?UTF-8?q?=E3=82=92=E8=A8=AD=E5=AE=9A=E3=81=97=E3=81=AA=E3=81=8F=E3=81=AA?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E3=81=93=E3=81=A8=E3=81=AB=E3=82=88=E3=82=8B?= =?UTF-8?q?=E3=83=A9=E3=82=A4=E3=83=96=E3=83=A9=E3=83=AA=E5=90=8D=E3=81=AE?= =?UTF-8?q?=E5=A4=89=E6=9B=B4=E3=81=AB=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/googletest.targets | 6 ++---- tests/unittests/Makefile | 6 ++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/tests/googletest.targets b/tests/googletest.targets index 3c6efdf7b8..91c2fae8d0 100644 --- a/tests/googletest.targets +++ b/tests/googletest.targets @@ -7,10 +7,8 @@ $(GoogleTestInstallDir)lib $(GoogleTestInstallDir)lib64 $(GoogleTestLibInstallDir);$(LibraryPath) - d - - gtest$(NameSuffix).lib - gtest_main$(NameSuffix).lib + gtest.lib + gtest_main.lib $(GoogleTestLibInstallDir)\$(GTestLibName) $(GoogleTestLibInstallDir)\$(GTestMainLibName) diff --git a/tests/unittests/Makefile b/tests/unittests/Makefile index b16eb0ad16..59c3692614 100644 --- a/tests/unittests/Makefile +++ b/tests/unittests/Makefile @@ -81,8 +81,6 @@ ifeq (,$(findstring -D_DEBUG,$(DEFINES))) ifeq (,$(findstring -DNDEBUG,$(DEFINES))) DEFINES += -DNDEBUG endif -else -LIB_SUFFIX = d endif CFLAGS= \ @@ -120,8 +118,8 @@ LIBS= \ -lgdi32 \ -lcomdlg32 \ -L$(GOOGLETEST_INSTALL_DIR)/lib \ - -lgtest$(or $(LIB_SUFFIX),) \ - -lgtest_main$(or $(LIB_SUFFIX),) \ + -lgtest \ + -lgtest_main \ $(MYLIBS) exe= $(or $(OUTDIR),.)/tests1.exe From 56d37120d01ed7b15059c089e990ecaea6f994d1 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Thu, 27 Jan 2022 15:31:17 +0900 Subject: [PATCH 0904/1024] =?UTF-8?q?GoogleTest=E3=82=92=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/googletest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/googletest b/tests/googletest index 3cf8f514d8..0b7798b2fb 160000 --- a/tests/googletest +++ b/tests/googletest @@ -1 +1 @@ -Subproject commit 3cf8f514d859d65b7202e51c662a03a92887b8e2 +Subproject commit 0b7798b2fba340969a0cf83698e5c0a2e25b7dbc From 45a8a4ce5f30b4c6278b0cb3a619840ded820d36 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Thu, 27 Jan 2022 21:34:12 +0900 Subject: [PATCH 0905/1024] =?UTF-8?q?=E3=83=97=E3=83=AD=E3=82=B8=E3=82=A7?= =?UTF-8?q?=E3=82=AF=E3=83=88=E8=A8=AD=E5=AE=9A=E3=83=95=E3=82=A1=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E5=86=85=E3=81=AELink=E3=82=BF=E3=82=B9=E3=82=AF?= =?UTF-8?q?=E3=81=AE=E8=A8=98=E8=BF=B0=E4=BD=8D=E7=BD=AE=E3=82=92=E7=A7=BB?= =?UTF-8?q?=E5=8B=95=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura/sakura.vcxproj | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/sakura/sakura.vcxproj b/sakura/sakura.vcxproj index b657d16d8b..2d94b8907e 100644 --- a/sakura/sakura.vcxproj +++ b/sakura/sakura.vcxproj @@ -69,17 +69,17 @@ true true - - Windows - comctl32.lib;Imm32.lib;mpr.lib;imagehlp.lib;Shlwapi.lib;Dwmapi.lib;%(AdditionalDependencies) - true - 0x0411 true + + Windows + comctl32.lib;Imm32.lib;mpr.lib;imagehlp.lib;Shlwapi.lib;Dwmapi.lib;%(AdditionalDependencies) + true + call postBuild.bat $(Platform) $(Configuration) @@ -94,12 +94,12 @@ MultiThreadedDebug EnableFastChecks - - false - _DEBUG;%(PreprocessorDefinitions) + + false + @@ -110,26 +110,26 @@ ProgramDatabase true + + NDEBUG;%(PreprocessorDefinitions) + UseFastLinkTimeCodeGeneration true true true - - NDEBUG;%(PreprocessorDefinitions) - WIN32;%(PreprocessorDefinitions) - - true - WIN32;%(PreprocessorDefinitions) + + true + From 58f5897f311fafe8595c0e2e9f0ebfbffe7cdf72 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 9 Jan 2022 20:32:02 +0900 Subject: [PATCH 0906/1024] =?UTF-8?q?=E7=92=B0=E5=A2=83=E5=A4=89=E6=95=B0N?= =?UTF-8?q?UM=5FVSVERSION=E3=81=8C=E7=84=A1=E8=A6=96=E3=81=95=E3=82=8C?= =?UTF-8?q?=E3=82=8B=E4=B8=8D=E5=85=B7=E5=90=88=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/find-tools.bat | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/tools/find-tools.bat b/tools/find-tools.bat index 8b5f1c1bef..139c4702d3 100644 --- a/tools/find-tools.bat +++ b/tools/find-tools.bat @@ -161,10 +161,14 @@ exit /b :: 16 => Visual Studio 2019 :: --------------------------------------------------------------------------------------------------------------------- :msbuild + if defined ARG_VSVERSION ( + goto :convert_arg_vsversion + ) + goto :varidate_num_vsversion + +:convert_arg_vsversion :: convert productLineVersion to Internal Major Version - if "%ARG_VSVERSION%" == "" ( - set NUM_VSVERSION=15 - ) else if "%ARG_VSVERSION%" == "2017" ( + if "%ARG_VSVERSION%" == "2017" ( set NUM_VSVERSION=15 ) else if "%ARG_VSVERSION%" == "2019" ( set NUM_VSVERSION=16 @@ -176,6 +180,11 @@ exit /b set NUM_VSVERSION=%ARG_VSVERSION% ) +:varidate_num_vsversion + if not defined NUM_VSVERSION ( + set NUM_VSVERSION=15 + ) + call :check_installed_vsversion call :find_msbuild From a617d1205e3dff11702a26ad90aadfb79f94afc9 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 10 Jan 2022 17:22:39 +0900 Subject: [PATCH 0907/1024] =?UTF-8?q?find-tools.bat=E3=81=AE=E7=92=B0?= =?UTF-8?q?=E5=A2=83=E5=A4=89=E6=95=B0=E3=82=AF=E3=83=AA=E3=82=A2=E6=A9=9F?= =?UTF-8?q?=E8=83=BD=E3=82=92=E9=96=A2=E6=95=B0=E5=8C=96=E3=81=97=E3=81=A6?= =?UTF-8?q?=E5=86=85=E9=83=A8=E3=81=8B=E3=82=89=E5=91=BC=E3=81=B9=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/find-tools.bat | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/tools/find-tools.bat b/tools/find-tools.bat index 139c4702d3..c4f46ab846 100644 --- a/tools/find-tools.bat +++ b/tools/find-tools.bat @@ -2,22 +2,7 @@ setlocal if "%1" equ "clear" ( - endlocal - set CMD_GIT= - set CMD_7Z= - set CMD_HHC= - set CMD_ISCC= - set CMD_CPPCHECK= - set CMD_DOXYGEN= - set CMD_VSWHERE= - set CMD_MSBUILD= - set CMD_CMAKE= - set CMD_NINJA= - set CMD_LEPROC= - set CMD_PYTHON= - set NUM_VSVERSION= - set CMAKE_G_PARAM= - set FIND_TOOLS_CALLED= + call :clear_variables echo find-tools.bat has been cleared exit /b ) else if "%~1" neq "" ( @@ -75,6 +60,25 @@ endlocal ^ set FIND_TOOLS_CALLED=1 exit /b +:clear_variables + endlocal + set CMD_GIT= + set CMD_7Z= + set CMD_HHC= + set CMD_ISCC= + set CMD_CPPCHECK= + set CMD_DOXYGEN= + set CMD_VSWHERE= + set CMD_MSBUILD= + set CMD_CMAKE= + set CMD_NINJA= + set CMD_LEPROC= + set CMD_PYTHON= + set NUM_VSVERSION= + set CMAKE_G_PARAM= + set FIND_TOOLS_CALLED= + exit /b + :Git set APPDIR=Git\Cmd set PATH2=%PATH%;%ProgramFiles%\%APPDIR%\;%ProgramFiles(x86)%\%APPDIR%\;%ProgramW6432%\%APPDIR%\; From 2b61f1fbf8df030364a7a2335aa9ce6964353920 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 10 Jan 2022 18:39:47 +0900 Subject: [PATCH 0908/1024] =?UTF-8?q?=E5=BC=95=E6=95=B0(ARG=5FVSVERSION)?= =?UTF-8?q?=E3=82=92=E6=8C=87=E5=AE=9A=E3=81=97=E3=81=9F=E3=82=89=E7=92=B0?= =?UTF-8?q?=E5=A2=83=E5=A4=89=E6=95=B0=E3=82=92=E6=B4=97=E3=81=84=E6=9B=BF?= =?UTF-8?q?=E3=81=88=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E7=B5=84=E3=81=BF?= =?UTF-8?q?=E3=81=AA=E3=81=8A=E3=81=97=E3=81=A6=E3=81=BF=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/find-tools.bat | 157 +++++++++++++++++++++---------------------- 1 file changed, 78 insertions(+), 79 deletions(-) diff --git a/tools/find-tools.bat b/tools/find-tools.bat index c4f46ab846..3c6251332e 100644 --- a/tools/find-tools.bat +++ b/tools/find-tools.bat @@ -5,9 +5,34 @@ if "%1" equ "clear" ( call :clear_variables echo find-tools.bat has been cleared exit /b -) else if "%~1" neq "" ( +) + +if not defined CMD_VSWHERE call :vswhere 2> nul +if not exist "%CMD_VSWHERE%" ( + echo vswhere was not found + exit /b +) + +set ARG_VSVERSION= +if "%1" neq "" ( set "ARG_VSVERSION=%~1" ) +call :convert_arg_vsversion +if not defined ARG_VSVERSION ( + call :convert_arg_vsversion +) + +if defined NUM_VSVERSION ( + if "%ARG_VSVERSION%" neq "%NUM_VSVERSION%" ( + call :clear_variables + setlocal + set "ARG_VSVERSION=%~1" + call :vswhere + call :convert_arg_vsversion + ) +) +set NUM_VSVERSION=%ARG_VSVERSION% + if defined FIND_TOOLS_CALLED ( echo find-tools.bat already called exit /b @@ -20,7 +45,6 @@ if not defined CMD_HHC call :hhc 2> nul if not defined CMD_ISCC call :iscc 2> nul if not defined CMD_CPPCHECK call :cppcheck 2> nul if not defined CMD_DOXYGEN call :doxygen 2> nul -if not defined CMD_VSWHERE call :vswhere 2> nul if not defined CMD_MSBUILD call :msbuild 2> nul if not defined CMD_CMAKE call :cmake 2> nul if not defined CMD_NINJA call :cmake 2> nul @@ -79,6 +103,44 @@ exit /b set FIND_TOOLS_CALLED= exit /b +:convert_arg_vsversion + if not defined ARG_VSVERSION ( + set "ARG_VSVERSION=%NUM_VSVERSION%" + ) + if not defined ARG_VSVERSION ( + set "ARG_VSVERSION=latest" + ) + + :: convert productLineVersion to Internal Major Version + if "%ARG_VSVERSION%" == "2017" ( + set ARG_VSVERSION=15 + ) else if "%ARG_VSVERSION%" == "2019" ( + set ARG_VSVERSION=16 + ) else if "%ARG_VSVERSION%" == "2022" ( + set ARG_VSVERSION=17 + ) else if "%ARG_VSVERSION%" == "latest" ( + call :get_latest_installed_vsversion + ) + ::指定されたバージョンのC++がインストールされているかチェック + set /a ARG_VSVERSION_NEXT=ARG_VSVERSION + 1 + for /f "usebackq delims=" %%d in (`"%CMD_VSWHERE%" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath -version [%ARG_VSVERSION%^,%ARG_VSVERSION_NEXT%^)`) do ( + if exist "%%d" exit /b + ) + ::指定されたバージョンが存在しなければ「指定なし」にしてやり直す + set ARG_VSVERSION= + exit /b + +:get_latest_installed_vsversion + for /f "usebackq delims=" %%v in (`"%CMD_VSWHERE%" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationVersion -latest`) do ( + set VSVERSION=%%v + ) + if defined VSVERSION ( + set ARG_VSVERSION=%VSVERSION:~0,2% + ) else ( + set ARG_VSVERSION=15 + ) + exit /b + :Git set APPDIR=Git\Cmd set PATH2=%PATH%;%ProgramFiles%\%APPDIR%\;%ProgramFiles(x86)%\%APPDIR%\;%ProgramW6432%\%APPDIR%\; @@ -156,104 +218,41 @@ exit /b :: --------------------------------------------------------------------------------------------------------------------- :: sub routine for finding msbuild -:: -:: ARG_VSVERSION -:: latest => the latest version of installed Visual Studio -:: 2017 => Visual Studio 2017 -:: 2019 => Visual Studio 2019 -:: 15 => Visual Studio 2017 -:: 16 => Visual Studio 2019 :: --------------------------------------------------------------------------------------------------------------------- :msbuild - if defined ARG_VSVERSION ( - goto :convert_arg_vsversion - ) - goto :varidate_num_vsversion - -:convert_arg_vsversion - :: convert productLineVersion to Internal Major Version - if "%ARG_VSVERSION%" == "2017" ( - set NUM_VSVERSION=15 - ) else if "%ARG_VSVERSION%" == "2019" ( - set NUM_VSVERSION=16 - ) else if "%ARG_VSVERSION%" == "2022" ( - set NUM_VSVERSION=17 - ) else if "%ARG_VSVERSION%" == "latest" ( - call :check_latest_installed_vsversion - ) else ( - set NUM_VSVERSION=%ARG_VSVERSION% - ) - -:varidate_num_vsversion - if not defined NUM_VSVERSION ( - set NUM_VSVERSION=15 - ) - - call :check_installed_vsversion - - call :find_msbuild - if not exist "%CMD_MSBUILD%" ( + :: vs2017単独インストールで導入されるvswhereには機能制限がある + if "%ARG_VSVERSION%" == "15" ( call :find_msbuild_legacy - set NUM_VSVERSION=15 - ) - - if "%NUM_VSVERSION%" == "15" ( set CMAKE_G_PARAM=Visual Studio 15 2017 - ) else if "%NUM_VSVERSION%" == "16" ( - set CMAKE_G_PARAM=Visual Studio 16 2019 - ) else if "%NUM_VSVERSION%" == "17" ( - set CMAKE_G_PARAM=Visual Studio 17 2022 ) else ( + call :find_msbuild call :set_cmake_gparam_automatically ) exit /b -:set_cmake_gparam_automatically - call :get_product_line_version - set CMAKE_G_PARAM=Visual Studio %NUM_VSVERSION% %VS_PRODUCT_LINE_VERSION% - exit /b - -:get_product_line_version - set /a NUM_VSVERSION_NEXT=NUM_VSVERSION + 1 - for /f "usebackq delims=" %%v in (`"%CMD_VSWHERE%" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property catalog_productLineVersion -version [%NUM_VSVERSION%^,%NUM_VSVERSION_NEXT%^)`) do ( - set VS_PRODUCT_LINE_VERSION=%%v - ) - exit /b - -:check_latest_installed_vsversion - for /f "usebackq delims=" %%v in (`"%CMD_VSWHERE%" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationVersion -latest`) do ( - set VSVERSION=%%v - ) - set NUM_VSVERSION=%VSVERSION:~0,2% - exit /b - -:check_installed_vsversion - set /a NUM_VSVERSION_NEXT=NUM_VSVERSION + 1 - for /f "usebackq delims=" %%d in (`"%CMD_VSWHERE%" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath -version [%NUM_VSVERSION%^,%NUM_VSVERSION_NEXT%^)`) do ( - if exist "%%d" exit /b - ) - call :check_latest_installed_vsversion - exit /b - :find_msbuild set /a NUM_VSVERSION_NEXT=NUM_VSVERSION + 1 for /f "usebackq delims=" %%a in (`"%CMD_VSWHERE%" -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe -version [%NUM_VSVERSION%^,%NUM_VSVERSION_NEXT%^)`) do ( set "CMD_MSBUILD=%%a" ) - if exist "%CMD_MSBUILD%" ( - exit /b - ) - set CMD_MSBUILD= exit /b :find_msbuild_legacy for /f "usebackq delims=" %%d in (`"%CMD_VSWHERE%" -requires Microsoft.Component.MSBuild -property installationPath -version [15^,16^)`) do ( set "CMD_MSBUILD=%%d\MSBuild\15.0\Bin\MSBuild.exe" ) - if exist "%CMD_MSBUILD%" ( - exit /b + exit /b + +:set_cmake_gparam_automatically + call :get_product_line_version + set CMAKE_G_PARAM=Visual Studio %NUM_VSVERSION% %VS_PRODUCT_LINE_VERSION% + exit /b + +:get_product_line_version + set /a NUM_VSVERSION_NEXT=NUM_VSVERSION + 1 + for /f "usebackq delims=" %%v in (`"%CMD_VSWHERE%" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property catalog_productLineVersion -version [%NUM_VSVERSION%^,%NUM_VSVERSION_NEXT%^)`) do ( + set VS_PRODUCT_LINE_VERSION=%%v ) - set CMD_MSBUILD= exit /b :cmake From e6cba4f95eb543533cce4616a966628001950e8b Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sun, 23 Jan 2022 23:11:56 +0900 Subject: [PATCH 0909/1024] =?UTF-8?q?find-tools:=20=E7=B4=B0=E3=81=8B?= =?UTF-8?q?=E3=81=84=E4=BF=AE=E6=AD=A3=E3=82=92=E5=AE=9F=E6=96=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 変数のローカル化をやめるタイミングの変更 - 探索処理では`ARG_VSVERSION`ではなく、値が確定している`NUM_VSVERSION`を参照する - インデントに使用する文字を揃える --- tools/find-tools.bat | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tools/find-tools.bat b/tools/find-tools.bat index 3c6251332e..9113ecfeb0 100644 --- a/tools/find-tools.bat +++ b/tools/find-tools.bat @@ -2,6 +2,7 @@ setlocal if "%1" equ "clear" ( + endlocal call :clear_variables echo find-tools.bat has been cleared exit /b @@ -24,6 +25,7 @@ if not defined ARG_VSVERSION ( if defined NUM_VSVERSION ( if "%ARG_VSVERSION%" neq "%NUM_VSVERSION%" ( + endlocal call :clear_variables setlocal set "ARG_VSVERSION=%~1" @@ -85,7 +87,6 @@ set FIND_TOOLS_CALLED=1 exit /b :clear_variables - endlocal set CMD_GIT= set CMD_7Z= set CMD_HHC= @@ -221,7 +222,7 @@ exit /b :: --------------------------------------------------------------------------------------------------------------------- :msbuild :: vs2017単独インストールで導入されるvswhereには機能制限がある - if "%ARG_VSVERSION%" == "15" ( + if "%NUM_VSVERSION%" == "15" ( call :find_msbuild_legacy set CMAKE_G_PARAM=Visual Studio 15 2017 ) else ( @@ -296,7 +297,7 @@ exit /b call :find_py call :check_python_version if defined CMD_PYTHON ( - exit /b 0 + exit /b 0 ) call :find_python From e03800f30783bf4299f4b1f9a615af56d09c0c6d Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Tue, 1 Feb 2022 14:45:02 +0900 Subject: [PATCH 0910/1024] =?UTF-8?q?find-tools:=20=E3=83=89=E3=82=AD?= =?UTF-8?q?=E3=83=A5=E3=83=A1=E3=83=B3=E3=83=88=E3=81=AB=E6=8E=A2=E7=B4=A2?= =?UTF-8?q?=E3=83=AD=E3=82=B8=E3=83=83=E3=82=AF=E3=81=AE=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=E3=82=92=E5=8F=8D=E6=98=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/find-tools.md | 52 +++++++++++++++++++-------------------------- 1 file changed, 22 insertions(+), 30 deletions(-) diff --git a/tools/find-tools.md b/tools/find-tools.md index 4a81f06241..be7c961e8c 100644 --- a/tools/find-tools.md +++ b/tools/find-tools.md @@ -19,7 +19,7 @@ | Inno Setup 5 | CMD_ISCC | Inno Setup 5 | ISCC.exe | | Cppcheck | CMD_CPPCHECK | cppcheck | cppcheck.exe | | Doxygen | CMD_DOXYGEN | doxygen\bin | doxygen.exe | -| vswhere | CMD_VSWHERE | Microsoft Visual Studio\Installer | vswhere.exe | +| Visual Studio Locator | CMD_VSWHERE | Microsoft Visual Studio\Installer | vswhere.exe | | MSBuild | CMD_MSBUILD | 特殊 | MSBuild.exe | | Locale Emulator | CMD_LEPROC | なし | LEProc.exe | | Python | CMD_PYTHON | なし | py.exe (python.exe) | @@ -41,39 +41,31 @@ MSBuild以外の探索手順は同一であり、7-Zipを例に説明する。 ### ユーザーがビルドに使用する Visual Studio のバージョンを切り替える方法 -環境変数 ```ARG_VSVERSION``` の値でビルドに使用するバージョンを切り替えられる。 +環境変数 `NUM_VSVERSION` の値でビルドに使用するバージョンを切り替えられる。 -| ARG_VSVERSION | 使用される Visual Studio のバージョン | -| -------------- | ------------------------------------- | -| 空 | インストールされている Visual Studio の最新 | -| 15 | Visual Studio 2017 | -| 16 | Visual Studio 2019 | -| 2017 | Visual Studio 2017 | -| 2019 | Visual Studio 2019 | +| NUM_VSVERSION | 使用される Visual Studio のバージョン | +| -------------- | -------------------------------------- | +| (未定義) | インストールされている最新のバージョン | +| 15 | Visual Studio 2017 | +| 16 | Visual Studio 2019 | +| 17 | Visual Studio 2022 | ### 検索ロジック -1. `ARG_VSVERSION` から`VC++`のバージョン指定(`NUM_VSVERSION`)を判断する。 - 1. `ARG_VSVERSION` 未指定の場合、`15`が指定されたものとみなす。 - 1. `ARG_VSVERSION` が`2017`の場合、`15`が指定されたものとみなす。 - 1. `ARG_VSVERSION` が`2019`の場合、`16`が指定されたものとみなす。 - 1. `ARG_VSVERSION` が`latest`の場合、最新バージョンを取得する。 - 1. `ARG_VSVERSION` が上記以外の場合、`%ARG_VSVERSION%`が指定されたものとみなす。 -1. 指定されたバージョンのVC++がインストールされているかチェックする。 - 1. `vswhere -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath -version [%NUM_VSVERSION%, %NUM_VSVERSION% + 1)` を実行する。 - 1. 取得したパスが存在していたら、バージョン指定(`NUM_VSVERSION`)は正しいとみなす。 - 1. 取得したパスが存在していなかったら、最新バージョンを取得する。 -1. インストール済み`VC++`の最新バージョンを取得する。 - 1. `vswhere -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationVersion -latest` を実行する。 - 1. 取得したバージョンが指定されたものとみなす。(`NUM_VSVERSION`に代入する。) -1. 指定されたバージョンの`MsBuild.exe`を検索する。 - 1. `-find`オプションを付けて`MsBuild.exe`を検索する。(`vswhere -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe -version [%NUM_VSVERSION%, %NUM_VSVERSION% + 1)`) - 1. `vswhere` が VS2019 以降ver の場合、`MSBuild.exe` が見つかるので検索終了。 - 1. `vswhere` が VS2017 以前ver の場合、`MSBuild.exe` が見つからない(エラーになる)ので検索続行。 -1. VS2017 の `MsBuild.exe` を検索する。 - 1. VS2017 のインストールパスを検索する。(`vswhere -requires Microsoft.Component.MSBuild -property installationPath -version [15^,16^)`) - 1. VS2017 のインストールパス配下の所定位置(`%Vs2017InstallRoot%\MSBuild\15.0\Bin`)に`MSBuild.exe`が存在する場合、そのパスを `MSBuild.exe` のパスとみなす。 - この場合、バージョン指定(`NUM_VSVERSION`)に`15`が指定されたものとみなす。 +1. バッチファイルの引数をチェックする。 + 1. 引数が指定されていない場合、`NUM_VSVERSION`が定義されていればその値を、そうでなければ`latest`を指定したものとみなす。 + 2. 引数にプロダクトバージョン(例:`2019`)が指定されている場合は値をメジャーバージョンに変換する。 + `latest`を指定した場合は、実行環境にインストールされている最新のメジャーバージョンを取得する。 + 3. 指定したバージョンがインストールされているか確認し、見つからなければ引数の指定はなかったものとみなしてチェックをやり直す。 + 4. `NUM_VSVERSION`が指定されている場合に限り、設定されている値とここまでのチェックで見つかったバージョンが同じであるか確認する。 + もし異なっている場合は環境変数を初期化した上で引数チェックをやり直す。 +2. 引数チェックで決定したバージョンの MSBuild を探す。 + - Visual Studio 2017 が選択された場合 + - VS2017 のインストールパスを取得し、配下の所定位置に`MSBuild.exe`が存在する場合、そのパスを`MSBuild`のパスとして利用する。 + - CMakeのジェネレータ名を示す`CMAKE_G_PARAM`に`Visual Studio 15 2017`を設定する。 + - Visual Studio 2019 以降が選択された場合 + - Visual Studio Locator の`-find`オプションを利用して`MSBuild.exe`を検索し、見つかったパスを`MSBuild`のパスとして利用する。 + - `NUM_VSVERSION`と別途取得したプロダクトバージョンからCMakeのジェネレータ名を生成し、`CMAKE_G_PARAM`に設定する。 ### 参照 * https://github.com/Microsoft/vswhere From 2078f2653b86fd918eb35b227b2265f01f3c8293 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Tue, 1 Feb 2022 14:50:51 +0900 Subject: [PATCH 0911/1024] =?UTF-8?q?=E3=83=AA=E3=82=B9=E3=83=88=E3=81=AE?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=83=87=E3=83=B3=E3=83=88=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/find-tools.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/tools/find-tools.md b/tools/find-tools.md index be7c961e8c..4caae98260 100644 --- a/tools/find-tools.md +++ b/tools/find-tools.md @@ -53,19 +53,19 @@ MSBuild以外の探索手順は同一であり、7-Zipを例に説明する。 ### 検索ロジック 1. バッチファイルの引数をチェックする。 - 1. 引数が指定されていない場合、`NUM_VSVERSION`が定義されていればその値を、そうでなければ`latest`を指定したものとみなす。 - 2. 引数にプロダクトバージョン(例:`2019`)が指定されている場合は値をメジャーバージョンに変換する。 - `latest`を指定した場合は、実行環境にインストールされている最新のメジャーバージョンを取得する。 - 3. 指定したバージョンがインストールされているか確認し、見つからなければ引数の指定はなかったものとみなしてチェックをやり直す。 - 4. `NUM_VSVERSION`が指定されている場合に限り、設定されている値とここまでのチェックで見つかったバージョンが同じであるか確認する。 - もし異なっている場合は環境変数を初期化した上で引数チェックをやり直す。 + 1. 引数が指定されていない場合、`NUM_VSVERSION`が定義されていればその値を、そうでなければ`latest`を指定したものとみなす。 + 2. 引数にプロダクトバージョン(例:`2019`)が指定されている場合は値をメジャーバージョンに変換する。 + `latest`を指定した場合は、実行環境にインストールされている最新のメジャーバージョンを取得する。 + 3. 指定したバージョンがインストールされているか確認し、見つからなければ引数の指定はなかったものとみなしてチェックをやり直す。 + 4. `NUM_VSVERSION`が指定されている場合に限り、設定されている値とここまでのチェックで見つかったバージョンが同じであるか確認する。 + もし異なっている場合は環境変数を初期化した上で引数チェックをやり直す。 2. 引数チェックで決定したバージョンの MSBuild を探す。 - - Visual Studio 2017 が選択された場合 - - VS2017 のインストールパスを取得し、配下の所定位置に`MSBuild.exe`が存在する場合、そのパスを`MSBuild`のパスとして利用する。 - - CMakeのジェネレータ名を示す`CMAKE_G_PARAM`に`Visual Studio 15 2017`を設定する。 - - Visual Studio 2019 以降が選択された場合 - - Visual Studio Locator の`-find`オプションを利用して`MSBuild.exe`を検索し、見つかったパスを`MSBuild`のパスとして利用する。 - - `NUM_VSVERSION`と別途取得したプロダクトバージョンからCMakeのジェネレータ名を生成し、`CMAKE_G_PARAM`に設定する。 + - Visual Studio 2017 が選択された場合 + - VS2017 のインストールパスを取得し、配下の所定位置に`MSBuild.exe`が存在する場合、そのパスを`MSBuild`のパスとして利用する。 + - CMakeのジェネレータ名を示す`CMAKE_G_PARAM`に`Visual Studio 15 2017`を設定する。 + - Visual Studio 2019 以降が選択された場合 + - Visual Studio Locator の`-find`オプションを利用して`MSBuild.exe`を検索し、見つかったパスを`MSBuild`のパスとして利用する。 + - `NUM_VSVERSION`と別途取得したプロダクトバージョンからCMakeのジェネレータ名を生成し、`CMAKE_G_PARAM`に設定する。 ### 参照 * https://github.com/Microsoft/vswhere From 8230b8cec8e81140470223ed2d748eb3c35e5134 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Fri, 4 Feb 2022 02:26:18 +0900 Subject: [PATCH 0912/1024] =?UTF-8?q?=E3=83=A6=E3=83=BC=E3=82=B6=E3=83=BC?= =?UTF-8?q?=E3=81=8C=E7=A2=BA=E8=AA=8D=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=B3?= =?UTF-8?q?=E3=83=94=E3=83=BC=E3=83=A9=E3=82=A4=E3=83=88=E8=A1=A8=E8=A8=98?= =?UTF-8?q?=E3=82=92=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LICENSE | 2 +- sakura_core/sakura_rc.rc2 | 2 +- sakura_lang_en_US/sakura_lang_rc.rc2 | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/LICENSE b/LICENSE index 9f05afd0d9..5281dd5e09 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ zlib License -Copyright (C) 2018-2021, Sakura Editor Organization +Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/sakura_rc.rc2 b/sakura_core/sakura_rc.rc2 index d1fe93e59c..0ce44a256e 100644 --- a/sakura_core/sakura_rc.rc2 +++ b/sakura_core/sakura_rc.rc2 @@ -27,7 +27,7 @@ #define _GSTR_APPNAME _APP_NAME_1 _APP_NAME_2 _APP_NAME_3 _APP_NAME_4 #endif -#define S_COPYRIGHT "Copyright (C) 1998-2021 by Norio Nakatani & Collaborators" +#define S_COPYRIGHT "Copyright (C) 1998-2022 by Norio Nakatani & Collaborators" ///////////////////////////////////////////////////////////////////////////// // diff --git a/sakura_lang_en_US/sakura_lang_rc.rc2 b/sakura_lang_en_US/sakura_lang_rc.rc2 index d5a081a36f..9e41b69edd 100644 --- a/sakura_lang_en_US/sakura_lang_rc.rc2 +++ b/sakura_lang_en_US/sakura_lang_rc.rc2 @@ -27,8 +27,8 @@ #define _GSTR_APPNAME _APP_NAME_1 _APP_NAME_2 _APP_NAME_3 _APP_NAME_4 #endif -#define S_COPYRIGHT "Copyright (C) 1998-2021 by Norio Nakatani & Collaborators" -#define S_COPYRIGHT_TRANSLATION "Copyright (C) 2011-2021 by Lucien & Collaborators" +#define S_COPYRIGHT "Copyright (C) 1998-2022 by Norio Nakatani & Collaborators" +#define S_COPYRIGHT_TRANSLATION "Copyright (C) 2011-2022 by Lucien & Collaborators" ///////////////////////////////////////////////////////////////////////////// // From 737a8c424a2bb1d5d7b90f5e6ee93d3861c277ad Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sat, 5 Feb 2022 16:47:22 +0900 Subject: [PATCH 0913/1024] =?UTF-8?q?=E3=82=BD=E3=83=BC=E3=82=B9=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AE=E3=82=B3=E3=83=94=E3=83=BC?= =?UTF-8?q?=E3=83=A9=E3=82=A4=E3=83=88=E8=A1=A8=E8=A8=98=E3=82=92=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HeaderMake/HeaderMake.cpp | 2 +- sakura_core/CAutoReloadAgent.cpp | 2 +- sakura_core/CAutoReloadAgent.h | 2 +- sakura_core/CAutoSaveAgent.cpp | 2 +- sakura_core/CAutoSaveAgent.h | 2 +- sakura_core/CBackupAgent.cpp | 2 +- sakura_core/CBackupAgent.h | 2 +- sakura_core/CCodeChecker.cpp | 2 +- sakura_core/CCodeChecker.h | 2 +- sakura_core/CDataProfile.cpp | 2 +- sakura_core/CDataProfile.h | 2 +- sakura_core/CDicMgr.cpp | 2 +- sakura_core/CDicMgr.h | 2 +- sakura_core/CEditApp.cpp | 2 +- sakura_core/CEditApp.h | 2 +- sakura_core/CEol.cpp | 2 +- sakura_core/CEol.h | 2 +- sakura_core/CFileExt.cpp | 2 +- sakura_core/CFileExt.h | 2 +- sakura_core/CGrepAgent.cpp | 2 +- sakura_core/CGrepAgent.h | 2 +- sakura_core/CGrepEnumFileBase.h | 2 +- sakura_core/CGrepEnumFiles.h | 2 +- sakura_core/CGrepEnumFilterFiles.h | 2 +- sakura_core/CGrepEnumFilterFolders.h | 2 +- sakura_core/CGrepEnumFolders.h | 2 +- sakura_core/CGrepEnumKeys.h | 2 +- sakura_core/CHokanMgr.cpp | 2 +- sakura_core/CHokanMgr.h | 2 +- sakura_core/CKeyWordSetMgr.cpp | 2 +- sakura_core/CKeyWordSetMgr.h | 2 +- sakura_core/CLoadAgent.cpp | 2 +- sakura_core/CLoadAgent.h | 2 +- sakura_core/CMarkMgr.cpp | 2 +- sakura_core/CMarkMgr.h | 2 +- sakura_core/COpe.cpp | 2 +- sakura_core/COpe.h | 2 +- sakura_core/COpeBlk.cpp | 2 +- sakura_core/COpeBlk.h | 2 +- sakura_core/COpeBuf.cpp | 2 +- sakura_core/COpeBuf.h | 2 +- sakura_core/CProfile.cpp | 2 +- sakura_core/CProfile.h | 2 +- sakura_core/CPropertyManager.cpp | 2 +- sakura_core/CPropertyManager.h | 2 +- sakura_core/CReadManager.cpp | 2 +- sakura_core/CReadManager.h | 2 +- sakura_core/CRegexKeyword.cpp | 2 +- sakura_core/CRegexKeyword.h | 2 +- sakura_core/CSaveAgent.cpp | 2 +- sakura_core/CSaveAgent.h | 2 +- sakura_core/CSearchAgent.cpp | 2 +- sakura_core/CSearchAgent.h | 2 +- sakura_core/CSelectLang.cpp | 2 +- sakura_core/CSelectLang.h | 2 +- sakura_core/CSortedTagJumpList.cpp | 2 +- sakura_core/CSortedTagJumpList.h | 2 +- sakura_core/CWriteManager.cpp | 2 +- sakura_core/CWriteManager.h | 2 +- sakura_core/EditInfo.cpp | 2 +- sakura_core/EditInfo.h | 2 +- sakura_core/GrepInfo.cpp | 2 +- sakura_core/GrepInfo.h | 2 +- sakura_core/StdAfx.cpp | 2 +- sakura_core/StdAfx.h | 2 +- sakura_core/String_define.h | 2 +- sakura_core/_main/CAppMode.cpp | 2 +- sakura_core/_main/CAppMode.h | 2 +- sakura_core/_main/CCommandLine.cpp | 2 +- sakura_core/_main/CCommandLine.h | 2 +- sakura_core/_main/CControlProcess.cpp | 2 +- sakura_core/_main/CControlProcess.h | 2 +- sakura_core/_main/CControlTray.cpp | 2 +- sakura_core/_main/CControlTray.h | 2 +- sakura_core/_main/CMutex.h | 2 +- sakura_core/_main/CNormalProcess.cpp | 2 +- sakura_core/_main/CNormalProcess.h | 2 +- sakura_core/_main/CProcess.cpp | 2 +- sakura_core/_main/CProcess.h | 2 +- sakura_core/_main/CProcessFactory.cpp | 2 +- sakura_core/_main/CProcessFactory.h | 2 +- sakura_core/_main/WinMain.cpp | 2 +- sakura_core/_main/global.cpp | 2 +- sakura_core/_main/global.h | 2 +- sakura_core/_os/CClipboard.cpp | 2 +- sakura_core/_os/CClipboard.h | 2 +- sakura_core/_os/CDropTarget.cpp | 2 +- sakura_core/_os/CDropTarget.h | 2 +- sakura_core/_os/OleTypes.h | 2 +- sakura_core/apiwrap/CommonControl.h | 2 +- sakura_core/apiwrap/StdApi.cpp | 2 +- sakura_core/apiwrap/StdApi.h | 2 +- sakura_core/apiwrap/StdControl.cpp | 2 +- sakura_core/apiwrap/StdControl.h | 2 +- sakura_core/basis/CErrorInfo.cpp | 2 +- sakura_core/basis/CErrorInfo.h | 2 +- sakura_core/basis/CLaxInteger.cpp | 2 +- sakura_core/basis/CLaxInteger.h | 2 +- sakura_core/basis/CMyPoint.cpp | 2 +- sakura_core/basis/CMyPoint.h | 2 +- sakura_core/basis/CMyRect.cpp | 2 +- sakura_core/basis/CMyRect.h | 2 +- sakura_core/basis/CMySize.cpp | 2 +- sakura_core/basis/CMySize.h | 2 +- sakura_core/basis/CMyString.cpp | 2 +- sakura_core/basis/CMyString.h | 2 +- sakura_core/basis/CStrictInteger.cpp | 2 +- sakura_core/basis/CStrictInteger.h | 2 +- sakura_core/basis/CStrictPoint.cpp | 2 +- sakura_core/basis/CStrictPoint.h | 2 +- sakura_core/basis/CStrictRange.cpp | 2 +- sakura_core/basis/CStrictRange.h | 2 +- sakura_core/basis/CStrictRect.cpp | 2 +- sakura_core/basis/CStrictRect.h | 2 +- sakura_core/basis/SakuraBasis.cpp | 2 +- sakura_core/basis/SakuraBasis.h | 2 +- sakura_core/basis/TComImpl.hpp | 2 +- sakura_core/basis/_com_raise_error.cpp | 2 +- sakura_core/basis/primitive.h | 2 +- sakura_core/charset/CCesu8.cpp | 2 +- sakura_core/charset/CCesu8.h | 2 +- sakura_core/charset/CCodeBase.cpp | 2 +- sakura_core/charset/CCodeBase.h | 2 +- sakura_core/charset/CCodeFactory.cpp | 2 +- sakura_core/charset/CCodeFactory.h | 2 +- sakura_core/charset/CCodeMediator.cpp | 2 +- sakura_core/charset/CCodeMediator.h | 2 +- sakura_core/charset/CCodePage.cpp | 2 +- sakura_core/charset/CCodePage.h | 2 +- sakura_core/charset/CESI.cpp | 2 +- sakura_core/charset/CESI.h | 2 +- sakura_core/charset/CEuc.cpp | 2 +- sakura_core/charset/CEuc.h | 2 +- sakura_core/charset/CJis.cpp | 2 +- sakura_core/charset/CJis.h | 2 +- sakura_core/charset/CLatin1.cpp | 2 +- sakura_core/charset/CLatin1.h | 2 +- sakura_core/charset/CShiftJis.cpp | 2 +- sakura_core/charset/CShiftJis.h | 2 +- sakura_core/charset/CUnicode.cpp | 2 +- sakura_core/charset/CUnicode.h | 2 +- sakura_core/charset/CUnicodeBe.cpp | 2 +- sakura_core/charset/CUnicodeBe.h | 2 +- sakura_core/charset/CUtf7.cpp | 2 +- sakura_core/charset/CUtf7.h | 2 +- sakura_core/charset/CUtf8.cpp | 2 +- sakura_core/charset/CUtf8.h | 2 +- sakura_core/charset/CharsetDetector.cpp | 2 +- sakura_core/charset/CharsetDetector.h | 2 +- sakura_core/charset/charcode.cpp | 2 +- sakura_core/charset/charcode.h | 2 +- sakura_core/charset/charset.cpp | 2 +- sakura_core/charset/charset.h | 2 +- sakura_core/charset/codechecker.cpp | 2 +- sakura_core/charset/codechecker.h | 2 +- sakura_core/charset/codeutil.cpp | 2 +- sakura_core/charset/codeutil.h | 2 +- sakura_core/cmd/CViewCommander.cpp | 2 +- sakura_core/cmd/CViewCommander.h | 2 +- sakura_core/cmd/CViewCommander_Bookmark.cpp | 2 +- sakura_core/cmd/CViewCommander_Clipboard.cpp | 2 +- sakura_core/cmd/CViewCommander_Convert.cpp | 2 +- sakura_core/cmd/CViewCommander_Cursor.cpp | 2 +- sakura_core/cmd/CViewCommander_CustMenu.cpp | 2 +- sakura_core/cmd/CViewCommander_Diff.cpp | 2 +- sakura_core/cmd/CViewCommander_Edit.cpp | 2 +- sakura_core/cmd/CViewCommander_Edit_advanced.cpp | 2 +- sakura_core/cmd/CViewCommander_Edit_word_line.cpp | 2 +- sakura_core/cmd/CViewCommander_File.cpp | 2 +- sakura_core/cmd/CViewCommander_Grep.cpp | 2 +- sakura_core/cmd/CViewCommander_Insert.cpp | 2 +- sakura_core/cmd/CViewCommander_Macro.cpp | 2 +- sakura_core/cmd/CViewCommander_ModeChange.cpp | 2 +- sakura_core/cmd/CViewCommander_Outline.cpp | 2 +- sakura_core/cmd/CViewCommander_Search.cpp | 2 +- sakura_core/cmd/CViewCommander_Select.cpp | 2 +- sakura_core/cmd/CViewCommander_Settings.cpp | 2 +- sakura_core/cmd/CViewCommander_Support.cpp | 2 +- sakura_core/cmd/CViewCommander_TagJump.cpp | 2 +- sakura_core/cmd/CViewCommander_Window.cpp | 2 +- sakura_core/cmd/CViewCommander_inline.h | 2 +- sakura_core/config/app_constants.h | 2 +- sakura_core/config/build_config.cpp | 2 +- sakura_core/config/build_config.h | 2 +- sakura_core/config/maxdata.h | 2 +- sakura_core/config/system_constants.h | 2 +- sakura_core/convert/CConvert.cpp | 2 +- sakura_core/convert/CConvert.h | 2 +- sakura_core/convert/CConvert_CodeAutoToSjis.cpp | 2 +- sakura_core/convert/CConvert_CodeAutoToSjis.h | 2 +- sakura_core/convert/CConvert_CodeFromSjis.cpp | 2 +- sakura_core/convert/CConvert_CodeFromSjis.h | 2 +- sakura_core/convert/CConvert_CodeToSjis.cpp | 2 +- sakura_core/convert/CConvert_CodeToSjis.h | 2 +- sakura_core/convert/CConvert_HaneisuToZeneisu.cpp | 2 +- sakura_core/convert/CConvert_HaneisuToZeneisu.h | 2 +- sakura_core/convert/CConvert_HankataToZenhira.cpp | 2 +- sakura_core/convert/CConvert_HankataToZenhira.h | 2 +- sakura_core/convert/CConvert_HankataToZenkata.cpp | 2 +- sakura_core/convert/CConvert_HankataToZenkata.h | 2 +- sakura_core/convert/CConvert_SpaceToTab.cpp | 2 +- sakura_core/convert/CConvert_SpaceToTab.h | 2 +- sakura_core/convert/CConvert_TabToSpace.cpp | 2 +- sakura_core/convert/CConvert_TabToSpace.h | 2 +- sakura_core/convert/CConvert_ToHankaku.cpp | 2 +- sakura_core/convert/CConvert_ToHankaku.h | 2 +- sakura_core/convert/CConvert_ToLower.cpp | 2 +- sakura_core/convert/CConvert_ToLower.h | 2 +- sakura_core/convert/CConvert_ToUpper.cpp | 2 +- sakura_core/convert/CConvert_ToUpper.h | 2 +- sakura_core/convert/CConvert_ToZenhira.cpp | 2 +- sakura_core/convert/CConvert_ToZenhira.h | 2 +- sakura_core/convert/CConvert_ToZenkata.cpp | 2 +- sakura_core/convert/CConvert_ToZenkata.h | 2 +- sakura_core/convert/CConvert_Trim.cpp | 2 +- sakura_core/convert/CConvert_Trim.h | 2 +- sakura_core/convert/CConvert_ZeneisuToHaneisu.cpp | 2 +- sakura_core/convert/CConvert_ZeneisuToHaneisu.h | 2 +- sakura_core/convert/CConvert_ZenkataToHankata.cpp | 2 +- sakura_core/convert/CConvert_ZenkataToHankata.h | 2 +- sakura_core/convert/CDecode.h | 2 +- sakura_core/convert/CDecode_Base64Decode.cpp | 2 +- sakura_core/convert/CDecode_Base64Decode.h | 2 +- sakura_core/convert/CDecode_UuDecode.cpp | 2 +- sakura_core/convert/CDecode_UuDecode.h | 2 +- sakura_core/convert/convert_util.cpp | 2 +- sakura_core/convert/convert_util.h | 2 +- sakura_core/convert/convert_util2.cpp | 2 +- sakura_core/convert/convert_util2.h | 2 +- sakura_core/debug/CRunningTimer.cpp | 2 +- sakura_core/debug/CRunningTimer.h | 2 +- sakura_core/debug/Debug1.cpp | 2 +- sakura_core/debug/Debug1.h | 2 +- sakura_core/debug/Debug2.cpp | 2 +- sakura_core/debug/Debug2.h | 2 +- sakura_core/debug/Debug3.cpp | 2 +- sakura_core/debug/Debug3.h | 2 +- sakura_core/dlg/CDialog.cpp | 2 +- sakura_core/dlg/CDialog.h | 2 +- sakura_core/dlg/CDlgAbout.cpp | 2 +- sakura_core/dlg/CDlgAbout.h | 2 +- sakura_core/dlg/CDlgCancel.cpp | 2 +- sakura_core/dlg/CDlgCancel.h | 2 +- sakura_core/dlg/CDlgCompare.cpp | 2 +- sakura_core/dlg/CDlgCompare.h | 2 +- sakura_core/dlg/CDlgCtrlCode.cpp | 2 +- sakura_core/dlg/CDlgCtrlCode.h | 2 +- sakura_core/dlg/CDlgDiff.cpp | 2 +- sakura_core/dlg/CDlgDiff.h | 2 +- sakura_core/dlg/CDlgExec.cpp | 2 +- sakura_core/dlg/CDlgExec.h | 2 +- sakura_core/dlg/CDlgFavorite.cpp | 2 +- sakura_core/dlg/CDlgFavorite.h | 2 +- sakura_core/dlg/CDlgFileUpdateQuery.cpp | 2 +- sakura_core/dlg/CDlgFileUpdateQuery.h | 2 +- sakura_core/dlg/CDlgFind.cpp | 2 +- sakura_core/dlg/CDlgFind.h | 2 +- sakura_core/dlg/CDlgGrep.cpp | 2 +- sakura_core/dlg/CDlgGrep.h | 2 +- sakura_core/dlg/CDlgGrepReplace.cpp | 2 +- sakura_core/dlg/CDlgGrepReplace.h | 2 +- sakura_core/dlg/CDlgInput1.cpp | 2 +- sakura_core/dlg/CDlgInput1.h | 2 +- sakura_core/dlg/CDlgJump.cpp | 2 +- sakura_core/dlg/CDlgJump.h | 2 +- sakura_core/dlg/CDlgOpenFile.cpp | 2 +- sakura_core/dlg/CDlgOpenFile.h | 2 +- sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp | 2 +- sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp | 2 +- sakura_core/dlg/CDlgPluginOption.cpp | 2 +- sakura_core/dlg/CDlgPluginOption.h | 2 +- sakura_core/dlg/CDlgPrintSetting.cpp | 2 +- sakura_core/dlg/CDlgPrintSetting.h | 2 +- sakura_core/dlg/CDlgProfileMgr.cpp | 2 +- sakura_core/dlg/CDlgProfileMgr.h | 2 +- sakura_core/dlg/CDlgProperty.cpp | 2 +- sakura_core/dlg/CDlgProperty.h | 2 +- sakura_core/dlg/CDlgReplace.cpp | 2 +- sakura_core/dlg/CDlgReplace.h | 2 +- sakura_core/dlg/CDlgSetCharSet.cpp | 2 +- sakura_core/dlg/CDlgSetCharSet.h | 2 +- sakura_core/dlg/CDlgTagJumpList.cpp | 2 +- sakura_core/dlg/CDlgTagJumpList.h | 2 +- sakura_core/dlg/CDlgTagsMake.cpp | 2 +- sakura_core/dlg/CDlgTagsMake.h | 2 +- sakura_core/dlg/CDlgWinSize.cpp | 2 +- sakura_core/dlg/CDlgWinSize.h | 2 +- sakura_core/dlg/CDlgWindowList.cpp | 2 +- sakura_core/dlg/CDlgWindowList.h | 2 +- sakura_core/doc/CBlockComment.cpp | 2 +- sakura_core/doc/CBlockComment.h | 2 +- sakura_core/doc/CDocEditor.cpp | 2 +- sakura_core/doc/CDocEditor.h | 2 +- sakura_core/doc/CDocFile.cpp | 2 +- sakura_core/doc/CDocFile.h | 2 +- sakura_core/doc/CDocFileOperation.cpp | 2 +- sakura_core/doc/CDocFileOperation.h | 2 +- sakura_core/doc/CDocListener.cpp | 2 +- sakura_core/doc/CDocListener.h | 2 +- sakura_core/doc/CDocLocker.cpp | 2 +- sakura_core/doc/CDocLocker.h | 2 +- sakura_core/doc/CDocOutline.cpp | 2 +- sakura_core/doc/CDocOutline.h | 2 +- sakura_core/doc/CDocReader.cpp | 2 +- sakura_core/doc/CDocReader.h | 2 +- sakura_core/doc/CDocType.cpp | 2 +- sakura_core/doc/CDocType.h | 2 +- sakura_core/doc/CDocTypeSetting.cpp | 2 +- sakura_core/doc/CDocTypeSetting.h | 2 +- sakura_core/doc/CDocVisitor.cpp | 2 +- sakura_core/doc/CDocVisitor.h | 2 +- sakura_core/doc/CEditDoc.cpp | 2 +- sakura_core/doc/CEditDoc.h | 2 +- sakura_core/doc/CLineComment.cpp | 2 +- sakura_core/doc/CLineComment.h | 2 +- sakura_core/doc/layout/CLayout.cpp | 2 +- sakura_core/doc/layout/CLayout.h | 2 +- sakura_core/doc/layout/CLayoutExInfo.h | 2 +- sakura_core/doc/layout/CLayoutMgr.cpp | 2 +- sakura_core/doc/layout/CLayoutMgr.h | 2 +- sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp | 2 +- sakura_core/doc/layout/CLayoutMgr_New.cpp | 2 +- sakura_core/doc/layout/CLayoutMgr_New2.cpp | 2 +- sakura_core/doc/layout/CTsvModeInfo.cpp | 2 +- sakura_core/doc/layout/CTsvModeInfo.h | 2 +- sakura_core/doc/logic/CDocLine.cpp | 2 +- sakura_core/doc/logic/CDocLine.h | 2 +- sakura_core/doc/logic/CDocLineMgr.cpp | 2 +- sakura_core/doc/logic/CDocLineMgr.h | 2 +- sakura_core/docplus/CBookmarkManager.cpp | 2 +- sakura_core/docplus/CBookmarkManager.h | 2 +- sakura_core/docplus/CDiffManager.cpp | 2 +- sakura_core/docplus/CDiffManager.h | 2 +- sakura_core/docplus/CFuncListManager.cpp | 2 +- sakura_core/docplus/CFuncListManager.h | 2 +- sakura_core/docplus/CModifyManager.cpp | 2 +- sakura_core/docplus/CModifyManager.h | 2 +- sakura_core/env/CAppNodeManager.cpp | 2 +- sakura_core/env/CAppNodeManager.h | 2 +- sakura_core/env/CDocTypeManager.cpp | 2 +- sakura_core/env/CDocTypeManager.h | 2 +- sakura_core/env/CFileNameManager.cpp | 2 +- sakura_core/env/CFileNameManager.h | 2 +- sakura_core/env/CFormatManager.cpp | 2 +- sakura_core/env/CFormatManager.h | 2 +- sakura_core/env/CHelpManager.cpp | 2 +- sakura_core/env/CHelpManager.h | 2 +- sakura_core/env/CSakuraEnvironment.cpp | 2 +- sakura_core/env/CSakuraEnvironment.h | 2 +- sakura_core/env/CSearchKeywordManager.cpp | 2 +- sakura_core/env/CSearchKeywordManager.h | 2 +- sakura_core/env/CShareData.cpp | 2 +- sakura_core/env/CShareData.h | 2 +- sakura_core/env/CShareData_IO.cpp | 2 +- sakura_core/env/CShareData_IO.h | 2 +- sakura_core/env/CTagJumpManager.cpp | 2 +- sakura_core/env/CTagJumpManager.h | 2 +- sakura_core/env/CommonSetting.cpp | 2 +- sakura_core/env/CommonSetting.h | 2 +- sakura_core/env/DLLSHAREDATA.cpp | 2 +- sakura_core/env/DLLSHAREDATA.h | 2 +- sakura_core/extmodule/CBregexp.cpp | 2 +- sakura_core/extmodule/CBregexp.h | 2 +- sakura_core/extmodule/CBregexpDll2.cpp | 2 +- sakura_core/extmodule/CBregexpDll2.h | 2 +- sakura_core/extmodule/CDllHandler.cpp | 2 +- sakura_core/extmodule/CDllHandler.h | 2 +- sakura_core/extmodule/CHtmlHelp.cpp | 2 +- sakura_core/extmodule/CHtmlHelp.h | 2 +- sakura_core/extmodule/CIcu4cI18n.cpp | 2 +- sakura_core/extmodule/CIcu4cI18n.h | 2 +- sakura_core/extmodule/CMigemo.cpp | 2 +- sakura_core/extmodule/CMigemo.h | 2 +- sakura_core/extmodule/CUchardet.cpp | 2 +- sakura_core/extmodule/CUchardet.h | 2 +- sakura_core/extmodule/CUxTheme.cpp | 2 +- sakura_core/extmodule/CUxTheme.h | 2 +- sakura_core/func/CFuncKeyWnd.cpp | 2 +- sakura_core/func/CFuncKeyWnd.h | 2 +- sakura_core/func/CFuncLookup.cpp | 2 +- sakura_core/func/CFuncLookup.h | 2 +- sakura_core/func/CKeyBind.cpp | 2 +- sakura_core/func/CKeyBind.h | 2 +- sakura_core/func/Funccode.cpp | 2 +- sakura_core/func/Funccode.h | 2 +- sakura_core/io/CBinaryStream.cpp | 2 +- sakura_core/io/CBinaryStream.h | 2 +- sakura_core/io/CFile.cpp | 2 +- sakura_core/io/CFile.h | 2 +- sakura_core/io/CFileLoad.cpp | 2 +- sakura_core/io/CFileLoad.h | 2 +- sakura_core/io/CIoBridge.cpp | 2 +- sakura_core/io/CIoBridge.h | 2 +- sakura_core/io/CStream.cpp | 2 +- sakura_core/io/CStream.h | 2 +- sakura_core/io/CTextStream.cpp | 2 +- sakura_core/io/CTextStream.h | 2 +- sakura_core/io/CZipFile.cpp | 2 +- sakura_core/io/CZipFile.h | 2 +- sakura_core/macro/CCookieManager.cpp | 2 +- sakura_core/macro/CCookieManager.h | 2 +- sakura_core/macro/CEditorIfObj.cpp | 2 +- sakura_core/macro/CEditorIfObj.h | 2 +- sakura_core/macro/CIfObj.cpp | 2 +- sakura_core/macro/CIfObj.h | 2 +- sakura_core/macro/CKeyMacroMgr.cpp | 2 +- sakura_core/macro/CKeyMacroMgr.h | 2 +- sakura_core/macro/CMacro.cpp | 2 +- sakura_core/macro/CMacro.h | 2 +- sakura_core/macro/CMacroFactory.cpp | 2 +- sakura_core/macro/CMacroFactory.h | 2 +- sakura_core/macro/CMacroManagerBase.cpp | 2 +- sakura_core/macro/CMacroManagerBase.h | 2 +- sakura_core/macro/CPPA.cpp | 2 +- sakura_core/macro/CPPA.h | 2 +- sakura_core/macro/CPPAMacroMgr.cpp | 2 +- sakura_core/macro/CPPAMacroMgr.h | 2 +- sakura_core/macro/CSMacroMgr.cpp | 2 +- sakura_core/macro/CSMacroMgr.h | 2 +- sakura_core/macro/CWSH.cpp | 2 +- sakura_core/macro/CWSH.h | 2 +- sakura_core/macro/CWSHIfObj.cpp | 2 +- sakura_core/macro/CWSHIfObj.h | 2 +- sakura_core/macro/CWSHManager.cpp | 2 +- sakura_core/macro/CWSHManager.h | 2 +- sakura_core/mem/CMemory.cpp | 2 +- sakura_core/mem/CMemory.h | 2 +- sakura_core/mem/CMemoryIterator.h | 2 +- sakura_core/mem/CNative.cpp | 2 +- sakura_core/mem/CNative.h | 2 +- sakura_core/mem/CNativeA.cpp | 2 +- sakura_core/mem/CNativeA.h | 2 +- sakura_core/mem/CNativeW.cpp | 2 +- sakura_core/mem/CNativeW.h | 2 +- sakura_core/mem/CPoolResource.h | 2 +- sakura_core/mem/CRecycledBuffer.cpp | 2 +- sakura_core/mem/CRecycledBuffer.h | 2 +- sakura_core/mfclike/CMyWnd.cpp | 2 +- sakura_core/mfclike/CMyWnd.h | 2 +- sakura_core/outline/CDlgFileTree.cpp | 2 +- sakura_core/outline/CDlgFileTree.h | 2 +- sakura_core/outline/CDlgFuncList.cpp | 2 +- sakura_core/outline/CDlgFuncList.h | 2 +- sakura_core/outline/CFuncInfo.cpp | 2 +- sakura_core/outline/CFuncInfo.h | 2 +- sakura_core/outline/CFuncInfoArr.cpp | 2 +- sakura_core/outline/CFuncInfoArr.h | 2 +- sakura_core/parse/CWordParse.cpp | 2 +- sakura_core/parse/CWordParse.h | 2 +- sakura_core/plugin/CComplementIfObj.h | 2 +- sakura_core/plugin/CDllPlugin.cpp | 2 +- sakura_core/plugin/CDllPlugin.h | 2 +- sakura_core/plugin/CJackManager.cpp | 2 +- sakura_core/plugin/CJackManager.h | 2 +- sakura_core/plugin/COutlineIfObj.h | 2 +- sakura_core/plugin/CPlugin.cpp | 2 +- sakura_core/plugin/CPlugin.h | 2 +- sakura_core/plugin/CPluginIfObj.h | 2 +- sakura_core/plugin/CPluginManager.cpp | 2 +- sakura_core/plugin/CPluginManager.h | 2 +- sakura_core/plugin/CSmartIndentIfObj.h | 2 +- sakura_core/plugin/CWSHPlugin.cpp | 2 +- sakura_core/plugin/CWSHPlugin.h | 2 +- sakura_core/print/CPrint.cpp | 2 +- sakura_core/print/CPrint.h | 2 +- sakura_core/print/CPrintPreview.cpp | 2 +- sakura_core/print/CPrintPreview.h | 2 +- sakura_core/prop/CPropComBackup.cpp | 2 +- sakura_core/prop/CPropComCustmenu.cpp | 2 +- sakura_core/prop/CPropComEdit.cpp | 2 +- sakura_core/prop/CPropComFile.cpp | 2 +- sakura_core/prop/CPropComFileName.cpp | 2 +- sakura_core/prop/CPropComFormat.cpp | 2 +- sakura_core/prop/CPropComGeneral.cpp | 2 +- sakura_core/prop/CPropComGrep.cpp | 2 +- sakura_core/prop/CPropComHelper.cpp | 2 +- sakura_core/prop/CPropComKeybind.cpp | 2 +- sakura_core/prop/CPropComKeyword.cpp | 2 +- sakura_core/prop/CPropComMacro.cpp | 2 +- sakura_core/prop/CPropComMainMenu.cpp | 2 +- sakura_core/prop/CPropComPlugin.cpp | 2 +- sakura_core/prop/CPropComStatusbar.cpp | 2 +- sakura_core/prop/CPropComTab.cpp | 2 +- sakura_core/prop/CPropComToolbar.cpp | 2 +- sakura_core/prop/CPropComWin.cpp | 2 +- sakura_core/prop/CPropCommon.cpp | 2 +- sakura_core/prop/CPropCommon.h | 2 +- sakura_core/recent/CMRUFile.cpp | 2 +- sakura_core/recent/CMRUFile.h | 2 +- sakura_core/recent/CMRUFolder.cpp | 2 +- sakura_core/recent/CMRUFolder.h | 2 +- sakura_core/recent/CMruListener.cpp | 2 +- sakura_core/recent/CMruListener.h | 2 +- sakura_core/recent/CRecent.cpp | 2 +- sakura_core/recent/CRecent.h | 2 +- sakura_core/recent/CRecentCmd.cpp | 2 +- sakura_core/recent/CRecentCmd.h | 2 +- sakura_core/recent/CRecentCurDir.cpp | 2 +- sakura_core/recent/CRecentCurDir.h | 2 +- sakura_core/recent/CRecentEditNode.cpp | 2 +- sakura_core/recent/CRecentEditNode.h | 2 +- sakura_core/recent/CRecentExceptMru.cpp | 2 +- sakura_core/recent/CRecentExceptMru.h | 2 +- sakura_core/recent/CRecentExcludeFile.cpp | 2 +- sakura_core/recent/CRecentExcludeFile.h | 2 +- sakura_core/recent/CRecentExcludeFolder.cpp | 2 +- sakura_core/recent/CRecentExcludeFolder.h | 2 +- sakura_core/recent/CRecentFile.cpp | 2 +- sakura_core/recent/CRecentFile.h | 2 +- sakura_core/recent/CRecentFolder.cpp | 2 +- sakura_core/recent/CRecentFolder.h | 2 +- sakura_core/recent/CRecentGrepFile.cpp | 2 +- sakura_core/recent/CRecentGrepFile.h | 2 +- sakura_core/recent/CRecentGrepFolder.cpp | 2 +- sakura_core/recent/CRecentGrepFolder.h | 2 +- sakura_core/recent/CRecentImp.cpp | 2 +- sakura_core/recent/CRecentImp.h | 2 +- sakura_core/recent/CRecentReplace.cpp | 2 +- sakura_core/recent/CRecentReplace.h | 2 +- sakura_core/recent/CRecentSearch.cpp | 2 +- sakura_core/recent/CRecentSearch.h | 2 +- sakura_core/recent/CRecentTagjumpKeyword.cpp | 2 +- sakura_core/recent/CRecentTagjumpKeyword.h | 2 +- sakura_core/recent/SShare_History.h | 2 +- sakura_core/typeprop/CDlgKeywordSelect.cpp | 2 +- sakura_core/typeprop/CDlgKeywordSelect.h | 2 +- sakura_core/typeprop/CDlgSameColor.cpp | 2 +- sakura_core/typeprop/CDlgSameColor.h | 2 +- sakura_core/typeprop/CDlgTypeAscertain.cpp | 2 +- sakura_core/typeprop/CDlgTypeAscertain.h | 2 +- sakura_core/typeprop/CDlgTypeList.cpp | 2 +- sakura_core/typeprop/CDlgTypeList.h | 2 +- sakura_core/typeprop/CImpExpManager.cpp | 2 +- sakura_core/typeprop/CImpExpManager.h | 2 +- sakura_core/typeprop/CPropTypes.cpp | 2 +- sakura_core/typeprop/CPropTypes.h | 2 +- sakura_core/typeprop/CPropTypesColor.cpp | 2 +- sakura_core/typeprop/CPropTypesKeyHelp.cpp | 2 +- sakura_core/typeprop/CPropTypesRegex.cpp | 2 +- sakura_core/typeprop/CPropTypesScreen.cpp | 2 +- sakura_core/typeprop/CPropTypesSupport.cpp | 2 +- sakura_core/typeprop/CPropTypesWindow.cpp | 2 +- sakura_core/types/CType.cpp | 2 +- sakura_core/types/CType.h | 2 +- sakura_core/types/CTypeSupport.cpp | 2 +- sakura_core/types/CTypeSupport.h | 2 +- sakura_core/types/CType_Asm.cpp | 2 +- sakura_core/types/CType_Awk.cpp | 2 +- sakura_core/types/CType_Basis.cpp | 2 +- sakura_core/types/CType_Cobol.cpp | 2 +- sakura_core/types/CType_CorbaIdl.cpp | 2 +- sakura_core/types/CType_Cpp.cpp | 2 +- sakura_core/types/CType_Dos.cpp | 2 +- sakura_core/types/CType_Erlang.cpp | 2 +- sakura_core/types/CType_Html.cpp | 2 +- sakura_core/types/CType_Ini.cpp | 2 +- sakura_core/types/CType_Java.cpp | 2 +- sakura_core/types/CType_Others.cpp | 2 +- sakura_core/types/CType_Pascal.cpp | 2 +- sakura_core/types/CType_Perl.cpp | 2 +- sakura_core/types/CType_Python.cpp | 2 +- sakura_core/types/CType_Rich.cpp | 2 +- sakura_core/types/CType_Sql.cpp | 2 +- sakura_core/types/CType_Tex.cpp | 2 +- sakura_core/types/CType_Text.cpp | 2 +- sakura_core/types/CType_Vb.cpp | 2 +- sakura_core/uiparts/CGraphics.cpp | 2 +- sakura_core/uiparts/CGraphics.h | 2 +- sakura_core/uiparts/CImageListMgr.cpp | 2 +- sakura_core/uiparts/CImageListMgr.h | 2 +- sakura_core/uiparts/CMenuDrawer.cpp | 2 +- sakura_core/uiparts/CMenuDrawer.h | 2 +- sakura_core/uiparts/CSoundSet.cpp | 2 +- sakura_core/uiparts/CSoundSet.h | 2 +- sakura_core/uiparts/CVisualProgress.cpp | 2 +- sakura_core/uiparts/CVisualProgress.h | 2 +- sakura_core/uiparts/CWaitCursor.cpp | 2 +- sakura_core/uiparts/CWaitCursor.h | 2 +- sakura_core/uiparts/HandCursor.h | 2 +- sakura_core/util/MessageBoxF.cpp | 2 +- sakura_core/util/MessageBoxF.h | 2 +- sakura_core/util/RegKey.h | 2 +- sakura_core/util/StaticType.h | 2 +- sakura_core/util/container.h | 2 +- sakura_core/util/design_template.h | 2 +- sakura_core/util/file.cpp | 2 +- sakura_core/util/file.h | 2 +- sakura_core/util/format.cpp | 2 +- sakura_core/util/format.h | 2 +- sakura_core/util/input.cpp | 2 +- sakura_core/util/input.h | 2 +- sakura_core/util/module.cpp | 2 +- sakura_core/util/module.h | 2 +- sakura_core/util/ole_convert.cpp | 2 +- sakura_core/util/ole_convert.h | 2 +- sakura_core/util/os.cpp | 2 +- sakura_core/util/os.h | 2 +- sakura_core/util/relation_tool.cpp | 2 +- sakura_core/util/relation_tool.h | 2 +- sakura_core/util/shell.cpp | 2 +- sakura_core/util/shell.h | 2 +- sakura_core/util/std_macro.h | 2 +- sakura_core/util/string_ex.cpp | 2 +- sakura_core/util/string_ex.h | 2 +- sakura_core/util/string_ex2.cpp | 2 +- sakura_core/util/string_ex2.h | 2 +- sakura_core/util/tchar_convert.cpp | 2 +- sakura_core/util/tchar_convert.h | 2 +- sakura_core/util/tchar_template.cpp | 2 +- sakura_core/util/tchar_template.h | 2 +- sakura_core/util/window.cpp | 2 +- sakura_core/util/window.h | 2 +- sakura_core/util/zoom.cpp | 2 +- sakura_core/util/zoom.h | 2 +- sakura_core/version.h | 2 +- sakura_core/view/CCaret.cpp | 2 +- sakura_core/view/CCaret.h | 2 +- sakura_core/view/CEditView.cpp | 2 +- sakura_core/view/CEditView.h | 2 +- sakura_core/view/CEditView_CmdHokan.cpp | 2 +- sakura_core/view/CEditView_Cmdgrep.cpp | 2 +- sakura_core/view/CEditView_Cmdisrch.cpp | 2 +- sakura_core/view/CEditView_Command.cpp | 2 +- sakura_core/view/CEditView_Command_New.cpp | 2 +- sakura_core/view/CEditView_Diff.cpp | 2 +- sakura_core/view/CEditView_ExecCmd.cpp | 2 +- sakura_core/view/CEditView_Ime.cpp | 2 +- sakura_core/view/CEditView_Mouse.cpp | 2 +- sakura_core/view/CEditView_Paint.cpp | 2 +- sakura_core/view/CEditView_Paint.h | 2 +- sakura_core/view/CEditView_Paint_Bracket.cpp | 2 +- sakura_core/view/CEditView_Scroll.cpp | 2 +- sakura_core/view/CEditView_Search.cpp | 2 +- sakura_core/view/CMiniMapView.cpp | 2 +- sakura_core/view/CMiniMapView.h | 2 +- sakura_core/view/CRuler.cpp | 2 +- sakura_core/view/CRuler.h | 2 +- sakura_core/view/CTextArea.cpp | 2 +- sakura_core/view/CTextArea.h | 2 +- sakura_core/view/CTextDrawer.cpp | 2 +- sakura_core/view/CTextDrawer.h | 2 +- sakura_core/view/CTextMetrics.cpp | 2 +- sakura_core/view/CTextMetrics.h | 2 +- sakura_core/view/CViewCalc.cpp | 2 +- sakura_core/view/CViewCalc.h | 2 +- sakura_core/view/CViewFont.cpp | 2 +- sakura_core/view/CViewFont.h | 2 +- sakura_core/view/CViewParser.cpp | 2 +- sakura_core/view/CViewParser.h | 2 +- sakura_core/view/CViewSelect.cpp | 2 +- sakura_core/view/CViewSelect.h | 2 +- sakura_core/view/DispPos.cpp | 2 +- sakura_core/view/DispPos.h | 2 +- sakura_core/view/colors/CColorStrategy.cpp | 2 +- sakura_core/view/colors/CColorStrategy.h | 2 +- sakura_core/view/colors/CColor_Comment.cpp | 2 +- sakura_core/view/colors/CColor_Comment.h | 2 +- sakura_core/view/colors/CColor_Found.cpp | 2 +- sakura_core/view/colors/CColor_Found.h | 2 +- sakura_core/view/colors/CColor_Heredoc.cpp | 2 +- sakura_core/view/colors/CColor_Heredoc.h | 2 +- sakura_core/view/colors/CColor_KeywordSet.cpp | 2 +- sakura_core/view/colors/CColor_KeywordSet.h | 2 +- sakura_core/view/colors/CColor_Numeric.cpp | 2 +- sakura_core/view/colors/CColor_Numeric.h | 2 +- sakura_core/view/colors/CColor_Quote.cpp | 2 +- sakura_core/view/colors/CColor_Quote.h | 2 +- sakura_core/view/colors/CColor_RegexKeyword.cpp | 2 +- sakura_core/view/colors/CColor_RegexKeyword.h | 2 +- sakura_core/view/colors/CColor_Url.cpp | 2 +- sakura_core/view/colors/CColor_Url.h | 2 +- sakura_core/view/colors/EColorIndexType.h | 2 +- sakura_core/view/figures/CFigureManager.cpp | 2 +- sakura_core/view/figures/CFigureManager.h | 2 +- sakura_core/view/figures/CFigureStrategy.cpp | 2 +- sakura_core/view/figures/CFigureStrategy.h | 2 +- sakura_core/view/figures/CFigure_Comma.cpp | 2 +- sakura_core/view/figures/CFigure_Comma.h | 2 +- sakura_core/view/figures/CFigure_CtrlCode.cpp | 2 +- sakura_core/view/figures/CFigure_CtrlCode.h | 2 +- sakura_core/view/figures/CFigure_Eol.cpp | 2 +- sakura_core/view/figures/CFigure_Eol.h | 2 +- sakura_core/view/figures/CFigure_HanSpace.cpp | 2 +- sakura_core/view/figures/CFigure_HanSpace.h | 2 +- sakura_core/view/figures/CFigure_Tab.cpp | 2 +- sakura_core/view/figures/CFigure_Tab.h | 2 +- sakura_core/view/figures/CFigure_ZenSpace.cpp | 2 +- sakura_core/view/figures/CFigure_ZenSpace.h | 2 +- sakura_core/window/CAutoScrollWnd.cpp | 2 +- sakura_core/window/CAutoScrollWnd.h | 2 +- sakura_core/window/CEditWnd.cpp | 2 +- sakura_core/window/CEditWnd.h | 2 +- sakura_core/window/CMainStatusBar.cpp | 2 +- sakura_core/window/CMainStatusBar.h | 2 +- sakura_core/window/CMainToolBar.cpp | 2 +- sakura_core/window/CMainToolBar.h | 2 +- sakura_core/window/CSplitBoxWnd.cpp | 2 +- sakura_core/window/CSplitBoxWnd.h | 2 +- sakura_core/window/CSplitterWnd.cpp | 2 +- sakura_core/window/CSplitterWnd.h | 2 +- sakura_core/window/CTabWnd.cpp | 2 +- sakura_core/window/CTabWnd.h | 2 +- sakura_core/window/CTipWnd.cpp | 2 +- sakura_core/window/CTipWnd.h | 2 +- sakura_core/window/CWnd.cpp | 2 +- sakura_core/window/CWnd.h | 2 +- tests/compiletests/clayoutint_test.cpp.in | 2 +- tests/unittests/StartEditorProcessForTest.h | 2 +- tests/unittests/code-main.cpp | 2 +- tests/unittests/coverage.cpp | 2 +- tests/unittests/test-StdControl.cpp | 2 +- tests/unittests/test-cclipboard.cpp | 2 +- tests/unittests/test-ccodebase.cpp | 2 +- tests/unittests/test-ccommandline.cpp | 2 +- tests/unittests/test-cconvert.cpp | 2 +- tests/unittests/test-cdecode.cpp | 2 +- tests/unittests/test-cdlgopenfile.cpp | 2 +- tests/unittests/test-cdlgprofilemgr.cpp | 2 +- tests/unittests/test-cdocline.cpp | 2 +- tests/unittests/test-cdoclinemgr.cpp | 2 +- tests/unittests/test-cdoctypemanager.cpp | 2 +- tests/unittests/test-ceol.cpp | 2 +- tests/unittests/test-cerrorinfo.cpp | 2 +- tests/unittests/test-cfileext.cpp | 2 +- tests/unittests/test-charcode.cpp | 2 +- tests/unittests/test-clayoutint.cpp | 2 +- tests/unittests/test-cmemory.cpp | 2 +- tests/unittests/test-cnative.cpp | 2 +- tests/unittests/test-cprofile.cpp | 2 +- tests/unittests/test-crunningtimer.cpp | 2 +- tests/unittests/test-csakuraenvironment.cpp | 2 +- tests/unittests/test-csearchagent.cpp | 2 +- tests/unittests/test-ctextmetrics.cpp | 2 +- tests/unittests/test-cwordparse.cpp | 2 +- tests/unittests/test-czipfile.cpp | 2 +- tests/unittests/test-design_template.cpp | 2 +- tests/unittests/test-editinfo.cpp | 2 +- tests/unittests/test-file.cpp | 2 +- tests/unittests/test-format.cpp | 2 +- tests/unittests/test-grepinfo.cpp | 2 +- tests/unittests/test-int2dec.cpp | 2 +- tests/unittests/test-is_mailaddress.cpp | 2 +- tests/unittests/test-loadstring.cpp | 2 +- tests/unittests/test-mydevmode.cpp | 2 +- tests/unittests/test-parameterized.cpp | 2 +- tests/unittests/test-printECodeType.cpp | 2 +- tests/unittests/test-printEFunctionCode.cpp | 2 +- tests/unittests/test-sample-disabled.cpp | 2 +- tests/unittests/test-sample.cpp | 2 +- tests/unittests/test-ssearchoption.cpp | 2 +- tests/unittests/test-statictype.cpp | 2 +- tests/unittests/test-string_ex.cpp | 2 +- tests/unittests/test-winmain.cpp | 2 +- tests/unittests/test-zoom.cpp | 2 +- .../ChmSourceConverter.Test/EncoderEscapingFallbackTest.cs | 2 +- .../ChmSourceConverter/ChmSourceConverterApp.cs | 2 +- .../ChmSourceConverter/EncoderEscapingFallback.cs | 2 +- .../ChmSourceConverter/EncoderEscapingFallbackBuffer.cs | 2 +- tools/ChmSourceConverter/ChmSourceConverter/FileContents.cs | 2 +- tools/ChmSourceConverter/ChmSourceConverter/LineEnumerator.cs | 2 +- tools/ChmSourceConverter/ChmSourceConverter/Program.cs | 2 +- tools/macro/CopyDirPath/CopyDirPath.js | 2 +- tools/macro/CopyDirPath/CopyDirPath.mac | 2 +- tools/macro/CopyDirPath/CopyDirPath.vbs | 2 +- 764 files changed, 764 insertions(+), 764 deletions(-) diff --git a/HeaderMake/HeaderMake.cpp b/HeaderMake/HeaderMake.cpp index af2a114515..a599ed141d 100644 --- a/HeaderMake/HeaderMake.cpp +++ b/HeaderMake/HeaderMake.cpp @@ -7,7 +7,7 @@ /* Copyright (C) 2007-2008, kobake Copyright (C) 2009, rastiv - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CAutoReloadAgent.cpp b/sakura_core/CAutoReloadAgent.cpp index 14f38d154f..3a5fd20c81 100644 --- a/sakura_core/CAutoReloadAgent.cpp +++ b/sakura_core/CAutoReloadAgent.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CAutoReloadAgent.h b/sakura_core/CAutoReloadAgent.h index a3e0843f04..db2f57df8c 100644 --- a/sakura_core/CAutoReloadAgent.h +++ b/sakura_core/CAutoReloadAgent.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CAutoSaveAgent.cpp b/sakura_core/CAutoSaveAgent.cpp index c8a0d95fc9..d0d2f89ca6 100644 --- a/sakura_core/CAutoSaveAgent.cpp +++ b/sakura_core/CAutoSaveAgent.cpp @@ -6,7 +6,7 @@ */ /* Copyright (C) 2000-2001, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CAutoSaveAgent.h b/sakura_core/CAutoSaveAgent.h index 656c174f6f..5d6262a7dd 100644 --- a/sakura_core/CAutoSaveAgent.h +++ b/sakura_core/CAutoSaveAgent.h @@ -6,7 +6,7 @@ */ /* Copyright (C) 2000-2001, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CBackupAgent.cpp b/sakura_core/CBackupAgent.cpp index e92d33a381..0643b1755b 100644 --- a/sakura_core/CBackupAgent.cpp +++ b/sakura_core/CBackupAgent.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CBackupAgent.h b/sakura_core/CBackupAgent.h index cfb29905c0..c78cf531c3 100644 --- a/sakura_core/CBackupAgent.h +++ b/sakura_core/CBackupAgent.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CCodeChecker.cpp b/sakura_core/CCodeChecker.cpp index cc0fc09aa4..5d6bf912c2 100644 --- a/sakura_core/CCodeChecker.cpp +++ b/sakura_core/CCodeChecker.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CCodeChecker.h b/sakura_core/CCodeChecker.h index cc7f5454af..1b7e124f9e 100644 --- a/sakura_core/CCodeChecker.h +++ b/sakura_core/CCodeChecker.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CDataProfile.cpp b/sakura_core/CDataProfile.cpp index f5a1415e84..72f92b2a7c 100644 --- a/sakura_core/CDataProfile.cpp +++ b/sakura_core/CDataProfile.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CDataProfile.h b/sakura_core/CDataProfile.h index 9056361e94..b210d06fc7 100644 --- a/sakura_core/CDataProfile.h +++ b/sakura_core/CDataProfile.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CDicMgr.cpp b/sakura_core/CDicMgr.cpp index 8489200783..452baeb1f6 100644 --- a/sakura_core/CDicMgr.cpp +++ b/sakura_core/CDicMgr.cpp @@ -10,7 +10,7 @@ Copyright (C) 2003, Moca Copyright (C) 2006, fon Copyright (C) 2007, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/CDicMgr.h b/sakura_core/CDicMgr.h index d13196c4d5..6fe37dc047 100644 --- a/sakura_core/CDicMgr.h +++ b/sakura_core/CDicMgr.h @@ -6,7 +6,7 @@ */ /* Copyright (C) 1998-2001, Norio Nakatani - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/CEditApp.cpp b/sakura_core/CEditApp.cpp index b578548e1a..17a331b2ac 100644 --- a/sakura_core/CEditApp.cpp +++ b/sakura_core/CEditApp.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2007, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CEditApp.h b/sakura_core/CEditApp.h index 2274d6b25b..23f11ef937 100644 --- a/sakura_core/CEditApp.h +++ b/sakura_core/CEditApp.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2007, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CEol.cpp b/sakura_core/CEol.cpp index 3956e0b6ef..ee3fe52ea5 100644 --- a/sakura_core/CEol.cpp +++ b/sakura_core/CEol.cpp @@ -7,7 +7,7 @@ /* Copyright (C) 2000-2001, genta Copyright (C) 2000, Frozen, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CEol.h b/sakura_core/CEol.h index ba0ce5ded9..5ce800d377 100644 --- a/sakura_core/CEol.h +++ b/sakura_core/CEol.h @@ -7,7 +7,7 @@ /* Copyright (C) 2000-2001, genta Copyright (C) 2002, frozen, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CFileExt.cpp b/sakura_core/CFileExt.cpp index 7455e22aff..b96c1b3e73 100644 --- a/sakura_core/CFileExt.cpp +++ b/sakura_core/CFileExt.cpp @@ -6,7 +6,7 @@ */ /* Copyright (C) 2003, MIK - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CFileExt.h b/sakura_core/CFileExt.h index 2bd82a5aef..753e64fa14 100644 --- a/sakura_core/CFileExt.h +++ b/sakura_core/CFileExt.h @@ -6,7 +6,7 @@ */ /* Copyright (C) 2003, MIK - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CGrepAgent.cpp b/sakura_core/CGrepAgent.cpp index 9a691b3e8b..12703d54d9 100644 --- a/sakura_core/CGrepAgent.cpp +++ b/sakura_core/CGrepAgent.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CGrepAgent.h b/sakura_core/CGrepAgent.h index 10769c6a5c..7f4c219359 100644 --- a/sakura_core/CGrepAgent.h +++ b/sakura_core/CGrepAgent.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CGrepEnumFileBase.h b/sakura_core/CGrepEnumFileBase.h index 294a4d710e..11374a9e4f 100644 --- a/sakura_core/CGrepEnumFileBase.h +++ b/sakura_core/CGrepEnumFileBase.h @@ -7,7 +7,7 @@ */ /* Copyright (C) 2008, wakura - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CGrepEnumFiles.h b/sakura_core/CGrepEnumFiles.h index 66f5a81273..f9f67e0f26 100644 --- a/sakura_core/CGrepEnumFiles.h +++ b/sakura_core/CGrepEnumFiles.h @@ -7,7 +7,7 @@ */ /* Copyright (C) 2008, wakura - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CGrepEnumFilterFiles.h b/sakura_core/CGrepEnumFilterFiles.h index 18b5b6c78c..71c450b272 100644 --- a/sakura_core/CGrepEnumFilterFiles.h +++ b/sakura_core/CGrepEnumFilterFiles.h @@ -7,7 +7,7 @@ */ /* Copyright (C) 2008, wakura - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CGrepEnumFilterFolders.h b/sakura_core/CGrepEnumFilterFolders.h index 88669453f2..df5ad1ad28 100644 --- a/sakura_core/CGrepEnumFilterFolders.h +++ b/sakura_core/CGrepEnumFilterFolders.h @@ -7,7 +7,7 @@ */ /* Copyright (C) 2008, wakura - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CGrepEnumFolders.h b/sakura_core/CGrepEnumFolders.h index 0d6c5fdc57..04fd06145d 100644 --- a/sakura_core/CGrepEnumFolders.h +++ b/sakura_core/CGrepEnumFolders.h @@ -7,7 +7,7 @@ */ /* Copyright (C) 2008, wakura - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CGrepEnumKeys.h b/sakura_core/CGrepEnumKeys.h index 902cf4d18d..2cd02358de 100644 --- a/sakura_core/CGrepEnumKeys.h +++ b/sakura_core/CGrepEnumKeys.h @@ -8,7 +8,7 @@ /* Copyright (C) 2008, wakura Copyright (C) 2011, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CHokanMgr.cpp b/sakura_core/CHokanMgr.cpp index 5745f7f65e..ad16aabc90 100644 --- a/sakura_core/CHokanMgr.cpp +++ b/sakura_core/CHokanMgr.cpp @@ -11,7 +11,7 @@ Copyright (C) 2003, Moca, KEITA Copyright (C) 2004, genta, Moca, novice Copyright (C) 2007, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/CHokanMgr.h b/sakura_core/CHokanMgr.h index 23a5a531e2..808073ece8 100644 --- a/sakura_core/CHokanMgr.h +++ b/sakura_core/CHokanMgr.h @@ -7,7 +7,7 @@ Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2001, asa-o Copyright (C) 2003, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/CKeyWordSetMgr.cpp b/sakura_core/CKeyWordSetMgr.cpp index fd1156c62b..90e3760d48 100644 --- a/sakura_core/CKeyWordSetMgr.cpp +++ b/sakura_core/CKeyWordSetMgr.cpp @@ -12,7 +12,7 @@ Copyright (C) 2002, genta, Moca Copyright (C) 2004, Moca Copyright (C) 2005, Moca, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CKeyWordSetMgr.h b/sakura_core/CKeyWordSetMgr.h index 130b667462..55d9ec53b4 100644 --- a/sakura_core/CKeyWordSetMgr.h +++ b/sakura_core/CKeyWordSetMgr.h @@ -12,7 +12,7 @@ Copyright (C) 2001, jepro Copyright (C) 2004, Moca Copyright (C) 2005, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CLoadAgent.cpp b/sakura_core/CLoadAgent.cpp index af5c8c0246..c41ebe120f 100644 --- a/sakura_core/CLoadAgent.cpp +++ b/sakura_core/CLoadAgent.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CLoadAgent.h b/sakura_core/CLoadAgent.h index 2d7b14e8e4..d947c57b4f 100644 --- a/sakura_core/CLoadAgent.h +++ b/sakura_core/CLoadAgent.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CMarkMgr.cpp b/sakura_core/CMarkMgr.cpp index b2fc803b3f..90e055f081 100644 --- a/sakura_core/CMarkMgr.cpp +++ b/sakura_core/CMarkMgr.cpp @@ -7,7 +7,7 @@ /* Copyright (C) 2000-2001, genta Copyright (C) 2002, aroka - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CMarkMgr.h b/sakura_core/CMarkMgr.h index caca41969f..7bf7ced60e 100644 --- a/sakura_core/CMarkMgr.h +++ b/sakura_core/CMarkMgr.h @@ -7,7 +7,7 @@ /* Copyright (C) 2000-2001, genta Copyright (C) 2002, aroka - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/COpe.cpp b/sakura_core/COpe.cpp index b2bb3646df..2d18b983c1 100644 --- a/sakura_core/COpe.cpp +++ b/sakura_core/COpe.cpp @@ -6,7 +6,7 @@ */ /* Copyright (C) 1998-2001, Norio Nakatani - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/COpe.h b/sakura_core/COpe.h index 850b661014..c63d26b6ce 100644 --- a/sakura_core/COpe.h +++ b/sakura_core/COpe.h @@ -6,7 +6,7 @@ */ /* Copyright (C) 1998-2001, Norio Nakatani - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/COpeBlk.cpp b/sakura_core/COpeBlk.cpp index 02d2e3eb44..640c4f69dc 100644 --- a/sakura_core/COpeBlk.cpp +++ b/sakura_core/COpeBlk.cpp @@ -6,7 +6,7 @@ */ /* Copyright (C) 1998-2001, Norio Nakatani - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/COpeBlk.h b/sakura_core/COpeBlk.h index fcdfd26433..5c49ce63ae 100644 --- a/sakura_core/COpeBlk.h +++ b/sakura_core/COpeBlk.h @@ -6,7 +6,7 @@ */ /* Copyright (C) 1998-2001, Norio Nakatani - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/COpeBuf.cpp b/sakura_core/COpeBuf.cpp index e3cdb8b69a..fc2fb5e9e1 100644 --- a/sakura_core/COpeBuf.cpp +++ b/sakura_core/COpeBuf.cpp @@ -6,7 +6,7 @@ */ /* Copyright (C) 1998-2001, Norio Nakatani - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/COpeBuf.h b/sakura_core/COpeBuf.h index 9cebf2da43..34d2b3bb5b 100644 --- a/sakura_core/COpeBuf.h +++ b/sakura_core/COpeBuf.h @@ -6,7 +6,7 @@ */ /* Copyright (C) 1998-2001, Norio Nakatani - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/CProfile.cpp b/sakura_core/CProfile.cpp index 228f419672..fb3eba5242 100644 --- a/sakura_core/CProfile.cpp +++ b/sakura_core/CProfile.cpp @@ -12,7 +12,7 @@ Copyright (C) 2004, D.S.Koba, MIK, genta Copyright (C) 2006, D.S.Koba, ryoji Copyright (C) 2009, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CProfile.h b/sakura_core/CProfile.h index 87e85eea14..b075f8476f 100644 --- a/sakura_core/CProfile.h +++ b/sakura_core/CProfile.h @@ -9,7 +9,7 @@ */ /* Copyright (C) 2003-2006, D.S.Koba - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CPropertyManager.cpp b/sakura_core/CPropertyManager.cpp index ff2482ef93..c056fa02a5 100644 --- a/sakura_core/CPropertyManager.cpp +++ b/sakura_core/CPropertyManager.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CPropertyManager.h b/sakura_core/CPropertyManager.h index 6d91c1ce90..7ceb036290 100644 --- a/sakura_core/CPropertyManager.h +++ b/sakura_core/CPropertyManager.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CReadManager.cpp b/sakura_core/CReadManager.cpp index 6b7d94fcce..6d2efbd48d 100644 --- a/sakura_core/CReadManager.cpp +++ b/sakura_core/CReadManager.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CReadManager.h b/sakura_core/CReadManager.h index 268ba66e2e..2933b0c11a 100644 --- a/sakura_core/CReadManager.h +++ b/sakura_core/CReadManager.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CRegexKeyword.cpp b/sakura_core/CRegexKeyword.cpp index 558f668416..2d270689d3 100644 --- a/sakura_core/CRegexKeyword.cpp +++ b/sakura_core/CRegexKeyword.cpp @@ -10,7 +10,7 @@ /* Copyright (C) 2001, MIK Copyright (C) 2002, YAZAKI - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/CRegexKeyword.h b/sakura_core/CRegexKeyword.h index f1d5bdb70d..222e85816c 100644 --- a/sakura_core/CRegexKeyword.h +++ b/sakura_core/CRegexKeyword.h @@ -9,7 +9,7 @@ */ /* Copyright (C) 2001, MIK - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/CSaveAgent.cpp b/sakura_core/CSaveAgent.cpp index 49ee32b492..83e4f0e0e1 100644 --- a/sakura_core/CSaveAgent.cpp +++ b/sakura_core/CSaveAgent.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CSaveAgent.h b/sakura_core/CSaveAgent.h index d27b00e2e1..98e981224a 100644 --- a/sakura_core/CSaveAgent.h +++ b/sakura_core/CSaveAgent.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CSearchAgent.cpp b/sakura_core/CSearchAgent.cpp index 27ffa3a45d..76ca395b85 100644 --- a/sakura_core/CSearchAgent.cpp +++ b/sakura_core/CSearchAgent.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CSearchAgent.h b/sakura_core/CSearchAgent.h index b133e7ee87..0f4e8442fc 100644 --- a/sakura_core/CSearchAgent.h +++ b/sakura_core/CSearchAgent.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CSelectLang.cpp b/sakura_core/CSelectLang.cpp index 8136b54e7d..8a246b0206 100644 --- a/sakura_core/CSelectLang.cpp +++ b/sakura_core/CSelectLang.cpp @@ -6,7 +6,7 @@ */ /* Copyright (C) 2011, nasukoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/CSelectLang.h b/sakura_core/CSelectLang.h index 7efd60a9f9..3f003a5f00 100644 --- a/sakura_core/CSelectLang.h +++ b/sakura_core/CSelectLang.h @@ -6,7 +6,7 @@ */ /* Copyright (C) 2011, nasukoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/CSortedTagJumpList.cpp b/sakura_core/CSortedTagJumpList.cpp index 8f88449803..4780df477b 100644 --- a/sakura_core/CSortedTagJumpList.cpp +++ b/sakura_core/CSortedTagJumpList.cpp @@ -6,7 +6,7 @@ */ /* Copyright (C) 2005, MIK, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CSortedTagJumpList.h b/sakura_core/CSortedTagJumpList.h index c529a19ecd..0bc00fe379 100644 --- a/sakura_core/CSortedTagJumpList.h +++ b/sakura_core/CSortedTagJumpList.h @@ -6,7 +6,7 @@ */ /* Copyright (C) 2005, MIK, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CWriteManager.cpp b/sakura_core/CWriteManager.cpp index c02650d3ff..73ed90a036 100644 --- a/sakura_core/CWriteManager.cpp +++ b/sakura_core/CWriteManager.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/CWriteManager.h b/sakura_core/CWriteManager.h index e3a1f6ecbb..65bab37e1b 100644 --- a/sakura_core/CWriteManager.h +++ b/sakura_core/CWriteManager.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/EditInfo.cpp b/sakura_core/EditInfo.cpp index 66e51f16e3..039ce7d6fe 100644 --- a/sakura_core/EditInfo.cpp +++ b/sakura_core/EditInfo.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/EditInfo.h b/sakura_core/EditInfo.h index 192e89a825..ffee63af57 100644 --- a/sakura_core/EditInfo.h +++ b/sakura_core/EditInfo.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/GrepInfo.cpp b/sakura_core/GrepInfo.cpp index 01f9834a99..ad217113b8 100644 --- a/sakura_core/GrepInfo.cpp +++ b/sakura_core/GrepInfo.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/GrepInfo.h b/sakura_core/GrepInfo.h index bf0733831c..508d5518e2 100644 --- a/sakura_core/GrepInfo.h +++ b/sakura_core/GrepInfo.h @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/StdAfx.cpp b/sakura_core/StdAfx.cpp index 2c8faefcef..baa60cf9b8 100644 --- a/sakura_core/StdAfx.cpp +++ b/sakura_core/StdAfx.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/StdAfx.h b/sakura_core/StdAfx.h index e0fe88f6dd..3b6c3c027d 100644 --- a/sakura_core/StdAfx.h +++ b/sakura_core/StdAfx.h @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/String_define.h b/sakura_core/String_define.h index 3470a46abd..e878572890 100644 --- a/sakura_core/String_define.h +++ b/sakura_core/String_define.h @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/_main/CAppMode.cpp b/sakura_core/_main/CAppMode.cpp index ebc74d8246..3e9372fb2f 100644 --- a/sakura_core/_main/CAppMode.cpp +++ b/sakura_core/_main/CAppMode.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/_main/CAppMode.h b/sakura_core/_main/CAppMode.h index dd51e7d2e8..e577d63837 100644 --- a/sakura_core/_main/CAppMode.h +++ b/sakura_core/_main/CAppMode.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/_main/CCommandLine.cpp b/sakura_core/_main/CCommandLine.cpp index c69370c719..3b39bfdd47 100644 --- a/sakura_core/_main/CCommandLine.cpp +++ b/sakura_core/_main/CCommandLine.cpp @@ -12,7 +12,7 @@ Copyright (C) 2005, D.S.Koba, genta, susu Copyright (C) 2006, ryoji Copyright (C) 2007, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/_main/CCommandLine.h b/sakura_core/_main/CCommandLine.h index 13e9ed7658..18125145d0 100644 --- a/sakura_core/_main/CCommandLine.h +++ b/sakura_core/_main/CCommandLine.h @@ -11,7 +11,7 @@ Copyright (C) 2002, genta Copyright (C) 2005, D.S.Koba Copyright (C) 2007, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/_main/CControlProcess.cpp b/sakura_core/_main/CControlProcess.cpp index d4334504b4..ed1db79ee5 100644 --- a/sakura_core/_main/CControlProcess.cpp +++ b/sakura_core/_main/CControlProcess.cpp @@ -9,7 +9,7 @@ Copyright (C) 2002, aroka CProcessより分離, YAZAKI Copyright (C) 2006, ryoji Copyright (C) 2007, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/_main/CControlProcess.h b/sakura_core/_main/CControlProcess.h index a3cc104575..e42f5527de 100644 --- a/sakura_core/_main/CControlProcess.h +++ b/sakura_core/_main/CControlProcess.h @@ -7,7 +7,7 @@ /* Copyright (C) 2002, aroka 新規作成, YAZAKI Copyright (C) 2006, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/_main/CControlTray.cpp b/sakura_core/_main/CControlTray.cpp index c8a09429aa..b92e36eed8 100644 --- a/sakura_core/_main/CControlTray.cpp +++ b/sakura_core/_main/CControlTray.cpp @@ -19,7 +19,7 @@ Copyright (C) 2006, ryoji Copyright (C) 2007, ryoji Copyright (C) 2008, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/_main/CControlTray.h b/sakura_core/_main/CControlTray.h index 1e5ccb93b7..bb8c64534b 100644 --- a/sakura_core/_main/CControlTray.h +++ b/sakura_core/_main/CControlTray.h @@ -17,7 +17,7 @@ Copyright (C) 2003, genta Copyright (C) 2006, ryoji Copyright (C) 2007, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/_main/CMutex.h b/sakura_core/_main/CMutex.h index f3f42ab284..0fa386e537 100644 --- a/sakura_core/_main/CMutex.h +++ b/sakura_core/_main/CMutex.h @@ -6,7 +6,7 @@ */ /* Copyright (C) 2007, ryoji, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/_main/CNormalProcess.cpp b/sakura_core/_main/CNormalProcess.cpp index 012ae52a88..ef01557d5d 100644 --- a/sakura_core/_main/CNormalProcess.cpp +++ b/sakura_core/_main/CNormalProcess.cpp @@ -14,7 +14,7 @@ Copyright (C) 2007, ryoji Copyright (C) 2008, Uchi Copyright (C) 2009, syat, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/_main/CNormalProcess.h b/sakura_core/_main/CNormalProcess.h index 71afcb1f6c..96e170d49f 100644 --- a/sakura_core/_main/CNormalProcess.h +++ b/sakura_core/_main/CNormalProcess.h @@ -6,7 +6,7 @@ */ /* Copyright (C) 2002, aroka 新規作成 - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/_main/CProcess.cpp b/sakura_core/_main/CProcess.cpp index 560c4c5e8d..85361de7dd 100644 --- a/sakura_core/_main/CProcess.cpp +++ b/sakura_core/_main/CProcess.cpp @@ -9,7 +9,7 @@ Copyright (C) 2002, aroka 新規作成 Copyright (C) 2004, Moca Copyright (C) 2009, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/_main/CProcess.h b/sakura_core/_main/CProcess.h index 08978b8a73..9db1943f43 100644 --- a/sakura_core/_main/CProcess.h +++ b/sakura_core/_main/CProcess.h @@ -7,7 +7,7 @@ /* Copyright (C) 2002, aroka 新規作成 Copyright (C) 2009, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/_main/CProcessFactory.cpp b/sakura_core/_main/CProcessFactory.cpp index d960e707be..6df4f4aa10 100644 --- a/sakura_core/_main/CProcessFactory.cpp +++ b/sakura_core/_main/CProcessFactory.cpp @@ -10,7 +10,7 @@ Copyright (C) 2001, masami shoji Copyright (C) 2002, aroka WinMainより分離 Copyright (C) 2006, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/_main/CProcessFactory.h b/sakura_core/_main/CProcessFactory.h index 75457dafb7..5274eb7e49 100644 --- a/sakura_core/_main/CProcessFactory.h +++ b/sakura_core/_main/CProcessFactory.h @@ -7,7 +7,7 @@ /* Copyright (C) 2002, aroka 新規作成 Copyright (C) 2006, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/_main/WinMain.cpp b/sakura_core/_main/WinMain.cpp index 3754caf413..30de519da6 100644 --- a/sakura_core/_main/WinMain.cpp +++ b/sakura_core/_main/WinMain.cpp @@ -14,7 +14,7 @@ Copyright (C) 2002, aroka Copyright (C) 2007, kobake Copyright (C) 2009, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/_main/global.cpp b/sakura_core/_main/global.cpp index fbc095f8ee..9d72f72e4f 100644 --- a/sakura_core/_main/global.cpp +++ b/sakura_core/_main/global.cpp @@ -9,7 +9,7 @@ Copyright (C) 2002, KK Copyright (C) 2003, MIK Copyright (C) 2005, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/_main/global.h b/sakura_core/_main/global.h index cb4681d716..7d04421fe9 100644 --- a/sakura_core/_main/global.h +++ b/sakura_core/_main/global.h @@ -13,7 +13,7 @@ Copyright (C) 2005, MIK, Moca, genta Copyright (C) 2006, aroka, ryoji Copyright (C) 2007, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/_os/CClipboard.cpp b/sakura_core/_os/CClipboard.cpp index 4f98e23e2c..8a3bea8f27 100644 --- a/sakura_core/_os/CClipboard.cpp +++ b/sakura_core/_os/CClipboard.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/_os/CClipboard.h b/sakura_core/_os/CClipboard.h index 33b74bb21b..7dfa2f7c0a 100644 --- a/sakura_core/_os/CClipboard.h +++ b/sakura_core/_os/CClipboard.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/_os/CDropTarget.cpp b/sakura_core/_os/CDropTarget.cpp index 68acb8a70a..63700910c1 100644 --- a/sakura_core/_os/CDropTarget.cpp +++ b/sakura_core/_os/CDropTarget.cpp @@ -8,7 +8,7 @@ Copyright (C) 2002, aroka Copyright (C) 2008, ryoji Copyright (C) 2009, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/_os/CDropTarget.h b/sakura_core/_os/CDropTarget.h index 4531f3feef..f2cdfa4779 100644 --- a/sakura_core/_os/CDropTarget.h +++ b/sakura_core/_os/CDropTarget.h @@ -8,7 +8,7 @@ Copyright (C) 2002, aroka Copyright (C) 2008, ryoji Copyright (C) 2009, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/_os/OleTypes.h b/sakura_core/_os/OleTypes.h index 9d7eb378a2..052609771d 100644 --- a/sakura_core/_os/OleTypes.h +++ b/sakura_core/_os/OleTypes.h @@ -6,7 +6,7 @@ */ /* Copyright (C) 2003, 鬼, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/apiwrap/CommonControl.h b/sakura_core/apiwrap/CommonControl.h index 2aa4e408bb..f5ef8ea409 100644 --- a/sakura_core/apiwrap/CommonControl.h +++ b/sakura_core/apiwrap/CommonControl.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/apiwrap/StdApi.cpp b/sakura_core/apiwrap/StdApi.cpp index 3f192c4182..79cf18ba09 100644 --- a/sakura_core/apiwrap/StdApi.cpp +++ b/sakura_core/apiwrap/StdApi.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/apiwrap/StdApi.h b/sakura_core/apiwrap/StdApi.h index 45a7451c06..0731af8445 100644 --- a/sakura_core/apiwrap/StdApi.h +++ b/sakura_core/apiwrap/StdApi.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/apiwrap/StdControl.cpp b/sakura_core/apiwrap/StdControl.cpp index e9a824351c..9dab6a89cb 100644 --- a/sakura_core/apiwrap/StdControl.cpp +++ b/sakura_core/apiwrap/StdControl.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/apiwrap/StdControl.h b/sakura_core/apiwrap/StdControl.h index 73a42aef77..0ac3786f46 100644 --- a/sakura_core/apiwrap/StdControl.h +++ b/sakura_core/apiwrap/StdControl.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2007, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CErrorInfo.cpp b/sakura_core/basis/CErrorInfo.cpp index 070723dab2..7a9b3fddc6 100644 --- a/sakura_core/basis/CErrorInfo.cpp +++ b/sakura_core/basis/CErrorInfo.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2021, Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CErrorInfo.h b/sakura_core/basis/CErrorInfo.h index 00142f6a65..d82a1b4d8f 100644 --- a/sakura_core/basis/CErrorInfo.h +++ b/sakura_core/basis/CErrorInfo.h @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2021, Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CLaxInteger.cpp b/sakura_core/basis/CLaxInteger.cpp index 6f1dc8e6cb..ae50a3b6d8 100644 --- a/sakura_core/basis/CLaxInteger.cpp +++ b/sakura_core/basis/CLaxInteger.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CLaxInteger.h b/sakura_core/basis/CLaxInteger.h index 811e4432e5..a021d1ba7f 100644 --- a/sakura_core/basis/CLaxInteger.h +++ b/sakura_core/basis/CLaxInteger.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CMyPoint.cpp b/sakura_core/basis/CMyPoint.cpp index 92e590d697..a97db10975 100644 --- a/sakura_core/basis/CMyPoint.cpp +++ b/sakura_core/basis/CMyPoint.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CMyPoint.h b/sakura_core/basis/CMyPoint.h index 05abf9f70b..e9a803b858 100644 --- a/sakura_core/basis/CMyPoint.h +++ b/sakura_core/basis/CMyPoint.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CMyRect.cpp b/sakura_core/basis/CMyRect.cpp index bbb5c6cb67..176806ff9e 100644 --- a/sakura_core/basis/CMyRect.cpp +++ b/sakura_core/basis/CMyRect.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CMyRect.h b/sakura_core/basis/CMyRect.h index 99e1240350..8c399fc416 100644 --- a/sakura_core/basis/CMyRect.h +++ b/sakura_core/basis/CMyRect.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CMySize.cpp b/sakura_core/basis/CMySize.cpp index e4aa0ce6ab..32ab9464ec 100644 --- a/sakura_core/basis/CMySize.cpp +++ b/sakura_core/basis/CMySize.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CMySize.h b/sakura_core/basis/CMySize.h index 9670a3815e..3f73ecadf4 100644 --- a/sakura_core/basis/CMySize.h +++ b/sakura_core/basis/CMySize.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CMyString.cpp b/sakura_core/basis/CMyString.cpp index 4198acef39..5ff6436702 100644 --- a/sakura_core/basis/CMyString.cpp +++ b/sakura_core/basis/CMyString.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CMyString.h b/sakura_core/basis/CMyString.h index 0316bb38fb..3819dc05e4 100644 --- a/sakura_core/basis/CMyString.h +++ b/sakura_core/basis/CMyString.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CStrictInteger.cpp b/sakura_core/basis/CStrictInteger.cpp index 9be77c04ef..2659800d9d 100644 --- a/sakura_core/basis/CStrictInteger.cpp +++ b/sakura_core/basis/CStrictInteger.cpp @@ -2,7 +2,7 @@ /* Copyright (C) 2007, kobake Copyright (C) 2007-2017 SAKURA Editor Project - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CStrictInteger.h b/sakura_core/basis/CStrictInteger.h index b4c190311c..e6d6d91df8 100644 --- a/sakura_core/basis/CStrictInteger.h +++ b/sakura_core/basis/CStrictInteger.h @@ -7,7 +7,7 @@ */ /* Copyright (C) 2007, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CStrictPoint.cpp b/sakura_core/basis/CStrictPoint.cpp index c1ef0e8d22..7605889ac6 100644 --- a/sakura_core/basis/CStrictPoint.cpp +++ b/sakura_core/basis/CStrictPoint.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CStrictPoint.h b/sakura_core/basis/CStrictPoint.h index e454d33042..c2a11e9299 100644 --- a/sakura_core/basis/CStrictPoint.h +++ b/sakura_core/basis/CStrictPoint.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CStrictRange.cpp b/sakura_core/basis/CStrictRange.cpp index 3cf4d42964..a7ef508719 100644 --- a/sakura_core/basis/CStrictRange.cpp +++ b/sakura_core/basis/CStrictRange.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CStrictRange.h b/sakura_core/basis/CStrictRange.h index 3d2760ba8b..7093c989e9 100644 --- a/sakura_core/basis/CStrictRange.h +++ b/sakura_core/basis/CStrictRange.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CStrictRect.cpp b/sakura_core/basis/CStrictRect.cpp index 6eaa67cb78..518e62ca57 100644 --- a/sakura_core/basis/CStrictRect.cpp +++ b/sakura_core/basis/CStrictRect.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/CStrictRect.h b/sakura_core/basis/CStrictRect.h index 3b3a18d205..6a6c105d47 100644 --- a/sakura_core/basis/CStrictRect.h +++ b/sakura_core/basis/CStrictRect.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/SakuraBasis.cpp b/sakura_core/basis/SakuraBasis.cpp index 629126cb35..19621295af 100644 --- a/sakura_core/basis/SakuraBasis.cpp +++ b/sakura_core/basis/SakuraBasis.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/SakuraBasis.h b/sakura_core/basis/SakuraBasis.h index 4f895c35e8..5ac7aff7fd 100644 --- a/sakura_core/basis/SakuraBasis.h +++ b/sakura_core/basis/SakuraBasis.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/TComImpl.hpp b/sakura_core/basis/TComImpl.hpp index 82cfbd04c7..207e0a2e22 100644 --- a/sakura_core/basis/TComImpl.hpp +++ b/sakura_core/basis/TComImpl.hpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2021, Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/_com_raise_error.cpp b/sakura_core/basis/_com_raise_error.cpp index f8cc6af90a..b0f281a852 100644 --- a/sakura_core/basis/_com_raise_error.cpp +++ b/sakura_core/basis/_com_raise_error.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2021, Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/basis/primitive.h b/sakura_core/basis/primitive.h index 567c852dac..67278dbc1c 100644 --- a/sakura_core/basis/primitive.h +++ b/sakura_core/basis/primitive.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CCesu8.cpp b/sakura_core/charset/CCesu8.cpp index c6e40323cd..7583390553 100644 --- a/sakura_core/charset/CCesu8.cpp +++ b/sakura_core/charset/CCesu8.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CCesu8.h b/sakura_core/charset/CCesu8.h index 1f1c09d07f..310fbecff5 100644 --- a/sakura_core/charset/CCesu8.h +++ b/sakura_core/charset/CCesu8.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CCodeBase.cpp b/sakura_core/charset/CCodeBase.cpp index 43219c5ff2..fe5dd91086 100644 --- a/sakura_core/charset/CCodeBase.cpp +++ b/sakura_core/charset/CCodeBase.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CCodeBase.h b/sakura_core/charset/CCodeBase.h index 800d29322b..4c818325a2 100644 --- a/sakura_core/charset/CCodeBase.h +++ b/sakura_core/charset/CCodeBase.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CCodeFactory.cpp b/sakura_core/charset/CCodeFactory.cpp index 584662d157..ac6be7984f 100644 --- a/sakura_core/charset/CCodeFactory.cpp +++ b/sakura_core/charset/CCodeFactory.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CCodeFactory.h b/sakura_core/charset/CCodeFactory.h index 9704f638b5..02960b1a74 100644 --- a/sakura_core/charset/CCodeFactory.h +++ b/sakura_core/charset/CCodeFactory.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CCodeMediator.cpp b/sakura_core/charset/CCodeMediator.cpp index e5ee7ca234..8c672d3a4e 100644 --- a/sakura_core/charset/CCodeMediator.cpp +++ b/sakura_core/charset/CCodeMediator.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CCodeMediator.h b/sakura_core/charset/CCodeMediator.h index 0eacc06382..246ed39cad 100644 --- a/sakura_core/charset/CCodeMediator.h +++ b/sakura_core/charset/CCodeMediator.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CCodePage.cpp b/sakura_core/charset/CCodePage.cpp index d77bf6047e..6e836564d2 100644 --- a/sakura_core/charset/CCodePage.cpp +++ b/sakura_core/charset/CCodePage.cpp @@ -5,7 +5,7 @@ */ /* Copyright (C) 2010-2012 Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CCodePage.h b/sakura_core/charset/CCodePage.h index db1174d83c..6b0f3ba56e 100644 --- a/sakura_core/charset/CCodePage.h +++ b/sakura_core/charset/CCodePage.h @@ -5,7 +5,7 @@ */ /* Copyright (C) 2010-2012 Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CESI.cpp b/sakura_core/charset/CESI.cpp index 1b2ff3c458..5a3e7f3c9a 100644 --- a/sakura_core/charset/CESI.cpp +++ b/sakura_core/charset/CESI.cpp @@ -8,7 +8,7 @@ /* Copyright (C) 2006 Copyright (C) 2007 - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CESI.h b/sakura_core/charset/CESI.h index 76279506d1..35f08fa862 100644 --- a/sakura_core/charset/CESI.h +++ b/sakura_core/charset/CESI.h @@ -9,7 +9,7 @@ /* Copyright (C) 2006 Copyright (C) 2007 - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CEuc.cpp b/sakura_core/charset/CEuc.cpp index 2f91e3554d..7b17067500 100644 --- a/sakura_core/charset/CEuc.cpp +++ b/sakura_core/charset/CEuc.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CEuc.h b/sakura_core/charset/CEuc.h index 2d19f27f49..8b60a470b1 100644 --- a/sakura_core/charset/CEuc.h +++ b/sakura_core/charset/CEuc.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CJis.cpp b/sakura_core/charset/CJis.cpp index 1f887166f8..3f54e58404 100644 --- a/sakura_core/charset/CJis.cpp +++ b/sakura_core/charset/CJis.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CJis.h b/sakura_core/charset/CJis.h index b529a07bb4..7414669219 100644 --- a/sakura_core/charset/CJis.h +++ b/sakura_core/charset/CJis.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CLatin1.cpp b/sakura_core/charset/CLatin1.cpp index b1358e393e..16baea13d8 100644 --- a/sakura_core/charset/CLatin1.cpp +++ b/sakura_core/charset/CLatin1.cpp @@ -6,7 +6,7 @@ */ /* Copyright (C) 20010, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CLatin1.h b/sakura_core/charset/CLatin1.h index 343ad20b05..9559172bc6 100644 --- a/sakura_core/charset/CLatin1.h +++ b/sakura_core/charset/CLatin1.h @@ -6,7 +6,7 @@ */ /* Copyright (C) 20010, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CShiftJis.cpp b/sakura_core/charset/CShiftJis.cpp index f746da8271..273198cbd5 100644 --- a/sakura_core/charset/CShiftJis.cpp +++ b/sakura_core/charset/CShiftJis.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CShiftJis.h b/sakura_core/charset/CShiftJis.h index c8ef03f178..b16e6d43c7 100644 --- a/sakura_core/charset/CShiftJis.h +++ b/sakura_core/charset/CShiftJis.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CUnicode.cpp b/sakura_core/charset/CUnicode.cpp index 6fdb1b9461..d7572d2fd0 100644 --- a/sakura_core/charset/CUnicode.cpp +++ b/sakura_core/charset/CUnicode.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CUnicode.h b/sakura_core/charset/CUnicode.h index 8fc687f5c6..65ab42d4dd 100644 --- a/sakura_core/charset/CUnicode.h +++ b/sakura_core/charset/CUnicode.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CUnicodeBe.cpp b/sakura_core/charset/CUnicodeBe.cpp index 11008776dc..5aa750dbc6 100644 --- a/sakura_core/charset/CUnicodeBe.cpp +++ b/sakura_core/charset/CUnicodeBe.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CUnicodeBe.h b/sakura_core/charset/CUnicodeBe.h index c3c95791aa..375c4d4c03 100644 --- a/sakura_core/charset/CUnicodeBe.h +++ b/sakura_core/charset/CUnicodeBe.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CUtf7.cpp b/sakura_core/charset/CUtf7.cpp index e1fffff3f5..5bbb5262b6 100644 --- a/sakura_core/charset/CUtf7.cpp +++ b/sakura_core/charset/CUtf7.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CUtf7.h b/sakura_core/charset/CUtf7.h index fab6836a6a..b4708f7f95 100644 --- a/sakura_core/charset/CUtf7.h +++ b/sakura_core/charset/CUtf7.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CUtf8.cpp b/sakura_core/charset/CUtf8.cpp index d8bae8203e..d1c85fa144 100644 --- a/sakura_core/charset/CUtf8.cpp +++ b/sakura_core/charset/CUtf8.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CUtf8.h b/sakura_core/charset/CUtf8.h index 3b449ab33c..4980d1e42a 100644 --- a/sakura_core/charset/CUtf8.h +++ b/sakura_core/charset/CUtf8.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CharsetDetector.cpp b/sakura_core/charset/CharsetDetector.cpp index ff6fb197a4..88cc61de8b 100644 --- a/sakura_core/charset/CharsetDetector.cpp +++ b/sakura_core/charset/CharsetDetector.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/CharsetDetector.h b/sakura_core/charset/CharsetDetector.h index 4e8171a162..5ab3982fba 100644 --- a/sakura_core/charset/CharsetDetector.h +++ b/sakura_core/charset/CharsetDetector.h @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/charcode.cpp b/sakura_core/charset/charcode.cpp index 52597affd5..17a54d15e7 100644 --- a/sakura_core/charset/charcode.cpp +++ b/sakura_core/charset/charcode.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2007, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/charcode.h b/sakura_core/charset/charcode.h index 91203a518d..766975eb7a 100644 --- a/sakura_core/charset/charcode.h +++ b/sakura_core/charset/charcode.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2007, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/charset.cpp b/sakura_core/charset/charset.cpp index 6f08eb18d9..69b65ad9ce 100644 --- a/sakura_core/charset/charset.cpp +++ b/sakura_core/charset/charset.cpp @@ -12,7 +12,7 @@ Copyright (C) 2010, Uchi Copyright (C) 2012, novice Copyright (C) 2013, Moca, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/charset.h b/sakura_core/charset/charset.h index 89f4abe225..4b528fcdec 100644 --- a/sakura_core/charset/charset.h +++ b/sakura_core/charset/charset.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/codechecker.cpp b/sakura_core/charset/codechecker.cpp index 12de27eef6..49709f0c5d 100644 --- a/sakura_core/charset/codechecker.cpp +++ b/sakura_core/charset/codechecker.cpp @@ -9,7 +9,7 @@ /* Copyright (C) 2006, D. S. Koba, genta Copyright (C) 2007 - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/codechecker.h b/sakura_core/charset/codechecker.h index 38933c9893..c0d7fe0d2e 100644 --- a/sakura_core/charset/codechecker.h +++ b/sakura_core/charset/codechecker.h @@ -10,7 +10,7 @@ Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2006, D. S. Koba, genta Copyright (C) 2007 - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/codeutil.cpp b/sakura_core/charset/codeutil.cpp index 8c88dbd9a5..0a818ab480 100644 --- a/sakura_core/charset/codeutil.cpp +++ b/sakura_core/charset/codeutil.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/charset/codeutil.h b/sakura_core/charset/codeutil.h index f5b5ee6dd0..784a0e938a 100644 --- a/sakura_core/charset/codeutil.h +++ b/sakura_core/charset/codeutil.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/cmd/CViewCommander.cpp b/sakura_core/cmd/CViewCommander.cpp index bbab8606f5..168a6493cf 100644 --- a/sakura_core/cmd/CViewCommander.cpp +++ b/sakura_core/cmd/CViewCommander.cpp @@ -19,7 +19,7 @@ Copyright (C) 2010, ryoji Copyright (C) 2011, ryoji, nasukoji Copyright (C) 2012, Moca, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander.h b/sakura_core/cmd/CViewCommander.h index 17285f36e7..3d159d8c5e 100644 --- a/sakura_core/cmd/CViewCommander.h +++ b/sakura_core/cmd/CViewCommander.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/cmd/CViewCommander_Bookmark.cpp b/sakura_core/cmd/CViewCommander_Bookmark.cpp index 0afb828f85..0775619a6c 100644 --- a/sakura_core/cmd/CViewCommander_Bookmark.cpp +++ b/sakura_core/cmd/CViewCommander_Bookmark.cpp @@ -8,7 +8,7 @@ Copyright (C) 2000-2001, genta Copyright (C) 2002, hor, YAZAKI, MIK Copyright (C) 2006, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_Clipboard.cpp b/sakura_core/cmd/CViewCommander_Clipboard.cpp index 9cb591ae9b..207dc4c04b 100644 --- a/sakura_core/cmd/CViewCommander_Clipboard.cpp +++ b/sakura_core/cmd/CViewCommander_Clipboard.cpp @@ -12,7 +12,7 @@ Copyright (C) 2005, genta Copyright (C) 2007, ryoji Copyright (C) 2010, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_Convert.cpp b/sakura_core/cmd/CViewCommander_Convert.cpp index ca4a801d01..1ab532cd65 100644 --- a/sakura_core/cmd/CViewCommander_Convert.cpp +++ b/sakura_core/cmd/CViewCommander_Convert.cpp @@ -8,7 +8,7 @@ Copyright (C) 2000-2001, jepro Copyright (C) 2001, Stonee, Misaka Copyright (C) 2002, ai - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_Cursor.cpp b/sakura_core/cmd/CViewCommander_Cursor.cpp index 1f574021d1..bac9b0dd39 100644 --- a/sakura_core/cmd/CViewCommander_Cursor.cpp +++ b/sakura_core/cmd/CViewCommander_Cursor.cpp @@ -13,7 +13,7 @@ Copyright (C) 2006, genta Copyright (C) 2007, kobake, maru Copyright (C) 2009, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_CustMenu.cpp b/sakura_core/cmd/CViewCommander_CustMenu.cpp index 19f4360689..ac9baf8254 100644 --- a/sakura_core/cmd/CViewCommander_CustMenu.cpp +++ b/sakura_core/cmd/CViewCommander_CustMenu.cpp @@ -11,7 +11,7 @@ Copyright (C) 2007, ryoji, maru, Uchi Copyright (C) 2008, ryoji, nasukoji Copyright (C) 2009, ryoji, nasukoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_Diff.cpp b/sakura_core/cmd/CViewCommander_Diff.cpp index 089dd17261..e9acc816e9 100644 --- a/sakura_core/cmd/CViewCommander_Diff.cpp +++ b/sakura_core/cmd/CViewCommander_Diff.cpp @@ -13,7 +13,7 @@ Copyright (C) 2007, kobake Copyright (C) 2008, kobake Copyright (C) 2008, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_Edit.cpp b/sakura_core/cmd/CViewCommander_Edit.cpp index 6af3767297..20a9c70cfb 100644 --- a/sakura_core/cmd/CViewCommander_Edit.cpp +++ b/sakura_core/cmd/CViewCommander_Edit.cpp @@ -12,7 +12,7 @@ Copyright (C) 2008, ryoji, nasukoji Copyright (C) 2009, ryoji Copyright (C) 2010, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_Edit_advanced.cpp b/sakura_core/cmd/CViewCommander_Edit_advanced.cpp index 56743ea76e..2dd782bbeb 100644 --- a/sakura_core/cmd/CViewCommander_Edit_advanced.cpp +++ b/sakura_core/cmd/CViewCommander_Edit_advanced.cpp @@ -18,7 +18,7 @@ Copyright (C) 2010, ryoji Copyright (C) 2011, ryoji Copyright (C) 2012, Moca, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_Edit_word_line.cpp b/sakura_core/cmd/CViewCommander_Edit_word_line.cpp index eae40ad3bc..390e8cfcd5 100644 --- a/sakura_core/cmd/CViewCommander_Edit_word_line.cpp +++ b/sakura_core/cmd/CViewCommander_Edit_word_line.cpp @@ -8,7 +8,7 @@ Copyright (C) 2003, かろと Copyright (C) 2005, Moca Copyright (C) 2007, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_File.cpp b/sakura_core/cmd/CViewCommander_File.cpp index 80e37a6273..e660169fb0 100644 --- a/sakura_core/cmd/CViewCommander_File.cpp +++ b/sakura_core/cmd/CViewCommander_File.cpp @@ -12,7 +12,7 @@ Copyright (C) 2005, genta Copyright (C) 2006, ryoji, maru Copyright (C) 2007, ryoji, maru, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/cmd/CViewCommander_Grep.cpp b/sakura_core/cmd/CViewCommander_Grep.cpp index cbf661bae8..4c8bf0a871 100644 --- a/sakura_core/cmd/CViewCommander_Grep.cpp +++ b/sakura_core/cmd/CViewCommander_Grep.cpp @@ -7,7 +7,7 @@ Copyright (C) 2003, MIK Copyright (C) 2005, genta Copyright (C) 2006, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_Insert.cpp b/sakura_core/cmd/CViewCommander_Insert.cpp index 12924ff613..c8b0f0285f 100644 --- a/sakura_core/cmd/CViewCommander_Insert.cpp +++ b/sakura_core/cmd/CViewCommander_Insert.cpp @@ -6,7 +6,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, MIK - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_Macro.cpp b/sakura_core/cmd/CViewCommander_Macro.cpp index 4f33e373bf..71fec1a930 100644 --- a/sakura_core/cmd/CViewCommander_Macro.cpp +++ b/sakura_core/cmd/CViewCommander_Macro.cpp @@ -13,7 +13,7 @@ Copyright (C) 2006, maru Copyright (C) 2007, ryoji, genta Copyright (C) 2008, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_ModeChange.cpp b/sakura_core/cmd/CViewCommander_ModeChange.cpp index 58fb926399..b5ff649765 100644 --- a/sakura_core/cmd/CViewCommander_ModeChange.cpp +++ b/sakura_core/cmd/CViewCommander_ModeChange.cpp @@ -8,7 +8,7 @@ Copyright (C) 2003, Moca Copyright (C) 2005, genta Copyright (C) 2007, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/cmd/CViewCommander_Outline.cpp b/sakura_core/cmd/CViewCommander_Outline.cpp index a719c9435a..feb44fb99e 100644 --- a/sakura_core/cmd/CViewCommander_Outline.cpp +++ b/sakura_core/cmd/CViewCommander_Outline.cpp @@ -13,7 +13,7 @@ Copyright (C) 2007, genta, kobake Copyright (C) 2009, genta Copyright (C) 2011, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_Search.cpp b/sakura_core/cmd/CViewCommander_Search.cpp index 748e3de553..7a204fa102 100644 --- a/sakura_core/cmd/CViewCommander_Search.cpp +++ b/sakura_core/cmd/CViewCommander_Search.cpp @@ -16,7 +16,7 @@ Copyright (C) 2009, ryoji, genta Copyright (C) 2010, ryoji Copyright (C) 2011, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_Select.cpp b/sakura_core/cmd/CViewCommander_Select.cpp index ba2420aba2..07c69480e1 100644 --- a/sakura_core/cmd/CViewCommander_Select.cpp +++ b/sakura_core/cmd/CViewCommander_Select.cpp @@ -9,7 +9,7 @@ Copyright (C) 2002, YAZAKI Copyright (C) 2005, Moca Copyright (C) 2007, kobake, nasukoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_Settings.cpp b/sakura_core/cmd/CViewCommander_Settings.cpp index 5362eaeca6..24516881f0 100644 --- a/sakura_core/cmd/CViewCommander_Settings.cpp +++ b/sakura_core/cmd/CViewCommander_Settings.cpp @@ -13,7 +13,7 @@ Copyright (C) 2007, ryoji Copyright (C) 2008, ryoji, nasukoji Copyright (C) 2009, nasukoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_Support.cpp b/sakura_core/cmd/CViewCommander_Support.cpp index a93298df6c..97356ce8e8 100644 --- a/sakura_core/cmd/CViewCommander_Support.cpp +++ b/sakura_core/cmd/CViewCommander_Support.cpp @@ -14,7 +14,7 @@ Copyright (C) 2007, kobake, ryoji Copyright (C) 2011, Moca Copyright (C) 2012, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_TagJump.cpp b/sakura_core/cmd/CViewCommander_TagJump.cpp index 5a55ca59ed..92bea00b2f 100644 --- a/sakura_core/cmd/CViewCommander_TagJump.cpp +++ b/sakura_core/cmd/CViewCommander_TagJump.cpp @@ -15,7 +15,7 @@ Copyright (C) 2007, ryoji, maru, Uchi Copyright (C) 2008, MIK Copyright (C) 2010, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_Window.cpp b/sakura_core/cmd/CViewCommander_Window.cpp index baab9b67bc..9cd130fc97 100644 --- a/sakura_core/cmd/CViewCommander_Window.cpp +++ b/sakura_core/cmd/CViewCommander_Window.cpp @@ -15,7 +15,7 @@ Copyright (C) 2008, syat Copyright (C) 2009, syat Copyright (C) 2010, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/cmd/CViewCommander_inline.h b/sakura_core/cmd/CViewCommander_inline.h index 610f67d188..cb7d779c5b 100644 --- a/sakura_core/cmd/CViewCommander_inline.h +++ b/sakura_core/cmd/CViewCommander_inline.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2013, novice - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/config/app_constants.h b/sakura_core/config/app_constants.h index 9916227ee0..91157b5a84 100644 --- a/sakura_core/config/app_constants.h +++ b/sakura_core/config/app_constants.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/config/build_config.cpp b/sakura_core/config/build_config.cpp index 9f9f71652d..37014a71d5 100644 --- a/sakura_core/config/build_config.cpp +++ b/sakura_core/config/build_config.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/config/build_config.h b/sakura_core/config/build_config.h index 6cff0c7648..770b4d335b 100644 --- a/sakura_core/config/build_config.h +++ b/sakura_core/config/build_config.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2007, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/config/maxdata.h b/sakura_core/config/maxdata.h index dc7cc9ac63..c6baa7298b 100644 --- a/sakura_core/config/maxdata.h +++ b/sakura_core/config/maxdata.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2007, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/config/system_constants.h b/sakura_core/config/system_constants.h index d2ef125a58..2e9ed365ab 100644 --- a/sakura_core/config/system_constants.h +++ b/sakura_core/config/system_constants.h @@ -11,7 +11,7 @@ */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert.cpp b/sakura_core/convert/CConvert.cpp index 19563d3e0b..6e77f4e3f1 100644 --- a/sakura_core/convert/CConvert.cpp +++ b/sakura_core/convert/CConvert.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert.h b/sakura_core/convert/CConvert.h index 9895924172..d2d3d5fae4 100644 --- a/sakura_core/convert/CConvert.h +++ b/sakura_core/convert/CConvert.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2007, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_CodeAutoToSjis.cpp b/sakura_core/convert/CConvert_CodeAutoToSjis.cpp index d524091181..17131941ec 100644 --- a/sakura_core/convert/CConvert_CodeAutoToSjis.cpp +++ b/sakura_core/convert/CConvert_CodeAutoToSjis.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2021, Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_CodeAutoToSjis.h b/sakura_core/convert/CConvert_CodeAutoToSjis.h index 48fc30a03f..c0dd250068 100644 --- a/sakura_core/convert/CConvert_CodeAutoToSjis.h +++ b/sakura_core/convert/CConvert_CodeAutoToSjis.h @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2021, Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_CodeFromSjis.cpp b/sakura_core/convert/CConvert_CodeFromSjis.cpp index 6e2eae2d10..400194dd3f 100644 --- a/sakura_core/convert/CConvert_CodeFromSjis.cpp +++ b/sakura_core/convert/CConvert_CodeFromSjis.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2021, Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_CodeFromSjis.h b/sakura_core/convert/CConvert_CodeFromSjis.h index 6949066d7c..c52372c4bf 100644 --- a/sakura_core/convert/CConvert_CodeFromSjis.h +++ b/sakura_core/convert/CConvert_CodeFromSjis.h @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2021, Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_CodeToSjis.cpp b/sakura_core/convert/CConvert_CodeToSjis.cpp index f79e5b8f70..e33b24a26d 100644 --- a/sakura_core/convert/CConvert_CodeToSjis.cpp +++ b/sakura_core/convert/CConvert_CodeToSjis.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2021, Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_CodeToSjis.h b/sakura_core/convert/CConvert_CodeToSjis.h index affdcffa06..86b23e0372 100644 --- a/sakura_core/convert/CConvert_CodeToSjis.h +++ b/sakura_core/convert/CConvert_CodeToSjis.h @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2021, Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_HaneisuToZeneisu.cpp b/sakura_core/convert/CConvert_HaneisuToZeneisu.cpp index a69fe1b9bf..42f4716af9 100644 --- a/sakura_core/convert/CConvert_HaneisuToZeneisu.cpp +++ b/sakura_core/convert/CConvert_HaneisuToZeneisu.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_HaneisuToZeneisu.h b/sakura_core/convert/CConvert_HaneisuToZeneisu.h index a3331a77c8..ac9356eada 100644 --- a/sakura_core/convert/CConvert_HaneisuToZeneisu.h +++ b/sakura_core/convert/CConvert_HaneisuToZeneisu.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_HankataToZenhira.cpp b/sakura_core/convert/CConvert_HankataToZenhira.cpp index 729860c64e..78312f8dbe 100644 --- a/sakura_core/convert/CConvert_HankataToZenhira.cpp +++ b/sakura_core/convert/CConvert_HankataToZenhira.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_HankataToZenhira.h b/sakura_core/convert/CConvert_HankataToZenhira.h index 7e3804459d..bcaeac7ddc 100644 --- a/sakura_core/convert/CConvert_HankataToZenhira.h +++ b/sakura_core/convert/CConvert_HankataToZenhira.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_HankataToZenkata.cpp b/sakura_core/convert/CConvert_HankataToZenkata.cpp index e542e52550..10b33f62d6 100644 --- a/sakura_core/convert/CConvert_HankataToZenkata.cpp +++ b/sakura_core/convert/CConvert_HankataToZenkata.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_HankataToZenkata.h b/sakura_core/convert/CConvert_HankataToZenkata.h index d49c3f1b80..57502f4207 100644 --- a/sakura_core/convert/CConvert_HankataToZenkata.h +++ b/sakura_core/convert/CConvert_HankataToZenkata.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_SpaceToTab.cpp b/sakura_core/convert/CConvert_SpaceToTab.cpp index fb8b6f6345..05a3ecbe53 100644 --- a/sakura_core/convert/CConvert_SpaceToTab.cpp +++ b/sakura_core/convert/CConvert_SpaceToTab.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_SpaceToTab.h b/sakura_core/convert/CConvert_SpaceToTab.h index 20e083bdd5..ae92e34336 100644 --- a/sakura_core/convert/CConvert_SpaceToTab.h +++ b/sakura_core/convert/CConvert_SpaceToTab.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_TabToSpace.cpp b/sakura_core/convert/CConvert_TabToSpace.cpp index dc17779d31..d3693f28b7 100644 --- a/sakura_core/convert/CConvert_TabToSpace.cpp +++ b/sakura_core/convert/CConvert_TabToSpace.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_TabToSpace.h b/sakura_core/convert/CConvert_TabToSpace.h index d53cc29576..aace349282 100644 --- a/sakura_core/convert/CConvert_TabToSpace.h +++ b/sakura_core/convert/CConvert_TabToSpace.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_ToHankaku.cpp b/sakura_core/convert/CConvert_ToHankaku.cpp index 0a9ce2f6b3..9427c4487a 100644 --- a/sakura_core/convert/CConvert_ToHankaku.cpp +++ b/sakura_core/convert/CConvert_ToHankaku.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_ToHankaku.h b/sakura_core/convert/CConvert_ToHankaku.h index 97c5f7f806..05d7cc1924 100644 --- a/sakura_core/convert/CConvert_ToHankaku.h +++ b/sakura_core/convert/CConvert_ToHankaku.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_ToLower.cpp b/sakura_core/convert/CConvert_ToLower.cpp index 6a47170c18..747b4d2a09 100644 --- a/sakura_core/convert/CConvert_ToLower.cpp +++ b/sakura_core/convert/CConvert_ToLower.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_ToLower.h b/sakura_core/convert/CConvert_ToLower.h index fcf30b1f55..d930d9cc87 100644 --- a/sakura_core/convert/CConvert_ToLower.h +++ b/sakura_core/convert/CConvert_ToLower.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_ToUpper.cpp b/sakura_core/convert/CConvert_ToUpper.cpp index 240ec1f72d..a939a7cfc5 100644 --- a/sakura_core/convert/CConvert_ToUpper.cpp +++ b/sakura_core/convert/CConvert_ToUpper.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_ToUpper.h b/sakura_core/convert/CConvert_ToUpper.h index dc9ad7ec59..52c5beda2c 100644 --- a/sakura_core/convert/CConvert_ToUpper.h +++ b/sakura_core/convert/CConvert_ToUpper.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_ToZenhira.cpp b/sakura_core/convert/CConvert_ToZenhira.cpp index e76856e2d7..db5b768ba3 100644 --- a/sakura_core/convert/CConvert_ToZenhira.cpp +++ b/sakura_core/convert/CConvert_ToZenhira.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_ToZenhira.h b/sakura_core/convert/CConvert_ToZenhira.h index 6542ae699c..0f0a4d5b4c 100644 --- a/sakura_core/convert/CConvert_ToZenhira.h +++ b/sakura_core/convert/CConvert_ToZenhira.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_ToZenkata.cpp b/sakura_core/convert/CConvert_ToZenkata.cpp index 59c2964d0e..2e40854b5a 100644 --- a/sakura_core/convert/CConvert_ToZenkata.cpp +++ b/sakura_core/convert/CConvert_ToZenkata.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_ToZenkata.h b/sakura_core/convert/CConvert_ToZenkata.h index d761e48481..91147a0b86 100644 --- a/sakura_core/convert/CConvert_ToZenkata.h +++ b/sakura_core/convert/CConvert_ToZenkata.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_Trim.cpp b/sakura_core/convert/CConvert_Trim.cpp index 6526c4e949..c6e203fc60 100644 --- a/sakura_core/convert/CConvert_Trim.cpp +++ b/sakura_core/convert/CConvert_Trim.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_Trim.h b/sakura_core/convert/CConvert_Trim.h index 7c70aaea2d..2e35f77964 100644 --- a/sakura_core/convert/CConvert_Trim.h +++ b/sakura_core/convert/CConvert_Trim.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_ZeneisuToHaneisu.cpp b/sakura_core/convert/CConvert_ZeneisuToHaneisu.cpp index 4c9446acdd..42100d39df 100644 --- a/sakura_core/convert/CConvert_ZeneisuToHaneisu.cpp +++ b/sakura_core/convert/CConvert_ZeneisuToHaneisu.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_ZeneisuToHaneisu.h b/sakura_core/convert/CConvert_ZeneisuToHaneisu.h index 5c7e7f887f..2ce25ba5e3 100644 --- a/sakura_core/convert/CConvert_ZeneisuToHaneisu.h +++ b/sakura_core/convert/CConvert_ZeneisuToHaneisu.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_ZenkataToHankata.cpp b/sakura_core/convert/CConvert_ZenkataToHankata.cpp index d186f8cee0..51a9dd536d 100644 --- a/sakura_core/convert/CConvert_ZenkataToHankata.cpp +++ b/sakura_core/convert/CConvert_ZenkataToHankata.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CConvert_ZenkataToHankata.h b/sakura_core/convert/CConvert_ZenkataToHankata.h index 25726640bb..c9dc247c8c 100644 --- a/sakura_core/convert/CConvert_ZenkataToHankata.h +++ b/sakura_core/convert/CConvert_ZenkataToHankata.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CDecode.h b/sakura_core/convert/CDecode.h index 38f8ea3fb6..845ece13e8 100644 --- a/sakura_core/convert/CDecode.h +++ b/sakura_core/convert/CDecode.h @@ -4,7 +4,7 @@ @author */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CDecode_Base64Decode.cpp b/sakura_core/convert/CDecode_Base64Decode.cpp index 7d64d99c89..85fab95d04 100644 --- a/sakura_core/convert/CDecode_Base64Decode.cpp +++ b/sakura_core/convert/CDecode_Base64Decode.cpp @@ -5,7 +5,7 @@ */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CDecode_Base64Decode.h b/sakura_core/convert/CDecode_Base64Decode.h index 8998aa4a28..658c19442d 100644 --- a/sakura_core/convert/CDecode_Base64Decode.h +++ b/sakura_core/convert/CDecode_Base64Decode.h @@ -5,7 +5,7 @@ */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CDecode_UuDecode.cpp b/sakura_core/convert/CDecode_UuDecode.cpp index c4b902f5a7..6651a86e2a 100644 --- a/sakura_core/convert/CDecode_UuDecode.cpp +++ b/sakura_core/convert/CDecode_UuDecode.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/CDecode_UuDecode.h b/sakura_core/convert/CDecode_UuDecode.h index 96329aa30e..e13df7ff07 100644 --- a/sakura_core/convert/CDecode_UuDecode.h +++ b/sakura_core/convert/CDecode_UuDecode.h @@ -5,7 +5,7 @@ */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/convert_util.cpp b/sakura_core/convert/convert_util.cpp index fb070b71e9..7f9b5f1eac 100644 --- a/sakura_core/convert/convert_util.cpp +++ b/sakura_core/convert/convert_util.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/convert_util.h b/sakura_core/convert/convert_util.h index fd766c5cf3..d590ed9dd8 100644 --- a/sakura_core/convert/convert_util.h +++ b/sakura_core/convert/convert_util.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2007, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/convert_util2.cpp b/sakura_core/convert/convert_util2.cpp index 0808728062..9253ab3688 100644 --- a/sakura_core/convert/convert_util2.cpp +++ b/sakura_core/convert/convert_util2.cpp @@ -5,7 +5,7 @@ */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/convert/convert_util2.h b/sakura_core/convert/convert_util2.h index 6cb81b4a95..93c98e5489 100644 --- a/sakura_core/convert/convert_util2.h +++ b/sakura_core/convert/convert_util2.h @@ -5,7 +5,7 @@ */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/debug/CRunningTimer.cpp b/sakura_core/debug/CRunningTimer.cpp index eaf5573237..ea32ba93e8 100644 --- a/sakura_core/debug/CRunningTimer.cpp +++ b/sakura_core/debug/CRunningTimer.cpp @@ -9,7 +9,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/debug/CRunningTimer.h b/sakura_core/debug/CRunningTimer.h index 477ae6a8c3..d1e1943f88 100644 --- a/sakura_core/debug/CRunningTimer.h +++ b/sakura_core/debug/CRunningTimer.h @@ -9,7 +9,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/debug/Debug1.cpp b/sakura_core/debug/Debug1.cpp index ffbdae0e11..9cf8813aca 100644 --- a/sakura_core/debug/Debug1.cpp +++ b/sakura_core/debug/Debug1.cpp @@ -10,7 +10,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, aroka - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/debug/Debug1.h b/sakura_core/debug/Debug1.h index 0bb95c3a76..327ad2b722 100644 --- a/sakura_core/debug/Debug1.h +++ b/sakura_core/debug/Debug1.h @@ -7,7 +7,7 @@ */ /* Copyright (C) 1998-2001, Norio Nakatani - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/debug/Debug2.cpp b/sakura_core/debug/Debug2.cpp index 235f95422b..c8646aee0d 100644 --- a/sakura_core/debug/Debug2.cpp +++ b/sakura_core/debug/Debug2.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/debug/Debug2.h b/sakura_core/debug/Debug2.h index 3f6541339c..f917af9685 100644 --- a/sakura_core/debug/Debug2.h +++ b/sakura_core/debug/Debug2.h @@ -4,7 +4,7 @@ */ /* Copyright (C) 2007, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/debug/Debug3.cpp b/sakura_core/debug/Debug3.cpp index 3c1f339e23..0fcd9582da 100644 --- a/sakura_core/debug/Debug3.cpp +++ b/sakura_core/debug/Debug3.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/debug/Debug3.h b/sakura_core/debug/Debug3.h index 835c3412d3..ad78e895eb 100644 --- a/sakura_core/debug/Debug3.h +++ b/sakura_core/debug/Debug3.h @@ -4,7 +4,7 @@ */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDialog.cpp b/sakura_core/dlg/CDialog.cpp index e4b5ebf0cd..58002e9072 100644 --- a/sakura_core/dlg/CDialog.cpp +++ b/sakura_core/dlg/CDialog.cpp @@ -14,7 +14,7 @@ Copyright (C) 2009, ryoji Copyright (C) 2011, nasukoji Copyright (C) 2012, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDialog.h b/sakura_core/dlg/CDialog.h index f8c502bcf8..3e50d2ee5f 100644 --- a/sakura_core/dlg/CDialog.h +++ b/sakura_core/dlg/CDialog.h @@ -11,7 +11,7 @@ Copyright (C) 2006, ryoji Copyright (C) 2011, nasukoji Copyright (C) 2012, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgAbout.cpp b/sakura_core/dlg/CDlgAbout.cpp index 190c7078c5..253839913c 100644 --- a/sakura_core/dlg/CDlgAbout.cpp +++ b/sakura_core/dlg/CDlgAbout.cpp @@ -13,7 +13,7 @@ Copyright (C) 2004, Moca Copyright (C) 2005, genta Copyright (C) 2006, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgAbout.h b/sakura_core/dlg/CDlgAbout.h index 1c2271560d..6751813e2e 100644 --- a/sakura_core/dlg/CDlgAbout.h +++ b/sakura_core/dlg/CDlgAbout.h @@ -8,7 +8,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2000, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgCancel.cpp b/sakura_core/dlg/CDlgCancel.cpp index d20c141739..3375b39728 100644 --- a/sakura_core/dlg/CDlgCancel.cpp +++ b/sakura_core/dlg/CDlgCancel.cpp @@ -6,7 +6,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2008, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgCancel.h b/sakura_core/dlg/CDlgCancel.h index 2a64e72290..971d0ed4a9 100644 --- a/sakura_core/dlg/CDlgCancel.h +++ b/sakura_core/dlg/CDlgCancel.h @@ -8,7 +8,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2008, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgCompare.cpp b/sakura_core/dlg/CDlgCompare.cpp index f60f27a052..9f531d1c20 100644 --- a/sakura_core/dlg/CDlgCompare.cpp +++ b/sakura_core/dlg/CDlgCompare.cpp @@ -11,7 +11,7 @@ Copyright (C) 2003, MIK Copyright (C) 2006, ryoji Copyright (C) 2009, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgCompare.h b/sakura_core/dlg/CDlgCompare.h index 5fcfa6f35e..884f5e2996 100644 --- a/sakura_core/dlg/CDlgCompare.h +++ b/sakura_core/dlg/CDlgCompare.h @@ -6,7 +6,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2000, jepro - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgCtrlCode.cpp b/sakura_core/dlg/CDlgCtrlCode.cpp index ee392e8c42..9dbd2dc15b 100644 --- a/sakura_core/dlg/CDlgCtrlCode.cpp +++ b/sakura_core/dlg/CDlgCtrlCode.cpp @@ -8,7 +8,7 @@ Copyright (C) 2002-2003, MIK Copyright (C) 2006, ryoji + Copyright (C) 2011, nasukoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgCtrlCode.h b/sakura_core/dlg/CDlgCtrlCode.h index 339619d720..190d740a17 100644 --- a/sakura_core/dlg/CDlgCtrlCode.h +++ b/sakura_core/dlg/CDlgCtrlCode.h @@ -6,7 +6,7 @@ */ /* Copyright (C) 2002, MIK - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgDiff.cpp b/sakura_core/dlg/CDlgDiff.cpp index bcce0f306c..f665fe2226 100644 --- a/sakura_core/dlg/CDlgDiff.cpp +++ b/sakura_core/dlg/CDlgDiff.cpp @@ -12,7 +12,7 @@ Copyright (C) 2004, MIK, genta, じゅうじ Copyright (C) 2006, ryoji Copyright (C) 2009, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgDiff.h b/sakura_core/dlg/CDlgDiff.h index 425bd5f1a6..2e23e01cf1 100644 --- a/sakura_core/dlg/CDlgDiff.h +++ b/sakura_core/dlg/CDlgDiff.h @@ -7,7 +7,7 @@ /* Copyright (C) 2002, MIK Copyright (C) 2004, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgExec.cpp b/sakura_core/dlg/CDlgExec.cpp index f52326d1a4..678c1f7dc1 100644 --- a/sakura_core/dlg/CDlgExec.cpp +++ b/sakura_core/dlg/CDlgExec.cpp @@ -11,7 +11,7 @@ Copyright (C) 2006, ryoji Copyright (C) 2007, maru Copyright (C) 2009, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgExec.h b/sakura_core/dlg/CDlgExec.h index 7cef104a13..5d1f494e4e 100644 --- a/sakura_core/dlg/CDlgExec.h +++ b/sakura_core/dlg/CDlgExec.h @@ -7,7 +7,7 @@ Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, YAZAKI Copyright (C) 2009, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgFavorite.cpp b/sakura_core/dlg/CDlgFavorite.cpp index 4b414b7888..004afd6685 100644 --- a/sakura_core/dlg/CDlgFavorite.cpp +++ b/sakura_core/dlg/CDlgFavorite.cpp @@ -8,7 +8,7 @@ Copyright (C) 2003, MIK Copyright (C) 2006, ryoji Copyright (C) 2010, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgFavorite.h b/sakura_core/dlg/CDlgFavorite.h index ef3ea96d1c..39c65fbfcf 100644 --- a/sakura_core/dlg/CDlgFavorite.h +++ b/sakura_core/dlg/CDlgFavorite.h @@ -7,7 +7,7 @@ /* Copyright (C) 2003, MIK Copyright (C) 2010, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgFileUpdateQuery.cpp b/sakura_core/dlg/CDlgFileUpdateQuery.cpp index faf288f8dc..34b3069a9e 100644 --- a/sakura_core/dlg/CDlgFileUpdateQuery.cpp +++ b/sakura_core/dlg/CDlgFileUpdateQuery.cpp @@ -8,7 +8,7 @@ */ /* Copyright (C) 2002, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgFileUpdateQuery.h b/sakura_core/dlg/CDlgFileUpdateQuery.h index 1dbb4e21c9..b3a61a63ff 100644 --- a/sakura_core/dlg/CDlgFileUpdateQuery.h +++ b/sakura_core/dlg/CDlgFileUpdateQuery.h @@ -8,7 +8,7 @@ */ /* Copyright (C) 2002, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgFind.cpp b/sakura_core/dlg/CDlgFind.cpp index 5b0e96c482..95728cedb6 100644 --- a/sakura_core/dlg/CDlgFind.cpp +++ b/sakura_core/dlg/CDlgFind.cpp @@ -13,7 +13,7 @@ Copyright (C) 2006, ryoji Copyright (C) 2009, ryoji Copyright (C) 2012, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgFind.h b/sakura_core/dlg/CDlgFind.h index 088c04af11..cc40aa3f07 100644 --- a/sakura_core/dlg/CDlgFind.h +++ b/sakura_core/dlg/CDlgFind.h @@ -8,7 +8,7 @@ Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, YAZAKI Copyright (C) 2009, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgGrep.cpp b/sakura_core/dlg/CDlgGrep.cpp index 0b0e7b3b2b..68bf0bc016 100644 --- a/sakura_core/dlg/CDlgGrep.cpp +++ b/sakura_core/dlg/CDlgGrep.cpp @@ -11,7 +11,7 @@ Copyright (C) 2006, ryoji Copyright (C) 2010, ryoji Copyright (C) 2012, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgGrep.h b/sakura_core/dlg/CDlgGrep.h index cb67490d40..cfb1f1fe51 100644 --- a/sakura_core/dlg/CDlgGrep.h +++ b/sakura_core/dlg/CDlgGrep.h @@ -8,7 +8,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgGrepReplace.cpp b/sakura_core/dlg/CDlgGrepReplace.cpp index 0610a02272..9694add5cb 100644 --- a/sakura_core/dlg/CDlgGrepReplace.cpp +++ b/sakura_core/dlg/CDlgGrepReplace.cpp @@ -11,7 +11,7 @@ Copyright (C) 2006, ryoji Copyright (C) 2010, ryoji Copyright (C) 2014, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgGrepReplace.h b/sakura_core/dlg/CDlgGrepReplace.h index 6614579882..f37802ddcc 100644 --- a/sakura_core/dlg/CDlgGrepReplace.h +++ b/sakura_core/dlg/CDlgGrepReplace.h @@ -8,7 +8,7 @@ Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, Moca Copyright (C) 2014, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgInput1.cpp b/sakura_core/dlg/CDlgInput1.cpp index edadc43805..4602b2d1f9 100644 --- a/sakura_core/dlg/CDlgInput1.cpp +++ b/sakura_core/dlg/CDlgInput1.cpp @@ -9,7 +9,7 @@ Copyright (C) 2002, MIK Copyright (C) 2003, KEITA Copyright (C) 2006, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgInput1.h b/sakura_core/dlg/CDlgInput1.h index 43d62fe0a3..1e5cc6533d 100644 --- a/sakura_core/dlg/CDlgInput1.h +++ b/sakura_core/dlg/CDlgInput1.h @@ -6,7 +6,7 @@ */ /* Copyright (C) 1998-2001, Norio Nakatani - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgJump.cpp b/sakura_core/dlg/CDlgJump.cpp index 149e740050..c7ea236588 100644 --- a/sakura_core/dlg/CDlgJump.cpp +++ b/sakura_core/dlg/CDlgJump.cpp @@ -11,7 +11,7 @@ Copyright (C) 2002, aroka, MIK, YAZAKI Copyright (C) 2004, genta Copyright (C) 2006, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgJump.h b/sakura_core/dlg/CDlgJump.h index 76feb35a69..18e9e918c0 100644 --- a/sakura_core/dlg/CDlgJump.h +++ b/sakura_core/dlg/CDlgJump.h @@ -9,7 +9,7 @@ Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2000, jepro Copyright (C) 2002, YAZAKI - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgOpenFile.cpp b/sakura_core/dlg/CDlgOpenFile.cpp index d935976dc2..2dfdc64f8b 100644 --- a/sakura_core/dlg/CDlgOpenFile.cpp +++ b/sakura_core/dlg/CDlgOpenFile.cpp @@ -12,7 +12,7 @@ Copyright (C) 2004, genta Copyright (C) 2005, novice, ryoji Copyright (C) 2006, ryoji, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgOpenFile.h b/sakura_core/dlg/CDlgOpenFile.h index 6e7efb5fce..ba9bedb34f 100644 --- a/sakura_core/dlg/CDlgOpenFile.h +++ b/sakura_core/dlg/CDlgOpenFile.h @@ -12,7 +12,7 @@ Copyright (C) 2004, genta, MIK Copyright (C) 2005, ryoji Copyright (C) 2006, Moca, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp index 5263ed3b60..fa4ded52c7 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp @@ -12,7 +12,7 @@ Copyright (C) 2004, genta Copyright (C) 2005, novice, ryoji Copyright (C) 2006, ryoji, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp index a29d62cbb4..3cd6ae2134 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp @@ -12,7 +12,7 @@ Copyright (C) 2004, genta Copyright (C) 2005, novice, ryoji Copyright (C) 2006, ryoji, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgPluginOption.cpp b/sakura_core/dlg/CDlgPluginOption.cpp index ac34116e83..f1b903e631 100644 --- a/sakura_core/dlg/CDlgPluginOption.cpp +++ b/sakura_core/dlg/CDlgPluginOption.cpp @@ -6,7 +6,7 @@ */ /* Copyright (C) 2010, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgPluginOption.h b/sakura_core/dlg/CDlgPluginOption.h index e280b7d471..2a3cbcb570 100644 --- a/sakura_core/dlg/CDlgPluginOption.h +++ b/sakura_core/dlg/CDlgPluginOption.h @@ -6,7 +6,7 @@ */ /* Copyright (C) 2010, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgPrintSetting.cpp b/sakura_core/dlg/CDlgPrintSetting.cpp index d2b297e82a..20eb77aa65 100644 --- a/sakura_core/dlg/CDlgPrintSetting.cpp +++ b/sakura_core/dlg/CDlgPrintSetting.cpp @@ -12,7 +12,7 @@ Copyright (C) 2002, MIK, aroka, YAZAKI Copyright (C) 2003, かろと Copyright (C) 2006, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgPrintSetting.h b/sakura_core/dlg/CDlgPrintSetting.h index 6b60c5c9fa..0ea7486f77 100644 --- a/sakura_core/dlg/CDlgPrintSetting.h +++ b/sakura_core/dlg/CDlgPrintSetting.h @@ -6,7 +6,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, YAZAKI - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgProfileMgr.cpp b/sakura_core/dlg/CDlgProfileMgr.cpp index 5929083748..4b45aeb92a 100644 --- a/sakura_core/dlg/CDlgProfileMgr.cpp +++ b/sakura_core/dlg/CDlgProfileMgr.cpp @@ -6,7 +6,7 @@ */ /* Copyright (C) 2013, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgProfileMgr.h b/sakura_core/dlg/CDlgProfileMgr.h index a447c59b15..6eeb3a57d1 100644 --- a/sakura_core/dlg/CDlgProfileMgr.h +++ b/sakura_core/dlg/CDlgProfileMgr.h @@ -6,7 +6,7 @@ */ /* Copyright (C) 2013, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgProperty.cpp b/sakura_core/dlg/CDlgProperty.cpp index ea4a077244..ea85c49a24 100644 --- a/sakura_core/dlg/CDlgProperty.cpp +++ b/sakura_core/dlg/CDlgProperty.cpp @@ -10,7 +10,7 @@ Copyright (C) 2002, Moca, MIK, YAZAKI Copyright (C) 2006, ryoji Copyright (C) 2009, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgProperty.h b/sakura_core/dlg/CDlgProperty.h index b2753b4482..6a4f066573 100644 --- a/sakura_core/dlg/CDlgProperty.h +++ b/sakura_core/dlg/CDlgProperty.h @@ -7,7 +7,7 @@ */ /* Copyright (C) 1998-2001, Norio Nakatani - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgReplace.cpp b/sakura_core/dlg/CDlgReplace.cpp index aac234b14a..09700e0458 100644 --- a/sakura_core/dlg/CDlgReplace.cpp +++ b/sakura_core/dlg/CDlgReplace.cpp @@ -12,7 +12,7 @@ Copyright (C) 2007, ryoji Copyright (C) 2009, ryoji Copyright (C) 2012, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgReplace.h b/sakura_core/dlg/CDlgReplace.h index 37c7491ab4..c6379c9569 100644 --- a/sakura_core/dlg/CDlgReplace.h +++ b/sakura_core/dlg/CDlgReplace.h @@ -10,7 +10,7 @@ Copyright (C) 2002, hor Copyright (C) 2007, ryoji Copyright (C) 2009, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgSetCharSet.cpp b/sakura_core/dlg/CDlgSetCharSet.cpp index bfcb7f39b8..fd04ccdce1 100644 --- a/sakura_core/dlg/CDlgSetCharSet.cpp +++ b/sakura_core/dlg/CDlgSetCharSet.cpp @@ -6,7 +6,7 @@ */ /* Copyright (C) 2010, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgSetCharSet.h b/sakura_core/dlg/CDlgSetCharSet.h index 18b9219375..7705a91685 100644 --- a/sakura_core/dlg/CDlgSetCharSet.h +++ b/sakura_core/dlg/CDlgSetCharSet.h @@ -6,7 +6,7 @@ */ /* Copyright (C) 2010, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgTagJumpList.cpp b/sakura_core/dlg/CDlgTagJumpList.cpp index c9503601f5..02f31d6741 100644 --- a/sakura_core/dlg/CDlgTagJumpList.cpp +++ b/sakura_core/dlg/CDlgTagJumpList.cpp @@ -10,7 +10,7 @@ Copyright (C) 2005, MIK Copyright (C) 2006, genta, ryoji Copyright (C) 2010, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgTagJumpList.h b/sakura_core/dlg/CDlgTagJumpList.h index e6dc5e900e..57b5225cb6 100644 --- a/sakura_core/dlg/CDlgTagJumpList.h +++ b/sakura_core/dlg/CDlgTagJumpList.h @@ -8,7 +8,7 @@ Copyright (C) 2003, MIK Copyright (C) 2005, MIK Copyright (C) 2010, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgTagsMake.cpp b/sakura_core/dlg/CDlgTagsMake.cpp index a687ec1e5e..dec592d1e0 100644 --- a/sakura_core/dlg/CDlgTagsMake.cpp +++ b/sakura_core/dlg/CDlgTagsMake.cpp @@ -7,7 +7,7 @@ /* Copyright (C) 2003, MIK Copyright (C) 2006, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgTagsMake.h b/sakura_core/dlg/CDlgTagsMake.h index aded3dbe83..397c549094 100644 --- a/sakura_core/dlg/CDlgTagsMake.h +++ b/sakura_core/dlg/CDlgTagsMake.h @@ -6,7 +6,7 @@ */ /* Copyright (C) 2003, MIK - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgWinSize.cpp b/sakura_core/dlg/CDlgWinSize.cpp index 6ef4508a1a..104131d8b7 100644 --- a/sakura_core/dlg/CDlgWinSize.cpp +++ b/sakura_core/dlg/CDlgWinSize.cpp @@ -7,7 +7,7 @@ /* Copyright (C) 2004, genta, Moca Copyright (C) 2006, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgWinSize.h b/sakura_core/dlg/CDlgWinSize.h index c9af8a038b..74b00e0acd 100644 --- a/sakura_core/dlg/CDlgWinSize.h +++ b/sakura_core/dlg/CDlgWinSize.h @@ -6,7 +6,7 @@ */ /* Copyright (C) 2004, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/dlg/CDlgWindowList.cpp b/sakura_core/dlg/CDlgWindowList.cpp index 6bea5b34a9..89275113e1 100644 --- a/sakura_core/dlg/CDlgWindowList.cpp +++ b/sakura_core/dlg/CDlgWindowList.cpp @@ -13,7 +13,7 @@ Copyright (C) 2006, ryoji Copyright (C) 2009, ryoji Copyright (C) 2015, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/dlg/CDlgWindowList.h b/sakura_core/dlg/CDlgWindowList.h index 271b432051..7168e7d06d 100644 --- a/sakura_core/dlg/CDlgWindowList.h +++ b/sakura_core/dlg/CDlgWindowList.h @@ -6,7 +6,7 @@ */ /* Copyright (C) 2015, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CBlockComment.cpp b/sakura_core/doc/CBlockComment.cpp index 8fa1495190..36fa7cc7f5 100644 --- a/sakura_core/doc/CBlockComment.cpp +++ b/sakura_core/doc/CBlockComment.cpp @@ -8,7 +8,7 @@ Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, YAZAKI, Moca Copyright (C) 2005, D.S.Koba - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/doc/CBlockComment.h b/sakura_core/doc/CBlockComment.h index d3570f3a94..9f48b27bbe 100644 --- a/sakura_core/doc/CBlockComment.h +++ b/sakura_core/doc/CBlockComment.h @@ -7,7 +7,7 @@ /* Copyright (C) 2002, Yazaki Copyright (C) 2005, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/doc/CDocEditor.cpp b/sakura_core/doc/CDocEditor.cpp index ce12c8f47f..29c3ca3fc9 100644 --- a/sakura_core/doc/CDocEditor.cpp +++ b/sakura_core/doc/CDocEditor.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocEditor.h b/sakura_core/doc/CDocEditor.h index 27dc9fc663..56f2694ae0 100644 --- a/sakura_core/doc/CDocEditor.h +++ b/sakura_core/doc/CDocEditor.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocFile.cpp b/sakura_core/doc/CDocFile.cpp index 7a453b6cfc..a67d1f4508 100644 --- a/sakura_core/doc/CDocFile.cpp +++ b/sakura_core/doc/CDocFile.cpp @@ -2,7 +2,7 @@ /* Copyright (C) 2008, kobake Copyright (C) 2013, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocFile.h b/sakura_core/doc/CDocFile.h index 756e8fce71..9d2e989750 100644 --- a/sakura_core/doc/CDocFile.h +++ b/sakura_core/doc/CDocFile.h @@ -2,7 +2,7 @@ /* Copyright (C) 2008, kobake Copyright (C) 2013, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocFileOperation.cpp b/sakura_core/doc/CDocFileOperation.cpp index 1c95bde3e4..9a7aa11d92 100644 --- a/sakura_core/doc/CDocFileOperation.cpp +++ b/sakura_core/doc/CDocFileOperation.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocFileOperation.h b/sakura_core/doc/CDocFileOperation.h index 95b8edfcd0..404366a70c 100644 --- a/sakura_core/doc/CDocFileOperation.h +++ b/sakura_core/doc/CDocFileOperation.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocListener.cpp b/sakura_core/doc/CDocListener.cpp index 73f75cfa6e..55cbec5cd0 100644 --- a/sakura_core/doc/CDocListener.cpp +++ b/sakura_core/doc/CDocListener.cpp @@ -10,7 +10,7 @@ */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocListener.h b/sakura_core/doc/CDocListener.h index 0cd92dc606..b5cf9d4a9a 100644 --- a/sakura_core/doc/CDocListener.h +++ b/sakura_core/doc/CDocListener.h @@ -11,7 +11,7 @@ /* Copyright (C) 2008, kobake Copyright (C) 2013, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocLocker.cpp b/sakura_core/doc/CDocLocker.cpp index e0f88b04a5..bea82f534a 100644 --- a/sakura_core/doc/CDocLocker.cpp +++ b/sakura_core/doc/CDocLocker.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocLocker.h b/sakura_core/doc/CDocLocker.h index aba4f4a5b5..3793b6bf68 100644 --- a/sakura_core/doc/CDocLocker.h +++ b/sakura_core/doc/CDocLocker.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocOutline.cpp b/sakura_core/doc/CDocOutline.cpp index 1e08b37128..4f4863ea96 100644 --- a/sakura_core/doc/CDocOutline.cpp +++ b/sakura_core/doc/CDocOutline.cpp @@ -11,7 +11,7 @@ Copyright (C) 2002, frozen Copyright (C) 2003, zenryaku Copyright (C) 2005, genta, D.S.Koba, じゅうじ - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/doc/CDocOutline.h b/sakura_core/doc/CDocOutline.h index cd6e18ebd9..c6736f9fa9 100644 --- a/sakura_core/doc/CDocOutline.h +++ b/sakura_core/doc/CDocOutline.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocReader.cpp b/sakura_core/doc/CDocReader.cpp index b703866ece..ba864a7be6 100644 --- a/sakura_core/doc/CDocReader.cpp +++ b/sakura_core/doc/CDocReader.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocReader.h b/sakura_core/doc/CDocReader.h index 9087e08008..4266cf3f5f 100644 --- a/sakura_core/doc/CDocReader.h +++ b/sakura_core/doc/CDocReader.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocType.cpp b/sakura_core/doc/CDocType.cpp index 8d87b9203b..a21280cc05 100644 --- a/sakura_core/doc/CDocType.cpp +++ b/sakura_core/doc/CDocType.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocType.h b/sakura_core/doc/CDocType.h index ad06410420..b97566fe13 100644 --- a/sakura_core/doc/CDocType.h +++ b/sakura_core/doc/CDocType.h @@ -6,7 +6,7 @@ */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocTypeSetting.cpp b/sakura_core/doc/CDocTypeSetting.cpp index 9be3d474b0..094cbd4896 100644 --- a/sakura_core/doc/CDocTypeSetting.cpp +++ b/sakura_core/doc/CDocTypeSetting.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocTypeSetting.h b/sakura_core/doc/CDocTypeSetting.h index 9cf8251199..1c46badc99 100644 --- a/sakura_core/doc/CDocTypeSetting.h +++ b/sakura_core/doc/CDocTypeSetting.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocVisitor.cpp b/sakura_core/doc/CDocVisitor.cpp index e70d5a6d12..6d6c43864b 100644 --- a/sakura_core/doc/CDocVisitor.cpp +++ b/sakura_core/doc/CDocVisitor.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CDocVisitor.h b/sakura_core/doc/CDocVisitor.h index 0b1a929b2e..4de4d44d06 100644 --- a/sakura_core/doc/CDocVisitor.h +++ b/sakura_core/doc/CDocVisitor.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CEditDoc.cpp b/sakura_core/doc/CEditDoc.cpp index abca67d5ef..7e49ea9d95 100644 --- a/sakura_core/doc/CEditDoc.cpp +++ b/sakura_core/doc/CEditDoc.cpp @@ -18,7 +18,7 @@ Copyright (C) 2009, nasukoji Copyright (C) 2011, ryoji Copyright (C) 2013, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CEditDoc.h b/sakura_core/doc/CEditDoc.h index 145e781c97..7a1a67433e 100644 --- a/sakura_core/doc/CEditDoc.h +++ b/sakura_core/doc/CEditDoc.h @@ -15,7 +15,7 @@ Copyright (C) 2006, ryoji Copyright (C) 2007, ryoji, maru Copyright (C) 2008, ryoji, nasukoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/CLineComment.cpp b/sakura_core/doc/CLineComment.cpp index 38a4e6bf88..ac9ae60580 100644 --- a/sakura_core/doc/CLineComment.cpp +++ b/sakura_core/doc/CLineComment.cpp @@ -7,7 +7,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, Yazaki, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/doc/CLineComment.h b/sakura_core/doc/CLineComment.h index 55d3c32762..38eeeeba34 100644 --- a/sakura_core/doc/CLineComment.h +++ b/sakura_core/doc/CLineComment.h @@ -6,7 +6,7 @@ */ /* Copyright (C) 2002, Yazaki - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/doc/layout/CLayout.cpp b/sakura_core/doc/layout/CLayout.cpp index 3bd2614613..97e1f1c225 100644 --- a/sakura_core/doc/layout/CLayout.cpp +++ b/sakura_core/doc/layout/CLayout.cpp @@ -7,7 +7,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, YAZAKI - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/doc/layout/CLayout.h b/sakura_core/doc/layout/CLayout.h index 6ef20b3272..04b75c560f 100644 --- a/sakura_core/doc/layout/CLayout.h +++ b/sakura_core/doc/layout/CLayout.h @@ -8,7 +8,7 @@ Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, YAZAKI, aroka Copyright (C) 2009, nasukoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/doc/layout/CLayoutExInfo.h b/sakura_core/doc/layout/CLayoutExInfo.h index 248cba0b22..8d18504180 100644 --- a/sakura_core/doc/layout/CLayoutExInfo.h +++ b/sakura_core/doc/layout/CLayoutExInfo.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2011, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/layout/CLayoutMgr.cpp b/sakura_core/doc/layout/CLayoutMgr.cpp index 47b6e7c82d..5a270d59dd 100644 --- a/sakura_core/doc/layout/CLayoutMgr.cpp +++ b/sakura_core/doc/layout/CLayoutMgr.cpp @@ -10,7 +10,7 @@ Copyright (C) 2004, genta, Moca Copyright (C) 2005, D.S.Koba, Moca Copyright (C) 2009, ryoji, nasukoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/doc/layout/CLayoutMgr.h b/sakura_core/doc/layout/CLayoutMgr.h index e165503b08..ef6629bc3e 100644 --- a/sakura_core/doc/layout/CLayoutMgr.h +++ b/sakura_core/doc/layout/CLayoutMgr.h @@ -14,7 +14,7 @@ Copyright (C) 2003, genta Copyright (C) 2005, Moca, genta, D.S.Koba Copyright (C) 2009, nasukoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp b/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp index cabbfcd265..86c489eca1 100644 --- a/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp +++ b/sakura_core/doc/layout/CLayoutMgr_DoLayout.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/layout/CLayoutMgr_New.cpp b/sakura_core/doc/layout/CLayoutMgr_New.cpp index b5ff4ef52f..1e25aa0257 100644 --- a/sakura_core/doc/layout/CLayoutMgr_New.cpp +++ b/sakura_core/doc/layout/CLayoutMgr_New.cpp @@ -11,7 +11,7 @@ Copyright (C) 2004, Moca, genta Copyright (C) 2005, D.S.Koba, Moca Copyright (C) 2009, nasukoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/doc/layout/CLayoutMgr_New2.cpp b/sakura_core/doc/layout/CLayoutMgr_New2.cpp index c901e87244..17daaa513f 100644 --- a/sakura_core/doc/layout/CLayoutMgr_New2.cpp +++ b/sakura_core/doc/layout/CLayoutMgr_New2.cpp @@ -7,7 +7,7 @@ Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, MIK, aroka Copyright (C) 2009, nasukoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/doc/layout/CTsvModeInfo.cpp b/sakura_core/doc/layout/CTsvModeInfo.cpp index 5056b96d7a..9f6ca32890 100644 --- a/sakura_core/doc/layout/CTsvModeInfo.cpp +++ b/sakura_core/doc/layout/CTsvModeInfo.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2015, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/layout/CTsvModeInfo.h b/sakura_core/doc/layout/CTsvModeInfo.h index 8d11b65252..8b984ba096 100644 --- a/sakura_core/doc/layout/CTsvModeInfo.h +++ b/sakura_core/doc/layout/CTsvModeInfo.h @@ -3,7 +3,7 @@ */ /* Copyright (C) 2015, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/doc/logic/CDocLine.cpp b/sakura_core/doc/logic/CDocLine.cpp index 1f05973355..2725e642e8 100644 --- a/sakura_core/doc/logic/CDocLine.cpp +++ b/sakura_core/doc/logic/CDocLine.cpp @@ -7,7 +7,7 @@ Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2001, hor, genta Copyright (C) 2002, MIK, YAZAKI - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/doc/logic/CDocLine.h b/sakura_core/doc/logic/CDocLine.h index 88003aa49a..f66961690a 100644 --- a/sakura_core/doc/logic/CDocLine.h +++ b/sakura_core/doc/logic/CDocLine.h @@ -10,7 +10,7 @@ Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2001, hor Copyright (C) 2002, MIK - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/doc/logic/CDocLineMgr.cpp b/sakura_core/doc/logic/CDocLineMgr.cpp index 4bd77233dd..a644720a16 100644 --- a/sakura_core/doc/logic/CDocLineMgr.cpp +++ b/sakura_core/doc/logic/CDocLineMgr.cpp @@ -15,7 +15,7 @@ Copyright (C) 2003, Moca, ryoji, genta, かろと Copyright (C) 2004, genta, Moca Copyright (C) 2005, D.S.Koba, ryoji, かろと - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/doc/logic/CDocLineMgr.h b/sakura_core/doc/logic/CDocLineMgr.h index 1816d2c815..761b91f557 100644 --- a/sakura_core/doc/logic/CDocLineMgr.h +++ b/sakura_core/doc/logic/CDocLineMgr.h @@ -12,7 +12,7 @@ Copyright (C) 2001, hor, genta Copyright (C) 2002, aroka, MIK, hor Copyright (C) 2003, Moca, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/docplus/CBookmarkManager.cpp b/sakura_core/docplus/CBookmarkManager.cpp index c7f352ca68..b15175314e 100644 --- a/sakura_core/docplus/CBookmarkManager.cpp +++ b/sakura_core/docplus/CBookmarkManager.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/docplus/CBookmarkManager.h b/sakura_core/docplus/CBookmarkManager.h index d762f9bc12..f9af307977 100644 --- a/sakura_core/docplus/CBookmarkManager.h +++ b/sakura_core/docplus/CBookmarkManager.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/docplus/CDiffManager.cpp b/sakura_core/docplus/CDiffManager.cpp index fd05ebbff9..56b027c516 100644 --- a/sakura_core/docplus/CDiffManager.cpp +++ b/sakura_core/docplus/CDiffManager.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/docplus/CDiffManager.h b/sakura_core/docplus/CDiffManager.h index 13210ed8b7..1c4324dd09 100644 --- a/sakura_core/docplus/CDiffManager.h +++ b/sakura_core/docplus/CDiffManager.h @@ -3,7 +3,7 @@ //2008.02.23 kobake 大整理 /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/docplus/CFuncListManager.cpp b/sakura_core/docplus/CFuncListManager.cpp index a10d54419c..374e53ab9e 100644 --- a/sakura_core/docplus/CFuncListManager.cpp +++ b/sakura_core/docplus/CFuncListManager.cpp @@ -2,7 +2,7 @@ /* Copyright (C) 2008, kobake Copyright (C) 2014, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/docplus/CFuncListManager.h b/sakura_core/docplus/CFuncListManager.h index 1c6937f5f6..feae741150 100644 --- a/sakura_core/docplus/CFuncListManager.h +++ b/sakura_core/docplus/CFuncListManager.h @@ -2,7 +2,7 @@ /* Copyright (C) 2008, kobake Copyright (C) 2014, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/docplus/CModifyManager.cpp b/sakura_core/docplus/CModifyManager.cpp index be817f56a1..b43fa72dea 100644 --- a/sakura_core/docplus/CModifyManager.cpp +++ b/sakura_core/docplus/CModifyManager.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/docplus/CModifyManager.h b/sakura_core/docplus/CModifyManager.h index b970b6a5ca..303990267e 100644 --- a/sakura_core/docplus/CModifyManager.h +++ b/sakura_core/docplus/CModifyManager.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CAppNodeManager.cpp b/sakura_core/env/CAppNodeManager.cpp index 0e8171b2e0..c0b48d8cf4 100644 --- a/sakura_core/env/CAppNodeManager.cpp +++ b/sakura_core/env/CAppNodeManager.cpp @@ -9,7 +9,7 @@ Copyright (C) 2011, syat Copyright (C) 2012, syat, Uchi Copyright (C) 2013, Moca, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CAppNodeManager.h b/sakura_core/env/CAppNodeManager.h index ecc5594c13..7afdc7de37 100644 --- a/sakura_core/env/CAppNodeManager.h +++ b/sakura_core/env/CAppNodeManager.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CDocTypeManager.cpp b/sakura_core/env/CDocTypeManager.cpp index aa622b98d8..6a0955298e 100644 --- a/sakura_core/env/CDocTypeManager.cpp +++ b/sakura_core/env/CDocTypeManager.cpp @@ -4,7 +4,7 @@ */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CDocTypeManager.h b/sakura_core/env/CDocTypeManager.h index 631fe62c39..177f9bd58f 100644 --- a/sakura_core/env/CDocTypeManager.h +++ b/sakura_core/env/CDocTypeManager.h @@ -4,7 +4,7 @@ */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CFileNameManager.cpp b/sakura_core/env/CFileNameManager.cpp index f010ee3944..914d9a76be 100644 --- a/sakura_core/env/CFileNameManager.cpp +++ b/sakura_core/env/CFileNameManager.cpp @@ -4,7 +4,7 @@ */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CFileNameManager.h b/sakura_core/env/CFileNameManager.h index 5ca1114724..4bb0eb9a24 100644 --- a/sakura_core/env/CFileNameManager.h +++ b/sakura_core/env/CFileNameManager.h @@ -4,7 +4,7 @@ */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CFormatManager.cpp b/sakura_core/env/CFormatManager.cpp index 8dc6d70c57..eac2740239 100644 --- a/sakura_core/env/CFormatManager.cpp +++ b/sakura_core/env/CFormatManager.cpp @@ -4,7 +4,7 @@ */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CFormatManager.h b/sakura_core/env/CFormatManager.h index 44833475af..13f12b17b7 100644 --- a/sakura_core/env/CFormatManager.h +++ b/sakura_core/env/CFormatManager.h @@ -4,7 +4,7 @@ */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CHelpManager.cpp b/sakura_core/env/CHelpManager.cpp index 76ad1dcfca..509fabe2b2 100644 --- a/sakura_core/env/CHelpManager.cpp +++ b/sakura_core/env/CHelpManager.cpp @@ -4,7 +4,7 @@ */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CHelpManager.h b/sakura_core/env/CHelpManager.h index f330ed8c05..f12b57fb68 100644 --- a/sakura_core/env/CHelpManager.h +++ b/sakura_core/env/CHelpManager.h @@ -4,7 +4,7 @@ */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CSakuraEnvironment.cpp b/sakura_core/env/CSakuraEnvironment.cpp index 902fd054ba..93c085a38b 100644 --- a/sakura_core/env/CSakuraEnvironment.cpp +++ b/sakura_core/env/CSakuraEnvironment.cpp @@ -2,7 +2,7 @@ /* Copyright (C) 2008, kobake, ryoji Copyright (C) 2012, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CSakuraEnvironment.h b/sakura_core/env/CSakuraEnvironment.h index 89e411305d..ac029f4b1b 100644 --- a/sakura_core/env/CSakuraEnvironment.h +++ b/sakura_core/env/CSakuraEnvironment.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CSearchKeywordManager.cpp b/sakura_core/env/CSearchKeywordManager.cpp index bf6d3d7c3b..d1eb5cec14 100644 --- a/sakura_core/env/CSearchKeywordManager.cpp +++ b/sakura_core/env/CSearchKeywordManager.cpp @@ -4,7 +4,7 @@ */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CSearchKeywordManager.h b/sakura_core/env/CSearchKeywordManager.h index 61c4a63a19..4e9fc62c81 100644 --- a/sakura_core/env/CSearchKeywordManager.h +++ b/sakura_core/env/CSearchKeywordManager.h @@ -4,7 +4,7 @@ */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CShareData.cpp b/sakura_core/env/CShareData.cpp index efa09572b0..39fbc7521e 100644 --- a/sakura_core/env/CShareData.cpp +++ b/sakura_core/env/CShareData.cpp @@ -18,7 +18,7 @@ Copyright (C) 2009, nasukoji, ryoji Copyright (C) 2011, nasukoji Copyright (C) 2012, Moca, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/env/CShareData.h b/sakura_core/env/CShareData.h index 9353e810b3..6c880e6cf0 100644 --- a/sakura_core/env/CShareData.h +++ b/sakura_core/env/CShareData.h @@ -16,7 +16,7 @@ Copyright (C) 2007, ryoji, maru Copyright (C) 2008, ryoji, Uchi Copyright (C) 2011, nasukoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/env/CShareData_IO.cpp b/sakura_core/env/CShareData_IO.cpp index cd83b5abb3..a18e9407b9 100644 --- a/sakura_core/env/CShareData_IO.cpp +++ b/sakura_core/env/CShareData_IO.cpp @@ -2,7 +2,7 @@ //2008.XX.XX kobake CShareDataから分離 /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CShareData_IO.h b/sakura_core/env/CShareData_IO.h index edd0284a03..a736732f8e 100644 --- a/sakura_core/env/CShareData_IO.h +++ b/sakura_core/env/CShareData_IO.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CTagJumpManager.cpp b/sakura_core/env/CTagJumpManager.cpp index af99fe7f95..a696856c82 100644 --- a/sakura_core/env/CTagJumpManager.cpp +++ b/sakura_core/env/CTagJumpManager.cpp @@ -4,7 +4,7 @@ */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CTagJumpManager.h b/sakura_core/env/CTagJumpManager.h index 8aedd927d8..feb5459206 100644 --- a/sakura_core/env/CTagJumpManager.h +++ b/sakura_core/env/CTagJumpManager.h @@ -4,7 +4,7 @@ */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CommonSetting.cpp b/sakura_core/env/CommonSetting.cpp index 8183b54897..2726d412ac 100644 --- a/sakura_core/env/CommonSetting.cpp +++ b/sakura_core/env/CommonSetting.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/CommonSetting.h b/sakura_core/env/CommonSetting.h index 4a9c24541b..1e5349d251 100644 --- a/sakura_core/env/CommonSetting.h +++ b/sakura_core/env/CommonSetting.h @@ -2,7 +2,7 @@ //2007.09.28 kobake Common整理 /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/DLLSHAREDATA.cpp b/sakura_core/env/DLLSHAREDATA.cpp index ce0c2cd1c6..d8d40d3478 100644 --- a/sakura_core/env/DLLSHAREDATA.cpp +++ b/sakura_core/env/DLLSHAREDATA.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/env/DLLSHAREDATA.h b/sakura_core/env/DLLSHAREDATA.h index a2de7beff3..ed247c3d43 100644 --- a/sakura_core/env/DLLSHAREDATA.h +++ b/sakura_core/env/DLLSHAREDATA.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/extmodule/CBregexp.cpp b/sakura_core/extmodule/CBregexp.cpp index 58cf687823..fcfe140e86 100644 --- a/sakura_core/extmodule/CBregexp.cpp +++ b/sakura_core/extmodule/CBregexp.cpp @@ -17,7 +17,7 @@ Copyright (C) 2005, かろと Copyright (C) 2006, かろと Copyright (C) 2007, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/extmodule/CBregexp.h b/sakura_core/extmodule/CBregexp.h index 59d05ab1c2..1e2a3510bb 100644 --- a/sakura_core/extmodule/CBregexp.h +++ b/sakura_core/extmodule/CBregexp.h @@ -17,7 +17,7 @@ Copyright (C) 2005, かろと, aroka Copyright (C) 2006, かろと Copyright (C) 2007, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/extmodule/CBregexpDll2.cpp b/sakura_core/extmodule/CBregexpDll2.cpp index 6f0f2db443..6991a75a71 100644 --- a/sakura_core/extmodule/CBregexpDll2.cpp +++ b/sakura_core/extmodule/CBregexpDll2.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/extmodule/CBregexpDll2.h b/sakura_core/extmodule/CBregexpDll2.h index ec8e4ae0d4..4058bfe45d 100644 --- a/sakura_core/extmodule/CBregexpDll2.h +++ b/sakura_core/extmodule/CBregexpDll2.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/extmodule/CDllHandler.cpp b/sakura_core/extmodule/CDllHandler.cpp index b74e3b10b9..492fe89cb7 100644 --- a/sakura_core/extmodule/CDllHandler.cpp +++ b/sakura_core/extmodule/CDllHandler.cpp @@ -6,7 +6,7 @@ */ /* Copyright (C) 2001, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/extmodule/CDllHandler.h b/sakura_core/extmodule/CDllHandler.h index 04f37ee075..40d4f86fc2 100644 --- a/sakura_core/extmodule/CDllHandler.h +++ b/sakura_core/extmodule/CDllHandler.h @@ -7,7 +7,7 @@ /* Copyright (C) 2001, genta Copyright (C) 2002, YAZAKI, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/extmodule/CHtmlHelp.cpp b/sakura_core/extmodule/CHtmlHelp.cpp index 0821495bac..d0e708b624 100644 --- a/sakura_core/extmodule/CHtmlHelp.cpp +++ b/sakura_core/extmodule/CHtmlHelp.cpp @@ -8,7 +8,7 @@ */ /* Copyright (C) 2001, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/extmodule/CHtmlHelp.h b/sakura_core/extmodule/CHtmlHelp.h index 4954f6cf5e..ab42f3a766 100644 --- a/sakura_core/extmodule/CHtmlHelp.h +++ b/sakura_core/extmodule/CHtmlHelp.h @@ -8,7 +8,7 @@ */ /* Copyright (C) 2001, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/extmodule/CIcu4cI18n.cpp b/sakura_core/extmodule/CIcu4cI18n.cpp index 1527ca4891..57fd764afc 100644 --- a/sakura_core/extmodule/CIcu4cI18n.cpp +++ b/sakura_core/extmodule/CIcu4cI18n.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/extmodule/CIcu4cI18n.h b/sakura_core/extmodule/CIcu4cI18n.h index f9c09fbdba..cef065fa1d 100644 --- a/sakura_core/extmodule/CIcu4cI18n.h +++ b/sakura_core/extmodule/CIcu4cI18n.h @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/extmodule/CMigemo.cpp b/sakura_core/extmodule/CMigemo.cpp index 2c0b887c6a..d492a4b73f 100644 --- a/sakura_core/extmodule/CMigemo.cpp +++ b/sakura_core/extmodule/CMigemo.cpp @@ -9,7 +9,7 @@ Copyright (C) 2007, ryoji Copyright (C) 2009, miau Copyright (C) 2012, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/extmodule/CMigemo.h b/sakura_core/extmodule/CMigemo.h index 3fa4a6f8d9..87a8fdb1ee 100644 --- a/sakura_core/extmodule/CMigemo.h +++ b/sakura_core/extmodule/CMigemo.h @@ -10,7 +10,7 @@ Copyright (C) 2004, isearch Copyright (C) 2005, aroka Copyright (C) 2009, miau - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/extmodule/CUchardet.cpp b/sakura_core/extmodule/CUchardet.cpp index 149b8ccb20..4b987b4eab 100644 --- a/sakura_core/extmodule/CUchardet.cpp +++ b/sakura_core/extmodule/CUchardet.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/extmodule/CUchardet.h b/sakura_core/extmodule/CUchardet.h index c73c1e972e..7b2ae68b6f 100644 --- a/sakura_core/extmodule/CUchardet.h +++ b/sakura_core/extmodule/CUchardet.h @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/extmodule/CUxTheme.cpp b/sakura_core/extmodule/CUxTheme.cpp index 266a1726fb..062a3b8eb5 100644 --- a/sakura_core/extmodule/CUxTheme.cpp +++ b/sakura_core/extmodule/CUxTheme.cpp @@ -8,7 +8,7 @@ */ /* Copyright (C) 2007, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/extmodule/CUxTheme.h b/sakura_core/extmodule/CUxTheme.h index 902e3f880a..be093599c1 100644 --- a/sakura_core/extmodule/CUxTheme.h +++ b/sakura_core/extmodule/CUxTheme.h @@ -8,7 +8,7 @@ */ /* Copyright (C) 2007, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/func/CFuncKeyWnd.cpp b/sakura_core/func/CFuncKeyWnd.cpp index 85431c81c4..c19d56f730 100644 --- a/sakura_core/func/CFuncKeyWnd.cpp +++ b/sakura_core/func/CFuncKeyWnd.cpp @@ -12,7 +12,7 @@ Copyright (C) 2006, aroka, ryoji Copyright (C) 2007, ryoji Copyright (C) 2009, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/func/CFuncKeyWnd.h b/sakura_core/func/CFuncKeyWnd.h index 5378ec5568..00997e996b 100644 --- a/sakura_core/func/CFuncKeyWnd.h +++ b/sakura_core/func/CFuncKeyWnd.h @@ -8,7 +8,7 @@ Copyright (C) 2002, YAZAKI, aroka Copyright (C) 2006, aroka Copyright (C) 2007, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/func/CFuncLookup.cpp b/sakura_core/func/CFuncLookup.cpp index 9b9fd37f6a..192824de14 100644 --- a/sakura_core/func/CFuncLookup.cpp +++ b/sakura_core/func/CFuncLookup.cpp @@ -10,7 +10,7 @@ /* Copyright (C) 2001, genta Copyright (C) 2007, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/func/CFuncLookup.h b/sakura_core/func/CFuncLookup.h index ac9c13e0e5..1a532db577 100644 --- a/sakura_core/func/CFuncLookup.h +++ b/sakura_core/func/CFuncLookup.h @@ -10,7 +10,7 @@ Copyright (C) 2001, genta Copyright (C) 2002, aroka Copyright (C) 2007, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/func/CKeyBind.cpp b/sakura_core/func/CKeyBind.cpp index bd53597975..6c4cbb33f7 100644 --- a/sakura_core/func/CKeyBind.cpp +++ b/sakura_core/func/CKeyBind.cpp @@ -11,7 +11,7 @@ Copyright (C) 2002, YAZAKI, aroka Copyright (C) 2007, ryoji Copyright (C) 2008, nasukoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/func/CKeyBind.h b/sakura_core/func/CKeyBind.h index 8420975404..efe6f9f9a2 100644 --- a/sakura_core/func/CKeyBind.h +++ b/sakura_core/func/CKeyBind.h @@ -7,7 +7,7 @@ */ /* Copyright (C) 1998-2001, Norio Nakatani - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/func/Funccode.cpp b/sakura_core/func/Funccode.cpp index fd54e51727..0ded27ba38 100644 --- a/sakura_core/func/Funccode.cpp +++ b/sakura_core/func/Funccode.cpp @@ -15,7 +15,7 @@ Copyright (C) 2007, ryoji Copyright (C) 2008, nasukoji Copyright (C) 2009, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/func/Funccode.h b/sakura_core/func/Funccode.h index 376a68f1ff..c5c691f5f2 100644 --- a/sakura_core/func/Funccode.h +++ b/sakura_core/func/Funccode.h @@ -13,7 +13,7 @@ Copyright (C) 2005, genta, MIK, maru Copyright (C) 2006, aroka, かろと, fon, ryoji Copyright (C) 2007, ryoji, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/io/CBinaryStream.cpp b/sakura_core/io/CBinaryStream.cpp index 0e2bc4c3fe..97f963a15b 100644 --- a/sakura_core/io/CBinaryStream.cpp +++ b/sakura_core/io/CBinaryStream.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/io/CBinaryStream.h b/sakura_core/io/CBinaryStream.h index dfa97db6b9..ff6ec985c8 100644 --- a/sakura_core/io/CBinaryStream.h +++ b/sakura_core/io/CBinaryStream.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/io/CFile.cpp b/sakura_core/io/CFile.cpp index dc50862393..e37d92d5e0 100644 --- a/sakura_core/io/CFile.cpp +++ b/sakura_core/io/CFile.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/io/CFile.h b/sakura_core/io/CFile.h index 1913003f8d..ef84561cd3 100644 --- a/sakura_core/io/CFile.h +++ b/sakura_core/io/CFile.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/io/CFileLoad.cpp b/sakura_core/io/CFileLoad.cpp index 19fbb409a8..2c679993d2 100644 --- a/sakura_core/io/CFileLoad.cpp +++ b/sakura_core/io/CFileLoad.cpp @@ -9,7 +9,7 @@ Copyright (C) 2002, Moca, genta Copyright (C) 2003, Moca, ryoji Copyright (C) 2006, rastiv - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/io/CFileLoad.h b/sakura_core/io/CFileLoad.h index 2130158898..cb9b1e6945 100644 --- a/sakura_core/io/CFileLoad.h +++ b/sakura_core/io/CFileLoad.h @@ -7,7 +7,7 @@ /* Copyright (C) 2002, Moca, genta Copyright (C) 2003, Moca, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/io/CIoBridge.cpp b/sakura_core/io/CIoBridge.cpp index 08922ebcc2..2dd67f1c54 100644 --- a/sakura_core/io/CIoBridge.cpp +++ b/sakura_core/io/CIoBridge.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/io/CIoBridge.h b/sakura_core/io/CIoBridge.h index 9989bbd8ee..6ee6e850f3 100644 --- a/sakura_core/io/CIoBridge.h +++ b/sakura_core/io/CIoBridge.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/io/CStream.cpp b/sakura_core/io/CStream.cpp index b8bdf2a95c..f63b223275 100644 --- a/sakura_core/io/CStream.cpp +++ b/sakura_core/io/CStream.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/io/CStream.h b/sakura_core/io/CStream.h index e44e7930cf..04c43745f7 100644 --- a/sakura_core/io/CStream.h +++ b/sakura_core/io/CStream.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/io/CTextStream.cpp b/sakura_core/io/CTextStream.cpp index 94b64d1c20..36630885fc 100644 --- a/sakura_core/io/CTextStream.cpp +++ b/sakura_core/io/CTextStream.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/io/CTextStream.h b/sakura_core/io/CTextStream.h index 9113d5cd25..d7bed9223d 100644 --- a/sakura_core/io/CTextStream.h +++ b/sakura_core/io/CTextStream.h @@ -8,7 +8,7 @@ //将来はUTF-8等にすることにより、UNICODEデータの欠落が起こらないようにしたい。 /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/io/CZipFile.cpp b/sakura_core/io/CZipFile.cpp index a51eb0db1b..80dd3d6f10 100644 --- a/sakura_core/io/CZipFile.cpp +++ b/sakura_core/io/CZipFile.cpp @@ -4,7 +4,7 @@ */ /* Copyright (C) 2011, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/io/CZipFile.h b/sakura_core/io/CZipFile.h index ef20c47ae1..c9733bab80 100644 --- a/sakura_core/io/CZipFile.h +++ b/sakura_core/io/CZipFile.h @@ -4,7 +4,7 @@ */ /* Copyright (C) 2011, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CCookieManager.cpp b/sakura_core/macro/CCookieManager.cpp index 1ef93b0a97..887420c51b 100644 --- a/sakura_core/macro/CCookieManager.cpp +++ b/sakura_core/macro/CCookieManager.cpp @@ -4,7 +4,7 @@ */ /* Copyright (C) 2012, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CCookieManager.h b/sakura_core/macro/CCookieManager.h index 97aad900f8..8ad7e9b0cf 100644 --- a/sakura_core/macro/CCookieManager.h +++ b/sakura_core/macro/CCookieManager.h @@ -4,7 +4,7 @@ */ /* Copyright (C) 2012, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CEditorIfObj.cpp b/sakura_core/macro/CEditorIfObj.cpp index c05e64dd67..3ba681314b 100644 --- a/sakura_core/macro/CEditorIfObj.cpp +++ b/sakura_core/macro/CEditorIfObj.cpp @@ -4,7 +4,7 @@ */ /* Copyright (C) 2009, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CEditorIfObj.h b/sakura_core/macro/CEditorIfObj.h index d53df6965b..138ea52c30 100644 --- a/sakura_core/macro/CEditorIfObj.h +++ b/sakura_core/macro/CEditorIfObj.h @@ -4,7 +4,7 @@ */ /* Copyright (C) 2009, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CIfObj.cpp b/sakura_core/macro/CIfObj.cpp index fa0d53227d..cdace73d92 100644 --- a/sakura_core/macro/CIfObj.cpp +++ b/sakura_core/macro/CIfObj.cpp @@ -12,7 +12,7 @@ Copyright (C) 2004, genta Copyright (C) 2005, FILE, zenryaku Copyright (C) 2009, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CIfObj.h b/sakura_core/macro/CIfObj.h index 08fb939083..a9cfdcd9a6 100644 --- a/sakura_core/macro/CIfObj.h +++ b/sakura_core/macro/CIfObj.h @@ -7,7 +7,7 @@ /* Copyright (C) 2002, 鬼, genta Copyright (C) 2009, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CKeyMacroMgr.cpp b/sakura_core/macro/CKeyMacroMgr.cpp index 95f3cdb814..e7943e004a 100644 --- a/sakura_core/macro/CKeyMacroMgr.cpp +++ b/sakura_core/macro/CKeyMacroMgr.cpp @@ -11,7 +11,7 @@ Copyright (C) 2001, aroka Copyright (C) 2002, YAZAKI, aroka, genta Copyright (C) 2004, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/macro/CKeyMacroMgr.h b/sakura_core/macro/CKeyMacroMgr.h index 8f6c5eb539..8e70db4fe3 100644 --- a/sakura_core/macro/CKeyMacroMgr.h +++ b/sakura_core/macro/CKeyMacroMgr.h @@ -7,7 +7,7 @@ Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2001, aroka Copyright (C) 2002, YAZAKI, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/macro/CMacro.cpp b/sakura_core/macro/CMacro.cpp index 85c1546a5c..e8e0e2af43 100644 --- a/sakura_core/macro/CMacro.cpp +++ b/sakura_core/macro/CMacro.cpp @@ -16,7 +16,7 @@ Copyright (C) 2008, nasukoji, ryoji Copyright (C) 2009, ryoji, nasukoji Copyright (C) 2011, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CMacro.h b/sakura_core/macro/CMacro.h index 8b47e5bd3a..19a9038e76 100644 --- a/sakura_core/macro/CMacro.h +++ b/sakura_core/macro/CMacro.h @@ -9,7 +9,7 @@ Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, YAZAKI Copyright (C) 2003, 鬼 - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CMacroFactory.cpp b/sakura_core/macro/CMacroFactory.cpp index 59456d1558..fb85b32718 100644 --- a/sakura_core/macro/CMacroFactory.cpp +++ b/sakura_core/macro/CMacroFactory.cpp @@ -7,7 +7,7 @@ /* Copyright (C) 2002, genta Copyright (C) 2004, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CMacroFactory.h b/sakura_core/macro/CMacroFactory.h index 8904cd8d40..2a8e273296 100644 --- a/sakura_core/macro/CMacroFactory.h +++ b/sakura_core/macro/CMacroFactory.h @@ -7,7 +7,7 @@ /* Copyright (C) 2002, genta Copyright (C) 2004, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CMacroManagerBase.cpp b/sakura_core/macro/CMacroManagerBase.cpp index 0f6a083e4f..5c3097eed7 100644 --- a/sakura_core/macro/CMacroManagerBase.cpp +++ b/sakura_core/macro/CMacroManagerBase.cpp @@ -6,7 +6,7 @@ */ /* Copyright (C) 2002, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CMacroManagerBase.h b/sakura_core/macro/CMacroManagerBase.h index 12f95f1731..80e88747ac 100644 --- a/sakura_core/macro/CMacroManagerBase.h +++ b/sakura_core/macro/CMacroManagerBase.h @@ -6,7 +6,7 @@ */ /* Copyright (C) 2002, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CPPA.cpp b/sakura_core/macro/CPPA.cpp index db1fc90191..0c9d9b90c3 100644 --- a/sakura_core/macro/CPPA.cpp +++ b/sakura_core/macro/CPPA.cpp @@ -10,7 +10,7 @@ Copyright (C) 2001, YAZAKI Copyright (C) 2002, YAZAKI, aroka, genta, Moca Copyright (C) 2003, Moca, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CPPA.h b/sakura_core/macro/CPPA.h index ca64bc0617..7183937902 100644 --- a/sakura_core/macro/CPPA.h +++ b/sakura_core/macro/CPPA.h @@ -10,7 +10,7 @@ Copyright (C) 2001, YAZAKI, genta Copyright (C) 2002, YAZAKI, Moca Copyright (C) 2003, genta, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CPPAMacroMgr.cpp b/sakura_core/macro/CPPAMacroMgr.cpp index 31e920c5eb..429d1ccdb3 100644 --- a/sakura_core/macro/CPPAMacroMgr.cpp +++ b/sakura_core/macro/CPPAMacroMgr.cpp @@ -7,7 +7,7 @@ /* Copyright (C) 2002, YAZAKI, genta Copyright (C) 2004, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/macro/CPPAMacroMgr.h b/sakura_core/macro/CPPAMacroMgr.h index aa1cb47b62..845027f204 100644 --- a/sakura_core/macro/CPPAMacroMgr.h +++ b/sakura_core/macro/CPPAMacroMgr.h @@ -8,7 +8,7 @@ Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2001, aroka Copyright (C) 2002, YAZAKI, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/macro/CSMacroMgr.cpp b/sakura_core/macro/CSMacroMgr.cpp index ae15a56b3a..856911525d 100644 --- a/sakura_core/macro/CSMacroMgr.cpp +++ b/sakura_core/macro/CSMacroMgr.cpp @@ -18,7 +18,7 @@ Copyright (C) 2007, ryoji, maru Copyright (C) 2008, nasukoji, ryoji Copyright (C) 2011, nasukoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/macro/CSMacroMgr.h b/sakura_core/macro/CSMacroMgr.h index 9c34c3dae0..e25b66de50 100644 --- a/sakura_core/macro/CSMacroMgr.h +++ b/sakura_core/macro/CSMacroMgr.h @@ -9,7 +9,7 @@ Copyright (C) 2002, YAZAKI, genta Copyright (C) 2005, FILE Copyright (C) 2007, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CWSH.cpp b/sakura_core/macro/CWSH.cpp index 67fa41443c..2e1c76c804 100644 --- a/sakura_core/macro/CWSH.cpp +++ b/sakura_core/macro/CWSH.cpp @@ -10,7 +10,7 @@ Copyright (C) 2004, genta Copyright (C) 2005, FILE, zenryaku Copyright (C) 2009, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CWSH.h b/sakura_core/macro/CWSH.h index 111cb1c424..a064642ead 100644 --- a/sakura_core/macro/CWSH.h +++ b/sakura_core/macro/CWSH.h @@ -10,7 +10,7 @@ /* Copyright (C) 2002, 鬼, genta Copyright (C) 2009, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/macro/CWSHIfObj.cpp b/sakura_core/macro/CWSHIfObj.cpp index b4bfd63bc9..da1cd602a2 100644 --- a/sakura_core/macro/CWSHIfObj.cpp +++ b/sakura_core/macro/CWSHIfObj.cpp @@ -9,7 +9,7 @@ Copyright (C) 2004, genta Copyright (C) 2005, FILE, zenryaku Copyright (C) 2009, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CWSHIfObj.h b/sakura_core/macro/CWSHIfObj.h index 829000e2a7..a830747897 100644 --- a/sakura_core/macro/CWSHIfObj.h +++ b/sakura_core/macro/CWSHIfObj.h @@ -7,7 +7,7 @@ /* Copyright (C) 2002, 鬼, genta Copyright (C) 2009, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CWSHManager.cpp b/sakura_core/macro/CWSHManager.cpp index e972a4a5d5..04ad09baf8 100644 --- a/sakura_core/macro/CWSHManager.cpp +++ b/sakura_core/macro/CWSHManager.cpp @@ -9,7 +9,7 @@ Copyright (C) 2004, genta Copyright (C) 2005, FILE, zenryaku Copyright (C) 2009, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/macro/CWSHManager.h b/sakura_core/macro/CWSHManager.h index cf3791f4be..6c092aa08b 100644 --- a/sakura_core/macro/CWSHManager.h +++ b/sakura_core/macro/CWSHManager.h @@ -13,7 +13,7 @@ */ /* Copyright (C) 2002, 鬼, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/mem/CMemory.cpp b/sakura_core/mem/CMemory.cpp index 9d876dd815..9ef9792f8f 100644 --- a/sakura_core/mem/CMemory.cpp +++ b/sakura_core/mem/CMemory.cpp @@ -12,7 +12,7 @@ Copyright (C) 2003, genta, Moca, かろと Copyright (C) 2004, Moca Copyright (C) 2005, Moca, D.S.Koba - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/mem/CMemory.h b/sakura_core/mem/CMemory.h index 73c550dd79..5979380cc1 100644 --- a/sakura_core/mem/CMemory.h +++ b/sakura_core/mem/CMemory.h @@ -9,7 +9,7 @@ Copyright (C) 2001, jepro, Stonee Copyright (C) 2002, Moca, genta, aroka Copyright (C) 2005, D.S.Koba - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/mem/CMemoryIterator.h b/sakura_core/mem/CMemoryIterator.h index ef985b32b7..97d9870f35 100644 --- a/sakura_core/mem/CMemoryIterator.h +++ b/sakura_core/mem/CMemoryIterator.h @@ -8,7 +8,7 @@ Copyright (C) 2002, Yazaki Copyright (C) 2003, genta Copyright (C) 2005, D.S.Koba - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/mem/CNative.cpp b/sakura_core/mem/CNative.cpp index 27c26d25a4..39770e1ff0 100644 --- a/sakura_core/mem/CNative.cpp +++ b/sakura_core/mem/CNative.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/mem/CNative.h b/sakura_core/mem/CNative.h index 5f1dfcadc2..ad47f7994a 100644 --- a/sakura_core/mem/CNative.h +++ b/sakura_core/mem/CNative.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/mem/CNativeA.cpp b/sakura_core/mem/CNativeA.cpp index f6b5bf56b7..58e28aa857 100644 --- a/sakura_core/mem/CNativeA.cpp +++ b/sakura_core/mem/CNativeA.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/mem/CNativeA.h b/sakura_core/mem/CNativeA.h index 4728f9781e..a4f06bfb78 100644 --- a/sakura_core/mem/CNativeA.h +++ b/sakura_core/mem/CNativeA.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/mem/CNativeW.cpp b/sakura_core/mem/CNativeW.cpp index 5d4b98c629..9641999138 100644 --- a/sakura_core/mem/CNativeW.cpp +++ b/sakura_core/mem/CNativeW.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/mem/CNativeW.h b/sakura_core/mem/CNativeW.h index a3b2ee3cc5..891da32a88 100644 --- a/sakura_core/mem/CNativeW.h +++ b/sakura_core/mem/CNativeW.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/mem/CPoolResource.h b/sakura_core/mem/CPoolResource.h index d9a500773f..577284051e 100644 --- a/sakura_core/mem/CPoolResource.h +++ b/sakura_core/mem/CPoolResource.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/mem/CRecycledBuffer.cpp b/sakura_core/mem/CRecycledBuffer.cpp index eab9d94615..b367358058 100644 --- a/sakura_core/mem/CRecycledBuffer.cpp +++ b/sakura_core/mem/CRecycledBuffer.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/mem/CRecycledBuffer.h b/sakura_core/mem/CRecycledBuffer.h index b839912f07..6580803683 100644 --- a/sakura_core/mem/CRecycledBuffer.h +++ b/sakura_core/mem/CRecycledBuffer.h @@ -5,7 +5,7 @@ //取得したメモリブロックはCRecycledBufferの管理下にあるため、解放してはいけない。 /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/mfclike/CMyWnd.cpp b/sakura_core/mfclike/CMyWnd.cpp index 38d975a710..62e8a1445e 100644 --- a/sakura_core/mfclike/CMyWnd.cpp +++ b/sakura_core/mfclike/CMyWnd.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/mfclike/CMyWnd.h b/sakura_core/mfclike/CMyWnd.h index f8a89c02d2..c4c0c36086 100644 --- a/sakura_core/mfclike/CMyWnd.h +++ b/sakura_core/mfclike/CMyWnd.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/outline/CDlgFileTree.cpp b/sakura_core/outline/CDlgFileTree.cpp index 0aeffcce84..25fda72009 100644 --- a/sakura_core/outline/CDlgFileTree.cpp +++ b/sakura_core/outline/CDlgFileTree.cpp @@ -7,7 +7,7 @@ /* Copyright (C) 2010, Uchi Copyright (C) 2014, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/outline/CDlgFileTree.h b/sakura_core/outline/CDlgFileTree.h index 0de50d16a3..174cb95821 100644 --- a/sakura_core/outline/CDlgFileTree.h +++ b/sakura_core/outline/CDlgFileTree.h @@ -6,7 +6,7 @@ */ /* Copyright (C) 2014, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/outline/CDlgFuncList.cpp b/sakura_core/outline/CDlgFuncList.cpp index e8496cdac2..2bbd17e73a 100644 --- a/sakura_core/outline/CDlgFuncList.cpp +++ b/sakura_core/outline/CDlgFuncList.cpp @@ -17,7 +17,7 @@ Copyright (C) 2006, genta, ryoji Copyright (C) 2007, ryoji Copyright (C) 2010, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/outline/CDlgFuncList.h b/sakura_core/outline/CDlgFuncList.h index 057eda54e9..8653de58d5 100644 --- a/sakura_core/outline/CDlgFuncList.h +++ b/sakura_core/outline/CDlgFuncList.h @@ -13,7 +13,7 @@ Copyright (C) 2005, genta Copyright (C) 2006, aroka Copyright (C) 2007, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/outline/CFuncInfo.cpp b/sakura_core/outline/CFuncInfo.cpp index 602a38cd8d..9fb04fefe0 100644 --- a/sakura_core/outline/CFuncInfo.cpp +++ b/sakura_core/outline/CFuncInfo.cpp @@ -6,7 +6,7 @@ */ /* Copyright (C) 1998-2001, Norio Nakatani - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/outline/CFuncInfo.h b/sakura_core/outline/CFuncInfo.h index 1bc992bdae..2e979e8bd5 100644 --- a/sakura_core/outline/CFuncInfo.h +++ b/sakura_core/outline/CFuncInfo.h @@ -8,7 +8,7 @@ Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, YAZAKI Copyright (C) 2003, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/outline/CFuncInfoArr.cpp b/sakura_core/outline/CFuncInfoArr.cpp index 3cb9b92f7c..f391369987 100644 --- a/sakura_core/outline/CFuncInfoArr.cpp +++ b/sakura_core/outline/CFuncInfoArr.cpp @@ -7,7 +7,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, YAZAKI, aroka - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/outline/CFuncInfoArr.h b/sakura_core/outline/CFuncInfoArr.h index 38479c53c4..bdc291bbae 100644 --- a/sakura_core/outline/CFuncInfoArr.h +++ b/sakura_core/outline/CFuncInfoArr.h @@ -7,7 +7,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, YAZAKI - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/parse/CWordParse.cpp b/sakura_core/parse/CWordParse.cpp index 3e4a3c4aaa..829455ad58 100644 --- a/sakura_core/parse/CWordParse.cpp +++ b/sakura_core/parse/CWordParse.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/parse/CWordParse.h b/sakura_core/parse/CWordParse.h index 9bc1df5385..b27abe0646 100644 --- a/sakura_core/parse/CWordParse.h +++ b/sakura_core/parse/CWordParse.h @@ -2,7 +2,7 @@ //2007.09.30 kobake CDocLineMgr から分離 /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/plugin/CComplementIfObj.h b/sakura_core/plugin/CComplementIfObj.h index 6383445fcf..3a0bb4910a 100644 --- a/sakura_core/plugin/CComplementIfObj.h +++ b/sakura_core/plugin/CComplementIfObj.h @@ -5,7 +5,7 @@ /* Copyright (C) 2009, syat Copyright (C) 2011, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/plugin/CDllPlugin.cpp b/sakura_core/plugin/CDllPlugin.cpp index f433565d8b..2f60861d1a 100644 --- a/sakura_core/plugin/CDllPlugin.cpp +++ b/sakura_core/plugin/CDllPlugin.cpp @@ -4,7 +4,7 @@ */ /* Copyright (C) 2009, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/plugin/CDllPlugin.h b/sakura_core/plugin/CDllPlugin.h index 5039265f67..f53c34dea0 100644 --- a/sakura_core/plugin/CDllPlugin.h +++ b/sakura_core/plugin/CDllPlugin.h @@ -4,7 +4,7 @@ */ /* Copyright (C) 2009, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/plugin/CJackManager.cpp b/sakura_core/plugin/CJackManager.cpp index 5f31ee9142..7950c16a33 100644 --- a/sakura_core/plugin/CJackManager.cpp +++ b/sakura_core/plugin/CJackManager.cpp @@ -4,7 +4,7 @@ */ /* Copyright (C) 2009, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/plugin/CJackManager.h b/sakura_core/plugin/CJackManager.h index 6e4408da57..829241a2fa 100644 --- a/sakura_core/plugin/CJackManager.h +++ b/sakura_core/plugin/CJackManager.h @@ -4,7 +4,7 @@ */ /* Copyright (C) 2009, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/plugin/COutlineIfObj.h b/sakura_core/plugin/COutlineIfObj.h index f9e5548f7b..21a205d48a 100644 --- a/sakura_core/plugin/COutlineIfObj.h +++ b/sakura_core/plugin/COutlineIfObj.h @@ -4,7 +4,7 @@ */ /* Copyright (C) 2009, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/plugin/CPlugin.cpp b/sakura_core/plugin/CPlugin.cpp index b47c91ab28..c0f45d4a64 100644 --- a/sakura_core/plugin/CPlugin.cpp +++ b/sakura_core/plugin/CPlugin.cpp @@ -4,7 +4,7 @@ */ /* Copyright (C) 2009, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/plugin/CPlugin.h b/sakura_core/plugin/CPlugin.h index 6c374bc55b..e3412d9c28 100644 --- a/sakura_core/plugin/CPlugin.h +++ b/sakura_core/plugin/CPlugin.h @@ -4,7 +4,7 @@ */ /* Copyright (C) 2009, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/plugin/CPluginIfObj.h b/sakura_core/plugin/CPluginIfObj.h index 34d1cf9193..af5b8cef7c 100644 --- a/sakura_core/plugin/CPluginIfObj.h +++ b/sakura_core/plugin/CPluginIfObj.h @@ -4,7 +4,7 @@ */ /* Copyright (C) 2009, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/plugin/CPluginManager.cpp b/sakura_core/plugin/CPluginManager.cpp index dfcd5a1756..f2b0af9dc6 100644 --- a/sakura_core/plugin/CPluginManager.cpp +++ b/sakura_core/plugin/CPluginManager.cpp @@ -4,7 +4,7 @@ */ /* Copyright (C) 2009, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/plugin/CPluginManager.h b/sakura_core/plugin/CPluginManager.h index 6db93c937d..42571ab021 100644 --- a/sakura_core/plugin/CPluginManager.h +++ b/sakura_core/plugin/CPluginManager.h @@ -4,7 +4,7 @@ */ /* Copyright (C) 2009, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/plugin/CSmartIndentIfObj.h b/sakura_core/plugin/CSmartIndentIfObj.h index 3861c40d1d..56b8c195e2 100644 --- a/sakura_core/plugin/CSmartIndentIfObj.h +++ b/sakura_core/plugin/CSmartIndentIfObj.h @@ -5,7 +5,7 @@ /* Copyright (C) 2009, syat Copyright (C) 2010, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/plugin/CWSHPlugin.cpp b/sakura_core/plugin/CWSHPlugin.cpp index 20a8349bcb..eb99f8180d 100644 --- a/sakura_core/plugin/CWSHPlugin.cpp +++ b/sakura_core/plugin/CWSHPlugin.cpp @@ -4,7 +4,7 @@ */ /* Copyright (C) 2009, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/plugin/CWSHPlugin.h b/sakura_core/plugin/CWSHPlugin.h index 2254b768ef..77ae61c718 100644 --- a/sakura_core/plugin/CWSHPlugin.h +++ b/sakura_core/plugin/CWSHPlugin.h @@ -4,7 +4,7 @@ */ /* Copyright (C) 2009, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/print/CPrint.cpp b/sakura_core/print/CPrint.cpp index 7c6ff926c2..5ebe659879 100644 --- a/sakura_core/print/CPrint.cpp +++ b/sakura_core/print/CPrint.cpp @@ -10,7 +10,7 @@ Copyright (C) 2001, hor Copyright (C) 2002, MIK Copyright (C) 2003, かろと - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/print/CPrint.h b/sakura_core/print/CPrint.h index e3936570da..44c7232d38 100644 --- a/sakura_core/print/CPrint.h +++ b/sakura_core/print/CPrint.h @@ -7,7 +7,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2003, かろと - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/print/CPrintPreview.cpp b/sakura_core/print/CPrintPreview.cpp index 6a3601915d..5044dfe97a 100644 --- a/sakura_core/print/CPrintPreview.cpp +++ b/sakura_core/print/CPrintPreview.cpp @@ -13,7 +13,7 @@ Copyright (C) 2008, nasukoji Copyright (C) 2012, ossan (ossan@ongs.net) Copyright (C) 2013, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/print/CPrintPreview.h b/sakura_core/print/CPrintPreview.h index ba5ff89ba7..a6e8af3712 100644 --- a/sakura_core/print/CPrintPreview.h +++ b/sakura_core/print/CPrintPreview.h @@ -7,7 +7,7 @@ /* Copyright (C) 2002, YAZAKI Copyright (C) 2003, かろと - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/prop/CPropComBackup.cpp b/sakura_core/prop/CPropComBackup.cpp index a501fb16aa..77a9bff167 100644 --- a/sakura_core/prop/CPropComBackup.cpp +++ b/sakura_core/prop/CPropComBackup.cpp @@ -14,7 +14,7 @@ Copyright (C) 2006, ryoji Copyright (C) 2009, ryoji Copyright (C) 2010, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/prop/CPropComCustmenu.cpp b/sakura_core/prop/CPropComCustmenu.cpp index 7d1c73a66a..8362f7e93a 100644 --- a/sakura_core/prop/CPropComCustmenu.cpp +++ b/sakura_core/prop/CPropComCustmenu.cpp @@ -11,7 +11,7 @@ Copyright (C) 2006, ryoji Copyright (C) 2007, ryoji Copyright (C) 2009, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/prop/CPropComEdit.cpp b/sakura_core/prop/CPropComEdit.cpp index 6c1c929ba3..7fb4b44dbe 100644 --- a/sakura_core/prop/CPropComEdit.cpp +++ b/sakura_core/prop/CPropComEdit.cpp @@ -11,7 +11,7 @@ Copyright (C) 2003, KEITA Copyright (C) 2006, ryoji Copyright (C) 2007, genta, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/prop/CPropComFile.cpp b/sakura_core/prop/CPropComFile.cpp index 209a9c06dd..aa57e86591 100644 --- a/sakura_core/prop/CPropComFile.cpp +++ b/sakura_core/prop/CPropComFile.cpp @@ -9,7 +9,7 @@ Copyright (C) 2002, YAZAKI, MIK, aroka, hor Copyright (C) 2004, genta, ryoji Copyright (C) 2006, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/prop/CPropComFileName.cpp b/sakura_core/prop/CPropComFileName.cpp index 3cb67e545f..2d1d4494df 100644 --- a/sakura_core/prop/CPropComFileName.cpp +++ b/sakura_core/prop/CPropComFileName.cpp @@ -10,7 +10,7 @@ Copyright (C) 2003, Moca, KEITA Copyright (C) 2004, D.S.Koba Copyright (C) 2006, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/prop/CPropComFormat.cpp b/sakura_core/prop/CPropComFormat.cpp index 87e2560807..a62f6fde54 100644 --- a/sakura_core/prop/CPropComFormat.cpp +++ b/sakura_core/prop/CPropComFormat.cpp @@ -10,7 +10,7 @@ Copyright (C) 2002, YAZAKI, MIK, aroka Copyright (C) 2003, KEITA Copyright (C) 2006, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/prop/CPropComGeneral.cpp b/sakura_core/prop/CPropComGeneral.cpp index b620efef42..a097ce61fd 100644 --- a/sakura_core/prop/CPropComGeneral.cpp +++ b/sakura_core/prop/CPropComGeneral.cpp @@ -6,7 +6,7 @@ */ /* Copyright (C) 2010, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/prop/CPropComGrep.cpp b/sakura_core/prop/CPropComGrep.cpp index 1992c688f3..366209a831 100644 --- a/sakura_core/prop/CPropComGrep.cpp +++ b/sakura_core/prop/CPropComGrep.cpp @@ -9,7 +9,7 @@ Copyright (C) 2002, YAZAKI, MIK Copyright (C) 2003, KEITA Copyright (C) 2006, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/prop/CPropComHelper.cpp b/sakura_core/prop/CPropComHelper.cpp index bbb857b350..ab7ed1a68b 100644 --- a/sakura_core/prop/CPropComHelper.cpp +++ b/sakura_core/prop/CPropComHelper.cpp @@ -14,7 +14,7 @@ Copyright (C) 2009, ryoji Copyright (C) 2012, Moca Copyright (C) 2013, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/prop/CPropComKeybind.cpp b/sakura_core/prop/CPropComKeybind.cpp index 67cf90e4c1..0b5e216abf 100644 --- a/sakura_core/prop/CPropComKeybind.cpp +++ b/sakura_core/prop/CPropComKeybind.cpp @@ -11,7 +11,7 @@ Copyright (C) 2006, ryoji Copyright (C) 2007, ryoji Copyright (C) 2009, nasukoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/prop/CPropComKeyword.cpp b/sakura_core/prop/CPropComKeyword.cpp index d7c27a4703..9416305703 100644 --- a/sakura_core/prop/CPropComKeyword.cpp +++ b/sakura_core/prop/CPropComKeyword.cpp @@ -13,7 +13,7 @@ Copyright (C) 2006, ryoji Copyright (C) 2007, ryoji Copyright (C) 2009, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/prop/CPropComMacro.cpp b/sakura_core/prop/CPropComMacro.cpp index fe8d060c65..228d913e27 100644 --- a/sakura_core/prop/CPropComMacro.cpp +++ b/sakura_core/prop/CPropComMacro.cpp @@ -11,7 +11,7 @@ Copyright (C) 2006, ryoji Copyright (C) 2007, ryoji Copyright (C) 2009, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/prop/CPropComMainMenu.cpp b/sakura_core/prop/CPropComMainMenu.cpp index 3f0a8044cb..c5f55facf5 100644 --- a/sakura_core/prop/CPropComMainMenu.cpp +++ b/sakura_core/prop/CPropComMainMenu.cpp @@ -5,7 +5,7 @@ */ /* Copyright (C) 2010, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/prop/CPropComPlugin.cpp b/sakura_core/prop/CPropComPlugin.cpp index 0b06296154..b1e2db3dd7 100644 --- a/sakura_core/prop/CPropComPlugin.cpp +++ b/sakura_core/prop/CPropComPlugin.cpp @@ -5,7 +5,7 @@ */ /* Copyright (C) 2009, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/prop/CPropComStatusbar.cpp b/sakura_core/prop/CPropComStatusbar.cpp index bf16e8e883..8aab4a950b 100644 --- a/sakura_core/prop/CPropComStatusbar.cpp +++ b/sakura_core/prop/CPropComStatusbar.cpp @@ -12,7 +12,7 @@ Copyright (C) 2006, ryoji Copyright (C) 2007, genta Copyright (C) 2007, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/prop/CPropComTab.cpp b/sakura_core/prop/CPropComTab.cpp index aac6bfb9aa..d3f59ecd66 100644 --- a/sakura_core/prop/CPropComTab.cpp +++ b/sakura_core/prop/CPropComTab.cpp @@ -14,7 +14,7 @@ Copyright (C) 2007, genta, ryoji Copyright (C) 2012, Moca Copyright (C) 2013, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/prop/CPropComToolbar.cpp b/sakura_core/prop/CPropComToolbar.cpp index ae202c9e04..068dad4a9e 100644 --- a/sakura_core/prop/CPropComToolbar.cpp +++ b/sakura_core/prop/CPropComToolbar.cpp @@ -11,7 +11,7 @@ Copyright (C) 2005, aroka Copyright (C) 2006, ryoji Copyright (C) 2007, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/prop/CPropComWin.cpp b/sakura_core/prop/CPropComWin.cpp index 84caeea1cc..e29ba194a4 100644 --- a/sakura_core/prop/CPropComWin.cpp +++ b/sakura_core/prop/CPropComWin.cpp @@ -12,7 +12,7 @@ Copyright (C) 2004, Moca Copyright (C) 2006, ryoji, fon Copyright (C) 2007, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/prop/CPropCommon.cpp b/sakura_core/prop/CPropCommon.cpp index 711016e37a..ad96185f44 100644 --- a/sakura_core/prop/CPropCommon.cpp +++ b/sakura_core/prop/CPropCommon.cpp @@ -15,7 +15,7 @@ Copyright (C) 2009, nasukoji Copyright (C) 2010, Uchi Copyright (C) 2013, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/prop/CPropCommon.h b/sakura_core/prop/CPropCommon.h index c5c0ba5095..05036e9bc1 100644 --- a/sakura_core/prop/CPropCommon.h +++ b/sakura_core/prop/CPropCommon.h @@ -14,7 +14,7 @@ Copyright (C) 2007, genta, ryoji Copyright (C) 2010, Uchi Copyright (C) 2013, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CMRUFile.cpp b/sakura_core/recent/CMRUFile.cpp index d7c771798f..22d32c8b6a 100644 --- a/sakura_core/recent/CMRUFile.cpp +++ b/sakura_core/recent/CMRUFile.cpp @@ -10,7 +10,7 @@ Copyright (C) 2002, YAZAKI, Moca, genta Copyright (C) 2003, MIK Copyright (C) 2006, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/recent/CMRUFile.h b/sakura_core/recent/CMRUFile.h index f0e7cfae63..c2a9b9284a 100644 --- a/sakura_core/recent/CMRUFile.h +++ b/sakura_core/recent/CMRUFile.h @@ -10,7 +10,7 @@ Copyright (C) 2002, YAZAKI, aroka Copyright (C) 2003, MIK Copyright (C) 2004, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CMRUFolder.cpp b/sakura_core/recent/CMRUFolder.cpp index 0d1d4a9553..844471e4ae 100644 --- a/sakura_core/recent/CMRUFolder.cpp +++ b/sakura_core/recent/CMRUFolder.cpp @@ -9,7 +9,7 @@ Copyright (C) 2001, YAZAKI Copyright (C) 2002, YAZAKI, Moca, genta Copyright (C) 2003, MIK - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/recent/CMRUFolder.h b/sakura_core/recent/CMRUFolder.h index 65a53600db..390e754d15 100644 --- a/sakura_core/recent/CMRUFolder.h +++ b/sakura_core/recent/CMRUFolder.h @@ -9,7 +9,7 @@ Copyright (C) 2000, jepro Copyright (C) 2002, YAZAKI, aroka Copyright (C) 2003, MIK - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CMruListener.cpp b/sakura_core/recent/CMruListener.cpp index 770a63f401..e3031576be 100644 --- a/sakura_core/recent/CMruListener.cpp +++ b/sakura_core/recent/CMruListener.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CMruListener.h b/sakura_core/recent/CMruListener.h index 633e929735..fabd1b977c 100644 --- a/sakura_core/recent/CMruListener.h +++ b/sakura_core/recent/CMruListener.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecent.cpp b/sakura_core/recent/CRecent.cpp index 3b667ca697..a8b7161965 100644 --- a/sakura_core/recent/CRecent.cpp +++ b/sakura_core/recent/CRecent.cpp @@ -11,7 +11,7 @@ /* Copyright (C) 2003, MIK Copyright (C) 2005, MIK - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecent.h b/sakura_core/recent/CRecent.h index 9f89912c81..6768cd0c06 100644 --- a/sakura_core/recent/CRecent.h +++ b/sakura_core/recent/CRecent.h @@ -12,7 +12,7 @@ /* Copyright (C) 2003, MIK Copyright (C) 2005, MIK - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentCmd.cpp b/sakura_core/recent/CRecentCmd.cpp index 7ffd4bd6a9..67d52901de 100644 --- a/sakura_core/recent/CRecentCmd.cpp +++ b/sakura_core/recent/CRecentCmd.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentCmd.h b/sakura_core/recent/CRecentCmd.h index d26e10e53f..f158c2cd38 100644 --- a/sakura_core/recent/CRecentCmd.h +++ b/sakura_core/recent/CRecentCmd.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentCurDir.cpp b/sakura_core/recent/CRecentCurDir.cpp index 669e1daafa..ac235f5b17 100644 --- a/sakura_core/recent/CRecentCurDir.cpp +++ b/sakura_core/recent/CRecentCurDir.cpp @@ -2,7 +2,7 @@ /* Copyright (C) 2008, kobake Copyright (C) 2013, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentCurDir.h b/sakura_core/recent/CRecentCurDir.h index abd4a9b577..08e10ac8ca 100644 --- a/sakura_core/recent/CRecentCurDir.h +++ b/sakura_core/recent/CRecentCurDir.h @@ -2,7 +2,7 @@ /* Copyright (C) 2008, kobake Copyright (C) 2013, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentEditNode.cpp b/sakura_core/recent/CRecentEditNode.cpp index 90940c83bd..09e973abf2 100644 --- a/sakura_core/recent/CRecentEditNode.cpp +++ b/sakura_core/recent/CRecentEditNode.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentEditNode.h b/sakura_core/recent/CRecentEditNode.h index 8d40512131..24563d2601 100644 --- a/sakura_core/recent/CRecentEditNode.h +++ b/sakura_core/recent/CRecentEditNode.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentExceptMru.cpp b/sakura_core/recent/CRecentExceptMru.cpp index b55a0c464d..3d91b5bdc5 100644 --- a/sakura_core/recent/CRecentExceptMru.cpp +++ b/sakura_core/recent/CRecentExceptMru.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentExceptMru.h b/sakura_core/recent/CRecentExceptMru.h index 28999bb656..1df935f8f9 100644 --- a/sakura_core/recent/CRecentExceptMru.h +++ b/sakura_core/recent/CRecentExceptMru.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentExcludeFile.cpp b/sakura_core/recent/CRecentExcludeFile.cpp index 8fed849ce6..ec2e09ab49 100644 --- a/sakura_core/recent/CRecentExcludeFile.cpp +++ b/sakura_core/recent/CRecentExcludeFile.cpp @@ -1,6 +1,6 @@ /*! @file - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentExcludeFile.h b/sakura_core/recent/CRecentExcludeFile.h index 6e06f63733..ec69356403 100644 --- a/sakura_core/recent/CRecentExcludeFile.h +++ b/sakura_core/recent/CRecentExcludeFile.h @@ -1,6 +1,6 @@ /*! @file - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentExcludeFolder.cpp b/sakura_core/recent/CRecentExcludeFolder.cpp index d793c07eab..b61ad6d28c 100644 --- a/sakura_core/recent/CRecentExcludeFolder.cpp +++ b/sakura_core/recent/CRecentExcludeFolder.cpp @@ -1,6 +1,6 @@ /*! @file - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentExcludeFolder.h b/sakura_core/recent/CRecentExcludeFolder.h index 67d0e62adb..6922e9d12b 100644 --- a/sakura_core/recent/CRecentExcludeFolder.h +++ b/sakura_core/recent/CRecentExcludeFolder.h @@ -1,6 +1,6 @@ /*! @file - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentFile.cpp b/sakura_core/recent/CRecentFile.cpp index 117228d40a..f8114041b5 100644 --- a/sakura_core/recent/CRecentFile.cpp +++ b/sakura_core/recent/CRecentFile.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentFile.h b/sakura_core/recent/CRecentFile.h index 49aa5c141f..2ae111e4de 100644 --- a/sakura_core/recent/CRecentFile.h +++ b/sakura_core/recent/CRecentFile.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentFolder.cpp b/sakura_core/recent/CRecentFolder.cpp index 256c9d9092..42296fdec6 100644 --- a/sakura_core/recent/CRecentFolder.cpp +++ b/sakura_core/recent/CRecentFolder.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentFolder.h b/sakura_core/recent/CRecentFolder.h index 9feb8feb6c..6399adc250 100644 --- a/sakura_core/recent/CRecentFolder.h +++ b/sakura_core/recent/CRecentFolder.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentGrepFile.cpp b/sakura_core/recent/CRecentGrepFile.cpp index 7eec1e3058..6863f9e5f2 100644 --- a/sakura_core/recent/CRecentGrepFile.cpp +++ b/sakura_core/recent/CRecentGrepFile.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentGrepFile.h b/sakura_core/recent/CRecentGrepFile.h index af98c6aa4b..78daa69988 100644 --- a/sakura_core/recent/CRecentGrepFile.h +++ b/sakura_core/recent/CRecentGrepFile.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentGrepFolder.cpp b/sakura_core/recent/CRecentGrepFolder.cpp index d519acf8af..06bee2926b 100644 --- a/sakura_core/recent/CRecentGrepFolder.cpp +++ b/sakura_core/recent/CRecentGrepFolder.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentGrepFolder.h b/sakura_core/recent/CRecentGrepFolder.h index f209a57159..25fafc8ed7 100644 --- a/sakura_core/recent/CRecentGrepFolder.h +++ b/sakura_core/recent/CRecentGrepFolder.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentImp.cpp b/sakura_core/recent/CRecentImp.cpp index 5aaf458778..5116ee3d1c 100644 --- a/sakura_core/recent/CRecentImp.cpp +++ b/sakura_core/recent/CRecentImp.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentImp.h b/sakura_core/recent/CRecentImp.h index c35abd84e6..ce85202c6a 100644 --- a/sakura_core/recent/CRecentImp.h +++ b/sakura_core/recent/CRecentImp.h @@ -2,7 +2,7 @@ // 各CRecent実装クラスのベースクラス /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentReplace.cpp b/sakura_core/recent/CRecentReplace.cpp index 926d0a77db..06365ce740 100644 --- a/sakura_core/recent/CRecentReplace.cpp +++ b/sakura_core/recent/CRecentReplace.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentReplace.h b/sakura_core/recent/CRecentReplace.h index 6b2377d6aa..6a6264ae05 100644 --- a/sakura_core/recent/CRecentReplace.h +++ b/sakura_core/recent/CRecentReplace.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentSearch.cpp b/sakura_core/recent/CRecentSearch.cpp index a10cb0e63d..95dd26786f 100644 --- a/sakura_core/recent/CRecentSearch.cpp +++ b/sakura_core/recent/CRecentSearch.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentSearch.h b/sakura_core/recent/CRecentSearch.h index 6ca3817565..9e0b43811a 100644 --- a/sakura_core/recent/CRecentSearch.h +++ b/sakura_core/recent/CRecentSearch.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentTagjumpKeyword.cpp b/sakura_core/recent/CRecentTagjumpKeyword.cpp index ac8621d911..acb9bbbd31 100644 --- a/sakura_core/recent/CRecentTagjumpKeyword.cpp +++ b/sakura_core/recent/CRecentTagjumpKeyword.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/CRecentTagjumpKeyword.h b/sakura_core/recent/CRecentTagjumpKeyword.h index 7f1f3da90f..aef85f51cd 100644 --- a/sakura_core/recent/CRecentTagjumpKeyword.h +++ b/sakura_core/recent/CRecentTagjumpKeyword.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/recent/SShare_History.h b/sakura_core/recent/SShare_History.h index a4ade260d8..7ce9b8a954 100644 --- a/sakura_core/recent/SShare_History.h +++ b/sakura_core/recent/SShare_History.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/typeprop/CDlgKeywordSelect.cpp b/sakura_core/typeprop/CDlgKeywordSelect.cpp index 9b1f5f4637..03d7201c74 100644 --- a/sakura_core/typeprop/CDlgKeywordSelect.cpp +++ b/sakura_core/typeprop/CDlgKeywordSelect.cpp @@ -7,7 +7,7 @@ /* Copyright (C) 2005, MIK Copyright (C) 2006, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/typeprop/CDlgKeywordSelect.h b/sakura_core/typeprop/CDlgKeywordSelect.h index 1a361e15d8..e1d7dd6251 100644 --- a/sakura_core/typeprop/CDlgKeywordSelect.h +++ b/sakura_core/typeprop/CDlgKeywordSelect.h @@ -6,7 +6,7 @@ */ /* Copyright (C) 2005, MIK, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/typeprop/CDlgSameColor.cpp b/sakura_core/typeprop/CDlgSameColor.cpp index 0036084728..b75fd33942 100644 --- a/sakura_core/typeprop/CDlgSameColor.cpp +++ b/sakura_core/typeprop/CDlgSameColor.cpp @@ -6,7 +6,7 @@ */ /* Copyright (C) 2006, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/typeprop/CDlgSameColor.h b/sakura_core/typeprop/CDlgSameColor.h index 5e1f526b95..628027038e 100644 --- a/sakura_core/typeprop/CDlgSameColor.h +++ b/sakura_core/typeprop/CDlgSameColor.h @@ -6,7 +6,7 @@ */ /* Copyright (C) 2006, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/typeprop/CDlgTypeAscertain.cpp b/sakura_core/typeprop/CDlgTypeAscertain.cpp index b88d1a2764..efbe34db5c 100644 --- a/sakura_core/typeprop/CDlgTypeAscertain.cpp +++ b/sakura_core/typeprop/CDlgTypeAscertain.cpp @@ -6,7 +6,7 @@ */ /* Copyright (C) 2010, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/typeprop/CDlgTypeAscertain.h b/sakura_core/typeprop/CDlgTypeAscertain.h index 6aa5abbe1b..b3fe4de9a5 100644 --- a/sakura_core/typeprop/CDlgTypeAscertain.h +++ b/sakura_core/typeprop/CDlgTypeAscertain.h @@ -6,7 +6,7 @@ */ /* Copyright (C) 2010, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/typeprop/CDlgTypeList.cpp b/sakura_core/typeprop/CDlgTypeList.cpp index 4dafbd388b..f32cc1625b 100644 --- a/sakura_core/typeprop/CDlgTypeList.cpp +++ b/sakura_core/typeprop/CDlgTypeList.cpp @@ -10,7 +10,7 @@ Copyright (C) 2002, MIK Copyright (C) 2006, ryoji Copyright (C) 2010, Uchi, Beta.Ito, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/typeprop/CDlgTypeList.h b/sakura_core/typeprop/CDlgTypeList.h index bc2b61032c..2a33db27b1 100644 --- a/sakura_core/typeprop/CDlgTypeList.h +++ b/sakura_core/typeprop/CDlgTypeList.h @@ -7,7 +7,7 @@ */ /* Copyright (C) 1998-2001, Norio Nakatani - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/typeprop/CImpExpManager.cpp b/sakura_core/typeprop/CImpExpManager.cpp index ecc2af8d4d..91f8a5265a 100644 --- a/sakura_core/typeprop/CImpExpManager.cpp +++ b/sakura_core/typeprop/CImpExpManager.cpp @@ -6,7 +6,7 @@ */ /* Copyright (C) 2010, Uchi, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/typeprop/CImpExpManager.h b/sakura_core/typeprop/CImpExpManager.h index 4bd3e943b3..cae39085ea 100644 --- a/sakura_core/typeprop/CImpExpManager.h +++ b/sakura_core/typeprop/CImpExpManager.h @@ -6,7 +6,7 @@ */ /* Copyright (C) 2010, Uchi, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/typeprop/CPropTypes.cpp b/sakura_core/typeprop/CPropTypes.cpp index d007b4432a..51cb5e57ec 100644 --- a/sakura_core/typeprop/CPropTypes.cpp +++ b/sakura_core/typeprop/CPropTypes.cpp @@ -16,7 +16,7 @@ Copyright (C) 2008, nasukoji Copyright (C) 2009, ryoji, genta Copyright (C) 2010, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/typeprop/CPropTypes.h b/sakura_core/typeprop/CPropTypes.h index b722f22503..ef66082dc7 100644 --- a/sakura_core/typeprop/CPropTypes.h +++ b/sakura_core/typeprop/CPropTypes.h @@ -13,7 +13,7 @@ Copyright (C) 2005, MIK, aroka, genta Copyright (C) 2006, fon Copyright (C) 2010, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/typeprop/CPropTypesColor.cpp b/sakura_core/typeprop/CPropTypesColor.cpp index 79a77ab4b3..7f3071b097 100644 --- a/sakura_core/typeprop/CPropTypesColor.cpp +++ b/sakura_core/typeprop/CPropTypesColor.cpp @@ -15,7 +15,7 @@ Copyright (C) 2007, ryoji, genta Copyright (C) 2008, nasukoji Copyright (C) 2009, ryoji, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/typeprop/CPropTypesKeyHelp.cpp b/sakura_core/typeprop/CPropTypesKeyHelp.cpp index 81afaeee78..1049026113 100644 --- a/sakura_core/typeprop/CPropTypesKeyHelp.cpp +++ b/sakura_core/typeprop/CPropTypesKeyHelp.cpp @@ -7,7 +7,7 @@ /* Copyright (C) 2006, fon, ryoji Copyright (C) 2007, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/typeprop/CPropTypesRegex.cpp b/sakura_core/typeprop/CPropTypesRegex.cpp index 2e8db77aa7..00286a8fc7 100644 --- a/sakura_core/typeprop/CPropTypesRegex.cpp +++ b/sakura_core/typeprop/CPropTypesRegex.cpp @@ -9,7 +9,7 @@ Copyright (C) 2002, MIK Copyright (C) 2003, MIK, KEITA Copyright (C) 2006, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/typeprop/CPropTypesScreen.cpp b/sakura_core/typeprop/CPropTypesScreen.cpp index 5415ff2de1..a87d09fa85 100644 --- a/sakura_core/typeprop/CPropTypesScreen.cpp +++ b/sakura_core/typeprop/CPropTypesScreen.cpp @@ -14,7 +14,7 @@ Copyright (C) 2007, ryoji, genta Copyright (C) 2008, nasukoji Copyright (C) 2009, ryoji, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/typeprop/CPropTypesSupport.cpp b/sakura_core/typeprop/CPropTypesSupport.cpp index 19c3e0d134..a064ea8d81 100644 --- a/sakura_core/typeprop/CPropTypesSupport.cpp +++ b/sakura_core/typeprop/CPropTypesSupport.cpp @@ -14,7 +14,7 @@ Copyright (C) 2007, ryoji, genta Copyright (C) 2008, nasukoji Copyright (C) 2009, ryoji, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/typeprop/CPropTypesWindow.cpp b/sakura_core/typeprop/CPropTypesWindow.cpp index 0031068556..fe447496ef 100644 --- a/sakura_core/typeprop/CPropTypesWindow.cpp +++ b/sakura_core/typeprop/CPropTypesWindow.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType.cpp b/sakura_core/types/CType.cpp index f3501fd66b..2e262088e5 100644 --- a/sakura_core/types/CType.cpp +++ b/sakura_core/types/CType.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType.h b/sakura_core/types/CType.h index dfef85180d..3a4203a705 100644 --- a/sakura_core/types/CType.h +++ b/sakura_core/types/CType.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CTypeSupport.cpp b/sakura_core/types/CTypeSupport.cpp index fa3b44b5c0..fb77c58f64 100644 --- a/sakura_core/types/CTypeSupport.cpp +++ b/sakura_core/types/CTypeSupport.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CTypeSupport.h b/sakura_core/types/CTypeSupport.h index 3faeb0db75..8656abcee4 100644 --- a/sakura_core/types/CTypeSupport.h +++ b/sakura_core/types/CTypeSupport.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Asm.cpp b/sakura_core/types/CType_Asm.cpp index 4a27431b05..c3b006bf83 100644 --- a/sakura_core/types/CType_Asm.cpp +++ b/sakura_core/types/CType_Asm.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Awk.cpp b/sakura_core/types/CType_Awk.cpp index 918dcb9876..56c92730ec 100644 --- a/sakura_core/types/CType_Awk.cpp +++ b/sakura_core/types/CType_Awk.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Basis.cpp b/sakura_core/types/CType_Basis.cpp index 6969e54b71..d6f8474855 100644 --- a/sakura_core/types/CType_Basis.cpp +++ b/sakura_core/types/CType_Basis.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Cobol.cpp b/sakura_core/types/CType_Cobol.cpp index dee58a5b63..83eab0c4d0 100644 --- a/sakura_core/types/CType_Cobol.cpp +++ b/sakura_core/types/CType_Cobol.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_CorbaIdl.cpp b/sakura_core/types/CType_CorbaIdl.cpp index c23d172ad3..93ce40dc24 100644 --- a/sakura_core/types/CType_CorbaIdl.cpp +++ b/sakura_core/types/CType_CorbaIdl.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Cpp.cpp b/sakura_core/types/CType_Cpp.cpp index 57d5e40cac..67720a4a26 100644 --- a/sakura_core/types/CType_Cpp.cpp +++ b/sakura_core/types/CType_Cpp.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Dos.cpp b/sakura_core/types/CType_Dos.cpp index 1dc4f36a03..7357e80609 100644 --- a/sakura_core/types/CType_Dos.cpp +++ b/sakura_core/types/CType_Dos.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Erlang.cpp b/sakura_core/types/CType_Erlang.cpp index 456f1cbda5..a1122309d1 100644 --- a/sakura_core/types/CType_Erlang.cpp +++ b/sakura_core/types/CType_Erlang.cpp @@ -7,7 +7,7 @@ */ /* Copyright (C) 2009, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Html.cpp b/sakura_core/types/CType_Html.cpp index 03b9989583..693969c10f 100644 --- a/sakura_core/types/CType_Html.cpp +++ b/sakura_core/types/CType_Html.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Ini.cpp b/sakura_core/types/CType_Ini.cpp index 528de4bcd7..3394a11866 100644 --- a/sakura_core/types/CType_Ini.cpp +++ b/sakura_core/types/CType_Ini.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Java.cpp b/sakura_core/types/CType_Java.cpp index c18ef07132..4b592f408c 100644 --- a/sakura_core/types/CType_Java.cpp +++ b/sakura_core/types/CType_Java.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Others.cpp b/sakura_core/types/CType_Others.cpp index 4344345add..c49974de4c 100644 --- a/sakura_core/types/CType_Others.cpp +++ b/sakura_core/types/CType_Others.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Pascal.cpp b/sakura_core/types/CType_Pascal.cpp index d4b4089274..88e7dd51c2 100644 --- a/sakura_core/types/CType_Pascal.cpp +++ b/sakura_core/types/CType_Pascal.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Perl.cpp b/sakura_core/types/CType_Perl.cpp index b377bd31fc..03ea6efe25 100644 --- a/sakura_core/types/CType_Perl.cpp +++ b/sakura_core/types/CType_Perl.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Python.cpp b/sakura_core/types/CType_Python.cpp index ea19df21c7..81aa162151 100644 --- a/sakura_core/types/CType_Python.cpp +++ b/sakura_core/types/CType_Python.cpp @@ -6,7 +6,7 @@ */ /* Copyright (C) 2007, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Rich.cpp b/sakura_core/types/CType_Rich.cpp index f517da0324..296e17069c 100644 --- a/sakura_core/types/CType_Rich.cpp +++ b/sakura_core/types/CType_Rich.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Sql.cpp b/sakura_core/types/CType_Sql.cpp index 872b3a673e..9dc2271423 100644 --- a/sakura_core/types/CType_Sql.cpp +++ b/sakura_core/types/CType_Sql.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Tex.cpp b/sakura_core/types/CType_Tex.cpp index 6ca370c8f1..6347cdb6b1 100644 --- a/sakura_core/types/CType_Tex.cpp +++ b/sakura_core/types/CType_Tex.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Text.cpp b/sakura_core/types/CType_Text.cpp index 4403257f23..7114b7aac5 100644 --- a/sakura_core/types/CType_Text.cpp +++ b/sakura_core/types/CType_Text.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/types/CType_Vb.cpp b/sakura_core/types/CType_Vb.cpp index b1c16dba83..9016433784 100644 --- a/sakura_core/types/CType_Vb.cpp +++ b/sakura_core/types/CType_Vb.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/uiparts/CGraphics.cpp b/sakura_core/uiparts/CGraphics.cpp index 4329f90f07..04968462f5 100644 --- a/sakura_core/uiparts/CGraphics.cpp +++ b/sakura_core/uiparts/CGraphics.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/uiparts/CGraphics.h b/sakura_core/uiparts/CGraphics.h index d88c93c266..cc06737a2f 100644 --- a/sakura_core/uiparts/CGraphics.h +++ b/sakura_core/uiparts/CGraphics.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/uiparts/CImageListMgr.cpp b/sakura_core/uiparts/CImageListMgr.cpp index 0d367edbd2..cb6fa26e3f 100644 --- a/sakura_core/uiparts/CImageListMgr.cpp +++ b/sakura_core/uiparts/CImageListMgr.cpp @@ -11,7 +11,7 @@ Copyright (C) 2003, Moca, genta, wmlhq Copyright (C) 2007, ryoji Copyright (C) 2010, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/uiparts/CImageListMgr.h b/sakura_core/uiparts/CImageListMgr.h index 5dbe8b0e66..c5377ca995 100644 --- a/sakura_core/uiparts/CImageListMgr.h +++ b/sakura_core/uiparts/CImageListMgr.h @@ -7,7 +7,7 @@ /* Copyright (C) 2000-2003, genta Copyright (C) 2003, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/uiparts/CMenuDrawer.cpp b/sakura_core/uiparts/CMenuDrawer.cpp index f62011763d..40f574b2c8 100644 --- a/sakura_core/uiparts/CMenuDrawer.cpp +++ b/sakura_core/uiparts/CMenuDrawer.cpp @@ -14,7 +14,7 @@ Copyright (C) 2006, aroka, fon Copyright (C) 2007, ryoji Copyright (C) 2008, nasukoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/uiparts/CMenuDrawer.h b/sakura_core/uiparts/CMenuDrawer.h index 0b02534bc4..af7b8af203 100644 --- a/sakura_core/uiparts/CMenuDrawer.h +++ b/sakura_core/uiparts/CMenuDrawer.h @@ -10,7 +10,7 @@ Copyright (C) 2003, MIK Copyright (C) 2005, aroka, genta Copyright (C) 2007, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/uiparts/CSoundSet.cpp b/sakura_core/uiparts/CSoundSet.cpp index f4859b19e0..5ac7b340a6 100644 --- a/sakura_core/uiparts/CSoundSet.cpp +++ b/sakura_core/uiparts/CSoundSet.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/uiparts/CSoundSet.h b/sakura_core/uiparts/CSoundSet.h index 490f1426a5..86cabebdb8 100644 --- a/sakura_core/uiparts/CSoundSet.h +++ b/sakura_core/uiparts/CSoundSet.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/uiparts/CVisualProgress.cpp b/sakura_core/uiparts/CVisualProgress.cpp index 9b252f90c6..ceafe26d2f 100644 --- a/sakura_core/uiparts/CVisualProgress.cpp +++ b/sakura_core/uiparts/CVisualProgress.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/uiparts/CVisualProgress.h b/sakura_core/uiparts/CVisualProgress.h index 0b205f1881..e86e9d165f 100644 --- a/sakura_core/uiparts/CVisualProgress.h +++ b/sakura_core/uiparts/CVisualProgress.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/uiparts/CWaitCursor.cpp b/sakura_core/uiparts/CWaitCursor.cpp index 9a433c4be2..1499fb101b 100644 --- a/sakura_core/uiparts/CWaitCursor.cpp +++ b/sakura_core/uiparts/CWaitCursor.cpp @@ -5,7 +5,7 @@ */ /* Copyright (C) 1998-2001, Norio Nakatani - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/uiparts/CWaitCursor.h b/sakura_core/uiparts/CWaitCursor.h index e969fc205f..e609b28d7a 100644 --- a/sakura_core/uiparts/CWaitCursor.h +++ b/sakura_core/uiparts/CWaitCursor.h @@ -6,7 +6,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, aroka - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/uiparts/HandCursor.h b/sakura_core/uiparts/HandCursor.h index 872b2e995f..f955bb1a33 100644 --- a/sakura_core/uiparts/HandCursor.h +++ b/sakura_core/uiparts/HandCursor.h @@ -6,7 +6,7 @@ */ /* Copyright (C) 2013, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/MessageBoxF.cpp b/sakura_core/util/MessageBoxF.cpp index e8f2ef5363..ec60da392c 100644 --- a/sakura_core/util/MessageBoxF.cpp +++ b/sakura_core/util/MessageBoxF.cpp @@ -9,7 +9,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, aroka - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/MessageBoxF.h b/sakura_core/util/MessageBoxF.h index 2ff4c36715..06a3dff475 100644 --- a/sakura_core/util/MessageBoxF.h +++ b/sakura_core/util/MessageBoxF.h @@ -7,7 +7,7 @@ */ /* Copyright (C) 1998-2001, Norio Nakatani - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/RegKey.h b/sakura_core/util/RegKey.h index ded31a11de..6c04a88ae4 100644 --- a/sakura_core/util/RegKey.h +++ b/sakura_core/util/RegKey.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/StaticType.h b/sakura_core/util/StaticType.h index c51cd507d8..a17cb124bd 100644 --- a/sakura_core/util/StaticType.h +++ b/sakura_core/util/StaticType.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/container.h b/sakura_core/util/container.h index 07d3563acf..ab8d7b7a70 100644 --- a/sakura_core/util/container.h +++ b/sakura_core/util/container.h @@ -6,7 +6,7 @@ */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/design_template.h b/sakura_core/util/design_template.h index da26e80ef2..de2b60d007 100644 --- a/sakura_core/util/design_template.h +++ b/sakura_core/util/design_template.h @@ -7,7 +7,7 @@ */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/file.cpp b/sakura_core/util/file.cpp index 2f8c6c8c88..aaf52e8319 100644 --- a/sakura_core/util/file.cpp +++ b/sakura_core/util/file.cpp @@ -2,7 +2,7 @@ Copyright (C) 2002, SUI Copyright (C) 2003, MIK Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/file.h b/sakura_core/util/file.h index 42a22c0fd6..2efdd904b4 100644 --- a/sakura_core/util/file.h +++ b/sakura_core/util/file.h @@ -2,7 +2,7 @@ /* Copyright (C) 2002, SUI Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/format.cpp b/sakura_core/util/format.cpp index 3ceee5a619..81d413b2e7 100644 --- a/sakura_core/util/format.cpp +++ b/sakura_core/util/format.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2007, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/format.h b/sakura_core/util/format.h index caf70c1af7..d151aee72b 100644 --- a/sakura_core/util/format.h +++ b/sakura_core/util/format.h @@ -2,7 +2,7 @@ // 2007.10.20 kobake 書式関連 /* Copyright (C) 2007, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/input.cpp b/sakura_core/util/input.cpp index 023fb5ddc7..246e88b921 100644 --- a/sakura_core/util/input.cpp +++ b/sakura_core/util/input.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/input.h b/sakura_core/util/input.h index 20d25ed6c6..801a2ab0b6 100644 --- a/sakura_core/util/input.h +++ b/sakura_core/util/input.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/module.cpp b/sakura_core/util/module.cpp index 7adf7b8b8a..5f653f87e3 100644 --- a/sakura_core/util/module.cpp +++ b/sakura_core/util/module.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/module.h b/sakura_core/util/module.h index 3bba339071..b5f9e42634 100644 --- a/sakura_core/util/module.h +++ b/sakura_core/util/module.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/ole_convert.cpp b/sakura_core/util/ole_convert.cpp index 56fde7cabb..6e0758db65 100644 --- a/sakura_core/util/ole_convert.cpp +++ b/sakura_core/util/ole_convert.cpp @@ -3,7 +3,7 @@ */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/ole_convert.h b/sakura_core/util/ole_convert.h index 6235ade18b..3c4569d96a 100644 --- a/sakura_core/util/ole_convert.h +++ b/sakura_core/util/ole_convert.h @@ -3,7 +3,7 @@ */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/os.cpp b/sakura_core/util/os.cpp index 9bf96d2d12..8e07c7dd96 100644 --- a/sakura_core/util/os.cpp +++ b/sakura_core/util/os.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/os.h b/sakura_core/util/os.h index 1fe16bde55..aa962d8618 100644 --- a/sakura_core/util/os.h +++ b/sakura_core/util/os.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/relation_tool.cpp b/sakura_core/util/relation_tool.cpp index e7c38f6554..43235e9c5c 100644 --- a/sakura_core/util/relation_tool.cpp +++ b/sakura_core/util/relation_tool.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/relation_tool.h b/sakura_core/util/relation_tool.h index ed602b17ce..6a070f501e 100644 --- a/sakura_core/util/relation_tool.h +++ b/sakura_core/util/relation_tool.h @@ -4,7 +4,7 @@ */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/shell.cpp b/sakura_core/util/shell.cpp index 2cee6ac4e1..b86213526f 100644 --- a/sakura_core/util/shell.cpp +++ b/sakura_core/util/shell.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/shell.h b/sakura_core/util/shell.h index b98e771390..da105d639a 100644 --- a/sakura_core/util/shell.h +++ b/sakura_core/util/shell.h @@ -3,7 +3,7 @@ // なんかシェルっぽい機能の関数群 /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/std_macro.h b/sakura_core/util/std_macro.h index bcd6856b25..1b0babb41a 100644 --- a/sakura_core/util/std_macro.h +++ b/sakura_core/util/std_macro.h @@ -2,7 +2,7 @@ //2007.10.18 kobake 作成 /* Copyright (C) 2007, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/string_ex.cpp b/sakura_core/util/string_ex.cpp index 2b2ab2bdb1..efab81d74b 100644 --- a/sakura_core/util/string_ex.cpp +++ b/sakura_core/util/string_ex.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/string_ex.h b/sakura_core/util/string_ex.h index 74f586f60e..5656caf2d6 100644 --- a/sakura_core/util/string_ex.h +++ b/sakura_core/util/string_ex.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/string_ex2.cpp b/sakura_core/util/string_ex2.cpp index 785461b9b5..3280bc7594 100644 --- a/sakura_core/util/string_ex2.cpp +++ b/sakura_core/util/string_ex2.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/string_ex2.h b/sakura_core/util/string_ex2.h index 15bc7df225..9756e7132d 100644 --- a/sakura_core/util/string_ex2.h +++ b/sakura_core/util/string_ex2.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/tchar_convert.cpp b/sakura_core/util/tchar_convert.cpp index 15ac4d702e..2de7e01fb0 100644 --- a/sakura_core/util/tchar_convert.cpp +++ b/sakura_core/util/tchar_convert.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/tchar_convert.h b/sakura_core/util/tchar_convert.h index 170fbd3c7f..9ee4795a70 100644 --- a/sakura_core/util/tchar_convert.h +++ b/sakura_core/util/tchar_convert.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/tchar_template.cpp b/sakura_core/util/tchar_template.cpp index 98bf0c2b0d..355276c0ac 100644 --- a/sakura_core/util/tchar_template.cpp +++ b/sakura_core/util/tchar_template.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/tchar_template.h b/sakura_core/util/tchar_template.h index fc158f1b40..5e5155f28b 100644 --- a/sakura_core/util/tchar_template.h +++ b/sakura_core/util/tchar_template.h @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/window.cpp b/sakura_core/util/window.cpp index bafb85aa0a..ac9dec87a2 100644 --- a/sakura_core/util/window.cpp +++ b/sakura_core/util/window.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/window.h b/sakura_core/util/window.h index 5d9ee496ad..181af5a245 100644 --- a/sakura_core/util/window.h +++ b/sakura_core/util/window.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/zoom.cpp b/sakura_core/util/zoom.cpp index 694b157364..2fa238424a 100644 --- a/sakura_core/util/zoom.cpp +++ b/sakura_core/util/zoom.cpp @@ -2,7 +2,7 @@ @brief ズーム倍率算出 */ /* - Copyright (C) 2021, Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/util/zoom.h b/sakura_core/util/zoom.h index d2ba88bc01..431af9b9df 100644 --- a/sakura_core/util/zoom.h +++ b/sakura_core/util/zoom.h @@ -2,7 +2,7 @@ @brief ズーム倍率算出 */ /* - Copyright (C) 2021, Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/version.h b/sakura_core/version.h index e4176fc832..f75dceabdb 100644 --- a/sakura_core/version.h +++ b/sakura_core/version.h @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CCaret.cpp b/sakura_core/view/CCaret.cpp index bf6eadc4fa..d8c545f3e9 100644 --- a/sakura_core/view/CCaret.cpp +++ b/sakura_core/view/CCaret.cpp @@ -10,7 +10,7 @@ Copyright (C) 2011, Moca, syat Copyright (C) 2012, ryoji, Moca Copyright (C) 2013, Moca, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CCaret.h b/sakura_core/view/CCaret.h index 740beda434..0e4c97f849 100644 --- a/sakura_core/view/CCaret.h +++ b/sakura_core/view/CCaret.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index e55806fab1..108a59f8f1 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -17,7 +17,7 @@ Copyright (C) 2007, ryoji, じゅうじ, maru Copyright (C) 2009, nasukoji, ryoji Copyright (C) 2010, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CEditView.h b/sakura_core/view/CEditView.h index 23c4dfed99..49c3bb00ff 100644 --- a/sakura_core/view/CEditView.h +++ b/sakura_core/view/CEditView.h @@ -16,7 +16,7 @@ Copyright (C) 2007, ryoji, maru Copyright (C) 2008, ryoji Copyright (C) 2009, nasukoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CEditView_CmdHokan.cpp b/sakura_core/view/CEditView_CmdHokan.cpp index a778bc4ca0..6f29a562cb 100644 --- a/sakura_core/view/CEditView_CmdHokan.cpp +++ b/sakura_core/view/CEditView_CmdHokan.cpp @@ -11,7 +11,7 @@ Copyright (C) 2003, Moca Copyright (C) 2004, Moca Copyright (C) 2005, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/view/CEditView_Cmdgrep.cpp b/sakura_core/view/CEditView_Cmdgrep.cpp index 661c33f181..bb53f70b18 100644 --- a/sakura_core/view/CEditView_Cmdgrep.cpp +++ b/sakura_core/view/CEditView_Cmdgrep.cpp @@ -10,7 +10,7 @@ Copyright (C) 2003, MIK Copyright (C) 2005, genta Copyright (C) 2006, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/view/CEditView_Cmdisrch.cpp b/sakura_core/view/CEditView_Cmdisrch.cpp index 5bea8f3798..b310e4c0ca 100644 --- a/sakura_core/view/CEditView_Cmdisrch.cpp +++ b/sakura_core/view/CEditView_Cmdisrch.cpp @@ -7,7 +7,7 @@ /* Copyright (C) 2004, isearch Copyright (C) 2005, genta, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/view/CEditView_Command.cpp b/sakura_core/view/CEditView_Command.cpp index 3d80829ed6..cd5fc838cb 100644 --- a/sakura_core/view/CEditView_Command.cpp +++ b/sakura_core/view/CEditView_Command.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CEditView_Command_New.cpp b/sakura_core/view/CEditView_Command_New.cpp index 69c371e317..a9e34b6343 100644 --- a/sakura_core/view/CEditView_Command_New.cpp +++ b/sakura_core/view/CEditView_Command_New.cpp @@ -14,7 +14,7 @@ Copyright (C) 2006, genta, Moca, fon Copyright (C) 2007, ryoji, maru Copyright (C) 2009, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/view/CEditView_Diff.cpp b/sakura_core/view/CEditView_Diff.cpp index 4703388292..675b2757ac 100644 --- a/sakura_core/view/CEditView_Diff.cpp +++ b/sakura_core/view/CEditView_Diff.cpp @@ -14,7 +14,7 @@ Copyright (C) 2005, maru Copyright (C) 2007, ryoji, kobake Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CEditView_ExecCmd.cpp b/sakura_core/view/CEditView_ExecCmd.cpp index 5f187f2da4..ea84ed44fa 100644 --- a/sakura_core/view/CEditView_ExecCmd.cpp +++ b/sakura_core/view/CEditView_ExecCmd.cpp @@ -15,7 +15,7 @@ Copyright (C) 2005, genta, MIK, novice, aroka, D.S.Koba, かろと, Moca Copyright (C) 2006, Moca, aroka, ryoji, fon, genta Copyright (C) 2007, ryoji, じゅうじ, maru - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/view/CEditView_Ime.cpp b/sakura_core/view/CEditView_Ime.cpp index bf3e06e23f..e4b7573e72 100644 --- a/sakura_core/view/CEditView_Ime.cpp +++ b/sakura_core/view/CEditView_Ime.cpp @@ -15,7 +15,7 @@ Copyright (C) 2005, genta, MIK, novice, aroka, D.S.Koba, かろと, Moca Copyright (C) 2006, Moca, aroka, ryoji, fon, genta Copyright (C) 2007, ryoji, じゅうじ, maru - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/view/CEditView_Mouse.cpp b/sakura_core/view/CEditView_Mouse.cpp index 2ee3fc85cd..6ac2937d0f 100644 --- a/sakura_core/view/CEditView_Mouse.cpp +++ b/sakura_core/view/CEditView_Mouse.cpp @@ -15,7 +15,7 @@ Copyright (C) 2005, genta, MIK, novice, aroka, D.S.Koba, かろと, Moca Copyright (C) 2006, Moca, aroka, ryoji, fon, genta Copyright (C) 2007, ryoji, じゅうじ, maru - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holders to use this code for other purpose. diff --git a/sakura_core/view/CEditView_Paint.cpp b/sakura_core/view/CEditView_Paint.cpp index 1af26836c4..6d42eb6ca3 100644 --- a/sakura_core/view/CEditView_Paint.cpp +++ b/sakura_core/view/CEditView_Paint.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CEditView_Paint.h b/sakura_core/view/CEditView_Paint.h index c3640a1b9e..b1f176a2a5 100644 --- a/sakura_core/view/CEditView_Paint.h +++ b/sakura_core/view/CEditView_Paint.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CEditView_Paint_Bracket.cpp b/sakura_core/view/CEditView_Paint_Bracket.cpp index 4fc9bf0e75..107df52cb3 100644 --- a/sakura_core/view/CEditView_Paint_Bracket.cpp +++ b/sakura_core/view/CEditView_Paint_Bracket.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CEditView_Scroll.cpp b/sakura_core/view/CEditView_Scroll.cpp index ce46870642..7330b9408a 100644 --- a/sakura_core/view/CEditView_Scroll.cpp +++ b/sakura_core/view/CEditView_Scroll.cpp @@ -18,7 +18,7 @@ Copyright (C) 2009, nasukoji Copyright (C) 2010, Moca Copyright (C) 2012, ryoji, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/view/CEditView_Search.cpp b/sakura_core/view/CEditView_Search.cpp index 6a8edfed1d..3fe42ee925 100644 --- a/sakura_core/view/CEditView_Search.cpp +++ b/sakura_core/view/CEditView_Search.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CMiniMapView.cpp b/sakura_core/view/CMiniMapView.cpp index 8b01472bcf..7dfd7a00aa 100644 --- a/sakura_core/view/CMiniMapView.cpp +++ b/sakura_core/view/CMiniMapView.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2012, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CMiniMapView.h b/sakura_core/view/CMiniMapView.h index 8868b5e1ed..883b35235b 100644 --- a/sakura_core/view/CMiniMapView.h +++ b/sakura_core/view/CMiniMapView.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2012, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CRuler.cpp b/sakura_core/view/CRuler.cpp index 8b8389b851..29adc06910 100644 --- a/sakura_core/view/CRuler.cpp +++ b/sakura_core/view/CRuler.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CRuler.h b/sakura_core/view/CRuler.h index 287b28ee19..c2f6db3a32 100644 --- a/sakura_core/view/CRuler.h +++ b/sakura_core/view/CRuler.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CTextArea.cpp b/sakura_core/view/CTextArea.cpp index ac28afa8d9..d0db29c80f 100644 --- a/sakura_core/view/CTextArea.cpp +++ b/sakura_core/view/CTextArea.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CTextArea.h b/sakura_core/view/CTextArea.h index 92da7ba53b..a2ecc5f17a 100644 --- a/sakura_core/view/CTextArea.h +++ b/sakura_core/view/CTextArea.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CTextDrawer.cpp b/sakura_core/view/CTextDrawer.cpp index 0889740050..33e254f0e3 100644 --- a/sakura_core/view/CTextDrawer.cpp +++ b/sakura_core/view/CTextDrawer.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CTextDrawer.h b/sakura_core/view/CTextDrawer.h index 3430968f26..f053f067d6 100644 --- a/sakura_core/view/CTextDrawer.h +++ b/sakura_core/view/CTextDrawer.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CTextMetrics.cpp b/sakura_core/view/CTextMetrics.cpp index 2a5878c142..9ff53f1205 100644 --- a/sakura_core/view/CTextMetrics.cpp +++ b/sakura_core/view/CTextMetrics.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2007, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CTextMetrics.h b/sakura_core/view/CTextMetrics.h index ed52603490..b42046ceb0 100644 --- a/sakura_core/view/CTextMetrics.h +++ b/sakura_core/view/CTextMetrics.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2007, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CViewCalc.cpp b/sakura_core/view/CViewCalc.cpp index 0e21431bf7..f59d1d0315 100644 --- a/sakura_core/view/CViewCalc.cpp +++ b/sakura_core/view/CViewCalc.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CViewCalc.h b/sakura_core/view/CViewCalc.h index 998f733e27..d4b4645ce9 100644 --- a/sakura_core/view/CViewCalc.h +++ b/sakura_core/view/CViewCalc.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CViewFont.cpp b/sakura_core/view/CViewFont.cpp index a08facc633..e520a2df16 100644 --- a/sakura_core/view/CViewFont.cpp +++ b/sakura_core/view/CViewFont.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CViewFont.h b/sakura_core/view/CViewFont.h index 54b952faa4..6905e753b7 100644 --- a/sakura_core/view/CViewFont.h +++ b/sakura_core/view/CViewFont.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CViewParser.cpp b/sakura_core/view/CViewParser.cpp index 1767001135..d0ac6e9e67 100644 --- a/sakura_core/view/CViewParser.cpp +++ b/sakura_core/view/CViewParser.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CViewParser.h b/sakura_core/view/CViewParser.h index 458d7cb6d7..c80acc124b 100644 --- a/sakura_core/view/CViewParser.h +++ b/sakura_core/view/CViewParser.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CViewSelect.cpp b/sakura_core/view/CViewSelect.cpp index 863551c698..168e69d838 100644 --- a/sakura_core/view/CViewSelect.cpp +++ b/sakura_core/view/CViewSelect.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/CViewSelect.h b/sakura_core/view/CViewSelect.h index bdde13378d..29761f39f4 100644 --- a/sakura_core/view/CViewSelect.h +++ b/sakura_core/view/CViewSelect.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/DispPos.cpp b/sakura_core/view/DispPos.cpp index 56b61ae2d8..6d24a6f836 100644 --- a/sakura_core/view/DispPos.cpp +++ b/sakura_core/view/DispPos.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/DispPos.h b/sakura_core/view/DispPos.h index fb24303dfc..d1d657a81d 100644 --- a/sakura_core/view/DispPos.h +++ b/sakura_core/view/DispPos.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/CColorStrategy.cpp b/sakura_core/view/colors/CColorStrategy.cpp index 576c58e743..fbf7a66454 100644 --- a/sakura_core/view/colors/CColorStrategy.cpp +++ b/sakura_core/view/colors/CColorStrategy.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/CColorStrategy.h b/sakura_core/view/colors/CColorStrategy.h index 8edb07907b..712e718c7e 100644 --- a/sakura_core/view/colors/CColorStrategy.h +++ b/sakura_core/view/colors/CColorStrategy.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/CColor_Comment.cpp b/sakura_core/view/colors/CColor_Comment.cpp index 11f0433d10..a8b2e28412 100644 --- a/sakura_core/view/colors/CColor_Comment.cpp +++ b/sakura_core/view/colors/CColor_Comment.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/CColor_Comment.h b/sakura_core/view/colors/CColor_Comment.h index 8faf9c44d5..5ae3c7d226 100644 --- a/sakura_core/view/colors/CColor_Comment.h +++ b/sakura_core/view/colors/CColor_Comment.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/CColor_Found.cpp b/sakura_core/view/colors/CColor_Found.cpp index 9b63f8dca6..c379468eb1 100644 --- a/sakura_core/view/colors/CColor_Found.cpp +++ b/sakura_core/view/colors/CColor_Found.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/CColor_Found.h b/sakura_core/view/colors/CColor_Found.h index 54f9d6d4d4..1377e289e1 100644 --- a/sakura_core/view/colors/CColor_Found.h +++ b/sakura_core/view/colors/CColor_Found.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/CColor_Heredoc.cpp b/sakura_core/view/colors/CColor_Heredoc.cpp index 1d8d34486a..471be4482b 100644 --- a/sakura_core/view/colors/CColor_Heredoc.cpp +++ b/sakura_core/view/colors/CColor_Heredoc.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2011, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/CColor_Heredoc.h b/sakura_core/view/colors/CColor_Heredoc.h index cbb81db1b1..51bbfeba1b 100644 --- a/sakura_core/view/colors/CColor_Heredoc.h +++ b/sakura_core/view/colors/CColor_Heredoc.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2011, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/CColor_KeywordSet.cpp b/sakura_core/view/colors/CColor_KeywordSet.cpp index f3c926a37e..8586fdb421 100644 --- a/sakura_core/view/colors/CColor_KeywordSet.cpp +++ b/sakura_core/view/colors/CColor_KeywordSet.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/CColor_KeywordSet.h b/sakura_core/view/colors/CColor_KeywordSet.h index 47e15f9880..b7cf7507b8 100644 --- a/sakura_core/view/colors/CColor_KeywordSet.h +++ b/sakura_core/view/colors/CColor_KeywordSet.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/CColor_Numeric.cpp b/sakura_core/view/colors/CColor_Numeric.cpp index 2adc902b4e..43cc11a505 100644 --- a/sakura_core/view/colors/CColor_Numeric.cpp +++ b/sakura_core/view/colors/CColor_Numeric.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/CColor_Numeric.h b/sakura_core/view/colors/CColor_Numeric.h index c430c994ac..9839f27bb6 100644 --- a/sakura_core/view/colors/CColor_Numeric.h +++ b/sakura_core/view/colors/CColor_Numeric.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/CColor_Quote.cpp b/sakura_core/view/colors/CColor_Quote.cpp index c5b12e0c74..fd119086a3 100644 --- a/sakura_core/view/colors/CColor_Quote.cpp +++ b/sakura_core/view/colors/CColor_Quote.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/CColor_Quote.h b/sakura_core/view/colors/CColor_Quote.h index 92afc6c7c9..1c0b40f4a6 100644 --- a/sakura_core/view/colors/CColor_Quote.h +++ b/sakura_core/view/colors/CColor_Quote.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/CColor_RegexKeyword.cpp b/sakura_core/view/colors/CColor_RegexKeyword.cpp index bdae468f88..e12acbc1b0 100644 --- a/sakura_core/view/colors/CColor_RegexKeyword.cpp +++ b/sakura_core/view/colors/CColor_RegexKeyword.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/CColor_RegexKeyword.h b/sakura_core/view/colors/CColor_RegexKeyword.h index 9045e296eb..948f05492a 100644 --- a/sakura_core/view/colors/CColor_RegexKeyword.h +++ b/sakura_core/view/colors/CColor_RegexKeyword.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/CColor_Url.cpp b/sakura_core/view/colors/CColor_Url.cpp index e1492def1d..b150fa1738 100644 --- a/sakura_core/view/colors/CColor_Url.cpp +++ b/sakura_core/view/colors/CColor_Url.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/CColor_Url.h b/sakura_core/view/colors/CColor_Url.h index f9d4235115..118309c121 100644 --- a/sakura_core/view/colors/CColor_Url.h +++ b/sakura_core/view/colors/CColor_Url.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/colors/EColorIndexType.h b/sakura_core/view/colors/EColorIndexType.h index 211a5dc0d6..e1500e17c4 100644 --- a/sakura_core/view/colors/EColorIndexType.h +++ b/sakura_core/view/colors/EColorIndexType.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/figures/CFigureManager.cpp b/sakura_core/view/figures/CFigureManager.cpp index 2aac1ce0a4..d42ce00cd7 100644 --- a/sakura_core/view/figures/CFigureManager.cpp +++ b/sakura_core/view/figures/CFigureManager.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/figures/CFigureManager.h b/sakura_core/view/figures/CFigureManager.h index d5cdd8b472..3fc6fd6ae8 100644 --- a/sakura_core/view/figures/CFigureManager.h +++ b/sakura_core/view/figures/CFigureManager.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/figures/CFigureStrategy.cpp b/sakura_core/view/figures/CFigureStrategy.cpp index 1dfaa07b25..a025fd642f 100644 --- a/sakura_core/view/figures/CFigureStrategy.cpp +++ b/sakura_core/view/figures/CFigureStrategy.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/figures/CFigureStrategy.h b/sakura_core/view/figures/CFigureStrategy.h index 6e683aa7c0..229b44af3f 100644 --- a/sakura_core/view/figures/CFigureStrategy.h +++ b/sakura_core/view/figures/CFigureStrategy.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/figures/CFigure_Comma.cpp b/sakura_core/view/figures/CFigure_Comma.cpp index e21e2ba16c..7ebe840653 100644 --- a/sakura_core/view/figures/CFigure_Comma.cpp +++ b/sakura_core/view/figures/CFigure_Comma.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/figures/CFigure_Comma.h b/sakura_core/view/figures/CFigure_Comma.h index 4f571fbfe8..23f4bb2ecb 100644 --- a/sakura_core/view/figures/CFigure_Comma.h +++ b/sakura_core/view/figures/CFigure_Comma.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2015, syat - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/figures/CFigure_CtrlCode.cpp b/sakura_core/view/figures/CFigure_CtrlCode.cpp index 8242c5c47e..25c0972b63 100644 --- a/sakura_core/view/figures/CFigure_CtrlCode.cpp +++ b/sakura_core/view/figures/CFigure_CtrlCode.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/figures/CFigure_CtrlCode.h b/sakura_core/view/figures/CFigure_CtrlCode.h index f0f04ba9f6..f1d1be4273 100644 --- a/sakura_core/view/figures/CFigure_CtrlCode.h +++ b/sakura_core/view/figures/CFigure_CtrlCode.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/figures/CFigure_Eol.cpp b/sakura_core/view/figures/CFigure_Eol.cpp index ea611264fe..c81d405d40 100644 --- a/sakura_core/view/figures/CFigure_Eol.cpp +++ b/sakura_core/view/figures/CFigure_Eol.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/figures/CFigure_Eol.h b/sakura_core/view/figures/CFigure_Eol.h index 6d5d5fac77..8b9a0ae591 100644 --- a/sakura_core/view/figures/CFigure_Eol.h +++ b/sakura_core/view/figures/CFigure_Eol.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/figures/CFigure_HanSpace.cpp b/sakura_core/view/figures/CFigure_HanSpace.cpp index 42f7c2ba86..74d537cc18 100644 --- a/sakura_core/view/figures/CFigure_HanSpace.cpp +++ b/sakura_core/view/figures/CFigure_HanSpace.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/figures/CFigure_HanSpace.h b/sakura_core/view/figures/CFigure_HanSpace.h index 9818eb9c55..e5e20226cd 100644 --- a/sakura_core/view/figures/CFigure_HanSpace.h +++ b/sakura_core/view/figures/CFigure_HanSpace.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/figures/CFigure_Tab.cpp b/sakura_core/view/figures/CFigure_Tab.cpp index 3eb3584d73..bb7ac3847c 100644 --- a/sakura_core/view/figures/CFigure_Tab.cpp +++ b/sakura_core/view/figures/CFigure_Tab.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/figures/CFigure_Tab.h b/sakura_core/view/figures/CFigure_Tab.h index d9bcfeeb0a..46cebda2b5 100644 --- a/sakura_core/view/figures/CFigure_Tab.h +++ b/sakura_core/view/figures/CFigure_Tab.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/figures/CFigure_ZenSpace.cpp b/sakura_core/view/figures/CFigure_ZenSpace.cpp index 290768fe49..90284036dc 100644 --- a/sakura_core/view/figures/CFigure_ZenSpace.cpp +++ b/sakura_core/view/figures/CFigure_ZenSpace.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/view/figures/CFigure_ZenSpace.h b/sakura_core/view/figures/CFigure_ZenSpace.h index 7f1ac7079b..8728235d46 100644 --- a/sakura_core/view/figures/CFigure_ZenSpace.h +++ b/sakura_core/view/figures/CFigure_ZenSpace.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/window/CAutoScrollWnd.cpp b/sakura_core/window/CAutoScrollWnd.cpp index 93e5935d32..0401474c41 100644 --- a/sakura_core/window/CAutoScrollWnd.cpp +++ b/sakura_core/window/CAutoScrollWnd.cpp @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2012, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/window/CAutoScrollWnd.h b/sakura_core/window/CAutoScrollWnd.h index 56a785a8c7..5f6e9d4917 100644 --- a/sakura_core/window/CAutoScrollWnd.h +++ b/sakura_core/window/CAutoScrollWnd.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2012, Moca - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index 475f90ff7e..a10cf68804 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -18,7 +18,7 @@ Copyright (C) 2010, ryoji, Moca、Uchi Copyright (C) 2011, ryoji Copyright (C) 2013, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/window/CEditWnd.h b/sakura_core/window/CEditWnd.h index 72f7e91ec6..bc5b668eb6 100644 --- a/sakura_core/window/CEditWnd.h +++ b/sakura_core/window/CEditWnd.h @@ -17,7 +17,7 @@ Copyright (C) 2007, ryoji Copyright (C) 2008, ryoji Copyright (C) 2009, nasukoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/window/CMainStatusBar.cpp b/sakura_core/window/CMainStatusBar.cpp index df6a6eff94..503a1708c7 100644 --- a/sakura_core/window/CMainStatusBar.cpp +++ b/sakura_core/window/CMainStatusBar.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/window/CMainStatusBar.h b/sakura_core/window/CMainStatusBar.h index 4720b5d2cd..2cdaac4393 100644 --- a/sakura_core/window/CMainStatusBar.h +++ b/sakura_core/window/CMainStatusBar.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/window/CMainToolBar.cpp b/sakura_core/window/CMainToolBar.cpp index b3d2a4b15d..1a232d94c7 100644 --- a/sakura_core/window/CMainToolBar.cpp +++ b/sakura_core/window/CMainToolBar.cpp @@ -4,7 +4,7 @@ Copyright (C) 2008, kobake Copyright (C) 2010, Uchi, Moca Copyright (C) 2012, aroka, Uchi - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/window/CMainToolBar.h b/sakura_core/window/CMainToolBar.h index 85b560ca35..f765b11c1d 100644 --- a/sakura_core/window/CMainToolBar.h +++ b/sakura_core/window/CMainToolBar.h @@ -1,7 +1,7 @@ /*! @file */ /* Copyright (C) 2008, kobake - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/window/CSplitBoxWnd.cpp b/sakura_core/window/CSplitBoxWnd.cpp index 3399d5487b..73b5ac0ce3 100644 --- a/sakura_core/window/CSplitBoxWnd.cpp +++ b/sakura_core/window/CSplitBoxWnd.cpp @@ -8,7 +8,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, aroka - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/window/CSplitBoxWnd.h b/sakura_core/window/CSplitBoxWnd.h index a2e7455fee..409d1e6270 100644 --- a/sakura_core/window/CSplitBoxWnd.h +++ b/sakura_core/window/CSplitBoxWnd.h @@ -6,7 +6,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, aroka - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/window/CSplitterWnd.cpp b/sakura_core/window/CSplitterWnd.cpp index 9695cd9113..758f9777fd 100644 --- a/sakura_core/window/CSplitterWnd.cpp +++ b/sakura_core/window/CSplitterWnd.cpp @@ -10,7 +10,7 @@ Copyright (C) 2002, aroka, YAZAKI Copyright (C) 2003, MIK Copyright (C) 2007, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/window/CSplitterWnd.h b/sakura_core/window/CSplitterWnd.h index 25fd3559eb..a0a4499637 100644 --- a/sakura_core/window/CSplitterWnd.h +++ b/sakura_core/window/CSplitterWnd.h @@ -7,7 +7,7 @@ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2002, aroka, YAZAKI - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/window/CTabWnd.cpp b/sakura_core/window/CTabWnd.cpp index 15ae3472b1..084a198969 100644 --- a/sakura_core/window/CTabWnd.cpp +++ b/sakura_core/window/CTabWnd.cpp @@ -14,7 +14,7 @@ Copyright (C) 2009, ryoji Copyright (C) 2012, Moca, syat, novice, uchi Copyright (C) 2013, Moca, Uchi, aroka, novice, syat, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/window/CTabWnd.h b/sakura_core/window/CTabWnd.h index 4ecd903a1d..b9101ff62c 100644 --- a/sakura_core/window/CTabWnd.h +++ b/sakura_core/window/CTabWnd.h @@ -12,7 +12,7 @@ Copyright (C) 2007, ryoji Copyright (C) 2012, Moca, syat Copyright (C) 2013, Uchi, aroka, novice, syat, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/sakura_core/window/CTipWnd.cpp b/sakura_core/window/CTipWnd.cpp index 00e85544d8..ab37670bfc 100644 --- a/sakura_core/window/CTipWnd.cpp +++ b/sakura_core/window/CTipWnd.cpp @@ -10,7 +10,7 @@ Copyright (C) 2002, GAE Copyright (C) 2005, D.S.Koba Copyright (C) 2006, ryoji, genta - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/window/CTipWnd.h b/sakura_core/window/CTipWnd.h index 31864dcd1e..d5c7495b4c 100644 --- a/sakura_core/window/CTipWnd.h +++ b/sakura_core/window/CTipWnd.h @@ -9,7 +9,7 @@ Copyright (C) 2001, asa-o Copyright (C) 2002, aroka Copyright (C) 2006, genta, fon - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/window/CWnd.cpp b/sakura_core/window/CWnd.cpp index 65e1476f56..911c37ca94 100644 --- a/sakura_core/window/CWnd.cpp +++ b/sakura_core/window/CWnd.cpp @@ -9,7 +9,7 @@ Copyright (C) 2000, genta Copyright (C) 2003, MIK, KEITA Copyright (C) 2006, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/sakura_core/window/CWnd.h b/sakura_core/window/CWnd.h index 568601a3eb..6c74ffdce5 100644 --- a/sakura_core/window/CWnd.h +++ b/sakura_core/window/CWnd.h @@ -9,7 +9,7 @@ Copyright (C) 2002, aroka Copyright (C) 2003, MIK Copyright (C) 2006, ryoji - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This source code is designed for sakura editor. Please contact the copyright holder to use this code for other purpose. diff --git a/tests/compiletests/clayoutint_test.cpp.in b/tests/compiletests/clayoutint_test.cpp.in index 843a32fbae..499ff70771 100644 --- a/tests/compiletests/clayoutint_test.cpp.in +++ b/tests/compiletests/clayoutint_test.cpp.in @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/StartEditorProcessForTest.h b/tests/unittests/StartEditorProcessForTest.h index 01e8de67e1..3e25a55e9f 100644 --- a/tests/unittests/StartEditorProcessForTest.h +++ b/tests/unittests/StartEditorProcessForTest.h @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/code-main.cpp b/tests/unittests/code-main.cpp index b531d3abff..863d79e228 100644 --- a/tests/unittests/code-main.cpp +++ b/tests/unittests/code-main.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/coverage.cpp b/tests/unittests/coverage.cpp index 10cf18d8da..0fc8dcaa40 100644 --- a/tests/unittests/coverage.cpp +++ b/tests/unittests/coverage.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-StdControl.cpp b/tests/unittests/test-StdControl.cpp index b2ec2eafb4..4044b4872c 100644 --- a/tests/unittests/test-StdControl.cpp +++ b/tests/unittests/test-StdControl.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-cclipboard.cpp b/tests/unittests/test-cclipboard.cpp index 3be8a100ca..c4330bc81b 100644 --- a/tests/unittests/test-cclipboard.cpp +++ b/tests/unittests/test-cclipboard.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2021 Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-ccodebase.cpp b/tests/unittests/test-ccodebase.cpp index 001235122e..13bde9d1ad 100644 --- a/tests/unittests/test-ccodebase.cpp +++ b/tests/unittests/test-ccodebase.cpp @@ -1,5 +1,5 @@ /* - Copyright (C) 2021, Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-ccommandline.cpp b/tests/unittests/test-ccommandline.cpp index 4ffa1878ac..d28f508e66 100644 --- a/tests/unittests/test-ccommandline.cpp +++ b/tests/unittests/test-ccommandline.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-cconvert.cpp b/tests/unittests/test-cconvert.cpp index b77fe42b39..5ac2b35637 100644 --- a/tests/unittests/test-cconvert.cpp +++ b/tests/unittests/test-cconvert.cpp @@ -1,5 +1,5 @@ /* - Copyright (C) 2021, Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-cdecode.cpp b/tests/unittests/test-cdecode.cpp index 457a99b76c..114352e3b8 100644 --- a/tests/unittests/test-cdecode.cpp +++ b/tests/unittests/test-cdecode.cpp @@ -1,5 +1,5 @@ /* - Copyright (C) 2021, Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-cdlgopenfile.cpp b/tests/unittests/test-cdlgopenfile.cpp index 90bc235cb9..d70a0f841e 100644 --- a/tests/unittests/test-cdlgopenfile.cpp +++ b/tests/unittests/test-cdlgopenfile.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-cdlgprofilemgr.cpp b/tests/unittests/test-cdlgprofilemgr.cpp index 22c99ee5ea..9bdbc46cc8 100644 --- a/tests/unittests/test-cdlgprofilemgr.cpp +++ b/tests/unittests/test-cdlgprofilemgr.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-cdocline.cpp b/tests/unittests/test-cdocline.cpp index 2093309f83..6e01e292e9 100644 --- a/tests/unittests/test-cdocline.cpp +++ b/tests/unittests/test-cdocline.cpp @@ -1,5 +1,5 @@ /* - Copyright (C) 2021, Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-cdoclinemgr.cpp b/tests/unittests/test-cdoclinemgr.cpp index 5bd5de0ba9..5447280349 100644 --- a/tests/unittests/test-cdoclinemgr.cpp +++ b/tests/unittests/test-cdoclinemgr.cpp @@ -1,5 +1,5 @@ /* - Copyright (C) 2021, Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-cdoctypemanager.cpp b/tests/unittests/test-cdoctypemanager.cpp index ff946e5028..802ad4efb8 100644 --- a/tests/unittests/test-cdoctypemanager.cpp +++ b/tests/unittests/test-cdoctypemanager.cpp @@ -1,5 +1,5 @@ /* - Copyright (C) 2021, Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-ceol.cpp b/tests/unittests/test-ceol.cpp index a3a612fd09..537f654521 100644 --- a/tests/unittests/test-ceol.cpp +++ b/tests/unittests/test-ceol.cpp @@ -1,5 +1,5 @@ /* - Copyright (C) 2021, Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-cerrorinfo.cpp b/tests/unittests/test-cerrorinfo.cpp index 32124cdb5b..e479040428 100644 --- a/tests/unittests/test-cerrorinfo.cpp +++ b/tests/unittests/test-cerrorinfo.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2021, Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-cfileext.cpp b/tests/unittests/test-cfileext.cpp index cf65b9fd27..3b9a569eb1 100644 --- a/tests/unittests/test-cfileext.cpp +++ b/tests/unittests/test-cfileext.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-charcode.cpp b/tests/unittests/test-charcode.cpp index 1a5c32d3c0..47f4512a7a 100644 --- a/tests/unittests/test-charcode.cpp +++ b/tests/unittests/test-charcode.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2021, Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-clayoutint.cpp b/tests/unittests/test-clayoutint.cpp index b3a708c81c..73db76f1b9 100644 --- a/tests/unittests/test-clayoutint.cpp +++ b/tests/unittests/test-clayoutint.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-cmemory.cpp b/tests/unittests/test-cmemory.cpp index 5c49c904c0..06b981cd71 100644 --- a/tests/unittests/test-cmemory.cpp +++ b/tests/unittests/test-cmemory.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-cnative.cpp b/tests/unittests/test-cnative.cpp index 6a795fd4f2..a0e4b02ef5 100644 --- a/tests/unittests/test-cnative.cpp +++ b/tests/unittests/test-cnative.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-cprofile.cpp b/tests/unittests/test-cprofile.cpp index f8cbbb24b7..07aafe6e84 100644 --- a/tests/unittests/test-cprofile.cpp +++ b/tests/unittests/test-cprofile.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-crunningtimer.cpp b/tests/unittests/test-crunningtimer.cpp index 5f13990105..e99f16a7df 100644 --- a/tests/unittests/test-crunningtimer.cpp +++ b/tests/unittests/test-crunningtimer.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-csakuraenvironment.cpp b/tests/unittests/test-csakuraenvironment.cpp index b7d5eda7ae..743719c713 100644 --- a/tests/unittests/test-csakuraenvironment.cpp +++ b/tests/unittests/test-csakuraenvironment.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2021, Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-csearchagent.cpp b/tests/unittests/test-csearchagent.cpp index feb4baf58f..f33de0a006 100644 --- a/tests/unittests/test-csearchagent.cpp +++ b/tests/unittests/test-csearchagent.cpp @@ -1,5 +1,5 @@ /* - Copyright (C) 2021, Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-ctextmetrics.cpp b/tests/unittests/test-ctextmetrics.cpp index 1b41224f4c..915fc1526e 100644 --- a/tests/unittests/test-ctextmetrics.cpp +++ b/tests/unittests/test-ctextmetrics.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2021, Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-cwordparse.cpp b/tests/unittests/test-cwordparse.cpp index 2f1b62154b..79d2b2fc99 100644 --- a/tests/unittests/test-cwordparse.cpp +++ b/tests/unittests/test-cwordparse.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2021, Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-czipfile.cpp b/tests/unittests/test-czipfile.cpp index 9565bbb485..07e1ef9744 100644 --- a/tests/unittests/test-czipfile.cpp +++ b/tests/unittests/test-czipfile.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2021 Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-design_template.cpp b/tests/unittests/test-design_template.cpp index 6d06a8e12a..cc838d7323 100644 --- a/tests/unittests/test-design_template.cpp +++ b/tests/unittests/test-design_template.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2021 Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-editinfo.cpp b/tests/unittests/test-editinfo.cpp index 3c0ca58b9c..689898e4c9 100644 --- a/tests/unittests/test-editinfo.cpp +++ b/tests/unittests/test-editinfo.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-file.cpp b/tests/unittests/test-file.cpp index ec59b6fba8..33d41810d7 100644 --- a/tests/unittests/test-file.cpp +++ b/tests/unittests/test-file.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-format.cpp b/tests/unittests/test-format.cpp index 8ad200c2df..39acd1981f 100644 --- a/tests/unittests/test-format.cpp +++ b/tests/unittests/test-format.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-grepinfo.cpp b/tests/unittests/test-grepinfo.cpp index d9b0341312..ee0c279ef5 100644 --- a/tests/unittests/test-grepinfo.cpp +++ b/tests/unittests/test-grepinfo.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-int2dec.cpp b/tests/unittests/test-int2dec.cpp index 42e0a91f37..a3aeb540d4 100644 --- a/tests/unittests/test-int2dec.cpp +++ b/tests/unittests/test-int2dec.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-is_mailaddress.cpp b/tests/unittests/test-is_mailaddress.cpp index 69af569eed..3b131ce3f4 100644 --- a/tests/unittests/test-is_mailaddress.cpp +++ b/tests/unittests/test-is_mailaddress.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-loadstring.cpp b/tests/unittests/test-loadstring.cpp index 024e3614ee..229a47b919 100644 --- a/tests/unittests/test-loadstring.cpp +++ b/tests/unittests/test-loadstring.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-mydevmode.cpp b/tests/unittests/test-mydevmode.cpp index 6c452165d9..7f551a7fcf 100644 --- a/tests/unittests/test-mydevmode.cpp +++ b/tests/unittests/test-mydevmode.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-parameterized.cpp b/tests/unittests/test-parameterized.cpp index 4eaa1c5347..9f171ad0e4 100644 --- a/tests/unittests/test-parameterized.cpp +++ b/tests/unittests/test-parameterized.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-printECodeType.cpp b/tests/unittests/test-printECodeType.cpp index 7a5c72a449..bab20c0a15 100644 --- a/tests/unittests/test-printECodeType.cpp +++ b/tests/unittests/test-printECodeType.cpp @@ -1,5 +1,5 @@ /* - Copyright (C) 2021, Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-printEFunctionCode.cpp b/tests/unittests/test-printEFunctionCode.cpp index 181eb0a004..d547d97165 100644 --- a/tests/unittests/test-printEFunctionCode.cpp +++ b/tests/unittests/test-printEFunctionCode.cpp @@ -1,5 +1,5 @@ /* - Copyright (C) 2021, Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-sample-disabled.cpp b/tests/unittests/test-sample-disabled.cpp index fa60340f3b..30b6ee8f87 100644 --- a/tests/unittests/test-sample-disabled.cpp +++ b/tests/unittests/test-sample-disabled.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-sample.cpp b/tests/unittests/test-sample.cpp index ab38870630..f646261235 100644 --- a/tests/unittests/test-sample.cpp +++ b/tests/unittests/test-sample.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-ssearchoption.cpp b/tests/unittests/test-ssearchoption.cpp index 94377ae292..cf7e0bb66a 100644 --- a/tests/unittests/test-ssearchoption.cpp +++ b/tests/unittests/test-ssearchoption.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-statictype.cpp b/tests/unittests/test-statictype.cpp index 1ef307c696..b66b550d05 100644 --- a/tests/unittests/test-statictype.cpp +++ b/tests/unittests/test-statictype.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2021 Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-string_ex.cpp b/tests/unittests/test-string_ex.cpp index c3412a60d0..e85ac41075 100644 --- a/tests/unittests/test-string_ex.cpp +++ b/tests/unittests/test-string_ex.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-winmain.cpp b/tests/unittests/test-winmain.cpp index da6b49be0a..bc4a2350e4 100644 --- a/tests/unittests/test-winmain.cpp +++ b/tests/unittests/test-winmain.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2018-2021, Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tests/unittests/test-zoom.cpp b/tests/unittests/test-zoom.cpp index 289ea58f66..f262d67eec 100644 --- a/tests/unittests/test-zoom.cpp +++ b/tests/unittests/test-zoom.cpp @@ -1,6 +1,6 @@ /*! @file */ /* - Copyright (C) 2021, Sakura Editor Organization + Copyright (C) 2021-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tools/ChmSourceConverter/ChmSourceConverter.Test/EncoderEscapingFallbackTest.cs b/tools/ChmSourceConverter/ChmSourceConverter.Test/EncoderEscapingFallbackTest.cs index 2d61e07a63..4d65a557f4 100644 --- a/tools/ChmSourceConverter/ChmSourceConverter.Test/EncoderEscapingFallbackTest.cs +++ b/tools/ChmSourceConverter/ChmSourceConverter.Test/EncoderEscapingFallbackTest.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tools/ChmSourceConverter/ChmSourceConverter/ChmSourceConverterApp.cs b/tools/ChmSourceConverter/ChmSourceConverter/ChmSourceConverterApp.cs index d69ed08353..f71258d965 100644 --- a/tools/ChmSourceConverter/ChmSourceConverter/ChmSourceConverterApp.cs +++ b/tools/ChmSourceConverter/ChmSourceConverter/ChmSourceConverterApp.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tools/ChmSourceConverter/ChmSourceConverter/EncoderEscapingFallback.cs b/tools/ChmSourceConverter/ChmSourceConverter/EncoderEscapingFallback.cs index a3315371ef..385b083204 100644 --- a/tools/ChmSourceConverter/ChmSourceConverter/EncoderEscapingFallback.cs +++ b/tools/ChmSourceConverter/ChmSourceConverter/EncoderEscapingFallback.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tools/ChmSourceConverter/ChmSourceConverter/EncoderEscapingFallbackBuffer.cs b/tools/ChmSourceConverter/ChmSourceConverter/EncoderEscapingFallbackBuffer.cs index 2a093f253f..a168bc0752 100644 --- a/tools/ChmSourceConverter/ChmSourceConverter/EncoderEscapingFallbackBuffer.cs +++ b/tools/ChmSourceConverter/ChmSourceConverter/EncoderEscapingFallbackBuffer.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tools/ChmSourceConverter/ChmSourceConverter/FileContents.cs b/tools/ChmSourceConverter/ChmSourceConverter/FileContents.cs index 9b9cb1e989..10d6ca2223 100644 --- a/tools/ChmSourceConverter/ChmSourceConverter/FileContents.cs +++ b/tools/ChmSourceConverter/ChmSourceConverter/FileContents.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tools/ChmSourceConverter/ChmSourceConverter/LineEnumerator.cs b/tools/ChmSourceConverter/ChmSourceConverter/LineEnumerator.cs index a6c9125ff1..e800cd91b2 100644 --- a/tools/ChmSourceConverter/ChmSourceConverter/LineEnumerator.cs +++ b/tools/ChmSourceConverter/ChmSourceConverter/LineEnumerator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tools/ChmSourceConverter/ChmSourceConverter/Program.cs b/tools/ChmSourceConverter/ChmSourceConverter/Program.cs index 9c74408a48..31a76d9dea 100644 --- a/tools/ChmSourceConverter/ChmSourceConverter/Program.cs +++ b/tools/ChmSourceConverter/ChmSourceConverter/Program.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2018-2020 Sakura Editor Organization + Copyright (C) 2018-2022, Sakura Editor Organization This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/tools/macro/CopyDirPath/CopyDirPath.js b/tools/macro/CopyDirPath/CopyDirPath.js index 3302612aec..70049ececc 100644 --- a/tools/macro/CopyDirPath/CopyDirPath.js +++ b/tools/macro/CopyDirPath/CopyDirPath.js @@ -1,6 +1,6 @@ // MIT License // -// Copyright (c) 2018 Sakura Editor Organization +// Copyright (C) 2018-2022, Sakura Editor Organization // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal diff --git a/tools/macro/CopyDirPath/CopyDirPath.mac b/tools/macro/CopyDirPath/CopyDirPath.mac index 3302612aec..70049ececc 100644 --- a/tools/macro/CopyDirPath/CopyDirPath.mac +++ b/tools/macro/CopyDirPath/CopyDirPath.mac @@ -1,6 +1,6 @@ // MIT License // -// Copyright (c) 2018 Sakura Editor Organization +// Copyright (C) 2018-2022, Sakura Editor Organization // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal diff --git a/tools/macro/CopyDirPath/CopyDirPath.vbs b/tools/macro/CopyDirPath/CopyDirPath.vbs index 9810f94899..e1a1f8694a 100644 --- a/tools/macro/CopyDirPath/CopyDirPath.vbs +++ b/tools/macro/CopyDirPath/CopyDirPath.vbs @@ -1,6 +1,6 @@ ' MIT License ' -' Copyright (c) 2018 Sakura Editor Organization +' Copyright (C) 2018-2022, Sakura Editor Organization ' ' Permission is hereby granted, free of charge, to any person obtaining a copy ' of this software and associated documentation files (the "Software"), to deal From 21c06c6b7c4efdecc1330ded1408477cb06de359 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sat, 5 Feb 2022 16:50:19 +0900 Subject: [PATCH 0914/1024] =?UTF-8?q?ToolBarTools:=20=E3=82=BD=E3=83=BC?= =?UTF-8?q?=E3=82=B9=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AB=E3=82=B3?= =?UTF-8?q?=E3=83=94=E3=83=BC=E3=83=A9=E3=82=A4=E3=83=88=E8=A1=A8=E8=A8=98?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/ToolBarTools/ToolBarImageCommon/Bmp.cs | 25 ++++++++++++++++++- .../ReadWriteStructWithAllocGCHandle.cs | 25 ++++++++++++++++++- .../ToolBarImageMuxer/BmpFileComparer.cs | 25 ++++++++++++++++++- .../ToolBarImageMuxer/BmpMuxer.cs | 25 ++++++++++++++++++- .../ToolBarTools/ToolBarImageMuxer/Program.cs | 25 ++++++++++++++++++- .../ToolBarImageSplitter/BmpSplitter.cs | 25 ++++++++++++++++++- .../ToolBarImageSplitter/Program.cs | 25 ++++++++++++++++++- 7 files changed, 168 insertions(+), 7 deletions(-) diff --git a/tools/ToolBarTools/ToolBarImageCommon/Bmp.cs b/tools/ToolBarTools/ToolBarImageCommon/Bmp.cs index 9a5e47bcbf..9a985eba12 100644 --- a/tools/ToolBarTools/ToolBarImageCommon/Bmp.cs +++ b/tools/ToolBarTools/ToolBarImageCommon/Bmp.cs @@ -1,4 +1,27 @@ -using System; +/* + Copyright (C) 2020-2022, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. + */ +using System; using System.Collections.Generic; using System.IO; using System.Linq; diff --git a/tools/ToolBarTools/ToolBarImageCommon/ReadWriteStructWithAllocGCHandle.cs b/tools/ToolBarTools/ToolBarImageCommon/ReadWriteStructWithAllocGCHandle.cs index 4e5528a1b3..17634c1eb5 100644 --- a/tools/ToolBarTools/ToolBarImageCommon/ReadWriteStructWithAllocGCHandle.cs +++ b/tools/ToolBarTools/ToolBarImageCommon/ReadWriteStructWithAllocGCHandle.cs @@ -1,4 +1,27 @@ -using System; +/* + Copyright (C) 2020-2022, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. + */ +using System; using System.IO; using System.Collections.Generic; using System.Text; diff --git a/tools/ToolBarTools/ToolBarImageMuxer/BmpFileComparer.cs b/tools/ToolBarTools/ToolBarImageMuxer/BmpFileComparer.cs index 75a75a5f12..6b485033e2 100644 --- a/tools/ToolBarTools/ToolBarImageMuxer/BmpFileComparer.cs +++ b/tools/ToolBarTools/ToolBarImageMuxer/BmpFileComparer.cs @@ -1,4 +1,27 @@ -using System; +/* + Copyright (C) 2020-2022, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. + */ +using System; using System.Collections.Generic; using System.Linq; using System.Text; diff --git a/tools/ToolBarTools/ToolBarImageMuxer/BmpMuxer.cs b/tools/ToolBarTools/ToolBarImageMuxer/BmpMuxer.cs index c6d5d5be39..8a3f11ae42 100644 --- a/tools/ToolBarTools/ToolBarImageMuxer/BmpMuxer.cs +++ b/tools/ToolBarTools/ToolBarImageMuxer/BmpMuxer.cs @@ -1,4 +1,27 @@ -using System; +/* + Copyright (C) 2020-2022, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. + */ +using System; using System.Collections.Generic; using System.IO; using System.Linq; diff --git a/tools/ToolBarTools/ToolBarImageMuxer/Program.cs b/tools/ToolBarTools/ToolBarImageMuxer/Program.cs index f6fe6c3a7f..866bca8335 100644 --- a/tools/ToolBarTools/ToolBarImageMuxer/Program.cs +++ b/tools/ToolBarTools/ToolBarImageMuxer/Program.cs @@ -1,4 +1,27 @@ -using System; +/* + Copyright (C) 2020-2022, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. + */ +using System; using System.Collections.Generic; using System.Linq; using System.Text; diff --git a/tools/ToolBarTools/ToolBarImageSplitter/BmpSplitter.cs b/tools/ToolBarTools/ToolBarImageSplitter/BmpSplitter.cs index a85f911033..34c964daa7 100644 --- a/tools/ToolBarTools/ToolBarImageSplitter/BmpSplitter.cs +++ b/tools/ToolBarTools/ToolBarImageSplitter/BmpSplitter.cs @@ -1,4 +1,27 @@ -using System; +/* + Copyright (C) 2020-2022, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. + */ +using System; using System.Collections.Generic; using System.Linq; using System.Text; diff --git a/tools/ToolBarTools/ToolBarImageSplitter/Program.cs b/tools/ToolBarTools/ToolBarImageSplitter/Program.cs index fb21f82bbf..51ad7ca4d5 100644 --- a/tools/ToolBarTools/ToolBarImageSplitter/Program.cs +++ b/tools/ToolBarTools/ToolBarImageSplitter/Program.cs @@ -1,4 +1,27 @@ -using System; +/* + Copyright (C) 2020-2022, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. + */ +using System; using System.Collections.Generic; using System.Linq; using System.Text; From fc5aadc26b86b02b181da198dc02c830186223a5 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Mon, 24 Jan 2022 19:06:58 +0900 Subject: [PATCH 0915/1024] =?UTF-8?q?CI=E3=81=AE=E5=AE=9F=E8=A1=8C?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6=E3=81=8B=E3=82=89=E3=83=96=E3=83=A9=E3=83=B3?= =?UTF-8?q?=E3=83=81=E5=90=8D=E3=82=92=E9=99=A4=E3=81=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build-sakura.yml | 7 ------- azure-pipelines.yml | 12 ------------ 2 files changed, 19 deletions(-) diff --git a/.github/workflows/build-sakura.yml b/.github/workflows/build-sakura.yml index ed519cbc39..cb48fde50a 100644 --- a/.github/workflows/build-sakura.yml +++ b/.github/workflows/build-sakura.yml @@ -4,9 +4,6 @@ name: build sakura # events but only for the master branch on: push: - branches: - - master - - feature/* paths-ignore: - '**/*.md' - .gitignore @@ -16,10 +13,6 @@ on: - 'ci/azure-pipelines/template*.yml' pull_request: - branches: - - master - - feature/* - - release/* paths-ignore: - '**/*.md' - .gitignore diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 070593638f..eb68fbe545 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -4,12 +4,6 @@ # https://docs.microsoft.com/en-us/azure/devops/pipelines/build/triggers?view=azure-devops&viewFallbackFrom=vsts&tabs=yaml ############################################################################################################################### trigger: - branches: - include: - - master - - develop - - feature/* - - revert-* paths: exclude: - .github/* @@ -45,12 +39,6 @@ trigger: # https://docs.microsoft.com/en-us/azure/devops/pipelines/build/triggers?view=azure-devops&tabs=yaml#pull-request-validation ############################################################################################################################### pr: - branches: - include: - - master - - develop - - feature/* - - revert-* paths: exclude: - .github/* From 95e4ebf75f908f1b15229104b1b104c7e9ed1fcd Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Thu, 3 Feb 2022 12:46:35 +0900 Subject: [PATCH 0916/1024] =?UTF-8?q?[GHA]=20=E3=83=AF=E3=83=BC=E3=82=AF?= =?UTF-8?q?=E3=83=95=E3=83=AD=E3=83=BC=E3=82=92=E6=89=8B=E5=8B=95=E3=81=A7?= =?UTF-8?q?=E5=AE=9F=E8=A1=8C=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build-sakura.yml | 2 ++ .github/workflows/sonarscan.yml | 1 + 2 files changed, 3 insertions(+) diff --git a/.github/workflows/build-sakura.yml b/.github/workflows/build-sakura.yml index ed519cbc39..0b5465e707 100644 --- a/.github/workflows/build-sakura.yml +++ b/.github/workflows/build-sakura.yml @@ -3,6 +3,8 @@ name: build sakura # Controls when the action will run. Triggers the workflow on push or pull request # events but only for the master branch on: + workflow_dispatch: + push: branches: - master diff --git a/.github/workflows/sonarscan.yml b/.github/workflows/sonarscan.yml index 088813a861..b8e316a8fb 100644 --- a/.github/workflows/sonarscan.yml +++ b/.github/workflows/sonarscan.yml @@ -3,6 +3,7 @@ name: SonarCloud # Controls when the action will run. Triggers the workflow on push or pull request # events but only for the master branch on: + workflow_dispatch: push: paths-ignore: - '**/*.md' From 342a04d40694c45e8ccf9239434c37971f2dfb09 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Mon, 7 Feb 2022 07:38:24 +0900 Subject: [PATCH 0917/1024] =?UTF-8?q?[GHA]=20=E3=83=AF=E3=83=BC=E3=82=AF?= =?UTF-8?q?=E3=83=95=E3=83=AD=E3=83=BC=E8=A8=AD=E5=AE=9A=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=A4=E3=83=AB=E4=B8=AD=E3=81=AE=E4=BD=99=E5=88=86=E3=81=AA?= =?UTF-8?q?=E7=A9=BA=E8=A1=8C=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build-sakura.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/build-sakura.yml b/.github/workflows/build-sakura.yml index 0b5465e707..baba0273be 100644 --- a/.github/workflows/build-sakura.yml +++ b/.github/workflows/build-sakura.yml @@ -4,7 +4,6 @@ name: build sakura # events but only for the master branch on: workflow_dispatch: - push: branches: - master @@ -16,7 +15,6 @@ on: - appveyor.yml - 'azure-pipelines*.yml' - 'ci/azure-pipelines/template*.yml' - pull_request: branches: - master From a3bcc0fe8af742736eb7db4ba157f42d5a9f5ad7 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Mon, 24 Jan 2022 19:28:09 +0900 Subject: [PATCH 0918/1024] =?UTF-8?q?[AZP]=20=E9=99=A4=E5=A4=96=E3=81=97?= =?UTF-8?q?=E3=81=9F=E3=81=84=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=82=92?= =?UTF-8?q?=E3=83=AF=E3=82=A4=E3=83=AB=E3=83=89=E3=82=AB=E3=83=BC=E3=83=89?= =?UTF-8?q?=E3=81=A7=E6=8C=87=E5=AE=9A=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- azure-pipelines.yml | 50 ++++----------------------------------------- 1 file changed, 4 insertions(+), 46 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index eb68fbe545..cba8eccf9d 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -6,32 +6,11 @@ trigger: paths: exclude: - - .github/* + - '**/*.md' + - '.github/*' - .gitignore - .travis.yml - appveyor.yml - - CHANGELOG.md - - CONTRIBUTING.md - - CPPLINT.md - - README.md - - SonarQube.md - - addDoxygenFileComment.md - - build.md - - create-big-file.md - - debug-tasktray-menu.md - - get-PR.md - - ci/azure-pipelines/azure-pipelines.md - - ci/build-batchfiles.md - - ci/build-envvars.md - - installer/externals/bregonig/README.md - - installer/externals/universal-ctags/README.md - - installer/readme.md - - remove-redundant-blank-lines.md - - tools/find-tools.md - - tools/macro/macro.md - - tools/zip/readme.md - - tests/unittest.md - - vcx-props/project-PlatformToolset.md ############################################################################################################################### # ビルドトリガー (Pull Request) @@ -41,32 +20,11 @@ trigger: pr: paths: exclude: - - .github/* + - '**/*.md' + - '.github/*' - .gitignore - .travis.yml - appveyor.yml - - CHANGELOG.md - - CONTRIBUTING.md - - CPPLINT.md - - README.md - - SonarQube.md - - addDoxygenFileComment.md - - build.md - - create-big-file.md - - debug-tasktray-menu.md - - get-PR.md - - ci/azure-pipelines/azure-pipelines.md - - ci/build-batchfiles.md - - ci/build-envvars.md - - installer/externals/bregonig/README.md - - installer/externals/universal-ctags/README.md - - installer/readme.md - - remove-redundant-blank-lines.md - - tools/find-tools.md - - tools/macro/macro.md - - tools/zip/readme.md - - tests/unittest.md - - vcx-props/project-PlatformToolset.md ############################################################################################################################### # jobs/job 定義 From 23fd2eae43120002597cd0260daccb3b3e8e17d2 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Wed, 9 Feb 2022 08:48:43 +0900 Subject: [PATCH 0919/1024] =?UTF-8?q?[AZP]=20=E9=99=A4=E5=A4=96=E5=AF=BE?= =?UTF-8?q?=E8=B1=A1=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=82=92=E4=BB=96?= =?UTF-8?q?=E3=81=AECI=E3=81=A8=E6=8F=83=E3=81=88=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- azure-pipelines.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index cba8eccf9d..a7f696c8d7 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ trigger: - '**/*.md' - '.github/*' - .gitignore - - .travis.yml + - .editorconfig - appveyor.yml ############################################################################################################################### @@ -23,7 +23,7 @@ pr: - '**/*.md' - '.github/*' - .gitignore - - .travis.yml + - .editorconfig - appveyor.yml ############################################################################################################################### From 4322e2c6f7c4a272f5c694d92df9068abc1d2c38 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 9 Feb 2022 22:05:52 +0900 Subject: [PATCH 0920/1024] =?UTF-8?q?=E3=82=A2=E3=83=BC=E3=82=AB=E3=82=A4?= =?UTF-8?q?=E3=83=96=E5=B1=95=E9=96=8B=E3=82=BF=E3=82=B9=E3=82=AF=E3=82=92?= =?UTF-8?q?=E5=A4=96=E9=83=A8=E5=8C=96=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura/ExtractArchives.targets | 18 ++++++++++++++++++ sakura/sakura.vcxproj | 13 +------------ 2 files changed, 19 insertions(+), 12 deletions(-) create mode 100644 sakura/ExtractArchives.targets diff --git a/sakura/ExtractArchives.targets b/sakura/ExtractArchives.targets new file mode 100644 index 0000000000..fe44ed7a30 --- /dev/null +++ b/sakura/ExtractArchives.targets @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sakura/sakura.vcxproj b/sakura/sakura.vcxproj index 2d94b8907e..c033d57d66 100644 --- a/sakura/sakura.vcxproj +++ b/sakura/sakura.vcxproj @@ -914,23 +914,12 @@ + - - - - - - - - - - - - \ No newline at end of file From 5ce5d95d3945501b1dd505e4d2040b5f97e5d18b Mon Sep 17 00:00:00 2001 From: berryzplus Date: Thu, 10 Feb 2022 00:34:46 +0900 Subject: [PATCH 0921/1024] =?UTF-8?q?=E3=82=A2=E3=83=BC=E3=82=AB=E3=82=A4?= =?UTF-8?q?=E3=83=96=E5=B1=95=E9=96=8B=E3=82=BF=E3=82=B9=E3=82=AF=E3=82=92?= =?UTF-8?q?=E3=83=AA=E3=83=95=E3=82=A1=E3=82=AF=E3=82=BF=E3=83=AA=E3=83=B3?= =?UTF-8?q?=E3=82=B0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura/ExtractArchives.targets | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/sakura/ExtractArchives.targets b/sakura/ExtractArchives.targets index fe44ed7a30..fe936c0ec5 100644 --- a/sakura/ExtractArchives.targets +++ b/sakura/ExtractArchives.targets @@ -1,18 +1,24 @@ - - - + + $(SolutionDir)installer\externals\bregonig\bron420.zip + x64/bregonig.dll + bregonig.dll + $(OutDir)bregonig.dll + $(SolutionDir)installer/externals/universal-ctags/ctags-2020-01-12_feffe43a-x64.zip + $(SolutionDir)installer/externals/universal-ctags/ctags-2020-01-12_feffe43a-x86.zip + ctags.exe + $(OutDir)ctags.exe + + + - - - - - + + - - + + \ No newline at end of file From 2dda1e21bd78b5d9aff491f039eb8a93b6713db3 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 11 Feb 2022 11:23:19 +0900 Subject: [PATCH 0922/1024] =?UTF-8?q?=E3=82=A2=E3=83=BC=E3=82=AB=E3=82=A4?= =?UTF-8?q?=E3=83=96=E5=B1=95=E9=96=8B=E3=82=BF=E3=82=B9=E3=82=AF=E3=81=AE?= =?UTF-8?q?=E3=83=AD=E3=82=B0=E5=87=BA=E5=8A=9B=E3=82=92=E3=80=8C=E8=A9=B3?= =?UTF-8?q?=E7=B4=B0=E3=83=A2=E3=83=BC=E3=83=89=E3=80=8D=E3=81=AB=E9=99=90?= =?UTF-8?q?=E5=AE=9A=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura/ExtractArchives.targets | 43 ++++++++++++++++++++++++++++++---- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/sakura/ExtractArchives.targets b/sakura/ExtractArchives.targets index fe936c0ec5..4f1f229827 100644 --- a/sakura/ExtractArchives.targets +++ b/sakura/ExtractArchives.targets @@ -9,11 +9,46 @@ ctags.exe $(OutDir)ctags.exe - - + + + + + + + + + + + + + + - - + + From 6f62630e79f884c37ac3526845f428dd80195662 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 11 Feb 2022 12:23:51 +0900 Subject: [PATCH 0923/1024] =?UTF-8?q?=E3=82=A2=E3=83=BC=E3=82=AB=E3=82=A4?= =?UTF-8?q?=E3=83=96=E5=B1=95=E9=96=8B=E3=82=BF=E3=82=B9=E3=82=AF=E3=82=92?= =?UTF-8?q?=E5=BF=85=E8=A6=81=E3=81=AA=E5=A0=B4=E5=90=88=E3=81=A0=E3=81=91?= =?UTF-8?q?=E5=AE=9F=E8=A1=8C=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura/ExtractArchives.targets | 45 +++++++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/sakura/ExtractArchives.targets b/sakura/ExtractArchives.targets index 4f1f229827..5c4897c68b 100644 --- a/sakura/ExtractArchives.targets +++ b/sakura/ExtractArchives.targets @@ -27,14 +27,47 @@ psInfo.CreateNoWindow = true; psInfo.UseShellExecute = false; psInfo.RedirectStandardOutput = true; -args = "7z e \"" + ArchivePath.ToString() + "\" -o\"" + Path.GetDirectoryName(Output.ToString()) + "\" -y " + InternalPath; -psInfo.FileName = "cmd"; -psInfo.Arguments = "/c " + args; +string outputTimestamp = null; +string sourceTimestamp = null; -Log.LogMessage(MessageImportance.Normal, args); -p = Process.Start(psInfo); +if (File.Exists(Output.ToString())) { + args = "((Get-ItemPropertyValue -Path '" + Output.ToString() + "' -name LastWriteTime).ToString('u'))"; + psInfo.FileName = "powershell"; + psInfo.Arguments = "-NoLogo -ExecutionPolicy RemoteSigned -Command " + args; -Log.LogMessage(MessageImportance.Low, p.StandardOutput.ReadToEnd()); + Log.LogMessage(MessageImportance.Low, args); + p = Process.Start(psInfo); + + outputTimestamp = p.StandardOutput.ReadToEnd(); + p.Dispose(); + p = null; + + if (!string.IsNullOrEmpty(outputTimestamp)) { + args = "(((7z l '" + ArchivePath.ToString() + "' " + InternalPath + " | Select-String " + InternalPath + ").ToString().SubString(0, 19) | Get-Date).ToString('u'))"; + psInfo.Arguments = "-NoLogo -ExecutionPolicy RemoteSigned -Command " + args; + + Log.LogMessage(MessageImportance.Low, args); + p = Process.Start(psInfo); + + sourceTimestamp = p.StandardOutput.ReadToEnd(); + p.Dispose(); + p = null; + } +} + +if (string.IsNullOrEmpty(outputTimestamp) || + string.IsNullOrEmpty(sourceTimestamp) || + outputTimestamp != sourceTimestamp) +{ + args = "7z e \"" + ArchivePath.ToString() + "\" -o\"" + Path.GetDirectoryName(Output.ToString()) + "\" -y " + InternalPath; + psInfo.FileName = "cmd"; + psInfo.Arguments = "/c " + args; + + Log.LogMessage(MessageImportance.Normal, args); + p = Process.Start(psInfo); + + Log.LogMessage(MessageImportance.Low, p.StandardOutput.ReadToEnd()); +} ]]> From c4ccaf739aa52017b682af69172f378ae437fd7f Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 11 Feb 2022 14:26:01 +0900 Subject: [PATCH 0924/1024] =?UTF-8?q?=E8=AA=A4=E8=A8=98=E8=A8=82=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ユーザーデータの格納先インデックスに謎のマジックナンバー「0」を使用していたのを訂正。 --- sakura_core/view/CEditView.cpp | 6 +++--- sakura_core/view/CEditView_Mouse.cpp | 2 +- sakura_core/window/CSplitterWnd.cpp | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index 108a59f8f1..5dc90e31d6 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -95,7 +95,7 @@ LRESULT CALLBACK EditViewWndProc( pCEdit = reinterpret_cast(pCreate->lpCreateParams); return pCEdit->DispatchEvent( hwnd, uMsg, wParam, lParam ); default: - pCEdit = ( CEditView* )::GetWindowLongPtr( hwnd, 0 ); + pCEdit = ( CEditView* )::GetWindowLongPtr( hwnd, GWLP_USERDATA ); if( NULL != pCEdit ){ // May 16, 2000 genta // From Here @@ -124,7 +124,7 @@ VOID CALLBACK EditViewTimerProc( ) { CEditView* pCEditView; - pCEditView = ( CEditView* )::GetWindowLongPtr( hwnd, 0 ); + pCEditView = ( CEditView* )::GetWindowLongPtr( hwnd, GWLP_USERDATA ); if( NULL != pCEditView ){ pCEditView->OnTimer( hwnd, uMsg, idEvent, dwTime ); } @@ -451,7 +451,7 @@ LRESULT CEditView::DispatchEvent( return OnMOUSEHWHEEL( wParam, lParam ); case WM_CREATE: - ::SetWindowLongPtr( hwnd, 0, (LONG_PTR) this ); + ::SetWindowLongPtr( hwnd, GWLP_USERDATA, (LONG_PTR) this ); m_hwndSizeBox = ::CreateWindowEx( 0L, /* no extended styles */ WC_SCROLLBAR, /* scroll bar control class */ diff --git a/sakura_core/view/CEditView_Mouse.cpp b/sakura_core/view/CEditView_Mouse.cpp index 6ac2937d0f..8939ca2e2c 100644 --- a/sakura_core/view/CEditView_Mouse.cpp +++ b/sakura_core/view/CEditView_Mouse.cpp @@ -718,7 +718,7 @@ void CEditView::OnMBUTTONUP( WPARAM fwKeys, int xPos , int yPos ) void CALLBACK AutoScrollTimerProc( HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime ) { CEditView* pCEditView; - pCEditView = ( CEditView* )::GetWindowLongPtr( hwnd, 0 ); + pCEditView = ( CEditView* )::GetWindowLongPtr( hwnd, GWLP_USERDATA ); if( NULL != pCEditView ){ pCEditView->AutoScrollOnTimer(); } diff --git a/sakura_core/window/CSplitterWnd.cpp b/sakura_core/window/CSplitterWnd.cpp index 758f9777fd..3756690345 100644 --- a/sakura_core/window/CSplitterWnd.cpp +++ b/sakura_core/window/CSplitterWnd.cpp @@ -298,7 +298,7 @@ void CSplitterWnd::DoSplit( int nHorizontal, int nVertical ) int v; for( v=0; v < m_nChildWndCount; v++ ){ - pcViewArr[v] = ( CEditView* )::GetWindowLongPtr( m_ChildWndArr[v], 0 ); + pcViewArr[v] = ( CEditView* )::GetWindowLongPtr( m_ChildWndArr[v], GWLP_USERDATA ); } ::GetClientRect( GetHwnd(), &rc ); if( nHorizontal < nLimit ){ @@ -809,7 +809,7 @@ LRESULT CSplitterWnd::OnSize( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam const int nFrameWidth = DpiScaleX(SPLITTER_FRAME_WIDTH); BOOL bSizeBox; for( i = 0; i < m_nChildWndCount; ++i ){ - pcViewArr[i] = ( CEditView* )::GetWindowLongPtr( m_ChildWndArr[i], 0 ); + pcViewArr[i] = ( CEditView* )::GetWindowLongPtr( m_ChildWndArr[i], GWLP_USERDATA ); } /* From fc8c4ad663633245874458f6109e45011904aa3e Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 11 Feb 2022 18:35:09 +0900 Subject: [PATCH 0925/1024] =?UTF-8?q?=E4=BD=BF=E3=82=8F=E3=81=AA=E3=81=84?= =?UTF-8?q?=E6=8B=A1=E5=BC=B5=E9=A0=98=E5=9F=9F=E3=82=92=E7=A2=BA=E4=BF=9D?= =?UTF-8?q?=E3=81=97=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E3=81=AB=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/_main/CControlTray.cpp | 2 +- sakura_core/view/CEditView.cpp | 2 +- sakura_core/window/CEditWnd.cpp | 2 +- sakura_core/window/CWnd.cpp | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sakura_core/_main/CControlTray.cpp b/sakura_core/_main/CControlTray.cpp index b92e36eed8..43e8003ff1 100644 --- a/sakura_core/_main/CControlTray.cpp +++ b/sakura_core/_main/CControlTray.cpp @@ -247,7 +247,7 @@ HWND CControlTray::Create( HINSTANCE hInstance ) CS_BYTEALIGNWINDOW; wc.lpfnWndProc = CControlTrayWndProc; wc.cbClsExtra = 0; - wc.cbWndExtra = 0; + wc.cbWndExtra = NULL; wc.hInstance = m_hInstance; wc.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wc.hCursor = LoadCursor( NULL, IDC_ARROW ); diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index 5dc90e31d6..74a519d35b 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -288,7 +288,7 @@ BOOL CEditView::Create( wc.style = CS_DBLCLKS | CS_BYTEALIGNCLIENT | CS_BYTEALIGNWINDOW; wc.lpfnWndProc = EditViewWndProc; wc.cbClsExtra = 0; - wc.cbWndExtra = sizeof( LONG_PTR ); + wc.cbWndExtra = NULL; wc.hInstance = G_AppInstance(); wc.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wc.hCursor = NULL/*LoadCursor( NULL, IDC_IBEAM )*/; diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index a10cf68804..661cb7d014 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -376,7 +376,7 @@ HWND CEditWnd::_CreateMainWindow(int nGroup, const STabGroupInfo& sTabGroupInfo) wc.style = CS_DBLCLKS | CS_BYTEALIGNCLIENT | CS_BYTEALIGNWINDOW; wc.lpfnWndProc = CEditWndProc; wc.cbClsExtra = 0; - wc.cbWndExtra = 32; + wc.cbWndExtra = NULL; wc.hInstance = G_AppInstance(); // Dec, 2, 2002 genta アイコン読み込み方法変更 wc.hIcon = GetAppIcon( G_AppInstance(), ICON_DEFAULT_APP, FN_APP_ICON, false ); diff --git a/sakura_core/window/CWnd.cpp b/sakura_core/window/CWnd.cpp index 911c37ca94..c5a667810a 100644 --- a/sakura_core/window/CWnd.cpp +++ b/sakura_core/window/CWnd.cpp @@ -123,7 +123,7 @@ ATOM CWnd::RegisterWC( wc.style = CS_DBLCLKS; wc.lpfnWndProc = CWndProc; wc.cbClsExtra = 0; - wc.cbWndExtra = 32; + wc.cbWndExtra = NULL; wc.hInstance = m_hInstance; wc.hIcon = hIcon; wc.hCursor = hCursor; From ac046f27463a0c55bb11e99acd13f97037545325 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 11 Feb 2022 19:13:04 +0900 Subject: [PATCH 0926/1024] =?UTF-8?q?Revert=20"=E4=BD=BF=E3=82=8F=E3=81=AA?= =?UTF-8?q?=E3=81=84=E6=8B=A1=E5=BC=B5=E9=A0=98=E5=9F=9F=E3=82=92=E7=A2=BA?= =?UTF-8?q?=E4=BF=9D=E3=81=97=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=E3=81=99=E3=82=8B"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit fc8c4ad663633245874458f6109e45011904aa3e. --- sakura_core/_main/CControlTray.cpp | 2 +- sakura_core/view/CEditView.cpp | 2 +- sakura_core/window/CEditWnd.cpp | 2 +- sakura_core/window/CWnd.cpp | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sakura_core/_main/CControlTray.cpp b/sakura_core/_main/CControlTray.cpp index 43e8003ff1..b92e36eed8 100644 --- a/sakura_core/_main/CControlTray.cpp +++ b/sakura_core/_main/CControlTray.cpp @@ -247,7 +247,7 @@ HWND CControlTray::Create( HINSTANCE hInstance ) CS_BYTEALIGNWINDOW; wc.lpfnWndProc = CControlTrayWndProc; wc.cbClsExtra = 0; - wc.cbWndExtra = NULL; + wc.cbWndExtra = 0; wc.hInstance = m_hInstance; wc.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wc.hCursor = LoadCursor( NULL, IDC_ARROW ); diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index 74a519d35b..5dc90e31d6 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -288,7 +288,7 @@ BOOL CEditView::Create( wc.style = CS_DBLCLKS | CS_BYTEALIGNCLIENT | CS_BYTEALIGNWINDOW; wc.lpfnWndProc = EditViewWndProc; wc.cbClsExtra = 0; - wc.cbWndExtra = NULL; + wc.cbWndExtra = sizeof( LONG_PTR ); wc.hInstance = G_AppInstance(); wc.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wc.hCursor = NULL/*LoadCursor( NULL, IDC_IBEAM )*/; diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index 661cb7d014..a10cf68804 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -376,7 +376,7 @@ HWND CEditWnd::_CreateMainWindow(int nGroup, const STabGroupInfo& sTabGroupInfo) wc.style = CS_DBLCLKS | CS_BYTEALIGNCLIENT | CS_BYTEALIGNWINDOW; wc.lpfnWndProc = CEditWndProc; wc.cbClsExtra = 0; - wc.cbWndExtra = NULL; + wc.cbWndExtra = 32; wc.hInstance = G_AppInstance(); // Dec, 2, 2002 genta アイコン読み込み方法変更 wc.hIcon = GetAppIcon( G_AppInstance(), ICON_DEFAULT_APP, FN_APP_ICON, false ); diff --git a/sakura_core/window/CWnd.cpp b/sakura_core/window/CWnd.cpp index c5a667810a..911c37ca94 100644 --- a/sakura_core/window/CWnd.cpp +++ b/sakura_core/window/CWnd.cpp @@ -123,7 +123,7 @@ ATOM CWnd::RegisterWC( wc.style = CS_DBLCLKS; wc.lpfnWndProc = CWndProc; wc.cbClsExtra = 0; - wc.cbWndExtra = NULL; + wc.cbWndExtra = 32; wc.hInstance = m_hInstance; wc.hIcon = hIcon; wc.hCursor = hCursor; From fa5f9a2f4034135b979a2cee08c6d223515f54a4 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 11 Feb 2022 19:15:39 +0900 Subject: [PATCH 0927/1024] =?UTF-8?q?=E4=BD=BF=E3=82=8F=E3=81=AA=E3=81=84?= =?UTF-8?q?=E6=8B=A1=E5=BC=B5=E9=A0=98=E5=9F=9F=E3=82=92=E7=A2=BA=E4=BF=9D?= =?UTF-8?q?=E3=81=97=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E3=81=AB=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CEditView.cpp | 2 +- sakura_core/window/CEditWnd.cpp | 2 +- sakura_core/window/CWnd.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index 5dc90e31d6..1575c3fd35 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -288,7 +288,7 @@ BOOL CEditView::Create( wc.style = CS_DBLCLKS | CS_BYTEALIGNCLIENT | CS_BYTEALIGNWINDOW; wc.lpfnWndProc = EditViewWndProc; wc.cbClsExtra = 0; - wc.cbWndExtra = sizeof( LONG_PTR ); + wc.cbWndExtra = 0; wc.hInstance = G_AppInstance(); wc.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wc.hCursor = NULL/*LoadCursor( NULL, IDC_IBEAM )*/; diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index a10cf68804..2037e35bb7 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -376,7 +376,7 @@ HWND CEditWnd::_CreateMainWindow(int nGroup, const STabGroupInfo& sTabGroupInfo) wc.style = CS_DBLCLKS | CS_BYTEALIGNCLIENT | CS_BYTEALIGNWINDOW; wc.lpfnWndProc = CEditWndProc; wc.cbClsExtra = 0; - wc.cbWndExtra = 32; + wc.cbWndExtra = 0; wc.hInstance = G_AppInstance(); // Dec, 2, 2002 genta アイコン読み込み方法変更 wc.hIcon = GetAppIcon( G_AppInstance(), ICON_DEFAULT_APP, FN_APP_ICON, false ); diff --git a/sakura_core/window/CWnd.cpp b/sakura_core/window/CWnd.cpp index 911c37ca94..8454b6e06f 100644 --- a/sakura_core/window/CWnd.cpp +++ b/sakura_core/window/CWnd.cpp @@ -123,7 +123,7 @@ ATOM CWnd::RegisterWC( wc.style = CS_DBLCLKS; wc.lpfnWndProc = CWndProc; wc.cbClsExtra = 0; - wc.cbWndExtra = 32; + wc.cbWndExtra = 0; wc.hInstance = m_hInstance; wc.hIcon = hIcon; wc.hCursor = hCursor; From e930db6d5dd2652d7fc117546a2c2b35058a8a64 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 12 Feb 2022 19:14:02 +0900 Subject: [PATCH 0928/1024] =?UTF-8?q?FileMatchScore=E3=81=AE=E3=82=A8?= =?UTF-8?q?=E3=83=A9=E3=83=BC=E8=80=90=E6=80=A7=E3=82=92=E4=B8=8A=E3=81=92?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/file.cpp | 48 ++++++++++----------- sakura_core/util/file.h | 2 +- tests/unittests/test-file.cpp | 80 +++++++++++++++++++++++++++++++++++ 3 files changed, 104 insertions(+), 26 deletions(-) diff --git a/sakura_core/util/file.cpp b/sakura_core/util/file.cpp index aaf52e8319..c198ab0d2d 100644 --- a/sakura_core/util/file.cpp +++ b/sakura_core/util/file.cpp @@ -996,40 +996,38 @@ void my_splitpath_w ( // ----------------------------------------------------------------------------- int FileMatchScore( const WCHAR *file1, const WCHAR *file2 ); -// フルパスからファイル名の.以降を分離する -// 2014.06.15 フォルダ名に.が含まれた場合、フォルダが分離されたのを修正 -static void FileNameSepExt( const WCHAR *file, WCHAR* pszFile, WCHAR* pszExt ) +// フルパスからファイル名と拡張子(ファイル名の.以降)を分離する +// @date 2014/06/15 moca_skr フォルダ名に.が含まれた場合、フォルダが分離されたのを修正した対応で新規作成 +static void FileNameSepExt( std::wstring_view file, std::wstring& szFile, std::wstring& szExt ) { - const WCHAR* folderPos = file; - const WCHAR* x = folderPos; - while( x ){ - x = wcschr(folderPos, L'\\'); - if( x ){ - x++; - folderPos = x; - } + const WCHAR* folderPos; + folderPos = ::wcsrchr(file.data(), L'\\'); + if( folderPos ){ + folderPos++; + }else{ + folderPos = file.data(); } - const WCHAR* p = wcschr(folderPos, L'.'); - if( p ){ - wmemcpy(pszFile, file, p - file); - pszFile[p - file] = L'\0'; - wcscpy(pszExt, p); + + if (const auto p = ::wcschr(folderPos, L'.')) + { + szFile.assign(folderPos, p - folderPos); + szExt.assign(p); }else{ - wcscpy(pszFile, file); - pszExt[0] = L'\0'; + szFile.assign(folderPos); + szExt.clear(); } } -int FileMatchScoreSepExt( const WCHAR *file1, const WCHAR *file2 ) +int FileMatchScoreSepExt( std::wstring_view file1, std::wstring_view file2 ) { - WCHAR szFile1[_MAX_PATH]; - WCHAR szFile2[_MAX_PATH]; - WCHAR szFileExt1[_MAX_PATH]; - WCHAR szFileExt2[_MAX_PATH]; + std::wstring szFile1; + std::wstring szFile2; + std::wstring szFileExt1; + std::wstring szFileExt2; FileNameSepExt(file1, szFile1, szFileExt1); FileNameSepExt(file2, szFile2, szFileExt2); - int score = FileMatchScore(szFile1, szFile2); - score += FileMatchScore(szFileExt1, szFileExt2); + int score = FileMatchScore(szFile1.data(), szFile2.data()); + score += FileMatchScore(szFileExt1.data(), szFileExt2.data()); return score; } diff --git a/sakura_core/util/file.h b/sakura_core/util/file.h index 2efdd904b4..77a065a4e7 100644 --- a/sakura_core/util/file.h +++ b/sakura_core/util/file.h @@ -114,7 +114,7 @@ bool GetLastWriteTimestamp( const WCHAR* filename, CFileTime* pcFileTime ); // O void my_splitpath_w ( const wchar_t *comln , wchar_t *drv,wchar_t *dir,wchar_t *fnm,wchar_t *ext ); #define my_splitpath_t my_splitpath_w -int FileMatchScoreSepExt( const WCHAR *file1, const WCHAR *file2 ); +int FileMatchScoreSepExt( std::wstring_view file1, std::wstring_view file2 ); void GetStrTrancateWidth( WCHAR* dest, int nSize, const WCHAR* path, HDC hDC, int nPxWidth ); void GetShortViewPath(WCHAR* dest, int nSize, const WCHAR* path, HDC hDC, int nPxWidth, bool bFitMode ); diff --git a/tests/unittests/test-file.cpp b/tests/unittests/test-file.cpp index 33d41810d7..8aebb29f60 100644 --- a/tests/unittests/test-file.cpp +++ b/tests/unittests/test-file.cpp @@ -516,6 +516,86 @@ TEST(file, CalcDirectoryDepth) EXPECT_DEATH({ CalcDirectoryDepth(nullptr); }, ".*"); } +/*! + FileMatchScoreSepExtのテスト + */ +TEST(file, FileMatchScoreSepExt) +{ + int result = 0; + + // FileNameSepExtのテストパターン + result = FileMatchScoreSepExt( + LR"(C:\TEMP\test.txt)", + LR"(C:\TEMP\TEST.TXT)"); + ASSERT_EQ(_countof(LR"(test.txt)") - 1, result); + + // FileNameSepExtのテストパターン(パスにフォルダが含まれない) + result = FileMatchScoreSepExt( + LR"(TEST.TXT)", + LR"(test.txt)"); + ASSERT_EQ(_countof(LR"(test.txt)") - 1, result); + + // FileNameSepExtのテストパターン(ファイル名がない) + result = FileMatchScoreSepExt( + LR"(C:\TEMP\.txt)", + LR"(C:\TEMP\.txt)"); + ASSERT_EQ(_countof(LR"(.txt)") - 1, result); + + // FileNameSepExtのテストパターン(拡張子がない) + result = FileMatchScoreSepExt( + LR"(C:\TEMP\test)", + LR"(C:\TEMP\test)"); + ASSERT_EQ(_countof(LR"(test)") - 1, result); + + // 全く同じパス同士の比較(ファイル名+拡張子が完全一致) + result = FileMatchScoreSepExt( + LR"(C:\TEMP\test.txt)", + LR"(C:\TEMP\TEST.TXT)"); + ASSERT_EQ(_countof(LR"(test.txt)") - 1, result); + + // 異なるパスでファイル名+拡張子が同じ(ファイル名+拡張子が完全一致) + result = FileMatchScoreSepExt( + LR"(C:\TEMP1\TEST.TXT)", + LR"(C:\TEMP2\test.txt)"); + ASSERT_EQ(_countof(LR"(test.txt)") - 1, result); + + // ファイル名が異なる1(最長一致を取得) + result = FileMatchScoreSepExt( + LR"(C:\TEMP\test.txt)", + LR"(C:\TEMP\TEST1.TST)"); + ASSERT_EQ(_countof(LR"(test)") - 1 + _countof(LR"(.t)") - 1, result); + + // ファイル名が異なる2(最長一致を取得) + result = FileMatchScoreSepExt( + LR"(C:\TEMP\test1.tst)", + LR"(C:\TEMP\TEST.TXT)"); + ASSERT_EQ(_countof(LR"(test)") - 1 + _countof(LR"(.t)") - 1, result); + + // 拡張子が異なる1(最長一致を取得) + result = FileMatchScoreSepExt( + LR"(C:\TEMP\test.txt)", + LR"(C:\TEMP\TEXT.TXTX)"); + ASSERT_EQ(_countof(LR"(te)") - 1 + _countof(LR"(.txt)") - 1, result); + + // 拡張子が異なる2(最長一致を取得) + result = FileMatchScoreSepExt( + LR"(C:\TEMP\text.txtx)", + LR"(C:\TEMP\TEST.TXT)"); + ASSERT_EQ(_countof(LR"(te)") - 1 + _countof(LR"(.txt)") - 1, result); + + // サロゲート文字を含む1 + result = FileMatchScoreSepExt( + LR"(C:\TEMP\test👉👆.TST)", + LR"(C:\TEMP\TEST👉👇.txt)"); + ASSERT_EQ(_countof(LR"(test👉)") - 1 + _countof(LR"(.t)") - 1, result); + + // サロゲート文字を含む2 + result = FileMatchScoreSepExt( + LR"(C:\TEMP\TEST👉👇.txt)", + LR"(C:\TEMP\test👉👆.TST)"); + ASSERT_EQ(_countof(LR"(test👉)") - 1 + _countof(LR"(.t)") - 1, result); +} + /*! GetExtのテスト */ From c685fc688d2f0497cc80cd9eaefde064663e6aff Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 12 Feb 2022 20:26:18 +0900 Subject: [PATCH 0929/1024] =?UTF-8?q?MinGW=E3=83=93=E3=83=AB=E3=83=89?= =?UTF-8?q?=E5=AF=BE=E7=AD=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MinGWは文字列のエンコーディングをShift-JISと仮定するため、サロゲート文字をベタ書きできなかった。 --- tests/unittests/test-file.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/unittests/test-file.cpp b/tests/unittests/test-file.cpp index 8aebb29f60..621df499fd 100644 --- a/tests/unittests/test-file.cpp +++ b/tests/unittests/test-file.cpp @@ -585,15 +585,15 @@ TEST(file, FileMatchScoreSepExt) // サロゲート文字を含む1 result = FileMatchScoreSepExt( - LR"(C:\TEMP\test👉👆.TST)", - LR"(C:\TEMP\TEST👉👇.txt)"); - ASSERT_EQ(_countof(LR"(test👉)") - 1 + _countof(LR"(.t)") - 1, result); + L"C:\\TEMP\\test\xD83D\xDC49\xD83D\xDC46.TST", + L"C:\\TEMP\\TEST\xD83D\xDC49\xD83D\xDC47.txt"); + ASSERT_EQ(_countof(LR"(testXX)") - 1 + _countof(LR"(.t)") - 1, result); // サロゲート文字を含む2 result = FileMatchScoreSepExt( - LR"(C:\TEMP\TEST👉👇.txt)", - LR"(C:\TEMP\test👉👆.TST)"); - ASSERT_EQ(_countof(LR"(test👉)") - 1 + _countof(LR"(.t)") - 1, result); + L"C:\\TEMP\\TEST\xD83D\xDC49\xD83D\xDC47.txt", + L"C:\\TEMP\\test\xD83D\xDC49\xD83D\xDC46.TST"); + ASSERT_EQ(_countof(LR"(testXX)") - 1 + _countof(LR"(.t)") - 1, result); } /*! From 88e5ad1a07569447ff74968c2bcfd52582e5ffbf Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 12 Feb 2022 23:24:02 +0900 Subject: [PATCH 0930/1024] =?UTF-8?q?CFontAutoDeleter=E3=82=92=E3=83=AA?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=AF=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0?= =?UTF-8?q?=E3=81=97=E3=81=A6=E5=AE=89=E5=85=A8=E6=80=A7=E3=82=92=E4=B8=8A?= =?UTF-8?q?=E3=81=92=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CFontAutoDeleterは似非スマートポインタ。 コピーコンストラクタが未実装で、削除済みフォントを何度も削除しようとしてWindows GDIにダメージを与える危険があったのを修正する。 --- sakura_core/util/window.cpp | 65 ++++++++++++------------- sakura_core/util/window.h | 24 ++++++---- tests/unittests/test-window.cpp | 66 ++++++++++++++++++++++++++ tests/unittests/tests1.vcxproj | 1 + tests/unittests/tests1.vcxproj.filters | 3 ++ 5 files changed, 115 insertions(+), 44 deletions(-) create mode 100644 tests/unittests/test-window.cpp diff --git a/sakura_core/util/window.cpp b/sakura_core/util/window.cpp index ac9dec87a2..8cad4618d3 100644 --- a/sakura_core/util/window.cpp +++ b/sakura_core/util/window.cpp @@ -287,56 +287,51 @@ int CTextWidthCalc::GetTextHeight() const return tm.tmHeight; } -CFontAutoDeleter::CFontAutoDeleter() - : m_hFontOld(NULL) - , m_hFont(NULL) - , m_hwnd(NULL) -{} +CFontAutoDeleter::CFontAutoDeleter(const Me& other) +{ + operator = (other); +} -CFontAutoDeleter::~CFontAutoDeleter() +CFontAutoDeleter& CFontAutoDeleter::operator = (const Me& other) { - if( m_hFont ){ - DeleteObject( m_hFont ); - m_hFont = NULL; + Clear(); + + if (const auto hFont = other.m_hFont) { + if (LOGFONT lf = {}; + ::GetObject(hFont, sizeof(lf), &lf)) { + m_hFont = ::CreateFontIndirect(&lf); + } } + + return *this; } -void CFontAutoDeleter::SetFont( HFONT hfontOld, HFONT hfont, HWND hwnd ) +CFontAutoDeleter::~CFontAutoDeleter() { - if( m_hFont ){ - ::DeleteObject( m_hFont ); - } - if( m_hFont != hfontOld ){ - m_hFontOld = hfontOld; - } - m_hFont = hfont; - m_hwnd = hwnd; + Clear(); } -/*! ウィンドウのリリース(WM_DESTROY用) -*/ -void CFontAutoDeleter::ReleaseOnDestroy() +void CFontAutoDeleter::Clear() { - if( m_hFont ){ - ::DeleteObject( m_hFont ); - m_hFont = NULL; + if (m_hFont) { + ::DeleteObject(m_hFont); + m_hFont = nullptr; } - m_hFontOld = NULL; } -/*! ウィンドウ生存中のリリース +void CFontAutoDeleter::SetFont( [[maybe_unused]] HFONT hFontOld, HFONT hFont, [[maybe_unused]] HWND hWnd ) +{ + Clear(); + + m_hFont = hFont; +} + +/*! ウィンドウのリリース(WM_DESTROY用) */ -#if 0 -void CFontAutoDeleter::Release() +void CFontAutoDeleter::ReleaseOnDestroy() { - if( m_hwnd && m_hFont ){ - ::SendMessageAny( m_hwnd, WM_SETFONT, (WPARAM)m_hFontOld, FALSE ); - ::DeleteObject( m_hFont ); - m_hFont = NULL; - m_hwnd = NULL; - } + Clear(); } -#endif /*! システムフォントに準拠したフォントを取得 diff --git a/sakura_core/util/window.h b/sakura_core/util/window.h index 181af5a245..5cd636f235 100644 --- a/sakura_core/util/window.h +++ b/sakura_core/util/window.h @@ -160,17 +160,23 @@ class CTextWidthCalc class CFontAutoDeleter { +private: + HFONT m_hFont = nullptr; + + using Me = CFontAutoDeleter; + + void Clear(); + public: - CFontAutoDeleter(); - ~CFontAutoDeleter(); - void SetFont( HFONT hfontOld, HFONT hfont, HWND hwnd ); - void ReleaseOnDestroy(); - // void Release(); + CFontAutoDeleter() = default; + CFontAutoDeleter(const Me& other); + Me& operator = (const Me& other); + virtual ~CFontAutoDeleter(); -private: - HFONT m_hFontOld; - HFONT m_hFont; - HWND m_hwnd; + void SetFont( HFONT hFontOld, HFONT hFont, HWND hWnd ); + void ReleaseOnDestroy(); + + [[nodiscard]] HFONT GetFont() const { return m_hFont; } }; class CDCFont diff --git a/tests/unittests/test-window.cpp b/tests/unittests/test-window.cpp new file mode 100644 index 0000000000..43f8b64e58 --- /dev/null +++ b/tests/unittests/test-window.cpp @@ -0,0 +1,66 @@ +/*! @file */ +/* + Copyright (C) 2022, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include + +#ifndef NOMINMAX +#define NOMINMAX +#endif /* #ifndef NOMINMAX */ + +#include +#include +#include +#include + +#include + +#include "util/window.h" + +/*! + * @brief CFontAutoDeleterのテスト + */ +TEST( CFontAutoDeleter, test ) +{ + CFontAutoDeleter deletor; + ASSERT_EQ(nullptr, deletor.GetFont()); + + if (const auto hGdiFont = GetStockFont(DEFAULT_GUI_FONT)) { + if (LOGFONT lf = {}; + ::GetObject(hGdiFont, sizeof(lf), &lf)) { + if (const auto hFont = ::CreateFontIndirect(&lf)) { + deletor.SetFont(nullptr, hFont, nullptr); + ASSERT_EQ(hFont, deletor.GetFont()); + } + } + } + + ASSERT_NE(nullptr, deletor.GetFont()); + if (const auto hFont = deletor.GetFont()) { + CFontAutoDeleter other(deletor); + ASSERT_NE(hFont, other.GetFont()); + + other.ReleaseOnDestroy(); + ASSERT_EQ(nullptr, other.GetFont()); + } +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index 9c08a294fa..f45a2273a3 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -150,6 +150,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index c5ec04926c..2d8cc79a47 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -157,6 +157,9 @@ Test Files + + Test Files + From 3c2922e7e61d0bea0e7da7299391ceb14edb03eb Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 13 Feb 2022 00:13:12 +0900 Subject: [PATCH 0931/1024] =?UTF-8?q?Code=20Smells=E5=AF=BE=E7=AD=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/window.cpp | 19 +++++++++++++++++-- sakura_core/util/window.h | 6 ++++-- tests/unittests/test-window.cpp | 4 ++++ 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/sakura_core/util/window.cpp b/sakura_core/util/window.cpp index 8cad4618d3..25452414a2 100644 --- a/sakura_core/util/window.cpp +++ b/sakura_core/util/window.cpp @@ -306,12 +306,27 @@ CFontAutoDeleter& CFontAutoDeleter::operator = (const Me& other) return *this; } +CFontAutoDeleter::CFontAutoDeleter(Me&& other) noexcept +{ + operator = (std::forward(other)); +} + +CFontAutoDeleter& CFontAutoDeleter::operator = (Me&& other) noexcept +{ + Clear(); + + m_hFont = other.m_hFont; + other.m_hFont = nullptr; + + return *this; +} + CFontAutoDeleter::~CFontAutoDeleter() { Clear(); } -void CFontAutoDeleter::Clear() +void CFontAutoDeleter::Clear() noexcept { if (m_hFont) { ::DeleteObject(m_hFont); @@ -319,7 +334,7 @@ void CFontAutoDeleter::Clear() } } -void CFontAutoDeleter::SetFont( [[maybe_unused]] HFONT hFontOld, HFONT hFont, [[maybe_unused]] HWND hWnd ) +void CFontAutoDeleter::SetFont( [[maybe_unused]] const HFONT hFontOld, const HFONT hFont, [[maybe_unused]] const HWND hWnd ) { Clear(); diff --git a/sakura_core/util/window.h b/sakura_core/util/window.h index 5cd636f235..7098870fa9 100644 --- a/sakura_core/util/window.h +++ b/sakura_core/util/window.h @@ -165,15 +165,17 @@ class CFontAutoDeleter using Me = CFontAutoDeleter; - void Clear(); + void Clear() noexcept; public: CFontAutoDeleter() = default; CFontAutoDeleter(const Me& other); Me& operator = (const Me& other); + CFontAutoDeleter(Me&& other) noexcept; + Me& operator = (Me&& other) noexcept; virtual ~CFontAutoDeleter(); - void SetFont( HFONT hFontOld, HFONT hFont, HWND hWnd ); + void SetFont( const HFONT hFontOld, const HFONT hFont, const HWND hWnd ); void ReleaseOnDestroy(); [[nodiscard]] HFONT GetFont() const { return m_hFont; } diff --git a/tests/unittests/test-window.cpp b/tests/unittests/test-window.cpp index 43f8b64e58..32dd0b6425 100644 --- a/tests/unittests/test-window.cpp +++ b/tests/unittests/test-window.cpp @@ -62,5 +62,9 @@ TEST( CFontAutoDeleter, test ) other.ReleaseOnDestroy(); ASSERT_EQ(nullptr, other.GetFont()); + + CFontAutoDeleter another = std::move(deletor); + ASSERT_EQ(hFont, another.GetFont()); + ASSERT_EQ(nullptr, deletor.GetFont()); } } From 3f8715c0d63696ebfac73fa54d811529e7c66ebd Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sat, 12 Feb 2022 00:51:01 +0900 Subject: [PATCH 0932/1024] =?UTF-8?q?tests1.exe=20=E3=81=AB=20gmock.lib=20?= =?UTF-8?q?=E3=82=92=E3=83=AA=E3=83=B3=E3=82=AF=E3=81=99=E3=82=8B=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * gmock.lib をリンクする指定を追加した。 * 不要だった gtest_main.lib のリンクをやめた。 --- tests/CMakeLists.txt | 2 +- tests/googletest.targets | 8 ++++---- tests/unittests/CMakeLists.txt | 4 ++-- tests/unittests/Makefile | 2 +- tests/unittests/code-main.cpp | 6 ++++-- 5 files changed, 12 insertions(+), 10 deletions(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index cbc138fa9d..c6fac32ccc 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -33,7 +33,7 @@ set_property(GLOBAL PROPERTY USE_FOLDERS ON) # create solution folder if(BUILD_GTEST) set_target_properties(gtest PROPERTIES FOLDER GoogleTest) - set_target_properties(gtest_main PROPERTIES FOLDER GoogleTest) + set_target_properties(gmock PROPERTIES FOLDER GoogleTest) endif() set_target_properties(tests1 PROPERTIES FOLDER Tests) diff --git a/tests/googletest.targets b/tests/googletest.targets index 91c2fae8d0..61cef7edaa 100644 --- a/tests/googletest.targets +++ b/tests/googletest.targets @@ -8,9 +8,9 @@ $(GoogleTestInstallDir)lib64 $(GoogleTestLibInstallDir);$(LibraryPath) gtest.lib - gtest_main.lib $(GoogleTestLibInstallDir)\$(GTestLibName) - $(GoogleTestLibInstallDir)\$(GTestMainLibName) + gmock.lib + $(GoogleTestLibInstallDir)\$(GMockLibName) @@ -20,7 +20,7 @@ $(GTestLibName);%(AdditionalDependencies) - $(GTestMainLibName);%(AdditionalDependencies) + $(GMockLibName);%(AdditionalDependencies) @@ -29,7 +29,7 @@ - + $([System.Text.RegularExpressions.Regex]::Replace('$(VisualStudioVersion)', '^(\d+).*', '$1')) diff --git a/tests/unittests/CMakeLists.txt b/tests/unittests/CMakeLists.txt index 8e5fad17f2..43f9ae7c27 100644 --- a/tests/unittests/CMakeLists.txt +++ b/tests/unittests/CMakeLists.txt @@ -52,12 +52,12 @@ endif () if(BUILD_GTEST) # Build GoogleTest from source code. target_link_libraries(${project_name} PRIVATE gtest) - target_link_libraries(${project_name} PRIVATE gtest_main) + target_link_libraries(${project_name} PRIVATE gmock) else() # Build without GoogleTest(use system library). find_package(GTest REQUIRED) target_link_libraries(${project_name} PRIVATE GTest::GTest) - target_link_libraries(${project_name} PRIVATE GTest::Main) + target_link_libraries(${project_name} PRIVATE GTest::GMock) endif() # link libraries diff --git a/tests/unittests/Makefile b/tests/unittests/Makefile index 59c3692614..0c0e266915 100644 --- a/tests/unittests/Makefile +++ b/tests/unittests/Makefile @@ -119,7 +119,7 @@ LIBS= \ -lcomdlg32 \ -L$(GOOGLETEST_INSTALL_DIR)/lib \ -lgtest \ - -lgtest_main \ + -lgmock \ $(MYLIBS) exe= $(or $(OUTDIR),.)/tests1.exe diff --git a/tests/unittests/code-main.cpp b/tests/unittests/code-main.cpp index 863d79e228..ae4d154c33 100644 --- a/tests/unittests/code-main.cpp +++ b/tests/unittests/code-main.cpp @@ -23,6 +23,7 @@ distribution. */ #include +#include #ifndef NOMINMAX #define NOMINMAX @@ -106,8 +107,9 @@ int main(int argc, char **argv) { // コマンドラインに -PROF 指定がある場合、wWinMainを起動して終了する。 InvokeWinMainIfNeeded(::GetCommandLineW()); - // WinMainを起動しない場合、標準のgtest_main同様の処理を実行する + // WinMainを起動しない場合、標準のgmock_main同様の処理を実行する。 + // InitGoogleMock は Google Test の初期化も行うため、InitGoogleTest を別に呼ぶ必要はない。 printf("Running main() from %s\n", __FILE__); - testing::InitGoogleTest(&argc, argv); + testing::InitGoogleMock(&argc, argv); return RUN_ALL_TESTS(); } From 3e6ec6954ced233aad977d0f21a71448a94ac426 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 13 Feb 2022 02:12:37 +0900 Subject: [PATCH 0933/1024] =?UTF-8?q?=E5=AF=BE=E5=BF=9C=E5=8F=96=E6=B6=88?= =?UTF-8?q?=EF=BC=8B=E5=A4=89=E6=95=B0=E5=90=8D=E8=A8=82=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/window.cpp | 6 +++--- sakura_core/util/window.h | 4 ++-- tests/unittests/test-window.cpp | 18 +++++++++--------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/sakura_core/util/window.cpp b/sakura_core/util/window.cpp index 25452414a2..e50dcccc33 100644 --- a/sakura_core/util/window.cpp +++ b/sakura_core/util/window.cpp @@ -308,7 +308,7 @@ CFontAutoDeleter& CFontAutoDeleter::operator = (const Me& other) CFontAutoDeleter::CFontAutoDeleter(Me&& other) noexcept { - operator = (std::forward(other)); + operator = (std::move(other)); } CFontAutoDeleter& CFontAutoDeleter::operator = (Me&& other) noexcept @@ -321,7 +321,7 @@ CFontAutoDeleter& CFontAutoDeleter::operator = (Me&& other) noexcept return *this; } -CFontAutoDeleter::~CFontAutoDeleter() +CFontAutoDeleter::~CFontAutoDeleter() noexcept { Clear(); } @@ -334,7 +334,7 @@ void CFontAutoDeleter::Clear() noexcept } } -void CFontAutoDeleter::SetFont( [[maybe_unused]] const HFONT hFontOld, const HFONT hFont, [[maybe_unused]] const HWND hWnd ) +void CFontAutoDeleter::SetFont( [[maybe_unused]] const HFONT& hFontOld, const HFONT& hFont, [[maybe_unused]] const HWND& hWnd ) { Clear(); diff --git a/sakura_core/util/window.h b/sakura_core/util/window.h index 7098870fa9..146f79cba7 100644 --- a/sakura_core/util/window.h +++ b/sakura_core/util/window.h @@ -173,9 +173,9 @@ class CFontAutoDeleter Me& operator = (const Me& other); CFontAutoDeleter(Me&& other) noexcept; Me& operator = (Me&& other) noexcept; - virtual ~CFontAutoDeleter(); + virtual ~CFontAutoDeleter() noexcept; - void SetFont( const HFONT hFontOld, const HFONT hFont, const HWND hWnd ); + void SetFont( const HFONT& hFontOld, const HFONT& hFont, const HWND& hWnd ); void ReleaseOnDestroy(); [[nodiscard]] HFONT GetFont() const { return m_hFont; } diff --git a/tests/unittests/test-window.cpp b/tests/unittests/test-window.cpp index 32dd0b6425..5a21a232f6 100644 --- a/tests/unittests/test-window.cpp +++ b/tests/unittests/test-window.cpp @@ -42,29 +42,29 @@ */ TEST( CFontAutoDeleter, test ) { - CFontAutoDeleter deletor; - ASSERT_EQ(nullptr, deletor.GetFont()); + CFontAutoDeleter deleter; + ASSERT_EQ(nullptr, deleter.GetFont()); if (const auto hGdiFont = GetStockFont(DEFAULT_GUI_FONT)) { if (LOGFONT lf = {}; ::GetObject(hGdiFont, sizeof(lf), &lf)) { if (const auto hFont = ::CreateFontIndirect(&lf)) { - deletor.SetFont(nullptr, hFont, nullptr); - ASSERT_EQ(hFont, deletor.GetFont()); + deleter.SetFont(nullptr, hFont, nullptr); + ASSERT_EQ(hFont, deleter.GetFont()); } } } - ASSERT_NE(nullptr, deletor.GetFont()); - if (const auto hFont = deletor.GetFont()) { - CFontAutoDeleter other(deletor); + ASSERT_NE(nullptr, deleter.GetFont()); + if (const auto hFont = deleter.GetFont()) { + CFontAutoDeleter other(deleter); ASSERT_NE(hFont, other.GetFont()); other.ReleaseOnDestroy(); ASSERT_EQ(nullptr, other.GetFont()); - CFontAutoDeleter another = std::move(deletor); + CFontAutoDeleter another(std::move(deleter)); ASSERT_EQ(hFont, another.GetFont()); - ASSERT_EQ(nullptr, deletor.GetFont()); + ASSERT_EQ(nullptr, deleter.GetFont()); } } From 733f16e5fe670677fbdc2e97072f6d0dbd6386fa Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sat, 12 Feb 2022 11:05:37 +0900 Subject: [PATCH 0934/1024] =?UTF-8?q?CClipboard.h=20=E7=B7=A8=E9=9B=86?= =?UTF-8?q?=E6=99=82=E3=81=AE=E5=86=8D=E3=82=B3=E3=83=B3=E3=83=91=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E7=AF=84=E5=9B=B2=E3=82=92=E7=B8=AE=E5=B0=8F=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * CDocEditor.h に実装されていた CClipboard の呼び出しコードを CDocEditor.cpp に移動。 * CDocEditor.h から #include "_os/CClipboard.h" を除去。 * 不足していた #include を追加。 --- sakura_core/cmd/CViewCommander_Clipboard.cpp | 1 + sakura_core/doc/CDocEditor.cpp | 6 ++++++ sakura_core/doc/CDocEditor.h | 6 +----- sakura_core/macro/CMacro.cpp | 1 + 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/sakura_core/cmd/CViewCommander_Clipboard.cpp b/sakura_core/cmd/CViewCommander_Clipboard.cpp index 207dc4c04b..031f1b52c0 100644 --- a/sakura_core/cmd/CViewCommander_Clipboard.cpp +++ b/sakura_core/cmd/CViewCommander_Clipboard.cpp @@ -26,6 +26,7 @@ #include "uiparts/CWaitCursor.h" #include "util/os.h" #include "apiwrap/CommonControl.h" +#include "_os/CClipboard.h" /** 切り取り(選択範囲をクリップボードにコピーして削除) diff --git a/sakura_core/doc/CDocEditor.cpp b/sakura_core/doc/CDocEditor.cpp index 29c3ca3fc9..d61c13e2ab 100644 --- a/sakura_core/doc/CDocEditor.cpp +++ b/sakura_core/doc/CDocEditor.cpp @@ -34,6 +34,7 @@ #include "CEol.h" #include "window/CEditWnd.h" #include "debug/CRunningTimer.h" +#include "_os/CClipboard.h" CDocEditor::CDocEditor(CEditDoc* pcDoc) : m_pcDocRef(pcDoc) @@ -166,6 +167,11 @@ void CDocEditor::SetImeMode( int mode ) } // To Here Nov. 20, 2000 genta +bool CDocEditor::IsEnablePaste() const +{ + return CClipboard::HasValidData(); +} + /*! 末尾に行を追加 diff --git a/sakura_core/doc/CDocEditor.h b/sakura_core/doc/CDocEditor.h index 56f2694ae0..1b2c4c33c3 100644 --- a/sakura_core/doc/CDocEditor.h +++ b/sakura_core/doc/CDocEditor.h @@ -28,7 +28,6 @@ #pragma once #include "doc/CDocListener.h" -#include "_os/CClipboard.h" #include "COpeBuf.h" class CEditDoc; @@ -84,10 +83,7 @@ class CDocEditor : public CDocListenerEx{ } //! クリップボードから貼り付け可能か? - bool IsEnablePaste( void ) const - { - return CClipboard::HasValidData(); - } + bool IsEnablePaste( void ) const; public: CEditDoc* m_pcDocRef; diff --git a/sakura_core/macro/CMacro.cpp b/sakura_core/macro/CMacro.cpp index e8e0e2af43..c9301eb0ca 100644 --- a/sakura_core/macro/CMacro.cpp +++ b/sakura_core/macro/CMacro.cpp @@ -61,6 +61,7 @@ #include "CSelectLang.h" #include "config/app_constants.h" #include "String_define.h" +#include "_os/CClipboard.h" CMacro::CMacro( EFunctionCode nFuncID ) { From e7a0b5c80320f51263a6b9530664841a940ae526 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sun, 13 Feb 2022 15:09:01 +0900 Subject: [PATCH 0935/1024] =?UTF-8?q?CClipboard=20=E5=86=85=E3=81=AE=20API?= =?UTF-8?q?=20=E5=91=BC=E3=81=B3=E5=87=BA=E3=81=97=E3=82=92=E3=82=AA?= =?UTF-8?q?=E3=83=BC=E3=83=90=E3=83=BC=E3=83=A9=E3=82=A4=E3=83=89=E3=81=A7?= =?UTF-8?q?=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * モックしたい関数を呼び出しているコードから名前空間指定を除去。 * モックしたい関数と同名の仮想メンバ関数をクラスに追加し、元の API へリダイレクトするように実装。 --- sakura_core/_os/CClipboard.cpp | 42 +++++++++++++++++++++++----------- sakura_core/_os/CClipboard.h | 8 +++++++ 2 files changed, 37 insertions(+), 13 deletions(-) diff --git a/sakura_core/_os/CClipboard.cpp b/sakura_core/_os/CClipboard.cpp index 8a3bea8f27..b77bc6adbf 100644 --- a/sakura_core/_os/CClipboard.cpp +++ b/sakura_core/_os/CClipboard.cpp @@ -56,7 +56,7 @@ CClipboard::~CClipboard() void CClipboard::Empty() { - ::EmptyClipboard(); + EmptyClipboard(); } void CClipboard::Close() @@ -112,7 +112,7 @@ bool CClipboard::SetText( ::GlobalUnlock( hgClipText ); //クリップボードに設定 - ::SetClipboardData( CF_UNICODETEXT, hgClipText ); + SetClipboardData( CF_UNICODETEXT, hgClipText ); bUnicodeText = false; } // 1回しか通らない. breakでここまで飛ぶ @@ -142,7 +142,7 @@ bool CClipboard::SetText( ::GlobalUnlock( hgClipSakura ); //クリップボードに設定 - ::SetClipboardData( uFormatSakuraClip, hgClipSakura ); + SetClipboardData( uFormatSakuraClip, hgClipSakura ); bSakuraText = false; } // 1回しか通らない. breakでここまで飛ぶ @@ -160,7 +160,7 @@ bool CClipboard::SetText( BYTE* pClip = GlobalLockBYTE( hgClipMSDEVColumn ); pClip[0] = 0; ::GlobalUnlock( hgClipMSDEVColumn ); - ::SetClipboardData( uFormat, hgClipMSDEVColumn ); + SetClipboardData( uFormat, hgClipMSDEVColumn ); } } } @@ -178,7 +178,7 @@ bool CClipboard::SetText( BYTE* pClip = (BYTE*)::GlobalLock( hgClipMSDEVLine ); pClip[0] = 0x01; ::GlobalUnlock( hgClipMSDEVLine ); - ::SetClipboardData( uFormat, hgClipMSDEVLine ); + SetClipboardData( uFormat, hgClipMSDEVLine ); } } } @@ -194,7 +194,7 @@ bool CClipboard::SetText( BYTE* pClip = (BYTE*)::GlobalLock( hgClipMSDEVLine2 ); pClip[0] = 0x01; // ※ ClipSpy で調べるとデータはこれとは違うが内容には無関係に動くっぽい ::GlobalUnlock( hgClipMSDEVLine2 ); - ::SetClipboardData( uFormat, hgClipMSDEVLine2 ); + SetClipboardData( uFormat, hgClipMSDEVLine2 ); } } } @@ -250,7 +250,7 @@ bool CClipboard::SetHtmlText(const CNativeW& cmemBUf) //クリップボードに設定 UINT uFormat = ::RegisterClipboardFormat( L"HTML Format" ); - ::SetClipboardData( uFormat, hgClipText ); + SetClipboardData( uFormat, hgClipText ); return true; } @@ -299,8 +299,8 @@ bool CClipboard::GetText(CNativeW* cmemBuf, bool* pbColumnSelect, bool* pbLineSe //サクラ形式のデータがあれば取得 CLIPFORMAT uFormatSakuraClip = CClipboard::GetSakuraFormat(); if( (uGetFormat == -1 || uGetFormat == uFormatSakuraClip) - && ::IsClipboardFormatAvailable( uFormatSakuraClip ) ){ - HGLOBAL hSakura = ::GetClipboardData( uFormatSakuraClip ); + && IsClipboardFormatAvailable( uFormatSakuraClip ) ){ + HGLOBAL hSakura = GetClipboardData( uFormatSakuraClip ); if (hSakura != NULL) { BYTE* pData = (BYTE*)::GlobalLock(hSakura); size_t nLength = *((int*)pData); @@ -315,7 +315,7 @@ bool CClipboard::GetText(CNativeW* cmemBuf, bool* pbColumnSelect, bool* pbLineSe // From Here 2005/05/29 novice UNICODE TEXT 対応処理を追加 HGLOBAL hUnicode = NULL; if( uGetFormat == -1 || uGetFormat == CF_UNICODETEXT ){ - hUnicode = ::GetClipboardData( CF_UNICODETEXT ); + hUnicode = GetClipboardData( CF_UNICODETEXT ); } if( hUnicode != NULL ){ //DWORD nLen = GlobalSize(hUnicode); @@ -329,7 +329,7 @@ bool CClipboard::GetText(CNativeW* cmemBuf, bool* pbColumnSelect, bool* pbLineSe //OEMTEXT形式のデータがあれば取得 HGLOBAL hText = NULL; if( uGetFormat == -1 || uGetFormat == CF_OEMTEXT ){ - hText = ::GetClipboardData( CF_OEMTEXT ); + hText = GetClipboardData( CF_OEMTEXT ); } if( hText != NULL ){ char* szData = GlobalLockChar(hText); @@ -348,8 +348,8 @@ bool CClipboard::GetText(CNativeW* cmemBuf, bool* pbColumnSelect, bool* pbLineSe /* 2008.09.10 bosagami パス貼り付け対応 */ //HDROP形式のデータがあれば取得 if( (uGetFormat == -1 || uGetFormat == CF_HDROP) - && ::IsClipboardFormatAvailable(CF_HDROP) ){ - HDROP hDrop = (HDROP)::GetClipboardData(CF_HDROP); + && IsClipboardFormatAvailable(CF_HDROP) ){ + HDROP hDrop = (HDROP)GetClipboardData(CF_HDROP); if(hDrop != NULL){ WCHAR sTmpPath[_MAX_PATH + 1] = {0}; const int nMaxCnt = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0); @@ -673,3 +673,19 @@ int CClipboard::GetDataType() if(::IsClipboardFormatAvailable(CF_HDROP))return CF_HDROP; return -1; } + +HANDLE CClipboard::SetClipboardData(UINT uFormat, HANDLE hMem) { + return ::SetClipboardData(uFormat, hMem); +} + +HANDLE CClipboard::GetClipboardData(UINT uFormat) { + return ::GetClipboardData(uFormat); +} + +BOOL CClipboard::EmptyClipboard() { + return ::EmptyClipboard(); +} + +BOOL CClipboard::IsClipboardFormatAvailable(UINT format) { + return ::IsClipboardFormatAvailable(format); +} diff --git a/sakura_core/_os/CClipboard.h b/sakura_core/_os/CClipboard.h index 7dfa2f7c0a..81916fd794 100644 --- a/sakura_core/_os/CClipboard.h +++ b/sakura_core/_os/CClipboard.h @@ -66,5 +66,13 @@ class CClipboard{ static bool HasValidData(); //!< クリップボード内に、サクラエディタで扱えるデータがあればtrue static CLIPFORMAT GetSakuraFormat(); //!< サクラエディタ独自のクリップボードデータ形式 static int GetDataType(); //!< クリップボードデータ形式(CF_UNICODETEXT等)の取得 + +protected: + // 単体テスト用 + CClipboard(bool openStatus) : m_bOpenResult(openStatus) {} + virtual HANDLE SetClipboardData(UINT uFormat, HANDLE hMem); + virtual HANDLE GetClipboardData(UINT uFormat); + virtual BOOL EmptyClipboard(); + virtual BOOL IsClipboardFormatAvailable(UINT format); }; #endif /* SAKURA_CCLIPBOARD_4E783022_214C_4E51_A2E0_54EC343500F6_H_ */ From a5a85a8edb5e040321dec23593631adaf1313f0b Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sun, 13 Feb 2022 16:21:27 +0900 Subject: [PATCH 0936/1024] =?UTF-8?q?CClipboard=20=E3=81=AE=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=81=A7=20Google=20Mock=20=E3=82=92?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E3=81=99=E3=82=8B=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-cclipboard.cpp | 272 ++++++++++++++++++++++++++++ 1 file changed, 272 insertions(+) diff --git a/tests/unittests/test-cclipboard.cpp b/tests/unittests/test-cclipboard.cpp index c4330bc81b..d723639ba7 100644 --- a/tests/unittests/test-cclipboard.cpp +++ b/tests/unittests/test-cclipboard.cpp @@ -23,11 +23,14 @@ distribution. */ #include +#include #ifndef NOMINMAX #define NOMINMAX #endif /* #ifndef NOMINMAX */ +#include +#include #include #include #include @@ -40,6 +43,9 @@ #include "mem/CNativeW.h" #include "_os/CClipboard.h" +using ::testing::_; +using ::testing::Return; + /*! * HWND型のスマートポインタを実現するためのdeleterクラス */ @@ -159,3 +165,269 @@ TEST_F(CClipboardTestFixture, SetTextAndGetText) EXPECT_STREQ(buffer.GetStringPtr(), text.data()); EXPECT_TRUE(line); } + +// グローバルメモリに書き込まれた特定の Unicode 文字列にマッチする述語関数 +MATCHER_P(WideStringInGlobalMemory, expected_string, "") { + const wchar_t* s = (const wchar_t*)::GlobalLock(arg); + if (!s) return false; + std::wstring_view actual(s); + bool match = actual == expected_string; + ::GlobalUnlock(arg); + return match; +} + +// グローバルメモリに書き込まれた特定の ANSI 文字列にマッチする述語関数 +MATCHER_P(AnsiStringInGlobalMemory, expected_string, "") { + const char* s = (const char*)::GlobalLock(arg); + if (!s) return false; + std::string_view actual(s); + bool match = actual == expected_string; + ::GlobalUnlock(arg); + return match; +} + +// グローバルメモリに書き込まれたサクラ独自形式データにマッチする述語関数 +MATCHER_P(SakuraFormatInGlobalMemory, expected_string, "") { + char* p = (char*)::GlobalLock(arg); + if (!p) return false; + int length = *(int*)p; + p += sizeof(int); + std::wstring_view actual((const wchar_t*)p); + bool match = actual.size() == length && actual == expected_string; + ::GlobalUnlock(arg); + return match; +} + +// グローバルメモリに書き込まれた特定のバイト値にマッチする述語関数 +MATCHER_P(ByteValueInGlobalMemory, value, "") { + unsigned char* p = (unsigned char*)::GlobalLock(arg); + if (!p) return false; + bool match = *p == value; + ::GlobalUnlock(arg); + return match; +} + +class MockCClipboard : public CClipboard { +public: + MockCClipboard(bool openStatus = true) : CClipboard(openStatus) {} + ~MockCClipboard() override {} + MOCK_METHOD2(SetClipboardData, HANDLE (UINT, HANDLE)); + MOCK_METHOD1(GetClipboardData, HANDLE (UINT)); + MOCK_METHOD0(EmptyClipboard, BOOL ()); + MOCK_METHOD1(IsClipboardFormatAvailable, BOOL (UINT)); +}; + +// Empty のテスト。 +// EmptyClipboard が呼ばれることを確認する。 +TEST(CClipboard, Empty) { + MockCClipboard clipboard; + EXPECT_CALL(clipboard, EmptyClipboard()).WillOnce(Return(TRUE)); + clipboard.Empty(); +} + +// SetHtmlTextのテスト。 +// SetClipboardData に渡された引数が期待される結果と一致することを確認する。 +TEST(CClipboard, SetHtmlText1) +{ + constexpr const wchar_t inputData[] = L"test 109"; + constexpr const char expected[] = + "Version:0.9\r\n" + "StartHTML:00000097\r\n" + "EndHTML:00000178\r\n" + "StartFragment:00000134\r\n" + "EndFragment:00000142\r\n" + "\r\n" + "\r\n" + "test 109\r\n" + "\r\n" + "\r\n"; + const UINT uHtmlFormat = ::RegisterClipboardFormat(L"HTML Format"); + + MockCClipboard clipboard; + EXPECT_CALL(clipboard, SetClipboardData(uHtmlFormat, AnsiStringInGlobalMemory(expected))); + EXPECT_TRUE(clipboard.SetHtmlText(inputData)); +} + +// クリップボードのオープンに失敗していた場合、SetHtmlText は何もせずに失敗する。 +TEST(CClipboard, SetHtmlText2) { + MockCClipboard clipboard(false); + EXPECT_CALL(clipboard, SetClipboardData(_, _)).Times(0); + EXPECT_FALSE(clipboard.SetHtmlText(L"test")); +} + +// SetText のテスト(フォーマット指定なし・矩形選択なし・行選択なし) +TEST(CClipboard, SetText1) { + constexpr std::wstring_view text = L"てすと"; + const CLIPFORMAT sakuraFormat = CClipboard::GetSakuraFormat(); + MockCClipboard clipboard; + EXPECT_CALL(clipboard, SetClipboardData(CF_UNICODETEXT, WideStringInGlobalMemory(text))); + EXPECT_CALL(clipboard, SetClipboardData(sakuraFormat, SakuraFormatInGlobalMemory(text))); + EXPECT_TRUE(clipboard.SetText(text.data(), text.length(), false, false, -1)); +} + +// SetText のテスト(CF_UNICODETEXTのみ・矩形選択あり・行選択なし) +TEST(CClipboard, SetText2) { + constexpr std::wstring_view text = L"てすと"; + MockCClipboard clipboard; + EXPECT_CALL(clipboard, SetClipboardData(CF_UNICODETEXT, WideStringInGlobalMemory(text))); + EXPECT_CALL(clipboard, SetClipboardData(::RegisterClipboardFormat(L"MSDEVColumnSelect"), ByteValueInGlobalMemory(0))); + EXPECT_FALSE(clipboard.SetText(text.data(), text.length(), true, false, CF_UNICODETEXT)); +} + +// SetText のテスト(サクラ独自形式のみ・矩形選択なし・行選択あり) +TEST(CClipboard, SetText3) { + constexpr std::wstring_view text = L"てすと"; + const CLIPFORMAT sakuraFormat = CClipboard::GetSakuraFormat(); + MockCClipboard clipboard; + EXPECT_CALL(clipboard, SetClipboardData(sakuraFormat, SakuraFormatInGlobalMemory(text))); + EXPECT_CALL(clipboard, SetClipboardData(::RegisterClipboardFormat(L"MSDEVLineSelect"), ByteValueInGlobalMemory(1))); + EXPECT_CALL(clipboard, SetClipboardData(::RegisterClipboardFormat(L"VisualStudioEditorOperationsLineCutCopyClipboardTag"), ByteValueInGlobalMemory(1))); + EXPECT_FALSE(clipboard.SetText(text.data(), text.length(), false, true, sakuraFormat)); +} + +// SetText のテスト。 +// クリップボードのオープンに失敗していた場合、SetText は何もせずに失敗する。 +TEST(CClipboard, SetText4) { + constexpr std::wstring_view text = L"てすと"; + MockCClipboard clipboard(false); + EXPECT_CALL(clipboard, SetClipboardData(_, _)).Times(0); + EXPECT_FALSE(clipboard.SetText(text.data(), text.length(), false, false, -1)); +} + +// グローバルメモリを RAII で管理する簡易ヘルパークラス +class GlobalMemory { +public: + GlobalMemory(UINT flags, SIZE_T bytes) : handle_(::GlobalAlloc(flags, bytes)) {} + GlobalMemory(const GlobalMemory&) = delete; + GlobalMemory& operator=(const GlobalMemory&) = delete; + ~GlobalMemory() { + if (handle_) + ::GlobalFree(handle_); + } + HGLOBAL Get() { return handle_; } + template void Lock(std::function f) { + f(reinterpret_cast(::GlobalLock(handle_))); + ::GlobalUnlock(handle_); + } +private: + HGLOBAL handle_; +}; + +// GetText のテストで使用するダミーデータを準備するためのフィクスチャクラス +class CClipboardGetText : public testing::Test { +protected: + MockCClipboard clipboard; + CNativeW buffer; + const CLIPFORMAT sakuraFormat = CClipboard::GetSakuraFormat(); + const CEol eol{ EEolType::cr_and_lf }; + static constexpr std::wstring_view unicodeText = L"CF_UNICODE"; + static constexpr std::wstring_view sakuraText = L"SAKURAClipW"; + static constexpr std::string_view oemText = "CF_OEMTEXT"; + GlobalMemory unicodeMemory{ GMEM_MOVEABLE, (unicodeText.size() + 1) * sizeof(wchar_t) }; + GlobalMemory sakuraMemory{ GMEM_MOVEABLE, sizeof(int) + (sakuraText.size() + 1) * sizeof(wchar_t) }; + GlobalMemory oemMemory{ GMEM_MOVEABLE, oemText.size() + 1 }; + + CClipboardGetText() { + unicodeMemory.Lock([=](wchar_t* p) { + std::wcscpy(p, unicodeText.data()); + }); + sakuraMemory.Lock([=](unsigned char* p) { + *(int*)p = sakuraText.size(); + std::wcscpy((wchar_t*)(p + sizeof(int)), sakuraText.data()); + }); + oemMemory.Lock([=](char* p) { + std::strcpy(p, oemText.data()); + }); + } +}; + +// CClipboard::GetText のテスト群。 +// +// GetText で取得したいデータ形式が特に指定されていない場合、 +// サクラ形式 -> CF_UNICODETEXT -> CF_OEMTEXT -> CF_HDROP の順で取得を試みる。 + +// サクラ形式を正常に取得するパス。 +TEST_F(CClipboardGetText, NoSpecifiedFormat1) { + ON_CALL(clipboard, IsClipboardFormatAvailable(sakuraFormat)).WillByDefault(Return(TRUE)); + ON_CALL(clipboard, GetClipboardData(sakuraFormat)).WillByDefault(Return(sakuraMemory.Get())); + EXPECT_TRUE(clipboard.GetText(&buffer, nullptr, nullptr, eol, -1)); + EXPECT_STREQ(buffer.GetStringPtr(), sakuraText.data()); +} + +// クリップボードにサクラ形式がなかった場合、CF_UNICODETEXTを取得する。 +TEST_F(CClipboardGetText, NoSpecifiedFormat2) { + ON_CALL(clipboard, IsClipboardFormatAvailable(sakuraFormat)).WillByDefault(Return(FALSE)); + ON_CALL(clipboard, GetClipboardData(CF_UNICODETEXT)).WillByDefault(Return(unicodeMemory.Get())); + EXPECT_TRUE(clipboard.GetText(&buffer, nullptr, nullptr, eol, -1)); + EXPECT_STREQ(buffer.GetStringPtr(), unicodeText.data()); +} + +// クリップボードにはサクラ形式があるはずだが、GetClipboardDataが失敗した場合、CF_UNICODETEXTを取得する。 +TEST_F(CClipboardGetText, NoSpecifiedFormat3) { + ON_CALL(clipboard, IsClipboardFormatAvailable(sakuraFormat)).WillByDefault(Return(TRUE)); + ON_CALL(clipboard, GetClipboardData(sakuraFormat)).WillByDefault(Return(nullptr)); + ON_CALL(clipboard, GetClipboardData(CF_UNICODETEXT)).WillByDefault(Return(unicodeMemory.Get())); + EXPECT_TRUE(clipboard.GetText(&buffer, nullptr, nullptr, eol, -1)); + EXPECT_STREQ(buffer.GetStringPtr(), unicodeText.data()); +} + +// サクラ形式とCF_UNICODETEXTの取得に失敗した場合、CF_OEMTEXTを取得する。 +TEST_F(CClipboardGetText, NoSpecifiedFormat4) { + ON_CALL(clipboard, IsClipboardFormatAvailable(sakuraFormat)).WillByDefault(Return(FALSE)); + ON_CALL(clipboard, GetClipboardData(CF_UNICODETEXT)).WillByDefault(Return(nullptr)); + ON_CALL(clipboard, GetClipboardData(CF_OEMTEXT)).WillByDefault(Return(oemMemory.Get())); + EXPECT_TRUE(clipboard.GetText(&buffer, nullptr, nullptr, eol, -1)); + EXPECT_STREQ(buffer.GetStringPtr(), L"CF_OEMTEXT"); +} + +// サクラ形式とCF_UNICODETEXTとCF_OEMTEXTが失敗した場合、CF_HDROPを取得する。 +TEST_F(CClipboardGetText, DISABLED_NoSpecifiedFormat5) { + // 適切なダミーデータを用意するのが難しいため未実装 +} + +// GetText で取得したいデータ形式が指定されている場合、他のデータ形式は無視する。 + +// サクラ形式を指定して取得する。 +TEST_F(CClipboardGetText, SakuraFormatSuccess) { + ON_CALL(clipboard, IsClipboardFormatAvailable(sakuraFormat)).WillByDefault(Return(TRUE)); + ON_CALL(clipboard, GetClipboardData(sakuraFormat)).WillByDefault(Return(sakuraMemory.Get())); + EXPECT_TRUE(clipboard.GetText(&buffer, nullptr, nullptr, eol, sakuraFormat)); + EXPECT_STREQ(buffer.GetStringPtr(), sakuraText.data()); +} + +// サクラ形式が指定されているが取得に失敗した場合。 +TEST_F(CClipboardGetText, SakuraFormatFailure) { + ON_CALL(clipboard, IsClipboardFormatAvailable(sakuraFormat)).WillByDefault(Return(FALSE)); + EXPECT_FALSE(clipboard.GetText(&buffer, nullptr, nullptr, eol, sakuraFormat)); +} + +// CF_UNICODETEXTを指定して取得する。 +TEST_F(CClipboardGetText, UnicodeTextSucces) { + ON_CALL(clipboard, GetClipboardData(CF_UNICODETEXT)).WillByDefault(Return(unicodeMemory.Get())); + EXPECT_TRUE(clipboard.GetText(&buffer, nullptr, nullptr, eol, CF_UNICODETEXT)); + EXPECT_STREQ(buffer.GetStringPtr(), unicodeText.data()); +} + +// CF_UNICODETEXTが指定されているが取得に失敗した場合。 +TEST_F(CClipboardGetText, UnicodeTextFailure) { + ON_CALL(clipboard, GetClipboardData(CF_UNICODETEXT)).WillByDefault(Return(nullptr)); + EXPECT_FALSE(clipboard.GetText(&buffer, nullptr, nullptr, eol, CF_UNICODETEXT)); +} + +// CF_OEMTEXTを指定して取得する。 +TEST_F(CClipboardGetText, OemTextSuccess) { + ON_CALL(clipboard, GetClipboardData(CF_OEMTEXT)).WillByDefault(Return(oemMemory.Get())); + EXPECT_TRUE(clipboard.GetText(&buffer, nullptr, nullptr, eol, CF_OEMTEXT)); + EXPECT_STREQ(buffer.GetStringPtr(), L"CF_OEMTEXT"); +} + +// CF_OEMTEXTが指定されているが取得に失敗した場合。 +TEST_F(CClipboardGetText, OemTextFailure) { + ON_CALL(clipboard, GetClipboardData(CF_OEMTEXT)).WillByDefault(Return(nullptr)); + EXPECT_FALSE(clipboard.GetText(&buffer, nullptr, nullptr, eol, CF_OEMTEXT)); +} + +// CF_HDROP を指定して取得する。 +TEST_F(CClipboardGetText, DISABLED_HDropSuccess) { + // 適切なダミーデータを用意するのが難しいため未実装 +} From eca61cc5567364899dddc91e6a815923844cbee2 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sun, 13 Feb 2022 18:15:42 +0900 Subject: [PATCH 0937/1024] =?UTF-8?q?protected=20=E3=82=B3=E3=83=B3?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=83=A9=E3=82=AF=E3=82=BF=E3=83=BC=E3=82=92?= =?UTF-8?q?=20explicit=20=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/_os/CClipboard.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/_os/CClipboard.h b/sakura_core/_os/CClipboard.h index 81916fd794..dedc6a138a 100644 --- a/sakura_core/_os/CClipboard.h +++ b/sakura_core/_os/CClipboard.h @@ -69,7 +69,7 @@ class CClipboard{ protected: // 単体テスト用 - CClipboard(bool openStatus) : m_bOpenResult(openStatus) {} + explicit CClipboard(bool openStatus) : m_bOpenResult(openStatus) {} virtual HANDLE SetClipboardData(UINT uFormat, HANDLE hMem); virtual HANDLE GetClipboardData(UINT uFormat); virtual BOOL EmptyClipboard(); From a73255616e89229f0b32dd641ff0cdc07c7becf3 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 14 Feb 2022 12:49:23 +0900 Subject: [PATCH 0938/1024] =?UTF-8?q?CShareData=E3=81=AE=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 言語切り替え時の共有データ書換についてのテストが薄いのでケースを追加する --- tests/unittests/test-csharedata.cpp | 68 ++++++++++++++++++++++++++ tests/unittests/tests1.vcxproj | 1 + tests/unittests/tests1.vcxproj.filters | 3 ++ 3 files changed, 72 insertions(+) create mode 100644 tests/unittests/test-csharedata.cpp diff --git a/tests/unittests/test-csharedata.cpp b/tests/unittests/test-csharedata.cpp new file mode 100644 index 0000000000..0f4652ea9f --- /dev/null +++ b/tests/unittests/test-csharedata.cpp @@ -0,0 +1,68 @@ +/*! @file */ +/* + Copyright (C) 2022, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include + +#ifndef NOMINMAX +#define NOMINMAX +#endif /* #ifndef NOMINMAX */ + +#include +#include +#include +#include + +#include + +#include "env/CShareData.h" + +#include "_main/CCommandLine.h" +#include "_main/CNormalProcess.h" + +/*! + * @brief CShareDataのテスト + */ +TEST( CShareData, test ) +{ + // 共有メモリをインスタンス化するにはプロセスのインスタンスが必要。 + CNormalProcess cProcess(::GetModuleHandle(nullptr), L""); + + // 共有メモリのインスタンスを取得する + auto pShareData = CShareData::getInstance(); + ASSERT_NE(nullptr, pShareData); + + // 共有メモリを初期化するにはコマンドラインのインスタンスが必要 + CCommandLine cCommandLine; + cCommandLine.ParseCommandLine(L"", false); + + // 共有メモリのインスタンスを初期化する + ASSERT_TRUE(pShareData->InitShareData()); + + // 言語切り替えのテストを実施する + std::vector values; + pShareData->ConvertLangValues(values, true); + CSelectLang::ChangeLang(L"sakura_lang_en_US.dll"); + pShareData->ConvertLangValues(values, false); + pShareData->RefreshString(); +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index f45a2273a3..821e1e3cba 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -112,6 +112,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index 2d8cc79a47..d94be58f34 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -160,6 +160,9 @@ Test Files + + Test Files + From d2a0f7225772015bd177f3f672a927cd742fc440 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Mon, 14 Feb 2022 14:32:55 +0900 Subject: [PATCH 0939/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88=E3=82=92=E5=8F=8D=E6=98=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 仮想メンバ関数を const にした。 * 仮想メンバ関数の宣言部に目的を説明するコメントを追加した。 --- sakura_core/_os/CClipboard.cpp | 8 ++++---- sakura_core/_os/CClipboard.h | 13 ++++++++----- tests/unittests/test-cclipboard.cpp | 8 ++++---- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/sakura_core/_os/CClipboard.cpp b/sakura_core/_os/CClipboard.cpp index b77bc6adbf..fa0d6806a0 100644 --- a/sakura_core/_os/CClipboard.cpp +++ b/sakura_core/_os/CClipboard.cpp @@ -674,18 +674,18 @@ int CClipboard::GetDataType() return -1; } -HANDLE CClipboard::SetClipboardData(UINT uFormat, HANDLE hMem) { +HANDLE CClipboard::SetClipboardData(UINT uFormat, HANDLE hMem) const { return ::SetClipboardData(uFormat, hMem); } -HANDLE CClipboard::GetClipboardData(UINT uFormat) { +HANDLE CClipboard::GetClipboardData(UINT uFormat) const { return ::GetClipboardData(uFormat); } -BOOL CClipboard::EmptyClipboard() { +BOOL CClipboard::EmptyClipboard() const { return ::EmptyClipboard(); } -BOOL CClipboard::IsClipboardFormatAvailable(UINT format) { +BOOL CClipboard::IsClipboardFormatAvailable(UINT format) const { return ::IsClipboardFormatAvailable(format); } diff --git a/sakura_core/_os/CClipboard.h b/sakura_core/_os/CClipboard.h index dedc6a138a..f398c56796 100644 --- a/sakura_core/_os/CClipboard.h +++ b/sakura_core/_os/CClipboard.h @@ -68,11 +68,14 @@ class CClipboard{ static int GetDataType(); //!< クリップボードデータ形式(CF_UNICODETEXT等)の取得 protected: - // 単体テスト用 + // 単体テスト用コンストラクタ explicit CClipboard(bool openStatus) : m_bOpenResult(openStatus) {} - virtual HANDLE SetClipboardData(UINT uFormat, HANDLE hMem); - virtual HANDLE GetClipboardData(UINT uFormat); - virtual BOOL EmptyClipboard(); - virtual BOOL IsClipboardFormatAvailable(UINT format); + + // 同名の Windows API に引数を転送する仮想メンバ関数。 + // 単体テスト内でオーバーライドすることで副作用のないテストを実施するのが目的。 + virtual HANDLE SetClipboardData(UINT uFormat, HANDLE hMem) const; + virtual HANDLE GetClipboardData(UINT uFormat) const; + virtual BOOL EmptyClipboard() const; + virtual BOOL IsClipboardFormatAvailable(UINT format) const; }; #endif /* SAKURA_CCLIPBOARD_4E783022_214C_4E51_A2E0_54EC343500F6_H_ */ diff --git a/tests/unittests/test-cclipboard.cpp b/tests/unittests/test-cclipboard.cpp index d723639ba7..4db5b13f66 100644 --- a/tests/unittests/test-cclipboard.cpp +++ b/tests/unittests/test-cclipboard.cpp @@ -211,10 +211,10 @@ class MockCClipboard : public CClipboard { public: MockCClipboard(bool openStatus = true) : CClipboard(openStatus) {} ~MockCClipboard() override {} - MOCK_METHOD2(SetClipboardData, HANDLE (UINT, HANDLE)); - MOCK_METHOD1(GetClipboardData, HANDLE (UINT)); - MOCK_METHOD0(EmptyClipboard, BOOL ()); - MOCK_METHOD1(IsClipboardFormatAvailable, BOOL (UINT)); + MOCK_CONST_METHOD2(SetClipboardData, HANDLE (UINT, HANDLE)); + MOCK_CONST_METHOD1(GetClipboardData, HANDLE (UINT)); + MOCK_CONST_METHOD0(EmptyClipboard, BOOL ()); + MOCK_CONST_METHOD1(IsClipboardFormatAvailable, BOOL (UINT)); }; // Empty のテスト。 From 8ee80cad56f2e5eb542ba57b1b82b40719fd6e68 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 20 Feb 2022 03:17:22 +0900 Subject: [PATCH 0940/1024] =?UTF-8?q?178=E3=80=8C=E3=81=93=E3=81=AE?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AE=E3=83=95=E3=82=A9?= =?UTF-8?q?=E3=83=AB=E3=83=80=E5=90=8D=E3=82=92=E3=82=B3=E3=83=94=E3=83=BC?= =?UTF-8?q?=E3=80=8D=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/my_icons.bmp | Bin 127798 -> 127798 bytes resource/mytool.bmp | Bin 63478 -> 63478 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/resource/my_icons.bmp b/resource/my_icons.bmp index 8c047474de3a3b2c27e9743fe6c59988416913ea..f14523a4d59f657a9536192a039f22555efee1af 100644 GIT binary patch delta 239 zcmdn?jD6cP_J%EtZhF(N=`spTc4RTw-loTRfpPjXeMW)l+cX$Wx6d|UJk2=$n<1mX z@-ibvrs-@ZKvtUxkR@gYWKA;zveYbqtYsEJmYEe$-!dyko$ZgT7_Tr+ce4S?9J2w+ zgxNt%G~Ui>&v=$`dYS`-Z?av=k?{=U^fD)yjoQv28{1r9d}~(_f0`SN@9hraFY|!$ qqdh_V6JCsblSO)rwx@Z6JaEH@k#G7H9Y%-A>z6BSU*^j=VJQF>qE2i8 delta 257 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

                    rmDY(hrD96(9N_+8O@9A&t8VhoZl#a{KT8c2e}@)L{gBUB z`r(N9VUJ?I=r6tgI^#>DqLPQ*_4V})mj`B7?81uIsP60eL9q@6$0hxkHw)% z*@s~+c`(Yj5Vc0nkKthJr~*BC3VA>@z@an2e34W7H2T5T4<-*1;J`iV-CLq^hQpr? zr@-N1=1KPbSW$6LQFjjlr$6I|HTL2l1K0XGK$ruE&<`6MNk90D4*r;v(oxcKA^!)B zi&jcU`6U9-`EY2Ib`8ysewa=__-gzb7mW*S9+?a2{IsMY%Soi^uuq=_4xTT12YGmt z| zdWs*GCWpp>#OBPy@1$75)|`2D`GB$VLFJQGX}ajt;%iZ#>@6SL*WbZRY0T1iY}CtW X`hg2?w9-}M!ZTUC3%3FitImG~s5ETU literal 63478 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 From 6e3c673c2dc5623a8b7abce6cee53b48c76b7189 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 20 Feb 2022 15:41:50 +0900 Subject: [PATCH 0941/1024] =?UTF-8?q?ToolBarImageSplitter=E3=82=92?= =?UTF-8?q?=E6=89=8B=E8=BB=BD=E3=81=AB=E5=AE=9F=E8=A1=8C=E3=81=A7=E3=81=8D?= =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/ToolBarTools/split_my_icons.bat | 34 +++++++++++++++++++++++++++ tools/ToolBarTools/split_mytool.bat | 34 +++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 tools/ToolBarTools/split_my_icons.bat create mode 100644 tools/ToolBarTools/split_mytool.bat diff --git a/tools/ToolBarTools/split_my_icons.bat b/tools/ToolBarTools/split_my_icons.bat new file mode 100644 index 0000000000..c9daca8dbf --- /dev/null +++ b/tools/ToolBarTools/split_my_icons.bat @@ -0,0 +1,34 @@ +@echo off + +:: ToolBarImageSplitter.exeの生成チェック +if not exist "%~dp0ToolBarImageSplitter\bin\Debug\ToolBarImageSplitter.exe" ( + call :BuildToolBarTools + if not exist "%~dp0ToolBarImageSplitter\bin\Debug\ToolBarImageSplitter.exe" ( + pause + exit /b + ) +) + +:: ツール実行 +pushd "%~dp0" +.\ToolBarImageSplitter\bin\Debug\ToolBarImageSplitter.exe ..\..\resource\my_icons.bmp .\my_icons + +:: 実行結果を表示するため一時停止 +pause + +:: バッチ終了 +exit /b + +:: ツールのビルド +:BuildToolBarTools +echo ToolBarImageSplitter.exe was not found. +echo . + +if not defined CMD_MSBUILD call %~dp0..\find-tools.bat +if not defined CMD_MSBUILD ( + echo msbuild.exe was not found. + exit /b +) + +echo "%CMD_MSBUILD%" ToolBarTools.sln /p:Platform="Any CPU" /p:Configuration=Debug /verbosity:quiet + "%CMD_MSBUILD%" ToolBarTools.sln /p:Platform="Any CPU" /p:Configuration=Debug /verbosity:quiet diff --git a/tools/ToolBarTools/split_mytool.bat b/tools/ToolBarTools/split_mytool.bat new file mode 100644 index 0000000000..a6982b8756 --- /dev/null +++ b/tools/ToolBarTools/split_mytool.bat @@ -0,0 +1,34 @@ +@echo off + +:: ToolBarImageSplitter.exeの生成チェック +if not exist "%~dp0ToolBarImageSplitter\bin\Debug\ToolBarImageSplitter.exe" ( + call :BuildToolBarTools + if not exist "%~dp0ToolBarImageSplitter\bin\Debug\ToolBarImageSplitter.exe" ( + pause + exit /b + ) +) + +:: ツール実行 +pushd "%~dp0" +.\ToolBarImageSplitter\bin\Debug\ToolBarImageSplitter.exe ..\..\resource\mytool.bmp .\mytool + +:: 実行結果を表示するため一時停止 +pause + +:: バッチ終了 +exit /b + +:: ツールのビルド +:BuildToolBarTools +echo ToolBarImageSplitter.exe was not found. +echo . + +if not defined CMD_MSBUILD call %~dp0..\find-tools.bat +if not defined CMD_MSBUILD ( + echo msbuild.exe was not found. + exit /b +) + +echo "%CMD_MSBUILD%" ToolBarTools.sln /p:Platform="Any CPU" /p:Configuration=Debug /verbosity:quiet + "%CMD_MSBUILD%" ToolBarTools.sln /p:Platform="Any CPU" /p:Configuration=Debug /verbosity:quiet From fb6a564914399fb68c2e695e52077e435aa684af Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 20 Feb 2022 19:10:37 +0900 Subject: [PATCH 0942/1024] =?UTF-8?q?=E5=87=A6=E7=90=86=E5=AF=BE=E8=B1=A1?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E5=90=8D=E3=82=92=E3=83=90?= =?UTF-8?q?=E3=83=83=E3=83=81=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E5=90=8D?= =?UTF-8?q?=E3=81=8B=E3=82=89=E5=8F=96=E5=BE=97=E3=81=99=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/ToolBarTools/split_my_icons.bat | 6 +++++- tools/ToolBarTools/split_mytool.bat | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/tools/ToolBarTools/split_my_icons.bat b/tools/ToolBarTools/split_my_icons.bat index c9daca8dbf..9e6040bca9 100644 --- a/tools/ToolBarTools/split_my_icons.bat +++ b/tools/ToolBarTools/split_my_icons.bat @@ -1,5 +1,9 @@ @echo off +:: バッチファイル名から、処理対象のファイル名を取得する +set IMAGE_NAME=%~n0 +set IMAGE_NAME=%IMAGE_NAME:~6% + :: ToolBarImageSplitter.exeの生成チェック if not exist "%~dp0ToolBarImageSplitter\bin\Debug\ToolBarImageSplitter.exe" ( call :BuildToolBarTools @@ -11,7 +15,7 @@ if not exist "%~dp0ToolBarImageSplitter\bin\Debug\ToolBarImageSplitter.exe" ( :: ツール実行 pushd "%~dp0" -.\ToolBarImageSplitter\bin\Debug\ToolBarImageSplitter.exe ..\..\resource\my_icons.bmp .\my_icons +.\ToolBarImageSplitter\bin\Debug\ToolBarImageSplitter.exe ..\..\resource\%IMAGE_NAME%.bmp .\%IMAGE_NAME% :: 実行結果を表示するため一時停止 pause diff --git a/tools/ToolBarTools/split_mytool.bat b/tools/ToolBarTools/split_mytool.bat index a6982b8756..9e6040bca9 100644 --- a/tools/ToolBarTools/split_mytool.bat +++ b/tools/ToolBarTools/split_mytool.bat @@ -1,5 +1,9 @@ @echo off +:: バッチファイル名から、処理対象のファイル名を取得する +set IMAGE_NAME=%~n0 +set IMAGE_NAME=%IMAGE_NAME:~6% + :: ToolBarImageSplitter.exeの生成チェック if not exist "%~dp0ToolBarImageSplitter\bin\Debug\ToolBarImageSplitter.exe" ( call :BuildToolBarTools @@ -11,7 +15,7 @@ if not exist "%~dp0ToolBarImageSplitter\bin\Debug\ToolBarImageSplitter.exe" ( :: ツール実行 pushd "%~dp0" -.\ToolBarImageSplitter\bin\Debug\ToolBarImageSplitter.exe ..\..\resource\mytool.bmp .\mytool +.\ToolBarImageSplitter\bin\Debug\ToolBarImageSplitter.exe ..\..\resource\%IMAGE_NAME%.bmp .\%IMAGE_NAME% :: 実行結果を表示するため一時停止 pause From 8a85ee3c1de46a0066caea4f656ee4b02919036d Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 21 Feb 2022 12:58:03 +0900 Subject: [PATCH 0943/1024] =?UTF-8?q?=E5=85=B1=E9=80=9A=E9=83=A8=E5=88=86?= =?UTF-8?q?=E3=82=92=E5=88=A5=E3=83=90=E3=83=83=E3=83=81=E3=81=AB=E5=88=87?= =?UTF-8?q?=E3=82=8A=E5=87=BA=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../runToolBarImageSplitter.bat | 45 +++++++++++++++++++ tools/ToolBarTools/split_my_icons.bat | 34 +------------- tools/ToolBarTools/split_mytool.bat | 34 +------------- 3 files changed, 49 insertions(+), 64 deletions(-) create mode 100644 tools/ToolBarTools/ToolBarImageSplitter/runToolBarImageSplitter.bat diff --git a/tools/ToolBarTools/ToolBarImageSplitter/runToolBarImageSplitter.bat b/tools/ToolBarTools/ToolBarImageSplitter/runToolBarImageSplitter.bat new file mode 100644 index 0000000000..0595381a6c --- /dev/null +++ b/tools/ToolBarTools/ToolBarImageSplitter/runToolBarImageSplitter.bat @@ -0,0 +1,45 @@ +@echo off + +set IMAGE_NAME=%1 +if not defined IMAGE_NAME ( + set /p IMAGE_NAME="Enter file name of bitmap to be splited>>>" +) +if not defined IMAGE_NAME ( + echo file name must not be empty. + pause + exit /b 1 +) + +:: ToolBarImageSplitter.exeの生成チェック +if not exist "%~dp0bin\Debug\ToolBarImageSplitter.exe" ( + call :BuildToolBarTools + if not exist "%~dp0bin\Debug\ToolBarImageSplitter.exe" ( + pause + exit /b + ) +) + +:: ツール実行 +pushd "%~dp0../" +"%~dp0bin\Debug\ToolBarImageSplitter.exe" ..\..\resource\%IMAGE_NAME%.bmp .\%IMAGE_NAME% + +:: 実行結果を表示するため一時停止 +pause + +:: バッチ終了 +exit /b + +:: ツールのビルド +:BuildToolBarTools +echo ToolBarImageSplitter.exe was not found. +echo . + +if not defined CMD_MSBUILD call %~dp0..\..\find-tools.bat +if not defined CMD_MSBUILD ( + echo msbuild.exe was not found. + exit /b +) + +pushd "%~dp0../" +echo "%CMD_MSBUILD%" ToolBarTools.sln /p:Platform="Any CPU" /p:Configuration=Debug /verbosity:quiet + "%CMD_MSBUILD%" ToolBarTools.sln /p:Platform="Any CPU" /p:Configuration=Debug /verbosity:quiet diff --git a/tools/ToolBarTools/split_my_icons.bat b/tools/ToolBarTools/split_my_icons.bat index 9e6040bca9..2006a8301a 100644 --- a/tools/ToolBarTools/split_my_icons.bat +++ b/tools/ToolBarTools/split_my_icons.bat @@ -4,35 +4,5 @@ set IMAGE_NAME=%~n0 set IMAGE_NAME=%IMAGE_NAME:~6% -:: ToolBarImageSplitter.exeの生成チェック -if not exist "%~dp0ToolBarImageSplitter\bin\Debug\ToolBarImageSplitter.exe" ( - call :BuildToolBarTools - if not exist "%~dp0ToolBarImageSplitter\bin\Debug\ToolBarImageSplitter.exe" ( - pause - exit /b - ) -) - -:: ツール実行 -pushd "%~dp0" -.\ToolBarImageSplitter\bin\Debug\ToolBarImageSplitter.exe ..\..\resource\%IMAGE_NAME%.bmp .\%IMAGE_NAME% - -:: 実行結果を表示するため一時停止 -pause - -:: バッチ終了 -exit /b - -:: ツールのビルド -:BuildToolBarTools -echo ToolBarImageSplitter.exe was not found. -echo . - -if not defined CMD_MSBUILD call %~dp0..\find-tools.bat -if not defined CMD_MSBUILD ( - echo msbuild.exe was not found. - exit /b -) - -echo "%CMD_MSBUILD%" ToolBarTools.sln /p:Platform="Any CPU" /p:Configuration=Debug /verbosity:quiet - "%CMD_MSBUILD%" ToolBarTools.sln /p:Platform="Any CPU" /p:Configuration=Debug /verbosity:quiet +:: 共通バッチを呼び出す +call %~dp0ToolBarImageSplitter\runToolBarImageSplitter.bat %IMAGE_NAME% diff --git a/tools/ToolBarTools/split_mytool.bat b/tools/ToolBarTools/split_mytool.bat index 9e6040bca9..2006a8301a 100644 --- a/tools/ToolBarTools/split_mytool.bat +++ b/tools/ToolBarTools/split_mytool.bat @@ -4,35 +4,5 @@ set IMAGE_NAME=%~n0 set IMAGE_NAME=%IMAGE_NAME:~6% -:: ToolBarImageSplitter.exeの生成チェック -if not exist "%~dp0ToolBarImageSplitter\bin\Debug\ToolBarImageSplitter.exe" ( - call :BuildToolBarTools - if not exist "%~dp0ToolBarImageSplitter\bin\Debug\ToolBarImageSplitter.exe" ( - pause - exit /b - ) -) - -:: ツール実行 -pushd "%~dp0" -.\ToolBarImageSplitter\bin\Debug\ToolBarImageSplitter.exe ..\..\resource\%IMAGE_NAME%.bmp .\%IMAGE_NAME% - -:: 実行結果を表示するため一時停止 -pause - -:: バッチ終了 -exit /b - -:: ツールのビルド -:BuildToolBarTools -echo ToolBarImageSplitter.exe was not found. -echo . - -if not defined CMD_MSBUILD call %~dp0..\find-tools.bat -if not defined CMD_MSBUILD ( - echo msbuild.exe was not found. - exit /b -) - -echo "%CMD_MSBUILD%" ToolBarTools.sln /p:Platform="Any CPU" /p:Configuration=Debug /verbosity:quiet - "%CMD_MSBUILD%" ToolBarTools.sln /p:Platform="Any CPU" /p:Configuration=Debug /verbosity:quiet +:: 共通バッチを呼び出す +call %~dp0ToolBarImageSplitter\runToolBarImageSplitter.bat %IMAGE_NAME% From 11e78f497620bdea1d6255c954f07bc3f102110c Mon Sep 17 00:00:00 2001 From: dep5 Date: Mon, 21 Feb 2022 23:00:34 +0900 Subject: [PATCH 0944/1024] =?UTF-8?q?=E8=A4=87=E6=95=B0=E3=81=AEVisual=20S?= =?UTF-8?q?tudio=E3=82=92=E5=85=A5=E3=82=8C=E3=81=9F=E3=81=A8=E3=81=8D?= =?UTF-8?q?=E3=81=AE=E5=95=8F=E9=A1=8C=E3=81=AB=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura/sakura.vcxproj | 2 +- tools/find-tools.bat | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/sakura/sakura.vcxproj b/sakura/sakura.vcxproj index c033d57d66..1873251b35 100644 --- a/sakura/sakura.vcxproj +++ b/sakura/sakura.vcxproj @@ -912,10 +912,10 @@ + - diff --git a/tools/find-tools.bat b/tools/find-tools.bat index 9113ecfeb0..a8e0e1c15f 100644 --- a/tools/find-tools.bat +++ b/tools/find-tools.bat @@ -257,6 +257,7 @@ exit /b exit /b :cmake +set /a NUM_VSVERSION_NEXT=NUM_VSVERSION + 1 for /f "usebackq delims=" %%a in (`"%CMD_VSWHERE%" -property installationPath -version [%NUM_VSVERSION%^,%NUM_VSVERSION_NEXT%^)`) do ( pushd "%%a" call "%%a\Common7\Tools\vsdevcmd\ext\cmake.bat" From a47d95b5e3177dbf45544bc5d4cd645f3c4dde19 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Thu, 24 Feb 2022 23:33:04 +0900 Subject: [PATCH 0945/1024] =?UTF-8?q?strprintf=E3=82=92=E6=94=B9=E8=89=AF?= =?UTF-8?q?=E3=81=97=E3=81=A6=E3=83=8A=E3=83=AD=E3=83=BC=E6=96=87=E5=AD=97?= =?UTF-8?q?=E3=82=82=E6=89=B1=E3=81=88=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/string_ex.cpp | 159 ++++++++++++++++++++++++----- sakura_core/util/string_ex.h | 8 +- tests/unittests/test-string_ex.cpp | 93 +++++++++++++++++ 3 files changed, 230 insertions(+), 30 deletions(-) diff --git a/sakura_core/util/string_ex.cpp b/sakura_core/util/string_ex.cpp index efab81d74b..602418d5e5 100644 --- a/sakura_core/util/string_ex.cpp +++ b/sakura_core/util/string_ex.cpp @@ -240,81 +240,184 @@ const char* stristr_j( const char* s1, const char* s2 ) /*! @brief C-Styleのフォーマット文字列を使ってデータを文字列化する。 + 事前に確保したバッファに結果を書き込む高速バージョン + @param[in, out] strOut フォーマットされたテキストを受け取る変数 @param[in] pszFormat フォーマット文字列 @param[in] argList 引数リスト - @returns フォーマットされた文字列 + @returns 出力された文字数。NUL終端を含まない。 + @retval >= 0 正常終了 + @retval < 0 異常終了 */ -std::wstring vstrprintf(const WCHAR* pszFormat, va_list& argList) +int vstrprintf(std::wstring& strOut, const WCHAR* pszFormat, va_list& argList) { // _vscwprintf() はフォーマットに必要な文字数を返す。 const int cchOut = ::_vscwprintf(pszFormat, argList); - if (cchOut == 0) { - // 出力文字数が0なら後続処理は要らない。 - return std::wstring(); + // 出力文字数が0なら後続処理は要らない。 + if (!cchOut) { + return 0; + } + + // 必要なバッファを確保する + if (const size_t required = cchOut + 1; + strOut.capacity() <= required) + { + strOut.resize(required, L'0'); } - // 必要なバッファを確保してフォーマットする - std::wstring strOut(cchOut + 1, L'0'); + // フォーマットする ::vswprintf_s(strOut.data(), strOut.capacity(), pszFormat, argList); - strOut.resize(cchOut); - return strOut; + + // NUL終端する + strOut.assign(strOut.data(), cchOut); + + return cchOut; } /*! @brief C-Styleのフォーマット文字列を使ってデータを文字列化する。 + 事前に確保したバッファに結果を書き込む高速バージョン + @param[in, out] strOut フォーマットされたテキストを受け取る変数 @param[in] pszFormat フォーマット文字列 - @param[in] ... 引数リスト - @returns フォーマットされた文字列 + @param[in] argList 引数リスト + @returns 出力された文字数。NUL終端を含まない。 + @retval >= 0 正常終了 + @retval < 0 異常終了 */ -std::wstring strprintf(const WCHAR* pszFormat, ...) +int vstrprintf(std::string& strOut, const CHAR* pszFormat, va_list& argList) { - va_list argList; - va_start(argList, pszFormat); + // _vscwprintf() はフォーマットに必要な文字数を返す。 + const int cchOut = ::_vscprintf(pszFormat, argList); + // 出力文字数が0なら後続処理は要らない。 + if (!cchOut) { + return 0; + } + + // 必要なバッファを確保する + if (const size_t required = cchOut + 1; + strOut.capacity() <= required) + { + strOut.resize(required, L'0'); + } - const auto strRet = vstrprintf(pszFormat, argList); + // フォーマットする + ::vsprintf_s(strOut.data(), strOut.capacity(), pszFormat, argList); - va_end(argList); + // NUL終端する + strOut.assign(strOut.data(), cchOut); - return strRet; + return cchOut; } /*! @brief C-Styleのフォーマット文字列を使ってデータを文字列化する。 - @param[out] strOut フォーマットされたテキストを受け取る変数 + 事前に確保したバッファに結果を書き込む高速バージョン + @param[in, out] strOut フォーマットされたテキストを受け取る変数 @param[in] pszFormat フォーマット文字列 @param[in] argList 引数リスト @returns 出力された文字数。NUL終端を含まない。 @retval >= 0 正常終了 @retval < 0 異常終了 */ -int vstrprintf( std::wstring& strOut, const WCHAR* pszFormat, va_list& argList ) +int strprintf(std::wstring& strOut, const WCHAR* pszFormat, ...) { - // オーバーロードバージョンを呼び出す - strOut = vstrprintf(pszFormat, argList); - return static_cast(strOut.length()); + va_list argList; + va_start(argList, pszFormat); + + const auto nRet = vstrprintf(strOut, pszFormat, argList); + + va_end(argList); + + return nRet; } /*! @brief C-Styleのフォーマット文字列を使ってデータを文字列化する。 - @param[out] strOut フォーマットされたテキストを受け取る変数 + 事前に確保したバッファに結果を書き込む高速バージョン + @param[in, out] strOut フォーマットされたテキストを受け取る変数 @param[in] pszFormat フォーマット文字列 - @param[in] ... 引数リスト + @param[in] argList 引数リスト @returns 出力された文字数。NUL終端を含まない。 @retval >= 0 正常終了 @retval < 0 異常終了 */ -int strprintf( std::wstring& strOut, const WCHAR* pszFormat, ... ) +int strprintf(std::string& strOut, const CHAR* pszFormat, ...) { va_list argList; - va_start( argList, pszFormat ); + va_start(argList, pszFormat); - const int nRet = vstrprintf( strOut, pszFormat, argList ); + const auto nRet = vstrprintf(strOut, pszFormat, argList); - va_end( argList ); + va_end(argList); return nRet; } +/*! + @brief C-Styleのフォーマット文字列を使ってデータを文字列化する。 + 動的にバッファを確保する簡易バージョン + @param[in] pszFormat フォーマット文字列 + @param[in] ... 引数リスト + @returns フォーマットされた文字列 +*/ +std::wstring vstrprintf(const WCHAR* pszFormat, va_list& argList) +{ + std::wstring strOut; + vstrprintf(strOut, pszFormat, argList); + return strOut; +} + +/*! + @brief C-Styleのフォーマット文字列を使ってデータを文字列化する。 + 動的にバッファを確保する簡易バージョン + @param[in] pszFormat フォーマット文字列 + @param[in] ... 引数リスト + @returns フォーマットされた文字列 +*/ +std::string vstrprintf(const CHAR* pszFormat, va_list& argList) +{ + std::string strOut; + vstrprintf(strOut, pszFormat, argList); + return strOut; +} + +/*! + @brief C-Styleのフォーマット文字列を使ってデータを文字列化する。 + 動的にバッファを確保する簡易バージョン + @param[in] pszFormat フォーマット文字列 + @param[in] ... 引数リスト + @returns フォーマットされた文字列 +*/ +std::wstring strprintf(const WCHAR* pszFormat, ...) +{ + va_list argList; + va_start(argList, pszFormat); + + const auto strOut = vstrprintf(pszFormat, argList); + + va_end(argList); + + return strOut; +} + +/*! + @brief C-Styleのフォーマット文字列を使ってデータを文字列化する。 + 動的にバッファを確保する簡易バージョン + @param[in] pszFormat フォーマット文字列 + @param[in] ... 引数リスト + @returns フォーマットされた文字列 +*/ +std::string strprintf(const CHAR* pszFormat, ...) +{ + va_list argList; + va_start(argList, pszFormat); + + const auto strOut = vstrprintf(pszFormat, argList); + + va_end(argList); + + return strOut; +} + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 文字コード変換 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // diff --git a/sakura_core/util/string_ex.h b/sakura_core/util/string_ex.h index 5656caf2d6..3755815e16 100644 --- a/sakura_core/util/string_ex.h +++ b/sakura_core/util/string_ex.h @@ -205,10 +205,14 @@ inline int auto_vsprintf_s(WCHAR* buf, size_t nBufCount, const WCHAR* format, va #define auto_sprintf_s(buf, nBufCount, format, ...) ::_sntprintf_s((buf), nBufCount, _TRUNCATE, (format), __VA_ARGS__) #define auto_snprintf_s(buf, nBufCount, format, ...) ::_sntprintf_s((buf), nBufCount, _TRUNCATE, (format), __VA_ARGS__) +int vstrprintf(std::wstring& strOut, const WCHAR* pszFormat, va_list& argList); +int vstrprintf(std::string& strOut, const CHAR* pszFormat, va_list& argList); +int strprintf(std::wstring& strOut, const WCHAR* pszFormat, ...); +int strprintf(std::string& strOut, const CHAR* pszFormat, ...); std::wstring vstrprintf(const WCHAR* pszFormat, va_list& argList); +std::string vstrprintf(const CHAR* pszFormat, va_list& argList); std::wstring strprintf(const WCHAR* pszFormat, ...); -int vstrprintf( std::wstring& strOut, const WCHAR* pszFormat, va_list& argList ); -int strprintf( std::wstring& strOut, const WCHAR* pszFormat, ... ); +std::string strprintf(const CHAR* pszFormat, ...); // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 文字コード変換 // diff --git a/tests/unittests/test-string_ex.cpp b/tests/unittests/test-string_ex.cpp index e85ac41075..59be313ec7 100644 --- a/tests/unittests/test-string_ex.cpp +++ b/tests/unittests/test-string_ex.cpp @@ -135,6 +135,99 @@ TEST(string_ex, strprintfEmpty) ASSERT_TRUE(text.empty()); } +/*! + @brief 独自定義のフォーマット関数(C-Style風)。 + + バッファが極端に小さい場合の確認。 + wtd::wstringのスモールバッファは7文字分。 + */ +TEST(string_ex, strprintfW_small_output) +{ + std::wstring text = strprintf(L""); + EXPECT_STREQ(L"", text.c_str()); + + text = strprintf(L"%d", 1); + EXPECT_STREQ(L"1", text.c_str()); + + text = strprintf(L"%d", 12); + EXPECT_STREQ(L"12", text.c_str()); + + text = strprintf(L"%d", 123); + EXPECT_STREQ(L"123", text.c_str()); + + text = strprintf(L"%d", 1234); + EXPECT_STREQ(L"1234", text.c_str()); + + text = strprintf(L"%d", 12345); + EXPECT_STREQ(L"12345", text.c_str()); + + text = strprintf(L"%d", 123456); + EXPECT_STREQ(L"123456", text.c_str()); + + text = strprintf(L"%d", 1234567); + EXPECT_STREQ(L"1234567", text.c_str()); +} + +/*! + @brief 独自定義のフォーマット関数(C-Style風)。 + + バッファが極端に小さい場合の確認 + wtd::stringのスモールバッファは15文字分。 + */ +TEST(string_ex, strprintfA_small_output) +{ + std::string text = strprintf(""); + EXPECT_STREQ("", text.c_str()); + + text = strprintf("%d", 1); + EXPECT_STREQ("1", text.c_str()); + + text = strprintf("%d", 12); + EXPECT_STREQ("12", text.c_str()); + + text = strprintf("%d", 123); + EXPECT_STREQ("123", text.c_str()); + + text = strprintf("%d", 1234); + EXPECT_STREQ("1234", text.c_str()); + + text = strprintf("%d", 12345); + EXPECT_STREQ("12345", text.c_str()); + + text = strprintf("%d", 123456); + EXPECT_STREQ("123456", text.c_str()); + + text = strprintf("%d", 1234567); + EXPECT_STREQ("1234567", text.c_str()); + + text = strprintf("%d", 12345678); + EXPECT_STREQ("12345678", text.c_str()); + + text = strprintf("%d", 123456789); + EXPECT_STREQ("123456789", text.c_str()); + + text = strprintf("%d", 1234567890); + EXPECT_STREQ("1234567890", text.c_str()); + + text = strprintf("1234567890%d", 1); + EXPECT_STREQ("12345678901", text.c_str()); + + text = strprintf("1234567890%d", 12); + EXPECT_STREQ("123456789012", text.c_str()); + + text = strprintf("1234567890%d", 123); + EXPECT_STREQ("1234567890123", text.c_str()); + + text = strprintf("1234567890%d", 1234); + EXPECT_STREQ("12345678901234", text.c_str()); + + text = strprintf("1234567890%d", 12345); + EXPECT_STREQ("123456789012345", text.c_str()); + + text = strprintf("1234567890%d", 123456); + EXPECT_STREQ("1234567890123456", text.c_str()); +} + /*! @brief 独自定義の文字列比較関数。 */ From c1b0547bb84836b3db08dbeb39783d51a5e167db Mon Sep 17 00:00:00 2001 From: dep5 Date: Fri, 25 Feb 2022 00:59:28 +0900 Subject: [PATCH 0946/1024] =?UTF-8?q?=E3=83=93=E3=83=AB=E3=83=89=E9=A0=86?= =?UTF-8?q?=E3=81=AE=E5=A4=89=E6=9B=B4=E3=82=92=E3=82=84=E3=82=81=E3=80=81?= =?UTF-8?q?targets=E3=81=AB=E7=92=B0=E5=A2=83=E5=A4=89=E6=95=B0=E3=82=92?= =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura/githash.targets | 4 ++++ sakura/sakura.vcxproj | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/sakura/githash.targets b/sakura/githash.targets index c08156e2bd..3c6f1e1a65 100644 --- a/sakura/githash.targets +++ b/sakura/githash.targets @@ -7,6 +7,10 @@ Outputs="$(GeneratedGitHash)" AfterTargets="SelectClCompile" BeforeTargets="ClCompile"> + + $([System.Text.RegularExpressions.Regex]::Replace('$(VisualStudioVersion)', '^(\d+).*', '$1')) + + \ No newline at end of file diff --git a/sakura/sakura.vcxproj b/sakura/sakura.vcxproj index 1873251b35..c033d57d66 100644 --- a/sakura/sakura.vcxproj +++ b/sakura/sakura.vcxproj @@ -912,10 +912,10 @@ - + From 0981b8af93c9b2f4d2ac43c652fc7ee7af23cd6d Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 25 Feb 2022 01:01:28 +0900 Subject: [PATCH 0947/1024] =?UTF-8?q?MinGW=E3=81=AE=E3=82=B9=E3=83=A2?= =?UTF-8?q?=E3=83=BC=E3=83=AB=E3=83=90=E3=83=83=E3=83=95=E3=82=A1=E3=81=AE?= =?UTF-8?q?=E6=89=B1=E3=81=84=E3=81=8CMSVC=E3=81=A8=E7=95=B0=E3=81=AA?= =?UTF-8?q?=E3=82=8B=E3=81=93=E3=81=A8=E3=81=B8=E3=81=AE=E5=AF=BE=E7=AD=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/string_ex.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/sakura_core/util/string_ex.cpp b/sakura_core/util/string_ex.cpp index 602418d5e5..ed87fd27fc 100644 --- a/sakura_core/util/string_ex.cpp +++ b/sakura_core/util/string_ex.cpp @@ -26,6 +26,7 @@ #include "string_ex.h" #include +#include #include "charset/charcode.h" #include "charset/codechecker.h" @@ -268,7 +269,14 @@ int vstrprintf(std::wstring& strOut, const WCHAR* pszFormat, va_list& argList) ::vswprintf_s(strOut.data(), strOut.capacity(), pszFormat, argList); // NUL終端する - strOut.assign(strOut.data(), cchOut); + if (strOut.empty() && cchOut < 8) { + std::array buf; + ::wcsncpy_s(buf.data(), buf.size(), strOut.data(), cchOut); + strOut.assign(buf.data(), cchOut); + } + else { + strOut.assign(strOut.data(), cchOut); + } return cchOut; } @@ -303,7 +311,15 @@ int vstrprintf(std::string& strOut, const CHAR* pszFormat, va_list& argList) ::vsprintf_s(strOut.data(), strOut.capacity(), pszFormat, argList); // NUL終端する - strOut.assign(strOut.data(), cchOut); + if (strOut.empty() && cchOut < 16) { + std::array buf; + ::strncpy_s(buf.data(), buf.size(), strOut.data(), cchOut); + strOut.assign(buf.data(), cchOut); + } + else { + strOut.assign(strOut.data(), cchOut); + } + return cchOut; } From ba7cb213781ad1ad50136d5b3257f7e5999da030 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Fri, 25 Feb 2022 02:07:32 +0900 Subject: [PATCH 0948/1024] =?UTF-8?q?=E7=A2=BA=E4=BF=9D=E6=B8=88=E3=81=BF?= =?UTF-8?q?=E3=83=90=E3=83=83=E3=83=95=E3=82=A1=E3=81=AB=E5=87=BA=E5=8A=9B?= =?UTF-8?q?=E3=81=99=E3=82=8B=E3=82=B1=E3=83=BC=E3=82=B9=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-string_ex.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/tests/unittests/test-string_ex.cpp b/tests/unittests/test-string_ex.cpp index 59be313ec7..f213eb283b 100644 --- a/tests/unittests/test-string_ex.cpp +++ b/tests/unittests/test-string_ex.cpp @@ -119,13 +119,23 @@ TEST(string_ex, strprintf) /*! @brief 独自定義のフォーマット関数(C-Style風)。 */ -TEST(string_ex, strprintfOutputToArg) +TEST(string_ex, strprintfWOutputToArg) { - std::wstring text; + std::wstring text(1024, L'\0'); strprintf(text, L"%s-%d", L"test", 101); ASSERT_STREQ(L"test-101", text.c_str()); } +/*! + @brief 独自定義のフォーマット関数(C-Style風)。 + */ +TEST(string_ex, strprintfAOutputToArg) +{ + std::string text(1024, '\0'); + strprintf(text, "%ls-of-active-codepage-%d", L"test", 101); + ASSERT_STREQ("test-of-active-codepage-101", text.c_str()); +} + /*! @brief 独自定義のフォーマット関数(空文字出力テスト)。 */ From faad1e4014251aea17760b43ba96ae262d45c4a0 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 26 Feb 2022 15:48:39 +0900 Subject: [PATCH 0949/1024] =?UTF-8?q?=E3=82=A8=E3=83=A9=E3=83=BC=E5=87=A6?= =?UTF-8?q?=E7=90=86=E3=82=92=E6=94=B9=E5=96=84=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/string_ex.cpp | 60 ++++++++++++++++++++++-------- tests/unittests/test-string_ex.cpp | 21 +++++++++++ 2 files changed, 66 insertions(+), 15 deletions(-) diff --git a/sakura_core/util/string_ex.cpp b/sakura_core/util/string_ex.cpp index ed87fd27fc..5b840943cb 100644 --- a/sakura_core/util/string_ex.cpp +++ b/sakura_core/util/string_ex.cpp @@ -25,8 +25,11 @@ #include "StdAfx.h" #include "string_ex.h" +#include #include #include +#include +#include #include "charset/charcode.h" #include "charset/codechecker.h" @@ -36,6 +39,21 @@ int __cdecl my_internal_icmp( const char *s1, const char *s2, unsigned int n, unsigned int dcount, bool flag ); +/*! + * va_list型のスマートポインタを実現するためのdeleterクラス + */ +struct vaList_ender +{ + void operator()(va_list argList) const + { + va_end(argList); + } +}; + +//! va_list型のスマートポインタ +using vaListHolder = std::unique_ptr::type, vaList_ender>; + + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 文字 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // @@ -253,9 +271,8 @@ int vstrprintf(std::wstring& strOut, const WCHAR* pszFormat, va_list& argList) { // _vscwprintf() はフォーマットに必要な文字数を返す。 const int cchOut = ::_vscwprintf(pszFormat, argList); - // 出力文字数が0なら後続処理は要らない。 - if (!cchOut) { - return 0; + if (cchOut <= 0) { + return cchOut; } // 必要なバッファを確保する @@ -295,9 +312,8 @@ int vstrprintf(std::string& strOut, const CHAR* pszFormat, va_list& argList) { // _vscwprintf() はフォーマットに必要な文字数を返す。 const int cchOut = ::_vscprintf(pszFormat, argList); - // 出力文字数が0なら後続処理は要らない。 - if (!cchOut) { - return 0; + if (cchOut <= 0) { + return cchOut; } // 必要なバッファを確保する @@ -374,11 +390,16 @@ int strprintf(std::string& strOut, const CHAR* pszFormat, ...) @param[in] pszFormat フォーマット文字列 @param[in] ... 引数リスト @returns フォーマットされた文字列 + @throws invalid_argument フォーマット文字列が正しくないとき */ std::wstring vstrprintf(const WCHAR* pszFormat, va_list& argList) { + // 出力バッファを確保する std::wstring strOut; + + // 戻り値が0未満ならエラーだが、再現させられないのでハンドルしない vstrprintf(strOut, pszFormat, argList); + return strOut; } @@ -388,11 +409,22 @@ std::wstring vstrprintf(const WCHAR* pszFormat, va_list& argList) @param[in] pszFormat フォーマット文字列 @param[in] ... 引数リスト @returns フォーマットされた文字列 + @throws invalid_argument フォーマット文字列が正しくないとき */ std::string vstrprintf(const CHAR* pszFormat, va_list& argList) { + // 出力バッファを確保する std::string strOut; - vstrprintf(strOut, pszFormat, argList); + + // 戻り値が0未満ならエラー + if (const int nRet = vstrprintf(strOut, pszFormat, argList); + 0 > nRet) + { + std::array msg; + ::strerror_s(msg.data(), msg.size(), nRet); + throw std::invalid_argument(msg.data()); + } + return strOut; } @@ -402,17 +434,16 @@ std::string vstrprintf(const CHAR* pszFormat, va_list& argList) @param[in] pszFormat フォーマット文字列 @param[in] ... 引数リスト @returns フォーマットされた文字列 + @throws invalid_argument フォーマット文字列が正しくないとき */ std::wstring strprintf(const WCHAR* pszFormat, ...) { va_list argList; va_start(argList, pszFormat); - const auto strOut = vstrprintf(pszFormat, argList); - - va_end(argList); + vaListHolder holder(argList); - return strOut; + return vstrprintf(pszFormat, argList); } /*! @@ -421,17 +452,16 @@ std::wstring strprintf(const WCHAR* pszFormat, ...) @param[in] pszFormat フォーマット文字列 @param[in] ... 引数リスト @returns フォーマットされた文字列 + @throws invalid_argument フォーマット文字列が正しくないとき */ std::string strprintf(const CHAR* pszFormat, ...) { va_list argList; va_start(argList, pszFormat); - const auto strOut = vstrprintf(pszFormat, argList); + vaListHolder holder(argList); - va_end(argList); - - return strOut; + return vstrprintf(pszFormat, argList); } // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // diff --git a/tests/unittests/test-string_ex.cpp b/tests/unittests/test-string_ex.cpp index f213eb283b..771070bf8e 100644 --- a/tests/unittests/test-string_ex.cpp +++ b/tests/unittests/test-string_ex.cpp @@ -31,6 +31,8 @@ #include #include +#include + #include "basis/primitive.h" #include "util/string_ex.h" @@ -238,6 +240,25 @@ TEST(string_ex, strprintfA_small_output) EXPECT_STREQ("1234567890123456", text.c_str()); } +/*! + @brief 独自定義のフォーマット関数(C-Style風)。 + + Cロケールを設定し忘れた場合、SJISバイナリから標準文字列への変換は失敗する。 + テスト作成時に混乱する可能性があるので、例外を投げるようにしてある。 + CRT関数が「フォーマットが不正ならクラッシュさせる」という設計なので、 + フォーマットチェック機構としては役立たずである点に注意すること。 + */ +TEST(string_ex, strprintfA_throws) +{ + // Cのロケールを設定し忘れた場合、エラーが返る + setlocale(LC_ALL, "English"); + EXPECT_THROW(strprintf("%ls", L"てすと"), std::invalid_argument); + + // Cのロケールを日本語にした場合、正しく変換できる + setlocale(LC_ALL, "Japanese"); + EXPECT_STREQ("てすと", strprintf("%ls", L"てすと").data()); +} + /*! @brief 独自定義の文字列比較関数。 */ From 04ae8aa718e9875ac67f7679f46324f6c77adca2 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 27 Feb 2022 16:36:53 +0900 Subject: [PATCH 0950/1024] =?UTF-8?q?=E4=BE=8B=E5=A4=96=E3=82=92=E6=8A=95?= =?UTF-8?q?=E3=81=92=E3=82=8B=E6=A7=8B=E9=80=A0=E3=82=92=E3=82=84=E3=82=81?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/string_ex.cpp | 64 ++++++++++-------------------- tests/unittests/test-string_ex.cpp | 19 --------- 2 files changed, 22 insertions(+), 61 deletions(-) diff --git a/sakura_core/util/string_ex.cpp b/sakura_core/util/string_ex.cpp index 5b840943cb..0ff4a1a628 100644 --- a/sakura_core/util/string_ex.cpp +++ b/sakura_core/util/string_ex.cpp @@ -39,21 +39,6 @@ int __cdecl my_internal_icmp( const char *s1, const char *s2, unsigned int n, unsigned int dcount, bool flag ); -/*! - * va_list型のスマートポインタを実現するためのdeleterクラス - */ -struct vaList_ender -{ - void operator()(va_list argList) const - { - va_end(argList); - } -}; - -//! va_list型のスマートポインタ -using vaListHolder = std::unique_ptr::type, vaList_ender>; - - // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // 文字 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // @@ -266,12 +251,13 @@ const char* stristr_j( const char* s1, const char* s2 ) @returns 出力された文字数。NUL終端を含まない。 @retval >= 0 正常終了 @retval < 0 異常終了 -*/ + */ int vstrprintf(std::wstring& strOut, const WCHAR* pszFormat, va_list& argList) { // _vscwprintf() はフォーマットに必要な文字数を返す。 const int cchOut = ::_vscwprintf(pszFormat, argList); if (cchOut <= 0) { + strOut.clear(); return cchOut; } @@ -307,12 +293,13 @@ int vstrprintf(std::wstring& strOut, const WCHAR* pszFormat, va_list& argList) @returns 出力された文字数。NUL終端を含まない。 @retval >= 0 正常終了 @retval < 0 異常終了 -*/ + */ int vstrprintf(std::string& strOut, const CHAR* pszFormat, va_list& argList) { // _vscwprintf() はフォーマットに必要な文字数を返す。 const int cchOut = ::_vscprintf(pszFormat, argList); if (cchOut <= 0) { + strOut.clear(); return cchOut; } @@ -336,7 +323,6 @@ int vstrprintf(std::string& strOut, const CHAR* pszFormat, va_list& argList) strOut.assign(strOut.data(), cchOut); } - return cchOut; } @@ -349,7 +335,7 @@ int vstrprintf(std::string& strOut, const CHAR* pszFormat, va_list& argList) @returns 出力された文字数。NUL終端を含まない。 @retval >= 0 正常終了 @retval < 0 異常終了 -*/ + */ int strprintf(std::wstring& strOut, const WCHAR* pszFormat, ...) { va_list argList; @@ -371,7 +357,7 @@ int strprintf(std::wstring& strOut, const WCHAR* pszFormat, ...) @returns 出力された文字数。NUL終端を含まない。 @retval >= 0 正常終了 @retval < 0 異常終了 -*/ + */ int strprintf(std::string& strOut, const CHAR* pszFormat, ...) { va_list argList; @@ -390,15 +376,14 @@ int strprintf(std::string& strOut, const CHAR* pszFormat, ...) @param[in] pszFormat フォーマット文字列 @param[in] ... 引数リスト @returns フォーマットされた文字列 - @throws invalid_argument フォーマット文字列が正しくないとき -*/ + */ std::wstring vstrprintf(const WCHAR* pszFormat, va_list& argList) { // 出力バッファを確保する std::wstring strOut; - // 戻り値が0未満ならエラーだが、再現させられないのでハンドルしない - vstrprintf(strOut, pszFormat, argList); + const auto nRet = vstrprintf(strOut, pszFormat, argList); + assert(nRet >= 0); return strOut; } @@ -409,21 +394,14 @@ std::wstring vstrprintf(const WCHAR* pszFormat, va_list& argList) @param[in] pszFormat フォーマット文字列 @param[in] ... 引数リスト @returns フォーマットされた文字列 - @throws invalid_argument フォーマット文字列が正しくないとき -*/ + */ std::string vstrprintf(const CHAR* pszFormat, va_list& argList) { // 出力バッファを確保する std::string strOut; - // 戻り値が0未満ならエラー - if (const int nRet = vstrprintf(strOut, pszFormat, argList); - 0 > nRet) - { - std::array msg; - ::strerror_s(msg.data(), msg.size(), nRet); - throw std::invalid_argument(msg.data()); - } + const int nRet = vstrprintf(strOut, pszFormat, argList); + assert(nRet >= 0); return strOut; } @@ -434,16 +412,17 @@ std::string vstrprintf(const CHAR* pszFormat, va_list& argList) @param[in] pszFormat フォーマット文字列 @param[in] ... 引数リスト @returns フォーマットされた文字列 - @throws invalid_argument フォーマット文字列が正しくないとき -*/ + */ std::wstring strprintf(const WCHAR* pszFormat, ...) { va_list argList; va_start(argList, pszFormat); - vaListHolder holder(argList); + const auto strOut = vstrprintf(pszFormat, argList); - return vstrprintf(pszFormat, argList); + va_end(argList); + + return strOut; } /*! @@ -452,16 +431,17 @@ std::wstring strprintf(const WCHAR* pszFormat, ...) @param[in] pszFormat フォーマット文字列 @param[in] ... 引数リスト @returns フォーマットされた文字列 - @throws invalid_argument フォーマット文字列が正しくないとき -*/ + */ std::string strprintf(const CHAR* pszFormat, ...) { va_list argList; va_start(argList, pszFormat); - vaListHolder holder(argList); + const auto strOut = vstrprintf(pszFormat, argList); + + va_end(argList); - return vstrprintf(pszFormat, argList); + return strOut; } // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // diff --git a/tests/unittests/test-string_ex.cpp b/tests/unittests/test-string_ex.cpp index 771070bf8e..8cc6c9b5b8 100644 --- a/tests/unittests/test-string_ex.cpp +++ b/tests/unittests/test-string_ex.cpp @@ -240,25 +240,6 @@ TEST(string_ex, strprintfA_small_output) EXPECT_STREQ("1234567890123456", text.c_str()); } -/*! - @brief 独自定義のフォーマット関数(C-Style風)。 - - Cロケールを設定し忘れた場合、SJISバイナリから標準文字列への変換は失敗する。 - テスト作成時に混乱する可能性があるので、例外を投げるようにしてある。 - CRT関数が「フォーマットが不正ならクラッシュさせる」という設計なので、 - フォーマットチェック機構としては役立たずである点に注意すること。 - */ -TEST(string_ex, strprintfA_throws) -{ - // Cのロケールを設定し忘れた場合、エラーが返る - setlocale(LC_ALL, "English"); - EXPECT_THROW(strprintf("%ls", L"てすと"), std::invalid_argument); - - // Cのロケールを日本語にした場合、正しく変換できる - setlocale(LC_ALL, "Japanese"); - EXPECT_STREQ("てすと", strprintf("%ls", L"てすと").data()); -} - /*! @brief 独自定義の文字列比較関数。 */ From c8cb64d288ea54b98a5d9d36761408cad58d546b Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 28 Feb 2022 22:23:12 +0900 Subject: [PATCH 0951/1024] =?UTF-8?q?wcs=E3=81=A8u8s=E3=82=92=E7=9B=B8?= =?UTF-8?q?=E4=BA=92=E5=A4=89=E6=8F=9B=E3=81=99=E3=82=8B=E9=96=A2=E6=95=B0?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/string_ex.cpp | 136 +++++++++++++++++++++++++++++ sakura_core/util/string_ex.h | 6 ++ tests/unittests/test-string_ex.cpp | 24 +++++ 3 files changed, 166 insertions(+) diff --git a/sakura_core/util/string_ex.cpp b/sakura_core/util/string_ex.cpp index 0ff4a1a628..c0e72ed9d5 100644 --- a/sakura_core/util/string_ex.cpp +++ b/sakura_core/util/string_ex.cpp @@ -626,6 +626,142 @@ void wcstombs_vector(const wchar_t* pSrc, int nSrcLen, std::vector* ret) (*ret)[nNewLen]='\0'; } +/*! + @brief u8文字列を標準文字列に変換する。 + 事前に確保したバッファに結果を書き込む高速バージョン + @param[in, out] strOut 変換された標準文字列を受け取る変数 + @param[in] strInput u8文字列 + @returns 標準文字列 + */ +std::wstring u8stowcs(std::wstring& strOut, std::string_view strInput) +{ + // 必要なバッファのサイズを確認する + const auto cchOut = ::MultiByteToWideChar( + CP_UTF8, + 0, + strInput.data(), + (int)strInput.length(), + nullptr, + 0 + ); + + if (cchOut <= 0) { + strOut.clear(); + return strOut; + } + + // 必要なバッファを確保する + if (const size_t required = cchOut + 1; + strOut.capacity() <= required) + { + strOut.resize(required, L'0'); + } + + // 変換する + ::MultiByteToWideChar( + CP_UTF8, + 0, + strInput.data(), + (int)strInput.length(), + strOut.data(), + (int)strOut.capacity() + ); + + // NUL終端する + if (strOut.empty() && cchOut < 16) { + std::array buf; + ::wcsncpy_s(buf.data(), buf.size(), strOut.data(), cchOut); + strOut.assign(buf.data(), cchOut); + } + else { + strOut.assign(strOut.data(), cchOut); + } + + return strOut; +} + +/*! + @brief 標準文字列をu8文字列に変換する。 + 事前に確保したバッファに結果を書き込む高速バージョン + @param[in, out] strOut 変換されたu8文字列を受け取る変数 + @param[in] strInput 標準文字列 + @returns u8文字列 + */ +std::string wcstou8s(std::string& strOut, std::wstring_view strInput) +{ + // 必要なバッファのサイズを確認する + const auto cchOut= ::WideCharToMultiByte( + CP_UTF8, + 0, + strInput.data(), + (int)strInput.length(), + nullptr, + 0, + nullptr, + nullptr + ); + + if (cchOut <= 0) { + strOut.clear(); + return strOut; + } + + // 必要なバッファを確保する + if (const size_t required = cchOut + 1; + strOut.capacity() <= required) + { + strOut.resize(required, L'0'); + } + + // 変換する + ::WideCharToMultiByte( + CP_UTF8, + 0, + strInput.data(), + (int)strInput.length(), + strOut.data(), + (int)strOut.capacity(), + nullptr, + nullptr + ); + + // NUL終端する + if (strOut.empty() && cchOut < 16) { + std::array buf; + ::strncpy_s(buf.data(), buf.size(), strOut.data(), cchOut); + strOut.assign(buf.data(), cchOut); + } + else { + strOut.assign(strOut.data(), cchOut); + } + + return strOut; +} + +/*! + @brief u8文字列を標準文字列に変換する。 + 動的にバッファを確保する簡易バージョン + @param[in] strInput u8文字列 + @returns 標準文字列 + */ +std::wstring u8stowcs(std::string_view strInput) +{ + std::wstring strOut; + return u8stowcs(strOut, strInput); +} + +/*! + @brief 標準文字列をu8文字列に変換する。 + 動的にバッファを確保する簡易バージョン + @param[in] strInput 標準文字列 + @returns u8文字列 + */ +std::string wcstou8s(std::wstring_view strInput) +{ + std::string strOut; + return wcstou8s(strOut, strInput); +} + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // メモリ // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // diff --git a/sakura_core/util/string_ex.h b/sakura_core/util/string_ex.h index 3755815e16..8bca50dc0e 100644 --- a/sakura_core/util/string_ex.h +++ b/sakura_core/util/string_ex.h @@ -29,6 +29,7 @@ #include #include +#include #include "basis/primitive.h" #include "debug/Debug2.h" @@ -239,6 +240,11 @@ char* wcstombs_new(const wchar_t* pSrc,int nSrcLen); //戻り値はnew[]で確 void wcstombs_vector(const wchar_t* pSrc, std::vector* ret); //戻り値はvectorとして返す。 void wcstombs_vector(const wchar_t* pSrc, int nSrcLen, std::vector* ret); //戻り値はvectorとして返す。 +std::string wcstombs(std::string& strOut, std::wstring_view strInput); +std::wstring u8stowcs(std::wstring& strOut, std::string_view strInput); +std::wstring u8stowcs(std::string_view strInput); +std::string wcstou8s(std::wstring_view strInput); + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // リテラル比較 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // diff --git a/tests/unittests/test-string_ex.cpp b/tests/unittests/test-string_ex.cpp index 8cc6c9b5b8..a7abbd838e 100644 --- a/tests/unittests/test-string_ex.cpp +++ b/tests/unittests/test-string_ex.cpp @@ -240,6 +240,30 @@ TEST(string_ex, strprintfA_small_output) EXPECT_STREQ("1234567890123456", text.c_str()); } +/*! + @brief 標準文字列をu8文字列に変換する。 + */ +TEST(string_ex, wcstou8s) +{ + // wcs→u8変換ができること + ASSERT_STREQ(wcstou8s(L"This is 運命").data(), u8"This is 運命"); + + // 空文字列も問題なく変換できること + ASSERT_STREQ(wcstou8s(L"").data(), u8""); +} + +/*! + @brief u8文字列を標準文字列に変換する。 + */ +TEST(string_ex, u8stowcs) +{ + // u8→wcs変換ができること + ASSERT_STREQ(u8stowcs(u8"This is 運命").data(), L"This is 運命"); + + // 空文字列も問題なく変換できること + ASSERT_STREQ(u8stowcs(u8"").data(), L""); +} + /*! @brief 独自定義の文字列比較関数。 */ From 179ee79ea517c647a54b252c7d1d4be511fae2bd Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 28 Feb 2022 22:23:46 +0900 Subject: [PATCH 0952/1024] =?UTF-8?q?=E6=96=87=E5=AD=97=E5=88=97=E3=81=AE?= =?UTF-8?q?=E7=B5=82=E7=AB=AF=E4=BD=8D=E7=BD=AE=E3=82=92=E8=AA=BF=E6=95=B4?= =?UTF-8?q?=E3=81=99=E3=82=8B=E9=96=A2=E6=95=B0=E3=82=92=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/string_ex.cpp | 74 +++++++++++++++++++--------------- sakura_core/util/string_ex.h | 3 ++ 2 files changed, 45 insertions(+), 32 deletions(-) diff --git a/sakura_core/util/string_ex.cpp b/sakura_core/util/string_ex.cpp index c0e72ed9d5..d3195add81 100644 --- a/sakura_core/util/string_ex.cpp +++ b/sakura_core/util/string_ex.cpp @@ -242,6 +242,44 @@ const char* stristr_j( const char* s1, const char* s2 ) return NULL; } +/*! + @brief 文字列の終端位置を調整する + @param[in, out] strOut 終端位置修正対象のインスタンス + @param[in] cchOut 終端位置 + @returns 終端位置を調整されたインスタンス。 + */ +std::wstring& eos(std::wstring& strOut, size_t cchOut) +{ + if (strOut.empty() && cchOut < 8) { + std::wstring buf(strOut.data()); + strOut.assign(buf.data(), cchOut); + } + else { + strOut.assign(strOut.data(), cchOut); + } + + return strOut; +} + +/*! + @brief 文字列の終端位置を調整する + @param[in, out] strOut 終端位置修正対象のインスタンス + @param[in] cchOut 終端位置 + @returns 終端位置を調整されたインスタンス。 + */ +std::string& eos(std::string& strOut, size_t cchOut) +{ + if (strOut.empty() && cchOut < 16) { + std::string buf(strOut.data()); + strOut.assign(buf.data(), cchOut); + } + else { + strOut.assign(strOut.data(), cchOut); + } + + return strOut; +} + /*! @brief C-Styleのフォーマット文字列を使ってデータを文字列化する。 事前に確保したバッファに結果を書き込む高速バージョン @@ -272,14 +310,7 @@ int vstrprintf(std::wstring& strOut, const WCHAR* pszFormat, va_list& argList) ::vswprintf_s(strOut.data(), strOut.capacity(), pszFormat, argList); // NUL終端する - if (strOut.empty() && cchOut < 8) { - std::array buf; - ::wcsncpy_s(buf.data(), buf.size(), strOut.data(), cchOut); - strOut.assign(buf.data(), cchOut); - } - else { - strOut.assign(strOut.data(), cchOut); - } + eos(strOut, cchOut); return cchOut; } @@ -314,14 +345,7 @@ int vstrprintf(std::string& strOut, const CHAR* pszFormat, va_list& argList) ::vsprintf_s(strOut.data(), strOut.capacity(), pszFormat, argList); // NUL終端する - if (strOut.empty() && cchOut < 16) { - std::array buf; - ::strncpy_s(buf.data(), buf.size(), strOut.data(), cchOut); - strOut.assign(buf.data(), cchOut); - } - else { - strOut.assign(strOut.data(), cchOut); - } + eos(strOut, cchOut); return cchOut; } @@ -668,14 +692,7 @@ std::wstring u8stowcs(std::wstring& strOut, std::string_view strInput) ); // NUL終端する - if (strOut.empty() && cchOut < 16) { - std::array buf; - ::wcsncpy_s(buf.data(), buf.size(), strOut.data(), cchOut); - strOut.assign(buf.data(), cchOut); - } - else { - strOut.assign(strOut.data(), cchOut); - } + eos(strOut, cchOut); return strOut; } @@ -726,14 +743,7 @@ std::string wcstou8s(std::string& strOut, std::wstring_view strInput) ); // NUL終端する - if (strOut.empty() && cchOut < 16) { - std::array buf; - ::strncpy_s(buf.data(), buf.size(), strOut.data(), cchOut); - strOut.assign(buf.data(), cchOut); - } - else { - strOut.assign(strOut.data(), cchOut); - } + eos(strOut, cchOut); return strOut; } diff --git a/sakura_core/util/string_ex.h b/sakura_core/util/string_ex.h index 8bca50dc0e..c5a3a4a209 100644 --- a/sakura_core/util/string_ex.h +++ b/sakura_core/util/string_ex.h @@ -206,6 +206,9 @@ inline int auto_vsprintf_s(WCHAR* buf, size_t nBufCount, const WCHAR* format, va #define auto_sprintf_s(buf, nBufCount, format, ...) ::_sntprintf_s((buf), nBufCount, _TRUNCATE, (format), __VA_ARGS__) #define auto_snprintf_s(buf, nBufCount, format, ...) ::_sntprintf_s((buf), nBufCount, _TRUNCATE, (format), __VA_ARGS__) +std::wstring& eos(std::wstring& strOut, size_t cchOut); +std::string& eos(std::string& strOut, size_t cchOut); + int vstrprintf(std::wstring& strOut, const WCHAR* pszFormat, va_list& argList); int vstrprintf(std::string& strOut, const CHAR* pszFormat, va_list& argList); int strprintf(std::wstring& strOut, const WCHAR* pszFormat, ...); From f4fbe9fae66a5f6442287a0410a93629eef31282 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 28 Feb 2022 22:30:17 +0900 Subject: [PATCH 0953/1024] =?UTF-8?q?=E8=A1=A8=E7=A4=BA=E3=81=97=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=A8=E3=81=97=E3=81=9F=E3=83=A1=E3=83=83=E3=82=BB?= =?UTF-8?q?=E3=83=BC=E3=82=B8=E3=82=92=E5=8F=96=E5=BE=97=E3=81=A7=E3=81=8D?= =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 元から仕組みがあったがgtestで使えないので改良。 gtestではワイド文字列を扱えないのでUTF8で書き出して読み出した文字列をUTF16LEに戻してから評価する。 --- sakura_core/util/MessageBoxF.cpp | 16 ++--- sakura_core/util/MessageBoxF.h | 5 ++ tests/unittests/eval_outputs.hpp | 33 ++++++++++ tests/unittests/test-messageboxf.cpp | 88 ++++++++++++++++++++++++++ tests/unittests/tests1.vcxproj | 2 + tests/unittests/tests1.vcxproj.filters | 6 ++ 6 files changed, 140 insertions(+), 10 deletions(-) create mode 100644 tests/unittests/eval_outputs.hpp create mode 100644 tests/unittests/test-messageboxf.cpp diff --git a/sakura_core/util/MessageBoxF.cpp b/sakura_core/util/MessageBoxF.cpp index ec60da392c..e41abeb5ae 100644 --- a/sakura_core/util/MessageBoxF.cpp +++ b/sakura_core/util/MessageBoxF.cpp @@ -33,9 +33,10 @@ */ #include "StdAfx.h" -#include -#include #include "MessageBoxF.h" + +#include + #include "_main/CProcess.h" #include "window/CEditWnd.h" #include "CSelectLang.h" @@ -50,15 +51,10 @@ int Wrap_MessageBox(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType) // 選択中の言語IDを取得する LANGID wLangId = CSelectLang::getDefaultLangId(); - // 標準エラー出力を取得する - HANDLE hStdErr = ::GetStdHandle( STD_ERROR_HANDLE ); - if( hStdErr ){ - // lpTextの文字列長を求める - DWORD dwTextLen = lpText ? ::wcslen( lpText ) : 0; - + // 標準エラー出力が存在する場合 + if(::GetStdHandle(STD_ERROR_HANDLE)){ // lpText を標準エラー出力に書き出す - DWORD dwWritten = 0; - ::WriteConsoleW( hStdErr, lpText, dwTextLen, &dwWritten, NULL ); + std::clog << (lpText ? wcstou8s(lpText) : "") << std::endl; // いい加減な戻り値を返す。(返り値0は未定義なので本来返らない値を返している) return 0; diff --git a/sakura_core/util/MessageBoxF.h b/sakura_core/util/MessageBoxF.h index 06a3dff475..36a6242a80 100644 --- a/sakura_core/util/MessageBoxF.h +++ b/sakura_core/util/MessageBoxF.h @@ -34,6 +34,11 @@ #define SAKURA_MESSAGEBOXF_542C25FF_34EB_4920_AC1A_DA32919E101B_H_ #pragma once +#include +#include + +#include + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // // メッセージボックス:実装 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // diff --git a/tests/unittests/eval_outputs.hpp b/tests/unittests/eval_outputs.hpp new file mode 100644 index 0000000000..da5b3864a7 --- /dev/null +++ b/tests/unittests/eval_outputs.hpp @@ -0,0 +1,33 @@ +/*! @file */ +/* + Copyright (C) 2022, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include + +#include "util/string_ex.h" + +// 標準エラー出力に吐き出されたメッセージを評価します +#define EXPECT_ERROUT(statementExpression, expected) \ + testing::internal::CaptureStderr(); \ + statementExpression; \ + EXPECT_STREQ(strprintf(L"%s\n", expected).data(), u8stowcs(testing::internal::GetCapturedStderr()).data()) diff --git a/tests/unittests/test-messageboxf.cpp b/tests/unittests/test-messageboxf.cpp new file mode 100644 index 0000000000..fbbf43d774 --- /dev/null +++ b/tests/unittests/test-messageboxf.cpp @@ -0,0 +1,88 @@ +/*! @file */ +/* + Copyright (C) 2022, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include + +#include "eval_outputs.hpp" + +#include "util/MessageBoxF.h" + +#include "_main/CCommandLine.h" +#include "_main/CControlProcess.h" + +/*! + MessageBoxFのテスト + */ +TEST(MessageBoxF, test) +{ + const HWND hWnd = nullptr; + EXPECT_ERROUT(MessageBoxF(hWnd, MB_OK, L"caption", L"%d行をマージしました。", 2), L"2行をマージしました。"); +} + +/*! + 独自仕様メッセージボックス関数群のテスト + */ +TEST(MessageBoxF, customMessageBoxFunctions) +{ + const HWND hWnd = nullptr; + + // コマンドラインのインスタンスを用意する + CCommandLine cCommandLine; + auto pCommandLine = &cCommandLine; + pCommandLine->ParseCommandLine(LR"(-PROF="profile1")", false); + + // プロセスのインスタンスを用意する + CControlProcess dummy(nullptr, LR"(-PROF="profile1")"); + + //エラー:赤丸に「×」[OK] + EXPECT_ERROUT(ErrorMessage(hWnd, L"%d行をマージしました。", 2), L"2行をマージしました。"); + EXPECT_ERROUT(TopErrorMessage(hWnd, L"%d行をマージしました。", 2), L"2行をマージしました。"); + + //警告:三角に「!」[OK] + EXPECT_ERROUT(WarningMessage(hWnd, L"%d行をマージしました。", 2), L"2行をマージしました。"); + EXPECT_ERROUT(TopWarningMessage(hWnd, L"%d行をマージしました。", 2), L"2行をマージしました。"); + + //情報:青丸に「i」[OK] + EXPECT_ERROUT(InfoMessage(hWnd, L"%d行をマージしました。", 2), L"2行をマージしました。"); + EXPECT_ERROUT(TopInfoMessage(hWnd, L"%d行をマージしました。", 2), L"2行をマージしました。"); + + //確認:吹き出しの「?」 [はい][いいえ] 戻り値:IDYES,IDNO + EXPECT_ERROUT(ConfirmMessage(hWnd, L"%d行をマージしました。", 2), L"2行をマージしました。"); + EXPECT_ERROUT(TopConfirmMessage(hWnd, L"%d行をマージしました。", 2), L"2行をマージしました。"); + + //三択:吹き出しの「?」 [はい][いいえ][キャンセル] 戻り値:ID_YES,ID_NO,ID_CANCEL + EXPECT_ERROUT(Select3Message(hWnd, L"%d行をマージしました。", 2), L"2行をマージしました。"); + EXPECT_ERROUT(TopSelect3Message(hWnd, L"%d行をマージしました。", 2), L"2行をマージしました。"); + + //その他メッセージ表示用ボックス[OK] + EXPECT_ERROUT(OkMessage(hWnd, L"%d行をマージしました。", 2), L"2行をマージしました。"); + EXPECT_ERROUT(TopOkMessage(hWnd, L"%d行をマージしました。", 2), L"2行をマージしました。"); + + //タイプ指定メッセージ表示用ボックス + EXPECT_ERROUT(CustomMessage(hWnd, MB_OK, L"%d行をマージしました。", 2), L"2行をマージしました。"); + EXPECT_ERROUT(TopCustomMessage(hWnd, MB_OK, L"%d行をマージしました。", 2), L"2行をマージしました。"); + + //作者に教えて欲しいエラー + EXPECT_ERROUT(PleaseReportToAuthor(hWnd, L"%d行をマージしました。", 2), L"2行をマージしました。"); +} \ No newline at end of file diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index 821e1e3cba..fb1c104c4f 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -142,6 +142,7 @@ + @@ -156,6 +157,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index d94be58f34..7a5fa430b1 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -163,11 +163,17 @@ Test Files + + Test Files + Other Files + + Other Files + From dfcafad60964c24c953317ce4dd310214e1d7fc7 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 28 Feb 2022 22:32:37 +0900 Subject: [PATCH 0954/1024] =?UTF-8?q?VMessageBoxF=E3=81=AE=E3=83=AA?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=AF=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit パフォーマンスに悪影響が出るほどに膨大なテキスト出力に耐える固定長バッファを確保していたのをやめて、動的にバッファ確保するよう変更する。 --- sakura_core/util/MessageBoxF.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/sakura_core/util/MessageBoxF.cpp b/sakura_core/util/MessageBoxF.cpp index e41abeb5ae..8869608d95 100644 --- a/sakura_core/util/MessageBoxF.cpp +++ b/sakura_core/util/MessageBoxF.cpp @@ -105,12 +105,11 @@ int VMessageBoxF( va_list& v //!< [in,out] 引数リスト ) { - hwndOwner=GetMessageBoxOwner(hwndOwner); - //整形 - static WCHAR szBuf[16000]; - auto_vsprintf_s(szBuf,_countof(szBuf),lpText,v); - //API呼び出し - return ::MessageBox( hwndOwner, szBuf, lpCaption, uType); + const auto buf = vstrprintf(lpText,v); + if (!hwndOwner) { + hwndOwner = GetMessageBoxOwner(hwndOwner); + } + return ::MessageBox(hwndOwner, buf.data(), lpCaption, uType); } int MessageBoxF( HWND hwndOwner, UINT uType, LPCWSTR lpCaption, LPCWSTR lpText, ... ) From 2c79076646308841ad452bc142a2ce1c138fed5e Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 2 Mar 2022 01:29:26 +0900 Subject: [PATCH 0955/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C(=E9=96=A2=E6=95=B0?= =?UTF-8?q?=E5=90=8D=E3=81=AE=E8=AA=A4=E8=A8=98=E3=82=92=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/util/string_ex.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/util/string_ex.h b/sakura_core/util/string_ex.h index c5a3a4a209..7d9cd12053 100644 --- a/sakura_core/util/string_ex.h +++ b/sakura_core/util/string_ex.h @@ -243,8 +243,8 @@ char* wcstombs_new(const wchar_t* pSrc,int nSrcLen); //戻り値はnew[]で確 void wcstombs_vector(const wchar_t* pSrc, std::vector* ret); //戻り値はvectorとして返す。 void wcstombs_vector(const wchar_t* pSrc, int nSrcLen, std::vector* ret); //戻り値はvectorとして返す。 -std::string wcstombs(std::string& strOut, std::wstring_view strInput); std::wstring u8stowcs(std::wstring& strOut, std::string_view strInput); +std::string wcstou8s(std::string& strOut, std::wstring_view strInput); std::wstring u8stowcs(std::string_view strInput); std::string wcstou8s(std::wstring_view strInput); From 8afbd8ad2c3d1fdb0161b49bbef100cfb9c9f586 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 2 Mar 2022 01:32:06 +0900 Subject: [PATCH 0956/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C(=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=A4=E3=83=AB=E6=9C=AB=E5=B0=BE=E3=81=AB=E6=94=B9=E8=A1=8C?= =?UTF-8?q?=E3=82=92=E4=BB=98=E5=8A=A0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-messageboxf.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unittests/test-messageboxf.cpp b/tests/unittests/test-messageboxf.cpp index fbbf43d774..b739a63a1d 100644 --- a/tests/unittests/test-messageboxf.cpp +++ b/tests/unittests/test-messageboxf.cpp @@ -85,4 +85,4 @@ TEST(MessageBoxF, customMessageBoxFunctions) //作者に教えて欲しいエラー EXPECT_ERROUT(PleaseReportToAuthor(hWnd, L"%d行をマージしました。", 2), L"2行をマージしました。"); -} \ No newline at end of file +} From 93f45cdd90d05102c4528ee8c282bc911cfa6acf Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 7 Mar 2022 12:47:34 +0900 Subject: [PATCH 0957/1024] =?UTF-8?q?=E4=BF=9D=E5=AE=88:=20=E9=99=A4?= =?UTF-8?q?=E5=A4=96=E8=A8=AD=E5=AE=9A(tests/build/**)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 作らなくなったので削除 --- .github/workflows/sonarscan.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/sonarscan.yml b/.github/workflows/sonarscan.yml index b8e316a8fb..f84773f43b 100644 --- a/.github/workflows/sonarscan.yml +++ b/.github/workflows/sonarscan.yml @@ -149,4 +149,4 @@ jobs: -D"sonar.cfamily.threads=2" ` -D"sonar.coverage.exclusions=help\**\*.js,tests\unittests\coverage.cpp,tools\**\*.js" ` -D"sonar.coverageReportPaths=tests1-coverage.xml" ` - -D"sonar.exclusions=.sonar\**\*,build\**\*,bw-output\**\*,HeaderMake\**\*,tests\build\**\*,tests\googletest\**\*,**\test-*,tests*-*.xml" + -D"sonar.exclusions=.sonar\**\*,build\**\*,bw-output\**\*,HeaderMake\**\*,tests\googletest\**\*,**\test-*,tests*-*.xml" From dfb84bd20f81c556e04344d0bc252069002fa897 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 7 Mar 2022 12:58:35 +0900 Subject: [PATCH 0958/1024] =?UTF-8?q?=E4=BF=9D=E5=AE=88:=20=E9=99=A4?= =?UTF-8?q?=E5=A4=96=E8=A8=AD=E5=AE=9A(tests/stub/**)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit スタブDLLのソースコードを静的解析対象から外す。 --- .github/workflows/sonarscan.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/sonarscan.yml b/.github/workflows/sonarscan.yml index f84773f43b..b2cc0cb852 100644 --- a/.github/workflows/sonarscan.yml +++ b/.github/workflows/sonarscan.yml @@ -147,6 +147,6 @@ jobs: -D"sonar.cfamily.cache.path=.sonar\analysis-cache" ` -D"sonar.cfamily.cppunit.reportPath=tests1-googletest.xml" ` -D"sonar.cfamily.threads=2" ` - -D"sonar.coverage.exclusions=help\**\*.js,tests\unittests\coverage.cpp,tools\**\*.js" ` + -D"sonar.coverage.exclusions=help\**\*.js,tests\unittests\coverage.cpp,tests\stubs\**\*.cpp,tools\**\*.js" ` -D"sonar.coverageReportPaths=tests1-coverage.xml" ` - -D"sonar.exclusions=.sonar\**\*,build\**\*,bw-output\**\*,HeaderMake\**\*,tests\googletest\**\*,**\test-*,tests*-*.xml" + -D"sonar.exclusions=.sonar\**\*,build\**\*,bw-output\**\*,HeaderMake\**\*,tests\googletest\**\,**\test-*,tests\stubs\**\*,tests*-*.xml*" From 372519254835b1d06443a9948a45ad78372d36b3 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 7 Mar 2022 13:04:26 +0900 Subject: [PATCH 0959/1024] =?UTF-8?q?=E9=9D=99=E7=9A=84=E8=A7=A3=E6=9E=90?= =?UTF-8?q?=E3=81=AEPython=E3=83=90=E3=83=BC=E3=82=B8=E3=83=A7=E3=83=B3?= =?UTF-8?q?=E3=82=923=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/sonarscan.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/sonarscan.yml b/.github/workflows/sonarscan.yml index b2cc0cb852..9921c643d9 100644 --- a/.github/workflows/sonarscan.yml +++ b/.github/workflows/sonarscan.yml @@ -147,6 +147,7 @@ jobs: -D"sonar.cfamily.cache.path=.sonar\analysis-cache" ` -D"sonar.cfamily.cppunit.reportPath=tests1-googletest.xml" ` -D"sonar.cfamily.threads=2" ` + -D"sonar.python.version=3" ` -D"sonar.coverage.exclusions=help\**\*.js,tests\unittests\coverage.cpp,tests\stubs\**\*.cpp,tools\**\*.js" ` -D"sonar.coverageReportPaths=tests1-coverage.xml" ` -D"sonar.exclusions=.sonar\**\*,build\**\*,bw-output\**\*,HeaderMake\**\*,tests\googletest\**\,**\test-*,tests\stubs\**\*,tests*-*.xml*" From c9ac16983a95f279723fd253a201cc07a2cb13c4 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Tue, 8 Mar 2022 19:26:10 +0900 Subject: [PATCH 0960/1024] =?UTF-8?q?CPPA=E3=81=AE=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 本体改修なしで実現できるテストを実装。 --- tests/unittests/test-cppa.cpp | 96 ++++++++++++++++++++++++++ tests/unittests/tests1.vcxproj | 1 + tests/unittests/tests1.vcxproj.filters | 3 + 3 files changed, 100 insertions(+) create mode 100644 tests/unittests/test-cppa.cpp diff --git a/tests/unittests/test-cppa.cpp b/tests/unittests/test-cppa.cpp new file mode 100644 index 0000000000..f0ff474472 --- /dev/null +++ b/tests/unittests/test-cppa.cpp @@ -0,0 +1,96 @@ +/*! @file */ +/* + Copyright (C) 2022, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include + +#include "macro/CPPA.h" + +/*! + CPPA::GetDllNameImpのテスト + */ +TEST(CPPA, GetDllNameImp) +{ + CPPA cPpa; + EXPECT_STREQ(L"PPA.DLL", cPpa.GetDllNameImp(0)); +} + +/*! + CPPA::GetDeclarationsのテスト + + PPAに渡す関数名を作る関数 + 戻り値があればfunction、なければprocedureとみなす。 + 対応する型はintとstringのみ。(PPA1.2は実数型にも対応しているが未対応) + 引数は最大8個まで指定できる。(PPAは32個まで対応しているが未対応) + */ +TEST(CPPA, GetDeclarations) +{ + setlocale(LC_ALL, "Japanese"); + + CPPA cPpa; + + // バッファ + std::string buffer(1024, L'\0'); + + // 引数型 int + MacroFuncInfo funcInfo1 = { 1, L"Cmd1", { VT_I4, }, VT_EMPTY }; + cPpa.GetDeclarations(funcInfo1, buffer.data()); + EXPECT_STREQ("procedure S_Cmd1(i0: Integer); index 1;", buffer.data()); + + // 引数型 string + MacroFuncInfo funcInfo2 = { 2, L"Cmd2", { VT_BSTR, }, VT_EMPTY }; + cPpa.GetDeclarations(funcInfo2, buffer.data()); + EXPECT_STREQ("procedure S_Cmd2(s0: string); index 2;", buffer.data()); + + // 引数型 なし + MacroFuncInfo funcInfo3 = { 3, L"Cmd3", { VT_EMPTY, }, VT_EMPTY }; + cPpa.GetDeclarations(funcInfo3, buffer.data()); + EXPECT_STREQ("procedure S_Cmd3; index 3;", buffer.data()); + + // 引数型 不明(intでもstringでもない) + MacroFuncInfo funcInfo4 = { 4, L"Cmd4", { VT_BOOL, }, VT_EMPTY }; + cPpa.GetDeclarations(funcInfo4, buffer.data()); + EXPECT_STREQ("procedure S_Cmd4(u0: Unknown); index 4;", buffer.data()); + + // 戻り型 int + MacroFuncInfo funcInfo5 = { 5, L"Func1", { VT_EMPTY }, VT_I4 }; + cPpa.GetDeclarations(funcInfo5, buffer.data()); + EXPECT_STREQ("function S_Func1: Integer; index 5;", buffer.data()); + + // 戻り型 string + MacroFuncInfo funcInfo6 = { 6, L"Func2", { VT_EMPTY }, VT_BSTR }; + cPpa.GetDeclarations(funcInfo6, buffer.data()); + EXPECT_STREQ("function S_Func2: string; index 6;", buffer.data()); + + // 戻り型 不明(intでもstringでもない) + MacroFuncInfo funcInfo7 = { 7, L"Func3", { VT_EMPTY }, VT_BOOL }; + cPpa.GetDeclarations(funcInfo7, buffer.data()); + EXPECT_STREQ("function S_Func3; index 7;", buffer.data()); + + // 引数をたくさん指定する + VARTYPE varArgEx8[] = { VT_I4, VT_BSTR, VT_I4, VT_BSTR }; + MacroFuncInfoEx funcInfoEx8 = { 8, 8, varArgEx8 }; + MacroFuncInfo funcInfo8 = { 8, L"Func4", { VT_I4, VT_BSTR, VT_I4, VT_BSTR }, VT_BSTR, &funcInfoEx8 }; + cPpa.GetDeclarations(funcInfo8, buffer.data()); + EXPECT_STREQ("function S_Func4(i0: Integer; s1: string; i2: Integer; s3: string; i4: Integer; s5: string; i6: Integer; s7: string): string; index 8;", buffer.data()); +} diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index fb1c104c4f..81f209b6b1 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -110,6 +110,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index 7a5fa430b1..862ad65ed9 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -166,6 +166,9 @@ Test Files + + Test Files + From f7ff50d455cfae92d2f91af9c6711f8b6c4729aa Mon Sep 17 00:00:00 2001 From: berryzplus Date: Thu, 10 Mar 2022 00:46:42 +0900 Subject: [PATCH 0961/1024] =?UTF-8?q?MinGW=E3=83=93=E3=83=AB=E3=83=89?= =?UTF-8?q?=E3=83=90=E3=83=83=E3=83=81=E3=81=AE=E5=87=BA=E5=8A=9B=E5=85=88?= =?UTF-8?q?=E3=83=95=E3=82=A9=E3=83=AB=E3=83=80=E6=8C=87=E5=AE=9A=E3=82=92?= =?UTF-8?q?=E8=A8=82=E6=AD=A3=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ・定義がカレントフォルダからの相対指定になっていたのを修正。 ・出力フォルダが作成済みかどうかチェックするように修正。 ・パスに空白を含む場合の考慮の有無が混在していたのを「考慮あり」に統一。 --- build-gnu.bat | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/build-gnu.bat b/build-gnu.bat index 99ae970ca2..e16df24521 100644 --- a/build-gnu.bat +++ b/build-gnu.bat @@ -33,21 +33,21 @@ path=C:\msys64\mingw64\bin;%path:C:\msys64\mingw64\bin;=% if not defined CMD_NINJA call %~dp0tools\find-tools.bat @rem create output directory, all executables will be placed here. -set OUTDIR=../../../../%platform%/%configuration% -mkdir "%~dp0%platform%\%configuration%" > NUL 2>&1 +set OUTDIR=%~dp0%platform%\%configuration% +if not exist "%OUTDIR%" mkdir /p "%OUTDIR%" > NUL 2>&1 @rem build "sakura_core". set SAKURA_CORE_MAKEFILE=%~dp0sakura_core\Makefile set SAKURA_CORE_BUILD_DIR=%~dp0build\%platform%\%configuration%\sakura_core mkdir "%SAKURA_CORE_BUILD_DIR%" > NUL 2>&1 pushd "%SAKURA_CORE_BUILD_DIR%" -mingw32-make -f "%SAKURA_CORE_MAKEFILE%" MYDEFINES="%MYDEFINES%" MYCFLAGS="%MYCFLAGS%" MYLIBS="%MYLIBS%" OUTDIR=%OUTDIR% StdAfx.h.gch sakura_rc.o +mingw32-make -f "%SAKURA_CORE_MAKEFILE%" MYDEFINES="%MYDEFINES%" MYCFLAGS="%MYCFLAGS%" MYLIBS="%MYLIBS%" OUTDIR="%OUTDIR%" StdAfx.h.gch sakura_rc.o if errorlevel 1 ( echo error 2 errorlevel %errorlevel% popd exit /b 1 ) -mingw32-make -f "%SAKURA_CORE_MAKEFILE%" MYDEFINES="%MYDEFINES%" MYCFLAGS="%MYCFLAGS%" MYLIBS="%MYLIBS%" OUTDIR=%OUTDIR% -j4 +mingw32-make -f "%SAKURA_CORE_MAKEFILE%" MYDEFINES="%MYDEFINES%" MYCFLAGS="%MYCFLAGS%" MYLIBS="%MYLIBS%" OUTDIR="%OUTDIR%" -j4 if errorlevel 1 ( echo error 2 errorlevel %errorlevel% popd @@ -60,7 +60,7 @@ set SAKURA_LANG_EN_US_MAKEFILE=%~dp0sakura_lang_en_US\Makefile set SAKURA_LANG_EN_US_BUILD_DIR=%~dp0build\%platform%\%configuration%\sakura_lang_en_US mkdir "%SAKURA_LANG_EN_US_BUILD_DIR%" > NUL 2>&1 pushd "%SAKURA_LANG_EN_US_BUILD_DIR%" -mingw32-make -f "%SAKURA_LANG_EN_US_MAKEFILE%" MYDEFINES="%MYDEFINES%" SAKURA_CORE=../sakura_core OUTDIR=%OUTDIR% +mingw32-make -f "%SAKURA_LANG_EN_US_MAKEFILE%" MYDEFINES="%MYDEFINES%" SAKURA_CORE=../sakura_core OUTDIR="%OUTDIR%" if errorlevel 1 ( echo error 2 errorlevel %errorlevel% popd @@ -93,7 +93,7 @@ if errorlevel 1 ( popd exit /b 1 ) -mingw32-make -f "%TESTS1_MAKEFILE%" MYDEFINES="%MYDEFINES%" SAKURA_CORE=../sakura_core OUTDIR=%OUTDIR% -j4 +mingw32-make -f "%TESTS1_MAKEFILE%" MYDEFINES="%MYDEFINES%" SAKURA_CORE=../sakura_core OUTDIR="%OUTDIR%" -j4 if errorlevel 1 ( echo error 2 errorlevel %errorlevel% popd From 62f60b4229b29bd7acbf65b20bee07e310e95026 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 12 Mar 2022 13:06:17 +0900 Subject: [PATCH 0962/1024] =?UTF-8?q?DLL=E8=AA=AD=E3=81=BF=E8=BE=BC?= =?UTF-8?q?=E3=81=BF=E5=A4=B1=E6=95=97=E3=81=AE=E3=83=86=E3=82=B9=E3=83=88?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/TExtModule.hpp | 101 ++++++++++++++++++++++++ tests/unittests/test-extmodules.cpp | 103 +++++++++++++++++++++++++ tests/unittests/tests1.vcxproj | 2 + tests/unittests/tests1.vcxproj.filters | 6 ++ 4 files changed, 212 insertions(+) create mode 100644 tests/unittests/TExtModule.hpp create mode 100644 tests/unittests/test-extmodules.cpp diff --git a/tests/unittests/TExtModule.hpp b/tests/unittests/TExtModule.hpp new file mode 100644 index 0000000000..3e34e3cb70 --- /dev/null +++ b/tests/unittests/TExtModule.hpp @@ -0,0 +1,101 @@ +/*! @file */ +/* + Copyright (C) 2022, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include + +#include "extmodule/CDllHandler.h" + +#include + +/*! + 外部DLL読み込みをテストするためのテンプレートクラス + + CDllImp派生クラスを指定して使う。 + テストではロード処理後の挙動をチェックするので、コンストラクタでinitしてしまう。 + */ +template, std::nullptr_t> = nullptr> +class TExtModule : public T { +private: + std::wstring_view dllName = L""; + +protected: + //! DLLパスを返す + LPCWSTR GetDllNameImp(int index) override { + return dllName.empty() ? T::GetDllNameImp(index) : dllName.data(); + } + +public: + //! コンストラクタ + explicit TExtModule(std::wstring_view path = L"") + : dllName(path) { + // この関数の戻り値型はC++では推奨されない。 + // あちこちで警告が出るとうっとおしいので呼出箇所をまとめておく + // 将来的には、適切な戻り値型に変更したい。 + this->InitDll(nullptr); + } +}; + +/*! + 外部DLLの読み込み失敗をテストするためのテンプレートクラス + + CDllImp派生クラスを指定して使う。 + DLL読み込み失敗をテストするために「あり得ないパス」を指定する。 + */ +template +class TUnresolvedExtModule : public TExtModule { +private: + // あり得ないパス + static constexpr auto& BadDllName = LR"(>\(^o^)\<)"; + + // 基底クラスの型 + using Base = TExtModule; + +public: + TUnresolvedExtModule() + : Base(BadDllName) { + } +}; + +/*! + 外部DLLの読み込み失敗をテストするためのテンプレートクラス + + CDllImp派生クラスを指定して使う。 + エクスポート関数のアドレス取得失敗をテストするためにMSHTMLを指定する。 + MSHTMLは、Windowsには必ず存在していてサクラエディタでは使わないもの。 + 将来的にMSHTMLを使いたくなったら他のDLLを選定して定義を修正すること。 + */ +template +class TUnsufficientExtModule : public TExtModule { +private: + // サクラエディタでは利用しないWindowsのDLL名 + static constexpr auto& UnusedWindowsDllName = L"MSHTML.DLL"; + + // 基底クラスの型 + using Base = TExtModule; + +public: + TUnsufficientExtModule() + : Base(UnusedWindowsDllName) { + } +}; diff --git a/tests/unittests/test-extmodules.cpp b/tests/unittests/test-extmodules.cpp new file mode 100644 index 0000000000..b6e02f2d1c --- /dev/null +++ b/tests/unittests/test-extmodules.cpp @@ -0,0 +1,103 @@ +/*! @file */ +/* + Copyright (C) 2022, Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include + +#include "TExtModule.hpp" + +#include // CHtmlHelp.hで必要 + +#include "extmodule/CBregexpDll2.h" +#include "extmodule/CHtmlHelp.h" +//#include "extmodule/CIcu4cI18n.h" //継承不可なのでテストできない +//#include "extmodule/CMigemo.h" //TSingletonなのでテストできない +//#include "extmodule/CUchardet.h" //継承不可なのでテストできない +//#include "extmodule/CUxTheme.h" //TSingletonなのでテストできない +#include "macro/CPPA.h" +//#include "plugin/CDllPlugin.h" //継承不可なのでテストできない + +/*! + 外部DLLの読み込みテスト + */ +template +class LoadTest : public ::testing::Test { +}; + +//! パラメータテストであるとマークする +TYPED_TEST_CASE_P(LoadTest); + +/*! + 読み込み失敗のテスト + + DLLが見つからなくて失敗するケース + */ +TYPED_TEST_P(LoadTest, FailedToLoadLibrary) +{ + // テスト対象のCDllImpl派生クラスをテストするための型を定義する + using ExtModule = TUnresolvedExtModule; + + // テストクラスをインスタンス化する + ExtModule extModule; + + // DLLが見つからなくてIsAvailableはfalseになる + EXPECT_FALSE(extModule.IsAvailable()); +} + +/*! + 読み込み失敗のテスト + + エクスポート関数が取得できなくて失敗するケース + */ +TYPED_TEST_P(LoadTest, FailedToGetProcAddress) +{ + // テスト対象のCDllImpl派生クラスをテストするための型を定義する + using ExtModule = TUnsufficientExtModule; + + // テストクラスをインスタンス化する + ExtModule extModule; + + // エクスポート関数の一部が見つからなくてIsAvailableはfalseになる + EXPECT_FALSE(extModule.IsAvailable()); +} + +// test suiteを登録する +REGISTER_TYPED_TEST_SUITE_P( + LoadTest, + FailedToLoadLibrary, FailedToGetProcAddress); + +/*! + テスト対象(外部DLLを読み込むクラス) + + CDllImp派生クラスである必要がある。 + */ +using ExtModuleImplementations = ::testing::Types< + CBregexpDll2, + CHtmlHelp, + CPPA>; + +//! パラメータテストをインスタンス化する +INSTANTIATE_TYPED_TEST_SUITE_P( + ExtModule, + LoadTest, + ExtModuleImplementations); diff --git a/tests/unittests/tests1.vcxproj b/tests/unittests/tests1.vcxproj index 81f209b6b1..4cb4a8f04e 100644 --- a/tests/unittests/tests1.vcxproj +++ b/tests/unittests/tests1.vcxproj @@ -115,6 +115,7 @@ + @@ -159,6 +160,7 @@ + diff --git a/tests/unittests/tests1.vcxproj.filters b/tests/unittests/tests1.vcxproj.filters index 862ad65ed9..01cb428f20 100644 --- a/tests/unittests/tests1.vcxproj.filters +++ b/tests/unittests/tests1.vcxproj.filters @@ -169,6 +169,9 @@ Test Files + + Test Files + @@ -177,6 +180,9 @@ Other Files + + Other Files + From 3b06a42a11e8c056f419522ce87f338d1934bf38 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 12 Mar 2022 13:46:07 +0900 Subject: [PATCH 0963/1024] =?UTF-8?q?=E6=97=A2=E5=AD=98=E3=82=B3=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=81=AE=E4=B8=8D=E9=83=BD=E5=90=88=E3=82=92=E8=A7=A3?= =?UTF-8?q?=E6=B6=88=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 比較的簡単に対処できる不都合を解消する ・ヘッダーの参照不足で、利用側コードにincludeを書かないといけない ・クラス宣言が継承不可になってるためにテストを書けない --- sakura_core/extmodule/CHtmlHelp.h | 2 ++ sakura_core/extmodule/CIcu4cI18n.h | 2 +- sakura_core/extmodule/CUchardet.h | 2 +- tests/unittests/test-extmodules.cpp | 8 ++++---- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/sakura_core/extmodule/CHtmlHelp.h b/sakura_core/extmodule/CHtmlHelp.h index ab42f3a766..c5d37b5fa8 100644 --- a/sakura_core/extmodule/CHtmlHelp.h +++ b/sakura_core/extmodule/CHtmlHelp.h @@ -35,6 +35,8 @@ #define SAKURA_CHTMLHELP_7003298B_3900_42FD_9A02_1BCD4E9A8546_H_ #pragma once +#include + #include "CDllHandler.h" /*! diff --git a/sakura_core/extmodule/CIcu4cI18n.h b/sakura_core/extmodule/CIcu4cI18n.h index cef065fa1d..7787221f76 100644 --- a/sakura_core/extmodule/CIcu4cI18n.h +++ b/sakura_core/extmodule/CIcu4cI18n.h @@ -39,7 +39,7 @@ typedef enum UErrorCode { /*! * ICU4C の i18n ライブラリ(icuin.dll) をラップするクラス */ -class CIcu4cI18n final : public CDllImp +class CIcu4cI18n : public CDllImp { // DLL関数型定義 typedef UCharsetDetector* (__cdecl *ucsdet_open_t)(UErrorCode *status); diff --git a/sakura_core/extmodule/CUchardet.h b/sakura_core/extmodule/CUchardet.h index 7b2ae68b6f..e5e2f6a655 100644 --- a/sakura_core/extmodule/CUchardet.h +++ b/sakura_core/extmodule/CUchardet.h @@ -31,7 +31,7 @@ typedef struct uchardet * uchardet_t; /*! * uchardet ライブラリ(uchardet.dll) をラップするクラス */ -class CUchardet final : public CDllImp +class CUchardet : public CDllImp { public: // DLL関数ポインタ diff --git a/tests/unittests/test-extmodules.cpp b/tests/unittests/test-extmodules.cpp index b6e02f2d1c..b81e495f27 100644 --- a/tests/unittests/test-extmodules.cpp +++ b/tests/unittests/test-extmodules.cpp @@ -26,13 +26,11 @@ #include "TExtModule.hpp" -#include // CHtmlHelp.hで必要 - #include "extmodule/CBregexpDll2.h" #include "extmodule/CHtmlHelp.h" -//#include "extmodule/CIcu4cI18n.h" //継承不可なのでテストできない +#include "extmodule/CIcu4cI18n.h" //#include "extmodule/CMigemo.h" //TSingletonなのでテストできない -//#include "extmodule/CUchardet.h" //継承不可なのでテストできない +#include "extmodule/CUchardet.h" //#include "extmodule/CUxTheme.h" //TSingletonなのでテストできない #include "macro/CPPA.h" //#include "plugin/CDllPlugin.h" //継承不可なのでテストできない @@ -94,6 +92,8 @@ REGISTER_TYPED_TEST_SUITE_P( using ExtModuleImplementations = ::testing::Types< CBregexpDll2, CHtmlHelp, + CIcu4cI18n, + CUchardet, CPPA>; //! パラメータテストをインスタンス化する From c8a993a9232c6e6a2b02f4205cd5a858ae9799b0 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 14 Mar 2022 10:51:47 +0900 Subject: [PATCH 0964/1024] =?UTF-8?q?CMigemo=E3=82=92=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E5=8F=AF=E8=83=BD=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit プロセス内に1つのみ存在するシングルインスタンスにする --- sakura_core/_main/CNormalProcess.h | 1 + sakura_core/extmodule/CMigemo.h | 6 ++---- tests/unittests/test-extmodules.cpp | 3 ++- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sakura_core/_main/CNormalProcess.h b/sakura_core/_main/CNormalProcess.h index 96e170d49f..d517594b4c 100644 --- a/sakura_core/_main/CNormalProcess.h +++ b/sakura_core/_main/CNormalProcess.h @@ -50,5 +50,6 @@ class CNormalProcess final : public CProcess { private: CEditApp* m_pcEditApp; //2007.10.23 kobake + CMigemo m_cMigemo; }; #endif /* SAKURA_CNORMALPROCESS_F2808B31_61DC_4BE0_8661_9626478AC7F9_H_ */ diff --git a/sakura_core/extmodule/CMigemo.h b/sakura_core/extmodule/CMigemo.h index 87a8fdb1ee..d9d5587ce9 100644 --- a/sakura_core/extmodule/CMigemo.h +++ b/sakura_core/extmodule/CMigemo.h @@ -55,11 +55,9 @@ typedef struct _migemo migemo; #include "CDllHandler.h" #include "util/design_template.h" -class CMigemo : public TSingleton, public CDllImp { - friend class TSingleton; - CMigemo(){} - +class CMigemo : public CDllImp, public TSingleInstance { public: + CMigemo() noexcept = default; virtual ~CMigemo(); // Entry Point diff --git a/tests/unittests/test-extmodules.cpp b/tests/unittests/test-extmodules.cpp index b81e495f27..957ef4f04d 100644 --- a/tests/unittests/test-extmodules.cpp +++ b/tests/unittests/test-extmodules.cpp @@ -29,7 +29,7 @@ #include "extmodule/CBregexpDll2.h" #include "extmodule/CHtmlHelp.h" #include "extmodule/CIcu4cI18n.h" -//#include "extmodule/CMigemo.h" //TSingletonなのでテストできない +#include "extmodule/CMigemo.h" //TSingletonなのでテストできない #include "extmodule/CUchardet.h" //#include "extmodule/CUxTheme.h" //TSingletonなのでテストできない #include "macro/CPPA.h" @@ -93,6 +93,7 @@ using ExtModuleImplementations = ::testing::Types< CBregexpDll2, CHtmlHelp, CIcu4cI18n, + CMigemo, CUchardet, CPPA>; From 22b2a51fd2a8da467951ca83f24005daf15f4592 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 14 Mar 2022 12:44:53 +0900 Subject: [PATCH 0965/1024] =?UTF-8?q?CDllImp=E3=81=AE=E3=82=B3=E3=83=B3?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=83=A9=E3=82=AF=E3=82=BF=E3=82=92noexcept?= =?UTF-8?q?=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/extmodule/CDllHandler.cpp | 3 +-- sakura_core/extmodule/CDllHandler.h | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/sakura_core/extmodule/CDllHandler.cpp b/sakura_core/extmodule/CDllHandler.cpp index 492fe89cb7..6528a9551c 100644 --- a/sakura_core/extmodule/CDllHandler.cpp +++ b/sakura_core/extmodule/CDllHandler.cpp @@ -37,8 +37,7 @@ // 生成と破棄 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -CDllImp::CDllImp() - : m_hInstance( NULL ) +CDllImp::CDllImp() noexcept { } diff --git a/sakura_core/extmodule/CDllHandler.h b/sakura_core/extmodule/CDllHandler.h index 40d4f86fc2..f41e1be18e 100644 --- a/sakura_core/extmodule/CDllHandler.h +++ b/sakura_core/extmodule/CDllHandler.h @@ -109,7 +109,7 @@ class CDllImp{ // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // public: //コンストラクタ・デストラクタ - CDllImp(); + CDllImp()noexcept; CDllImp(const Me&) = delete; Me& operator = (const Me&) = delete; CDllImp(Me&&) noexcept = delete; @@ -210,7 +210,7 @@ class CDllImp{ // メンバ変数 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // private: - HINSTANCE m_hInstance; + HINSTANCE m_hInstance = nullptr; std::wstring m_strLoadedDllName; }; #endif /* SAKURA_CDLLHANDLER_B27A5A93_E49F_4618_8958_6883D63BBABB_H_ */ From bb10431620c46297a7f476fbdbfa3ea084cc89da Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 14 Mar 2022 12:58:11 +0900 Subject: [PATCH 0966/1024] =?UTF-8?q?Revert=20"CDllImp=E3=81=AE=E3=82=B3?= =?UTF-8?q?=E3=83=B3=E3=82=B9=E3=83=88=E3=83=A9=E3=82=AF=E3=82=BF=E3=82=92?= =?UTF-8?q?noexcept=E3=81=AB=E3=81=99=E3=82=8B"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 22b2a51fd2a8da467951ca83f24005daf15f4592. --- sakura_core/extmodule/CDllHandler.cpp | 3 ++- sakura_core/extmodule/CDllHandler.h | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/sakura_core/extmodule/CDllHandler.cpp b/sakura_core/extmodule/CDllHandler.cpp index 6528a9551c..492fe89cb7 100644 --- a/sakura_core/extmodule/CDllHandler.cpp +++ b/sakura_core/extmodule/CDllHandler.cpp @@ -37,7 +37,8 @@ // 生成と破棄 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -CDllImp::CDllImp() noexcept +CDllImp::CDllImp() + : m_hInstance( NULL ) { } diff --git a/sakura_core/extmodule/CDllHandler.h b/sakura_core/extmodule/CDllHandler.h index f41e1be18e..40d4f86fc2 100644 --- a/sakura_core/extmodule/CDllHandler.h +++ b/sakura_core/extmodule/CDllHandler.h @@ -109,7 +109,7 @@ class CDllImp{ // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // public: //コンストラクタ・デストラクタ - CDllImp()noexcept; + CDllImp(); CDllImp(const Me&) = delete; Me& operator = (const Me&) = delete; CDllImp(Me&&) noexcept = delete; @@ -210,7 +210,7 @@ class CDllImp{ // メンバ変数 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // private: - HINSTANCE m_hInstance = nullptr; + HINSTANCE m_hInstance; std::wstring m_strLoadedDllName; }; #endif /* SAKURA_CDLLHANDLER_B27A5A93_E49F_4618_8958_6883D63BBABB_H_ */ From 586d0e2fb19c8d4170ebda88b048e5419649b1b1 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 14 Mar 2022 12:59:20 +0900 Subject: [PATCH 0967/1024] =?UTF-8?q?CMigemo=E3=82=B3=E3=83=B3=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=83=A9=E3=82=AF=E3=82=BF=E3=81=AEnoexcept=E3=82=92?= =?UTF-8?q?=E5=A4=96=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/extmodule/CMigemo.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/extmodule/CMigemo.h b/sakura_core/extmodule/CMigemo.h index d9d5587ce9..ddf3fb5fa2 100644 --- a/sakura_core/extmodule/CMigemo.h +++ b/sakura_core/extmodule/CMigemo.h @@ -57,7 +57,7 @@ typedef struct _migemo migemo; class CMigemo : public CDllImp, public TSingleInstance { public: - CMigemo() noexcept = default; + CMigemo() = default; virtual ~CMigemo(); // Entry Point From 49523cbea2030f13df1043e57dc9f757f085a602 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 19 Mar 2022 14:59:53 +0900 Subject: [PATCH 0968/1024] =?UTF-8?q?Revert=20"MinGW=E3=83=93=E3=83=AB?= =?UTF-8?q?=E3=83=89=E3=83=90=E3=83=83=E3=83=81=E3=81=AE=E5=87=BA=E5=8A=9B?= =?UTF-8?q?=E5=85=88=E3=83=95=E3=82=A9=E3=83=AB=E3=83=80=E6=8C=87=E5=AE=9A?= =?UTF-8?q?=E3=82=92=E8=A8=82=E6=AD=A3=E3=81=99=E3=82=8B"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit f7ff50d455cfae92d2f91af9c6711f8b6c4729aa. --- build-gnu.bat | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/build-gnu.bat b/build-gnu.bat index e16df24521..99ae970ca2 100644 --- a/build-gnu.bat +++ b/build-gnu.bat @@ -33,21 +33,21 @@ path=C:\msys64\mingw64\bin;%path:C:\msys64\mingw64\bin;=% if not defined CMD_NINJA call %~dp0tools\find-tools.bat @rem create output directory, all executables will be placed here. -set OUTDIR=%~dp0%platform%\%configuration% -if not exist "%OUTDIR%" mkdir /p "%OUTDIR%" > NUL 2>&1 +set OUTDIR=../../../../%platform%/%configuration% +mkdir "%~dp0%platform%\%configuration%" > NUL 2>&1 @rem build "sakura_core". set SAKURA_CORE_MAKEFILE=%~dp0sakura_core\Makefile set SAKURA_CORE_BUILD_DIR=%~dp0build\%platform%\%configuration%\sakura_core mkdir "%SAKURA_CORE_BUILD_DIR%" > NUL 2>&1 pushd "%SAKURA_CORE_BUILD_DIR%" -mingw32-make -f "%SAKURA_CORE_MAKEFILE%" MYDEFINES="%MYDEFINES%" MYCFLAGS="%MYCFLAGS%" MYLIBS="%MYLIBS%" OUTDIR="%OUTDIR%" StdAfx.h.gch sakura_rc.o +mingw32-make -f "%SAKURA_CORE_MAKEFILE%" MYDEFINES="%MYDEFINES%" MYCFLAGS="%MYCFLAGS%" MYLIBS="%MYLIBS%" OUTDIR=%OUTDIR% StdAfx.h.gch sakura_rc.o if errorlevel 1 ( echo error 2 errorlevel %errorlevel% popd exit /b 1 ) -mingw32-make -f "%SAKURA_CORE_MAKEFILE%" MYDEFINES="%MYDEFINES%" MYCFLAGS="%MYCFLAGS%" MYLIBS="%MYLIBS%" OUTDIR="%OUTDIR%" -j4 +mingw32-make -f "%SAKURA_CORE_MAKEFILE%" MYDEFINES="%MYDEFINES%" MYCFLAGS="%MYCFLAGS%" MYLIBS="%MYLIBS%" OUTDIR=%OUTDIR% -j4 if errorlevel 1 ( echo error 2 errorlevel %errorlevel% popd @@ -60,7 +60,7 @@ set SAKURA_LANG_EN_US_MAKEFILE=%~dp0sakura_lang_en_US\Makefile set SAKURA_LANG_EN_US_BUILD_DIR=%~dp0build\%platform%\%configuration%\sakura_lang_en_US mkdir "%SAKURA_LANG_EN_US_BUILD_DIR%" > NUL 2>&1 pushd "%SAKURA_LANG_EN_US_BUILD_DIR%" -mingw32-make -f "%SAKURA_LANG_EN_US_MAKEFILE%" MYDEFINES="%MYDEFINES%" SAKURA_CORE=../sakura_core OUTDIR="%OUTDIR%" +mingw32-make -f "%SAKURA_LANG_EN_US_MAKEFILE%" MYDEFINES="%MYDEFINES%" SAKURA_CORE=../sakura_core OUTDIR=%OUTDIR% if errorlevel 1 ( echo error 2 errorlevel %errorlevel% popd @@ -93,7 +93,7 @@ if errorlevel 1 ( popd exit /b 1 ) -mingw32-make -f "%TESTS1_MAKEFILE%" MYDEFINES="%MYDEFINES%" SAKURA_CORE=../sakura_core OUTDIR="%OUTDIR%" -j4 +mingw32-make -f "%TESTS1_MAKEFILE%" MYDEFINES="%MYDEFINES%" SAKURA_CORE=../sakura_core OUTDIR=%OUTDIR% -j4 if errorlevel 1 ( echo error 2 errorlevel %errorlevel% popd From 090c6a4aaa59b8a63165562f1f859c1ef66c93ac Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 19 Mar 2022 15:10:22 +0900 Subject: [PATCH 0969/1024] =?UTF-8?q?MinGW=E3=83=93=E3=83=AB=E3=83=89?= =?UTF-8?q?=E3=83=90=E3=83=83=E3=83=81=E3=81=AE=E5=87=BA=E5=8A=9B=E5=85=88?= =?UTF-8?q?=E3=83=95=E3=82=A9=E3=83=AB=E3=83=80=E6=8C=87=E5=AE=9A=E3=82=92?= =?UTF-8?q?=E8=A8=82=E6=AD=A3=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ・定義がカレントフォルダからの相対指定になっていたのを修正。 --- build-gnu.bat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-gnu.bat b/build-gnu.bat index 99ae970ca2..7834a03f1c 100644 --- a/build-gnu.bat +++ b/build-gnu.bat @@ -33,7 +33,7 @@ path=C:\msys64\mingw64\bin;%path:C:\msys64\mingw64\bin;=% if not defined CMD_NINJA call %~dp0tools\find-tools.bat @rem create output directory, all executables will be placed here. -set OUTDIR=../../../../%platform%/%configuration% +set OUTDIR=%~dp0%platform%\%configuration% mkdir "%~dp0%platform%\%configuration%" > NUL 2>&1 @rem build "sakura_core". From 05c2674e5383362747bb07dd764b41944c6a8f29 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 19 Mar 2022 15:35:23 +0900 Subject: [PATCH 0970/1024] =?UTF-8?q?MinGW=E3=83=93=E3=83=AB=E3=83=89?= =?UTF-8?q?=E3=83=90=E3=83=83=E3=83=81=E3=81=AE=E5=87=BA=E5=8A=9B=E5=85=88?= =?UTF-8?q?=E3=83=95=E3=82=A9=E3=83=AB=E3=83=80=E6=8C=87=E5=AE=9A=E3=82=92?= =?UTF-8?q?=E7=B5=B1=E4=B8=80=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ・出力フォルダの作成に変数OUTDIRを使うように修正。 ・パスに空白を含む場合の考慮の有無が混在していたのを「考慮なし」に統一。 --- build-gnu.bat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-gnu.bat b/build-gnu.bat index 7834a03f1c..3c4aa390ca 100644 --- a/build-gnu.bat +++ b/build-gnu.bat @@ -34,7 +34,7 @@ if not defined CMD_NINJA call %~dp0tools\find-tools.bat @rem create output directory, all executables will be placed here. set OUTDIR=%~dp0%platform%\%configuration% -mkdir "%~dp0%platform%\%configuration%" > NUL 2>&1 +mkdir %OUTDIR% > NUL 2>&1 @rem build "sakura_core". set SAKURA_CORE_MAKEFILE=%~dp0sakura_core\Makefile From cff81c14b8e2b36f055e34be8937fa1dca6fddb7 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 19 Mar 2022 22:55:14 +0900 Subject: [PATCH 0971/1024] Update tests/unittests/test-extmodules.cpp --- tests/unittests/test-extmodules.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unittests/test-extmodules.cpp b/tests/unittests/test-extmodules.cpp index 957ef4f04d..f097b439cb 100644 --- a/tests/unittests/test-extmodules.cpp +++ b/tests/unittests/test-extmodules.cpp @@ -29,7 +29,7 @@ #include "extmodule/CBregexpDll2.h" #include "extmodule/CHtmlHelp.h" #include "extmodule/CIcu4cI18n.h" -#include "extmodule/CMigemo.h" //TSingletonなのでテストできない +#include "extmodule/CMigemo.h" #include "extmodule/CUchardet.h" //#include "extmodule/CUxTheme.h" //TSingletonなのでテストできない #include "macro/CPPA.h" From 89d6456cdcd98d4aed7631b5e162029d23e3470a Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Mon, 21 Mar 2022 13:41:31 +0900 Subject: [PATCH 0972/1024] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CRuler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/view/CRuler.cpp b/sakura_core/view/CRuler.cpp index b565850514..d565832eae 100644 --- a/sakura_core/view/CRuler.cpp +++ b/sakura_core/view/CRuler.cpp @@ -123,7 +123,7 @@ void CRuler::DrawRulerBg(CGraphics& gr) } if (m_hFont == NULL) { LOGFONT lf = {0}; - lf.lfHeight = 1 - DpiScaleY(pCommon->m_sWindow.m_nRulerHeight); // 2002/05/13 ai + lf.lfHeight = DpiScaleY(1 - pCommon->m_sWindow.m_nRulerHeight); // 2002/05/13 ai lf.lfWidth = 0; lf.lfEscapement = 0; lf.lfOrientation = 0; From 7048b81e7e4b932d375e8ea79ce52d1c33d865be Mon Sep 17 00:00:00 2001 From: katsuhisa yuasa Date: Sun, 17 Apr 2022 14:46:37 +0900 Subject: [PATCH 0973/1024] =?UTF-8?q?=E6=8C=87=E5=AE=9A=E8=A1=8C=E3=81=B8?= =?UTF-8?q?=E3=82=B8=E3=83=A3=E3=83=B3=E3=83=97=E3=81=99=E3=82=8B=20IDD=5F?= =?UTF-8?q?JUMP=20=E3=81=AE=E3=83=AA=E3=82=BD=E3=83=BC=E3=82=B9=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 行番号入力のEDITTEXTの横幅を広くして6桁より多い桁数を入力できるように変更、ES_NUMBERスタイルを付加して数値入力に限定 --- sakura_core/sakura_rc.rc | 4 ++-- sakura_lang_en_US/sakura_lang_rc.rc | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index 79e4d6f6c7..fc3d499df3 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -89,8 +89,8 @@ EXSTYLE WS_EX_CONTEXTHELP CAPTION "指定行へジャンプ" FONT 9, "MS Pゴシック", 0, 0, 0x1 BEGIN - LTEXT "行番号(&N)",IDC_STATIC,5,6,34,10 - EDITTEXT IDC_EDIT_LINENUM,43,4,40,12 + LTEXT "行番号(&N)",IDC_STATIC,5,4,34,10 + EDITTEXT IDC_EDIT_LINENUM,40,4,50,12, ES_NUMBER CONTROL "Spin1",IDC_SPIN_LINENUM,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,82,4,9,12 CONTROL "折り返し単位の行番号(&R)",IDC_RADIO_LINENUM_LAYOUT,"Button",BS_AUTORADIOBUTTON | WS_GROUP,94,5,97,10 CONTROL "改行単位の行番号(&W)",IDC_RADIO_LINENUM_CRLF,"Button",BS_AUTORADIOBUTTON,94,20,87,10 diff --git a/sakura_lang_en_US/sakura_lang_rc.rc b/sakura_lang_en_US/sakura_lang_rc.rc index 4928a3a56b..49b95a4944 100644 --- a/sakura_lang_en_US/sakura_lang_rc.rc +++ b/sakura_lang_en_US/sakura_lang_rc.rc @@ -93,10 +93,10 @@ CAPTION "Jump to Line" FONT 9, "Tahoma", 0, 0, 0x1 BEGIN LTEXT "Line &Number",IDC_STATIC,5,6,34,8 - EDITTEXT IDC_EDIT_LINENUM,43,4,40,12 + EDITTEXT IDC_EDIT_LINENUM,34,4,54,12, ES_NUMBER CONTROL "Spin1",IDC_SPIN_LINENUM,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,82,4,9,12 CONTROL "Use Layout(&R)",IDC_RADIO_LINENUM_LAYOUT,"Button",BS_AUTORADIOBUTTON | WS_GROUP,94,5,97,10 - CONTROL "Use CRLF(&W)",IDC_RADIO_LINENUM_CRLF,"Button",BS_AUTORADIOBUTTON,102,20,87,10 + CONTROL "Use CRLF(&W)",IDC_RADIO_LINENUM_CRLF,"Button",BS_AUTORADIOBUTTON,94,20,87,10 CONTROL "&PL/SQL Compiler Error Processing",IDC_CHECK_PLSQL, "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,10,50,137,10 LTEXT "Line as a block of &1 Line",IDC_LABEL_PLSQL2,92,66,92,8,NOT WS_GROUP From 50443a078c0033dd575dc304ac15c23ef7916559 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sat, 30 Apr 2022 14:19:17 +0900 Subject: [PATCH 0974/1024] Revert change at #1512 partially MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit N_SHAREDATA_VERSIONの修正ミスを訂正します。 SonarCloudの指摘に従ってdefineをconstexprに置換しましたが、既存のCマクロに悪影響が出るので元に戻します。 --- sakura_core/config/system_constants.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/config/system_constants.h b/sakura_core/config/system_constants.h index 2e9ed365ab..c66120078c 100644 --- a/sakura_core/config/system_constants.h +++ b/sakura_core/config/system_constants.h @@ -555,7 +555,7 @@ -- バージョン1000以降を本家統合までの間、使わせてください。かなり頻繁に構成が変更されると思われるので。by kobake 2008.03.02 */ -constexpr unsigned N_SHAREDATA_VERSION = 177; +#define N_SHAREDATA_VERSION 177 #define STR_SHAREDATA_VERSION NUM_TO_STR(N_SHAREDATA_VERSION) #define GSTR_SHAREDATA (L"SakuraShareData" _T(CON_SKR_MACHINE_SUFFIX_) _T(_CODE_SUFFIX_) _T(_DEBUG_SUFFIX_) _T(STR_SHAREDATA_VERSION)) From cb15f71eb343c95b292010a630b73ba1eb6bdb99 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Mon, 2 May 2022 12:12:31 +0900 Subject: [PATCH 0975/1024] =?UTF-8?q?MinGW=E5=90=91=E3=81=91=5Fcom=5Fraise?= =?UTF-8?q?=5Ferror=E3=81=AE=E5=AE=9F=E8=A3=85=E3=82=92=E9=99=A4=E5=8E=BB?= =?UTF-8?q?=E3=81=97=E3=81=BE=E3=81=99=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MinGWに未実装のSDK関数を独自に定義して利用していましたが、 C:/msys64/mingw64/include/comdef.hにインライン実装されるようになったので独自定義を削除します。 --- sakura_core/basis/_com_raise_error.cpp | 35 -------------------------- 1 file changed, 35 deletions(-) delete mode 100644 sakura_core/basis/_com_raise_error.cpp diff --git a/sakura_core/basis/_com_raise_error.cpp b/sakura_core/basis/_com_raise_error.cpp deleted file mode 100644 index b0f281a852..0000000000 --- a/sakura_core/basis/_com_raise_error.cpp +++ /dev/null @@ -1,35 +0,0 @@ -/*! @file */ -/* - Copyright (C) 2021-2022, Sakura Editor Organization - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; - you must not claim that you wrote the original software. - If you use this software in a product, an acknowledgment - in the product documentation would be appreciated but is - not required. - - 2. Altered source versions must be plainly marked as such, - and must not be misrepresented as being the original software. - - 3. This notice may not be removed or altered from any source - distribution. -*/ -#include "StdAfx.h" -#include -#include - -/*! - MinGW向け_com_raise_error実装 - */ -void _com_raise_error(HRESULT hr, IErrorInfo* pErrorInfo) -{ - throw _com_error(hr, pErrorInfo, true); -} From a6f272bbff592d19707030bcb071bddee1673ad1 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Tue, 3 May 2022 12:41:06 +0900 Subject: [PATCH 0976/1024] =?UTF-8?q?=E3=83=88=E3=83=AC=E3=82=A4=E3=82=A2?= =?UTF-8?q?=E3=82=A4=E3=82=B3=E3=83=B3=E3=81=8B=E3=82=89=E3=80=8C=E5=B1=A5?= =?UTF-8?q?=E6=AD=B4=E3=81=A8=E3=81=8A=E6=B0=97=E3=81=AB=E5=85=A5=E3=82=8A?= =?UTF-8?q?=E3=81=AE=E7=AE=A1=E7=90=86=E3=80=8D=E3=83=80=E3=82=A4=E3=82=A2?= =?UTF-8?q?=E3=83=AD=E3=82=B0=E3=82=92=E9=96=8B=E3=81=91=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://github.com/sakura-editor/sakura/pull/551 で追加したメニュー項目が機能していなかったのを修正します。 --- sakura_core/_main/CControlTray.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/sakura_core/_main/CControlTray.cpp b/sakura_core/_main/CControlTray.cpp index b92e36eed8..81d8f250e1 100644 --- a/sakura_core/_main/CControlTray.cpp +++ b/sakura_core/_main/CControlTray.cpp @@ -33,6 +33,7 @@ #include "debug/CRunningTimer.h" #include "dlg/CDlgOpenFile.h" #include "dlg/CDlgAbout.h" //Nov. 21, 2000 JEPROtest +#include "dlg/CDlgFavorite.h" #include "dlg/CDlgWindowList.h" #include "plugin/CPluginManager.h" #include "plugin/CJackManager.h" @@ -900,6 +901,13 @@ LRESULT CControlTray::DispatchEvent( /* Grep */ DoGrep(); //Stonee, 2001/03/21 Grepを別関数に break; + case F_FAVORITE: + if (CDlgFavorite cDlgFavorite; + cDlgFavorite.GetHwnd() == nullptr) + { + cDlgFavorite.DoModal(m_hInstance, GetTrayHwnd(), (LPARAM)NULL); + } + break; case F_FILESAVEALL: // Jan. 24, 2005 genta 全て上書き保存 CAppNodeGroupHandle(0).PostMessageToAllEditors( WM_COMMAND, From 663a4afd3f11043263528b77384538cab34b7700 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Tue, 3 May 2022 14:41:42 +0900 Subject: [PATCH 0977/1024] =?UTF-8?q?memory=20leak=E3=81=AE=E8=AA=A4?= =?UTF-8?q?=E8=A8=98=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit コメントやドキュメントにある「メモリーリーク」を「メモリリーク」に修正します。 --- help/sakura/res/HLP_UR009.html | 2 +- help/sakura/res/HLP_UR010.html | 2 +- help/sakura/res/HLP_UR011.html | 2 +- help/sakura/res/HLP_UR014.html | 2 +- help/sakura/res/HLP_UR015.html | 2 +- help/sakura/res/HLP_UR016.html | 6 +++--- help/sakura/res/HLP_UR017.html | 2 +- installer/sinst_src/keyword/php.khp | 2 +- sakura_core/CGrepAgent.cpp | 2 +- sakura_core/config/build_config.h | 4 ++-- sakura_core/io/CFileLoad.cpp | 4 ++-- sakura_core/macro/CPPA.cpp | 4 ++-- sakura_core/view/CEditView.cpp | 2 +- sakura_core/view/CEditView_Mouse.cpp | 2 +- 14 files changed, 19 insertions(+), 19 deletions(-) diff --git a/help/sakura/res/HLP_UR009.html b/help/sakura/res/HLP_UR009.html index 7dbbf6de50..fb624e5587 100644 --- a/help/sakura/res/HLP_UR009.html +++ b/help/sakura/res/HLP_UR009.html @@ -275,7 +275,7 @@

                    変更履歴(2002/05/01~)

                    ・GREPで巨大なファイルでも検索できるように(2GBまで)
                    ・GREPで、ファイル検索またはキャンセルをすると、ファイルを閉じない
                    -・同上でメモリーを解放しない
                    +・同上でメモリを解放しない
                    ・GREPで[単語単位]と[該当行]を選択した場合、ヒットしないことがまれにある
                    ・GREP結果の該当する内容に NULL を含んでいる場合、NULLの前までしか表示しない
                    ・GREP実行中ダイアログでファイル名の欄が変なときがある
                    diff --git a/help/sakura/res/HLP_UR010.html b/help/sakura/res/HLP_UR010.html index 9434db0615..9477e09601 100644 --- a/help/sakura/res/HLP_UR010.html +++ b/help/sakura/res/HLP_UR010.html @@ -36,7 +36,7 @@

                    変更履歴(2003/01/14~)

                    ・Grepダイアログの「ファイル」欄が空欄の状態で検索したら「*.*」が指定されているとみなして全ファイル検索.(by もかさん)
                    ・文字コードセットを自動選択にしたGrepでファイルが読み込みエラーになった場合にも読み込めなかったファイルがファイル数にカウントされるように.(by もかさん)
                    ・CShareData::GetMacroName()の戻り値がローカル変数へのポインタを返すことがあったのを修正.(by もかさん)
                    -・CPPAのメモリーリークの修正とメモリー使用量削減.(by もかさん)
                    +・CPPAのメモリリークの修正とメモリ使用量削減.(by もかさん)
                    タスクトレイから新規エディタを開いたときのカレントディレクトリを最後に使われた存在するディレクトリに.(by げんた)
                    ・改行コードにかかわらず(\rを入れなくても)正規表現の行末指定$がヒットするように.(by かろとさん)

                    diff --git a/help/sakura/res/HLP_UR011.html b/help/sakura/res/HLP_UR011.html index e6a9d11fd9..24862a8503 100644 --- a/help/sakura/res/HLP_UR011.html +++ b/help/sakura/res/HLP_UR011.html @@ -23,7 +23,7 @@

                    変更履歴(2003/06/26~)

                    ・ALT+?にカーソルキーを割り当てるとALTを離すまで入力が二重になるのを修正.(もかさん)
                    ・アクセス権限なし・フォルダを開きキャンセルをするとタブだけ残って消えるのを修正.(もかさん)
                    ・D&Dでクリップボードが書き換わらないように.(もかさん)
                    -・D&Dでのグローバルメモリーのメモリーリークを修正.(もかさん)
                    +・D&Dでのグローバルメモリのメモリリークを修正.(もかさん)
                    ・タブ表示,ファンクションキー上部表示でツールバーを表示すると画面にTABの残骸が残るのを修正.(もかさん)

                    [その他変更]
                    diff --git a/help/sakura/res/HLP_UR014.html b/help/sakura/res/HLP_UR014.html index f8348020c4..cde24a8979 100644 --- a/help/sakura/res/HLP_UR014.html +++ b/help/sakura/res/HLP_UR014.html @@ -42,7 +42,7 @@

                    Oct 17, 2010 (1.6.6.0)

                  • 不要なコードの存在によりコンパイル時に警告が発生する (svn:1749 patches:2989036 dev:5671 なすこじ)
                  • アウトライン解析(トグル)で「C 関数一覧」画面が閉じない (svn:1831 patches:3009187 dev:5675 ryoji)
                  • 折り返し行インデントで折り返すとメモリを食い尽くす (svn:1832 patches:3025944 dev:5677 もか)
                  • -
                  • Undo/Redoでのメモリーリーク修正 (svn:1834 patches:3055719 もか)
                  • +
                  • Undo/Redoでのメモリリーク修正 (svn:1834 patches:3055719 もか)
                  • チップウィンドウのリソースリーク修正 (svn:1835 patches:3056634 もか)
                  • Grep結果画面の強調表示に単語単位が適用されていない (svn:1836 patches:3056638 dev:5685 unicode:1334 もか)
                  • Grepの出力順が不正になることがある (svn:1836 patches:3056638 dev:5685 もか)
                  • diff --git a/help/sakura/res/HLP_UR015.html b/help/sakura/res/HLP_UR015.html index 32e87fa6ef..a42b177f34 100644 --- a/help/sakura/res/HLP_UR015.html +++ b/help/sakura/res/HLP_UR015.html @@ -383,7 +383,7 @@

                    Feb. 11, 2011 (2.0.0.0)

                  • 行頭以外からの選択だと[折り返し位置に改行を付けてコピー]で最初の折り返しに改行が付かない (svn:1855 unicode:1418 ryoji)
                  • [選択範囲内全行コピー]等の全行選択の挙動が不正 (svn:1854 unicode:1417 ryoji)
                  • 画面上端よりも上にある矩形選択を解除するとルーラーが反転表示になる (svn:1851 unicode:1414 ryoji)
                  • -
                  • Grepでのメモリーリーク等の修正 (svn:1850 upatch:3064380 unicode:1413 ryoji, もか)
                  • +
                  • Grepでのメモリリーク等の修正 (svn:1850 upatch:3064380 unicode:1413 ryoji, もか)
                  • 変換不具合の修正 (svn:1849 unicode:1412 ryoji)
                  • 通常検索・置換で大文字小文字を区別しないと U+00e0-U+00fcとU+0020が同一視される (svn:1826 unicode:1397 wiki:BugReport/64 ryoji)
                  • 標準ルール(テキスト)のアウトライン解析が行われない (svn:1823 unicode:1393 もか)
                  • diff --git a/help/sakura/res/HLP_UR016.html b/help/sakura/res/HLP_UR016.html index d7e8212106..b22299afe4 100644 --- a/help/sakura/res/HLP_UR016.html +++ b/help/sakura/res/HLP_UR016.html @@ -76,7 +76,7 @@

                    May. 18, 2014 (2.1.1.3)

                    May. 5, 2014 (2.1.1.2)

                    [バグ修正]
                      -
                    • 印刷プレビューで設定変更するとメモリーリーク (svn:3623 upatchid:769 unicode:2111 Moca)
                    • +
                    • 印刷プレビューで設定変更するとメモリリーク (svn:3623 upatchid:769 unicode:2111 Moca)
                    • 整数オーバーフローの修正 (svn:3624 upatchid:755 Moca)
                    • ファイル読み込み進捗で改行コード長が抜けていた (svn:3626 upatchid:736 Moca)
                    • CTipWndクラスのメンバ変数の初期化 (svn:3638 upatchid:779 novice)
                    • @@ -108,7 +108,7 @@

                      May. 5, 2014 (2.1.1.2)

                    • CFileLoadの変換でEOLも含めるように (svn:3626 upatchid:736 Moca)
                    • 文字コード変換の高速化 (svn:3627 upatchid:727 Moca)
                    • 色を変えない時の表示速度改善 (svn:3628 upatchid:745 Moca)
                    • -
                    • 改行コード変換のメモリー使用量削減 (svn:3629 upatchid:746 Moca)
                    • +
                    • 改行コード変換のメモリ使用量削減 (svn:3629 upatchid:746 Moca)
                    • 改行コードのないファイルの読み込み高速化 (svn:3630 upatchid:747 Moca)
                    • 大きいファイルのときのカーソル移動の高速化 (svn:3631 upatchid:748 Moca)
                    • CDocLine,CLayoutのconst付加 (svn:3632 upatchid:752 Moca)
                    • @@ -375,7 +375,7 @@

                      May. 13, 2013 (2.0.8.0)

                    • TAB矢印の色設定の太字が反映されていない (svn:2868 upatchid:409 Uchi)
                    • WSHマクロの中断ダイアログ表示後に固まる (svn:2881 upatchid:408 upatchid:425 Moca)
                    • 2.0.6.0以降のWSHマクロの実行速度改善 (svn:2881 upatchid:408 upatchid:425 Moca)
                    • -
                    • WSHマクロのハンドルリーク・メモリーリーク解消 (svn:2881 upatchid:408 upatchid:425 Moca)
                    • +
                    • WSHマクロのハンドルリーク・メモリリーク解消 (svn:2881 upatchid:408 upatchid:425 Moca)
                    • ソート・uniqの修正 (svn:2883 upatchid:393 Moca)
                    • ファイル履歴の文字コード設定が正しく表示されないのを修正 (svn:2900 upatchid:434 Uchi)
                    • 編集ウィンドウに設定されたフォントの幅で描画されていた (svn:2909 upatchid:439 aroka)
                    • diff --git a/help/sakura/res/HLP_UR017.html b/help/sakura/res/HLP_UR017.html index 60dd29d9c8..9a43082d34 100644 --- a/help/sakura/res/HLP_UR017.html +++ b/help/sakura/res/HLP_UR017.html @@ -135,7 +135,7 @@

                      Aug. 14, 2016 (2.3.1.0)

                    • C++インデントでコメント行を改行するとRuntime Error (svn:4082 upatchid:1021 ds14050,Moca)
                    • 単語種別のキリル文字の範囲修正 (svn:4083 upatchid:1022 Moca)
                    • CDCFontでフォント削除がおかしい (svn:4084 upatchid:1026 Moca)
                    • -
                    • ソートコマンドでメモリーリーク (svn:4085 upatchid:1027 Moca)
                    • +
                    • ソートコマンドでメモリリーク (svn:4085 upatchid:1027 Moca)
                    • TSV,CSVモードコンボボックスの縦幅を広げる (svn:4086 upatchid:1033 Moca)
                    • C++アウトライン解析で異常終了する (svn:4087 upatchid:1007 Moca)
                    • WCODE::IsCtrlCode()でNUL文字がfalseになるためコントロールコードとして描画されない (svn:4090 upatchid:1035 Moca,novice123)
                    • diff --git a/installer/sinst_src/keyword/php.khp b/installer/sinst_src/keyword/php.khp index cc698eafbe..4c0c157983 100644 --- a/installer/sinst_src/keyword/php.khp +++ b/installer/sinst_src/keyword/php.khp @@ -1556,7 +1556,7 @@ get_browser /// object get_browser ( string [user_agent])\n ユーザのブラ highlight_file /// bool highlight_file ( string filename)\nファイルの構文ハイライト表示 highlight_string /// bool highlight_string ( string str)\n文字列の構文ハイライト化 ignore_user_abort /// int ignore_user_abort ( int [setting])\n クライアント接続が断となった時にスクリプトの実行を中断するかどう かを設定する -leak /// void leak ( int bytes)\nメモリーをリークする +leak /// void leak ( int bytes)\nメモリをリークする pack /// string pack ( string format [, mixed args])\nデータをバイナリ文字列にパックする show_source /// bool show_source ( string filename)\nファイルの構文ハイライト表示 sleep /// void sleep ( int seconds)\n実行を遅延させる diff --git a/sakura_core/CGrepAgent.cpp b/sakura_core/CGrepAgent.cpp index 12703d54d9..b24fe97a61 100644 --- a/sakura_core/CGrepAgent.cpp +++ b/sakura_core/CGrepAgent.cpp @@ -1064,7 +1064,7 @@ int CGrepAgent::DoGrepTree( } //フォルダ名を作成する。 - // 2010.08.01 キャンセルでメモリーリークしてました + // 2010.08.01 キャンセルでメモリリークしてました std::wstring currentPath = pszPath; currentPath += L"\\"; currentPath += lpFileName; diff --git a/sakura_core/config/build_config.h b/sakura_core/config/build_config.h index 770b4d335b..bbaaaaa86f 100644 --- a/sakura_core/config/build_config.h +++ b/sakura_core/config/build_config.h @@ -65,7 +65,7 @@ static const bool UNICODE_BOOL=true; #define FILL_STRANGE_IN_NEW_MEMORY #endif -//crtdbg.hによるメモリーリークチェックを使うかどうか (デバッグ用) +//crtdbg.hによるメモリリークチェックを使うかどうか (デバッグ用) #if defined(_MSC_VER) && defined(_DEBUG) #define USE_LEAK_CHECK_WITH_CRTDBG #endif @@ -92,7 +92,7 @@ static const bool UNICODE_BOOL=true; ); #endif -//crtdbg.hによるメモリーリークチェックを使うかどうか (デバッグ用) +//crtdbg.hによるメモリリークチェックを使うかどうか (デバッグ用) #ifdef USE_LEAK_CHECK_WITH_CRTDBG //Cランタイムの機能を使ってメモリリークを検出する // メモリリークチェックの結果出力を得るには diff --git a/sakura_core/io/CFileLoad.cpp b/sakura_core/io/CFileLoad.cpp index 2c679993d2..8bdf8d281c 100644 --- a/sakura_core/io/CFileLoad.cpp +++ b/sakura_core/io/CFileLoad.cpp @@ -426,7 +426,7 @@ void CFileLoad::Buffering( void ) { DWORD ReadSize; - // メモリー確保 + // メモリ確保 if( NULL == m_pReadBuf ){ int nBufSize; nBufSize = ( m_nFileSize < gm_nBufSizeDef )?( static_cast(m_nFileSize) ):( gm_nBufSizeDef ); @@ -438,7 +438,7 @@ void CFileLoad::Buffering( void ) m_pReadBuf = (char *)malloc( nBufSize ); if( NULL == m_pReadBuf ){ - throw CError_FileRead(); // メモリー確保に失敗 + throw CError_FileRead(); // メモリ確保に失敗 } m_nReadDataLen = 0; m_nReadBufSize = nBufSize; diff --git a/sakura_core/macro/CPPA.cpp b/sakura_core/macro/CPPA.cpp index 0c9d9b90c3..a256e5d10a 100644 --- a/sakura_core/macro/CPPA.cpp +++ b/sakura_core/macro/CPPA.cpp @@ -187,7 +187,7 @@ bool CPPA::InitDllImp() char buf[1024]; // コマンドに置き換えられない関数 = PPA無しでは使えない。。。 for (i=0; CSMacroMgr::m_MacroFuncInfoArr[i].m_pszFuncName != NULL; i++) { - // 2003.06.08 Moca メモリーリークの修正 + // 2003.06.08 Moca メモリリークの修正 // 2003.06.16 genta バッファを外から与えるように // 関数登録用文字列を作成する GetDeclarations( CSMacroMgr::m_MacroFuncInfoArr[i], buf ); @@ -196,7 +196,7 @@ bool CPPA::InitDllImp() // コマンドに置き換えられる関数 = PPA無しでも使える。 for (i=0; CSMacroMgr::m_MacroFuncInfoCommandArr[i].m_pszFuncName != NULL; i++) { - // 2003.06.08 Moca メモリーリークの修正 + // 2003.06.08 Moca メモリリークの修正 // 2003.06.16 genta バッファを外から与えるように // 関数登録用文字列を作成する GetDeclarations( CSMacroMgr::m_MacroFuncInfoCommandArr[i], buf ); diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index c422bd916a..488d7cc842 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -490,7 +490,7 @@ LRESULT CEditView::DispatchEvent( // From Here 2007.09.09 Moca 互換BMPによる画面バッファ case WM_SHOWWINDOW: - // ウィンドウ非表示の再に互換BMPを廃棄してメモリーを節約する + // ウィンドウ非表示の再に互換BMPを廃棄してメモリを節約する if( hwnd == GetHwnd() && (BOOL)wParam == FALSE ){ DeleteCompatibleBitmap(); } diff --git a/sakura_core/view/CEditView_Mouse.cpp b/sakura_core/view/CEditView_Mouse.cpp index 8939ca2e2c..f2245291f2 100644 --- a/sakura_core/view/CEditView_Mouse.cpp +++ b/sakura_core/view/CEditView_Mouse.cpp @@ -2052,7 +2052,7 @@ STDMETHODIMP CEditView::Drop( LPDATAOBJECT pDataObject, DWORD dwKeyState, POINTL SetUndoBuffer(); ::GlobalUnlock( hData ); - // 2004.07.12 fotomo/もか メモリーリークの修正 + // 2004.07.12 fotomo/もか メモリリークの修正 if( 0 == (GMEM_LOCKCOUNT & ::GlobalFlags(hData)) ){ ::GlobalFree( hData ); } From 33c657c9c9d3a69423185bc6766e5971a8cd6544 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Tue, 3 May 2022 14:46:14 +0900 Subject: [PATCH 0978/1024] =?UTF-8?q?=E3=80=8C=E3=83=9E=E3=82=A6=E3=82=B9?= =?UTF-8?q?=E3=82=AD=E3=83=A3=E3=83=97=E3=83=81=E3=83=A3=E3=83=BC=E3=80=8D?= =?UTF-8?q?=E3=81=AE=E9=95=B7=E9=9F=B3=E8=A8=98=E5=8F=B7=E3=82=92=E5=89=8A?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit コメントやドキュメントでcaptureを「キャプチャー」と書いているのを修正します。 --- sakura_core/view/CEditView_Mouse.cpp | 8 ++++---- sakura_core/window/CEditWnd.cpp | 2 +- sakura_core/window/CMainToolBar.cpp | 2 +- sakura_core/window/CTabWnd.cpp | 16 ++++++++-------- sakura_core/window/CTabWnd.h | 2 +- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/sakura_core/view/CEditView_Mouse.cpp b/sakura_core/view/CEditView_Mouse.cpp index 8939ca2e2c..377fc6589c 100644 --- a/sakura_core/view/CEditView_Mouse.cpp +++ b/sakura_core/view/CEditView_Mouse.cpp @@ -212,7 +212,7 @@ normal_action:; } GetSelectionInfo().m_ptMouseRollPosOld = ptMouse; // マウス範囲選択前回位置(XY座標) - /* 範囲選択開始 & マウスキャプチャー */ + /* 範囲選択開始 & マウスキャプチャ */ GetSelectionInfo().SelectBeginBox(); ::SetCapture( GetHwnd() ); @@ -248,7 +248,7 @@ normal_action:; /* マウスのキャプチャなど */ GetSelectionInfo().m_ptMouseRollPosOld = ptMouse; // マウス範囲選択前回位置(XY座標) - /* 範囲選択開始 & マウスキャプチャー */ + /* 範囲選択開始 & マウスキャプチャ */ GetSelectionInfo().SelectBeginNazo(); ::SetCapture( GetHwnd() ); GetCaret().HideCaret_( GetHwnd() ); // 2002/07/22 novice @@ -1513,7 +1513,7 @@ void CEditView::OnLBUTTONUP( WPARAM fwKeys, int xPos , int yPos ) { // MYTRACE( L"OnLBUTTONUP()\n" ); - /* 範囲選択終了 & マウスキャプチャーおわり */ + /* 範囲選択終了 & マウスキャプチャおわり */ if( GetSelectionInfo().IsMouseSelecting() ){ /* 範囲選択中 */ /* マウス キャプチャを解放 */ ::ReleaseCapture(); @@ -1671,7 +1671,7 @@ void CEditView::OnLBUTTONDBLCLK( WPARAM fwKeys, int _xPos , int _yPos ) */ if(F_SELECTWORD != nFuncID) return; - /* 範囲選択開始 & マウスキャプチャー */ + /* 範囲選択開始 & マウスキャプチャ */ GetSelectionInfo().SelectBeginWord(); if( GetDllShareData().m_Common.m_sView.m_bFontIs_FIXED_PITCH ){ /* 現在のフォントは固定幅フォントである */ diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index 728581afaa..b3912fef0a 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -3376,7 +3376,7 @@ LRESULT CEditWnd::OnHScroll( WPARAM wParam, LPARAM lParam ) LRESULT CEditWnd::OnLButtonDown( WPARAM wParam, LPARAM lParam ) { - //by 鬼(2) キャプチャーして押されたら非クライアントでもこっちに来る + //by 鬼(2) キャプチャして押されたら非クライアントでもこっちに来る if(m_IconClicked != icNone) return 0; diff --git a/sakura_core/window/CMainToolBar.cpp b/sakura_core/window/CMainToolBar.cpp index 1a232d94c7..354209a576 100644 --- a/sakura_core/window/CMainToolBar.cpp +++ b/sakura_core/window/CMainToolBar.cpp @@ -106,7 +106,7 @@ static LRESULT CALLBACK ToolBarWndProc( HWND hWnd, UINT msg, WPARAM wParam, LPAR switch( msg ) { // WinXP Visual Style のときにツールバー上でのマウス左右ボタン同時押しで無応答になる - //(マウスをキャプチャーしたまま放さない) 問題を回避するために右ボタンを無視する + //(マウスをキャプチャしたまま放さない) 問題を回避するために右ボタンを無視する case WM_RBUTTONDOWN: case WM_RBUTTONUP: return 0L; // 右ボタンの UP/DOWN は本来のウィンドウプロシージャに渡さない diff --git a/sakura_core/window/CTabWnd.cpp b/sakura_core/window/CTabWnd.cpp index 084a198969..64a7db2501 100644 --- a/sakura_core/window/CTabWnd.cpp +++ b/sakura_core/window/CTabWnd.cpp @@ -200,7 +200,7 @@ LRESULT CTabWnd::OnTabLButtonDown( WPARAM wParam, LPARAM lParam ) TabCtrl_GetItemRect(m_hwndTab, nSrcTab, &rcItem); GetTabCloseBtnRect(&rcItem, &rcClose, nSrcTab == TabCtrl_GetCurSel(m_hwndTab)); if( ::PtInRect(&rcClose, hitinfo.pt) ){ - // 閉じるボタン上ならキャプチャー開始 + // 閉じるボタン上ならキャプチャ開始 m_nTabCloseCapture = nSrcTab; ::SetCapture( m_hwndTab ); return 0L; @@ -238,7 +238,7 @@ LRESULT CTabWnd::OnTabLButtonUp( WPARAM wParam, LPARAM lParam ) if( ::PtInRect(&rcClose, hitinfo.pt) ){ ExecTabCommand( F_WINCLOSE, MAKEPOINTS(lParam) ); } - // キャプチャー解除 + // キャプチャ解除 BreakDrag(); return 0L; } @@ -1110,7 +1110,7 @@ LRESULT CTabWnd::OnCaptureChanged( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM l /*! WM_LBUTTONDOWN処理 @date 2006.02.01 ryoji 新規作成 @date 2006.11.30 ryoji タブ一覧ボタンクリック関数を廃止して処理取り込み - 閉じるボタン上ならキャプチャー開始 + 閉じるボタン上ならキャプチャ開始 */ LRESULT CTabWnd::OnLButtonDown( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { @@ -1133,11 +1133,11 @@ LRESULT CTabWnd::OnLButtonDown( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPar } else { - // 閉じるボタン上ならキャプチャー開始 + // 閉じるボタン上ならキャプチャ開始 GetCloseBtnRect( &rc, &rcBtn ); if( ::PtInRect( &rcBtn, pt ) ) { - m_eCaptureSrc = CAPT_CLOSE; // キャプチャー元は閉じるボタン + m_eCaptureSrc = CAPT_CLOSE; // キャプチャ元は閉じるボタン ::SetCapture( GetHwnd() ); } } @@ -1158,9 +1158,9 @@ LRESULT CTabWnd::OnLButtonUp( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam pt.y = HIWORD(lParam); ::GetClientRect( GetHwnd(), &rc ); - if( ::GetCapture() == GetHwnd() ) // 自ウィンドウがマウスキャプチャーしている? + if( ::GetCapture() == GetHwnd() ) // 自ウィンドウがマウスキャプチャしている? { - if( m_eCaptureSrc == CAPT_CLOSE ) // キャプチャー元は閉じるボタン? + if( m_eCaptureSrc == CAPT_CLOSE ) // キャプチャ元は閉じるボタン? { // 閉じるボタン上ならタブを閉じる GetCloseBtnRect( &rc, &rcBtn ); @@ -1186,7 +1186,7 @@ LRESULT CTabWnd::OnLButtonUp( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam } } - // キャプチャー解除 + // キャプチャ解除 m_eCaptureSrc = CAPT_NONE; ::ReleaseCapture(); } diff --git a/sakura_core/window/CTabWnd.h b/sakura_core/window/CTabWnd.h index b9101ff62c..27b30d9228 100644 --- a/sakura_core/window/CTabWnd.h +++ b/sakura_core/window/CTabWnd.h @@ -192,7 +192,7 @@ class CTabWnd final : public CWnd BOOL m_bHovering; BOOL m_bListBtnHilighted; BOOL m_bCloseBtnHilighted; //!< 閉じるボタンハイライト状態 // 2006.10.21 ryoji - CaptureSrc m_eCaptureSrc; //!< キャプチャー元 + CaptureSrc m_eCaptureSrc; //!< キャプチャ元 BOOL m_bTabSwapped; //!< ドラッグ中にタブの入れ替えがあったかどうか LONG* m_nTabBorderArray; //!< ドラッグ前のタブ境界位置配列 LOGFONT m_lf; //!< 表示フォントの特性情報 From 29181a57dec5c247bdb978468bc3a2026cc971d9 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Tue, 3 May 2022 14:52:30 +0900 Subject: [PATCH 0979/1024] =?UTF-8?q?=E3=80=8C=E3=82=A4=E3=83=B3=E3=82=BF?= =?UTF-8?q?=E3=83=BC=E3=83=97=E3=83=AA=E3=82=BF=E3=80=8D=E3=81=AE=E3=82=AB?= =?UTF-8?q?=E3=82=BF=E3=82=AB=E3=83=8A=E8=A1=A8=E8=A8=98=E3=82=92=E7=B5=B1?= =?UTF-8?q?=E4=B8=80=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit interpreterに対するカタカナ表記を統一します。 --- sakura_core/macro/CPPA.h | 4 ++-- tools/find-tools.md | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sakura_core/macro/CPPA.h b/sakura_core/macro/CPPA.h index 7183937902..12e3761342 100644 --- a/sakura_core/macro/CPPA.h +++ b/sakura_core/macro/CPPA.h @@ -33,7 +33,7 @@ distribution. */ /* -PPA(Poor-Pascal for Application)はDelphi/C++Builder用のPascalインタプリタコンポーネントです。 +PPA(Poor-Pascal for Application)はDelphi/C++Builder用のPascalインタープリタコンポーネントです。 */ #ifndef SAKURA_CPPA_FB41BBAE_DFBC_449D_9342_5D9424CFE086_H_ @@ -50,7 +50,7 @@ PPA(Poor-Pascal for Application)はDelphi/C++Builder用のPascalインタプリ /* PPA(Poor-Pascal for Application)はDelphi/C++Builder用の -Pascalインタプリタコンポーネントです。 +Pascalインタープリタコンポーネントです。 アプリケーションにマクロ機能を搭載する事を目的に作成されています。 */ diff --git a/tools/find-tools.md b/tools/find-tools.md index 4caae98260..88c3d23e6f 100644 --- a/tools/find-tools.md +++ b/tools/find-tools.md @@ -73,10 +73,10 @@ MSBuild以外の探索手順は同一であり、7-Zipを例に説明する。 ## python -ビルドバッチで利用する Python インタープリターの存在確認をします。 -適切な Python インタープリターが見つかると、環境変数 `CMD_PYTHON` が定義されます。 -適切な Python インタープリターが見つからない場合、 `CMD_PYTHON` は定義されません。 -Python インタープリターはビルド要件ではないので、 Python を利用するバッチには `CMD_PYTHON` チェックを挟む必要があります。 +ビルドバッチで利用する Python インタープリタの存在確認をします。 +適切な Python インタープリタが見つかると、環境変数 `CMD_PYTHON` が定義されます。 +適切な Python インタープリタが見つからない場合、 `CMD_PYTHON` は定義されません。 +Python インタープリタはビルド要件ではないので、 Python を利用するバッチには `CMD_PYTHON` チェックを挟む必要があります。 1. Python Launcher (py.exe) が存在し、 `py.exe --version` でバージョンが取れたら、それを使う。 1. パスが通っているpython.exeで`python.exe --version`してバージョンが取れたら、それを使う。 From 41575bf5a4d2c2c29dc4cde9304e65f7f7a9865b Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Tue, 3 May 2022 14:56:46 +0900 Subject: [PATCH 0980/1024] =?UTF-8?q?=E3=80=8C=E3=82=A4=E3=83=B3=E3=82=BF?= =?UTF-8?q?=E3=83=BC=E3=83=95=E3=82=A7=E3=83=BC=E3=82=B9=E3=80=8D=E3=81=AE?= =?UTF-8?q?=E3=82=AB=E3=82=BF=E3=82=AB=E3=83=8A=E8=A1=A8=E8=A8=98=E3=82=92?= =?UTF-8?q?=E7=B5=B1=E4=B8=80=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit interfaceに対するカタカナ表記を統一します。 --- help/macro/source/usage/popup.html | 2 +- help/plugin/Text/implementation02.html | 6 +++--- help/plugin/Text/implementation03.html | 2 +- help/plugin/Text/index.html | 2 +- help/plugin/Text/overview.html | 2 +- help/plugin/Text/renovation.html | 6 +++--- installer/sinst_src/keyword/ActionScript.kwd | 2 +- sakura_core/CHokanMgr.cpp | 2 +- sakura_core/cmd/CViewCommander.cpp | 2 +- sakura_core/cmd/CViewCommander_Edit.cpp | 2 +- sakura_core/cmd/CViewCommander_Outline.cpp | 2 +- sakura_core/dlg/CDlgExec.cpp | 2 +- sakura_core/dlg/CDlgFind.cpp | 2 +- sakura_core/dlg/CDlgGrep.cpp | 2 +- sakura_core/dlg/CDlgGrepReplace.cpp | 2 +- sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp | 2 +- sakura_core/dlg/CDlgPrintSetting.cpp | 2 +- sakura_core/dlg/CDlgReplace.cpp | 2 +- sakura_core/dlg/CDlgSetCharSet.cpp | 2 +- sakura_core/extmodule/CBregexpDll2.h | 2 +- sakura_core/extmodule/CIcu4cI18n.h | 2 +- sakura_core/extmodule/CUchardet.h | 2 +- sakura_core/macro/CIfObj.cpp | 4 ++-- sakura_core/macro/CIfObj.h | 6 +++--- sakura_core/macro/CWSH.cpp | 8 ++++---- sakura_core/macro/CWSH.h | 6 +++--- sakura_core/macro/CWSHIfObj.cpp | 2 +- sakura_core/macro/CWSHIfObj.h | 2 +- sakura_core/macro/CWSHManager.cpp | 8 ++++---- sakura_core/macro/CWSHManager.h | 6 +++--- sakura_core/outline/CFuncInfoArr.h | 2 +- sakura_core/typeprop/CDlgTypeAscertain.h | 2 +- 32 files changed, 49 insertions(+), 49 deletions(-) diff --git a/help/macro/source/usage/popup.html b/help/macro/source/usage/popup.html index f9525225b1..d941e02233 100644 --- a/help/macro/source/usage/popup.html +++ b/help/macro/source/usage/popup.html @@ -46,7 +46,7 @@

                      Popupメソッド

                      解説
                      - Popup メソッドを呼び出すと、実行中のホスト実行可能ファイルの種類 (WScript.exe または CScript.exe) に関係なく、メッセージ ボックスが表示されます。nSecondsToWait にゼロ (既定値) を指定した場合、ポップアップ メッセージ ボックスはユーザーがウィンドウを閉じるまでずっと表示されます。natSecondsToWait に正の値を指定した場合、指定した秒数が経過すると、メッセージ ボックスのウィンドウが閉じます。strTitle を省略すると、ウィンドウ タイトルは "Windows Script Host" となります。natType の意味は、Microsoft Win32R アプリケーション プログラミング インターフェイスの MessageBox 関数で指定するものと同じです。次の表は、natType の値とその意味です。表の値は組み合わせて使用できます。 + Popup メソッドを呼び出すと、実行中のホスト実行可能ファイルの種類 (WScript.exe または CScript.exe) に関係なく、メッセージ ボックスが表示されます。nSecondsToWait にゼロ (既定値) を指定した場合、ポップアップ メッセージ ボックスはユーザーがウィンドウを閉じるまでずっと表示されます。natSecondsToWait に正の値を指定した場合、指定した秒数が経過すると、メッセージ ボックスのウィンドウが閉じます。strTitle を省略すると、ウィンドウ タイトルは "Windows Script Host" となります。natType の意味は、Microsoft Win32R アプリケーション プログラミング インターフェースの MessageBox 関数で指定するものと同じです。次の表は、natType の値とその意味です。表の値は組み合わせて使用できます。
                      戻り値
                      diff --git a/help/plugin/Text/implementation02.html b/help/plugin/Text/implementation02.html index c64f7bfae3..9e668f46f4 100644 --- a/help/plugin/Text/implementation02.html +++ b/help/plugin/Text/implementation02.html @@ -4,8 +4,8 @@ -インタフェースオブジェクト - +インターフェースオブジェクト + @@ -18,7 +18,7 @@ -

                      インタフェースオブジェクト

                      +

                      インターフェースオブジェクト

                      JScriptやVBScript等から参照してエディタの情報取得・操作を行うオブジェクト。
                      diff --git a/help/plugin/Text/implementation03.html b/help/plugin/Text/implementation03.html index f02cacf6eb..2d7cfd9547 100644 --- a/help/plugin/Text/implementation03.html +++ b/help/plugin/Text/implementation03.html @@ -54,7 +54,7 @@

                      アウトライン解析(ジャック名:Outline)

    5: 列挙体
    6: 共用体
    7: 名前空間… 前述
    8: インタフェース
    8: インターフェース
    9: グローバル… トップレベルに 3 や 7 以外が来ると生成
    ・タイプ 8:VB関数一覧 の場合 
    1: 宣言
    - + diff --git a/help/plugin/Text/renovation.html b/help/plugin/Text/renovation.html index d1ce9cc33e..f6b4acecfd 100644 --- a/help/plugin/Text/renovation.html +++ b/help/plugin/Text/renovation.html @@ -17,15 +17,15 @@

    エディタでの実装

    マクロ関連クラスの改造

    -WSHマクロで使用できるインタフェースオブジェクトを、Editorだけではなく複数扱えるように修正した。
    +WSHマクロで使用できるインターフェースオブジェクトを、Editorだけではなく複数扱えるように修正した。
     CWSHManager                   WSHマクロ実行の入り口。
                                   .ExecKeyMacro関数の中でCWSHClientを作成する。
     CWSHClient                    WSH呼び出しの入り口。
    -CIfObj                        純粋なインタフェースオブジェクト
    -  - CWSHIfObj                   WSHマクロに特化したインタフェースオブジェクト
    +CIfObj                        純粋なインターフェースオブジェクト
    +  - CWSHIfObj                   WSHマクロに特化したインターフェースオブジェクト
           - CEditorIfObj              今までのEditorオブジェクト
           - plugin/CPluginIfObj       プラグイン共通機能を提供するPluginオブジェクト
           - plugin/COutlineIfObj      アウトライン解析機能を提供するOutlineオブジェクト
    diff --git a/installer/sinst_src/keyword/ActionScript.kwd b/installer/sinst_src/keyword/ActionScript.kwd
    index bfbdf6c90a..bc8e49b116 100644
    --- a/installer/sinst_src/keyword/ActionScript.kwd
    +++ b/installer/sinst_src/keyword/ActionScript.kwd
    @@ -90,7 +90,7 @@ void
     while
     with
     
    -// ビルトインクラス名、コンポーネントクラス名、インターフェイス名
    +// ビルトインクラス名、コンポーネントクラス名、インターフェース名
     Accessibility
     Accordion
     Alert
    diff --git a/sakura_core/CHokanMgr.cpp b/sakura_core/CHokanMgr.cpp
    index ad16aabc90..cdef97152f 100644
    --- a/sakura_core/CHokanMgr.cpp
    +++ b/sakura_core/CHokanMgr.cpp
    @@ -177,7 +177,7 @@ int CHokanMgr::Search(
     		}
     
     		for( auto it = plugs.begin(); it != plugs.end(); ++it ){
    -			//インタフェースオブジェクト準備
    +			//インターフェースオブジェクト準備
     			CWSHIfObj::List params;
     			std::wstring curWord = pszCurWord;
     			CComplementIfObj* objComp = new CComplementIfObj( curWord , this, nOption );
    diff --git a/sakura_core/cmd/CViewCommander.cpp b/sakura_core/cmd/CViewCommander.cpp
    index 168a6493cf..faa191b1fb 100644
    --- a/sakura_core/cmd/CViewCommander.cpp
    +++ b/sakura_core/cmd/CViewCommander.cpp
    @@ -647,7 +647,7 @@ BOOL CViewCommander::HandleCommand(
     
     			if( plugs.size() > 0 ){
     				assert_warning( 1 == plugs.size() );
    -				//インタフェースオブジェクト準備
    +				//インターフェースオブジェクト準備
     				CWSHIfObj::List params;
     				//プラグイン呼び出し
     				( *plugs.begin() )->Invoke( m_pCommanderView, params );
    diff --git a/sakura_core/cmd/CViewCommander_Edit.cpp b/sakura_core/cmd/CViewCommander_Edit.cpp
    index 20a9c70cfb..16b029d3f1 100644
    --- a/sakura_core/cmd/CViewCommander_Edit.cpp
    +++ b/sakura_core/cmd/CViewCommander_Edit.cpp
    @@ -176,7 +176,7 @@ end_of_for:;
     
     			if( plugs.size() > 0 ){
     				assert_warning( 1 == plugs.size() );
    -				//インタフェースオブジェクト準備
    +				//インターフェースオブジェクト準備
     				CWSHIfObj::List params;
     				CSmartIndentIfObj* objIndent = new CSmartIndentIfObj( wcChar );	//スマートインデントオブジェクト
     				objIndent->AddRef();
    diff --git a/sakura_core/cmd/CViewCommander_Outline.cpp b/sakura_core/cmd/CViewCommander_Outline.cpp
    index feb44fb99e..09612e9356 100644
    --- a/sakura_core/cmd/CViewCommander_Outline.cpp
    +++ b/sakura_core/cmd/CViewCommander_Outline.cpp
    @@ -140,7 +140,7 @@ BOOL CViewCommander::Command_FUNCLIST(
     
     			if( plugs.size() > 0 ){
     				assert_warning( 1 == plugs.size() );
    -				//インタフェースオブジェクト準備
    +				//インターフェースオブジェクト準備
     				CWSHIfObj::List params;
     				COutlineIfObj* objOutline = new COutlineIfObj( cFuncInfoArr );
     				objOutline->AddRef();
    diff --git a/sakura_core/dlg/CDlgExec.cpp b/sakura_core/dlg/CDlgExec.cpp
    index 678c1f7dc1..9192d7ba9f 100644
    --- a/sakura_core/dlg/CDlgExec.cpp
    +++ b/sakura_core/dlg/CDlgExec.cpp
    @@ -103,7 +103,7 @@ void CDlgExec::SetData( void )
     	/* ユーザーがコンボ ボックスのエディット コントロールに入力できるテキストの長さを制限する */
     	Combo_LimitText( GetItemHwnd( IDC_COMBO_m_szCommand ), _countof( m_szCommand ) - 1 );
     	Combo_LimitText( GetItemHwnd( IDC_COMBO_CUR_DIR ), _countof2( m_szCurDir ) - 1 );
    -	/* コンボボックスのユーザー インターフェイスを拡張インターフェースにする */
    +	/* コンボボックスのユーザー インターフェースを拡張インターフェースにする */
     	Combo_SetExtendedUI( GetItemHwnd( IDC_COMBO_m_szCommand ), TRUE );
     
     	{	//	From Here 2007.01.02 maru 引数を拡張のため
    diff --git a/sakura_core/dlg/CDlgFind.cpp b/sakura_core/dlg/CDlgFind.cpp
    index 95728cedb6..5b1537a239 100644
    --- a/sakura_core/dlg/CDlgFind.cpp
    +++ b/sakura_core/dlg/CDlgFind.cpp
    @@ -124,7 +124,7 @@ void CDlgFind::SetData( void )
     	/* ユーザーがコンボ ボックスのエディット コントロールに入力できるテキストの長さを制限する */
     	// 2011.12.18 長さ制限撤廃
     	// Combo_LimitText( GetItemHwnd( IDC_COMBO_TEXT ), _MAX_PATH - 1 );
    -	/* コンボボックスのユーザー インターフェイスを拡張インターフェースにする */
    +	/* コンボボックスのユーザー インターフェースを拡張インターフェースにする */
     	Combo_SetExtendedUI( GetItemHwnd( IDC_COMBO_TEXT ), TRUE );
     
     	/*****************************
    diff --git a/sakura_core/dlg/CDlgGrep.cpp b/sakura_core/dlg/CDlgGrep.cpp
    index 68bf0bc016..478e5bc617 100644
    --- a/sakura_core/dlg/CDlgGrep.cpp
    +++ b/sakura_core/dlg/CDlgGrep.cpp
    @@ -309,7 +309,7 @@ BOOL CDlgGrep::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam )
     	Combo_LimitText( GetItemHwnd( IDC_COMBO_EXCLUDE_FILE ), _countof2(m_szExcludeFile) - 1);
     	Combo_LimitText( GetItemHwnd( IDC_COMBO_EXCLUDE_FOLDER ), _countof2(m_szExcludeFolder) - 1);
     
    -	/* コンボボックスのユーザー インターフェイスを拡張インターフェースにする */
    +	/* コンボボックスのユーザー インターフェースを拡張インターフェースにする */
     	Combo_SetExtendedUI( GetItemHwnd( IDC_COMBO_TEXT ), TRUE );
     	Combo_SetExtendedUI( GetItemHwnd( IDC_COMBO_FILE ), TRUE );
     	Combo_SetExtendedUI( GetItemHwnd( IDC_COMBO_FOLDER ), TRUE );
    diff --git a/sakura_core/dlg/CDlgGrepReplace.cpp b/sakura_core/dlg/CDlgGrepReplace.cpp
    index 9694add5cb..d27b3dfe95 100644
    --- a/sakura_core/dlg/CDlgGrepReplace.cpp
    +++ b/sakura_core/dlg/CDlgGrepReplace.cpp
    @@ -131,7 +131,7 @@ BOOL CDlgGrepReplace::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam )
     {
     	_SetHwnd( hwndDlg );
     
    -	/* コンボボックスのユーザー インターフェイスを拡張インターフェースにする */
    +	/* コンボボックスのユーザー インターフェースを拡張インターフェースにする */
     	Combo_SetExtendedUI( GetItemHwnd( IDC_COMBO_TEXT2 ), TRUE );
     
     	SetComboBoxDeleter(GetItemHwnd(IDC_COMBO_TEXT2), &m_cRecentReplace);
    diff --git a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp
    index fa4ded52c7..706d5566fb 100644
    --- a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp
    +++ b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp
    @@ -282,7 +282,7 @@ UINT_PTR CALLBACK OFNHookProc(
     			// 2005.11.02 ryoji 初期レイアウト設定
     			CDlgOpenFile_CommonFileDialog::InitLayout( pData->m_hwndOpenDlg, hdlg, pData->m_hwndComboCODES );
     
    -			/* コンボボックスのユーザー インターフェイスを拡張インターフェースにする */
    +			/* コンボボックスのユーザー インターフェースを拡張インターフェースにする */
     			Combo_SetExtendedUI( pData->m_hwndComboCODES, TRUE );
     			Combo_SetExtendedUI( pData->m_hwndComboMRU, TRUE );
     			Combo_SetExtendedUI( pData->m_hwndComboOPENFOLDER, TRUE );
    diff --git a/sakura_core/dlg/CDlgPrintSetting.cpp b/sakura_core/dlg/CDlgPrintSetting.cpp
    index 20eb77aa65..05b896a3b2 100644
    --- a/sakura_core/dlg/CDlgPrintSetting.cpp
    +++ b/sakura_core/dlg/CDlgPrintSetting.cpp
    @@ -149,7 +149,7 @@ BOOL CDlgPrintSetting::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam
     {
     	_SetHwnd( hwndDlg );
     
    -	/* コンボボックスのユーザー インターフェイスを拡張インターフェースにする */
    +	/* コンボボックスのユーザー インターフェースを拡張インターフェースにする */
     	Combo_SetExtendedUI( GetItemHwnd( IDC_COMBO_SETTINGNAME ), TRUE );
     	Combo_SetExtendedUI( GetItemHwnd( IDC_COMBO_FONT_HAN ), TRUE );
     	Combo_SetExtendedUI( GetItemHwnd( IDC_COMBO_FONT_ZEN ), TRUE );
    diff --git a/sakura_core/dlg/CDlgReplace.cpp b/sakura_core/dlg/CDlgReplace.cpp
    index 09700e0458..1b6040c7c4 100644
    --- a/sakura_core/dlg/CDlgReplace.cpp
    +++ b/sakura_core/dlg/CDlgReplace.cpp
    @@ -331,7 +331,7 @@ BOOL CDlgReplace::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam )
     	//	Combo_LimitText( GetItemHwnd( IDC_COMBO_TEXT ), _MAX_PATH - 1 );
     	//	Combo_LimitText( GetItemHwnd( IDC_COMBO_TEXT2 ), _MAX_PATH - 1 );
     
    -	/* コンボボックスのユーザー インターフェイスを拡張インターフェースにする */
    +	/* コンボボックスのユーザー インターフェースを拡張インターフェースにする */
     	Combo_SetExtendedUI( GetItemHwnd( IDC_COMBO_TEXT ), TRUE );
     	Combo_SetExtendedUI( GetItemHwnd( IDC_COMBO_TEXT2 ), TRUE );
     
    diff --git a/sakura_core/dlg/CDlgSetCharSet.cpp b/sakura_core/dlg/CDlgSetCharSet.cpp
    index fd04ccdce1..da4a916421 100644
    --- a/sakura_core/dlg/CDlgSetCharSet.cpp
    +++ b/sakura_core/dlg/CDlgSetCharSet.cpp
    @@ -54,7 +54,7 @@ BOOL CDlgSetCharSet::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam )
     	m_hwndCharSet = GetItemHwnd( IDC_COMBO_CHARSET );	// 文字コードセットコンボボックス
     	m_hwndCheckBOM = GetItemHwnd( IDC_CHECK_BOM );		// BOMチェックボックス
     
    -	// コンボボックスのユーザー インターフェイスを拡張インターフェースにする
    +	// コンボボックスのユーザー インターフェースを拡張インターフェースにする
     	Combo_SetExtendedUI( m_hwndCharSet, TRUE );
     
     	// 文字コードセット選択コンボボックス初期化
    diff --git a/sakura_core/extmodule/CBregexpDll2.h b/sakura_core/extmodule/CBregexpDll2.h
    index 4058bfe45d..79a2cc4427 100644
    --- a/sakura_core/extmodule/CBregexpDll2.h
    +++ b/sakura_core/extmodule/CBregexpDll2.h
    @@ -51,7 +51,7 @@ class CBregexpDll2 : public CDllImp{
     	virtual ~CBregexpDll2();
     
     protected:
    -	// CDllImpインタフェース
    +	// CDllImpインターフェース
     	virtual LPCWSTR GetDllNameImp(int nIndex); // Jul. 5, 2001 genta インターフェース変更に伴う引数追加
     	virtual bool InitDllImp();
     
    diff --git a/sakura_core/extmodule/CIcu4cI18n.h b/sakura_core/extmodule/CIcu4cI18n.h
    index 7787221f76..1d31b7bc61 100644
    --- a/sakura_core/extmodule/CIcu4cI18n.h
    +++ b/sakura_core/extmodule/CIcu4cI18n.h
    @@ -59,7 +59,7 @@ class CIcu4cI18n : public CDllImp
     	CIcu4cI18n() noexcept;
     
     protected:
    -	// CDllImpインタフェース
    +	// CDllImpインターフェース
     	LPCWSTR GetDllNameImp(int nIndex) override;
     	bool InitDllImp() override;
     
    diff --git a/sakura_core/extmodule/CUchardet.h b/sakura_core/extmodule/CUchardet.h
    index e5e2f6a655..016b696bbd 100644
    --- a/sakura_core/extmodule/CUchardet.h
    +++ b/sakura_core/extmodule/CUchardet.h
    @@ -43,7 +43,7 @@ class CUchardet : public CDllImp
     	const char * (*_uchardet_get_charset)(uchardet_t ud) = nullptr;
     
     protected:
    -	// CDllImpインタフェース
    +	// CDllImpインターフェース
     	LPCWSTR GetDllNameImp(int nIndex) override;
     	bool InitDllImp() override;
     
    diff --git a/sakura_core/macro/CIfObj.cpp b/sakura_core/macro/CIfObj.cpp
    index cdace73d92..5255fdbea0 100644
    --- a/sakura_core/macro/CIfObj.cpp
    +++ b/sakura_core/macro/CIfObj.cpp
    @@ -1,5 +1,5 @@
     /*!	@file
    -	@brief WSHインタフェースオブジェクト基本クラス
    +	@brief WSHインターフェースオブジェクト基本クラス
     
     	@date 2009.10.29 syat CWSH.cppから切り出し
     
    @@ -257,7 +257,7 @@ HRESULT STDMETHODCALLTYPE CIfObjTypeInfo::GetNames(
     }
     
     /////////////////////////////////////////////
    -//インタフェースオブジェクト
    +//インターフェースオブジェクト
     
     //コンストラクタ
     CIfObj::CIfObj(const wchar_t* name, bool isGlobal)
    diff --git a/sakura_core/macro/CIfObj.h b/sakura_core/macro/CIfObj.h
    index a9cfdcd9a6..1a11cc1d31 100644
    --- a/sakura_core/macro/CIfObj.h
    +++ b/sakura_core/macro/CIfObj.h
    @@ -1,5 +1,5 @@
     /*!	@file
    -	@brief WSHインタフェースオブジェクト基本クラス
    +	@brief WSHインターフェースオブジェクト基本クラス
     
     	@date 2009.10.29 syat CWSH.hから切り出し
     
    @@ -67,7 +67,7 @@ class ImplementsIUnknown: public Base
     class CIfObj;
     typedef HRESULT (CIfObj::*CIfObjMethod)(int ID, DISPPARAMS *Arguments, VARIANT* Result, void *Data);
     
    -//CIfObjが必要とするWSHClientのインタフェース
    +//CIfObjが必要とするWSHClientのインターフェース
     class IWSHClient
     {
     public:
    @@ -96,7 +96,7 @@ class CIfObj
     	virtual ~CIfObj();
     
     	// フィールド・アクセサ
    -	const std::wstring::value_type* Name() const { return this->m_sName.c_str(); } // インタフェースオブジェクト名
    +	const std::wstring::value_type* Name() const { return this->m_sName.c_str(); } // インターフェースオブジェクト名
     	bool IsGlobal() const { return this->m_isGlobal; } //オブジェクト名の省略可否
     	IWSHClient* Owner() const { return this->m_Owner; } // オーナーIWSHClient
     	std::wstring m_sName;
    diff --git a/sakura_core/macro/CWSH.cpp b/sakura_core/macro/CWSH.cpp
    index 2e1c76c804..5ccd809bcd 100644
    --- a/sakura_core/macro/CWSH.cpp
    +++ b/sakura_core/macro/CWSH.cpp
    @@ -60,7 +60,7 @@ const GUID CLSID_JSScript9 =
     };
     #endif
     
    -/* 2009.10.29 syat インタフェースオブジェクト部分をCWSHIfObj.hに分離
    +/* 2009.10.29 syat インターフェースオブジェクト部分をCWSHIfObj.hに分離
     class CInterfaceObjectTypeInfo: public ImplementsIUnknown
      */
     
    @@ -126,7 +126,7 @@ class CWSHSite: public IActiveScriptSite, public IActiveScriptSiteWindow
     #ifdef TEST
     		wcout << L"GetItemInfo:" << pstrName << endl;
     #endif
    -		//指定された名前のインタフェースオブジェクトを検索
    +		//指定された名前のインターフェースオブジェクトを検索
     		const CWSHClient::List& objects = m_Client->GetInterfaceObjects();
     		for( CWSHClient::ListIter it = objects.begin(); it != objects.end(); it++ )
     		{
    @@ -276,7 +276,7 @@ CWSHClient::CWSHClient(const wchar_t *AEngine, ScriptErrorHandler AErrorHandler,
     
     CWSHClient::~CWSHClient()
     {
    -	//インタフェースオブジェクトを解放
    +	//インターフェースオブジェクトを解放
     	for( ListIter it = m_IfObjArr.begin(); it != m_IfObjArr.end(); it++ ){
     		(*it)->Release();
     	}
    @@ -441,7 +441,7 @@ void CWSHClient::Error(const wchar_t* Description)
     	SysFreeString(D);
     }
     
    -//インタフェースオブジェクトの追加
    +//インターフェースオブジェクトの追加
     void CWSHClient::AddInterfaceObject( CIfObj* obj )
     {
     	if( !obj ) return;
    diff --git a/sakura_core/macro/CWSH.h b/sakura_core/macro/CWSH.h
    index a064642ead..1cd7bea5ce 100644
    --- a/sakura_core/macro/CWSH.h
    +++ b/sakura_core/macro/CWSH.h
    @@ -5,7 +5,7 @@
     	@date 2002年4月28日,5月3日,5月5日,5月6日,5月13日,5月16日
     	@date 2002.08.25 genta リンクエラー回避のためCWSHManager.hにエディタの
     		マクロインターフェース部を分離.
    -	@date 2009.10.29 syat インタフェースオブジェクト部分をCWSHIfObj.hに分離
    +	@date 2009.10.29 syat インターフェースオブジェクト部分をCWSHIfObj.hに分離
     */
     /*
     	Copyright (C) 2002, 鬼, genta
    @@ -25,7 +25,7 @@
     //↑Microsoft Platform SDK より
     #include "macro/CIfObj.h"
     
    -/* 2009.10.29 syat インタフェースオブジェクト部分をCWSHIfObj.hに分離
    +/* 2009.10.29 syat インターフェースオブジェクト部分をCWSHIfObj.hに分離
     template
     class ImplementsIUnknown: public Base
     
    @@ -39,7 +39,7 @@ class CWSHClient final : IWSHClient
     
     public:
     	// 型定義
    -	typedef std::vector List;      // 所有しているインタフェースオブジェクトのリスト
    +	typedef std::vector List;      // 所有しているインターフェースオブジェクトのリスト
     	typedef List::const_iterator ListIter;	// そのイテレータ
     
     	// コンストラクタ・デストラクタ
    diff --git a/sakura_core/macro/CWSHIfObj.cpp b/sakura_core/macro/CWSHIfObj.cpp
    index da1cd602a2..3f62684f0a 100644
    --- a/sakura_core/macro/CWSHIfObj.cpp
    +++ b/sakura_core/macro/CWSHIfObj.cpp
    @@ -1,5 +1,5 @@
     /*!	@file
    -	@brief WSHインタフェースオブジェクト基本クラス
    +	@brief WSHインターフェースオブジェクト基本クラス
     
     	@date 2009.10.29 syat CWSH.cppから切り出し
     */
    diff --git a/sakura_core/macro/CWSHIfObj.h b/sakura_core/macro/CWSHIfObj.h
    index a830747897..09c5fc0565 100644
    --- a/sakura_core/macro/CWSHIfObj.h
    +++ b/sakura_core/macro/CWSHIfObj.h
    @@ -1,5 +1,5 @@
     /*!	@file
    -	@brief WSHインタフェースオブジェクト基本クラス
    +	@brief WSHインターフェースオブジェクト基本クラス
     
     	@date 2009.10.29 syat CWSH.hから切り出し
     
    diff --git a/sakura_core/macro/CWSHManager.cpp b/sakura_core/macro/CWSHManager.cpp
    index 04ad09baf8..ee811dd6e5 100644
    --- a/sakura_core/macro/CWSHManager.cpp
    +++ b/sakura_core/macro/CWSHManager.cpp
    @@ -68,7 +68,7 @@ bool CWSHMacroManager::ExecKeyMacro(CEditView *EditView, int flags) const
     	bool bRet = false;
     	if(Engine->m_Valid)
     	{
    -		//インタフェースオブジェクトの登録
    +		//インターフェースオブジェクトの登録
     		CWSHIfObj* objEditor = new CEditorIfObj();
     		objEditor->ReadyMethods( EditView, flags );
     		Engine->AddInterfaceObject( objEditor );
    @@ -141,19 +141,19 @@ void CWSHMacroManager::declare()
     	CMacroFactory::getInstance()->RegisterCreator(Creator);
     }
     
    -//インタフェースオブジェクトを追加する
    +//インターフェースオブジェクトを追加する
     void CWSHMacroManager::AddParam( CWSHIfObj* param )
     {
     	m_Params.push_back( param );
     }
     
    -//インタフェースオブジェクト達を追加する
    +//インターフェースオブジェクト達を追加する
     void CWSHMacroManager::AddParam( CWSHIfObj::List& params )
     {
     	m_Params.insert( m_Params.end(), params.begin(), params.end() );
     }
     
    -//インタフェースオブジェクトを削除する
    +//インターフェースオブジェクトを削除する
     void CWSHMacroManager::ClearParam()
     {
     	m_Params.clear();
    diff --git a/sakura_core/macro/CWSHManager.h b/sakura_core/macro/CWSHManager.h
    index 6c092aa08b..9da6ebc619 100644
    --- a/sakura_core/macro/CWSHManager.h
    +++ b/sakura_core/macro/CWSHManager.h
    @@ -47,9 +47,9 @@ class CWSHMacroManager final : public CMacroManagerBase
     	static CMacroManagerBase* Creator(const WCHAR* FileExt);
     	static void declare();
     
    -	void AddParam( CWSHIfObj* param );				//インタフェースオブジェクトを追加する
    -	void AddParam( CWSHIfObj::List& params );		//インタフェースオブジェクト達を追加する
    -	void ClearParam();								//インタフェースオブジェクトを削除する
    +	void AddParam( CWSHIfObj* param );				//インターフェースオブジェクトを追加する
    +	void AddParam( CWSHIfObj::List& params );		//インターフェースオブジェクト達を追加する
    +	void ClearParam();								//インターフェースオブジェクトを削除する
     protected:
     	std::wstring m_Source;
     	std::wstring m_EngineName;
    diff --git a/sakura_core/outline/CFuncInfoArr.h b/sakura_core/outline/CFuncInfoArr.h
    index bdc291bbae..86cc2c8e89 100644
    --- a/sakura_core/outline/CFuncInfoArr.h
    +++ b/sakura_core/outline/CFuncInfoArr.h
    @@ -33,7 +33,7 @@ class CFuncInfo;
     #define FL_OBJ_ENUM			5	// 列挙体
     #define FL_OBJ_UNION		6	// 共用体
     #define FL_OBJ_NAMESPACE	7	// 名前空間
    -#define FL_OBJ_INTERFACE	8	// インタフェース
    +#define FL_OBJ_INTERFACE	8	// インターフェース
     #define FL_OBJ_GLOBAL		9	// グローバル(組み込み解析では使用しない)
     #define FL_OBJ_ELEMENT_MAX	30	// プラグインで追加可能な定数の上限
     
    diff --git a/sakura_core/typeprop/CDlgTypeAscertain.h b/sakura_core/typeprop/CDlgTypeAscertain.h
    index b3fe4de9a5..48594af924 100644
    --- a/sakura_core/typeprop/CDlgTypeAscertain.h
    +++ b/sakura_core/typeprop/CDlgTypeAscertain.h
    @@ -70,6 +70,6 @@ class CDlgTypeAscertain final : public CDialog
     	LPVOID GetHelpIdTable(void) override;
     
     private:
    -	SAscertainInfo* m_psi;			// インターフェイス
    +	SAscertainInfo* m_psi;			// インターフェース
     };
     #endif /* SAKURA_CDLGTYPEASCERTAIN_7000A035_D26C_4FB2_AE75_6A63F3F806B9_H_ */
    
    From e79c737c8a6dfadfb27631af890ee102edf36208 Mon Sep 17 00:00:00 2001
    From: Mari Sano 
    Date: Tue, 3 May 2022 15:25:28 +0900
    Subject: [PATCH 0981/1024] =?UTF-8?q?=E3=80=8C=E3=83=98=E3=83=83=E3=83=80?=
     =?UTF-8?q?=E3=83=BC=E3=80=8D=E3=81=BE=E3=81=9F=E3=81=AF=E3=80=8C=E3=83=95?=
     =?UTF-8?q?=E3=83=83=E3=82=BF=E3=83=BC=E3=80=8D=E3=81=AE=E3=82=AB=E3=82=BF?=
     =?UTF-8?q?=E3=82=AB=E3=83=8A=E8=A1=A8=E8=A8=98=E3=82=92=E7=B5=B1=E4=B8=80?=
     =?UTF-8?q?=E3=81=99=E3=82=8B?=
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    コメントやドキュメントに現れる「ヘッダー」または「フッター」のカタカナ表記を統一します。
    変更対象に共通設定「ファイル」タブのチェックボックスのテキストを含んでいるため、画面表示にも影響があります。
    ---
     CHANGELOG.md                                  |  2 +-
     HeaderMake/HeaderMake.cpp                     |  2 +-
     .../source/reference/file/S_OpenHfromtoC.html |  2 +-
     help/macro/source/usage/keymacro.html         |  2 +-
     help/sakura/res/HLP000052.html                |  2 +-
     help/sakura/res/HLP000058.html                |  2 +-
     help/sakura/res/HLP000083.html                |  4 ++--
     help/sakura/res/HLP000107.html                |  4 ++--
     help/sakura/res/HLP000109.html                |  2 +-
     help/sakura/res/HLP000192.html                | 12 +++++-----
     help/sakura/res/HLP000193.html                |  2 +-
     help/sakura/res/HLP000284.html                |  6 ++---
     help/sakura/res/HLP_UR004.html                |  4 ++--
     help/sakura/res/HLP_UR007.html                |  8 +++----
     help/sakura/res/HLP_UR008.html                |  2 +-
     help/sakura/res/HLP_UR009.html                |  2 +-
     help/sakura/res/HLP_UR011.html                |  2 +-
     help/sakura/res/HLP_UR012.html                |  2 +-
     help/sakura/res/HLP_UR014.html                |  2 +-
     help/sakura/res/HLP_UR016.html                |  4 ++--
     installer/sinst_src/keyword/CSS2.khp          |  2 +-
     installer/sinst_src/keyword/S_MACPPA.KHP      |  4 ++--
     installer/sinst_src/keyword/php.khp           | 24 +++++++++----------
     parse-buildlog.py                             |  4 ++--
     sakura_core/CDicMgr.cpp                       |  2 +-
     sakura_core/CGrepAgent.h                      |  2 +-
     sakura_core/Funccode_x.hsrc                   |  4 ++--
     sakura_core/GrepInfo.h                        |  2 +-
     sakura_core/_main/CCommandLine.h              |  2 +-
     sakura_core/_main/CControlProcess.cpp         |  2 +-
     sakura_core/_main/CControlProcess.h           |  2 +-
     sakura_core/_main/CNormalProcess.h            |  2 +-
     sakura_core/_main/CProcess.h                  |  2 +-
     sakura_core/_main/CProcessFactory.h           |  2 +-
     sakura_core/_os/CDropTarget.h                 |  2 +-
     sakura_core/apiwrap/StdApi.h                  |  2 +-
     sakura_core/charset/CCodeFactory.cpp          |  2 +-
     sakura_core/charset/CCodeFactory.h            |  2 +-
     sakura_core/cmd/CViewCommander.cpp            |  4 ++--
     sakura_core/cmd/CViewCommander.h              |  4 ++--
     sakura_core/cmd/CViewCommander_File.cpp       |  8 +++----
     sakura_core/config/system_constants.h         |  2 +-
     sakura_core/dlg/CDialog.h                     |  2 +-
     sakura_core/dlg/CDlgAbout.cpp                 |  2 +-
     sakura_core/dlg/CDlgCtrlCode.cpp              |  2 +-
     sakura_core/dlg/CDlgFavorite.cpp              |  4 ++--
     sakura_core/dlg/CDlgJump.cpp                  |  2 +-
     sakura_core/dlg/CDlgPrintSetting.cpp          |  8 +++----
     sakura_core/doc/CDocOutline.cpp               |  2 +-
     sakura_core/doc/logic/CDocLineMgr.cpp         |  2 +-
     sakura_core/env/CShareData_IO.cpp             |  4 ++--
     sakura_core/func/CKeyBind.cpp                 |  4 ++--
     sakura_core/func/Funccode.cpp                 | 12 +++++-----
     sakura_core/io/CIoBridge.cpp                  |  2 +-
     sakura_core/io/CIoBridge.h                    |  2 +-
     sakura_core/macro/CMacro.cpp                  |  2 +-
     sakura_core/macro/CSMacroMgr.cpp              |  8 +++----
     sakura_core/mem/CPoolResource.h               |  2 +-
     sakura_core/outline/CDlgFuncList.cpp          |  4 ++--
     sakura_core/parse/CWordParse.cpp              |  4 ++--
     sakura_core/print/CPrint.cpp                  |  4 ++--
     sakura_core/print/CPrint.h                    | 22 ++++++++---------
     sakura_core/print/CPrintPreview.cpp           | 12 +++++-----
     sakura_core/print/CPrintPreview.h             |  2 +-
     sakura_core/sakura.hh                         |  4 ++--
     sakura_core/sakura_rc.rc                      |  8 +++----
     sakura_core/typeprop/CImpExpManager.cpp       | 18 +++++++-------
     sakura_core/types/CType_Html.cpp              |  2 +-
     sakura_core/types/CType_Text.cpp              |  2 +-
     sakura_core/uiparts/CMenuDrawer.cpp           |  4 ++--
     sakura_core/util/std_macro.h                  |  2 +-
     sakura_core/util/window.h                     |  2 +-
     sakura_core/view/CEditView.h                  |  8 +++----
     sakura_core/view/CEditView_Command.cpp        |  2 +-
     sakura_core/view/CEditView_Command_New.cpp    |  2 +-
     tests/unittest.md                             |  2 +-
     tests/unittests/test-is_mailaddress.cpp       |  2 +-
     77 files changed, 158 insertions(+), 158 deletions(-)
    
    diff --git a/CHANGELOG.md b/CHANGELOG.md
    index a789a3d1a0..88358a2455 100644
    --- a/CHANGELOG.md
    +++ b/CHANGELOG.md
    @@ -175,7 +175,7 @@
     
     - 最近使ったファイル挿入 と 最近使ったフォルダ挿入 を行う機能追加 [\#1063](https://github.com/sakura-editor/sakura/pull/1063) ([beru](https://github.com/beru))
     - PlatformToolset 指定をプロパティーシートに分離して VS2017 および VS2019 で両対応できるようにする [\#866](https://github.com/sakura-editor/sakura/pull/866) ([m-tmatma](https://github.com/m-tmatma))
    -- 「同名のC/C++ヘッダ\(ソース\)を開く」機能が利用可能か調べる処理で拡張子の確認が行われるように記述追加 [\#812](https://github.com/sakura-editor/sakura/pull/812) ([beru](https://github.com/beru))
    +- 「同名のC/C++ヘッダー\(ソース\)を開く」機能が利用可能か調べる処理で拡張子の確認が行われるように記述追加 [\#812](https://github.com/sakura-editor/sakura/pull/812) ([beru](https://github.com/beru))
     
     ### バグ修正
     
    diff --git a/HeaderMake/HeaderMake.cpp b/HeaderMake/HeaderMake.cpp
    index a599ed141d..e843ec5437 100644
    --- a/HeaderMake/HeaderMake.cpp
    +++ b/HeaderMake/HeaderMake.cpp
    @@ -33,7 +33,7 @@
     /*
     	++ 概要 ++
     
    -	enum と define の2種類の定数定義ヘッダを生成するためのモノ
    +	enum と define の2種類の定数定義ヘッダーを生成するためのモノ
     
     	enum定数はソースコードから参照し、(デバッグがしやすくなる)
     	define定数はリソースから参照する  (リソース内ではenum定数を利用できない)
    diff --git a/help/macro/source/reference/file/S_OpenHfromtoC.html b/help/macro/source/reference/file/S_OpenHfromtoC.html
    index 28de02be6f..1b9826fd07 100644
    --- a/help/macro/source/reference/file/S_OpenHfromtoC.html
    +++ b/help/macro/source/reference/file/S_OpenHfromtoC.html
    @@ -11,7 +11,7 @@
     

    S_OpenHfromtoC

    機能
    -
    同名のC/C++ヘッダ(ソース)を開く
    +
    同名のC/C++ヘッダー(ソース)を開く
    構文
    void S_OpenHfromtoC ( )
    diff --git a/help/macro/source/usage/keymacro.html b/help/macro/source/usage/keymacro.html index 4025766c59..f69cdcb862 100644 --- a/help/macro/source/usage/keymacro.html +++ b/help/macro/source/usage/keymacro.html @@ -67,7 +67,7 @@

    「キーマクロの記録」で記録できない機能(関数)

  • Print  [印刷]
  • PrintPreview  [印刷プレビュー]
  • PrintPageSetup  [ページ設定]
  • -
  • OpenHfromtoC  [同名のC/C++ヘッダ(ソース)を開く]
  • +
  • OpenHfromtoC  [同名のC/C++ヘッダー(ソース)を開く]
  • ActivateSQLPLUS  [SQL*Plusをアクティブ表示]
  • ExecSQLPLUS  [SQL*Plusで実行]
  • Browse  [ブラウズ]
  • diff --git a/help/sakura/res/HLP000052.html b/help/sakura/res/HLP000052.html index d3815acacd..0b1b66dcd6 100644 --- a/help/sakura/res/HLP000052.html +++ b/help/sakura/res/HLP000052.html @@ -30,7 +30,7 @@

    E-Mail(JIS→SJIS)コード変換


    メール本文のJISコードをSjift-JISに変換します。

    -共通設定 『ファイル』プロパティで「ファイルを開いたときにMIMEエンコードされたヘッダをデコードする」のチェック状態に関係なく、メールのヘッダーにあるMIMEエンコードされた日本語JISコードもデコードしてShift_JISに変換します。
    +共通設定 『ファイル』プロパティで「ファイルを開いたときにMIMEエンコードされたヘッダーをデコードする」のチェック状態に関係なく、メールのヘッダーにあるMIMEエンコードされた日本語JISコードもデコードしてShift_JISに変換します。

    マクロ構文
    ・構文: JIStoSJIS( );
    diff --git a/help/sakura/res/HLP000058.html b/help/sakura/res/HLP000058.html index 97f7640ce0..7ce3f4ec0b 100644 --- a/help/sakura/res/HLP000058.html +++ b/help/sakura/res/HLP000058.html @@ -40,7 +40,7 @@

    「検索(S)」メニューの一覧

    タグファイルの作成...
    ダイレクトタグジャンプ
    キーワードを指定してタグジャンプ
    -・同名のC/C++ヘッダ(ソース)を開く(C)
    +・同名のC/C++ヘッダー(ソース)を開く(C)
    ファイル内容比較(@)...
    DIFF差分表示(D)...
    次の差分へ
    diff --git a/help/sakura/res/HLP000083.html b/help/sakura/res/HLP000083.html index f6cf801e49..ce918aab35 100644 --- a/help/sakura/res/HLP000083.html +++ b/help/sakura/res/HLP000083.html @@ -94,8 +94,8 @@

    共通設定 『ファイル』プロパティ

    ファイルを開いたときにブックマークを復元する
    有効にしておくと、前にファイルを閉じたときのブックマークを復元してファイルを開きます。

    -□ファイルを開いたときにMIMEエンコードされたヘッダをデコードする
    -有効にしておくと、MIMEエンコードされているファイルを開いたときにヘッダ部をデコードして開きます。
    +□ファイルを開いたときにMIMEエンコードされたヘッダーをデコードする
    +有効にしておくと、MIMEエンコードされているファイルを開いたときにヘッダー部をデコードして開きます。

    前回と異なる文字コードのとき問い合わせを行う
    有効にしておくと、指定した文字コード(指定無しの場合は自動判別した文字コード)と前回開いた文字コードが異なるとき、問い合わせのダイアログを表示します。
    diff --git a/help/sakura/res/HLP000107.html b/help/sakura/res/HLP000107.html index 368f6a16ae..ccff924c7a 100644 --- a/help/sakura/res/HLP000107.html +++ b/help/sakura/res/HLP000107.html @@ -178,10 +178,10 @@

    キー割り当て一覧

    - + - + diff --git a/help/sakura/res/HLP000109.html b/help/sakura/res/HLP000109.html index d1f4dbcce5..ea119ebf5b 100644 --- a/help/sakura/res/HLP000109.html +++ b/help/sakura/res/HLP000109.html @@ -111,7 +111,7 @@

    Grepに関するオプション

    - +
    無題
    プラグインの種類ジャック名
    ([Plug]で定義)
    ジャック名.Labelインタフェースオブジェクト
    プラグインの種類ジャック名
    ([Plug]で定義)
    ジャック名.Labelインターフェースオブジェクト
    アウトライン解析Outlineアウトライン標準ルール選択肢Outline
    スマートインデントIndentスマートインデント選択肢Indent
    補完候補検索
    (Ver.2.0.6.0以降)
    ComplementGlobalnoComplement
    Shift+Ctrl+2メニュー22×
    Shift+Ctrl+3メニュー23×
    Shift+Ctrl+4タブメニュー×
    Shift+Ctrl+C同名のC/C++ヘッダ(ソース)を開く×
    Shift+Ctrl+C同名のC/C++ヘッダー(ソース)を開く×
    Shift+Ctrl+D単語削除
    Shift+Ctrl+E行削除(折り返し単位)
    Shift+Ctrl+H同名のC/C++ヘッダ(ソース)を開く×
    Shift+Ctrl+H同名のC/C++ヘッダー(ソース)を開く×
    Shift+Ctrl+K行末まで削除(改行単位)
    Shift+Ctrl+Lキーマクロの実行×
    Shift+Ctrl+Mキーマクロの記録開始/終了×
    O(置換)バックアップ作成 (sakura:2.2.0.0以降)
    U標準出力に出力し、Grep画面にデータを表示しない
    コマンドラインからパイプやリダイレクトを指定することで結果を利用できます。(sakura:2.2.0.0以降)
    Hヘッダ・フッタを出力しない(sakura:2.2.0.0以降)
    Hヘッダー・フッターを出力しない(sakura:2.2.0.0以降)
    (例) -GOPT=SRK

    diff --git a/help/sakura/res/HLP000192.html b/help/sakura/res/HLP000192.html index 1d007a4e7a..154bcd9325 100644 --- a/help/sakura/res/HLP000192.html +++ b/help/sakura/res/HLP000192.html @@ -4,27 +4,27 @@ -同名のC/C++ヘッダ(ソース)を開く - - +同名のC/C++ヘッダー(ソース)を開く + + -

    同名のC/C++ヘッダ(ソース)を開く

    +

    同名のC/C++ヘッダー(ソース)を開く

    C/C++の

        ・ソースファイル(.c/cpp/cxx/cc/cp/c++)

    または

    -    ・ヘッダファイル(.h/hpp/hxx/hh/hp/h++)
    +    ・ヘッダーファイル(.h/hpp/hxx/hh/hp/h++)

    を開いている場合のみ、この機能が使えます。

    編集中のファイルがソースファイルのとき、ファイル名が同じで拡張子が .h/hpp/hxx/hh/hp/h++ のファイルをこの順に探し、最初に見つかったものを開きます。
    -また編集中のファイルがヘッダファイルのときは、ファイル名が同じで拡張子が 同様.c/cpp/cxx/cc/cp/c++ の順序でソースファイルを探し、最初に見つかったものを開きます。
    +また編集中のファイルがヘッダーファイルのときは、ファイル名が同じで拡張子が 同様.c/cpp/cxx/cc/cp/c++ の順序でソースファイルを探し、最初に見つかったものを開きます。

    マクロ構文
    ・構文: OpenHfromtoC( );
    diff --git a/help/sakura/res/HLP000193.html b/help/sakura/res/HLP000193.html index c3d9e6bab6..d9374ad179 100644 --- a/help/sakura/res/HLP000193.html +++ b/help/sakura/res/HLP000193.html @@ -45,7 +45,7 @@

    コマンド一覧 (機能別)

    印刷Ctrl+P 印刷プレビューShift+Ctrl+P 印刷ページ設定※Ctrl+Alt+P -同名のC/C++ヘッダ(ソース)を開くShift+Ctrl+C, Shift+Ctrl+H +同名のC/C++ヘッダー(ソース)を開くShift+Ctrl+C, Shift+Ctrl+H SQL*Plusをアクティブ表示Shift+F11 SQL*Plusで実行F10 ブラウズCtrl+B diff --git a/help/sakura/res/HLP000284.html b/help/sakura/res/HLP000284.html index 87b17c42bb..f11d13cdd2 100644 --- a/help/sakura/res/HLP000284.html +++ b/help/sakura/res/HLP000284.html @@ -14,7 +14,7 @@

    ExpandParameter

    ExpandParameterの書式

    この特殊記号は以下の各文字列で利用できます。
      -
    • 印刷ページ設定のヘッダ・フッダ
    • +
    • 印刷ページ設定のヘッダー・フッダー
    • 外部コマンド実行
    • ウィンドウのタイトルバー文字列 共通設定 『ウィンドウ』プロパティ
    • マクロ専用関数 ExpandParameterの引数
    • @@ -47,8 +47,8 @@

      特殊記号

      $y 現在の論理行位置(1開始)
      $d 現在の日付(共通設定の日付書式)
      $t 現在の時刻(共通設定の時刻書式)
      -$p 現在のページ(印刷のヘッダ・フッダでのみ利用可能)
      -$P 総ページ(印刷のヘッダ・フッダでのみ利用可能)
      +$p 現在のページ(印刷のヘッダー・フッダーでのみ利用可能)
      +$P 総ページ(印刷のヘッダー・フッダーでのみ利用可能)
      $D ファイルのタイムスタンプ(共通設定の日付書式)
      $T ファイルのタイムスタンプ(共通設定の時刻書式)
      $V エディタのバージョン文字列
      diff --git a/help/sakura/res/HLP_UR004.html b/help/sakura/res/HLP_UR004.html index ddfa45a773..98c4249348 100644 --- a/help/sakura/res/HLP_UR004.html +++ b/help/sakura/res/HLP_UR004.html @@ -90,8 +90,8 @@

      変更履歴(2000/11/20~)


      [機能追加・仕様変更]
      -・[同名のC/C++ソース(ヘッダ)を開く]を追加 アイコンは[c←→h]
      -・(仕様) c→hはh→hpp→hxx→hh→hp→h++の順にヘッダファイルを探し、h→cはc→cpp→cxx→cc→cp→c++の順にソースファイルを探す.従来からのものもコマンドとしては残してあります(コマンド一覧)
      +・[同名のC/C++ソース(ヘッダー)を開く]を追加 アイコンは[c←→h]
      +・(仕様) c→hはh→hpp→hxx→hh→hp→h++の順にヘッダーファイルを探し、h→cはc→cpp→cxx→cc→cp→c++の順にソースファイルを探す.従来からのものもコマンドとしては残してあります(コマンド一覧)
      単発ものも上記の仕様に強化しました。
      (今まではアイコン[.c]では.c/cpp/cxx→.h、[.h]では .h→ .c/cpp/cxx ).ただし実際には[c←→h]の方が同じキー操作でどちらも開けるので楽です。
      ・カラーのindex管理を数字から文字列に変更し色設定のバージョンを2.1から3に更新した
      diff --git a/help/sakura/res/HLP_UR007.html b/help/sakura/res/HLP_UR007.html index d7167affd2..2348400389 100644 --- a/help/sakura/res/HLP_UR007.html +++ b/help/sakura/res/HLP_UR007.html @@ -17,7 +17,7 @@

      変更履歴(2001/12/03~)


      [仕様変更]
      -・印刷時のヘッダ・フッタ設定の特殊文字を &?形式から$?形式に変更。(BY horさん)
      +・印刷時のヘッダー・フッター設定の特殊文字を &?形式から$?形式に変更。(BY horさん)

      [機能追加]
      @@ -38,7 +38,7 @@

      変更履歴(2001/12/03~)

      ・検索,置換ダイアログの「該当行マーク」(F_BOOKMARK_PATTERN)もマクロで記録できるように変更 (BY horさん)
      ・再描画(F_REDRAW)もマクロで記録できるように変更 (BY horさん)
      ・ファイル→印刷を使用可能に (BY やざきさん)
      -・ページ設定ダイアログでヘッダとフッタを設定可能に (BY やざきさん)
      +・ページ設定ダイアログでヘッダーとフッターを設定可能に (BY やざきさん)
      テキストボックスは、左から、左寄せ、中央寄せ、右寄せ。
      使える特殊文字は次のとおり。
      @@ -46,7 +46,7 @@

      変更履歴(2001/12/03~)

      $F:開いているファイル名(フルパス)パス区切りが"\"
      $f:開いているファイル名(ファイル名のみ)
      $/:開いているファイル名(フルパス)パス区切りが"/"
      -$C:選択中のテキスト(ヘッダとフッタではたぶん意味なし。常に削除されるかな?)
      +$C:選択中のテキスト(ヘッダーとフッターではたぶん意味なし。常に削除されるかな?)
      $d:印刷日時(書式は、共通設定の日付書式)
      $t:印刷時刻(書式は、共通設定の時刻書式)
      $D:タイムスタンプ(日付。書式は、共通設定の日付書式)
      @@ -101,7 +101,7 @@

      変更履歴(2001/12/03~)


      [その他]
      -・ソースコードの無駄見直し。ヘッダの無用なinclude削減(BYあろかさん)
      +・ソースコードの無駄見直し。ヘッダーの無用なinclude削減(BYあろかさん)
      ・my_icmp で2バイト文字の大小文字同一視機能追加。(BY みくさん)

      [残存バグ・制限事項など]
      diff --git a/help/sakura/res/HLP_UR008.html b/help/sakura/res/HLP_UR008.html index 2c2970d20e..1e76299a20 100644 --- a/help/sakura/res/HLP_UR008.html +++ b/help/sakura/res/HLP_UR008.html @@ -180,7 +180,7 @@

      変更履歴(2002/02/23~)

      [バグ修正]
      ・水平スクロールバーを操作するとルーラーがついてこないことがあるのを修正.(BY げんた)
      -・印刷ヘッダとフッタの描画位置が、プレビューと実際の印刷で異なる.(BY やざきさん)
      +・印刷ヘッダーとフッターの描画位置が、プレビューと実際の印刷で異なる.(BY やざきさん)

      Mar. 16, 2002 (1.2.106.9)

      diff --git a/help/sakura/res/HLP_UR009.html b/help/sakura/res/HLP_UR009.html index 7dbbf6de50..de201fd69e 100644 --- a/help/sakura/res/HLP_UR009.html +++ b/help/sakura/res/HLP_UR009.html @@ -515,7 +515,7 @@

      変更履歴(2002/05/01~)


      [仕様変更]
      -・「ファイルを開いたときにMIMEエンコードされたヘッダをデコードする」をデフォルトでオフに。
      +・「ファイルを開いたときにMIMEエンコードされたヘッダーをデコードする」をデフォルトでオフに。
      ・(不正なMIME Headerがあると後続部分が失われるため。)

      [バグ修正]
      diff --git a/help/sakura/res/HLP_UR011.html b/help/sakura/res/HLP_UR011.html index e6a9d11fd9..03dba3a120 100644 --- a/help/sakura/res/HLP_UR011.html +++ b/help/sakura/res/HLP_UR011.html @@ -281,7 +281,7 @@

      変更履歴(2003/06/26~)

      ・Grepダイアログの[現在選択中のファイルから検索]でファイル名を指定した場合に""で囲むようにする.(by もかさん)
      ・「階層付テキスト」を「WZ階層付テキスト」に改名.(by もかさん)
      -・C/C++ソース・ヘッダファイルを開く関数を統合.(by もかさん)
      +・C/C++ソース・ヘッダーファイルを開く関数を統合.(by もかさん)
      ・メニューのアクセスキー表記を「機能名称(KEY)」という形に統一.(by げんた)

      Aug. 10, 2003 (1.4.2.0)
      diff --git a/help/sakura/res/HLP_UR012.html b/help/sakura/res/HLP_UR012.html index 7e370ebc1d..99b04ee95c 100644 --- a/help/sakura/res/HLP_UR012.html +++ b/help/sakura/res/HLP_UR012.html @@ -183,7 +183,7 @@

      変更履歴(2004/10/02~)


      [その他変更]
      -・プリコンパイルヘッダの有効化 (あろかさん)
      +・プリコンパイルヘッダーの有効化 (あろかさん)
      ・EOFのみの最終行でもスマートインデントが動くように (ryojiさん)
      ・正規表現無しの後方検索でマッチ方法を正規表現の場合と同様に.(かろとさん)
      ・Diff処理の改善.(コンパイルエラー回避) (maruさん)
      diff --git a/help/sakura/res/HLP_UR014.html b/help/sakura/res/HLP_UR014.html index f8348020c4..88fef08cf2 100644 --- a/help/sakura/res/HLP_UR014.html +++ b/help/sakura/res/HLP_UR014.html @@ -171,7 +171,7 @@

      Nov. 27, 2008 (1.6.3.0)

    • タブ切り替えでスクロールバーの動作が不正になることがある (svn:1356 patches:1971010 ryoji)
    • 行数が1のときにCDocLineMgr::DeleteNodeが呼ばれるとメモリリークが発生する (svn:1335 patches:1923031 ryoji)
    • CEditWnd::OnMouseMoveでCDropSourceがメモリリークする (svn:1323 patches:1958000 ryoji)
    • -
    • [同名のC/C++ヘッダファイルを開く]と[同名のC/C++ソースファイルを開く]の動作が逆(svn:1293 patches:1938647 ryoji)
    • +
    • [同名のC/C++ヘッダーファイルを開く]と[同名のC/C++ソースファイルを開く]の動作が逆(svn:1293 patches:1938647 ryoji)
    • ATOK16/2007の単語登録操作時に単語欄に選択範囲の語句が表示されない (svn:1231 patches:1881776 もか)
    • 2ページになる文書の印刷プレビューで前のページに移動するとホイールスクロールができなくなる (svn:1223 patches:1881776 dev:5243 なすこじ,げんた)
    • タブグループ画面からタブを切り離せなくなることがある (svn:1419 patches:1842668 ryoji)
    • diff --git a/help/sakura/res/HLP_UR016.html b/help/sakura/res/HLP_UR016.html index d7e8212106..ceb9efa7b0 100644 --- a/help/sakura/res/HLP_UR016.html +++ b/help/sakura/res/HLP_UR016.html @@ -213,7 +213,7 @@

      Jul. 20, 2013 (2.1.0.0)

      [機能追加]
      • カラー印刷 (svn:3030 upatchid:491 Request/105 ossan&Uchi)
      • -
      • 印刷でヘッダ・フッタのフォントを設定 (svn:3059 svn:3099 svn:3117 upatchid:536 Uchi)
      • +
      • 印刷でヘッダー・フッターのフォントを設定 (svn:3059 svn:3099 svn:3117 upatchid:536 Uchi)
      • 外部コマンド実行の拡張 (svn:3078 svn:3156 upatchid:324 upatchid:599 Request/149 Moca)
      • カラーHTMLコピー (svn:3080 upatchid:500 Request/431 Moca)
      • NEL,LS,PS限定的サポート (svn:3081 upatchid:450 Moca)
      • @@ -236,7 +236,7 @@

        Jul. 20, 2013 (2.1.0.0)

      [仕様変更]
        -
      • ヘッダ・フッタを設定していないときに印字可能領域を広げる (svn:3049 upatchid:527 aroka)
      • +
      • ヘッダー・フッターを設定していないときに印字可能領域を広げる (svn:3049 upatchid:527 aroka)
      • 印刷ページ設定のフォントサイズを高さで入力 (svn:3055 upatchid:550 aroka)
      • キーワードヘルプで「次の辞書も検索」で利用時に、フルパスではなくファイル名を表示するように (svn:3067 upatchid:511 Request/190 Moca)
      • 折り返し行インデントが限界のとき最大値のままにする (svn:3072 upatchid:531 BugReport/120 Moca)
      • diff --git a/installer/sinst_src/keyword/CSS2.khp b/installer/sinst_src/keyword/CSS2.khp index dab352afa8..bd90b24441 100644 --- a/installer/sinst_src/keyword/CSS2.khp +++ b/installer/sinst_src/keyword/CSS2.khp @@ -100,7 +100,7 @@ position /// 対象が生成するボックスの位置の計算方法を指定\ quotes /// 引用符のレンダリング方法を指定\n 引用符を挿入するかどうかは'content'で指定\n quotes: [ ]+ | none | inherit richness /// 話し声の豊かさを指定\n richness: (0~100) | inherit right /// 'position'の値がstatic以外の場合に指定可能\n ボックスの包含ブロックに対するオフセット値を指定\n right: | percentage | auto | inherit -speak-header /// 表のヘッダの音声読み上げ方法を指定\n speak-header: once | always | inherit +speak-header /// 表のヘッダーの音声読み上げ方法を指定\n speak-header: once | always | inherit speak-numeral /// 数字の読み方を指定\n speak-numeral: digits | continuous | inherit speak-punctuation /// 区切り文字の読み方を指定\n speak-punctuation: code | none | inherit speak /// テキストを音声出力するか、するならばどのような方式かを指定\n speak: normal | none | spell-out | inherit diff --git a/installer/sinst_src/keyword/S_MACPPA.KHP b/installer/sinst_src/keyword/S_MACPPA.KHP index 5ac2c22522..2d1251d91f 100644 --- a/installer/sinst_src/keyword/S_MACPPA.KHP +++ b/installer/sinst_src/keyword/S_MACPPA.KHP @@ -101,8 +101,8 @@ S_FileReopenUTF7 /// void S_FileReopenUTF7 ( ) ;\nUTF-7で開き直す S_Print /// void S_Print ( ) ;\n印刷 S_PrintPreview /// void S_PrintPreview ( ) ;\n印刷プレビュー S_PrintPageSetup /// void S_PrintPageSetup ( ) ;\n印刷ページ設定 -S_OpenHfromtoC /// void S_OpenHfromtoC ( ) ;\n同名のC/C++ヘッダ(ソース)を開く -S_OpenHHpp /// void S_OpenHHpp ( ) ;\n同名のC/C++ヘッダファイルを開く +S_OpenHfromtoC /// void S_OpenHfromtoC ( ) ;\n同名のC/C++ヘッダー(ソース)を開く +S_OpenHHpp /// void S_OpenHHpp ( ) ;\n同名のC/C++ヘッダーファイルを開く S_OpenCCpp /// void S_OpenCCpp ( ) ;\n同名のC/C++ソースファイルを開く S_ActivateSQLPLUS /// void S_ActivateSQLPLUS ( ) ;\nOracle SQL*Plusをアクティブ表示 S_ExecSQLPLUS /// void S_ExecSQLPLUS ( ) ;\nOracle SQL*Plusで実行 diff --git a/installer/sinst_src/keyword/php.khp b/installer/sinst_src/keyword/php.khp index cc698eafbe..b74a62fe8e 100644 --- a/installer/sinst_src/keyword/php.khp +++ b/installer/sinst_src/keyword/php.khp @@ -6,7 +6,7 @@ apache_response_headers /// array apache_response_headers ( void)\n Fetch all HT apache_setenv /// int apache_setenv ( string variable, string value [, bool walk_to_top])\nApacheサブプロセスの環境変数を設定する ascii2ebcdic /// int ascii2ebcdic ( string ascii_str)\nASCIIからEBCDICに文字列を変換する ebcdic2ascii /// int ebcdic2ascii ( string ebcdic_str)\nEBCDICからASCIIに文字列を変換する -getallheaders /// array getallheaders ( void)\n全てのHTTPリクエストヘッダを取得する +getallheaders /// array getallheaders ( void)\n全てのHTTPリクエストヘッダーを取得する virtual /// int virtual ( string filename)\nApacheサブリクエストを実行する array_change_key_case /// array array_change_key_case ( array input [, int case])\n 配列のキーを全て小文字または大文字にして返す array_chunk /// array array_chunk ( array input, int size [, bool preserve_keys])\n配列を分割する @@ -723,7 +723,7 @@ gmp_sqrtrm /// array gmp_sqrtrm ( resource a)\n余りと平方根 gmp_strval /// string gmp_strval ( resource gmpnumber, int [base])\nGMP 数を文字列に変換する gmp_sub /// resource gmp_sub ( resource a, resource b)\n数値の減算 gmp_xor /// resource gmp_xor ( resource a, resource b)\n論理演算 XOR -header /// int header ( string string [, bool replace])\n生のHTTPヘッダを送信する +header /// int header ( string string [, bool replace])\n生のHTTPヘッダーを送信する headers_sent /// boolean headers_sent ( void)\nヘッダーが送信されている場合に TRUE を返す setcookie /// int setcookie ( string name, string [value], int [expire], string [path], string [domain], int [secure])\nクッキーを送信する hw_Array2Objrec /// strin hw_array2objrec ( array object_array)\n オブジェクト配列からオブジェクトレコードに属性を変換する @@ -846,7 +846,7 @@ iconv_set_encoding /// array iconv_set_encoding ( string type, string charset)\n iconv /// string iconv ( string in_charset, string out_charset, string str)\n リクエストした文字エンコーディングに文字列を変換する ob_iconv_handler /// array ob_iconv_handler ( string contents, int status)\n 出力バッファハンドラとして文字エンコーディングを変換する exif_imagetype /// int|false exif_imagetype ( string filename)\nイメージの型を定義する -exif_read_data /// array exif_read_data ( string filename [, string sections [, bool arrays [, bool thumbnail]]])\n JPEGまたはTIFFから EXIFヘッダを読みこむ +exif_read_data /// array exif_read_data ( string filename [, string sections [, bool arrays [, bool thumbnail]]])\n JPEGまたはTIFFから EXIFヘッダーを読みこむ exif_thumbnail /// string exif_thumbnail ( string filename [, int &width [, int &height]])\nTIFFまたはJPEGイメージに埋め込まれたサムネイルを取得する GetImageSize /// array getimagesize ( string filename, array [imageinfo])\nJPEG、GIF、PNG、SWF画像の大きさを取得する image_type_to_mime_type /// string image_type_to_mime_type ( int imagetype)\nGet Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype @@ -939,7 +939,7 @@ iptcparse /// array iptcparse ( string iptcblock)\n バイナリのIPTChttp://ww http://www.iptc.org/ /// \n JPEG2WBMP /// int jpeg2wbmp ( string jpegname, string wbmpname, int d_height, int d_width, int threshold)\n JPEGイメージファイルからWBMPイメージファイルに変換する PNG2WBMP /// int png2wbmp ( string pngname, string wbmpname, int d_height, int d_width, int threshold)\n PNGイメージファイルからWBMPイメージファイルに変換する -read_exif_data /// array read_exif_data ( string filename)\nJPEGからEXIFヘッダを読み込む +read_exif_data /// array read_exif_data ( string filename)\nJPEGからEXIFヘッダーを読み込む imap_8bit /// string imap_8bit ( string string)\n 8bit 文字列を quoted-printable 文字列に変換する imap_alerts /// array imap_alerts ( void)\n ページリクエストの間または最後にスタックがリセットされて以来発生した 全てのIMAP警告メッセージを返す imap_append /// int imap_append ( int imap_stream, string mbox, string message, string [flags])\n 指定されたメールボックスに文字列メッセージを追加する @@ -955,17 +955,17 @@ imap_delete /// int imap_delete ( int imap_stream, int msg_number, int [flags])\ imap_deletemailbox /// int imap_deletemailbox ( int imap_stream, string mbox)\nメールボックスを削除する imap_errors /// array imap_errors ( void)\n ページのリクエストの間かエラースタックがリセットされて以来 生じた全てのIMAPエラーを返す imap_expunge /// int imap_expunge ( int imap_stream)\n 削除用にマークされたすべてのメッセージを削除する -imap_fetch_overview /// array imap_fetch_overview ( int imap_stream, string sequence)\n 指定したメッセージのヘッダ情報の概要を読む +imap_fetch_overview /// array imap_fetch_overview ( int imap_stream, string sequence)\n 指定したメッセージのヘッダー情報の概要を読む imap_fetchbody /// string imap_fetchbody ( int imap_stream, int msg_number, string part_number, flags [flags])\nメッセージ本文中の特定のセクションを取り出す -imap_fetchheader /// string imap_fetchheader ( int imap_stream, int msgno, int flags)\nメッセージのヘッダを返す +imap_fetchheader /// string imap_fetchheader ( int imap_stream, int msgno, int flags)\nメッセージのヘッダーを返す imap_fetchstructure /// object imap_fetchstructure ( int imap_stream, int msg_number, int [flags])\n 特定のメッセージの構造を読み込む imap_get_quota /// array imap_get_quota ( int imap_stream, string quota_root)\n クオータレベルの設定、メールボックス毎の使用状況を取得する imap_get_quotaroot /// array imap_get_quotaroot ( resource imap_stream, string quota_root)\n Retrieve the quota settings per user imap_getmailboxes /// array imap_getmailboxes ( int imap_stream, string ref, string pattern)\n メールボックスのリストを読み込み、各ボックスに関する詳細な情報を返す imap_getsubscribed /// array imap_getsubscribed ( int imap_stream, string ref, string pattern)\n購読中の全メールボックスの一覧 -imap_header /// object imap_header ( int imap_stream, int msg_number, int [fromlength], int [subjectlength], string [defaulthost])\nメッセージのヘッダを読む -imap_headerinfo /// object imap_headerinfo ( int imap_stream, int msg_number, int [fromlength], int [subjectlength], string [defaulthost])\nメッセージヘッダを読み込む -imap_headers /// array imap_headers ( int imap_stream)\n メールボックス内の、すべてのメッセージのヘッダを返す +imap_header /// object imap_header ( int imap_stream, int msg_number, int [fromlength], int [subjectlength], string [defaulthost])\nメッセージのヘッダーを読む +imap_headerinfo /// object imap_headerinfo ( int imap_stream, int msg_number, int [fromlength], int [subjectlength], string [defaulthost])\nメッセージヘッダーを読み込む +imap_headers /// array imap_headers ( int imap_stream)\n メールボックス内の、すべてのメッセージのヘッダーを返す imap_last_error /// string imap_last_error ( void)\n ページリクエスト時に生じた直近の IMAP エラーを返す imap_list /// array imap_list ( resource imap_stream, string ref, string pattern)\nRead the list of mailboxes imap_listmailbox /// array imap_listmailbox ( int imap_stream, string ref, string pattern)\nメールボックスのリストを読む @@ -987,7 +987,7 @@ imap_qprint /// string imap_qprint ( string string)\nquoted-printable 文字列 imap_renamemailbox /// int imap_renamemailbox ( int imap_stream, string old_mbox, string new_mbox)\nメールボックスの名前を変更する imap_reopen /// int imap_reopen ( int imap_stream, string mailbox, string [flags])\n 新規メールボックスへのIMAP ストリームを再度オープンする imap_rfc822_parse_adrlist /// array imap_rfc822_parse_adrlist ( string address, string default_host)\nアドレス文字列を解釈します -imap_rfc822_parse_headers /// object imap_rfc822_parse_headers ( string headers, string [defaulthost])\n文字列からメールヘッダを解釈する +imap_rfc822_parse_headers /// object imap_rfc822_parse_headers ( string headers, string [defaulthost])\n文字列からメールヘッダーを解釈する imap_rfc822_write_address /// string imap_rfc822_write_address ( string mailbox, string host, string personal)\n 指定したメールボックス、ホスト、個人情報を適当にフォーマットされ た電子メールアドレスにして返す imap_scanmailbox /// array imap_scanmailbox ( int imap_stream, string ref, string pattern, string content)\n メールボックスのリストを読み、メールボックスのテキストにおいて 文字列を検索する imap_search /// array imap_search ( int imap_stream, string criteria, int flags)\n 指定した検索条件にマッチするメッセージを配列として返す @@ -1221,11 +1221,11 @@ mb_convert_case /// string mb_convert_case ( string str, int mode [, string enco mb_convert_encoding /// string mb_convert_encoding ( string str, string to-encoding [, mixed from-encoding])\n文字エンコーディングを変換する mb_convert_kana /// string mb_convert_kana ( string str, string option [, mixed encoding])\n カナを("全角かな"、"半角かな"等に)変換する mb_convert_variables /// string mb_convert_variables ( string to-encoding, mixed from-encoding, mixed vars)\n変数の文字コードを変換する -mb_decode_mimeheader /// string mb_decode_mimeheader ( string str)\nMIMEヘッダフィールドの文字列をデコードする +mb_decode_mimeheader /// string mb_decode_mimeheader ( string str)\nMIMEヘッダーフィールドの文字列をデコードする mb_decode_numericentity /// string mb_decode_numericentity ( string str, array convmap [, string encoding])\n HTML数値エンティティを文字にデコードする mb_detect_encoding /// string mb_detect_encoding ( string str [, mixed encoding-list])\n文字エンコーディングを検出する mb_detect_order /// array mb_detect_order ( [mixed encoding-list])\n 文字エンコーディング検出順序の設定/取得 -mb_encode_mimeheader /// string mb_encode_mimeheader ( string str [, string charset [, string transfer-encoding [, string linefeed]]])\nMIMEヘッダの文字列をエンコードする +mb_encode_mimeheader /// string mb_encode_mimeheader ( string str [, string charset [, string transfer-encoding [, string linefeed]]])\nMIMEヘッダーの文字列をエンコードする mb_encode_numericentity /// string mb_encode_numericentity ( string str, array convmap [, string encoding])\n 文字をHTML数値エンティティにエンコードする mb_ereg_match /// bool mb_ereg_match ( string pattern, string string [, string option])\nマルチバイト文字列が正規表現に一致するか調べる mb_ereg_replace /// string mb_ereg_replace ( string pattern, string replacement, string string [, array option])\nマルチバイト文字列に正規表現による置換を行う diff --git a/parse-buildlog.py b/parse-buildlog.py index 3d918a4486..ecd63d22f7 100644 --- a/parse-buildlog.py +++ b/parse-buildlog.py @@ -171,7 +171,7 @@ def converterPython2(value): # 列幅に必要なサイズを保持する配列 maxWidths = [] - # ヘッダ部分を設定する + # ヘッダー部分を設定する y = 0 for x, item in enumerate(excelKeys): cell = ws.cell(row=y+1, column=x+1) @@ -283,7 +283,7 @@ def converterPython2(value): 'blobURL', ] - # ヘッダ部分を設定 + # ヘッダー部分を設定 for x, key in enumerate(outputKeys): cell = wsError.cell(row=y+1, column=x+1) cell.value = key diff --git a/sakura_core/CDicMgr.cpp b/sakura_core/CDicMgr.cpp index 452baeb1f6..4579f2ec7c 100644 --- a/sakura_core/CDicMgr.cpp +++ b/sakura_core/CDicMgr.cpp @@ -19,7 +19,7 @@ #include "StdAfx.h" #include #include "CDicMgr.h" -#include "mem/CMemory.h" // 2002/2/10 aroka ヘッダ整理 +#include "mem/CMemory.h" // 2002/2/10 aroka ヘッダー整理 #include "mem/CNativeW.h" #include "debug/CRunningTimer.h" #include "io/CTextStream.h" diff --git a/sakura_core/CGrepAgent.h b/sakura_core/CGrepAgent.h index 7f4c219359..f60f6fa818 100644 --- a/sakura_core/CGrepAgent.h +++ b/sakura_core/CGrepAgent.h @@ -39,7 +39,7 @@ struct SGrepOption{ bool bGrepReplace; //!< Grep置換 bool bGrepSubFolder; //!< サブフォルダからも検索する bool bGrepStdout; //!< 標準出力モード - bool bGrepHeader; //!< ヘッダ・フッダ表示 + bool bGrepHeader; //!< ヘッダー・フッダー表示 ECodeType nGrepCharSet; //!< 文字コードセット選択 int nGrepOutputLineType; //!< 0:ヒット部分を出力, 1: ヒット行を出力, 2: 否ヒット行を出力 int nGrepOutputStyle; //!< 出力形式 1: Normal, 2: WZ風(ファイル単位) 3: 結果のみ diff --git a/sakura_core/Funccode_x.hsrc b/sakura_core/Funccode_x.hsrc index 43b8d3c440..61892ca740 100644 --- a/sakura_core/Funccode_x.hsrc +++ b/sakura_core/Funccode_x.hsrc @@ -86,9 +86,9 @@ F_PRINT = 30150, //印刷 なし F_PRINT_PREVIEW = 30151, //印刷プレビュー なし F_PRINT_PAGESETUP = 30152, //印刷ページ設定 なし //F_PRINT_DIALOG = 30151, //印刷ダイアログ ? -//F_OPEN_HHPP = 30160, //同名のC/C++ヘッダファイルを開く bool bCheckOnly // del 2008/6/23 Uchi +//F_OPEN_HHPP = 30160, //同名のC/C++ヘッダーファイルを開く bool bCheckOnly // del 2008/6/23 Uchi //F_OPEN_CCPP = 30161, //同名のC/C++ソースファイルを開く bool bCheckOnly // del 2008/6/23 Uchi -F_OPEN_HfromtoC = 30162, //同名のC/C++ヘッダ(ソース)を開く bool bCheckOnly +F_OPEN_HfromtoC = 30162, //同名のC/C++ヘッダー(ソース)を開く bool bCheckOnly F_ACTIVATE_SQLPLUS = 30170, //Oracle SQL*Plusをアクティブ表示 なし F_PLSQL_COMPILE_ON_SQLPLUS = 30171, //Oracle SQL*Plusで実行 なし F_BROWSE = 30180, //ブラウズ なし diff --git a/sakura_core/GrepInfo.h b/sakura_core/GrepInfo.h index 508d5518e2..5f24537af0 100644 --- a/sakura_core/GrepInfo.h +++ b/sakura_core/GrepInfo.h @@ -46,7 +46,7 @@ struct GrepInfo { SSearchOption sGrepSearchOption; //!< 検索オプション bool bGrepCurFolder; //!< カレントディレクトリを維持 bool bGrepStdout; //!< 標準出力モード - bool bGrepHeader; //!< ヘッダ情報表示 + bool bGrepHeader; //!< ヘッダー情報表示 bool bGrepSubFolder; //!< サブフォルダを検索する ECodeType nGrepCharSet; //!< 文字コードセット int nGrepOutputStyle; //!< 結果出力形式 diff --git a/sakura_core/_main/CCommandLine.h b/sakura_core/_main/CCommandLine.h index 18125145d0..addd8c10f2 100644 --- a/sakura_core/_main/CCommandLine.h +++ b/sakura_core/_main/CCommandLine.h @@ -1,5 +1,5 @@ /*! @file - @brief コマンドラインパーサ ヘッダファイル + @brief コマンドラインパーサ ヘッダーファイル @author aroka @date 2002/01/08 作成 diff --git a/sakura_core/_main/CControlProcess.cpp b/sakura_core/_main/CControlProcess.cpp index ed1db79ee5..f65c3a2b89 100644 --- a/sakura_core/_main/CControlProcess.cpp +++ b/sakura_core/_main/CControlProcess.cpp @@ -23,7 +23,7 @@ #include "env/CShareData_IO.h" #include "debug/CRunningTimer.h" #include "env/CShareData.h" -#include "sakura_rc.h"/// IDD_EXITTING 2002/2/10 aroka ヘッダ整理 +#include "sakura_rc.h"/// IDD_EXITTING 2002/2/10 aroka ヘッダー整理 #include "config/system_constants.h" #include "String_define.h" diff --git a/sakura_core/_main/CControlProcess.h b/sakura_core/_main/CControlProcess.h index e42f5527de..e8eef37b13 100644 --- a/sakura_core/_main/CControlProcess.h +++ b/sakura_core/_main/CControlProcess.h @@ -1,5 +1,5 @@ /*! @file - @brief コントロールプロセスクラスヘッダファイル + @brief コントロールプロセスクラスヘッダーファイル @author aroka @date 2002/01/08 作成 diff --git a/sakura_core/_main/CNormalProcess.h b/sakura_core/_main/CNormalProcess.h index d517594b4c..7b4f509c65 100644 --- a/sakura_core/_main/CNormalProcess.h +++ b/sakura_core/_main/CNormalProcess.h @@ -1,5 +1,5 @@ /*! @file - @brief エディタプロセスクラスヘッダファイル + @brief エディタプロセスクラスヘッダーファイル @author aroka @date 2002/01/08 作成 diff --git a/sakura_core/_main/CProcess.h b/sakura_core/_main/CProcess.h index 9db1943f43..a4128afdc1 100644 --- a/sakura_core/_main/CProcess.h +++ b/sakura_core/_main/CProcess.h @@ -1,5 +1,5 @@ /*! @file - @brief プロセス基底クラスヘッダファイル + @brief プロセス基底クラスヘッダーファイル @author aroka @date 2002/01/08 作成 diff --git a/sakura_core/_main/CProcessFactory.h b/sakura_core/_main/CProcessFactory.h index 5274eb7e49..aabb409955 100644 --- a/sakura_core/_main/CProcessFactory.h +++ b/sakura_core/_main/CProcessFactory.h @@ -1,5 +1,5 @@ /*! @file - @brief プロセス生成クラスヘッダファイル + @brief プロセス生成クラスヘッダーファイル @author aroka @date 2002/01/08 作成 diff --git a/sakura_core/_os/CDropTarget.h b/sakura_core/_os/CDropTarget.h index f2cdfa4779..3f38c60daf 100644 --- a/sakura_core/_os/CDropTarget.h +++ b/sakura_core/_os/CDropTarget.h @@ -24,7 +24,7 @@ class CDropTarget; class CYbInterfaceBase; class CEditWnd; // 2008.06.20 ryoji -class CEditView;// 2002/2/3 aroka ヘッダ軽量化 +class CEditView;// 2002/2/3 aroka ヘッダー軽量化 /*----------------------------------------------------------------------- クラスの宣言 diff --git a/sakura_core/apiwrap/StdApi.h b/sakura_core/apiwrap/StdApi.h index 0731af8445..a14544d6d2 100644 --- a/sakura_core/apiwrap/StdApi.h +++ b/sakura_core/apiwrap/StdApi.h @@ -27,7 +27,7 @@ #define SAKURA_STDAPI_29C8A971_234C_46ED_96DB_A2D479992ABE_H_ #pragma once -//ランタイム情報ライブラリにアクセスするWindowsヘッダを参照する +//ランタイム情報ライブラリにアクセスするWindowsヘッダーを参照する #include //デバッグ用。 diff --git a/sakura_core/charset/CCodeFactory.cpp b/sakura_core/charset/CCodeFactory.cpp index ac6be7984f..b30e313c8c 100644 --- a/sakura_core/charset/CCodeFactory.cpp +++ b/sakura_core/charset/CCodeFactory.cpp @@ -42,7 +42,7 @@ //! eCodeTypeに適合する CCodeBaseインスタンス を生成 CCodeBase* CCodeFactory::CreateCodeBase( ECodeType eCodeType, //!< 文字コード - int nFlag //!< bit 0: MIME Encodeされたヘッダをdecodeするかどうか + int nFlag //!< bit 0: MIME Encodeされたヘッダーをdecodeするかどうか ) { switch( eCodeType ){ diff --git a/sakura_core/charset/CCodeFactory.h b/sakura_core/charset/CCodeFactory.h index 02960b1a74..6bf5782955 100644 --- a/sakura_core/charset/CCodeFactory.h +++ b/sakura_core/charset/CCodeFactory.h @@ -36,7 +36,7 @@ class CCodeFactory{ //! eCodeTypeに適合する CCodeBaseインスタンス を生成 static CCodeBase* CreateCodeBase( ECodeType eCodeType, //!< 文字コード - int nFlag //!< bit 0: MIME Encodeされたヘッダをdecodeするかどうか + int nFlag //!< bit 0: MIME Encodeされたヘッダーをdecodeするかどうか ); //! eCodeTypeに適合する CCodeBaseインスタンス を生成 diff --git a/sakura_core/cmd/CViewCommander.cpp b/sakura_core/cmd/CViewCommander.cpp index 168a6493cf..fb2113614c 100644 --- a/sakura_core/cmd/CViewCommander.cpp +++ b/sakura_core/cmd/CViewCommander.cpp @@ -226,8 +226,8 @@ BOOL CViewCommander::HandleCommand( case F_PRINT: Command_PRINT();break; /* 印刷 */ case F_PRINT_PREVIEW: Command_PRINT_PREVIEW();break; /* 印刷プレビュー */ case F_PRINT_PAGESETUP: Command_PRINT_PAGESETUP();break; /* 印刷ページ設定 */ //Sept. 14, 2000 jepro 「印刷のページレイアウトの設定」から変更 - case F_OPEN_HfromtoC: bRet = Command_OPEN_HfromtoC( (BOOL)lparam1 );break; /* 同名のC/C++ヘッダ(ソース)を開く */ //Feb. 7, 2001 JEPRO 追加 -// case F_OPEN_HHPP: bRet = Command_OPEN_HHPP( (BOOL)lparam1, TRUE );break; /* 同名のC/C++ヘッダファイルを開く */ //Feb. 9, 2001 jepro「.cまたは.cppと同名の.hを開く」から変更 del 2008/6/23 Uchi + case F_OPEN_HfromtoC: bRet = Command_OPEN_HfromtoC( (BOOL)lparam1 );break; /* 同名のC/C++ヘッダー(ソース)を開く */ //Feb. 7, 2001 JEPRO 追加 +// case F_OPEN_HHPP: bRet = Command_OPEN_HHPP( (BOOL)lparam1, TRUE );break; /* 同名のC/C++ヘッダーファイルを開く */ //Feb. 9, 2001 jepro「.cまたは.cppと同名の.hを開く」から変更 del 2008/6/23 Uchi // case F_OPEN_CCPP: bRet = Command_OPEN_CCPP( (BOOL)lparam1, TRUE );break; /* 同名のC/C++ソースファイルを開く */ //Feb. 9, 2001 jepro「.hと同名の.c(なければ.cpp)を開く」から変更 del 2008/6/23 Uchi case F_ACTIVATE_SQLPLUS: Command_ACTIVATE_SQLPLUS();break; /* Oracle SQL*Plusをアクティブ表示 */ case F_PLSQL_COMPILE_ON_SQLPLUS: /* Oracle SQL*Plusで実行 */ diff --git a/sakura_core/cmd/CViewCommander.h b/sakura_core/cmd/CViewCommander.h index 3d159d8c5e..fecbda581f 100644 --- a/sakura_core/cmd/CViewCommander.h +++ b/sakura_core/cmd/CViewCommander.h @@ -111,8 +111,8 @@ class CViewCommander{ void Command_PRINT( void ); /* 印刷*/ void Command_PRINT_PREVIEW( void ); /* 印刷プレビュー*/ void Command_PRINT_PAGESETUP( void ); /* 印刷ページ設定 */ //Sept. 14, 2000 jepro 「印刷のページレイアウトの設定」から変更 - BOOL Command_OPEN_HfromtoC(BOOL bCheckOnly); /* 同名のC/C++ヘッダ(ソース)を開く */ //Feb. 7, 2001 JEPRO 追加 - BOOL Command_OPEN_HHPP( BOOL bCheckOnly, BOOL bBeepWhenMiss ); /* 同名のC/C++ヘッダファイルを開く */ //Feb. 9, 2001 jepro「.cまたは.cppと同名の.hを開く」から変更 + BOOL Command_OPEN_HfromtoC(BOOL bCheckOnly); /* 同名のC/C++ヘッダー(ソース)を開く */ //Feb. 7, 2001 JEPRO 追加 + BOOL Command_OPEN_HHPP( BOOL bCheckOnly, BOOL bBeepWhenMiss ); /* 同名のC/C++ヘッダーファイルを開く */ //Feb. 9, 2001 jepro「.cまたは.cppと同名の.hを開く」から変更 BOOL Command_OPEN_CCPP( BOOL bCheckOnly, BOOL bBeepWhenMiss ); /* 同名のC/C++ソースファイルを開く */ //Feb. 9, 2001 jepro「.hと同名の.c(なければ.cpp)を開く」から変更 void Command_ACTIVATE_SQLPLUS( void ); /* Oracle SQL*Plusをアクティブ表示 */ void Command_PLSQL_COMPILE_ON_SQLPLUS( void );/* Oracle SQL*Plusで実行 */ diff --git a/sakura_core/cmd/CViewCommander_File.cpp b/sakura_core/cmd/CViewCommander_File.cpp index e660169fb0..0fc84c8c7c 100644 --- a/sakura_core/cmd/CViewCommander_File.cpp +++ b/sakura_core/cmd/CViewCommander_File.cpp @@ -310,7 +310,7 @@ void CViewCommander::Command_PRINT_PAGESETUP( void ) } //From Here Feb. 10, 2001 JEPRO 追加 -/* C/C++ヘッダファイルまたはソースファイル オープン機能 */ +/* C/C++ヘッダーファイルまたはソースファイル オープン機能 */ BOOL CViewCommander::Command_OPEN_HfromtoC( BOOL bCheckOnly ) { if ( Command_OPEN_HHPP( bCheckOnly, FALSE ) ) return TRUE; @@ -321,11 +321,11 @@ BOOL CViewCommander::Command_OPEN_HfromtoC( BOOL bCheckOnly ) // 2003.06.28 Moca コメントとして残っていたコードを削除 } -/* C/C++ヘッダファイル オープン機能 */ //Feb. 10, 2001 jepro 説明を「インクルードファイル」から変更 +/* C/C++ヘッダーファイル オープン機能 */ //Feb. 10, 2001 jepro 説明を「インクルードファイル」から変更 //BOOL CViewCommander::Command_OPENINCLUDEFILE( BOOL bCheckOnly ) BOOL CViewCommander::Command_OPEN_HHPP( BOOL bCheckOnly, BOOL bBeepWhenMiss ) { - // 2003.06.28 Moca ヘッダ・ソースのコードを統合&削除 + // 2003.06.28 Moca ヘッダー・ソースのコードを統合&削除 static const WCHAR* source_ext[] = { L"c", L"cpp", L"cxx", L"cc", L"cp", L"c++" }; static const WCHAR* header_ext[] = { L"h", L"hpp", L"hxx", L"hh", L"hp", L"h++" }; return m_pCommanderView->OPEN_ExtFromtoExt( @@ -338,7 +338,7 @@ BOOL CViewCommander::Command_OPEN_HHPP( BOOL bCheckOnly, BOOL bBeepWhenMiss ) //BOOL CViewCommander::Command_OPENCCPP( BOOL bCheckOnly ) //Feb. 10, 2001 JEPRO コマンド名を若干変更 BOOL CViewCommander::Command_OPEN_CCPP( BOOL bCheckOnly, BOOL bBeepWhenMiss ) { - // 2003.06.28 Moca ヘッダ・ソースのコードを統合&削除 + // 2003.06.28 Moca ヘッダー・ソースのコードを統合&削除 static const WCHAR* source_ext[] = { L"c", L"cpp", L"cxx", L"cc", L"cp", L"c++" }; static const WCHAR* header_ext[] = { L"h", L"hpp", L"hxx", L"hh", L"hp", L"h++" }; return m_pCommanderView->OPEN_ExtFromtoExt( diff --git a/sakura_core/config/system_constants.h b/sakura_core/config/system_constants.h index c66120078c..1eda1fc6e8 100644 --- a/sakura_core/config/system_constants.h +++ b/sakura_core/config/system_constants.h @@ -413,7 +413,7 @@ カラー印刷 Version 132: - 印刷のヘッダ・フッタのフォント指定 + 印刷のヘッダー・フッターのフォント指定 Version 133: 外部コマンド実行のカレントディレクトリ 2013.02.22 Moca diff --git a/sakura_core/dlg/CDialog.h b/sakura_core/dlg/CDialog.h index 3e50d2ee5f..711f610189 100644 --- a/sakura_core/dlg/CDialog.h +++ b/sakura_core/dlg/CDialog.h @@ -1,5 +1,5 @@ /*! @file - @brief Dialog Box基底クラスヘッダファイル + @brief Dialog Box基底クラスヘッダーファイル @author Norio Nakatani */ diff --git a/sakura_core/dlg/CDlgAbout.cpp b/sakura_core/dlg/CDlgAbout.cpp index 253839913c..6badf7c807 100644 --- a/sakura_core/dlg/CDlgAbout.cpp +++ b/sakura_core/dlg/CDlgAbout.cpp @@ -169,7 +169,7 @@ BOOL CDlgAbout::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) // Jun. 8, 2001 genta GPL化に伴い、OfficialなReleaseとしての道を歩み始める // Feb. 7, 2002 genta コンパイラ情報追加 // 2004.05.13 Moca バージョン番号は、プロセスごとに取得する - // 2010.04.15 Moca コンパイラ情報を分離/WINヘッダ,N_SHAREDATA_VERSION追加 + // 2010.04.15 Moca コンパイラ情報を分離/WINヘッダー,N_SHAREDATA_VERSION追加 // 以下の形式で出力 //サクラエディタ開発版(64bitデバッグ) Ver. 2.4.1.1234 GHA (xxxxxxxx) diff --git a/sakura_core/dlg/CDlgCtrlCode.cpp b/sakura_core/dlg/CDlgCtrlCode.cpp index 9dbd2dc15b..7a38bab9c3 100644 --- a/sakura_core/dlg/CDlgCtrlCode.cpp +++ b/sakura_core/dlg/CDlgCtrlCode.cpp @@ -57,7 +57,7 @@ struct ctrl_info_t { const WCHAR *jname; //説明 } static p_ctrl_list[] = { { 0x0000, 0x00c0, L"NUL", L"" }, //NULL 空文字 - { 0x0001, 'A', L"SOH", L"" }, //START OF HEADING ヘッダ開始 + { 0x0001, 'A', L"SOH", L"" }, //START OF HEADING ヘッダー開始 { 0x0002, 'B', L"STX", L"" }, //START OF TEXT テキスト開始 { 0x0003, 'C', L"ETX", L"" }, //END OF TEXT テキスト終了 { 0x0004, 'D', L"EOT", L"" }, //END OF TRANSMISSION 転送終了 diff --git a/sakura_core/dlg/CDlgFavorite.cpp b/sakura_core/dlg/CDlgFavorite.cpp index 004afd6685..1ad281e505 100644 --- a/sakura_core/dlg/CDlgFavorite.cpp +++ b/sakura_core/dlg/CDlgFavorite.cpp @@ -636,7 +636,7 @@ BOOL CDlgFavorite::OnNotify(NMHDR* pNMHDR) } return TRUE; - // ListViewヘッダクリック:ソートする + // ListViewヘッダークリック:ソートする case LVN_COLUMNCLICK: ListViewSort( m_aListViewInfo[m_nCurrentTab], @@ -1130,7 +1130,7 @@ void CDlgFavorite::ListViewSort(ListViewSortInfo& info, const CRecent* pRecent, info.bSortAscending = (bReverse ? (!info.bSortAscending): true); } - // ヘッダ書き換え + // ヘッダー書き換え WCHAR szHeader[200]; LV_COLUMN col; if( -1 != info.nSortColumn ){ diff --git a/sakura_core/dlg/CDlgJump.cpp b/sakura_core/dlg/CDlgJump.cpp index c7ea236588..3b5022cdd9 100644 --- a/sakura_core/dlg/CDlgJump.cpp +++ b/sakura_core/dlg/CDlgJump.cpp @@ -21,7 +21,7 @@ #include "doc/CEditDoc.h" #include "func/Funccode.h" // Stonee, 2001/03/12 #include "outline/CFuncInfo.h" -#include "outline/CFuncInfoArr.h"// 2002/2/10 aroka ヘッダ整理 +#include "outline/CFuncInfoArr.h"// 2002/2/10 aroka ヘッダー整理 #include "util/shell.h" #include "util/os.h" #include "window/CEditWnd.h" diff --git a/sakura_core/dlg/CDlgPrintSetting.cpp b/sakura_core/dlg/CDlgPrintSetting.cpp index 20eb77aa65..559a761266 100644 --- a/sakura_core/dlg/CDlgPrintSetting.cpp +++ b/sakura_core/dlg/CDlgPrintSetting.cpp @@ -633,11 +633,11 @@ int CDlgPrintSetting::GetData( void ) ::DlgItem_GetText( GetHwnd(), IDC_EDIT_FOOT2, m_PrintSettingArr[m_nCurrentPrintSetting].m_szFooterForm[1], HEADER_MAX ); // 100文字で制限しないと。。。 ::DlgItem_GetText( GetHwnd(), IDC_EDIT_FOOT3, m_PrintSettingArr[m_nCurrentPrintSetting].m_szFooterForm[2], HEADER_MAX ); // 100文字で制限しないと。。。 - // ヘッダフォント + // ヘッダーフォント if (!IsDlgButtonCheckedBool( GetHwnd(), IDC_CHECK_USE_FONT_HEAD )) { memset( &m_PrintSettingArr[m_nCurrentPrintSetting].m_lfHeader, 0, sizeof(LOGFONT) ); } - // フッタフォント + // フッターフォント if (!IsDlgButtonCheckedBool( GetHwnd(), IDC_CHECK_USE_FONT_FOOT )) { memset( &m_PrintSettingArr[m_nCurrentPrintSetting].m_lfFooter, 0, sizeof(LOGFONT) ); } @@ -733,11 +733,11 @@ void CDlgPrintSetting::OnChangeSettingType( BOOL bGetData ) ::DlgItem_SetText( GetHwnd(), IDC_EDIT_FOOT2, m_PrintSettingArr[m_nCurrentPrintSetting].m_szFooterForm[POS_CENTER] ); // 100文字で制限しないと。。。 ::DlgItem_SetText( GetHwnd(), IDC_EDIT_FOOT3, m_PrintSettingArr[m_nCurrentPrintSetting].m_szFooterForm[POS_RIGHT] ); // 100文字で制限しないと。。。 - // ヘッダフォント + // ヘッダーフォント SetFontName( IDC_STATIC_FONT_HEAD, IDC_CHECK_USE_FONT_HEAD, m_PrintSettingArr[m_nCurrentPrintSetting].m_lfHeader, m_PrintSettingArr[m_nCurrentPrintSetting].m_nHeaderPointSize ); - // フッタフォント + // フッターフォント SetFontName( IDC_STATIC_FONT_FOOT, IDC_CHECK_USE_FONT_FOOT, m_PrintSettingArr[m_nCurrentPrintSetting].m_lfFooter, m_PrintSettingArr[m_nCurrentPrintSetting].m_nFooterPointSize ); diff --git a/sakura_core/doc/CDocOutline.cpp b/sakura_core/doc/CDocOutline.cpp index 4f4863ea96..50d8984ea1 100644 --- a/sakura_core/doc/CDocOutline.cpp +++ b/sakura_core/doc/CDocOutline.cpp @@ -229,7 +229,7 @@ void CDocOutline::MakeFuncList_RuleFile( CFuncInfoArr* pcFuncInfoArr, std::wstri sTitleOverride = title.c_str(); } - /* ネストの深さは、32レベルまで、ひとつのヘッダは、最長256文字まで区別 + /* ネストの深さは、32レベルまで、ひとつのヘッダーは、最長256文字まで区別 (256文字まで同じだったら同じものとして扱います) */ const int nMaxStack = 32; // ネストの最深 diff --git a/sakura_core/doc/logic/CDocLineMgr.cpp b/sakura_core/doc/logic/CDocLineMgr.cpp index a644720a16..1e05f4db47 100644 --- a/sakura_core/doc/logic/CDocLineMgr.cpp +++ b/sakura_core/doc/logic/CDocLineMgr.cpp @@ -27,7 +27,7 @@ #include #include #include "CDocLineMgr.h" -#include "CDocLine.h"// 2002/2/10 aroka ヘッダ整理 +#include "CDocLine.h"// 2002/2/10 aroka ヘッダー整理 #include "charset/charcode.h" #include "charset/CCodeFactory.h" #include "charset/CCodeBase.h" diff --git a/sakura_core/env/CShareData_IO.cpp b/sakura_core/env/CShareData_IO.cpp index a18e9407b9..d679f81e86 100644 --- a/sakura_core/env/CShareData_IO.cpp +++ b/sakura_core/env/CShareData_IO.cpp @@ -1295,14 +1295,14 @@ void CShareData_IO::ShareData_IO_Print( CDataProfile& cProfile ) cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(printsetting.m_szPrintFontFaceHan)); auto_sprintf( szKeyName, LTEXT("PS[%02d].szFFZ") , i ); cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(printsetting.m_szPrintFontFaceZen)); - // ヘッダ/フッタ + // ヘッダー/フッター for( j = 0; j < 3; ++j ){ auto_sprintf( szKeyName, LTEXT("PS[%02d].szHF[%d]") , i, j ); cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(printsetting.m_szHeaderForm[j])); auto_sprintf( szKeyName, LTEXT("PS[%02d].szFTF[%d]"), i, j ); cProfile.IOProfileData(pszSecName, szKeyName, StringBufferW(printsetting.m_szFooterForm[j])); } - { // ヘッダ/フッタ フォント設定 + { // ヘッダー/フッター フォント設定 WCHAR szKeyName2[64]; WCHAR szKeyName3[64]; auto_sprintf( szKeyName, LTEXT("PS[%02d].lfHeader"), i ); diff --git a/sakura_core/func/CKeyBind.cpp b/sakura_core/func/CKeyBind.cpp index 6c4cbb33f7..7349da80a1 100644 --- a/sakura_core/func/CKeyBind.cpp +++ b/sakura_core/func/CKeyBind.cpp @@ -600,14 +600,14 @@ EFunctionCode CKeyBind::GetFuncCodeAt( KEYDATA& KeyData, int nState, BOOL bGetDe //2001.12.06 hor Alt+A を「SORT_ASC」に割当 //Jan. 13, 2001 JEPRO Ctrl+B に「ブラウズ」を追加 //Jan. 16, 2001 JEPRO SHift+Ctrl+C に「.hと同名の.c(なければ.cpp)を開く」を追加 -//Feb. 07, 2001 JEPRO SHift+Ctrl+C を「.hと同名の.c(なければ.cpp)を開く」→「同名のC/C++ヘッダ(ソース)を開く」に変更 +//Feb. 07, 2001 JEPRO SHift+Ctrl+C を「.hと同名の.c(なければ.cpp)を開く」→「同名のC/C++ヘッダー(ソース)を開く」に変更 //Jan. 16, 2001 JEPRO Ctrl+D に「単語切り取り」, Shift+Ctrl+D に「単語削除」を追加 //2001.12.06 hor Alt+D を「SORT_DESC」に割当 //Oct. 7, 2000 JEPRO Ctrl+Alt+E に「重ねて表示」を追加 //Jan. 16, 2001 JEPRO Ctrl+E に「行切り取り(折り返し単位)」, Shift+Ctrl+E に「行削除(折り返し単位)」を追加 //Oct. 07, 2000 JEPRO Ctrl+Alt+H に「上下に並べて表示」を追加 //Jan. 16, 2001 JEPRO Ctrl+H を「カーソル前を削除」→「カーソル行をウィンドウ中央へ」に変更し Shift+Ctrl+H に「.cまたは.cppと同名の.hを開く」を追加 -//Feb. 07, 2001 JEPRO SHift+Ctrl+H を「.cまたは.cppと同名の.hを開く」→「同名のC/C++ヘッダ(ソース)を開く」に変更 +//Feb. 07, 2001 JEPRO SHift+Ctrl+H を「.cまたは.cppと同名の.hを開く」→「同名のC/C++ヘッダー(ソース)を開く」に変更 //Jan. 21, 2001 JEPRO Ctrl+I に「行の二重化」を追加 //Jan. 16, 2001 JEPRO Ctrl+K に「行末まで切り取り(改行単位)」, Shift+Ctrl+E に「行末まで削除(改行単位)」を追加 //Jan. 14, 2001 JEPRO Ctrl+Alt+L に「小文字」, Shift+Ctrl+Alt+L に「大文字」を追加 diff --git a/sakura_core/func/Funccode.cpp b/sakura_core/func/Funccode.cpp index 0ded27ba38..a9eceab666 100644 --- a/sakura_core/func/Funccode.cpp +++ b/sakura_core/func/Funccode.cpp @@ -113,8 +113,8 @@ const EFunctionCode pnFuncList_File[] = { //Oct. 16, 2000 JEPRO 変数名変更( F_PRINT , //印刷 F_PRINT_PREVIEW , //印刷プレビュー F_PRINT_PAGESETUP , //印刷ページ設定 //Sept. 14, 2000 jepro 「印刷のページレイアウトの設定」から変更 - F_OPEN_HfromtoC , //同名のC/C++ヘッダ(ソース)を開く //Feb. 7, 2001 JEPRO 追加 -// F_OPEN_HHPP , //同名のC/C++ヘッダファイルを開く //Feb. 9, 2001 jepro「.cまたは.cppと同名の.hを開く」から変更 del 2008/6/23 Uchi + F_OPEN_HfromtoC , //同名のC/C++ヘッダー(ソース)を開く //Feb. 7, 2001 JEPRO 追加 +// F_OPEN_HHPP , //同名のC/C++ヘッダーファイルを開く //Feb. 9, 2001 jepro「.cまたは.cppと同名の.hを開く」から変更 del 2008/6/23 Uchi // F_OPEN_CCPP , //同名のC/C++ソースファイルを開く //Feb. 9, 2001 jepro「.hと同名の.c(なければ.cpp)を開く」から変更 del 2008/6/23 Uchi F_ACTIVATE_SQLPLUS , /* Oracle SQL*Plusをアクティブ表示 */ //Sept. 20, 2000 「コンパイル」JEPRO アクティブ表示を上に移動した F_PLSQL_COMPILE_ON_SQLPLUS , /* Oracle SQL*Plusで実行 */ //Sept. 20, 2000 jepro 説明の「コンパイル」を「実行」に統一 @@ -604,8 +604,8 @@ int FuncID_To_HelpContextID( EFunctionCode nFuncID ) case F_PRINT: return HLP000162; //印刷 //Sept. 14, 2000 jepro 「印刷のページレイアウトの設定」から変更 case F_PRINT_PREVIEW: return HLP000120; //印刷プレビュー case F_PRINT_PAGESETUP: return HLP000122; //印刷ページ設定 //Sept. 14, 2000 jepro 「印刷のページレイアウトの設定」から変更 - case F_OPEN_HfromtoC: return HLP000192; //同名のC/C++ヘッダ(ソース)を開く //Feb. 7, 2001 JEPRO 追加 -// case F_OPEN_HHPP: return HLP000024; //同名のC/C++ヘッダファイルを開く //Feb. 9, 2001 jepro「.cまたは.cppと同名の.hを開く」から変更 del 2008/6/23 Uchi + case F_OPEN_HfromtoC: return HLP000192; //同名のC/C++ヘッダー(ソース)を開く //Feb. 7, 2001 JEPRO 追加 +// case F_OPEN_HHPP: return HLP000024; //同名のC/C++ヘッダーファイルを開く //Feb. 9, 2001 jepro「.cまたは.cppと同名の.hを開く」から変更 del 2008/6/23 Uchi // case F_OPEN_CCPP: return HLP000026; //同名のC/C++ソースファイルを開く //Feb. 9, 2001 jepro「.hと同名の.c(なければ.cpp)を開く」から変更 del 2008/6/23 Uchi case F_ACTIVATE_SQLPLUS: return HLP000132; /* Oracle SQL*Plusをアクティブ表示 */ case F_PLSQL_COMPILE_ON_SQLPLUS: return HLP000027; /* Oracle SQL*Plusで実行 */ @@ -1180,8 +1180,8 @@ bool IsFuncEnable( const CEditDoc* pcEditDoc, const DLLSHAREDATA* pShareData, EF case F_UNDO: return pcEditDoc->m_cDocEditor.IsEnableUndo(); /* Undo(元に戻す)可能な状態か? */ case F_REDO: return pcEditDoc->m_cDocEditor.IsEnableRedo(); /* Redo(やり直し)可能な状態か? */ - case F_OPEN_HfromtoC: //同名のC/C++ヘッダ(ソース)を開く //Feb. 7, 2001 JEPRO 追加 -// case F_OPEN_HHPP: //同名のC/C++ヘッダファイルを開く //Feb. 9, 2001 jepro「.cまたは.cppと同名の.hを開く」から変更 del 2008/6/23 Uchi + case F_OPEN_HfromtoC: //同名のC/C++ヘッダー(ソース)を開く //Feb. 7, 2001 JEPRO 追加 +// case F_OPEN_HHPP: //同名のC/C++ヘッダーファイルを開く //Feb. 9, 2001 jepro「.cまたは.cppと同名の.hを開く」から変更 del 2008/6/23 Uchi // case F_OPEN_CCPP: //同名のC/C++ソースファイルを開く //Feb. 9, 2001 jepro「.hと同名の.c(なければ.cpp)を開く」から変更 del 2008/6/23 Uchi return pcEditDoc->m_cDocFile.GetFilePathClass().IsValidPath() && GetEditWnd().GetActiveView().GetCommander().Command_OPEN_HfromtoC(TRUE); case F_COPYPATH: diff --git a/sakura_core/io/CIoBridge.cpp b/sakura_core/io/CIoBridge.cpp index 2dd67f1c54..5a94902725 100644 --- a/sakura_core/io/CIoBridge.cpp +++ b/sakura_core/io/CIoBridge.cpp @@ -33,7 +33,7 @@ EConvertResult CIoBridge::FileToImpl( const CMemory& cSrc, //!< [in] 変換元メモリ CNativeW* pDst, //!< [out] 変換先メモリ(UNICODE) CCodeBase* pCode, //!< [in] 変換元メモリの文字コード - int nFlag //!< [in] bit 0: MIME Encodeされたヘッダをdecodeするかどうか + int nFlag //!< [in] bit 0: MIME Encodeされたヘッダーをdecodeするかどうか ) { //任意の文字コードからUnicodeへ変換する diff --git a/sakura_core/io/CIoBridge.h b/sakura_core/io/CIoBridge.h index 6ee6e850f3..3a4de8f96e 100644 --- a/sakura_core/io/CIoBridge.h +++ b/sakura_core/io/CIoBridge.h @@ -37,7 +37,7 @@ class CIoBridge{ const CMemory& cSrc, //!< [in] 変換元メモリ CNativeW* pDst, //!< [out] 変換先メモリ(UNICODE) CCodeBase* pCodeBase, //!< [in] 変換元メモリの文字コードクラス - int nFlag //!< [in] bit 0: MIME Encodeされたヘッダをdecodeするかどうか + int nFlag //!< [in] bit 0: MIME Encodeされたヘッダーをdecodeするかどうか ); //! ファイルのエンコードへ変更 diff --git a/sakura_core/macro/CMacro.cpp b/sakura_core/macro/CMacro.cpp index c9301eb0ca..27427f68f2 100644 --- a/sakura_core/macro/CMacro.cpp +++ b/sakura_core/macro/CMacro.cpp @@ -46,7 +46,7 @@ #include "cmd/CViewCommander_inline.h" #include "view/CEditView.h" //2002/2/10 aroka #include "macro/CSMacroMgr.h" //2002/2/10 aroka -#include "doc/CEditDoc.h" // 2002/5/13 YAZAKI ヘッダ整理 +#include "doc/CEditDoc.h" // 2002/5/13 YAZAKI ヘッダー整理 #include "_os/OleTypes.h" //2003-02-21 鬼 #include "io/CTextStream.h" #include "window/CEditWnd.h" diff --git a/sakura_core/macro/CSMacroMgr.cpp b/sakura_core/macro/CSMacroMgr.cpp index 856911525d..9fa706f255 100644 --- a/sakura_core/macro/CSMacroMgr.cpp +++ b/sakura_core/macro/CSMacroMgr.cpp @@ -69,8 +69,8 @@ MacroFuncInfo CSMacroMgr::m_MacroFuncInfoCommandArr[] = // {F_PRINT_DIALOG, LTEXT("PrintDialog"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, //印刷ダイアログ {F_PRINT_PREVIEW, LTEXT("PrintPreview"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, //印刷プレビュー {F_PRINT_PAGESETUP, LTEXT("PrintPageSetup"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, //印刷ページ設定 //Sept. 14, 2000 jepro 「印刷のページレイアウトの設定」から変更 - {F_OPEN_HfromtoC, LTEXT("OpenHfromtoC"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, //同名のC/C++ヘッダ(ソース)を開く //Feb. 7, 2001 JEPRO 追加 -// {F_OPEN_HHPP, LTEXT("OpenHHpp"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, //同名のC/C++ヘッダファイルを開く //Feb. 9, 2001 jepro「.cまたは.cppと同名の.hを開く」から変更 del 2008/6/23 Uchi + {F_OPEN_HfromtoC, LTEXT("OpenHfromtoC"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, //同名のC/C++ヘッダー(ソース)を開く //Feb. 7, 2001 JEPRO 追加 +// {F_OPEN_HHPP, LTEXT("OpenHHpp"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, //同名のC/C++ヘッダーファイルを開く //Feb. 9, 2001 jepro「.cまたは.cppと同名の.hを開く」から変更 del 2008/6/23 Uchi // {F_OPEN_CCPP, LTEXT("OpenCCpp"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, //同名のC/C++ソースファイルを開く //Feb. 9, 2001 jepro「.hと同名の.c(なければ.cpp)を開く」から変更 del 2008/6/23 Uchi {F_ACTIVATE_SQLPLUS, LTEXT("ActivateSQLPLUS"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, /* Oracle SQL*Plusをアクティブ表示 */ {F_PLSQL_COMPILE_ON_SQLPLUS, LTEXT("ExecSQLPLUS"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, /* Oracle SQL*Plusで実行 */ @@ -915,8 +915,8 @@ BOOL CSMacroMgr::CanFuncIsKeyMacro( int nFuncID ) // case F_PRINT_DIALOG ://印刷ダイアログ // case F_PRINT_PREVIEW ://印刷プレビュー // case F_PRINT_PAGESETUP ://印刷ページ設定 //Sept. 14, 2000 jepro 「印刷のページレイアウトの設定」から変更 -// case F_OPEN_HfromtoC: ://同名のC/C++ヘッダ(ソース)を開く //Feb. 9, 2001 JEPRO 追加 -// case F_OPEN_HHPP ://同名のC/C++ヘッダファイルを開く //Feb. 9, 2001 jepro「.cまたは.cppと同名の.hを開く」から変更 +// case F_OPEN_HfromtoC: ://同名のC/C++ヘッダー(ソース)を開く //Feb. 9, 2001 JEPRO 追加 +// case F_OPEN_HHPP ://同名のC/C++ヘッダーファイルを開く //Feb. 9, 2001 jepro「.cまたは.cppと同名の.hを開く」から変更 // case F_OPEN_CCPP ://同名のC/C++ソースファイルを開く //Feb. 9, 2001 jepro「.hと同名の.c(なければ.cpp)を開く」から変更 // case F_ACTIVATE_SQLPLUS :/* Oracle SQL*Plusをアクティブ表示 */ // case F_PLSQL_COMPILE_ON_SQLPLUS :/* Oracle SQL*Plusで実行 */ //Sept. 17, 2000 jepro 説明の「コンパイル」を「実行」に統一 diff --git a/sakura_core/mem/CPoolResource.h b/sakura_core/mem/CPoolResource.h index 577284051e..39a30b074c 100644 --- a/sakura_core/mem/CPoolResource.h +++ b/sakura_core/mem/CPoolResource.h @@ -112,7 +112,7 @@ class CPoolResource : public std::pmr::memory_resource union Node { ~Node() {} T element; // 要素型 - Node* next; // ブロックのヘッダの場合は、次のブロックに繋がる + Node* next; // ブロックのヘッダーの場合は、次のブロックに繋がる // 解放後の未割当領域の場合は次の未割当領域に繋がる }; diff --git a/sakura_core/outline/CDlgFuncList.cpp b/sakura_core/outline/CDlgFuncList.cpp index 2bbd17e73a..7996231c27 100644 --- a/sakura_core/outline/CDlgFuncList.cpp +++ b/sakura_core/outline/CDlgFuncList.cpp @@ -740,7 +740,7 @@ void CDlgFuncList::SetData() ::ShowWindow( GetItemHwnd( IDC_COMBO_nSortType ), SW_HIDE ); ::ShowWindow( GetItemHwnd( IDC_STATIC_nSortType ), SW_HIDE ); //ListView_SortItems( hwndList, CompareFunc_Asc, (LPARAM)this ); // 2005.04.05 zenryaku ソート状態を保持 - SortListView( hwndList, m_nSortCol ); // 2005.04.23 genta 関数化(ヘッダ書き換えのため) + SortListView( hwndList, m_nSortCol ); // 2005.04.23 genta 関数化(ヘッダー書き換えのため) } //2002.02.08 hor @@ -2102,7 +2102,7 @@ BOOL CDlgFuncList::OnNotify(NMHDR* pNMHDR) } /*! 指定されたカラムでリストビューをソートする. - 同時にヘッダも書き換える. + 同時にヘッダーも書き換える. ソート後はフォーカスが画面内に現れるように表示位置を調整する. diff --git a/sakura_core/parse/CWordParse.cpp b/sakura_core/parse/CWordParse.cpp index 829455ad58..28ee29cab8 100644 --- a/sakura_core/parse/CWordParse.cpp +++ b/sakura_core/parse/CWordParse.cpp @@ -477,7 +477,7 @@ BOOL IsURL( if( wc_to_c(*begin)==0 ) return FALSE; /* 2バイト文字 */ if( 0 < url_char[wc_to_c(*begin)] ){ /* URL開始文字 */ for(urlp = &url_table[url_char[wc_to_c(*begin)]-1]; urlp->name[0] == wc_to_c(*begin); urlp++){ /* URLテーブルを探索 */ - if( (urlp->length <= end - begin) && (wmemcmp(urlp->name, begin, urlp->length) == 0) ){ /* URLヘッダは一致した */ + if( (urlp->length <= end - begin) && (wmemcmp(urlp->name, begin, urlp->length) == 0) ){ /* URLヘッダーは一致した */ if( urlp->is_mail ){ /* メール専用の解析へ */ if( IsMailAddress(begin, urlp->length, end - begin - urlp->length, pnMatchLen) ){ *pnMatchLen = *pnMatchLen + urlp->length; @@ -488,7 +488,7 @@ BOOL IsURL( for(i = urlp->length; i < end - begin; i++){ /* 通常の解析へ */ if( wc_to_c(begin[i])==0 || (!(url_char[wc_to_c(begin[i])])) ) break; /* 終端に達した */ } - if( i == urlp->length ) return FALSE; /* URLヘッダだけ */ + if( i == urlp->length ) return FALSE; /* URLヘッダーだけ */ *pnMatchLen = i; return TRUE; } diff --git a/sakura_core/print/CPrint.cpp b/sakura_core/print/CPrint.cpp index 5ebe659879..6c38e2463f 100644 --- a/sakura_core/print/CPrint.cpp +++ b/sakura_core/print/CPrint.cpp @@ -639,7 +639,7 @@ int CPrint::CalculatePrintableLines( PRINTSETTING *pPS, int nPaperAllHeight ) } /*! - ヘッダ高さの計算(行送り分こみ) + ヘッダー高さの計算(行送り分こみ) @date 2013.05.16 Uchi 新規作成 */ int CPrint::CalcHeaderHeight( PRINTSETTING* pPS ) @@ -664,7 +664,7 @@ int CPrint::CalcHeaderHeight( PRINTSETTING* pPS ) } /*! - フッタ高さの計算(行送り分こみ) + フッター高さの計算(行送り分こみ) @date 2013.05.16 Uchi 新規作成 */ int CPrint::CalcFooterHeight( PRINTSETTING* pPS ) diff --git a/sakura_core/print/CPrint.h b/sakura_core/print/CPrint.h index 44c7232d38..3b544d50e1 100644 --- a/sakura_core/print/CPrint.h +++ b/sakura_core/print/CPrint.h @@ -110,16 +110,16 @@ struct PRINTSETTING { bool m_bPrintLineNumber; /*!< 行番号を印刷する */ MYDEVMODE m_mdmDevMode; /*!< プリンタ設定 DEVMODE用 */ - BOOL m_bHeaderUse[3]; /* ヘッダが使われているか? */ - EDIT_CHAR m_szHeaderForm[3][HEADER_MAX]; /* 0:左寄せヘッダ。1:中央寄せヘッダ。2:右寄せヘッダ。*/ - BOOL m_bFooterUse[3]; /* フッタが使われているか? */ - EDIT_CHAR m_szFooterForm[3][FOOTER_MAX]; /* 0:左寄せフッタ。1:中央寄せフッタ。2:右寄せフッタ。*/ - - // ヘッダ/フッタのフォント(lfFaceNameが設定されていなければ半角/全角フォントを使用) - LOGFONT m_lfHeader; // ヘッダフォント用LOGFONT構造体 - int m_nHeaderPointSize; // ヘッダフォントポイントサイズ - LOGFONT m_lfFooter; // フッタフォント用LOGFONT構造体 - int m_nFooterPointSize; // フッタフォントポイントサイズ + BOOL m_bHeaderUse[3]; /* ヘッダーが使われているか? */ + EDIT_CHAR m_szHeaderForm[3][HEADER_MAX]; /* 0:左寄せヘッダー。1:中央寄せヘッダー。2:右寄せヘッダー。*/ + BOOL m_bFooterUse[3]; /* フッターが使われているか? */ + EDIT_CHAR m_szFooterForm[3][FOOTER_MAX]; /* 0:左寄せフッター。1:中央寄せフッター。2:右寄せフッター。*/ + + // ヘッダー/フッターのフォント(lfFaceNameが設定されていなければ半角/全角フォントを使用) + LOGFONT m_lfHeader; // ヘッダーフォント用LOGFONT構造体 + int m_nHeaderPointSize; // ヘッダーフォントポイントサイズ + LOGFONT m_lfFooter; // フッターフォント用LOGFONT構造体 + int m_nFooterPointSize; // フッターフォントポイントサイズ }; /*----------------------------------------------------------------------- @@ -154,7 +154,7 @@ class CPrint static int CalculatePrintableColumns( PRINTSETTING*, int width, int nLineNumberColumns ); static int CalculatePrintableLines( PRINTSETTING*, int height ); - /* ヘッダ・フッタの高さ計算 */ + /* ヘッダー・フッターの高さ計算 */ static int CalcHeaderHeight( PRINTSETTING* ); static int CalcFooterHeight( PRINTSETTING* ); public: diff --git a/sakura_core/print/CPrintPreview.cpp b/sakura_core/print/CPrintPreview.cpp index 5044dfe97a..05bf6451b3 100644 --- a/sakura_core/print/CPrintPreview.cpp +++ b/sakura_core/print/CPrintPreview.cpp @@ -264,7 +264,7 @@ LRESULT CPrintPreview::OnPaint( int nHeaderHeight = CPrint::CalcHeaderHeight( m_pPrintSetting ); - // ヘッダ + // ヘッダー if( nHeaderHeight ){ DrawHeaderFooter( hdc, cRect, true ); } @@ -281,7 +281,7 @@ LRESULT CPrintPreview::OnPaint( pStrategyStart ); - // フッタ + // フッター if( CPrint::CalcFooterHeight( m_pPrintSetting ) ){ DrawHeaderFooter( hdc, cRect, false ); } @@ -1136,7 +1136,7 @@ void CPrintPreview::OnPrint( void ) cRect.top = nDirectY * ( m_pPrintSetting->m_nPrintMarginTY - m_nPreview_PaperOffsetTop + 5 ); cRect.bottom = nDirectY * ( m_nPreview_PaperAllHeight - (m_pPrintSetting->m_nPrintMarginBY + m_nPreview_PaperOffsetTop + 5) ); - /* ヘッダ・フッタの$pを展開するために、m_nCurPageNumを保持 */ + /* ヘッダー・フッターの$pを展開するために、m_nCurPageNumを保持 */ WORD nCurPageNumOld = m_nCurPageNum; CColorStrategy* pStrategy = DrawPageTextFirst( m_nCurPageNum ); for( i = 0; i < nNum; ++i ){ @@ -1166,7 +1166,7 @@ void CPrintPreview::OnPrint( void ) int nHeaderHeight = CPrint::CalcHeaderHeight( m_pPrintSetting ); - // ヘッダ印刷 + // ヘッダー印刷 if( nHeaderHeight ){ DrawHeaderFooter( hdc, cRect, true ); } @@ -1193,7 +1193,7 @@ void CPrintPreview::OnPrint( void ) pStrategy ); - // フッタ印刷 + // フッター印刷 if( CPrint::CalcFooterHeight( m_pPrintSetting ) ){ DrawHeaderFooter( hdc, cRect, false ); } @@ -1235,7 +1235,7 @@ static void Tab2Space(wchar_t* pTrg) } } -/*! 印刷/印刷プレビュー ヘッダ・フッタの描画 +/*! 印刷/印刷プレビュー ヘッダー・フッターの描画 */ void CPrintPreview::DrawHeaderFooter( HDC hdc, const CMyRect& rect, bool bHeader ) { diff --git a/sakura_core/print/CPrintPreview.h b/sakura_core/print/CPrintPreview.h index a6e8af3712..110774bd47 100644 --- a/sakura_core/print/CPrintPreview.h +++ b/sakura_core/print/CPrintPreview.h @@ -188,7 +188,7 @@ class CPrintPreview { int GetAllPageNum(){ return m_nAllPageNum; } /* 現在のページ */ /* - || ヘッダ・フッタ + || ヘッダー・フッター */ void SetHeader(char* pszWork[]); // &fなどを登録 void SetFooter(char* pszWork[]); // &p/&Pなどを登録 diff --git a/sakura_core/sakura.hh b/sakura_core/sakura.hh index 0b2b41ac11..1bd1bd54f0 100644 --- a/sakura_core/sakura.hh +++ b/sakura_core/sakura.hh @@ -52,7 +52,7 @@ #define HLP000162 162 //印刷 #define HLP000120 120 //印刷プレビュー #define HLP000122 122 //ページ設定 -#define HLP000192 192 //同名のC/C++ヘッダ(ソース)を開く +#define HLP000192 192 //同名のC/C++ヘッダー(ソース)を開く #define HLP000132 132 //Oracle SQL*Plusをアクティブ表示 #define HLP000027 27 //Oracle SQL*Plusで実行 #define HLP000121 121 //ブラウズ @@ -294,7 +294,7 @@ #define HLP000100 100 //ヘルプ目次 #define HLP000101 101 //キーワード検索 #define HLP000189 189 //コマンド一覧 -//#define HLP000024 24 //同名のC/C++ヘッダファイルを開く +//#define HLP000024 24 //同名のC/C++ヘッダーファイルを開く //#define HLP000026 26 //同名のC/C++ソースファイルを開く #define HLP000198 198 //テキストを1行下へスクロール #define HLP000199 199 //テキストを1行上へスクロール diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index fc3d499df3..3e088c3d9f 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -1254,7 +1254,7 @@ BEGIN "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,140,174,10 CONTROL "ファイルを開いたときにブックマークを復元する(&B)",IDC_CHECK_RestoreBookmarks, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,155,214,10 - CONTROL "ファイルを開いたときにMIMEエンコードされたヘッダをデコードする(&D)",IDC_CHECK_AutoMIMEDecode, + CONTROL "ファイルを開いたときにMIMEエンコードされたヘッダーをデコードする(&D)",IDC_CHECK_AutoMIMEDecode, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,169,231,10 CONTROL "前回と異なる文字コードのとき問い合わせを行う(&Q)",IDC_CHECK_QueryIfCodeChange, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,182,223,13 @@ -2273,7 +2273,7 @@ END STRINGTABLE BEGIN - F_OPEN_HfromtoC "同名のC/C++ヘッダ(ソース)を開く" + F_OPEN_HfromtoC "同名のC/C++ヘッダー(ソース)を開く" F_ACTIVATE_SQLPLUS "SQL*Plusをアクティブ表示" F_PLSQL_COMPILE_ON_SQLPLUS "SQL*Plusで実行" END @@ -2959,7 +2959,7 @@ BEGIN STR_DLGCTRLCODE_NAME "名前" STR_DLGCTRLCODE_DESC "説明" STR_ERR_DLGCTL5 "空文字" - STR_ERR_DLGCTL6 "ヘッダ開始" + STR_ERR_DLGCTL6 "ヘッダー開始" STR_ERR_DLGCTL7 "テキスト開始" STR_ERR_DLGCTL8 "テキスト終了" STR_ERR_DLGCTL9 "転送終了" @@ -3509,7 +3509,7 @@ BEGIN STR_ERR_CEDITVIEW_CMD05 "タグファイルを作成中です。" STR_ERR_CEDITVIEW_CMD06 "タグ作成コマンド実行は失敗しました。\n\n%hs" STR_ERR_CEDITVIEW_CMD07 "タグファイルの作成が終了しました。" - STR_ERR_CEDITVIEW_CMD08 "C/C++ヘッダファイルのオープンに失敗しました。" + STR_ERR_CEDITVIEW_CMD08 "C/C++ヘッダーファイルのオープンに失敗しました。" STR_ERR_CEDITVIEW_CMD09 "C/C++ソースファイルのオープンに失敗しました。" STR_ERR_CEDITVIEW_CMD10 "クリップボードに有効なデータがありません!" STR_ERR_CEDITVIEW_CMD11 "最後まで置換しました。" diff --git a/sakura_core/typeprop/CImpExpManager.cpp b/sakura_core/typeprop/CImpExpManager.cpp index 91f8a5265a..8d5910770c 100644 --- a/sakura_core/typeprop/CImpExpManager.cpp +++ b/sakura_core/typeprop/CImpExpManager.cpp @@ -566,7 +566,7 @@ bool CImpExpColors::Import( const wstring& sFileName, wstring& sErrMsg ) } /* ファイル先頭 */ - //ヘッダ読取 + //ヘッダー読取 wstring szHeader = in.ReadLineW(); if(szHeader.length()>=2) { //コメントを抜く @@ -910,7 +910,7 @@ bool CImpExpKeybind::Import( const wstring& sFileName, wstring& sErrMsg ) sErrMsg += sFileName; return false; } - // ヘッダチェック + // ヘッダーチェック wstring szLine = in.ReadLineW(); bVer2 = true; if ( wcscmp(szLine.c_str(), WSTR_KEYBIND_HEAD2) != 0) bVer2 = false; @@ -1034,7 +1034,7 @@ bool CImpExpKeybind::Export( const wstring& sFileName, wstring& sErrMsg ) // 書き込みモード設定 cProfile.SetWritingMode(); - // ヘッダ + // ヘッダー StaticString szKeydataHead = WSTR_KEYBIND_HEAD4; cProfile.IOProfileData( szSecInfo, L"KEYBIND_VERSION", szKeydataHead ); cProfile.IOProfileData(szSecInfo, L"KEYBIND_COUNT", m_Common.m_sKeyBind.m_nKeyNameArrNum ); @@ -1060,7 +1060,7 @@ bool CImpExpCustMenu::Import( const wstring& sFileName, wstring& sErrMsg ) { const auto& strPath = sFileName; - //ヘッダ確認 + //ヘッダー確認 CTextInputStream in(strPath.c_str()); if (!in) { sErrMsg = LS(STR_IMPEXP_ERR_FILEOPEN); @@ -1101,14 +1101,14 @@ bool CImpExpCustMenu::Export( const wstring& sFileName, wstring& sErrMsg ) out.Close(); /* カスタムメニュー情報 */ - //ヘッダ + //ヘッダー CDataProfile cProfile; CommonSetting_CustomMenu* menu=&m_Common.m_sCustomMenu; // 書き込みモード設定 cProfile.SetWritingMode(); - //ヘッダ + //ヘッダー cProfile.IOProfileData(szSecInfo, L"MENU_VERSION", StringBufferW(WSTR_CUSTMENU_HEAD_V2)); int iWork = MAX_CUSTOM_MENU; cProfile.IOProfileData(szSecInfo, L"MAX_CUSTOM_MENU", iWork ); @@ -1224,7 +1224,7 @@ bool CImpExpMainMenu::Import( const wstring& sFileName, wstring& sErrMsg ) { const auto& strPath = sFileName; - //ヘッダ確認 + //ヘッダー確認 CTextInputStream in(strPath.c_str()); if (!in) { sErrMsg = LS(STR_IMPEXP_ERR_FILEOPEN); @@ -1264,14 +1264,14 @@ bool CImpExpMainMenu::Export( const wstring& sFileName, wstring& sErrMsg ) out.Close(); - //ヘッダ + //ヘッダー CDataProfile cProfile; CommonSetting_MainMenu* menu=&m_Common.m_sMainMenu; // 書き込みモード設定 cProfile.SetWritingMode(); - //ヘッダ + //ヘッダー cProfile.IOProfileData(szSecInfo, L"MENU_VERSION", StringBufferW(WSTR_MAINMENU_HEAD_V1)); //内容 diff --git a/sakura_core/types/CType_Html.cpp b/sakura_core/types/CType_Html.cpp index 693969c10f..2b72af106e 100644 --- a/sakura_core/types/CType_Html.cpp +++ b/sakura_core/types/CType_Html.cpp @@ -73,7 +73,7 @@ void CDocOutline::MakeTopicList_html(CFuncInfoArr* pcFuncInfoArr, bool bXml) bool bCDATA = false; bool bParaTag = false; // 2008.08.15 aroka - /* ネストの深さは、nMaxStackレベルまで、ひとつのヘッダは、最長32文字まで区別 + /* ネストの深さは、nMaxStackレベルまで、ひとつのヘッダーは、最長32文字まで区別 (32文字まで同じだったら同じものとして扱います) */ // 2014.12.25 ネスト32→64 diff --git a/sakura_core/types/CType_Text.cpp b/sakura_core/types/CType_Text.cpp index 7114b7aac5..b3cdc52281 100644 --- a/sakura_core/types/CType_Text.cpp +++ b/sakura_core/types/CType_Text.cpp @@ -99,7 +99,7 @@ void CDocOutline::MakeTopicList_txt( CFuncInfoArr* pcFuncInfoArr ) const wchar_t* pszStarts = GetDllShareData().m_Common.m_sFormat.m_szMidashiKigou; int nStartsLen = wcslen( pszStarts ); - /* ネストの深さは、nMaxStackレベルまで、ひとつのヘッダは、最長32文字まで区別 + /* ネストの深さは、nMaxStackレベルまで、ひとつのヘッダーは、最長32文字まで区別 (32文字まで同じだったら同じものとして扱います) */ const int nMaxStack = 32; // ネストの最深 diff --git a/sakura_core/uiparts/CMenuDrawer.cpp b/sakura_core/uiparts/CMenuDrawer.cpp index 40f574b2c8..eb12a77163 100644 --- a/sakura_core/uiparts/CMenuDrawer.cpp +++ b/sakura_core/uiparts/CMenuDrawer.cpp @@ -122,8 +122,8 @@ CMenuDrawer::CMenuDrawer() /* 13 */ F_PRINT /* , TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 */, //印刷 /* 14 */ F_PRINT_PREVIEW /* , TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 */, //印刷プレビュー /* 15 */ F_PRINT_PAGESETUP /* , TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 */, //印刷ページ設定 //Sept. 21, 2000 JEPRO 追加 -/* 16 */ F_OPEN_HfromtoC /* , TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 */, //同名のC/C++ヘッダ(ソース)を開く //Feb. 7, 2001 JEPRO 追加 -/* 17 */ F_DISABLE /*F_OPEN_HHPP*/ /* , TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 */, //同名のC/C++ヘッダファイルを開く //Feb. 9, 2001 jepro「.cまたは.cppと同名の.hを開く」から変更 del 2008/6/23 Uchi +/* 16 */ F_OPEN_HfromtoC /* , TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 */, //同名のC/C++ヘッダー(ソース)を開く //Feb. 7, 2001 JEPRO 追加 +/* 17 */ F_DISABLE /*F_OPEN_HHPP*/ /* , TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 */, //同名のC/C++ヘッダーファイルを開く //Feb. 9, 2001 jepro「.cまたは.cppと同名の.hを開く」から変更 del 2008/6/23 Uchi /* 18 */ F_DISABLE /*F_OPEN_CCPP*/ /* , TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 */, //同名のC/C++ソースファイルを開く //Feb. 9, 2001 jepro「.hと同名の.c(なければ.cpp)を開く」から変更 del 2008/6/23 Uchi /* 19 */ F_ACTIVATE_SQLPLUS /* , TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 */, //Oracle SQL*Plusをアクティブ表示 */ //Sept. 20, 2000 JEPRO 追加 /* 20 */ F_PLSQL_COMPILE_ON_SQLPLUS /* , TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 */, //Oracle SQL*Plusで実行 */ //Sept. 17, 2000 jepro 説明の「コンパイル」を「実行」に統一 diff --git a/sakura_core/util/std_macro.h b/sakura_core/util/std_macro.h index 1b0babb41a..4a6a885566 100644 --- a/sakura_core/util/std_macro.h +++ b/sakura_core/util/std_macro.h @@ -34,7 +34,7 @@ 2007.10.18 kobake テンプレート式 min とか max とか。 - どっかの標準ヘッダに、同じようなものがあった気がするけど、 + どっかの標準ヘッダーに、同じようなものがあった気がするけど、 NOMINMAX を定義するにしても、なんだか min とか max とかいう名前だと、 テンプレートを呼んでるんだかマクロを呼んでるんだか訳分かんないので、 明示的に「t_~」という名前を持つ関数を用意。 diff --git a/sakura_core/util/window.h b/sakura_core/util/window.h index 146f79cba7..9fbe8c750f 100644 --- a/sakura_core/util/window.h +++ b/sakura_core/util/window.h @@ -140,7 +140,7 @@ class CTextWidthCalc enum StaticMagicNambers{ //! スクロールバーとアイテムの間の隙間 WIDTH_MARGIN_SCROLLBER = 8, - //! リストビューヘッダ マージン + //! リストビューヘッダー マージン WIDTH_LV_HEADER = 17, //! リストビューのマージン WIDTH_LV_ITEM_NORMAL = 14, diff --git a/sakura_core/view/CEditView.h b/sakura_core/view/CEditView.h index 49c3bb00ff..7d0533e8f7 100644 --- a/sakura_core/view/CEditView.h +++ b/sakura_core/view/CEditView.h @@ -74,13 +74,13 @@ class CViewFont; class CRuler; -class CDropTarget; /// 2002/2/3 aroka ヘッダ軽量化 +class CDropTarget; /// 2002/2/3 aroka ヘッダー軽量化 class COpeBlk;/// class CSplitBoxWnd;/// class CRegexKeyword;/// -class CAutoMarkMgr; /// 2002/2/3 aroka ヘッダ軽量化 to here -class CEditDoc; // 2002/5/13 YAZAKI ヘッダ軽量化 -class CLayout; // 2002/5/13 YAZAKI ヘッダ軽量化 +class CAutoMarkMgr; /// 2002/2/3 aroka ヘッダー軽量化 to here +class CEditDoc; // 2002/5/13 YAZAKI ヘッダー軽量化 +class CLayout; // 2002/5/13 YAZAKI ヘッダー軽量化 class CMigemo; // 2004.09.14 isearch struct SColorStrategyInfo; struct CColor3Setting; diff --git a/sakura_core/view/CEditView_Command.cpp b/sakura_core/view/CEditView_Command.cpp index cd5fc838cb..c7cd2e623b 100644 --- a/sakura_core/view/CEditView_Command.cpp +++ b/sakura_core/view/CEditView_Command.cpp @@ -185,7 +185,7 @@ bool CEditView::TagJumpSub( /*! 指定拡張子のファイルに対応するファイルを開く補助関数 - @date 2003.06.28 Moca ヘッダ・ソースファイルオープン機能のコードを統合 + @date 2003.06.28 Moca ヘッダー・ソースファイルオープン機能のコードを統合 @date 2008.04.09 ryoji 処理対象(file_ext)と開く対象(open_ext)の扱いが逆になっていたのを修正 */ BOOL CEditView::OPEN_ExtFromtoExt( diff --git a/sakura_core/view/CEditView_Command_New.cpp b/sakura_core/view/CEditView_Command_New.cpp index a9e34b6343..54c7b63b23 100644 --- a/sakura_core/view/CEditView_Command_New.cpp +++ b/sakura_core/view/CEditView_Command_New.cpp @@ -26,7 +26,7 @@ #include "charset/charcode.h" #include "COpe.h" /// 2002/2/3 aroka from here #include "COpeBlk.h" /// -#include "doc/CEditDoc.h" // 2002/5/13 YAZAKI ヘッダ整理 +#include "doc/CEditDoc.h" // 2002/5/13 YAZAKI ヘッダー整理 #include "doc/CDocReader.h" #include "doc/layout/CLayout.h" #include "doc/logic/CDocLine.h" diff --git a/tests/unittest.md b/tests/unittest.md index 661b0a9716..4e3e1dd012 100644 --- a/tests/unittest.md +++ b/tests/unittest.md @@ -83,4 +83,4 @@ GUI でステップ実行することができます。 ## インクルードディレクトリ 単体テスト用の [CMakeLists.txt](unittests/CMakeLists.txt) で [サクラエディタ用のディレクトリ](../sakura_core) を -インクルードディレクトリに指定しているので、そこからの相対パスを指定すれば、サクラエディタのヘッダをインクルードできます。 +インクルードディレクトリに指定しているので、そこからの相対パスを指定すれば、サクラエディタのヘッダーをインクルードできます。 diff --git a/tests/unittests/test-is_mailaddress.cpp b/tests/unittests/test-is_mailaddress.cpp index 3b131ce3f4..06c9c7e0a1 100644 --- a/tests/unittests/test-is_mailaddress.cpp +++ b/tests/unittests/test-is_mailaddress.cpp @@ -35,7 +35,7 @@ #include #include "parse/CWordParse.h" -// テスト対象関数のヘッダファイル +// テスト対象関数のヘッダーファイル //#include "util/string_ex.h" //依存関係が多いのでテスト対象の関数定義のみ抜き出し BOOL IsMailAddress(const wchar_t* pszBuf, int nBufLen, int* pnAddressLength); From 5fd700f29c96c3ef3238ee60e00e5ca523bfa43d Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Tue, 3 May 2022 16:31:23 +0900 Subject: [PATCH 0982/1024] =?UTF-8?q?=E3=80=8C=E3=83=A6=E3=83=BC=E3=82=B6?= =?UTF-8?q?=E3=83=BC=E3=80=8D=E3=81=AE=E3=82=AB=E3=82=BF=E3=82=AB=E3=83=8A?= =?UTF-8?q?=E8=A1=A8=E8=A8=98=E3=82=92=E7=B5=B1=E4=B8=80=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit コメントやドキュメントに現れる「ユーザー」のカタカナ表記を統一します。 「ユーザーにとっての利便性」を表す「ユーザビリティ」やVB用語「ユーザ定義型」は置換対象から除外します。 修正対象にissファイルが含まれるので、インストーラーにも影響する修正です。 --- CHANGELOG.md | 2 +- help/plugin/Text/overview.html | 2 +- help/sakura/res/HLP000078.html | 2 +- help/sakura/res/HLP000083.html | 6 +- help/sakura/res/HLP000144.html | 2 +- help/sakura/res/HLP000204.html | 2 +- help/sakura/res/HLP000261.html | 2 +- help/sakura/res/HLP000300.html | 2 +- help/sakura/res/HLP_UR009.html | 4 +- help/sakura/res/HLP_UR014.html | 6 +- help/sakura/res/HLP_UR017.html | 2 +- installer/readme.md | 2 +- installer/sakura-common.iss | 8 +-- installer/sinst_src/keyword/php.khp | 62 +++++++++---------- sakura_core/CCodeChecker.cpp | 4 +- sakura_core/CLoadAgent.cpp | 2 +- sakura_core/CReadManager.cpp | 2 +- sakura_core/_main/CControlProcess.cpp | 16 ++--- sakura_core/_main/CProcess.cpp | 2 +- .../dlg/CDlgOpenFile_CommonFileDialog.cpp | 2 +- sakura_core/doc/CDocFileOperation.cpp | 2 +- sakura_core/env/CShareData.cpp | 6 +- sakura_core/env/DLLSHAREDATA.h | 2 +- sakura_core/func/CFuncLookup.cpp | 2 +- sakura_core/macro/CPPA.cpp | 2 +- sakura_core/parse/CWordParse.cpp | 6 +- sakura_core/parse/CWordParse.h | 2 +- sakura_core/recent/CRecentCmd.cpp | 2 +- sakura_core/recent/CRecentCurDir.cpp | 2 +- sakura_core/recent/CRecentEditNode.cpp | 2 +- sakura_core/recent/CRecentExceptMru.cpp | 2 +- sakura_core/recent/CRecentExcludeFile.cpp | 2 +- sakura_core/recent/CRecentExcludeFolder.cpp | 2 +- sakura_core/recent/CRecentFile.cpp | 2 +- sakura_core/recent/CRecentFolder.cpp | 2 +- sakura_core/recent/CRecentGrepFile.cpp | 2 +- sakura_core/recent/CRecentGrepFolder.cpp | 2 +- sakura_core/recent/CRecentReplace.cpp | 2 +- sakura_core/recent/CRecentSearch.cpp | 2 +- sakura_core/recent/CRecentTagjumpKeyword.cpp | 2 +- sakura_core/sakura_rc.rc | 2 +- sakura_core/typeprop/CPropTypesRegex.cpp | 2 +- sakura_core/types/CType_Perl.cpp | 2 +- sakura_core/types/CType_Tex.cpp | 4 +- sakura_core/types/CType_Text.cpp | 2 +- sakura_core/types/CType_Vb.cpp | 2 +- sakura_core/util/MessageBoxF.h | 2 +- sakura_core/view/colors/EColorIndexType.h | 2 +- tests/unittests/test-cfileext.cpp | 6 +- tests/unittests/test-file.cpp | 8 +-- 50 files changed, 106 insertions(+), 106 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a789a3d1a0..7d57214bdd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -332,7 +332,7 @@ - CodeFactor の badge を追加 [\#693](https://github.com/sakura-editor/sakura/pull/693) ([m-tmatma](https://github.com/m-tmatma)) - WinMainを整理したい [\#692](https://github.com/sakura-editor/sakura/pull/692) ([berryzplus](https://github.com/berryzplus)) - 8bit256色ツールアイコンを取り込む [\#690](https://github.com/sakura-editor/sakura/pull/690) ([berryzplus](https://github.com/berryzplus)) -- マルチユーザ設定を有効にする [\#689](https://github.com/sakura-editor/sakura/pull/689) ([berryzplus](https://github.com/berryzplus)) +- マルチユーザー設定を有効にする [\#689](https://github.com/sakura-editor/sakura/pull/689) ([berryzplus](https://github.com/berryzplus)) - ツール類のコンパイルオプションに/MPを付ける [\#688](https://github.com/sakura-editor/sakura/pull/688) ([berryzplus](https://github.com/berryzplus)) - 「このファイルのパス名をコピー」 をタブメニューにも追加する [\#666](https://github.com/sakura-editor/sakura/pull/666) ([m-tmatma](https://github.com/m-tmatma)) - 縦スクロール時に不必要にルーラーの再描画がされないように対策 [\#660](https://github.com/sakura-editor/sakura/pull/660) ([beru](https://github.com/beru)) diff --git a/help/plugin/Text/overview.html b/help/plugin/Text/overview.html index 0b25d71ba1..1046afc117 100644 --- a/help/plugin/Text/overview.html +++ b/help/plugin/Text/overview.html @@ -39,7 +39,7 @@

        インストール

        プラグインをインストールすると、設定ファイルがあるフォルダの下にpluginsフォルダができ、その配下にZIPファイルの中身が展開されます。 -ユーザ別設定が有効な場合はC:\Users\(ユーザ名)\AppData\Roaming\sakura\plugins、そうでなければC:\Program Files(x86)\sakura\pluginsにあるはずです。
        +ユーザー別設定が有効な場合はC:\Users\(ユーザー名)\AppData\Roaming\sakura\plugins、そうでなければC:\Program Files(x86)\sakura\pluginsにあるはずです。
        以下、pluginsをプラグインフォルダと呼び、その下のプラグインごとのフォルダを個別フォルダと呼びます。

      diff --git a/help/sakura/res/HLP000078.html b/help/sakura/res/HLP000078.html index c667829c96..f12e621e6f 100644 --- a/help/sakura/res/HLP000078.html +++ b/help/sakura/res/HLP000078.html @@ -49,7 +49,7 @@

      UserRootFolder

      無題 0アプリケーションデータフォルダ(デフォルト)
      %APPDATA% -1ユーザフォルダ
      %USERPROFILE% +1ユーザーフォルダ
      %USERPROFILE% 2ドキュメントフォルダ
      \My Documents 3デスクトップフォルダ
      \デスクトップ diff --git a/help/sakura/res/HLP000083.html b/help/sakura/res/HLP000083.html index f6cf801e49..c7b8ef7c2b 100644 --- a/help/sakura/res/HLP000083.html +++ b/help/sakura/res/HLP000083.html @@ -40,14 +40,14 @@

      共通設定 『ファイル』プロパティ

      編集中のファイルを、他のプログラムから保護するための機能です。例えばサーバーにあるファイルを、複数の人が同時に更新してわけがわからなる等ということがなくなります。
      [排他制御] コンボボックス
      しない
      - 排他制御をしない場合は、サクラエディタで編集中のファイルを、他のアプリケーションや他のコンピュータのユーザ(ネットワーク経由でそのファイルが参照・更新可能な環境にある場合)が、参照・更新することができます。
      + 排他制御をしない場合は、サクラエディタで編集中のファイルを、他のアプリケーションや他のコンピュータのユーザー(ネットワーク経由でそのファイルが参照・更新可能な環境にある場合)が、参照・更新することができます。
      「更新の監視」を有効にしておくと、サクラエディタで編集中のファイルが更新された事を検出してあなたに通知します。

      上書きを禁止する
      - 他プロセスからの上書きを禁止する場合は、サクラエディタで編集中のファイルを、他のアプリケーションや他のコンピュータのユーザ(ネットワーク経由でそのファイルが参照・更新可能な環境にある場合)が、更新が不可能で参照のみ可能になります。
      + 他プロセスからの上書きを禁止する場合は、サクラエディタで編集中のファイルを、他のアプリケーションや他のコンピュータのユーザー(ネットワーク経由でそのファイルが参照・更新可能な環境にある場合)が、更新が不可能で参照のみ可能になります。

      読み書きを禁止する
      - 他プロセスからの上書きを禁止する場合は、サクラエディタで編集中のファイルを、他のアプリケーションや他のコンピュータのユーザ(ネットワーク経由でそのファイルが参照・更新可能な環境にある場合)が、参照も更新も不可能になります。
      + 他プロセスからの上書きを禁止する場合は、サクラエディタで編集中のファイルを、他のアプリケーションや他のコンピュータのユーザー(ネットワーク経由でそのファイルが参照・更新可能な環境にある場合)が、参照も更新も不可能になります。

      上書き禁止検出時は編集禁止にする
      有効にしておくと、上書き禁止の状態で編集できなくなります。
      diff --git a/help/sakura/res/HLP000144.html b/help/sakura/res/HLP000144.html index 752bdc6037..d86d53ee04 100644 --- a/help/sakura/res/HLP000144.html +++ b/help/sakura/res/HLP000144.html @@ -93,7 +93,7 @@

      共通設定 『編集』プロパティ

      最近使ったフォルダ
      最近使ったフォルダに設定します。
      指定フォルダ
      - ユーザが設定したフォルダに設定します。メタ文字列を含むことができます。
      + ユーザーが設定したフォルダに設定します。メタ文字列を含むことができます。
      (sakura:2.2.0.0以降)新規ウィンドウ、閉じて(無題)などで、無題になった場合、この設定のフォルダへカレントディレクトリを移動します。
      ファイルダイアログの設定が「カレントフォルダ」の場合は、元のウィンドウのカレントディレクトリを引き継ぎます。
      diff --git a/help/sakura/res/HLP000204.html b/help/sakura/res/HLP000204.html index 132c77766e..1b2ecbbe47 100644 --- a/help/sakura/res/HLP000204.html +++ b/help/sakura/res/HLP000204.html @@ -11,7 +11,7 @@

      マクロについて

      -キーマクロの記録によってユーザの操作をマクロとして記録することができます。
      +キーマクロの記録によってユーザーの操作をマクロとして記録することができます。
      この他にマクロファイルを直接記述することによって、キーマクロで記録されない機能も使えるようになります。
      記録・手書きのキーマクロWSHマクロとPPAマクロが利用できます。

      diff --git a/help/sakura/res/HLP000261.html b/help/sakura/res/HLP000261.html index 38199045b0..3208854f83 100644 --- a/help/sakura/res/HLP000261.html +++ b/help/sakura/res/HLP000261.html @@ -15,7 +15,7 @@

      あると便利なツール、ファイル

      サクラエディタは、実行ファイル(sakura.exe)と設定ファイル(sakura.ini)のみでも利用できますが、いくつかの機能は、別のファイルが必要です。
      * …フルパッケージ版に同封されています。
      -t …テキストファイルで、ユーザが簡単に作成可能なファイルです。
      +t …テキストファイルで、ユーザーが簡単に作成可能なファイルです。
      b …バイナリファイル
      i …INI形式(に見える)ファイル

      diff --git a/help/sakura/res/HLP000300.html b/help/sakura/res/HLP000300.html index ecdd38e60d..b4a78a2091 100644 --- a/help/sakura/res/HLP000300.html +++ b/help/sakura/res/HLP000300.html @@ -13,7 +13,7 @@

      タイプ (ファイルタイプ, 文書タイプ)

      タイプとはファイルの種類を指し、拡張子によって判断されます。
      -インストール時には以下のようなタイプが定義されていますが、ユーザが自由にタイプ名と識別子を編集可能です(タイプ別設定のダイアログで行う)。
      +インストール時には以下のようなタイプが定義されていますが、ユーザーが自由にタイプ名と識別子を編集可能です(タイプ別設定のダイアログで行う)。
      タイプを定義しておけば、例えばC++言語のソースファイルとテキストファイルで、それぞれ異なった色設定折り返し桁数の設定などをすることができます。
       
      diff --git a/help/sakura/res/HLP_UR009.html b/help/sakura/res/HLP_UR009.html
      index 7dbbf6de50..e8bfa254fa 100644
      --- a/help/sakura/res/HLP_UR009.html
      +++ b/help/sakura/res/HLP_UR009.html
      @@ -55,7 +55,7 @@ 

      変更履歴(2002/05/01~)


      [機能追加]
      -・アプリケーションアイコン,Grepアイコンをユーザがカスタマイズ可能に.(by げんた)
      +・アプリケーションアイコン,Grepアイコンをユーザーがカスタマイズ可能に.(by げんた)
      ・sakura.exeと同じディレクトリに,my_appicon.ico, my_grepicon.ico というファイルを置くことで,好きなアイコンをアプリケーションアイコン及びタスクトレイアイコンとして使用できます.

      [バグ修正]
      @@ -72,7 +72,7 @@

      変更履歴(2002/05/01~)


      [機能追加]
      -・ファンクションバーのグループあたりのボタン数を1-12で設定できるように(PC98ユーザに贈る機能) (by もかさん)
      +・ファンクションバーのグループあたりのボタン数を1-12で設定できるように(PC98ユーザーに贈る機能) (by もかさん)

      [バグ修正]
      diff --git a/help/sakura/res/HLP_UR014.html b/help/sakura/res/HLP_UR014.html index f8348020c4..df93e803d3 100644 --- a/help/sakura/res/HLP_UR014.html +++ b/help/sakura/res/HLP_UR014.html @@ -58,7 +58,7 @@

      Oct 17, 2010 (1.6.6.0)

    • 存在しないcursor1.curのsakura.dsp登録を解除 (svn:1829 patches:2992320 dev:5673 ryoji)
    • Viewウィンドウの遅延作成(ANSI版) (svn:1830 patches:3008991 unicode:1249 もか)
    • ツールバー折返しの番号ずれ対応 (svn:1833 patches:3026401 dev:5676 syat,もか)
    • -
    • ユーザの意図しないプログラム実行の抑制(A用) (svn:1839 patches:3055711 dev:5679 dev:5685 もか)
    • +
    • ユーザーの意図しないプログラム実行の抑制(A用) (svn:1839 patches:3055711 dev:5679 dev:5685 もか)
    • Sep. 26, 2009 (1.6.5.0)

      @@ -253,10 +253,10 @@

      Sep. 27, 2007 (1.6.0.0)

      [機能追加]
      • Grep 画面へのドラッグ&ドロップ (svn:1117 patches:1786543 bosagami, げんた)
      • -
      • Vista UACとマルチユーザへの対応 (svn:1120 patches:1721425 dev:4809 ryoji)
      • +
      • Vista UACとマルチユーザーへの対応 (svn:1120 patches:1721425 dev:4809 ryoji)
        • sakura.ini等の設定ファイルを個人のプロファイルディレクトリに置ける
        • -
        • 管理者権限とユーザ権限のプロセス混在を防止
        • +
        • 管理者権限とユーザー権限のプロセス混在を防止
        • sakuextとの連携
      • Pythonアウトライン解析 (svn:1121 patches:1668208 げんた)
      • diff --git a/help/sakura/res/HLP_UR017.html b/help/sakura/res/HLP_UR017.html index 60dd29d9c8..229fc24a21 100644 --- a/help/sakura/res/HLP_UR017.html +++ b/help/sakura/res/HLP_UR017.html @@ -150,7 +150,7 @@

        Aug. 14, 2016 (2.3.1.0)

      • 起動時のプロファイルマネージャで新規作成・名前変更で落ちる (svn:4106 upatchid:1059 Moca)
      • マクロ関数InputBoxバッファオーバーラン (svn:4107 upatchid:1058 Moca)
      • プロファイルマネージャで表示直後(default)が削除・名前変更できるバグ (svn:4109 upatchid:1061 Moca)
      • -
      • ユーザ別設定のときのマルチプロファイルの場所がおかしい (svn:4112 upatchid:1024 Moca)
      • +
      • ユーザー別設定のときのマルチプロファイルの場所がおかしい (svn:4112 upatchid:1024 Moca)
      • EOF直前の改行を改行なしに置換するとEOFの再描画が不足する (svn:4113 upatchid:1008 Moca)
      • プラグインオプションのコンボボックスの高さが不正 (svn:4114 upatchid:1054 Moca)
      • 1行目で前の段落へ移動を実行すると落ちる (svn:4115 upatchid:1023 Moca)
      • diff --git a/installer/readme.md b/installer/readme.md index b9e0d51459..7c58951048 100644 --- a/installer/readme.md +++ b/installer/readme.md @@ -139,4 +139,4 @@ https://www.kymoto.org/products/inno-script-studio/downloads 英語版のインストーラーの挙動を確認する場合には、実行環境を英語モードにする必要があります。 お使いのPCの言語設定を英語に変更するか([こちら](https://www.google.co.jp/search?q=%E8%A8%80%E8%AA%9E+%E6%97%A5%E6%9C%AC%E8%AA%9E+%E8%8B%B1%E8%AA%9E+Windows&oq=%E8%A8%80%E8%AA%9E%E3%80%80%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%80%80%E8%8B%B1%E8%AA%9E%E3%80%80Windows&aqs=chrome..69i57j0l2.5435j0j4&sourceid=chrome&ie=UTF-8)参考)、お使いのPCのリソースに余裕があれば、[VirtualBOX](https://www.virtualbox.org/)等の仮想化ソフトウエアにて、[開発用Windowsマシン](https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/)を利用する方法もあります。 -(覚書:この仮想PCのユーザのパスワードは「Passw0rd!」です) \ No newline at end of file +(覚書:この仮想PCのユーザーのパスワードは「Passw0rd!」です) \ No newline at end of file diff --git a/installer/sakura-common.iss b/installer/sakura-common.iss index f807ca76c4..8852ea717c 100644 --- a/installer/sakura-common.iss +++ b/installer/sakura-common.iss @@ -158,7 +158,7 @@ zh_hans.StartNow=现在启动 zh_hant.StartNow=現在啟動 en.MultiUser=Install in compatibility mode. When editing system files and programs with user authority, editing results may not be accessible from other applications. (VirtualStore function) -ja.MultiUser=互換モードでインストールします.システムファイルおよびプログラムをユーザ権限で編集すると編集結果が他のアプリケーションから参照できないことがあります.(VirtualStore機能) +ja.MultiUser=互換モードでインストールします.システムファイルおよびプログラムをユーザー権限で編集すると編集結果が他のアプリケーションから参照できないことがあります.(VirtualStore機能) zh_hans.MultiUser=软件将会以兼容模式安装。使用非管理员用户编辑配置文件时,文件可能无法被管理员用户访问。(VirtualStore功能) zh_hant.MultiUser=軟件將會以相容模式安裝。使用非管理員用戶編輯設定檔時,檔案可能無法被管理員用戶訪問。(VirtualStore功能) @@ -168,7 +168,7 @@ zh_hans.InitWiz_Title=配置文件保存位置 zh_hant.InitWiz_Title=設定檔保存位置 en.InitWiz_SubTitle=Please choose whether you want to save the settings for each user or to the location of the executable file -ja.InitWiz_SubTitle=設定をユーザ毎に保存するか実行ファイルの場所へ保存するかを選択してください +ja.InitWiz_SubTitle=設定をユーザー毎に保存するか実行ファイルの場所へ保存するかを選択してください zh_hans.InitWiz_SubTitle=选择将Sukura配置文件保存至当前用户或软件目录内 zh_hant.InitWiz_SubTitle=選擇將Sukura設定檔保存至當前用戶或軟件目錄內 @@ -178,7 +178,7 @@ zh_hans.InitWiz_Comment=若您不清楚此选项,请不要修改 zh_hant.InitWiz_Comment=若您不清楚此選項,請不要修改 en.InitWiz_Check=Manage Preference individually for each user -ja.InitWiz_Check=設定をユーザ毎に個別に管理する +ja.InitWiz_Check=設定をユーザー毎に個別に管理する zh_hans.InitWiz_Check=将每个用户的配置文件单独保存 zh_hant.InitWiz_Check=將每個用戶的設定檔單獨保存 @@ -188,7 +188,7 @@ zh_hans.ReadyMemo_SaveLocation=设定文件保存位置 zh_hant.ReadyMemo_SaveLocation=設定檔案保存位置 en.ReadyMemo_UserProfileDir=User-Profile directory -ja.ReadyMemo_UserProfileDir=ユーザ個別ディレクトリ +ja.ReadyMemo_UserProfileDir=ユーザー個別ディレクトリ zh_hans.ReadyMemo_UserProfileDir=用户配置文件目录 zh_hant.ReadyMemo_UserProfileDir=用戶設定檔目錄 diff --git a/installer/sinst_src/keyword/php.khp b/installer/sinst_src/keyword/php.khp index cc698eafbe..24a75d76cc 100644 --- a/installer/sinst_src/keyword/php.khp +++ b/installer/sinst_src/keyword/php.khp @@ -137,7 +137,7 @@ com_propput /// void com_propput ( resource com_object, string property, mixed v com_propset /// void com_propset ( resource com_object, string property, mixed value)\n COMコンポーネントのプロパティに値を代入する com_release /// void com_release ( void)\n コンポーネントリファレンスカウンタを減らす com_set /// void com_set ( resource com_object, string property, mixed value)\n COMコンポーネントのプロパティに値を代入する -call_user_method_array /// mixed call_user_method_array ( string method_name, object obj [, array paramarr])\n パラメータの配列を指定してユーザメソッドをコールする +call_user_method_array /// mixed call_user_method_array ( string method_name, object obj [, array paramarr])\n パラメータの配列を指定してユーザーメソッドをコールする call_user_method /// mixed call_user_method ( string method_name, object obj [, mixed parameter [, mixed ...]])\n 指定したオブジェクトのユーザーメソッドをコールする class_exists /// bool class_exists ( string class_name)\nクラスが定義済か確認する get_class_methods /// array get_class_methods ( string class_name)\nクラスメソッドの名前を連想配列として返す @@ -459,12 +459,12 @@ dotnet_load /// int dotnet_load ( string assembly_name [, string datatype_name [ error_log /// int error_log ( string message, int message_type, string [destination], string [extra_headers])\nエラーメッセージを送信する error_reporting /// int error_reporting ( int [level])\n出力するPHPエラーの種類を設定する restore_error_handler /// void restore_error_handler ( void)\n 以前のエラーハンドラ関数を回復する -set_error_handler /// string set_error_handler ( string error_handler)\n ユーザ定義のエラーハンドラ関数を設定する -trigger_error /// void trigger_error ( string error_msg, int [error_type])\n ユーザレベルのエラー/警告/通知メッセージを生成する -user_error /// void user_error ( string error_msg, int [error_type])\n ユーザレベルのエラー/警告/通知メッセージを発生する +set_error_handler /// string set_error_handler ( string error_handler)\n ユーザー定義のエラーハンドラ関数を設定する +trigger_error /// void trigger_error ( string error_msg, int [error_type])\n ユーザーレベルのエラー/警告/通知メッセージを生成する +user_error /// void user_error ( string error_msg, int [error_type])\n ユーザーレベルのエラー/警告/通知メッセージを発生する fbsql_affected_rows /// int fbsql_affected_rows ( [int link_identifier])\n 直近のFrontBase処理により作用を受けたレコードの数を得る fbsql_autocommit /// bool fbsql_autocommit ( resource link_identifier [, bool OnOff])\nautocommitを有効または無効にする -fbsql_change_user /// resource fbsql_change_user ( string user, string password [, string database [, int link_identifier]])\n アクティブな接続にログインしているユーザを変更する +fbsql_change_user /// resource fbsql_change_user ( string user, string password [, string database [, int link_identifier]])\n アクティブな接続にログインしているユーザーを変更する fbsql_close /// boolean fbsql_close ( [resource link_identifier])\nFrontBase接続を閉じる fbsql_commit /// bool fbsql_commit ( [resource link_identifier])\nデータベースへのトランザクションをコミットする fbsql_connect /// resource fbsql_connect ( [string hostname [, string username [, string password]]])\nFrontBaseサーバへの接続をオープンする @@ -664,8 +664,8 @@ ftp_site /// bool ftp_site ( resource ftp_stream, string cmd)\nSITEコマンド ftp_size /// int ftp_size ( resource ftp_stream, string remote_file)\n指定したファイルのサイズを返す ftp_ssl_connect /// resource ftp_ssl_connect ( string host [, int port [, int timeout]])\nOpens an Secure SSL-FTP connection ftp_systype /// string ftp_systype ( resource ftp_stream)\n リモート FTP サーバーのシステム型IDを返す -call_user_func_array /// mixed call_user_func_array ( string function_name [, array paramarr])\n パラメータの配列を指定してユーザ関数をコールする -call_user_func /// mixed call_user_func ( string function_name [, mixed parameter [, mixed ...]])\n 最初の引数で指定したユーザ関数をコールする +call_user_func_array /// mixed call_user_func_array ( string function_name [, array paramarr])\n パラメータの配列を指定してユーザー関数をコールする +call_user_func /// mixed call_user_func ( string function_name [, mixed parameter [, mixed ...]])\n 最初の引数で指定したユーザー関数をコールする create_function /// string create_function ( string args, string code)\n匿名(ラムダ形式)関数を作成する func_get_arg /// mixed func_get_arg ( int arg_num)\n引数のリストから要素を1つ返す func_get_args /// array func_get_args ( void )\n関数の引数リストを配列として返す @@ -1086,22 +1086,22 @@ ingres_num_rows /// int ingres_num_rows ( resource [link])\n 直近のクエリ ingres_pconnect /// resource ingres_pconnect ( string [database], string [username], string [password])\n Ingres II データベースへの持続的接続をオープンする ingres_query /// bool ingres_query ( string query, resource [link])\nIngres II にSQLクエリを送信する ingres_rollback /// bool ingres_rollback ( resource [link])\nトランザクションをロールバックする -ircg_channel_mode /// boolean ircg_channel_mode ( resource connection, string channel, string mode_spec, string nick)\n ユーザ用にチャンネルモードフラグを設定する +ircg_channel_mode /// boolean ircg_channel_mode ( resource connection, string channel, string mode_spec, string nick)\n ユーザー用にチャンネルモードフラグを設定する ircg_disconnect /// boolean ircg_disconnect ( resource connection, string reason)\n サーバへの接続を閉じる ircg_fetch_error_msg /// array ircg_fetch_error_msg ( resource connection)\n 以前のircg処理からエラーを返す -ircg_get_username /// string ircg_get_username ( int connection)\n 接続用にユーザ名を取得する +ircg_get_username /// string ircg_get_username ( int connection)\n 接続用にユーザー名を取得する ircg_html_encode /// boolean ircg_html_encode ( string html_string)\n HTMLで保存された文字列をエンコードする -ircg_ignore_add /// boolean ircg_ignore_add ( resource connection, string nick)\n サーバ上の除外リストにユーザを追加する -ircg_ignore_del /// boolean ircg_ignore_del ( resource connection, string nick)\n サーバ上の除外リストからユーザを削除する +ircg_ignore_add /// boolean ircg_ignore_add ( resource connection, string nick)\n サーバ上の除外リストにユーザーを追加する +ircg_ignore_del /// boolean ircg_ignore_del ( resource connection, string nick)\n サーバ上の除外リストからユーザーを削除する ircg_is_conn_alive /// boolean ircg_is_conn_alive ( resource connection)\n 接続ステータスを確認する ircg_join /// boolean ircg_join ( resource connection, string channel)\n 接続中のサーバ上でチャンネルに接続する -ircg_kick /// boolean ircg_kick ( resource connection, string channel, string nick, string reason)\n サーバ上のチャネルからユーザを排除する +ircg_kick /// boolean ircg_kick ( resource connection, string channel, string nick, string reason)\n サーバ上のチャネルからユーザーを排除する ircg_lookup_format_messages /// boolean ircg_lookup_format_messages ( string name)\n IRCメッセージの表示用文字列フォーマットの設定を選択する -ircg_msg /// boolean ircg_msg ( resource connection, string recipient, string message [, boolean suppress])\n サーバ上のチャンネルまたはユーザにメッセージを送信する +ircg_msg /// boolean ircg_msg ( resource connection, string recipient, string message [, boolean suppress])\n サーバ上のチャンネルまたはユーザーにメッセージを送信する ircg_nick /// boolean ircg_nick ( resource connection, string nick)\n サーバ上のニックネームを変更する ircg_nickname_escape /// string ircg_nickname_escape ( string nick)\n ニックネームの中の特別な文字がIRC互換となるようにデコードする ircg_nickname_unescape /// string ircg_nickname_unescape ( string nick)\n エンコードされたニックネームをデコードする -ircg_notice /// boolean ircg_notice ( resource connection, string , string message)\n サーバ上のユーザに通知を送信する +ircg_notice /// boolean ircg_notice ( resource connection, string , string message)\n サーバ上のユーザーに通知を送信する ircg_part /// boolean ircg_part ( resource connection, string channel)\n サーバ上のチャンネルから離脱する ircg_pconnect /// resource ircg_pconnect ( string username [, string server_ip [, int server_port [, string msg_format [, array ctcp_messages [, array user_settings]]]]])\n IRCサーバに接続する ircg_register_format_messages /// boolean ircg_register_format_messages ( string name, array messages)\n IRCメッセージの表示用文字列フォーマットの設定を登録する @@ -1109,7 +1109,7 @@ ircg_set_current /// boolean ircg_set_current ( resource connection)\n 出力用 ircg_set_file /// bool ircg_set_file ( int connection, string path)\n 接続用にログファイルを設定する ircg_set_on_die /// bool ircg_set_on_die ( int connection, string host, int port, string data)\n 接続が終了する際にホスト側で実行されるアクションを設定する ircg_topic /// boolean ircg_topic ( resource connection, string channel, string new_topic)\n サーバ上のチャネル用にトピックを設定する -ircg_whois /// boolean ircg_whois ( resource connection, string nick)\n サーバ上のニックネームからユーザ情報を検索する +ircg_whois /// boolean ircg_whois ( resource connection, string nick)\n サーバ上のニックネームからユーザー情報を検索する java_last_exception_clear /// void java_last_exception_clear ( void)\n直近の例外をクリアする java_last_exception_get /// exception java_last_exception_get ( void)\n直近のJava例外を取得する ldap_8859_to_t61 /// string ldap_8859_to_t61 ( string value)\n 8859文字をt61文字に変換する @@ -1120,7 +1120,7 @@ ldap_compare /// int ldap_compare ( int link_identifier, string dn, string attri ldap_connect /// int ldap_connect ( string [hostname], int [port])\nLDAP サーバーへ接続する ldap_count_entries /// int ldap_count_entries ( int link_identifier, int result_identifier)\nサーチ時のエントリ数をカウントする ldap_delete /// int ldap_delete ( int link_identifier, string dn)\nディレクトリからエントリを削除する -ldap_dn2ufn /// string ldap_dn2ufn ( string dn)\n DN をユーザに分かりやすい名前のフォーマットに変換する +ldap_dn2ufn /// string ldap_dn2ufn ( string dn)\n DN をユーザーに分かりやすい名前のフォーマットに変換する ldap_err2str /// string ldap_err2str ( int errno)\n LDAP のエラー番号をエラーメッセージ文字列に変換する ldap_errno /// int ldap_errno ( int link_id)\n 直近の LDAP コマンドのLDAP エラー番号を返す ldap_error /// string ldap_error ( int link_id)\n 直近のLDAPコマンドのLDAP エラーメッセージを返す @@ -1552,7 +1552,7 @@ defined /// bool defined ( string name)\n 指定した名前の定数が存在 die /// この関数は\nexit()のエイリアス eval /// mixed eval ( string code_str)\n文字列をPHPコードとして評価する exit /// void exit ( [string status])\nメッセージを出力し、カレントのスクリプトを終了する -get_browser /// object get_browser ( string [user_agent])\n ユーザのブラウザの機能を取得する +get_browser /// object get_browser ( string [user_agent])\n ユーザーのブラウザの機能を取得する highlight_file /// bool highlight_file ( string filename)\nファイルの構文ハイライト表示 highlight_string /// bool highlight_string ( string str)\n文字列の構文ハイライト化 ignore_user_abort /// int ignore_user_abort ( int [setting])\n クライアント接続が断となった時にスクリプトの実行を中断するかどう かを設定する @@ -1847,11 +1847,11 @@ notes_drop_db /// bool notes_drop_db ( string database_name)\nロータスノー notes_find_note /// bool notes_find_note ( string database_name, string name [, string type])\n database_nameにあるノートIDを返す。ノートの名前を指定する。typeは 省略可 notes_header_info /// object notes_header_info ( string server, string mailbox, int msg_number)\n 指定したサーバ上の指定したメールボックスにあるメッセージ msg_numberをオープンする notes_list_msgs /// bool notes_list_msgs ( string db)\n選択したdatabase_nameからノートを返す -notes_mark_read /// string notes_mark_read ( string database_name, string user_name, string note_id)\nユーザuser_name用にnote_idに既読マークを付ける -notes_mark_unread /// string notes_mark_unread ( string database_name, string user_name, string note_id)\nユーザuser_name用にnote_idに未読マークを付ける +notes_mark_read /// string notes_mark_read ( string database_name, string user_name, string note_id)\nユーザーuser_name用にnote_idに既読マークを付ける +notes_mark_unread /// string notes_mark_unread ( string database_name, string user_name, string note_id)\nユーザーuser_name用にnote_idに未読マークを付ける notes_nav_create /// bool notes_nav_create ( string database_name, string name)\ndatabase_nameにナビゲータ名を作成する notes_search /// string notes_search ( string database_name, string keywords)\ndatabase_nameのキーワードにマッチするノーツを見つける -notes_unread /// string notes_unread ( string database_name, string user_name)\nカレントユーザuser_nameに関して未読のノートIDを返す +notes_unread /// string notes_unread ( string database_name, string user_name)\nカレントユーザーuser_nameに関して未読のノートIDを返す notes_version /// string notes_version ( string database_name)\nロータスノーツのバージョンを取得する odbc_autocommit /// int odbc_autocommit ( int connection_id, int [OnOff])\nautocommitの動作をオンまたはオフにします odbc_binmode /// int odbc_binmode ( int result_id, int mode)\nバイナリカラムデータを処理する @@ -2178,7 +2178,7 @@ getlastmod /// int getlastmod ( void)\n最終ページ更新時刻を取得す getmygid /// int getmygid ( void)\nPHPスクリプトの所有者のGIDを得る getmyinode /// int getmyinode ( void)\n現在のスクリプトの i ノードを取得する getmypid /// int getmypid ( void)\nPHP のプロセス ID を取得する -getmyuid /// int getmyuid ( void)\nPHP スクリプト所有者のユーザ ID を取得する +getmyuid /// int getmyuid ( void)\nPHP スクリプト所有者のユーザー ID を取得する getopt /// string getopt ( string options)\nGets options from the command line argument list getrusage /// array getrusage ( int [who])\nカレントリソースの使用に関する情報を得る ini_alter /// string ini_alter ( string varname, string newvalue)\n設定オプションの値を変更する @@ -2212,7 +2212,7 @@ posix_getpgid /// int posix_getpgid ( int pid)\nジョブ制御のプロセス posix_getpgrp /// int posix_getpgrp ( void)\n 現在のプロセスのグループIDを返す posix_getpid /// int posix_getpid ( void)\n現在のプロセスIDを返す posix_getppid /// int posix_getppid ( void)\n親プロセスのIDを返す -posix_getpwnam /// array posix_getpwnam ( string username)\n指定したユーザ名を有するユーザに関する情報を返す +posix_getpwnam /// array posix_getpwnam ( string username)\n指定したユーザー名を有するユーザーに関する情報を返す posix_getpwuid /// array posix_getpwuid ( int uid)\n指定したユーザーIDを有するユーザーに関する情報を返す posix_getrlimit /// array posix_getrlimit ( void )\nシステムリソース制限に関する情報を返す posix_getsid /// int posix_getsid ( int pid)\nプロセスの現在のsidを得る @@ -2346,7 +2346,7 @@ printer_set_option /// bool printer_set_option ( resource handle, int option, mi printer_start_doc /// bool printer_start_doc ( resource handle [, string document])\n新規ドキュメントを開始する printer_start_page /// bool printer_start_page ( resource handle)\n新規ページを開始する printer_write /// bool printer_write ( resource handle, string content)\nプリンタへデータを書き込む -pspell_add_to_personal /// int pspell_add_to_personal ( int dictionary_link, string word)\nユーザの単語リストに単語を追加 +pspell_add_to_personal /// int pspell_add_to_personal ( int dictionary_link, string word)\nユーザーの単語リストに単語を追加 pspell_add_to_session /// int pspell_add_to_session ( int dictionary_link, string word)\n カレントのセッションの単語リストに単語を追加 pspell_check /// bool pspell_check ( int dictionary_link, string word)\n単語をチェックする pspell_clear_session /// int pspell_clear_session ( int dictionary_link)\nカレントのセッションをクリアする @@ -2439,7 +2439,7 @@ session_readonly /// void session_readonly ( void)\nBegin session - reinitialize session_register /// bool session_register ( mixed name, mixed [...])\n現在のセッションに1つ以上の変数を登録する session_save_path /// string session_save_path ( string [path])\n 現在のセッションデータ保存パスを取得または設定する session_set_cookie_params /// void session_set_cookie_params ( int lifetime, string [path], string [domain])\n セッションクッキーパラメータを設定する -session_set_save_handler /// void session_set_save_handler ( string open, string close, string read, string write, string destroy, string gc)\n ユーザ定義のセッション保存関数を設定する +session_set_save_handler /// void session_set_save_handler ( string open, string close, string read, string write, string destroy, string gc)\n ユーザー定義のセッション保存関数を設定する session_start /// bool session_start ( void)\nセッションデータを初期化する session_unregister /// bool session_unregister ( string name)\n現在のセッションから変数の登録を削除する session_unset /// void session_unset ( void)\n 全てのセッション変数を開放する @@ -2486,7 +2486,7 @@ swf_mulcolor /// void swf_mulcolor ( float r, float g, float b, float a)\n グ swf_nextid /// int swf_nextid ( void)\n 次の未使用のオブジェクトIDを返す swf_oncondition /// void swf_oncondition ( int transition)\n アクションリストのトリガとして使用されるトランジションを定義する swf_openfile /// void swf_openfile ( string filename, float width, float height, float framerate, float r, float g, float b)\n 新規にShockwave Flashファイルをオープンする -swf_ortho2 /// void swf_ortho2 ( float xmin, float xmax, float ymin, float ymax)\n ユーザ座標の2D直交マッピングをカレントのビューポイントに定義する +swf_ortho2 /// void swf_ortho2 ( float xmin, float xmax, float ymin, float ymax)\n ユーザー座標の2D直交マッピングをカレントのビューポイントに定義する swf_ortho /// void swf_ortho ( float xmin, float xmax, float ymin, float ymax, float zmin, float zmax)\n カレントのビューポートにおけるユーザー座標の直交マッピングを定義する swf_perspective /// void swf_perspective ( float fovy, float aspect, float near, float far)\n 遠近法による投影変換を定義する swf_placeobject /// void swf_placeobject ( int objid, int depth)\n オブジェクトを画面に配置する @@ -2706,19 +2706,19 @@ vpopmail_add_alias_domain_ex /// bool vpopmail_add_alias_domain_ex ( string oldd vpopmail_add_alias_domain /// bool vpopmail_add_alias_domain ( string domain, string aliasdomain)\n仮想ドメインへのエイリアスを追加する vpopmail_add_domain_ex /// bool vpopmail_add_domain_ex ( string domain, string passwd [, string quota [, string bounce [, bool apop]]])\n新規に仮想ドメインを追加する vpopmail_add_domain /// bool vpopmail_add_domain ( string domain, string dir, int uid, int gid)\n仮想ドメインを新たに追加する -vpopmail_add_user /// bool vpopmail_add_user ( string user, string domain, string password [, string gecos [, bool apop]])\n指定した仮想ドメインに新規ユーザを追加する +vpopmail_add_user /// bool vpopmail_add_user ( string user, string domain, string password [, string gecos [, bool apop]])\n指定した仮想ドメインに新規ユーザーを追加する vpopmail_alias_add /// bool vpopmail_alias_add ( string user, string domain, string alias)\n仮想エイリアスを追加する vpopmail_alias_del_domain /// bool vpopmail_alias_del_domain ( string domain)\nあるドメインに関する仮想エイリアスを全て削除する -vpopmail_alias_del /// bool vpopmail_alias_del ( string user, string domain)\nあるユーザの仮想エイリアスを全て削除する +vpopmail_alias_del /// bool vpopmail_alias_del ( string user, string domain)\nあるユーザーの仮想エイリアスを全て削除する vpopmail_alias_get_all /// array vpopmail_alias_get_all ( string domain)\nあるドメインに関するエイリアスを全て取得する vpopmail_alias_get /// array vpopmail_alias_get ( string alias, string domain)\nあるドメインに関するエイリアスを取得する -vpopmail_auth_user /// bool vpopmail_auth_user ( string user, string domain, string password [, string apop])\n ユーザ名/ドメイン/パスワードの認証を試み、true/falseを返す +vpopmail_auth_user /// bool vpopmail_auth_user ( string user, string domain, string password [, string apop])\n ユーザー名/ドメイン/パスワードの認証を試み、true/falseを返す vpopmail_del_domain_ex /// bool vpopmail_del_domain_ex ( string domain)\n仮想ドメインを削除する vpopmail_del_domain /// bool vpopmail_del_domain ( string domain)\n仮想ドメインを削除する -vpopmail_del_user /// bool vpopmail_del_user ( string user, string domain)\n仮想ドメインからユーザを削除する +vpopmail_del_user /// bool vpopmail_del_user ( string user, string domain)\n仮想ドメインからユーザーを削除する vpopmail_error /// string vpopmail_error ( void)\n 直近のvpopmailエラーに関するエラーメッセージを取得する -vpopmail_passwd /// bool vpopmail_passwd ( string user, string domain, string password)\n仮想ユーザのパスワードを変更する -vpopmail_set_user_quota /// bool vpopmail_set_user_quota ( string user, string domain, string quota)\n仮想ユーザの容量制限(クオータ)を設定する +vpopmail_passwd /// bool vpopmail_passwd ( string user, string domain, string password)\n仮想ユーザーのパスワードを変更する +vpopmail_set_user_quota /// bool vpopmail_set_user_quota ( string user, string domain, string quota)\n仮想ユーザーの容量制限(クオータ)を設定する w32api_deftype /// int w32api_deftype ( string typename, string member1_type, string member1_name)\n他のw32api_functionsで使用するために型を定義する w32api_init_dtype /// resource w32api_init_dtype ( string typename, mixed val1, mixed val2)\n データ型typenameのインスタンスを作成し、val1, val2, 関数の値で埋 める w32api_invoke_function /// mixed w32api_invoke_function ( string funcname)\n 関数名の後ろで指定された引数を指定して関数funcnameを実行する diff --git a/sakura_core/CCodeChecker.cpp b/sakura_core/CCodeChecker.cpp index 5d6bf912c2..a4b3f7674c 100644 --- a/sakura_core/CCodeChecker.cpp +++ b/sakura_core/CCodeChecker.cpp @@ -161,7 +161,7 @@ ECallbackResult CCodeChecker::OnCheckSave(SSaveInfo* pSaveInfo) ); } - //ユーザ問い合わせ + //ユーザー問い合わせ if (bTmpResult) { int nDlgResult = MYMESSAGEBOX( CEditWnd::getInstance()->GetHwnd(), @@ -185,7 +185,7 @@ ECallbackResult CCodeChecker::OnCheckSave(SSaveInfo* pSaveInfo) point, cmemChar ); - //ユーザ問い合わせ + //ユーザー問い合わせ if(nTmpResult==RESULT_LOSESOME){ WCHAR szCpName[100]; WCHAR szLineNum[60]; // 123桁 diff --git a/sakura_core/CLoadAgent.cpp b/sakura_core/CLoadAgent.cpp index c41ebe120f..b045f43012 100644 --- a/sakura_core/CLoadAgent.cpp +++ b/sakura_core/CLoadAgent.cpp @@ -169,7 +169,7 @@ ECallbackResult CLoadAgent::OnCheckLoad(SLoadInfo* pLoadInfo) return CALLBACK_INTERRUPT; } - // ファイルサイズがユーザ設定の閾値以上の場合は警告ダイアログを出す + // ファイルサイズがユーザー設定の閾値以上の場合は警告ダイアログを出す if (GetDllShareData().m_Common.m_sFile.m_bAlertIfLargeFile) { // GetDllShareData().m_Common.m_sFile.m_nAlertFileSize はMB単位 if( (nFileSize.QuadPart>>20) >= (GetDllShareData().m_Common.m_sFile.m_nAlertFileSize) ){ diff --git a/sakura_core/CReadManager.cpp b/sakura_core/CReadManager.cpp index 6d2efbd48d..b502140ca6 100644 --- a/sakura_core/CReadManager.cpp +++ b/sakura_core/CReadManager.cpp @@ -39,7 +39,7 @@ @version 2.0 @note Windows用にコーディングしてある @retval TRUE 正常読み込み - @retval FALSE エラー(またはユーザによるキャンセル?) + @retval FALSE エラー(またはユーザーによるキャンセル?) @date 2002/08/30 Moca 旧ReadFileを元に作成 ファイルアクセスに関する部分をCFileLoadで行う @date 2003/07/26 ryoji BOMの状態の取得を追加 */ diff --git a/sakura_core/_main/CControlProcess.cpp b/sakura_core/_main/CControlProcess.cpp index ed1db79ee5..783603ca44 100644 --- a/sakura_core/_main/CControlProcess.cpp +++ b/sakura_core/_main/CControlProcess.cpp @@ -41,9 +41,9 @@ std::filesystem::path CControlProcess::GetIniFileName() const // exe基準のiniファイルパスを得る auto iniPath = GetExeFileName().replace_extension(L".ini"); - // マルチユーザ用のiniファイルパス - // exeと同じフォルダに置かれたマルチユーザ構成設定ファイル(sakura.exe.ini)の内容 - // に従ってマルチユーザ用のiniファイルパスを決める + // マルチユーザー用のiniファイルパス + // exeと同じフォルダに置かれたマルチユーザー構成設定ファイル(sakura.exe.ini)の内容 + // に従ってマルチユーザー用のiniファイルパスを決める auto exeIniPath = GetExeFileName().concat(L".ini"); if (bool isMultiUserSeggings = ::GetPrivateProfileInt(L"Settings", L"MultiUser", 0, exeIniPath.c_str()); isMultiUserSeggings) { return GetPrivateIniFileName(exeIniPath, iniPath.filename()); @@ -60,23 +60,23 @@ std::filesystem::path CControlProcess::GetIniFileName() const } /*! - @brief マルチユーザ用のiniファイルパスを取得する + @brief マルチユーザー用のiniファイルパスを取得する */ std::filesystem::path CControlProcess::GetPrivateIniFileName(const std::wstring& exeIniPath, const std::wstring& filename) const { KNOWNFOLDERID refFolderId; switch (int nFolder = ::GetPrivateProfileInt(L"Settings", L"UserRootFolder", 0, exeIniPath.c_str())) { case 1: - refFolderId = FOLDERID_Profile; // ユーザのルートフォルダ + refFolderId = FOLDERID_Profile; // ユーザーのルートフォルダ break; case 2: - refFolderId = FOLDERID_Documents; // ユーザのドキュメントフォルダ + refFolderId = FOLDERID_Documents; // ユーザーのドキュメントフォルダ break; case 3: - refFolderId = FOLDERID_Desktop; // ユーザのデスクトップフォルダ + refFolderId = FOLDERID_Desktop; // ユーザーのデスクトップフォルダ break; default: - refFolderId = FOLDERID_RoamingAppData; // ユーザのアプリケーションデータフォルダ + refFolderId = FOLDERID_RoamingAppData; // ユーザーのアプリケーションデータフォルダ break; } diff --git a/sakura_core/_main/CProcess.cpp b/sakura_core/_main/CProcess.cpp index 85361de7dd..b8e61d2502 100644 --- a/sakura_core/_main/CProcess.cpp +++ b/sakura_core/_main/CProcess.cpp @@ -129,7 +129,7 @@ int CProcess::WriteDump( PEXCEPTION_POINTERS pExceptPtrs ) static WCHAR szFile[MAX_PATH]; // 出力先はiniと同じ(InitializeProcess()後に確定) - // Vista以降では C:\Users\(ユーザ名)\AppData\Local\CrashDumps に出力 + // Vista以降では C:\Users\(ユーザー名)\AppData\Local\CrashDumps に出力 GetInidirOrExedir( szFile, _APP_NAME_(_T) L".dmp" ); HANDLE hFile = ::CreateFile( diff --git a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp index fa4ded52c7..e68d5e59c6 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp @@ -1071,7 +1071,7 @@ void CDlgOpenFile_CommonFileDialog::DlgOpenFail(void) const WCHAR* pszError; DWORD dwError = ::CommDlgExtendedError(); if( dwError == 0 ){ - // ユーザキャンセルによる + // ユーザーキャンセルによる return; } diff --git a/sakura_core/doc/CDocFileOperation.cpp b/sakura_core/doc/CDocFileOperation.cpp index 9a7aa11d92..b155ed596a 100644 --- a/sakura_core/doc/CDocFileOperation.cpp +++ b/sakura_core/doc/CDocFileOperation.cpp @@ -449,7 +449,7 @@ bool CDocFileOperation::FileSaveAs( const WCHAR* filename,ECodeType eCodeType, E /* 閉じて(無題)。 - ユーザキャンセル操作等によりクローズされなかった場合は false を返す。 + ユーザーキャンセル操作等によりクローズされなかった場合は false を返す。 @date 2006.12.30 ryoji CEditView::Command_FILESAVEAS()から処理本体を切り出し */ diff --git a/sakura_core/env/CShareData.cpp b/sakura_core/env/CShareData.cpp index 06ea8fb4b1..39d4b36613 100644 --- a/sakura_core/env/CShareData.cpp +++ b/sakura_core/env/CShareData.cpp @@ -175,7 +175,7 @@ bool CShareData::InitShareData() m_pShareData->m_dwCustColors[i] = RGB( 255, 255, 255 ); } - // マルチユーザ用のiniファイルパス(exe基準の初期化よりも先に行う必要がある) + // マルチユーザー用のiniファイルパス(exe基準の初期化よりも先に行う必要がある) auto privateIniPath = GetIniFileName(); m_pShareData->m_szPrivateIniFile = privateIniPath.c_str(); @@ -379,7 +379,7 @@ bool CShareData::InitShareData() //ファイルの保存 sFile.m_bEnableUnmodifiedOverwrite = false; // 無変更でも上書きするか - // 「名前を付けて保存」でファイルの種類が[ユーザ指定]のときのファイル一覧表示 //ファイル保存ダイアログのフィルタ設定 // 2006.11.16 ryoji + // 「名前を付けて保存」でファイルの種類が[ユーザー指定]のときのファイル一覧表示 //ファイル保存ダイアログのフィルタ設定 // 2006.11.16 ryoji sFile.m_bNoFilterSaveNew = true; // 新規から保存時は全ファイル表示 sFile.m_bNoFilterSaveFile = true; // 新規以外から保存時は全ファイル表示 @@ -1068,7 +1068,7 @@ bool CShareData::OpenDebugWindow( HWND hwnd, bool bAllwaysActive ) /*! 設定フォルダがEXEフォルダと別かどうかを返す - iniファイルの保存先がユーザ別設定フォルダかどうか 2007.05.25 ryoji + iniファイルの保存先がユーザー別設定フォルダかどうか 2007.05.25 ryoji */ [[nodiscard]] bool CShareData::IsPrivateSettings( void ) const noexcept { diff --git a/sakura_core/env/DLLSHAREDATA.h b/sakura_core/env/DLLSHAREDATA.h index ed247c3d43..fc2147b980 100644 --- a/sakura_core/env/DLLSHAREDATA.h +++ b/sakura_core/env/DLLSHAREDATA.h @@ -149,7 +149,7 @@ struct DLLSHAREDATA{ SShare_Handles m_sHandles; SFilePath m_szIniFile; //!< EXE基準のiniファイルパス - SFilePath m_szPrivateIniFile; //!< マルチユーザ用のiniファイルパス + SFilePath m_szPrivateIniFile; //!< マルチユーザー用のiniファイルパス SCharWidthCache m_sCharWidth; //!< 文字半角全角キャッシュ DWORD m_dwCustColors[16]; //!< フォントDialogカスタムパレット diff --git a/sakura_core/func/CFuncLookup.cpp b/sakura_core/func/CFuncLookup.cpp index 192824de14..04703f9d35 100644 --- a/sakura_core/func/CFuncLookup.cpp +++ b/sakura_core/func/CFuncLookup.cpp @@ -216,7 +216,7 @@ void CFuncLookup::SetCategory2Combo( HWND hComboBox ) const Combo_AddString( hComboBox, LS( nsFuncCode::ppszFuncKind[i] ) ); } - // ユーザマクロ + // ユーザーマクロ Combo_AddString( hComboBox, LS( STR_ERR_DLGFUNCLKUP01 ) ); // カスタムメニュー Combo_AddString( hComboBox, LS( STR_ERR_DLGFUNCLKUP02 ) ); diff --git a/sakura_core/macro/CPPA.cpp b/sakura_core/macro/CPPA.cpp index 0c9d9b90c3..9c6d6c1327 100644 --- a/sakura_core/macro/CPPA.cpp +++ b/sakura_core/macro/CPPA.cpp @@ -325,7 +325,7 @@ void __stdcall CPPA::stdStrObj(const char* ObjName, int Index, BYTE GS_Mode, int @param Err_CD IN 0以外各コールバック関数が設定した値 1以上 FuncID + 1 0 PPAのエラー - -1以下 その他ユーザ定義エラー + -1以下 その他ユーザー定義エラー @param Err_Mes IN エラーメッセージ @date 2003.06.01 Moca diff --git a/sakura_core/parse/CWordParse.cpp b/sakura_core/parse/CWordParse.cpp index 829455ad58..9de57baa5e 100644 --- a/sakura_core/parse/CWordParse.cpp +++ b/sakura_core/parse/CWordParse.cpp @@ -158,7 +158,7 @@ ECharKind CWordParse::WhatKindOfChar( if( IsHankakuKatakana(c) )return CK_KATA; // 半角のカタカナ if( 0x00C0 <= c && c < 0x0180 && c != 0x00D7 && c != 0x00F7 )return CK_LATIN; // ラテン1補助、ラテン拡張のうちアルファベット風のもの(×÷を除く) - //if( c == L'#'|| c == L'$' || c == L'@'|| c == L'\\' )return CK_UDEF; // ユーザ定義 + //if( c == L'#'|| c == L'$' || c == L'@'|| c == L'\\' )return CK_UDEF; // ユーザー定義 //その他 if( IsZenkakuSpace(c) )return CK_ZEN_SPACE; // 全角スペース @@ -207,7 +207,7 @@ ECharKind CWordParse::WhatKindOfTwoChars( ECharKind kindPre, ECharKind kindCur ) if( kindPre == CK_LATIN )kindPre = CK_CSYM; // ラテン系文字はアルファベットとみなす if( kindCur == CK_LATIN )kindCur = CK_CSYM; - if( kindPre == CK_UDEF )kindPre = CK_ETC; // ユーザ定義文字はその他の半角とみなす + if( kindPre == CK_UDEF )kindPre = CK_ETC; // ユーザー定義文字はその他の半角とみなす if( kindCur == CK_UDEF )kindCur = CK_ETC; if( kindPre == CK_CTRL )kindPre = CK_ETC; // 制御文字はその他の半角とみなす if( kindCur == CK_CTRL )kindCur = CK_ETC; @@ -233,7 +233,7 @@ ECharKind CWordParse::WhatKindOfTwoChars4KW( ECharKind kindPre, ECharKind kindCu if( kindPre == CK_LATIN )kindPre = CK_CSYM; // ラテン系文字はアルファベットとみなす if( kindCur == CK_LATIN )kindCur = CK_CSYM; - if( kindPre == CK_UDEF )kindPre = CK_CSYM; // ユーザ定義文字はアルファベットとみなす + if( kindPre == CK_UDEF )kindPre = CK_CSYM; // ユーザー定義文字はアルファベットとみなす if( kindCur == CK_UDEF )kindCur = CK_CSYM; if( kindPre == CK_CTRL )kindPre = CK_CTRL; // 制御文字はそのまま制御文字とみなす if( kindCur == CK_CTRL )kindCur = CK_CTRL; diff --git a/sakura_core/parse/CWordParse.h b/sakura_core/parse/CWordParse.h index b27abe0646..54bc34ff81 100644 --- a/sakura_core/parse/CWordParse.h +++ b/sakura_core/parse/CWordParse.h @@ -43,7 +43,7 @@ enum ECharKind{ CK_CSYM, //!< 識別子に使用可能な文字 (英数字、アンダースコア) CK_KATA, //!< 半角のカタカナ 0xA1<=c<=0xFD CK_LATIN, //!< ラテン1補助、ラテン拡張のうちアルファベット風のもの 0x00C0<=c<0x0180 - CK_UDEF, //!< ユーザ定義キーワード文字(#$@\) + CK_UDEF, //!< ユーザー定義キーワード文字(#$@\) CK_ETC, //!< 半角のその他 CK_ZEN_SPACE, //!< 全角スペース diff --git a/sakura_core/recent/CRecentCmd.cpp b/sakura_core/recent/CRecentCmd.cpp index 67d52901de..76d33d2550 100644 --- a/sakura_core/recent/CRecentCmd.cpp +++ b/sakura_core/recent/CRecentCmd.cpp @@ -50,7 +50,7 @@ CRecentCmd::CRecentCmd() /* アイテムの比較要素を取得する。 - @note 取得後のポインタはユーザ管理の構造体にキャストして参照してください。 + @note 取得後のポインタはユーザー管理の構造体にキャストして参照してください。 */ const WCHAR* CRecentCmd::GetItemText( int nIndex ) const { diff --git a/sakura_core/recent/CRecentCurDir.cpp b/sakura_core/recent/CRecentCurDir.cpp index ac235f5b17..d51a3b0cae 100644 --- a/sakura_core/recent/CRecentCurDir.cpp +++ b/sakura_core/recent/CRecentCurDir.cpp @@ -51,7 +51,7 @@ CRecentCurDir::CRecentCurDir() /* アイテムの比較要素を取得する。 - @note 取得後のポインタはユーザ管理の構造体にキャストして参照してください。 + @note 取得後のポインタはユーザー管理の構造体にキャストして参照してください。 */ const WCHAR* CRecentCurDir::GetItemText( int nIndex ) const { diff --git a/sakura_core/recent/CRecentEditNode.cpp b/sakura_core/recent/CRecentEditNode.cpp index 09e973abf2..b4cf156983 100644 --- a/sakura_core/recent/CRecentEditNode.cpp +++ b/sakura_core/recent/CRecentEditNode.cpp @@ -50,7 +50,7 @@ CRecentEditNode::CRecentEditNode() /* アイテムの比較要素を取得する。 - @note 取得後のポインタはユーザ管理の構造体にキャストして参照してください。 + @note 取得後のポインタはユーザー管理の構造体にキャストして参照してください。 */ const WCHAR* CRecentEditNode::GetItemText( int nIndex ) const { diff --git a/sakura_core/recent/CRecentExceptMru.cpp b/sakura_core/recent/CRecentExceptMru.cpp index 3d91b5bdc5..6c662764fa 100644 --- a/sakura_core/recent/CRecentExceptMru.cpp +++ b/sakura_core/recent/CRecentExceptMru.cpp @@ -51,7 +51,7 @@ CRecentExceptMRU::CRecentExceptMRU() /* アイテムの比較要素を取得する。 - @note 取得後のポインタはユーザ管理の構造体にキャストして参照してください。 + @note 取得後のポインタはユーザー管理の構造体にキャストして参照してください。 */ const WCHAR* CRecentExceptMRU::GetItemText( int nIndex ) const { diff --git a/sakura_core/recent/CRecentExcludeFile.cpp b/sakura_core/recent/CRecentExcludeFile.cpp index ec2e09ab49..7f26e157fd 100644 --- a/sakura_core/recent/CRecentExcludeFile.cpp +++ b/sakura_core/recent/CRecentExcludeFile.cpp @@ -49,7 +49,7 @@ CRecentExcludeFile::CRecentExcludeFile() /* アイテムの比較要素を取得する。 - @note 取得後のポインタはユーザ管理の構造体にキャストして参照してください。 + @note 取得後のポインタはユーザー管理の構造体にキャストして参照してください。 */ const WCHAR* CRecentExcludeFile::GetItemText( int nIndex ) const { diff --git a/sakura_core/recent/CRecentExcludeFolder.cpp b/sakura_core/recent/CRecentExcludeFolder.cpp index b61ad6d28c..8cc9e0efd7 100644 --- a/sakura_core/recent/CRecentExcludeFolder.cpp +++ b/sakura_core/recent/CRecentExcludeFolder.cpp @@ -49,7 +49,7 @@ CRecentExcludeFolder::CRecentExcludeFolder() /* アイテムの比較要素を取得する。 - @note 取得後のポインタはユーザ管理の構造体にキャストして参照してください。 + @note 取得後のポインタはユーザー管理の構造体にキャストして参照してください。 */ const WCHAR* CRecentExcludeFolder::GetItemText( int nIndex ) const { diff --git a/sakura_core/recent/CRecentFile.cpp b/sakura_core/recent/CRecentFile.cpp index f8114041b5..a11b088af9 100644 --- a/sakura_core/recent/CRecentFile.cpp +++ b/sakura_core/recent/CRecentFile.cpp @@ -31,7 +31,7 @@ /* アイテムの比較要素を取得する。 - @note 取得後のポインタはユーザ管理の構造体にキャストして参照してください。 + @note 取得後のポインタはユーザー管理の構造体にキャストして参照してください。 */ const WCHAR* CRecentFile::GetItemText( int nIndex ) const { diff --git a/sakura_core/recent/CRecentFolder.cpp b/sakura_core/recent/CRecentFolder.cpp index 42296fdec6..78e368f7a7 100644 --- a/sakura_core/recent/CRecentFolder.cpp +++ b/sakura_core/recent/CRecentFolder.cpp @@ -51,7 +51,7 @@ CRecentFolder::CRecentFolder() /* アイテムの比較要素を取得する。 - @note 取得後のポインタはユーザ管理の構造体にキャストして参照してください。 + @note 取得後のポインタはユーザー管理の構造体にキャストして参照してください。 */ const WCHAR* CRecentFolder::GetItemText( int nIndex ) const { diff --git a/sakura_core/recent/CRecentGrepFile.cpp b/sakura_core/recent/CRecentGrepFile.cpp index 6863f9e5f2..134dad8391 100644 --- a/sakura_core/recent/CRecentGrepFile.cpp +++ b/sakura_core/recent/CRecentGrepFile.cpp @@ -50,7 +50,7 @@ CRecentGrepFile::CRecentGrepFile() /* アイテムの比較要素を取得する。 - @note 取得後のポインタはユーザ管理の構造体にキャストして参照してください。 + @note 取得後のポインタはユーザー管理の構造体にキャストして参照してください。 */ const WCHAR* CRecentGrepFile::GetItemText( int nIndex ) const { diff --git a/sakura_core/recent/CRecentGrepFolder.cpp b/sakura_core/recent/CRecentGrepFolder.cpp index 06bee2926b..b11060fa93 100644 --- a/sakura_core/recent/CRecentGrepFolder.cpp +++ b/sakura_core/recent/CRecentGrepFolder.cpp @@ -50,7 +50,7 @@ CRecentGrepFolder::CRecentGrepFolder() /* アイテムの比較要素を取得する。 - @note 取得後のポインタはユーザ管理の構造体にキャストして参照してください。 + @note 取得後のポインタはユーザー管理の構造体にキャストして参照してください。 */ const WCHAR* CRecentGrepFolder::GetItemText( int nIndex ) const { diff --git a/sakura_core/recent/CRecentReplace.cpp b/sakura_core/recent/CRecentReplace.cpp index 06365ce740..a96255edf4 100644 --- a/sakura_core/recent/CRecentReplace.cpp +++ b/sakura_core/recent/CRecentReplace.cpp @@ -51,7 +51,7 @@ CRecentReplace::CRecentReplace() /* アイテムの比較要素を取得する。 - @note 取得後のポインタはユーザ管理の構造体にキャストして参照してください。 + @note 取得後のポインタはユーザー管理の構造体にキャストして参照してください。 */ const WCHAR* CRecentReplace::GetItemText( int nIndex ) const { diff --git a/sakura_core/recent/CRecentSearch.cpp b/sakura_core/recent/CRecentSearch.cpp index 95dd26786f..8b2defa263 100644 --- a/sakura_core/recent/CRecentSearch.cpp +++ b/sakura_core/recent/CRecentSearch.cpp @@ -51,7 +51,7 @@ CRecentSearch::CRecentSearch() /* アイテムの比較要素を取得する。 - @note 取得後のポインタはユーザ管理の構造体にキャストして参照してください。 + @note 取得後のポインタはユーザー管理の構造体にキャストして参照してください。 */ const WCHAR* CRecentSearch::GetItemText( int nIndex ) const { diff --git a/sakura_core/recent/CRecentTagjumpKeyword.cpp b/sakura_core/recent/CRecentTagjumpKeyword.cpp index acb9bbbd31..5a1164c5a4 100644 --- a/sakura_core/recent/CRecentTagjumpKeyword.cpp +++ b/sakura_core/recent/CRecentTagjumpKeyword.cpp @@ -51,7 +51,7 @@ CRecentTagjumpKeyword::CRecentTagjumpKeyword() /* アイテムの比較要素を取得する。 - @note 取得後のポインタはユーザ管理の構造体にキャストして参照してください。 + @note 取得後のポインタはユーザー管理の構造体にキャストして参照してください。 */ const WCHAR* CRecentTagjumpKeyword::GetItemText( int nIndex ) const { diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index fc3d499df3..ec8aa1032c 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -2936,7 +2936,7 @@ STRINGTABLE BEGIN STR_PLGMGR_INST_IDNUM "Plugin.IDの先頭に数字は使用できません" STR_PLGMGR_INST_NAME "同じプラグインが別の名前でインストールされています。上書きしますか?\n はい → 新しい「%s」を使用\n いいえ→ インストール済みの「%ls」を使用" - STR_PLGMGR_INST_USERCANCEL "ユーザキャンセル" + STR_PLGMGR_INST_USERCANCEL "ユーザーキャンセル" STR_PLGMGR_INST_MAX "プラグインをこれ以上登録できません" STR_WSHPLUG_LOADMACRO "マクロの読み込みに失敗しました。\n\n%s" STR_CARET_WITHBOM " BOM付" diff --git a/sakura_core/typeprop/CPropTypesRegex.cpp b/sakura_core/typeprop/CPropTypesRegex.cpp index 00286a8fc7..a4eaac5912 100644 --- a/sakura_core/typeprop/CPropTypesRegex.cpp +++ b/sakura_core/typeprop/CPropTypesRegex.cpp @@ -138,7 +138,7 @@ INT_PTR CPropTypesRegex::DispatchEvent( } else { - //使用するになってるんだけどDisableにする。もうユーザは変更できない。 + //使用するになってるんだけどDisableにする。もうユーザーは変更できない。 EnableWindow( GetDlgItem( hwndDlg, IDC_CHECK_REGEX ), FALSE ); } } diff --git a/sakura_core/types/CType_Perl.cpp b/sakura_core/types/CType_Perl.cpp index 03ea6efe25..8ebd9ee44c 100644 --- a/sakura_core/types/CType_Perl.cpp +++ b/sakura_core/types/CType_Perl.cpp @@ -33,7 +33,7 @@ #include "view/Colors/EColorIndexType.h" /* Perl */ -//Jul. 08, 2001 JEPRO Perl ユーザに贈る +//Jul. 08, 2001 JEPRO Perl ユーザーに贈る //Jul. 08, 2001 JEPRO 追加 void CType_Perl::InitTypeConfigImp(STypeConfig* pType) { diff --git a/sakura_core/types/CType_Tex.cpp b/sakura_core/types/CType_Tex.cpp index 6347cdb6b1..21496bc83d 100644 --- a/sakura_core/types/CType_Tex.cpp +++ b/sakura_core/types/CType_Tex.cpp @@ -35,8 +35,8 @@ #include "view/Colors/EColorIndexType.h" /* TeX */ -//Oct. 31, 2000 JEPRO TeX ユーザに贈る -//Oct. 31, 2000 JEPRO TeX ユーザに贈る //Mar. 10, 2001 JEPRO 追加 +//Oct. 31, 2000 JEPRO TeX ユーザーに贈る +//Oct. 31, 2000 JEPRO TeX ユーザーに贈る //Mar. 10, 2001 JEPRO 追加 void CType_Tex::InitTypeConfigImp(STypeConfig* pType) { //名前と拡張子 diff --git a/sakura_core/types/CType_Text.cpp b/sakura_core/types/CType_Text.cpp index 7114b7aac5..82b2f55674 100644 --- a/sakura_core/types/CType_Text.cpp +++ b/sakura_core/types/CType_Text.cpp @@ -64,7 +64,7 @@ void CType_Text::InitTypeConfigImp(STypeConfig* pType) //※小さな親切として、C:\~~ や \\~~ などのファイルパスをクリッカブルにする設定を「テキスト」に既定で仕込む //※""で挟まれる設定は挟まれない設定よりも上に無ければならない - //※""で挟まれる設定を複製してちょっと修正すれば、<>や[]に挟まれたものにも対応できる(ユーザに任せる) + //※""で挟まれる設定を複製してちょっと修正すれば、<>や[]に挟まれたものにも対応できる(ユーザーに任せる) //正規表現キーワード int keywordPos = 0; diff --git a/sakura_core/types/CType_Vb.cpp b/sakura_core/types/CType_Vb.cpp index 9016433784..7da58d092c 100644 --- a/sakura_core/types/CType_Vb.cpp +++ b/sakura_core/types/CType_Vb.cpp @@ -33,7 +33,7 @@ #include "view/Colors/EColorIndexType.h" /* Visual Basic */ -//JUl. 10, 2001 JEPRO VB ユーザに贈る +//JUl. 10, 2001 JEPRO VB ユーザーに贈る //Jul. 09, 2001 JEPRO 追加 //Dec. 16, 2002 MIK追加 // Feb. 19, 2006 genta .vb追加 void CType_Vb::InitTypeConfigImp(STypeConfig* pType) { diff --git a/sakura_core/util/MessageBoxF.h b/sakura_core/util/MessageBoxF.h index 36a6242a80..89411cca8b 100644 --- a/sakura_core/util/MessageBoxF.h +++ b/sakura_core/util/MessageBoxF.h @@ -52,7 +52,7 @@ int Wrap_MessageBox(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType); int VMessageBoxF( HWND hwndOwner, UINT uType, LPCWSTR lpCaption, LPCWSTR lpText, va_list& v ); int MessageBoxF ( HWND hwndOwner, UINT uType, LPCWSTR lpCaption, LPCWSTR lpText, ... ); -// ユーザ用メッセージボックス // +// ユーザー用メッセージボックス // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // //デバッグ用メッセージボックス diff --git a/sakura_core/view/colors/EColorIndexType.h b/sakura_core/view/colors/EColorIndexType.h index e1500e17c4..02675d5766 100644 --- a/sakura_core/view/colors/EColorIndexType.h +++ b/sakura_core/view/colors/EColorIndexType.h @@ -61,7 +61,7 @@ enum EColorIndexType { COLORIDX_WRAP, //!< 折り返し記号 COLORIDX_VERTLINE, //!< 指定桁縦線 // 2005.11.08 Moca COLORIDX_EOF, //!< EOF記号 - COLORIDX_DIGIT, //!< 半角数値 //@@@ 2001.02.17 by MIK //色設定Ver.3からユーザファイルに対しては文字列で処理しているのでリナンバリングしてもよい. Mar. 7, 2001 JEPRO noted + COLORIDX_DIGIT, //!< 半角数値 //@@@ 2001.02.17 by MIK //色設定Ver.3からユーザーファイルに対しては文字列で処理しているのでリナンバリングしてもよい. Mar. 7, 2001 JEPRO noted COLORIDX_BRACKET_PAIR, //!< 対括弧 // 02/09/18 ai Add COLORIDX_SELECT, //!< 選択範囲 COLORIDX_SEARCH, //!< 検索文字列 diff --git a/tests/unittests/test-cfileext.cpp b/tests/unittests/test-cfileext.cpp index 3b9a569eb1..98a29ef9e9 100644 --- a/tests/unittests/test-cfileext.cpp +++ b/tests/unittests/test-cfileext.cpp @@ -67,7 +67,7 @@ TEST(CFileExt, RawLongFilter) { CFileExt cFileExt; cFileExt.AppendExtRaw( - L"ユーザ設定", + L"ユーザー設定", L"*.extensin_250_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_longX" ); } @@ -76,7 +76,7 @@ TEST(CFileExt, RawManyFilter) { CFileExt cFileExt; cFileExt.AppendExtRaw( - L"ユーザ指定", + L"ユーザー指定", L"*.extensin_50_0_long_long_long_long_long_long_long_l;*.extensin_50_1_long_long_long_long_long_long_long_l;*.extensin_50_2_long_long_long_long_long_long_long_l;*.extensin_50_3_long_long_long_long_long_long_long_l;*.extensin_50_4_long_long_long_long_long_long_long_l;*.extensin_50_5_long_long_long_long_long_long_long_l;*.extensin_50_6_long_long_long_long_long_long_long_l;*.extensin_50_7_long_long_long_long_long_long_long_l;*.extensin_50_8_long_long_long_long_long_long_long_l;*.extensin_50_9_long_long_long_long_long_long_long_l" ); } @@ -85,7 +85,7 @@ TEST(CFileExt, LongFilter) { CFileExt cFileExt; cFileExt.AppendExt( - L"ユーザ設定", + L"ユーザー設定", L"*.extensin_250_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_longX" ); } diff --git a/tests/unittests/test-file.cpp b/tests/unittests/test-file.cpp index 621df499fd..d4ab3c2b7d 100644 --- a/tests/unittests/test-file.cpp +++ b/tests/unittests/test-file.cpp @@ -222,7 +222,7 @@ TEST(file, GetIniFileName_PrivateRoamingAppData) // プロセスのインスタンスを用意する CControlProcess dummy(nullptr, LR"(-PROF="profile1")"); - // マルチユーザ構成設定ファイルのパス + // マルチユーザー構成設定ファイルのパス auto exeIniPath = GetExeFileName().concat(L".ini"); // 設定を書き込む @@ -262,7 +262,7 @@ TEST(file, GetIniFileName_PrivateDesktop) // プロセスのインスタンスを用意する CControlProcess dummy(nullptr, LR"(-PROF="")"); - // マルチユーザ構成設定ファイルのパス + // マルチユーザー構成設定ファイルのパス auto exeIniPath = GetExeFileName().concat(L".ini"); // 設定を書き込む @@ -302,7 +302,7 @@ TEST(file, GetIniFileName_PrivateProfile) // プロセスのインスタンスを用意する CControlProcess dummy(nullptr, LR"(-PROF="")"); - // マルチユーザ構成設定ファイルのパス + // マルチユーザー構成設定ファイルのパス auto exeIniPath = GetExeFileName().concat(L".ini"); // 設定を書き込む @@ -342,7 +342,7 @@ TEST(file, GetIniFileName_PrivateDocument) // プロセスのインスタンスを用意する CControlProcess dummy(nullptr, LR"(-PROF="")"); - // マルチユーザ構成設定ファイルのパス + // マルチユーザー構成設定ファイルのパス auto exeIniPath = GetExeFileName().concat(L".ini"); // 設定を書き込む From a6292292e0f919e74d7e1e85cf35f510f69635c9 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Tue, 3 May 2022 20:17:58 +0900 Subject: [PATCH 0983/1024] =?UTF-8?q?=E3=80=8C=E3=83=95=E3=83=83=E3=83=80?= =?UTF-8?q?=E3=83=BC=E3=80=8D=E3=82=92=E3=80=8C=E3=83=95=E3=83=83=E3=82=BF?= =?UTF-8?q?=E3=83=BC=E3=80=8D=E3=81=AB=E7=BD=AE=E6=8F=9B=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit footerのカタカナ表記が一部「フッダー」になっていたのを修正します。 --- help/sakura/res/HLP000103.html | 4 ++-- help/sakura/res/HLP000284.html | 6 +++--- sakura_core/CGrepAgent.h | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/help/sakura/res/HLP000103.html b/help/sakura/res/HLP000103.html index 20ba9da161..4e5068d0fc 100644 --- a/help/sakura/res/HLP000103.html +++ b/help/sakura/res/HLP000103.html @@ -82,8 +82,8 @@

        外部コマンド実行

            0x04    編集中の内容を子プロセスにリダイレクト
            0x08    標準出力をUnicodeで行う
            0x10    標準入力をUnicodeで行う
        -    0x20    ヘッダー・フッダー情報を出力する (2.0.0.0 以降)
        -    0x40    ヘッダー・フッダー情報を出力しない (2.0.0.0 以降)
        +    0x20    ヘッダー・フッター情報を出力する (2.0.0.0 以降)
        +    0x40    ヘッダー・フッター情報を出力しない (2.0.0.0 以降)
            0x80    標準出力をUTF-8で行う (2.1.0.0 以降)
           0x100    標準入力をUTF-8で行う (2.1.0.0 以降)
           0x200    カレントディレクトリを有効にする (2.1.0.0 以降)
        diff --git a/help/sakura/res/HLP000284.html b/help/sakura/res/HLP000284.html index f11d13cdd2..a658d14e75 100644 --- a/help/sakura/res/HLP000284.html +++ b/help/sakura/res/HLP000284.html @@ -14,7 +14,7 @@

        ExpandParameter

        ExpandParameterの書式

        この特殊記号は以下の各文字列で利用できます。
          -
        • 印刷ページ設定のヘッダー・フッダー
        • +
        • 印刷ページ設定のヘッダー・フッター
        • 外部コマンド実行
        • ウィンドウのタイトルバー文字列 共通設定 『ウィンドウ』プロパティ
        • マクロ専用関数 ExpandParameterの引数
        • @@ -47,8 +47,8 @@

          特殊記号

          $y 現在の論理行位置(1開始)
          $d 現在の日付(共通設定の日付書式)
          $t 現在の時刻(共通設定の時刻書式)
          -$p 現在のページ(印刷のヘッダー・フッダーでのみ利用可能)
          -$P 総ページ(印刷のヘッダー・フッダーでのみ利用可能)
          +$p 現在のページ(印刷のヘッダー・フッターでのみ利用可能)
          +$P 総ページ(印刷のヘッダー・フッターでのみ利用可能)
          $D ファイルのタイムスタンプ(共通設定の日付書式)
          $T ファイルのタイムスタンプ(共通設定の時刻書式)
          $V エディタのバージョン文字列
          diff --git a/sakura_core/CGrepAgent.h b/sakura_core/CGrepAgent.h index f60f6fa818..b52f3b0a34 100644 --- a/sakura_core/CGrepAgent.h +++ b/sakura_core/CGrepAgent.h @@ -39,7 +39,7 @@ struct SGrepOption{ bool bGrepReplace; //!< Grep置換 bool bGrepSubFolder; //!< サブフォルダからも検索する bool bGrepStdout; //!< 標準出力モード - bool bGrepHeader; //!< ヘッダー・フッダー表示 + bool bGrepHeader; //!< ヘッダー・フッター表示 ECodeType nGrepCharSet; //!< 文字コードセット選択 int nGrepOutputLineType; //!< 0:ヒット部分を出力, 1: ヒット行を出力, 2: 否ヒット行を出力 int nGrepOutputStyle; //!< 出力形式 1: Normal, 2: WZ風(ファイル単位) 3: 結果のみ From 349fce697331f5aacf999fc9daa7607566656082 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Thu, 5 May 2022 15:05:01 +0900 Subject: [PATCH 0984/1024] =?UTF-8?q?=E3=80=8C=E3=83=95=E3=82=A9=E3=83=AB?= =?UTF-8?q?=E3=83=80=E3=83=BC=E3=80=8D=E3=81=AE=E8=A1=A8=E8=A8=98=E3=82=92?= =?UTF-8?q?OS=E3=81=A8=E5=90=88=E3=82=8F=E3=81=9B=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit folderのOS表記に合わせて「フォルダー」に変更します。 --- CHANGELOG.md | 24 ++-- addDoxygenFileComment.md | 2 +- addDoxygenFileComment.py | 2 +- ci/build-batchfiles.md | 12 +- ci/build-envvars.md | 12 +- .../reference/clipboard/S_CopyDirPath.html | 2 +- help/macro/source/reference/find/S_Grep.html | 8 +- help/macro/source/sample/SampleGrep.html | 2 +- help/plugin/Text/implementation01.html | 8 +- help/plugin/Text/implementation02.html | 2 +- help/plugin/Text/index.html | 2 +- help/plugin/Text/overview.html | 22 ++-- help/sakura/res/HLP000005.html | 18 +-- help/sakura/res/HLP000010.html | 2 +- help/sakura/res/HLP000015.html | 12 +- help/sakura/res/HLP000016.html | 2 +- help/sakura/res/HLP000021.html | 8 +- help/sakura/res/HLP000023.html | 16 +-- help/sakura/res/HLP000029.html | 2 +- help/sakura/res/HLP000065.html | 2 +- help/sakura/res/HLP000067.html | 42 +++--- help/sakura/res/HLP000074.html | 6 +- help/sakura/res/HLP000075.html | 4 +- help/sakura/res/HLP000077.html | 18 +-- help/sakura/res/HLP000078.html | 14 +- help/sakura/res/HLP000080.html | 24 ++-- help/sakura/res/HLP000081.html | 8 +- help/sakura/res/HLP000082.html | 4 +- help/sakura/res/HLP000083.html | 4 +- help/sakura/res/HLP000084.html | 4 +- help/sakura/res/HLP000085.html | 4 +- help/sakura/res/HLP000086.html | 4 +- help/sakura/res/HLP000087.html | 4 +- help/sakura/res/HLP000088.html | 6 +- help/sakura/res/HLP000103.html | 2 +- help/sakura/res/HLP000107.html | 2 +- help/sakura/res/HLP000109.html | 14 +- help/sakura/res/HLP000110.html | 6 +- help/sakura/res/HLP000125.html | 2 +- help/sakura/res/HLP000130.html | 2 +- help/sakura/res/HLP000144.html | 20 +-- help/sakura/res/HLP000145.html | 30 ++--- help/sakura/res/HLP000146.html | 4 +- help/sakura/res/HLP000147.html | 4 +- help/sakura/res/HLP000148.html | 6 +- help/sakura/res/HLP000150.html | 4 +- help/sakura/res/HLP000151.html | 16 +-- help/sakura/res/HLP000152.html | 4 +- help/sakura/res/HLP000197.html | 6 +- help/sakura/res/HLP000201.html | 16 +-- help/sakura/res/HLP000203.html | 4 +- help/sakura/res/HLP000251.html | 2 +- help/sakura/res/HLP000259.html | 4 +- help/sakura/res/HLP000260.html | 2 +- help/sakura/res/HLP000261.html | 4 +- help/sakura/res/HLP000268.html | 8 +- help/sakura/res/HLP000270.html | 2 +- help/sakura/res/HLP000272.html | 8 +- help/sakura/res/HLP000275.html | 2 +- help/sakura/res/HLP000277.html | 12 +- help/sakura/res/HLP000278.html | 6 +- help/sakura/res/HLP000279.html | 14 +- help/sakura/res/HLP000280.html | 2 +- help/sakura/res/HLP000284.html | 4 +- help/sakura/res/HLP000315.html | 6 +- help/sakura/res/HLP000319.html | 6 +- help/sakura/res/HLP000358.html | 4 +- help/sakura/res/HLP000362.html | 40 +++--- help/sakura/res/HLP000363.html | 14 +- help/sakura/res/HLP000368.html | 18 +-- help/sakura/res/HLP000380.html | 8 +- help/sakura/res/HLP000400.html | 2 +- help/sakura/res/HLP000500.html | 2 +- help/sakura/res/HLP_RELEASE.html | 14 +- help/sakura/res/HLP_UR002.html | 4 +- help/sakura/res/HLP_UR003.html | 4 +- help/sakura/res/HLP_UR004.html | 2 +- help/sakura/res/HLP_UR006.html | 2 +- help/sakura/res/HLP_UR007.html | 2 +- help/sakura/res/HLP_UR008.html | 6 +- help/sakura/res/HLP_UR009.html | 8 +- help/sakura/res/HLP_UR010.html | 6 +- help/sakura/res/HLP_UR011.html | 2 +- help/sakura/res/HLP_UR012.html | 2 +- help/sakura/res/HLP_UR013.html | 4 +- help/sakura/res/HLP_UR014.html | 4 +- help/sakura/res/HLP_UR015.html | 8 +- help/sakura/res/HLP_UR016.html | 20 +-- help/sakura/res/HLP_UR017.html | 6 +- installer/externals/readme.txt | 4 +- installer/sakura-common.iss | 4 +- installer/sinst_src/keyword/HSP.KHP | 2 +- .../sinst_src/keyword/MortScript-readme.txt | 2 +- installer/sinst_src/keyword/MortScript.khp | 2 +- installer/sinst_src/keyword/S_MACPPA.KHP | 2 +- installer/sinst_src/keyword/bat_win2k.khp | 6 +- remove-redundant-blank-lines.py | 2 +- sakura_core/CBackupAgent.cpp | 10 +- sakura_core/CGrepAgent.cpp | 40 +++--- sakura_core/CGrepAgent.h | 10 +- sakura_core/CGrepEnumFileBase.h | 4 +- sakura_core/CGrepEnumKeys.h | 10 +- sakura_core/CLoadAgent.cpp | 4 +- sakura_core/CProfile.cpp | 4 +- sakura_core/CSelectLang.cpp | 4 +- sakura_core/CSortedTagJumpList.cpp | 6 +- sakura_core/Funccode_x.hsrc | 10 +- sakura_core/GrepInfo.h | 8 +- sakura_core/_main/CCommandLine.cpp | 4 +- sakura_core/_main/CControlProcess.cpp | 10 +- sakura_core/_main/CControlTray.cpp | 8 +- sakura_core/_main/CNormalProcess.cpp | 4 +- sakura_core/cmd/CViewCommander.cpp | 4 +- sakura_core/cmd/CViewCommander.h | 4 +- sakura_core/cmd/CViewCommander_Clipboard.cpp | 4 +- sakura_core/cmd/CViewCommander_File.cpp | 6 +- sakura_core/cmd/CViewCommander_Grep.cpp | 2 +- sakura_core/cmd/CViewCommander_Insert.cpp | 2 +- sakura_core/cmd/CViewCommander_Macro.cpp | 14 +- sakura_core/cmd/CViewCommander_TagJump.cpp | 30 ++--- sakura_core/config/maxdata.h | 4 +- sakura_core/config/system_constants.h | 10 +- sakura_core/dlg/CDlgFavorite.cpp | 4 +- sakura_core/dlg/CDlgFavorite.h | 2 +- sakura_core/dlg/CDlgGrep.cpp | 82 ++++++------ sakura_core/dlg/CDlgGrep.h | 12 +- sakura_core/dlg/CDlgGrepReplace.cpp | 24 ++-- sakura_core/dlg/CDlgOpenFile.h | 2 +- .../dlg/CDlgOpenFile_CommonFileDialog.cpp | 14 +- .../dlg/CDlgOpenFile_CommonItemDialog.cpp | 2 +- sakura_core/dlg/CDlgPluginOption.cpp | 2 +- sakura_core/dlg/CDlgTagJumpList.cpp | 6 +- sakura_core/dlg/CDlgTagsMake.cpp | 12 +- sakura_core/dlg/CDlgTagsMake.h | 2 +- sakura_core/doc/CDocFileOperation.cpp | 12 +- sakura_core/doc/CDocFileOperation.h | 2 +- sakura_core/env/CFileNameManager.cpp | 8 +- sakura_core/env/CSakuraEnvironment.cpp | 12 +- sakura_core/env/CShareData.cpp | 34 ++--- sakura_core/env/CShareData_IO.cpp | 10 +- sakura_core/env/CommonSetting.h | 34 ++--- sakura_core/func/CKeyBind.cpp | 2 +- sakura_core/func/Funccode.cpp | 8 +- sakura_core/io/CZipFile.cpp | 2 +- sakura_core/io/CZipFile.h | 2 +- sakura_core/macro/CMacro.cpp | 14 +- sakura_core/macro/CSMacroMgr.cpp | 10 +- sakura_core/macro/CWSH.cpp | 2 +- sakura_core/outline/CDlgFuncList.cpp | 8 +- sakura_core/plugin/CPlugin.cpp | 2 +- sakura_core/plugin/CPlugin.h | 6 +- sakura_core/plugin/CPluginIfObj.h | 6 +- sakura_core/plugin/CPluginManager.cpp | 30 ++--- sakura_core/plugin/CPluginManager.h | 6 +- sakura_core/prop/CPropComBackup.cpp | 40 +++--- sakura_core/prop/CPropComEdit.cpp | 12 +- sakura_core/prop/CPropComGeneral.cpp | 12 +- sakura_core/prop/CPropComHelper.cpp | 2 +- sakura_core/prop/CPropComMacro.cpp | 8 +- sakura_core/prop/CPropComPlugin.cpp | 14 +- sakura_core/recent/CMRUFile.cpp | 4 +- sakura_core/recent/CMRUFolder.cpp | 8 +- sakura_core/recent/CMRUFolder.h | 4 +- sakura_core/recent/CRecentExceptMru.h | 2 +- sakura_core/recent/CRecentExcludeFolder.h | 2 +- sakura_core/recent/CRecentFolder.h | 2 +- sakura_core/recent/CRecentGrepFolder.h | 2 +- sakura_core/sakura.hh | 60 ++++----- sakura_core/sakura_rc.rc | 120 +++++++++--------- sakura_core/typeprop/CImpExpManager.cpp | 4 +- sakura_core/typeprop/CImpExpManager.h | 2 +- sakura_core/uiparts/CMenuDrawer.cpp | 4 +- sakura_core/util/file.cpp | 28 ++-- sakura_core/util/file.h | 8 +- sakura_core/util/module.cpp | 2 +- sakura_core/util/shell.cpp | 22 ++-- sakura_core/util/shell.h | 4 +- sakura_core/view/CEditView_Diff.cpp | 2 +- sakura_core/window/CEditWnd.cpp | 12 +- sakura_core/window/CTabWnd.cpp | 2 +- tests/unittest.md | 8 +- tests/unittests/test-cdlgprofilemgr.cpp | 8 +- tests/unittests/test-cprofile.cpp | 4 +- tests/unittests/test-czipfile.cpp | 4 +- tests/unittests/test-file.cpp | 10 +- tests/unittests/test-winmain.cpp | 2 +- tools/macro/CopyDirPath/CopyDirPath.js | 4 +- tools/macro/CopyDirPath/CopyDirPath.mac | 4 +- tools/macro/CopyDirPath/CopyDirPath.vbs | 4 +- tools/macro/macro.md | 6 +- tools/zip/readme.md | 4 +- vcx-props/project-PlatformToolset.md | 2 +- 192 files changed, 884 insertions(+), 884 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 181920b4ba..b3014eb5ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -92,7 +92,7 @@ ### その他変更 - バージョン情報に表示するプロジェクトURLに付けるラベルキャプションを短くする [\#1215](https://github.com/sakura-editor/sakura/pull/1215) ([berryzplus](https://github.com/berryzplus)) -- 除外ファイル・除外フォルダの指定をGrep置換でも使えるようにする [\#1210](https://github.com/sakura-editor/sakura/pull/1210) ([berryzplus](https://github.com/berryzplus)) +- 除外ファイル・除外フォルダーの指定をGrep置換でも使えるようにする [\#1210](https://github.com/sakura-editor/sakura/pull/1210) ([berryzplus](https://github.com/berryzplus)) - キーワードを指定してタグジャンプができないバグを修正 [\#1208](https://github.com/sakura-editor/sakura/pull/1208) ([7-rate](https://github.com/7-rate)) - マクロMakeStringBufferW0を廃止する [\#1203](https://github.com/sakura-editor/sakura/pull/1203) ([berryzplus](https://github.com/berryzplus)) - ヘルプのコピーライトの年とソフト名変更。 [\#1202](https://github.com/sakura-editor/sakura/pull/1202) ([KENCHjp](https://github.com/KENCHjp)) @@ -173,7 +173,7 @@ ### 機能追加 -- 最近使ったファイル挿入 と 最近使ったフォルダ挿入 を行う機能追加 [\#1063](https://github.com/sakura-editor/sakura/pull/1063) ([beru](https://github.com/beru)) +- 最近使ったファイル挿入 と 最近使ったフォルダー挿入 を行う機能追加 [\#1063](https://github.com/sakura-editor/sakura/pull/1063) ([beru](https://github.com/beru)) - PlatformToolset 指定をプロパティーシートに分離して VS2017 および VS2019 で両対応できるようにする [\#866](https://github.com/sakura-editor/sakura/pull/866) ([m-tmatma](https://github.com/m-tmatma)) - 「同名のC/C++ヘッダー\(ソース\)を開く」機能が利用可能か調べる処理で拡張子の確認が行われるように記述追加 [\#812](https://github.com/sakura-editor/sakura/pull/812) ([beru](https://github.com/beru)) @@ -252,7 +252,7 @@ ### 機能追加 - Window テキストをCNativeT で取得/設定するユーティリティ関数を追加 [\#776](https://github.com/sakura-editor/sakura/pull/776) ([m-tmatma](https://github.com/m-tmatma)) -- 開いているファイルのフォルダのパスをクリップボードにコピーできるようにする [\#718](https://github.com/sakura-editor/sakura/pull/718) ([m-tmatma](https://github.com/m-tmatma)) +- 開いているファイルのフォルダーのパスをクリップボードにコピーできるようにする [\#718](https://github.com/sakura-editor/sakura/pull/718) ([m-tmatma](https://github.com/m-tmatma)) - Vistaスタイルのファイルダイアログを使えるようにする [\#716](https://github.com/sakura-editor/sakura/pull/716) ([beru](https://github.com/beru)) - 背景画像表示の不透明度を設定出来るように変更 [\#704](https://github.com/sakura-editor/sakura/pull/704) ([ds14050](https://github.com/ds14050)) - Windows Imaging Component を使って背景画像を読み込み、透過描画対応 [\#683](https://github.com/sakura-editor/sakura/pull/683) ([beru](https://github.com/beru)) @@ -268,7 +268,7 @@ - ツールバーを非表示から表示に切り替える際にアイコンの状態を設定する処理を呼び出し [\#464](https://github.com/sakura-editor/sakura/pull/464) ([beru](https://github.com/beru)) - メールアドレスの色替え判定を高速化すると同時にRFCに準拠させる [\#421](https://github.com/sakura-editor/sakura/pull/421) ([berryzplus](https://github.com/berryzplus)) - 『SAKURAで Grep』をエクスプローラに追加する [\#411](https://github.com/sakura-editor/sakura/pull/411) ([m-tmatma](https://github.com/m-tmatma)) -- grep/grep 置換で除外ファイル、除外フォルダを指定できるようにする [\#403](https://github.com/sakura-editor/sakura/pull/403) ([m-tmatma](https://github.com/m-tmatma)) +- grep/grep 置換で除外ファイル、除外フォルダーを指定できるようにする [\#403](https://github.com/sakura-editor/sakura/pull/403) ([m-tmatma](https://github.com/m-tmatma)) - 環境変数 SKIP\_CREATE\_GITHASH が 1 にセットしている場合、githash.h の生成をスキップする [\#319](https://github.com/sakura-editor/sakura/pull/319) ([m-tmatma](https://github.com/m-tmatma)) - res ファイルのハッシュを計算するスクリプト [\#317](https://github.com/sakura-editor/sakura/pull/317) ([m-tmatma](https://github.com/m-tmatma)) - python のアウトライン解析を実装 [\#314](https://github.com/sakura-editor/sakura/pull/314) ([m-tmatma](https://github.com/m-tmatma)) @@ -277,8 +277,8 @@ ### バグ修正 -- grep で 除外ファイル、除外フォルダが効かない のを修正 [\#758](https://github.com/sakura-editor/sakura/pull/758) ([m-tmatma](https://github.com/m-tmatma)) -- grep で 除外ファイル、除外フォルダが効かない問題を修正するため、除外パターンを指定するコマンドラインを復活する [\#750](https://github.com/sakura-editor/sakura/pull/750) ([m-tmatma](https://github.com/m-tmatma)) +- grep で 除外ファイル、除外フォルダーが効かない のを修正 [\#758](https://github.com/sakura-editor/sakura/pull/758) ([m-tmatma](https://github.com/m-tmatma)) +- grep で 除外ファイル、除外フォルダーが効かない問題を修正するため、除外パターンを指定するコマンドラインを復活する [\#750](https://github.com/sakura-editor/sakura/pull/750) ([m-tmatma](https://github.com/m-tmatma)) - ウィンドウ一覧画面を開いた後にウィンドウサイズを大きくしてから閉じて開き直すとウィンドウサイズにコントロールが追従していない問題を修正 [\#726](https://github.com/sakura-editor/sakura/pull/726) ([beru](https://github.com/beru)) - マウスクリックによるキャレット移動が出来なくなる不具合の解消 [\#574](https://github.com/sakura-editor/sakura/pull/574) ([beru](https://github.com/beru)) - Fix \#539 「Texのファイルで落ちます。」 [\#553](https://github.com/sakura-editor/sakura/pull/553) ([ds14050](https://github.com/ds14050)) @@ -313,7 +313,7 @@ - Copyright を 2019 にする [\#761](https://github.com/sakura-editor/sakura/pull/761) ([m-tmatma](https://github.com/m-tmatma)) - issue template を追加する [\#757](https://github.com/sakura-editor/sakura/pull/757) ([m-tmatma](https://github.com/m-tmatma)) - プラグインを列挙して呼び出す同じような記述があちらこちらにあったので、CJackManager::InvokePlugins を追加して使用 [\#755](https://github.com/sakura-editor/sakura/pull/755) ([beru](https://github.com/beru)) -- Revert "grep で 除外ファイル、除外フォルダが効かない問題を修正するため、除外パターンを指定するコマンドラインを復活する" [\#753](https://github.com/sakura-editor/sakura/pull/753) ([m-tmatma](https://github.com/m-tmatma)) +- Revert "grep で 除外ファイル、除外フォルダーが効かない問題を修正するため、除外パターンを指定するコマンドラインを復活する" [\#753](https://github.com/sakura-editor/sakura/pull/753) ([m-tmatma](https://github.com/m-tmatma)) - 新規インストール時に言語設定に英語を適用する処理方法の変更 [\#749](https://github.com/sakura-editor/sakura/pull/749) ([beru](https://github.com/beru)) - doxygen と cppcheck のインストールを install セクションで行う [\#742](https://github.com/sakura-editor/sakura/pull/742) ([m-tmatma](https://github.com/m-tmatma)) - 開いているファイル名をクリップボードにコピーする機能をデフォルトでメニューに追加する [\#741](https://github.com/sakura-editor/sakura/pull/741) ([m-tmatma](https://github.com/m-tmatma)) @@ -340,7 +340,7 @@ - 辞書Tipの描画改善、およびHighDPI対応 [\#647](https://github.com/sakura-editor/sakura/pull/647) ([berryzplus](https://github.com/berryzplus)) - フォントラベルのHighDPI対応 [\#645](https://github.com/sakura-editor/sakura/pull/645) ([berryzplus](https://github.com/berryzplus)) - 分割線ウィンドウクラスの処理で使用している各数値をDPI設定に応じて調整 [\#641](https://github.com/sakura-editor/sakura/pull/641) ([beru](https://github.com/beru)) -- 独自拡張プロパティシートの「設定フォルダ」ボタンの位置調整処理でDPIを考慮 [\#638](https://github.com/sakura-editor/sakura/pull/638) ([beru](https://github.com/beru)) +- 独自拡張プロパティシートの「設定フォルダー」ボタンの位置調整処理でDPIを考慮 [\#638](https://github.com/sakura-editor/sakura/pull/638) ([beru](https://github.com/beru)) - `ファイルの場所を コマンドプロンプトを開く` で 管理者ではないときに 32bit アプリから 64bit OS上で起動したときに 32bit で起動してしまうのを修正 [\#627](https://github.com/sakura-editor/sakura/pull/627) ([m-tmatma](https://github.com/m-tmatma)) - 設定データ読み込み処理において言語設定切り替え後にMRUエントリが無い場合は新規インストール後とみなし false を返すように変更 [\#620](https://github.com/sakura-editor/sakura/pull/620) ([beru](https://github.com/beru)) - reST 用の拡張子 \(.rst\) を関連付け用の設定に追加 [\#612](https://github.com/sakura-editor/sakura/pull/612) ([m-tmatma](https://github.com/m-tmatma)) @@ -373,7 +373,7 @@ - LICENSEファイルを追加する [\#470](https://github.com/sakura-editor/sakura/pull/470) ([berryzplus](https://github.com/berryzplus)) - IME編集エリアの位置変更を行う ImmSetCompositionWindow の呼び出しは IMEが開いている時だけに限定 [\#460](https://github.com/sakura-editor/sakura/pull/460) ([beru](https://github.com/beru)) - ツールバーの状態更新を必要な場合にのみ行うように変更 [\#456](https://github.com/sakura-editor/sakura/pull/456) ([beru](https://github.com/beru)) -- bregonig のライセンスファイルをライセンス用のサブフォルダに配置する [\#455](https://github.com/sakura-editor/sakura/pull/455) ([m-tmatma](https://github.com/m-tmatma)) +- bregonig のライセンスファイルをライセンス用のサブフォルダーに配置する [\#455](https://github.com/sakura-editor/sakura/pull/455) ([m-tmatma](https://github.com/m-tmatma)) - SetScrollInfo の呼び出しを抑制 [\#453](https://github.com/sakura-editor/sakura/pull/453) ([beru](https://github.com/beru)) - ステータスバーのテキスト設定、既に同じ値が設定されている場合は再設定しないようにする [\#452](https://github.com/sakura-editor/sakura/pull/452) ([beru](https://github.com/beru)) - タイプ別設定のカラーで強調キーワードの共通設定を押すと表示されるダイアログの高さ調整、DPIスケーリング [\#443](https://github.com/sakura-editor/sakura/pull/443) ([beru](https://github.com/beru)) @@ -396,7 +396,7 @@ - deleteのオーバーロードがGCCに怒られる対応 [\#386](https://github.com/sakura-editor/sakura/pull/386) ([berryzplus](https://github.com/berryzplus)) - HTML Help 中のリンクを GitHub のものに変える [\#383](https://github.com/sakura-editor/sakura/pull/383) ([m-tmatma](https://github.com/m-tmatma)) - githash.batも exit /b 0 にする [\#374](https://github.com/sakura-editor/sakura/pull/374) ([berryzplus](https://github.com/berryzplus)) -- MinGW向けMakefileからbtoolフォルダへの参照を取り除く [\#371](https://github.com/sakura-editor/sakura/pull/371) ([berryzplus](https://github.com/berryzplus)) +- MinGW向けMakefileからbtoolフォルダーへの参照を取り除く [\#371](https://github.com/sakura-editor/sakura/pull/371) ([berryzplus](https://github.com/berryzplus)) - sakura\_lang\_en\_US.dll の MinGW 向け Makefile を更新する [\#369](https://github.com/sakura-editor/sakura/pull/369) ([berryzplus](https://github.com/berryzplus)) - HTML Help Workshop がVS2017で導入される条件 [\#366](https://github.com/sakura-editor/sakura/pull/366) ([KENCHjp](https://github.com/KENCHjp)) - MINGW\_HAS\_SECURE\_APIが無効か判定する式の修正 [\#363](https://github.com/sakura-editor/sakura/pull/363) ([berryzplus](https://github.com/berryzplus)) @@ -405,7 +405,7 @@ - githash.bat のエラー耐性を上げる [\#360](https://github.com/sakura-editor/sakura/pull/360) ([m-tmatma](https://github.com/m-tmatma)) - インストーラの UI を英語対応にする [\#359](https://github.com/sakura-editor/sakura/pull/359) ([m-tmatma](https://github.com/m-tmatma)) - MinGWでサクラエディタをビルドできるようにメイクファイルを更新する [\#351](https://github.com/sakura-editor/sakura/pull/351) ([berryzplus](https://github.com/berryzplus)) -- インストーラ関連のフォルダを無視ファイルに追加 [\#343](https://github.com/sakura-editor/sakura/pull/343) ([m-tmatma](https://github.com/m-tmatma)) +- インストーラ関連のフォルダーを無視ファイルに追加 [\#343](https://github.com/sakura-editor/sakura/pull/343) ([m-tmatma](https://github.com/m-tmatma)) - バッチファイルのコピーで /Y と /B をつける [\#342](https://github.com/sakura-editor/sakura/pull/342) ([m-tmatma](https://github.com/m-tmatma)) - ビルドに関するドキュメントを更新、SKIP\_CREATE\_GITHASH に関する説明を移動 [\#341](https://github.com/sakura-editor/sakura/pull/341) ([m-tmatma](https://github.com/m-tmatma)) - keyword ディレクトリ以下のファイルの説明を追加 [\#340](https://github.com/sakura-editor/sakura/pull/340) ([m-tmatma](https://github.com/m-tmatma)) @@ -413,7 +413,7 @@ - インストーラ用のドキュメントを更新 [\#337](https://github.com/sakura-editor/sakura/pull/337) ([m-tmatma](https://github.com/m-tmatma)) - postBuild.bat の処理内容を更新 [\#336](https://github.com/sakura-editor/sakura/pull/336) ([m-tmatma](https://github.com/m-tmatma)) - bregonig.dll のファイル内容とタイムスタンプを比較する [\#335](https://github.com/sakura-editor/sakura/pull/335) ([m-tmatma](https://github.com/m-tmatma)) -- インストーラの生成先のフォルダにプラットフォーム名を含める [\#333](https://github.com/sakura-editor/sakura/pull/333) ([m-tmatma](https://github.com/m-tmatma)) +- インストーラの生成先のフォルダーにプラットフォーム名を含める [\#333](https://github.com/sakura-editor/sakura/pull/333) ([m-tmatma](https://github.com/m-tmatma)) - \#329 によるデグレを修正 \(bron412.zip の bregonig.dll が使われなくなる\) [\#332](https://github.com/sakura-editor/sakura/pull/332) ([m-tmatma](https://github.com/m-tmatma)) - 大きすぎるファイル \(2GBくらいを超えるもの\) を読み込もうとしたときに正しくエラーメッセージを出す [\#330](https://github.com/sakura-editor/sakura/pull/330) ([kobake](https://github.com/kobake)) - bregonig.dll を sakura.exe と同じ場所に自動配置 [\#329](https://github.com/sakura-editor/sakura/pull/329) ([kobake](https://github.com/kobake)) diff --git a/addDoxygenFileComment.md b/addDoxygenFileComment.md index 011dc91308..b7de87689c 100644 --- a/addDoxygenFileComment.md +++ b/addDoxygenFileComment.md @@ -16,5 +16,5 @@ doxygen は解析対象かどうかを `@file` コメントの有無で認識し ## ファイル構成 -- `addDoxygenFileComment.py` : スクリプト本体。第一引数で指定したフォルダ以下のソースに対して `@file` コメントがなければ先頭行に付与します。 +- `addDoxygenFileComment.py` : スクリプト本体。第一引数で指定したフォルダー以下のソースに対して `@file` コメントがなければ先頭行に付与します。 - `addDoxygenFileComment.bat` : `sakura_core` の引数を渡して `addDoxygenFileComment.py` を実行します。 diff --git a/addDoxygenFileComment.py b/addDoxygenFileComment.py index c825d6e4bf..4f446b8402 100644 --- a/addDoxygenFileComment.py +++ b/addDoxygenFileComment.py @@ -15,7 +15,7 @@ def checkExtension(fileName): base, ext = os.path.splitext(fileName) return (ext in extensions) -# 引数で指定したフォルダ以下のすべての対象ファイルを yield で返す +# 引数で指定したフォルダー以下のすべての対象ファイルを yield で返す def checkAll(topDir): for rootdir, dirs, files in os.walk(topDir): for fileName in files: diff --git a/ci/build-batchfiles.md b/ci/build-batchfiles.md index 3ea58479bc..d2591c04f3 100644 --- a/ci/build-batchfiles.md +++ b/ci/build-batchfiles.md @@ -96,13 +96,13 @@ SonarQube に関しては [こちら](../SonarQube.md) も参照してくださ |build-all.bat | platform ("Win32" または "x64" または "MinGW") | configuration ("Debug" または "Release") | |build-sln.bat | platform ("Win32" または "x64") | configuration ("Debug" または "Release") | |build-gnu.bat | platform ("MinGW") | configuration ("Debug" または "Release") | -|sakura\preBuild.bat | HeaderMake.exe の実行ファイルのフォルダパス | なし | +|sakura\preBuild.bat | HeaderMake.exe の実行ファイルのフォルダーパス | なし | |sakura\postBuild.bat| platform ("Win32" または "x64") | configuration ("Debug" または "Release") | |parse-buildlog.bat | msbuild のビルドログパス | なし | |build-chm.bat | なし | なし | |build-installer.bat | platform ("Win32" または "x64") | configuration ("Debug" または "Release") | |zipArtifacts.bat | platform ("Win32" または "x64") | configuration ("Debug" または "Release") | -|calc-hash.bat | sha256 のハッシュ値の出力先ファイル | ハッシュ値を計算するフォルダパス | +|calc-hash.bat | sha256 のハッシュ値の出力先ファイル | ハッシュ値を計算するフォルダーパス | ## バッチファイルの仕組み @@ -123,9 +123,9 @@ SonarQube に関しては [こちら](../SonarQube.md) も参照してくださ #### 処理の流れ -* if 文の条件判定を元に、成果物のファイル名、フォルダ名を構築して環境変数に設定する +* if 文の条件判定を元に、成果物のファイル名、フォルダー名を構築して環境変数に設定する - 設定される環境変数については [こちら](build-envvars.md#zipartifactsbat-で設定する環境変数) を参照してください。 -* 作業用フォルダに必要なファイルをコピーする -* [calc-hash.bat](../calc-hash.bat) で sha256 のハッシュを計算して、作業用フォルダにコピーする -* [tools\zip\zip.bat](../tools/zip/zip.bat) を使用して作業用フォルダの中身を zip ファイルにまとめる +* 作業用フォルダーに必要なファイルをコピーする +* [calc-hash.bat](../calc-hash.bat) で sha256 のハッシュを計算して、作業用フォルダーにコピーする +* [tools\zip\zip.bat](../tools/zip/zip.bat) を使用して作業用フォルダーの中身を zip ファイルにまとめる - [7-Zip](https://sevenzip.osdn.jp/) が利用できる場合は 7z.exe を、利用できない場合は PowerShell を利用してファイルを作成します。 diff --git a/ci/build-envvars.md b/ci/build-envvars.md index 20d85b0239..82033c2244 100644 --- a/ci/build-envvars.md +++ b/ci/build-envvars.md @@ -94,12 +94,12 @@ APPVEYOR_REPO_TAG_NAME は利用をやめて 代わりに GIT_TAG_NAME を使う | SHORTHASH | commit hash の先頭8文字 | 実体は GIT_SHORT_COMMIT_HASH | | RELEASE_PHASE | "alpha" または 空 | x64 ビルドの場合のみ有効 | | BASENAME | 成果物の zip ファイル名(拡張子含まない部分) | 常に有効 | -| WORKDIR | 作業用フォルダ | 常に有効 | -| WORKDIR_LOG | ログファイル用の作業用フォルダ | 常に有効 | -| WORKDIR_EXE | 実行ファイル(一般向け)用の作業用フォルダ | 常に有効 | -| WORKDIR_DEV | 開発者向け成果物用の作業用フォルダ | 常に有効 | -| WORKDIR_INST | インストーラ用の作業用フォルダ | 常に有効 | -| WORKDIR_ASM | アセンブラ出力用の作業用フォルダ | 常に有効 | +| WORKDIR | 作業用フォルダー | 常に有効 | +| WORKDIR_LOG | ログファイル用の作業用フォルダー | 常に有効 | +| WORKDIR_EXE | 実行ファイル(一般向け)用の作業用フォルダー | 常に有効 | +| WORKDIR_DEV | 開発者向け成果物用の作業用フォルダー | 常に有効 | +| WORKDIR_INST | インストーラ用の作業用フォルダー | 常に有効 | +| WORKDIR_ASM | アセンブラ出力用の作業用フォルダー | 常に有効 | | OUTFILE | 成果物の zip ファイル名 | 常に有効 | | OUTFILE_LOG | ログファイルの成果物の zip ファイル名 | 常に有効 | | OUTFILE_EXE | 実行ファイル(一般向け)の成果物の zip ファイル名 | 常に有効 | diff --git a/help/macro/source/reference/clipboard/S_CopyDirPath.html b/help/macro/source/reference/clipboard/S_CopyDirPath.html index d1f9dd047d..0a257bb819 100644 --- a/help/macro/source/reference/clipboard/S_CopyDirPath.html +++ b/help/macro/source/reference/clipboard/S_CopyDirPath.html @@ -11,7 +11,7 @@

          S_CopyFolder

          機能
          -
          このファイルのフォルダ名をコピー
          +
          このファイルのフォルダー名をコピー
          構文
          void S_CopyFolder ( )
          diff --git a/help/macro/source/reference/find/S_Grep.html b/help/macro/source/reference/find/S_Grep.html index bc6977d8b6..dc9099f2c0 100644 --- a/help/macro/source/reference/find/S_Grep.html +++ b/help/macro/source/reference/find/S_Grep.html @@ -20,7 +20,7 @@

          S_Grep

      - +
      引数内容
      S1文字列検索文字列
      S2文字列検索対象ファイル
      S3文字列検索対象フォルダ
      S3文字列検索対象フォルダー
      i1整数数値Grep ダイアログの状態を10進数数値で指定する。
      i2整数数値文字コードセット
      @@ -31,7 +31,7 @@

      S_Grep

      - + @@ -41,8 +41,8 @@

      S_Grep

      - - + +
      無題
      bit内容
      0サブフォルダからも検索する
      0サブフォルダーからも検索する
      1- No Use -
      2英大文字と小文字を区別する
      3正規表現
      15~8文字コードセット
      16単語単位で探す(sakura:2.1.0.0以降)
      17ファイル毎最初のみ検索(sakura:2.1.0.0以降)
      18ベースフォルダ表示(sakura:2.1.0.0以降)
      19フォルダ毎に表示(sakura:2.1.0.0以降)
      18ベースフォルダー表示(sakura:2.1.0.0以降)
      19フォルダー毎に表示(sakura:2.1.0.0以降)
      文字コードセット
      diff --git a/help/macro/source/sample/SampleGrep.html b/help/macro/source/sample/SampleGrep.html index 6ded8168f5..9d5052606a 100644 --- a/help/macro/source/sample/SampleGrep.html +++ b/help/macro/source/sample/SampleGrep.html @@ -19,7 +19,7 @@

      S_Grepの使用例

      sPath = ExpandParameter(Cstr("$F")) sDir = Left(CStr(sPath), Len(sPath) - Len(sFile) - 1) -' サブフォルダから検索しない +' サブフォルダーから検索しない ' 大文字小文字を区別する ' 正規表現無効 ' 文字コードセット自動 diff --git a/help/plugin/Text/implementation01.html b/help/plugin/Text/implementation01.html index c511d9c021..7c3944fd4b 100644 --- a/help/plugin/Text/implementation01.html +++ b/help/plugin/Text/implementation01.html @@ -106,7 +106,7 @@

      プラグイン定義ファイル(plugin.def)

      ■WSHプラグイン固有
      Plug, Command セクションでのハンドラにはスクリプトファイル名を指定する。
      - 例)パスは個別フォルダ起点の相対パスとする。
      + 例)パスは個別フォルダー起点の相対パスとする。
        Outline=outline.js @@ -125,7 +125,7 @@

      プラグイン定義ファイル(plugin.def)

      無題
      NameDLLファイル名

      - ■localサブフォルダ内のplugin_<言語名>.def (sakura:2.1.1.0 以降)
      + ■localサブフォルダー内のplugin_<言語名>.def (sakura:2.1.1.0 以降)
      ・デフォルト言語は、「ja_JP」(local\plugin_ja_JP.def)です。
      各定義を言語ごとに上書きすることができます。
      @@ -140,7 +140,7 @@

      プラグイン定義ファイル(plugin.def)

      ReadMeファイル(readme.txt等)

      -ファイル名は ReadMe.txt または 個別フォルダ名.txt とする。
      +ファイル名は ReadMe.txt または 個別フォルダー名.txt とする。
      プラグインに関する情報を記述する。
      必須ではありません。
      エディタの「共通設定」「プラグイン」で該当プラグインを選択し、[ReadMe]でこのファイルを表示する。
      @@ -148,7 +148,7 @@

      ReadMeファイル(readme.txt等)

      ZIPプラグイン(XP以降)

      -プラグイン開発後、plugins配下の個別フォルダを「圧縮(ZIP形式)フォルダー」へ「送る」を実行で配布形式が出来る(XP以降)。
      +プラグイン開発後、plugins配下の個別フォルダーを「圧縮(ZIP形式)フォルダー」へ「送る」を実行で配布形式が出来る(XP以降)。
      拡張子はzipとする。
      WindowsXP以降ではZIPファイルから導入できる。
      diff --git a/help/plugin/Text/implementation02.html b/help/plugin/Text/implementation02.html index 9e668f46f4..f3ddc3fb3d 100644 --- a/help/plugin/Text/implementation02.html +++ b/help/plugin/Text/implementation02.html @@ -34,7 +34,7 @@

      Plugin ・・・ プラグインの共通機能を提供する - + diff --git a/help/plugin/Text/index.html b/help/plugin/Text/index.html index fb554bbf0f..fe3f259f59 100644 --- a/help/plugin/Text/index.html +++ b/help/plugin/Text/index.html @@ -35,7 +35,7 @@

      プラグイン仕様

      diff --git a/help/plugin/Text/overview.html b/help/plugin/Text/overview.html index d4951e211d..151293aca8 100644 --- a/help/plugin/Text/overview.html +++ b/help/plugin/Text/overview.html @@ -33,21 +33,21 @@

      インストール

      これでインストールは完了ですが、まだプラグインは利用できません。 これ以降に新しく開いたエディタでは起動時にプラグインが読み込まれ、利用可能になります。

      -hintWindows2000はZIPプラグインに未対応のため、ダウンロードしたファイルをプラグインフォルダ配下に解凍し、「新規プラグインを追加」からインストールしてください。
      +hintWindows2000はZIPプラグインに未対応のため、ダウンロードしたファイルをプラグインフォルダー配下に解凍し、「新規プラグインを追加」からインストールしてください。

      プラグインは最大40個までインストールできます。

      -プラグインをインストールすると、設定ファイルがあるフォルダの下にpluginsフォルダができ、その配下にZIPファイルの中身が展開されます。 +プラグインをインストールすると、設定ファイルがあるフォルダーの下にpluginsフォルダーができ、その配下にZIPファイルの中身が展開されます。 ユーザー別設定が有効な場合はC:\Users\(ユーザー名)\AppData\Roaming\sakura\plugins、そうでなければC:\Program Files(x86)\sakura\pluginsにあるはずです。
      -以下、pluginsをプラグインフォルダと呼び、その下のプラグインごとのフォルダを個別フォルダと呼びます。
      +以下、pluginsをプラグインフォルダーと呼び、その下のプラグインごとのフォルダーを個別フォルダーと呼びます。

      アンインストール

      プラグインのアンインストールは、設定画面から「削除」を行います。 -ディスク上には残るので、完全に削除する場合は手動で個別フォルダを削除してください。 +ディスク上には残るので、完全に削除する場合は手動で個別フォルダーを削除してください。 ディスクから削除していなければ、「新規プラグインの追加」で再度インストールできます。

      @@ -56,18 +56,18 @@

      バージョンアップ

      プラグインの新バージョンが出た場合は、設定画面からZIPプラグインの導入でファイルを指定し更新し、エディタ本体を再起動すると利用可能になります。

      -hintWindows2000の場合は、個別フォルダの内容を上書きして更新してください。 +hintWindows2000の場合は、個別フォルダーの内容を上書きして更新してください。

      大まかな動き

      ・エディタプロセスの起動時に、共通情報のプラグインテーブルを参照し、インストール済みのプラグインに対して以下の読み込み操作を行う。
      - 個別フォルダ内にはプラグインの情報を記述したテキストファイル(plugin.def)があり、エディタはまずこのテキストファイルを読み込む。
      + 個別フォルダー内にはプラグインの情報を記述したテキストファイル(plugin.def)があり、エディタはまずこのテキストファイルを読み込む。
       以下、このファイルをプラグイン定義ファイルと呼ぶ。

      - また、プラグインフォルダ直下に、プラグインごとのテキストファイルを置き、そこにプラグインのオプションなど可変の情報を記述する。
      + また、プラグインフォルダー直下に、プラグインごとのテキストファイルを置き、そこにプラグインのオプションなど可変の情報を記述する。
       以下、このファイルをオプションファイルと呼ぶ。
      - ファイル名は "個別フォルダ名.ini" とする。
      + ファイル名は "個別フォルダー名.ini" とする。
       プラグイン定義ファイルのOptionセクションで指定した項目は、共通設定のプラグイン個別設定から値を編集できる。

      ・プラグイン定義ファイルの内容に従い、メモリ上にプラグインオブジェクトを作成する。
      @@ -83,15 +83,15 @@

      大まかな動き

       (現時点でDLLプラグインはまだ使い物にならない)

      -

      フォルダ構成

      +

      フォルダー構成

      -設定ファイルフォルダ
      +設定ファイルフォルダー
         ├ sakura.ini
         └ plugins/
             ├ ○○.ini           // オプションファイル
             ├ ××.ini
      -      ├ ○○/              // 個別フォルダ
      +      ├ ○○/              // 個別フォルダー
             │  ├ plugin.def     // プラグイン定義ファイル
             │  ├ readme.txt     // 説明
             │  ├ ○○_A.js      // プログラム等
      diff --git a/help/sakura/res/HLP000005.html b/help/sakura/res/HLP000005.html
      index 63679eda63..2986cbee6f 100644
      --- a/help/sakura/res/HLP000005.html
      +++ b/help/sakura/res/HLP000005.html
      @@ -18,7 +18,7 @@ 

      単体配布版インストール

      解凍方法についてはここでは説明しません。
      1. 以前のバージョンのサクラエディタがインストールされている場合、実行中のサクラエディタを(常駐も含めて)すべて終了させます。
      2. -
      3. 任意のフォルダを作成し、そのフォルダに配布ファイルsakura_xxxx-xx-xx.zip を解凍します。更新の場合は通常、上書きで構いません。
      4. +
      5. 任意のフォルダーを作成し、そのフォルダーに配布ファイルsakura_xxxx-xx-xx.zip を解凍します。更新の場合は通常、上書きで構いません。
      6. Windows 2000以降で、ユーザー別設定にしたい場合は、sakura.exe.ini (sakura.iniとは別のファイル)を設置します。
         *Vista以降でVirtual Storeを無効にする場合はユーザー別設定が必須です。
      7. Windows XP以降でVisualStyleを有効にする場合はsakura.exe.manifest を設置します。また、Vista以降でVirtual Storeを無効にする場合にも sakura.exe.manifest が必要になります。
      8. @@ -28,7 +28,7 @@

        単体配布版インストール

        note注意
        Vista以降のUACに対応していないバージョン(1.5.17.0以前)からバージョンアップする場合は、manifestを置くことでVirtual Storeが無効化されるため、これまで使っていた設定が引き継がれません。 必要に応じてsakura.ini を適切な位置へ移動するなどの対応をお願いします。 -詳しくはVirtual Storeユーザー別設定および設定フォルダを参照。
        +詳しくはVirtual Storeユーザー別設定および設定フォルダーを参照。

        @@ -44,7 +44,7 @@

        パッケージ版インストール

        note注意
        新バージョンに更新したことによってそれまで使えていた機能が動作しなくなる場合があります。
        旧バージョンの実行ファイルsakura.exe と設定ファイルsakura.ini をバックアップしておくことをお勧めします。
        -この場合sakura.exe を単に別フォルダに移動しただけでは、ショートカットがリンク先を自動変更して旧バージョンを起動してしまうことがあるのでファイル名を変更したほうがいいでしょう。
        +この場合sakura.exe を単に別フォルダーに移動しただけでは、ショートカットがリンク先を自動変更して旧バージョンを起動してしまうことがあるのでファイル名を変更したほうがいいでしょう。

        note注意
        @@ -56,8 +56,8 @@

        アンインストール

        単体配布版アンインストール

        1. 実行中のサクラエディタを常駐も含めてすべて終了させます。
        2. -
        3. sakura.exe のフォルダを丸ごと削除します。
        4. -
        5. 2000以降でユーザー別設定を行っていた場合は、設定フォルダも削除します。
        6. +
        7. sakura.exe のフォルダーを丸ごと削除します。
        8. +
        9. 2000以降でユーザー別設定を行っていた場合は、設定フォルダーも削除します。
        10. Vista以降にてVirtual Storeが有効になっている場合は、"%LOCALAPPDATA%\VirtualStore" 以下にあるsakura.ini などのファイルも削除します。
        11. 自分で作成したショートカットなども削除してください。
        @@ -86,7 +86,7 @@

        パッケージ版アンインストール

      無題
      GetPluginDir()個別フォルダのパスを返す。
      GetPluginDir()個別フォルダーのパスを返す。
      GetDef(section, key) 定義ファイルの値を取得する。
      GetOption(section, key) オプションファイルの値を取得する。
      SetOption(section, key, value) オプションファイルの値を設定する。
      - +
      無題
      XP以前で標準インストールの場合sakura.exeと同じ場所
      2000以降でユーザー別設定の場合ユーザー別設定および設定フォルダ参照
      2000以降でユーザー別設定の場合ユーザー別設定および設定フォルダー参照
      Vista以降でVirtual Store有効の場合"%LOCALAPPDATA%\VirtualStore\Program Files\sakura"
      *パッケージ版でデフォルトのインストール先を指定した場合

      @@ -106,7 +106,7 @@

      パッケージ版ファイル一式

      uninstall.exeアンインストーラ -<keyword>フォルダ +<keyword>フォルダー @@ -210,14 +210,14 @@

      パッケージ版ファイル一式


      サクラエディタが作成する作業ファイルについて

      -サクラエディタをインストールした後にサクラエディタを実行すると、 sakura.exeのあるフォルダ(または設定フォルダ)に以下のファイルが作成されます。
      +サクラエディタをインストールした後にサクラエディタを実行すると、 sakura.exeのあるフォルダー(または設定フォルダー)に以下のファイルが作成されます。
      無題
      ファイル名言語内容
      無題
      ファイル名説明
      sakura.ini サクラエディタ用の設定ファイルです。

      -キーマクロの記録を使うと、共通設定のマクロ一覧のフォルダに以下のファイルが作成されます。
      +キーマクロの記録を使うと、共通設定のマクロ一覧のフォルダーに以下のファイルが作成されます。
      diff --git a/help/sakura/res/HLP000010.html b/help/sakura/res/HLP000010.html index 7e17cf56f3..e62183e0d2 100644 --- a/help/sakura/res/HLP000010.html +++ b/help/sakura/res/HLP000010.html @@ -12,7 +12,7 @@

      ツールバーアイコンの変更手順

      変更手順

      -メニューやツールバーで使われるアイコンを標準のアイコン以外にしたい場合は、公開されているサクラエディタのソースファイル内にある mytool.bmp と同形式のビットマップ・ファイルをサクラエディタのインストールフォルダ(もしくは設定フォルダ)に my_icons.bmp というファイル名でおくだけです。
      +メニューやツールバーで使われるアイコンを標準のアイコン以外にしたい場合は、公開されているサクラエディタのソースファイル内にある mytool.bmp と同形式のビットマップ・ファイルをサクラエディタのインストールフォルダー(もしくは設定フォルダー)に my_icons.bmp というファイル名でおくだけです。
      サクラエディタは起動時にまずこのファイルがあるかどうかチェックし、あればそれを、なければ自分自身が持っているものをアイコンとして使うようになっています。

      note注意
      diff --git a/help/sakura/res/HLP000015.html b/help/sakura/res/HLP000015.html index 613f3ea2bd..82523e976e 100644 --- a/help/sakura/res/HLP000015.html +++ b/help/sakura/res/HLP000015.html @@ -15,7 +15,7 @@

      開く

      ディスクにあるファイルを開くことができます。
      (無題)で変更していないウィンドウの場合は、今のウィンドウでファイルを開きます。
      それ以外の場合は、新しいウィンドウを作成して開きます。
      -フォルダの初期値はカレントディレクトリ/MRUの1番目/指定フォルダを共通設定 『編集』で指定可能です。(2.0.6.0 以降)
      +フォルダーの初期値はカレントディレクトリ/MRUの1番目/指定フォルダーを共通設定 『編集』で指定可能です。(2.0.6.0 以降)

      OpenFile

      @@ -76,9 +76,9 @@

      開く

      [最近のファイル]
      最近使ったファイルの一覧をアルファベット順に見ることができます。

      -・[最近のフォルダ]
      -最近使ったフォルダの一覧をアルファベット順に見ることができます。
      -フォルダを選択すると、現在のフォルダが変化します。
      +・[最近のフォルダー]
      +最近使ったフォルダーの一覧をアルファベット順に見ることができます。
      +フォルダーを選択すると、現在のフォルダーが変化します。

      [ファイルの種類]
      ファイルの種類には、すべてのファイル、テキストファイル以外に、タイプ別設定で設定しているタイプ(拡張子)がセットされています。
      @@ -94,7 +94,7 @@

      開く

          str1    ファイル名
          int2    文字コード(省略可能、ただしPPAマクロは省略不可)(2.1.0.0以降)
          int3    ビューモード(省略可能、ただしPPAマクロは省略不可)(2.1.0.0以降)
      -    str4    デフォルトフォルダ・ファイル名(省略可能、ただしPPAマクロは省略不可)(2.1.0.0以降)
      +    str4    デフォルトフォルダー・ファイル名(省略可能、ただしPPAマクロは省略不可)(2.1.0.0以降)
      ・記録: ×
      ・解説
      ファイル名に""(空文字列)を指定すると、ファイルダイアログを表示します。
      @@ -113,7 +113,7 @@

      開く

         91    CP_OEM (sakura:2.2.0.0以降)
         コードページ番号  (sakura:2.2.0.0以降)
      ビューモードは、0(false、省略時規定)、または1(true)を指定します。
      -デフォルトフォルダ・ファイル名は、ダイアログのデフォルトの表示位置と、デフォルトの名前を指定します。
      +デフォルトフォルダー・ファイル名は、ダイアログのデフォルトの表示位置と、デフォルトの名前を指定します。
      省略時は、共通設定に従った表示位置になります。

      note注意
      diff --git a/help/sakura/res/HLP000016.html b/help/sakura/res/HLP000016.html index ba0b565a01..7a66a48b25 100644 --- a/help/sakura/res/HLP000016.html +++ b/help/sakura/res/HLP000016.html @@ -38,7 +38,7 @@

      「ファイル(F)」メニューの一覧

      ファイルのプロパティ(T)
      ブラウズ(B)
      最近使ったファイルDelta
      -・最近使ったフォルダDelta
      +・最近使ったフォルダーDelta
      グループを閉じる(G)
      編集の全終了(Q)
      サクラエディタの全終了(X)
      diff --git a/help/sakura/res/HLP000021.html b/help/sakura/res/HLP000021.html index 48a21cfc94..e4a762b9f2 100644 --- a/help/sakura/res/HLP000021.html +++ b/help/sakura/res/HLP000021.html @@ -14,7 +14,7 @@

      名前を付けて保存

      現在編集しているテキストにファイル名を付けて保存します。
      -フォルダの初期値はカレントディレクトリ/MRUの1番目/指定フォルダを共通設定 『編集』で指定可能です。(2.0.6.0 以降)
      +フォルダーの初期値はカレントディレクトリ/MRUの1番目/指定フォルダーを共通設定 『編集』で指定可能です。(2.0.6.0 以降)
      無題のファイル名には現在の日時を示す文字列が付加されます。(2.4.2 以降)

      FileSave
      @@ -35,9 +35,9 @@

      名前を付けて保存

      [最近のファイル]
      最近使ったファイルの一覧をアルファベット順に見ることができます。

      -・[最近のフォルダ]
      -最近使ったフォルダの一覧をアルファベット順に見ることができます。
      -フォルダを選択すると、現在のフォルダが変化します。
      +・[最近のフォルダー]
      +最近使ったフォルダーの一覧をアルファベット順に見ることができます。
      +フォルダーを選択すると、現在のフォルダーが変化します。

      hintヒント
      ダイアログ表示時にプレースバーを表示します。(sakura:1.5.8.0以降)
      diff --git a/help/sakura/res/HLP000023.html b/help/sakura/res/HLP000023.html index 2fd6977669..1d2713b679 100644 --- a/help/sakura/res/HLP000023.html +++ b/help/sakura/res/HLP000023.html @@ -4,23 +4,23 @@ -最近使ったフォルダ - +最近使ったフォルダー + -

      最近使ったフォルダ

      -最近使ったファイルの場所(フォルダ)をサブメニューに一覧表示します。
      -サブメニューからフォルダを選択すると、そのフォルダを初期フォルダとした「開く」ダイアログを表示します。
      +

      最近使ったフォルダー

      +最近使ったファイルの場所(フォルダー)をサブメニューに一覧表示します。
      +サブメニューからフォルダーを選択すると、そのフォルダーを初期フォルダーとした「開く」ダイアログを表示します。

      hintヒント
      お気に入りにしたファイルは、押し出されて履歴から消えることがなくなります。
      -履歴の管理でお気に入りに設定したフォルダは、マークアイコンがつきます。
      +履歴の管理でお気に入りに設定したフォルダーは、マークアイコンがつきます。
      メニューアイコンを非表示にしている場合は、星印がつきます。

      -表示するフォルダ数を設定することができます。
      +表示するフォルダー数を設定することができます。
      詳しくは、共通設定 『全般』プロパティをご覧ください。

      -履歴の管理の「ファイル・フォルダ除外」で登録を除外することができます。
      +履歴の管理の「ファイル・フォルダー除外」で登録を除外することができます。
      diff --git a/help/sakura/res/HLP000029.html b/help/sakura/res/HLP000029.html index 0ce544af9c..45cb88e840 100644 --- a/help/sakura/res/HLP000029.html +++ b/help/sakura/res/HLP000029.html @@ -23,5 +23,5 @@

      最近使ったファイル

      表示するファイル数を設定することができます。
      詳しくは、共通設定 『全般』プロパティをご覧ください。

      -履歴の管理の「ファイル・フォルダ除外」で登録を除外することができます。
      +履歴の管理の「ファイル・フォルダー除外」で登録を除外することができます。
      diff --git a/help/sakura/res/HLP000065.html b/help/sakura/res/HLP000065.html index 421c5d2258..36c0e5fa22 100644 --- a/help/sakura/res/HLP000065.html +++ b/help/sakura/res/HLP000065.html @@ -32,7 +32,7 @@

      タグジャンプ


      ■C/C++インクルードファイルへのタグジャンプ
      次のような記述のある行からインクルードファイルなどにタグジャンプできます。
      -ただしジャンプ元と同じフォルダか相対パスのファイルにしかタグジャンプできません。
      +ただしジャンプ元と同じフォルダーか相対パスのファイルにしかタグジャンプできません。
      #include <ファイル名>
      #include "ファイル名"
      diff --git a/help/sakura/res/HLP000067.html b/help/sakura/res/HLP000067.html index 1041d07729..0b026eb4fb 100644 --- a/help/sakura/res/HLP000067.html +++ b/help/sakura/res/HLP000067.html @@ -15,7 +15,7 @@

      Grep

      Grep
      ディスクにある複数のファイルから、指定した文字列を検索することができます。
      -指定したフォルダの下層のフォルダを全て検索することもできます。
      +指定したフォルダーの下層のフォルダーを全て検索することもできます。
      ・検索結果は、別のウィンドウが作成されて、そこに表示されます。
      @@ -24,31 +24,31 @@

      Grep

      - (条件) …… 検索条件を指定します。何も指定せずに実行すると、ファイル名検索ができます。ただし、フォルダ名検索はできません。
      + (条件) …… 検索条件を指定します。何も指定せずに実行すると、ファイル名検索ができます。ただし、フォルダー名検索はできません。
      (ファイル) … 検索対象となるファイル指定します。ワイルドカードが使えます。
      カンマ、スペース、セミコロン(, ;)のどれかで区切ると複数の条件を指定できます。
      ファイル名に(, ;)を含む場合は、ダブルクオーテーションで囲うことで、ひとつのファイル名として扱えます。
      ファイルパターンの先頭に!を付ける(例: !*.obj)と,そのパターンに当たるファイルをGrep対象から外します。
      - ファイルパターンの先頭に#を付ける(例: #*.svn)と、そのパターンに当たるサブフォルダをGrep対象から外します。(sakura:2.1.0.0以降)
      + ファイルパターンの先頭に#を付ける(例: #*.svn)と、そのパターンに当たるサブフォルダーをGrep対象から外します。(sakura:2.1.0.0以降)
      指定位置にかかわらず除外指定は検索指定より優先されます.
      何も指定しない場合は、「*.*」を指定したことになります。
      - (フォルダ) … 検索対象ファイルのあるフォルダを指定します。エクスプローラなどからのフォルダのドロップも受け付けます。
      - 複数フォルダを;で区切って指定することができます。;を含むフォルダを指定する場合は""で囲ってください。(sakura:2.1.0.0以降)
      + (フォルダー) … 検索対象ファイルのあるフォルダーを指定します。エクスプローラなどからのフォルダーのドロップも受け付けます。
      + 複数フォルダーを;で区切って指定することができます。;を含むフォルダーを指定する場合は""で囲ってください。(sakura:2.1.0.0以降)
      (除外ファイル) … 検索対象から外すファイルパターンを指定します。
      (ファイル) で ファイルパターンの先頭に!を付ける ことにより除外ファイルを指定できるのを簡単に使えるようにするものです。
      ファイルパターンを;で区切って指定することができます。;を含むファイルパターンを指定する場合は""で囲ってください。(sakura:2.4.0.0以降)
      - (除外フォルダ) … 検索対象から外すフォルダパターンを指定します。
      - (ファイル) で ファイルパターンの先頭に#を付ける ことにより除外フォルダを指定できるのを簡単に使えるようにするものです。
      - フォルダパターンを;で区切って指定することができます。;を含むフォルダパターンを指定する場合は""で囲ってください。(sakura:2.4.0.0以降)
      + (除外フォルダー) … 検索対象から外すフォルダーパターンを指定します。
      + (ファイル) で ファイルパターンの先頭に#を付ける ことにより除外フォルダーを指定できるのを簡単に使えるようにするものです。
      + フォルダーパターンを;で区切って指定することができます。;を含むフォルダーパターンを指定する場合は""で囲ってください。(sakura:2.4.0.0以降)
      単語単位で探す
          単語として識別するもののみ検索します。
          スペースなどで区切ると複数単語検索が行えます。(2.0.6.0 以降)
      - ■サブフォルダからも検索する
      -     指定フォルダの下層フォルダからも検索するかどうかを指定します。
      + ■サブフォルダーからも検索する
      +     指定フォルダーの下層フォルダーからも検索するかどうかを指定します。
      現在編集中のファイルから検索
          現在編集中のファイルのみを検索対象に指定します。
      @@ -60,9 +60,9 @@

      Grep

      ファイル毎最初のみ検索 … ファイル毎に1回だけ結果を出力します。
      - □フォルダ毎に表示 … サブフォルダ毎にパスをまとめて相対パスで出力します。(sakura:2.1.0.0以降)
      + □フォルダー毎に表示 … サブフォルダー毎にパスをまとめて相対パスで出力します。(sakura:2.1.0.0以降)
      - □ベースフォルダ表示 … ルートフォルダの表示とそこからの相対パスで出力します。(sakura:2.1.0.0以降)
      + □ベースフォルダー表示 … ルートフォルダーの表示とそこからの相対パスで出力します。(sakura:2.1.0.0以降)
      文字コードセット
          検索対象となるファイルの文字コードセットを選択します。
      @@ -71,8 +71,8 @@

      Grep

      CP … 文字コードセットでコードページを選択できるようにします。(sakura:2.2.0.0以降)
      - □フォルダの初期値をカレントフォルダにする
      -     現在開いているファイルがあるフォルダを(フォルダ)の初期値にします。次回のダイアログ表示時に反映されます。
      + □フォルダーの初期値をカレントフォルダーにする
      +     現在開いているファイルがあるフォルダーを(フォルダー)の初期値にします。次回のダイアログ表示時に反映されます。
      <結果出力> … 検索条件に合致した箇所の出力方法を指定します。合致した箇所はその先頭の合致箇所の位置が示され、タイプ別設定 『カラー』プロパティで「検索文字列」に指定した色でハイライト表示されます。
      @@ -89,10 +89,10 @@

      Grep

      [上]ボタン
      -     フォルダを1階層上に設定します。(sakura:2.1.0.0以降)
      +     フォルダーを1階層上に設定します。(sakura:2.1.0.0以降)
      - [現フォルダ]ボタン
      -     このボタンを押すと現在開いているファイルを元に「フォルダ」を設定します。
      + [現フォルダー]ボタン
      +     このボタンを押すと現在開いているファイルを元に「フォルダー」を設定します。

      @@ -111,13 +111,13 @@

      Grep

      ・構文: Grep( str1 :String, str2 :String, str3 :String, int4 :Integer, int5 :Integer );
          str1    検索文字列
          str2    検索対象にするファイル名
      -    str3    検索対象にするフォルダ名
      +    str3    検索対象にするフォルダー名
          int4    オプション(省略可能、ただしPPAマクロは省略不可)
          int5    文字コードセット(省略可能、ただしPPAマクロは省略不可)(sakura:2.1.0.0以降)
      ・記録: ○
      ・解説
      オプションには以下の値の組み合わせを指定できます。
      -    0x01    サブフォルダからも検索する(省略時規定値)
      +    0x01    サブフォルダーからも検索する(省略時規定値)
          0x02    この編集中のテキストから検索する(未実装)
          0x04    英大文字と英小文字を区別する(省略時規定値)
          0x08    正規表現
      @@ -143,8 +143,8 @@

      Grep

          0x6300    自動選択
          0x010000;  単語単位で探す(sakura:2.1.0.0以降)
          0x020000;  ファイル毎最初のみ検索(sakura:2.1.0.0以降)
      -    0x040000;  ベースフォルダ表示(sakura:2.1.0.0以降)
      -    0x080000;  フォルダ毎に表示(sakura:2.1.0.0以降)
      +    0x040000;  ベースフォルダー表示(sakura:2.1.0.0以降)
      +    0x080000;  フォルダー毎に表示(sakura:2.1.0.0以降)
      文字コード自動判別を設定した場合と文字コードセットを 自動選択にした場合の動作は同じです。
      int4の文字コードセットよりint5が優先されます。

      diff --git a/help/sakura/res/HLP000074.html b/help/sakura/res/HLP000074.html index 92ee043c1a..9320076d75 100644 --- a/help/sakura/res/HLP000074.html +++ b/help/sakura/res/HLP000074.html @@ -103,7 +103,7 @@

      タイプ別設定 『スクリーン』プロパティ

          ルールファイルを使うと「テキスト トピックツリー」の「見出し記号」よりも細かくカスタマイズすることができます。
          ルールファイルには、「見出し文字列」と「グループ名」を、「 /// 」(前後の半角スペースもセパレータの一部)で区切って記述します。
          最終行にも改行が必要です。
      -    ファイル名が相対パスの場合、設定フォルダからの相対パスとして開きます。
      +    ファイル名が相対パスの場合、設定フォルダーからの相対パスとして開きます。

      ルールファイルの解析方法
          行の先頭のTAB・SP・全角空白を除いて、行頭に「見出し文字列」が現れたら、アウトラインに該当行を追加します。
      @@ -192,6 +192,6 @@

      タイプ別設定 『スクリーン』プロパティ

      行末禁則
      行末禁則に指定された文字を、次行に折り返します。

      -[設定フォルダ]
      -設定フォルダボタンは、ユーザー別設定を行っている場合のみ表示されます。
      +[設定フォルダー]
      +設定フォルダーボタンは、ユーザー別設定を行っている場合のみ表示されます。
      diff --git a/help/sakura/res/HLP000075.html b/help/sakura/res/HLP000075.html index e6af5ecdb4..a58a7cd171 100644 --- a/help/sakura/res/HLP000075.html +++ b/help/sakura/res/HLP000075.html @@ -233,6 +233,6 @@

      タイプ別設定 『カラー』プロパティ

      -->
      -[設定フォルダ]
      -設定フォルダボタンは、ユーザー別設定を行っている場合のみ表示されます。
      +[設定フォルダー]
      +設定フォルダーボタンは、ユーザー別設定を行っている場合のみ表示されます。
      diff --git a/help/sakura/res/HLP000077.html b/help/sakura/res/HLP000077.html index 6273466333..bcf1178e24 100644 --- a/help/sakura/res/HLP000077.html +++ b/help/sakura/res/HLP000077.html @@ -4,22 +4,22 @@ -設定フォルダ - - +設定フォルダー + + -

      設定フォルダ

      -ユーザー別設定になっているときには、共通設定・タイプ別設定の設定ダイアログ左下に設定フォルダボタンが表示されます。
      -ボタンが表示されない場合は、設定フォルダは sakura.exe と同じフォルダになります。
      +

      設定フォルダー

      +ユーザー別設定になっているときには、共通設定・タイプ別設定の設定ダイアログ左下に設定フォルダーボタンが表示されます。
      +ボタンが表示されない場合は、設定フォルダーは sakura.exe と同じフォルダーになります。
      -

      設定フォルダとは

      +

      設定フォルダーとは

      sakura.exe.iniにてユーザー別設定を行うと、指定の場所にサクラエディタの設定ファイルsakura.iniが保存されます。この場合、各ユーザーそれぞれのsakura.iniを持つことになります。

      -現在起動しているサクラエディタが参照しているsakura.iniの場所を『設定フォルダ(iniフォルダ)』と呼びます。ExpandParameterでは$Iで取得できます。
      +現在起動しているサクラエディタが参照しているsakura.iniの場所を『設定フォルダー(iniフォルダー)』と呼びます。ExpandParameterでは$Iで取得できます。

      -カスタムアイコンおよび相対パス指定のカスタムファイル(入力補完辞書・アウトラインルールなど)は、設定フォルダが基点となります。
      +カスタムアイコンおよび相対パス指定のカスタムファイル(入力補完辞書・アウトラインルールなど)は、設定フォルダーが基点となります。

      diff --git a/help/sakura/res/HLP000078.html b/help/sakura/res/HLP000078.html index f12e621e6f..c49ff60cf3 100644 --- a/help/sakura/res/HLP000078.html +++ b/help/sakura/res/HLP000078.html @@ -15,7 +15,7 @@

      ユーザー別設定

      Windows2000以降のNT系OSであれば、ユーザーごとにエディタの設定を独立させることができます。Vista以降のOSでVirtual Storeを無効にする場合は、原則としてユーザー別設定の手順が必須です。

      - +
      権限の異なるユーザーによるプロセスの混在はできません。たとえばVistaの「管理者として実行」などで起動するケースがこれに該当します。1.5.17.0以前の古いバージョンでは一応起動したように見える場合もありますが、BackSpaceが効かないなどといった動作上の障害が発生します。 @@ -30,7 +30,7 @@

      ユーザー別設定の手順


      note注意
      -Vista以降のOSのときは、sakura.exe.iniVirtual Storeに入ってしまわないように、デスクトップなどの非保護フォルダで編集を行い、エクスプローラでコピーしてください。
      +Vista以降のOSのときは、sakura.exe.iniVirtual Storeに入ってしまわないように、デスクトップなどの非保護フォルダーで編集を行い、エクスプローラでコピーしてください。

      sakura.exe.iniの設定値

      @@ -48,14 +48,14 @@

      UserRootFolder

      無題
      ファイル名内容
      - - - - + + + +
      無題
      0アプリケーションデータフォルダ(デフォルト)
      %APPDATA%
      1ユーザーフォルダ
      %USERPROFILE%
      2ドキュメントフォルダ
      \My Documents
      3デスクトップフォルダ
      \デスクトップ
      0アプリケーションデータフォルダー(デフォルト)
      %APPDATA%
      1ユーザーフォルダー
      %USERPROFILE%
      2ドキュメントフォルダー
      \My Documents
      3デスクトップフォルダー
      \デスクトップ

      UserSubFolder

      -サブフォルダ名を指定します。 +サブフォルダー名を指定します。

      設定例

      例1

      diff --git a/help/sakura/res/HLP000080.html b/help/sakura/res/HLP000080.html index 34f4474d84..2880edf6a8 100644 --- a/help/sakura/res/HLP000080.html +++ b/help/sakura/res/HLP000080.html @@ -20,42 +20,42 @@

      Virtual Store

      *sakura.exe.manifestの内容は頁末参照

      Virtual Storeとは

      -Program FilesフォルダやWindowsフォルダ配下に設定を保存するようなVista未対応のアプリが、Vista上では急に動かなくなってしまうことが無いように設けられた互換性維持機能です。 -Vista未対応アプリはVirtual Store有効で動作します。Virtual Store有効のアプリがProgram Filesのように保護強化されたフォルダにファイルを保存しようとすると、目的のフォルダではなくVirtual Storeと呼ばれる別のフォルダにファイルが保存され、 +Program FilesフォルダーやWindowsフォルダー配下に設定を保存するようなVista未対応のアプリが、Vista上では急に動かなくなってしまうことが無いように設けられた互換性維持機能です。 +Vista未対応アプリはVirtual Store有効で動作します。Virtual Store有効のアプリがProgram Filesのように保護強化されたフォルダーにファイルを保存しようとすると、目的のフォルダーではなくVirtual Storeと呼ばれる別のフォルダーにファイルが保存され、 以後、同じファイルを開こうとしたときにはVirtual Store側にあるファイルが開かれる仕組みになっています。

      Virtual Store有効時の問題

      -Virtual Store有効のままでアプリを使用していると、そのアプリで保護フォルダのファイルを操作したときに次のような混乱が起きます。 +Virtual Store有効のままでアプリを使用していると、そのアプリで保護フォルダーのファイルを操作したときに次のような混乱が起きます。
      • 新規保存したはずなのにエクスプローラで見るとファイルが見つからない
      • 上書き保存したのにメモ帳で見ると内容が更新されていない
      • エクスプローラでファイルを上書きしたのに開いてみると更新されていない
      -アプリに適用されるVirtual Storeを無効にすれば、保護フォルダへの書き込みは通常通り拒否され、保護フォルダのファイルを開こうとしてVirtual Store側のファイルが開くこともないので、上記のような混乱も起きなくなります。 +アプリに適用されるVirtual Storeを無効にすれば、保護フォルダーへの書き込みは通常通り拒否され、保護フォルダーのファイルを開こうとしてVirtual Store側のファイルが開くこともないので、上記のような混乱も起きなくなります。

      Virtual Storeを無効にする場合の注意事項

      -必ずユーザー別設定の機能を利用し、設定ファイル(sakura.ini)が非保護フォルダに保存されるようにしてください。 -その際、ユーザー別設定構成ファイルsakura.exe.iniの編集はデスクトップなどの非保護フォルダで行い、編集後のファイルをエクスプローラでコピーしてください。 +必ずユーザー別設定の機能を利用し、設定ファイル(sakura.ini)が非保護フォルダーに保存されるようにしてください。 +その際、ユーザー別設定構成ファイルsakura.exe.iniの編集はデスクトップなどの非保護フォルダーで行い、編集後のファイルをエクスプローラでコピーしてください。
      -既に、ユーザー別設定を適用せずにProgram Filesにインストールして使用している場合はインストール先フォルダ下の設定ファイルやその他のファイルがVirtual Storeに転送されている可能性があります。 -エクスプローラで確認して転送ファイルのほうを優先的に設定フォルダにコピーしてください。 +既に、ユーザー別設定を適用せずにProgram Filesにインストールして使用している場合はインストール先フォルダー下の設定ファイルやその他のファイルがVirtual Storeに転送されている可能性があります。 +エクスプローラで確認して転送ファイルのほうを優先的に設定フォルダーにコピーしてください。

      -Program Filesではなく、保護対象外のフォルダにインストールして使用する場合はユーザー別設定にする必要はありません。
      +Program Filesではなく、保護対象外のフォルダーにインストールして使用する場合はユーザー別設定にする必要はありません。

      1.5.17.0以前のバージョンではユーザー別設定に対応していないため、Virtual Store無効での利用ができません。

      Virtual Storeに転送されたファイルの確認方法

      -フォルダの仮想化されたファイル(Virtual Storeに転送されたファイル)を表示するにはエクスプローラのツールバーに表示される [互換性ファイル]ボタンをクリックします。 -[互換性ファイル]ボタンは、そのフォルダに仮想化されたファイルがある場合にのみ表示されます。
      +フォルダーの仮想化されたファイル(Virtual Storeに転送されたファイル)を表示するにはエクスプローラのツールバーに表示される [互換性ファイル]ボタンをクリックします。 +[互換性ファイル]ボタンは、そのフォルダーに仮想化されたファイルがある場合にのみ表示されます。

      実際のパスは、たとえばProgram Files\sakuraにインストールされているとき、C:\Users\<username>\AppData\Local\Virtual Store\Program Files\sakura が転送先になります。

      sakura.exe.manifestの内容

      以下の内容のファイルをsakura.exeと同じ場所に保存します。sakura.exe.manifest自身がVirtual Storeに入らないように注意してください。
      -*デスクトップなどの非保護フォルダで編集を済ませてエクスプローラでコピーなど。
      +*デスクトップなどの非保護フォルダーで編集を済ませてエクスプローラでコピーなど。

      Visual Styleを有効にし、Virtual Storeを無効(UAC対応)にする例です。
      diff --git a/help/sakura/res/HLP000081.html b/help/sakura/res/HLP000081.html
      index 4c47335a20..ceacf19627 100644
      --- a/help/sakura/res/HLP000081.html
      +++ b/help/sakura/res/HLP000081.html
      @@ -105,10 +105,10 @@ 

      共通設定 『全般』プロパティ


      [履歴をクリア]ボタン …… 最近使ったファイルの履歴をクリアします。

      - フォルダの履歴MAX(15) … 最近使ったフォルダの履歴の最大数(36まで)を設定します。
      + フォルダーの履歴MAX(15) … 最近使ったフォルダーの履歴の最大数(36まで)を設定します。
      ただしリムーバブルメディアからのものは履歴に入りません。

      - [履歴をクリア]ボタン …… 最近使ったフォルダの履歴をクリアします。
      + [履歴をクリア]ボタン …… 最近使ったフォルダーの履歴をクリアします。

      [すべて閉じる]で他に編集用のウィンドウがあれば確認する
          (sakura:1.5.15.0以降)
      @@ -119,6 +119,6 @@

      共通設定 『全般』プロパティ

      有効にすると、「サクラエディタの終了」(常駐タスクトレイアイコンも含めて終了する)時に編集ウィンドウが一枚以上ある場合は、終了の確認をします。
      ただし未保存のファイルがある場合は、どんなときでも必ず保存の確認をします。

      -[設定フォルダ]
      -設定フォルダボタンは、ユーザー別設定を行っている場合のみ表示されます。
      +[設定フォルダー]
      +設定フォルダーボタンは、ユーザー別設定を行っている場合のみ表示されます。
      diff --git a/help/sakura/res/HLP000082.html b/help/sakura/res/HLP000082.html index 072282722d..20a9c9bb00 100644 --- a/help/sakura/res/HLP000082.html +++ b/help/sakura/res/HLP000082.html @@ -83,7 +83,7 @@

      共通設定 『書式』プロパティ

      選択範囲内全行引用コピーの機能で、各行の先頭につける引用符を定義します。

      -[設定フォルダ]
      -設定フォルダボタンは、ユーザー別設定を行っている場合のみ表示されます。
      +[設定フォルダー]
      +設定フォルダーボタンは、ユーザー別設定を行っている場合のみ表示されます。

      diff --git a/help/sakura/res/HLP000083.html b/help/sakura/res/HLP000083.html index 5f80af3d36..7bca393fcc 100644 --- a/help/sakura/res/HLP000083.html +++ b/help/sakura/res/HLP000083.html @@ -114,6 +114,6 @@

      共通設定 『ファイル』プロパティ

      開こうとしたファイルが大きい場合に警告する
      ファイルを開こうとしたときに認識したファイルサイズが設定を超えている場合に警告します。(sakura:1.6.6.0以降)

      -[設定フォルダ]
      -設定フォルダボタンは、ユーザー別設定を行っている場合のみ表示されます。
      +[設定フォルダー]
      +設定フォルダーボタンは、ユーザー別設定を行っている場合のみ表示されます。
      diff --git a/help/sakura/res/HLP000084.html b/help/sakura/res/HLP000084.html index 95e878367c..92c9b99dfb 100644 --- a/help/sakura/res/HLP000084.html +++ b/help/sakura/res/HLP000084.html @@ -49,8 +49,8 @@

      共通設定 『キー割り当て』プロパティ

      [エクスポート]ボタン
      現在設定されているキーの設定内容を、キー設定ファイルとして書き出します。

      -[設定フォルダ]
      -設定フォルダボタンは、ユーザー別設定を行っている場合のみ表示されます。
      +[設定フォルダー]
      +設定フォルダーボタンは、ユーザー別設定を行っている場合のみ表示されます。

      参考 キー割り当て一覧をコピー
      diff --git a/help/sakura/res/HLP000085.html b/help/sakura/res/HLP000085.html index b8882c2a6f..a3edbc3682 100644 --- a/help/sakura/res/HLP000085.html +++ b/help/sakura/res/HLP000085.html @@ -61,8 +61,8 @@

      共通設定 『ツールバー』プロパティ

      [折返]ボタン
          ボタンを押すと、"――ツールバー折返――"が追加されます。追加された位置ででツールバーを折り返して表示します。(sakura:1.5.5.0以降)

      -[設定フォルダ]
      -設定フォルダボタンは、ユーザー別設定を行っている場合のみ表示されます。
      +[設定フォルダー]
      +設定フォルダーボタンは、ユーザー別設定を行っている場合のみ表示されます。

      hintヒント
      Windows XPで画面のデザインがWindows XP スタイルの場合にはこのチェックボックスの状態にかかわらずフラットになります。
      diff --git a/help/sakura/res/HLP000086.html b/help/sakura/res/HLP000086.html index 9ceec3bb61..a2a68e1916 100644 --- a/help/sakura/res/HLP000086.html +++ b/help/sakura/res/HLP000086.html @@ -100,6 +100,6 @@

      共通設定 『強調キーワード』プロパティ

      [エクスポート]ボタン
      現在選択されているセットのキーワードを、単語リストファイルとして書き出します。

      -[設定フォルダ]
      -設定フォルダボタンは、ユーザー別設定を行っている場合のみ表示されます。
      +[設定フォルダー]
      +設定フォルダーボタンは、ユーザー別設定を行っている場合のみ表示されます。
      diff --git a/help/sakura/res/HLP000087.html b/help/sakura/res/HLP000087.html index 86ec5ff18b..9233132102 100644 --- a/help/sakura/res/HLP000087.html +++ b/help/sakura/res/HLP000087.html @@ -73,6 +73,6 @@

      共通設定 『カスタムメニュー』プロパティ

      サブメニューとして表示(sakura:2.1.0.0以降)
      ONにすると設定中のカスタムメニューが他のメニューに組み込まれたときにサブメニューとしてポップアップ表示されます。

      -[設定フォルダ]
      -設定フォルダボタンは、ユーザー別設定を行っている場合のみ表示されます。
      +[設定フォルダー]
      +設定フォルダーボタンは、ユーザー別設定を行っている場合のみ表示されます。
      diff --git a/help/sakura/res/HLP000088.html b/help/sakura/res/HLP000088.html index cf4f0d2d83..aed80cbd0b 100644 --- a/help/sakura/res/HLP000088.html +++ b/help/sakura/res/HLP000088.html @@ -32,7 +32,7 @@

      共通設定 『支援』プロパティ


      ComHelper

      -各ファイル名が相対パスの場合、設定フォルダからの相対パスとして認識します。ただし、「..」は使えません。
      +各ファイル名が相対パスの場合、設定フォルダーからの相対パスとして認識します。ただし、「..」は使えません。

      <入力補完機能>
      入力補完機能の詳細については、ここをご覧下さい。
      @@ -76,6 +76,6 @@

      共通設定 『支援』プロパティ

          dictディレクトリのパスを指定します。


      -[設定フォルダ]
      -設定フォルダボタンは、ユーザー別設定を行っている場合のみ表示されます。
      +[設定フォルダー]
      +設定フォルダーボタンは、ユーザー別設定を行っている場合のみ表示されます。
      diff --git a/help/sakura/res/HLP000103.html b/help/sakura/res/HLP000103.html index 4e5068d0fc..11d9340f67 100644 --- a/help/sakura/res/HLP000103.html +++ b/help/sakura/res/HLP000103.html @@ -90,7 +90,7 @@

      外部コマンド実行

      カレントディレクトリでは特殊文字の展開はしません。
      引数のカレントディレクトリを省略した場合は、サクラエディタのカレントディレクトリで実行されます。
      サクラエディタのカレントディレクトリは、ファイルを開いている場合はファイルの場所、ファイルを開いていないときは、
      -(sakura:2.2.0.0以降)共通設定-編集-「ファイルダイアログの初期位置」です。初期位置が「カレントフォルダ」の場合は2.1.1.4と同じです。
      +(sakura:2.2.0.0以降)共通設定-編集-「ファイルダイアログの初期位置」です。初期位置が「カレントフォルダー」の場合は2.1.1.4と同じです。
      (sakura:2.1.1.4以前)そのウィンドウで最後に開いたファイルの場所か、起動元プロセスから継承した場所です。

      ・構文: ExecCommandDialog( ); (sakura:2.1.0.0以降)
      diff --git a/help/sakura/res/HLP000107.html b/help/sakura/res/HLP000107.html index ccff924c7a..ab737ffe2f 100644 --- a/help/sakura/res/HLP000107.html +++ b/help/sakura/res/HLP000107.html @@ -300,7 +300,7 @@

      キー割り当て一覧を確認

      デフォルトの設定に戻すには

      1. サクラエディタを常駐も含めてすべて終了します。
      2. -
      3. サクラエディタのインストールフォルダ(ユーザー別設定の時は設定フォルダ)内にある設定ファイルsakura.iniを削除します。
      4. +
      5. サクラエディタのインストールフォルダー(ユーザー別設定の時は設定フォルダー)内にある設定ファイルsakura.iniを削除します。
      以上で設定が初期状態に戻ります。

      diff --git a/help/sakura/res/HLP000109.html b/help/sakura/res/HLP000109.html index ea119ebf5b..86a6a081b9 100644 --- a/help/sakura/res/HLP000109.html +++ b/help/sakura/res/HLP000109.html @@ -50,7 +50,7 @@

      ファイルオープンに関するオプション

      -WY= ウィンドウ左上のY座標。 -GROUP= タブモードのグループを指定して開く(1開始)。
      ・0を指定するとアクティブのグループ
      ・未使用のグループ番号を指定すると新規グループ
      ファイル名指定なしのときも使えます。 -M= -MTYPE 未指定時、起動時に実行するマクロのファイル名を指定します。
      共通設定の自動実行マクロの後に実行されます。
      Grep、アウトプットでは実行されません。
      -相対パスの場合その時点のカレントフォルダからの相対になります。
      +相対パスの場合その時点のカレントフォルダーからの相対になります。
      -MTYPE= -M とあわせて指定します。-M はマクロの文字列そのものとして解釈されます。
      -MTYPE にはマクロの種類を拡張子名で指定します。(ピリオドを除く)
      -MTYPE=file は-M単独と同じ意味になります。
      sakura.exe -M=D:\macro.mac
      @@ -74,7 +74,7 @@

      単独で使用するオプション


      -Windowsの起動と同時にサクラエディタを常駐したい場合、ショートカットのプロパティでリンク先のexeに -NOWIN を指定してスタートアップフォルダに入れておくといいでしょう。
      +Windowsの起動と同時にサクラエディタを常駐したい場合、ショートカットのプロパティでリンク先のexeに -NOWIN を指定してスタートアップフォルダーに入れておくといいでしょう。

      Grepに関するオプション

      @@ -86,7 +86,7 @@

      Grepに関するオプション

      -GKEY=Grepの検索文字列
      "'で囲む。条件中の'"'は二つの連続した'"'にする
      (例) -GKEY="printf("        「printf(」を検索
      (例) -GKEY="printf( ""%s"    「printf( "%s」を検索 -GREPR=Grepの置換文字列 (sakura:2.2.0.0以降)
      これを指定すると置換になる
      '"'で囲む。条件中の'"'は二つの連続した'"'にする -GFILE=Grepの検索対象のファイル
      '"'で囲む。条件中の'"'は二つの連続した'"'にする --GFOLDER=Grepの検索対象のフォルダ
      '"'で囲む。条件中の'"'は二つの連続した'"'にする +-GFOLDER=Grepの検索対象のフォルダー
      '"'で囲む。条件中の'"'は二つの連続した'"'にする -GREPDLGサクラエディタが起動すると同時にGrepダイアログを表示します。
      -GCODE=Grepでの文字コードを指定します。
      -CODEと同じように数字で指定します。 -GOPT=Grepの検索条件
      [S][L][R][P][W][1|2|3][K][F][B][G][X][C][O][U][H] @@ -96,7 +96,7 @@

      Grepに関するオプション

      - + @@ -104,8 +104,8 @@

      Grepに関するオプション

      - - + + @@ -126,7 +126,7 @@

      プロファイルに関するオプション

      無題
      Sサブフォルダからも検索
      Sサブフォルダーからも検索
      L大文字と小文字を区別
      R正規表現
      P該当行を出力/未指定時は該当部分だけ出力
      1|2|3結果出力形式。1か2か3のどれかを指定します。
      (1=ノーマル、2=ファイル毎、3=結果のみ)
      K-GCODE=99と同じ意味です。
      互換性のためだけに残されています。
      Fファイル毎最初のみ
      Bベースフォルダ表示
      Gフォルダ毎に表示
      Bベースフォルダー表示
      Gフォルダー毎に表示
      XGrep実行後カレントディレクトリを移動しない
      C(置換)クリップボードから貼り付け (sakura:2.2.0.0以降)
      O(置換)バックアップ作成 (sakura:2.2.0.0以降)

      hintヒント
      -エクスプローラ(フォルダウィンドウ)の送るメニューや、IEのソースの表示ではコマンドラインオプションを設定しても、無視されてしまいます。これを回避するにはヘルパーアプリケーションが必要です。
      +エクスプローラ(フォルダーウィンドウ)の送るメニューや、IEのソースの表示ではコマンドラインオプションを設定しても、無視されてしまいます。これを回避するにはヘルパーアプリケーションが必要です。

      note注意
      数字等を指定するコマンドラインオプションは-CODE="4"のようにダブルクオートで囲って指定できません。(sakura:1.3.5.6まで)
      diff --git a/help/sakura/res/HLP000110.html b/help/sakura/res/HLP000110.html index d1fd3c5e4f..c6d09fc06a 100644 --- a/help/sakura/res/HLP000110.html +++ b/help/sakura/res/HLP000110.html @@ -16,12 +16,12 @@

      プラグイン

      導入方法

      1. プラグインのzipファイルを入手します。 -
      2. サクラエディタの設定ファイル(sakura.ini)があるフォルダに「plugins」というフォルダを作成し、その中にプラグインzipを解凍します。
        - 以下のようなフォルダ構成になっていればOKです。
        +
      3. サクラエディタの設定ファイル(sakura.ini)があるフォルダーに「plugins」というフォルダーを作成し、その中にプラグインzipを解凍します。
        + 以下のようなフォルダー構成になっていればOKです。
                 ├ sakura.ini
                 └ plugins/
        -            └ ○○/              // プラグイン名のフォルダ
        +            └ ○○/              // プラグイン名のフォルダー
                         ├ plugin.def     // プラグイン定義ファイル
                         ├   :           
         
        diff --git a/help/sakura/res/HLP000125.html b/help/sakura/res/HLP000125.html index e94c6e7e50..3bd459fcc8 100644 --- a/help/sakura/res/HLP000125.html +++ b/help/sakura/res/HLP000125.html @@ -15,7 +15,7 @@

        キーマクロの記録開始/終了

        キーマクロバッファをクリアして、キー入力の記録を開始します。
        一度にひとつの編集ウィンドウでのみ記録できます。
        -記録を終了すると、共通設定 『マクロ』プロパティのマクロ一覧で指定したフォルダに、「RecKey.mac」と言う名前で保存されます。
        +記録を終了すると、共通設定 『マクロ』プロパティのマクロ一覧で指定したフォルダーに、「RecKey.mac」と言う名前で保存されます。
        ステータスバー上のRECをダブルクリックすることでマクロの記録開始・終了が行えます。(sakura:1.4.3.7以降)

        diff --git a/help/sakura/res/HLP000130.html b/help/sakura/res/HLP000130.html index efcf8a0b26..ad1a3e2346 100644 --- a/help/sakura/res/HLP000130.html +++ b/help/sakura/res/HLP000130.html @@ -11,7 +11,7 @@

        右ドロップ

        -ファイルやフォルダをマウスの右ボタンでドラッグし、編集画面にドロップすると、『パス名貼り付け』『ファイル名貼り付け』『ファイルを開く』のコンテキストメニューが表示されます。 +ファイルやフォルダーをマウスの右ボタンでドラッグし、編集画面にドロップすると、『パス名貼り付け』『ファイル名貼り付け』『ファイルを開く』のコンテキストメニューが表示されます。
        パス名貼り付け
        diff --git a/help/sakura/res/HLP000144.html b/help/sakura/res/HLP000144.html index d86d53ee04..96680a3c6a 100644 --- a/help/sakura/res/HLP000144.html +++ b/help/sakura/res/HLP000144.html @@ -88,14 +88,14 @@

        共通設定 『編集』プロパティ

        <ファイルダイアログの初期位置>
        ファイルダイアログ(開く名前をつけて保存)の初期位置を指定します。(sakura:2.0.6.0以降)
        - ◎カレントフォルダ
        - カレントフォルダに設定します。
        - ○最近使ったフォルダ
        - 最近使ったフォルダに設定します。
        - ○指定フォルダ
        - ユーザーが設定したフォルダに設定します。メタ文字列を含むことができます。
        - (sakura:2.2.0.0以降)新規ウィンドウ、閉じて(無題)などで、無題になった場合、この設定のフォルダへカレントディレクトリを移動します。
        - ファイルダイアログの設定が「カレントフォルダ」の場合は、元のウィンドウのカレントディレクトリを引き継ぎます。
        + ◎カレントフォルダー
        + カレントフォルダーに設定します。
        + ○最近使ったフォルダー
        + 最近使ったフォルダーに設定します。
        + ○指定フォルダー
        + ユーザーが設定したフォルダーに設定します。メタ文字列を含むことができます。
        + (sakura:2.2.0.0以降)新規ウィンドウ、閉じて(無題)などで、無題になった場合、この設定のフォルダーへカレントディレクトリを移動します。
        + ファイルダイアログの設定が「カレントフォルダー」の場合は、元のウィンドウのカレントディレクトリを引き継ぎます。

        改行コードNEL,PS,LSを有効にする (sakura:2.2.0.0以降)
        @@ -107,6 +107,6 @@

        共通設定 『編集』プロパティ

        選択をロックすると「矩形範囲選択開始」と同様に、カーソルキー等の通常移動系コマンドで矩形選択を続行できます。
        ロックしない場合は、選択系コマンドと同様に通常移動系コマンドでは矩形選択が解除されます。

        -[設定フォルダ]
        -設定フォルダボタンは、ユーザー別設定を行っている場合のみ表示されます。
        +[設定フォルダー]
        +設定フォルダーボタンは、ユーザー別設定を行っている場合のみ表示されます。
        diff --git a/help/sakura/res/HLP000145.html b/help/sakura/res/HLP000145.html index 5b78ec53cf..2e93089683 100644 --- a/help/sakura/res/HLP000145.html +++ b/help/sakura/res/HLP000145.html @@ -59,15 +59,15 @@

        共通設定 『バックアップ』プロパティ

      -□指定フォルダに作成する
      -このオプションを有効にすると、バックアップは指定されたフォルダに作成されます。
      -このオプションを無効にすると、バックアップは編集中のファイルと同じフォルダに作成されます。
      +□指定フォルダーに作成する
      +このオプションを有効にすると、バックアップは指定されたフォルダーに作成されます。
      +このオプションを無効にすると、バックアップは編集中のファイルと同じフォルダーに作成されます。

      リムーバブルメディアのみ
      -編集中のファイルがリムーバブルメディアにある場合のみ指定フォルダにバックアップを作成します。
      +編集中のファイルがリムーバブルメディアにある場合のみ指定フォルダーにバックアップを作成します。

      -フォルダ名
      -指定フォルダに作成するをチェックしたときにバックアップを作成するフォルダを設定できます。
      +フォルダー名
      +指定フォルダーに作成するをチェックしたときにバックアップを作成するフォルダーを設定できます。
      メタ文字列を含むことができます。(sakura:2.0.8.0以降)

      バックアップファイルをごみ箱に放り込む
      @@ -78,12 +78,12 @@

      共通設定 『バックアップ』プロパティ

      無題 ローカルドライブにあるファイルリムーバブルメディアにあるファイル -□指定フォルダに作成する
      □リムーバブルメディアのみ
      □バックアップファイルをごみ箱に放り込む
      編集中のファイルのあるフォルダ編集中のファイルのあるフォルダ -■指定フォルダに作成する
      □リムーバブルメディアのみ
      □バックアップファイルをごみ箱に放り込む
      指定フォルダ指定フォルダ -■指定フォルダに作成する
      ■リムーバブルメディアのみ
      □バックアップファイルをごみ箱に放り込む
      編集中のファイルのあるフォルダ指定フォルダ -□指定フォルダに作成する
      □リムーバブルメディアのみ
      ■バックアップファイルをごみ箱に放り込む
      編集中のファイルのあるフォルダ→ごみ箱編集中のファイルのあるフォルダ -■指定フォルダに作成する
      □リムーバブルメディアのみ
      ■バックアップファイルをごみ箱に放り込む
      指定フォルダ→ごみ箱指定フォルダ -■指定フォルダに作成する
      ■リムーバブルメディアのみ
      ■バックアップファイルをごみ箱に放り込む
      編集中のファイルのあるフォルダ→ごみ箱指定フォルダ +□指定フォルダーに作成する
      □リムーバブルメディアのみ
      □バックアップファイルをごみ箱に放り込む
      編集中のファイルのあるフォルダー編集中のファイルのあるフォルダー +■指定フォルダーに作成する
      □リムーバブルメディアのみ
      □バックアップファイルをごみ箱に放り込む
      指定フォルダー指定フォルダー +■指定フォルダーに作成する
      ■リムーバブルメディアのみ
      □バックアップファイルをごみ箱に放り込む
      編集中のファイルのあるフォルダー指定フォルダー +□指定フォルダーに作成する
      □リムーバブルメディアのみ
      ■バックアップファイルをごみ箱に放り込む
      編集中のファイルのあるフォルダー→ごみ箱編集中のファイルのあるフォルダー +■指定フォルダーに作成する
      □リムーバブルメディアのみ
      ■バックアップファイルをごみ箱に放り込む
      指定フォルダー→ごみ箱指定フォルダー +■指定フォルダーに作成する
      ■リムーバブルメディアのみ
      ■バックアップファイルをごみ箱に放り込む
      編集中のファイルのあるフォルダー→ごみ箱指定フォルダー
      作成前に確認する
      @@ -103,7 +103,7 @@

      共通設定 『バックアップ』プロパティ

      無題 $0ファイル名 -$1 .. $9上位階層へx個移動したところにあるフォルダ名 +$1 .. $9上位階層へx個移動したところにあるフォルダー名 *拡張子 %Y西暦(4桁) %y西暦(2桁) @@ -125,7 +125,7 @@

      共通設定 『バックアップ』プロパティ

      前回の保存時の日時(ファイルの更新日時)すなわちファイルのタイムスタンプを使います。


      -[設定フォルダ]
      -設定フォルダボタンは、ユーザー別設定を行っている場合のみ表示されます。
      +[設定フォルダー]
      +設定フォルダーボタンは、ユーザー別設定を行っている場合のみ表示されます。
      diff --git a/help/sakura/res/HLP000146.html b/help/sakura/res/HLP000146.html index 4b1e64a663..b8fb91047d 100644 --- a/help/sakura/res/HLP000146.html +++ b/help/sakura/res/HLP000146.html @@ -95,6 +95,6 @@

      共通設定 『ウィンドウ』プロパティ

      ${w?$h$:アウトプット$:$f$n$}${U?(更新)$} - $A $V ${R?(ビューモード)$:(上書き禁止)$}${M? 【キーマクロの記録中】$} $<profile>

      -[設定フォルダ]
      -設定フォルダボタンは、ユーザー別設定を行っている場合のみ表示されます。
      +[設定フォルダー]
      +設定フォルダーボタンは、ユーザー別設定を行っている場合のみ表示されます。
      diff --git a/help/sakura/res/HLP000147.html b/help/sakura/res/HLP000147.html index b53b89a286..8fd5141aca 100644 --- a/help/sakura/res/HLP000147.html +++ b/help/sakura/res/HLP000147.html @@ -56,6 +56,6 @@

      共通設定 『ステータスバー』プロパティ

      オフのときは、Unicodeでの文字数を表示します。
      ※オンにした場合、選択範囲が変わるたびにバイト数の再計算を行うため、データ量によっては高負荷となる可能性があります
      -[設定フォルダ]
      -設定フォルダボタンは、ユーザー別設定を行っている場合のみ表示されます。
      +[設定フォルダー]
      +設定フォルダーボタンは、ユーザー別設定を行っている場合のみ表示されます。
      diff --git a/help/sakura/res/HLP000148.html b/help/sakura/res/HLP000148.html index bce3380656..7f20bb8ae3 100644 --- a/help/sakura/res/HLP000148.html +++ b/help/sakura/res/HLP000148.html @@ -68,12 +68,12 @@

      共通設定 『検索』プロパティ

      <タグジャンプ>(sakura:2.2.0.0以降)
      タグファイルの検索
      ダイレクトタグジャンプのときに、次のtagsファイルを検索するかどうかを指定します。
      -次とは、1つ上のフォルダまたは、tagsファイルの中で!_TAG_S_SEARCH_NEXTで指定されたフォルダにあるtagsファイルです。
      +次とは、1つ上のフォルダーまたは、tagsファイルの中で!_TAG_S_SEARCH_NEXTで指定されたフォルダーにあるtagsファイルです。

      キーワード指定のタグファイル検索
      キーワード指定のときに、次のtagsファイルを検索するかどうかを指定します。

      -[設定フォルダ]
      -設定フォルダボタンは、ユーザー別設定を行っている場合のみ表示されます。
      +[設定フォルダー]
      +設定フォルダーボタンは、ユーザー別設定を行っている場合のみ表示されます。
      diff --git a/help/sakura/res/HLP000150.html b/help/sakura/res/HLP000150.html index 5d15e80165..64e2b33424 100644 --- a/help/sakura/res/HLP000150.html +++ b/help/sakura/res/HLP000150.html @@ -96,7 +96,7 @@

      共通設定 『タブバー』プロパティ

      動作モードの設定に応じて、タブバーの右端に×ボタンまたはXXボタンが表示されます。
      タブ上の右クリックメニューのカスタマイズは 共通設定『カスタムメニュー』 の選択「タブメニュー」です。

      -[設定フォルダ]
      -設定フォルダボタンは、ユーザー別設定を行っている場合のみ表示されます。
      +[設定フォルダー]
      +設定フォルダーボタンは、ユーザー別設定を行っている場合のみ表示されます。
      diff --git a/help/sakura/res/HLP000151.html b/help/sakura/res/HLP000151.html index fb63a4ca8b..067f8a4296 100644 --- a/help/sakura/res/HLP000151.html +++ b/help/sakura/res/HLP000151.html @@ -42,14 +42,14 @@

      共通設定 『プラグイン』プロパティ

      プラグインを有効にします。
      無効にした場合、すべてのプラグインを読み込みません。

      -[フォルダを開く]ボタン
      -
      iniと同じ階層のpluginsフォルダを開きます。
      +[フォルダーを開く]ボタン
      +
      iniと同じ階層のpluginsフォルダーを開きます。

      [ZIPプラグインを導入]ボタン
      ファイル選択ダイアログでZIPファイルを指定して、プラグインを導入します。(XP以降)

      [新規プラグインを追加]ボタン
      -
      登録されていないプラグインを、iniフォルダ内のpluginsフォルダから検索して、登録または更新します。
      +
      登録されていないプラグインを、iniフォルダー内のpluginsフォルダーから検索して、登録または更新します。
      40個まで登録できます。(2.0.6.0 以降)
      20個まで登録できます。(2.0.6.0 以前)

      @@ -66,8 +66,8 @@

      共通設定 『プラグイン』プロパティ

      追加, 更新, 停止, 稼働, 削除 があります。
      読込
      プラグインが読み込まれているかを表示します。
      -フォルダ
      -
      プラグインのあるフォルダを表示します。
      +フォルダー
      +
      プラグインのあるフォルダーを表示します。

      [配布元]ボタン
      プラグインの配布元サイトをブラウザで開きます。(sakura:2.2.0.0以降)
      @@ -82,8 +82,8 @@

      共通設定 『プラグイン』プロパティ

      プラグイン設定画面を開きます。

      [ReadMe]ボタン
      -プラグインフォルダ以下の ReadMe.txt か プラグインフォルダ名.txt のファイルがあると、それを新しいサクラエディタのグループを開いて読み取り専用で表示します。
      +プラグインフォルダー以下の ReadMe.txt か プラグインフォルダー名.txt のファイルがあると、それを新しいサクラエディタのグループを開いて読み取り専用で表示します。

      -[設定フォルダ]
      -設定フォルダボタンは、ユーザー別設定を行っている場合のみ表示されます。
      +[設定フォルダー]
      +設定フォルダーボタンは、ユーザー別設定を行っている場合のみ表示されます。
      diff --git a/help/sakura/res/HLP000152.html b/help/sakura/res/HLP000152.html index d06287b18a..7b858f7f59 100644 --- a/help/sakura/res/HLP000152.html +++ b/help/sakura/res/HLP000152.html @@ -79,6 +79,6 @@

      共通設定 『メインメニュー』プロパティ

      [初期設定] ボタン
      設定中のメインメニュー設定の内容を、初期状態に戻します。

      -[設定フォルダ]
      -設定フォルダボタンは、ユーザー別設定を行っている場合のみ表示されます。
      +[設定フォルダー]
      +設定フォルダーボタンは、ユーザー別設定を行っている場合のみ表示されます。
      diff --git a/help/sakura/res/HLP000197.html b/help/sakura/res/HLP000197.html index df1f09468d..6cc62da384 100644 --- a/help/sakura/res/HLP000197.html +++ b/help/sakura/res/HLP000197.html @@ -15,7 +15,7 @@

      タイプ別設定 『支援』プロパティ

      『スクリーン』 『カラー』 『ウィンドウ』 『支援』 『正規表現キーワード』 『キーワードヘルプ』
      TypeHelper

      -各ファイル名が相対パスの場合、設定フォルダからの相対パスとして認識します。ただし、「..」は使えません。
      +各ファイル名が相対パスの場合、設定フォルダーからの相対パスとして認識します。ただし、「..」は使えません。
      <入力補完機能>
      入力補完機能の詳細については、ここをご覧下さい。
      @@ -51,6 +51,6 @@

      タイプ別設定 『支援』プロパティ

      保存時に改行コードが混在していた場合、改行コードを統一するか確認するメッセージを表示します。

      -[設定フォルダ]
      -設定フォルダボタンは、ユーザー別設定を行っている場合のみ表示されます。
      +[設定フォルダー]
      +設定フォルダーボタンは、ユーザー別設定を行っている場合のみ表示されます。
      diff --git a/help/sakura/res/HLP000201.html b/help/sakura/res/HLP000201.html index 7329742461..f6371a35f8 100644 --- a/help/sakura/res/HLP000201.html +++ b/help/sakura/res/HLP000201.html @@ -36,14 +36,14 @@

      共通設定 『マクロ』プロパティ

      マクロの詳細は、マクロについてをご覧ください。

      -マクロフォルダ
      -
      マクロリストのファイル名が相対パスの場合の元になるフォルダを指定します。
      -フォルダ名が相対パスの場合も、フォルダ名は、設定フォルダからの相対パスとして認識します。ただし、「..」は使えません。
      -たとえば、「Macro\」と指定し、設定ファイルが「C:\Program files\sakura」フォルダにある場合は、「C:\Program files\sakura\Macro\」を指すことになります。
      -キーマクロの記録は、このフォルダに「RecKey.mac」と言うファイル名で保存されます。
      +マクロフォルダー
      +
      マクロリストのファイル名が相対パスの場合の元になるフォルダーを指定します。
      +フォルダー名が相対パスの場合も、フォルダー名は、設定フォルダーからの相対パスとして認識します。ただし、「..」は使えません。
      +たとえば、「Macro\」と指定し、設定ファイルが「C:\Program files\sakura」フォルダーにある場合は、「C:\Program files\sakura\Macro\」を指すことになります。
      +キーマクロの記録は、このフォルダーに「RecKey.mac」と言うファイル名で保存されます。

      [参照]ボタン
      -
      マクロが格納されているフォルダを指定します。
      +
      マクロが格納されているフォルダーを指定します。

      マクロ一覧リスト
      マクロの一覧を表示します。
      @@ -80,8 +80,8 @@

      共通設定 『マクロ』プロパティ

      登録を解除するには、名前及びファイル名を空欄にして[設定]ボタンを押します。

      -[設定フォルダ]
      -設定フォルダボタンは、ユーザー別設定を行っている場合のみ表示されます。
      +[設定フォルダー]
      +設定フォルダーボタンは、ユーザー別設定を行っている場合のみ表示されます。

      hintヒント
      名前、ファイルなどを変更しても、[設定]ボタンを押さないとリストには登録されません。
      diff --git a/help/sakura/res/HLP000203.html b/help/sakura/res/HLP000203.html index f3763a352d..33511778e7 100644 --- a/help/sakura/res/HLP000203.html +++ b/help/sakura/res/HLP000203.html @@ -91,6 +91,6 @@

      タイプ別設定 『正規表現キーワード』プロパティ


      -[設定フォルダ]
      -設定フォルダボタンは、ユーザー別設定を行っている場合のみ表示されます。
      +[設定フォルダー]
      +設定フォルダーボタンは、ユーザー別設定を行っている場合のみ表示されます。
      diff --git a/help/sakura/res/HLP000251.html b/help/sakura/res/HLP000251.html index 5021bbeea8..29bc6208a4 100644 --- a/help/sakura/res/HLP000251.html +++ b/help/sakura/res/HLP000251.html @@ -35,7 +35,7 @@

      DIFF差分表示

      差分表示の行番号の色はタイプ別設定 『カラー』プロパティで設定できます。

      hintヒント
      -diff.exe は サクラエディタ本体と同じフォルダに置く必要があります。
      +diff.exe は サクラエディタ本体と同じフォルダーに置く必要があります。
      diff.exeは、GNU diff 2.5/2.7 互換で、DOS版でない(=WinCUI版)必要があります。
      スペースを含むパスを扱えない物もありますので、注意してください。

      diff --git a/help/sakura/res/HLP000259.html b/help/sakura/res/HLP000259.html index 3b24fdffcb..b75d0e75b7 100644 --- a/help/sakura/res/HLP000259.html +++ b/help/sakura/res/HLP000259.html @@ -12,11 +12,11 @@

      パスの貼り付け/ドロップ

      クリップボードから

      -ファイルやフォルダをエクスプローラなどでコピーして、サクラエディタの編集画面に貼り付けすると、ファイルのパス名を貼り付けします。
      +ファイルやフォルダーをエクスプローラなどでコピーして、サクラエディタの編集画面に貼り付けすると、ファイルのパス名を貼り付けします。

      複数ファイルからの貼り付けは、複数行で貼り付き、改行コードは入力改行コード指定に従います。
      -

      ファイルやフォルダの右ドロップ

      +

      ファイルやフォルダーの右ドロップ

      参照:右ドロップ

      アイコンからドロップ

      diff --git a/help/sakura/res/HLP000260.html b/help/sakura/res/HLP000260.html index 49a954a936..1e28d8c898 100644 --- a/help/sakura/res/HLP000260.html +++ b/help/sakura/res/HLP000260.html @@ -11,7 +11,7 @@

      アプリアイコンの変更手順

      -サクラエディタと同じフォルダ(あるいは設定フォルダ)にアイコンファイルを置くとタイトルバーのアイコンを変更できます。(sakura:1.3.5.8以降)
      +サクラエディタと同じフォルダー(あるいは設定フォルダー)にアイコンファイルを置くとタイトルバーのアイコンを変更できます。(sakura:1.3.5.8以降)
      ファイル名は"my_appicon.ico"と"my_grepicon.ico"です。
      さらに、タイプ別設定 『スクリーン』プロパティではエクスプローラで表示されるファイルタイプに関連付けられたアイコンに設定することもできます。
      diff --git a/help/sakura/res/HLP000261.html b/help/sakura/res/HLP000261.html index 3208854f83..e29149ce34 100644 --- a/help/sakura/res/HLP000261.html +++ b/help/sakura/res/HLP000261.html @@ -66,11 +66,11 @@

      拡張ツール

      ダイレクトタグジャンプのtagsファイル生成に必要です。(インストーラパッケージには含まれています)
      Migemo.dll
      -
      日本語インクリメンタルサーチのために必要です。同梱のdictフォルダも必要です。
      +
      日本語インクリメンタルサーチのために必要です。同梱のdictフォルダーも必要です。
      PPA.DLL
      PPAマクロの実行に必要です。
      -いずれもsakura.exeと同じフォルダに置いてください。
      +いずれもsakura.exeと同じフォルダーに置いてください。
      diff --git a/help/sakura/res/HLP000268.html b/help/sakura/res/HLP000268.html index 71384daf8f..1bc0522ce4 100644 --- a/help/sakura/res/HLP000268.html +++ b/help/sakura/res/HLP000268.html @@ -544,7 +544,7 @@

      マクロ専用関数/変数

      ■ function FileOpenDialog( str1 :String, str2 :String ) :String; []
      引数
      -str1    既定のファイルまたはフォルダパス
      +str1    既定のファイルまたはフォルダーパス
      str2    フィルタ文字列
      戻り値
      選択ファイルパス名。キャンセル押下時は空文字列
      @@ -556,7 +556,7 @@

      マクロ専用関数/変数

      ■ function FileSaveDialog( str1 :String, str2 :String ) :String; []
      引数
      -str1    既定のファイルまたはフォルダパス
      +str1    既定のファイルまたはフォルダーパス
      str2    フィルタ文字列
      戻り値
      選択ファイルパス名。キャンセル押下時は空文字列
      @@ -569,11 +569,11 @@

      マクロ専用関数/変数

      引数
      str1    表示メッセージ
      -str2    既定のファイルまたはフォルダパス
      +str2    既定のファイルまたはフォルダーパス
      戻り値
      選択ファイルパス名。キャンセル押下時は空文字列
      解説
      -フォルダを開くダイアログを表示します。
      +フォルダーを開くダイアログを表示します。
      sakura:2.0.3.0以降

      diff --git a/help/sakura/res/HLP000270.html b/help/sakura/res/HLP000270.html index 4991deb0a1..c1495f8df5 100644 --- a/help/sakura/res/HLP000270.html +++ b/help/sakura/res/HLP000270.html @@ -26,7 +26,7 @@

      マクロ記載例

      InsText( "<br />" ); // S_ はあってもなくても動作します。
      // キーマクロではExpandParameter は使えません

      ExecCommand('echo $f($x,$y)', 3); // ExecCommandでも同様の処理が行われます。
      -ExecCommand('dir /b', 3); // 外部コマンド実行で、現在のフォルダのファイル一覧を取込
      +ExecCommand('dir /b', 3); // 外部コマンド実行で、現在のフォルダーのファイル一覧を取込

      ■例2: WSH(JScript)
      // コメント
      diff --git a/help/sakura/res/HLP000272.html b/help/sakura/res/HLP000272.html index 7b3d9ee644..01ef8d8424 100644 --- a/help/sakura/res/HLP000272.html +++ b/help/sakura/res/HLP000272.html @@ -11,13 +11,13 @@

      メタ文字列の仕様

      -メタ文字列はWindowsに設定された特殊なフォルダを指定するときに使います。
      -また、サクラエディタの実行ファイルのあるフォルダも指定可能です。
      +メタ文字列はWindowsに設定された特殊なフォルダーを指定するときに使います。
      +また、サクラエディタの実行ファイルのあるフォルダーも指定可能です。
      ファイル名の簡易表示で使えます。
      1. %% … %(パーセント記号) -
      2. %SAKURA% … 実行ファイル(sakura.exe)があるフォルダ -
      3. %SAKURADATA% … 設定ファイル(sakura.ini)があるフォルダ(sakura:1.6.6.0以降) +
      4. %SAKURA% … 実行ファイル(sakura.exe)があるフォルダー +
      5. %SAKURADATA% … 設定ファイル(sakura.ini)があるフォルダー(sakura:1.6.6.0以降)
      6. エクスプローラ(シェル)のパス
            HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Foldersの値
            HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Foldersの値
        diff --git a/help/sakura/res/HLP000275.html b/help/sakura/res/HLP000275.html index fb20feec0f..0f92be4b1b 100644 --- a/help/sakura/res/HLP000275.html +++ b/help/sakura/res/HLP000275.html @@ -12,7 +12,7 @@

        開く(ドロップダウン)

        ツールバー用の機能です。
        -ツールバーの開くボタンの横に、最近使ったファイルのリストとその下に最近使ったフォルダ新規作成開くのドロップダウンメニューが表示されます。
        +ツールバーの開くボタンの横に、最近使ったファイルのリストとその下に最近使ったフォルダー新規作成開くのドロップダウンメニューが表示されます。
        それ以外は「開く」と同じです。
        カスタムメニューに登録した場合は、開くボタンと同じ動作になります。

        diff --git a/help/sakura/res/HLP000277.html b/help/sakura/res/HLP000277.html index bc0780b466..dd5b3305c3 100644 --- a/help/sakura/res/HLP000277.html +++ b/help/sakura/res/HLP000277.html @@ -32,7 +32,7 @@

        共通設定 『ファイル名表示』プロパティ


        ComFileName

        -ファイル名またはフォルダ名の文字列中の、「置換前文字列」を「置換後文字列」に置き換えて表示します。
        +ファイル名またはフォルダー名の文字列中の、「置換前文字列」を「置換後文字列」に置き換えて表示します。
        設定された項目の0番目(上)の条件から順に置換を実行していきます。
        1番目以降はそれより前に置換された文字列を元に再び置換します。
        大文字小文字は区別しません。
        @@ -41,7 +41,7 @@

        共通設定 『ファイル名表示』プロパティ

        ・アクティブ時のウィンドウタイトルのファイル名 ($N: 初期設定時、変更可能)
        ・最近使ったファイル
        -・最近使ったフォルダ
        +・最近使ったフォルダー
        ・メニューのウィンドウ一覧
        ・トレイメニューの一覧
        ・タブのパス名一覧
        @@ -50,9 +50,9 @@

        共通設定 『ファイル名表示』プロパティ


        長いパスの省略表示
        -長いファイル名またはフォルダ名の文字列を省略表示することができます。
        +長いファイル名またはフォルダー名の文字列を省略表示することができます。
        省略表示は、下記の簡易表示を適用した後の文字列に対して適用されます。
        -まずフォルダ部分が省略され「C:\...\subdir\file.ext」のような表示になります。
        +まずフォルダー部分が省略され「C:\...\subdir\file.ext」のような表示になります。
        ファイル名部分が長い場合は「C:\...\longfile...ext」のような表示になります。
        文字数
        @@ -84,6 +84,6 @@

        共通設定 『ファイル名表示』プロパティ

        [削除]ボタン
        置換条件一覧で選択した条件を削除します。

        -[設定フォルダ]
        -設定フォルダボタンは、ユーザー別設定を行っている場合のみ表示されます。
        +[設定フォルダー]
        +設定フォルダーボタンは、ユーザー別設定を行っている場合のみ表示されます。
        diff --git a/help/sakura/res/HLP000278.html b/help/sakura/res/HLP000278.html index e7f6f80767..2ecc58f403 100644 --- a/help/sakura/res/HLP000278.html +++ b/help/sakura/res/HLP000278.html @@ -22,7 +22,7 @@

        ダイレクトタグジャンプの使い方

        ver 2.4.0.0 以前の場合
        -以下のいずれかの ctags をダウンロードして ctags.exeを sakura.exe と同一フォルダに置きます。
        +以下のいずれかの ctags をダウンロードして ctags.exeを sakura.exe と同一フォルダーに置きます。
        • Universal Ctags (現在積極的に開発されている)
        • @@ -32,7 +32,7 @@

          ダイレクトタグジャンプの使い方

          Universal Ctags には x86版 (32bit)と x64版(64bit) があります。sakura.exe と同じタイプ(x86版 or x64版)をダウンロードします。
          Exuberant Ctags の場合 Win32版をダウンロードします。

          -アーカイブに含まれている ctags.exe を sakura.exeと同一フォルダに置きます。
          +アーカイブに含まれている ctags.exe を sakura.exeと同一フォルダーに置きます。


      @@ -42,7 +42,7 @@

      ダイレクトタグジャンプの使い方

      ダイアログボックスでタグファイルの作成位置とオプションを指定してOKを押すとtagsファイルが生成されます。

      サブディレクトリを含むダイレクトタグジャンプを使う場合は,対象とするディレクトリすべてを配下に含むディレクトリをtags作成先に指定してください。
      -また作成時に「サブフォルダも対象にする」オプションにチェックを入れてください。
      +また作成時に「サブフォルダーも対象にする」オプションにチェックを入れてください。
      そのディレクトリ配下のファイル間でダイレクトタグジャンプができるようになります。

      tagsファイルにはキーワードと行番号の対応が保存されています。
      diff --git a/help/sakura/res/HLP000279.html b/help/sakura/res/HLP000279.html index d56a21b371..22c49a2d84 100644 --- a/help/sakura/res/HLP000279.html +++ b/help/sakura/res/HLP000279.html @@ -13,12 +13,12 @@

      履歴の管理

      -最近使ったファイルおよびフォルダにお気に入りを設定します。
      -お気に入りに設定したものは、最近使ったファイルおよびフォルダメニューにマークが付きます。
      -お気に入りのファイルおよびフォルダは、履歴から消えることはありません。
      +最近使ったファイルおよびフォルダーにお気に入りを設定します。
      +お気に入りに設定したものは、最近使ったファイルおよびフォルダーメニューにマークが付きます。
      +お気に入りのファイルおよびフォルダーは、履歴から消えることはありません。

      -ファイル・フォルダ除外で最近使ったファイル・フォルダへの登録を除外することができます。
      -除外する前に最近使ったファイル・フォルダへ追加されていたものはそのまま残ります。
      +ファイル・フォルダー除外で最近使ったファイル・フォルダーへの登録を除外することができます。
      +除外する前に最近使ったファイル・フォルダーへ追加されていたものはそのまま残ります。

      Favorite
      [追加]ボタン
      @@ -33,7 +33,7 @@

      履歴の管理

      お気に入り以外の履歴を削除します。

      [存在しない項目]ボタン
      -存在しないファイルやフォルダの履歴を削除します。
      +存在しないファイルやフォルダーの履歴を削除します。

      [選択項目]ボタン
      選択行の履歴を削除します。
      @@ -46,7 +46,7 @@

      履歴の管理

      新規に項目を追加します。

      [除外リストに追加]メニュー
      -選択中の項目を履歴ファイル・フォルダ除外へ追加します。
      +選択中の項目を履歴ファイル・フォルダー除外へ追加します。

      各項目はDelキーでも削除できます。

      diff --git a/help/sakura/res/HLP000280.html b/help/sakura/res/HLP000280.html index 0c4e323edf..506582ab4d 100644 --- a/help/sakura/res/HLP000280.html +++ b/help/sakura/res/HLP000280.html @@ -13,7 +13,7 @@

      タグファイルの作成

      ダイレクトタグジャンプで使用するタグファイルを作成します。
      -タグファイルは現在開いているファイルがあるフォルダから、ルート(C:\など)に向かって探して行き、途中で見つけたすべての「tags」というファイルを使います。
      +タグファイルは現在開いているファイルがあるフォルダーから、ルート(C:\など)に向かって探して行き、途中で見つけたすべての「tags」というファイルを使います。

      TagsMake

      diff --git a/help/sakura/res/HLP000284.html b/help/sakura/res/HLP000284.html index a658d14e75..7988d2155e 100644 --- a/help/sakura/res/HLP000284.html +++ b/help/sakura/res/HLP000284.html @@ -36,8 +36,8 @@

      特殊記号

      $N 開いているファイルの名前(簡易表示)
              例:ソース\Main.cpp(設定によります)
      $n 無題の通し番号 (sakura:2.0.6.0以降)
      -$E 開いているファイルのあるフォルダの名前(簡易表示) (sakura:2.0.6.0以降)
      -$e 開いているファイルのあるフォルダの名前 (sakura:2.0.6.0以降)
      +$E 開いているファイルのあるフォルダーの名前(簡易表示) (sakura:2.0.6.0以降)
      +$e 開いているファイルのあるフォルダーの名前 (sakura:2.0.6.0以降)
      $B タイプ別設定の名前 (sakura:2.0.7.0以降)
      $b 開いているファイルの拡張子 (sakura:2.0.7.0以降)
      $Q 印刷ページ設定の名前 (sakura:2.0.7.0以降)
      diff --git a/help/sakura/res/HLP000315.html b/help/sakura/res/HLP000315.html index 301ff49db9..1a8ddeb693 100644 --- a/help/sakura/res/HLP000315.html +++ b/help/sakura/res/HLP000315.html @@ -32,7 +32,7 @@

      タイプ別設定 『キーワードヘルプ』プロパティ


      [辞書ファイル]
      挿入したい辞書ファイルを指定します。
      -フルパスまたは設定フォルダからの相対パスです。
      +フルパスまたは設定フォルダーからの相対パスです。

      [インポート], [エクスポート]ボタン
      キーワードヘルプ設定のインポート/エクスポートができます。
      @@ -59,6 +59,6 @@

      タイプ別設定 『キーワードヘルプ』プロパティ

      [選択範囲で前方一致検索]チェックボックス
      選択範囲のキーワードで前方一致検索します。

      -[設定フォルダ]
      -設定フォルダボタンは、ユーザー別設定を行っている場合のみ表示されます。
      +[設定フォルダー]
      +設定フォルダーボタンは、ユーザー別設定を行っている場合のみ表示されます。
      diff --git a/help/sakura/res/HLP000319.html b/help/sakura/res/HLP000319.html index fb03ad103c..d020613927 100644 --- a/help/sakura/res/HLP000319.html +++ b/help/sakura/res/HLP000319.html @@ -40,7 +40,7 @@

      タイプ別設定 『ウィンドウ』プロパティ


      文書アイコンを使う
      -エディタのアイコンを文書に関連づけられたもの(フォルダで表示されるもの)に変更します。
      +エディタのアイコンを文書に関連づけられたもの(フォルダーで表示されるもの)に変更します。

      <行番号の表示>
      行番号の表示を「○折り返し単位」と「◎改行単位」から選べます。
      @@ -88,6 +88,6 @@

      タイプ別設定 『ウィンドウ』プロパティ


      -[設定フォルダ]
      -設定フォルダボタンは、ユーザー別設定を行っている場合のみ表示されます。
      +[設定フォルダー]
      +設定フォルダーボタンは、ユーザー別設定を行っている場合のみ表示されます。
      diff --git a/help/sakura/res/HLP000358.html b/help/sakura/res/HLP000358.html index 66ebf06372..da8470b458 100644 --- a/help/sakura/res/HLP000358.html +++ b/help/sakura/res/HLP000358.html @@ -11,9 +11,9 @@

      表示言語の切り替え

      -サクラエディタと同じフォルダに言語DLLを置くとエディタの表示言語を変更できます。(sakura:2.1.1.0以降)
      +サクラエディタと同じフォルダーに言語DLLを置くとエディタの表示言語を変更できます。(sakura:2.1.1.0以降)
      ファイル名は"sakura_lang_(言語名).dll"です。
      -言語DLLをサクラエディタと同じフォルダに置き、共通設定 『ウィンドウ』プロパティで言語を選択しOKを押すと表示言語が切り替わります。
      +言語DLLをサクラエディタと同じフォルダーに置き、共通設定 『ウィンドウ』プロパティで言語を選択しOKを押すと表示言語が切り替わります。

      hintヒント
      メニュー名が切り替わらないときは、共通設定 『メインメニュー』プロパティにて「初期設定」ボタンを押すことで切り替わります。
      diff --git a/help/sakura/res/HLP000362.html b/help/sakura/res/HLP000362.html index 15b844aa14..b45fd7432f 100644 --- a/help/sakura/res/HLP000362.html +++ b/help/sakura/res/HLP000362.html @@ -15,7 +15,7 @@

      Grep置換

      GrepReplace
      ディスクにある複数のファイルから、指定した文字列を検索・置換することができます。(sakura:2.2.0.0以降)
      -指定したフォルダの下層のフォルダを全て置換することもできます。
      +指定したフォルダーの下層のフォルダーを全て置換することもできます。
      サクラエディタ自身や他のプログラムが排他制御で書き込み禁止の場合、改名処理に失敗します。
      以下の手順で置換処理を実行します。
      @@ -39,26 +39,26 @@

      Grep置換

      カンマ、スペース、セミコロン(, ;)のどれかで区切ると複数の条件を指定できます。
      ファイル名に(, ;)を含む場合は、ダブルクオーテーションで囲うことで、ひとつのファイル名として扱えます。
      ファイルパターンの先頭に!を付ける(例: !*.obj)と,そのパターンに当たるファイルをGrep対象から外します。
      - ファイルパターンの先頭に#を付ける(例: #*.svn)と、そのパターンに当たるサブフォルダをGrep対象から外します。
      + ファイルパターンの先頭に#を付ける(例: #*.svn)と、そのパターンに当たるサブフォルダーをGrep対象から外します。
      指定位置にかかわらず除外指定は検索指定より優先されます.
      何も指定しない場合は、「*.*」を指定したことになります。
      - (フォルダ) … 検索対象ファイルのあるフォルダを指定します。エクスプローラなどからのフォルダのドロップも受け付けます。
      - 複数フォルダを;で区切って指定することができます。;を含むフォルダを指定する場合は""で囲ってください。
      + (フォルダー) … 検索対象ファイルのあるフォルダーを指定します。エクスプローラなどからのフォルダーのドロップも受け付けます。
      + 複数フォルダーを;で区切って指定することができます。;を含むフォルダーを指定する場合は""で囲ってください。
      (除外ファイル) … 検索対象から外すファイルパターンを指定します。
      (ファイル) で ファイルパターンの先頭に!を付ける ことにより除外ファイルを指定できるのを簡単に使えるようにするものです。
      ファイルパターンを;で区切って指定することができます。;を含むファイルパターンを指定する場合は""で囲ってください。(sakura:2.4.0.0以降)
      - (除外フォルダ) … 検索対象から外すフォルダパターンを指定します。
      - (ファイル) で ファイルパターンの先頭に#を付ける ことにより除外フォルダを指定できるのを簡単に使えるようにするものです。
      - フォルダパターンを;で区切って指定することができます。;を含むフォルダパターンを指定する場合は""で囲ってください。(sakura:2.4.0.0以降)
      + (除外フォルダー) … 検索対象から外すフォルダーパターンを指定します。
      + (ファイル) で ファイルパターンの先頭に#を付ける ことにより除外フォルダーを指定できるのを簡単に使えるようにするものです。
      + フォルダーパターンを;で区切って指定することができます。;を含むフォルダーパターンを指定する場合は""で囲ってください。(sakura:2.4.0.0以降)
      単語単位で探す
          単語として識別するもののみ検索します。
          スペースなどで区切ると複数単語検索が行えます。
      - ■サブフォルダからも検索する
      -     指定フォルダの下層フォルダからも検索するかどうかを指定します。
      + ■サブフォルダーからも検索する
      +     指定フォルダーの下層フォルダーからも検索するかどうかを指定します。
      英大文字と小文字を区別する
          半角英字の大文字と小文字を区別して検索するかどうかを指定します。
      @@ -66,16 +66,16 @@

      Grep置換

      ファイル毎最初のみ検索 … ファイル毎に1回だけ結果を出力します。
      - □ベースフォルダ表示 … ルートフォルダの表示とそこからの相対パスで出力します。
      + □ベースフォルダー表示 … ルートフォルダーの表示とそこからの相対パスで出力します。
      - □フォルダ毎に表示 … サブフォルダ毎にパスをまとめて相対パスで出力します。
      + □フォルダー毎に表示 … サブフォルダー毎にパスをまとめて相対パスで出力します。
      文字コードセット
          検索対象となるファイルの文字コードセットを選択します。
          自動選択、SJIS、JIS、EUC、Latin1(Windows-1252)、UTF-16、UTF-16BE、UTF-8、CESU-8、UTF-7、コードページから選択します。
      - □フォルダの初期値をカレントフォルダにする
      -     現在開いているファイルがあるフォルダを(フォルダ)の初期値にします。次回のダイアログ表示時に反映されます。
      + □フォルダーの初期値をカレントフォルダーにする
      +     現在開いているファイルがあるフォルダーを(フォルダー)の初期値にします。次回のダイアログ表示時に反映されます。
      正規表現 … 検索条件に、正規表現を使うかどうかを指定します。
      @@ -101,10 +101,10 @@

      Grep置換

      [上]ボタン
      -     フォルダを1階層上に設定します。
      +     フォルダーを1階層上に設定します。
      - [現フォルダ]ボタン
      -     このボタンを押すと現在開いているファイルを元に「フォルダ」を設定します。
      + [現フォルダー]ボタン
      +     このボタンを押すと現在開いているファイルを元に「フォルダー」を設定します。

      @@ -120,13 +120,13 @@

      Grep置換

          str1    検索文字列
          str2    置換後文字列
          str3    検索対象にするファイル名
      -    str4    検索対象にするフォルダ名
      +    str4    検索対象にするフォルダー名
          int5    オプション(省略可能、ただしPPAマクロは省略不可)
          int6    文字コードセット(省略可能、ただしPPAマクロは省略不可)
      ・記録: ○
      ・解説
      オプションには以下の値の組み合わせを指定できます。
      -    0x01    サブフォルダからも検索する(省略時規定値)
      +    0x01    サブフォルダーからも検索する(省略時規定値)
          0x02    この編集中のテキストから検索する(未実装)
          0x04    英大文字と英小文字を区別する(省略時規定値)
          0x08    正規表現
      @@ -151,8 +151,8 @@

      Grep置換

          0x6300    自動選択
          0x010000;  単語単位で探す
          0x020000;  ファイル毎最初のみ検索
      -    0x040000;  ベースフォルダ表示
      -    0x080000;  フォルダ毎に表示
      +    0x040000;  ベースフォルダー表示
      +    0x080000;  フォルダー毎に表示
          0x100000;  クリップボードから貼り付ける
          0x200000;  バックアップ作成
      文字コード自動判別を設定した場合と文字コードセットを 自動選択にした場合の動作は同じです。
      diff --git a/help/sakura/res/HLP000363.html b/help/sakura/res/HLP000363.html index adc79c0aa7..aa24d9edaf 100644 --- a/help/sakura/res/HLP000363.html +++ b/help/sakura/res/HLP000363.html @@ -13,10 +13,10 @@

      プロファイルマネージャ

      プロファイルマネージャを表示します。
      マルチプロファイル機能は、サクラエディタの設定を複数使い分けることができるようになるものです。
      -各設定は、設定フォルダ(従来のsakura.iniがおかれているフォルダ)にプロファイル名のサブフォルダを作成し、 -それぞれのサブフォルダ内に各設定ファイル・sakura.ini・マクロ・プラグインを置くことができます。
      -従来の設定フォルダにじかにおかれているsakura.iniは「(default)」と表示されます。
      -プロファイルマネージャの設定は、設定フォルダの[実行ファイル名]_prof.iniに書き込まれます。
      +各設定は、設定フォルダー(従来のsakura.iniがおかれているフォルダー)にプロファイル名のサブフォルダーを作成し、 +それぞれのサブフォルダー内に各設定ファイル・sakura.ini・マクロ・プラグインを置くことができます。
      +従来の設定フォルダーにじかにおかれているsakura.iniは「(default)」と表示されます。
      +プロファイルマネージャの設定は、設定フォルダーの[実行ファイル名]_prof.iniに書き込まれます。

      (プロファイル名一覧)
      @@ -24,11 +24,11 @@

      プロファイルマネージャ

      *が付いているものは、コマンドラインで-PROF=未指定時のデフォルト起動のプロファイルです。
      実際に存在するプロファイル一覧とここに表示される一覧は異なることがあります。
      [新規作成]
      -新しくプロファイル一覧に名前を登録します。サブフォルダの実体は作成しません。
      +新しくプロファイル一覧に名前を登録します。サブフォルダーの実体は作成しません。
      [名前変更]
      -現在一覧で選択されているプロファイル名の名前を変更します。サブフォルダの実体がある場合、フォルダの名前の変更も行います。
      +現在一覧で選択されているプロファイル名の名前を変更します。サブフォルダーの実体がある場合、フォルダーの名前の変更も行います。
      [削除]
      -現在一覧で選択されているプロファイル名の名前を削除します。サブフォルダの実体は削除しません。
      +現在一覧で選択されているプロファイル名の名前を削除します。サブフォルダーの実体は削除しません。
      [デフォルト設定]
      現在一覧で選択されているプロファイル名をデフォルト起動のプロファイルに設定します。
      [デフォルト解除]
      diff --git a/help/sakura/res/HLP000368.html b/help/sakura/res/HLP000368.html index 8a00b4d3e2..252bb5daca 100644 --- a/help/sakura/res/HLP000368.html +++ b/help/sakura/res/HLP000368.html @@ -12,7 +12,7 @@

      ファイルツリー

      ファイルツリーを表示します。(sakura:2.2.0.0以降)
      -デフォルトでは、各ファイルのあるフォルダ以下のファイル一覧が表示されます。
      +デフォルトでは、各ファイルのあるフォルダー以下のファイル一覧が表示されます。
      各ファイルは、ダブルクリックでそのファイルを開くことができます。
      設定は、アウトラインドッキングの「タイプ別継承」「共通継承」に連動しています。
      [設定]ボタンを押すと、設定画面が表示されます。
      @@ -26,7 +26,7 @@

      ファイルツリー

      「設定: 共通設定」 : 現在の表示は全ウィンドウで共通設定になっています。
      「設定: (タイプ別/共通)設定+ファイル」 : デフォルト設定ファイルを読み込んでいます。
      「設定: <ファイル名>」 : 各ディレクトリの_sakurafiletree.iniを読み込んでいます。
      -■各フォルダの設定を読み込む
      +■各フォルダーの設定を読み込む
      開いているファイルの上位ディレクトリにある_sakurafiletree.iniを読み込むかどうか設定できます。
      この項目はタイプ別・共通設定のみに保存され、iniには保存されません。
      デフォルト設定ファイル名
      @@ -42,26 +42,26 @@

      ファイルツリー

      追加するアイテムの種類を指定します。
      ・Grep
      -指定フォルダ以下のファイル一覧をツリー形式で追加します。 +指定フォルダー以下のファイル一覧をツリー形式で追加します。
      ・ファイル
      特定ファイルを1つ追加します。
      -・フォルダ
      +・フォルダー
      -ツリーの仮想サブフォルダを1つ追加します。 +ツリーの仮想サブフォルダーを1つ追加します。
      パス
      -アイテムのパスを指定します。Grepの場合はフォルダのパスです。種類がファイルの場合はファイルのパスです。
      +アイテムのパスを指定します。Grepの場合はフォルダーのパスです。種類がファイルの場合はファイルのパスです。
      「.」で現在開いているファイルからのカレントディレクトリを指定できます。
      -「<iniroot>」で、現在の設定ファイルのフォルダを指定できます。
      +「<iniroot>」で、現在の設定ファイルのフォルダーを指定できます。
      他には、メタ文字列を指定可能です。
      ラベル
      ツリーに表示する表示名を指定します。
      省略した場合、フルパスが表示されます。
      ファイル
      -Grepタイプのときの、表示に追加するファイル・サブフォルダをGrepのファイル指定と同じ書式で指定します。
      +Grepタイプのときの、表示に追加するファイル・サブフォルダーをGrepのファイル指定と同じ書式で指定します。
      非表示属性
      隠しファイル・読み取り専用・システムファイルからチェックした属性を持つファイルをGrep結果から除外します。

      @@ -74,7 +74,7 @@

      ファイルツリー

      [>>]
      一番下に画面左側で設定したアイテムを追加します。
      [更新]
      -現在選択しているアイテムの内容を画面左側で設定したアイテムで更新します。フォルダにGrep・ファイルは更新できません。
      +現在選択しているアイテムの内容を画面左側で設定したアイテムで更新します。フォルダーにGrep・ファイルは更新できません。
      [ファイル挿入]
      複数ファイル一括してダイアログで選択して、現在選択しているアイテムの下側に追加します。
      [パスの一括置換]
      diff --git a/help/sakura/res/HLP000380.html b/help/sakura/res/HLP000380.html index fb31898ec7..57dbd8e8aa 100644 --- a/help/sakura/res/HLP000380.html +++ b/help/sakura/res/HLP000380.html @@ -4,15 +4,15 @@ -このファイルのフォルダ名をコピー - +このファイルのフォルダー名をコピー + -

      このファイルのフォルダ名をコピー

      -現在編集中のファイルのフォルダ名をクリップボードへコピーします。
      +

      このファイルのフォルダー名をコピー

      +現在編集中のファイルのフォルダー名をクリップボードへコピーします。

      マクロ構文
      ・構文: CopyDirPath( );
      diff --git a/help/sakura/res/HLP000400.html b/help/sakura/res/HLP000400.html index 68f80b7eb7..cbec97cced 100644 --- a/help/sakura/res/HLP000400.html +++ b/help/sakura/res/HLP000400.html @@ -23,7 +23,7 @@

      タスクトレイメニュー

    • 開く(O)...
    • Grep(G)...
    • 最近使ったファイル(F)...
    • -
    • 最近使ったフォルダ(D)...
    • +
    • 最近使ったフォルダー(D)...
    • すべて上書き保存(Z)
    • (ウィンドウリスト)(1~0A~Z)
    • 編集の全終了(Q)
    • diff --git a/help/sakura/res/HLP000500.html b/help/sakura/res/HLP000500.html index 6e548fd92c..be50c27159 100644 --- a/help/sakura/res/HLP000500.html +++ b/help/sakura/res/HLP000500.html @@ -57,6 +57,6 @@

      「設定(O)」メニュー

      文字コードセット指定(A)
      入力改行コード指定(E)Delta

      -・設定フォルダ(/)Delta
      +・設定フォルダー(/)Delta

      diff --git a/help/sakura/res/HLP_RELEASE.html b/help/sakura/res/HLP_RELEASE.html index 00b2deca6f..4dd2e487ea 100644 --- a/help/sakura/res/HLP_RELEASE.html +++ b/help/sakura/res/HLP_RELEASE.html @@ -157,14 +157,14 @@

      リリース履歴(1999/04/01~)


      ◆Ver 0.3.8.1 1999.10.04
      -・設定はsakura.exeと同じフォルダのsakura.iniに保存するよう変更
      +・設定はsakura.exeと同じフォルダーのsakura.iniに保存するよう変更
      ・URL上、選択テキスト、Drag&Drop中のマウスカーソル形状を変えた
      ・スクロールバー操作時のスクロール処理の改善
      ・選択テキストをDrag&Dropで移動またはコピーする機能
      ・印刷ページ設定で行あたりの文字数と縦方向の行数を表示するようにした
      ・「開く」「名前をつけて保存」ダイアログのサイズを小さくした
      -・マクロ保存・読み込みのフォルダの保存
      -・設定インポート・エクスポートフォルダの保存
      +・マクロ保存・読み込みのフォルダーの保存
      +・設定インポート・エクスポートフォルダーの保存
      ・アウトラインダイアログのリサイズ
      ・折り返しを変更してもUndo/Redoバッファをクリアしないようにした
      ・WZ風のGrepの出力形式を追加
      @@ -190,7 +190,7 @@

      リリース履歴(1999/04/01~)

      ・コンパイラをVC++6.0 Standard Editionに戻した。(プロパティシートの問題へ対応できたら良いな)
      ・キーマクロ記録で上下カーソル移動が正しく記録、実行されない不具合
      ・ときどきカーソルが消える不具合を一部修正
      -・フォルダを送ったりドロップしたら、落ちる不具合
      +・フォルダーを送ったりドロップしたら、落ちる不具合
      ・マウスのホイール操作対応
      ・タスクトレイへ常駐しない設定、タスクトレイを使わない設定が可能になった
      ・「Oracle SQL*Plusをアクティブ表示」機能追加
      @@ -202,7 +202,7 @@

      リリース履歴(1999/04/01~)


      ◆Ver 0.3.7.2 1999.08.27
      -・指定フォルダへバックアップするときのファイル名生成の不具合
      +・指定フォルダーへバックアップするときのファイル名生成の不具合
      ・常駐したままWindowsを終了すると、設定が保存されない
      ・印刷用紙サイズ取得の不具合
      ・フラットツールバーのボタンが上にずれている不具合
      @@ -234,7 +234,7 @@

      リリース履歴(1999/04/01~)

      ◇1999.08.18
      ・タイプ別設定のダイアログで、プロックコメントの開始と終端の入力エリアがありますが、左右が逆になっている不具合
      ・ウィンドウ幅より折り返し文字数の幅が小さいときでも、右端付近でスクロールしてしまう不具合
      -・開いたフォルダ、検索文字列、置換後文字列、Grep対象ファイル、Grep対象フォルダ が正しく保存されない不具合
      +・開いたフォルダー、検索文字列、置換後文字列、Grep対象ファイル、Grep対象フォルダー が正しく保存されない不具合
      ◇1999.08.17
      ・なんとなくバージョン番号を上げました
      ・設定(共通設定、フォント設定)が、レジストリに保存されない不具合
      @@ -316,7 +316,7 @@

      リリース履歴(1999/04/01~)

      ◇1999.06/01
      ・強調キーワード編集機能を追加
      -・最近開いたファイル、フォルダ:履歴の削除機能、履歴の最大数の設定機能を追加
      +・最近開いたファイル、フォルダー:履歴の削除機能、履歴の最大数の設定機能を追加

      ◆Ver 0.3.1.0
      diff --git a/help/sakura/res/HLP_UR002.html b/help/sakura/res/HLP_UR002.html index 7aaa82aa46..ead76b0627 100644 --- a/help/sakura/res/HLP_UR002.html +++ b/help/sakura/res/HLP_UR002.html @@ -63,7 +63,7 @@

      変更履歴(2000/05/12~)

      ・ショートカットをいくつか追加&変更
      ・各ダイアログでのタブ移動や矢印キーでの移動にもかなり配慮したつもり
      ・コマンド一覧表示のとき下がステータスバーを隠してしまうので真ん中に移動
      -・ファイルとフォルダの履歴MAXを30から36に変更(0-9とA-Zで36個になるので(^_^;))
      +・ファイルとフォルダーの履歴MAXを30から36に変更(0-9とA-Zで36個になるので(^_^;))
      ・縦横分割が解除可能の時はそのようなメッセージになるように変更
      ・上とは逆にツールバーやファンクションキーなどを隠すことができる時にメッセージが「隠す」となっていてかつチェックが付いているのは違和感があるのでメッセージを変えないようにした.これは特に[アイコン付きメニュー]OFF時、Win標準と異なる仕様になって「ん?」なのです.
      ・[タイプ別設定]‐[テキスト]の[折り返し桁数]を80→120に増やした
      @@ -112,7 +112,7 @@

      変更履歴(2000/05/12~)


      Aug 23, 2000 (β6)
      -・「ファイル」メニューにあるファイルとフォルダの履歴にも0~9, A~Zのアクセスキーを付けた.
      +・「ファイル」メニューにあるファイルとフォルダーの履歴にも0~9, A~Zのアクセスキーを付けた.

      Aug. 22, 2000 (β5)
      diff --git a/help/sakura/res/HLP_UR003.html b/help/sakura/res/HLP_UR003.html index e3e8d4bbbf..5d08860d2e 100644 --- a/help/sakura/res/HLP_UR003.html +++ b/help/sakura/res/HLP_UR003.html @@ -147,7 +147,7 @@

      変更履歴(2000/10/10~)

      ・[タイプ別設定]-[スクリーン]で行間の下限を0に設定出来なかった不具合を修正(0に設定すればちょっと表示行が増えます.デフォルトでは1)
      ・[指定行へジャンプ]の設定でPL/SQLエラー行の数値入力のところに反転表示が残ってしまう不具合を修正
      -・ファイルやフォルダ名に&があるとき、[最近使った...]で&が正しく表示できず、アクセスキーに下線が付かない不具合を&2倍化法(&→&&)で暫定修正(実際にはアクセスキーは今でも有効です)
      +・ファイルやフォルダー名に&があるとき、[最近使った...]で&が正しく表示できず、アクセスキーに下線が付かない不具合を&2倍化法(&→&&)で暫定修正(実際にはアクセスキーは今でも有効です)
      ・[ファイル比較]で比較元ファイル名が長いとき表示し切れなかった不具合を2行に折り曲げるよう修正
      ・同[カラー]-[色指定]のアクセスキーLで[インポート]になってしまう不具合を修正
      ・[共通設定]-[キー割り当て]で[Enter]が2つ入っていたので1つ削除
      @@ -173,7 +173,7 @@

      変更履歴(2000/10/10~)

      ・デフォルト設定の変更
      ・テキストの色 RGB(255,255,255) (真っ白)→ RGB(255,251,240) (ほんのりsakura色)
      -・[ファイル(フォルダ)の履歴MAX]を10→15に増やした
      +・[ファイル(フォルダー)の履歴MAX]を10→15に増やした
      ・ツールバーに[置換]、[コマンド一覧]を追加
      ・[右クリックメニュー]に[タグジャンプ]、[タグジャンプバック]、[選択範囲内全行コピー]、[選択範囲内全行引用符付きコピー]を追加
      ・メニューバーの第一階層のアクセスキーとショートカットキーを追加&変更
      diff --git a/help/sakura/res/HLP_UR004.html b/help/sakura/res/HLP_UR004.html index 98c4249348..01c215b0b6 100644 --- a/help/sakura/res/HLP_UR004.html +++ b/help/sakura/res/HLP_UR004.html @@ -155,7 +155,7 @@

      変更履歴(2000/11/20~)

      [バグ修正]
      ・[キー割り当て一覧をコピー]にショートカットキーを割り付けても動作しなかった不具合を修正 (by げんた氏)
      -・ファイルやフォルダ名に&があるとき[ウィンドウ]の編集ファイル一覧で&とアクセスキーが正しく表示できなかった不具合を例によって&2倍化法で暫定修正. (誰か本式に修正してくれんかいのー)
      +・ファイルやフォルダー名に&があるとき[ウィンドウ]の編集ファイル一覧で&とアクセスキーが正しく表示できなかった不具合を例によって&2倍化法で暫定修正. (誰か本式に修正してくれんかいのー)

      [デフォルト設定値の追加・変更]
      diff --git a/help/sakura/res/HLP_UR006.html b/help/sakura/res/HLP_UR006.html index b918f872d3..85ff698da1 100644 --- a/help/sakura/res/HLP_UR006.html +++ b/help/sakura/res/HLP_UR006.html @@ -103,7 +103,7 @@

      変更履歴(2001/06/22~)

      子プロセスを監視するツールから使った場合でも編集終了が常に認識されるようになった.

      * コントロールプロセスのカレントディレクトリはシステムディレクトリ.
      -コントロールプロセスのカレントディレクトリが残るためにフォルダが削除できないことが無くなったはず.
      +コントロールプロセスのカレントディレクトリが残るためにフォルダーが削除できないことが無くなったはず.

      * -NOWIN オプションの振る舞い
      既にコントロールプロセスがいる場合には従来はウィンドウを開いていたが,コントロールプロセスの有無に関わらずエディタは開かないようにした.
      diff --git a/help/sakura/res/HLP_UR007.html b/help/sakura/res/HLP_UR007.html index 2348400389..621488f77b 100644 --- a/help/sakura/res/HLP_UR007.html +++ b/help/sakura/res/HLP_UR007.html @@ -181,7 +181,7 @@

      変更履歴(2001/12/03~)


      ・表示に関する問題
      -・Grep検索中画面のフォルダ名表示がサブフォルダから戻ったときに更新されなかったのを修正 (by みくさん)
      +・Grep検索中画面のフォルダー名表示がサブフォルダーから戻ったときに更新されなかったのを修正 (by みくさん)
      ・「ウィンドウサイズ継承」にして殆ど画面一杯にしても、再起動後に開いた時に、ウィンドウが少し小さくなる問題を修正 (by みくさん)
      ・タイトルバーがちらつかないように修正 (by げんた)
      ・正規表現キーワードの一部が検索キーワードに一致すると、検索キーワードの後ろがデフォルトテキスト色になってしまうのを修正 (by みくさん)
      diff --git a/help/sakura/res/HLP_UR008.html b/help/sakura/res/HLP_UR008.html index 1e76299a20..f8fa11450d 100644 --- a/help/sakura/res/HLP_UR008.html +++ b/help/sakura/res/HLP_UR008.html @@ -286,7 +286,7 @@

      変更履歴(2002/02/23~)

      ・行番号表示の桁数が変わるとルーラーの表示がずれるのを修正.(by やざきさん)
      ・WinNTで「ヘルプ」-「目次」が出なくなったのを修正.(by やざきさん/みくさん)
      -・Windows XPでmanifestファイルを使っている場合に共通設定→バックアップを選ぶと、自動的に「フォルダの選択」ダイアログが表示される問題を修正 (by みくさん,げんた)
      +・Windows XPでmanifestファイルを使っている場合に共通設定→バックアップを選ぶと、自動的に「フォルダーの選択」ダイアログが表示される問題を修正 (by みくさん,げんた)
      ・画面最大化時に右下のリサイズ表示がおかしくなるのを修正(by みくさん,やざきさん)

      [その他変更]
      @@ -313,13 +313,13 @@

      変更履歴(2002/02/23~)

      ・行番号表示の桁数が変わるとルーラーの表示がずれる.
      ・WinNTで「ヘルプ」-「目次」が出ない.
      -・Windows XPでmanifestファイルを使っている場合に,「共通設定」-「バックアップ」タブを選択するとフォルダ選択ダイアログが勝手に出てきてしまう.
      +・Windows XPでmanifestファイルを使っている場合に,「共通設定」-「バックアップ」タブを選択するとフォルダー選択ダイアログが勝手に出てきてしまう.

      Feb. 23, 2002 (1.2.106.2)

      [機能追加]
      -・GREPでフォルダの初期値をカレントフォルダにするかどうかを選択可能に (BY horさん)
      +・GREPでフォルダーの初期値をカレントフォルダーにするかどうかを選択可能に (BY horさん)
      ・アウトライン解析関連 (BY horさん)
      ・ブックマークの「空行を無視する」オプションを変更したらリストを再表示するように
      diff --git a/help/sakura/res/HLP_UR009.html b/help/sakura/res/HLP_UR009.html index dfb36eaea6..837a4af895 100644 --- a/help/sakura/res/HLP_UR009.html +++ b/help/sakura/res/HLP_UR009.html @@ -153,7 +153,7 @@

      変更履歴(2002/05/01~)

      ・2行目以降をインデントしているときに、インデントされている行の行番号をクリックすると、選択範囲がおかしくなるのを修正.(by やざきさん)
      ・TABインデント時に、折り返し行にインデントが挿入されないように.
      ・Javaのアウトラインで関数内のキャストが関数宣言と誤認されるのを修正.(by げんた)
      -・バックアップフォルダ名の指定で,制限いっぱいまで入力すると1文字バッファオーバーランするのを修正.(by げんた)
      +・バックアップフォルダー名の指定で,制限いっぱいまで入力すると1文字バッファオーバーランするのを修正.(by げんた)

      [その他変更]
      @@ -179,7 +179,7 @@

      変更履歴(2002/05/01~)

      ・ダイアログからの文字列取得部を見直し.不要な -1 を削除し,内部バッファの最後まで利用するようにした.(by げんた)
      ・タイプ別設定-ルールファイル,外部ヘルプ,外部HTMLヘルプ等の入力長を保存可能な長さに制限.(by げんた)
      -・共通設定-バックアップ-フォルダ名入力長を保存可能な長さに制限.(by げんた)
      +・共通設定-バックアップ-フォルダー名入力長を保存可能な長さに制限.(by げんた)
      ・折り返しインデントタイプ「前行先頭」を「論理行先頭」に名称変更.(by げんた)

      Oct. 3, 2002 (1.3.5.0)
      @@ -397,7 +397,7 @@

      変更履歴(2002/05/01~)

      ・ドロップダウン付き「開く」をツールバーに追加できるように.(by みくさん)
      ・検索BOXをツールバーに配置できるように.(by みくさん)
      -・DIFF差分表示.(by みくさん) sakura.exeと同じフォルダにdiff.exeが必要.
      +・DIFF差分表示.(by みくさん) sakura.exeと同じフォルダーにdiff.exeが必要.
      ・コントロールコードの入力.(by みくさん)
      ・Unicode Big Endian形式のファイルを扱えるように.(by もかさん)

      @@ -576,7 +576,7 @@

      変更履歴(2002/05/01~)

      ・印刷時のページ設定、余白の下限を0に。(by やざきさん)
      ・アンダーライン行をクリックしたときにアンダーラインが一瞬消えないように。(by やざきさん)
      ・Grep検索直後に結果ウィンドウでもう一回Grepした場合に前回の検索パターンがデフォルトで出るように検索後のキャレット位置を移動。(by やざきさん)
      -・「共通設定」-「マクロ」-「File」で、マクロフォルダにあるファイルを拡張子にかかわらずすべて列挙するように。(by やざきさん) [複数マクロ対応]
      +・「共通設定」-「マクロ」-「File」で、マクロフォルダーにあるファイルを拡張子にかかわらずすべて列挙するように。(by やざきさん) [複数マクロ対応]

      [残存バグ・制限事項など]
      diff --git a/help/sakura/res/HLP_UR010.html b/help/sakura/res/HLP_UR010.html index 9477e09601..ddaee462e6 100644 --- a/help/sakura/res/HLP_UR010.html +++ b/help/sakura/res/HLP_UR010.html @@ -109,13 +109,13 @@

      変更履歴(2003/01/14~)


      Exuberant Ctags 日本語対応版

      -上のリンクからctags.exeを取得し,それをsakura.exeと同一フォルダに置きます.次にctagsを作成したいディレクトリを開き,検索メニュー→タグファイルの作成でタグファイルを作成します.カレントフォルダのみのタグファイルを作成します.サブディレクトリのファイルも含んだタグファイルを作成したい場合はコマンドラインからctagsを直接実行してください.手動で作成するときは, ctags.exe --excmd=n -R * のように指定してください.カレントディレクトリ以外のtagsは参照されません.
      +上のリンクからctags.exeを取得し,それをsakura.exeと同一フォルダーに置きます.次にctagsを作成したいディレクトリを開き,検索メニュー→タグファイルの作成でタグファイルを作成します.カレントフォルダーのみのタグファイルを作成します.サブディレクトリのファイルも含んだタグファイルを作成したい場合はコマンドラインからctagsを直接実行してください.手動で作成するときは, ctags.exe --excmd=n -R * のように指定してください.カレントディレクトリ以外のtagsは参照されません.

      キーワード上でタグジャンプすると定義位置へジャンプします.複数のジャンプ先がある場合はダイアログが出ます.タグジャンプに失敗した場合に自動的にダイレクトタグジャンプを行いますが,ダイレクトタグジャンプという機能も追加されています.

      ・編集中ファイルのDIFF (by みくさん)
      ・閉じてタブジャンプを独立したコマンドとし,Ctrl押下時のタグジャンプでジャンプ元ウィンドウを閉じる機能を抑止.(by げんた) ただしこのコマンドはマクロに記録されません.
      -・お気に入り機能.最近使ったファイル・フォルダからお気に入りを指定することで先頭に表示させることができます. (by みくさん)
      +・お気に入り機能.最近使ったファイル・フォルダーからお気に入りを指定することで先頭に表示させることができます. (by みくさん)
      ・履歴クリア機能 (by みくさん)
      ・特殊文字 $V(エディタのバージョン),$h (Grep Key),$I (アイコン化有無)を追加 (by げんた)
      ・ウィンドウキャプションのカスタマイズ (by みくさん)
      @@ -176,7 +176,7 @@

      変更履歴(2003/01/14~)


      [仕様変更]
      -・ファイル名が決まっていないときの「開く」「保存」ダイアログの初期フォルダを最後に使ったフォルダからエディタ起動時のカレントフォルダに変更.(by げんた)
      +・ファイル名が決まっていないときの「開く」「保存」ダイアログの初期フォルダーを最後に使ったフォルダーからエディタ起動時のカレントフォルダーに変更.(by げんた)

      [機能追加]
      diff --git a/help/sakura/res/HLP_UR011.html b/help/sakura/res/HLP_UR011.html index 32932dc153..88f7277da8 100644 --- a/help/sakura/res/HLP_UR011.html +++ b/help/sakura/res/HLP_UR011.html @@ -21,7 +21,7 @@

      変更履歴(2003/06/26~)

      [バグ修正]
      ・ALT+?にカーソルキーを割り当てるとALTを離すまで入力が二重になるのを修正.(もかさん)
      -・アクセス権限なし・フォルダを開きキャンセルをするとタブだけ残って消えるのを修正.(もかさん)
      +・アクセス権限なし・フォルダーを開きキャンセルをするとタブだけ残って消えるのを修正.(もかさん)
      ・D&Dでクリップボードが書き換わらないように.(もかさん)
      ・D&Dでのグローバルメモリのメモリリークを修正.(もかさん)
      ・タブ表示,ファンクションキー上部表示でツールバーを表示すると画面にTABの残骸が残るのを修正.(もかさん)
      diff --git a/help/sakura/res/HLP_UR012.html b/help/sakura/res/HLP_UR012.html index 99b04ee95c..ea92c1ef48 100644 --- a/help/sakura/res/HLP_UR012.html +++ b/help/sakura/res/HLP_UR012.html @@ -273,7 +273,7 @@

      変更履歴(2004/10/02~)


      [その他変更]
      -・バックアップフォルダが存在しない場合にその旨警告するように.(げんた)
      +・バックアップフォルダーが存在しない場合にその旨警告するように.(げんた)
      ・「現在のウィンドウ幅で折り返し」による幅の変更は,現在のウィンドウだけに適用されるように.タイプ別設定や別のエディタウィンドウには影響しません.(げんた)

      Jul. 20, 2005 (1.5.4.1)
      diff --git a/help/sakura/res/HLP_UR013.html b/help/sakura/res/HLP_UR013.html index faa33b35f8..8896ba981a 100644 --- a/help/sakura/res/HLP_UR013.html +++ b/help/sakura/res/HLP_UR013.html @@ -57,8 +57,8 @@

      Jun 19, 2007 (1.5.16.0)

      • システムメニューの有効/無効状態が不正になる(svn:1090 patches:1705864 ryoji)
      • 印刷時に折り返し行インデントが反映されない(svn:1092 patches:1573150 data:5259 Moca)
      • -
      • ファイルメニュー「最近使ったフォルダ」で多重オープンチェックの文字コード指定が無視される(svn:1095 patches:1672919 maru)
      • -
      • 未編集ウィンドウへのフォルダD&Dですでに開いているウィンドウがアクティブにならない(svn:1095 patches:1672919 maru)
      • +
      • ファイルメニュー「最近使ったフォルダー」で多重オープンチェックの文字コード指定が無視される(svn:1095 patches:1672919 maru)
      • +
      • 未編集ウィンドウへのフォルダーD&Dですでに開いているウィンドウがアクティブにならない(svn:1095 patches:1672919 maru)
      [その他の変更]
        diff --git a/help/sakura/res/HLP_UR014.html b/help/sakura/res/HLP_UR014.html index 7937f6813e..2803ad4e03 100644 --- a/help/sakura/res/HLP_UR014.html +++ b/help/sakura/res/HLP_UR014.html @@ -30,7 +30,7 @@

        Oct 17, 2010 (1.6.6.0)

      • 文書末を含む選択状態で文字列を貼り付けるとEOF表示が消える (svn:1681 patches:2895958 unicode:1052 ryoji)
      • r1676(#2869217)で起きる bcc5.5.1のエラー対策 (svn:1680 patches:2869217 ds14050)
      • 上検索の結果が幅0のとき選択範囲が 1あったのを 0に修正 (svn:1675 patches:2869217 unicode:1035 ds14050)
      • -
      • 浅いフォルダにあるファイルの編集・保存時にバックアップ処理で異常終了する (svn:1738 patches:2875910 dev:5624 あろか)
      • +
      • 浅いフォルダーにあるファイルの編集・保存時にバックアップ処理で異常終了する (svn:1738 patches:2875910 dev:5624 あろか)
      • タブバーツールチップの&表示不正 (svn:1739 patches:2912612 dev:5637 ryoji)
      • 検索・置換マクロのエラーチェック不具合 (svn:1741 patches:2921768 dev:5648 ryoji)
      • -GREPDLG指定でキャレットが消える (svn:1742 patches:2928898 dev:5650 ryoji)
      • @@ -124,7 +124,7 @@

        Jan. 16, 2009 (1.6.4.0)

      • コンボボックスでリスト表示+末尾削除+Enterで削除部分が復活する (svn:1496 patches:2394131 dev:5503 syat)
      • アウトライン解析の「フォーカスを移す」で分割画面のアクティブビューが切り替わる (svn:1505 patches:2461745 ryoji)
      • アイコン(メニュー、ツールバー)が黒くなる (svn:1506 patches:2497716 data:6842 ryoji)
      • -
      • GrepへのDrag & Dropフォルダパス貼り付けが動作しない (svn:1507 patches:2497740 ryoji)
      • +
      • GrepへのDrag & Dropフォルダーパス貼り付けが動作しない (svn:1507 patches:2497740 ryoji)
      • Grep時のファイル名パターンのバッファオーバラン対策 (svn:1510 patches:2402850 data:6818 dev:5484なすこじ)
      diff --git a/help/sakura/res/HLP_UR015.html b/help/sakura/res/HLP_UR015.html index a42b177f34..70dccb9a12 100644 --- a/help/sakura/res/HLP_UR015.html +++ b/help/sakura/res/HLP_UR015.html @@ -54,7 +54,7 @@

      Apr. 13, 2013 (2.0.7.0)

    • 単語判定処理コード変更 (svn:2691 upatchid:361 aroka)
    • OS バージョンチェックの修正(起動時のバージョンチェックをWin2000以降に変更、不要なバージョンチェックおよびルーチンを条件コンパイルではずす) (svn:2693 upatchid:357 Uchi)
    • CRunningTimerの分解能向上 (svn:2698 upatchid:364 Uchi)
    • -
    • Grepダイアログのアイテム(条件、ファイル、フォルダ)の遅延登録 (svn:2743 upatchid:368 novice)
    • +
    • Grepダイアログのアイテム(条件、ファイル、フォルダー)の遅延登録 (svn:2743 upatchid:368 novice)
    • ファイルダイアログの初期位置GUI調整 (svn:2752 upatchid:378 novice)
    • タグジャンプダイアログのリサイズ (svn:2754 upatchid:363 Moca)
    • 共通設定-バックアップのGUI調整 (svn:2766 upatchid:386 novice)
    • @@ -100,7 +100,7 @@

      Mar. 11, 2013 (2.0.6.0)

    • プラグインの最大個数を20から40に変更 (svn:2366 upatch:3396061 syat)
    • 外部ヘルプ1でもHTMLヘルプを表示 (svn:2428 upatch:3571858 Moca)
    • 検索置換キー長制限の撤廃 (svn:2453 upatch:3462954 Moca)
    • -
    • Grep終了後Grep画面のフォルダを検索したフォルダに変更する(svn:2473 upatchid:269 Uchi)
    • +
    • Grep終了後Grep画面のフォルダーを検索したフォルダーに変更する(svn:2473 upatchid:269 Uchi)
    • 正規表現キーワードを最大1000文字に (svn:2499 upatchid:237 Moca)
    • 初期値にないキーコードへの割り当てに対応 (svn:2505 upatchid:282 aroka)
    • 検索入力コンボボックスに画面のフォントを設定します (svn:2509 upatchid:287 Uchi)
    • @@ -378,8 +378,8 @@

      Feb. 11, 2011 (2.0.0.0)

    • タブバーへのタブ追加時のビューのちらつき(Vista/7)を抑止する (svn:1870 unicode:1447 ryoji)
    • タイプ別設定一覧画面でのインポート/エクスポート操作でメモリリーク (svn:1865 unicode:1442 ryoji)
    • インデントプラグインと「改行時に末尾の空白を削除」併用でクラッシュする (svn:1862 upatch:3140869 unicode:1436 syat)
    • -
    • タイプ別設定一覧画面でのエクスポート操作で保存ダイアログの初期フォルダが不正(2) (svn:1860 unicode:1423 ryoji)
    • -
    • タイプ別設定一覧画面でのエクスポート操作で保存ダイアログの初期フォルダが不正 (svn:1859 unicode:1422 ryoji)
    • +
    • タイプ別設定一覧画面でのエクスポート操作で保存ダイアログの初期フォルダーが不正(2) (svn:1860 unicode:1423 ryoji)
    • +
    • タイプ別設定一覧画面でのエクスポート操作で保存ダイアログの初期フォルダーが不正 (svn:1859 unicode:1422 ryoji)
    • 行頭以外からの選択だと[折り返し位置に改行を付けてコピー]で最初の折り返しに改行が付かない (svn:1855 unicode:1418 ryoji)
    • [選択範囲内全行コピー]等の全行選択の挙動が不正 (svn:1854 unicode:1417 ryoji)
    • 画面上端よりも上にある矩形選択を解除するとルーラーが反転表示になる (svn:1851 unicode:1414 ryoji)
    • diff --git a/help/sakura/res/HLP_UR016.html b/help/sakura/res/HLP_UR016.html index 5d291f0b2b..71a3321e69 100644 --- a/help/sakura/res/HLP_UR016.html +++ b/help/sakura/res/HLP_UR016.html @@ -91,7 +91,7 @@

      May. 5, 2014 (2.1.1.2)

    • GetDocumentationの修正 (svn:3664 upatchid:788 Moca)
    • PPAでS_GREPで異常終了する (svn:3665 upatchid:782 Moca)
    • 折り返し行で1文字削除した場合のRedoでエラー(r3477-) (svn:3666 upatchid:790 Moca)
    • -
    • Grepフォルダの解析処理変更 (svn:3667 upatchid:785 unicode:2138 novice)
    • +
    • Grepフォルダーの解析処理変更 (svn:3667 upatchid:785 unicode:2138 novice)
    • このタブ以外を閉じるのアクセスキー不正 (svn:3679 upatchid:798 Moca)
    • 文字コード不一致時のダイアログ表示 (svn:3681 upatchid:800 novice)
    • gccでお気に入りダイアログでフリーズする (svn:3697 upatchid:791 Moca)
    • @@ -148,7 +148,7 @@

      Jan. 25, 2014 (2.1.1.0)

    • DIFFの色分けをデフォルトで有効にする (svn:3542 upatchid:730 Moca)
    • 変更行の色属性をDIFF・ブックマーク時に継承する (svn:3543 upatchid:731 Moca)
    • コントロールコードの入力で改行コード変換をしないように (svn:3546 upatchid:714 Moca)
    • -
    • Grep実行後カレントフォルダを移動しないオプション (svn:3562 upatchid:742 Moca)
    • +
    • Grep実行後カレントフォルダーを移動しないオプション (svn:3562 upatchid:742 Moca)
    [バグ修正]
      @@ -172,7 +172,7 @@

      Jan. 25, 2014 (2.1.1.0)

    • FUNCLISTの無駄な余白 (svn:3474 upatchid:698 LR4,novice)
    • リソーススクリプトのミスを修正(windressでエラー) (svn:3461 Moca)
    • 長いPATHでGrepするとバッファオーバーラン (svn:3467 upatchid:691 Moca)
    • -
    • 開く(ドロップダウン)の最近使ったフォルダのラベルがファイルになっている(r3447-) (svn:3478 upatchid:700 LR4,Moca)
    • +
    • 開く(ドロップダウン)の最近使ったフォルダーのラベルがファイルになっている(r3447-) (svn:3478 upatchid:700 LR4,Moca)
    • 下線が残ることがある (svn:3479 upatchid:696 Moca)
    • 「終了時、改行の一致を検査する」を「保存時…」に変更 (svn:3491 upatchid:471 Moca)
    • 保存時に改行コードの混在を警告するが欠けている (svn:3492 upatchid:471 Moca)
    • @@ -192,9 +192,9 @@

      Jan. 25, 2014 (2.1.1.0)

    • タブを閉じた後のウィンドウの変更 (svn:3545 upatchid:689 Moca)
    • MRUのタイプ別設定が基本だと適用されない (svn:3549 upatchid:732 Moca)
    • TypeIdがマイナスになることがある (svn:3550 upatchid:733 Moca)
    • -
    • Grepフォルダに;が含まれているとGrepフォルダがおかしい (svn:3551 upatchid:734 Moca)
    • +
    • Grepフォルダーに;が含まれているとGrepフォルダーがおかしい (svn:3551 upatchid:734 Moca)
    • ヘルプIDの修正 (svn:3552 upatchid:737 Moca)
    • -
    • 複数フォルダ指定時、カレントディレクトリ移動がおかしい (svn:3562 upatchid:742 Moca)
    • +
    • 複数フォルダー指定時、カレントディレクトリ移動がおかしい (svn:3562 upatchid:742 Moca)
    • OnMinMaxInfoの修正 (svn:3563 upatchid:740 Moca)
    • FileMapppingのハンドルが閉じられていない (svn:3564 upatchid:741 Moca)
    • PageUp/?PageDownの修正 (svn:3573 upatchid:749 Moca)
    • @@ -255,7 +255,7 @@

      Jul. 20, 2013 (2.1.0.0)

    • 矩形選択をメインメニューへ追加 (svn:3167 upatchid:602 Uchi)
    • TAB表示対応(文字指定/短い矢印/長い矢印) (svn:3168 upatchid:571 Request/436 novice)
    • ファイル比較/Diffでデフォルト選択をファイル名により決める (svn:3201 upatchid:623 Moca)
    • -
    • タグファイル作成/Grepのフォルダを1つ上にするボタンを追加 (svn:3202 upatchid:624 Moca)
    • +
    • タグファイル作成/Grepのフォルダーを1つ上にするボタンを追加 (svn:3202 upatchid:624 Moca)
    • 座標変換マクロで異常値のときマクロを中止する (svn:3235 upatchid:639 Moca)
    [バグ修正]
    @@ -268,7 +268,7 @@

    Jul. 20, 2013 (2.1.0.0)

  • 折り返し行でEOF直前で改行したときEOFが再描画されない(r2368-) (svn:3069 upatchid:503 BugReport/118 Moca)
  • 再帰時のOpeBlk問題(メモリリークとUndo/Redoバッファ破壊)の修正 (svn:3082 upatchid:479 Moca)
  • 背景画像表示とカーソル行背景色を設定しているとき対括弧強調表示がおかしい (svn:3083 upatchid:556 Moca)
  • -
  • Grepダイアログのファイル・フォルダの値修正 (svn:3084 upatchid:551 Request/267 Moca)
  • +
  • Grepダイアログのファイル・フォルダーの値修正 (svn:3084 upatchid:551 Request/267 Moca)
  • カラータブの色分け/表示が太字にかぶってる (svn:3085 upatchid:557 Moca)
  • 検索マーク無効にしたあとの検索で再描画が必要 (svn:3086 upatchid:561 Moca)
  • インデントプラグイン実行時に画面が更新されない (svn:3092 data:7657 syat)
  • @@ -296,7 +296,7 @@

    Jul. 20, 2013 (2.1.0.0)

  • コントロールコード入力のマクロ記録対応 (svn:3151 upatchid:598 Moca)
  • マクロ文字列のNUL文字列の修正 (svn:3161 svn:3165 upatchid:582 Moca)
  • 5つ以上の引数の修正 (svn:3161 upatchid:582 Moca)
  • -
  • ファイルダイアログ初期位置の指定フォルダに長いパスが編集できない (svn:3164 upatchid:601 Moca)
  • +
  • ファイルダイアログ初期位置の指定フォルダーに長いパスが編集できない (svn:3164 upatchid:601 Moca)
  • プログレスバーの進捗を正確にする (svn:3180 upatchid:592 Moca)
  • MinGW-W64コンパイルサポート (svn:3182 upatchid:591 Moca)
  • 最近使ったファイルに更新マークがつく (svn:3187 upatchid:609 Moca)
  • @@ -306,7 +306,7 @@

    Jul. 20, 2013 (2.1.0.0)

  • ソート・uniqの修正その2 (svn:3195 upatchid:610 Moca)
  • マクロExecCommandの引数がおかしい (svn:3196 upatchid:619 Moca)
  • ファイルを開いたときタイプ別フォントが適用されない (svn:3197 upatchid:620 Moca)
  • -
  • Grepフォルダの文字列長チェックが不正 (svn:3198 upatchid:625 Moca)
  • +
  • Grepフォルダーの文字列長チェックが不正 (svn:3198 upatchid:625 Moca)
  • 逆インデントでhwndProgressが初期化されていない (svn:3199 upatchid:626 Moca)
  • 印刷のロックで複数待機しているとデッドロック状態になる (svn:3200 upatchid:628 Moca)
  • 選択範囲の半透明で太線指定のときタブ文字等が太くなる (svn:3205 upatchid:631 Moca)
  • @@ -348,7 +348,7 @@

    May. 13, 2013 (2.0.8.1)

    May. 13, 2013 (2.0.8.0)

    [機能追加]
      -
    • バックアップ-指定フォルダのメタ文字列サポート (svn:2850 upatchid:422 novice)
    • +
    • バックアップ-指定フォルダーのメタ文字列サポート (svn:2850 upatchid:422 novice)
    • お気に入りダイアログで除外リストに追加を追加 (svn:2884 upatchid:395 Moca)
    • 「終了時、改行の一致を検査する」を追加 (svn:2887 upatchid:423 Uchi)
    • フォントサイズの拡大or縮小 (svn:2904 upatchid:398 novice)
    • diff --git a/help/sakura/res/HLP_UR017.html b/help/sakura/res/HLP_UR017.html index 81aecfc6f2..a94c7b27c0 100644 --- a/help/sakura/res/HLP_UR017.html +++ b/help/sakura/res/HLP_UR017.html @@ -23,7 +23,7 @@

      May. 2, 2017 (2.3.2.0)

    • アウトラインのツリーの逆順ソート追加 (svn:4138 upatchid:1038 Moca)
    • アウトライン解析ツリー表示の高速化 (svn:4156 upatchid:1056 Moca)
    • アウトラインメニューにすべて展開・縮小・ブックマーク削除・全削除を追加 (svn:4159 upatchid:1049 Moca)
    • -
    • Grepファイル・フォルダ長を512に拡張 (svn:4161 upatchid:1076 Moca)
    • +
    • Grepファイル・フォルダー長を512に拡張 (svn:4161 upatchid:1076 Moca)
    • マクロ保存でS_を追加しない (svn:4173 upatchid:943 Moca)
    • キーワードヘルプメニューのオプション (svn:4175 upatchid:1066 Moca)
    • @@ -35,7 +35,7 @@

      May. 2, 2017 (2.3.2.0)

    • Grepダイアログが言語切替でウィンドウサイズが変わらない (svn:4137 upatchid:1071 Moca)
    • キーボードでCPをチェックするとキーボードで操作できなくなる (svn:4139 upatchid:1084 Moca)
    • IO_ProfileのコマンドIDプラグイン名処理をまとめる (svn:4142 upatchid:1064 Moca)
    • -
    • 編集中ファイルからGrepのときサブフォルダ共通設定を上書きしない (svn:4147 upatchid:1032 Moca)
    • +
    • 編集中ファイルからGrepのときサブフォルダー共通設定を上書きしない (svn:4147 upatchid:1032 Moca)
    • アウトライン解析KR対策以降でANSIビルドエラーが出る (svn:4153 upatchid:1088 Moca)
    • Win10で無題のタブアイコンがGrepになる (svn:4154 upatchid:1080 LR4, Moca)
    • CUxThemeの保守修正パッチ (svn:4158 upatchid:1091 berryzplus)
    • @@ -285,7 +285,7 @@

      Feb. 22, 2015 (2.2.0.0)

    • DiffのSJIS以外に対応 (svn:3861 upatchid:636 Moca)
    • MinGWでのコンパイルエラー(-r3863) (svn:3863 upatchid:906 Moca)
    • VC2003プロジェクトファイル更新 (svn:3866 upatchid:915 Moca)
    • -
    • Diffのフォルダ名に.が含まれる場合のファイル選択の修正 (svn:3867 upatchid:910 Moca)
    • +
    • Diffのフォルダー名に.が含まれる場合のファイル選択の修正 (svn:3867 upatchid:910 Moca)
    • メインメニューのファイルツリーがundefinedになっている(r3865-) (svn:3868 upatchid:922 Moca)
    • 同一ウィンドウでGrepするとエラーになる(r3862-) (svn:3869 upatchid:918 Moca)
    • キャレットの更新でGetDrawSwitchフラグを見るように (svn:3871 upatchid:913 Moca)
    • diff --git a/installer/externals/readme.txt b/installer/externals/readme.txt index 324e906a79..6fd7ec1871 100644 --- a/installer/externals/readme.txt +++ b/installer/externals/readme.txt @@ -1,6 +1,6 @@ -外部の依存モジュールを入れるためのフォルダです。 +外部の依存モジュールを入れるためのフォルダーです。 -このフォルダ以下に入れるモジュールに対して readme を書く際には +このフォルダー以下に入れるモジュールに対して readme を書く際には GitHub での文字化けを防ぐため UTF-8 BOM 付きで保存してください。 Website アドレス、ライセンス、バイナリのアドレス、(オープンソースなら)ソースコード入手先を diff --git a/installer/sakura-common.iss b/installer/sakura-common.iss index 8852ea717c..8c83c126da 100644 --- a/installer/sakura-common.iss +++ b/installer/sakura-common.iss @@ -148,7 +148,7 @@ zh_hans.residentStartup=开机时启动(&R) zh_hant.residentStartup=開機時啟動(&R) en.IconPreferencefolder=Preference folder -ja.IconPreferencefolder=設定フォルダ +ja.IconPreferencefolder=設定フォルダー zh_hans.IconPreferencefolder=文件夹设置 zh_hant.IconPreferencefolder=資料夾設定 @@ -464,7 +464,7 @@ begin ( MultiUserPage.Values[0] = False ) then begin { - Program Files等のシステムフォルダへインストールする場合はUACを無効にしないと設定が保存できません。 + Program Files等のシステムフォルダーへインストールする場合はUACを無効にしないと設定が保存できません。 } selected := MsgBox( CustomMessage('MultiUser'), diff --git a/installer/sinst_src/keyword/HSP.KHP b/installer/sinst_src/keyword/HSP.KHP index a76e8ce679..da98544596 100644 --- a/installer/sinst_src/keyword/HSP.KHP +++ b/installer/sinst_src/keyword/HSP.KHP @@ -399,7 +399,7 @@ fxtget /// fxtget p1,"file" [hspext.dll]\np1=変数名 : 情報が格納され fxtset /// fxtset p1,"file" [hspext.dll]\np1=変数名 : 設定する情報が格納されている数値型の配列変数名\n"file"  : ファイル名指定\n"file"で指定したファイルのタイムスタンプ情報を、\np1で指定した変数のものに変更します。 lzcopy /// lzcopy "name" [hspext.dll]\n"name" :圧縮ファイル名\nMicrosoftのcompress.exe形式の圧縮ファイルを解凍しながらコピーを\n行ないます。 lzdist /// lzdist "path" [hspext.dll]\n"path" :lzcopy命令の解凍コピー先ディレクトリ\nlzcopy命令の解凍コピー先ディレクトリを指定します。 -selfolder /// selfolder p1,"message" [hspext.dll]\np1=変数名 : 選択されたパス名が格納される文字列型の変数名\n"message" : ダイアログに表示される文字列\nWindowsのシステムで使用されている、フォルダ選択ダイアログを表示して、\nフォルダ名を取得します。 +selfolder /// selfolder p1,"message" [hspext.dll]\np1=変数名 : 選択されたパス名が格納される文字列型の変数名\n"message" : ダイアログに表示される文字列\nWindowsのシステムで使用されている、フォルダー選択ダイアログを表示して、\nフォルダー名を取得します。 ★ 拡張画面制御命令[hspext] gfcopy /// gfcopy p1 [hspext.dll]\np1=0~100(0) : 半透明コピーレート(%)\np1で指定したレートで画面イメージをコピーします。 diff --git a/installer/sinst_src/keyword/MortScript-readme.txt b/installer/sinst_src/keyword/MortScript-readme.txt index 92891fddbd..903e4396a4 100644 --- a/installer/sinst_src/keyword/MortScript-readme.txt +++ b/installer/sinst_src/keyword/MortScript-readme.txt @@ -40,7 +40,7 @@ MortScript.col 色設定ファイル ■使い方 同梱のファイルをサクラエディタのインストール先(C:\Program Files\sakura等) -の下の「keyword」フォルダに、すべてまとめてコピーしてください。 +の下の「keyword」フォルダーに、すべてまとめてコピーしてください。 以下、サクラエディタ上での設定例です。 メニューの「設定(&O)」から「共通設定(&C)」や「タイプ別設定一覧(&L)」など diff --git a/installer/sinst_src/keyword/MortScript.khp b/installer/sinst_src/keyword/MortScript.khp index 1c2de05d4a..f744239df3 100644 --- a/installer/sinst_src/keyword/MortScript.khp +++ b/installer/sinst_src/keyword/MortScript.khp @@ -27,7 +27,7 @@ CurrentCursor /// 現在のカーソルの種類を取得する DelTree /// サブディレクトリ以下のものを含む複数のファイルを消去する Delete /// デリートキー送信 Delete /// 複数のファイルを消去する -DirContents /// ディレクトリ中のファイル/フォルダ名を取得する +DirContents /// ディレクトリ中のファイル/フォルダー名を取得する Documents /// 「My Documents」。PPC2002機では働きません。 Download /// ダウンロード EULER /// "2.7182818284590452353602874713527"(e) で初期化されています。 diff --git a/installer/sinst_src/keyword/S_MACPPA.KHP b/installer/sinst_src/keyword/S_MACPPA.KHP index 2d1251d91f..d4dd022c9e 100644 --- a/installer/sinst_src/keyword/S_MACPPA.KHP +++ b/installer/sinst_src/keyword/S_MACPPA.KHP @@ -249,7 +249,7 @@ S_Replace /// void S_Replace ( S1 , S2 , i1 ) ;\n置換(実行)\n※ 置 S_ReplaceAll /// void S_ReplaceAll ( S1 , S2 , i1 ) ;\nすべて置換(実行)\n※ 置換ダイアログで [すべて置換(&A)] ボタンを押した時の動作。\n・[置換(&R)] ボタンを押した時の動作 → S_Replace ( ) ;\n・[上検索(&U)] ボタンを押した時の動作 → S_SearchPrev ( ) ;\n・[下検索(&D)] ボタンを押した時の動作 → S_SearchNext ( ) ;\n・[該当行マーク(&B)] ボタンを押した時の動作 → S_BookmarkPattern ( ) ;\n\nS1:文字列:置換前の文字列。※空文字列 (’’) は受け付けない。\nS2:文字列:置換後の文字列。\n\ni1:整数数値:置換ダイアログの状態を10進数数値で指定する。\n{\n それぞれの bit が 0=チェックOFF / 1=チェックON\n bit0:単語単位で探す\n bit1:英大文字と小文字を区別する\n bit2:正規表現\n bit3:見つからないときにメッセージを表示\n bit4:置換ダイアログを自動的に閉じる\n bit5:先頭(末尾)から再検索する\n bit6:クリップボードから貼り付ける\n\n bit7:0=ファイル全体 / 1=選択範囲\n bit9,8:00=選択文字 / 01=選択始点挿入 / 10=選択終点追加\n}\n※PPAのマクロ中では $41 などの 16進数表記や変数・数式・関数の\n  使用も可能だが、MACのマクロ中では 65 などの 10進数の定数\n  表記しか受け付けない。\n※bitでの指定方法が分からない場合は、文字列「bit」のキーワード\n  ヘルプを参照して下さい。(「bit」と文字入力し、範囲選択する) S_SearchClearMark /// void S_SearchClearMark ( ) ;\n検索マークのクリア S_SearchStartPos /// void S_SearchStartPos ( ) ;\n検索開始位置へ戻る -S_Grep /// void S_Grep ( S1 , S2 , S3 , i1 ) ;\nGrep\n\nS1:文字列:検索文字列\nS2:文字列:検索対象ファイル\nS3:文字列:検索対象フォルダ\n\ni1:整数数値:Grep ダイアログの状態を10進数数値で指定する。\n{\n それぞれの bit が 0=チェックOFF / 1=チェックON\n bit0:サブフォルダからも検索する\n bit1:- No Use -\n bit2:英大文字と小文字を区別する\n bit3:正規表現\n bit4:文字コードセット自動判別\n\n bit5:0=該当行 / 1=該当部分\n bit6:0=ノーマル / 1=ファイル毎\n}\n※PPAのマクロ中では $41 などの 16進数表記や変数・数式・関数の\n  使用も可能だが、MACのマクロ中では 65 などの 10進数の定数\n  表記しか受け付けない。\n※bitでの指定方法が分からない場合は、文字列「bit」のキーワード\n  ヘルプを参照して下さい。(「bit」と文字入力し、範囲選択する) +S_Grep /// void S_Grep ( S1 , S2 , S3 , i1 ) ;\nGrep\n\nS1:文字列:検索文字列\nS2:文字列:検索対象ファイル\nS3:文字列:検索対象フォルダー\n\ni1:整数数値:Grep ダイアログの状態を10進数数値で指定する。\n{\n それぞれの bit が 0=チェックOFF / 1=チェックON\n bit0:サブフォルダーからも検索する\n bit1:- No Use -\n bit2:英大文字と小文字を区別する\n bit3:正規表現\n bit4:文字コードセット自動判別\n\n bit5:0=該当行 / 1=該当部分\n bit6:0=ノーマル / 1=ファイル毎\n}\n※PPAのマクロ中では $41 などの 16進数表記や変数・数式・関数の\n  使用も可能だが、MACのマクロ中では 65 などの 10進数の定数\n  表記しか受け付けない。\n※bitでの指定方法が分からない場合は、文字列「bit」のキーワード\n  ヘルプを参照して下さい。(「bit」と文字入力し、範囲選択する) S_Jump /// void S_Jump ( i1 , i2 ) ;\n指定行ヘジャンプ\n\ni1:整数数値:ジャンプ先の行番号を10進数数値で指定する。\n\ni2:整数数値:指定行へジャンプ ダイアログの状態を10進数数値で指定する。\n{\n bit0:0=折り返し単位の行番号 / 1=改行単位の行番号\n bit1:PL/SQLコンパイルエラー行を処理する - 0=OFF / 1=ON\n}\n※PPAのマクロ中では $41 などの 16進数表記や変数・数式・関数の\n  使用も可能だが、MACのマクロ中では 65 などの 10進数の定数\n  表記しか受け付けない。\n※bitでの指定方法が分からない場合は、文字列「bit」のキーワード\n  ヘルプを参照して下さい。(「bit」と文字入力し、範囲選択する) S_Outline /// void S_Outline ( ) ;\nアウトライン解析 S_TagJump /// void S_TagJump ( ) ;\nタグジャンプ機能 diff --git a/installer/sinst_src/keyword/bat_win2k.khp b/installer/sinst_src/keyword/bat_win2k.khp index 842863a6da..b614e3735e 100644 --- a/installer/sinst_src/keyword/bat_win2k.khp +++ b/installer/sinst_src/keyword/bat_win2k.khp @@ -4,12 +4,12 @@ ADDDRV /// キャラクタ型デバイスドライバを組み込みます.\n\nADDDRV [ドライブ:][パス]ファイル名\n [ドライブ:][パス]ファイル名 定義ファイルを指定します.\n ASSOC /// ファイル拡張子の関連付けを表示または変更します。\n\nASSOC [.拡張子[=[ファイルタイプ]]]\n\n .拡張子 ファイル タイプに関連付ける拡張子を指定します。\n ファイルタイプ 拡張子に関連付けるファイル タイプを指定します。\n\nパラメータを指定しないで ASSOC と入力すると、現在のファイルの関連付け\nを表示します。ファイル拡張子を指定して ASSOC を実行すると、そのファイル\n拡張子の現在のファイルの関連付けを表示します。ファイル タイプやコマンド\nを指定しないと、そのファイル拡張子の関連付けを削除します。\n AT /// AT コマンドは、指定された日時にコマンドとプログラムがコンピュータで\n実行されるようにスケジュールします。AT コマンドを使用するには、\nSchedule サービスが実行中でなければなりません。\n\nAT [\\コンピュータ名] [ [id] [/DELETE] | /DELETE [/YES]]\nAT [\\コンピュータ名] 時刻 [/INTERACTIVE]\n [ /EVERY:日付[,...] | /NEXT:日付[,...]] "コマンド"\n\n\\コンピュータ名 リモート コンピュータを指定します。このパラメータを\n 省略したときは、ローカル コンピュータでコマンドが\n スケジュールされます。\nid スケジュールされたコマンドに割り当てられた識別番号です。\n/delete スケジュールされたコマンドを取り消します。\n id を指定しなかったときは、コンピュータでスケジュール\n されているすべてのコマンドが取り消されます。\n/yes 確認せずにすべてのジョブ コマンドを取り消すときに\n 使用します。\n時刻 コマンドが実行される時刻を指定します。\n/interactive ジョブの実行中、ジョブはログオンしているユーザーの\n デスクトップとの対話を許可します。\n/every:日付[,...] 毎週指定した曜日に、または毎月指定した日にコマンドが\n 実行されます。\n 日付を省略したときは、その月の今日の日付が使用されます。\n/next:日付[,...] 指定したコマンドが次の日付 (たとえば、次の火曜日) に\n 実行されます。日付を省略したときは、その月の今日の日付が\n 使用されます。\n"コマンド" 実行する Windows NT コマンド、またはバッチ プログラム\n です。\n\n -ATTRIB /// ファイル属性を表示または変更します。\n\nATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] [[ドライブ:] [パス] ファイル名]\n [/S [/D]]\n\n + 属性を設定します。\n - 属性を解除します。\n R 読み取り専用属性。\n A アーカイブ属性。\n S システム ファイル属性。\n H 隠しファイル属性。\n /S 現在のディレクトリとすべてのサブフォルダの一致するファイルを\n 処理します。\n /D フォルダも処理します。\n\n +ATTRIB /// ファイル属性を表示または変更します。\n\nATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] [[ドライブ:] [パス] ファイル名]\n [/S [/D]]\n\n + 属性を設定します。\n - 属性を解除します。\n R 読み取り専用属性。\n A アーカイブ属性。\n S システム ファイル属性。\n H 隠しファイル属性。\n /S 現在のディレクトリとすべてのサブフォルダーの一致するファイルを\n 処理します。\n /D フォルダーも処理します。\n\n BREAK /// DOS システム上で Ctrl+C キーの拡張チェック機能を設定または解除します。\n\nこの機能は DOS システムとの互換性を維持するために用意されています。Windows 2000\n上では何も効果はありません。\n\nWindows 2000 プラットフォームでコマンド拡張機能を有効にして実行中の場合、\nデバッガによるデバッグ時に BREAK コマンドはハードコード ブレークポイント\nを入力します。\n CACLS /// ファイルのアクセス制御リスト(ACL) を表示または変更します。\n\nCACLS ファイル名 [/T] [/E] [/C] [/G ユーザー名:アクセス権] [/R ユーザー名 [...]]\n[/P ユーザー名:アクセス権 [...]] [/D ユーザー名 [...]]\n ファイル名 ACL を表示します。\n /T 現在のディレクトリとすべてのサブディレクトリにある\n 指定されたファイルの ACL を変更します。\n /E ACL を置き換えずに、ACL を編集します。\n /C アクセス拒否エラーを無視して、ACL の変更を続行します。\n /G ユーザー:アクセス権 \n 指定されたユーザーにアクセス権を与えます。\n アクセス権: R 読み取り\n W 書き込み\n C 変更 (書き込み)\n F フル コントロール\n /R ユーザー名 指定されたユーザーのアクセス権を失効させます。\n (/E オプションと共に使用)。\n /P ユーザー名:アクセス権\n 指定されたユーザーのアクセス権を置き換えます。\n アクセス権: N なし\n W 書き込み\n R 読み取り\n C 変更 (書き込み)\n F フル コントロール\n /D ユーザー名 指定されたユーザーのアクセスを拒否します。\n複数のファイルを指定するには、ワイルドカードを使用できます。\n複数のユーザーを指定できます。\nCALL /// バッチ プログラムを別のバッチ プログラムから呼び出します。\n\nCALL [ドライブ:][パス]ファイル名 [バッチパラメータ]\n\n バッチパラメータ バッチ プログラムで必要なコマンド ライン情報を指定します。\n\nコマンド拡張機能を有効にすると、CALL は次のように変更されます:\n\nCALL コマンドは、CALL のターゲットとしてラベルを受け付けるようになります。\n構文は、次のとおりです:\n\n CALL :ラベル 引数\n\n指定された引数で新しいバッチ ファイル コンテキストが作成され、指定\nされたラベルの次の文に制御が渡されます。バッチ スクリプト ファイルの\n最後に 2 回到達することによって、2 回 "終了" する必要があります。\n1 回目に最後に到達したときには、制御は CALL 文の次の行に返されます。\n2 回目に、バッチ スクリプトが終了します。バッチ スクリプトから "戻る"\nための GOTO :EOF 拡張機能の説明については、GOTO /? と入力してください。\n\nまた、バッチ スクリプトの引数参照 (%0、%1 など) の展開は、次のように\n変更されました:\n\n\n %* バッチ スクリプト内では、すべての引数 (%1、%2、%3、%4、\n %5 など) を参照します。\n\n バッチ パラメータ (%n) の置換は拡張されました。次のオプション構文\n を使うことができます:\n\n %~1 - すべての引用句 (") を削除して、\n %1 を展開します。\n %~f1 - %1 を完全修飾パス名に展開します。\n %~d1 - %1 をドライブ文字だけに展開します。\n %~p1 - %1 をパスだけに展開します。\n %~n1 - %1 をファイル名だけに展開します。\n %~x1 - %1 をファイル拡張子だけに展開します。\n %~s1 - 展開されたパスは、短い名前だけを含みます。\n %~a1 - %1 をファイル属性に展開します。\n %~t1 - %1 をファイルの日付/時刻に展開します。\n %~z1 - %1 をファイルのサイズに展開します。\n %~$PATH:1 - PATH 環境変数に指定されているディレクトリを\n 検索し、最初に見つかった完全修飾名に %1 を\n 展開します。環境変数名が定義されていない場合、\n または検索してもファイルが見つからなかった\n 場合は、この修飾子を指定すると空の文字列に\n 展開されます。\n\n 修飾子を組み合わせて、複合結果を得ることもできます:\n\n %~dp1 - %1 をドライブ文字とパスだけに展開します。\n %~nx1 - %1 をファイル名と拡張子だけに展開します。\n %~dp$PATH:1 - PATH 環境変数に指定されているディレクトリを\n 検索して %1 を探し、最初に見つかったファイル\n のドライブ文字とパスだけに展開します。\n %~ftza1 - %1 を DIR の出力行のように展開します。\n\n 上の例の %1 と PATH は、ほかの有効な値で置き換えることができ\n ます。%~ 構文は有効な引数の数によって区切られます。%~ 修飾子\n は %* と同時には使用できません。\n CHCP /// 現在のコード ページ番号を表示または設定します。\n\nCHCP [nnn]\n\n nnn コード ページ番号を指定します。\n\n現在のコード ページ番号を表示するときは、パラメータを指定せずに CHCP と入力してください。\n CHDIR,CD /// 現在のディレクトリを変更したり、ディレクトリ名を変更したりします。\n\nCHDIR [/D] [ドライブ:][パス]\nCHDIR [..]\nCD [/D] [ドライブ:][パス]\nCD [..]\n\n .. 親ディレクトリに変更するときに指定します。\n\nCD ドライブ: と入力すると指定されたドライブの現在のディレクトリが表示\nされます。パラメータを指定しないで CD と入力すると、現在のドライブと\nディレクトリが表示されます。\n\n現在のディレクトリだけでなく、現在のドライブも変更するには /D オプショ\nンを使用してください。\n\nコマンド拡張機能を有効にすると、CHDIR は次のように変更されます:\n\n現在のディレクトリの文字列に入力された大文字と小文字は、ディスク上の名前\nと同じになるように変換されます。たとえば、ディスク上のディレクトリ名が\nTemp である場合、CD C:\TEMP と入力すると、現在のディレクトリは C:\Temp\nに設定されます。\n\nCHDIR コマンドは空白を区切り文字として扱わなくなるため、空白文字を\n含むサブディレクトリ名を引用符で囲まなくても、そのサブディレクトリ\nに CD できるようになります。たとえば、\n\n cd \winnt\profiles\username\programs\start menu\n\nは、次と同じです:\n\n cd "\winnt\profiles\username\programs\start menu"\n\n拡張機能が無効である場合は、こちらを入力します。\n -CHKDSK /// ディスクをチェックし、現在の状態を表示します。\n\n\nCHKDSK [ボリューム[[パス]ファイル名]]] [/F] [/V] [/R] [/X] [/I] [/C] [/L[:サイズ]]\n\n\n ボリューム ドライブ文字 (文字の後にはコロンを付ける)、マウント\n ポイント、ボリューム名を指定します。\n ファイル名 FAT のみ: 断片化をチェックするファイルを\n 指定します。\n /F ディスクのエラーを修復します。\n /V FAT/FAT32:ディスクの全ファイルの完全なパスと名前を表示しま\n す。\n NTFS: クリーン アップ メッセージがあればそれも表示します。\n /R 不良セクタを見つけ、読み取り可能な情報を回復します。\n (/F を意味します)\n /L:サイズ NTFS のみ: ログ ファイル サイズを指定された KB 数に\n 変更します。サイズが指定されていないときは、現在のサイズ\n を表示します。\n /X 必要であれば、最初にボリュームを強制的にマウントを解除\n します。ボリュームへ開かれているすべてのハンドルは、無効\n になります。\n /I NTFS のみ: インデックス エントリのチェックを抑制して実施\n します。\n /C NTFS のみ; フォルダ構造内の周期的なチェックをスキップ\n します。\n\n/I または /C スイッチは、ボリュームのあるチェックをスキップして、Chkdsk の実\n行時間を短くします。\n\n +CHKDSK /// ディスクをチェックし、現在の状態を表示します。\n\n\nCHKDSK [ボリューム[[パス]ファイル名]]] [/F] [/V] [/R] [/X] [/I] [/C] [/L[:サイズ]]\n\n\n ボリューム ドライブ文字 (文字の後にはコロンを付ける)、マウント\n ポイント、ボリューム名を指定します。\n ファイル名 FAT のみ: 断片化をチェックするファイルを\n 指定します。\n /F ディスクのエラーを修復します。\n /V FAT/FAT32:ディスクの全ファイルの完全なパスと名前を表示しま\n す。\n NTFS: クリーン アップ メッセージがあればそれも表示します。\n /R 不良セクタを見つけ、読み取り可能な情報を回復します。\n (/F を意味します)\n /L:サイズ NTFS のみ: ログ ファイル サイズを指定された KB 数に\n 変更します。サイズが指定されていないときは、現在のサイズ\n を表示します。\n /X 必要であれば、最初にボリュームを強制的にマウントを解除\n します。ボリュームへ開かれているすべてのハンドルは、無効\n になります。\n /I NTFS のみ: インデックス エントリのチェックを抑制して実施\n します。\n /C NTFS のみ; フォルダー構造内の周期的なチェックをスキップ\n します。\n\n/I または /C スイッチは、ボリュームのあるチェックをスキップして、Chkdsk の実\n行時間を短くします。\n\n CHKNTFS /// CHKNTFS ボリューム [...]\nCHKNTFS /D\nCHKNTFS /T[:時間]\nCHKNTFS /X ボリューム [...]\nCHKNTFS /C ボリューム [...]\n\n ボリューム ドライブ文字 (文字の後にはコロンを付ける)、マウント\n ポイント、ボリューム名を指定します。\n /D コンピュータを既定の動作に戻します。\n 起動時にすべてのドライブを検査し、エラーがあったドライブに\n 対して CHKDSK を実行します。\n /T:時間 指定された時間を秒に変換して、AUTOCHK を開始するカウント\n ダウン時間へ設定します。\n 時間が指定されていなければ、現在の設定を表示します。\n /X ドライブを既定の起動時の検査から除外します。\n 除外するドライブは、このコマンドを実行するたびに指定する\n 必要があります。\n /C ブート時にドライブを検査するようにスケジュールします。\n ドライブにエラーがある場合、chkdsk が起動されます。\n\nスイッチが指定されていない場合、指定されたドライブにエラーがあるかどうか、\n次回の再起動で確認を行うようスケジュールされているかどうかを表示します。\n CIPHER /// NTFS パーティション上のディレクトリ [ファイル] の暗号化を表示または変更します。\n\n CIPHER [/E | /D] [/S:ディレクトリ] [/A] [/I] [/F] [/Q] [/H] [/K]\n [パス名 [...]]\n\n CIPHER /W:ディレクトリ\n\n /E 指定されたディレクトリを暗号化します。後で追加された\n ファイルが暗号化されるようにディレクトリをマークします。\n /D 指定されたディレクトリの暗号化を解除します。後で追加された\n ファイルが暗号化されないようにディレクトリをマークします。\n /S 指定されたディレクトリとすべてのサブディレクトリに\n 対して指定された操作を実行します。\n /A ファイルおよびディレクトリに対して操作を実行します。\n 親ディレクトリが暗号化されていない場合、暗号はファイルが\n 修正されると解除されます。ファイルと親ディレクトリの両方を\n 暗号化することをお勧めします。\n /I エラーが発生しても指定された操作を実行し続けます。既定では、\n エラーが発生すると CIPHER は停止されます。\n /F 暗号化済みのオブジェクトも含めて、指定されたすべてのオブジェ\n クトを強制的に暗号化します。既定では暗号化済みのオブジェ\n クトはスキップされます。\n /Q 重要な情報だけを報告します。\n /H 隠しファイルやシステム属性のファイルを表示します。\n 既定ではこれらのファイルは省略されます。\n /K CIPHER を実行しているユーザー用に新しいファイル暗号化キーを\n 作成します。このオプションが指定されると、その他のオプションは\n すべて無視されます。\n /W ボリュームで利用可能な未使用のディスクから、データを削除します。\n このオプションを選んだ場合は、ほかのオプションはすべて無視されま\n す。ローカル ボリューム上のどの場所にあるディレクトリでも指定す\n ることができます。ディレクトリがマウント ポイントである場合、\n または別のボリュームのディレクトリを指し示す場合は、そのボリュー\n ムのデータが削除されます。\n\n ディレクトリ ディレクトリのパスです。\n パス名 パターン、ファイル、またはディレクトリを指定します。\n\n パラメータを指定せずに CIPHER を実行すると、現在のディレクトリと\n ディレクトリに含まれるすべてのファイルの暗号化状態を表示します。\n 複数のディレクトリ名やワイルドカードを指定できます。複数のパラメータ\n を指定する場合は、パラメータをスペースで区切ってください。\n CLS /// 画面を消去します。\n\n @@ -84,7 +84,7 @@ START /// 指定されたプログラムまたはコマンドを実行するた SUBST /// パスをドライブ名に関連付けます。\n\nSUBST [ドライブ1: [ドライブ2:]パス]\nSUBST ドライブ1: /D\n\n ドライブ1: パスを割り当てる仮想ドライブを指定します。\n [ドライブ2:]パス 仮想ドライブに割り当てる物理ドライブとパスを指定します。\n /D 置換した (仮想) ドライブを削除します。\n\n現在の仮想ドライブ一覧を表示するときは、パラメータを指定せずに SUBST と入力してください。\n TIME /// システム時刻を表示または設定します。\n\nTIME [/T | 時刻]\n\nパラメータの指定がなければ、現在の設定が表示され、新しい時刻を入力できる\nプロンプトになります。変更しない場合は、Enter キーを押してください。\n\nコマンド拡張機能を有効にすると、TIME コマンドは、/T スイッチを\nサポートするようになります。このスイッチを指定すると、現在の時刻\nだけが表示され、新しい時刻を入力するためのプロンプトは表示されません。\n TITLE /// コマンド プロンプト ウィンドウのウィンドウ タイトルを設定します。\n\nTITLE [文字列]\n\n 文字列 コマンド プロンプト ウィンドウのタイトルを指定します。\n -TREE /// ドライブやパスのフォルダ構造を図式表示します。\n\nTREE [ドライブ:][パス] [/F] [/A]\n\n /F 各フォルダのファイル名を表示します。\n /A 拡張文字ではなく、ASCII 文字で表示します。\n\n +TREE /// ドライブやパスのフォルダー構造を図式表示します。\n\nTREE [ドライブ:][パス] [/F] [/A]\n\n /F 各フォルダーのファイル名を表示します。\n /A 拡張文字ではなく、ASCII 文字で表示します。\n\n TYPE /// テキスト ファイルまたはファイルの内容を表示します。\n\nTYPE [ドライブ:][パス]ファイル名\n VER /// Windows 2000 のバージョンを表示します。\n\nVER\n VERIFY /// ファイルがディスクに正しく書き込まれたことを照合するかどうかを\ncmd.exe に指示します。\n\nVERIFY [ON | OFF]\n\n現在の設定を表示するときは、パラメータを指定せずに VERIFY と入力してください。\n diff --git a/remove-redundant-blank-lines.py b/remove-redundant-blank-lines.py index 969663762c..2c7512cc44 100644 --- a/remove-redundant-blank-lines.py +++ b/remove-redundant-blank-lines.py @@ -37,7 +37,7 @@ def checkExtension(fileName): base, ext = os.path.splitext(fileName) return (ext in extensions) -# 引数で指定したフォルダ以下のすべての対象ファイルを yield で返す +# 引数で指定したフォルダー以下のすべての対象ファイルを yield で返す def checkAll(topDir): for rootdir, dirs, files in os.walk(topDir): for fileName in files: diff --git a/sakura_core/CBackupAgent.cpp b/sakura_core/CBackupAgent.cpp index 0643b1755b..eb9c80f689 100644 --- a/sakura_core/CBackupAgent.cpp +++ b/sakura_core/CBackupAgent.cpp @@ -297,7 +297,7 @@ int CBackupAgent::MakeBackUp( @date 2005.11.29 aroka MakeBackUpから分離.書式を元にバックアップファイル名を作成する機能追加 - @date 2013.04.15 novice 指定フォルダのメタ文字列展開サポート + @date 2013.04.15 novice 指定フォルダーのメタ文字列展開サポート @todo Advanced modeでの世代管理 */ @@ -319,21 +319,21 @@ bool CBackupAgent::FormatBackUpPath( _wsplitpath( target_file, szDrive, szDir, szFname, szExt ); if( bup_setting.m_bBackUpFolder - && (!bup_setting.m_bBackUpFolderRM || !IsLocalDrive( target_file ))) { /* 指定フォルダにバックアップを作成する */ // m_bBackUpFolderRM 追加 2010/5/27 Uchi + && (!bup_setting.m_bBackUpFolderRM || !IsLocalDrive( target_file ))) { /* 指定フォルダーにバックアップを作成する */ // m_bBackUpFolderRM 追加 2010/5/27 Uchi WCHAR selDir[_MAX_PATH]; CFileNameManager::ExpandMetaToFolder( bup_setting.m_szBackUpFolder, selDir, _countof(selDir) ); if (GetFullPathName(selDir, _MAX_PATH, szNewPath, &psNext) == 0) { // うまく取れなかった wcscpy( szNewPath, selDir ); } - /* フォルダの最後が半角かつ'\\'でない場合は、付加する */ + /* フォルダーの最後が半角かつ'\\'でない場合は、付加する */ AddLastYenFromDirectoryPath( szNewPath ); } else{ auto_sprintf( szNewPath, L"%s%s", szDrive, szDir ); } - /* 相対フォルダを挿入 */ + /* 相対フォルダーを挿入 */ if( !bup_setting.m_bBackUpPathAdvanced ){ __time64_t ltime = 0; struct tm result = {0}; @@ -463,7 +463,7 @@ bool CBackupAgent::FormatBackUpPath( { // make keys - // $0-$9に対応するフォルダ名を切り出し + // $0-$9に対応するフォルダー名を切り出し WCHAR keybuff[1024]; wcscpy( keybuff, szDir ); CutLastYenFromDirectoryPath( keybuff ); diff --git a/sakura_core/CGrepAgent.cpp b/sakura_core/CGrepAgent.cpp index b24fe97a61..da4c5e0a29 100644 --- a/sakura_core/CGrepAgent.cpp +++ b/sakura_core/CGrepAgent.cpp @@ -259,7 +259,7 @@ std::wstring CGrepAgent::ChopYen( const std::wstring& str ) std::wstring dst = str; size_t nPathLen = dst.length(); - // 最後のフォルダ区切り記号を削除する + // 最後のフォルダー区切り記号を削除する // [A:\]などのルートであっても削除 for(size_t i = 0; i < nPathLen; i++ ){ #ifdef _MBCS @@ -355,7 +355,7 @@ int GetHwndTitle(HWND& hWndTarget, CNativeW* pmemTitle, WCHAR* pszWindowName, WC @param[in] pcmGrepKey 検索パターン @param[in] pcmGrepFile 検索対象ファイルパターン(!で除外指定)) - @param[in] pcmGrepFolder 検索対象フォルダ + @param[in] pcmGrepFolder 検索対象フォルダー @date 2008.12.07 nasukoji ファイル名パターンのバッファオーバラン対策 @date 2008.12.13 genta 検索パターンのバッファオーバラン対策 @@ -626,9 +626,9 @@ DWORD CGrepAgent::DoGrep( cmemMessage += cmemWork; cmemMessage.AppendString( L"\r\n" ); - cmemMessage.AppendString( LS( STR_GREP_SEARCH_FOLDER ) ); //L"フォルダ " + cmemMessage.AppendString( LS( STR_GREP_SEARCH_FOLDER ) ); //L"フォルダー " { - // フォルダリストから末尾のバックスラッシュを削ったパスリストを作る + // フォルダーリストから末尾のバックスラッシュを削ったパスリストを作る std::list folders; std::transform( vPaths.cbegin(), vPaths.cend(), std::back_inserter( folders ), []( const auto& path ) { return ChopYen( path ); } ); std::wstring strPatterns = FormatPathList( folders ); @@ -645,9 +645,9 @@ DWORD CGrepAgent::DoGrep( } cmemMessage.AppendString(L"\r\n"); - cmemMessage.AppendString(LS(STR_GREP_EXCLUDE_FOLDER)); //L"除外フォルダ " + cmemMessage.AppendString(LS(STR_GREP_EXCLUDE_FOLDER)); //L"除外フォルダー " { - // 除外フォルダの解析済みリストを取得する + // 除外フォルダーの解析済みリストを取得する auto excludeFolders = cGrepEnumKeys.GetExcludeFolders(); std::wstring strPatterns = FormatPathList( excludeFolders ); cmemMessage.AppendString( strPatterns.c_str(), strPatterns.length() ); @@ -656,9 +656,9 @@ DWORD CGrepAgent::DoGrep( const wchar_t* pszWork; if( sGrepOption.bGrepSubFolder ){ - pszWork = LS( STR_GREP_SUBFOLDER_YES ); //L" (サブフォルダも検索)\r\n" + pszWork = LS( STR_GREP_SUBFOLDER_YES ); //L" (サブフォルダーも検索)\r\n" }else{ - pszWork = LS( STR_GREP_SUBFOLDER_NO ); //L" (サブフォルダを検索しない)\r\n" + pszWork = LS( STR_GREP_SUBFOLDER_NO ); //L" (サブフォルダーを検索しない)\r\n" } cmemMessage.AppendString( pszWork ); @@ -874,7 +874,7 @@ DWORD CGrepAgent::DoGrep( pCEditWnd->RedrawAllViews( NULL ); if( !bGrepCurFolder ){ - // 現行フォルダを検索したフォルダに変更 + // 現行フォルダーを検索したフォルダーに変更 if( 0 < vPaths.size() ){ ::SetCurrentDirectory( vPaths[0].c_str() ); } @@ -886,7 +886,7 @@ DWORD CGrepAgent::DoGrep( /*! @brief Grep実行 @date 2001.06.27 genta 正規表現ライブラリの差し替え - @date 2003.06.23 Moca サブフォルダ→ファイルだったのをファイル→サブフォルダの順に変更 + @date 2003.06.23 Moca サブフォルダー→ファイルだったのをファイル→サブフォルダーの順に変更 @date 2003.06.23 Moca ファイル名から""を取り除くように @date 2003.03.27 みく 除外ファイル指定の導入と重複検索防止の追加. 大部分が変更されたため,個別の変更点記入は無し. @@ -898,15 +898,15 @@ int CGrepAgent::DoGrepTree( const CNativeW& cmGrepReplace, CGrepEnumKeys& cGrepEnumKeys, //!< [in] 検索対象ファイルパターン CGrepEnumFiles& cGrepExceptAbsFiles, //!< [in] 除外ファイル絶対パス - CGrepEnumFolders& cGrepExceptAbsFolders, //!< [in] 除外フォルダ絶対パス + CGrepEnumFolders& cGrepExceptAbsFolders, //!< [in] 除外フォルダー絶対パス const WCHAR* pszPath, //!< [in] 検索対象パス - const WCHAR* pszBasePath, //!< [in] 検索対象パス(ベースフォルダ) + const WCHAR* pszBasePath, //!< [in] 検索対象パス(ベースフォルダー) const SSearchOption& sSearchOption, //!< [in] 検索オプション const SGrepOption& sGrepOption, //!< [in] Grepオプション const CSearchStringPattern& pattern, //!< [in] 検索パターン CBregexp* pRegexp, //!< [in] 正規表現コンパイルデータ。既にコンパイルされている必要がある int nNest, //!< [in] ネストレベル - bool& bOutputBaseFolder, //!< [i/o] ベースフォルダ名出力 + bool& bOutputBaseFolder, //!< [i/o] ベースフォルダー名出力 int* pnHitCount, //!< [i/o] ヒット数の合計 CNativeW& cmemMessage, //!< [i/o] Grep結果文字列 CNativeW& cUnicodeBuffer @@ -924,7 +924,7 @@ int CGrepAgent::DoGrepTree( cGrepEnumFilterFiles.Enumerates( pszPath, cGrepEnumKeys, cGrepEnumOptions, cGrepExceptAbsFiles ); /* - * カレントフォルダのファイルを探索する。 + * カレントフォルダーのファイルを探索する。 */ count = cGrepEnumFilterFiles.GetCount(); for( i = 0; i < count; i++ ){ @@ -1034,7 +1034,7 @@ int CGrepAgent::DoGrepTree( } /* - * サブフォルダを検索する。 + * サブフォルダーを検索する。 */ if( sGrepOption.bGrepSubFolder ){ CGrepEnumOptions cGrepEnumOptionsDir; @@ -1048,7 +1048,7 @@ int CGrepAgent::DoGrepTree( DWORD dwNow = ::GetTickCount(); if( dwNow - m_dwTickUICheck > UICHECK_INTERVAL_MILLISEC ) { m_dwTickUICheck = dwNow; - //サブフォルダの探索を再帰呼び出し。 + //サブフォルダーの探索を再帰呼び出し。 /* 処理中のユーザー操作を可能にする */ if( !::BlockingHook( pcDlgCancel->GetHwnd() ) ){ goto cancel_return; @@ -1063,7 +1063,7 @@ int CGrepAgent::DoGrepTree( ); } - //フォルダ名を作成する。 + //フォルダー名を作成する。 // 2010.08.01 キャンセルでメモリリークしてました std::wstring currentPath = pszPath; currentPath += L"\\"; @@ -1092,7 +1092,7 @@ int CGrepAgent::DoGrepTree( if( -1 == nGrepTreeResult ){ goto cancel_return; } - ::DlgItem_SetText( pcDlgCancel->GetHwnd(), IDC_STATIC_CURPATH, pszPath ); //@@@ 2002.01.10 add サブフォルダから戻ってきたら... + ::DlgItem_SetText( pcDlgCancel->GetHwnd(), IDC_STATIC_CURPATH, pszPath ); //@@@ 2002.01.10 add サブフォルダーから戻ってきたら... } } @@ -1319,8 +1319,8 @@ int CGrepAgent::DoGrepFile( CBregexp* pRegexp, //!< [in] 正規表現コンパイルデータ。既にコンパイルされている必要がある int* pnHitCount, //!< [i/o] ヒット数の合計.元々の値に見つかった数を加算して返す. const WCHAR* pszFullPath, //!< [in] 処理対象ファイルパス C:\Folder\SubFolder\File.ext - const WCHAR* pszBaseFolder, //!< [in] 検索フォルダ C:\Folder - const WCHAR* pszFolder, //!< [in] サブフォルダ SubFolder (!bGrepSeparateFolder) または C:\Folder\SubFolder (!bGrepSeparateFolder) + const WCHAR* pszBaseFolder, //!< [in] 検索フォルダー C:\Folder + const WCHAR* pszFolder, //!< [in] サブフォルダー SubFolder (!bGrepSeparateFolder) または C:\Folder\SubFolder (!bGrepSeparateFolder) const WCHAR* pszRelPath, //!< [in] 相対パス File.ext(bGrepSeparateFolder) または SubFolder\File.ext(!bGrepSeparateFolder) bool& bOutputBaseFolder, //!< bool& bOutputFolderName, //!< diff --git a/sakura_core/CGrepAgent.h b/sakura_core/CGrepAgent.h index b52f3b0a34..fc72db81c7 100644 --- a/sakura_core/CGrepAgent.h +++ b/sakura_core/CGrepAgent.h @@ -37,15 +37,15 @@ class CGrepEnumFolders; struct SGrepOption{ bool bGrepReplace; //!< Grep置換 - bool bGrepSubFolder; //!< サブフォルダからも検索する + bool bGrepSubFolder; //!< サブフォルダーからも検索する bool bGrepStdout; //!< 標準出力モード bool bGrepHeader; //!< ヘッダー・フッター表示 ECodeType nGrepCharSet; //!< 文字コードセット選択 int nGrepOutputLineType; //!< 0:ヒット部分を出力, 1: ヒット行を出力, 2: 否ヒット行を出力 int nGrepOutputStyle; //!< 出力形式 1: Normal, 2: WZ風(ファイル単位) 3: 結果のみ bool bGrepOutputFileOnly; //!< ファイル毎最初のみ検索 - bool bGrepOutputBaseFolder; //!< ベースフォルダ表示 - bool bGrepSeparateFolder; //!< フォルダ毎に表示 + bool bGrepOutputBaseFolder; //!< ベースフォルダー表示 + bool bGrepSeparateFolder; //!< フォルダー毎に表示 bool bGrepPaste; //!< Grep置換:クリップボードから貼り付ける bool bGrepBackup; //!< Grep置換:バックアップ @@ -96,8 +96,8 @@ class CGrepAgent : public CDocListenerEx{ int nGrepOutputLineType, int nGrepOutputStyle, bool bGrepOutputFileOnly, //!< [in] ファイル毎最初のみ出力 - bool bGrepOutputBaseFolder, //!< [in] ベースフォルダ表示 - bool bGrepSeparateFolder, //!< [in] フォルダ毎に表示 + bool bGrepOutputBaseFolder, //!< [in] ベースフォルダー表示 + bool bGrepSeparateFolder, //!< [in] フォルダー毎に表示 bool bGrepPaste, bool bGrepBackup ); diff --git a/sakura_core/CGrepEnumFileBase.h b/sakura_core/CGrepEnumFileBase.h index 11374a9e4f..88a8229332 100644 --- a/sakura_core/CGrepEnumFileBase.h +++ b/sakura_core/CGrepEnumFileBase.h @@ -122,7 +122,7 @@ class CGrepEnumFileBase { wcscpy( lpPath, lpBaseFolder ); wcscpy( lpPath + baseLen, L"\\" ); wcscpy( lpPath + baseLen + 1, vecKeys[ i ] ); - // vecKeys[ i ] ==> "subdir\*.h" 等の場合に後で(ファイル|フォルダ)名に "subdir\" を連結する + // vecKeys[ i ] ==> "subdir\*.h" 等の場合に後で(ファイル|フォルダー)名に "subdir\" を連結する const WCHAR* keyDirYen = wcsrchr( vecKeys[ i ], L'\\' ); const WCHAR* keyDirSlash = wcsrchr( vecKeys[ i ], L'/' ); const WCHAR* keyDir; @@ -166,7 +166,7 @@ class CGrepEnumFileBase { m_vpItems.push_back( PairGrepEnumItem( lpName, w32fd.nFileSizeLow ) ); found++; // 2011.11.19 if( pExceptItems && nKeyDirLen ){ - // フォルダを含んだパスなら検索済みとして除外指定に追加する + // フォルダーを含んだパスなら検索済みとして除外指定に追加する pExceptItems->m_vpItems.push_back( PairGrepEnumItem( lpFullPath, w32fd.nFileSizeLow ) ); }else{ delete [] lpFullPath; diff --git a/sakura_core/CGrepEnumKeys.h b/sakura_core/CGrepEnumKeys.h index 2cd02358de..798ff6456e 100644 --- a/sakura_core/CGrepEnumKeys.h +++ b/sakura_core/CGrepEnumKeys.h @@ -78,7 +78,7 @@ class CGrepEnumKeys { return excludeFiles; } - // 除外フォルダの2つの解析済み配列から1つのリストを作る + // 除外フォルダーの2つの解析済み配列から1つのリストを作る auto GetExcludeFolders() const -> std::list { std::list excludeFolders; const auto& folderKeys = m_vecExceptFolderKeys; @@ -89,7 +89,7 @@ class CGrepEnumKeys { } int SetFileKeys( LPCWSTR lpKeys ){ - const WCHAR* WILDCARD_ANY = L"*.*"; //サブフォルダ探索用 + const WCHAR* WILDCARD_ANY = L"*.*"; //サブフォルダー探索用 ClearItems(); std::vector< wstring > patterns = SplitPattern(lpKeys); @@ -158,8 +158,8 @@ class CGrepEnumKeys { } /*! - @brief 除外フォルダパターンを追加する - @param[in] lpKeys 除外フォルダパターン + @brief 除外フォルダーパターンを追加する + @param[in] lpKeys 除外フォルダーパターン */ int AddExceptFolder(LPCWSTR lpKeys) { return ParseAndAddException(lpKeys, m_vecExceptFolderKeys, m_vecExceptAbsFolderKeys); @@ -242,7 +242,7 @@ class CGrepEnumKeys { /* @retval 0 正常終了 - @retval 1 *\file.exe などのフォルダ部分でのワイルドカードはエラー + @retval 1 *\file.exe などのフォルダー部分でのワイルドカードはエラー */ int ValidateKey( LPCWSTR key ){ // diff --git a/sakura_core/CLoadAgent.cpp b/sakura_core/CLoadAgent.cpp index b045f43012..a2d2b4bcb6 100644 --- a/sakura_core/CLoadAgent.cpp +++ b/sakura_core/CLoadAgent.cpp @@ -48,13 +48,13 @@ ECallbackResult CLoadAgent::OnCheckLoad(SLoadInfo* pLoadInfo) // リロード要求の場合は、継続。 if(pLoadInfo->bRequestReload)goto next; - //フォルダが指定された場合は「ファイルを開く」ダイアログを表示し、実際のファイル入力を促す + //フォルダーが指定された場合は「ファイルを開く」ダイアログを表示し、実際のファイル入力を促す if( IsDirectory(pLoadInfo->cFilePath) ){ std::vector files; SLoadInfo sLoadInfo(L"", CODE_AUTODETECT, false); bool bDlgResult = pcDoc->m_cDocFileOperation.OpenFileDialog( CEditWnd::getInstance()->GetHwnd(), - pLoadInfo->cFilePath, //指定されたフォルダ + pLoadInfo->cFilePath, //指定されたフォルダー &sLoadInfo, files ); diff --git a/sakura_core/CProfile.cpp b/sakura_core/CProfile.cpp index fb3eba5242..3c98157985 100644 --- a/sakura_core/CProfile.cpp +++ b/sakura_core/CProfile.cpp @@ -53,11 +53,11 @@ void EnsureDirectoryExist( const std::wstring& strProfileName ) { const size_t cchLastYen = strProfileName.find_last_of( L'\\' ); if( cchLastYen != std::wstring::npos && cchLastYen < strProfileName.length() && cchLastYen + 1 < _MAX_PATH ){ - // フォルダのパスを取得する + // フォルダーのパスを取得する WCHAR szProfileFolder[_MAX_PATH]{ 0 }; ::wcsncpy_s( szProfileFolder, strProfileName.data(), cchLastYen + 1 ); - // フォルダが存在しなければ作成する + // フォルダーが存在しなければ作成する if( !IsDirectory( szProfileFolder ) ){ MakeSureDirectoryPathExistsW( szProfileFolder ); } diff --git a/sakura_core/CSelectLang.cpp b/sakura_core/CSelectLang.cpp index 8a246b0206..ed04c34239 100644 --- a/sakura_core/CSelectLang.cpp +++ b/sakura_core/CSelectLang.cpp @@ -131,7 +131,7 @@ HINSTANCE CSelectLang::InitializeLanguageEnvironment( void ) //カレントディレクトリを保存。関数から抜けるときに自動でカレントディレクトリは復元される。 CCurrentDirectoryBackupPoint cCurDirBackup; ChangeCurrentDirectoryToExeDir(); -// ★iniまたはexeフォルダとなるように改造が必要 +// ★iniまたはexeフォルダーとなるように改造が必要 WIN32_FIND_DATA w32fd; WCHAR szPath[] = L"sakura_lang_*.dll"; // サーチするメッセージリソースDLL @@ -139,7 +139,7 @@ HINSTANCE CSelectLang::InitializeLanguageEnvironment( void ) BOOL result = (INVALID_HANDLE_VALUE != handle) ? TRUE : FALSE; while( result ){ - if( ! (w32fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ){ //フォルダでない + if( ! (w32fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ){ //フォルダーでない // バッファに登録する。 psLangInfo = new SSelLangInfo(); wcscpy( psLangInfo->szDllName, w32fd.cFileName ); diff --git a/sakura_core/CSortedTagJumpList.cpp b/sakura_core/CSortedTagJumpList.cpp index 4780df477b..fcdc2b9d38 100644 --- a/sakura_core/CSortedTagJumpList.cpp +++ b/sakura_core/CSortedTagJumpList.cpp @@ -86,7 +86,7 @@ void CSortedTagJumpList::Empty( void ) } /* - 基準フォルダを登録し、基準フォルダIDを取得 + 基準フォルダーを登録し、基準フォルダーIDを取得 @date 2010.07.23 Moca 新規追加 */ int CSortedTagJumpList::AddBaseDir( const WCHAR* baseDir ) @@ -106,7 +106,7 @@ int CSortedTagJumpList::AddBaseDir( const WCHAR* baseDir ) @param[in] type 種類 @param[in] note 備考 @param[in] depth (さかのぼる)階層 - @param[in] baseDirId 基準フォルダID。0で空文字列指定 (AddBaseDirの戻り値) + @param[in] baseDirId 基準フォルダーID。0で空文字列指定 (AddBaseDirの戻り値) @retval TRUE 追加した @retval FALSE 追加失敗 @date 2010.07.23 Moca baseDirId 追加 @@ -168,7 +168,7 @@ BOOL CSortedTagJumpList::AddParamA( const ACHAR* keyword, const ACHAR* filename, @param[out] type 種類 @param[out] note 備考 @param[out] depth (さかのぼる)階層 - @param[out] baseDir ファイル名の基準フォルダ + @param[out] baseDir ファイル名の基準フォルダー @return 処理結果 @note 不要な情報の場合は引数に NULL を指定する。 diff --git a/sakura_core/Funccode_x.hsrc b/sakura_core/Funccode_x.hsrc index 61892ca740..631616153e 100644 --- a/sakura_core/Funccode_x.hsrc +++ b/sakura_core/Funccode_x.hsrc @@ -19,7 +19,7 @@ // [参考] // 10000- : ウィンドウ一覧で使用する // 11000- : 最近使ったファイルで使用する -// 12000- : 最近使ったフォルダで使用する +// 12000- : 最近使ったフォルダーで使用する //enum EFunctionCode{ @@ -49,7 +49,7 @@ F_PLUGCOMMAND_LAST = 21999, // Main Menu 特殊機能 F_WINDOW_LIST = 29001, // ウィンドウリスト F_FILE_USED_RECENTLY = 29002, // 最近使ったファイル -F_FOLDER_USED_RECENTLY = 29003, // 最近使ったフォルダ +F_FOLDER_USED_RECENTLY = 29003, // 最近使ったフォルダー F_CUSTMENU_LIST = 29004, // カスタムメニューリスト F_USERMACRO_LIST = 29005, // 登録済みマクロリスト F_PLUGIN_LIST = 29006, // プラグインコマンドリスト @@ -260,7 +260,7 @@ F_COPYPATH = 30620, //このファイルのパス名をクリップボード F_COPYTAG = 30621, //このファイルのパス名とカーソル位置をコピー なし F_COPYFNAME = 30622, //このファイル名をクリップボードにコピー なし F_CREATEKEYBINDLIST = 30630, //キー割り当て一覧をコピー なし -F_COPYDIRPATH = 30631, //このファイルのフォルダ名をクリップボードにコピー なし +F_COPYDIRPATH = 30631, //このファイルのフォルダー名をクリップボードにコピー なし // 挿入系 @@ -269,7 +269,7 @@ F_INS_TIME = 30791, //時刻挿入 なし F_CTRL_CODE_DIALOG = 30792, //コントロールコードの入力(ダイアログ) なし F_CTRL_CODE = 30793, //コントロールコードの入力 wchar_t code F_INS_FILE_USED_RECENTLY = 30794, // 最近使ったファイル挿入 -F_INS_FOLDER_USED_RECENTLY = 30795, // 最近使ったフォルダ挿入 +F_INS_FOLDER_USED_RECENTLY = 30795, // 最近使ったフォルダー挿入 // 変換系 @@ -552,7 +552,7 @@ F_COMPAREVERSION = 40029, // バージョン番号の比較 F_MACROSLEEP = 40030, // 指定した時間(ミリ秒)停止 F_FILEOPENDIALOG = 40031, // ファイルを開くダイアログの表示 F_FILESAVEDIALOG = 40032, // ファイルを保存ダイアログの表示 -F_FOLDERDIALOG = 40033, // フォルダを開くダイアログの表示 +F_FOLDERDIALOG = 40033, // フォルダーを開くダイアログの表示 F_GETCLIPBOARD = 40034, // クリップボードの文字列を取得 F_SETCLIPBOARD = 40035, // クリップボードに文字列を設定 F_LAYOUTTOLOGICLINENUM = 40036, // ロジック行番号取得 diff --git a/sakura_core/GrepInfo.h b/sakura_core/GrepInfo.h index 5f24537af0..f568d8b876 100644 --- a/sakura_core/GrepInfo.h +++ b/sakura_core/GrepInfo.h @@ -42,18 +42,18 @@ struct GrepInfo { CNativeW cmGrepKey; //!< 検索キー CNativeW cmGrepRep; //!< 置換キー CNativeW cmGrepFile; //!< 検索対象ファイル - CNativeW cmGrepFolder; //!< 検索対象フォルダ + CNativeW cmGrepFolder; //!< 検索対象フォルダー SSearchOption sGrepSearchOption; //!< 検索オプション bool bGrepCurFolder; //!< カレントディレクトリを維持 bool bGrepStdout; //!< 標準出力モード bool bGrepHeader; //!< ヘッダー情報表示 - bool bGrepSubFolder; //!< サブフォルダを検索する + bool bGrepSubFolder; //!< サブフォルダーを検索する ECodeType nGrepCharSet; //!< 文字コードセット int nGrepOutputStyle; //!< 結果出力形式 int nGrepOutputLineType; //!< 結果出力:行を出力/該当部分/否マッチ行 bool bGrepOutputFileOnly; //!< ファイル毎最初のみ検索 - bool bGrepOutputBaseFolder; //!< ベースフォルダ表示 - bool bGrepSeparateFolder; //!< フォルダ毎に表示 + bool bGrepOutputBaseFolder; //!< ベースフォルダー表示 + bool bGrepSeparateFolder; //!< フォルダー毎に表示 bool bGrepReplace; //!< Grep置換 bool bGrepPaste; //!< クリップボードから貼り付け bool bGrepBackup; //!< 置換でバックアップを保存 diff --git a/sakura_core/_main/CCommandLine.cpp b/sakura_core/_main/CCommandLine.cpp index 3b39bfdd47..f6950a5be4 100644 --- a/sakura_core/_main/CCommandLine.cpp +++ b/sakura_core/_main/CCommandLine.cpp @@ -54,7 +54,7 @@ #define CMDLINEOPT_WY 10 //!< ウィンドウ左上のY座標 #define CMDLINEOPT_GKEY 101 //!< Grepの検索文字列 #define CMDLINEOPT_GFILE 102 //!< Grepの検索対象のファイル -#define CMDLINEOPT_GFOLDER 103 //!< Grepの検索対象のフォルダ +#define CMDLINEOPT_GFOLDER 103 //!< Grepの検索対象のフォルダー #define CMDLINEOPT_GOPT 104 //!< Grepの条件 #define CMDLINEOPT_GCODE 105 //!< Grepでの文字コードを指定 #define CMDLINEOPT_M 106 //!< 起動時に実行するマクロのファイル名を指定 @@ -446,7 +446,7 @@ void CCommandLine::ParseCommandLine( LPCWSTR pszCmdLineSrc, bool bResponse ) case 'H': m_gi.bGrepHeader = false; break; case 'S': - // サブフォルダからも検索する + // サブフォルダーからも検索する m_gi.bGrepSubFolder = true; break; case 'L': // 英大文字と英小文字を区別する diff --git a/sakura_core/_main/CControlProcess.cpp b/sakura_core/_main/CControlProcess.cpp index dfbe16133e..64a058f0c9 100644 --- a/sakura_core/_main/CControlProcess.cpp +++ b/sakura_core/_main/CControlProcess.cpp @@ -42,7 +42,7 @@ std::filesystem::path CControlProcess::GetIniFileName() const auto iniPath = GetExeFileName().replace_extension(L".ini"); // マルチユーザー用のiniファイルパス - // exeと同じフォルダに置かれたマルチユーザー構成設定ファイル(sakura.exe.ini)の内容 + // exeと同じフォルダーに置かれたマルチユーザー構成設定ファイル(sakura.exe.ini)の内容 // に従ってマルチユーザー用のiniファイルパスを決める auto exeIniPath = GetExeFileName().concat(L".ini"); if (bool isMultiUserSeggings = ::GetPrivateProfileInt(L"Settings", L"MultiUser", 0, exeIniPath.c_str()); isMultiUserSeggings) { @@ -67,16 +67,16 @@ std::filesystem::path CControlProcess::GetPrivateIniFileName(const std::wstring& KNOWNFOLDERID refFolderId; switch (int nFolder = ::GetPrivateProfileInt(L"Settings", L"UserRootFolder", 0, exeIniPath.c_str())) { case 1: - refFolderId = FOLDERID_Profile; // ユーザーのルートフォルダ + refFolderId = FOLDERID_Profile; // ユーザーのルートフォルダー break; case 2: - refFolderId = FOLDERID_Documents; // ユーザーのドキュメントフォルダ + refFolderId = FOLDERID_Documents; // ユーザーのドキュメントフォルダー break; case 3: - refFolderId = FOLDERID_Desktop; // ユーザーのデスクトップフォルダ + refFolderId = FOLDERID_Desktop; // ユーザーのデスクトップフォルダー break; default: - refFolderId = FOLDERID_RoamingAppData; // ユーザーのアプリケーションデータフォルダ + refFolderId = FOLDERID_RoamingAppData; // ユーザーのアプリケーションデータフォルダー break; } diff --git a/sakura_core/_main/CControlTray.cpp b/sakura_core/_main/CControlTray.cpp index 81d8f250e1..6132f84002 100644 --- a/sakura_core/_main/CControlTray.cpp +++ b/sakura_core/_main/CControlTray.cpp @@ -87,13 +87,13 @@ void CControlTray::DoGrep() wcscpy( m_cDlgGrep.m_szFile, m_pShareData->m_sSearchKeywords.m_aGrepFiles[0] ); /* 検索ファイル */ } if( 0 < m_pShareData->m_sSearchKeywords.m_aGrepFolders.size() ){ - wcscpy( m_cDlgGrep.m_szFolder, m_pShareData->m_sSearchKeywords.m_aGrepFolders[0] ); /* 検索フォルダ */ + wcscpy( m_cDlgGrep.m_szFolder, m_pShareData->m_sSearchKeywords.m_aGrepFolders[0] ); /* 検索フォルダー */ } if (0 < m_pShareData->m_sSearchKeywords.m_aExcludeFiles.size()) { wcscpy(m_cDlgGrep.m_szExcludeFile, m_pShareData->m_sSearchKeywords.m_aExcludeFiles[0]); /* 除外ファイル */ } if (0 < m_pShareData->m_sSearchKeywords.m_aExcludeFolders.size()) { - wcscpy(m_cDlgGrep.m_szExcludeFolder, m_pShareData->m_sSearchKeywords.m_aExcludeFolders[0]); /* 除外フォルダ */ + wcscpy(m_cDlgGrep.m_szExcludeFolder, m_pShareData->m_sSearchKeywords.m_aExcludeFolders[0]); /* 除外フォルダー */ } /* Grepダイアログの表示 */ @@ -138,7 +138,7 @@ void CControlTray::DoGrepCreateWindow(HINSTANCE hinst, HWND msgParent, CDlgGrep& //GOPTオプション WCHAR pOpt[64] = L""; - if( cDlgGrep.m_bSubFolder )wcscat( pOpt, L"S" ); // サブフォルダからも検索する + if( cDlgGrep.m_bSubFolder )wcscat( pOpt, L"S" ); // サブフォルダーからも検索する if( cDlgGrep.m_sSearchOption.bLoHiCase )wcscat( pOpt, L"L" ); // 英大文字と英小文字を区別する if( cDlgGrep.m_sSearchOption.bRegularExp )wcscat( pOpt, L"R" ); // 正規表現 if( cDlgGrep.m_nGrepOutputLineType == 1 )wcscat( pOpt, L"P" ); // 行を出力する @@ -1544,7 +1544,7 @@ int CControlTray::CreatePopUpMenu_L( void ) int nEnable = (cMRU.MenuLength() > 0 ? 0 : MF_GRAYED); m_cMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING | MF_POPUP | nEnable, (UINT_PTR)hMenuPopUp , LS( F_FILE_RCNTFILE_SUBMENU ), L"F" ); - /* 最近使ったフォルダのメニューを作成 */ + /* 最近使ったフォルダーのメニューを作成 */ //@@@ 2001.12.26 YAZAKI OPENFOLDERリストは、CMRUFolderにすべて依頼する const CMRUFolder cMRUFolder; hMenuPopUp = cMRUFolder.CreateMenu( &m_cMenuDrawer ); diff --git a/sakura_core/_main/CNormalProcess.cpp b/sakura_core/_main/CNormalProcess.cpp index ef01557d5d..90a0a3320a 100644 --- a/sakura_core/_main/CNormalProcess.cpp +++ b/sakura_core/_main/CNormalProcess.cpp @@ -245,7 +245,7 @@ bool CNormalProcess::InitializeProcess() CNativeW cmemGrepFolder = gi.cmGrepFolder; if( gi.cmGrepFolder.GetStringLength() < MAX_GREP_PATH ){ CSearchKeywordManager().AddToGrepFolderArr( gi.cmGrepFolder.GetStringPtr() ); - // 2013.05.21 指定なしの場合はカレントフォルダにする + // 2013.05.21 指定なしの場合はカレントフォルダーにする if( cmemGrepFolder.GetStringLength() == 0 ){ WCHAR szCurDir[_MAX_PATH]; ::GetCurrentDirectory( _countof(szCurDir), szCurDir ); @@ -272,7 +272,7 @@ bool CNormalProcess::InitializeProcess() wcsncpy( pEditWnd->m_cDlgGrep.m_szFile, gi.cmGrepFile.GetStringPtr(), nSize ); /* 検索ファイル */ pEditWnd->m_cDlgGrep.m_szFile[nSize-1] = L'\0'; nSize = _countof2(pEditWnd->m_cDlgGrep.m_szFolder); - wcsncpy( pEditWnd->m_cDlgGrep.m_szFolder, cmemGrepFolder.GetStringPtr(), nSize ); /* 検索フォルダ */ + wcsncpy( pEditWnd->m_cDlgGrep.m_szFolder, cmemGrepFolder.GetStringPtr(), nSize ); /* 検索フォルダー */ pEditWnd->m_cDlgGrep.m_szFolder[nSize-1] = L'\0'; // Feb. 23, 2003 Moca Owner windowが正しく指定されていなかった diff --git a/sakura_core/cmd/CViewCommander.cpp b/sakura_core/cmd/CViewCommander.cpp index 41a3b7af35..0a7359c1c7 100644 --- a/sakura_core/cmd/CViewCommander.cpp +++ b/sakura_core/cmd/CViewCommander.cpp @@ -382,7 +382,7 @@ BOOL CViewCommander::HandleCommand( case F_ADDTAIL_W: Command_ADDTAIL( (const wchar_t*)lparam1, (int)lparam2 );break; /* 最後にテキストを追加 */ case F_COPYFNAME: Command_COPYFILENAME();break; //このファイル名をクリップボードにコピー / /2002/2/3 aroka case F_COPYPATH: Command_COPYPATH();break; //このファイルのパス名をクリップボードにコピー - case F_COPYDIRPATH: Command_COPYDIRPATH();break; //このファイルのフォルダ名をクリップボードにコピー + case F_COPYDIRPATH: Command_COPYDIRPATH();break; //このファイルのフォルダー名をクリップボードにコピー case F_COPYTAG: Command_COPYTAG();break; //このファイルのパス名とカーソル位置をコピー //Sept. 15, 2000 jepro 上と同じ説明になっていたのを修正 case F_COPYLINES: Command_COPYLINES();break; //選択範囲内全行コピー case F_COPYLINESASPASSAGE: Command_COPYLINESASPASSAGE();break; //選択範囲内全行引用符付きコピー @@ -398,7 +398,7 @@ BOOL CViewCommander::HandleCommand( case F_CTRL_CODE_DIALOG: Command_CtrlCode_Dialog();break; /* コントロールコードの入力(ダイアログ) */ //@@@ 2002.06.02 MIK case F_CTRL_CODE: Command_WCHAR( (wchar_t)lparam1, false );break; case F_INS_FILE_USED_RECENTLY: Command_INS_FILE_USED_RECENTLY();break; //最近使ったファイル挿入 - case F_INS_FOLDER_USED_RECENTLY:Command_INS_FOLDER_USED_RECENTLY();break; //最近使ったフォルダ挿入 + case F_INS_FOLDER_USED_RECENTLY:Command_INS_FOLDER_USED_RECENTLY();break; //最近使ったフォルダー挿入 /* 変換 */ case F_TOLOWER: Command_TOLOWER();break; /* 小文字 */ diff --git a/sakura_core/cmd/CViewCommander.h b/sakura_core/cmd/CViewCommander.h index fecbda581f..d11a419d6e 100644 --- a/sakura_core/cmd/CViewCommander.h +++ b/sakura_core/cmd/CViewCommander.h @@ -229,7 +229,7 @@ class CViewCommander{ void Command_ADDTAIL( const wchar_t* pszData, int nDataLen); /* 最後にテキストを追加 */ void Command_COPYFILENAME( void ); /* このファイル名をクリップボードにコピー */ //2002/2/3 aroka void Command_COPYPATH( void ); /* このファイルのパス名をクリップボードにコピー */ - void Command_COPYDIRPATH( void ); /* このファイルのフォルダ名をクリップボードにコピー */ + void Command_COPYDIRPATH( void ); /* このファイルのフォルダー名をクリップボードにコピー */ void Command_COPYTAG( void ); /* このファイルのパス名とカーソル位置をコピー */ void Command_COPYLINES( void ); /* 選択範囲内全行コピー */ void Command_COPYLINESASPASSAGE( void ); /* 選択範囲内全行引用符付きコピー */ @@ -244,7 +244,7 @@ class CViewCommander{ void Command_INS_TIME( void ); //時刻挿入 void Command_CtrlCode_Dialog(void); /* コントロールコードの入力(ダイアログ) */ //@@@ 2002.06.02 MIK void Command_INS_FILE_USED_RECENTLY( void ); //最近使ったファイル挿入 - void Command_INS_FOLDER_USED_RECENTLY( void ); //最近使ったフォルダ挿入 + void Command_INS_FOLDER_USED_RECENTLY( void ); //最近使ったフォルダー挿入 /* 変換系 */ void Command_TOLOWER( void ); /* 小文字 */ diff --git a/sakura_core/cmd/CViewCommander_Clipboard.cpp b/sakura_core/cmd/CViewCommander_Clipboard.cpp index 031f1b52c0..8c383f804c 100644 --- a/sakura_core/cmd/CViewCommander_Clipboard.cpp +++ b/sakura_core/cmd/CViewCommander_Clipboard.cpp @@ -1121,7 +1121,7 @@ void CViewCommander::Command_COPYPATH( void ) } } -/* 現在編集中のファイルのフォルダ名をクリップボードにコピー */ +/* 現在編集中のファイルのフォルダー名をクリップボードにコピー */ void CViewCommander::Command_COPYDIRPATH( void ) { if (!GetDocument()->m_cDocFile.GetFilePathClass().IsValidPath()) { @@ -1138,7 +1138,7 @@ void CViewCommander::Command_COPYDIRPATH( void ) strFolder.erase(itrClear); } - /* クリップボードにフォルダ名をコピー */ + /* クリップボードにフォルダー名をコピー */ m_pCommanderView->MySetClipboardData( strFolder.c_str(), strFolder.size(), false ); } diff --git a/sakura_core/cmd/CViewCommander_File.cpp b/sakura_core/cmd/CViewCommander_File.cpp index 0fc84c8c7c..2b74ada4cf 100644 --- a/sakura_core/cmd/CViewCommander_File.cpp +++ b/sakura_core/cmd/CViewCommander_File.cpp @@ -122,18 +122,18 @@ void CViewCommander::Command_FILEOPEN( const WCHAR* filename, ECodeType nCharCod my_splitpath_t(defName.c_str(), szPath, szDir, szName, szExt); wcscat(szPath, szDir); if( 0 == wmemicmp(defName.c_str(), szPath) ){ - // defNameはフォルダ名だった + // defNameはフォルダー名だった }else{ CFilePath path = defName.c_str(); if( 0 == wmemicmp(path.GetDirPath().c_str(), szPath) ){ - // フォルダ名までは実在している + // フォルダー名までは実在している sLoadInfo.cFilePath = defName.c_str(); } } } bool bDlgResult = GetDocument()->m_cDocFileOperation.OpenFileDialog( CEditWnd::getInstance()->GetHwnd(), //[in] オーナーウィンドウ - defName.length()==0 ? NULL : defName.c_str(), //[in] フォルダ + defName.length()==0 ? NULL : defName.c_str(), //[in] フォルダー &sLoadInfo, //[out] ロード情報受け取り files //[out] ファイル名 ); diff --git a/sakura_core/cmd/CViewCommander_Grep.cpp b/sakura_core/cmd/CViewCommander_Grep.cpp index 4c8bf0a871..9761adca6b 100644 --- a/sakura_core/cmd/CViewCommander_Grep.cpp +++ b/sakura_core/cmd/CViewCommander_Grep.cpp @@ -236,7 +236,7 @@ void CViewCommander::Command_GREP_REPLACE( void ) //GOPTオプション WCHAR pOpt[64]; pOpt[0] = L'\0'; - if( cDlgGrepRep.m_bSubFolder )wcscat( pOpt, L"S" ); // サブフォルダからも検索する + if( cDlgGrepRep.m_bSubFolder )wcscat( pOpt, L"S" ); // サブフォルダーからも検索する if( cDlgGrepRep.m_sSearchOption.bWordOnly )wcscat( pOpt, L"W" ); // 単語単位で探す if( cDlgGrepRep.m_sSearchOption.bLoHiCase )wcscat( pOpt, L"L" ); // 英大文字と英小文字を区別する if( cDlgGrepRep.m_sSearchOption.bRegularExp )wcscat( pOpt, L"R" ); // 正規表現 diff --git a/sakura_core/cmd/CViewCommander_Insert.cpp b/sakura_core/cmd/CViewCommander_Insert.cpp index c8b0f0285f..31c1fc1878 100644 --- a/sakura_core/cmd/CViewCommander_Insert.cpp +++ b/sakura_core/cmd/CViewCommander_Insert.cpp @@ -80,7 +80,7 @@ void CViewCommander::Command_INS_FILE_USED_RECENTLY( void ) Command_INSTEXT( true, s.c_str(), (CLogicInt)s.size(), TRUE ); } -// 最近使ったフォルダ挿入 +// 最近使ったフォルダー挿入 void CViewCommander::Command_INS_FOLDER_USED_RECENTLY( void ) { std::wstring eol = GetDocument()->m_cDocEditor.GetNewLineCode().GetValue2(); diff --git a/sakura_core/cmd/CViewCommander_Macro.cpp b/sakura_core/cmd/CViewCommander_Macro.cpp index 71fec1a930..a4850d4d53 100644 --- a/sakura_core/cmd/CViewCommander_Macro.cpp +++ b/sakura_core/cmd/CViewCommander_Macro.cpp @@ -40,7 +40,7 @@ void CViewCommander::Command_RECKEYMACRO( void ) if( GetDllShareData().m_sFlags.m_bRecordingKeyMacro ){ /* キーボードマクロの記録中 */ GetDllShareData().m_sFlags.m_bRecordingKeyMacro = FALSE; GetDllShareData().m_sFlags.m_hwndRecordingKeyMacro = NULL; /* キーボードマクロを記録中のウィンドウ */ - //@@@ 2002.1.24 YAZAKI キーマクロをマクロ用フォルダに「RecKey.mac」という名で保存 + //@@@ 2002.1.24 YAZAKI キーマクロをマクロ用フォルダーに「RecKey.mac」という名で保存 WCHAR szInitDir[MAX_PATH]; int nRet; // 2003.06.23 Moca 記録用キーマクロのフルパスをCShareData経由で取得 @@ -98,7 +98,7 @@ void CViewCommander::Command_SAVEKEYMACRO( void ) if( _IS_REL_PATH( GetDllShareData().m_Common.m_sMacro.m_szMACROFOLDER ) ){ GetInidirOrExedir( szInitDir, GetDllShareData().m_Common.m_sMacro.m_szMACROFOLDER ); }else{ - wcscpy( szInitDir, GetDllShareData().m_Common.m_sMacro.m_szMACROFOLDER ); /* マクロ用フォルダ */ + wcscpy( szInitDir, GetDllShareData().m_Common.m_sMacro.m_szMACROFOLDER ); /* マクロ用フォルダー */ } /* ファイルオープンダイアログの初期化 */ cDlgOpenFile.Create( @@ -110,7 +110,7 @@ void CViewCommander::Command_SAVEKEYMACRO( void ) if( !cDlgOpenFile.DoModal_GetSaveFileName( szPath ) ){ return; } - /* ファイルのフルパスを、フォルダとファイル名に分割 */ + /* ファイルのフルパスを、フォルダーとファイル名に分割 */ /* [c:\work\test\aaa.txt] → [c:\work\test] + [aaa.txt] */ // ::SplitPath_FolderAndFile( szPath, GetDllShareData().m_Common.m_sMacro.m_szMACROFOLDER, NULL ); // wcscat( GetDllShareData().m_Common.m_sMacro.m_szMACROFOLDER, L"\\" ); @@ -143,7 +143,7 @@ void CViewCommander::Command_LOADKEYMACRO( void ) if( _IS_REL_PATH( pszFolder ) ){ GetInidirOrExedir( szInitDir, pszFolder ); }else{ - wcscpy( szInitDir, pszFolder ); /* マクロ用フォルダ */ + wcscpy( szInitDir, pszFolder ); /* マクロ用フォルダー */ } /* ファイルオープンダイアログの初期化 */ cDlgOpenFile.Create( @@ -208,8 +208,8 @@ void CViewCommander::Command_EXECEXTMACRO( const WCHAR* pszPath, const WCHAR* ps { CDlgOpenFile cDlgOpenFile; WCHAR szPath[_MAX_PATH + 1]; - WCHAR szInitDir[_MAX_PATH + 1]; //ファイル選択ダイアログの初期フォルダ - const WCHAR* pszFolder; //マクロフォルダ + WCHAR szInitDir[_MAX_PATH + 1]; //ファイル選択ダイアログの初期フォルダー + const WCHAR* pszFolder; //マクロフォルダー HWND hwndRecordingKeyMacro = NULL; if ( !pszPath ) { @@ -219,7 +219,7 @@ void CViewCommander::Command_EXECEXTMACRO( const WCHAR* pszPath, const WCHAR* ps if( _IS_REL_PATH( pszFolder ) ){ GetInidirOrExedir( szInitDir, pszFolder ); }else{ - wcscpy( szInitDir, pszFolder ); /* マクロ用フォルダ */ + wcscpy( szInitDir, pszFolder ); /* マクロ用フォルダー */ } /* ファイルオープンダイアログの初期化 */ cDlgOpenFile.Create( diff --git a/sakura_core/cmd/CViewCommander_TagJump.cpp b/sakura_core/cmd/CViewCommander_TagJump.cpp index 92bea00b2f..da72712da7 100644 --- a/sakura_core/cmd/CViewCommander_TagJump.cpp +++ b/sakura_core/cmd/CViewCommander_TagJump.cpp @@ -137,7 +137,7 @@ static int GetLineColumnPos(const wchar_t* pLine) @date 2003.04.03 genta 元ウィンドウを閉じるかどうかの引数を追加 @date 2004.05.13 Moca 行桁位置の指定が無い場合は、行桁を移動しない - @date 2011.11.24 Moca Grepフォルダ毎表示対応 + @date 2011.11.24 Moca Grepフォルダー毎表示対応 */ bool CViewCommander::Command_TAGJUMP( bool bClose ) { @@ -186,7 +186,7 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) // :HWND:[01234567] 無題1(1234,56): str // :HWND:[01234567] 無題1(1234,56) [SJIS]: str - // ノーマル/ベースフォルダ/フォルダ毎 + // ノーマル/ベースフォルダー/フォルダー毎 // ◎"C:\RootFolder" // ■ // ・FileName.ext(5395,11): str @@ -195,14 +195,14 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) // ・FileName.ext(5396,11): str // ・FileName2.ext(123,12): str - // ノーマル/ベースフォルダ + // ノーマル/ベースフォルダー // ■"C:\RootFolder" // ・FileName.ext(5395,11): str // ・SubFolders\FileName2.ext(5395,11): str // ・SubFolders\FileName2.ext(5396,11): str // ・SubFolders\FileName3.ext(123,11): str - // ノーマル/フォルダ毎 + // ノーマル/フォルダー毎 // ■"C:\RootFolder" // ・FileName.cpp(5395,11): str // ■"C:\RootFolder\SubFolders" @@ -219,7 +219,7 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) // ■"C:\RootFolder\SubFolders\FileName3.ext" // ・( 123,12 ): str - // ファイル毎/ベースフォルダ + // ファイル毎/ベースフォルダー // ◎"C:\RootFolder" // ■"FileName.ext" // ・( 5395,11 ): str @@ -229,7 +229,7 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) // ■"SubFolders\FileName3.ext" // ・( 123,12 ): str - // ファイル毎/ベースフォルダ/フォルダ毎 + // ファイル毎/ベースフォルダー/フォルダー毎 // ◎"C:\RootFolder" // ■ // ◆"FileName.ext" @@ -241,7 +241,7 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) // ◆"FileName3.ext" // ・( 123,12 ): str - // ファイル毎/フォルダ毎 + // ファイル毎/フォルダー毎 // ■"C:\RootFolder" // ◆"FileName.ext" // ・( 5395,11 ): str @@ -351,14 +351,14 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) if( IsHWNDTag(&pLine[2], strJumpToFile) ){ break; } - // フォルダ毎:ファイル名 + // フォルダー毎:ファイル名 if (GetQuoteFilePath(&pLine[2], strFile, MAX_TAG_PATH)) { searchMode = TAGLIST_SUBPATH; continue; } break; }else if( 2 <= nLineLen && pLine[0] == L'■' && (pLine[1] == L'\r' || pLine[1] == L'\n') ){ - // ルートフォルダ + // ルートフォルダー if( searchMode == TAGLIST_ROOT ){ continue; } @@ -375,7 +375,7 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) strJumpToFile.assign(&pLine[2 + nBgn], nPathLen); break; } - // 相対フォルダorファイル名 + // 相対フォルダーorファイル名 std::wstring strPath; if (GetQuoteFilePath(&pLine[2], strPath, MAX_TAG_PATH)) { if (strFile.empty() == false) { @@ -503,7 +503,7 @@ void CViewCommander::Command_TAGJUMPBACK( void ) @author MIK @date 2003.04.13 新規作成 - @date 2003.05.12 ダイアログ表示でフォルダ等を細かく指定できるようにした。 + @date 2003.05.12 ダイアログ表示でフォルダー等を細かく指定できるようにした。 @date 2008.05.05 novice GetModuleHandle(NULL)→NULLに変更 */ bool CViewCommander::Command_TagsMake( void ) @@ -518,7 +518,7 @@ bool CViewCommander::Command_TagsMake( void ) } else { - // 20100722 Moca サクラのフォルダからカレントディレクトリに変更 + // 20100722 Moca サクラのフォルダーからカレントディレクトリに変更 ::GetCurrentDirectory( _countof(szTargetPath), szTargetPath ); } @@ -527,7 +527,7 @@ bool CViewCommander::Command_TagsMake( void ) if( !cDlgTagsMake.DoModal( G_AppInstance(), m_pCommanderView->GetHwnd(), 0, szTargetPath ) ) return false; WCHAR cmdline[1024]; - /* exeのあるフォルダ */ + /* exeのあるフォルダー */ WCHAR szExeFolder[_MAX_PATH + 1]; GetExedir( cmdline, CTAGS_COMMAND ); @@ -579,7 +579,7 @@ bool CViewCommander::Command_TagsMake( void ) WCHAR options[1024]; wcscpy( options, L"--excmd=n" ); //デフォルトのオプション - if( cDlgTagsMake.m_nTagsOpt & 0x0001 ) wcscat( options, L" -R" ); //サブフォルダも対象 + if( cDlgTagsMake.m_nTagsOpt & 0x0001 ) wcscat( options, L" -R" ); //サブフォルダーも対象 if( cDlgTagsMake.m_szTagsCmdLine[0] != L'\0' ) //個別指定のコマンドライン { wcscat( options, L" " ); @@ -724,7 +724,7 @@ bool CViewCommander::Command_TagJumpByTagsFileMsg( bool bMsg ) @author MIK @date 2003.04.13 新規作成 - @date 2003.05.12 フォルダ階層も考慮して探す + @date 2003.05.12 フォルダー階層も考慮して探す @date */ bool CViewCommander::Command_TagJumpByTagsFile( bool bClose ) diff --git a/sakura_core/config/maxdata.h b/sakura_core/config/maxdata.h index c6baa7298b..3f92ef550e 100644 --- a/sakura_core/config/maxdata.h +++ b/sakura_core/config/maxdata.h @@ -35,9 +35,9 @@ enum maxdata{ MAX_SEARCHKEY = 30, //!< 検索キー MAX_REPLACEKEY = 30, //!< 置換キー MAX_GREPFILE = 30, //!< Grepファイル - MAX_GREPFOLDER = 30, //!< Grepフォルダ + MAX_GREPFOLDER = 30, //!< Grepフォルダー MAX_EXCLUDEFILE = 30, //!< 除外ファイル - MAX_EXCLUDEFOLDER = 30, //!< 除外フォルダ + MAX_EXCLUDEFOLDER = 30, //!< 除外フォルダー MAX_GREP_PATH = 512, //!< Grepファイルパス長 MAX_EXCLUDE_PATH = 512, //!< 除外ファイルパス長 MAX_TYPES = 60, //!< タイプ別設定 diff --git a/sakura_core/config/system_constants.h b/sakura_core/config/system_constants.h index 1eda1fc6e8..bd62f5f85d 100644 --- a/sakura_core/config/system_constants.h +++ b/sakura_core/config/system_constants.h @@ -143,7 +143,7 @@ STypeConfigに独自TABマークフラグ追加 2003.03.28 MIK Version 43: - 最近使ったファイル・フォルダにお気に入りを追加 2003.04.08 MIK + 最近使ったファイル・フォルダーにお気に入りを追加 2003.04.08 MIK Version 44: Window Caption文字列領域をCommonに追加 2003.04.05 genta @@ -200,7 +200,7 @@ 改行で行末の空白を削除するオプション(タイプ別設定) 2005/10/11 ryoji Version 62: - バックアップフォルダ 2005.11.07 aroka + バックアップフォルダー 2005.11.07 aroka Version 63: 指定桁縦線表示追加 2005.11.08 Moca @@ -248,7 +248,7 @@ タブのグループ化 2007.06.20 ryoji Version 77: - iniフォルダ設定 2007.05.31 ryoji + iniフォルダー設定 2007.05.31 ryoji Version 78: エディタ-トレイ間でのUI特権分離確認のためのバージョン合わせ 2007.06.07 ryoji @@ -530,7 +530,7 @@ ini読み取り専用オプション 2014.12.08 Moca Version 171: - Grepファイル・フォルダ長を512(MAX_GREP_PATH)に変更 + Grepファイル・フォルダー長を512(MAX_GREP_PATH)に変更 Version 172: キーワードヘルプの右クリックメニュー表示選択 @@ -539,7 +539,7 @@ STypeConfigにm_backImgOpacity 追加 Version 174: - 除外ファイル、除外フォルダを追加 + 除外ファイル、除外フォルダーを追加 Version 175: Vistaスタイルのファイルダイアログ(CommonSetting_Edit::m_bVistaStyleFileDialog)を追加 diff --git a/sakura_core/dlg/CDlgFavorite.cpp b/sakura_core/dlg/CDlgFavorite.cpp index 1ad281e505..6c4604cd2d 100644 --- a/sakura_core/dlg/CDlgFavorite.cpp +++ b/sakura_core/dlg/CDlgFavorite.cpp @@ -52,12 +52,12 @@ const DWORD p_helpids[] = { IDC_TAB_FAVORITE, HIDC_TAB_FAVORITE, //タブ IDC_LIST_FAVORITE_FILE, HIDC_LIST_FAVORITE_FILE, //ファイル - IDC_LIST_FAVORITE_FOLDER, HIDC_LIST_FAVORITE_FOLDER, //フォルダ + IDC_LIST_FAVORITE_FOLDER, HIDC_LIST_FAVORITE_FOLDER, //フォルダー IDC_LIST_FAVORITE_EXCEPTMRU, HIDC_LIST_FAVORITE_EXCEPTMRU, //MRU除外 IDC_LIST_FAVORITE_SEARCH, HIDC_LIST_FAVORITE_SEARCH, //検索 IDC_LIST_FAVORITE_REPLACE, HIDC_LIST_FAVORITE_REPLACE, //置換 IDC_LIST_FAVORITE_GREP_FILE, HIDC_LIST_FAVORITE_GREPFILE, //GREPファイル - IDC_LIST_FAVORITE_GREP_FOLDER, HIDC_LIST_FAVORITE_GREPFOLDER, //GREPフォルダ + IDC_LIST_FAVORITE_GREP_FOLDER, HIDC_LIST_FAVORITE_GREPFOLDER, //GREPフォルダー IDC_LIST_FAVORITE_CMD, HIDC_LIST_FAVORITE_CMD, //コマンド IDC_LIST_FAVORITE_CUR_DIR, HIDC_LIST_FAVORITE_CUR_DIR, //カレントディレクトリ // IDC_STATIC_BUTTONS, -1, diff --git a/sakura_core/dlg/CDlgFavorite.h b/sakura_core/dlg/CDlgFavorite.h index 39c65fbfcf..b2508a0087 100644 --- a/sakura_core/dlg/CDlgFavorite.h +++ b/sakura_core/dlg/CDlgFavorite.h @@ -114,7 +114,7 @@ class CDlgFavorite final : public CDialog int m_nId; //コントロールのID bool m_bHaveFavorite; //お気に入りを持っているか? bool m_bHaveView; //表示数変更機能をもっているか? - bool m_bFilePath; //ファイル/フォルダか? + bool m_bFilePath; //ファイル/フォルダーか? bool m_bEditable; //編集可能 bool m_bAddExcept; //除外へ追加 int m_nViewCount; //カレントの表示数 diff --git a/sakura_core/dlg/CDlgGrep.cpp b/sakura_core/dlg/CDlgGrep.cpp index 478e5bc617..4b24971f45 100644 --- a/sakura_core/dlg/CDlgGrep.cpp +++ b/sakura_core/dlg/CDlgGrep.cpp @@ -39,13 +39,13 @@ //GREP CDlgGrep.cpp //@@@ 2002.01.07 add start MIK const DWORD p_helpids[] = { //12000 - IDC_BUTTON_FOLDER, HIDC_GREP_BUTTON_FOLDER, //フォルダ - IDC_BUTTON_CURRENTFOLDER, HIDC_GREP_BUTTON_CURRENTFOLDER, //現フォルダ + IDC_BUTTON_FOLDER, HIDC_GREP_BUTTON_FOLDER, //フォルダー + IDC_BUTTON_CURRENTFOLDER, HIDC_GREP_BUTTON_CURRENTFOLDER, //現フォルダー IDOK, HIDOK_GREP, //検索 IDCANCEL, HIDCANCEL_GREP, //キャンセル IDC_BUTTON_HELP, HIDC_GREP_BUTTON_HELP, //ヘルプ IDC_CHK_WORD, HIDC_GREP_CHK_WORD, //単語単位 - IDC_CHK_SUBFOLDER, HIDC_GREP_CHK_SUBFOLDER, //サブフォルダも検索 + IDC_CHK_SUBFOLDER, HIDC_GREP_CHK_SUBFOLDER, //サブフォルダーも検索 IDC_CHK_FROMTHISTEXT, HIDC_GREP_CHK_FROMTHISTEXT, //編集中のテキストから検索 IDC_CHK_LOHICASE, HIDC_GREP_CHK_LOHICASE, //大文字小文字 IDC_CHK_REGULAREXP, HIDC_GREP_CHK_REGULAREXP, //正規表現 @@ -53,9 +53,9 @@ const DWORD p_helpids[] = { //12000 IDC_CHECK_CP, HIDC_GREP_CHECK_CP, //コードページ IDC_COMBO_TEXT, HIDC_GREP_COMBO_TEXT, //条件 IDC_COMBO_FILE, HIDC_GREP_COMBO_FILE, //ファイル - IDC_COMBO_FOLDER, HIDC_GREP_COMBO_FOLDER, //フォルダ + IDC_COMBO_FOLDER, HIDC_GREP_COMBO_FOLDER, //フォルダー IDC_COMBO_EXCLUDE_FILE, HIDC_GREP_COMBO_EXCLUDE_FILE, //除外ファイル - IDC_COMBO_EXCLUDE_FOLDER, HIDC_GREP_COMBO_EXCLUDE_FOLDER, //除外フォルダ + IDC_COMBO_EXCLUDE_FOLDER, HIDC_GREP_COMBO_EXCLUDE_FOLDER, //除外フォルダー IDC_BUTTON_FOLDER_UP, HIDC_GREP_BUTTON_FOLDER_UP, //上 IDC_RADIO_OUTPUTLINE, HIDC_GREP_RADIO_OUTPUTLINE, //結果出力:行単位 IDC_RADIO_OUTPUTMARKED, HIDC_GREP_RADIO_OUTPUTMARKED, //結果出力:該当部分 @@ -63,10 +63,10 @@ const DWORD p_helpids[] = { //12000 IDC_RADIO_OUTPUTSTYLE2, HIDC_GREP_RADIO_OUTPUTSTYLE2, //結果出力形式:ファイル毎 IDC_RADIO_OUTPUTSTYLE3, HIDC_RADIO_OUTPUTSTYLE3, //結果出力形式:結果のみ IDC_STATIC_JRE32VER, HIDC_GREP_STATIC_JRE32VER, //正規表現バージョン - IDC_CHK_DEFAULTFOLDER, HIDC_GREP_CHK_DEFAULTFOLDER, //フォルダの初期値をカレントフォルダにする + IDC_CHK_DEFAULTFOLDER, HIDC_GREP_CHK_DEFAULTFOLDER, //フォルダーの初期値をカレントフォルダーにする IDC_CHECK_FILE_ONLY, HIDC_CHECK_FILE_ONLY, //ファイル毎最初のみ検索 - IDC_CHECK_BASE_PATH, HIDC_CHECK_BASE_PATH, //ベースフォルダ表示 - IDC_CHECK_SEP_FOLDER, HIDC_CHECK_SEP_FOLDER, //フォルダ毎に表示 + IDC_CHECK_BASE_PATH, HIDC_CHECK_BASE_PATH, //ベースフォルダー表示 + IDC_CHECK_SEP_FOLDER, HIDC_CHECK_SEP_FOLDER, //フォルダー毎に表示 // IDC_STATIC, -1, 0, 0 }; //@@@ 2002.01.07 add end MIK @@ -77,7 +77,7 @@ CDlgGrep::CDlgGrep() { m_bEnableThisText = true; m_bSelectOnceThisText = false; - m_bSubFolder = FALSE; // サブフォルダからも検索する + m_bSubFolder = FALSE; // サブフォルダーからも検索する m_bFromThisText = FALSE; // この編集中のテキストから検索する m_sSearchOption.Reset(); // 検索オプション m_nGrepCharSet = CODE_SJIS; // 文字コードセット @@ -96,7 +96,7 @@ CDlgGrep::CDlgGrep() } /* - @brief ファイル/フォルダの除外パターンをエスケープする必要があるか判断する + @brief ファイル/フォルダーの除外パターンをエスケープする必要があるか判断する @param[in] pattern チェックするパターン @return true エスケープする必要がある @return false エスケープする必要がない @@ -135,9 +135,9 @@ static LPCWSTR GetEscapePattern(const std::wstring& pattern) } /* - @brief フォルダの除外パターンを詰める + @brief フォルダーの除外パターンを詰める @param[in,out] cFilePattern "-GFILE=" に指定する引数用のバッファ (このバッファの末尾に追加する) - @param[in] cmWorkExcludeFolder Grep ダイアログで指定されたフォルダの除外パターン + @param[in] cmWorkExcludeFolder Grep ダイアログで指定されたフォルダーの除外パターン @author m-tmatma */ static void AppendExcludeFolderPatterns(CNativeW& cFilePattern, const CNativeW& cmWorkExcludeFolder) @@ -169,7 +169,7 @@ static void AppendExcludeFilePatterns(CNativeW& cFilePattern, const CNativeW& cm } /*! - * 除外ファイル、除外フォルダの設定を "-GFILE=" の設定に pack する + * 除外ファイル、除外フォルダーの設定を "-GFILE=" の設定に pack する */ CNativeW CDlgGrep::GetPackedGFileString() const { @@ -178,7 +178,7 @@ CNativeW CDlgGrep::GetPackedGFileString() const CNativeW cmExcludeFiles( m_szExcludeFile ); CNativeW cmExcludeFolders( m_szExcludeFolder ); - // 除外ファイル、除外フォルダの設定を "-GFILE=" の設定に pack するためにデータを作る。 + // 除外ファイル、除外フォルダーの設定を "-GFILE=" の設定に pack するためにデータを作る。 CNativeW cmGFileString( std::move( cmFilePattern ) ); AppendExcludeFolderPatterns( cmGFileString, cmExcludeFolders ); AppendExcludeFilePatterns( cmGFileString, cmExcludeFiles ); @@ -241,7 +241,7 @@ BOOL CDlgGrep::OnCbnDropDown( HWND hwndCtl, int wID ) /* モーダルダイアログの表示 */ int CDlgGrep::DoModal( HINSTANCE hInstance, HWND hwndParent, const WCHAR* pszCurrentFilePath ) { - m_bSubFolder = m_pShareData->m_Common.m_sSearch.m_bGrepSubFolder; // Grep: サブフォルダも検索 + m_bSubFolder = m_pShareData->m_Common.m_sSearch.m_bGrepSubFolder; // Grep: サブフォルダーも検索 m_sSearchOption = m_pShareData->m_Common.m_sSearch.m_sSearchOption; // 検索オプション m_nGrepCharSet = m_pShareData->m_Common.m_sSearch.m_nGrepCharSet; // 文字コードセット m_nGrepOutputLineType = m_pShareData->m_Common.m_sSearch.m_nGrepOutputLineType; // 行を出力/該当部分/否マッチ行 を出力 @@ -256,7 +256,7 @@ int CDlgGrep::DoModal( HINSTANCE hInstance, HWND hwndParent, const WCHAR* pszCur wcscpy( m_szFile, m_pShareData->m_sSearchKeywords.m_aGrepFiles[0] ); /* 検索ファイル */ } if( m_szFolder[0] == L'\0' && m_pShareData->m_sSearchKeywords.m_aGrepFolders.size() ){ - wcscpy( m_szFolder, m_pShareData->m_sSearchKeywords.m_aGrepFolders[0] ); /* 検索フォルダ */ + wcscpy( m_szFolder, m_pShareData->m_sSearchKeywords.m_aGrepFolders[0] ); /* 検索フォルダー */ } /* 除外ファイル */ @@ -273,14 +273,14 @@ int CDlgGrep::DoModal( HINSTANCE hInstance, HWND hwndParent, const WCHAR* pszCur } } - /* 除外フォルダ */ + /* 除外フォルダー */ if (m_szExcludeFolder[0] == L'\0') { if (m_pShareData->m_sSearchKeywords.m_aExcludeFolders.size()) { wcscpy(m_szExcludeFolder, m_pShareData->m_sSearchKeywords.m_aExcludeFolders[0]); } else { - /* ユーザーの利便性向上のために除外フォルダに対して初期値を設定する */ - wcscpy(m_szExcludeFolder, DEFAULT_EXCLUDE_FOLDER_PATTERN); /* 除外フォルダ */ + /* ユーザーの利便性向上のために除外フォルダーに対して初期値を設定する */ + wcscpy(m_szExcludeFolder, DEFAULT_EXCLUDE_FOLDER_PATTERN); /* 除外フォルダー */ /* 履歴に残して後で選択できるようにする */ m_pShareData->m_sSearchKeywords.m_aExcludeFolders.push_back(DEFAULT_EXCLUDE_FOLDER_PATTERN); @@ -362,7 +362,7 @@ BOOL CDlgGrep::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) return bRet; } -/*! @brief フォルダ指定EditBoxのコールバック関数 +/*! @brief フォルダー指定EditBoxのコールバック関数 @date 2007.02.09 bosagami 新規作成 @date 2007.09.02 genta ディレクトリチェックを強化 @@ -383,8 +383,8 @@ LRESULT CALLBACK OnFolderProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam) //ファイルパスの解決 CSakuraEnvironment::ResolvePath(sPath); - // ファイルがドロップされた場合はフォルダを切り出す - // フォルダの場合は最後が失われるのでsplitしてはいけない. + // ファイルがドロップされた場合はフォルダーを切り出す + // フォルダーの場合は最後が失われるのでsplitしてはいけない. if( IsFileExists( sPath, true )){ // 第2引数がtrueだとディレクトリは対象外 SFilePath szWork; SplitPath_FolderAndFile( sPath, szWork, NULL ); @@ -418,7 +418,7 @@ BOOL CDlgGrep::OnBnClicked( int wID ) // 2010.05.30 関数化 SetDataFromThisText( 0 != ::IsDlgButtonChecked( GetHwnd(), IDC_CHK_FROMTHISTEXT ) ); return TRUE; - case IDC_BUTTON_CURRENTFOLDER: /* 現在編集中のファイルのフォルダ */ + case IDC_BUTTON_CURRENTFOLDER: /* 現在編集中のファイルのフォルダー */ /* ファイルを開いているか */ if( m_szCurrentFilePath[0] != L'\0' ){ WCHAR szWorkFolder[MAX_PATH]; @@ -507,11 +507,11 @@ BOOL CDlgGrep::OnBnClicked( int wID ) return TRUE; case IDC_BUTTON_FOLDER: - /* フォルダ参照ボタン */ + /* フォルダー参照ボタン */ { const int nMaxPath = MAX_GREP_PATH; WCHAR szFolder[nMaxPath]; - /* 検索フォルダ */ + /* 検索フォルダー */ ::DlgItem_GetText( GetHwnd(), IDC_COMBO_FOLDER, szFolder, nMaxPath - 1 ); if( szFolder[0] == L'\0' ){ ::GetCurrentDirectory( nMaxPath, szFolder ); @@ -532,7 +532,7 @@ BOOL CDlgGrep::OnBnClicked( int wID ) } return TRUE; case IDC_CHK_DEFAULTFOLDER: - /* フォルダの初期値をカレントフォルダにする */ + /* フォルダーの初期値をカレントフォルダーにする */ { m_pShareData->m_Common.m_sSearch.m_bGrepDefaultFolder = ::IsDlgButtonChecked( GetHwnd(), IDC_CHK_DEFAULTFOLDER ); } @@ -564,13 +564,13 @@ BOOL CDlgGrep::OnBnClicked( int wID ) wcsncpy_s(m_szFile, _countof2(m_szFile), m_pShareData->m_sSearchKeywords.m_aGrepFiles[0], _TRUNCATE); /* 検索ファイル */ } if (m_pShareData->m_sSearchKeywords.m_aGrepFolders.size()) { - wcsncpy_s(m_szFolder, _countof2(m_szFolder), m_pShareData->m_sSearchKeywords.m_aGrepFolders[0], _TRUNCATE); /* 検索フォルダ */ + wcsncpy_s(m_szFolder, _countof2(m_szFolder), m_pShareData->m_sSearchKeywords.m_aGrepFolders[0], _TRUNCATE); /* 検索フォルダー */ } if (m_pShareData->m_sSearchKeywords.m_aExcludeFiles.size()) { wcsncpy_s(m_szExcludeFile, _countof2(m_szExcludeFile), m_pShareData->m_sSearchKeywords.m_aExcludeFiles[0], _TRUNCATE); /* 除外ファイル */ } if (m_pShareData->m_sSearchKeywords.m_aExcludeFolders.size()) { - wcsncpy_s(m_szExcludeFolder, _countof2(m_szExcludeFolder), m_pShareData->m_sSearchKeywords.m_aExcludeFolders[0], _TRUNCATE); /* 除外フォルダ */ + wcsncpy_s(m_szExcludeFolder, _countof2(m_szExcludeFolder), m_pShareData->m_sSearchKeywords.m_aExcludeFolders[0], _TRUNCATE); /* 除外フォルダー */ } } CloseDialog( FALSE ); @@ -590,13 +590,13 @@ void CDlgGrep::SetData( void ) /* 検索ファイル */ ::DlgItem_SetText( GetHwnd(), IDC_COMBO_FILE, m_szFile ); - /* 検索フォルダ */ + /* 検索フォルダー */ ::DlgItem_SetText( GetHwnd(), IDC_COMBO_FOLDER, m_szFolder ); /* 除外ファイル */ ::DlgItem_SetText( GetHwnd(), IDC_COMBO_EXCLUDE_FILE, m_szExcludeFile); - /* 除外フォルダ */ + /* 除外フォルダー */ ::DlgItem_SetText( GetHwnd(), IDC_COMBO_EXCLUDE_FOLDER, m_szExcludeFolder); if((m_szFolder[0] == L'\0' || m_pShareData->m_Common.m_sSearch.m_bGrepDefaultFolder) && @@ -608,7 +608,7 @@ void CDlgGrep::SetData( void ) SetGrepFolder( GetItemHwnd(IDC_COMBO_FOLDER), szWorkFolder ); } - /* サブフォルダからも検索する */ + /* サブフォルダーからも検索する */ ::CheckDlgButton( GetHwnd(), IDC_CHK_SUBFOLDER, m_bSubFolder ); // この編集中のテキストから検索する @@ -711,7 +711,7 @@ void CDlgGrep::SetData( void ) CheckDlgButtonBool( GetHwnd(), IDC_CHECK_BASE_PATH, m_bGrepOutputBaseFolder ); CheckDlgButtonBool( GetHwnd(), IDC_CHECK_SEP_FOLDER, m_bGrepSeparateFolder ); - // フォルダの初期値をカレントフォルダにする + // フォルダーの初期値をカレントフォルダーにする ::CheckDlgButton( GetHwnd(), IDC_CHK_DEFAULTFOLDER, m_pShareData->m_Common.m_sSearch.m_bGrepDefaultFolder ); return; @@ -763,7 +763,7 @@ void CDlgGrep::SetDataFromThisText( bool bChecked ) */ int CDlgGrep::GetData( void ) { - /* サブフォルダからも検索する*/ + /* サブフォルダーからも検索する*/ m_bSubFolder = ::IsDlgButtonChecked( GetHwnd(), IDC_CHK_SUBFOLDER ); /* この編集中のテキストから検索する */ @@ -835,11 +835,11 @@ int CDlgGrep::GetData( void ) return FALSE; } } - /* 検索フォルダ */ + /* 検索フォルダー */ ::DlgItem_GetText( GetHwnd(), IDC_COMBO_FOLDER, m_szFolder, _countof2(m_szFolder) ); /* 除外ファイル */ ::DlgItem_GetText( GetHwnd(), IDC_COMBO_EXCLUDE_FILE, m_szExcludeFile, _countof2(m_szExcludeFile)); - /* 除外フォルダ */ + /* 除外フォルダー */ ::DlgItem_GetText( GetHwnd(), IDC_COMBO_EXCLUDE_FOLDER, m_szExcludeFolder, _countof2(m_szExcludeFolder)); m_pShareData->m_Common.m_sSearch.m_nGrepCharSet = m_nGrepCharSet; // 文字コード自動判別 @@ -878,7 +878,7 @@ int CDlgGrep::GetData( void ) //カレントディレクトリを保存。このブロックから抜けるときに自動でカレントディレクトリは復元される。 CCurrentDirectoryBackupPoint cCurDirBackup; - // 2011.11.24 Moca 複数フォルダ指定 + // 2011.11.24 Moca 複数フォルダー指定 std::vector vPaths; CGrepAgent::CreateFolders( m_szFolder, vPaths ); int nFolderLen = 0; @@ -893,7 +893,7 @@ int CDlgGrep::GetData( void ) } WCHAR szFolderItem[nMaxPath]; ::GetCurrentDirectory( nMaxPath, szFolderItem ); - // ;がフォルダ名に含まれていたら""で囲う + // ;がフォルダー名に含まれていたら""で囲う if( wcschr( szFolderItem, L';' ) ){ szFolderItem[0] = L'"'; ::GetCurrentDirectory( nMaxPath, szFolderItem + 1 ); @@ -934,21 +934,21 @@ int CDlgGrep::GetData( void ) } // この編集中のテキストから検索する場合、履歴に残さない Uchi 2008/5/23 - // 2016.03.08 Moca 「このファイルから検索」の場合はサブフォルダ共通設定を更新しない + // 2016.03.08 Moca 「このファイルから検索」の場合はサブフォルダー共通設定を更新しない if (!m_bFromThisText) { /* 検索ファイル */ CSearchKeywordManager().AddToGrepFileArr( m_szFile ); - /* 検索フォルダ */ + /* 検索フォルダー */ CSearchKeywordManager().AddToGrepFolderArr( m_szFolder ); /* 除外ファイル */ CSearchKeywordManager().AddToExcludeFileArr(m_szExcludeFile); - /* 除外フォルダ */ + /* 除外フォルダー */ CSearchKeywordManager().AddToExcludeFolderArr(m_szExcludeFolder); - // Grep:サブフォルダも検索 + // Grep:サブフォルダーも検索 m_pShareData->m_Common.m_sSearch.m_bGrepSubFolder = m_bSubFolder; } diff --git a/sakura_core/dlg/CDlgGrep.h b/sakura_core/dlg/CDlgGrep.h index cfb1f1fe51..2d88b161c2 100644 --- a/sakura_core/dlg/CDlgGrep.h +++ b/sakura_core/dlg/CDlgGrep.h @@ -41,14 +41,14 @@ class CDlgGrep : public CDialog /* || Attributes & Operations */ - CNativeW GetPackedGFileString() const; //!< 除外ファイル、除外フォルダの設定を "-GFILE=" の設定に pack する + CNativeW GetPackedGFileString() const; //!< 除外ファイル、除外フォルダーの設定を "-GFILE=" の設定に pack する BOOL OnCbnDropDown( HWND hwndCtl, int wID ) override; int DoModal( HINSTANCE, HWND, const WCHAR* ); /* モーダルダイアログの表示 */ // HWND DoModeless( HINSTANCE, HWND, const char* ); /* モードレスダイアログの表示 */ bool m_bEnableThisText; bool m_bSelectOnceThisText; - BOOL m_bSubFolder;/*!< サブフォルダからも検索する */ + BOOL m_bSubFolder;/*!< サブフォルダーからも検索する */ BOOL m_bFromThisText;/*!< この編集中のテキストから検索する */ SSearchOption m_sSearchOption; //!< 検索オプション @@ -57,15 +57,15 @@ class CDlgGrep : public CDialog int m_nGrepOutputStyle; /*!< Grep: 出力形式 */ int m_nGrepOutputLineType; //!< 結果出力:行を出力/該当部分/否マッチ行 bool m_bGrepOutputFileOnly; /*!< ファイル毎最初のみ検索 */ - bool m_bGrepOutputBaseFolder; /*!< ベースフォルダ表示 */ - bool m_bGrepSeparateFolder; /*!< フォルダ毎に表示 */ + bool m_bGrepOutputBaseFolder; /*!< ベースフォルダー表示 */ + bool m_bGrepSeparateFolder; /*!< フォルダー毎に表示 */ std::wstring m_strText; /*!< 検索文字列 */ bool m_bSetText; //!< 検索文字列を設定したか SFilePathLong m_szFile; //!< 検索ファイル - SFilePathLong m_szFolder; //!< 検索フォルダ + SFilePathLong m_szFolder; //!< 検索フォルダー SFilePathLong m_szExcludeFile; //!< 除外ファイル - SFilePathLong m_szExcludeFolder; //!< 除外フォルダ + SFilePathLong m_szExcludeFolder; //!< 除外フォルダー SFilePath m_szCurrentFilePath; protected: CRecentSearch m_cRecentSearch; diff --git a/sakura_core/dlg/CDlgGrepReplace.cpp b/sakura_core/dlg/CDlgGrepReplace.cpp index d27b3dfe95..ca84d1e208 100644 --- a/sakura_core/dlg/CDlgGrepReplace.cpp +++ b/sakura_core/dlg/CDlgGrepReplace.cpp @@ -34,14 +34,14 @@ #include "String_define.h" const DWORD p_helpids[] = { - IDC_BUTTON_FOLDER, HIDC_GREP_REP_BUTTON_FOLDER, //フォルダ - IDC_BUTTON_CURRENTFOLDER, HIDC_GREP_REP_BUTTON_CURRENTFOLDER, //現フォルダ + IDC_BUTTON_FOLDER, HIDC_GREP_REP_BUTTON_FOLDER, //フォルダー + IDC_BUTTON_CURRENTFOLDER, HIDC_GREP_REP_BUTTON_CURRENTFOLDER, //現フォルダー IDOK, HIDOK_GREP_REP, //置換開始 IDCANCEL, HIDCANCEL_GREP_REP, //キャンセル IDC_BUTTON_HELP, HIDC_GREP_REP_BUTTON_HELP, //ヘルプ IDC_CHK_PASTE, HIDC_GREP_REP_CHK_PASTE, //クリップボードから貼り付け IDC_CHK_WORD, HIDC_GREP_REP_CHK_WORD, //単語単位 - IDC_CHK_SUBFOLDER, HIDC_GREP_REP_CHK_SUBFOLDER, //サブフォルダも検索 + IDC_CHK_SUBFOLDER, HIDC_GREP_REP_CHK_SUBFOLDER, //サブフォルダーも検索 IDC_CHK_FROMTHISTEXT, HIDC_GREP_REP_CHK_FROMTHISTEXT, //編集中のテキストから検索 IDC_CHK_LOHICASE, HIDC_GREP_REP_CHK_LOHICASE, //大文字小文字 IDC_CHK_REGULAREXP, HIDC_GREP_REP_CHK_REGULAREXP, //正規表現 @@ -51,7 +51,7 @@ const DWORD p_helpids[] = { IDC_COMBO_TEXT, HIDC_GREP_REP_COMBO_TEXT, //置換前 IDC_COMBO_TEXT2, HIDC_GREP_REP_COMBO_TEXT2, //置換後 IDC_COMBO_FILE, HIDC_GREP_REP_COMBO_FILE, //ファイル - IDC_COMBO_FOLDER, HIDC_GREP_REP_COMBO_FOLDER, //フォルダ + IDC_COMBO_FOLDER, HIDC_GREP_REP_COMBO_FOLDER, //フォルダー IDC_BUTTON_FOLDER_UP, HIDC_GREP_REP_BUTTON_FOLDER_UP, //上 IDC_RADIO_OUTPUTLINE, HIDC_GREP_REP_RADIO_OUTPUTLINE, //結果出力:行単位 IDC_RADIO_OUTPUTMARKED, HIDC_GREP_REP_RADIO_OUTPUTMARKED, //結果出力:該当部分 @@ -59,10 +59,10 @@ const DWORD p_helpids[] = { IDC_RADIO_OUTPUTSTYLE2, HIDC_GREP_REP_RADIO_OUTPUTSTYLE2, //結果出力形式:ファイル毎 IDC_RADIO_OUTPUTSTYLE3, HIDC_GREP_REP_RADIO_OUTPUTSTYLE3, //結果出力形式:結果のみ IDC_STATIC_JRE32VER, HIDC_GREP_REP_STATIC_JRE32VER, //正規表現バージョン - IDC_CHK_DEFAULTFOLDER, HIDC_GREP_REP_CHK_DEFAULTFOLDER, //フォルダの初期値をカレントフォルダにする + IDC_CHK_DEFAULTFOLDER, HIDC_GREP_REP_CHK_DEFAULTFOLDER, //フォルダーの初期値をカレントフォルダーにする IDC_CHECK_FILE_ONLY, HIDC_GREP_REP_CHECK_FILE_ONLY, //ファイル毎最初のみ検索 - IDC_CHECK_BASE_PATH, HIDC_GREP_REP_CHECK_BASE_PATH, //ベースフォルダ表示 - IDC_CHECK_SEP_FOLDER, HIDC_GREP_REP_CHECK_SEP_FOLDER, //フォルダ毎に表示 + IDC_CHECK_BASE_PATH, HIDC_GREP_REP_CHECK_BASE_PATH, //ベースフォルダー表示 + IDC_CHECK_SEP_FOLDER, HIDC_GREP_REP_CHECK_SEP_FOLDER, //フォルダー毎に表示 0, 0 }; @@ -77,7 +77,7 @@ CDlgGrepReplace::CDlgGrepReplace() /* モーダルダイアログの表示 */ int CDlgGrepReplace::DoModal( HINSTANCE hInstance, HWND hwndParent, const WCHAR* pszCurrentFilePath, LPARAM lParam ) { - m_bSubFolder = m_pShareData->m_Common.m_sSearch.m_bGrepSubFolder; // Grep: サブフォルダも検索 + m_bSubFolder = m_pShareData->m_Common.m_sSearch.m_bGrepSubFolder; // Grep: サブフォルダーも検索 m_sSearchOption = m_pShareData->m_Common.m_sSearch.m_sSearchOption; // 検索オプション m_nGrepCharSet = m_pShareData->m_Common.m_sSearch.m_nGrepCharSet; // 文字コードセット m_nGrepOutputLineType = m_pShareData->m_Common.m_sSearch.m_nGrepOutputLineType; // 行を出力するか該当部分だけ出力するか @@ -89,7 +89,7 @@ int CDlgGrepReplace::DoModal( HINSTANCE hInstance, HWND hwndParent, const WCHAR* wcscpy( m_szFile, m_pShareData->m_sSearchKeywords.m_aGrepFiles[0] ); /* 検索ファイル */ } if( m_szFolder[0] == L'\0' && m_pShareData->m_sSearchKeywords.m_aGrepFolders.size() ){ - wcscpy( m_szFolder, m_pShareData->m_sSearchKeywords.m_aGrepFolders[0] ); /* 検索フォルダ */ + wcscpy( m_szFolder, m_pShareData->m_sSearchKeywords.m_aGrepFolders[0] ); /* 検索フォルダー */ } /* 除外ファイル */ @@ -106,14 +106,14 @@ int CDlgGrepReplace::DoModal( HINSTANCE hInstance, HWND hwndParent, const WCHAR* } } - /* 除外フォルダ */ + /* 除外フォルダー */ if (m_szExcludeFolder[0] == L'\0') { if (m_pShareData->m_sSearchKeywords.m_aExcludeFolders.size()) { wcscpy(m_szExcludeFolder, m_pShareData->m_sSearchKeywords.m_aExcludeFolders[0]); } else { - /* ユーザーの利便性向上のために除外フォルダに対して初期値を設定する */ - wcscpy(m_szExcludeFolder, DEFAULT_EXCLUDE_FOLDER_PATTERN); /* 除外フォルダ */ + /* ユーザーの利便性向上のために除外フォルダーに対して初期値を設定する */ + wcscpy(m_szExcludeFolder, DEFAULT_EXCLUDE_FOLDER_PATTERN); /* 除外フォルダー */ /* 履歴に残して後で選択できるようにする */ m_pShareData->m_sSearchKeywords.m_aExcludeFolders.push_back(DEFAULT_EXCLUDE_FOLDER_PATTERN); diff --git a/sakura_core/dlg/CDlgOpenFile.h b/sakura_core/dlg/CDlgOpenFile.h index ba9bedb34f..1a6d6993ef 100644 --- a/sakura_core/dlg/CDlgOpenFile.h +++ b/sakura_core/dlg/CDlgOpenFile.h @@ -110,7 +110,7 @@ class CDlgOpenFile final : public IDlgOpenFile bool bOptions = true) override; bool DoModalSaveDlg(SSaveInfo* pSaveInfo, bool bSimpleMode) override; - // 設定フォルダ相対ファイル選択(共有データ,ini位置依存) + // 設定フォルダー相対ファイル選択(共有データ,ini位置依存) static BOOL SelectFile(HWND parent, HWND hwndCtl, const WCHAR* filter, bool resolvePath, EFilter eAddFilter = EFITER_TEXT); diff --git a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp index 5984b458b6..f86b9e1226 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp @@ -51,7 +51,7 @@ static const DWORD p_helpids[] = { //13100 // IDC_BUTTON_HELP, HIDC_OPENDLG_BUTTON_HELP, //ヘルプボタン IDC_COMBO_CODE, HIDC_OPENDLG_COMBO_CODE, //文字コードセット IDC_COMBO_MRU, HIDC_OPENDLG_COMBO_MRU, //最近のファイル - IDC_COMBO_OPENFOLDER, HIDC_OPENDLG_COMBO_OPENFOLDER, //最近のフォルダ + IDC_COMBO_OPENFOLDER, HIDC_OPENDLG_COMBO_OPENFOLDER, //最近のフォルダー IDC_COMBO_EOL, HIDC_OPENDLG_COMBO_EOL, //改行コード IDC_CHECK_BOM, HIDC_OPENDLG_CHECK_BOM, //BOM // 2006.08.06 ryoji IDC_CHECK_CP, HIDC_OPENDLG_CHECK_CP, //CP @@ -249,7 +249,7 @@ UINT_PTR CALLBACK OFNHookProc( hwndFrame = ::GetParent( hdlg ); ::GetWindowRect( hwndFrame, &pData->m_pcDlgOpenFile->m_pShareData->m_Common.m_sOthers.m_rcOpenDialog ); - // 2005.10.29 ryoji 最近のファイル/フォルダ コンボの右端を子ダイアログの右端に合わせる + // 2005.10.29 ryoji 最近のファイル/フォルダー コンボの右端を子ダイアログの右端に合わせる ::GetWindowRect( pData->m_hwndComboMRU, &rc ); po.x = rc.left; po.y = rc.top; @@ -585,7 +585,7 @@ UINT_PTR CALLBACK OFNHookProc( case IDC_COMBO_OPENFOLDER: if ( Combo_GetCount( pData->m_hwndComboOPENFOLDER ) == 0) { - /* 最近開いたフォルダ コンボボックス初期値設定 */ + /* 最近開いたフォルダー コンボボックス初期値設定 */ // 2003.06.22 Moca m_vOPENFOLDER がNULLの場合を考慮する int nSize = (int)pData->m_pcDlgOpenFile->m_vOPENFOLDER.size(); for( i = 0; i < nSize; i++ ){ @@ -687,7 +687,7 @@ void CDlgOpenFile_CommonFileDialog::Create( m_strDefaultWildCard = pszUserWildCard; } - /* 「開く」での初期フォルダ */ + /* 「開く」での初期フォルダー */ if( pszDefaultPath && pszDefaultPath[0] != L'\0' ){ //現在編集中のファイルのパス //@@@ 2002.04.18 WCHAR szDrive[_MAX_DRIVE]; WCHAR szDir[_MAX_DIR]; @@ -751,7 +751,7 @@ bool CDlgOpenFile_CommonFileDialog::DoModal_GetOpenFileName( WCHAR* pszPath, EFi pData->m_ofn.hInstance = CSelectLang::getLangRsrcInstance(); pData->m_ofn.lpstrFilter = cFileExt.GetExtFilter(); // From Here Jun. 23, 2002 genta - // 「開く」での初期フォルダチェック強化 + // 「開く」での初期フォルダーチェック強化 // 2005/02/20 novice デフォルトのファイル名は何も設定しない { WCHAR szDrive[_MAX_DRIVE]; @@ -1171,7 +1171,7 @@ void CDlgOpenFile_CommonFileDialog::InitLayout( HWND hwndOpenDlg, HWND hwndDlg, hwndCtrl = ::GetWindow( hwndCtrl, GW_HWNDNEXT ); } - // 標準コントロールのプレースフォルダ(stc32)と子ダイアログの幅をオープンダイアログの幅にあわせる + // 標準コントロールのプレースフォルダー(stc32)と子ダイアログの幅をオープンダイアログの幅にあわせる // WM_INITDIALOG を抜けるとさらにオープンダイアログ側で現在の位置関係からレイアウト調整が行われる // ここで以下の処理をやっておかないとコントロールが意図しない場所に動いてしまうことがある // (例えば、BOM のチェックボックスが画面外に飛んでしまうなど) @@ -1180,7 +1180,7 @@ void CDlgOpenFile_CommonFileDialog::InitLayout( HWND hwndOpenDlg, HWND hwndDlg, ::GetClientRect( hwndOpenDlg, &rc ); nWidth = rc.right - rc.left; - // 標準コントロールプレースフォルダの幅を変更する + // 標準コントロールプレースフォルダーの幅を変更する hwndCtrl = ::GetDlgItem( hwndDlg, stc32 ); ::GetWindowRect( hwndCtrl, &rc ); ::SetWindowPos( hwndCtrl, 0, 0, 0, nWidth, rc.bottom - rc.top, SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOZORDER ); diff --git a/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp index 3cd6ae2134..81e4d6b6a0 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp @@ -439,7 +439,7 @@ void CDlgOpenFile_CommonItemDialog::Create( m_strDefaultWildCard = pszUserWildCard; } - /* 「開く」での初期フォルダ */ + /* 「開く」での初期フォルダー */ if( pszDefaultPath && pszDefaultPath[0] != L'\0' ){ //現在編集中のファイルのパス //@@@ 2002.04.18 WCHAR szDrive[_MAX_DRIVE]; WCHAR szDir[_MAX_DIR]; diff --git a/sakura_core/dlg/CDlgPluginOption.cpp b/sakura_core/dlg/CDlgPluginOption.cpp index f1b903e631..d188b5f33c 100644 --- a/sakura_core/dlg/CDlgPluginOption.cpp +++ b/sakura_core/dlg/CDlgPluginOption.cpp @@ -710,7 +710,7 @@ void CDlgPluginOption::SelectDirectory( int iLine ) { WCHAR szDir[_MAX_PATH+1]; - /* 検索フォルダ */ + /* 検索フォルダー */ ::DlgItem_GetText( GetHwnd(), IDC_EDIT_PLUGIN_OPTION_DIR, szDir, _countof(szDir) ); if (_IS_REL_PATH( szDir )) { diff --git a/sakura_core/dlg/CDlgTagJumpList.cpp b/sakura_core/dlg/CDlgTagJumpList.cpp index 02f31d6741..6e5c69abed 100644 --- a/sakura_core/dlg/CDlgTagJumpList.cpp +++ b/sakura_core/dlg/CDlgTagJumpList.cpp @@ -1136,7 +1136,7 @@ int CDlgTagJumpList::find_key_core( } WCHAR szTagFile[1024]; //タグファイル - WCHAR szNextPath[1024]; //次検索フォルダ + WCHAR szNextPath[1024]; //次検索フォルダー szNextPath[0] = L'\0'; vector_ex seachDirs; @@ -1616,7 +1616,7 @@ int CDlgTagJumpList::CalcMaxUpDirectory( const WCHAR* p ) { int loop = CalcDirectoryDepth( p ); if( loop < 0 ) loop = 0; - if( loop > (_MAX_PATH/2) ) loop = (_MAX_PATH/2); //\A\B\C...のようなとき1フォルダで2文字消費するので... + if( loop > (_MAX_PATH/2) ) loop = (_MAX_PATH/2); //\A\B\C...のようなとき1フォルダーで2文字消費するので... return loop; } @@ -1675,7 +1675,7 @@ WCHAR* CDlgTagJumpList::CopyDirDir( WCHAR* dest, const WCHAR* target, const WCHA } /* - @param dir [in,out] フォルダのパス + @param dir [in,out] フォルダーのパス in == C:\dir\subdir\ out == C:\dir\ */ diff --git a/sakura_core/dlg/CDlgTagsMake.cpp b/sakura_core/dlg/CDlgTagsMake.cpp index dec592d1e0..b737a5957c 100644 --- a/sakura_core/dlg/CDlgTagsMake.cpp +++ b/sakura_core/dlg/CDlgTagsMake.cpp @@ -45,11 +45,11 @@ #include "String_define.h" const DWORD p_helpids[] = { //13700 - IDC_EDIT_TAG_MAKE_FOLDER, HIDC_EDIT_TAG_MAKE_FOLDER, //タグ作成フォルダ + IDC_EDIT_TAG_MAKE_FOLDER, HIDC_EDIT_TAG_MAKE_FOLDER, //タグ作成フォルダー IDC_BUTTON_TAG_MAKE_REF, HIDC_BUTTON_TAG_MAKE_REF, //参照 IDC_BUTTON_FOLDER_UP, HIDC_BUTTON_TAG_MAKE_FOLDER_UP, // 上 IDC_EDIT_TAG_MAKE_CMDLINE, HIDC_EDIT_TAG_MAKE_CMDLINE, //コマンドライン - IDC_CHECK_TAG_MAKE_RECURSE, HIDC_CHECK_TAG_MAKE_RECURSE, //サブフォルダも対象 + IDC_CHECK_TAG_MAKE_RECURSE, HIDC_CHECK_TAG_MAKE_RECURSE, //サブフォルダーも対象 IDOK, HIDC_TAG_MAKE_IDOK, IDCANCEL, HIDC_TAG_MAKE_IDCANCEL, IDC_BUTTON_HELP, HIDC_BUTTON_TAG_MAKE_HELP, @@ -117,7 +117,7 @@ BOOL CDlgTagsMake::OnBnClicked( int wID ) } /*! - フォルダを選択する + フォルダーを選択する @param hwndDlg [in] ダイアログボックスのウィンドウハンドル */ @@ -125,7 +125,7 @@ void CDlgTagsMake::SelectFolder( HWND hwndDlg ) { WCHAR szPath[_MAX_PATH + 1]; - /* フォルダ */ + /* フォルダー */ ::DlgItem_GetText( hwndDlg, IDC_EDIT_TAG_MAKE_FOLDER, szPath, _MAX_PATH ); if( SelectDir( hwndDlg, LS(STR_DLGTAGMAK_SELECTDIR), szPath, szPath ) ) @@ -140,7 +140,7 @@ void CDlgTagsMake::SelectFolder( HWND hwndDlg ) /* ダイアログデータの設定 */ void CDlgTagsMake::SetData( void ) { - //作成フォルダ + //作成フォルダー Combo_LimitText( GetItemHwnd( IDC_EDIT_TAG_MAKE_FOLDER ), _countof( m_szPath ) ); ::DlgItem_SetText( GetHwnd(), IDC_EDIT_TAG_MAKE_FOLDER, m_szPath ); @@ -160,7 +160,7 @@ void CDlgTagsMake::SetData( void ) /* TRUE==正常 FALSE==入力エラー */ int CDlgTagsMake::GetData( void ) { - //フォルダ + //フォルダー ::DlgItem_GetText( GetHwnd(), IDC_EDIT_TAG_MAKE_FOLDER, m_szPath, _countof( m_szPath ) ); int length = wcslen( m_szPath ); if( length > 0 ) diff --git a/sakura_core/dlg/CDlgTagsMake.h b/sakura_core/dlg/CDlgTagsMake.h index 397c549094..1f88b910d9 100644 --- a/sakura_core/dlg/CDlgTagsMake.h +++ b/sakura_core/dlg/CDlgTagsMake.h @@ -52,7 +52,7 @@ class CDlgTagsMake final : public CDialog */ int DoModal( HINSTANCE hInstance, HWND hwndParent, LPARAM lParam, const WCHAR* pszPath ); /* モーダルダイアログの表示 */ - WCHAR m_szPath[_MAX_PATH+1]; /* フォルダ */ + WCHAR m_szPath[_MAX_PATH+1]; /* フォルダー */ WCHAR m_szTagsCmdLine[_MAX_PATH]; /* コマンドラインオプション(個別) */ int m_nTagsOpt; /* CTAGSオプション(チェック) */ diff --git a/sakura_core/doc/CDocFileOperation.cpp b/sakura_core/doc/CDocFileOperation.cpp index b155ed596a..9cd51c6f0d 100644 --- a/sakura_core/doc/CDocFileOperation.cpp +++ b/sakura_core/doc/CDocFileOperation.cpp @@ -80,10 +80,10 @@ void CDocFileOperation::DoFileUnlock() // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // /* 「ファイルを開く」ダイアログ */ -// Mar. 30, 2003 genta ファイル名未定時の初期ディレクトリをカレントフォルダに +// Mar. 30, 2003 genta ファイル名未定時の初期ディレクトリをカレントフォルダーに bool CDocFileOperation::OpenFileDialog( HWND hwndParent, //!< [in] - const WCHAR* pszOpenFolder, //!< [in] NULL以外を指定すると初期フォルダを指定できる + const WCHAR* pszOpenFolder, //!< [in] NULL以外を指定すると初期フォルダーを指定できる SLoadInfo* pLoadInfo, //!< [in,out] ロード情報 std::vector& files ) @@ -97,7 +97,7 @@ bool CDocFileOperation::OpenFileDialog( G_AppInstance(), hwndParent, L"*.*", - pszOpenFolder ? pszOpenFolder : CSakuraEnvironment::GetDlgInitialDir().c_str(), // 初期フォルダ + pszOpenFolder ? pszOpenFolder : CSakuraEnvironment::GetDlgInitialDir().c_str(), // 初期フォルダー CMRUFile().GetPathList(), // MRUリストのファイルのリスト CMRUFolder().GetPathList() // OPENFOLDERリストのファイルのリスト ); @@ -216,7 +216,7 @@ void CDocFileOperation::ReloadCurrentFile( /*! 「ファイル名を付けて保存」ダイアログ @date 2001.02.09 genta 改行コードを示す引数追加 - @date 2003.03.30 genta ファイル名未定時の初期ディレクトリをカレントフォルダに + @date 2003.03.30 genta ファイル名未定時の初期ディレクトリをカレントフォルダーに @date 2003.07.20 ryoji BOMの有無を示す引数追加 @date 2006.11.10 ryoji ユーザー指定の拡張子を状況依存で変化させる */ @@ -284,9 +284,9 @@ bool CDocFileOperation::SaveFileDialog( G_AppInstance(), CEditWnd::getInstance()->GetHwnd(), strDefaultWildCard.c_str(), - CSakuraEnvironment::GetDlgInitialDir().c_str(), // 初期フォルダ + CSakuraEnvironment::GetDlgInitialDir().c_str(), // 初期フォルダー CMRUFile().GetPathList(), // 最近のファイル - CMRUFolder().GetPathList() // 最近のフォルダ + CMRUFolder().GetPathList() // 最近のフォルダー ); return cDlgOpenFile.DoModalSaveDlg( pSaveInfo, pSaveInfo->eCharCode == CODE_CODEMAX ); } diff --git a/sakura_core/doc/CDocFileOperation.h b/sakura_core/doc/CDocFileOperation.h index 404366a70c..9f4d0f7066 100644 --- a/sakura_core/doc/CDocFileOperation.h +++ b/sakura_core/doc/CDocFileOperation.h @@ -44,7 +44,7 @@ class CDocFileOperation{ //ロードUI bool OpenFileDialog( HWND hwndParent, - const WCHAR* pszOpenFolder, //!< [in] NULL以外を指定すると初期フォルダを指定できる + const WCHAR* pszOpenFolder, //!< [in] NULL以外を指定すると初期フォルダーを指定できる SLoadInfo* pLoadInfo, //!< [in,out] ロード情報 std::vector& files ); diff --git a/sakura_core/env/CFileNameManager.cpp b/sakura_core/env/CFileNameManager.cpp index 914d9a76be..848f25e989 100644 --- a/sakura_core/env/CFileNameManager.cpp +++ b/sakura_core/env/CFileNameManager.cpp @@ -117,7 +117,7 @@ int CFileNameManager::TransformFileName_MakeCache( void ){ return nCount; } -/*! ファイル・フォルダ名を置換して、簡易表示名を取得する +/*! ファイル・フォルダー名を置換して、簡易表示名を取得する @date 2002.11.27 Moca 新規作成 @note 大小文字を区別しない。nDestLenに達したときは後ろを切り捨てられる */ @@ -213,13 +213,13 @@ bool CFileNameManager::ExpandMetaToFolder( LPCWSTR pszSrc, LPWSTR pszDes, int nD ps++; // %SAKURA% if( 0 == wmemicmp( L"SAKURA%", ps, 7 ) ){ - // exeのあるフォルダ + // exeのあるフォルダー GetExedir( szPath ); nMetaLen = 6; } // %SAKURADATA% // 2007.06.06 ryoji else if( 0 == wmemicmp( L"SAKURADATA%", ps, 11 ) ){ - // iniのあるフォルダ + // iniのあるフォルダー GetInidir( szPath ); nMetaLen = 10; } @@ -298,7 +298,7 @@ bool CFileNameManager::ExpandMetaToFolder( LPCWSTR pszSrc, LPWSTR pszDes, int nD } } - // 最後のフォルダ区切り記号を削除する + // 最後のフォルダー区切り記号を削除する // [A:\]などのルートであっても削除 for(nPathLen = 0; pStr2[nPathLen] != L'\0'; nPathLen++ ){ #ifdef _MBCS diff --git a/sakura_core/env/CSakuraEnvironment.cpp b/sakura_core/env/CSakuraEnvironment.cpp index 93c085a38b..a8472a4474 100644 --- a/sakura_core/env/CSakuraEnvironment.cpp +++ b/sakura_core/env/CSakuraEnvironment.cpp @@ -85,8 +85,8 @@ wchar_t* ExParam_LongName( wchar_t* q, wchar_t* q_max, EExpParamName eLongParam @li / 開いているファイルの名前(フルパス。パスの区切りが/) @li N 開いているファイルの名前(簡易表示) @li n 無題の通し番号 - @li E 開いているファイルのあるフォルダの名前(簡易表示) - @li e 開いているファイルのあるフォルダの名前 + @li E 開いているファイルのあるフォルダーの名前(簡易表示) + @li e 開いているファイルのあるフォルダーの名前 @li B タイプ別設定の名前 @li b 開いているファイルの拡張子 @li Q 印刷ページ設定の名前 @@ -241,7 +241,7 @@ void CSakuraEnvironment::ExpandParameter(const wchar_t* pszSource, wchar_t* pszB } ++p; break; - case L'E': // 開いているファイルのあるフォルダの名前(簡易表示) 2012/12/2 Uchi + case L'E': // 開いているファイルのあるフォルダーの名前(簡易表示) 2012/12/2 Uchi if( !pcDoc->m_cDocFile.GetFilePathClass().IsValidPath() ){ q = wcs_pushW( q, q_max - q, NO_TITLE.c_str(), NO_TITLE_LEN ); } @@ -273,7 +273,7 @@ void CSakuraEnvironment::ExpandParameter(const wchar_t* pszSource, wchar_t* pszB } ++p; break; - case L'e': // 開いているファイルのあるフォルダの名前 2012/12/2 Uchi + case L'e': // 開いているファイルのあるフォルダーの名前 2012/12/2 Uchi if( !pcDoc->m_cDocFile.GetFilePathClass().IsValidPath() ){ q = wcs_pushW( q, q_max - q, NO_TITLE.c_str(), NO_TITLE_LEN ); } @@ -706,10 +706,10 @@ wchar_t* ExParam_LongName( wchar_t* q, wchar_t* q_max, EExpParamName eLongParam return q; } -/*! @brief 初期フォルダ取得 +/*! @brief 初期フォルダー取得 @param bControlProcess [in] trueのときはOPENDIALOGDIR_CUR->OPENDIALOGDIR_MRUに変更 - @return 初期フォルダ + @return 初期フォルダー */ std::wstring CSakuraEnvironment::GetDlgInitialDir(bool bControlProcess) { diff --git a/sakura_core/env/CShareData.cpp b/sakura_core/env/CShareData.cpp index 39d4b36613..6b0329b2fb 100644 --- a/sakura_core/env/CShareData.cpp +++ b/sakura_core/env/CShareData.cpp @@ -183,7 +183,7 @@ bool CShareData::InitShareData() auto iniPath = GetExeFileName().replace_extension(L".ini"); m_pShareData->m_szIniFile = iniPath.c_str(); - // 設定ファイルフォルダ + // 設定ファイルフォルダー WCHAR szIniFolder[_MAX_PATH]; GetInidir(szIniFolder); @@ -235,7 +235,7 @@ bool CShareData::InitShareData() CommonSetting_General& sGeneral = m_pShareData->m_Common.m_sGeneral; sGeneral.m_nMRUArrNum_MAX = 15; /* ファイルの履歴MAX */ //Oct. 14, 2000 JEPRO 少し増やした(10→15) - sGeneral.m_nOPENFOLDERArrNum_MAX = 15; /* フォルダの履歴MAX */ //Oct. 14, 2000 JEPRO 少し増やした(10→15) + sGeneral.m_nOPENFOLDERArrNum_MAX = 15; /* フォルダーの履歴MAX */ //Oct. 14, 2000 JEPRO 少し増やした(10→15) sGeneral.m_nCaretType = 0; /* カーソルのタイプ 0=win 1=dos */ sGeneral.m_bIsINSMode = true; /* 挿入/上書きモード */ @@ -401,8 +401,8 @@ bool CShareData::InitShareData() sBackup.m_bBackUp = false; /* バックアップの作成 */ sBackup.m_bBackUpDialog = true; /* バックアップの作成前に確認 */ - sBackup.m_bBackUpFolder = false; /* 指定フォルダにバックアップを作成する */ - sBackup.m_szBackUpFolder[0] = L'\0'; /* バックアップを作成するフォルダ */ + sBackup.m_bBackUpFolder = false; /* 指定フォルダーにバックアップを作成する */ + sBackup.m_szBackUpFolder[0] = L'\0'; /* バックアップを作成するフォルダー */ sBackup.m_nBackUpType = 2; /* バックアップファイル名のタイプ 1=(.bak) 2=*_日付.* */ sBackup.m_nBackUpType_Opt1 = BKUP_YEAR | BKUP_MONTH | BKUP_DAY; /* バックアップファイル名:日付 */ sBackup.m_nBackUpType_Opt2 = ('b' << 16 ) + 10; /* バックアップファイル名:連番の数と先頭文字 */ @@ -411,8 +411,8 @@ bool CShareData::InitShareData() sBackup.m_nBackUpType_Opt5 = 0; /* バックアップファイル名:Option5 */ sBackup.m_nBackUpType_Opt6 = 0; /* バックアップファイル名:Option6 */ sBackup.m_bBackUpDustBox = false; /* バックアップファイルをごみ箱に放り込む */ //@@@ 2001.12.11 add MIK - sBackup.m_bBackUpPathAdvanced = false; /* 20051107 aroka バックアップ先フォルダを詳細設定する */ - sBackup.m_szBackUpPathAdvanced[0] = L'\0'; /* 20051107 aroka バックアップを作成するフォルダの詳細設定 */ + sBackup.m_bBackUpPathAdvanced = false; /* 20051107 aroka バックアップ先フォルダーを詳細設定する */ + sBackup.m_szBackUpPathAdvanced[0] = L'\0'; /* 20051107 aroka バックアップを作成するフォルダーの詳細設定 */ } // [書式]タブ @@ -443,7 +443,7 @@ bool CShareData::InitShareData() sSearch.m_bSelectedArea = FALSE; // 選択範囲内置換 sSearch.m_bNOTIFYNOTFOUND = TRUE; /* 検索/置換 見つからないときメッセージを表示 */ - sSearch.m_bGrepSubFolder = TRUE; /* Grep: サブフォルダも検索 */ + sSearch.m_bGrepSubFolder = TRUE; /* Grep: サブフォルダーも検索 */ sSearch.m_nGrepOutputLineType = 1; // Grep: 行を出力/該当部分/否マッチ行 を出力 sSearch.m_nGrepOutputStyle = 1; /* Grep: 出力形式 */ sSearch.m_bGrepOutputFileOnly = false; @@ -451,7 +451,7 @@ bool CShareData::InitShareData() sSearch.m_bGrepSeparateFolder = false; sSearch.m_bGrepBackup = true; - sSearch.m_bGrepDefaultFolder=FALSE; /* Grep: フォルダの初期値をカレントフォルダにする */ + sSearch.m_bGrepDefaultFolder=FALSE; /* Grep: フォルダーの初期値をカレントフォルダーにする */ sSearch.m_nGrepCharSet = CODE_AUTODETECT; /* Grep: 文字コードセット */ sSearch.m_bGrepRealTimeView = FALSE; /* 2003.06.28 Moca Grep結果のリアルタイム表示 */ sSearch.m_bCaretTextForSearch = TRUE; /* 2006.08.23 ryoji カーソル位置の文字列をデフォルトの検索文字列にする */ @@ -583,7 +583,7 @@ bool CShareData::InitShareData() } // To Here Sep. 14, 2001 genta - wcscpy( sMacro.m_szMACROFOLDER, szIniFolder ); /* マクロ用フォルダ */ + wcscpy( sMacro.m_szMACROFOLDER, szIniFolder ); /* マクロ用フォルダー */ sMacro.m_nMacroOnOpened = -1; /* オープン後自動実行マクロ番号 */ //@@@ 2006.09.01 ryoji sMacro.m_nMacroOnTypeChanged = -1; /* タイプ変更後自動実行マクロ番号 */ //@@@ 2006.09.01 ryoji @@ -712,7 +712,7 @@ bool CShareData::InitShareData() m_pShareData->m_sHistory.m_aExceptMRU.clear(); - wcscpy( m_pShareData->m_sHistory.m_szIMPORTFOLDER, szIniFolder ); /* 設定インポート用フォルダ */ + wcscpy( m_pShareData->m_sHistory.m_szIMPORTFOLDER, szIniFolder ); /* 設定インポート用フォルダー */ m_pShareData->m_sHistory.m_aCommands.clear(); m_pShareData->m_sHistory.m_aCurDirs.clear(); @@ -918,7 +918,7 @@ BOOL CShareData::IsPathOpened( const WCHAR* pszPath, HWND* phwndOwner ) @note CEditDoc::FileLoadに先立って実行されることもあるが、 CEditDoc::FileLoadからも実行される必要があることに注意。 - (フォルダ指定の場合やCEditDoc::FileLoadが直接実行される場合もあるため) + (フォルダー指定の場合やCEditDoc::FileLoadが直接実行される場合もあるため) @retval TRUE すでに開いていた @retval FALSE 開いていなかった @@ -1066,9 +1066,9 @@ bool CShareData::OpenDebugWindow( HWND hwnd, bool bAllwaysActive ) } /*! - 設定フォルダがEXEフォルダと別かどうかを返す + 設定フォルダーがEXEフォルダーと別かどうかを返す - iniファイルの保存先がユーザー別設定フォルダかどうか 2007.05.25 ryoji + iniファイルの保存先がユーザー別設定フォルダーかどうか 2007.05.25 ryoji */ [[nodiscard]] bool CShareData::IsPrivateSettings( void ) const noexcept { @@ -1078,7 +1078,7 @@ bool CShareData::OpenDebugWindow( HWND hwnd, bool bAllwaysActive ) /* CShareData::CheckMRUandOPENFOLDERList MRUとOPENFOLDERリストの存在チェックなど - 存在しないファイルやフォルダはMRUやOPENFOLDERリストから削除する + 存在しないファイルやフォルダーはMRUやOPENFOLDERリストから削除する @note 現在は使われていないようだ。 @par History @@ -1124,21 +1124,21 @@ int CShareData::GetMacroFilename( int idx, WCHAR *pszPath, int nBufLen ) int nLen = wcslen( ptr ); // Jul. 21, 2003 genta wcslen対象が誤っていたためマクロ実行ができない if( !_IS_REL_PATH( pszFile ) // 絶対パス - || m_pShareData->m_Common.m_sMacro.m_szMACROFOLDER[0] == L'\0' ){ // フォルダ指定なし + || m_pShareData->m_Common.m_sMacro.m_szMACROFOLDER[0] == L'\0' ){ // フォルダー指定なし if( pszPath == NULL || nBufLen <= nLen ){ return -nLen; } wcscpy( pszPath, pszFile ); return nLen; } - else { // フォルダ指定あり + else { // フォルダー指定あり // 相対パス→絶対パス int nFolderSep = AddLastChar( m_pShareData->m_Common.m_sMacro.m_szMACROFOLDER, _countof2(m_pShareData->m_Common.m_sMacro.m_szMACROFOLDER), L'\\' ); int nAllLen; WCHAR *pszDir; WCHAR szDir[_MAX_PATH + _countof2( m_pShareData->m_Common.m_sMacro.m_szMACROFOLDER )]; - // 2003.06.24 Moca フォルダも相対パスなら実行ファイルからのパス + // 2003.06.24 Moca フォルダーも相対パスなら実行ファイルからのパス // 2007.05.19 ryoji 相対パスは設定ファイルからのパスを優先 if( _IS_REL_PATH( m_pShareData->m_Common.m_sMacro.m_szMACROFOLDER ) ){ GetInidirOrExedir( szDir, m_pShareData->m_Common.m_sMacro.m_szMACROFOLDER ); diff --git a/sakura_core/env/CShareData_IO.cpp b/sakura_core/env/CShareData_IO.cpp index d679f81e86..2481ee42ee 100644 --- a/sakura_core/env/CShareData_IO.cpp +++ b/sakura_core/env/CShareData_IO.cpp @@ -362,7 +362,7 @@ void CShareData_IO::ShareData_IO_Grep( CDataProfile& cProfile ) cProfile.IOProfileData(pszSecName, szKeyName, pShare->m_sSearchKeywords.m_aExcludeFiles[i]); } - /* 除外フォルダパターン */ + /* 除外フォルダーパターン */ cProfile.IOProfileData(pszSecName, LTEXT("_GREPEXCLUDEFOLDER_Counts"), pShare->m_sSearchKeywords.m_aExcludeFolders._GetSizeRef()); pShare->m_sSearchKeywords.m_aExcludeFolders.SetSizeLimit(); nSize = pShare->m_sSearchKeywords.m_aExcludeFolders.size(); @@ -383,9 +383,9 @@ void CShareData_IO::ShareData_IO_Folders( CDataProfile& cProfile ) DLLSHAREDATA* pShare = &GetDllShareData(); const WCHAR* pszSecName = LTEXT("Folders"); - /* マクロ用フォルダ */ + /* マクロ用フォルダー */ cProfile.IOProfileData( pszSecName, LTEXT("szMACROFOLDER"), pShare->m_Common.m_sMacro.m_szMACROFOLDER ); - /* 設定インポート用フォルダ */ + /* 設定インポート用フォルダー */ cProfile.IOProfileData( pszSecName, LTEXT("szIMPORTFOLDER"), pShare->m_sHistory.m_szIMPORTFOLDER ); } @@ -559,7 +559,7 @@ void CShareData_IO::ShareData_IO_Common( CDataProfile& cProfile ) int nDummy; int nCharChars; nDummy = wcslen( common.m_sBackup.m_szBackUpFolder ); - /* フォルダの最後が「半角かつ'\\'」でない場合は、付加する */ + /* フォルダーの最後が「半角かつ'\\'」でない場合は、付加する */ nCharChars = &common.m_sBackup.m_szBackUpFolder[nDummy] - CNativeW::GetCharPrev( common.m_sBackup.m_szBackUpFolder, nDummy, &common.m_sBackup.m_szBackUpFolder[nDummy] ); if( 1 == nCharChars && common.m_sBackup.m_szBackUpFolder[nDummy - 1] == '\\' ){ @@ -572,7 +572,7 @@ void CShareData_IO::ShareData_IO_Common( CDataProfile& cProfile ) int nDummy; int nCharChars; nDummy = wcslen( common.m_sBackup.m_szBackUpFolder ); - /* フォルダの最後が「半角かつ'\\'」でない場合は、付加する */ + /* フォルダーの最後が「半角かつ'\\'」でない場合は、付加する */ nCharChars = &common.m_sBackup.m_szBackUpFolder[nDummy] - CNativeW::GetCharPrev( common.m_sBackup.m_szBackUpFolder, nDummy, &common.m_sBackup.m_szBackUpFolder[nDummy] ); if( 1 == nCharChars && common.m_sBackup.m_szBackUpFolder[nDummy - 1] == '\\' ){ diff --git a/sakura_core/env/CommonSetting.h b/sakura_core/env/CommonSetting.h index 1e5349d251..7d5bd46e45 100644 --- a/sakura_core/env/CommonSetting.h +++ b/sakura_core/env/CommonSetting.h @@ -86,7 +86,7 @@ struct CommonSetting_General //履歴 int m_nMRUArrNum_MAX; //!< ファイルの履歴MAX - int m_nOPENFOLDERArrNum_MAX; //!< フォルダの履歴MAX + int m_nOPENFOLDERArrNum_MAX; //!< フォルダーの履歴MAX //ノーカテゴリ BOOL m_bCloseAllConfirm; //!< [すべて閉じる]で他に編集用のウィンドウがあれば確認する // 2006.12.25 ryoji @@ -206,9 +206,9 @@ struct CommonSetting_TabBar // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // //! ファイルダイアログの初期位置 enum EOpenDialogDir{ - OPENDIALOGDIR_CUR, //!< カレントフォルダ - OPENDIALOGDIR_MRU, //!< 最近使ったフォルダ - OPENDIALOGDIR_SEL, //!< 指定フォルダ + OPENDIALOGDIR_CUR, //!< カレントフォルダー + OPENDIALOGDIR_MRU, //!< 最近使ったフォルダー + OPENDIALOGDIR_SEL, //!< 指定フォルダー }; struct CommonSetting_Edit @@ -234,7 +234,7 @@ struct CommonSetting_Edit BOOL m_bSelectClickedURL; //!< URLがクリックされたら選択するか EOpenDialogDir m_eOpenDialogDir; //!< ファイルダイアログの初期位置 - SFilePath m_OpenDialogSelDir; //!< 指定フォルダ + SFilePath m_OpenDialogSelDir; //!< 指定フォルダー bool m_bEnableExtEol; //!< NEL,PS,LSを改行コードとして利用する bool m_bBoxSelectLock; //!< (矩形選択)移動でロックする @@ -350,9 +350,9 @@ struct CommonSetting_Backup public: bool m_bBackUp; //!< 保存時にバックアップを作成する bool m_bBackUpDialog; //!< バックアップの作成前に確認 - bool m_bBackUpFolder; //!< 指定フォルダにバックアップを作成する - bool m_bBackUpFolderRM; //!< 指定フォルダにバックアップを作成する(リムーバブルメディアのみ) - SFilePath m_szBackUpFolder; //!< バックアップを作成するフォルダ + bool m_bBackUpFolder; //!< 指定フォルダーにバックアップを作成する + bool m_bBackUpFolderRM; //!< 指定フォルダーにバックアップを作成する(リムーバブルメディアのみ) + SFilePath m_szBackUpFolder; //!< バックアップを作成するフォルダー int m_nBackUpType; //!< バックアップファイル名のタイプ 1=(.bak) 2=*_日付.* int m_nBackUpType_Opt1; //!< バックアップファイル名:オプション1 int m_nBackUpType_Opt2; //!< バックアップファイル名:オプション2 @@ -361,8 +361,8 @@ struct CommonSetting_Backup int m_nBackUpType_Opt5; //!< バックアップファイル名:オプション5 int m_nBackUpType_Opt6; //!< バックアップファイル名:オプション6 bool m_bBackUpDustBox; //!< バックアップファイルをごみ箱に放り込む //@@@ 2001.12.11 add MIK - bool m_bBackUpPathAdvanced; //!< バックアップ先フォルダを詳細設定する 20051107 aroka - SFilePath m_szBackUpPathAdvanced; //!< バックアップを作成するフォルダの詳細設定 20051107 aroka + bool m_bBackUpPathAdvanced; //!< バックアップ先フォルダーを詳細設定する 20051107 aroka + SFilePath m_szBackUpPathAdvanced; //!< バックアップを作成するフォルダーの詳細設定 20051107 aroka }; // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // @@ -398,14 +398,14 @@ struct CommonSetting_Search int m_bNOTIFYNOTFOUND; //!< 検索/置換 見つからないときメッセージを表示 int m_bSelectedArea; //!< 置換 選択範囲内置換 - int m_bGrepSubFolder; //!< Grep: サブフォルダも検索 + int m_bGrepSubFolder; //!< Grep: サブフォルダーも検索 int m_nGrepOutputLineType; //!< Grep: 行を出力/該当部分/否マッチ行 を出力 int m_nGrepOutputStyle; //!< Grep: 出力形式 - int m_bGrepDefaultFolder; //!< Grep: フォルダの初期値をカレントフォルダにする + int m_bGrepDefaultFolder; //!< Grep: フォルダーの初期値をカレントフォルダーにする ECodeType m_nGrepCharSet; //!< Grep: 文字コードセット // 2002/09/20 Moca Add bool m_bGrepOutputFileOnly; //!< Grep: ファイル毎最初のみ検索 - bool m_bGrepOutputBaseFolder; //!< Grep: ベースフォルダ表示 - bool m_bGrepSeparateFolder; //!< Grep: フォルダ毎に表示 + bool m_bGrepOutputBaseFolder; //!< Grep: ベースフォルダー表示 + bool m_bGrepSeparateFolder; //!< Grep: フォルダー毎に表示 bool m_bGrepBackup; //!< Grep: バックアップ作成 BOOL m_bCaretTextForSearch; //!< カーソル位置の文字列をデフォルトの検索文字列にする 2006.08.23 ryoji @@ -508,7 +508,7 @@ struct CommonSetting_Macro { WCHAR m_szKeyMacroFileName[MAX_PATH]; //!< キーボードマクロのファイル名 MacroRec m_MacroTable[MAX_CUSTMACRO]; //!< キー割り当て用マクロテーブル Sep. 14, 2001 genta - SFilePath m_szMACROFOLDER; //!< マクロ用フォルダ + SFilePath m_szMACROFOLDER; //!< マクロ用フォルダー int m_nMacroOnOpened; //!< オープン後自動実行マクロ番号 @@@ 2006.09.01 ryoji int m_nMacroOnTypeChanged; //!< タイプ変更後自動実行マクロ番号 @@@ 2006.09.01 ryoji int m_nMacroOnSave; //!< 保存前自動実行マクロ番号 @@@ 2006.09.01 ryoji @@ -550,7 +550,7 @@ enum EFileTreeItemType{ struct SFileTreeItem{ public: EFileTreeItemType m_eFileTreeItemType; - SFilePath m_szTargetPath; //!< フォルダorファイルパス + SFilePath m_szTargetPath; //!< フォルダーorファイルパス StaticString m_szLabelName; //!< ラベル名(""のときはファイル名を使う) int m_nDepth; //!< 階層 @@ -673,7 +673,7 @@ enum EPluginState { struct PluginRec { WCHAR m_szId[MAX_PLUGIN_ID]; //!< プラグインID - WCHAR m_szName[MAX_PLUGIN_NAME]; //!< プラグインフォルダ/設定ファイル名 + WCHAR m_szName[MAX_PLUGIN_NAME]; //!< プラグインフォルダー/設定ファイル名 EPluginState m_state; //!< プラグイン状態。設定ファイルに保存せずメモリ上のみ。 int m_nCmdNum; //!< プラグイン コマンドの数 // 2010/7/3 Uchi }; diff --git a/sakura_core/func/CKeyBind.cpp b/sakura_core/func/CKeyBind.cpp index 7349da80a1..826ce2f593 100644 --- a/sakura_core/func/CKeyBind.cpp +++ b/sakura_core/func/CKeyBind.cpp @@ -461,7 +461,7 @@ WCHAR* CKeyBind::GetMenuLabel( if( bKeyStr ){ CNativeW cMemAccessKey; // 2010.07.11 Moca メニューラベルの「\t」の付加条件変更 - // [ファイル/フォルダ/ウィンドウ一覧以外]から[アクセスキーがあるときのみ]に付加するように変更 + // [ファイル/フォルダー/ウィンドウ一覧以外]から[アクセスキーがあるときのみ]に付加するように変更 /* 機能に対応するキー名の取得 */ if( GetKeyStr( hInstance, nKeyNameArrNum, pKeyNameArr, cMemAccessKey, nFuncId, bGetDefFuncCode ) ){ // バッファが足りないときは入れない diff --git a/sakura_core/func/Funccode.cpp b/sakura_core/func/Funccode.cpp index a9eceab666..e46e5f4f01 100644 --- a/sakura_core/func/Funccode.cpp +++ b/sakura_core/func/Funccode.cpp @@ -281,7 +281,7 @@ const EFunctionCode pnFuncList_Clip[] = { //Oct. 16, 2000 JEPRO 変数名変更( F_COPY_COLOR_HTML_LINENUMBER, //選択範囲内行番号色付きHTMLコピー F_COPYFNAME , //このファイル名をクリップボードにコピー //2002/2/3 aroka F_COPYPATH , //このファイルのパス名をクリップボードにコピー - F_COPYDIRPATH , //このファイルのフォルダ名をクリップボードにコピー + F_COPYDIRPATH , //このファイルのフォルダー名をクリップボードにコピー F_COPYTAG , //このファイルのパス名とカーソル位置をコピー //Sept. 14, 2000 JEPRO メニューに合わせて下に移動 F_CREATEKEYBINDLIST //キー割り当て一覧をコピー //Sept. 15, 2000 JEPRO IDM_TESTのままではうまくいかないのでFに変えて登録 //Dec. 25, 2000 復活 }; @@ -293,7 +293,7 @@ const EFunctionCode pnFuncList_Insert[] = { F_INS_TIME , // 時刻挿入 F_CTRL_CODE_DIALOG , // コントロールコードの入力 F_INS_FILE_USED_RECENTLY, // 最近使ったファイル挿入 - F_INS_FOLDER_USED_RECENTLY, // 最近使ったフォルダ挿入 + F_INS_FOLDER_USED_RECENTLY, // 最近使ったフォルダー挿入 }; const int nFincList_Insert_Num = _countof( pnFuncList_Insert ); @@ -751,7 +751,7 @@ int FuncID_To_HelpContextID( EFunctionCode nFuncID ) case F_COPY_COLOR_HTML: return HLP000342; //選択範囲内色付きHTMLコピー case F_COPY_COLOR_HTML_LINENUMBER: return HLP000343; //選択範囲内行番号色付きHTMLコピー case F_COPYPATH: return HLP000056; //このファイルのパス名をクリップボードにコピー - case F_COPYDIRPATH: return HLP000380; //このファイルのフォルダ名をクリップボードにコピー + case F_COPYDIRPATH: return HLP000380; //このファイルのフォルダー名をクリップボードにコピー case F_COPYTAG: return HLP000175; //このファイルのパス名とカーソル位置をコピー //Oct. 17, 2000 JEPRO 追加 case F_COPYFNAME: return HLP000303; //このファイル名をクリップボードにコピー // 2002/2/3 aroka // case IDM_TEST_CREATEKEYBINDLIST: return 57; //キー割り当て一覧をクリップボードへコピー //Sept. 15, 2000 jepro「リスト」を「一覧」に変更 @@ -970,7 +970,7 @@ int FuncID_To_HelpContextID( EFunctionCode nFuncID ) if( IDM_SELMRU <= nFuncID && nFuncID < IDM_SELMRU + MAX_MRU ){ return HLP000029; //最近使ったファイル }else if( IDM_SELOPENFOLDER <= nFuncID && nFuncID < IDM_SELOPENFOLDER + MAX_OPENFOLDER ){ - return HLP000023; //最近使ったフォルダ + return HLP000023; //最近使ったフォルダー }else if( IDM_SELWINDOW <= nFuncID && nFuncID < IDM_SELWINDOW + MAX_EDITWINDOWS ){ return HLP000097; //ウィンドウリスト }else if( F_USERMACRO_0 <= nFuncID && nFuncID < F_USERMACRO_0 + MAX_CUSTMACRO ){ diff --git a/sakura_core/io/CZipFile.cpp b/sakura_core/io/CZipFile.cpp index 80dd3d6f10..143b38f689 100644 --- a/sakura_core/io/CZipFile.cpp +++ b/sakura_core/io/CZipFile.cpp @@ -77,7 +77,7 @@ bool CZipFile::SetZip(const std::wstring& sZipPath) return true; } -// ZIP File 内 フォルダ名取得と定義ファイル検査(Plugin用) +// ZIP File 内 フォルダー名取得と定義ファイル検査(Plugin用) bool CZipFile::ChkPluginDef(const std::wstring& sDefFile, std::wstring& sFolderName) { HRESULT hr; diff --git a/sakura_core/io/CZipFile.h b/sakura_core/io/CZipFile.h index c9733bab80..309b9b26a2 100644 --- a/sakura_core/io/CZipFile.h +++ b/sakura_core/io/CZipFile.h @@ -51,7 +51,7 @@ class CZipFile { public: bool IsOk() { return (psd != NULL); } // Zip Folderが使用できるか? bool SetZip(const std::wstring& sZipPath); // Zip File名 設定 - bool ChkPluginDef(const std::wstring& sDefFile, std::wstring& sFolderName); // ZIP File 内 フォルダ名取得と定義ファイル検査(Plugin用) + bool ChkPluginDef(const std::wstring& sDefFile, std::wstring& sFolderName); // ZIP File 内 フォルダー名取得と定義ファイル検査(Plugin用) bool Unzip(const std::wstring sOutPath); // Zip File 解凍 }; #endif /* SAKURA_CZIPFILE_EA7F9762_A67F_449D_B346_EAB3075A9E2C_H_ */ diff --git a/sakura_core/macro/CMacro.cpp b/sakura_core/macro/CMacro.cpp index 27427f68f2..8a2f2fc1c5 100644 --- a/sakura_core/macro/CMacro.cpp +++ b/sakura_core/macro/CMacro.cpp @@ -1021,10 +1021,10 @@ bool CMacro::HandleCommand( case F_GREP: // Argument[0] 検索文字列 // Argument[1] 検索対象にするファイル名 - // Argument[2] 検索対象にするフォルダ名 + // Argument[2] 検索対象にするフォルダー名 // Argument[3]: // 次の数値の和。 - // 0x01 サブフォルダからも検索する + // 0x01 サブフォルダーからも検索する // 0x02 この編集中のテキストから検索する(未実装) // 0x04 英大文字と英小文字を区別する // 0x08 正規表現 @@ -1044,8 +1044,8 @@ bool CMacro::HandleCommand( // 0x0100 ~ 0xff00 文字コードセット番号 * 0x100 // 0x010000 単語単位で探す // 0x020000 ファイル毎最初のみ検索 - // 0x040000 ベースフォルダ表示 - // 0x080000 フォルダ毎に表示 + // 0x040000 ベースフォルダー表示 + // 0x080000 フォルダー毎に表示 { if( Argument[0] == NULL ){ ::MYMESSAGEBOX( NULL, MB_OK | MB_ICONSTOP | MB_TOPMOST, EXEC_ERROR_TITLE, @@ -1086,7 +1086,7 @@ bool CMacro::HandleCommand( cmWork4.SetString( Argument[1] ); cmWork4.Replace( L"\"", L"\"\"" ); // 置換後 } CNativeW cmWork2; cmWork2.SetString( Argument[ArgIndex+1] ); cmWork2.Replace( L"\"", L"\"\"" ); // ファイル名 - CNativeW cmWork3; cmWork3.SetString( Argument[ArgIndex+2] ); cmWork3.Replace( L"\"", L"\"\"" ); // フォルダ名 + CNativeW cmWork3; cmWork3.SetString( Argument[ArgIndex+2] ); cmWork3.Replace( L"\"", L"\"\"" ); // フォルダー名 LPARAM lFlag = wtoi_def(Argument[ArgIndex+3], 5); @@ -1127,7 +1127,7 @@ bool CMacro::HandleCommand( //GOPTオプション pOpt[0] = '\0'; - if( lFlag & 0x01 )wcscat( pOpt, L"S" ); /* サブフォルダからも検索する */ + if( lFlag & 0x01 )wcscat( pOpt, L"S" ); /* サブフォルダーからも検索する */ if( lFlag & 0x04 )wcscat( pOpt, L"L" ); /* 英大文字と英小文字を区別する */ if( lFlag & 0x08 )wcscat( pOpt, L"R" ); /* 正規表現 */ if( 0x20 == (lFlag & 0x400020) )wcscat( pOpt, L"P" ); // 行を出力する @@ -1904,7 +1904,7 @@ bool CMacro::HandleFunction(CEditView *View, EFunctionCode ID, const VARIANT *Ar } return true; case F_FOLDERDIALOG: - // 2011.03.18 syat フォルダダイアログの表示 + // 2011.03.18 syat フォルダーダイアログの表示 { WCHAR *Source; int SourceLength; diff --git a/sakura_core/macro/CSMacroMgr.cpp b/sakura_core/macro/CSMacroMgr.cpp index 9fa706f255..7c93c0eac7 100644 --- a/sakura_core/macro/CSMacroMgr.cpp +++ b/sakura_core/macro/CSMacroMgr.cpp @@ -220,7 +220,7 @@ MacroFuncInfo CSMacroMgr::m_MacroFuncInfoCommandArr[] = {F_COPY_COLOR_HTML, LTEXT("CopyColorHtml"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, //選択範囲内色付きHTMLコピー {F_COPY_COLOR_HTML_LINENUMBER, LTEXT("CopyColorHtmlWithLineNumber"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, //選択範囲内行番号色付きHTMLコピー {F_COPYPATH, LTEXT("CopyPath"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, //このファイルのパス名をクリップボードにコピー - {F_COPYDIRPATH, LTEXT("CopyDirPath"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, //このファイルのフォルダ名をクリップボードにコピー + {F_COPYDIRPATH, LTEXT("CopyDirPath"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, //このファイルのフォルダー名をクリップボードにコピー {F_COPYFNAME, LTEXT("CopyFilename"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, //このファイル名をクリップボードにコピー // 2002/2/3 aroka {F_COPYTAG, LTEXT("CopyTag"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, //このファイルのパス名とカーソル位置をコピー //Sept. 15, 2000 jepro 上と同じ説明になっていたのを修正 {F_CREATEKEYBINDLIST, LTEXT("CopyKeyBindList"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, //キー割り当て一覧をコピー //Sept. 15, 2000 JEPRO 追加 //Dec. 25, 2000 復活 @@ -231,7 +231,7 @@ MacroFuncInfo CSMacroMgr::m_MacroFuncInfoCommandArr[] = {F_CTRL_CODE_DIALOG, LTEXT("CtrlCodeDialog"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, //コントロールコードの入力(ダイアログ) //@@@ 2002.06.02 MIK {F_CTRL_CODE, LTEXT("CtrlCode"), {VT_I4, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, //コントロールコードの入力 2013.12.12 {F_INS_FILE_USED_RECENTLY, LTEXT("InsertFileUsedRecently"),{VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, // 最近使ったファイル挿入 - {F_INS_FOLDER_USED_RECENTLY,LTEXT("InsertFolderUsedRecently"),{VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, // 最近使ったフォルダ挿入 + {F_INS_FOLDER_USED_RECENTLY,LTEXT("InsertFolderUsedRecently"),{VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, // 最近使ったフォルダー挿入 /* 変換系 */ {F_TOLOWER, LTEXT("ToLower"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_EMPTY, NULL}, //小文字 @@ -450,7 +450,7 @@ MacroFuncInfo CSMacroMgr::m_MacroFuncInfoArr[] = {F_MACROSLEEP, LTEXT("Sleep"), {VT_I4, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_I4, NULL }, //指定した時間(ミリ秒)停止 {F_FILEOPENDIALOG, LTEXT("FileOpenDialog"), {VT_BSTR, VT_BSTR, VT_EMPTY, VT_EMPTY}, VT_BSTR, NULL }, //ファイルを開くダイアログの表示 {F_FILESAVEDIALOG, LTEXT("FileSaveDialog"), {VT_BSTR, VT_BSTR, VT_EMPTY, VT_EMPTY}, VT_BSTR, NULL }, //ファイルを保存ダイアログの表示 - {F_FOLDERDIALOG, LTEXT("FolderDialog"), {VT_BSTR, VT_BSTR, VT_EMPTY, VT_EMPTY}, VT_BSTR, NULL }, //フォルダを開くダイアログの表示 + {F_FOLDERDIALOG, LTEXT("FolderDialog"), {VT_BSTR, VT_BSTR, VT_EMPTY, VT_EMPTY}, VT_BSTR, NULL }, //フォルダーを開くダイアログの表示 {F_GETCLIPBOARD, LTEXT("GetClipboard"), {VT_I4, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_BSTR, NULL }, //クリップボードの文字列を取得 {F_SETCLIPBOARD, LTEXT("SetClipboard"), {VT_I4, VT_BSTR, VT_EMPTY, VT_EMPTY}, VT_I4, NULL }, //クリップボードに文字列を設定 {F_LAYOUTTOLOGICLINENUM,LTEXT("LayoutToLogicLineNum"), {VT_I4, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_I4, NULL }, //ロジック行番号取得 @@ -1048,7 +1048,7 @@ BOOL CSMacroMgr::CanFuncIsKeyMacro( int nFuncID ) case F_COPY_COLOR_HTML ://選択範囲内色付きHTMLコピー case F_COPY_COLOR_HTML_LINENUMBER://選択範囲内行番号色付きHTMLコピー case F_COPYPATH ://このファイルのパス名をクリップボードにコピー - case F_COPYDIRPATH ://このファイルのフォルダ名をクリップボードにコピー + case F_COPYDIRPATH ://このファイルのフォルダー名をクリップボードにコピー case F_COPYTAG ://このファイルのパス名とカーソル位置をコピー //Sept. 15, 2000 jepro 上と同じ説明になっていたのを修正 case F_COPYFNAME ://このファイル名をクリップボードにコピー // 2002/2/3 aroka case F_CREATEKEYBINDLIST ://キー割り当て一覧をコピー //Sept. 15, 2000 JEPRO 追加 //Dec. 25, 2000 復活 @@ -1059,7 +1059,7 @@ BOOL CSMacroMgr::CanFuncIsKeyMacro( int nFuncID ) // case F_CTRL_CODE_DIALOG ://コントロールコードの入力(ダイアログ) //@@@ 2002.06.02 MIK case F_CTRL_CODE ://コントロールコードの入力 2013.12.12 case F_INS_FILE_USED_RECENTLY :// 最近使ったファイル挿入 - case F_INS_FOLDER_USED_RECENTLY :// 最近使ったフォルダ挿入 + case F_INS_FOLDER_USED_RECENTLY :// 最近使ったフォルダー挿入 /* 変換系 */ case F_TOLOWER ://小文字 diff --git a/sakura_core/macro/CWSH.cpp b/sakura_core/macro/CWSH.cpp index 5ccd809bcd..dee0726634 100644 --- a/sakura_core/macro/CWSH.cpp +++ b/sakura_core/macro/CWSH.cpp @@ -242,7 +242,7 @@ class CWSHSite: public IActiveScriptSite, public IActiveScriptSiteWindow CWSHClient::CWSHClient(const wchar_t *AEngine, ScriptErrorHandler AErrorHandler, void *AData): m_OnError(AErrorHandler), m_Data(AData), m_Valid(false), m_Engine(NULL) { - // 2010.08.28 DLL インジェクション対策としてEXEのフォルダに移動する + // 2010.08.28 DLL インジェクション対策としてEXEのフォルダーに移動する CCurrentDirectoryBackupPoint dirBack; ChangeCurrentDirectoryToExeDir(); diff --git a/sakura_core/outline/CDlgFuncList.cpp b/sakura_core/outline/CDlgFuncList.cpp index 7996231c27..0a3e1c3663 100644 --- a/sakura_core/outline/CDlgFuncList.cpp +++ b/sakura_core/outline/CDlgFuncList.cpp @@ -1573,8 +1573,8 @@ void CDlgFuncList::SetTreeFile() // lvis.item.lParam // 0 以下(nFuncInfo): m_pcFuncInfoArr->At(nFuncInfo)にファイル名 // -1: Grepのファイル名要素 - // -2: Grepのサブフォルダ要素 - // -(nFuncInfo * 10 + 3): Grepルートフォルダ要素 + // -2: Grepのサブフォルダー要素 + // -(nFuncInfo * 10 + 3): Grepルートフォルダー要素 // -4: データ・追加操作なし TVINSERTSTRUCT tvis; tvis.hParent = hParentTree.back(); @@ -1642,7 +1642,7 @@ void CDlgFuncList::SetTreeFileSub( HTREEITEM hParent, const WCHAR* pszFile ) CGrepEnumFolders cGrepExceptAbsFolders; cGrepExceptAbsFolders.Enumerates(L"", cGrepEnumKeys.m_vecExceptAbsFolderKeys, cGrepEnumOptions); - //フォルダ一覧作成 + //フォルダー一覧作成 CGrepEnumFilterFolders cGrepEnumFilterFolders; cGrepEnumFilterFolders.Enumerates( basePath.c_str(), cGrepEnumKeys, cGrepEnumOptions, cGrepExceptAbsFolders ); int nItemCount = cGrepEnumFilterFolders.GetCount(); @@ -3867,7 +3867,7 @@ void CDlgFuncList::LoadFileTreeSetting( CFileTreeSetting& data, SFilePath& IniDi data.m_szDefaultProjectIni = pFileTree->m_szProjectIni; data.m_szLoadProjectIni = L""; if( data.m_bProject ){ - // 各フォルダのプロジェクトファイル読み込み + // 各フォルダーのプロジェクトファイル読み込み WCHAR szPath[_MAX_PATH]; ::GetLongFileName( L".", szPath ); wcscat( szPath, L"\\" ); diff --git a/sakura_core/plugin/CPlugin.cpp b/sakura_core/plugin/CPlugin.cpp index c0f45d4a64..20c428ea7c 100644 --- a/sakura_core/plugin/CPlugin.cpp +++ b/sakura_core/plugin/CPlugin.cpp @@ -219,7 +219,7 @@ bool CPlugin::ReadPluginDefOption( CDataProfile *cProfile, CDataProfile *cProfil return true; } -//プラグインフォルダ基準の相対パスをフルパスに変換 +//プラグインフォルダー基準の相対パスをフルパスに変換 std::wstring CPlugin::GetFilePath( const wstring& sFileName ) const { return m_sBaseDir + L"\\" + sFileName; diff --git a/sakura_core/plugin/CPlugin.h b/sakura_core/plugin/CPlugin.h index e3412d9c28..b125037832 100644 --- a/sakura_core/plugin/CPlugin.h +++ b/sakura_core/plugin/CPlugin.h @@ -45,7 +45,7 @@ typedef int PlugId; #define PII_L10NDIR L"local" #define PII_L10NFILEBASE L"plugin_" #define PII_L10NFILEEXT L".def" -//オプションファイル拡張子(オプションファイル=個別フォルダ名+拡張子) +//オプションファイル拡張子(オプションファイル=個別フォルダー名+拡張子) #define PII_OPTFILEEXT L".ini" //プラグイン定義ファイル・キー文字列 @@ -277,10 +277,10 @@ class CPlugin //属性 public: - wstring GetFilePath( const wstring& sFileName ) const; //プラグインフォルダ基準の相対パスをフルパスに変換 + wstring GetFilePath( const wstring& sFileName ) const; //プラグインフォルダー基準の相対パスをフルパスに変換 wstring GetPluginDefPath() const{ return GetFilePath( PII_FILENAME ); } //プラグイン定義ファイルのパス wstring GetOptionPath() const{ return m_sOptionDir + PII_OPTFILEEXT; } //オプションファイルのパス - wstring GetFolderName() const; //プラグインのフォルダ名を取得 + wstring GetFolderName() const; //プラグインのフォルダー名を取得 virtual CPlug::Array GetPlugs() const = 0; //プラグの一覧 //メンバ変数 diff --git a/sakura_core/plugin/CPluginIfObj.h b/sakura_core/plugin/CPluginIfObj.h index af5b8cef7c..d97b975c20 100644 --- a/sakura_core/plugin/CPluginIfObj.h +++ b/sakura_core/plugin/CPluginIfObj.h @@ -45,7 +45,7 @@ class CPluginIfObj : public CWSHIfObj { F_PL_SETOPTION, //オプションファイルに値を書く F_PL_ADDCOMMAND, //コマンドを追加する F_PL_FUNCTION_FIRST = F_FUNCTION_FIRST, //↓関数は以下に追加する - F_PL_GETPLUGINDIR, //プラグインフォルダパスを取得する + F_PL_GETPLUGINDIR, //プラグインフォルダーパスを取得する F_PL_GETDEF, //設定ファイルから値を読む F_PL_GETOPTION, //オプションファイルから値を読む F_PL_GETCOMMANDNO, //実行中プラグの番号を取得する @@ -88,7 +88,7 @@ class CPluginIfObj : public CWSHIfObj { switch(LOWORD(ID)) { - case F_PL_GETPLUGINDIR: //プラグインフォルダパスを取得する + case F_PL_GETPLUGINDIR: //プラグインフォルダーパスを取得する { SysString S(m_cPlugin.m_sBaseDir.c_str(), m_cPlugin.m_sBaseDir.size()); Wrap(&Result)->Receive(S); @@ -205,7 +205,7 @@ MacroFuncInfo CPluginIfObj::m_MacroFuncInfoCommandArr[] = MacroFuncInfo CPluginIfObj::m_MacroFuncInfoArr[] = { //ID 関数名 引数 戻り値の型 m_pszData - {EFunctionCode(F_PL_GETPLUGINDIR), LTEXT("GetPluginDir"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_BSTR, NULL }, //プラグインフォルダパスを取得する + {EFunctionCode(F_PL_GETPLUGINDIR), LTEXT("GetPluginDir"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_BSTR, NULL }, //プラグインフォルダーパスを取得する {EFunctionCode(F_PL_GETDEF), LTEXT("GetDef"), {VT_BSTR, VT_BSTR, VT_EMPTY, VT_EMPTY}, VT_BSTR, NULL }, //設定ファイルから値を読む {EFunctionCode(F_PL_GETOPTION), LTEXT("GetOption"), {VT_BSTR, VT_BSTR, VT_EMPTY, VT_EMPTY}, VT_BSTR, NULL }, //オプションファイルから値を読む {EFunctionCode(F_PL_GETCOMMANDNO), LTEXT("GetCommandNo"), {VT_EMPTY, VT_EMPTY, VT_EMPTY, VT_EMPTY}, VT_I4, NULL }, //オプションファイルから値を読む diff --git a/sakura_core/plugin/CPluginManager.cpp b/sakura_core/plugin/CPluginManager.cpp index f2b0af9dc6..bfaa818c55 100644 --- a/sakura_core/plugin/CPluginManager.cpp +++ b/sakura_core/plugin/CPluginManager.cpp @@ -39,12 +39,12 @@ //コンストラクタ CPluginManager::CPluginManager() { - //pluginsフォルダの場所を取得 + //pluginsフォルダーの場所を取得 WCHAR szPluginPath[_MAX_PATH]; - GetInidir( szPluginPath, L"plugins\\" ); //iniと同じ階層のpluginsフォルダを検索 + GetInidir( szPluginPath, L"plugins\\" ); //iniと同じ階層のpluginsフォルダーを検索 m_sBaseDir.append(szPluginPath); - //Exeフォルダ配下pluginsフォルダのパスを取得 + //Exeフォルダー配下pluginsフォルダーのパスを取得 WCHAR szPath[_MAX_PATH]; WCHAR szFolder[_MAX_PATH]; WCHAR szFname[_MAX_PATH]; @@ -79,11 +79,11 @@ bool CPluginManager::SearchNewPlugin( CommonSetting& common, HWND hWndOwner ) HANDLE hFind; CZipFile cZipFile; - //プラグインフォルダの配下を検索 + //プラグインフォルダーの配下を検索 WIN32_FIND_DATA wf; hFind = FindFirstFile( (m_sBaseDir + L"*").c_str(), &wf ); if (hFind == INVALID_HANDLE_VALUE) { - //プラグインフォルダが存在しない + //プラグインフォルダーが存在しない if (!CreateDirectory(m_sBaseDir.c_str(), NULL)) { InfoMessage( hWndOwner, L"%s", LS(STR_PLGMGR_FOLDER)); return true; @@ -92,7 +92,7 @@ bool CPluginManager::SearchNewPlugin( CommonSetting& common, HWND hWndOwner ) ::FindClose(hFind); bool bCancel = false; - //プラグインフォルダの配下を検索 + //プラグインフォルダーの配下を検索 bool bFindNewDir = SearchNewPluginDir(common, hWndOwner, m_sBaseDir, bCancel); if (!bCancel && m_sBaseDir != m_sExePluginDir) { bFindNewDir |= SearchNewPluginDir(common, hWndOwner, m_sExePluginDir, bCancel); @@ -125,7 +125,7 @@ bool CPluginManager::SearchNewPluginDir( CommonSetting& common, HWND hWndOwner, WIN32_FIND_DATA wf; hFind = FindFirstFile( (sSearchDir + L"*").c_str(), &wf ); if (hFind == INVALID_HANDLE_VALUE) { - //プラグインフォルダが存在しない + //プラグインフォルダーが存在しない return false; } bool bFindNewDir = false; @@ -135,7 +135,7 @@ bool CPluginManager::SearchNewPluginDir( CommonSetting& common, HWND hWndOwner, wcscmp(wf.cFileName, L".")!=0 && wcscmp(wf.cFileName, L"..")!=0 && wmemicmp(wf.cFileName, L"unuse") !=0 ) { - //インストール済みチェック。フォルダ名=プラグインテーブルの名前ならインストールしない + //インストール済みチェック。フォルダー名=プラグインテーブルの名前ならインストールしない // 2010.08.04 大文字小文字同一視にする bool isNotInstalled = true; for( int iNo=0; iNo < MAX_PLUGIN; iNo++ ){ @@ -146,7 +146,7 @@ bool CPluginManager::SearchNewPluginDir( CommonSetting& common, HWND hWndOwner, } if( !isNotInstalled ){ continue; } - // 2011.08.20 syat plugin.defが存在しないフォルダは飛ばす + // 2011.08.20 syat plugin.defが存在しないフォルダーは飛ばす if( ! IsFileExists( (sSearchDir + wf.cFileName + L"\\" + PII_FILENAME).c_str(), true ) ){ continue; } @@ -220,11 +220,11 @@ bool CPluginManager::InstZipPlugin( CommonSetting& common, HWND hWndOwner, const return false; } - //プラグインフォルダの存在を確認 + //プラグインフォルダーの存在を確認 WIN32_FIND_DATA wf; HANDLE hFind; if ((hFind = ::FindFirstFile( (m_sBaseDir + L"*").c_str(), &wf )) == INVALID_HANDLE_VALUE) { - //プラグインフォルダが存在しない + //プラグインフォルダーが存在しない if (m_sBaseDir == m_sExePluginDir) { InfoMessage( hWndOwner, LS(STR_PLGMGR_ERR_FOLDER)); ::FindClose(hFind); @@ -256,14 +256,14 @@ bool CPluginManager::InstZipPluginSub( CommonSetting& common, HWND hWndOwner, co bool bSkip = false; bool bNewPlugin = false; - // Plugin フォルダ名の取得,定義ファイルの確認 + // Plugin フォルダー名の取得,定義ファイルの確認 if (bOk && !cZipFile.SetZip(sZipFile)) { auto_snprintf_s( msg, _countof(msg), LS(STR_PLGMGR_INST_ZIP_ACCESS), sDispName.c_str() ); bOk = false; bSkip = bInSearch; } - // Plgin フォルダ名の取得,定義ファイルの確認 + // Plgin フォルダー名の取得,定義ファイルの確認 if (bOk && !cZipFile.ChkPluginDef(PII_FILENAME, sFolderName)) { auto_snprintf_s( msg, _countof(msg), LS(STR_PLGMGR_INST_ZIP_DEF), sDispName.c_str() ); bOk = false; @@ -295,8 +295,8 @@ bool CPluginManager::InstZipPluginSub( CommonSetting& common, HWND hWndOwner, co } } else { - // pluginsフォルダ検索中 - // フォルダ チェック。すでに解凍されていたならインストールしない(前段でインストール済み或は可否を確認済み) + // pluginsフォルダー検索中 + // フォルダー チェック。すでに解凍されていたならインストールしない(前段でインストール済み或は可否を確認済み) if (bOk && (fexist((m_sBaseDir + sFolderName).c_str()) || fexist((m_sExePluginDir + sFolderName).c_str())) ) { bOk = false; diff --git a/sakura_core/plugin/CPluginManager.h b/sakura_core/plugin/CPluginManager.h index 42571ab021..e28adc92ab 100644 --- a/sakura_core/plugin/CPluginManager.h +++ b/sakura_core/plugin/CPluginManager.h @@ -60,7 +60,7 @@ class CPluginManager final : public TSingleton{ //属性 public: - //pluginsフォルダのパス + //pluginsフォルダーのパス const wstring GetBaseDir() { return m_sBaseDir; } const wstring GetExePluginDir() { return m_sExePluginDir; } bool SearchNewPluginDir( CommonSetting& common, HWND hWndOwner, const wstring& sSearchDir, bool& bCancel ); //新規プラグインを追加する(下請け) @@ -70,7 +70,7 @@ class CPluginManager final : public TSingleton{ // メンバ変数 private: CPlugin::List m_plugins; - wstring m_sBaseDir; //pluginsフォルダのパス - wstring m_sExePluginDir; //Exeフォルダ配下pluginsフォルダのパス + wstring m_sBaseDir; //pluginsフォルダーのパス + wstring m_sExePluginDir; //Exeフォルダー配下pluginsフォルダーのパス }; #endif /* SAKURA_CPLUGINMANAGER_CE705DAD_1876_4B21_9052_07A9BFD292DE_H_ */ diff --git a/sakura_core/prop/CPropComBackup.cpp b/sakura_core/prop/CPropComBackup.cpp index 77a9bff167..cd8ad3e1e5 100644 --- a/sakura_core/prop/CPropComBackup.cpp +++ b/sakura_core/prop/CPropComBackup.cpp @@ -31,7 +31,7 @@ //@@@ 2001.02.04 Start by MIK: Popup Help static const DWORD p_helpids[] = { //10000 - IDC_BUTTON_BACKUP_FOLDER_REF, HIDC_BUTTON_BACKUP_FOLDER_REF, //バックアップフォルダ参照 + IDC_BUTTON_BACKUP_FOLDER_REF, HIDC_BUTTON_BACKUP_FOLDER_REF, //バックアップフォルダー参照 IDC_CHECK_BACKUP, HIDC_CHECK_BACKUP, //バックアップの作成 IDC_CHECK_BACKUP_YEAR, HIDC_CHECK_BACKUP_YEAR, //バックアップファイル名(西暦年) IDC_CHECK_BACKUP_MONTH, HIDC_CHECK_BACKUP_MONTH, //バックアップファイル名(月) @@ -40,10 +40,10 @@ static const DWORD p_helpids[] = { //10000 IDC_CHECK_BACKUP_MIN, HIDC_CHECK_BACKUP_MIN, //バックアップファイル名(分) IDC_CHECK_BACKUP_SEC, HIDC_CHECK_BACKUP_SEC, //バックアップファイル名(秒) IDC_CHECK_BACKUPDIALOG, HIDC_CHECK_BACKUPDIALOG, //作成前に確認 - IDC_CHECK_BACKUPFOLDER, HIDC_CHECK_BACKUPFOLDER, //指定フォルダに作成 - IDC_CHECK_BACKUP_FOLDER_RM, HIDC_CHECK_BACKUP_FOLDER_RM, //指定フォルダに作成(リムーバブルメディアのみ) + IDC_CHECK_BACKUPFOLDER, HIDC_CHECK_BACKUPFOLDER, //指定フォルダーに作成 + IDC_CHECK_BACKUP_FOLDER_RM, HIDC_CHECK_BACKUP_FOLDER_RM, //指定フォルダーに作成(リムーバブルメディアのみ) IDC_CHECK_BACKUP_DUSTBOX, HIDC_CHECK_BACKUP_DUSTBOX, //バックアップファイルをごみ箱に放り込む //@@@ 2001.12.11 add MIK - IDC_EDIT_BACKUPFOLDER, HIDC_EDIT_BACKUPFOLDER, //保存フォルダ名 + IDC_EDIT_BACKUPFOLDER, HIDC_EDIT_BACKUPFOLDER, //保存フォルダー名 IDC_EDIT_BACKUP_3, HIDC_EDIT_BACKUP_3, //世代数 IDC_RADIO_BACKUP_TYPE1, HIDC_RADIO_BACKUP_TYPE1, //バックアップの種類(拡張子) // IDC_RADIO_BACKUP_TYPE2, HIDC_RADIO_BACKUP_TYPE2NEWHID, //バックアップの種類(日付・時刻) // 2002.11.09 Moca HIDが.._TYPE3と逆だった // Jun. 5, 2004 genta 廃止 @@ -97,7 +97,7 @@ INT_PTR CPropBackup::DispatchEvent( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPAR ::SetWindowLongPtr( hwndDlg, DWLP_USER, lParam ); /* ユーザーがエディット コントロールに入力できるテキストの長さを制限する */ - // Oct. 5, 2002 genta バックアップフォルダ名の入力サイズを指定 + // Oct. 5, 2002 genta バックアップフォルダー名の入力サイズを指定 // Oct. 8, 2002 genta 最後に付加される\の領域を残すためバッファサイズ-1しか入力させない EditCtl_LimitText( ::GetDlgItem( hwndDlg, IDC_EDIT_BACKUPFOLDER ), _countof2(m_Common.m_sBackup.m_szBackUpFolder) - 1 - 1 ); // 20051107 aroka @@ -171,9 +171,9 @@ INT_PTR CPropBackup::DispatchEvent( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPAR UpdateBackupFile( hwndDlg ); EnableBackupInput(hwndDlg); return TRUE; - case IDC_BUTTON_BACKUP_FOLDER_REF: /* フォルダ参照 */ + case IDC_BUTTON_BACKUP_FOLDER_REF: /* フォルダー参照 */ { - /* バックアップを作成するフォルダ */ + /* バックアップを作成するフォルダー */ WCHAR szFolder[_MAX_PATH]; ::DlgItem_GetText( hwndDlg, IDC_EDIT_BACKUPFOLDER, szFolder, _countof( szFolder )); @@ -189,7 +189,7 @@ INT_PTR CPropBackup::DispatchEvent( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPAR UpdateBackupFile( hwndDlg ); } break; /* BN_CLICKED */ - case EN_CHANGE: // 20051107 aroka フォルダが変更されたらリアルタイムにエディットボックス内を更新 + case EN_CHANGE: // 20051107 aroka フォルダーが変更されたらリアルタイムにエディットボックス内を更新 switch( wID ){ case IDC_EDIT_BACKUPFOLDER: // 2009.02.21 ryoji 後ろに\が追加されるので,1文字余裕をみる必要がある. @@ -238,7 +238,7 @@ void CPropBackup::SetData( HWND hwndDlg ) ::CheckDlgButtonBool( hwndDlg, IDC_CHECK_BACKUP, m_Common.m_sBackup.m_bBackUp ); /* バックアップの作成前に確認 */ ::CheckDlgButtonBool( hwndDlg, IDC_CHECK_BACKUPDIALOG, m_Common.m_sBackup.m_bBackUpDialog ); -// /* 指定フォルダにバックアップを作成する */ // 20051107 aroka 「バックアップの作成」に連動させる +// /* 指定フォルダーにバックアップを作成する */ // 20051107 aroka 「バックアップの作成」に連動させる // ::CheckDlgButton( hwndDlg, IDC_CHECK_BACKUPFOLDER, .m_sBackup.m_bBackUpFolder ); /* バックアップファイル名のタイプ 1=(.bak) 2=*_日付.* */ @@ -279,23 +279,23 @@ void CPropBackup::SetData( HWND hwndDlg ) /* バックアップファイル名:日付の秒 */ ::CheckDlgButtonBool( hwndDlg, IDC_CHECK_BACKUP_SEC, m_Common.m_sBackup.GetBackupOpt(BKUP_SEC) ); - /* 指定フォルダにバックアップを作成する */ // 20051107 aroka 移動:連動対象にする。 + /* 指定フォルダーにバックアップを作成する */ // 20051107 aroka 移動:連動対象にする。 ::CheckDlgButtonBool( hwndDlg, IDC_CHECK_BACKUPFOLDER, m_Common.m_sBackup.m_bBackUpFolder ); ::CheckDlgButtonBool( hwndDlg, IDC_CHECK_BACKUP_FOLDER_RM, m_Common.m_sBackup.m_bBackUpFolderRM ); // 2010/5/27 Uchi - /* バックアップを作成するフォルダ */ + /* バックアップを作成するフォルダー */ ::DlgItem_SetText( hwndDlg, IDC_EDIT_BACKUPFOLDER, m_Common.m_sBackup.m_szBackUpFolder ); /* バックアップファイルをごみ箱に放り込む */ //@@@ 2001.12.11 add MIK ::CheckDlgButton( hwndDlg, IDC_CHECK_BACKUP_DUSTBOX, m_Common.m_sBackup.m_bBackUpDustBox?BST_CHECKED:BST_UNCHECKED ); //@@@ 2001.12.11 add MIK - /* バックアップ先フォルダを詳細設定する */ // 20051107 aroka + /* バックアップ先フォルダーを詳細設定する */ // 20051107 aroka ::CheckDlgButton( hwndDlg, IDC_CHECK_BACKUP_ADVANCED, m_Common.m_sBackup.m_bBackUpPathAdvanced?BST_CHECKED:BST_UNCHECKED ); - /* バックアップを作成するフォルダの詳細設定 */ // 20051107 aroka + /* バックアップを作成するフォルダーの詳細設定 */ // 20051107 aroka ::DlgItem_SetText( hwndDlg, IDC_EDIT_BACKUPFILE, m_Common.m_sBackup.m_szBackUpPathAdvanced ); - /* バックアップを作成するフォルダの詳細設定 */ // 20051128 aroka + /* バックアップを作成するフォルダーの詳細設定 */ // 20051128 aroka switch( m_Common.m_sBackup.GetBackupTypeAdv() ){ case 2: ::CheckDlgButton( hwndDlg, IDC_RADIO_BACKUP_DATETYPE1A, 1 ); // 付加する日付のタイプ(現時刻) @@ -329,7 +329,7 @@ int CPropBackup::GetData( HWND hwndDlg ) m_Common.m_sBackup.m_bBackUp = ::IsDlgButtonCheckedBool( hwndDlg, IDC_CHECK_BACKUP ); /* バックアップの作成前に確認 */ m_Common.m_sBackup.m_bBackUpDialog = ::IsDlgButtonCheckedBool( hwndDlg, IDC_CHECK_BACKUPDIALOG ); -// /* 指定フォルダにバックアップを作成する */ // 20051107 aroka 「バックアップの作成」に連動させる +// /* 指定フォルダーにバックアップを作成する */ // 20051107 aroka 「バックアップの作成」に連動させる // m_Common.m_sBackup.m_bBackUpFolder = ::IsDlgButtonChecked( hwndDlg, IDC_CHECK_BACKUPFOLDER ); /* バックアップファイル名のタイプ 1=(.bak) 2=*_日付.* */ @@ -377,11 +377,11 @@ int CPropBackup::GetData( HWND hwndDlg ) /* バックアップファイル名:日付の秒 */ m_Common.m_sBackup.SetBackupOpt(BKUP_SEC, ::IsDlgButtonChecked( hwndDlg, IDC_CHECK_BACKUP_SEC ) == BST_CHECKED); - /* 指定フォルダにバックアップを作成する */ // 20051107 aroka 移動 + /* 指定フォルダーにバックアップを作成する */ // 20051107 aroka 移動 m_Common.m_sBackup.m_bBackUpFolder = ::IsDlgButtonCheckedBool( hwndDlg, IDC_CHECK_BACKUPFOLDER ); m_Common.m_sBackup.m_bBackUpFolderRM = ::IsDlgButtonCheckedBool( hwndDlg, IDC_CHECK_BACKUP_FOLDER_RM ); // 2010/5/27 Uchi - /* バックアップを作成するフォルダ */ + /* バックアップを作成するフォルダー */ // Oct. 5, 2002 genta サイズをsizeof()で指定 // Oct. 8, 2002 genta 後ろに\が追加されるので,1文字余裕を見る必要がある. ::DlgItem_GetText( hwndDlg, IDC_EDIT_BACKUPFOLDER, m_Common.m_sBackup.m_szBackUpFolder, _countof2(m_Common.m_sBackup.m_szBackUpFolder) - 1); @@ -389,9 +389,9 @@ int CPropBackup::GetData( HWND hwndDlg ) /* バックアップファイルをごみ箱に放り込む */ //@@@ 2001.12.11 add MIK m_Common.m_sBackup.m_bBackUpDustBox = (BST_CHECKED==::IsDlgButtonChecked( hwndDlg, IDC_CHECK_BACKUP_DUSTBOX )); //@@@ 2001.12.11 add MIK - /* 指定フォルダにバックアップを作成する詳細設定 */ // 20051107 aroka + /* 指定フォルダーにバックアップを作成する詳細設定 */ // 20051107 aroka m_Common.m_sBackup.m_bBackUpPathAdvanced = (BST_CHECKED==::IsDlgButtonChecked( hwndDlg, IDC_CHECK_BACKUP_ADVANCED )); - /* バックアップを作成するフォルダ */ // 20051107 aroka + /* バックアップを作成するフォルダー */ // 20051107 aroka ::DlgItem_GetText( hwndDlg, IDC_EDIT_BACKUPFILE, m_Common.m_sBackup.m_szBackUpPathAdvanced, _countof2( m_Common.m_sBackup.m_szBackUpPathAdvanced ) - 1); // 20051128 aroka 詳細設定の日付のタイプ @@ -480,7 +480,7 @@ void CPropBackup::EnableBackupInput(HWND hwndDlg) SHOWENABLE( IDC_RADIO_BACKUP_DATETYPE2A, bAdvanced, bBackup ); SHOWENABLE( IDC_CHECK_BACKUPFOLDER, TRUE, bBackup ); - SHOWENABLE( IDC_LABEL_BACKUP_4, TRUE, bBackup && bFolder ); // added Sept. 6, JEPRO フォルダ指定したときだけEnableになるように変更 + SHOWENABLE( IDC_LABEL_BACKUP_4, TRUE, bBackup && bFolder ); // added Sept. 6, JEPRO フォルダー指定したときだけEnableになるように変更 SHOWENABLE( IDC_CHECK_BACKUP_FOLDER_RM, TRUE, bBackup && bFolder ); // 2010/5/27 Uchi SHOWENABLE( IDC_EDIT_BACKUPFOLDER, TRUE, bBackup && bFolder ); SHOWENABLE( IDC_BUTTON_BACKUP_FOLDER_REF, TRUE, bBackup && bFolder ); diff --git a/sakura_core/prop/CPropComEdit.cpp b/sakura_core/prop/CPropComEdit.cpp index 7fb4b44dbe..8a1c73d7ae 100644 --- a/sakura_core/prop/CPropComEdit.cpp +++ b/sakura_core/prop/CPropComEdit.cpp @@ -43,11 +43,11 @@ static const DWORD p_helpids[] = { //10210 // 2007.02.11 genta クリッカブルURLをこのページに移動 IDC_CHECK_bSelectClickedURL, HIDC_CHECK_bSelectClickedURL, //クリッカブルURL IDC_CHECK_CONVERTEOLPASTE, HIDC_CHECK_CONVERTEOLPASTE, //改行コードを変換して貼り付ける - IDC_RADIO_CURDIR, HIDC_RADIO_CURDIR, //カレントフォルダ - IDC_RADIO_MRUDIR, HIDC_RADIO_MRUDIR, //最近使ったフォルダ - IDC_RADIO_SELDIR, HIDC_RADIO_SELDIR, //指定フォルダ - IDC_EDIT_FILEOPENDIR, HIDC_EDIT_FILEOPENDIR, //指定フォルダパス - IDC_BUTTON_FILEOPENDIR, HIDC_EDIT_FILEOPENDIR, //指定フォルダパス + IDC_RADIO_CURDIR, HIDC_RADIO_CURDIR, //カレントフォルダー + IDC_RADIO_MRUDIR, HIDC_RADIO_MRUDIR, //最近使ったフォルダー + IDC_RADIO_SELDIR, HIDC_RADIO_SELDIR, //指定フォルダー + IDC_EDIT_FILEOPENDIR, HIDC_EDIT_FILEOPENDIR, //指定フォルダーパス + IDC_BUTTON_FILEOPENDIR, HIDC_EDIT_FILEOPENDIR, //指定フォルダーパス IDC_CHECK_ENABLEEXTEOL, HIDC_CHECK_ENABLEEXTEOL, //改行コードNEL,PS,LSを有効にする IDC_CHECK_BOXSELECTLOCK, HIDC_CHECK_BOXSELECTLOCK, //矩形選択移動で選択をロックする // IDC_STATIC, -1, @@ -302,7 +302,7 @@ int CPropEdit::GetData( HWND hwndDlg ) */ void CPropEdit::EnableEditPropInput( HWND hwndDlg ) { - // 指定フォルダ + // 指定フォルダー if( ::IsDlgButtonChecked( hwndDlg, IDC_RADIO_SELDIR ) ){ ::EnableWindow( ::GetDlgItem( hwndDlg, IDC_EDIT_FILEOPENDIR ), TRUE ); ::EnableWindow( ::GetDlgItem( hwndDlg, IDC_BUTTON_FILEOPENDIR ), TRUE ); diff --git a/sakura_core/prop/CPropComGeneral.cpp b/sakura_core/prop/CPropComGeneral.cpp index a097ce61fd..a28e995907 100644 --- a/sakura_core/prop/CPropComGeneral.cpp +++ b/sakura_core/prop/CPropComGeneral.cpp @@ -41,7 +41,7 @@ TYPE_NAME_ID SpecialScrollModeArr[] = { static const DWORD p_helpids[] = { //10900 IDC_BUTTON_CLEAR_MRU_FILE, HIDC_BUTTON_CLEAR_MRU_FILE, //履歴をクリア(ファイル) - IDC_BUTTON_CLEAR_MRU_FOLDER, HIDC_BUTTON_CLEAR_MRU_FOLDER, //履歴をクリア(フォルダ) + IDC_BUTTON_CLEAR_MRU_FOLDER, HIDC_BUTTON_CLEAR_MRU_FOLDER, //履歴をクリア(フォルダー) IDC_CHECK_FREECARET, HIDC_CHECK_FREECARET, //フリーカーソル //DEL IDC_CHECK_INDENT, HIDC_CHECK_INDENT, //自動インデント :タイプ別へ移動 //DEL IDC_CHECK_INDENT_WSPACE, HIDC_CHECK_INDENT_WSPACE, //全角空白もインデント :タイプ別へ移動 @@ -56,7 +56,7 @@ static const DWORD p_helpids[] = { //10900 IDC_HOTKEY_TRAYMENU, HIDC_HOTKEY_TRAYMENU, //左クリックメニューのショートカットキー IDC_EDIT_REPEATEDSCROLLLINENUM, HIDC_EDIT_REPEATEDSCROLLLINENUM, //スクロール行数 IDC_EDIT_MAX_MRU_FILE, HIDC_EDIT_MAX_MRU_FILE, //ファイル履歴の最大数 - IDC_EDIT_MAX_MRU_FOLDER, HIDC_EDIT_MAX_MRU_FOLDER, //フォルダ履歴の最大数 + IDC_EDIT_MAX_MRU_FOLDER, HIDC_EDIT_MAX_MRU_FOLDER, //フォルダー履歴の最大数 IDC_RADIO_CARETTYPE0, HIDC_RADIO_CARETTYPE0, //カーソル形状(Windows風) IDC_RADIO_CARETTYPE1, HIDC_RADIO_CARETTYPE1, //カーソル形状(MS-DOS風) IDC_SPIN_REPEATEDSCROLLLINENUM, HIDC_EDIT_REPEATEDSCROLLLINENUM, @@ -166,7 +166,7 @@ INT_PTR CPropGeneral::DispatchEvent( InfoMessage( hwndDlg, LS(STR_PROPCOMGEN_FILE2) ); return TRUE; case IDC_BUTTON_CLEAR_MRU_FOLDER: - /* フォルダの履歴をクリア */ + /* フォルダーの履歴をクリア */ if( IDCANCEL == ::MYMESSAGEBOX( hwndDlg, MB_OKCANCEL | MB_ICONQUESTION, GSTR_APPNAME, LS(STR_PROPCOMGEN_DIR1) ) ){ return TRUE; @@ -259,7 +259,7 @@ INT_PTR CPropGeneral::DispatchEvent( ::SetDlgItemInt( hwndDlg, IDC_EDIT_MAX_MRU_FILE, nVal, FALSE ); return TRUE; case IDC_SPIN_MAX_MRU_FOLDER: - /* フォルダの履歴MAX */ + /* フォルダーの履歴MAX */ // MYTRACE( L"IDC_SPIN_MAX_MRU_FOLDER\n" ); nVal = ::GetDlgItemInt( hwndDlg, IDC_EDIT_MAX_MRU_FOLDER, NULL, FALSE ); if( pMNUD->iDelta < 0 ){ @@ -393,7 +393,7 @@ void CPropGeneral::SetData( HWND hwndDlg ) /* ファイルの履歴MAX */ ::SetDlgItemInt( hwndDlg, IDC_EDIT_MAX_MRU_FILE, m_Common.m_sGeneral.m_nMRUArrNum_MAX, FALSE ); - /* フォルダの履歴MAX */ + /* フォルダーの履歴MAX */ ::SetDlgItemInt( hwndDlg, IDC_EDIT_MAX_MRU_FOLDER, m_Common.m_sGeneral.m_nOPENFOLDERArrNum_MAX, FALSE ); /* タスクトレイを使う */ @@ -487,7 +487,7 @@ int CPropGeneral::GetData( HWND hwndDlg ) cRecentFile.Terminate(); } - /* フォルダの履歴MAX */ + /* フォルダーの履歴MAX */ m_Common.m_sGeneral.m_nOPENFOLDERArrNum_MAX = ::GetDlgItemInt( hwndDlg, IDC_EDIT_MAX_MRU_FOLDER, NULL, FALSE ); if( m_Common.m_sGeneral.m_nOPENFOLDERArrNum_MAX < 0 ){ m_Common.m_sGeneral.m_nOPENFOLDERArrNum_MAX = 0; diff --git a/sakura_core/prop/CPropComHelper.cpp b/sakura_core/prop/CPropComHelper.cpp index ab7ed1a68b..a4bdd4a66a 100644 --- a/sakura_core/prop/CPropComHelper.cpp +++ b/sakura_core/prop/CPropComHelper.cpp @@ -164,7 +164,7 @@ INT_PTR CPropHelper::DispatchEvent( case IDC_BUTTON_OPENMDICT: /* MigemoDict場所指定「参照...」ボタン */ { WCHAR szPath[_MAX_PATH]; - /* 検索フォルダ */ + /* 検索フォルダー */ // 2007.05.27 ryoji 相対パスは設定ファイルからのパスを優先 if( _IS_REL_PATH( m_Common.m_sHelper.m_szMigemoDict ) ){ GetInidirOrExedir( szPath, m_Common.m_sHelper.m_szMigemoDict, TRUE ); diff --git a/sakura_core/prop/CPropComMacro.cpp b/sakura_core/prop/CPropComMacro.cpp index 228d913e27..8740983926 100644 --- a/sakura_core/prop/CPropComMacro.cpp +++ b/sakura_core/prop/CPropComMacro.cpp @@ -178,7 +178,7 @@ INT_PTR CPropMacro::DispatchEvent( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARA break; } break; /* CBN_DROPDOWN */ - // From Here 2003.06.23 Moca マクロフォルダの最後の\がなければ付ける + // From Here 2003.06.23 Moca マクロフォルダーの最後の\がなければ付ける case EN_SETFOCUS: if (isImeUndesirable(wID)) ImeSetOpen(hwndCtl, FALSE, &s_isImmOpenBkup); @@ -374,7 +374,7 @@ int CPropMacro::GetData( HWND hwndDlg ) // マクロディレクトリ //@@@ 2002.01.03 YAZAKI 共通設定『マクロ』がタブを切り替えるだけで設定が保存されないように。 ::DlgItem_GetText( hwndDlg, IDC_MACRODIR, m_Common.m_sMacro.m_szMACROFOLDER, _MAX_PATH ); - // 2003.06.23 Moca マクロフォルダの最後の\がなければ付ける + // 2003.06.23 Moca マクロフォルダーの最後の\がなければ付ける AddLastChar( m_Common.m_sMacro.m_szMACROFOLDER, _MAX_PATH, L'\\' ); // マクロ停止ダイアログ表示待ち時間 @@ -573,7 +573,7 @@ void CPropMacro::SelectBaseDir_Macro( HWND hwndDlg ) { WCHAR szDir[_MAX_PATH]; - /* 検索フォルダ */ + /* 検索フォルダー */ ::DlgItem_GetText( hwndDlg, IDC_MACRODIR, szDir, _countof(szDir) ); // 2003.06.23 Moca 相対パスは実行ファイルからのパス @@ -629,7 +629,7 @@ void CPropMacro::OnFileDropdown_Macro( HWND hwndDlg ) // コンボボックスに設定 // でも.と..は勘弁。 //if (wcscmp( wf.cFileName, L"." ) != 0 && wcscmp( wf.cFileName, L".." ) != 0){ - if( (wf.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0 ){ // 2009.02.12 ryoji フォルダを除外 + if( (wf.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0 ){ // 2009.02.12 ryoji フォルダーを除外 int result = Combo_AddString( hCombo, wf.cFileName ); if( result == CB_ERR || result == CB_ERRSPACE ) break; diff --git a/sakura_core/prop/CPropComPlugin.cpp b/sakura_core/prop/CPropComPlugin.cpp index b1e2db3dd7..9f124f5d67 100644 --- a/sakura_core/prop/CPropComPlugin.cpp +++ b/sakura_core/prop/CPropComPlugin.cpp @@ -54,7 +54,7 @@ static const DWORD p_helpids[] = { //11700 IDC_PLUGINLIST, HIDC_PLUGINLIST, //プラグインリスト IDC_PLUGIN_INST_ZIP, HIDC_PLUGIN_INST_ZIP, //Zipプラグインを追加 // 2011/11/2 Uchi IDC_PLUGIN_SearchNew, HIDC_PLUGIN_SearchNew, //新規プラグインを追加 - IDC_PLUGIN_OpenFolder, HIDC_PLUGIN_OpenFolder, //フォルダを開く + IDC_PLUGIN_OpenFolder, HIDC_PLUGIN_OpenFolder, //フォルダーを開く IDC_PLUGIN_Remove, HIDC_PLUGIN_Remove, //プラグインを削除 IDC_PLUGIN_OPTION, HIDC_PLUGIN_OPTION, //プラグイン設定 // 2010/3/22 Uchi IDC_PLUGIN_README, HIDC_PLUGIN_README, //ReadMe表示 // 2011/11/2 Uchi @@ -195,7 +195,7 @@ INT_PTR CPropPlugin::DispatchEvent( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPAR } SetData_LIST( hwndDlg ); //リストの再構築 } - // フォルダを記憶 + // フォルダーを記憶 WCHAR szFolder[_MAX_PATH + 1]; WCHAR szFname[_MAX_PATH + 1]; SplitPath_FolderAndFile(szPath, szFolder, szFname); @@ -223,7 +223,7 @@ INT_PTR CPropPlugin::DispatchEvent( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPAR HWND hListView = ::GetDlgItem( hwndDlg, IDC_PLUGINLIST ); int sel = ListView_GetNextItem( hListView, -1, LVNI_SELECTED ); if( sel >= 0 && m_Common.m_sPlugin.m_PluginTable[sel].m_state == PLS_LOADED ){ - // 2010.08.21 プラグイン名(フォルダ名)の同一性の確認 + // 2010.08.21 プラグイン名(フォルダー名)の同一性の確認 CPlugin* plugin = CPluginManager::getInstance()->GetPlugin(sel); wstring sDirName = plugin->GetFolderName().c_str(); if( plugin && 0 == wmemicmp(sDirName.c_str(), m_Common.m_sPlugin.m_PluginTable[sel].m_szName ) ){ @@ -235,7 +235,7 @@ INT_PTR CPropPlugin::DispatchEvent( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPAR } } break; - case IDC_PLUGIN_OpenFolder: // フォルダを開く + case IDC_PLUGIN_OpenFolder: // フォルダーを開く { std::wstring sBaseDir = CPluginManager::getInstance()->GetBaseDir() + L"."; if( ! IsDirectory(sBaseDir.c_str()) ){ @@ -250,7 +250,7 @@ INT_PTR CPropPlugin::DispatchEvent( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPAR { HWND hListView = ::GetDlgItem( hwndDlg, IDC_PLUGINLIST ); int sel = ListView_GetNextItem( hListView, -1, LVNI_SELECTED ); - std::wstring sName = m_Common.m_sPlugin.m_PluginTable[sel].m_szName; // 個別フォルダ名 + std::wstring sName = m_Common.m_sPlugin.m_PluginTable[sel].m_szName; // 個別フォルダー名 std::wstring sReadMeName = GetReadMeFile(sName); if (!sReadMeName.empty()) { if (!BrowseReadMe(sReadMeName)) { @@ -403,7 +403,7 @@ void CPropPlugin::SetData_LIST( HWND hwndDlg ) } ListView_SetItem( hListView, &sItem ); - //フォルダ + //フォルダー memset_raw( &sItem, 0, sizeof( sItem )); sItem.iItem = index; sItem.mask = LVIF_TEXT; @@ -531,7 +531,7 @@ std::wstring CPropPlugin::GetReadMeFile(const std::wstring& sName) fl = new CFile(sReadMeName.c_str()); } if (!fl->IsFileExist()) { - // exeフォルダ配下 + // exeフォルダー配下 sReadMeName = CPluginManager::getInstance()->GetExePluginDir() + sName + L"\\ReadMe.txt"; delete fl; diff --git a/sakura_core/recent/CMRUFile.cpp b/sakura_core/recent/CMRUFile.cpp index 22d32c8b6a..7396e75b04 100644 --- a/sakura_core/recent/CMRUFile.cpp +++ b/sakura_core/recent/CMRUFile.cpp @@ -214,9 +214,9 @@ void CMRUFile::Add( EditInfo* pEditInfo ) WCHAR szDrive[_MAX_DRIVE]; WCHAR szDir[_MAX_DIR]; - WCHAR szFolder[_MAX_PATH + 1]; // ドライブ+フォルダ + WCHAR szFolder[_MAX_PATH + 1]; // ドライブ+フォルダー - _wsplitpath( pEditInfo->m_szPath, szDrive, szDir, NULL, NULL ); // ドライブとフォルダを取り出す。 + _wsplitpath( pEditInfo->m_szPath, szDrive, szDir, NULL, NULL ); // ドライブとフォルダーを取り出す。 // Jan. 10, 2006 genta USBメモリはRemovable mediaと認識されるようなので, // 一応無効化する. diff --git a/sakura_core/recent/CMRUFolder.cpp b/sakura_core/recent/CMRUFolder.cpp index 844471e4ae..293da5cdc0 100644 --- a/sakura_core/recent/CMRUFolder.cpp +++ b/sakura_core/recent/CMRUFolder.cpp @@ -40,7 +40,7 @@ CMRUFolder::~CMRUFolder() } /*! - フォルダ履歴メニューの作成 + フォルダー履歴メニューの作成 @param pCMenuDrawer [in] (out?) メニュー作成で用いるMenuDrawer @@ -57,7 +57,7 @@ HMENU CMRUFolder::CreateMenu( CMenuDrawer* pCMenuDrawer ) const } /*! - フォルダ履歴メニューの作成 + フォルダー履歴メニューの作成 @param 追加するメニューのハンドル @param pCMenuDrawer [in] (out?) メニュー作成で用いるMenuDrawer @@ -98,7 +98,7 @@ std::vector CMRUFolder::GetPathList() const { std::vector ret; for( int i = 0; i < m_cRecentFolder.GetItemCount(); ++i ){ - // 「共通設定」→「全般」→「フォルダの履歴MAX」を反映 + // 「共通設定」→「全般」→「フォルダーの履歴MAX」を反映 if ( i >= m_cRecentFolder.GetViewCount() ) break; ret.push_back(m_cRecentFolder.GetItemText(i)); } @@ -115,7 +115,7 @@ void CMRUFolder::ClearAll() m_cRecentFolder.DeleteAllItem(); } -/* @brief 開いたフォルダ リストへの登録 +/* @brief 開いたフォルダー リストへの登録 @date 2001.12.26 CShareData::AddOPENFOLDERListから移動した。(YAZAKI) */ diff --git a/sakura_core/recent/CMRUFolder.h b/sakura_core/recent/CMRUFolder.h index 390e754d15..0ed7ca0ab8 100644 --- a/sakura_core/recent/CMRUFolder.h +++ b/sakura_core/recent/CMRUFolder.h @@ -1,5 +1,5 @@ /*! @file - @brief MRUリストと呼ばれるリストを管理する。フォルダ版。 + @brief MRUリストと呼ばれるリストを管理する。フォルダー版。 @author YAZAKI @date 2001/12/23 新規作成 @@ -59,7 +59,7 @@ class CMRUFolder { HMENU CreateMenu( HMENU hMenu, CMenuDrawer* pCMenuDrawer ) const; // 2010/5/21 Uchi BOOL DestroyMenu( HMENU hMenu ) const; - // フォルダ名の一覧を教えて + // フォルダー名の一覧を教えて std::vector GetPathList() const; // アクセス関数 diff --git a/sakura_core/recent/CRecentExceptMru.h b/sakura_core/recent/CRecentExceptMru.h index 1df935f8f9..3a4bd53cac 100644 --- a/sakura_core/recent/CRecentExceptMru.h +++ b/sakura_core/recent/CRecentExceptMru.h @@ -32,7 +32,7 @@ typedef StaticString CMetaPath; -//! フォルダの履歴を管理 (RECENT_FOR_FOLDER) +//! フォルダーの履歴を管理 (RECENT_FOR_FOLDER) class CRecentExceptMRU final : public CRecentImp{ public: //生成 diff --git a/sakura_core/recent/CRecentExcludeFolder.h b/sakura_core/recent/CRecentExcludeFolder.h index 6922e9d12b..9a9447085d 100644 --- a/sakura_core/recent/CRecentExcludeFolder.h +++ b/sakura_core/recent/CRecentExcludeFolder.h @@ -32,7 +32,7 @@ typedef StaticString CExcludeFolderString; -//! Excludeフォルダの履歴を管理 (RECENT_FOR_Exclude_FOLDER) +//! Excludeフォルダーの履歴を管理 (RECENT_FOR_Exclude_FOLDER) class CRecentExcludeFolder final : public CRecentImp{ public: //生成 diff --git a/sakura_core/recent/CRecentFolder.h b/sakura_core/recent/CRecentFolder.h index 6399adc250..1c13dcf836 100644 --- a/sakura_core/recent/CRecentFolder.h +++ b/sakura_core/recent/CRecentFolder.h @@ -32,7 +32,7 @@ typedef StaticString CPathString; -//! フォルダの履歴を管理 (RECENT_FOR_FOLDER) +//! フォルダーの履歴を管理 (RECENT_FOR_FOLDER) class CRecentFolder final : public CRecentImp{ public: //生成 diff --git a/sakura_core/recent/CRecentGrepFolder.h b/sakura_core/recent/CRecentGrepFolder.h index 25fafc8ed7..b6780297d6 100644 --- a/sakura_core/recent/CRecentGrepFolder.h +++ b/sakura_core/recent/CRecentGrepFolder.h @@ -33,7 +33,7 @@ typedef StaticString CGrepFolderString; -//! GREPフォルダの履歴を管理 (RECENT_FOR_GREP_FOLDER) +//! GREPフォルダーの履歴を管理 (RECENT_FOR_GREP_FOLDER) class CRecentGrepFolder final : public CRecentImp{ public: //生成 diff --git a/sakura_core/sakura.hh b/sakura_core/sakura.hh index 1bd1bd54f0..07e2da3875 100644 --- a/sakura_core/sakura.hh +++ b/sakura_core/sakura.hh @@ -62,10 +62,10 @@ #define HLP000377 377 //管理者としてコマンドプロンプトを開く #define HLP000378 378 //PowerShellを開く #define HLP000379 379 //管理者としてPowerShellを開く -#define HLP000380 380 //このファイルのフォルダ名をコピー +#define HLP000380 380 //このファイルのフォルダー名をコピー #define HLP000363 363 //プロファイルマネージャ #define HLP000029 29 //最近使ったファイル -#define HLP000023 23 //最近使ったフォルダ +#define HLP000023 23 //最近使ったフォルダー #define HLP000030 30 //編集の全終了 // 2007.02.13 ryoji #define HLP000028 28 //サクラエディタの全終了 #define HLP000031 31 //「編集(E)」メニューの一覧 @@ -215,7 +215,7 @@ #define HLP000197 197 //タイプ別設定 『支援』プロパティ #define HLP000203 203 //タイプ別設定 『正規表現キーワード』プロパティ //@@@ 2001.11.17 add MIK #define HLP000315 315 //タイプ別設定 『キーワードヘルプ』プロパティ // 2006.10.06 ryoji -#define HLP000077 77 //設定フォルダ(iniフォルダ) // 2007.09.09 maru +#define HLP000077 77 //設定フォルダー(iniフォルダー) // 2007.09.09 maru #define HLP000078 78 //ユーザー別設定 // 2007.09.23 maru #define HLP000079 79 //Visual Style // 2007.09.30 maru #define HLP000080 80 //Virtual Store // 2007.09.30 maru @@ -408,7 +408,7 @@ #define HLP_HISTORY 4001 //ヘルプファイル更新履歴 -#define HIDC_BUTTON_BACKUP_FOLDER_REF 10000 //バックアップフォルダ参照 +#define HIDC_BUTTON_BACKUP_FOLDER_REF 10000 //バックアップフォルダー参照 #define HIDC_CHECK_BACKUP 10010 //バックアップの作成 #define HIDC_CHECK_BACKUP_YEAR 10011 //バックアップファイル名(西暦年) #define HIDC_CHECK_BACKUP_MONTH 10012 //バックアップファイル名(月) @@ -417,10 +417,10 @@ #define HIDC_CHECK_BACKUP_MIN 10015 //バックアップファイル名(分) #define HIDC_CHECK_BACKUP_SEC 10016 //バックアップファイル名(秒) #define HIDC_CHECK_BACKUPDIALOG 10017 //作成前に確認 -#define HIDC_CHECK_BACKUPFOLDER 10018 //指定フォルダに作成 +#define HIDC_CHECK_BACKUPFOLDER 10018 //指定フォルダーに作成 #define HIDC_CHECK_BACKUP_DUSTBOX 10019 //バックアップをごみ箱に放り込む //@@@ 2002.01.03 -#define HIDC_CHECK_BACKUP_FOLDER_RM 10020 //指定フォルダに作成(リムーバブルメディアのみ) // 2010/5/27 Uchi -#define HIDC_EDIT_BACKUPFOLDER 10040 //保存フォルダ名 +#define HIDC_CHECK_BACKUP_FOLDER_RM 10020 //指定フォルダーに作成(リムーバブルメディアのみ) // 2010/5/27 Uchi +#define HIDC_EDIT_BACKUPFOLDER 10040 //保存フォルダー名 #define HIDC_EDIT_BACKUP_3 10041 //世代数 #define HIDC_EDIT_BACKUPFILE 10042 //保存ファイル名 #define HIDC_RADIO_BACKUP_TYPE1 10060 //バックアップの種類(拡張子) @@ -460,10 +460,10 @@ #define HIDC_CHECK_bOverWriteFixMode 10218 //文字幅に合わせてスペースを詰める #define HIDC_CHECK_bOverWriteBoxDelete 10219 //矩形入力で選択範囲を削除する #define HIDC_CHECK_CONVERTEOLPASTE 10217 //改行コードを変換して貼り付ける // 2009.02.28 salarm -#define HIDC_RADIO_CURDIR 10220 //カレントフォルダ -#define HIDC_RADIO_MRUDIR 10221 //最近使ったフォルダ -#define HIDC_RADIO_SELDIR 10222 //指定フォルダ -#define HIDC_EDIT_FILEOPENDIR 10223 //指定フォルダパス +#define HIDC_RADIO_CURDIR 10220 //カレントフォルダー +#define HIDC_RADIO_MRUDIR 10221 //最近使ったフォルダー +#define HIDC_RADIO_SELDIR 10222 //指定フォルダー +#define HIDC_EDIT_FILEOPENDIR 10223 //指定フォルダーパス #define HIDC_CHECK_ENABLEEXTEOL 10224 //改行コードNEL,PS,LSを有効にする #define HIDC_CHECK_BOXSELECTLOCK 10225 //矩形選択移動で選択をロックする #define HIDC_CHECK_EXCVLUSIVE_NO 10310 //ファイルの排他制御(排他制御しない) @@ -552,7 +552,7 @@ #define HIDC_BUTTON_KEYSETRENAME 10831 //セットの名称変更 // 2006.08.06 ryoji #define HIDC_LIST_KEYWORD 10840 //キーワード一覧 #define HIDC_BUTTON_CLEAR_MRU_FILE 10900 //履歴をクリア(ファイル) -#define HIDC_BUTTON_CLEAR_MRU_FOLDER 10901 //履歴をクリア(フォルダ) +#define HIDC_BUTTON_CLEAR_MRU_FOLDER 10901 //履歴をクリア(フォルダー) #define HIDC_CHECK_FREECARET 10910 //フリーカーソル #define HIDC_CHECK_INDENT 10911 //自動インデント #define HIDC_CHECK_INDENT_WSPACE 10912 //全角空白もインデント @@ -569,7 +569,7 @@ #define HIDC_HOTKEY_TRAYMENU 10940 //左クリックメニューのショートカットキー #define HIDC_EDIT_REPEATEDSCROLLLINENUM 10941 //スクロール行数 #define HIDC_EDIT_MAX_MRU_FILE 10942 //ファイル履歴の最大数 -#define HIDC_EDIT_MAX_MRU_FOLDER 10943 //フォルダ履歴の最大数 +#define HIDC_EDIT_MAX_MRU_FOLDER 10943 //フォルダー履歴の最大数 #define HIDC_RADIO_CARETTYPE0 10960 //カーソル形状(Windows風) #define HIDC_RADIO_CARETTYPE1 10961 //カーソル形状(MS-DOS風) #define HIDC_BUTTON_DELETE_TOOLBAR 11000 //ツールバーから機能削除 @@ -753,7 +753,7 @@ #define HIDC_LIST_PLUGIN_OPTIONS 11761 //プラグインオプションリスト // 2010/3/22 Uchi #define HIDC_EDIT_PLUGIN_OPTION 11762 //プラグインオプション編集 // 2010/3/22 Uchi #define HIDC_MACROCANCELTIMER 11763 //マクロ停止ダイアログ表示待ち時間 // 2011.08.04 syat -#define HIDC_PLUGIN_OpenFolder 11764 //プラグインフォルダを開く +#define HIDC_PLUGIN_OpenFolder 11764 //プラグインフォルダーを開く #define HIDC_EDIT_AUTOLOAD_DELAY 11765 //自動読込時遅延 #define HIDC_CHECK_KINSOKUHIDE 11766 //ぶら下げを隠す // 2012.11.30 Uchi #define HIDC_PLUGIN_README 11767 //ReadMe表示 // 2011/11/2 Uchi @@ -803,13 +803,13 @@ #define HIDC_REP_RADIO_LINEDELETE 11923 //置換対象:行削除 //GREP -#define HIDC_GREP_BUTTON_FOLDER 12000 //フォルダ -#define HIDC_GREP_BUTTON_CURRENTFOLDER 12001 //現フォルダ +#define HIDC_GREP_BUTTON_FOLDER 12000 //フォルダー +#define HIDC_GREP_BUTTON_CURRENTFOLDER 12001 //現フォルダー #define HIDOK_GREP 12002 //検索 #define HIDCANCEL_GREP 12003 //キャンセル #define HIDC_GREP_BUTTON_HELP 12004 //ヘルプ #define HIDC_GREP_CHK_WORD 12005 //単語単位 -#define HIDC_GREP_CHK_SUBFOLDER 12006 //サブフォルダも検索 +#define HIDC_GREP_CHK_SUBFOLDER 12006 //サブフォルダーも検索 #define HIDC_GREP_CHK_FROMTHISTEXT 12007 //編集中のテキストから検索 #define HIDC_GREP_CHK_LOHICASE 12008 //大文字小文字 #define HIDC_GREP_CHK_REGULAREXP 12009 //正規表現 @@ -817,21 +817,21 @@ #define HIDC_GREP_COMBO_CHARSET 12010 //文字コードセット #define HIDC_GREP_COMBO_TEXT 12011 //条件 #define HIDC_GREP_COMBO_FILE 12012 //ファイル -#define HIDC_GREP_COMBO_FOLDER 12013 //フォルダ +#define HIDC_GREP_COMBO_FOLDER 12013 //フォルダー #define HIDC_GREP_RADIO_OUTPUTLINE 12014 //結果出力:行単位 #define HIDC_GREP_RADIO_OUTPUTMARKED 12015 //結果出力:該当部分 #define HIDC_GREP_RADIO_OUTPUTSTYLE1 12016 //結果出力形式:ノーマル #define HIDC_GREP_RADIO_OUTPUTSTYLE2 12017 //結果出力形式:ファイル毎 #define HIDC_GREP_STATIC_JRE32VER 12018 //正規表現バージョン -#define HIDC_GREP_CHK_DEFAULTFOLDER 12019 //フォルダの初期値をカレントフォルダにする +#define HIDC_GREP_CHK_DEFAULTFOLDER 12019 //フォルダーの初期値をカレントフォルダーにする #define HIDC_RADIO_OUTPUTSTYLE3 12020 //結果出力形式:結果のみ #define HIDC_CHECK_FILE_ONLY 12021 //ファイル毎最初のみ検索 -#define HIDC_CHECK_BASE_PATH 12022 //ベースフォルダ表示 -#define HIDC_CHECK_SEP_FOLDER 12023 //フォルダ毎に表示 +#define HIDC_CHECK_BASE_PATH 12022 //ベースフォルダー表示 +#define HIDC_CHECK_SEP_FOLDER 12023 //フォルダー毎に表示 #define HIDC_GREP_BUTTON_FOLDER_UP 12024 //Up #define HIDC_GREP_CHECK_CP 12025 //コードページ #define HIDC_GREP_COMBO_EXCLUDE_FILE 12026 //除外ファイル -#define HIDC_GREP_COMBO_EXCLUDE_FOLDER 12027 //除外フォルダ +#define HIDC_GREP_COMBO_EXCLUDE_FOLDER 12027 //除外フォルダー //外部コマンド #define HIDC_EXEC_BUTTON_REFERENCE 12100 //参照 @@ -975,7 +975,7 @@ #define HIDC_OPENDLG_BUTTON_HELP 13102 //ヘルプ //@@@ 2002.01.10 #define HIDC_OPENDLG_COMBO_CODE 13103 //文字コードセット #define HIDC_OPENDLG_COMBO_MRU 13104 //最近のファイル -#define HIDC_OPENDLG_COMBO_OPENFOLDER 13105 //最近のフォルダ +#define HIDC_OPENDLG_COMBO_OPENFOLDER 13105 //最近のフォルダー #define HIDC_OPENDLG_COMBO_EOL 13106 //改行コード #define HIDC_OPENDLG_CHECK_BOM 13107 //BOM // 2006.08.06 ryoji #define HIDC_OPENDLG_CHECK_CP 13108 //CP @@ -1140,14 +1140,14 @@ #define HIDC_BUTTON_TREE_INITIALIZE 14413 //メニューを初期状態に戻す #define HIDC_CHECK_KEY_PARENTHESES 14414 //アクセスキーを必ず( )付で表示(&P) -#define HIDC_GREP_REP_BUTTON_FOLDER 14500 //フォルダ -#define HIDC_GREP_REP_BUTTON_CURRENTFOLDER 14501 //現フォルダ +#define HIDC_GREP_REP_BUTTON_FOLDER 14500 //フォルダー +#define HIDC_GREP_REP_BUTTON_CURRENTFOLDER 14501 //現フォルダー #define HIDOK_GREP_REP 14502 //置換開始 #define HIDCANCEL_GREP_REP 14503 //キャンセル #define HIDC_GREP_REP_BUTTON_HELP 14504 //ヘルプ #define HIDC_GREP_REP_CHK_PASTE 14505 //クリップボードから貼り付け #define HIDC_GREP_REP_CHK_WORD 14506 //単語単位 -#define HIDC_GREP_REP_CHK_SUBFOLDER 14507 //サブフォルダも検索 +#define HIDC_GREP_REP_CHK_SUBFOLDER 14507 //サブフォルダーも検索 #define HIDC_GREP_REP_CHK_FROMTHISTEXT 14804 //編集中のテキストから検索 #define HIDC_GREP_REP_CHK_LOHICASE 14509 //大文字小文字 #define HIDC_GREP_REP_CHK_REGULAREXP 14510 //正規表現 @@ -1156,7 +1156,7 @@ #define HIDC_GREP_REP_COMBO_TEXT 14513 //置換前 #define HIDC_GREP_REP_COMBO_TEXT2 14514 //置換後 #define HIDC_GREP_REP_COMBO_FILE 14515 //ファイル -#define HIDC_GREP_REP_COMBO_FOLDER 14516 //フォルダ +#define HIDC_GREP_REP_COMBO_FOLDER 14516 //フォルダー #define HIDC_GREP_REP_BUTTON_FOLDER_UP 14517 //上 #define HIDC_GREP_REP_RADIO_OUTPUTLINE 14518 //結果出力:行単位 #define HIDC_GREP_REP_RADIO_OUTPUTMARKED 14519 //結果出力:該当部分 @@ -1164,10 +1164,10 @@ #define HIDC_GREP_REP_RADIO_OUTPUTSTYLE2 14521 //結果出力形式:ファイル毎 #define HIDC_GREP_REP_RADIO_OUTPUTSTYLE3 14522 //結果出力形式:結果のみ #define HIDC_GREP_REP_STATIC_JRE32VER 14523 //正規表現バージョン -#define HIDC_GREP_REP_CHK_DEFAULTFOLDER 14524 //フォルダの初期値をカレントフォルダにする +#define HIDC_GREP_REP_CHK_DEFAULTFOLDER 14524 //フォルダーの初期値をカレントフォルダーにする #define HIDC_GREP_REP_CHECK_FILE_ONLY 14525 //ファイル毎最初のみ検索 -#define HIDC_GREP_REP_CHECK_BASE_PATH 14526 //ベースフォルダ表示 -#define HIDC_GREP_REP_CHECK_SEP_FOLDER 14527 //フォルダ毎に表示 +#define HIDC_GREP_REP_CHECK_BASE_PATH 14526 //ベースフォルダー表示 +#define HIDC_GREP_REP_CHECK_SEP_FOLDER 14527 //フォルダー毎に表示 #define HIDC_GREP_REP_CHECK_CP 14528 //CP //プロファイル一覧 diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index 51c7a69785..bb66fb768b 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -144,15 +144,15 @@ BEGIN COMBOBOX IDC_COMBO_FOLDER,60,50,254,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "&...",IDC_BUTTON_FOLDER,316,50,16,10 CONTROL "編集中のテキストから検索(&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,64,120,8 - CONTROL "サブフォルダも検索(&S)",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,74,120,8 - CONTROL "カレントフォルダが初期値(&D)",IDC_CHK_DEFAULTFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,84,120,8 + CONTROL "サブフォルダーも検索(&S)",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,74,120,8 + CONTROL "カレントフォルダーが初期値(&D)",IDC_CHK_DEFAULTFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,84,120,8 PUSHBUTTON "上階層へ(&U)",IDC_BUTTON_FOLDER_UP,230,64,50,14 - PUSHBUTTON "現フォルダ(&G)",IDC_BUTTON_CURRENTFOLDER,282,64,50,14,BS_MULTILINE + PUSHBUTTON "現フォルダー(&G)",IDC_BUTTON_CURRENTFOLDER,282,64,50,14,BS_MULTILINE RTEXT "対象ファイル(&I):",IDC_STATIC,4,96,52,8,NOT WS_GROUP COMBOBOX IDC_COMBO_FILE,60,96,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP RTEXT "除外ファイル(&J):",IDC_STATIC,4,110,52,8,NOT WS_GROUP COMBOBOX IDC_COMBO_EXCLUDE_FILE,60,110,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - RTEXT "除外フォルダ(&K):",IDC_STATIC,4,124,53,8 + RTEXT "除外フォルダー(&K):",IDC_STATIC,4,124,53,8 COMBOBOX IDC_COMBO_EXCLUDE_FOLDER,60,124,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP GROUPBOX "結果出力",IDC_STATIC,60,140,68,44,WS_GROUP CONTROL "該当行(&1)",IDC_RADIO_OUTPUTLINE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,68,152,56,8 @@ -164,8 +164,8 @@ BEGIN CONTROL "結果のみ(&6)",IDC_RADIO_OUTPUTSTYLE3,"Button",BS_AUTORADIOBUTTON,140,172,56,8 GROUPBOX "その他",IDC_STATIC,204,140,180,44,WS_GROUP CONTROL "ファイル毎最初のみ検索(&7)",IDC_CHECK_FILE_ONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,152,96,8 - CONTROL "フォルダ毎に表示(&8)",IDC_CHECK_SEP_FOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,162,96,8 - CONTROL "ベースフォルダ表示(&9)",IDC_CHECK_BASE_PATH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,172,96,8 + CONTROL "フォルダー毎に表示(&8)",IDC_CHECK_SEP_FOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,162,96,8 + CONTROL "ベースフォルダー表示(&9)",IDC_CHECK_BASE_PATH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,172,96,8 LTEXT "文字コードセット(&A):",IDC_STATIC,312,148,66,8 COMBOBOX IDC_COMBO_CHARSET,312,158,64,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,312,172,30,8 @@ -194,15 +194,15 @@ BEGIN COMBOBOX IDC_COMBO_FOLDER,60,64,254,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "&...",IDC_BUTTON_FOLDER,316,64,16,10 CONTROL "編集中のテキストから検索(&M)",IDC_CHK_FROMTHISTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,78,120,8 - CONTROL "サブフォルダも検索(&S)",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,88,120,8 - CONTROL "カレントフォルダが初期値(&D)",IDC_CHK_DEFAULTFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,98,120,8 + CONTROL "サブフォルダーも検索(&S)",IDC_CHK_SUBFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,88,120,8 + CONTROL "カレントフォルダーが初期値(&D)",IDC_CHK_DEFAULTFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,98,120,8 PUSHBUTTON "上階層へ(&U)",IDC_BUTTON_FOLDER_UP,230,78,50,14 - PUSHBUTTON "現フォルダ(&G)",IDC_BUTTON_CURRENTFOLDER,282,78,50,14,BS_MULTILINE + PUSHBUTTON "現フォルダー(&G)",IDC_BUTTON_CURRENTFOLDER,282,78,50,14,BS_MULTILINE RTEXT "対象ファイル(&I):",IDC_STATIC,4,110,52,8,NOT WS_GROUP COMBOBOX IDC_COMBO_FILE,60,110,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP RTEXT "除外ファイル(&J):",IDC_STATIC,4,124,52,8,NOT WS_GROUP COMBOBOX IDC_COMBO_EXCLUDE_FILE,60,124,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - RTEXT "除外フォルダ(&K):",IDC_STATIC,4,138,52,8 + RTEXT "除外フォルダー(&K):",IDC_STATIC,4,138,52,8 COMBOBOX IDC_COMBO_EXCLUDE_FOLDER,60,138,272,120,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP GROUPBOX "結果出力",IDC_STATIC,60,154,68,44,WS_GROUP CONTROL "該当行(&1)",IDC_RADIO_OUTPUTLINE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,68,166,56,8 @@ -213,8 +213,8 @@ BEGIN CONTROL "結果のみ(&6)",IDC_RADIO_OUTPUTSTYLE3,"Button",BS_AUTORADIOBUTTON,140,186,56,8 GROUPBOX "その他",IDC_STATIC,204,154,180,44,WS_GROUP CONTROL "ファイル毎最初のみ検索(&7)",IDC_CHECK_FILE_ONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,166,96,8 - CONTROL "フォルダ毎に表示(&8)",IDC_CHECK_SEP_FOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,176,96,8 - CONTROL "ベースフォルダ表示(&9)",IDC_CHECK_BASE_PATH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,186,96,8 + CONTROL "フォルダー毎に表示(&8)",IDC_CHECK_SEP_FOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,176,96,8 + CONTROL "ベースフォルダー表示(&9)",IDC_CHECK_BASE_PATH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,186,96,8 LTEXT "文字コードセット(&A):",IDC_STATIC,312,162,62,8 COMBOBOX IDC_COMBO_CHARSET,312,172,64,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "C&P",IDC_CHECK_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,312,186,30,8 @@ -231,7 +231,7 @@ BEGIN LTEXT "検索しています・・・",IDC_STATIC,5,5,61,10,NOT WS_GROUP LTEXT "ファイル",IDC_STATIC,5,21,26,10,NOT WS_GROUP LTEXT "IDC_STATIC_CURPATH",IDC_STATIC_CURFILE,36,20,252,10,NOT WS_GROUP - LTEXT "フォルダ",IDC_STATIC,5,34,27,10,NOT WS_GROUP + LTEXT "フォルダー",IDC_STATIC,5,34,27,10,NOT WS_GROUP EDITTEXT IDC_STATIC_CURPATH,36,35,252,20,ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP PUSHBUTTON "キャンセル(&X)",IDCANCEL,238,60,50,14 LTEXT "0",IDC_STATIC_HITCOUNT,76,5,44,10,NOT WS_GROUP,WS_EX_RIGHT @@ -512,7 +512,7 @@ BEGIN COMBOBOX IDC_COMBO_EOL,226,13,50,126,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP LTEXT "最近のファイル(&F):",IDC_STATIC,5,32,59,10 COMBOBOX IDC_COMBO_MRU,71,30,185,236,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP - LTEXT "最近のフォルダ(&D):",IDC_STATIC,5,49,61,10 + LTEXT "最近のフォルダー(&D):",IDC_STATIC,5,49,61,10 COMBOBOX IDC_COMBO_OPENFOLDER,71,46,185,236,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP END @@ -583,11 +583,11 @@ EXSTYLE WS_EX_CONTEXTHELP CAPTION "タグファイルの作成" FONT 9, "MS Pゴシック", 0, 0, 0x1 BEGIN - LTEXT "タグ作成フォルダ",IDC_STATIC,7,7,65,10 + LTEXT "タグ作成フォルダー",IDC_STATIC,7,7,65,10 EDITTEXT IDC_EDIT_TAG_MAKE_FOLDER,7,18,201,12,ES_AUTOHSCROLL PUSHBUTTON "...",IDC_BUTTON_TAG_MAKE_REF,211,17,15,12 PUSHBUTTON "上(&B)",IDC_BUTTON_FOLDER_UP,186,31,25,14 - CONTROL "サブフォルダも対象にする",IDC_CHECK_TAG_MAKE_RECURSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,34,107,10 + CONTROL "サブフォルダーも対象にする",IDC_CHECK_TAG_MAKE_RECURSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,34,107,10 LTEXT "コマンドラインオプション",IDC_STATIC,7,49,86,10 EDITTEXT IDC_EDIT_TAG_MAKE_CMDLINE,96,47,130,12,ES_AUTOHSCROLL DEFPUSHBUTTON "作成(&O)",IDOK,68,64,50,14 @@ -1052,7 +1052,7 @@ BEGIN EDITTEXT IDC_EDIT_MAX_MRU_FILE,168,184,28,12,ES_AUTOHSCROLL | WS_GROUP CONTROL "Spin1",IDC_SPIN_MAX_MRU_FILE,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,196,184,9,12 PUSHBUTTON "履歴をクリア(&C)...",IDC_BUTTON_CLEAR_MRU_FILE,208,184,61,14 - LTEXT "フォルダの履歴MA&X",IDC_STATIC,163,202,74,10 + LTEXT "フォルダーの履歴MA&X",IDC_STATIC,163,202,74,10 EDITTEXT IDC_EDIT_MAX_MRU_FOLDER,168,214,28,12,ES_AUTOHSCROLL | WS_GROUP CONTROL "Spin1",IDC_SPIN_MAX_MRU_FOLDER,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,196,214,9,12 PUSHBUTTON "履歴をクリア(&L)...",IDC_BUTTON_CLEAR_MRU_FOLDER,208,214,61,14 @@ -1203,9 +1203,9 @@ BEGIN GROUPBOX "上書きモード",IDC_STATIC,3,143,137,58,WS_GROUP CONTROL "クリックで&URLを選択する",IDC_CHECK_bSelectClickedURL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,149,18,120,10 GROUPBOX "クリッカブルURL",IDC_STATIC,144,3,142,35,WS_GROUP - CONTROL "カレントフォルダ(&U)",IDC_RADIO_CURDIR,"Button",BS_AUTORADIOBUTTON,149,54,90,10 - CONTROL "最近使ったフォルダ(&M)",IDC_RADIO_MRUDIR,"Button",BS_AUTORADIOBUTTON,149,69,90,10 - CONTROL "指定フォルダ(&F)",IDC_RADIO_SELDIR,"Button",BS_AUTORADIOBUTTON,149,84,90,10 + CONTROL "カレントフォルダー(&U)",IDC_RADIO_CURDIR,"Button",BS_AUTORADIOBUTTON,149,54,90,10 + CONTROL "最近使ったフォルダー(&M)",IDC_RADIO_MRUDIR,"Button",BS_AUTORADIOBUTTON,149,69,90,10 + CONTROL "指定フォルダー(&F)",IDC_RADIO_SELDIR,"Button",BS_AUTORADIOBUTTON,149,84,90,10 EDITTEXT IDC_EDIT_FILEOPENDIR,149,100,111,12,ES_AUTOHSCROLL PUSHBUTTON "...",IDC_BUTTON_FILEOPENDIR,261,100,9,12 GROUPBOX "ファイルダイアログの初期位置",IDC_STATIC,144,41,142,79,WS_GROUP @@ -1321,10 +1321,10 @@ BEGIN LTEXT "",IDC_STATIC,12,60,271,83,NOT WS_VISIBLE CONTROL "保存時の日付・時刻を使用",IDC_RADIO_BACKUP_DATETYPE1A,"Button",BS_AUTORADIOBUTTON | WS_GROUP,12,104,111,10 CONTROL "前回のファイル更新時の日付・時刻を使用",IDC_RADIO_BACKUP_DATETYPE2A,"Button",BS_AUTORADIOBUTTON,12,118,149,10 - LTEXT "$x : x個上のフォルダ名(0-9)\r* : 拡張子\r\r%Y/%m/%d : 年月日 %y西暦(2桁) \r%H:%M:%S: 時分秒 \r%% : '%'記号\r",IDC_LABEL_BACKUP_HELP2,165,75,115,50,SS_SUNKEN - CONTROL "指定フォルダに作成する(&P)",IDC_CHECK_BACKUPFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,148,107,10 + LTEXT "$x : x個上のフォルダー名(0-9)\r* : 拡張子\r\r%Y/%m/%d : 年月日 %y西暦(2桁) \r%H:%M:%S: 時分秒 \r%% : '%'記号\r",IDC_LABEL_BACKUP_HELP2,165,75,115,50,SS_SUNKEN + CONTROL "指定フォルダーに作成する(&P)",IDC_CHECK_BACKUPFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,148,107,10 CONTROL "リムーバブルメディアのみ(&L)",IDC_CHECK_BACKUP_FOLDER_RM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,120,148,133,10 - LTEXT "フォルダ名(&F)",IDC_LABEL_BACKUP_4,24,162,87,10 + LTEXT "フォルダー名(&F)",IDC_LABEL_BACKUP_4,24,162,87,10 EDITTEXT IDC_EDIT_BACKUPFOLDER,73,160,195,12,ES_AUTOHSCROLL PUSHBUTTON "&...",IDC_BUTTON_BACKUP_FOLDER_REF,271,160,9,12 CONTROL "バックアップファイルをごみ箱に放り込む(&X)",IDC_CHECK_BACKUP_DUSTBOX, @@ -1522,7 +1522,7 @@ FONT 9, "MS Pゴシック", 0, 0, 0x1 BEGIN CONTROL "プラグインを有効にする(&E)",IDC_CHECK_PluginEnable,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,9,100,10 PUSHBUTTON "ZIPプラグインを導入(&Z)",IDC_PLUGIN_INST_ZIP,192,6,96,14 - PUSHBUTTON "フォルダを開く(&F)",IDC_PLUGIN_OpenFolder,120,20,70,14 + PUSHBUTTON "フォルダーを開く(&F)",IDC_PLUGIN_OpenFolder,120,20,70,14 PUSHBUTTON "新規プラグインを追加(&I)",IDC_PLUGIN_SearchNew,192,20,96,14 LTEXT "プラグイン一覧",IDC_STATIC,4,28,50,10 CONTROL "List1",IDC_PLUGINLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_AUTOARRANGE | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,3,41,285,108 @@ -1648,14 +1648,14 @@ CAPTION "ファイルツリー設定" FONT 9, "MS Pゴシック", 0, 0, 0x1 BEGIN LTEXT "設定:共通設定",IDC_STATIC_SETTFING_FROM,4,4,282,10 - CONTROL "各フォルダの設定を読み込む(&I)",IDC_CHECK_LOADINI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,16,120,9 + CONTROL "各フォルダーの設定を読み込む(&I)",IDC_CHECK_LOADINI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,16,120,9 LTEXT "デフォルト設定ファイル名(&J)",IDC_STATIC,4,28,110,10 EDITTEXT IDC_EDIT_DEFINI,13,39,124,13,ES_AUTOHSCROLL PUSHBUTTON "...(&1)",IDC_BUTTON_REF1,137,39,17,13 PUSHBUTTON "読み込み(&V)",IDC_BUTTON_LOAD,108,53,47,14 CONTROL "Grep(&G)",IDC_RADIO_GREP,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,6,72,56,10 CONTROL "ファイル(&F)",IDC_RADIO_FILE,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,6,85,56,10 - CONTROL "フォルダ(&2)",IDC_RADIO_FOLDER,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,6,98,56,10 + CONTROL "フォルダー(&2)",IDC_RADIO_FOLDER,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,6,98,56,10 GROUPBOX "種類",IDC_STATIC,1,61,89,50,WS_GROUP LTEXT "パス(&T)",IDC_STATIC_PATH,3,119,22,10 EDITTEXT IDC_EDIT_PATH,38,117,122,13,ES_AUTOHSCROLL @@ -2239,7 +2239,7 @@ BEGIN F_TOPMOST_SET "常に手前に表示" F_FILE_REOPEN_SUBMENU "開き直す" F_FILE_RCNTFILE_SUBMENU "最近使ったファイル" - F_FILE_RCNTFLDR_SUBMENU "最近使ったフォルダ" + F_FILE_RCNTFLDR_SUBMENU "最近使ったフォルダー" F_EDIT_INS_SUBMENU "挿入" F_EDIT_COS_SUBMENU "整形" F_EDIT_MOV_SUBMENU "移動" @@ -2513,7 +2513,7 @@ END STRINGTABLE BEGIN F_CREATEKEYBINDLIST "キー割り当て一覧をコピー" - F_COPYDIRPATH "このファイルのフォルダ名をコピー" + F_COPYDIRPATH "このファイルのフォルダー名をコピー" END STRINGTABLE @@ -2522,7 +2522,7 @@ BEGIN F_INS_TIME "時刻挿入" F_CTRL_CODE_DIALOG "コントロールコード入力..." F_INS_FILE_USED_RECENTLY "最近使ったファイル挿入" - F_INS_FOLDER_USED_RECENTLY "最近使ったフォルダ挿入" + F_INS_FOLDER_USED_RECENTLY "最近使ったフォルダー挿入" END STRINGTABLE @@ -2886,7 +2886,7 @@ STRINGTABLE BEGIN F_WINDOW_LIST "ウィンドウリスト" F_FILE_USED_RECENTLY "最近使ったファイル" - F_FOLDER_USED_RECENTLY "最近使ったフォルダ" + F_FOLDER_USED_RECENTLY "最近使ったフォルダー" F_CUSTMENU_LIST "カスタムメニューリスト" F_USERMACRO_LIST "登録済みマクロリスト" F_PLUGIN_LIST "プラグインコマンドリスト" @@ -2921,8 +2921,8 @@ BEGIN STR_SHELL_INFO "情報" STR_SHELL_MENU_OPEN "開く(&O)..." STR_SHELL_MENU_IMPEXP "インポート/エクスポートの起点リセット(&R)" - STR_SHELL_IMPEXPDIR "各種設定のインポート/エクスポート用ファイル選択画面の\n初期表示フォルダを設定フォルダに戻します。" - STR_SHELL_INIFOLDER "設定フォルダ(&/) >>" + STR_SHELL_IMPEXPDIR "各種設定のインポート/エクスポート用ファイル選択画面の\n初期表示フォルダーを設定フォルダーに戻します。" + STR_SHELL_INIFOLDER "設定フォルダー(&/) >>" STR_ERR_GLOBAL01 "自動選択" STR_PREVIEW_ONLY "(印刷プレビューでのみ使用できます)" STR_NOT_SAVED "(保存されていません)" @@ -3000,11 +3000,11 @@ BEGIN STR_ERR_DLGCTL36 "ユニット区切" STR_ERR_DLGCTL37 "削除" STR_DLGFAV_FILE "ファイル" - STR_DLGFAV_FOLDER "フォルダ" + STR_DLGFAV_FOLDER "フォルダー" STR_DLGFAV_SEARCH "検索" STR_DLGFAV_REPLACE "置換" STR_DLGFAV_GREP_FILE "GREPファイル" - STR_DLGFAV_GREP_FOLDER "GREPフォルダ" + STR_DLGFAV_GREP_FOLDER "GREPフォルダー" STR_DLGFAV_EXT_COMMAND "コマンド" STR_DLGFAV_HIDDEN "(非表示)" STR_DLGFAV_FAVORITE "お気に入り" @@ -3017,7 +3017,7 @@ BEGIN STR_DLGFAV_CONF_DEL_PATH "最近使った%sの存在しないパスを削除します。\nよろしいですか?" STR_DLGFAV_DELIMITER "、" STR_DLGFAV_FAV_REFRESH "履歴(%s)が更新されたため編集中情報を破棄し再表示しました。" - STR_DLGFAV_FF_EXCLUDE "ファイル・フォルダ除外" + STR_DLGFAV_FF_EXCLUDE "ファイル・フォルダー除外" STR_DLGFAV_CURRENT_DIR "カレントディレクトリ" STR_DLGFAV_ADD "追加" STR_DLGFAV_ADD_PROMPT "追加する文字列を入力してください。" @@ -3086,7 +3086,7 @@ BEGIN STR_LOADAGENT_BIG_ERROR "'%s'\nというファイルを開けません。\nファイルサイズが大きすぎます。\n\n指定ファイルのサイズ: %s\nファイルサイズの上限: %s" STR_ERR_FILEPATH_TOO_LONG "%ls\nというファイルを開けません。\nファイルのパスが長すぎます。" STR_GREP_EXCLUDE_FILE "除外ファイル " - STR_GREP_EXCLUDE_FOLDER "除外フォルダ " + STR_GREP_EXCLUDE_FOLDER "除外フォルダー " STR_FILEDIALOG_READONLY "読み取り専用ファイルとして開く(&R)" STR_FILEDIALOG_CODE "文字コードセット(&C):" STR_FILEDIALOG_EOL "改行コード(&E):" @@ -3127,8 +3127,8 @@ BEGIN STR_DLGFNCLST_LIST_COL "桁" STR_DLGFNCLST_LIST_COL_M "桁 *" STR_DLGFNCLST_LIST_M "*" - STR_DLGGREP1 "検索するフォルダを選んでください" - STR_DLGGREP2 "ファイル指定のフォルダ部分にはワイルドカードは使えません。" + STR_DLGGREP1 "検索するフォルダーを選んでください" + STR_DLGGREP2 "ファイル指定のフォルダー部分にはワイルドカードは使えません。" STR_DLGGREP3 "ファイル指定にはフルパスは使えません" END @@ -3166,15 +3166,15 @@ BEGIN STR_DLLPLG_TITLE "DLLプラグイン" STR_DLLPLG_INIT_ERR1 "DLLの読み込みに失敗しました\n%s\n%ls" STR_DLLPLG_INIT_ERR2 "DLLの読み込みに失敗しました" - STR_PLGMGR_FOLDER "プラグインフォルダを作成出来ません" + STR_PLGMGR_FOLDER "プラグインフォルダーを作成出来ません" STR_PLGMGR_CANCEL "キャンセルされました" END STRINGTABLE BEGIN - STR_DLGGREP4 "検索対象フォルダを指定してください。" - STR_DLGGREP5 "検索対象フォルダが正しくありません。" - STR_DLGGREP6 "検索対象フォルダが長すぎます。" + STR_DLGGREP4 "検索対象フォルダーを指定してください。" + STR_DLGGREP5 "検索対象フォルダーが正しくありません。" + STR_DLGGREP6 "検索対象フォルダーが長すぎます。" STR_DLGGREP_THISDOC "(現在のドキュメント)" STR_DLGGREP_THISDOC_ERROR "対象ファイルに:HWND:は入力できません" STR_DLGJUMP1 "正しく行番号を入力してください。" @@ -3254,7 +3254,7 @@ BEGIN STR_DLGFLPROP_ATTRIBUTES "ファイル属性 " STR_DLGFLPROP_AT_ARCHIVE "/アーカイブ" STR_DLGFLPROP_AT_COMPRESS "/圧縮" - STR_DLGFLPROP_AT_FOLDER "/フォルダ" + STR_DLGFLPROP_AT_FOLDER "/フォルダー" STR_DLGFLPROP_AT_HIDDEN "/隠し" STR_DLGFLPROP_AT_NORMAL "/ノーマル" STR_DLGFLPROP_AT_OFFLINE "/オフライン" @@ -3286,7 +3286,7 @@ BEGIN STR_DLGTAGJMP_LIST5 "ファイル名" STR_DLGTAGJMP_LIST6 "備考" STR_DLGTAGJMP3 "キーワード 検索中..." - STR_DLGTAGMAK_SELECTDIR "タグ作成フォルダの選択" + STR_DLGTAGMAK_SELECTDIR "タグ作成フォルダーの選択" END STRINGTABLE @@ -3422,16 +3422,16 @@ BEGIN STR_GREP_SEARCH_CONDITION "\r\n□検索条件 " STR_GREP_SEARCH_FILE "「ファイル検索」\r\n" STR_GREP_SEARCH_TARGET "検索対象 " - STR_GREP_SEARCH_FOLDER "フォルダ " - STR_GREP_SUBFOLDER_YES " (サブフォルダも検索)\r\n" - STR_GREP_SUBFOLDER_NO " (サブフォルダを検索しない)\r\n" + STR_GREP_SEARCH_FOLDER "フォルダー " + STR_GREP_SUBFOLDER_YES " (サブフォルダーも検索)\r\n" + STR_GREP_SUBFOLDER_NO " (サブフォルダーを検索しない)\r\n" STR_GREP_COMPLETE_WORD " (単語単位で探す)\r\n" END STRINGTABLE BEGIN STR_FILEDIALOG_MRU "最近のファイル(&F):" - STR_FILEDIALOG_OPENFOLDER "最近のフォルダ(&D):" + STR_FILEDIALOG_OPENFOLDER "最近のフォルダー(&D):" STR_IMPEXP_REGEX4 "キーワードが長過ぎるため切り捨てました。" STR_STATUS_FONTZOOM_0 "%4.0f %%" STR_STATUS_FONTZOOM_1 "%4.1f %%" @@ -3452,7 +3452,7 @@ BEGIN STR_GREP_TIMER "処理時間: %dミリ秒\r\n" STR_GREP_SHOW_FIRST_MATCH " (ファイル毎最初のみ検索)\r\n" STR_GREP_ERR_ENUMKEYS0 "(不明)" - STR_GREP_ERR_ENUMKEYS1 "ファイル指定のフォルダ部分にはワイルドカードは使えません" + STR_GREP_ERR_ENUMKEYS1 "ファイル指定のフォルダー部分にはワイルドカードは使えません" STR_GREP_ERR_ENUMKEYS2 "ファイル指定にはフルパスは使えません" STR_GREP_ERR_FILEOPEN "file open error [%s]\r\n" END @@ -3468,7 +3468,7 @@ BEGIN STR_FILETREE_FROM_COMMON "設定: 共通設定" STR_FILETREE_FROM_TYPE "設定: タイプ別設定" STR_FILETREE_FROM_FILE "設定: %s" - STR_FILETREE_CURDIR "<カレントフォルダ>" + STR_FILETREE_CURDIR "<カレントフォルダー>" STR_FILETREE_MAXCOUNT "最大数(%d)を超えたため切り捨てました" STR_FILETREE_MENU_ROOT "INIルート(&I)" STR_FILETREE_MENU_MYDOC "マイ ドキュメント(&Y)" @@ -3631,7 +3631,7 @@ BEGIN STR_ERR_DLGMACRO10 "置換先パターンが指定されていません." STR_ERR_DLGMACRO11 "GREPパターンが指定されていません." STR_ERR_DLGMACRO12 "ファイル種別が指定されていません." - STR_ERR_DLGMACRO13 "検索先フォルダが指定されていません." + STR_ERR_DLGMACRO13 "検索先フォルダーが指定されていません." STR_ERR_DLGMACRO14 "読み込みファイル名が指定されていません." STR_ERR_DLGMACRO15 "保存ファイル名が指定されていません." END @@ -3669,7 +3669,7 @@ BEGIN STR_ERR_DLGPROCFACT3 "'%s'\nプロセスの起動に失敗しました。\n%s" STR_ERR_DLGPROCFACT4 "'%ls'\nコントロールプロセスの起動に失敗しました。" STR_ERR_DLGPROCFACT5 "エディタまたはシステムがビジー状態です。\nしばらく待って開きなおしてください。" - STR_PROPCOMBK_SEL_FOLDER "バックアップを作成するフォルダを選んでください" + STR_PROPCOMBK_SEL_FOLDER "バックアップを作成するフォルダーを選んでください" STR_PROPCOMBK_DUSTBOX "(ゴミ箱)" STR_PROPCOMCUSTMENU_SEP " ─────────────" STR_PROPCOMCUSTMENU_AC1 "メニューアイテムのアクセスキー設定" @@ -3680,7 +3680,7 @@ STRINGTABLE BEGIN STR_DLGABOUT_APPNAME "サクラエディタ" STR_DLGEXEC_SELECT_CURDIR "カレントディレクトリを選んでください" - STR_PROPEDIT_SELECT_DIR "ファイルダイアログの指定フォルダの選択" + STR_PROPEDIT_SELECT_DIR "ファイルダイアログの指定フォルダーの選択" STR_DLGTYPEASC_IMPORT "--そのままインポート--" STR_PROPCOMMAINMENU_EDIT "編集してください" STR_PROPCOMMAINMENU_SEP "――――――――――" @@ -3702,7 +3702,7 @@ BEGIN STR_PROPCOMFNM_LIST2 "置換後" STR_PROPCOMFNM_ERR_REG "これ以上登録できません。" STR_PROPCOMGREP_DLL "正規表現は使用できません" - STR_PROPCOMHELP_MIGEMODIR "検索するフォルダを選んでください" + STR_PROPCOMHELP_MIGEMODIR "検索するフォルダーを選んでください" STR_PROPCOMKEYBIND_UNASSIGN "未割付" STR_PROPCOMKEYWORD_ERR_LEN "キーワードの長さは%dバイトまでです。" STR_PROPCOMKEYWORD_SETMAX "セットは%d個までしか登録できません。\n" @@ -3722,8 +3722,8 @@ BEGIN STR_ERR_DLGPROPCOMMON24 "CPropCommon::DoPropertySheet()内でエラーが出ました。\npsh.nStartPage=[%d]\n::PropertySheet()失敗\n\n%s\n" STR_PROPCOMGEN_FILE1 "最近使ったファイルの履歴を削除します。\nよろしいですか?\n" STR_PROPCOMGEN_FILE2 "最近使ったファイルの履歴を削除しました。\n" - STR_PROPCOMGEN_DIR1 "最近使ったフォルダの履歴を削除します。\nよろしいですか?\n" - STR_PROPCOMGEN_DIR2 "最近使ったフォルダの履歴を削除しました。\n" + STR_PROPCOMGEN_DIR1 "最近使ったフォルダーの履歴を削除します。\nよろしいですか?\n" + STR_PROPCOMGEN_DIR2 "最近使ったフォルダーの履歴を削除しました。\n" STR_PROPCOMTOOL_ERR01 "Toolbar Dialog: 要素の挿入に失敗しました。(%d:%d)" STR_PROPCOMTOOL_ERR02 "Toolbar Dialog: INS: 値の設定に失敗しました。:%d" STR_PROPCOMTOOL_ERR03 "Toolbar Dialog: 要素の追加に失敗しました。(%d:%d)" @@ -3761,7 +3761,7 @@ STRINGTABLE BEGIN STR_PROPCOMMAINMENU_ERR5 "重複したアクセスキーがあります。\n" STR_PROPCOMMAINMENU_ERR6 "未設定のアクセスキーがあります。\n" - STR_PROPCOMPLG_ERR1 "プラグインはこのウィンドウで読み込まれていないか、フォルダが異なるため\n設定を変更できません" + STR_PROPCOMPLG_ERR1 "プラグインはこのウィンドウで読み込まれていないか、フォルダーが異なるため\n設定を変更できません" STR_PROPCOMPLG_ERR2 "ReadMeファイルが開けません" STR_PROPCOMPLG_ERR3 "ReadMeファイルが見つかりません " STR_PROPCOMPLG_STATE1 "追加" @@ -3799,7 +3799,7 @@ END STRINGTABLE BEGIN - STR_PROPCOMPLG_LIST5 "フォルダ" + STR_PROPCOMPLG_LIST5 "フォルダー" STR_PROPCOMPLG_DELETE "%ls を削除しますか" STR_DLGTYPELIST_ERR1 "関連付けに失敗しました\n" STR_DLGTYPELIST_ERR2 "関連付け解除に失敗しました\n" @@ -4056,8 +4056,8 @@ BEGIN STR_PLGMGR_INSTALL "プラグイン「%s」をインストールしますか?" STR_PLGMGR_INSTALL_ERR "プラグイン「%s」をインストールできませんでした\n理由:%ls" STR_PLGMGR_ERR_ZIP "ZIPファイルは扱えません" - STR_PLGMGR_ERR_FOLDER "プラグインフォルダがありません" - STR_PLGMGR_ERR_CREATEDIR "プラグインフォルダを作成出来ません" + STR_PLGMGR_ERR_FOLDER "プラグインフォルダーがありません" + STR_PLGMGR_ERR_CREATEDIR "プラグインフォルダーを作成出来ません" STR_PLGMGR_INST_ZIP_ACCESS "ZIPファイル「%s」にアクセス出来ません" STR_PLGMGR_INST_ZIP_DEF "ZIPファイル「%s」にはプラグイン定義ファイル(plugin.def)がありません" STR_PLGMGR_INST_ZIP_ALREADY "「%s」は既にインストールされています\n上書きしますか?" diff --git a/sakura_core/typeprop/CImpExpManager.cpp b/sakura_core/typeprop/CImpExpManager.cpp index 8d5910770c..16fac0eaf9 100644 --- a/sakura_core/typeprop/CImpExpManager.cpp +++ b/sakura_core/typeprop/CImpExpManager.cpp @@ -133,7 +133,7 @@ bool CImpExpManager::ImportUI( HINSTANCE hInstance, HWND hwndParent ) hInstance, hwndParent, GetDefaultExtension(), - GetDllShareData().m_sHistory.m_szIMPORTFOLDER // インポート用フォルダ + GetDllShareData().m_sHistory.m_szIMPORTFOLDER // インポート用フォルダー ); WCHAR szPath[_MAX_PATH + 1]; szPath[0] = L'\0'; @@ -180,7 +180,7 @@ bool CImpExpManager::ExportUI( HINSTANCE hInstance, HWND hwndParent ) hInstance, hwndParent, GetDefaultExtension(), - GetDllShareData().m_sHistory.m_szIMPORTFOLDER // インポート用フォルダ + GetDllShareData().m_sHistory.m_szIMPORTFOLDER // インポート用フォルダー ); WCHAR szPath[_MAX_PATH + 1]; szPath[0] = L'\0'; diff --git a/sakura_core/typeprop/CImpExpManager.h b/sakura_core/typeprop/CImpExpManager.h index cae39085ea..1ef6c9a66f 100644 --- a/sakura_core/typeprop/CImpExpManager.h +++ b/sakura_core/typeprop/CImpExpManager.h @@ -65,7 +65,7 @@ class CImpExpManager // Import Folderの設定 inline void SetImportFolder( const WCHAR* szPath ) { - /* ファイルのフルパスをフォルダとファイル名に分割 */ + /* ファイルのフルパスをフォルダーとファイル名に分割 */ /* [c:\work\test\aaa.txt] → [c:\work\test] + [aaa.txt] */ ::SplitPath_FolderAndFile( szPath, GetDllShareData().m_sHistory.m_szIMPORTFOLDER, NULL ); wcscat( GetDllShareData().m_sHistory.m_szIMPORTFOLDER, L"\\" ); diff --git a/sakura_core/uiparts/CMenuDrawer.cpp b/sakura_core/uiparts/CMenuDrawer.cpp index eb12a77163..d5bbeb3f26 100644 --- a/sakura_core/uiparts/CMenuDrawer.cpp +++ b/sakura_core/uiparts/CMenuDrawer.cpp @@ -294,7 +294,7 @@ CMenuDrawer::CMenuDrawer() /* 175 */ F_COPY_ADDCRLF /* , TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 */, //折り返し位置に改行をつけてコピー /* 176 */ F_COPY_COLOR_HTML /* , TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 */, //選択範囲内色付きHTMLコピー /* 177 */ F_COPY_COLOR_HTML_LINENUMBER /* , TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 */, //選択範囲内行番号色付きHTMLコピー -/* 178 */ F_COPYDIRPATH /* , TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 */, //このファイルのフォルダ名をクリップボードにコピー +/* 178 */ F_COPYDIRPATH /* , TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 */, //このファイルのフォルダー名をクリップボードにコピー /* 179 */ F_DISABLE /* , TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 */, //ダミー /* 180 */ F_DISABLE /* , TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 */, //ダミー /* 181 */ F_DISABLE /* , TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 */, //ダミー @@ -307,7 +307,7 @@ CMenuDrawer::CMenuDrawer() /* 186 */ F_INS_TIME /* , TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 */, //時刻挿入 //Nov. 5, 2000 JEPRO 追加 /* 187 */ F_CTRL_CODE_DIALOG /* , TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 */, //コントロールコードの入力(ダイアログ) //@@@ 2002.06.02 MIK /* 188 */ F_INS_FILE_USED_RECENTLY /* , TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 */, //最近使ったファイル挿入 -/* 189 */ F_INS_FOLDER_USED_RECENTLY /* , TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 */, //最近使ったフォルダ挿入 +/* 189 */ F_INS_FOLDER_USED_RECENTLY /* , TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 */, //最近使ったフォルダー挿入 /* 190 */ F_DISABLE /* , TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 */, //ダミー /* 191 */ F_DISABLE /* , TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 */, //ダミー /* 192 */ F_DISABLE /* , TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 */, //ダミー diff --git a/sakura_core/util/file.cpp b/sakura_core/util/file.cpp index c198ab0d2d..5acb616072 100644 --- a/sakura_core/util/file.cpp +++ b/sakura_core/util/file.cpp @@ -255,7 +255,7 @@ FILE* _wfopen_absini(LPCWSTR fname, LPCWSTR mode, BOOL bOrExedir/*=TRUE*/ ) return _wfopen( fname, mode ); } -/* フォルダの最後が半角かつ'\\'の場合は、取り除く "c:\\"等のルートは取り除かない */ +/* フォルダーの最後が半角かつ'\\'の場合は、取り除く "c:\\"等のルートは取り除かない */ void CutLastYenFromDirectoryPath( WCHAR* pszFolder ) { if( 3 == wcslen( pszFolder ) @@ -264,7 +264,7 @@ void CutLastYenFromDirectoryPath( WCHAR* pszFolder ) ){ /* ドライブ名:\ */ }else{ - /* フォルダの最後が半角かつ'\\'の場合は、取り除く */ + /* フォルダーの最後が半角かつ'\\'の場合は、取り除く */ int nFolderLen; int nCharChars; nFolderLen = wcslen( pszFolder ); @@ -286,7 +286,7 @@ void AddLastYenFromDirectoryPath( WCHAR* pszFolder ) ){ /* ドライブ名:\ */ }else{ - /* フォルダの最後が半角かつ'\\'でない場合は、付加する */ + /* フォルダーの最後が半角かつ'\\'でない場合は、付加する */ int nFolderLen; nFolderLen = wcslen( pszFolder ); if( 0 < nFolderLen ){ @@ -313,7 +313,7 @@ std::wstring AddLastYenPath(std::wstring_view path) return ret; } -/* ファイルのフルパスを、フォルダとファイル名に分割 */ +/* ファイルのフルパスを、フォルダーとファイル名に分割 */ /* [c:\work\test\aaa.txt] → [c:\work\test] + [aaa.txt] */ void SplitPath_FolderAndFile( const WCHAR* pszFilePath, WCHAR* pszFolder, WCHAR* pszFile ) { @@ -327,7 +327,7 @@ void SplitPath_FolderAndFile( const WCHAR* pszFilePath, WCHAR* pszFolder, WCHAR* if( NULL != pszFolder ){ wcscpy( pszFolder, szDrive ); wcscat( pszFolder, szDir ); - /* フォルダの最後が半角かつ'\\'の場合は、取り除く */ + /* フォルダーの最後が半角かつ'\\'の場合は、取り除く */ nFolderLen = wcslen( pszFolder ); if( 0 < nFolderLen ){ nCharChars = &pszFolder[nFolderLen] - CNativeW::GetCharPrev( pszFolder, nFolderLen, &pszFolder[nFolderLen] ); @@ -343,16 +343,16 @@ void SplitPath_FolderAndFile( const WCHAR* pszFilePath, WCHAR* pszFolder, WCHAR* return; } -/* フォルダ、ファイル名から、結合したパスを作成 +/* フォルダー、ファイル名から、結合したパスを作成 * [c:\work\test] + [aaa.txt] → [c:\work\test\aaa.txt] - * フォルダ末尾に円記号があってもなくても良い。 + * フォルダー末尾に円記号があってもなくても良い。 */ void Concat_FolderAndFile( const WCHAR* pszDir, const WCHAR* pszTitle, WCHAR* pszPath ) { WCHAR* out=pszPath; const WCHAR* in; - //フォルダをコピー + //フォルダーをコピー for( in=pszDir ; *in != '\0'; ){ *out++ = *in++; } @@ -526,7 +526,7 @@ void GetExedir( partialPath.insert(partialPath.cbegin(), L'\\'); } - // exeフォルダのフルパス、またはexe基準のファイルパスを取得 + // exeフォルダーのフルパス、またはexe基準のファイルパスを取得 auto path = GetExeFileName().parent_path().concat(partialPath); ::wcsncpy_s(pDir, decltype(DLLSHAREDATA::m_szIniFile)::BUFFER_COUNT, path.c_str(), _TRUNCATE); } @@ -564,7 +564,7 @@ void GetInidir( partialPath.insert(partialPath.cbegin(), L'\\'); } - // 設定フォルダのフルパス、またはini基準のファイルパスを取得 + // 設定フォルダーのフルパス、またはini基準のファイルパスを取得 auto path = GetIniFileName().parent_path().concat(partialPath); ::wcsncpy_s(pDir, decltype(DLLSHAREDATA::m_szPrivateIniFile)::BUFFER_COUNT, path.c_str(), _TRUNCATE); } @@ -634,7 +634,7 @@ LPCWSTR GetRelPath( LPCWSTR pszPath ) } //! パスに使えない文字が含まれていないかチェックする -// ファイル名、フォルダ名には「<>*|"?」が使えない +// ファイル名、フォルダー名には「<>*|"?」が使えない // しかし「\\?\C:\Program files\」の形式では?が3文字目にあるので除外 // ストリーム名とのセパレータにはfilename.ext:streamの形式でコロンが使われる // コロンは除外文字に入っていない @@ -997,7 +997,7 @@ void my_splitpath_w ( int FileMatchScore( const WCHAR *file1, const WCHAR *file2 ); // フルパスからファイル名と拡張子(ファイル名の.以降)を分離する -// @date 2014/06/15 moca_skr フォルダ名に.が含まれた場合、フォルダが分離されたのを修正した対応で新規作成 +// @date 2014/06/15 moca_skr フォルダー名に.が含まれた場合、フォルダーが分離されたのを修正した対応で新規作成 static void FileNameSepExt( std::wstring_view file, std::wstring& szFile, std::wstring& szExt ) { const WCHAR* folderPos; @@ -1179,7 +1179,7 @@ void GetShortViewPath( WCHAR* dest, int nSize, const WCHAR* path, HDC hDC, int n nNext += t_max(1, (int)(Int)CNativeW::GetSizeOfChar(path, nPathLen, nNext)); } if( path[nNext] != L'\0' ){ - // サブフォルダ省略 + // サブフォルダー省略 // C:\...\dir\file.ext std::wstring strTemp(path, nLeft + 1); if( nLeft + 1 < nRight ){ @@ -1190,7 +1190,7 @@ void GetShortViewPath( WCHAR* dest, int nSize, const WCHAR* path, HDC hDC, int n wcsncpy_s(dest, nSize, strTemp.c_str(), _TRUNCATE); return; } - // C:\...\dir\ フォルダパスだった。最後のフォルダを表示 + // C:\...\dir\ フォルダーパスだった。最後のフォルダーを表示 if( path[nNext+1] == L'\0' ){ if( bFitMode ){ GetStrTrancateWidth(dest, nSize, strTemp.c_str(), hDC, nPxWidth); diff --git a/sakura_core/util/file.h b/sakura_core/util/file.h index 77a065a4e7..0d718da701 100644 --- a/sakura_core/util/file.h +++ b/sakura_core/util/file.h @@ -53,11 +53,11 @@ FILE *_wfopen_absexe(LPCWSTR fname, LPCWSTR mode); // 2003.06.23 Moca FILE *_wfopen_absini(LPCWSTR fname, LPCWSTR mode, BOOL bOrExedir = TRUE); // 2007.05.19 ryoji //パス文字列処理 -void CutLastYenFromDirectoryPath( WCHAR* pszFolder ); /* フォルダの最後が半角かつ'\\'の場合は、取り除く "c:\\"等のルートは取り除かない*/ -void AddLastYenFromDirectoryPath( WCHAR* pszFolder ); /* フォルダの最後が半角かつ'\\'でない場合は、付加する */ +void CutLastYenFromDirectoryPath( WCHAR* pszFolder ); /* フォルダーの最後が半角かつ'\\'の場合は、取り除く "c:\\"等のルートは取り除かない*/ +void AddLastYenFromDirectoryPath( WCHAR* pszFolder ); /* フォルダーの最後が半角かつ'\\'でない場合は、付加する */ std::wstring AddLastYenPath(std::wstring_view path); -void SplitPath_FolderAndFile( const WCHAR* pszFilePath, WCHAR* pszFolder, WCHAR* pszFile ); /* ファイルのフルパスを、フォルダとファイル名に分割 */ -void Concat_FolderAndFile( const WCHAR* pszDir, const WCHAR* pszTitle, WCHAR* pszPath );/* フォルダ、ファイル名から、結合したパスを作成 */ +void SplitPath_FolderAndFile( const WCHAR* pszFilePath, WCHAR* pszFolder, WCHAR* pszFile ); /* ファイルのフルパスを、フォルダーとファイル名に分割 */ +void Concat_FolderAndFile( const WCHAR* pszDir, const WCHAR* pszTitle, WCHAR* pszPath );/* フォルダー、ファイル名から、結合したパスを作成 */ BOOL GetLongFileName( const WCHAR* pszFilePathSrc, WCHAR* pszFilePathDes ); /* ロングファイル名を取得する */ BOOL CheckEXT( const WCHAR* pszPath, const WCHAR* pszExt ); /* 拡張子を調べる */ const WCHAR* GetFileTitlePointer(const WCHAR* pszPath); //!< ファイルフルパス内のファイル名を指すポインタを取得。2007.09.20 kobake 作成 diff --git a/sakura_core/util/module.cpp b/sakura_core/util/module.cpp index 5f653f87e3..ab3498d84c 100644 --- a/sakura_core/util/module.cpp +++ b/sakura_core/util/module.cpp @@ -57,7 +57,7 @@ void ChangeCurrentDirectoryToExeDir() HMODULE LoadLibraryExedir(LPCWSTR pszDll) { CCurrentDirectoryBackupPoint dirBack; - // DLL インジェクション対策としてEXEのフォルダに移動する + // DLL インジェクション対策としてEXEのフォルダーに移動する ChangeCurrentDirectoryToExeDir(); return ::LoadLibrary( pszDll ); } diff --git a/sakura_core/util/shell.cpp b/sakura_core/util/shell.cpp index b86213526f..c168c2c65f 100644 --- a/sakura_core/util/shell.cpp +++ b/sakura_core/util/shell.cpp @@ -53,7 +53,7 @@ #pragma comment(lib, "urlmon.lib") -/* フォルダ選択ダイアログ */ +/* フォルダー選択ダイアログ */ BOOL SelectDir( HWND hWnd, const WCHAR* pszTitle, const WCHAR* pszInitFolder, WCHAR* strFolderName, size_t nMaxCount ) { if ( nullptr == strFolderName ) { @@ -77,13 +77,13 @@ BOOL SelectDir( HWND hWnd, const WCHAR* pszTitle, const WCHAR* pszInitFolder, WC return FALSE; } - // オプションをフォルダを選択可能に変更 + // オプションをフォルダーを選択可能に変更 hres = pDialog->SetOptions( dwOptions | FOS_PICKFOLDERS | FOS_NOCHANGEDIR | FOS_FORCEFILESYSTEM ); if ( FAILED(hres) ) { return FALSE; } - // 初期フォルダを設定 + // 初期フォルダーを設定 ComPtr psiFolder; hres = SHCreateItemFromParsingName( pszInitFolder, nullptr, IID_PPV_ARGS(&psiFolder) ); if ( SUCCEEDED(hres) ) { @@ -96,7 +96,7 @@ BOOL SelectDir( HWND hWnd, const WCHAR* pszTitle, const WCHAR* pszInitFolder, WC return FALSE; } - // フォルダ選択ダイアログを表示 + // フォルダー選択ダイアログを表示 hres = pDialog->Show( hWnd ); if ( FAILED(hres) ) { return FALSE; @@ -126,11 +126,11 @@ BOOL SelectDir( HWND hWnd, const WCHAR* pszTitle, const WCHAR* pszInitFolder, WC return bRet; } -/*! 特殊フォルダのパスを取得する +/*! 特殊フォルダーのパスを取得する SHGetSpecialFolderPath API(shell32.dll version 4.71以上が必要)と同等の処理をする @param [in] nFolder CSIDL (constant special item ID list) - @param [out] pszPath 特殊フォルダのパス + @param [out] pszPath 特殊フォルダーのパス @author ryoji @date 2007.05.19 新規 @@ -224,11 +224,11 @@ static LRESULT CALLBACK PropSheetWndProc( HWND hwnd, UINT uMsg, WPARAM wParam, L // 選択されたメニューの処理 switch( nId ){ - case 100: // 設定フォルダを開く + case 100: // 設定フォルダーを開く OpenWithExplorer(hwnd, GetIniFileName()); break; - case 101: // インポート/エクスポートの起点リセット(起点を設定フォルダにする) + case 101: // インポート/エクスポートの起点リセット(起点を設定フォルダーにする) int nMsgResult = MYMESSAGEBOX( hwnd, MB_OKCANCEL | MB_ICONINFORMATION, @@ -266,7 +266,7 @@ static int CALLBACK PropSheetProc( HWND hwndDlg, UINT uMsg, LPARAM lParam ) HFONT hFont = UpdateDialogFont( hwndDlg, TRUE ); if( CShareData::getInstance()->IsPrivateSettings() ){ - // 個人設定フォルダを使用するときは「設定フォルダ」ボタンを追加する + // 個人設定フォルダーを使用するときは「設定フォルダー」ボタンを追加する s_pOldPropSheetWndProc = (WNDPROC)::SetWindowLongPtr( hwndDlg, GWLP_WNDPROC, (LONG_PTR)PropSheetWndProc ); HINSTANCE hInstance = (HINSTANCE)::GetModuleHandle( NULL ); HWND hwndBtn = ::CreateWindowEx( 0, WC_BUTTON, LS(STR_SHELL_INIFOLDER), BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 0, 0, 140, 20, hwndDlg, (HMENU)0x02000, hInstance, NULL ); @@ -408,7 +408,7 @@ BOOL ResolveShortcutLink( HWND hwnd, LPCWSTR lpszLinkFile, LPWSTR lpszPath ) return FALSE; } - // 2010.08.28 DLL インジェクション対策としてEXEのフォルダに移動する + // 2010.08.28 DLL インジェクション対策としてEXEのフォルダーに移動する CCurrentDirectoryBackupPoint dirBack; ChangeCurrentDirectoryToExeDir(); @@ -644,7 +644,7 @@ bool OpenWithExplorer(HWND hWnd, const std::filesystem::path& path) // ファイル名(最後の'\'に続く部分)がドット('.')でない場合、 // Windowsエクスプローラーのコマンドを指定してファイルを選択させる。 - // ※ドットは「フォルダ自身」を表す特殊なファイル名。 + // ※ドットは「フォルダー自身」を表す特殊なファイル名。 if (path.filename() != L".") { std::wstring buf(_MAX_PATH, wchar_t()); size_t requiredSize; diff --git a/sakura_core/util/shell.h b/sakura_core/util/shell.h index da105d639a..8cea219c51 100644 --- a/sakura_core/util/shell.h +++ b/sakura_core/util/shell.h @@ -37,7 +37,7 @@ BOOL MyWinHelp(HWND hwndCaller, UINT uCommand, DWORD_PTR dwData); /* WinHelp のかわりに HtmlHelp を呼び出す */ // 2006.07.22 ryoji /* Shell Interface系(?) */ -BOOL SelectDir(HWND hWnd, const WCHAR* pszTitle, const WCHAR* pszInitFolder, WCHAR* strFolderName, size_t nMaxCount ); /* フォルダ選択ダイアログ */ +BOOL SelectDir(HWND hWnd, const WCHAR* pszTitle, const WCHAR* pszInitFolder, WCHAR* strFolderName, size_t nMaxCount ); /* フォルダー選択ダイアログ */ template BOOL SelectDir(HWND hWnd, const WCHAR* pszTitle, const WCHAR* pszInitFolder, WCHAR(&strFolderName)[nMaxCount]) @@ -53,7 +53,7 @@ DWORD NetConnect ( const WCHAR strNetWorkPass[] ); /* ヘルプの目次を表示 */ void ShowWinHelpContents( HWND hwnd ); -BOOL GetSpecialFolderPath( int nFolder, LPWSTR pszPath ); // 特殊フォルダのパスを取得する // 2007.05.19 ryoji +BOOL GetSpecialFolderPath( int nFolder, LPWSTR pszPath ); // 特殊フォルダーのパスを取得する // 2007.05.19 ryoji INT_PTR MyPropertySheet( LPPROPSHEETHEADER lppsph ); // 独自拡張プロパティシート // 2007.05.24 ryoji diff --git a/sakura_core/view/CEditView_Diff.cpp b/sakura_core/view/CEditView_Diff.cpp index 675b2757ac..12fb6f4a43 100644 --- a/sakura_core/view/CEditView_Diff.cpp +++ b/sakura_core/view/CEditView_Diff.cpp @@ -130,7 +130,7 @@ void CEditView::ViewDiffInfo( CWaitCursor cWaitCursor( this->GetHwnd() ); int nFlgFile12 = 1; - /* exeのあるフォルダ */ + /* exeのあるフォルダー */ WCHAR szExeFolder[_MAX_PATH + 1]; WCHAR cmdline[1024]; diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index b3912fef0a..24546cf639 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -892,7 +892,7 @@ void CEditWnd::LayoutMainMenu() nCount = cRecentFile.GetViewCount(); } break; - case F_FOLDER_USED_RECENTLY: // 最近使ったフォルダ + case F_FOLDER_USED_RECENTLY: // 最近使ったフォルダー { CRecentFolder cRecentFolder; nCount = cRecentFolder.GetViewCount(); @@ -2221,9 +2221,9 @@ void CEditWnd::OnCommand( WORD wNotifyCode, WORD wID , HWND hwndCtl ) SLoadInfo sLoadInfo(checkEditInfo.m_szPath, checkEditInfo.m_nCharCode, false); GetDocument()->m_cDocFileOperation.FileLoad( &sLoadInfo ); // Oct. 9, 2004 genta 共通関数化 } - //最近使ったフォルダ + //最近使ったフォルダー else if( wID - IDM_SELOPENFOLDER >= 0 && wID - IDM_SELOPENFOLDER < 999){ - //フォルダ取得 + //フォルダー取得 const CMRUFolder cMRUFolder; LPCWSTR pszFolderPath = cMRUFolder.GetPath( wID - IDM_SELOPENFOLDER ); @@ -2595,8 +2595,8 @@ bool CEditWnd::InitMenu_Special(HMENU hMenu, EFunctionCode eFunc) bInList = (cMRU.MenuLength() > 0); } break; - case F_FOLDER_USED_RECENTLY: // 最近使ったフォルダ - /* 最近使ったフォルダのメニューを作成 */ + case F_FOLDER_USED_RECENTLY: // 最近使ったフォルダー + /* 最近使ったフォルダーのメニューを作成 */ { //@@@ 2001.12.26 YAZAKI OPENFOLDERリストは、CMRUFolderにすべて依頼する const CMRUFolder cMRUFolder; @@ -3774,7 +3774,7 @@ int CEditWnd::CreateFileDropDownMenu( HWND hwnd ) m_cMenuDrawer.MyAppendMenuSep( hMenu, MF_BYPOSITION | MF_SEPARATOR, 0, NULL, FALSE ); } - /* 最近使ったフォルダのメニューを作成 */ + /* 最近使ったフォルダーのメニューを作成 */ const CMRUFolder cMRUFolder; hMenuPopUp = cMRUFolder.CreateMenu( &m_cMenuDrawer ); if ( cMRUFolder.MenuLength() > 0 ) diff --git a/sakura_core/window/CTabWnd.cpp b/sakura_core/window/CTabWnd.cpp index 64a7db2501..d6f928b98a 100644 --- a/sakura_core/window/CTabWnd.cpp +++ b/sakura_core/window/CTabWnd.cpp @@ -2385,7 +2385,7 @@ HIMAGELIST CTabWnd::InitImageList( void ) { // システムイメージリストを取得する // 注:複製後に差し替えて利用するアイコンには事前にアクセスしておかないとイメージが入らない - // ここでは「フォルダを閉じたアイコン」、「フォルダを開いたアイコン」を差し替え用として利用 + // ここでは「フォルダーを閉じたアイコン」、「フォルダーを開いたアイコン」を差し替え用として利用 // WinNT4.0 では SHGetFileInfo() の第一引数に同名を指定すると同じインデックスを返してくることがある? // 2016.08.06 ".0" の場合に Win10で同じインデックスが返ってくるので、"C:\\"に変更 diff --git a/tests/unittest.md b/tests/unittest.md index 4e3e1dd012..d47aabd3d7 100644 --- a/tests/unittest.md +++ b/tests/unittest.md @@ -39,11 +39,11 @@ GUI でステップ実行することができます。 - tests - compiletests (コンパイルテスト用のファイルを置くディレクトリ) - - googletest (googletest 用のフォルダ。git submodule) + - googletest (googletest 用のフォルダー。git submodule) - unittests (単体テストの実体を置く。中の構成は要検討) - - build (ビルド時に生成されるフォルダ。git には登録しない) - - Win32 (Win32 用のプロジェクトを格納するフォルダ) - - x64 (x64 用のプロジェクトを格納するフォルダ) + - build (ビルド時に生成されるフォルダー。git には登録しない) + - Win32 (Win32 用のプロジェクトを格納するフォルダー) + - x64 (x64 用のプロジェクトを格納するフォルダー) ## 単体テスト関連のバッチファイル diff --git a/tests/unittests/test-cdlgprofilemgr.cpp b/tests/unittests/test-cdlgprofilemgr.cpp index 9bdbc46cc8..d89dd4969d 100644 --- a/tests/unittests/test-cdlgprofilemgr.cpp +++ b/tests/unittests/test-cdlgprofilemgr.cpp @@ -232,7 +232,7 @@ TEST(file, GetProfileMgrFileName_DefaultProfile1) // プロセスのインスタンスを用意する CControlProcess dummy(nullptr, LR"(-PROF="")"); - // 設定フォルダのパスが返る + // 設定フォルダーのパスが返る const auto iniDir = GetExeFileName().replace_filename(L"").append("a.txt").remove_filename(); ASSERT_STREQ(iniDir.c_str(), GetProfileMgrFileName(L"").c_str()); } @@ -250,7 +250,7 @@ TEST(file, GetProfileMgrFileName_DefaultProfile2) // プロセスのインスタンスを用意する CControlProcess dummy(nullptr, LR"(-PROF="profile1")"); - // 設定フォルダのパスが返る + // 設定フォルダーのパスが返る const auto iniDir = GetIniFileName().parent_path().parent_path().append("a.txt").remove_filename(); ASSERT_STREQ(iniDir.c_str(), GetProfileMgrFileName(L"").c_str()); } @@ -271,7 +271,7 @@ TEST(file, GetProfileMgrFileName_NamedProfile1) // テスト用プロファイル名 constexpr auto profile = L"profile1"; - // 指定したプロファイルの設定保存先フォルダのパスが返る + // 指定したプロファイルの設定保存先フォルダーのパスが返る const auto profileDir = GetExeFileName().replace_filename(profile).append("a.txt").remove_filename(); ASSERT_STREQ(profileDir.c_str(), GetProfileMgrFileName(profile).c_str()); } @@ -292,7 +292,7 @@ TEST(file, GetProfileMgrFileName_NamedProfile2) // テスト用プロファイル名 constexpr auto profile = L"profile1"; - // 指定したプロファイルの設定保存先フォルダのパスが返る + // 指定したプロファイルの設定保存先フォルダーのパスが返る const auto profileDir = GetIniFileName().parent_path().parent_path().append(profile).append("a.txt").remove_filename(); ASSERT_STREQ(profileDir.c_str(), GetProfileMgrFileName(profile).c_str()); } diff --git a/tests/unittests/test-cprofile.cpp b/tests/unittests/test-cprofile.cpp index 07aafe6e84..516935f184 100644 --- a/tests/unittests/test-cprofile.cpp +++ b/tests/unittests/test-cprofile.cpp @@ -60,12 +60,12 @@ TEST( CProfile, WriteProfileMakesSubDirectories ) // ファイルを削除 std::filesystem::remove( szIniName ); - // フォルダを削除 + // フォルダーを削除 p = ::PathFindFileNameW( szIniName ); p[0] = L'\0'; std::filesystem::remove( szIniName ); - // フォルダを削除 + // フォルダーを削除 p = ::PathFindFileNameW( szIniName ); p[0] = L'\0'; std::filesystem::remove( szIniName ); diff --git a/tests/unittests/test-czipfile.cpp b/tests/unittests/test-czipfile.cpp index 07e1ef9744..19d31ab0ad 100644 --- a/tests/unittests/test-czipfile.cpp +++ b/tests/unittests/test-czipfile.cpp @@ -117,11 +117,11 @@ bool WriteBinaryToFile(BinarySequenceView bin, std::filesystem::path path) */ std::filesystem::path GetTempFilePath(std::wstring_view prefix) { - // 一時フォルダのパスを取得する + // 一時フォルダーのパスを取得する const std::wstring tempDir = std::filesystem::temp_directory_path(); // パス生成に必要なバッファを確保する - // (一時フォルダのパス+接頭辞(3文字)+4桁の16進数+拡張子+NUL終端) + // (一時フォルダーのパス+接頭辞(3文字)+4桁の16進数+拡張子+NUL終端) std::wstring buf(tempDir.length() + 3 + 4 + 4 + 1, L'\0'); // Windows API関数を呼び出す。 diff --git a/tests/unittests/test-file.cpp b/tests/unittests/test-file.cpp index d4ab3c2b7d..b9c166343d 100644 --- a/tests/unittests/test-file.cpp +++ b/tests/unittests/test-file.cpp @@ -149,7 +149,7 @@ TEST(file, Deprecated_GetExedir) // 戻り値取得用のバッファを指定しない場合、何も起きない GetExedir(nullptr); - // exeフォルダの取得 + // exeフォルダーの取得 GetExedir(szBuf); ::wcscat_s(szBuf, filename); ASSERT_STREQ(exeBasePath.c_str(), szBuf); @@ -203,7 +203,7 @@ TEST(file, GetIniFileName_InProcessNamedProfileUnInitialized) // プロセスのインスタンスを用意する CControlProcess dummy(nullptr, LR"(-PROF="profile1")"); - // exeファイルの拡張子をiniに変えたパスの最後のフォルダにプロファイル名を加えたパスが返る + // exeファイルの拡張子をiniに変えたパスの最後のフォルダーにプロファイル名を加えたパスが返る auto iniPath = GetExeFileName().replace_extension(L".ini"); auto path = iniPath.parent_path().append(L"profile1").append(iniPath.filename().c_str()); ASSERT_STREQ(path.c_str(), GetIniFileName().c_str()); @@ -386,7 +386,7 @@ TEST(file, Deprecated_GetInidir) // 戻り値取得用のバッファを指定しない場合、何も起きない GetInidir(nullptr); - // iniフォルダの取得 + // iniフォルダーの取得 GetInidir(szBuf); ::wcscat_s(szBuf, filename); ASSERT_STREQ(iniBasePath.c_str(), szBuf); @@ -503,7 +503,7 @@ TEST(file, CalcDirectoryDepth) // ドライブ文字を含むフルパス EXPECT_EQ(1, CalcDirectoryDepth(LR"(C:\Temp\test.txt)")); - // 共有フォルダを含むフルパス + // 共有フォルダーを含むフルパス EXPECT_EQ(1, CalcDirectoryDepth(LR"(\\host\Temp\test.txt)")); // ドライブなしのフルパス @@ -529,7 +529,7 @@ TEST(file, FileMatchScoreSepExt) LR"(C:\TEMP\TEST.TXT)"); ASSERT_EQ(_countof(LR"(test.txt)") - 1, result); - // FileNameSepExtのテストパターン(パスにフォルダが含まれない) + // FileNameSepExtのテストパターン(パスにフォルダーが含まれない) result = FileMatchScoreSepExt( LR"(TEST.TXT)", LR"(test.txt)"); diff --git a/tests/unittests/test-winmain.cpp b/tests/unittests/test-winmain.cpp index bc4a2350e4..ef1c5a21fc 100644 --- a/tests/unittests/test-winmain.cpp +++ b/tests/unittests/test-winmain.cpp @@ -119,7 +119,7 @@ class WinMainTest : public ::testing::TestWithParam { std::filesystem::remove(iniPath); } - // プロファイル指定がある場合、フォルダも削除しておく + // プロファイル指定がある場合、フォルダーも削除しておく if (const std::wstring_view profileName(GetParam()); profileName.length() > 0) { std::filesystem::remove(iniPath.parent_path()); } diff --git a/tools/macro/CopyDirPath/CopyDirPath.js b/tools/macro/CopyDirPath/CopyDirPath.js index 70049ececc..e233933552 100644 --- a/tools/macro/CopyDirPath/CopyDirPath.js +++ b/tools/macro/CopyDirPath/CopyDirPath.js @@ -20,7 +20,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. // -// 「現在編集中のファイルのフォルダ名をクリップボードにコピー」のマクロ機能を +// 「現在編集中のファイルのフォルダー名をクリップボードにコピー」のマクロ機能を // テストするためのサンプルのキーボードマクロです。 // // 前提条件 @@ -31,5 +31,5 @@ // 3. [ツール] メニューから [キーマクロの読み込み] を選ぶ // 4. このマクロファイルのパスを指定する // 5. [ツール] メニューから [キーマクロの実行] を選ぶ -// 6. クリップボードに開いたテキストファイルのフォルダパスがコピーされるので、エディタ等に貼り付ける。 +// 6. クリップボードに開いたテキストファイルのフォルダーパスがコピーされるので、エディタ等に貼り付ける。 CopyDirPath(); diff --git a/tools/macro/CopyDirPath/CopyDirPath.mac b/tools/macro/CopyDirPath/CopyDirPath.mac index 70049ececc..e233933552 100644 --- a/tools/macro/CopyDirPath/CopyDirPath.mac +++ b/tools/macro/CopyDirPath/CopyDirPath.mac @@ -20,7 +20,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. // -// 「現在編集中のファイルのフォルダ名をクリップボードにコピー」のマクロ機能を +// 「現在編集中のファイルのフォルダー名をクリップボードにコピー」のマクロ機能を // テストするためのサンプルのキーボードマクロです。 // // 前提条件 @@ -31,5 +31,5 @@ // 3. [ツール] メニューから [キーマクロの読み込み] を選ぶ // 4. このマクロファイルのパスを指定する // 5. [ツール] メニューから [キーマクロの実行] を選ぶ -// 6. クリップボードに開いたテキストファイルのフォルダパスがコピーされるので、エディタ等に貼り付ける。 +// 6. クリップボードに開いたテキストファイルのフォルダーパスがコピーされるので、エディタ等に貼り付ける。 CopyDirPath(); diff --git a/tools/macro/CopyDirPath/CopyDirPath.vbs b/tools/macro/CopyDirPath/CopyDirPath.vbs index e1a1f8694a..7e1de34764 100644 --- a/tools/macro/CopyDirPath/CopyDirPath.vbs +++ b/tools/macro/CopyDirPath/CopyDirPath.vbs @@ -20,7 +20,7 @@ ' OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ' SOFTWARE. ' -' 「現在編集中のファイルのフォルダ名をクリップボードにコピー」のマクロ機能を +' 「現在編集中のファイルのフォルダー名をクリップボードにコピー」のマクロ機能を ' テストするためのサンプルのキーボードマクロです。 ' ' 前提条件 @@ -31,5 +31,5 @@ ' 3. [ツール] メニューから [キーマクロの読み込み] を選ぶ ' 4. このマクロファイルのパスを指定する ' 5. [ツール] メニューから [キーマクロの実行] を選ぶ -' 6. クリップボードに開いたテキストファイルのフォルダパスがコピーされるので、エディタ等に貼り付ける。 +' 6. クリップボードに開いたテキストファイルのフォルダーパスがコピーされるので、エディタ等に貼り付ける。 CopyDirPath() diff --git a/tools/macro/macro.md b/tools/macro/macro.md index 4117362906..07b690bae2 100644 --- a/tools/macro/macro.md +++ b/tools/macro/macro.md @@ -5,6 +5,6 @@ |主な関数名|テストする機能|対応バージョン|マクロパス|タイプ| |--|--|--|--|--| -|CopyDirPath|現在開いているファイルのフォルダ名のコピー|ver 2.4.0.0 以降|[CopyDirPath/CopyDirPath.mac](CopyDirPath/CopyDirPath.mac)|キーマクロ| -|CopyDirPath|現在開いているファイルのフォルダ名のコピー|ver 2.4.0.0 以降|[CopyDirPath/CopyDirPath.js](CopyDirPath/CopyDirPath.js)|WSH(Jscript)| -|CopyDirPath|現在開いているファイルのフォルダ名のコピー|ver 2.4.0.0 以降|[CopyDirPath/CopyDirPath.vbs](CopyDirPath/CopyDirPath.vbs)|WSH(VBScript)| +|CopyDirPath|現在開いているファイルのフォルダー名のコピー|ver 2.4.0.0 以降|[CopyDirPath/CopyDirPath.mac](CopyDirPath/CopyDirPath.mac)|キーマクロ| +|CopyDirPath|現在開いているファイルのフォルダー名のコピー|ver 2.4.0.0 以降|[CopyDirPath/CopyDirPath.js](CopyDirPath/CopyDirPath.js)|WSH(Jscript)| +|CopyDirPath|現在開いているファイルのフォルダー名のコピー|ver 2.4.0.0 以降|[CopyDirPath/CopyDirPath.vbs](CopyDirPath/CopyDirPath.vbs)|WSH(VBScript)| diff --git a/tools/zip/readme.md b/tools/zip/readme.md index dbdd17bcb2..a028ae4912 100644 --- a/tools/zip/readme.md +++ b/tools/zip/readme.md @@ -31,7 +31,7 @@ ### 圧縮 ``` -zip.bat <圧縮先Zipファイル> <圧縮するフォルダパス> +zip.bat <圧縮先Zipファイル> <圧縮するフォルダーパス> ``` 例 @@ -45,7 +45,7 @@ zip.bat hogehoge.zip temp ### 解凍 ``` -unzip.bat <解凍するZipファイル> <展開先フォルダパス> +unzip.bat <解凍するZipファイル> <展開先フォルダーパス> ``` 例 diff --git a/vcx-props/project-PlatformToolset.md b/vcx-props/project-PlatformToolset.md index 97272b6ba5..5873f0f288 100644 --- a/vcx-props/project-PlatformToolset.md +++ b/vcx-props/project-PlatformToolset.md @@ -27,7 +27,7 @@ Visual Studio 2017 で作成したソリューション/プロジェクトを Vi 確認するダイアログが出ます。一度ソリューションを開くとユーザーの選択がローカルに保存されるので同じソリューションを再度開いても再度確認される ことはありません。 -しかしながら別のフォルダにソースコードを clone した場合などには再度ユーザーに確認するダイアログが出るので煩雑です。 +しかしながら別のフォルダーにソースコードを clone した場合などには再度ユーザーに確認するダイアログが出るので煩雑です。 ## 解決策 From d01be224f2d80065d33fe2719ade338cefbd305f Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Thu, 5 May 2022 15:53:12 +0900 Subject: [PATCH 0985/1024] =?UTF-8?q?=E3=80=8C=E3=83=95=E3=82=A9=E3=83=AB?= =?UTF-8?q?=E3=83=80=E3=83=BC=E3=80=8D=E3=81=AE=E8=A1=A8=E8=A8=98=E5=A4=89?= =?UTF-8?q?=E6=9B=B4=E3=81=AB=E4=BC=B4=E3=81=86=E3=83=80=E3=82=A4=E3=82=A2?= =?UTF-8?q?=E3=83=AD=E3=82=B0=E3=81=AE=E4=BD=8D=E7=BD=AE=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/sakura_rc.rc | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index bb66fb768b..bbaa8ae8d3 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -229,10 +229,10 @@ CAPTION "Grep実行中" FONT 9, "MS Pゴシック", 0, 0, 0x1 BEGIN LTEXT "検索しています・・・",IDC_STATIC,5,5,61,10,NOT WS_GROUP - LTEXT "ファイル",IDC_STATIC,5,21,26,10,NOT WS_GROUP - LTEXT "IDC_STATIC_CURPATH",IDC_STATIC_CURFILE,36,20,252,10,NOT WS_GROUP - LTEXT "フォルダー",IDC_STATIC,5,34,27,10,NOT WS_GROUP - EDITTEXT IDC_STATIC_CURPATH,36,35,252,20,ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "ファイル",IDC_STATIC,7,21,36,10,NOT WS_GROUP + LTEXT "IDC_STATIC_CURPATH",IDC_STATIC_CURFILE,46,21,238,10,NOT WS_GROUP + LTEXT "フォルダー",IDC_STATIC,7,34,36,10,NOT WS_GROUP + EDITTEXT IDC_STATIC_CURPATH,46,34,238,20,ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP PUSHBUTTON "キャンセル(&X)",IDCANCEL,238,60,50,14 LTEXT "0",IDC_STATIC_HITCOUNT,76,5,44,10,NOT WS_GROUP,WS_EX_RIGHT LTEXT "件みつかりました。",IDC_STATIC,122,5,60,10,NOT WS_GROUP @@ -512,7 +512,7 @@ BEGIN COMBOBOX IDC_COMBO_EOL,226,13,50,126,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP LTEXT "最近のファイル(&F):",IDC_STATIC,5,32,59,10 COMBOBOX IDC_COMBO_MRU,71,30,185,236,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP - LTEXT "最近のフォルダー(&D):",IDC_STATIC,5,49,61,10 + LTEXT "最近のフォルダー(&D):",IDC_STATIC,5,49,69,10 COMBOBOX IDC_COMBO_OPENFOLDER,71,46,185,236,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP END @@ -1324,7 +1324,7 @@ BEGIN LTEXT "$x : x個上のフォルダー名(0-9)\r* : 拡張子\r\r%Y/%m/%d : 年月日 %y西暦(2桁) \r%H:%M:%S: 時分秒 \r%% : '%'記号\r",IDC_LABEL_BACKUP_HELP2,165,75,115,50,SS_SUNKEN CONTROL "指定フォルダーに作成する(&P)",IDC_CHECK_BACKUPFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,148,107,10 CONTROL "リムーバブルメディアのみ(&L)",IDC_CHECK_BACKUP_FOLDER_RM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,120,148,133,10 - LTEXT "フォルダー名(&F)",IDC_LABEL_BACKUP_4,24,162,87,10 + LTEXT "フォルダー名(&F)",IDC_LABEL_BACKUP_4,20,162,52,10 EDITTEXT IDC_EDIT_BACKUPFOLDER,73,160,195,12,ES_AUTOHSCROLL PUSHBUTTON "&...",IDC_BUTTON_BACKUP_FOLDER_REF,271,160,9,12 CONTROL "バックアップファイルをごみ箱に放り込む(&X)",IDC_CHECK_BACKUP_DUSTBOX, @@ -1657,13 +1657,13 @@ BEGIN CONTROL "ファイル(&F)",IDC_RADIO_FILE,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,6,85,56,10 CONTROL "フォルダー(&2)",IDC_RADIO_FOLDER,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,6,98,56,10 GROUPBOX "種類",IDC_STATIC,1,61,89,50,WS_GROUP - LTEXT "パス(&T)",IDC_STATIC_PATH,3,119,22,10 + LTEXT "パス(&T)",IDC_STATIC_PATH,3,119,35,10 EDITTEXT IDC_EDIT_PATH,38,117,122,13,ES_AUTOHSCROLL PUSHBUTTON "&...",IDC_BUTTON_REF2,161,117,10,13 PUSHBUTTON "▼(&3)",IDC_BUTTON_PATH_MENU,171,117,21,14 - LTEXT "ラベル(&E)",IDC_STATIC,3,136,32,10 + LTEXT "ラベル(&E)",IDC_STATIC,3,136,35,10 EDITTEXT IDC_EDIT_LABEL,38,134,111,13,ES_AUTOHSCROLL - LTEXT "ファイル(&K)",IDC_STATIC_FILE,3,154,32,10 + LTEXT "ファイル(&K)",IDC_STATIC_FILE,3,154,35,10 EDITTEXT IDC_EDIT_FILE,38,151,111,13,ES_AUTOHSCROLL CONTROL "隠しファイル(&W)",IDC_CHECK_HIDDEN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,181,87,10 CONTROL "読み取り専用(&Z)",IDC_CHECK_READONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,193,87,10 From d21ce67634f1f469ad227b174b71f3b8d34da3e6 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Thu, 5 May 2022 16:01:28 +0900 Subject: [PATCH 0986/1024] =?UTF-8?q?=E3=80=8C=E3=83=97=E3=83=AA=E3=83=B3?= =?UTF-8?q?=E3=82=BF=E3=83=BC=E3=80=8D=E3=81=A8=E3=80=8C=E3=83=89=E3=83=A9?= =?UTF-8?q?=E3=82=A4=E3=83=90=E3=83=BC=E3=80=8D=E3=81=AE=E3=82=AB=E3=82=BF?= =?UTF-8?q?=E3=82=AB=E3=83=8A=E8=A1=A8=E8=A8=98=E3=82=92OS=E3=81=AB?= =?UTF-8?q?=E5=90=88=E3=82=8F=E3=81=9B=E3=81=A6=E7=B5=B1=E4=B8=80=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit printerのカタカナ表記を「プリンター」に変更します。 「プリンタードライバー」と表記する機会の多い「ドライバー」についても同時に対応します。 --- help/sakura/res/HLP000081.html | 2 +- help/sakura/res/HLP000120.html | 2 +- help/sakura/res/HLP000162.html | 2 +- help/sakura/res/HLP_UR008.html | 4 +- help/sakura/res/HLP_UR010.html | 6 +- help/sakura/res/HLP_UR011.html | 2 +- installer/sinst_src/keyword/HSP.KHP | 2 +- installer/sinst_src/keyword/bat.khp | 4 +- installer/sinst_src/keyword/bat_win2k.khp | 8 +- installer/sinst_src/keyword/batch.kwd | 2 +- installer/sinst_src/keyword/php.khp | 14 ++-- sakura_core/print/CPrint.cpp | 90 +++++++++++------------ sakura_core/print/CPrint.h | 18 ++--- sakura_core/print/CPrintPreview.cpp | 16 ++-- sakura_core/print/CPrintPreview.h | 4 +- sakura_core/sakura_rc.rc | 10 +-- sakura_core/uiparts/CMenuDrawer.cpp | 2 +- sakura_core/window/CEditWnd.cpp | 4 +- 18 files changed, 96 insertions(+), 96 deletions(-) diff --git a/help/sakura/res/HLP000081.html b/help/sakura/res/HLP000081.html index 4c47335a20..b4ed5328f3 100644 --- a/help/sakura/res/HLP000081.html +++ b/help/sakura/res/HLP000081.html @@ -87,7 +87,7 @@

      共通設定 『全般』プロパティ

      組み合わせてホイール操作した時横スクロールする … マウス中ボタン、マウスサイドボタン1、マウスサイドボタン2、CONTROLキー、SHIFTキーのいずれかを指定します。

      note注意
      - マウスの各操作を独自に割り当て可能なドライバ・ユーティリティ類を使用していると、サイドボタンなどとの組み合わせで期待通り動作しない場合があります。
      + マウスの各操作を独自に割り当て可能なドライバー・ユーティリティ類を使用していると、サイドボタンなどとの組み合わせで期待通り動作しない場合があります。
      hintヒント
      マウスホイールでのスクロール行数は、Windowsの設定にしたがっています。 コントロールパネルのマウスで設定できます。ページスクロールにも対応しています。
      diff --git a/help/sakura/res/HLP000120.html b/help/sakura/res/HLP000120.html index 9142b9866f..d9039f39cf 100644 --- a/help/sakura/res/HLP000120.html +++ b/help/sakura/res/HLP000120.html @@ -24,7 +24,7 @@

      印刷プレビュー

    • [ヘルプ] でここを表示します。
    • □滑らか なめらかなプレビュー表示をします。(Win2000以降)
      プレビューと実際の印刷のイメージの違いが改善されます。
    • [戻る]でプレビューを終了し、編集ウィンドウに戻ります。
    • -
    • [プリンタ] でプリンタの設定を行えます。
    • +
    • [プリンター] でプリンターの設定を行えます。
    • ヘッダー及びフッターは印刷ページ設定で指定できます。
    • 印刷中は[キャンセル]で中断できます。
      PrintCancel
    diff --git a/help/sakura/res/HLP000162.html b/help/sakura/res/HLP000162.html index a92b6f582a..908915403b 100644 --- a/help/sakura/res/HLP000162.html +++ b/help/sakura/res/HLP000162.html @@ -12,7 +12,7 @@

    印刷

    -現在開いているファイルをデフォルトプリンタの現在の設定で印刷をします。
    +現在開いているファイルをデフォルトプリンターの現在の設定で印刷をします。

    マクロ構文
    ・構文: Print( );
    diff --git a/help/sakura/res/HLP_UR008.html b/help/sakura/res/HLP_UR008.html index 1e76299a20..c5f7f7c79c 100644 --- a/help/sakura/res/HLP_UR008.html +++ b/help/sakura/res/HLP_UR008.html @@ -330,7 +330,7 @@

    変更履歴(2002/02/23~)

    ・INIファイル内に記述された印刷ページ設定のヘッダー,フッターが古い形式で設定されてたら新しい形式に読み替えるように.(by horさん)
    ・EOF周辺で矩形選択した時に反転表示の残像が残るのを対策するコードを見直してちらつきを抑止
    ・存在しないマクロを呼んだときにエラーがでるように (BY やざきさん)
    -・印刷時にプリンタを選択できるように (BY やざきさん)
    +・印刷時にプリンターを選択できるように (BY やざきさん)
    ・マクロにファイル系を追加(S_FileCloseOpenを除く)(BY やざきさん)
    S_FileSaveAs(ファイル名, 文字コード, 改行コード)
    @@ -365,7 +365,7 @@

    変更履歴(2002/02/23~)

    ・「すべて置換」の後の「元に戻す」を少しだけ快適に (BY horさん)
    ・使用されてないダイアログを削除してバイナリのサイズを縮小 (BY horさん)
    ・CPrintからできるかぎりstaticをはずす。(BY やざきさん)
    -・起動時にプリンタを探しに行かないように。(BY やざきさん)
    +・起動時にプリンターを探しに行かないように。(BY やざきさん)
    ・CShareDataのインスタンスを作ることが許されるのはCProcessのみ。
    ・ほかの場所では、getInstanceするように変更。→新しくかかわった人がわかりやすいように。(BY やざきさん)
    ・上のとあわせて、GetShareDataから、ドキュメントタイプを返す部分を取りはずして、GetDocumentTypeとした。(BY やざきさん)
    diff --git a/help/sakura/res/HLP_UR010.html b/help/sakura/res/HLP_UR010.html index 9477e09601..7a88485e9c 100644 --- a/help/sakura/res/HLP_UR010.html +++ b/help/sakura/res/HLP_UR010.html @@ -44,7 +44,7 @@

    変更履歴(2003/01/14~)


    [機能追加]
    -・印刷ダイアログボックスをWindows標準のものにして,プリンタ設定ができるように.(by かろとさん)
    +・印刷ダイアログボックスをWindows標準のものにして,プリンター設定ができるように.(by かろとさん)
    ・階層付きテキスト,HTMLのアウトライン解析 (by (全略)さん)

    [バグ修正]
    @@ -55,14 +55,14 @@

    変更履歴(2003/01/14~)

    ・正規表現の行頭文字(^)を検索すると全部の文字が検索文字の色になる不具合修正
    ・[EOF]位置から行末文字($)を検索すると、最下位行の行末にマッチしない不具合修正
    ・「全て置換」時に始点挿入、終点追加が動くように
    -・プリンタダイアログで用紙サイズや固有の設定を変更した場合に結果が保存されるように.(by かろとさん)
    +・プリンターダイアログで用紙サイズや固有の設定を変更した場合に結果が保存されるように.(by かろとさん)
    ・フリーカーソルでない時に行削除した場合にEOLよりキャレットが右に来ないようにキャレット位置を調整.(by かろとさん)
    ・「ファイルを開く」ダイアログボックスでメモリリークしていたのを修正.(by みくさん)

    [その他変更]
    ・全角ひらがな・かたかな→半角変換で,長音,濁点,半濁点を直前の文字に応じて変換対象とするように.(by かろとさん)
    -・プリンタの設定をプロセス終了まで記憶するように.(by かろとさん)
    +・プリンターの設定をプロセス終了まで記憶するように.(by かろとさん)
    ・お気に入りダイアログボックスで,履歴が更新されたときのメッセージの出し方をメッセージボックスからダイアログボックス中の文字列に.(by みくさん)
    ・sakura.ini中の強調キーワード区切りを\0からTABに変更.バイナリを扱えないエディタでsakura.iniを開いたときにもキーワード設定が破壊されないように.(by げんた)

    diff --git a/help/sakura/res/HLP_UR011.html b/help/sakura/res/HLP_UR011.html index 32932dc153..048ae0c412 100644 --- a/help/sakura/res/HLP_UR011.html +++ b/help/sakura/res/HLP_UR011.html @@ -335,7 +335,7 @@

    変更履歴(2003/06/26~)

    [バグ修正]
    ・ファンクションキー表示時Ctrl+1でツールバーを消すと表示が崩れるのを修正.(by みくさん)
    -・プリンタによっては印刷時に用紙を縦にしても横のサイズで印刷されてしまうことがあったのを修正.(by かろとさん)
    +・プリンターによっては印刷時に用紙を縦にしても横のサイズで印刷されてしまうことがあったのを修正.(by かろとさん)

    [その他変更]
    diff --git a/installer/sinst_src/keyword/HSP.KHP b/installer/sinst_src/keyword/HSP.KHP index a76e8ce679..1c183b0ab1 100644 --- a/installer/sinst_src/keyword/HSP.KHP +++ b/installer/sinst_src/keyword/HSP.KHP @@ -324,7 +324,7 @@ es_area /// es_area p1,p2,p3,p4 [hspdx.dll]\np1=有効エリアの左上X座標 es_boxf /// es_boxf p1,p2,p3,p4 [hspdx.dll]\np1=塗りつぶし左上X座標\np2=塗りつぶし左上Y座標\np3=塗りつぶし右下X座標\np4=塗りつぶし右下Y座標\n(p1,p2)-(p3,p4)の矩形範囲を現在選択されている色で塗りつぶします。 es_buffer /// es_buffer p1,p2 [hspdx.dll]\np1=オフスクリーンバッファID(0~63)\np2=属性スイッチ(0~2)\np3=透明色(パレットモード時:-1~255、ハイカラー以上:0~$ffffff)\n 属性スイッチ=0 : オフスクリーンバッファをVRAMに取る、\n 失敗した場合は、メインメモリに取る\n 属性スイッチ=1 : オフスクリーンバッファをメインメモリに取る\n 属性スイッチ=2 : オフスクリーンバッファをVRAMに取る\n現在gsel命令で選択されているHSPのバッファ内容を、DirectXのオフ\nスクリーンバッファにすべて転送します。 es_bye /// es_bye [hspdx.dll]\nHSPDX.DLLシステムの切り離しをします。 -es_caps /// es_caps p1,p2,p3,p4 [hspdx.dll]\np1=情報が代入される変数名(数値型)\np2=情報ID\np3=情報ビット(1~32)\np4=対象となるレイヤー( 0=HAL / 1=HEL )\nDirectXのドライバが、どのような機能を持っているかを調べて、結果をp1で\n指定する変数に代入します。 +es_caps /// es_caps p1,p2,p3,p4 [hspdx.dll]\np1=情報が代入される変数名(数値型)\np2=情報ID\np3=情報ビット(1~32)\np4=対象となるレイヤー( 0=HAL / 1=HEL )\nDirectXのドライバーが、どのような機能を持っているかを調べて、結果をp1で\n指定する変数に代入します。 es_check /// es_check p1,p2,p3 [hspdx.dll]\np1=結果が代入される変数名\np2=チェックの対象となるスプライトNo.(0~511)\np3=検索対象となるtype値\nスプライト同士の衝突判定を行ないます。 es_chr /// es_chr p1,p2 [hspdx.dll]\np1=スプライトNo.(0~511)\np2=キャラクタNo.(0~1023)\np1で指定したスプライトのキャラクタNo.を変更します。 es_clear /// es_clear p1,p2 [hspdx.dll]\np1=スプライトNo.(0~511)\np2=削除される個数\np1で指定したスプライトNo.以降のスプライトが削除され未登録になり\nます。p2で削除されるスプライトの数を指定することができます。 diff --git a/installer/sinst_src/keyword/bat.khp b/installer/sinst_src/keyword/bat.khp index 11ad23d112..b9fd597872 100644 --- a/installer/sinst_src/keyword/bat.khp +++ b/installer/sinst_src/keyword/bat.khp @@ -1,7 +1,7 @@ ;バッチファイルのキーワードヘルプ定義 % /// 変数を表します\n\n%n バッチファイルに渡された引数\n 第一引数: %1\n 第二引数: %2\n 第n引数: %n\n\n関連項目:SHIFT\n\n特殊な環境変数\n\n%CONFIG% config.sysでmenuitemで指定された値\n%PROMPT% プロンプトの表示形式\n%COMSPEC% Command.comの場所\n%PATH% 環境変数PATH\n%CMDLINE% 最後に実行されたコマンドを格納\n\n関連項目:SET >,>>,<,| /// 標準出力をリダイレクトまたはパイプします。\n\nコマンド > TEST.TXT TEST.TXTに出力\nコマンド >> TEST.TXT TEST.TXTに追加保存\nECHO Y | DEL *.* DELコマンドにYキーを渡して実行\nDIR | MORE 一画面ずつ表示 -ADDDRV /// キャラクタ型デバイスドライバを組み込みます.\n\nADDDRV [ドライブ:][パス]ファイル名\n [ドライブ:][パス]ファイル名 定義ファイルを指定します. +ADDDRV /// キャラクタ型デバイスドライバーを組み込みます.\n\nADDDRV [ドライブ:][パス]ファイル名\n [ドライブ:][パス]ファイル名 定義ファイルを指定します. ATTRIB /// ファイル属性(アトリビュート)を表示したり, 変更します.\n\nATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] [[ドライブ:][パス]ファイル名] [/S]\n\n + 属性を設定します.\n - 属性を解除します.\n R 読み取り専用属性.\n A アーカイブ属性.\n S システムファイル属性.\n H 隠しファイル属性.\n /S 指定されたパスのすべてのディレクトリのファイルを処理します. BREAK /// Ctrl+C キーの拡張チェック機能の設定と解除をします.\n\nBREAK [ON | OFF]\n\nパラメータの指定がなければ, 現在の BREAK 設定が表示されます. CALL /// バッチ ファイルの中から別のバッチファイルを呼び出します.\n\CALL [ドライブ:][パス]ファイル名 [バッチパラメータ]\n\n バッチパラメータ バッチファイルに必要なコマンド ライン情報を指定します.\n\nCALLを指定しない場合、元のバッチに制御が戻りません。 @@ -31,7 +31,7 @@ IF,ERRORLEVEL,EXIST /// バッチファイル中で条件処理を実行しま LABEL /// ディスクのボリュームラベルを作成, 変更, または削除します.\n\nLABEL [ドライブ:][ラベル] LOADHIGH /// プログラムを上位メモリ領域に読み込みます.\n\nLOADHIGH [ドライブ:][パス]ファイル名 [パラメータ]\nLOADHIGH [/L:領域1[,最小サイズ1][;領域2[,最小サイズ2]...] [/S]]\n [ドライブ:][パス]ファイル名 [パラメータ]]\n\n /L:領域1[,最小サイズ1][;領域2[,最小サイズ2]]...\n プログラムが読み込まれるメモリの領域を指定します.\n 領域1 には最初のメモリ領域の番号を指定します.\n 最小サイズ1 には領域1 の最小サイズを指定します.\n 領域2 と最小サイズ2 には 2つめの領域の番号と最小サイズを\n 指定します.\n 領域の数は好きなだけ指定できます.\n\n /S プログラムが読み込まれている間, UMB を最小サイズに縮小し\n ます. /S は通常 MemMaker だけに使います.\n\n [ドライブ:][パス]ファイル名\n プログラムの位置と名前を指定します. MKDIR,MDディレクトリを作ります.\n\nMKDIR [ドライブ:]パス\nMD [ドライブ:]パス\n\n関連項目:RMDIR -MODE /// システムデバイスの設定をします.\n\nプリンタポート: MODE LPTn[:] [COLS=c] [LINES=l] [RETRY=r]\nシリアルポート: MODE COMm[:] [BAUD=b] [PARITY=p] [DATA=d] [STOP=s] [RETRY=r]\nデバイス状態: MODE [デバイス] [/STATUS]\nリダイレクト印刷: MODE LPTn[:]=COMm[:]\nコード ページ準備: MODE デバイス CP PREPARE=((yyy[...]) [ドライブ:][パス]ファイル名)\nコード ページ選択: MODE デバイス CP SELECT=yyy\nコード ページリフレッシュ:\n MODE デバイス CP REFRESH\nコード ページ状態: MODE デバイス CP [/STATUS]\n表示モード: MODE [ディスプレイ アダプタ][,n]\n MODE CON[:] [COLS=c] [LINES=n]\nタイプマチック率: MODE CON[:] [RATE=r DELAY=d]\n\n関連項目:CTTY +MODE /// システムデバイスの設定をします.\n\nプリンターポート: MODE LPTn[:] [COLS=c] [LINES=l] [RETRY=r]\nシリアルポート: MODE COMm[:] [BAUD=b] [PARITY=p] [DATA=d] [STOP=s] [RETRY=r]\nデバイス状態: MODE [デバイス] [/STATUS]\nリダイレクト印刷: MODE LPTn[:]=COMm[:]\nコード ページ準備: MODE デバイス CP PREPARE=((yyy[...]) [ドライブ:][パス]ファイル名)\nコード ページ選択: MODE デバイス CP SELECT=yyy\nコード ページリフレッシュ:\n MODE デバイス CP REFRESH\nコード ページ状態: MODE デバイス CP [/STATUS]\n表示モード: MODE [ディスプレイ アダプタ][,n]\n MODE CON[:] [COLS=c] [LINES=n]\nタイプマチック率: MODE CON[:] [RATE=r DELAY=d]\n\n関連項目:CTTY MORE /// 出力を一度に 1画面ずつ表示します.\n\nMORE [ドライブ:][パス]ファイル名\nMORE < [ドライブ:][パス]ファイル名\nコマンド名 | MORE [ドライブ:][パス][ファイル名]\n\n [ドライブ:][パス]ファイル名 一度に 1画面ずつ出力するファイルを指定します.\n コマンド名 実行結果の出力を表示するコマンドを指定します. MOVE /// ファイルを移動したり, ファイルやディレクトリの名前を変更します.\n\nファイル(複数可)を移動するには:\nMOVE [/Y | /-Y] [ドライブ:][パス]ファイル名1[,...] 受け側\n\nファイルやディレクトリの名前を変更するには:\nMOVE [/Y | /-Y] [ドライブ:][パス]ディレクトリ名1 ディレクトリ名2\n\n [ドライブ:][パス]ファイル名1\n 移動したいファイルの位置と名前を指定します.\n 受け側 ファイルの移動先を指定します. 受け側にはドライブ名とコロン, \n ディレクトリ名, またはそれらの組み合わせを指定できます. \n ファイルを 1つだけ移動する場合には, ファイル名も指定して移動\n するときにファイル名の変更をすることもできます.\n [ドライブ:][パス]ディレクトリ名1\n 名前を変更したいディレクトリを指定します.\n ディレクトリ名2 ディレクトリの新しい名前を指定します.\n\n /Y ディレクトリを作成するか, 受け側を上書きするか確認するための\n プロンプトを表示しません.\n /-Y ディレクトリを作成するか, 受け側を上書きするか確認するための\n プロンプトを表示します.\n\n環境変数 COPYCMD に /Y スイッチを設定することもできます.\nこれは, コマンド ラインで /-Y スイッチを指定すると無効になります. MSCDEX /// 使い方: MSCDEX [/E/K/S/V] [/D:<ドライバ> ... ] [/L:<文字>] [/M:<バッファ>] diff --git a/installer/sinst_src/keyword/bat_win2k.khp b/installer/sinst_src/keyword/bat_win2k.khp index 842863a6da..1930348b73 100644 --- a/installer/sinst_src/keyword/bat_win2k.khp +++ b/installer/sinst_src/keyword/bat_win2k.khp @@ -1,7 +1,7 @@ ;バッチファイルのキーワードヘルプ定義 % /// 変数を表します\n\n%n バッチファイルに渡された引数\n 第一引数: %1\n 第二引数: %2\n 第n引数: %n\n\n関連項目:SHIFT\n\n特殊な環境変数\n\n%CONFIG% config.sysでmenuitemで指定された値\n%PROMPT% プロンプトの表示形式\n%COMSPEC% Command.comの場所\n%PATH% 環境変数PATH\n%CMDLINE% 最後に実行されたコマンドを格納\n\n関連項目:SET >,>>,<,| /// 標準出力をリダイレクトまたはパイプします。\n\nコマンド > TEST.TXT TEST.TXTに出力\nコマンド >> TEST.TXT TEST.TXTに追加保存\nECHO Y | DEL *.* DELコマンドにYキーを渡して実行\nDIR | MORE 一画面ずつ表示 -ADDDRV /// キャラクタ型デバイスドライバを組み込みます.\n\nADDDRV [ドライブ:][パス]ファイル名\n [ドライブ:][パス]ファイル名 定義ファイルを指定します.\n +ADDDRV /// キャラクタ型デバイスドライバーを組み込みます.\n\nADDDRV [ドライブ:][パス]ファイル名\n [ドライブ:][パス]ファイル名 定義ファイルを指定します.\n ASSOC /// ファイル拡張子の関連付けを表示または変更します。\n\nASSOC [.拡張子[=[ファイルタイプ]]]\n\n .拡張子 ファイル タイプに関連付ける拡張子を指定します。\n ファイルタイプ 拡張子に関連付けるファイル タイプを指定します。\n\nパラメータを指定しないで ASSOC と入力すると、現在のファイルの関連付け\nを表示します。ファイル拡張子を指定して ASSOC を実行すると、そのファイル\n拡張子の現在のファイルの関連付けを表示します。ファイル タイプやコマンド\nを指定しないと、そのファイル拡張子の関連付けを削除します。\n AT /// AT コマンドは、指定された日時にコマンドとプログラムがコンピュータで\n実行されるようにスケジュールします。AT コマンドを使用するには、\nSchedule サービスが実行中でなければなりません。\n\nAT [\\コンピュータ名] [ [id] [/DELETE] | /DELETE [/YES]]\nAT [\\コンピュータ名] 時刻 [/INTERACTIVE]\n [ /EVERY:日付[,...] | /NEXT:日付[,...]] "コマンド"\n\n\\コンピュータ名 リモート コンピュータを指定します。このパラメータを\n 省略したときは、ローカル コンピュータでコマンドが\n スケジュールされます。\nid スケジュールされたコマンドに割り当てられた識別番号です。\n/delete スケジュールされたコマンドを取り消します。\n id を指定しなかったときは、コンピュータでスケジュール\n されているすべてのコマンドが取り消されます。\n/yes 確認せずにすべてのジョブ コマンドを取り消すときに\n 使用します。\n時刻 コマンドが実行される時刻を指定します。\n/interactive ジョブの実行中、ジョブはログオンしているユーザーの\n デスクトップとの対話を許可します。\n/every:日付[,...] 毎週指定した曜日に、または毎月指定した日にコマンドが\n 実行されます。\n 日付を省略したときは、その月の今日の日付が使用されます。\n/next:日付[,...] 指定したコマンドが次の日付 (たとえば、次の火曜日) に\n 実行されます。日付を省略したときは、その月の今日の日付が\n 使用されます。\n"コマンド" 実行する Windows NT コマンド、またはバッチ プログラム\n です。\n\n ATTRIB /// ファイル属性を表示または変更します。\n\nATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] [[ドライブ:] [パス] ファイル名]\n [/S [/D]]\n\n + 属性を設定します。\n - 属性を解除します。\n R 読み取り専用属性。\n A アーカイブ属性。\n S システム ファイル属性。\n H 隠しファイル属性。\n /S 現在のディレクトリとすべてのサブフォルダの一致するファイルを\n 処理します。\n /D フォルダも処理します。\n\n @@ -23,9 +23,9 @@ COUNTRY /// MS-DOS サブシステムで、各国対応の時刻、日付、通 DATE /// 日付を表示または設定します。\n\nDATE [/T | 日付]\n\nパラメータの指定がない場合は、現在の日付が表示され、新しい日付の入力を\n求められます。変更しない場合は、Enter キーを押します。\n\nコマンド拡張機能を有効にすると、DATE コマンドは、/T スイッチを\nサポートするようになります。このスイッチを指定すると、現在の日付\nだけが表示され、新しい日付を入力するためのプロンプトは表示されません。\n DEBUG /// プログラムのテスト/編集ツールであるデバッガを起動します.\n\nDEBUG [[ドライブ:][パス]ファイル名 [テストファイル-パラメータ]]\n\n [ドライブ:][パス]ファイル名\n テストするファイルを指定します.\n テストファイル-パラメータ テストするファイルが必要とするコマンドライン情報を\n 指定します.\n\nDEBUG 起動後に, ? を入力するとデバッガのコマンド一覧が表示されます.\n DEL,ERASE /// ファイル (複数可) を削除します。\n\nDEL [/P] [/F] [/S] [/Q] [/A[[:]属性]] 名前\nERASE [/P] [/F] [/S] [/Q] [/A[[:]属性]] 名前\n\n 名前 ファイルまたはディレクトリ (複数可) の一覧を指定します。\n 複数のファイルを削除するときはワイルドカードを使用します。\n ディレクトリが指定されたときはディレクトリ内のすべてのファ\n イルは削除されます。\n\n /P 各ファイルを削除する前に確認のメッセージを表示します。\n /F 読み取り専用ファイルを強制的に削除します。\n /S 指定されたファイルをすべてのサブディレクトリから削除します。\n /Q ワイルドカードを使用して一括削除するときに、確認のメッセージ\n を表示しません。(QUIET モード)\n /A 属性により削除するファイルを選択します。\n 属性 R 読み取り専用 S システム ファイル\n H 隠しファイル A アーカイブ\n - その属性以外\n\nコマンド拡張機能を有効にすると、DEL と ERASE は次のように変更されます:\n\n/S スイッチの表示形式が逆になり、見つからなかったファイルではなく\n削除されたファイルだけが表示されるようになります。\n -DELDRV /// ADDDRV で組み込んだデバイスドライバを取り外します.\n\nDELDRV\n\n -DEVICE /// 指定したデバイス ドライバをメモリに読み込みます。\n\nMS-DOS 用のデバイス ドライバを読み込むには、systemroot\System32\Config.nt ファイルを使うか、またはプログラムの PIF で指定された同等の起動ファイルを使います。\n\nパラメータ\n\n[[drive:][path] filename\n\n 読み込みたいデバイス ドライバの場所と名前を指定します。\n\n[dd-parameters]\n\n デバイス ドライバに必要なコマンド ライン情報を指定します。\n\n詳細については、"関連項目" の一覧の "Devicehigh" を参照してください。\n -DEVICEHIGH /// デバイス ドライバをアッパー メモリ領域に読み込みます。ほかのプログラムが使用できるメイン メモリの容量を増加させます。MS-DOS 用のデバイス ドライバを読み込むには、systemroot\System32\Config.nt ファイルを使うか、またはプログラムの PIF で指定された同等の起動ファイルを使います。\n\n\ndevicehigh=[drive:][path] filename [dd-parameters]\n\ndevicehigh でデバイス ドライバをアッパー メモリ領域に読み込む前に、利用可能にしなければならないメモリの最小容量を指定するには、次の構文を使います。\n\ndevicehigh size=hexsize [drive:][path] filename [dd-parameters]\n\nパラメータ\n\n[drive:][path]\n アッパー メモリ領域に読み込みたいデバイス ドライバの場所と名前を指定します。 \n\ndd-parameters\n デバイス ドライバに必要なコマンド ライン情報を指定します。 \n\nhexsize\n devicehigh コマンドがデバイス ドライバをアッパー メモリ領域に読み込む前に、利用可能にしなければならないメモリの最小容量 (16 進形式によるバイト数) を指定します。第 2 の構文行のように、size = 16進サイズ を使わなければなりません。 \n\n詳細については、"関連項目" の一覧で "Loadhigh" または "Device" をクリックしてください。\n +DELDRV /// ADDDRV で組み込んだデバイスドライバーを取り外します.\n\nDELDRV\n\n +DEVICE /// 指定したデバイス ドライバーをメモリに読み込みます。\n\nMS-DOS 用のデバイス ドライバーを読み込むには、systemroot\System32\Config.nt ファイルを使うか、またはプログラムの PIF で指定された同等の起動ファイルを使います。\n\nパラメータ\n\n[[drive:][path] filename\n\n 読み込みたいデバイス ドライバーの場所と名前を指定します。\n\n[dd-parameters]\n\n デバイス ドライバーに必要なコマンド ライン情報を指定します。\n\n詳細については、"関連項目" の一覧の "Devicehigh" を参照してください。\n +DEVICEHIGH /// デバイス ドライバーをアッパー メモリ領域に読み込みます。ほかのプログラムが使用できるメイン メモリの容量を増加させます。MS-DOS 用のデバイス ドライバーを読み込むには、systemroot\System32\Config.nt ファイルを使うか、またはプログラムの PIF で指定された同等の起動ファイルを使います。\n\n\ndevicehigh=[drive:][path] filename [dd-parameters]\n\ndevicehigh でデバイス ドライバーをアッパー メモリ領域に読み込む前に、利用可能にしなければならないメモリの最小容量を指定するには、次の構文を使います。\n\ndevicehigh size=hexsize [drive:][path] filename [dd-parameters]\n\nパラメータ\n\n[drive:][path]\n アッパー メモリ領域に読み込みたいデバイス ドライバーの場所と名前を指定します。 \n\ndd-parameters\n デバイス ドライバーに必要なコマンド ライン情報を指定します。 \n\nhexsize\n devicehigh コマンドがデバイス ドライバーをアッパー メモリ領域に読み込む前に、利用可能にしなければならないメモリの最小容量 (16 進形式によるバイト数) を指定します。第 2 の構文行のように、size = 16進サイズ を使わなければなりません。 \n\n詳細については、"関連項目" の一覧で "Loadhigh" または "Device" をクリックしてください。\n DIR /// ディレクトリ中のファイルとサブディレクトリを一覧表示します。\n\nDIR [ドライブ:][パス][ファイル名] [/A[[:]属性]] [/B] [/C] [/D] [/L] [/N]\n [/O[[:]ソート順]] [/P] [/Q] [/S] [/T[[:]タイムフィールド]] [/W] [/X] [/4]\n\n [ドライブ:][パス][ファイル名]\n 一覧表示するドライブ、ディレクトリ、またはファイルを指定します。\n\n /A 指定された属性のファイルを表示します。\n 属性 D ディレクトリ R 読み取り専用\n H 隠しファイル A アーカイブ\n S システム ファイル - その属性以外\n /B ファイル名のみを表示します (見出しや要約が付きません)。\n /C ファイル サイズを桁区切り表示します。これは\n 既定の設定です。/-C とすると桁区切り表示されません。\n /D /W と同じですが、ファイルを列で並べ替えた一覧を表示します。\n /L 小文字で表示します。\n /N ファイル名を右端に表示する一覧形式を使用します。\n /O ファイルを並べ替えて表示します。\n ソート順 N 名前順 (アルファベット) S サイズ順 (小さいほうから)\n E 拡張子順 (アルファベット) D 日時順 (古いほうから)\n G グループ (ディレクトリから) - 降順\n /P 1 画面ごとに停止して表示します。\n /Q ファイルの所有者を表示します。\n /S 指定されたディレクトリおよびそのサブディレクトリのすべての\n ファイルを表示します。\n /T どのタイムフィールドを表示するか、または並べ替えに使用するかを\n 指定します。\n タイムフィールド C 作成\n A 最終アクセス\n W 最終更新\n /W ワイド一覧形式で表示します。\n /X このオプションは MS-DOS 形式以外のファイル名に対する短い名前を\n 表示します。長い名前の前に短い名前を表示する点を除けば、\n /N オプションと同じです。短い名前がない場合は、ブランクに\n なります。\n /4 4 つの数字で年を表示します。\n\n環境変数 DIRCMD にスイッチを設定できます。\n/-W のように - (ハイフン) を前につけると、そのスイッチは無効になります。\n DISKCOMP /// 2 枚のフロッピー ディスクの内容を比較します。\n\nDISKCOMP [ドライブ1: [ドライブ2:]]\n\n DISKCOPY /// フロッピー ディスクの内容を別のディスクにコピーします。\n\nDISKCOPY [ドライブ1: [ドライブ2:]] [/V]\n\n /V 正しくコピーされたかどうか照合します。\n\n同じ種類のフロッピー ディスクを使わなければなりません。\nドライブ1 とドライブ2 には同じドライブを指定することもできます。\n diff --git a/installer/sinst_src/keyword/batch.kwd b/installer/sinst_src/keyword/batch.kwd index a3c992be35..bd5693fb00 100644 --- a/installer/sinst_src/keyword/batch.kwd +++ b/installer/sinst_src/keyword/batch.kwd @@ -197,7 +197,7 @@ OFF @TYPE -// ******************** システムデバイスドライバ ******************** // +// ******************** システムデバイスドライバー ******************** // NUL CON AUX diff --git a/installer/sinst_src/keyword/php.khp b/installer/sinst_src/keyword/php.khp index 644175d83b..b961b8da8a 100644 --- a/installer/sinst_src/keyword/php.khp +++ b/installer/sinst_src/keyword/php.khp @@ -2315,8 +2315,8 @@ proc_close /// int proc_close ( resource process)\n Close a process opened by pr proc_open /// resource proc_open ( string cmd, array descriptorspec, array pipes)\n Execute a command and open file pointers for input/output shell_exec /// string shell_exec ( string cmd)\n シェルによりコマンドを実行し、文字列として出力全体を返す system /// string system ( string command, int [return_var])\n外部プログラムの実行と表示 -printer_abort /// void printer_abort ( resource handle)\nプリンタのスプールファイルを削除する -printer_close /// void printer_close ( resource handle)\nプリンタへの接続を閉じる +printer_abort /// void printer_abort ( resource handle)\nプリンターのスプールファイルを削除する +printer_close /// void printer_close ( resource handle)\nプリンターへの接続を閉じる printer_create_brush /// mixed printer_create_brush ( int style, string color)\n新規ブラシを作成する printer_create_dc /// void printer_create_dc ( resource handle)\n新規デバイスコンテキストを作成する printer_create_font /// mixed printer_create_font ( string face, int height, int width, int font_weight, bool italic, bool underline, bool strikeout, int orientaton)\n新規フォントを作成する @@ -2335,17 +2335,17 @@ printer_draw_roundrect /// void printer_draw_roundrect ( resource handle, int ul printer_draw_text /// void printer_draw_text ( resource printer_handle, string text, int x, int y)\nテキストを描画する printer_end_doc /// bool printer_end_doc ( resource handle)\nドキュメントを閉じる printer_end_page /// bool printer_end_page ( resource handle)\nアクティブなページを閉じる -printer_get_option /// mixed printer_get_option ( resource handle, string option)\nプリンタ設定データを取得する -printer_list /// array printer_list ( int enumtype [, string name [, int level]])\nサーバで付加されたプリンタの配列を返す +printer_get_option /// mixed printer_get_option ( resource handle, string option)\nプリンター設定データを取得する +printer_list /// array printer_list ( int enumtype [, string name [, int level]])\nサーバで付加されたプリンターの配列を返す printer_logical_fontheight /// int printer_logical_fontheight ( resource handle, int height)\n論理フォントの高さを取得する -printer_open /// mixed printer_open ( [string devicename])\nプリンタへの接続をオープンする +printer_open /// mixed printer_open ( [string devicename])\nプリンターへの接続をオープンする printer_select_brush /// void printer_select_brush ( resource printer_handle, resource brush_handle)\nブラシを選択する printer_select_font /// void printer_select_font ( resource printer_handle, resource font_handle)\nフォントを選択する printer_select_pen /// void printer_select_pen ( resource printer_handle, resource pen_handle)\nペンを選択する -printer_set_option /// bool printer_set_option ( resource handle, int option, mixed value)\nプリンタの接続を設定する +printer_set_option /// bool printer_set_option ( resource handle, int option, mixed value)\nプリンターの接続を設定する printer_start_doc /// bool printer_start_doc ( resource handle [, string document])\n新規ドキュメントを開始する printer_start_page /// bool printer_start_page ( resource handle)\n新規ページを開始する -printer_write /// bool printer_write ( resource handle, string content)\nプリンタへデータを書き込む +printer_write /// bool printer_write ( resource handle, string content)\nプリンターへデータを書き込む pspell_add_to_personal /// int pspell_add_to_personal ( int dictionary_link, string word)\nユーザーの単語リストに単語を追加 pspell_add_to_session /// int pspell_add_to_session ( int dictionary_link, string word)\n カレントのセッションの単語リストに単語を追加 pspell_check /// bool pspell_check ( int dictionary_link, string word)\n単語をチェックする diff --git a/sakura_core/print/CPrint.cpp b/sakura_core/print/CPrint.cpp index 6c38e2463f..d4b16d60e9 100644 --- a/sakura_core/print/CPrint.cpp +++ b/sakura_core/print/CPrint.cpp @@ -112,9 +112,9 @@ CPrint::~CPrint( void ) return; } -/*! @brief プリンタダイアログを表示して、プリンタを選択する +/*! @brief プリンターダイアログを表示して、プリンターを選択する ** -** @param pPD [i/o] プリンタダイアログ構造体 +** @param pPD [i/o] プリンターダイアログ構造体 ** @param pMYDEVMODE [i/o] 印刷設定 @author かろと @@ -123,9 +123,9 @@ CPrint::~CPrint( void ) BOOL CPrint::PrintDlg( PRINTDLG *pPD, MYDEVMODE *pMYDEVMODE ) { DEVMODE* pDEVMODE; - DEVNAMES* pDEVNAMES; /* プリンタ設定 DEVNAMES用*/ + DEVNAMES* pDEVNAMES; /* プリンター設定 DEVNAMES用*/ - // デフォルトプリンタが選択されていなければ、選択する + // デフォルトプリンターが選択されていなければ、選択する if ( m_hDevMode == NULL ) { if ( !GetDefaultPrinter( pMYDEVMODE ) ) { return FALSE; @@ -133,7 +133,7 @@ BOOL CPrint::PrintDlg( PRINTDLG *pPD, MYDEVMODE *pMYDEVMODE ) } // - // 現在のプリンタ設定の必要部分を変更 + // 現在のプリンター設定の必要部分を変更 // pDEVMODE = (DEVMODE*)::GlobalLock( m_hDevMode ); pDEVMODE->dmOrientation = pMYDEVMODE->dmOrientation; @@ -143,12 +143,12 @@ BOOL CPrint::PrintDlg( PRINTDLG *pPD, MYDEVMODE *pMYDEVMODE ) // PrintDlg()でReAllocされる事を考えて、呼び出す前にUnlock ::GlobalUnlock( m_hDevMode ); - /* プリンタダイアログを表示して、プリンタを選択 */ + /* プリンターダイアログを表示して、プリンターを選択 */ pPD->lStructSize = sizeof(*pPD); pPD->hDevMode = m_hDevMode; pPD->hDevNames = m_hDevNames; if( !::PrintDlg( pPD ) ){ - // プリンタを変更しなかった + // プリンターを変更しなかった return FALSE; } @@ -158,29 +158,29 @@ BOOL CPrint::PrintDlg( PRINTDLG *pPD, MYDEVMODE *pMYDEVMODE ) pDEVMODE = (DEVMODE*)::GlobalLock( m_hDevMode ); pDEVNAMES = (DEVNAMES*)::GlobalLock( m_hDevNames ); - // プリンタドライバ名 + // プリンタードライバー名 wcscpy_s( pMYDEVMODE->m_szPrinterDriverName, _countof(pMYDEVMODE->m_szPrinterDriverName), (const WCHAR*)pDEVNAMES + pDEVNAMES->wDriverOffset ); - // プリンタデバイス名 + // プリンターデバイス名 wcscpy_s( pMYDEVMODE->m_szPrinterDeviceName, _countof(pMYDEVMODE->m_szPrinterDeviceName), (const WCHAR*)pDEVNAMES + pDEVNAMES->wDeviceOffset ); - // プリンタポート名 + // プリンターポート名 wcscpy_s( pMYDEVMODE->m_szPrinterOutputName, _countof(pMYDEVMODE->m_szPrinterOutputName), (const WCHAR*)pDEVNAMES + pDEVNAMES->wOutputOffset ); - // プリンタから得られた、dmFieldsは変更しない - // プリンタがサポートしないbitをセットすると、プリンタドライバによっては、不安定な動きをする場合がある + // プリンターから得られた、dmFieldsは変更しない + // プリンターがサポートしないbitをセットすると、プリンタードライバーによっては、不安定な動きをする場合がある // pMYDEVMODEは、コピーしたいbitで1のものだけセットする - // →プリンタから得られた dmFieldsが1でないLength,Width情報に、間違った長さが入っているプリンタドライバでは、 + // →プリンターから得られた dmFieldsが1でないLength,Width情報に、間違った長さが入っているプリンタードライバーでは、 // 縦・横が正しく印刷されない不具合となっていた(2003.07.03 かろと) pMYDEVMODE->dmFields = pDEVMODE->dmFields & (DM_ORIENTATION | DM_PAPERSIZE | DM_PAPERLENGTH | DM_PAPERWIDTH); pMYDEVMODE->dmOrientation = pDEVMODE->dmOrientation; @@ -188,17 +188,17 @@ BOOL CPrint::PrintDlg( PRINTDLG *pPD, MYDEVMODE *pMYDEVMODE ) pMYDEVMODE->dmPaperLength = pDEVMODE->dmPaperLength; pMYDEVMODE->dmPaperWidth = pDEVMODE->dmPaperWidth; - DEBUG_TRACE( L" (入力/出力) デバイス ドライバ=[%s]\n", (WCHAR*)pDEVNAMES + pDEVNAMES->wDriverOffset ); + DEBUG_TRACE( L" (入力/出力) デバイス ドライバー=[%s]\n", (WCHAR*)pDEVNAMES + pDEVNAMES->wDriverOffset ); DEBUG_TRACE( L" (入力/出力) デバイス名=[%s]\n", (WCHAR*)pDEVNAMES + pDEVNAMES->wDeviceOffset ); DEBUG_TRACE( L"物理出力メディア (出力ポート) =[%s]\n", (WCHAR*)pDEVNAMES + pDEVNAMES->wOutputOffset ); - DEBUG_TRACE( L"デフォルトのプリンタか=[%d]\n", pDEVNAMES->wDefault ); + DEBUG_TRACE( L"デフォルトのプリンターか=[%d]\n", pDEVNAMES->wDefault ); ::GlobalUnlock( m_hDevMode ); ::GlobalUnlock( m_hDevNames ); return TRUE; } -/*! @brief デフォルトのプリンタを取得し、MYDEVMODE に設定 +/*! @brief デフォルトのプリンターを取得し、MYDEVMODE に設定 ** ** @param pMYDEVMODE [out] 印刷設定 */ @@ -206,7 +206,7 @@ BOOL CPrint::GetDefaultPrinter( MYDEVMODE* pMYDEVMODE ) { PRINTDLG pd; DEVMODE* pDEVMODE; - DEVNAMES* pDEVNAMES; /* プリンタ設定 DEVNAMES用*/ + DEVNAMES* pDEVNAMES; /* プリンター設定 DEVNAMES用*/ // 2009.08.08 印刷で用紙サイズ、横指定が効かない問題対応 syat //// すでに DEVMODEを取得済みなら、何もしない @@ -218,16 +218,16 @@ BOOL CPrint::GetDefaultPrinter( MYDEVMODE* pMYDEVMODE ) if( m_hDevMode == NULL ){ // // PRINTDLG構造体を初期化する(ダイアログは表示しないように) - // PrintDlg()でデフォルトプリンタのデバイス名などを取得する + // PrintDlg()でデフォルトプリンターのデバイス名などを取得する // memset_raw ( &pd, 0, sizeof(pd) ); pd.lStructSize = sizeof(pd); pd.Flags = PD_RETURNDEFAULT; if( !::PrintDlg( &pd ) ){ - pMYDEVMODE->m_bPrinterNotFound = TRUE; /* プリンタがなかったフラグ */ + pMYDEVMODE->m_bPrinterNotFound = TRUE; /* プリンターがなかったフラグ */ return FALSE; } - pMYDEVMODE->m_bPrinterNotFound = FALSE; /* プリンタがなかったフラグ */ + pMYDEVMODE->m_bPrinterNotFound = FALSE; /* プリンターがなかったフラグ */ /* 初期化 */ memset_raw( pMYDEVMODE, 0, sizeof(*pMYDEVMODE) ); @@ -239,29 +239,29 @@ BOOL CPrint::GetDefaultPrinter( MYDEVMODE* pMYDEVMODE ) pDEVMODE = (DEVMODE*)::GlobalLock( m_hDevMode ); pDEVNAMES = (DEVNAMES*)::GlobalLock( m_hDevNames ); - // プリンタドライバ名 + // プリンタードライバー名 wcscpy_s( pMYDEVMODE->m_szPrinterDriverName, _countof(pMYDEVMODE->m_szPrinterDriverName), (const WCHAR*)pDEVNAMES + pDEVNAMES->wDriverOffset ); - // プリンタデバイス名 + // プリンターデバイス名 wcscpy_s( pMYDEVMODE->m_szPrinterDeviceName, _countof(pMYDEVMODE->m_szPrinterDeviceName), (const WCHAR*)pDEVNAMES + pDEVNAMES->wDeviceOffset ); - // プリンタポート名 + // プリンターポート名 wcscpy_s( pMYDEVMODE->m_szPrinterOutputName, _countof(pMYDEVMODE->m_szPrinterOutputName), (const WCHAR*)pDEVNAMES + pDEVNAMES->wOutputOffset ); - // プリンタから得られた、dmFieldsは変更しない - // プリンタがサポートしないbitをセットすると、プリンタドライバによっては、不安定な動きをする場合がある + // プリンターから得られた、dmFieldsは変更しない + // プリンターがサポートしないbitをセットすると、プリンタードライバーによっては、不安定な動きをする場合がある // pMYDEVMODEは、コピーしたいbitで1のものだけコピーする - // →プリンタから得られた dmFieldsが1でないLength,Width情報に、間違った長さが入っているプリンタドライバでは、 + // →プリンターから得られた dmFieldsが1でないLength,Width情報に、間違った長さが入っているプリンタードライバーでは、 // 縦・横が正しく印刷されない不具合となっていた(2003.07.03 かろと) pMYDEVMODE->dmFields = pDEVMODE->dmFields & (DM_ORIENTATION | DM_PAPERSIZE | DM_PAPERLENGTH | DM_PAPERWIDTH); pMYDEVMODE->dmOrientation = pDEVMODE->dmOrientation; @@ -269,10 +269,10 @@ BOOL CPrint::GetDefaultPrinter( MYDEVMODE* pMYDEVMODE ) pMYDEVMODE->dmPaperLength = pDEVMODE->dmPaperLength; pMYDEVMODE->dmPaperWidth = pDEVMODE->dmPaperWidth; - DEBUG_TRACE( L" (入力/出力) デバイス ドライバ=[%s]\n", (WCHAR*)pDEVNAMES + pDEVNAMES->wDriverOffset ); + DEBUG_TRACE( L" (入力/出力) デバイス ドライバー=[%s]\n", (WCHAR*)pDEVNAMES + pDEVNAMES->wDriverOffset ); DEBUG_TRACE( L" (入力/出力) デバイス名=[%s]\n", (WCHAR*)pDEVNAMES + pDEVNAMES->wDeviceOffset ); DEBUG_TRACE( L"物理出力メディア (出力ポート) =[%s]\n", (WCHAR*)pDEVNAMES + pDEVNAMES->wOutputOffset ); - DEBUG_TRACE( L"デフォルトのプリンタか=[%d]\n", pDEVNAMES->wDefault ); + DEBUG_TRACE( L"デフォルトのプリンターか=[%d]\n", pDEVNAMES->wDefault ); ::GlobalUnlock( m_hDevMode ); ::GlobalUnlock( m_hDevNames ); @@ -280,7 +280,7 @@ BOOL CPrint::GetDefaultPrinter( MYDEVMODE* pMYDEVMODE ) } /*! -** @brief プリンタをオープンし、hDCを作成する +** @brief プリンターをオープンし、hDCを作成する */ HDC CPrint::CreateDC( MYDEVMODE* pMYDEVMODE, @@ -291,23 +291,23 @@ HDC CPrint::CreateDC( HANDLE hPrinter = NULL; DEVMODE* pDEVMODE; - // プリンタが選択されていなければ、NULLを返す + // プリンターが選択されていなければ、NULLを返す if ( m_hDevMode == NULL ) { return NULL; } // - // OpenPrinter()で、デバイス名でプリンタハンドルを取得 + // OpenPrinter()で、デバイス名でプリンターハンドルを取得 // if( !::OpenPrinter( - pMYDEVMODE->m_szPrinterDeviceName, /* プリンタデバイス名 */ - &hPrinter, /* プリンタハンドルのポインタ */ + pMYDEVMODE->m_szPrinterDeviceName, /* プリンターデバイス名 */ + &hPrinter, /* プリンターハンドルのポインタ */ NULL ) ){ auto_sprintf( pszErrMsg, LS(STR_ERR_CPRINT01), - pMYDEVMODE->m_szPrinterDeviceName /* プリンタデバイス名 */ + pMYDEVMODE->m_szPrinterDeviceName /* プリンターデバイス名 */ ); goto end_of_func; } @@ -319,26 +319,26 @@ HDC CPrint::CreateDC( pDEVMODE->dmPaperWidth = pMYDEVMODE->dmPaperWidth; // - //DocumentProperties()でアプリケーション独自のプリンタ設定に変更する + //DocumentProperties()でアプリケーション独自のプリンター設定に変更する // ::DocumentProperties( NULL, hPrinter, - pMYDEVMODE->m_szPrinterDeviceName /* プリンタデバイス名 */, + pMYDEVMODE->m_szPrinterDeviceName /* プリンターデバイス名 */, pDEVMODE, pDEVMODE, DM_OUT_BUFFER | DM_IN_BUFFER ); /* 指定デバイスに対するデバイス コンテキストを作成します。 */ hdc = ::CreateDC( - pMYDEVMODE->m_szPrinterDriverName, /* プリンタドライバ名 */ - pMYDEVMODE->m_szPrinterDeviceName, /* プリンタデバイス名 */ - pMYDEVMODE->m_szPrinterOutputName, /* プリンタポート名 */ + pMYDEVMODE->m_szPrinterDriverName, /* プリンタードライバー名 */ + pMYDEVMODE->m_szPrinterDeviceName, /* プリンターデバイス名 */ + pMYDEVMODE->m_szPrinterOutputName, /* プリンターポート名 */ pDEVMODE ); // pMYDEVMODEは、コピーしたいbitで1のものだけコピーする - // →プリンタから得られた dmFieldsが1でないLength,Width情報に、間違った長さが入っているプリンタドライバでは、 + // →プリンターから得られた dmFieldsが1でないLength,Width情報に、間違った長さが入っているプリンタードライバーでは、 // 縦・横が正しく印刷されない不具合となっていた(2003.07.03 かろと) pMYDEVMODE->dmFields = pDEVMODE->dmFields & (DM_ORIENTATION | DM_PAPERSIZE | DM_PAPERLENGTH | DM_PAPERWIDTH); pMYDEVMODE->dmOrientation = pDEVMODE->dmOrientation; @@ -383,7 +383,7 @@ BOOL CPrint::GetPrintMetrics( return FALSE; } - /* CreateDC実行によって得られた実際のプリンタの用紙の幅、高さを取得 */ + /* CreateDC実行によって得られた実際のプリンターの用紙の幅、高さを取得 */ if( !GetPaperSize( pnPaperAllWidth, pnPaperAllHeight, pMYDEVMODE ) ){ *pnPaperAllWidth = *pnPaperWidth + 2 * (*pnPaperOffsetLeft); *pnPaperAllHeight = *pnPaperHeight + 2 * (*pnPaperOffsetTop); @@ -495,7 +495,7 @@ BOOL CPrint::PrintOpen( auto_sprintf( pszErrMsg, LS(STR_ERR_CPRINT02), - pMYDEVMODE->m_szPrinterDeviceName /* プリンタデバイス名 */ + pMYDEVMODE->m_szPrinterDeviceName /* プリンターデバイス名 */ ); bRet = FALSE; goto end_of_func; @@ -556,7 +556,7 @@ const PAPER_INFO* CPrint::FindPaperInfo( int id ) /*! @brief PRINTSETTINGの初期化 - ここではm_mdmDevModeの プリンタ設定は取得・初期化しない + ここではm_mdmDevModeの プリンター設定は取得・初期化しない @date 2006.08.14 Moca Initializeから名称変更。初期化単位をShareDate全てからPRINTSETTING単位に変更. 本関数からDLLSHAREDATAへアクセスする代わりに,CShareDataからPPRINTSETTING単位で逐一渡してもらう. @@ -584,8 +584,8 @@ void CPrint::SettingInitialize( PRINTSETTING& pPrintSetting, const WCHAR* settin pPrintSetting.m_nPrintMarginRX = 100; /* 印刷用紙マージン 右(1/10mm単位) */ pPrintSetting.m_nPrintPaperOrientation = DMORIENT_PORTRAIT; /* 用紙方向 DMORIENT_PORTRAIT (1) または DMORIENT_LANDSCAPE (2) */ pPrintSetting.m_nPrintPaperSize = DMPAPER_A4; /* 用紙サイズ */ - /* プリンタ設定 DEVMODE用 */ - /* プリンタ設定を取得するのはコストがかかるので、後ほど */ + /* プリンター設定 DEVMODE用 */ + /* プリンター設定を取得するのはコストがかかるので、後ほど */ // m_cPrint.GetDefaultPrinterInfo( &(pPrintSetting.m_mdmDevMode) ); pPrintSetting.m_bHeaderUse[0] = TRUE; pPrintSetting.m_bHeaderUse[1] = FALSE; diff --git a/sakura_core/print/CPrint.h b/sakura_core/print/CPrint.h index 3b544d50e1..5b67d8b184 100644 --- a/sakura_core/print/CPrint.h +++ b/sakura_core/print/CPrint.h @@ -39,10 +39,10 @@ #include "basis/primitive.h" struct MYDEVMODE { - BOOL m_bPrinterNotFound; /* プリンタがなかったフラグ */ - WCHAR m_szPrinterDriverName[_MAX_PATH + 1]; // プリンタドライバ名 - WCHAR m_szPrinterDeviceName[_MAX_PATH + 1]; // プリンタデバイス名 - WCHAR m_szPrinterOutputName[_MAX_PATH + 1]; // プリンタポート名 + BOOL m_bPrinterNotFound; /* プリンターがなかったフラグ */ + WCHAR m_szPrinterDriverName[_MAX_PATH + 1]; // プリンタードライバー名 + WCHAR m_szPrinterDeviceName[_MAX_PATH + 1]; // プリンターデバイス名 + WCHAR m_szPrinterOutputName[_MAX_PATH + 1]; // プリンターポート名 DWORD dmFields; short dmOrientation; short dmPaperSize; @@ -109,7 +109,7 @@ struct PRINTSETTING { bool m_bPrintKinsokuKuto; //!< 句読点のぶらさげ //@@@ 2002.04.17 MIK bool m_bPrintLineNumber; /*!< 行番号を印刷する */ - MYDEVMODE m_mdmDevMode; /*!< プリンタ設定 DEVMODE用 */ + MYDEVMODE m_mdmDevMode; /*!< プリンター設定 DEVMODE用 */ BOOL m_bHeaderUse[3]; /* ヘッダーが使われているか? */ EDIT_CHAR m_szHeaderForm[3][HEADER_MAX]; /* 0:左寄せヘッダー。1:中央寄せヘッダー。2:右寄せヘッダー。*/ BOOL m_bFooterUse[3]; /* フッターが使われているか? */ @@ -171,8 +171,8 @@ class CPrint /* || Attributes & Operations */ - BOOL GetDefaultPrinter( MYDEVMODE *pMYDEVMODE ); /* デフォルトのプリンタ情報を取得 */ - BOOL PrintDlg( PRINTDLG *pd, MYDEVMODE *pMYDEVMODE ); /* プリンタ情報を取得 */ + BOOL GetDefaultPrinter( MYDEVMODE *pMYDEVMODE ); /* デフォルトのプリンター情報を取得 */ + BOOL PrintDlg( PRINTDLG *pd, MYDEVMODE *pMYDEVMODE ); /* プリンター情報を取得 */ /* 印刷/プレビューに必要な情報を取得 */ BOOL GetPrintMetrics( MYDEVMODE* pMYDEVMODE, @@ -208,7 +208,7 @@ class CPrint /* || メンバ変数 */ - HGLOBAL m_hDevMode; //!< 現在プリンタのDEVMODEへのメモリハンドル - HGLOBAL m_hDevNames; //!< 現在プリンタのDEVNAMESへのメモリハンドル + HGLOBAL m_hDevMode; //!< 現在プリンターのDEVMODEへのメモリハンドル + HGLOBAL m_hDevNames; //!< 現在プリンターのDEVNAMESへのメモリハンドル }; #endif /* SAKURA_CPRINT_CB147282_3673_4A39_9B0A_C5C323C39C56_H_ */ diff --git a/sakura_core/print/CPrintPreview.cpp b/sakura_core/print/CPrintPreview.cpp index 05bf6451b3..3c58e8a6e0 100644 --- a/sakura_core/print/CPrintPreview.cpp +++ b/sakura_core/print/CPrintPreview.cpp @@ -71,7 +71,7 @@ using namespace std; #define COMPAT_BMP_BASE 1 /* COMPAT_BMP_SCALEピクセル幅を複写する画面ピクセル幅 */ #define COMPAT_BMP_SCALE 2 /* 互換BMPのCOMPAT_BMP_BASEに対する倍率(1以上の整数倍) */ -CPrint CPrintPreview::m_cPrint; //!< 現在のプリンタ情報 2003.05.02 かろと +CPrint CPrintPreview::m_cPrint; //!< 現在のプリンター情報 2003.05.02 かろと /*! コンストラクタ 印刷プレビューを表示するために必要な情報を初期化、領域確保。 @@ -163,7 +163,7 @@ LRESULT CPrintPreview::OnPaint( nToolBarHeight = rc.bottom - rc.top; } - // プリンタ情報の表示 -> IDD_PRINTPREVIEWBAR右上のSTATICへ + // プリンター情報の表示 -> IDD_PRINTPREVIEWBAR右上のSTATICへ WCHAR szText[1024]; ::DlgItem_SetText( m_hwndPrintPreviewBar, @@ -723,7 +723,7 @@ void CPrintPreview::OnChangePrintSetting( void ) m_bLockSetting = true; // 2009.08.08 印刷で用紙サイズ、横指定が効かない問題対応 syat - /* DEVMODE構造体が設定されていなかったら既定のプリンタを設定 */ + /* DEVMODE構造体が設定されていなかったら既定のプリンターを設定 */ if( m_pPrintSetting->m_mdmDevMode.m_szPrinterDeviceName[0] == L'\0' ){ GetDefaultPrinterInfo(); } @@ -748,7 +748,7 @@ void CPrintPreview::OnChangePrintSetting( void ) /* 印刷/プレビューに必要な情報を取得 */ WCHAR szErrMsg[1024]; if( !m_cPrint.GetPrintMetrics( - &m_pPrintSetting->m_mdmDevMode, /* プリンタ設定 DEVMODE用*/ + &m_pPrintSetting->m_mdmDevMode, /* プリンター設定 DEVMODE用*/ &m_nPreview_PaperAllWidth, /* 用紙幅 */ &m_nPreview_PaperAllHeight, /* 用紙高さ */ &m_nPreview_PaperWidth, /* 用紙印刷有効幅 */ @@ -791,7 +791,7 @@ void CPrintPreview::OnChangePrintSetting( void ) m_pPrintSetting->m_nPrintPaperSize = m_pPrintSetting->m_mdmDevMode.dmPaperSize; m_pPrintSetting->m_nPrintPaperOrientation = m_pPrintSetting->m_mdmDevMode.dmOrientation; // 用紙方向の反映忘れを修正 2003/07/03 かろと - // プリンタ設定はここで変更されるがそれぞれのウィンドウで再設定するので更新メッセージは投げない + // プリンター設定はここで変更されるがそれぞれのウィンドウで再設定するので更新メッセージは投げない *m_pPrintSettingOrg = *m_pPrintSetting; m_nPreview_ViewMarginLeft = 8 * 10; /* 印刷プレビュー:ビュー左端と用紙の間隔(1/10mm単位) */ @@ -1047,7 +1047,7 @@ void CPrintPreview::OnPrint( void ) return; } - /* プリンタに渡すジョブ名を生成 */ + /* プリンターに渡すジョブ名を生成 */ if( ! m_pParentWnd->GetDocument()->m_cDocFile.GetFilePathClass().IsValidPath() ){ /* 現在編集中のファイルのパス */ wcscpy( szJobName, LS(STR_NO_TITLE2) ); }else{ @@ -1057,7 +1057,7 @@ void CPrintPreview::OnPrint( void ) auto_snprintf_s( szJobName, _countof(szJobName), L"%s%s", szFileName, szExt ); } - /* 印刷範囲を指定できるプリンタダイアログを作成 */ + /* 印刷範囲を指定できるプリンターダイアログを作成 */ // 2003.05.02 かろと PRINTDLG pd; memset_raw( &pd, 0, sizeof(pd) ); @@ -1117,7 +1117,7 @@ void CPrintPreview::OnPrint( void ) /* 印刷 ジョブ開始 */ if( !m_cPrint.PrintOpen( szJobName, - &m_pPrintSetting->m_mdmDevMode, /* プリンタ設定 DEVMODE用*/ + &m_pPrintSetting->m_mdmDevMode, /* プリンター設定 DEVMODE用*/ &hdc, szErrMsg /* エラーメッセージ格納場所 */ ) ){ diff --git a/sakura_core/print/CPrintPreview.h b/sakura_core/print/CPrintPreview.h index 110774bd47..f3b94c996f 100644 --- a/sakura_core/print/CPrintPreview.h +++ b/sakura_core/print/CPrintPreview.h @@ -268,8 +268,8 @@ class CPrintPreview { protected: STypeConfig m_typePrint; - // プレビューから出ても現在のプリンタ情報を記憶しておけるようにstaticにする 2003.05.02 かろと - static CPrint m_cPrint; //!< 現在のプリンタ情報 + // プレビューから出ても現在のプリンター情報を記憶しておけるようにstaticにする 2003.05.02 かろと + static CPrint m_cPrint; //!< 現在のプリンター情報 bool m_bLockSetting; // 設定のロック bool m_bDemandUpdateSetting; // 設定の更新要求 diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index 51c7a69785..65a995671d 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -340,7 +340,7 @@ BEGIN PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,167,1,39,14 CONTROL "滑らか(&A)",IDC_CHECK_ANTIALIAS,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,207,3,43,10 PUSHBUTTON "戻る(&Q)",IDCANCEL,167,16,39,14 - PUSHBUTTON "プリンタ(&R)",IDC_BUTTON_PRINTERSELECT,208,16,40,14 + PUSHBUTTON "プリンター(&R)",IDC_BUTTON_PRINTERSELECT,208,16,40,14 ICON IDI_PRINTER,IDC_STATIC,251,3,11,9,SS_REALSIZEIMAGE LTEXT "Static",IDC_STATIC_PRNDEV,263,4,137,10 LTEXT "Static",IDC_STATIC_PAPER,251,19,149,10 @@ -3569,7 +3569,7 @@ BEGIN STR_EDITWND_MENU_LS "入力改行コード指定(L&S)" STR_EDITWND_MENU_PS "入力改行コード指定(&PS)" STR_ERR_DLGEDITWND13 "文字:\t\t%ls (%s)\n\nSJIS:\t\t%s\nJIS:\t\t%s\nEUC:\t\t%s\nLatin1:\t\t%s\nUTF-16:\t\t%s\nUTF-8:\t\t%s\nCESU-8:\t\t%s" - STR_ERR_DLGEDITWND14 "印刷プレビューを実行する前に、プリンタをインストールしてください。\n" + STR_ERR_DLGEDITWND14 "印刷プレビューを実行する前に、プリンターをインストールしてください。\n" STR_MENU_OUTPUT "%s アウトプット" STR_ERR_DLGEDITWND20 "99999 L 9999 C" STR_ERR_DLGEDITWND21 "CFLF" @@ -3648,12 +3648,12 @@ BEGIN STR_ERR_DLGPPA5 "未定義のエラー\nError_CD=%d\n%s" STR_ERR_DLGPPA6 "エラー情報が不正" STR_ERR_DLGPPA7 "PPA実行エラー" - STR_ERR_CPRINT01 "OpenPrinter()に失敗。\nプリンタデバイス名=[%s]" - STR_ERR_CPRINT02 "StartDoc()に失敗。\nプリンタデバイス名=[%s]" + STR_ERR_CPRINT01 "OpenPrinter()に失敗。\nプリンターデバイス名=[%s]" + STR_ERR_CPRINT02 "StartDoc()に失敗。\nプリンターデバイス名=[%s]" STR_ERR_CPRINT03 "不明" STR_ERR_DLGPRNPRVW1 "横" STR_ERR_DLGPRNPRVW2 "縦" - STR_ERR_DLGPRNPRVW3 "現在のプリンタ %s では、\n指定された用紙 %s は使用できません。\n利用可能な用紙 %s に変更しました。" + STR_ERR_DLGPRNPRVW3 "現在のプリンター %s では、\n指定された用紙 %s は使用できません。\n利用可能な用紙 %s に変更しました。" END STRINGTABLE diff --git a/sakura_core/uiparts/CMenuDrawer.cpp b/sakura_core/uiparts/CMenuDrawer.cpp index eb12a77163..8941fa56a3 100644 --- a/sakura_core/uiparts/CMenuDrawer.cpp +++ b/sakura_core/uiparts/CMenuDrawer.cpp @@ -67,7 +67,7 @@ CMenuDrawer::CMenuDrawer() // 以下の登録はツールバーだけでなくアイコンをもつすべてのメニューで利用されている // 数字はビットマップリソースのIDB_MYTOOLに登録されているアイコンの先頭からの順番のようである // アイコンをもっと登録できるように横幅を16dotsx218=2048dotsに拡大 -// 縦も15dotsから16dotsにして「プリンタ」アイコンや「ヘルプ1」の、下が欠けている部分を補ったが15dotsまでしか表示されないらしく効果なし +// 縦も15dotsから16dotsにして「プリンター」アイコンや「ヘルプ1」の、下が欠けている部分を補ったが15dotsまでしか表示されないらしく効果なし // → // Sept. 17, 2000 縦16dot目を表示できるようにした // 修正したファイルにはJEPRO_16thdotとコメントしてあるのでもし間違っていたらそれをキーワードにして検索してください(Sept. 28, 2000現在 6箇所変更) diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index b3912fef0a..f29fa35ad2 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -2999,9 +2999,9 @@ void CEditWnd::PrintPreviewModeONOFF( void ) GetDocument()->m_cDocType.GetDocumentAttribute().m_nCurrentPrintSetting] ); - // プリンタの情報を取得。 + // プリンターの情報を取得。 - /* 現在のデフォルトプリンタの情報を取得 */ + /* 現在のデフォルトプリンターの情報を取得 */ BOOL bRes; bRes = m_pPrintPreview->GetDefaultPrinterInfo(); if( !bRes ){ From d8cfd63fc40e31ef2b8f6c303e355c471cd38c77 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Thu, 5 May 2022 16:09:58 +0900 Subject: [PATCH 0987/1024] =?UTF-8?q?=E3=80=8C=E3=83=97=E3=83=AA=E3=83=B3?= =?UTF-8?q?=E3=82=BF=E3=83=BC=E3=80=8D=E3=81=AE=E3=82=AB=E3=82=BF=E3=82=AB?= =?UTF-8?q?=E3=83=8A=E8=A1=A8=E8=A8=98=E5=A4=89=E6=9B=B4=E3=81=AB=E4=BC=B4?= =?UTF-8?q?=E3=81=86=E3=80=81=E5=8D=B0=E5=88=B7=E3=83=97=E3=83=AC=E3=83=93?= =?UTF-8?q?=E3=83=A5=E3=83=BC=E3=83=90=E3=83=BC=E3=81=AE=E4=BD=8D=E7=BD=AE?= =?UTF-8?q?=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/sakura_rc.rc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index 65a995671d..351629970e 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -338,12 +338,12 @@ BEGIN PUSHBUTTON "拡大(&I)",IDC_BUTTON_ZOOMUP,90,16,30,14 LTEXT "999/999",IDC_STATIC_ZOOM,131,19,35,10 PUSHBUTTON "ヘルプ(&H)",IDC_BUTTON_HELP,167,1,39,14 - CONTROL "滑らか(&A)",IDC_CHECK_ANTIALIAS,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,207,3,43,10 + CONTROL "滑らか(&A)",IDC_CHECK_ANTIALIAS,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,208,3,44,10 PUSHBUTTON "戻る(&Q)",IDCANCEL,167,16,39,14 - PUSHBUTTON "プリンター(&R)",IDC_BUTTON_PRINTERSELECT,208,16,40,14 - ICON IDI_PRINTER,IDC_STATIC,251,3,11,9,SS_REALSIZEIMAGE - LTEXT "Static",IDC_STATIC_PRNDEV,263,4,137,10 - LTEXT "Static",IDC_STATIC_PAPER,251,19,149,10 + PUSHBUTTON "プリンター(&R)",IDC_BUTTON_PRINTERSELECT,208,16,44,14 + ICON IDI_PRINTER,IDC_STATIC,254,3,11,9,SS_REALSIZEIMAGE + LTEXT "Static",IDC_STATIC_PRNDEV,266,4,137,10 + LTEXT "Static",IDC_STATIC_PAPER,254,19,149,10 END IDD_PRINTSETTING DIALOGEX 0, 0, 302, 257 From 6b863bf8f68c17b11f8c865ea383567489d76b4a Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sat, 7 May 2022 22:23:55 +0900 Subject: [PATCH 0988/1024] =?UTF-8?q?GlobalLock=20=E3=81=AE=E5=9E=8B?= =?UTF-8?q?=E5=A4=89=E6=8F=9B=E3=83=9E=E3=82=AF=E3=83=AD=E3=82=92=E5=89=8A?= =?UTF-8?q?=E9=99=A4=E3=81=99=E3=82=8B=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/StdAfx.h | 4 ---- sakura_core/_os/CClipboard.cpp | 16 ++++++++-------- sakura_core/dlg/CDlgProperty.cpp | 2 +- 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/sakura_core/StdAfx.h b/sakura_core/StdAfx.h index 3b6c3c027d..39061c43de 100644 --- a/sakura_core/StdAfx.h +++ b/sakura_core/StdAfx.h @@ -109,10 +109,6 @@ //その他 #define malloc_char (char*)malloc -#define GlobalLockChar (char*)::GlobalLock -#define GlobalLockUChar (unsigned char*)::GlobalLock -#define GlobalLockWChar (wchar_t*)::GlobalLock -#define GlobalLockBYTE (BYTE*)::GlobalLock //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ は前行の直前に追加の宣言を挿入します。 diff --git a/sakura_core/_os/CClipboard.cpp b/sakura_core/_os/CClipboard.cpp index fa0d6806a0..6353f7fe79 100644 --- a/sakura_core/_os/CClipboard.cpp +++ b/sakura_core/_os/CClipboard.cpp @@ -86,7 +86,7 @@ bool CClipboard::SetText( nTextLen + 1 ); if( hgClipText ){ - char* pszClip = GlobalLockChar( hgClipText ); + char* pszClip = static_cast(::GlobalLock(hgClipText)); memcpy( pszClip, pszText, nTextLen ); pszClip[nTextLen] = '\0'; ::GlobalUnlock( hgClipText ); @@ -106,7 +106,7 @@ bool CClipboard::SetText( if( !hgClipText )break; //確保した領域にデータをコピー - wchar_t* pszClip = GlobalLockWChar( hgClipText ); + wchar_t* pszClip = static_cast(::GlobalLock(hgClipText)); wmemcpy( pszClip, pData, nDataLen ); //データ pszClip[nDataLen] = L'\0'; //終端ヌル ::GlobalUnlock( hgClipText ); @@ -135,7 +135,7 @@ bool CClipboard::SetText( if( !hgClipSakura )break; //確保した領域にデータをコピー - BYTE* pClip = GlobalLockBYTE( hgClipSakura ); + BYTE* pClip = static_cast(::GlobalLock(hgClipSakura)); *((int*)pClip) = nDataLen; pClip += sizeof(int); //データの長さ wmemcpy( (wchar_t*)pClip, pData, nDataLen ); pClip += nDataLen*sizeof(wchar_t); //データ *((wchar_t*)pClip) = L'\0'; pClip += sizeof(wchar_t); //終端ヌル @@ -157,7 +157,7 @@ bool CClipboard::SetText( 1 ); if( hgClipMSDEVColumn ){ - BYTE* pClip = GlobalLockBYTE( hgClipMSDEVColumn ); + BYTE* pClip = static_cast(::GlobalLock(hgClipMSDEVColumn)); pClip[0] = 0; ::GlobalUnlock( hgClipMSDEVColumn ); SetClipboardData( uFormat, hgClipMSDEVColumn ); @@ -241,7 +241,7 @@ bool CClipboard::SetHtmlText(const CNativeW& cmemBUf) if( !hgClipText ) return false; //確保した領域にデータをコピー - char* pszClip = GlobalLockChar( hgClipText ); + char* pszClip = static_cast(::GlobalLock(hgClipText)); memcpy_raw( pszClip, cmemHeader.GetStringPtr(), cmemHeader.GetStringLength() ); //データ memcpy_raw( pszClip + cmemHeader.GetStringLength(), cmemUtf8.GetStringPtr(), cmemUtf8.GetStringLength() ); //データ memcpy_raw( pszClip + cmemHeader.GetStringLength() + cmemUtf8.GetStringLength(), cmemFooter.GetStringPtr(), cmemFooter.GetStringLength() ); //データ @@ -319,7 +319,7 @@ bool CClipboard::GetText(CNativeW* cmemBuf, bool* pbColumnSelect, bool* pbLineSe } if( hUnicode != NULL ){ //DWORD nLen = GlobalSize(hUnicode); - wchar_t* szData = GlobalLockWChar(hUnicode); + wchar_t* szData = static_cast(::GlobalLock(hUnicode)); cmemBuf->SetString( szData ); ::GlobalUnlock(hUnicode); return true; @@ -332,7 +332,7 @@ bool CClipboard::GetText(CNativeW* cmemBuf, bool* pbColumnSelect, bool* pbLineSe hText = GetClipboardData( CF_OEMTEXT ); } if( hText != NULL ){ - char* szData = GlobalLockChar(hText); + char* szData = static_cast(::GlobalLock(hText)); //SJIS→UNICODE CMemory cmemSjis( szData, GlobalSize(hText) ); CNativeW cmemUni; @@ -515,7 +515,7 @@ bool CClipboard::SetClipboradByFormat(const CStringRef& cstr, const wchar_t* pFo if( !hgClipText ){ return false; } - char* pszClip = GlobalLockChar( hgClipText ); + char* pszClip = static_cast(::GlobalLock(hgClipText)); memcpy( pszClip, pBuf, nTextByteLen ); if( nulLen ){ memset( &pszClip[nTextByteLen], 0, nulLen ); diff --git a/sakura_core/dlg/CDlgProperty.cpp b/sakura_core/dlg/CDlgProperty.cpp index ea85c49a24..ca8eed667b 100644 --- a/sakura_core/dlg/CDlgProperty.cpp +++ b/sakura_core/dlg/CDlgProperty.cpp @@ -259,7 +259,7 @@ void CDlgProperty::SetData( void ) in.Close(); goto end_of_CodeTest; } - pBuf = GlobalLockChar( hgData ); + pBuf = static_cast(::GlobalLock(hgData)); in.Read( pBuf, nBufLen ); in.Close(); From 968427d256e871be700f0c16c38e19d63ab03548 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sat, 7 May 2022 22:27:17 +0900 Subject: [PATCH 0989/1024] =?UTF-8?q?=E4=BD=BF=E3=82=8F=E3=82=8C=E3=81=A6?= =?UTF-8?q?=E3=81=84=E3=81=AA=E3=81=84=E3=83=9E=E3=82=AF=E3=83=AD=20malloc?= =?UTF-8?q?=5Fchar=20=E3=82=92=E5=89=8A=E9=99=A4=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/StdAfx.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/sakura_core/StdAfx.h b/sakura_core/StdAfx.h index 39061c43de..971b0809ab 100644 --- a/sakura_core/StdAfx.h +++ b/sakura_core/StdAfx.h @@ -107,8 +107,5 @@ // プリコンパイルの有無がビルドパフォーマンスに大きく影響するため。 #include "env/DLLSHAREDATA.h" -//その他 -#define malloc_char (char*)malloc - //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ は前行の直前に追加の宣言を挿入します。 From e669c884161288e0726687b6bb76ba2fef746d2e Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sun, 8 May 2022 14:23:07 +0900 Subject: [PATCH 0990/1024] =?UTF-8?q?CClipboard=20=E5=8D=98=E4=BD=93?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=81=AE=E6=BA=96=E5=82=99=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * EnumClipboardFormats, GlobalAlloc, GlobalLock の呼び出しを仮想メンバ関数でラップする。 * GetDataType を private で non-static なメンバ関数に変更する。 --- sakura_core/_os/CClipboard.cpp | 44 ++++++++++++++++++++-------------- sakura_core/_os/CClipboard.h | 6 ++++- 2 files changed, 31 insertions(+), 19 deletions(-) diff --git a/sakura_core/_os/CClipboard.cpp b/sakura_core/_os/CClipboard.cpp index 6353f7fe79..0824bee384 100644 --- a/sakura_core/_os/CClipboard.cpp +++ b/sakura_core/_os/CClipboard.cpp @@ -152,7 +152,7 @@ bool CClipboard::SetText( if( bColumnSelect ){ UINT uFormat = ::RegisterClipboardFormat( L"MSDEVColumnSelect" ); if( 0 != uFormat ){ - hgClipMSDEVColumn = ::GlobalAlloc( + hgClipMSDEVColumn = GlobalAlloc( GMEM_MOVEABLE | GMEM_DDESHARE, 1 ); @@ -170,7 +170,7 @@ bool CClipboard::SetText( if( bLineSelect ){ UINT uFormat = ::RegisterClipboardFormat( L"MSDEVLineSelect" ); if( 0 != uFormat ){ - hgClipMSDEVLine = ::GlobalAlloc( + hgClipMSDEVLine = GlobalAlloc( GMEM_MOVEABLE | GMEM_DDESHARE, 1 ); @@ -186,7 +186,7 @@ bool CClipboard::SetText( if( bLineSelect ){ UINT uFormat = ::RegisterClipboardFormat( L"VisualStudioEditorOperationsLineCutCopyClipboardTag" ); if( 0 != uFormat ){ - hgClipMSDEVLine2 = ::GlobalAlloc( + hgClipMSDEVLine2 = GlobalAlloc( GMEM_MOVEABLE | GMEM_DDESHARE, 1 ); @@ -276,7 +276,7 @@ bool CClipboard::GetText(CNativeW* cmemBuf, bool* pbColumnSelect, bool* pbLineSe //矩形選択や行選択のデータがあれば取得 if( NULL != pbColumnSelect || NULL != pbLineSelect ){ UINT uFormat = 0; - while( ( uFormat = ::EnumClipboardFormats( uFormat ) ) != 0 ){ + while( ( uFormat = EnumClipboardFormats( uFormat ) ) != 0 ){ // Jul. 2, 2005 genta : check return value of GetClipboardFormatName WCHAR szFormatName[128]; if( ::GetClipboardFormatName( uFormat, szFormatName, _countof(szFormatName) - 1 ) ){ @@ -425,7 +425,7 @@ static CLIPFORMAT GetClipFormat(const wchar_t* pFormatName) bool CClipboard::IsIncludeClipboradFormat(const wchar_t* pFormatName) { CLIPFORMAT uFormat = GetClipFormat(pFormatName); - if( ::IsClipboardFormatAvailable(uFormat) ){ + if( IsClipboardFormatAvailable(uFormat) ){ return true; } return false; @@ -508,7 +508,7 @@ bool CClipboard::SetClipboradByFormat(const CStringRef& cstr, const wchar_t* pFo case 0: nulLen = 0; break; default: nulLen = 0; break; } - HGLOBAL hgClipText = ::GlobalAlloc( + HGLOBAL hgClipText = GlobalAlloc( GMEM_MOVEABLE | GMEM_DDESHARE, nTextByteLen + nulLen ); @@ -521,7 +521,7 @@ bool CClipboard::SetClipboradByFormat(const CStringRef& cstr, const wchar_t* pFo memset( &pszClip[nTextByteLen], 0, nulLen ); } ::GlobalUnlock( hgClipText ); - ::SetClipboardData( uFormat, hgClipText ); + SetClipboardData( uFormat, hgClipText ); return true; } @@ -563,7 +563,7 @@ bool CClipboard::GetClipboradByFormat(CNativeW& mem, const wchar_t* pFormatName, if( uFormat == (CLIPFORMAT)-1 ){ return false; } - if( !::IsClipboardFormatAvailable(uFormat) ){ + if( !IsClipboardFormatAvailable(uFormat) ){ return false; } if( nMode == -2 ){ @@ -576,10 +576,10 @@ bool CClipboard::GetClipboradByFormat(CNativeW& mem, const wchar_t* pFormatName, } return bret; } - HGLOBAL hClipData = ::GetClipboardData( uFormat ); + HGLOBAL hClipData = GetClipboardData( uFormat ); if( hClipData != NULL ){ bool retVal = true; - const BYTE* pData = (BYTE*)::GlobalLock( hClipData ); + const BYTE* pData = (BYTE*)GlobalLock( hClipData ); if( pData == NULL ){ return false; } @@ -633,10 +633,6 @@ bool CClipboard::GetClipboradByFormat(CNativeW& mem, const wchar_t* pFormatName, return false; } -// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -// staticインターフェース // -// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // - //! クリップボード内に、サクラエディタで扱えるデータがあればtrue bool CClipboard::HasValidData() { @@ -667,10 +663,10 @@ int CClipboard::GetDataType() { //扱える形式が1つでもあればtrue // 2013.06.11 GetTextの取得順に変更 - if(::IsClipboardFormatAvailable(GetSakuraFormat()))return GetSakuraFormat(); - if(::IsClipboardFormatAvailable(CF_UNICODETEXT))return CF_UNICODETEXT; - if(::IsClipboardFormatAvailable(CF_OEMTEXT))return CF_OEMTEXT; - if(::IsClipboardFormatAvailable(CF_HDROP))return CF_HDROP; + if(IsClipboardFormatAvailable(GetSakuraFormat()))return GetSakuraFormat(); + if(IsClipboardFormatAvailable(CF_UNICODETEXT))return CF_UNICODETEXT; + if(IsClipboardFormatAvailable(CF_OEMTEXT))return CF_OEMTEXT; + if(IsClipboardFormatAvailable(CF_HDROP))return CF_HDROP; return -1; } @@ -689,3 +685,15 @@ BOOL CClipboard::EmptyClipboard() const { BOOL CClipboard::IsClipboardFormatAvailable(UINT format) const { return ::IsClipboardFormatAvailable(format); } + +UINT CClipboard::EnumClipboardFormats(UINT format) const { + return ::EnumClipboardFormats(format); +} + +HGLOBAL CClipboard::GlobalAlloc(UINT uFlags, SIZE_T dwBytes) const { + return ::GlobalAlloc(uFlags, dwBytes); +} + +LPVOID CClipboard::GlobalLock(HGLOBAL hMem) const { + return ::GlobalLock(hMem); +} diff --git a/sakura_core/_os/CClipboard.h b/sakura_core/_os/CClipboard.h index f398c56796..bea0996e5f 100644 --- a/sakura_core/_os/CClipboard.h +++ b/sakura_core/_os/CClipboard.h @@ -57,6 +57,8 @@ class CClipboard{ //演算子 operator bool() const{ return m_bOpenResult!=FALSE; } //!< クリップボードを開けたならtrue + int GetDataType(); //!< クリップボードデータ形式(CF_UNICODETEXT等)の取得 + private: HWND m_hwnd; BOOL m_bOpenResult; @@ -65,7 +67,6 @@ class CClipboard{ public: static bool HasValidData(); //!< クリップボード内に、サクラエディタで扱えるデータがあればtrue static CLIPFORMAT GetSakuraFormat(); //!< サクラエディタ独自のクリップボードデータ形式 - static int GetDataType(); //!< クリップボードデータ形式(CF_UNICODETEXT等)の取得 protected: // 単体テスト用コンストラクタ @@ -77,5 +78,8 @@ class CClipboard{ virtual HANDLE GetClipboardData(UINT uFormat) const; virtual BOOL EmptyClipboard() const; virtual BOOL IsClipboardFormatAvailable(UINT format) const; + virtual UINT EnumClipboardFormats(UINT format) const; + virtual HGLOBAL GlobalAlloc(UINT uFlags, SIZE_T dwBytes) const; + virtual LPVOID GlobalLock(HGLOBAL hMem) const; }; #endif /* SAKURA_CCLIPBOARD_4E783022_214C_4E51_A2E0_54EC343500F6_H_ */ From 011ff3be6fc2140b6bee66c44e927459db6318b1 Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sun, 8 May 2022 14:24:16 +0900 Subject: [PATCH 0991/1024] =?UTF-8?q?CClipboard=20=E3=81=AE=E5=8D=98?= =?UTF-8?q?=E4=BD=93=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E6=8B=A1=E5=85=85?= =?UTF-8?q?=E3=81=99=E3=82=8B=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-cclipboard.cpp | 406 +++++++++++++++++++++++++++- 1 file changed, 400 insertions(+), 6 deletions(-) diff --git a/tests/unittests/test-cclipboard.cpp b/tests/unittests/test-cclipboard.cpp index 4db5b13f66..c643f3a1cc 100644 --- a/tests/unittests/test-cclipboard.cpp +++ b/tests/unittests/test-cclipboard.cpp @@ -29,6 +29,7 @@ #define NOMINMAX #endif /* #ifndef NOMINMAX */ +#include #include #include #include @@ -38,12 +39,14 @@ #include #include +#include #include "CEol.h" #include "mem/CNativeW.h" #include "_os/CClipboard.h" using ::testing::_; +using ::testing::Invoke; using ::testing::Return; /*! @@ -64,7 +67,7 @@ using windowHolder = std::unique_ptr::type, window_clo /*! * @brief SetHtmlTextのテスト */ -TEST(CClipboard, SetHtmlText) +TEST(CClipboard, DISABLED_SetHtmlText) { constexpr const wchar_t inputData[] = L"test 109"; constexpr const char expected[] = @@ -131,7 +134,7 @@ class CClipboardTestFixture : public testing::Test { HWND hWnd = nullptr; }; -TEST_F(CClipboardTestFixture, SetTextAndGetText) +TEST_F(CClipboardTestFixture, DISABLED_SetTextAndGetText) { const std::wstring_view text = L"てすと"; CClipboard clipboard(hWnd); @@ -207,6 +210,17 @@ MATCHER_P(ByteValueInGlobalMemory, value, "") { return match; } +// グローバルメモリに書き込まれた特定のバイト列にマッチする述語関数 +MATCHER_P2(BytesInGlobalMemory, bytes, size, "") { + if (size != ::GlobalSize(arg)) + return false; + void* p = ::GlobalLock(arg); + if (!p) return false; + bool match = std::memcmp(p, bytes, size) == 0; + ::GlobalUnlock(arg); + return match; +} + class MockCClipboard : public CClipboard { public: MockCClipboard(bool openStatus = true) : CClipboard(openStatus) {} @@ -215,6 +229,9 @@ class MockCClipboard : public CClipboard { MOCK_CONST_METHOD1(GetClipboardData, HANDLE (UINT)); MOCK_CONST_METHOD0(EmptyClipboard, BOOL ()); MOCK_CONST_METHOD1(IsClipboardFormatAvailable, BOOL (UINT)); + MOCK_CONST_METHOD1(EnumClipboardFormats, UINT (UINT)); + MOCK_CONST_METHOD2(GlobalAlloc, HGLOBAL (UINT, SIZE_T)); + MOCK_CONST_METHOD1(GlobalLock, LPVOID (HGLOBAL)); }; // Empty のテスト。 @@ -269,6 +286,7 @@ TEST(CClipboard, SetText1) { TEST(CClipboard, SetText2) { constexpr std::wstring_view text = L"てすと"; MockCClipboard clipboard; + ON_CALL(clipboard, GlobalAlloc(_, _)).WillByDefault(Invoke(::GlobalAlloc)); EXPECT_CALL(clipboard, SetClipboardData(CF_UNICODETEXT, WideStringInGlobalMemory(text))); EXPECT_CALL(clipboard, SetClipboardData(::RegisterClipboardFormat(L"MSDEVColumnSelect"), ByteValueInGlobalMemory(0))); EXPECT_FALSE(clipboard.SetText(text.data(), text.length(), true, false, CF_UNICODETEXT)); @@ -279,6 +297,7 @@ TEST(CClipboard, SetText3) { constexpr std::wstring_view text = L"てすと"; const CLIPFORMAT sakuraFormat = CClipboard::GetSakuraFormat(); MockCClipboard clipboard; + ON_CALL(clipboard, GlobalAlloc(_, _)).WillByDefault(Invoke(::GlobalAlloc)); EXPECT_CALL(clipboard, SetClipboardData(sakuraFormat, SakuraFormatInGlobalMemory(text))); EXPECT_CALL(clipboard, SetClipboardData(::RegisterClipboardFormat(L"MSDEVLineSelect"), ByteValueInGlobalMemory(1))); EXPECT_CALL(clipboard, SetClipboardData(::RegisterClipboardFormat(L"VisualStudioEditorOperationsLineCutCopyClipboardTag"), ByteValueInGlobalMemory(1))); @@ -294,6 +313,22 @@ TEST(CClipboard, SetText4) { EXPECT_FALSE(clipboard.SetText(text.data(), text.length(), false, false, -1)); } +// SetText のテスト。矩形選択マークの設定に失敗した場合。 +TEST(CClipboard, SetText5) { + constexpr std::wstring_view text = L"てすと"; + MockCClipboard clipboard; + ON_CALL(clipboard, GlobalAlloc(_, 1)).WillByDefault(Return(nullptr)); + EXPECT_FALSE(clipboard.SetText(text.data(), text.length(), true, false, 0)); +} + +// SetText のテスト。行選択マークの設定に失敗した場合。 +TEST(CClipboard, SetText6) { + constexpr std::wstring_view text = L"てすと"; + MockCClipboard clipboard; + ON_CALL(clipboard, GlobalAlloc(_, 1)).WillByDefault(Return(nullptr)); + EXPECT_FALSE(clipboard.SetText(text.data(), text.length(), false, true, 0)); +} + // グローバルメモリを RAII で管理する簡易ヘルパークラス class GlobalMemory { public: @@ -381,8 +416,30 @@ TEST_F(CClipboardGetText, NoSpecifiedFormat4) { } // サクラ形式とCF_UNICODETEXTとCF_OEMTEXTが失敗した場合、CF_HDROPを取得する。 -TEST_F(CClipboardGetText, DISABLED_NoSpecifiedFormat5) { - // 適切なダミーデータを用意するのが難しいため未実装 +TEST_F(CClipboardGetText, NoSpecifiedFormat5) { + constexpr std::array files = {"CF_HDROP\0"}; + GlobalMemory mem(GMEM_MOVEABLE, sizeof(DROPFILES) + files.size()); + mem.Lock([=](DROPFILES* d) { + d->pFiles = sizeof(DROPFILES); + d->fWide = FALSE; + memcpy((char*)d + sizeof(DROPFILES), files.data(), files.size()); + }); + ON_CALL(clipboard, IsClipboardFormatAvailable(sakuraFormat)).WillByDefault(Return(FALSE)); + ON_CALL(clipboard, GetClipboardData(CF_UNICODETEXT)).WillByDefault(Return(nullptr)); + ON_CALL(clipboard, GetClipboardData(CF_OEMTEXT)).WillByDefault(Return(nullptr)); + ON_CALL(clipboard, IsClipboardFormatAvailable(CF_HDROP)).WillByDefault(Return(TRUE)); + ON_CALL(clipboard, GetClipboardData(CF_HDROP)).WillByDefault(Return(mem.Get())); + EXPECT_TRUE(clipboard.GetText(&buffer, nullptr, nullptr, eol, -1)); + EXPECT_STREQ(buffer.GetStringPtr(), L"CF_HDROP"); +} + +// ここまでのすべてに失敗した場合、falseを返す。 +TEST_F(CClipboardGetText, NoSpecifiedFormat6) { + ON_CALL(clipboard, IsClipboardFormatAvailable(sakuraFormat)).WillByDefault(Return(FALSE)); + ON_CALL(clipboard, GetClipboardData(CF_UNICODETEXT)).WillByDefault(Return(nullptr)); + ON_CALL(clipboard, GetClipboardData(CF_OEMTEXT)).WillByDefault(Return(nullptr)); + ON_CALL(clipboard, IsClipboardFormatAvailable(CF_HDROP)).WillByDefault(Return(FALSE)); + EXPECT_FALSE(clipboard.GetText(&buffer, nullptr, nullptr, eol, -1)); } // GetText で取得したいデータ形式が指定されている場合、他のデータ形式は無視する。 @@ -428,6 +485,343 @@ TEST_F(CClipboardGetText, OemTextFailure) { } // CF_HDROP を指定して取得する。 -TEST_F(CClipboardGetText, DISABLED_HDropSuccess) { - // 適切なダミーデータを用意するのが難しいため未実装 +// 取得したファイルが1つであれば末尾に改行を付加しない。 +TEST_F(CClipboardGetText, HDropSuccessSingleFile) { + constexpr std::array files = {"file\0"}; + GlobalMemory mem(GMEM_MOVEABLE, sizeof(DROPFILES) + files.size()); + mem.Lock([=](DROPFILES* d) { + d->pFiles = sizeof(DROPFILES); + d->fWide = FALSE; + memcpy((char*)d + sizeof(DROPFILES), files.data(), files.size()); + }); + ON_CALL(clipboard, IsClipboardFormatAvailable(CF_HDROP)).WillByDefault(Return(TRUE)); + ON_CALL(clipboard, GetClipboardData(CF_HDROP)).WillByDefault(Return(mem.Get())); + EXPECT_TRUE(clipboard.GetText(&buffer, nullptr, nullptr, eol, CF_HDROP)); + EXPECT_STREQ(buffer.GetStringPtr(), L"file"); +} + +// CF_HDROP を指定して取得する。 +// 取得したファイルが複数であればすべてのファイル名の末尾に改行を付加する。 +TEST_F(CClipboardGetText, HDropSuccessMultipleFiles) { + constexpr std::array files = {"file1\0file2\0"}; + GlobalMemory mem(GMEM_MOVEABLE, sizeof(DROPFILES) + files.size()); + mem.Lock([=](DROPFILES* d) { + d->pFiles = sizeof(DROPFILES); + d->fWide = FALSE; + memcpy((char*)d + sizeof(DROPFILES), files.data(), files.size()); + }); + ON_CALL(clipboard, IsClipboardFormatAvailable(CF_HDROP)).WillByDefault(Return(TRUE)); + ON_CALL(clipboard, GetClipboardData(CF_HDROP)).WillByDefault(Return(mem.Get())); + EXPECT_TRUE(clipboard.GetText(&buffer, nullptr, nullptr, eol, CF_HDROP)); + EXPECT_STREQ(buffer.GetStringPtr(), L"file1\r\nfile2\r\n"); +} + +// CF_HDROP が指定されているが取得に失敗した場合。 +TEST_F(CClipboardGetText, HDropFailure) { + ON_CALL(clipboard, IsClipboardFormatAvailable(CF_HDROP)).WillByDefault(Return(TRUE)); + ON_CALL(clipboard, GetClipboardData(CF_HDROP)).WillByDefault(Return(nullptr)); + EXPECT_FALSE(clipboard.GetText(&buffer, nullptr, nullptr, eol, CF_HDROP)); +} + +// 矩形選択マーク取得のテスト。 +TEST_F(CClipboardGetText, ColumnSelectIsFalse) { + ON_CALL(clipboard, EnumClipboardFormats(0)).WillByDefault(Return(0)); + bool column; + clipboard.GetText(&buffer, &column, nullptr, eol); + EXPECT_FALSE(column); +} + +TEST_F(CClipboardGetText, ColumnSelectIsTrue) { + UINT format = RegisterClipboardFormatW(L"MSDEVColumnSelect"); + ON_CALL(clipboard, EnumClipboardFormats(0)).WillByDefault(Return(format)); + bool column; + clipboard.GetText(&buffer, &column, nullptr, eol); + EXPECT_TRUE(column); +} + +// 行選択マーク取得のテスト。 +TEST_F(CClipboardGetText, LineSelectIsFalse) { + ON_CALL(clipboard, EnumClipboardFormats(0)).WillByDefault(Return(0)); + bool line; + clipboard.GetText(&buffer, &line, nullptr, eol); + EXPECT_FALSE(line); +} + +TEST_F(CClipboardGetText, LineSelectIsTrue1) { + UINT format = RegisterClipboardFormatW(L"MSDEVLineSelect"); + ON_CALL(clipboard, EnumClipboardFormats(0)).WillByDefault(Return(format)); + bool line; + clipboard.GetText(&buffer, nullptr, &line, eol); + EXPECT_TRUE(line); +} + +TEST_F(CClipboardGetText, LineSelectIsTrue2) { + UINT format = RegisterClipboardFormatW(L"VisualStudioEditorOperationsLineCutCopyClipboardTag"); + ON_CALL(clipboard, EnumClipboardFormats(0)).WillByDefault(Return(format)); + bool line; + clipboard.GetText(&buffer, nullptr, &line, eol); + EXPECT_TRUE(line); +} + +// GetClipboardByFormatのモード-2のテスト。GetTextと同じ処理が行われることを期待する。 +// CF_UNICODETEXTの取得に成功した場合。 +TEST_F(CClipboardGetText, GetClipboardByFormatSuccess) { + ON_CALL(clipboard, IsClipboardFormatAvailable(CF_UNICODETEXT)).WillByDefault(Return(TRUE)); + ON_CALL(clipboard, GetClipboardData(CF_UNICODETEXT)).WillByDefault(Return(unicodeMemory.Get())); + EXPECT_TRUE(clipboard.GetClipboradByFormat(buffer, L"CF_UNICODETEXT", -2, 0, eol)); + EXPECT_STREQ(buffer.GetStringPtr(), unicodeText.data()); +} + +// GetClipboardDataが失敗した場合。 +TEST_F(CClipboardGetText, GetClipboardByFormatFailure1) { + buffer.SetString(L"dummy"); + ON_CALL(clipboard, IsClipboardFormatAvailable(CF_UNICODETEXT)).WillByDefault(Return(TRUE)); + ON_CALL(clipboard, GetClipboardData(_)).WillByDefault(Return(nullptr)); + EXPECT_FALSE(clipboard.GetClipboradByFormat(buffer, L"CF_UNICODETEXT", -2, 0, eol)); + EXPECT_STREQ(buffer.GetStringPtr(), L""); +} + +// 取得できるフォーマットがクリップボード内になかった場合。 +TEST_F(CClipboardGetText, GetClipboardByFormatFailure2) { + buffer.SetString(L"dummy"); + ON_CALL(clipboard, IsClipboardFormatAvailable(CF_UNICODETEXT)).WillByDefault(Return(FALSE)); + EXPECT_FALSE(clipboard.GetClipboradByFormat(buffer, L"CF_UNICODETEXT", -2, 0, eol)); + EXPECT_STREQ(buffer.GetStringPtr(), L""); +} + +// OpenClipboard が失敗していた場合。 +TEST(CClipboard, GetTextNoClipboard) { + CNativeW buffer; + CEol eol; + MockCClipboard clipboard(false); + EXPECT_FALSE(clipboard.GetText(&buffer, nullptr, nullptr, eol)); +} + +struct ClipboardFormatDefinition { + CLIPFORMAT id; + const wchar_t* const name; +}; + +const std::array KNOWN_FORMATS = { + { + {CF_TEXT ,L"CF_TEXT"}, + {CF_BITMAP ,L"CF_BITMAP"}, + {CF_METAFILEPICT,L"CF_METAFILEPICT"}, + {CF_SYLK ,L"CF_SYLK"}, + {CF_DIF ,L"CF_DIF"}, + {CF_TIFF ,L"CF_TIFF"}, + {CF_OEMTEXT ,L"CF_OEMTEXT"}, + {CF_DIB ,L"CF_DIB"}, + {CF_PALETTE ,L"CF_PALETTE"}, + {CF_PENDATA ,L"CF_PENDATA"}, + {CF_RIFF ,L"CF_RIFF"}, + {CF_WAVE ,L"CF_WAVE"}, + {CF_UNICODETEXT ,L"CF_UNICODETEXT"}, + {CF_ENHMETAFILE ,L"CF_ENHMETAFILE"}, + {CF_HDROP ,L"CF_HDROP"}, + {CF_LOCALE ,L"CF_LOCALE"}, + {CF_DIBV5 ,L"CF_DIBV5"} + } +}; + +const wchar_t* const UNITTEST_FORMAT_NAME = L"123SakuraUnittest"; + +// 標準フォーマットを指定した場合 +TEST(CClipboard, IsIncludeClipboardFormat1) { + for (auto format : KNOWN_FORMATS) { + MockCClipboard clipboard; + ON_CALL(clipboard, IsClipboardFormatAvailable(format.id)).WillByDefault(Return(TRUE)); + EXPECT_TRUE(clipboard.IsIncludeClipboradFormat(format.name)); + } +} + +// 数値を指定した場合 +TEST(CClipboard, IsIncludeClipboardFormat2) { + MockCClipboard clipboard; + ON_CALL(clipboard, IsClipboardFormatAvailable(12345)).WillByDefault(Return(TRUE)); + EXPECT_TRUE(clipboard.IsIncludeClipboradFormat(L"12345")); +} + +// 標準フォーマット以外の文字列を指定した場合 +TEST(CClipboard, IsIncludeClipboardFormat3) { + const UINT format = ::RegisterClipboardFormatW(UNITTEST_FORMAT_NAME); + + MockCClipboard clipboard; + ON_CALL(clipboard, IsClipboardFormatAvailable(format)).WillByDefault(Return(TRUE)); + EXPECT_TRUE(clipboard.IsIncludeClipboradFormat(UNITTEST_FORMAT_NAME)); +} + +// 対象フォーマットのデータが存在しなかった場合に失敗することを確認するテスト +TEST(CClipboard, IsIncludeClipboardFormat4) { + MockCClipboard clipboard; + ON_CALL(clipboard, IsClipboardFormatAvailable(12345)).WillByDefault(Return(FALSE)); + EXPECT_FALSE(clipboard.IsIncludeClipboradFormat(L"12345")); +} + +// フォーマット文字列が空だった場合は失敗する。 +TEST(CClipboard, IsIncludeClipboardFormat5) { + MockCClipboard clipboard; + EXPECT_FALSE(clipboard.IsIncludeClipboradFormat(L"")); +} + +// 不明なモード値を指定すると失敗する。 +TEST(CClipboard, SetClipboardByFormat1) { + MockCClipboard clipboard; + EXPECT_FALSE(clipboard.SetClipboradByFormat({L"テスト", 3}, L"12345", 99999, 1)); +} + +// フォーマット名が空文字列だと失敗する。 +TEST(CClipboard, SetClipboardByFormat2) { + MockCClipboard clipboard; + EXPECT_FALSE(clipboard.SetClipboradByFormat({L"テスト", 3}, L"", 99999, 1)); +} + +// モード-1(バイナリデータ)のテスト。 +// UTF-16 の符号単位(0x0000~0x00ff)を 0x00~0xff のバイト値にマップする。 +// 終端モード0では文字列中の \0 をバイナリとして扱う(終端として認識しない)。 +TEST(CClipboard, SetClipboardByFormat3) { + MockCClipboard clipboard; + ON_CALL(clipboard, GlobalAlloc(_, _)).WillByDefault(Invoke(::GlobalAlloc)); + EXPECT_CALL(clipboard, SetClipboardData(12345, BytesInGlobalMemory("\x00\x01\xfe\xff", 4))); + EXPECT_TRUE(clipboard.SetClipboradByFormat({L"\x00\x01\xfe\xff", 4}, L"12345", -1, 0)); +} + +// モード-1(バイナリデータ)のテスト。 +// 0x100以上の値が含まれている場合は失敗する。 +TEST(CClipboard, SetClipboardByFormat4) { + MockCClipboard clipboard; + EXPECT_CALL(clipboard, SetClipboardData(_, _)).Times(0); + EXPECT_FALSE(clipboard.SetClipboradByFormat({L"\x100", 1}, L"12345", -1, 0)); +} + +// モード3(UTF-16)のテスト。コード変換を行わないパターン。 +// 終端モードの自動判定を要求する。期待されるモードは2(2バイトの0値で終端する)。 +TEST(CClipboard, SetClipboardByFormat5) { + MockCClipboard clipboard; + ON_CALL(clipboard, GlobalAlloc(_, _)).WillByDefault(Invoke(::GlobalAlloc)); + EXPECT_CALL(clipboard, SetClipboardData(12345, WideStringInGlobalMemory(L"テスト"))); + EXPECT_TRUE(clipboard.SetClipboradByFormat({L"テスト", 3}, L"12345", 3, -1)); +} + +// モード4(UTF-8)のテスト。コード変換を行う。 +// 終端モードの自動判定を要求する。期待されるモードは1(1バイトの0値で終端する)。 +// +// 共有データに依存するためテスト不能。 +TEST(CClipboard, DISABLED_SetClipboardByFormat6) { + MockCClipboard clipboard; + EXPECT_CALL(clipboard, SetClipboardData(12345, AnsiStringInGlobalMemory("テスト"))); + EXPECT_TRUE(clipboard.SetClipboradByFormat({L"テスト", 3}, L"12345", 4, -1)); +} + +// モード-2のテスト。SetTextと同じ処理を行う。 +TEST(CClipboard, SetClipboardByFormat7) { + constexpr std::wstring_view text = L"テスト"; + MockCClipboard clipboard; + EXPECT_CALL(clipboard, SetClipboardData(CF_UNICODETEXT, WideStringInGlobalMemory(text))); + + // 既存のコードに実装ミスがあり、成功してもfalseを返してしまう…。 +// EXPECT_TRUE(clipboard.SetClipboradByFormat({text.data(), text.size()}, L"CF_UNICODETEXT", -2, 0)); + EXPECT_FALSE(clipboard.SetClipboradByFormat({text.data(), text.size()}, L"CF_UNICODETEXT", -2, 0)); +} + +// モード-2以外でGlobalAllocが失敗した場合。 +TEST(CClipboard, SetClipboardByFormat8) { + MockCClipboard clipboard; + ON_CALL(clipboard, GlobalAlloc(_, _)).WillByDefault(Return(nullptr)); + EXPECT_FALSE(clipboard.SetClipboradByFormat({L"テスト", 3}, L"12345", 3, -1)); +} + +// フォーマット名が空文字列だった場合は即失敗する。 +TEST(CClipboard, GetClipboardByFormat1) { + MockCClipboard clipboard; + CNativeW buffer(L"dummy"); + CEol eol(EEolType::cr_and_lf); + EXPECT_FALSE(clipboard.GetClipboradByFormat(buffer, L"", -1, 0, eol)); + EXPECT_STREQ(buffer.GetStringPtr(), L""); +} + +// 要求されたフォーマットのデータがクリップボードに存在しなければ失敗する。 +TEST(CClipboard, GetClipboardByFormat2) { + MockCClipboard clipboard; + CNativeW buffer(L"dummy"); + CEol eol(EEolType::cr_and_lf); + ON_CALL(clipboard, IsClipboardFormatAvailable(12345)).WillByDefault(Return(FALSE)); + EXPECT_FALSE(clipboard.GetClipboradByFormat(buffer, L"12345", -1, 0, eol)); + EXPECT_STREQ(buffer.GetStringPtr(), L""); +} + +// GetClipboardDataが失敗した場合。 +TEST(CClipboard, GetClipboardByFormat3) { + MockCClipboard clipboard; + CNativeW buffer(L"dummy"); + CEol eol(EEolType::cr_and_lf); + ON_CALL(clipboard, IsClipboardFormatAvailable(12345)).WillByDefault(Return(TRUE)); + ON_CALL(clipboard, GetClipboardData(12345)).WillByDefault(Return(nullptr)); + EXPECT_FALSE(clipboard.GetClipboradByFormat(buffer, L"12345", -1, 0, eol)); + EXPECT_STREQ(buffer.GetStringPtr(), L""); +} + +// GlobalLockが失敗した場合。 +TEST(CClipboard, GetClipboardByFormat4) { + MockCClipboard clipboard; + CNativeW buffer(L"dummy"); + CEol eol(EEolType::cr_and_lf); + ON_CALL(clipboard, IsClipboardFormatAvailable(12345)).WillByDefault(Return(TRUE)); + ON_CALL(clipboard, GetClipboardData(12345)).WillByDefault(Return((HANDLE)67890)); + ON_CALL(clipboard, GlobalLock((HANDLE)67890)).WillByDefault(Return(nullptr)); + EXPECT_FALSE(clipboard.GetClipboradByFormat(buffer, L"12345", -1, 0, eol)); + EXPECT_STREQ(buffer.GetStringPtr(), L""); +} + +// モード-1(バイナリデータ)のテスト。 +// 0x00~0xff のバイト値を UTF-16 の符号単位(0x0000~0x00ff)にマップする。 +// 終端モード0ではデータ中の \0 をバイナリとして扱う(終端として認識しない)。 +TEST(CClipboard, GetClipboardByFormat5) { + GlobalMemory memory(GMEM_MOVEABLE, 2); + memory.Lock([=](char* p) { + std::memcpy(p, "\x00\xff", 2); + }); + MockCClipboard clipboard; + CNativeW buffer; + CEol eol(EEolType::cr_and_lf); + ON_CALL(clipboard, IsClipboardFormatAvailable(12345)).WillByDefault(Return(TRUE)); + ON_CALL(clipboard, GetClipboardData(12345)).WillByDefault(Return(memory.Get())); + ON_CALL(clipboard, GlobalLock(_)).WillByDefault(Invoke(::GlobalLock)); + EXPECT_TRUE(clipboard.GetClipboradByFormat(buffer, L"12345", -1, 0, eol)); + EXPECT_STREQ(buffer.GetStringPtr(), L"\x00\xff"); +} + +// モード3(UTF-16)のテスト。コード変換を行わないパターン。 +// 終端モードには2を設定する(2バイトの0値で終端されていることを期待する)。 +TEST(CClipboard, GetClipboardByFormat6) { + GlobalMemory memory(GMEM_MOVEABLE, sizeof(wchar_t) * 8); + memory.Lock([=](wchar_t* p) { + std::memcpy(p, L"テスト\x00データ", 8); + }); + MockCClipboard clipboard; + CNativeW buffer; + CEol eol(EEolType::cr_and_lf); + ON_CALL(clipboard, IsClipboardFormatAvailable(12345)).WillByDefault(Return(TRUE)); + ON_CALL(clipboard, GetClipboardData(12345)).WillByDefault(Return(memory.Get())); + ON_CALL(clipboard, GlobalLock(_)).WillByDefault(Invoke(::GlobalLock)); + EXPECT_TRUE(clipboard.GetClipboradByFormat(buffer, L"12345", 3, 2, eol)); + EXPECT_STREQ(buffer.GetStringPtr(), L"テスト"); +} + +// モード4(UTF-8)のテスト。コード変換を行う。 +// 終端モードには1を設定する(1バイトの0値で終端されていることを期待する)。 +// +// CEditDoc のインスタンスに依存するためテスト不能。 +TEST(CClipboard, DISABLED_GetClipboardByFormat7) { + GlobalMemory memory(GMEM_MOVEABLE, 14); + memory.Lock([=](char* p) { + std::memcpy(p, "テスト\x00データ", 14); + }); + MockCClipboard clipboard; + CNativeW buffer; + CEol eol(EEolType::cr_and_lf); + ON_CALL(clipboard, IsClipboardFormatAvailable(12345)).WillByDefault(Return(TRUE)); + ON_CALL(clipboard, GetClipboardData(12345)).WillByDefault(Return(memory.Get())); + EXPECT_TRUE(clipboard.GetClipboradByFormat(buffer, L"12345", 4, 1, eol)); + EXPECT_STREQ(buffer.GetStringPtr(), L"テスト"); } From eed2fec5a555a486f33d05f9eacb2bb2a9b1604c Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sun, 8 May 2022 14:28:22 +0900 Subject: [PATCH 0992/1024] =?UTF-8?q?Windows=20API=20=E3=81=AE=E5=91=BC?= =?UTF-8?q?=E3=81=B3=E5=87=BA=E3=81=97=E3=82=92=E4=BC=B4=E3=81=86=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=92=E5=89=8A=E9=99=A4=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-cclipboard.cpp | 120 ---------------------------- 1 file changed, 120 deletions(-) diff --git a/tests/unittests/test-cclipboard.cpp b/tests/unittests/test-cclipboard.cpp index c643f3a1cc..def98f0b78 100644 --- a/tests/unittests/test-cclipboard.cpp +++ b/tests/unittests/test-cclipboard.cpp @@ -49,126 +49,6 @@ using ::testing::_; using ::testing::Invoke; using ::testing::Return; -/*! - * HWND型のスマートポインタを実現するためのdeleterクラス - */ -struct window_closer -{ - void operator()(HWND hWnd) const - { - ::DestroyWindow(hWnd); - } -}; - -//! HWND型のスマートポインタ -using windowHolder = std::unique_ptr::type, window_closer>; - - -/*! - * @brief SetHtmlTextのテスト - */ -TEST(CClipboard, DISABLED_SetHtmlText) -{ - constexpr const wchar_t inputData[] = L"test 109"; - constexpr const char expected[] = - "Version:0.9\r\n" - "StartHTML:00000097\r\n" - "EndHTML:00000178\r\n" - "StartFragment:00000134\r\n" - "EndFragment:00000142\r\n" - "\r\n" - "\r\n" - "test 109\r\n" - "\r\n" - "\r\n"; - - const UINT uHtmlFormat = ::RegisterClipboardFormat(L"HTML Format"); - - auto hInstance = ::GetModuleHandleW(nullptr); - if (HWND hWnd = ::CreateWindowExW(0, WC_STATICW, L"test", 0, 1, 1, 1, 1, nullptr, nullptr, hInstance, nullptr); hWnd) { - // HWNDをスマートポインタに入れる - windowHolder holder(hWnd); - - // クリップボード操作クラスでSetHtmlTextする - CClipboard cClipBoard(hWnd); - - // 操作は失敗しないはず。 - ASSERT_TRUE(cClipBoard.SetHtmlText(inputData)); - - // 操作に成功するとHTML形式のデータを利用できるはず。 - ASSERT_TRUE(::IsClipboardFormatAvailable(uHtmlFormat)); - - // クリップボード操作クラスが対応してないので生APIを呼んで確認する。 - - // グローバルメモリをロックできた場合のみ中身を取得しに行く - if (HGLOBAL hClipData = ::GetClipboardData(uHtmlFormat); hClipData != nullptr) { - // データをstd::stringにコピーする - const size_t cchData = ::GlobalSize(hClipData); - const char* pData = (char*)::GlobalLock(hClipData); - std::string strClipData(pData, cchData); - - // 使い終わったらロック解除する - ::GlobalUnlock(hClipData); - - ASSERT_STREQ(expected, strClipData.c_str()); - } - else { - FAIL(); - } - } -} - -class CClipboardTestFixture : public testing::Test { -protected: - void SetUp() override { - hInstance = ::GetModuleHandle(nullptr); - hWnd = ::CreateWindowExW(0, WC_STATICW, L"test", 0, 1, 1, 1, 1, nullptr, nullptr, hInstance, nullptr); - if (!hWnd) FAIL(); - } - void TearDown() override { - if (hWnd) - ::DestroyWindow(hWnd); - } - - HINSTANCE hInstance = nullptr; - HWND hWnd = nullptr; -}; - -TEST_F(CClipboardTestFixture, DISABLED_SetTextAndGetText) -{ - const std::wstring_view text = L"てすと"; - CClipboard clipboard(hWnd); - CNativeW buffer; - bool column; - bool line; - CEol eol(EEolType::cr_and_lf); - - // テストを実行する前にクリップボードの内容を破棄しておく。 - clipboard.Empty(); - - // テキストを設定する(矩形選択フラグなし・行選択フラグなし) - EXPECT_TRUE(clipboard.SetText(text.data(), text.length(), false, false, -1)); - EXPECT_TRUE(CClipboard::HasValidData()); - // Unicode文字列を取得する - EXPECT_TRUE(clipboard.GetText(&buffer, &column, &line, eol, CF_UNICODETEXT)); - EXPECT_STREQ(buffer.GetStringPtr(), text.data()); - EXPECT_FALSE(column); - EXPECT_FALSE(line); - - clipboard.Empty(); - - // テキストを設定する(矩形選択あり・行選択あり) - EXPECT_TRUE(clipboard.SetText(text.data(), text.length(), true, true, -1)); - EXPECT_TRUE(CClipboard::HasValidData()); - // サクラエディタ独自形式データを取得する - EXPECT_TRUE(clipboard.GetText(&buffer, &column, nullptr, eol, CClipboard::GetSakuraFormat())); - EXPECT_STREQ(buffer.GetStringPtr(), text.data()); - EXPECT_TRUE(column); - EXPECT_TRUE(clipboard.GetText(&buffer, nullptr, &line, eol, CClipboard::GetSakuraFormat())); - EXPECT_STREQ(buffer.GetStringPtr(), text.data()); - EXPECT_TRUE(line); -} - // グローバルメモリに書き込まれた特定の Unicode 文字列にマッチする述語関数 MATCHER_P(WideStringInGlobalMemory, expected_string, "") { const wchar_t* s = (const wchar_t*)::GlobalLock(arg); From 98652eb3b8b6a54289e37d5f0890674d81f6dbbd Mon Sep 17 00:00:00 2001 From: Kengo Ide Date: Sun, 8 May 2022 15:14:57 +0900 Subject: [PATCH 0993/1024] =?UTF-8?q?CClipboard::GetDataType=20=E3=82=92?= =?UTF-8?q?=20const=20=E9=96=A2=E6=95=B0=E3=81=AB=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/_os/CClipboard.cpp | 2 +- sakura_core/_os/CClipboard.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sakura_core/_os/CClipboard.cpp b/sakura_core/_os/CClipboard.cpp index 0824bee384..d5d94f5b65 100644 --- a/sakura_core/_os/CClipboard.cpp +++ b/sakura_core/_os/CClipboard.cpp @@ -659,7 +659,7 @@ CLIPFORMAT CClipboard::GetSakuraFormat() } //!< クリップボードデータ形式(CF_UNICODETEXT等)の取得 -int CClipboard::GetDataType() +int CClipboard::GetDataType() const { //扱える形式が1つでもあればtrue // 2013.06.11 GetTextの取得順に変更 diff --git a/sakura_core/_os/CClipboard.h b/sakura_core/_os/CClipboard.h index bea0996e5f..7ceadf8159 100644 --- a/sakura_core/_os/CClipboard.h +++ b/sakura_core/_os/CClipboard.h @@ -57,7 +57,7 @@ class CClipboard{ //演算子 operator bool() const{ return m_bOpenResult!=FALSE; } //!< クリップボードを開けたならtrue - int GetDataType(); //!< クリップボードデータ形式(CF_UNICODETEXT等)の取得 + int GetDataType() const; //!< クリップボードデータ形式(CF_UNICODETEXT等)の取得 private: HWND m_hwnd; From 4acd5375d03791ca64299418b3a978705af1301c Mon Sep 17 00:00:00 2001 From: dep5 Date: Sat, 28 May 2022 21:03:01 +0900 Subject: [PATCH 0994/1024] =?UTF-8?q?=E3=80=8C=E5=89=B2=E4=BB=98=E3=80=8D?= =?UTF-8?q?=E3=82=92=E3=80=8C=E5=89=B2=E5=BD=93=E3=80=8D=E3=81=AB=E5=A4=89?= =?UTF-8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- help/macro/source/usage/ExecMacro.html | 4 ++-- help/sakura/res/HLP000084.html | 2 +- installer/sinst_src/keyword/php.khp | 2 +- sakura_core/prop/CPropComKeybind.cpp | 4 ++-- sakura_core/sakura_rc.rc | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/help/macro/source/usage/ExecMacro.html b/help/macro/source/usage/ExecMacro.html index 8abe783376..3b46f6f8e7 100644 --- a/help/macro/source/usage/ExecMacro.html +++ b/help/macro/source/usage/ExecMacro.html @@ -39,8 +39,8 @@

    実行方法

    「登録済みマクロ」から実行

    特徴

    -登録したマクロはメニューやツールバーに割り付けができます
    -※割り付け可能なのは20番までに登録したマクロのみ +登録したマクロはメニューやツールバーに割り当てができます
    +※割り当て可能なのは20番までに登録したマクロのみ

    設定方法

    1. [設定]-[共通設定]のマクロタブを選択
    2. diff --git a/help/sakura/res/HLP000084.html b/help/sakura/res/HLP000084.html index 92c9b99dfb..791fcd3eab 100644 --- a/help/sakura/res/HLP000084.html +++ b/help/sakura/res/HLP000084.html @@ -38,7 +38,7 @@

      共通設定 『キー割り当て』プロパティ

      ①右枠の「キー」の一覧から、変更したいキーを選択。
      必要ならば [Shift], [Ctrl], [Alt] の組み合わせを変える。
      ②左枠上部の「種別」を選択し、枠内から機能を選択する。
      -③[割付]ボタンを押せば、現在選択しているキーの機能が、種別・機能で選択しているものに変わります。
      +③[割当]ボタンを押せば、現在選択しているキーの機能が、種別・機能で選択しているものに変わります。
      [解除]ボタンを押せば、現在選択しているキーの機能が [未定義] の状態になります。

    [インポート]ボタン
    diff --git a/installer/sinst_src/keyword/php.khp b/installer/sinst_src/keyword/php.khp index b961b8da8a..9d90edf7a9 100644 --- a/installer/sinst_src/keyword/php.khp +++ b/installer/sinst_src/keyword/php.khp @@ -1833,7 +1833,7 @@ ncurses_timeout /// void ncurses_timeout ( int millisec)\n特別なキーシー ncurses_typeahead /// int ncurses_typeahead ( int fd)\n typeahead確認用に別のファイル記述子を指定する ncurses_ungetch /// int ncurses_ungetch ( int keycode)\n入力ストリームに1文字戻す ncurses_ungetmouse /// bool ncurses_ungetmouse ( array mevent)\nマウスイベントをキーにプッシュする -ncurses_use_default_colors /// bool ncurses_use_default_colors ( void)\n 端末のデフォルト色をカラーID -1に割り付ける +ncurses_use_default_colors /// bool ncurses_use_default_colors ( void)\n 端末のデフォルト色をカラーID -1に割り当てる ncurses_use_env /// void ncurses_use_env ( bool flag)\n端末の大きさに関する環境情報の使用を制御する ncurses_use_extended_names /// int ncurses_use_extended_names ( bool flag)\n terminfo記述において拡張名の使用を制御する ncurses_vidattr /// int ncurses_vidattr ( int intarg)\n diff --git a/sakura_core/prop/CPropComKeybind.cpp b/sakura_core/prop/CPropComKeybind.cpp index 0b5e216abf..975945d798 100644 --- a/sakura_core/prop/CPropComKeybind.cpp +++ b/sakura_core/prop/CPropComKeybind.cpp @@ -199,7 +199,7 @@ INT_PTR CPropKeybind::DispatchEvent( /* Keybind:キー割り当て設定をエクスポートする */ Export( hwndDlg ); return TRUE; - case IDC_BUTTON_ASSIGN: /* 割付 */ + case IDC_BUTTON_ASSIGN: /* 割当 */ nIndex = List_GetCurSel( hwndKeyList ); nIndex2 = Combo_GetCurSel( hwndCombo ); nIndex3 = List_GetCurSel( hwndFuncList ); @@ -271,7 +271,7 @@ INT_PTR CPropKeybind::DispatchEvent( } nFuncCode = m_Common.m_sKeyBind.m_pKeyNameArr[nIndex].m_nFuncCodeArr[i]; // Oct. 2, 2001 genta - // 2007.11.02 ryoji F_DISABLEなら未割付 + // 2007.11.02 ryoji F_DISABLEなら未割当 if( nFuncCode == F_DISABLE ){ wcsncpy( pszLabel, LS(STR_PROPCOMKEYBIND_UNASSIGN), _countof(pszLabel) - 1 ); pszLabel[_countof(pszLabel) - 1] = L'\0'; diff --git a/sakura_core/sakura_rc.rc b/sakura_core/sakura_rc.rc index c499c1348a..2734d6664c 100644 --- a/sakura_core/sakura_rc.rc +++ b/sakura_core/sakura_rc.rc @@ -1403,7 +1403,7 @@ BEGIN CONTROL "A&Lt",IDC_CHECK_ALT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,134,68,25,10 LTEXT "キーに割り当てられている機能",IDC_LABEL_KEYtoFUNC,166,194,120,10 EDITTEXT IDC_EDIT_KEYSFUNC,164,205,118,12,ES_AUTOHSCROLL | ES_READONLY | WS_GROUP | NOT WS_TABSTOP - PUSHBUTTON "割付(&B)",IDC_BUTTON_ASSIGN,129,190,34,14,WS_GROUP + PUSHBUTTON "割当(&B)",IDC_BUTTON_ASSIGN,129,190,34,14,WS_GROUP PUSHBUTTON "解除(&R)",IDC_BUTTON_RELEASE,129,204,34,14 END @@ -3703,7 +3703,7 @@ BEGIN STR_PROPCOMFNM_ERR_REG "これ以上登録できません。" STR_PROPCOMGREP_DLL "正規表現は使用できません" STR_PROPCOMHELP_MIGEMODIR "検索するフォルダーを選んでください" - STR_PROPCOMKEYBIND_UNASSIGN "未割付" + STR_PROPCOMKEYBIND_UNASSIGN "未割当" STR_PROPCOMKEYWORD_ERR_LEN "キーワードの長さは%dバイトまでです。" STR_PROPCOMKEYWORD_SETMAX "セットは%d個までしか登録できません。\n" STR_PROPCOMKEYWORD_SETNAME1 "キーワードのセット追加" From d7a18ee4bf0cb37e2d3e66caa6fe90aee8b0a29a Mon Sep 17 00:00:00 2001 From: dep5 Date: Sat, 28 May 2022 21:03:55 +0900 Subject: [PATCH 0995/1024] =?UTF-8?q?MousePouse=E3=82=92MousePause?= =?UTF-8?q?=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/cmd/CViewCommander_Edit.cpp | 8 ++++---- sakura_core/view/CEditView.cpp | 6 +++--- sakura_core/view/CEditView.h | 4 ++-- sakura_core/view/CEditView_Mouse.cpp | 12 ++++++------ 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/sakura_core/cmd/CViewCommander_Edit.cpp b/sakura_core/cmd/CViewCommander_Edit.cpp index 16b029d3f1..fffba6d3e1 100644 --- a/sakura_core/cmd/CViewCommander_Edit.cpp +++ b/sakura_core/cmd/CViewCommander_Edit.cpp @@ -42,8 +42,8 @@ void CViewCommander::Command_WCHAR( wchar_t wcChar, bool bConvertEOL ) GetDocument()->m_cDocEditor.SetModified(true,true); // Jan. 22, 2002 genta - if( m_pCommanderView->m_bHideMouse && 0 <= m_pCommanderView->m_nMousePouse ){ - m_pCommanderView->m_nMousePouse = -1; + if( m_pCommanderView->m_bHideMouse && 0 <= m_pCommanderView->m_nMousePause ){ + m_pCommanderView->m_nMousePause = -1; ::SetCursor( NULL ); } @@ -234,8 +234,8 @@ void CViewCommander::Command_IME_CHAR( WORD wChar ) } GetDocument()->m_cDocEditor.SetModified(true,true); // Jan. 22, 2002 genta - if( m_pCommanderView->m_bHideMouse && 0 <= m_pCommanderView->m_nMousePouse ){ - m_pCommanderView->m_nMousePouse = -1; + if( m_pCommanderView->m_bHideMouse && 0 <= m_pCommanderView->m_nMousePause ){ + m_pCommanderView->m_nMousePause = -1; ::SetCursor( NULL ); } diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index 488d7cc842..b78da3282e 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -151,7 +151,7 @@ CEditView::CEditView( void ) , m_bActivateByMouse( FALSE ) // 2007.10.02 nasukoji , m_nWheelDelta(0) , m_eWheelScroll(F_0) -, m_nMousePouse(0) +, m_nMousePause(0) , m_nAutoScrollMode(0) , m_cHistory(NULL) , m_cRegexKeyword(NULL) @@ -569,8 +569,8 @@ LRESULT CEditView::DispatchEvent( /* テキストを貼り付け */ BOOL bHokan; bHokan = m_bHokan; - if( m_bHideMouse && 0 <= m_nMousePouse ){ - m_nMousePouse = -1; + if( m_bHideMouse && 0 <= m_nMousePause ){ + m_nMousePause = -1; ::SetCursor( NULL ); } GetCommander().HandleCommand( F_INSTEXT_W, true, (LPARAM)pszText, (LPARAM)wcslen(pszText), TRUE, 0 ); diff --git a/sakura_core/view/CEditView.h b/sakura_core/view/CEditView.h index 7d0533e8f7..3796feed19 100644 --- a/sakura_core/view/CEditView.h +++ b/sakura_core/view/CEditView.h @@ -693,8 +693,8 @@ class CEditView CMyPoint m_cMouseDownPos; //!< クリック時のマウス座標 int m_nWheelDelta; //!< ホイール変化量 EFunctionCode m_eWheelScroll; //!< スクロールの種類 - int m_nMousePouse; // マウス停止時間 - CMyPoint m_cMousePousePos; // マウスの停止位置 + int m_nMousePause; // マウス停止時間 + CMyPoint m_cMousePausePos; // マウスの停止位置 bool m_bHideMouse; int m_nAutoScrollMode; //!< オートスクロールモード diff --git a/sakura_core/view/CEditView_Mouse.cpp b/sakura_core/view/CEditView_Mouse.cpp index 953e00f4fe..a6dffed35e 100644 --- a/sakura_core/view/CEditView_Mouse.cpp +++ b/sakura_core/view/CEditView_Mouse.cpp @@ -944,10 +944,10 @@ void CEditView::OnMOUSEMOVE( WPARAM fwKeys, int xPos_, int yPos_ ) { CMyPoint ptMouse(xPos_, yPos_); - if( m_cMousePousePos != ptMouse ){ - m_cMousePousePos = ptMouse; - if( m_nMousePouse < 0 ){ - m_nMousePouse = 0; + if( m_cMousePausePos != ptMouse ){ + m_cMousePausePos = ptMouse; + if( m_nMousePause < 0 ){ + m_nMousePause = 0; } } @@ -1103,7 +1103,7 @@ void CEditView::OnMOUSEMOVE( WPARAM fwKeys, int xPos_, int yPos_ ) } }else /* アイビーム */ - if( 0 <= m_nMousePouse ){ + if( 0 <= m_nMousePause ){ ::SetCursor( ::LoadCursor( NULL, IDC_IBEAM ) ); } } @@ -1112,7 +1112,7 @@ void CEditView::OnMOUSEMOVE( WPARAM fwKeys, int xPos_, int yPos_ ) } // 以下、マウスでの選択中(ドラッグ中) - if( 0 <= m_nMousePouse ){ + if( 0 <= m_nMousePause ){ ::SetCursor( ::LoadCursor( NULL, IDC_IBEAM ) ); } From a6a68701e9fdd333ff78b35cfd4509ecc0397e11 Mon Sep 17 00:00:00 2001 From: dep5 Date: Tue, 31 May 2022 21:19:37 +0900 Subject: [PATCH 0996/1024] =?UTF-8?q?CMake=E3=81=AE=E8=AD=A6=E5=91=8A?= =?UTF-8?q?=E3=81=AB=E5=AF=BE=E5=87=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/compiletests.run.cmd | 1 - tests/compiletests/CMakeLists.txt | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/compiletests.run.cmd b/tests/compiletests.run.cmd index decce3fa58..693119235a 100644 --- a/tests/compiletests.run.cmd +++ b/tests/compiletests.run.cmd @@ -36,7 +36,6 @@ set CL_COMPILER=%CMD_CL:\=/% :: run cmake configuration. "%CMD_CMAKE%" -G %GENERATOR% ^ "-DCMAKE_MAKE_PROGRAM=%MAKE_PROGRAM%" ^ - "-DCMAKE_C_COMPILER=%CL_COMPILER%" ^ "-DCMAKE_CXX_COMPILER=%CL_COMPILER%" ^ %GENERATOR_OPTS% ^ %SOURCE_DIR% ^ diff --git a/tests/compiletests/CMakeLists.txt b/tests/compiletests/CMakeLists.txt index 9eb013436e..26f2deae7f 100644 --- a/tests/compiletests/CMakeLists.txt +++ b/tests/compiletests/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.12) -enable_language(CXX) +project(compile_test CXX) set( SAKURA_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../sakura_core) set( SAKURA_DEFINITIONS -D_DEBUG -D_UNICODE -DUNICODE -D_WIN32_WINNT=_WIN32_WINNT_WIN7) From ff8b018580b72d732037d355e37bf2e0250fbaef Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Thu, 2 Jun 2022 07:53:07 +0900 Subject: [PATCH 0997/1024] =?UTF-8?q?=E7=84=A1=E9=A1=8C=E3=82=B7=E3=83=BC?= =?UTF-8?q?=E3=82=B1=E3=83=B3=E3=82=B9=E7=95=AA=E5=8F=B7=E3=81=AE=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E3=81=AB=E5=A4=B1=E6=95=97=E3=81=99=E3=82=8B=E4=B8=8D?= =?UTF-8?q?=E5=85=B7=E5=90=88=E3=81=AE=E6=9A=AB=E5=AE=9A=E5=AF=BE=E7=AD=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 拡張領域の指定に「sizeof式」を使っていたために利用箇所を見落とした? 独自定数を切って見落としを防ぎ、必要な量の拡張領域を確保するよう修正。 --- sakura_core/env/CAppNodeManager.cpp | 6 +++--- sakura_core/window/CEditWnd.cpp | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sakura_core/env/CAppNodeManager.cpp b/sakura_core/env/CAppNodeManager.cpp index c0b48d8cf4..19708a25f3 100644 --- a/sakura_core/env/CAppNodeManager.cpp +++ b/sakura_core/env/CAppNodeManager.cpp @@ -177,11 +177,11 @@ BOOL CAppNodeGroupHandle::AddEditWndList( HWND hWnd ) } /* ウィンドウ連番 */ - - if( 0 == ::GetWindowLongPtr( hWnd, sizeof(LONG_PTR) ) ) + constexpr auto MY_GWLP_SEQUENCE = sizeof(LONG_PTR) * 1; // 2個目の拡張領域。 + if( 0 == ::GetWindowLongPtr( hWnd, MY_GWLP_SEQUENCE ) ) { pShare->m_sNodes.m_nSequences++; - ::SetWindowLongPtr( hWnd, sizeof(LONG_PTR) , (LONG_PTR)pShare->m_sNodes.m_nSequences ); + ::SetWindowLongPtr( hWnd, MY_GWLP_SEQUENCE, (LONG_PTR)pShare->m_sNodes.m_nSequences ); //連番を更新する。 sMyEditNode.m_nIndex = pShare->m_sNodes.m_nSequences; diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index 4e68a07e86..36fd382ced 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -376,7 +376,7 @@ HWND CEditWnd::_CreateMainWindow(int nGroup, const STabGroupInfo& sTabGroupInfo) wc.style = CS_DBLCLKS | CS_BYTEALIGNCLIENT | CS_BYTEALIGNWINDOW; wc.lpfnWndProc = CEditWndProc; wc.cbClsExtra = 0; - wc.cbWndExtra = 0; + wc.cbWndExtra = sizeof(LONG_PTR) * 2; //拡張領域を2個確保。 wc.hInstance = G_AppInstance(); // Dec, 2, 2002 genta アイコン読み込み方法変更 wc.hIcon = GetAppIcon( G_AppInstance(), ICON_DEFAULT_APP, FN_APP_ICON, false ); From 537d318be278beef6162cbbd319aa5fd3c46671f Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Thu, 2 Jun 2022 18:10:33 +0900 Subject: [PATCH 0998/1024] =?UTF-8?q?=E6=8B=A1=E5=BC=B5=E9=A0=98=E5=9F=9F?= =?UTF-8?q?=E3=81=AE=E7=95=AA=E5=8F=B7=E3=82=92=E3=81=9A=E3=82=89=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #1794でインデックス0の拡張領域を利用しなくなったので、無題シーケンスを格納する拡張領域を1つ前にずらします。 --- sakura_core/env/CAppNodeManager.cpp | 2 +- sakura_core/window/CEditWnd.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sakura_core/env/CAppNodeManager.cpp b/sakura_core/env/CAppNodeManager.cpp index 19708a25f3..329c093512 100644 --- a/sakura_core/env/CAppNodeManager.cpp +++ b/sakura_core/env/CAppNodeManager.cpp @@ -177,7 +177,7 @@ BOOL CAppNodeGroupHandle::AddEditWndList( HWND hWnd ) } /* ウィンドウ連番 */ - constexpr auto MY_GWLP_SEQUENCE = sizeof(LONG_PTR) * 1; // 2個目の拡張領域。 + constexpr auto MY_GWLP_SEQUENCE = sizeof(LONG_PTR) * 0; // 1個目の拡張領域。 if( 0 == ::GetWindowLongPtr( hWnd, MY_GWLP_SEQUENCE ) ) { pShare->m_sNodes.m_nSequences++; diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index 36fd382ced..cd2ff90a3d 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -376,7 +376,7 @@ HWND CEditWnd::_CreateMainWindow(int nGroup, const STabGroupInfo& sTabGroupInfo) wc.style = CS_DBLCLKS | CS_BYTEALIGNCLIENT | CS_BYTEALIGNWINDOW; wc.lpfnWndProc = CEditWndProc; wc.cbClsExtra = 0; - wc.cbWndExtra = sizeof(LONG_PTR) * 2; //拡張領域を2個確保。 + wc.cbWndExtra = sizeof(LONG_PTR) * 1; //拡張領域を1個確保。 wc.hInstance = G_AppInstance(); // Dec, 2, 2002 genta アイコン読み込み方法変更 wc.hIcon = GetAppIcon( G_AppInstance(), ICON_DEFAULT_APP, FN_APP_ICON, false ); From c757add17bf3bf04243afa0237a7c25d923eac5e Mon Sep 17 00:00:00 2001 From: dep5 Date: Thu, 9 Jun 2022 21:28:24 +0900 Subject: [PATCH 0999/1024] =?UTF-8?q?'GREP=E3=81=AE=E3=80=8C=E3=82=AB?= =?UTF-8?q?=E3=83=AC=E3=83=B3=E3=83=88=E3=83=95=E3=82=A9=E3=83=AB=E3=83=80?= =?UTF-8?q?=E3=83=BC=E3=82=92=E5=88=9D=E6=9C=9F=E5=80=A4=E3=80=8D=E3=81=AB?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgGrep.cpp | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/sakura_core/dlg/CDlgGrep.cpp b/sakura_core/dlg/CDlgGrep.cpp index 4b24971f45..9692ff8553 100644 --- a/sakura_core/dlg/CDlgGrep.cpp +++ b/sakura_core/dlg/CDlgGrep.cpp @@ -250,11 +250,20 @@ int CDlgGrep::DoModal( HINSTANCE hInstance, HWND hwndParent, const WCHAR* pszCur m_bGrepOutputBaseFolder = m_pShareData->m_Common.m_sSearch.m_bGrepOutputBaseFolder; m_bGrepSeparateFolder = m_pShareData->m_Common.m_sSearch.m_bGrepSeparateFolder; + if( pszCurrentFilePath ){ // 2010.01.10 ryoji + wcscpy(m_szCurrentFilePath, pszCurrentFilePath); + } + // 2013.05.21 コンストラクタからDoModalに移動 // m_strText は呼び出し元で設定済み if( m_szFile[0] == L'\0' && m_pShareData->m_sSearchKeywords.m_aGrepFiles.size() ){ wcscpy( m_szFile, m_pShareData->m_sSearchKeywords.m_aGrepFiles[0] ); /* 検索ファイル */ } + if( m_pShareData->m_Common.m_sSearch.m_bGrepDefaultFolder && m_szCurrentFilePath[0] != L'\0' ){ + WCHAR szWorkFile[MAX_PATH]; + SplitPath_FolderAndFile( m_szCurrentFilePath, m_szFolder, szWorkFile ); + SetGrepFolder( GetItemHwnd(IDC_COMBO_FOLDER), m_szFolder ); + }else if( m_szFolder[0] == L'\0' && m_pShareData->m_sSearchKeywords.m_aGrepFolders.size() ){ wcscpy( m_szFolder, m_pShareData->m_sSearchKeywords.m_aGrepFolders[0] ); /* 検索フォルダー */ } @@ -287,10 +296,6 @@ int CDlgGrep::DoModal( HINSTANCE hInstance, HWND hwndParent, const WCHAR* pszCur } } - if( pszCurrentFilePath ){ // 2010.01.10 ryoji - wcscpy(m_szCurrentFilePath, pszCurrentFilePath); - } - return (int)CDialog::DoModal( hInstance, hwndParent, IDD_GREP, (LPARAM)NULL ); } @@ -599,15 +604,6 @@ void CDlgGrep::SetData( void ) /* 除外フォルダー */ ::DlgItem_SetText( GetHwnd(), IDC_COMBO_EXCLUDE_FOLDER, m_szExcludeFolder); - if((m_szFolder[0] == L'\0' || m_pShareData->m_Common.m_sSearch.m_bGrepDefaultFolder) && - m_szCurrentFilePath[0] != L'\0' - ){ - WCHAR szWorkFolder[MAX_PATH]; - WCHAR szWorkFile[MAX_PATH]; - SplitPath_FolderAndFile( m_szCurrentFilePath, szWorkFolder, szWorkFile ); - SetGrepFolder( GetItemHwnd(IDC_COMBO_FOLDER), szWorkFolder ); - } - /* サブフォルダーからも検索する */ ::CheckDlgButton( GetHwnd(), IDC_CHK_SUBFOLDER, m_bSubFolder ); From 34bc36f65a2088a280803ed168cb2bfaecd72cff Mon Sep 17 00:00:00 2001 From: dep5 Date: Thu, 9 Jun 2022 21:33:27 +0900 Subject: [PATCH 1000/1024] =?UTF-8?q?'=E5=85=83=E3=81=AB=E6=88=BB=E3=81=97?= =?UTF-8?q?=E3=81=A6-Wno-dev=E3=81=A7=E8=AD=A6=E5=91=8A=E3=82=92=E6=8A=91?= =?UTF-8?q?=E6=AD=A2=E3=81=99=E3=82=8B'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/compiletests.run.cmd | 2 ++ tests/compiletests/CMakeLists.txt | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/compiletests.run.cmd b/tests/compiletests.run.cmd index 693119235a..dc7cf8b79f 100644 --- a/tests/compiletests.run.cmd +++ b/tests/compiletests.run.cmd @@ -36,7 +36,9 @@ set CL_COMPILER=%CMD_CL:\=/% :: run cmake configuration. "%CMD_CMAKE%" -G %GENERATOR% ^ "-DCMAKE_MAKE_PROGRAM=%MAKE_PROGRAM%" ^ + "-DCMAKE_C_COMPILER=%CL_COMPILER%" ^ "-DCMAKE_CXX_COMPILER=%CL_COMPILER%" ^ + "-Wno-dev" ^ %GENERATOR_OPTS% ^ %SOURCE_DIR% ^ || endlocal && exit /b 1 diff --git a/tests/compiletests/CMakeLists.txt b/tests/compiletests/CMakeLists.txt index 26f2deae7f..9eb013436e 100644 --- a/tests/compiletests/CMakeLists.txt +++ b/tests/compiletests/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.12) -project(compile_test CXX) +enable_language(CXX) set( SAKURA_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../sakura_core) set( SAKURA_DEFINITIONS -D_DEBUG -D_UNICODE -DUNICODE -D_WIN32_WINNT=_WIN32_WINNT_WIN7) From 721e7b97582f7f538ba4454a448d6215899ea1d0 Mon Sep 17 00:00:00 2001 From: dep5 Date: Fri, 10 Jun 2022 21:54:22 +0900 Subject: [PATCH 1001/1024] =?UTF-8?q?SetGrepFolder=E3=82=92=E5=89=8A?= =?UTF-8?q?=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgGrep.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sakura_core/dlg/CDlgGrep.cpp b/sakura_core/dlg/CDlgGrep.cpp index 9692ff8553..af04b28164 100644 --- a/sakura_core/dlg/CDlgGrep.cpp +++ b/sakura_core/dlg/CDlgGrep.cpp @@ -259,10 +259,10 @@ int CDlgGrep::DoModal( HINSTANCE hInstance, HWND hwndParent, const WCHAR* pszCur if( m_szFile[0] == L'\0' && m_pShareData->m_sSearchKeywords.m_aGrepFiles.size() ){ wcscpy( m_szFile, m_pShareData->m_sSearchKeywords.m_aGrepFiles[0] ); /* 検索ファイル */ } - if( m_pShareData->m_Common.m_sSearch.m_bGrepDefaultFolder && m_szCurrentFilePath[0] != L'\0' ){ + if( m_szFolder[0] == L'\0' && m_pShareData->m_Common.m_sSearch.m_bGrepDefaultFolder && + m_szCurrentFilePath[0] != L'\0' ){ WCHAR szWorkFile[MAX_PATH]; SplitPath_FolderAndFile( m_szCurrentFilePath, m_szFolder, szWorkFile ); - SetGrepFolder( GetItemHwnd(IDC_COMBO_FOLDER), m_szFolder ); }else if( m_szFolder[0] == L'\0' && m_pShareData->m_sSearchKeywords.m_aGrepFolders.size() ){ wcscpy( m_szFolder, m_pShareData->m_sSearchKeywords.m_aGrepFolders[0] ); /* 検索フォルダー */ From 126af23bf56a392d061b656b36323773f41040b8 Mon Sep 17 00:00:00 2001 From: dep5 Date: Sat, 11 Jun 2022 21:38:34 +0900 Subject: [PATCH 1002/1024] =?UTF-8?q?OnInitDialog=E3=81=B8=E7=A7=BB?= =?UTF-8?q?=E5=8B=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgGrep.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/sakura_core/dlg/CDlgGrep.cpp b/sakura_core/dlg/CDlgGrep.cpp index af04b28164..22709ac497 100644 --- a/sakura_core/dlg/CDlgGrep.cpp +++ b/sakura_core/dlg/CDlgGrep.cpp @@ -250,20 +250,11 @@ int CDlgGrep::DoModal( HINSTANCE hInstance, HWND hwndParent, const WCHAR* pszCur m_bGrepOutputBaseFolder = m_pShareData->m_Common.m_sSearch.m_bGrepOutputBaseFolder; m_bGrepSeparateFolder = m_pShareData->m_Common.m_sSearch.m_bGrepSeparateFolder; - if( pszCurrentFilePath ){ // 2010.01.10 ryoji - wcscpy(m_szCurrentFilePath, pszCurrentFilePath); - } - // 2013.05.21 コンストラクタからDoModalに移動 // m_strText は呼び出し元で設定済み if( m_szFile[0] == L'\0' && m_pShareData->m_sSearchKeywords.m_aGrepFiles.size() ){ wcscpy( m_szFile, m_pShareData->m_sSearchKeywords.m_aGrepFiles[0] ); /* 検索ファイル */ } - if( m_szFolder[0] == L'\0' && m_pShareData->m_Common.m_sSearch.m_bGrepDefaultFolder && - m_szCurrentFilePath[0] != L'\0' ){ - WCHAR szWorkFile[MAX_PATH]; - SplitPath_FolderAndFile( m_szCurrentFilePath, m_szFolder, szWorkFile ); - }else if( m_szFolder[0] == L'\0' && m_pShareData->m_sSearchKeywords.m_aGrepFolders.size() ){ wcscpy( m_szFolder, m_pShareData->m_sSearchKeywords.m_aGrepFolders[0] ); /* 検索フォルダー */ } @@ -296,6 +287,10 @@ int CDlgGrep::DoModal( HINSTANCE hInstance, HWND hwndParent, const WCHAR* pszCur } } + if( pszCurrentFilePath ){ // 2010.01.10 ryoji + wcscpy(m_szCurrentFilePath, pszCurrentFilePath); + } + return (int)CDialog::DoModal( hInstance, hwndParent, IDD_GREP, (LPARAM)NULL ); } @@ -307,6 +302,14 @@ BOOL CDlgGrep::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) { _SetHwnd( hwndDlg ); + /* カレントフォルダーが初期値 */ + if((m_szFolder[0] == L'\0' || m_pShareData->m_Common.m_sSearch.m_bGrepDefaultFolder) && + m_szCurrentFilePath[0] != L'\0' + ){ + WCHAR szWorkFile[MAX_PATH]; + SplitPath_FolderAndFile( m_szCurrentFilePath, m_szFolder, szWorkFile ); + } + /* ユーザーがコンボボックスのエディット コントロールに入力できるテキストの長さを制限する */ // Combo_LimitText( GetItemHwnd( IDC_COMBO_TEXT ), _MAX_PATH - 1 ); Combo_LimitText( GetItemHwnd( IDC_COMBO_FILE ), _countof2(m_szFile) - 1 ); From 46f90a2711dec6c06dc8a441f66934baaf1d46f1 Mon Sep 17 00:00:00 2001 From: beru Date: Sat, 11 Jun 2022 21:48:46 +0900 Subject: [PATCH 1003/1024] =?UTF-8?q?CCaret::MoveCursor=20=E3=81=AB?= =?UTF-8?q?=E3=81=8A=E3=81=84=E3=81=A6=E7=B8=A6=E3=82=B9=E3=82=AF=E3=83=AD?= =?UTF-8?q?=E3=83=BC=E3=83=AB=E9=87=8F=E3=82=92=E6=8A=91=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CCaret.cpp | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/sakura_core/view/CCaret.cpp b/sakura_core/view/CCaret.cpp index d8c545f3e9..48a7d339da 100644 --- a/sakura_core/view/CCaret.cpp +++ b/sakura_core/view/CCaret.cpp @@ -294,6 +294,39 @@ CLayoutInt CCaret::MoveCursor( } // To Here 2007.07.28 じゅうじ if( bScroll ){ + if (abs((Int)nScrollRowNum) < 10) { + struct ScrollRowRecord { + Int nScrollRowNum; + DWORD dwTime; + }; + static ScrollRowRecord s_records[128] = {0}; + static size_t s_recordPos = 0; + DWORD dwNow = GetTickCount(); + Int nScrollRowsPerTiming = 0; + int nRecs = 0; + for (size_t i=0; i<_countof(s_records); ++i) { + auto& rec = s_records[i]; + DWORD dwTimeDiff = dwNow - rec.dwTime; + if (dwTimeDiff <= 100) { + nScrollRowsPerTiming += rec.nScrollRowNum; + ++nRecs; + } + } + if (abs(nScrollRowsPerTiming) >= 8) { + nScrollRowNum = std::min(nScrollRowNum, (CLayoutInt)+1); + nScrollRowNum = std::max(nScrollRowNum, (CLayoutInt)-1); + } + { + auto& rec = s_records[s_recordPos]; + rec.dwTime = dwNow; + rec.nScrollRowNum = nScrollRowNum; + ++s_recordPos; + if (s_recordPos >= _countof(s_records)) { + s_recordPos = 0; + } + } + } + /* スクロール */ if( t_abs( nScrollColNum ) >= m_pEditView->GetTextArea().m_nViewColNum || t_abs( nScrollRowNum ) >= m_pEditView->GetTextArea().m_nViewRowNum ){ From 0bb70e28b3d44881df85ba408d5c825b50c7e77d Mon Sep 17 00:00:00 2001 From: dep5 Date: Sat, 11 Jun 2022 21:53:15 +0900 Subject: [PATCH 1004/1024] =?UTF-8?q?nScrollRowNum=20=3D=200=E3=81=AB?= =?UTF-8?q?=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CCaret.cpp | 23 ++++++++++++----------- sakura_core/view/CEditView_Mouse.cpp | 2 +- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/sakura_core/view/CCaret.cpp b/sakura_core/view/CCaret.cpp index 48a7d339da..3664b10b1e 100644 --- a/sakura_core/view/CCaret.cpp +++ b/sakura_core/view/CCaret.cpp @@ -294,39 +294,40 @@ CLayoutInt CCaret::MoveCursor( } // To Here 2007.07.28 じゅうじ if( bScroll ){ - if (abs((Int)nScrollRowNum) < 10) { + if( abs( (Int)nScrollRowNum ) < 7 && + ( m_pEditView->GetSelectionInfo().IsMouseSelecting() || m_pEditView->m_bDragMode )){ struct ScrollRowRecord { Int nScrollRowNum; DWORD dwTime; }; - static ScrollRowRecord s_records[128] = {0}; + static ScrollRowRecord s_records[128] = { 0 }; static size_t s_recordPos = 0; DWORD dwNow = GetTickCount(); Int nScrollRowsPerTiming = 0; - int nRecs = 0; - for (size_t i=0; i<_countof(s_records); ++i) { + DWORD dwPerTiming = 80; + if( nScrollRowNum > 0 && m_pEditView->m_bDragMode) { + dwPerTiming = 30; + } + for( size_t i = 0; i < _countof( s_records ); ++i ){ auto& rec = s_records[i]; DWORD dwTimeDiff = dwNow - rec.dwTime; - if (dwTimeDiff <= 100) { + if( dwTimeDiff <= dwPerTiming ){ nScrollRowsPerTiming += rec.nScrollRowNum; - ++nRecs; } } - if (abs(nScrollRowsPerTiming) >= 8) { - nScrollRowNum = std::min(nScrollRowNum, (CLayoutInt)+1); - nScrollRowNum = std::max(nScrollRowNum, (CLayoutInt)-1); + if( abs( nScrollRowsPerTiming ) >= 1 ){ + nScrollRowNum = 0; } { auto& rec = s_records[s_recordPos]; rec.dwTime = dwNow; rec.nScrollRowNum = nScrollRowNum; ++s_recordPos; - if (s_recordPos >= _countof(s_records)) { + if( s_recordPos >= _countof( s_records ) ){ s_recordPos = 0; } } } - /* スクロール */ if( t_abs( nScrollColNum ) >= m_pEditView->GetTextArea().m_nViewColNum || t_abs( nScrollRowNum ) >= m_pEditView->GetTextArea().m_nViewRowNum ){ diff --git a/sakura_core/view/CEditView_Mouse.cpp b/sakura_core/view/CEditView_Mouse.cpp index a6dffed35e..d168cc4331 100644 --- a/sakura_core/view/CEditView_Mouse.cpp +++ b/sakura_core/view/CEditView_Mouse.cpp @@ -1192,7 +1192,7 @@ void CEditView::OnMOUSEMOVE( WPARAM fwKeys, int xPos_, int yPos_ ) } } }else{ - GetCaret().MoveCursorToClientPoint( ptMouse, true, &ptNewCursor ); + GetCaret().MoveCursorToClientPoint( ptMouse, false, &ptNewCursor ); } GetSelectionInfo().m_ptMouseRollPosOld = ptMouse; // マウス範囲選択前回位置(XY座標) From 89b478fca31a86d765128a24437c6f09b557726e Mon Sep 17 00:00:00 2001 From: dep5 Date: Sat, 11 Jun 2022 22:51:18 +0900 Subject: [PATCH 1005/1024] =?UTF-8?q?szWorkFile=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/dlg/CDlgGrep.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sakura_core/dlg/CDlgGrep.cpp b/sakura_core/dlg/CDlgGrep.cpp index 22709ac497..66ea14dd48 100644 --- a/sakura_core/dlg/CDlgGrep.cpp +++ b/sakura_core/dlg/CDlgGrep.cpp @@ -306,8 +306,7 @@ BOOL CDlgGrep::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) if((m_szFolder[0] == L'\0' || m_pShareData->m_Common.m_sSearch.m_bGrepDefaultFolder) && m_szCurrentFilePath[0] != L'\0' ){ - WCHAR szWorkFile[MAX_PATH]; - SplitPath_FolderAndFile( m_szCurrentFilePath, m_szFolder, szWorkFile ); + SplitPath_FolderAndFile( m_szCurrentFilePath, m_szFolder, nullptr ); } /* ユーザーがコンボボックスのエディット コントロールに入力できるテキストの長さを制限する */ From 2ebe5a4695ca31fad9ece936b3134ba4184c9bd0 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 12 Jun 2022 17:27:07 +0900 Subject: [PATCH 1006/1024] fix 'Do not throw uncaught exceptions in a destructor.' --- sakura_core/CGrepAgent.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/sakura_core/CGrepAgent.cpp b/sakura_core/CGrepAgent.cpp index da4c5e0a29..5f2b6e657b 100644 --- a/sakura_core/CGrepAgent.cpp +++ b/sakura_core/CGrepAgent.cpp @@ -1738,9 +1738,10 @@ class CError_WriteFileOpen class CWriteData{ public: - CWriteData(int& hit, LPCWSTR name, ECodeType code_, bool bBom_, bool bOldSave_, CNativeW& message) + CWriteData(int& hit, LPCWSTR name_, ECodeType code_, bool bBom_, bool bOldSave_, CNativeW& message) :nHitCount(hit) - ,fileName(name) + ,fileName(name_) + ,name(name_) ,code(code_) ,bBom(bBom_) ,bOldSave(bOldSave_) @@ -1748,7 +1749,9 @@ class CWriteData{ ,out(NULL) ,pcCodeBase(CCodeFactory::CreateCodeBase(code_,0)) ,memMessage(message) - {} + { + name += L".skrnew"; + } void AppendBuffer(const CNativeW& strLine) { if( !out ){ @@ -1765,8 +1768,6 @@ class CWriteData{ void OutputHead() { if( !out ){ - std::wstring name = fileName; - name += L".skrnew"; try{ out = new CBinaryOutputStream(name.c_str(), true); }catch( const CError_FileOpen& ){ @@ -1819,8 +1820,6 @@ class CWriteData{ return; } } - std::wstring name(fileName); - name += L".skrnew"; if( FALSE == ::MoveFile( name.c_str(), fileName ) ){ memMessage.AppendString( LS(STR_GREP_REP_ERR_REPLACE) ); memMessage.AppendStringF( L"[%s]\r\n", fileName ); @@ -1835,14 +1834,13 @@ class CWriteData{ out->Close(); delete out; out = NULL; - std::wstring name(fileName); - name += L".skrnew"; ::DeleteFile( name.c_str() ); } } private: int& nHitCount; LPCWSTR fileName; + std::wstring name; ECodeType code; bool bBom; bool bOldSave; From 3e2c94b3fb33d5ca187dbbf92db3b7772148718c Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 12 Jun 2022 15:03:30 +0900 Subject: [PATCH 1007/1024] =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=82=AF=E3=83=AB?= =?UTF-8?q?=E3=83=BC=E3=83=89=20ShellAPI.h=20=E3=82=92=20shellapi.h=20?= =?UTF-8?q?=E3=81=AB=E8=A8=82=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/StdAfx.h | 2 +- sakura_core/_os/CClipboard.cpp | 2 +- sakura_core/dlg/CDlgAbout.cpp | 2 +- sakura_core/dlg/CDlgGrep.cpp | 2 +- sakura_core/io/CZipFile.cpp | 2 +- sakura_core/prop/CPropComPlugin.cpp | 2 +- sakura_core/view/CEditView.h | 2 +- sakura_core/window/CEditWnd.h | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/sakura_core/StdAfx.h b/sakura_core/StdAfx.h index 971b0809ab..b993d0f66c 100644 --- a/sakura_core/StdAfx.h +++ b/sakura_core/StdAfx.h @@ -99,7 +99,7 @@ #include #include #include -#include +#include #include #include diff --git a/sakura_core/_os/CClipboard.cpp b/sakura_core/_os/CClipboard.cpp index d5d94f5b65..ad9f2ad01d 100644 --- a/sakura_core/_os/CClipboard.cpp +++ b/sakura_core/_os/CClipboard.cpp @@ -25,7 +25,7 @@ */ #include "StdAfx.h" -#include // HDROP +#include // HDROP #include "CClipboard.h" #include "doc/CEditDoc.h" #include "charset/CCodeMediator.h" diff --git a/sakura_core/dlg/CDlgAbout.cpp b/sakura_core/dlg/CDlgAbout.cpp index 6badf7c807..5fad824420 100644 --- a/sakura_core/dlg/CDlgAbout.cpp +++ b/sakura_core/dlg/CDlgAbout.cpp @@ -20,7 +20,7 @@ */ #include "StdAfx.h" -#include +#include #include "dlg/CDlgAbout.h" #include "uiparts/HandCursor.h" #include "util/file.h" diff --git a/sakura_core/dlg/CDlgGrep.cpp b/sakura_core/dlg/CDlgGrep.cpp index 4b24971f45..db440a4bd2 100644 --- a/sakura_core/dlg/CDlgGrep.cpp +++ b/sakura_core/dlg/CDlgGrep.cpp @@ -17,7 +17,7 @@ Please contact the copyright holder to use this code for other purpose. */ #include "StdAfx.h" -#include +#include #include "dlg/CDlgGrep.h" #include "CGrepAgent.h" #include "CGrepEnumKeys.h" diff --git a/sakura_core/io/CZipFile.cpp b/sakura_core/io/CZipFile.cpp index 143b38f689..a4a6f43e53 100644 --- a/sakura_core/io/CZipFile.cpp +++ b/sakura_core/io/CZipFile.cpp @@ -27,7 +27,7 @@ distribution. */ #include "StdAfx.h" -#include +#include #include "CZipFile.h" #include "basis/CMyString.h" diff --git a/sakura_core/prop/CPropComPlugin.cpp b/sakura_core/prop/CPropComPlugin.cpp index 9f124f5d67..f948e986f4 100644 --- a/sakura_core/prop/CPropComPlugin.cpp +++ b/sakura_core/prop/CPropComPlugin.cpp @@ -29,7 +29,7 @@ */ #include "StdAfx.h" -#include +#include #include "prop/CPropCommon.h" #include "CEditApp.h" #include "plugin/CJackManager.h" diff --git a/sakura_core/view/CEditView.h b/sakura_core/view/CEditView.h index 3796feed19..d3ced9be15 100644 --- a/sakura_core/view/CEditView.h +++ b/sakura_core/view/CEditView.h @@ -45,7 +45,7 @@ #include #include // LPDATAOBJECT -#include // HDROP +#include // HDROP #include diff --git a/sakura_core/window/CEditWnd.h b/sakura_core/window/CEditWnd.h index bc5b668eb6..42d74223f2 100644 --- a/sakura_core/window/CEditWnd.h +++ b/sakura_core/window/CEditWnd.h @@ -44,7 +44,7 @@ #define SAKURA_CEDITWND_6C771A35_3CC8_4932_BF15_823C40487A9F_H_ #pragma once -#include // HDROP +#include // HDROP #include "_main/global.h" #include "CMainToolBar.h" #include "CTabWnd.h" //@@@ 2003.05.31 MIK From 3ab37868e3b62d72358c984ba2cf4b679a520b88 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 12 Jun 2022 22:59:33 +0900 Subject: [PATCH 1008/1024] SONAR_QUBE_VERSION: '4.7.0.2747' --- .github/workflows/sonarscan.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/sonarscan.yml b/.github/workflows/sonarscan.yml index 9921c643d9..0712390782 100644 --- a/.github/workflows/sonarscan.yml +++ b/.github/workflows/sonarscan.yml @@ -33,7 +33,7 @@ jobs: env: BUILD_PLATFORM: x64 BUILD_CONFIGURATION: Debug - SONAR_QUBE_VERSION: '4.5.0.2216' + SONAR_QUBE_VERSION: '4.7.0.2747' steps: - name: Checkout From 3e42de603f5185071702b97717860858d39eeb27 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Mon, 13 Jun 2022 20:36:22 +0900 Subject: [PATCH 1009/1024] =?UTF-8?q?CDllImp::DeinitDll=E3=82=92noexcept?= =?UTF-8?q?=E3=81=A8=E3=83=9E=E3=83=BC=E3=82=AF=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/extmodule/CDllHandler.cpp | 2 +- sakura_core/extmodule/CDllHandler.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sakura_core/extmodule/CDllHandler.cpp b/sakura_core/extmodule/CDllHandler.cpp index 492fe89cb7..5344e667ce 100644 --- a/sakura_core/extmodule/CDllHandler.cpp +++ b/sakura_core/extmodule/CDllHandler.cpp @@ -125,7 +125,7 @@ EDllResult CDllImp::InitDll(LPCWSTR pszSpecifiedDllName) } } -bool CDllImp::DeinitDll(bool force) +bool CDllImp::DeinitDll(bool force) noexcept { if( m_hInstance == NULL || (!IsAvailable()) ){ // DLLが読み込まれていなければ何もしない diff --git a/sakura_core/extmodule/CDllHandler.h b/sakura_core/extmodule/CDllHandler.h index 40d4f86fc2..335911a0a3 100644 --- a/sakura_core/extmodule/CDllHandler.h +++ b/sakura_core/extmodule/CDllHandler.h @@ -131,7 +131,7 @@ class CDllImp{ //! 終了処理とDLLアンロード bool DeinitDll( bool force = false //!< [in] 終了処理に失敗してもDLLを解放するかどうか - ); + ) noexcept; //! インスタンスハンドルの取得 HINSTANCE GetInstance() const { return m_hInstance; } From 22df1687463c9eb35e6088a2380718423a61d376 Mon Sep 17 00:00:00 2001 From: dep5 Date: Mon, 13 Jun 2022 22:21:24 +0900 Subject: [PATCH 1010/1024] =?UTF-8?q?SonarCloud=E3=81=AE=E6=8C=87=E6=91=98?= =?UTF-8?q?=E3=81=AB=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CCaret.cpp | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/sakura_core/view/CCaret.cpp b/sakura_core/view/CCaret.cpp index 3664b10b1e..812d357630 100644 --- a/sakura_core/view/CCaret.cpp +++ b/sakura_core/view/CCaret.cpp @@ -296,36 +296,34 @@ CLayoutInt CCaret::MoveCursor( if( bScroll ){ if( abs( (Int)nScrollRowNum ) < 7 && ( m_pEditView->GetSelectionInfo().IsMouseSelecting() || m_pEditView->m_bDragMode )){ - struct ScrollRowRecord { + struct ScrollRowRecord{ Int nScrollRowNum; DWORD dwTime; }; - static ScrollRowRecord s_records[128] = { 0 }; + static std::array s_records{}; static size_t s_recordPos = 0; DWORD dwNow = GetTickCount(); Int nScrollRowsPerTiming = 0; DWORD dwPerTiming = 80; - if( nScrollRowNum > 0 && m_pEditView->m_bDragMode) { + if( nScrollRowNum > 0 && m_pEditView->m_bDragMode ){ dwPerTiming = 30; } - for( size_t i = 0; i < _countof( s_records ); ++i ){ - auto& rec = s_records[i]; - DWORD dwTimeDiff = dwNow - rec.dwTime; - if( dwTimeDiff <= dwPerTiming ){ - nScrollRowsPerTiming += rec.nScrollRowNum; - } - } + + std::for_each(s_records.begin(), s_records.end(), + [ dwNow, dwPerTiming, &nScrollRowsPerTiming ]( ScrollRowRecord rec ){ + if( ( dwNow - rec.dwTime ) <= dwPerTiming ){ + nScrollRowsPerTiming += rec.nScrollRowNum; + } + }); if( abs( nScrollRowsPerTiming ) >= 1 ){ nScrollRowNum = 0; } - { - auto& rec = s_records[s_recordPos]; - rec.dwTime = dwNow; - rec.nScrollRowNum = nScrollRowNum; - ++s_recordPos; - if( s_recordPos >= _countof( s_records ) ){ - s_recordPos = 0; - } + auto& rec = s_records[s_recordPos]; + rec.dwTime = dwNow; + rec.nScrollRowNum = nScrollRowNum; + ++s_recordPos; + if( s_recordPos >= s_records.size() ){ + s_recordPos = 0; } } /* スクロール */ From 0260ace8a1027b9a259768aea48c369e5480171e Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Sun, 19 Jun 2022 12:22:12 +0900 Subject: [PATCH 1011/1024] =?UTF-8?q?Windows=20SDK=E3=81=AE=E3=83=9E?= =?UTF-8?q?=E3=82=AF=E3=83=AD=E5=AE=9A=E6=95=B0=E3=80=8CNULL=E3=80=8D?= =?UTF-8?q?=E3=82=92=E5=86=8D=E5=AE=9A=E7=BE=A9=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit コードでマクロ定数「NULL」を使った場合にCode Smellsが検出されてしまうのを対処します。 Use the "nullptr" literal.https://sonarcloud.io/project/issues?issues=AXXRqVBbpi7wsJ_Rmynv&open=AXXRqVBbpi7wsJ_Rmynv&id=sakura-editor_sakura --- sakura_core/StdAfx.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/sakura_core/StdAfx.h b/sakura_core/StdAfx.h index b993d0f66c..3b9961dc57 100644 --- a/sakura_core/StdAfx.h +++ b/sakura_core/StdAfx.h @@ -103,6 +103,21 @@ #include #include +// Windows SDKのマクロ定数「NULL」を訂正する。 +// マクロ定数「NULL」は、省略可能なポインタ型パラメータに「省略」を指定するために使う。 +// オリジナルでは「#define NULL 0」と定義されている。 +// C++ではC++11からnullptrキーワードが導入されており、 +// ポインタ型に0を渡すのは「不適切」になっている。 +// 従来通りマクロ定数「NULL」を書けるようにするため、独自に上書き定義してしまう。 +#ifdef _MSC_VER +# ifdef __cplusplus +# pragma warning( push ) +# pragma warning( disable : 4005 ) +# define NULL nullptr +# pragma warning( pop ) +# endif // end of #ifdef __cplusplus +#endif // end of #ifdef _MSC_VER + // プロジェクト内のファイルだがプリコンパイル対象とする。 // プリコンパイルの有無がビルドパフォーマンスに大きく影響するため。 #include "env/DLLSHAREDATA.h" From fa524e8baa451fabec4bee6eeb60c7c205b0053a Mon Sep 17 00:00:00 2001 From: dep5 <66961537+dep5@users.noreply.github.com> Date: Sun, 19 Jun 2022 19:39:42 +0900 Subject: [PATCH 1012/1024] =?UTF-8?q?=E9=85=8D=E5=88=97=E3=81=AE=E8=A6=81?= =?UTF-8?q?=E7=B4=A0=E6=95=B0=E3=82=92=E5=A2=97=E3=82=84=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/view/CCaret.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/view/CCaret.cpp b/sakura_core/view/CCaret.cpp index 812d357630..644976b8bc 100644 --- a/sakura_core/view/CCaret.cpp +++ b/sakura_core/view/CCaret.cpp @@ -300,7 +300,7 @@ CLayoutInt CCaret::MoveCursor( Int nScrollRowNum; DWORD dwTime; }; - static std::array s_records{}; + static std::array s_records{}; static size_t s_recordPos = 0; DWORD dwNow = GetTickCount(); Int nScrollRowsPerTiming = 0; From 312de3a29a322ed0e50b25229f20f3b1665cd3e4 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Wed, 22 Jun 2022 21:50:50 +0900 Subject: [PATCH 1013/1024] =?UTF-8?q?CNativeW=E3=81=AE=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=B1=E3=83=BC=E3=82=B9=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-cnative.cpp | 64 +++++++++++++++----------------- 1 file changed, 29 insertions(+), 35 deletions(-) diff --git a/tests/unittests/test-cnative.cpp b/tests/unittests/test-cnative.cpp index a0e4b02ef5..59d26873df 100644 --- a/tests/unittests/test-cnative.cpp +++ b/tests/unittests/test-cnative.cpp @@ -28,6 +28,17 @@ #include "mem/CNativeW.h" #include "mem/CNativeA.h" +// NULL定義補正 +// 詳細はStdAfx.hを参照 +#ifdef _MSC_VER +# ifdef __cplusplus +# pragma warning( push ) +# pragma warning( disable : 4005 ) +# define NULL nullptr +# pragma warning( pop ) +# endif // end of #ifdef __cplusplus +#endif // end of #ifdef _MSC_VER + /*! CStringRefのテスト */ @@ -37,7 +48,7 @@ TEST(CStringRef, CStringRef) constexpr const size_t cch = _countof(sz) - 1; CStringRef v1; - EXPECT_EQ(nullptr, v1.GetPtr()); + EXPECT_EQ(NULL, v1.GetPtr()); EXPECT_EQ(0, v1.GetLength()); EXPECT_FALSE(v1.IsValid()); EXPECT_EQ(L'\0', v1.At(0)); @@ -132,11 +143,11 @@ TEST(CNativeW, ConstructWithStringNull) { CNativeW value(NULL); EXPECT_EQ(0, value.GetStringLength()); - EXPECT_EQ(nullptr, value.GetStringPtr()); + EXPECT_EQ(NULL, value.GetStringPtr()); - CNativeW value2(nullptr); + CNativeW value2(NULL); EXPECT_EQ(0, value2.GetStringLength()); - EXPECT_EQ(nullptr, value2.GetStringPtr()); + EXPECT_EQ(NULL, value2.GetStringPtr()); } /*! @@ -261,16 +272,16 @@ TEST(CNativeW, AssignString) } /*! - * @brief 代入演算子(nullptr指定)の仕様 + * @brief 代入演算子(NULL指定)の仕様 * @remark バッファを確保している場合は解放される * @remark 文字列長はゼロになる */ TEST(CNativeW, AssignStringNullPointer) { CNativeW value(L"test"); - value = nullptr; + value = NULL; EXPECT_EQ(0, value.GetStringLength()); - EXPECT_EQ(nullptr, value.GetStringPtr()); + EXPECT_EQ(NULL, value.GetStringPtr()); } /*! @@ -321,35 +332,18 @@ TEST(CNativeW, AppendString) } /*! - * @brief 加算代入演算子(nullptr指定)の仕様 + * @brief 加算代入演算子(NULL指定)の仕様 * @remark 加算代入しても内容に変化無し */ TEST(CNativeW, AppendStringNullPointer) { CNativeW org(L"orz"); CNativeW value(org); - value += nullptr; + value += NULL; EXPECT_EQ(value.GetStringLength(), org.GetStringLength()); EXPECT_EQ(org, value); } -/*! - * @brief 加算代入演算子(NULL指定)の仕様 - * @remark バッファが確保される - * @remark 文字列長は演算子呼出前の文字列長+1になる - */ -TEST(CNativeW, AppendStringNullLiteral) -{ - CNativeW value; -#ifdef _MSC_VER - value += NULL; // operator += (wchar_t) と解釈される -#else - value += static_cast(NULL); -#endif - ASSERT_STREQ(L"", value.GetStringPtr()); - EXPECT_EQ(1, value.GetStringLength()); -} - /*! * @brief 独自関数AppendStringFの仕様 * @remark 指定したフォーマットで、引数がフォーマットされる @@ -364,7 +358,7 @@ TEST(CNativeW, AppendStringWithFormatting) ASSERT_STREQ(L"いちご100%", value.GetStringPtr()); // フォーマットに NULL を渡したケースをテストする - ASSERT_THROW(value.AppendStringF(std::wstring_view(nullptr, 0)), std::invalid_argument); + ASSERT_THROW(value.AppendStringF(std::wstring_view(NULL, 0)), std::invalid_argument); ASSERT_THROW(value.AppendStringF(std::wstring_view(L"ダミー", 0)), std::invalid_argument); // 文字列長を0にして、追加確保が行われないケースをテストする @@ -411,12 +405,12 @@ TEST(CNativeW, operatorEqualNull) /*! * @brief 等価比較演算子のテスト - * nullptrとの等価比較を行う + * NULLとの等価比較を行う */ TEST(CNativeW, operatorEqualNullptr) { CNativeW value; - ASSERT_EQ(value, nullptr); + ASSERT_EQ(value, NULL); } /*! @@ -553,13 +547,13 @@ TEST(CNativeW, operatorNotEqualAlmostSameString) /*! * @brief 否定の等価比較演算子のテスト - * nullptrとの等価比較を行う + * NULLとの等価比較を行う */ TEST(CNativeW, operatorNotEqualNullptr) { constexpr const wchar_t text[] = L"おっす!オラ(ry"; CNativeW value(text); - ASSERT_NE(value, nullptr); + ASSERT_NE(value, NULL); } /*! @@ -731,16 +725,16 @@ TEST(CNativeW, CompareWithCNativeW) /*! * 文字列ポインタ型との比較のテスト * - * @remark < 0 自身がメモリ未確保、かつ、比較対象がnullptr以外 + * @remark < 0 自身がメモリ未確保、かつ、比較対象がNULL以外 * @remark < 0 文字列値が比較対象より小さい - * @remark == 0 自身がメモリ未確保、かつ、比較対象がnullptr - * @remark > 0 自身がメモリ確保済み、かつ、比較対象がnullptr + * @remark == 0 自身がメモリ未確保、かつ、比較対象がNULL + * @remark > 0 自身がメモリ確保済み、かつ、比較対象がNULL * @remark > 0 文字列値が比較対象より大きい */ TEST(CNativeW, CompareWithStringPtr) { //互いに値の異なる文字列定数を定義する - constexpr const wchar_t* pcN0 = nullptr; + constexpr const wchar_t* pcN0 = NULL; constexpr const wchar_t szS0[] = L"ab"; constexpr const wchar_t szM0[] = L"aac"; constexpr const wchar_t szM1[] = L"abc"; From 5254b557b0021d4affdb454a64bcf183541e8a62 Mon Sep 17 00:00:00 2001 From: Mari Sano Date: Wed, 22 Jun 2022 23:12:49 +0900 Subject: [PATCH 1014/1024] =?UTF-8?q?=E3=83=9E=E3=82=AF=E3=83=AD=E5=AE=9A?= =?UTF-8?q?=E6=95=B0=E3=80=8CNULL=E3=80=8D=E3=81=AE=E5=86=8D=E5=AE=9A?= =?UTF-8?q?=E7=BE=A9(MinGW=E5=AF=BE=E5=BF=9C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MSVCだけでなくMinGWのヘッダーにも対応が必要と分かったので対応します。 また、「(int)NULL」という記述があったので修正しておきます。 --- sakura_core/StdAfx.h | 14 ++++++-------- sakura_core/print/CPrint.cpp | 2 +- tests/unittests/test-cnative.cpp | 14 ++++++-------- 3 files changed, 13 insertions(+), 17 deletions(-) diff --git a/sakura_core/StdAfx.h b/sakura_core/StdAfx.h index 3b9961dc57..701718d56c 100644 --- a/sakura_core/StdAfx.h +++ b/sakura_core/StdAfx.h @@ -109,14 +109,12 @@ // C++ではC++11からnullptrキーワードが導入されており、 // ポインタ型に0を渡すのは「不適切」になっている。 // 従来通りマクロ定数「NULL」を書けるようにするため、独自に上書き定義してしまう。 -#ifdef _MSC_VER -# ifdef __cplusplus -# pragma warning( push ) -# pragma warning( disable : 4005 ) -# define NULL nullptr -# pragma warning( pop ) -# endif // end of #ifdef __cplusplus -#endif // end of #ifdef _MSC_VER +#ifdef __cplusplus +# pragma warning( push ) +# pragma warning( disable : 4005 ) +# define NULL nullptr +# pragma warning( pop ) +#endif // end of #ifdef __cplusplus // プロジェクト内のファイルだがプリコンパイル対象とする。 // プリコンパイルの有無がビルドパフォーマンスに大きく影響するため。 diff --git a/sakura_core/print/CPrint.cpp b/sakura_core/print/CPrint.cpp index d4b16d60e9..1382706182 100644 --- a/sakura_core/print/CPrint.cpp +++ b/sakura_core/print/CPrint.cpp @@ -394,7 +394,7 @@ BOOL CPrint::GetPrintMetrics( /* 最小左マージンと最小上マージンを取得(1mm単位) */ POINT po; - if( 0 < ::Escape( hdc, GETPRINTINGOFFSET, (int)NULL, NULL, (LPPOINT)&po ) ){ + if( 0 < ::Escape( hdc, GETPRINTINGOFFSET, 0, NULL, (LPPOINT)&po ) ){ ::DPtoLP( hdc, &po, 1 ); *pnPaperOffsetLeft = (short)abs( po.x ); /* 用紙余白左端 */ *pnPaperOffsetTop = (short)abs( po.y ); /* 用紙余白上端 */ diff --git a/tests/unittests/test-cnative.cpp b/tests/unittests/test-cnative.cpp index 59d26873df..46d6ed3db7 100644 --- a/tests/unittests/test-cnative.cpp +++ b/tests/unittests/test-cnative.cpp @@ -30,14 +30,12 @@ // NULL定義補正 // 詳細はStdAfx.hを参照 -#ifdef _MSC_VER -# ifdef __cplusplus -# pragma warning( push ) -# pragma warning( disable : 4005 ) -# define NULL nullptr -# pragma warning( pop ) -# endif // end of #ifdef __cplusplus -#endif // end of #ifdef _MSC_VER +#ifdef __cplusplus +# pragma warning( push ) +# pragma warning( disable : 4005 ) +# define NULL nullptr +# pragma warning( pop ) +#endif // end of #ifdef __cplusplus /*! CStringRefのテスト From 31f2624066819394e95119609a8ffaf9b4415b43 Mon Sep 17 00:00:00 2001 From: dAu6jARL Date: Mon, 4 Jul 2022 00:09:56 +0900 Subject: [PATCH 1015/1024] resolve unavailable Oniguruma URL change URL http://www.geocities.jp/kosako3/oniguruma to https://github.com/kkos/oniguruma --- help/sakura/res/HLP000089.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/help/sakura/res/HLP000089.html b/help/sakura/res/HLP000089.html index cf6869b6c9..576af920e8 100644 --- a/help/sakura/res/HLP000089.html +++ b/help/sakura/res/HLP000089.html @@ -48,8 +48,8 @@

    文字集合(キャラクタクラス)

    x-y範囲
    [A-Z]は、「A」から「Z」までの文字のどれか1つとマッチします。 [...](鬼) 文字集合内文字集合 ..&&..(鬼) 積演算 -[:xxxxx:](鬼) POSIXブラケット -[:^xxxxx:](鬼) POSIXブラケット(否定) +[:xxxxx:](鬼) POSIXブラケット +[:^xxxxx:](鬼) POSIXブラケット(否定) (鬼) はbregonig.dllのみ

    @@ -107,8 +107,8 @@

    文字種

    \S空白類文字以外 \d10進数字
    (Unicode版) 2バイト文字=全角数字も含む \D10進数字以外 -\p{property-name}(鬼) キャラクタプロパティ -\p{^property-name}
    \P{property-name}
    (鬼) キャラクタプロパティ(否定) +\p{property-name}(鬼) キャラクタプロパティ +\p{^property-name}
    \P{property-name}
    (鬼) キャラクタプロパティ(否定) (鬼) はbregonig.dllのみ
    (Unicode版) はUnicode版のサクラエディタ
    From c491dd4ef184e8777a83d70bf84399f3dc3c5fff Mon Sep 17 00:00:00 2001 From: lainon Date: Mon, 18 Jul 2022 17:59:57 +0300 Subject: [PATCH 1016/1024] Code modernize C++17, refactor and minor optimize --- sakura_core/CDicMgr.cpp | 3 ++- sakura_core/CGrepAgent.cpp | 3 +-- sakura_core/CGrepEnumFileBase.h | 7 ++++--- sakura_core/CGrepEnumKeys.h | 8 ++++---- sakura_core/CProfile.cpp | 12 ++++++------ sakura_core/CProfile.h | 1 - sakura_core/CPropertyManager.cpp | 2 +- sakura_core/CSelectLang.h | 4 ++-- sakura_core/_main/CControlTray.cpp | 2 +- sakura_core/basis/CMySize.h | 2 +- sakura_core/basis/CStrictRange.h | 3 +-- sakura_core/charset/CCodePage.cpp | 4 ++-- sakura_core/cmd/CViewCommander_Bookmark.cpp | 12 ++++++++---- sakura_core/cmd/CViewCommander_File.cpp | 10 +++++----- sakura_core/cmd/CViewCommander_Grep.cpp | 2 +- sakura_core/cmd/CViewCommander_Search.cpp | 8 ++++---- sakura_core/cmd/CViewCommander_TagJump.cpp | 8 ++++---- sakura_core/dlg/CDlgAbout.cpp | 2 +- sakura_core/dlg/CDlgGrep.cpp | 2 +- sakura_core/dlg/CDlgOpenFile.cpp | 4 +--- sakura_core/dlg/CDlgOpenFile.h | 2 +- .../dlg/CDlgOpenFile_CommonFileDialog.cpp | 8 ++++---- .../dlg/CDlgOpenFile_CommonItemDialog.cpp | 1 + sakura_core/dlg/CDlgPluginOption.cpp | 11 +++++------ sakura_core/dlg/CDlgProfileMgr.cpp | 2 +- sakura_core/dlg/CDlgReplace.cpp | 2 +- sakura_core/dlg/CDlgTagJumpList.cpp | 2 +- sakura_core/doc/CDocFileOperation.cpp | 4 ++-- sakura_core/doc/CDocOutline.cpp | 4 ++-- sakura_core/doc/logic/CDocLine.cpp | 4 +--- sakura_core/docplus/CDiffManager.h | 2 +- sakura_core/env/CSakuraEnvironment.cpp | 2 +- sakura_core/env/CommonSetting.cpp | 4 +--- sakura_core/extmodule/CBregexp.cpp | 10 +++++----- sakura_core/extmodule/CDllHandler.cpp | 2 +- sakura_core/io/CFileLoad.cpp | 2 +- sakura_core/io/CZipFile.cpp | 2 +- sakura_core/macro/CIfObj.h | 2 +- sakura_core/macro/CMacro.cpp | 6 +++--- sakura_core/macro/CMacroFactory.cpp | 3 +-- sakura_core/macro/CSMacroMgr.cpp | 2 +- sakura_core/macro/CSMacroMgr.h | 2 +- sakura_core/macro/CWSHManager.cpp | 2 +- sakura_core/outline/CDlgFuncList.cpp | 10 +++++----- sakura_core/outline/CFuncInfo.cpp | 4 +--- sakura_core/outline/CFuncInfoArr.cpp | 2 +- sakura_core/plugin/CDllPlugin.cpp | 2 +- sakura_core/plugin/CPlugin.cpp | 15 +++++++++------ sakura_core/plugin/CPlugin.h | 12 +++++------- sakura_core/plugin/CPluginIfObj.h | 2 +- sakura_core/plugin/CPluginManager.cpp | 4 ++-- sakura_core/plugin/CWSHPlugin.cpp | 2 +- sakura_core/prop/CPropComMainMenu.cpp | 8 ++++---- sakura_core/prop/CPropComPlugin.cpp | 6 +++--- sakura_core/prop/CPropCommon.cpp | 4 +--- sakura_core/typeprop/CDlgTypeAscertain.cpp | 2 +- sakura_core/typeprop/CDlgTypeList.cpp | 15 ++++++--------- sakura_core/typeprop/CImpExpManager.cpp | 7 +++---- sakura_core/typeprop/CPropTypes.cpp | 4 +--- sakura_core/types/CType_Asm.cpp | 8 ++++---- sakura_core/uiparts/CGraphics.cpp | 2 +- sakura_core/util/design_template.h | 2 +- sakura_core/util/file.cpp | 2 +- sakura_core/view/CEditView.cpp | 16 +++++++--------- sakura_core/view/CEditView_Command_New.cpp | 2 +- sakura_core/view/CEditView_Mouse.cpp | 2 +- sakura_core/view/CEditView_Paint.cpp | 1 + sakura_core/window/CEditWnd.cpp | 4 ++-- sakura_core/window/CMainToolBar.cpp | 4 ++-- 69 files changed, 154 insertions(+), 168 deletions(-) diff --git a/sakura_core/CDicMgr.cpp b/sakura_core/CDicMgr.cpp index 4579f2ec7c..1110b02f13 100644 --- a/sakura_core/CDicMgr.cpp +++ b/sakura_core/CDicMgr.cpp @@ -70,6 +70,7 @@ BOOL CDicMgr::Search( } wchar_t szLine[LINEREADBUFSIZE]; + size_t szDelimit = wcslen(pszDelimit); for(int line=1 ; in; line++ ){ // 2006.04.10 fon //1行読み込み { @@ -81,7 +82,7 @@ BOOL CDicMgr::Search( pszWork = wcsstr( szLine, pszDelimit ); if( NULL != pszWork && szLine[0] != L';' ){ *pszWork = L'\0'; - pszWork += wcslen( pszDelimit ); + pszWork += szDelimit; /* 最初のトークンを取得します。 */ wchar_t *context = NULL; diff --git a/sakura_core/CGrepAgent.cpp b/sakura_core/CGrepAgent.cpp index 5f2b6e657b..4cba6b4b61 100644 --- a/sakura_core/CGrepAgent.cpp +++ b/sakura_core/CGrepAgent.cpp @@ -122,8 +122,7 @@ class CFileLoadOrWnd{ , m_nLineNum(0) { } - ~CFileLoadOrWnd(){ - } + ~CFileLoadOrWnd() = default; ECodeType FileOpen(const WCHAR* pszFile, bool bBigFile, ECodeType charCode, int nFlag) { if( m_hWnd ){ diff --git a/sakura_core/CGrepEnumFileBase.h b/sakura_core/CGrepEnumFileBase.h index 88a8229332..9101385843 100644 --- a/sakura_core/CGrepEnumFileBase.h +++ b/sakura_core/CGrepEnumFileBase.h @@ -115,8 +115,9 @@ class CGrepEnumFileBase { int Enumerates( LPCWSTR lpBaseFolder, VGrepEnumKeys& vecKeys, CGrepEnumOptions& option, CGrepEnumFileBase* pExceptItems = NULL ){ int found = 0; + size_t szBaseFolder = wcslen(lpBaseFolder); for( int i = 0; i < (int)vecKeys.size(); i++ ){ - int baseLen = wcslen( lpBaseFolder ); + int baseLen = szBaseFolder; LPWSTR lpPath = new WCHAR[ baseLen + wcslen( vecKeys[ i ] ) + 2 ]; if( NULL == lpPath ) break; wcscpy( lpPath, lpBaseFolder ); @@ -163,11 +164,11 @@ class CGrepEnumFileBase { if( IsValid( w32fd, lpName ) ){ if( pExceptItems && pExceptItems->IsExist( lpFullPath ) ){ }else{ - m_vpItems.push_back( PairGrepEnumItem( lpName, w32fd.nFileSizeLow ) ); + m_vpItems.emplace_back( lpName, w32fd.nFileSizeLow ); found++; // 2011.11.19 if( pExceptItems && nKeyDirLen ){ // フォルダーを含んだパスなら検索済みとして除外指定に追加する - pExceptItems->m_vpItems.push_back( PairGrepEnumItem( lpFullPath, w32fd.nFileSizeLow ) ); + pExceptItems->m_vpItems.emplace_back( lpFullPath, w32fd.nFileSizeLow ); }else{ delete [] lpFullPath; } diff --git a/sakura_core/CGrepEnumKeys.h b/sakura_core/CGrepEnumKeys.h index 798ff6456e..e697155e88 100644 --- a/sakura_core/CGrepEnumKeys.h +++ b/sakura_core/CGrepEnumKeys.h @@ -69,8 +69,8 @@ class CGrepEnumKeys { } // 除外ファイルの2つの解析済み配列から1つのリストを作る - auto GetExcludeFiles() const -> std::list { - std::list excludeFiles; + auto GetExcludeFiles() const -> std::vector { + std::vector excludeFiles; const auto& fileKeys = m_vecExceptFileKeys; excludeFiles.insert( excludeFiles.cend(), fileKeys.cbegin(), fileKeys.cend() ); const auto& absFileKeys = m_vecExceptAbsFileKeys; @@ -79,8 +79,8 @@ class CGrepEnumKeys { } // 除外フォルダーの2つの解析済み配列から1つのリストを作る - auto GetExcludeFolders() const -> std::list { - std::list excludeFolders; + auto GetExcludeFolders() const -> std::vector { + std::vector excludeFolders; const auto& folderKeys = m_vecExceptFolderKeys; excludeFolders.insert( excludeFolders.cend(), folderKeys.cbegin(), folderKeys.cend() ); const auto& absFolderKeys = m_vecExceptAbsFolderKeys; diff --git a/sakura_core/CProfile.cpp b/sakura_core/CProfile.cpp index 3c98157985..04dae91616 100644 --- a/sakura_core/CProfile.cpp +++ b/sakura_core/CProfile.cpp @@ -72,7 +72,7 @@ using namespace std; */ void CProfile::Init( void ) { - m_strProfileName = L""; + m_strProfileName.clear(); m_ProfileData.clear(); m_bRead = true; return; @@ -100,17 +100,17 @@ void CProfile::ReadOneline( // セクション取得 // Jan. 29, 2004 genta compare使用 if( line.compare( 0, 1, LTEXT("[") ) == 0 - && line.find( LTEXT("=") ) == line.npos - && line.find( LTEXT("]") ) == ( line.size() - 1 ) ) { + && line.find( LTEXT('=') ) == line.npos + && line.find( LTEXT(']') ) == ( line.size() - 1 ) ) { Section Buffer; Buffer.strSectionName = line.substr( 1, line.size() - 1 - 1 ); m_ProfileData.push_back( Buffer ); } // エントリ取得 else if( !m_ProfileData.empty() ) { //最初のセクション以前の行のエントリは無視 - wstring::size_type idx = line.find( LTEXT("=") ); + wstring::size_type idx = line.find( LTEXT('=') ); if( line.npos != idx ) { - m_ProfileData.back().mapEntries.insert( PAIR_STR_STR( line.substr(0,idx), line.substr(idx+1) ) ); + m_ProfileData.back().mapEntries.emplace( line.substr(0,idx), line.substr(idx+1) ); } } } @@ -247,7 +247,7 @@ bool CProfile::WriteProfile( std::vector< wstring > vecLine; if( NULL != pszComment ) { - vecLine.push_back( LTEXT(";") + wstring( pszComment ) ); // //->; 2008/5/24 Uchi + vecLine.emplace_back( LTEXT(";") + wstring( pszComment ) ); // //->; 2008/5/24 Uchi vecLine.push_back( LTEXT("") ); } for(auto iter = m_ProfileData.cbegin(); iter != m_ProfileData.cend(); iter++ ) { diff --git a/sakura_core/CProfile.h b/sakura_core/CProfile.h index b075f8476f..ad86b29555 100644 --- a/sakura_core/CProfile.h +++ b/sakura_core/CProfile.h @@ -54,7 +54,6 @@ class CProfile typedef std::wstring wstring; typedef std::string string; - typedef std::pair< wstring, wstring > PAIR_STR_STR; typedef std::map< wstring, wstring > MAP_STR_STR; struct Section { diff --git a/sakura_core/CPropertyManager.cpp b/sakura_core/CPropertyManager.cpp index c056fa02a5..0b495b14db 100644 --- a/sakura_core/CPropertyManager.cpp +++ b/sakura_core/CPropertyManager.cpp @@ -111,7 +111,7 @@ bool CPropertyManager::OpenPropertySheetTypes( HWND hWnd, int nPageNum, CTypeCon CPropTypes* pcPropTypes = new CPropTypes(); pcPropTypes->Create( G_AppInstance(), m_hwndOwner ); - std::unique_ptr pType(new STypeConfig()); + auto pType = std::make_unique(); CDocTypeManager().GetTypeConfig(nSettingType, *pType); pcPropTypes->SetTypeData(*pType); // Mar. 31, 2003 genta メモリ削減のためポインタに変更しProperySheet内で取得するように diff --git a/sakura_core/CSelectLang.h b/sakura_core/CSelectLang.h index 3f003a5f00..3d83e1c6be 100644 --- a/sakura_core/CSelectLang.h +++ b/sakura_core/CSelectLang.h @@ -130,9 +130,9 @@ class CLoadString /* || Constructors */ - CLoadString(){} + CLoadString() = default; CLoadString( UINT uid ){ LoadString( uid ); } // 文字列読み込み付きコンストラクタ - /*virtual*/ ~CLoadString(){} + /*virtual*/ ~CLoadString() = default; /* || Attributes & Operations diff --git a/sakura_core/_main/CControlTray.cpp b/sakura_core/_main/CControlTray.cpp index 6132f84002..15a774e755 100644 --- a/sakura_core/_main/CControlTray.cpp +++ b/sakura_core/_main/CControlTray.cpp @@ -815,7 +815,7 @@ LRESULT CControlTray::DispatchEvent( int iBitmap = CMenuDrawer::TOOLBAR_ICON_PLUGCOMMAND_DEFAULT - 1; const CPlug* plug = *it; if( !plug->m_sIcon.empty() ){ - iBitmap = m_cMenuDrawer.m_pcIcons->Add( plug->m_cPlugin.GetFilePath( plug->m_sIcon.c_str() ).c_str() ); + iBitmap = m_cMenuDrawer.m_pcIcons->Add( plug->m_cPlugin.GetFilePath( plug->m_sIcon ).c_str() ); } m_cMenuDrawer.AddToolButton( iBitmap, plug->GetFunctionCode() ); } diff --git a/sakura_core/basis/CMySize.h b/sakura_core/basis/CMySize.h index 3f73ecadf4..6c7d67550a 100644 --- a/sakura_core/basis/CMySize.h +++ b/sakura_core/basis/CMySize.h @@ -32,7 +32,7 @@ class CMySize : public SIZE{ public: //コンストラクタ・デストラクタ - CMySize(){} //※初期化なし + CMySize() = default; //※初期化なし CMySize(int _cx,int _cy){ cx=_cx; cy=_cy; } CMySize(const SIZE& rhs){ cx=rhs.cx; cy=rhs.cy; } diff --git a/sakura_core/basis/CStrictRange.h b/sakura_core/basis/CStrictRange.h index 7093c989e9..fbb0928718 100644 --- a/sakura_core/basis/CStrictRange.h +++ b/sakura_core/basis/CStrictRange.h @@ -41,9 +41,8 @@ class CRangeBase{ CRangeBase(Me&&) noexcept = default; Me& operator = (Me&&) noexcept = default; CRangeBase(const PointType& _ptFrom,const PointType& _ptTo) + : m_ptFrom(_ptFrom), m_ptTo(_ptTo) { - m_ptFrom=_ptFrom; - m_ptTo=_ptTo; } ~CRangeBase() = default; diff --git a/sakura_core/charset/CCodePage.cpp b/sakura_core/charset/CCodePage.cpp index 6e836564d2..4420c7cef3 100644 --- a/sakura_core/charset/CCodePage.cpp +++ b/sakura_core/charset/CCodePage.cpp @@ -394,8 +394,8 @@ CCodePage::CodePageList& CCodePage::GetCodePageList() } } // 独自実装部分を定義 - result.push_back( CCodePage::CodePageList::value_type(12000, L"12000 (UTF-32LE)") ); - result.push_back( CCodePage::CodePageList::value_type(12001, L"12001 (UTF-32BE)") ); + result.emplace_back( 12000, L"12000 (UTF-32LE)" ); + result.emplace_back( 12001, L"12001 (UTF-32BE)" ); std::sort(result.begin(),result.end(), sortByCodePage()); return result; diff --git a/sakura_core/cmd/CViewCommander_Bookmark.cpp b/sakura_core/cmd/CViewCommander_Bookmark.cpp index 0775619a6c..dcbffd246c 100644 --- a/sakura_core/cmd/CViewCommander_Bookmark.cpp +++ b/sakura_core/cmd/CViewCommander_Bookmark.cpp @@ -268,14 +268,18 @@ void CViewCommander::Command_BOOKMARK_SET(void) ); for(CLogicInt nY=ptFrom.GetY2();nY<=ptTo.y;nY++){ pCDocLine=GetDocument()->m_cDocLineMgr.GetLine( nY ); - CBookmarkSetter cBookmark(pCDocLine); - if(pCDocLine)cBookmark.SetBookmark(!cBookmark.IsBookmarked()); + if(pCDocLine){ + CBookmarkSetter cBookmark(pCDocLine); + cBookmark.SetBookmark(!cBookmark.IsBookmarked()); + } } } else{ pCDocLine=GetDocument()->m_cDocLineMgr.GetLine( GetCaret().GetCaretLogicPos().GetY2() ); - CBookmarkSetter cBookmark(pCDocLine); - if(pCDocLine)cBookmark.SetBookmark(!cBookmark.IsBookmarked()); + if(pCDocLine){ + CBookmarkSetter cBookmark(pCDocLine); + cBookmark.SetBookmark(!cBookmark.IsBookmarked()); + } } // 2002.01.16 hor 分割したビューも更新 diff --git a/sakura_core/cmd/CViewCommander_File.cpp b/sakura_core/cmd/CViewCommander_File.cpp index 2b74ada4cf..178fe24387 100644 --- a/sakura_core/cmd/CViewCommander_File.cpp +++ b/sakura_core/cmd/CViewCommander_File.cpp @@ -110,10 +110,10 @@ void CViewCommander::Command_FILEOPEN( const WCHAR* filename, ECodeType nCharCod //ロード情報 SLoadInfo sLoadInfo(filename?filename:L"", nCharCode, bViewMode); std::vector files; - std::wstring defName = (defaultName ? defaultName : L""); //必要であれば「ファイルを開く」ダイアログ if(!sLoadInfo.cFilePath.IsValidPath()){ + std::wstring defName = (defaultName ? defaultName : L""); if( !defName.empty() ){ WCHAR szPath[_MAX_PATH]; WCHAR szDir[_MAX_DIR]; @@ -693,8 +693,6 @@ BOOL CViewCommander::Command_PUTFILE( { /* 選択範囲を出力 */ try { - CBinaryOutputStream out(filename,true); - // 選択範囲の取得 -> cMem CNativeW cMem; m_pCommanderView->GetSelectedDataSimple(cMem); @@ -719,8 +717,10 @@ BOOL CViewCommander::Command_PUTFILE( pcSaveCode->UnicodeToCode(*pConvBuffer, &cDst); //書込 - if( 0 < cDst.GetRawLength() ) - out.Write(cDst.GetRawPtr(),cDst.GetRawLength()); + if( 0 < cDst.GetRawLength() ){ + CBinaryOutputStream out(filename, true); + out.Write(cDst.GetRawPtr(), cDst.GetRawLength()); + } } catch(const CError_FileOpen&) { diff --git a/sakura_core/cmd/CViewCommander_Grep.cpp b/sakura_core/cmd/CViewCommander_Grep.cpp index 9761adca6b..650ac39e2b 100644 --- a/sakura_core/cmd/CViewCommander_Grep.cpp +++ b/sakura_core/cmd/CViewCommander_Grep.cpp @@ -250,7 +250,7 @@ void CViewCommander::Command_GREP_REPLACE( void ) if( cDlgGrepRep.m_bGrepSeparateFolder )wcscat( pOpt, L"D" ); if( cDlgGrepRep.m_bPaste )wcscat( pOpt, L"C" ); // クリップボードから貼り付け if( cDlgGrepRep.m_bBackup )wcscat( pOpt, L"O" ); // バックアップ作成 - if( 0 < wcslen( pOpt ) ){ + if( pOpt[0] != '\0' ) { cCmdLine.AppendString( L" -GOPT=" ); cCmdLine.AppendString( pOpt ); } diff --git a/sakura_core/cmd/CViewCommander_Search.cpp b/sakura_core/cmd/CViewCommander_Search.cpp index 7a204fa102..65d9ed2c01 100644 --- a/sakura_core/cmd/CViewCommander_Search.cpp +++ b/sakura_core/cmd/CViewCommander_Search.cpp @@ -657,7 +657,7 @@ void CViewCommander::Command_REPLACE( HWND hwndParent ) cMemRepKey2 = cMemRepKey; cMemRepKey2 += cMemMatchStr; } else if (nReplaceTarget == 2) { // 選択終点へ挿入 - cMemRepKey2 = cMemMatchStr; + cMemRepKey2 = std::move(cMemMatchStr); cMemRepKey2 += cMemRepKey; } else { cMemRepKey2 = cMemRepKey; @@ -966,10 +966,10 @@ void CViewCommander::Command_REPLACE_ALL() cMemRepKey2 = cmemClip; cMemRepKey2 += cMemMatchStr; } else if (nReplaceTarget == 2) { // 選択終点へ挿入 - cMemRepKey2 = cMemMatchStr; + cMemRepKey2 = std::move(cMemMatchStr); cMemRepKey2 += cmemClip; } else { - cMemRepKey2 = cmemClip; + cMemRepKey2 = std::move(cmemClip); } // 正規表現オプションの設定2006.04.01 かろと int nFlag = (m_pCommanderView->m_sCurSearchOption.bLoHiCase ? CBregexp::optCaseSensitive : CBregexp::optNothing); @@ -1094,8 +1094,8 @@ void CViewCommander::Command_REPLACE_ALL() out = left < right && (...) というのがまさに対応を迫られた痕跡ですよ。 */ const CLayoutInt firstLeft = ptNewFrom.x - raggedLeftDiff; - const CLogicInt lastRight = (Int)ptNew.x - colDif; if (ptNewFrom.y == ptNew.y) { // 一番よくあるケースではレイアウトの取得・計算が不要。 + const CLogicInt lastRight = (Int)ptNew.x - colDif; out = firstLeft < sRangeA.GetFrom().x || boxRight.x < lastRight; } else { for (CLayoutInt ll = ptNewFrom.y; ll <= ptNew.y; ++ll) { // ll = Layout Line diff --git a/sakura_core/cmd/CViewCommander_TagJump.cpp b/sakura_core/cmd/CViewCommander_TagJump.cpp index da72712da7..6e54bacc98 100644 --- a/sakura_core/cmd/CViewCommander_TagJump.cpp +++ b/sakura_core/cmd/CViewCommander_TagJump.cpp @@ -46,7 +46,7 @@ static bool GetQuoteFilePath(const wchar_t* pLine, std::wstring& str, size_t size) { const wchar_t* pFileEnd = wcschr( pLine, L'\"' ); - str = L""; + str.clear(); if (pFileEnd == nullptr) { return false; } @@ -74,7 +74,7 @@ static bool IsFileExists2( const wchar_t* pszFile ) static bool IsHWNDTag( const wchar_t* pLine, std::wstring& str, int* pnLen = NULL ) { if( 0 == wcsncmp(pLine, L":HWND:[", 7) ){ - const wchar_t* pFileEnd = wcsstr( pLine, L"]" ); + const wchar_t* pFileEnd = wcschr( pLine, L']' ); if( pFileEnd ){ const int nLen = pFileEnd - pLine + 1; int i = 7; @@ -390,7 +390,7 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) break; } // 相対パスだった→◎”を探す - strFile = strPath; + strFile = std::move(strPath); searchMode = TAGLIST_ROOT; continue; } @@ -404,7 +404,7 @@ bool CViewCommander::Command_TagJumpNoMessage( bool bClose ) break; } if (IsFileExists2(strPath.c_str())) { - strJumpToFile = strPath; + strJumpToFile = std::move(strPath); break; } } diff --git a/sakura_core/dlg/CDlgAbout.cpp b/sakura_core/dlg/CDlgAbout.cpp index 5fad824420..d735db8ab0 100644 --- a/sakura_core/dlg/CDlgAbout.cpp +++ b/sakura_core/dlg/CDlgAbout.cpp @@ -241,7 +241,7 @@ BOOL CDlgAbout::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) // 2011.06.01 nasukoji 各国語メッセージリソース対応 LPCWSTR pszDesc = LS( IDS_ABOUT_DESCRIPTION ); WCHAR szMsg[2048]; - if( wcslen(pszDesc) > 0 ){ + if( pszDesc[0] != '\0' ) { wcsncpy( szMsg, pszDesc, _countof(szMsg) - 1 ); szMsg[_countof(szMsg) - 1] = 0; ::DlgItem_SetText( GetHwnd(), IDC_EDIT_ABOUT, szMsg ); diff --git a/sakura_core/dlg/CDlgGrep.cpp b/sakura_core/dlg/CDlgGrep.cpp index 7bdcf03c70..3c8bd1b625 100644 --- a/sakura_core/dlg/CDlgGrep.cpp +++ b/sakura_core/dlg/CDlgGrep.cpp @@ -847,7 +847,7 @@ int CDlgGrep::GetData( void ) m_pShareData->m_Common.m_sSearch.m_bGrepOutputBaseFolder = m_bGrepOutputBaseFolder; m_pShareData->m_Common.m_sSearch.m_bGrepSeparateFolder = m_bGrepSeparateFolder; - if( 0 != wcslen( m_szFile ) ){ + if( m_szFile[0] != '\0' ) { CGrepEnumKeys enumKeys; int nErrorNo = enumKeys.SetFileKeys( m_szFile ); if( 1 == nErrorNo ){ diff --git a/sakura_core/dlg/CDlgOpenFile.cpp b/sakura_core/dlg/CDlgOpenFile.cpp index 2dfdc64f8b..9a83b7bfb7 100644 --- a/sakura_core/dlg/CDlgOpenFile.cpp +++ b/sakura_core/dlg/CDlgOpenFile.cpp @@ -25,9 +25,7 @@ extern std::shared_ptr New_CDlgOpenFile_CommonFileDialog(); extern std::shared_ptr New_CDlgOpenFile_CommonItemDialog(); -CDlgOpenFile::CDlgOpenFile() -{ -} +CDlgOpenFile::CDlgOpenFile() = default; void CDlgOpenFile::Create( HINSTANCE hInstance, diff --git a/sakura_core/dlg/CDlgOpenFile.h b/sakura_core/dlg/CDlgOpenFile.h index 1a6d6993ef..a3352fb54d 100644 --- a/sakura_core/dlg/CDlgOpenFile.h +++ b/sakura_core/dlg/CDlgOpenFile.h @@ -91,7 +91,7 @@ class CDlgOpenFile final : public IDlgOpenFile public: //コンストラクタ・デストラクタ CDlgOpenFile(); - ~CDlgOpenFile() {} + ~CDlgOpenFile() = default; void Create( HINSTANCE hInstance, diff --git a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp index f86b9e1226..4e9c2d87f0 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonFileDialog.cpp @@ -742,7 +742,7 @@ bool CDlgOpenFile_CommonFileDialog::DoModal_GetOpenFileName( WCHAR* pszPath, EFi } /* 構造体の初期化 */ - std::unique_ptr pData( new CDlgOpenFileData() ); + auto pData = std::make_unique(); InitOfn( &pData->m_ofn ); // 2005.10.29 ryoji pData->m_pcDlgOpenFile = this; pData->m_ofn.lCustData = (LPARAM)(pData.get()); @@ -827,7 +827,7 @@ bool CDlgOpenFile_CommonFileDialog::DoModal_GetSaveFileName( WCHAR* pszPath ) } /* 構造体の初期化 */ - std::unique_ptr pData( new CDlgOpenFileData() ); + auto pData = std::make_unique(); InitOfn( &pData->m_ofn ); // 2005.10.29 ryoji pData->m_pcDlgOpenFile = this; pData->m_ofn.lCustData = (LPARAM)(pData.get()); @@ -865,7 +865,7 @@ bool CDlgOpenFile_CommonFileDialog::DoModalOpenDlg( bool bOptions ) { - std::unique_ptr pData( new CDlgOpenFileData() ); + auto pData = std::make_unique(); pData->m_bIsSaveDialog = FALSE; /* 保存のダイアログか */ bool bMultiSelect = pFileNames != NULL; @@ -971,7 +971,7 @@ bool CDlgOpenFile_CommonFileDialog::DoModalSaveDlg( bool bSimpleMode ) { - std::unique_ptr pData( new CDlgOpenFileData() ); + auto pData = std::make_unique(); pData->m_bIsSaveDialog = TRUE; /* 保存のダイアログか */ // 2003.05.12 MIK diff --git a/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp b/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp index 81e4d6b6a0..3b17bf27c9 100644 --- a/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp +++ b/sakura_core/dlg/CDlgOpenFile_CommonItemDialog.cpp @@ -462,6 +462,7 @@ bool CDlgOpenFile_CommonItemDialog::DoModal_GetOpenFileName( WCHAR* pszPath, EFi { // 2003.05.12 MIK std::vector specs; + specs.reserve(7); std::vector strs; strs.reserve(8); diff --git a/sakura_core/dlg/CDlgPluginOption.cpp b/sakura_core/dlg/CDlgPluginOption.cpp index d188b5f33c..6e1927bc61 100644 --- a/sakura_core/dlg/CDlgPluginOption.cpp +++ b/sakura_core/dlg/CDlgPluginOption.cpp @@ -119,7 +119,7 @@ void CDlgPluginOption::SetData( void ) ListView_DeleteAllItems( hwndList ); // リストを空にする m_Line = -1; // 行非選択 - std::unique_ptr cProfile( new CDataProfile ); + auto cProfile = std::make_unique(); cProfile->SetReadingMode(); cProfile->ReadProfile( m_cPlugin->GetOptionPath().c_str() ); @@ -139,17 +139,16 @@ void CDlgPluginOption::SetData( void ) wstring sSection; wstring sKey; wstring sValue; - wstring sType; cOpt->GetKey(&sSection, &sKey); if( sSection.empty() || sKey.empty() ) { - sValue = L""; + sValue.clear(); } else { if( !cProfile->IOProfileData( sSection.c_str(), sKey.c_str(), sValue ) ){ // Optionが見つからなかったらDefault値を設定 sValue = cOpt->GetDefaultVal(); - if( sValue != wstring(L"") ){ + if( sValue != wstring() ){ bLoadDefault = true; cProfile->SetWritingMode(); cProfile->IOProfileData( sSection.c_str(), sKey.c_str(), sValue ); @@ -159,7 +158,7 @@ void CDlgPluginOption::SetData( void ) } if (cOpt->GetType() == OPTION_TYPE_BOOL) { - wcscpy( buf, sValue == wstring( L"0") || sValue == wstring( L"") ? BOOL_DISP_FALSE : BOOL_DISP_TRUE ); + wcscpy( buf, sValue == wstring( L"0") || sValue == wstring() ? BOOL_DISP_FALSE : BOOL_DISP_TRUE ); } else if (cOpt->GetType() == OPTION_TYPE_INT) { // 数値へ正規化 @@ -223,7 +222,7 @@ int CDlgPluginOption::GetData( void ) // リスト hwndList = GetItemHwnd( IDC_LIST_PLUGIN_OPTIONS ); - std::unique_ptr cProfile( new CDataProfile ); + auto cProfile = std::make_unique(); cProfile->SetReadingMode(); cProfile->ReadProfile( m_cPlugin->GetOptionPath().c_str() ); cProfile->SetWritingMode(); diff --git a/sakura_core/dlg/CDlgProfileMgr.cpp b/sakura_core/dlg/CDlgProfileMgr.cpp index 4b45aeb92a..cccdfbac3d 100644 --- a/sakura_core/dlg/CDlgProfileMgr.cpp +++ b/sakura_core/dlg/CDlgProfileMgr.cpp @@ -203,7 +203,7 @@ int CDlgProfileMgr::GetData(bool bStart) MyList_GetText( hwndList, nCurIndex, szText ); m_strProfileName = szText; if( m_strProfileName == L"(default)" ){ - m_strProfileName = L""; + m_strProfileName.clear(); } bool bDefaultSelect = IsDlgButtonCheckedBool( GetHwnd(), IDC_CHECK_PROF_DEFSTART ); SProfileSettings settings; diff --git a/sakura_core/dlg/CDlgReplace.cpp b/sakura_core/dlg/CDlgReplace.cpp index 1b6040c7c4..945e16637b 100644 --- a/sakura_core/dlg/CDlgReplace.cpp +++ b/sakura_core/dlg/CDlgReplace.cpp @@ -245,7 +245,7 @@ int CDlgReplace::GetData( void ) /* 置換後文字列 */ if( ::IsDlgButtonChecked( GetHwnd(), IDC_RADIO_LINEDELETE ) ){ - m_strText2 = L""; + m_strText2.clear(); }else{ ApiWrap::DlgItem_GetText( GetHwnd(), IDC_COMBO_TEXT2, m_strText2 ); } diff --git a/sakura_core/dlg/CDlgTagJumpList.cpp b/sakura_core/dlg/CDlgTagJumpList.cpp index 6e5c69abed..2866ac55f1 100644 --- a/sakura_core/dlg/CDlgTagJumpList.cpp +++ b/sakura_core/dlg/CDlgTagJumpList.cpp @@ -887,7 +887,7 @@ int CDlgTagJumpList::SearchBestTag( void ) if( m_pcList->GetCount() <= 0 ) return -1; //選べません。 if( NULL == m_pszFileName ) return 0; - std::unique_ptr mem_lpPathInfo( new TagPathInfo ); + auto mem_lpPathInfo = std::make_unique(); TagPathInfo* lpPathInfo= mem_lpPathInfo.get(); int nMatch1 = -1; int nMatch2 = -1; diff --git a/sakura_core/doc/CDocFileOperation.cpp b/sakura_core/doc/CDocFileOperation.cpp index 9cd51c6f0d..7bba39dc4d 100644 --- a/sakura_core/doc/CDocFileOperation.cpp +++ b/sakura_core/doc/CDocFileOperation.cpp @@ -179,8 +179,6 @@ void CDocFileOperation::ReloadCurrentFile( } //カーソル位置保存 - CLayoutInt nViewTopLine = GetEditWnd().GetActiveView().GetTextArea().GetViewTopLine(); /* 表示域の一番上の行(0開始) */ - CLayoutInt nViewLeftCol = GetEditWnd().GetActiveView().GetTextArea().GetViewLeftCol(); /* 表示域の一番左の桁(0開始) */ CLayoutPoint ptCaretPosXY = GetEditWnd().GetActiveView().GetCaret().GetCaretLayoutPos(); //ロード @@ -195,6 +193,8 @@ void CDocFileOperation::ReloadCurrentFile( // カーソル位置復元 (※ここではオプションのカーソル位置復元(=改行単位)が指定されていない場合でも復元する) // 2007.08.23 ryoji 表示領域復元 if( ptCaretPosXY.GetY2() < m_pcDocRef->m_cLayoutMgr.GetLineCount() ){ + CLayoutInt nViewTopLine = GetEditWnd().GetActiveView().GetTextArea().GetViewTopLine(); /* 表示域の一番上の行(0開始) */ + CLayoutInt nViewLeftCol = GetEditWnd().GetActiveView().GetTextArea().GetViewLeftCol(); /* 表示域の一番左の桁(0開始) */ GetEditWnd().GetActiveView().GetTextArea().SetViewTopLine(nViewTopLine); GetEditWnd().GetActiveView().GetTextArea().SetViewLeftCol(nViewLeftCol); } diff --git a/sakura_core/doc/CDocOutline.cpp b/sakura_core/doc/CDocOutline.cpp index 50d8984ea1..242d587525 100644 --- a/sakura_core/doc/CDocOutline.cpp +++ b/sakura_core/doc/CDocOutline.cpp @@ -74,7 +74,7 @@ int CDocOutline::ReadRuleFile( const WCHAR* pszFilename, SOneRule* pcOneRule, in int nCount = 0; bRegex = false; bool bRegexReplace = false; - title = L""; + title.clear(); int regexOption = CBregexp::optCaseSensitive; // 通常モード @@ -226,7 +226,7 @@ void CDocOutline::MakeFuncList_RuleFile( CFuncInfoArr* pcFuncInfoArr, std::wstri return; } if( 0 < title.size() ){ - sTitleOverride = title.c_str(); + sTitleOverride = title; } /* ネストの深さは、32レベルまで、ひとつのヘッダーは、最長256文字まで区別 diff --git a/sakura_core/doc/logic/CDocLine.cpp b/sakura_core/doc/logic/CDocLine.cpp index 2725e642e8..e98c85e3a6 100644 --- a/sakura_core/doc/logic/CDocLine.cpp +++ b/sakura_core/doc/logic/CDocLine.cpp @@ -22,9 +22,7 @@ CDocLine::CDocLine() { } -CDocLine::~CDocLine() -{ -} +CDocLine::~CDocLine() = default; /* 空行(スペース、タブ、改行記号のみの行)かどうかを取得する true:空行だ。 diff --git a/sakura_core/docplus/CDiffManager.h b/sakura_core/docplus/CDiffManager.h index 1c4324dd09..c3cea8bc9a 100644 --- a/sakura_core/docplus/CDiffManager.h +++ b/sakura_core/docplus/CDiffManager.h @@ -50,7 +50,7 @@ enum EDiffMark : char { //! DIFF挙動の管理 class CDiffManager : public TSingleton{ friend class TSingleton; - CDiffManager(){} + CDiffManager() = default; public: void SetDiffUse(bool b){ m_bIsDiffUse = b; } diff --git a/sakura_core/env/CSakuraEnvironment.cpp b/sakura_core/env/CSakuraEnvironment.cpp index a8472a4474..6d40be997b 100644 --- a/sakura_core/env/CSakuraEnvironment.cpp +++ b/sakura_core/env/CSakuraEnvironment.cpp @@ -715,7 +715,7 @@ std::wstring CSakuraEnvironment::GetDlgInitialDir(bool bControlProcess) { CEditDoc* pcDoc = CEditDoc::GetInstance(0); //###### if( pcDoc && pcDoc->m_cDocFile.GetFilePathClass().IsValidPath() ){ - return pcDoc->m_cDocFile.GetFilePathClass().GetDirPath().c_str(); + return pcDoc->m_cDocFile.GetFilePathClass().GetDirPath(); } EOpenDialogDir eOpenDialogDir = GetDllShareData().m_Common.m_sEdit.m_eOpenDialogDir; diff --git a/sakura_core/env/CommonSetting.cpp b/sakura_core/env/CommonSetting.cpp index 2726d412ac..67cd094cac 100644 --- a/sakura_core/env/CommonSetting.cpp +++ b/sakura_core/env/CommonSetting.cpp @@ -79,9 +79,7 @@ class CommonValue{ private: typedef CommonValue Me; public: - CommonValue() - { - } + CommonValue() = default; void Regist(const char* szEntryKey) { //CommonValueリストに自分を追加 diff --git a/sakura_core/extmodule/CBregexp.cpp b/sakura_core/extmodule/CBregexp.cpp index fcfe140e86..ec331d74ed 100644 --- a/sakura_core/extmodule/CBregexp.cpp +++ b/sakura_core/extmodule/CBregexp.cpp @@ -231,18 +231,18 @@ wchar_t* CBregexp::MakePattern( const wchar_t* szPattern, const wchar_t* szPatte { using namespace WCODE; static const wchar_t* szCRLF = CRLF; //!< 復帰・改行 - static const wchar_t szCR[] = {CR,0}; //!< 復帰 - static const wchar_t szLF[] = {LF,0}; //!< 改行 + static const wchar_t szCR[] = {CR,0}; //!< 復帰 + static const wchar_t szLF[] = {LF,0}; //!< 改行 static const wchar_t BOT_SUBST[] = L"s/\\$(\\)*)$/([\\\\r\\\\n]+)\\$$1/k"; //!< 行末パターンの置換用パターン int nLen; //!< szPatternの長さ BREGEXP_W* sReg = NULL; //!< コンパイル構造体 - wchar_t szMsg[80] = L""; //!< エラーメッセージ - wchar_t szAdd2[5] = L""; //!< 行末あり置換の $数字 格納用 + wchar_t szAdd2[5] = L""; //!< 行末あり置換の $数字 格納用 int nParens = 0; //!< 検索パターン(szPattern)中の括弧の数(行末時に使用) - wchar_t *szNPattern; //!< 検索パターン + wchar_t *szNPattern; //!< 検索パターン nLen = CheckPattern( szPattern ); if( (m_ePatType & PAT_BOTTOM) != 0 ) { + wchar_t szMsg[80] = L""; //!< エラーメッセージ bool bJustDollar = false; // 行末指定の$のみであるフラグ($の前に \r\nが指定されていない) szNPattern = MakePatternSub(szPattern, NULL, NULL, nOption); int matched = BMatch( szNPattern, szCRLF, szCRLF+wcslen(szCRLF), &sReg, szMsg ); diff --git a/sakura_core/extmodule/CDllHandler.cpp b/sakura_core/extmodule/CDllHandler.cpp index 5344e667ce..53b29ce32b 100644 --- a/sakura_core/extmodule/CDllHandler.cpp +++ b/sakura_core/extmodule/CDllHandler.cpp @@ -138,7 +138,7 @@ bool CDllImp::DeinitDll(bool force) noexcept //DLL解放 if( ret || force ){ //DLL名を解放 - m_strLoadedDllName = L""; + m_strLoadedDllName.clear(); //DLL解放 ::FreeLibrary( m_hInstance ); diff --git a/sakura_core/io/CFileLoad.cpp b/sakura_core/io/CFileLoad.cpp index 8bdf8d281c..d4c7112dd0 100644 --- a/sakura_core/io/CFileLoad.cpp +++ b/sakura_core/io/CFileLoad.cpp @@ -407,7 +407,7 @@ EConvertResult CFileLoad::ReadLine_core( if( m_bBomExist && 1 <= pUnicodeBuffer->GetStringLength() ){ if( pUnicodeBuffer->GetStringPtr()[0] == 0xfeff ){ CNativeW tmp(pUnicodeBuffer->GetStringPtr() + 1, pUnicodeBuffer->GetStringLength() - 1); - *pUnicodeBuffer = tmp; + *pUnicodeBuffer = std::move(tmp); } } } diff --git a/sakura_core/io/CZipFile.cpp b/sakura_core/io/CZipFile.cpp index a4a6f43e53..26308230c9 100644 --- a/sakura_core/io/CZipFile.cpp +++ b/sakura_core/io/CZipFile.cpp @@ -86,7 +86,7 @@ bool CZipFile::ChkPluginDef(const std::wstring& sDefFile, std::wstring& sFolderN long lCount; bool bFoundDef = false; - sFolderName = L""; + sFolderName.clear(); // ZIP File List hr = pZipFile->Items(&pZipFileItems); diff --git a/sakura_core/macro/CIfObj.h b/sakura_core/macro/CIfObj.h index 1a11cc1d31..92334f15de 100644 --- a/sakura_core/macro/CIfObj.h +++ b/sakura_core/macro/CIfObj.h @@ -59,7 +59,7 @@ class ImplementsIUnknown: public Base virtual ULONG STDMETHODCALLTYPE Release() { -- m_RefCount; int R = m_RefCount; if(m_RefCount == 0) delete this; return R; } public: ImplementsIUnknown(): m_RefCount(0) {} - virtual ~ImplementsIUnknown(){} + virtual ~ImplementsIUnknown() = default; }; //WSH一般 diff --git a/sakura_core/macro/CMacro.cpp b/sakura_core/macro/CMacro.cpp index 8a2f2fc1c5..70491f794a 100644 --- a/sakura_core/macro/CMacro.cpp +++ b/sakura_core/macro/CMacro.cpp @@ -800,7 +800,7 @@ bool CMacro::HandleCommand( if( bBackupFlag ){ GetDllShareData().m_Common.m_sSearch = backupFlags; pcEditView->m_sCurSearchOption = backupLocalFlags; - pcEditView->m_strCurSearchKey = backupStr; + pcEditView->m_strCurSearchKey = std::move(backupStr); pcEditView->m_bCurSearchUpdate = true; pcEditView->m_nCurSearchKeySequence = GetDllShareData().m_Common.m_sSearch.m_nSearchKeySequence; pcEditView->ChangeCurRegexp( backupKeyMark ); @@ -1004,9 +1004,9 @@ bool CMacro::HandleCommand( if( bBackupFlag ){ GetDllShareData().m_Common.m_sSearch = backupFlags; pcEditView->m_sCurSearchOption = backupLocalFlags; - pcEditView->m_strCurSearchKey = backupStr; + pcEditView->m_strCurSearchKey = std::move(backupStr); pcEditView->m_bCurSearchUpdate = true; - cDlgReplace.m_strText2 = backupStrRep; + cDlgReplace.m_strText2 = std::move(backupStrRep); pcEditView->m_nCurSearchKeySequence = GetDllShareData().m_Common.m_sSearch.m_nSearchKeySequence; pcEditView->ChangeCurRegexp( backupKeyMark ); pcEditView->m_bCurSrchKeyMark = backupKeyMark; diff --git a/sakura_core/macro/CMacroFactory.cpp b/sakura_core/macro/CMacroFactory.cpp index fb85b32718..1ec219bded 100644 --- a/sakura_core/macro/CMacroFactory.cpp +++ b/sakura_core/macro/CMacroFactory.cpp @@ -36,8 +36,7 @@ static const WCHAR NULSTR[] = L""; -CMacroFactory::CMacroFactory() -{} +CMacroFactory::CMacroFactory() = default; /*! 与えられた拡張子をmapのkeyに変換する diff --git a/sakura_core/macro/CSMacroMgr.cpp b/sakura_core/macro/CSMacroMgr.cpp index 7c93c0eac7..5a20694f40 100644 --- a/sakura_core/macro/CSMacroMgr.cpp +++ b/sakura_core/macro/CSMacroMgr.cpp @@ -676,7 +676,7 @@ BOOL CSMacroMgr::Load( int idx, HINSTANCE hInstance, const WCHAR* pszPath, const ext = pszType; } - m_sMacroPath = L""; + m_sMacroPath.clear(); *ppMacro = CMacroFactory::getInstance()->Create(ext); if( *ppMacro == NULL ) return FALSE; diff --git a/sakura_core/macro/CSMacroMgr.h b/sakura_core/macro/CSMacroMgr.h index e25b66de50..c555a5edc4 100644 --- a/sakura_core/macro/CSMacroMgr.h +++ b/sakura_core/macro/CSMacroMgr.h @@ -130,7 +130,7 @@ class CSMacroMgr { return ( 0 <= idx && idx < MAX_CUSTMACRO ) ? m_pShareData->m_Common.m_sMacro.m_MacroTable[idx].m_szFile : - ( (idx == STAND_KEYMACRO || idx == TEMP_KEYMACRO) && m_sMacroPath != L"" ) ? + ( (idx == STAND_KEYMACRO || idx == TEMP_KEYMACRO) && !m_sMacroPath.empty() ) ? m_sMacroPath.c_str() : NULL; } diff --git a/sakura_core/macro/CWSHManager.cpp b/sakura_core/macro/CWSHManager.cpp index ee811dd6e5..b330ebeb60 100644 --- a/sakura_core/macro/CWSHManager.cpp +++ b/sakura_core/macro/CWSHManager.cpp @@ -92,7 +92,7 @@ bool CWSHMacroManager::ExecKeyMacro(CEditView *EditView, int flags) const BOOL CWSHMacroManager::LoadKeyMacro(HINSTANCE hInstance, const WCHAR* pszPath) { //ソース読み込み -> m_Source - m_Source=L""; + m_Source.clear(); CTextInputStream in(pszPath); if(!in) diff --git a/sakura_core/outline/CDlgFuncList.cpp b/sakura_core/outline/CDlgFuncList.cpp index 0a3e1c3663..7b4b5dca09 100644 --- a/sakura_core/outline/CDlgFuncList.cpp +++ b/sakura_core/outline/CDlgFuncList.cpp @@ -762,7 +762,7 @@ void CDlgFuncList::SetData() bool CDlgFuncList::GetTreeFileFullName(HWND hwndTree, HTREEITEM target, std::wstring* pPath, int* pnItem) { - *pPath = L""; + (*pPath).clear(); *pnItem = -1; do{ TVITEM tvItem; @@ -777,7 +777,7 @@ bool CDlgFuncList::GetTreeFileFullName(HWND hwndTree, HTREEITEM target, std::wst std::wstring path = m_pcFuncInfoArr->GetAt(*pnItem)->m_cmemFileName.GetStringPtr(); path += L"\\"; path += *pPath; - *pPath = path; + *pPath = std::move(path); return true; } if( tvItem.lParam != -1 && tvItem.lParam != -2 ){ @@ -787,7 +787,7 @@ bool CDlgFuncList::GetTreeFileFullName(HWND hwndTree, HTREEITEM target, std::wst std::wstring path = szFileName; path += L"\\"; path += *pPath; - *pPath = path; + *pPath = std::move(path); }else{ *pPath = szFileName; } @@ -830,7 +830,7 @@ int CDlgFuncList::GetData( void ) TV_ITEM tvi; m_cFuncInfo = NULL; - m_sJumpFile = L""; + m_sJumpFile.clear(); hwndList = GetItemHwnd( IDC_LIST_FL ); if( m_nViewType == VIEWTYPE_LIST ){ // List @@ -870,7 +870,7 @@ int CDlgFuncList::GetData( void ) if( tvi.lParam == -1 ){ int nItem; if( !GetTreeFileFullName( hwndTree, htiItem, &m_sJumpFile, &nItem ) ){ - m_sJumpFile = L""; // error + m_sJumpFile.clear(); // error } } } diff --git a/sakura_core/outline/CFuncInfo.cpp b/sakura_core/outline/CFuncInfo.cpp index 9fb04fefe0..0c4e00eac6 100644 --- a/sakura_core/outline/CFuncInfo.cpp +++ b/sakura_core/outline/CFuncInfo.cpp @@ -41,6 +41,4 @@ CFuncInfo::CFuncInfo( } /* CFuncInfoクラス消滅 */ -CFuncInfo::~CFuncInfo() -{ -} +CFuncInfo::~CFuncInfo() = default; diff --git a/sakura_core/outline/CFuncInfoArr.cpp b/sakura_core/outline/CFuncInfoArr.cpp index f391369987..3e77457610 100644 --- a/sakura_core/outline/CFuncInfoArr.cpp +++ b/sakura_core/outline/CFuncInfoArr.cpp @@ -138,7 +138,7 @@ void CFuncInfoArr::SetAppendText( int info, std::wstring s, bool overwrite ) }else{ // キーが存在する場合、値を書き換える if( overwrite ){ - m_AppendTextArr[ info ] = s; + m_AppendTextArr[ info ] = std::move(s); } } } diff --git a/sakura_core/plugin/CDllPlugin.cpp b/sakura_core/plugin/CDllPlugin.cpp index 2f60861d1a..6dbc1c1ee8 100644 --- a/sakura_core/plugin/CDllPlugin.cpp +++ b/sakura_core/plugin/CDllPlugin.cpp @@ -75,7 +75,7 @@ bool CDllPlugin::ReadPluginDef( CDataProfile *cProfile, CDataProfile *cProfileMl // プラグ実行 bool CDllPlugin::InvokePlug( CEditView* view, CPlug& plug_raw, CWSHIfObj::List& params ) { - wstring dllPath = GetFilePath( m_sDllName.c_str() ); + wstring dllPath = GetFilePath( m_sDllName ); EDllResult resInit = InitDll( dllPath.c_str() ); if( resInit != DLL_SUCCESS ){ ::MYMESSAGEBOX( view->m_hwndParent, MB_OK, LS(STR_DLLPLG_TITLE), LS(STR_DLLPLG_INIT_ERR1), dllPath.c_str(), m_sName.c_str() ); diff --git a/sakura_core/plugin/CPlugin.cpp b/sakura_core/plugin/CPlugin.cpp index 20c428ea7c..ab0a32e148 100644 --- a/sakura_core/plugin/CPlugin.cpp +++ b/sakura_core/plugin/CPlugin.cpp @@ -108,7 +108,7 @@ bool CPlugin::ReadPluginDefPlug( CDataProfile *cProfile, CDataProfile *cProfileM if( cProfileMlang ){ cProfileMlang->IOProfileData( PII_PLUG, sKeyLabel.c_str(), sLabel ); } - if (sLabel == L"") { + if (sLabel.empty()) { sLabel = sHandler; // Labelが無ければハンドラ名で代用 } @@ -141,7 +141,7 @@ bool CPlugin::ReadPluginDefCommand( CDataProfile *cProfile, CDataProfile *cProfi if( cProfileMlang ){ cProfileMlang->IOProfileData( PII_COMMAND, bufKey, sLabel ); } - if (sLabel == L"") { + if (sLabel.empty()) { sLabel = sHandler; // Labelが無ければハンドラ名で代用 } //アイコンの取得 @@ -172,9 +172,12 @@ bool CPlugin::ReadPluginDefOption( CDataProfile *cProfile, CDataProfile *cProfil wstring sDefaultVal; WCHAR bufKey[64]; - sSection = L""; + sSection.clear(); for( int nCount = 1; nCount < MAX_PLUG_OPTION; nCount++ ){ //添え字は1から始める - sKey = sLabel = sType = sDefaultVal= L""; + sKey.clear(); + sLabel.clear(); + sType.clear(); + sDefaultVal.clear(); //Keyの取得 _swprintf( bufKey, L"O[%d].Key", nCount ); if( cProfile->IOProfileData( PII_OPTION, bufKey, sKey ) ){ @@ -262,7 +265,7 @@ std::vector wstring_split( std::wstring sTrg, wchar_t cSep ) splitVec.push_back( sTrg.substr( 0, idx ) ); sTrg = sTrg.substr( ++idx ); } - if (sTrg != L"") { + if (!sTrg.empty()) { splitVec.push_back( sTrg ); } @@ -275,7 +278,7 @@ bool CPlugin::ReadPluginDefString( CDataProfile *cProfile, CDataProfile *cProfil { WCHAR bufKey[64]; m_aStrings.clear(); - m_aStrings.push_back( wstring(L"") ); // 0番目ダミー + m_aStrings.emplace_back( L"" ); // 0番目ダミー for( int nCount = 1; nCount < MAX_PLUG_STRING; nCount++ ){ //添え字は1から始める wstring sVal = L""; _swprintf( bufKey, L"S[%d]", nCount ); diff --git a/sakura_core/plugin/CPlugin.h b/sakura_core/plugin/CPlugin.h index b125037832..a3ccd0d9ae 100644 --- a/sakura_core/plugin/CPlugin.h +++ b/sakura_core/plugin/CPlugin.h @@ -185,22 +185,20 @@ class CPluginOption //コンストラクタ public: CPluginOption( CPlugin* parent, wstring sLabel, wstring sSection, wstring sKey, wstring sType, wstring sSelects, wstring sDefaultVal, int index) + : m_sLabel(sLabel), m_sSection(sSection), m_sKey(sKey) { m_parent = parent; - m_sLabel = sLabel; - m_sSection = sSection; - m_sKey = sKey; // 小文字変換 std::transform( sType.begin (), sType.end (), sType.begin (), my_towlower2 ); - m_sType = sType; - m_sSelects = sSelects; - m_sDefaultVal = sDefaultVal; + m_sType = std::move(sType); + m_sSelects = std::move(sSelects); + m_sDefaultVal = std::move(sDefaultVal); m_index = index; } //デストラクタ public: - ~CPluginOption() {} + ~CPluginOption() = default; //操作 public: diff --git a/sakura_core/plugin/CPluginIfObj.h b/sakura_core/plugin/CPluginIfObj.h index d97b975c20..c5ce4915ec 100644 --- a/sakura_core/plugin/CPluginIfObj.h +++ b/sakura_core/plugin/CPluginIfObj.h @@ -144,7 +144,7 @@ class CPluginIfObj : public CWSHIfObj { Wrap(&Result)->Receive(S); return true; }else if( 0 == num ){ - std::wstring str = m_cPlugin.m_sLangName.c_str(); + std::wstring str = m_cPlugin.m_sLangName; SysString S(str.c_str(), str.size()); Wrap(&Result)->Receive(S); return true; diff --git a/sakura_core/plugin/CPluginManager.cpp b/sakura_core/plugin/CPluginManager.cpp index bfaa818c55..b192497e50 100644 --- a/sakura_core/plugin/CPluginManager.cpp +++ b/sakura_core/plugin/CPluginManager.cpp @@ -425,7 +425,7 @@ int CPluginManager::InstallPlugin( CommonSetting& common, const WCHAR* pszPlugin auto_sprintf( szPlugKey, L"C[%d]", i); sPlugCmd.clear(); cProfDef.IOProfileData( PII_COMMAND, szPlugKey, sPlugCmd ); - if (sPlugCmd == L"") { + if (sPlugCmd.empty()) { break; } plugin_table[nEmpty].m_nCmdNum = i; @@ -446,7 +446,7 @@ bool CPluginManager::LoadAllPlugin(CommonSetting* common) std::wstring szLangName; { std::wstring szDllName = GetDllShareData().m_Common.m_sWindow.m_szLanguageDll; - if( szDllName == L"" ){ + if( szDllName.empty() ){ szLangName = L"ja_JP"; }else{ // "sakura_lang_*.dll" diff --git a/sakura_core/plugin/CWSHPlugin.cpp b/sakura_core/plugin/CWSHPlugin.cpp index eb99f8180d..eb1933a2a8 100644 --- a/sakura_core/plugin/CWSHPlugin.cpp +++ b/sakura_core/plugin/CWSHPlugin.cpp @@ -77,7 +77,7 @@ bool CWSHPlugin::InvokePlug( CEditView* view, CPlug& plug, CWSHIfObj::List& para CWSHMacroManager* pWsh = NULL; if( !m_bUseCache || wshPlug.m_Wsh == NULL ){ - CFilePath path( plug.m_cPlugin.GetFilePath( plug.m_sHandler.c_str() ).c_str() ); + CFilePath path( plug.m_cPlugin.GetFilePath( plug.m_sHandler ).c_str() ); pWsh = (CWSHMacroManager*)CWSHMacroManager::Creator( path.GetExt( true ) ); if( pWsh == NULL ){ return false; } diff --git a/sakura_core/prop/CPropComMainMenu.cpp b/sakura_core/prop/CPropComMainMenu.cpp index c5f55facf5..a0a4f640f6 100644 --- a/sakura_core/prop/CPropComMainMenu.cpp +++ b/sakura_core/prop/CPropComMainMenu.cpp @@ -831,7 +831,7 @@ INT_PTR CPropMainMenu::DispatchEvent( static wstring SupplementAmpersand( wstring sLavel) { size_t nPos =0; - while ((nPos = sLavel.find( L"&", nPos)) != wstring::npos) { + while ((nPos = sLavel.find( L'&', nPos)) != wstring::npos) { if (sLavel[nPos+1] != L'&') { // &&でない sLavel.replace( nPos, 1, L"&&"); @@ -845,7 +845,7 @@ static wstring SupplementAmpersand( wstring sLavel) static wstring RemoveAmpersand( wstring sLavel) { size_t nPos =0; - while ((nPos = sLavel.find( L"&", nPos)) != wstring::npos) { + while ((nPos = sLavel.find( L'&', nPos)) != wstring::npos) { if (sLavel[nPos+1] == L'&') { // && sLavel.replace( nPos, 1, L""); @@ -1204,7 +1204,7 @@ bool CPropMainMenu::Check_MainMenu( { HTREEITEM htiItem; - sErrMsg = L""; + sErrMsg.clear(); htiItem = TreeView_GetRoot( hwndTree ); @@ -1348,7 +1348,7 @@ bool CPropMainMenu::Check_MainMenu_Sub( } if (nLevel == 0) { - sErrMsg = L""; + sErrMsg.clear(); if (!bOptionOk) { sErrMsg += LS(STR_PROPCOMMAINMENU_ERR2); bRet = false; diff --git a/sakura_core/prop/CPropComPlugin.cpp b/sakura_core/prop/CPropComPlugin.cpp index f948e986f4..065f5763af 100644 --- a/sakura_core/prop/CPropComPlugin.cpp +++ b/sakura_core/prop/CPropComPlugin.cpp @@ -225,7 +225,7 @@ INT_PTR CPropPlugin::DispatchEvent( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPAR if( sel >= 0 && m_Common.m_sPlugin.m_PluginTable[sel].m_state == PLS_LOADED ){ // 2010.08.21 プラグイン名(フォルダー名)の同一性の確認 CPlugin* plugin = CPluginManager::getInstance()->GetPlugin(sel); - wstring sDirName = plugin->GetFolderName().c_str(); + wstring sDirName = plugin->GetFolderName(); if( plugin && 0 == wmemicmp(sDirName.c_str(), m_Common.m_sPlugin.m_PluginTable[sel].m_szName ) ){ CDlgPluginOption cDlgPluginOption; cDlgPluginOption.DoModal( ::GetModuleHandle(NULL), hwndDlg, this, sel ); @@ -545,7 +545,7 @@ std::wstring CPropPlugin::GetReadMeFile(const std::wstring& sName) } if (!fl->IsFileExist()) { - sReadMeName = L""; + sReadMeName.clear(); } delete fl; return sReadMeName; @@ -617,7 +617,7 @@ static void LoadPluginTemp(CommonSetting& common, CMenuDrawer& cMenuDrawer) int iBitmap = CMenuDrawer::TOOLBAR_ICON_PLUGCOMMAND_DEFAULT - 1; const CPlug* plug = *it; if( !plug->m_sIcon.empty() ){ - iBitmap = cMenuDrawer.m_pcIcons->Add( plug->m_cPlugin.GetFilePath( plug->m_sIcon.c_str() ).c_str() ); + iBitmap = cMenuDrawer.m_pcIcons->Add( plug->m_cPlugin.GetFilePath( plug->m_sIcon ).c_str() ); } cMenuDrawer.AddToolButton( iBitmap, plug->GetFunctionCode() ); } diff --git a/sakura_core/prop/CPropCommon.cpp b/sakura_core/prop/CPropCommon.cpp index ad96185f44..6b6b098f4b 100644 --- a/sakura_core/prop/CPropCommon.cpp +++ b/sakura_core/prop/CPropCommon.cpp @@ -162,9 +162,7 @@ CPropCommon::CPropCommon() return; } -CPropCommon::~CPropCommon() -{ -} +CPropCommon::~CPropCommon() = default; /* 初期化 */ //@@@ 2002.01.03 YAZAKI m_tbMyButtonなどをCShareDataからCMenuDrawerへ移動したことによる修正。 diff --git a/sakura_core/typeprop/CDlgTypeAscertain.cpp b/sakura_core/typeprop/CDlgTypeAscertain.cpp index efbe34db5c..12795f46d3 100644 --- a/sakura_core/typeprop/CDlgTypeAscertain.cpp +++ b/sakura_core/typeprop/CDlgTypeAscertain.cpp @@ -81,7 +81,7 @@ BOOL CDlgTypeAscertain::OnBnClicked( int wID ) wchar_t buff2[_MAX_PATH + 20]; m_psi->bAddType = IsDlgButtonCheckedBool( GetHwnd(), IDC_RADIO_TYPE_ADD ); - m_psi->sColorFile = L""; + m_psi->sColorFile.clear(); m_psi->nColorType = Combo_GetCurSel( GetItemHwnd( IDC_COMBO_COLORS ) ) - 1; if (m_psi->nColorType >= MAX_TYPES && Combo_GetLBText( GetItemHwnd( IDC_COMBO_COLORS ), m_psi->nColorType + 1, buff1)) { if (_stscanf( buff1, L"File -- %ls", buff2 ) > 0) { diff --git a/sakura_core/typeprop/CDlgTypeList.cpp b/sakura_core/typeprop/CDlgTypeList.cpp index f32cc1625b..3f141e1c5c 100644 --- a/sakura_core/typeprop/CDlgTypeList.cpp +++ b/sakura_core/typeprop/CDlgTypeList.cpp @@ -517,7 +517,7 @@ bool CDlgTypeList::InitializeType( void ) return false; } // _DefaultConfig(&types); //規定値をコピー - std::unique_ptr type(new STypeConfig()); + auto type = std::make_unique(); if( 0 != iDocType ){ CDocTypeManager().GetTypeConfig(CTypeConfig(0), *type); // 基本をコピー @@ -632,8 +632,8 @@ bool CDlgTypeList::UpType() // 基本の場合には何もしない return true; } - std::unique_ptr type1(new STypeConfig()); - std::unique_ptr type2(new STypeConfig()); + auto type1 = std::make_unique(); + auto type2 = std::make_unique(); CDocTypeManager().GetTypeConfig(CTypeConfig(iDocType), *type1); CDocTypeManager().GetTypeConfig(CTypeConfig(iDocType - 1), *type2); --(type1->m_nIdx); @@ -654,8 +654,8 @@ bool CDlgTypeList::DownType() // 基本、最後の場合には何もしない return true; } - std::unique_ptr type1(new STypeConfig()); - std::unique_ptr type2(new STypeConfig()); + auto type1 = std::make_unique(); + auto type2 = std::make_unique(); CDocTypeManager().GetTypeConfig(CTypeConfig(iDocType), *type1); CDocTypeManager().GetTypeConfig(CTypeConfig(iDocType + 1), *type2); ++(type1->m_nIdx); @@ -866,7 +866,7 @@ int RegistExt(LPCWSTR sExt, bool bDefProg) { if( szProgID_HKLM[0] != L'\0' ) { - if( (errorCode = CopyRegistry(HKEY_LOCAL_MACHINE, (sBasePath + szProgID_HKLM).c_str(), HKEY_CURRENT_USER, sProgIDPath.c_str())) != 0 ){ return errorCode; } + if( (errorCode = CopyRegistry(HKEY_LOCAL_MACHINE, sBasePath + szProgID_HKLM, HKEY_CURRENT_USER, sProgIDPath)) != 0 ){ return errorCode; } } } @@ -955,7 +955,6 @@ int UnregistExt(LPCWSTR sExt) CharLower(szLowerExt); wstring sDotExt = sBasePath + L"." + szLowerExt; - wstring sGenProgID = wstring() + szLowerExt + L"file"; CRegKey keyExt; if((errorCode = keyExt.Open(HKEY_CURRENT_USER, sDotExt.c_str(), KEY_READ | KEY_WRITE)) != 0) @@ -974,7 +973,6 @@ int UnregistExt(LPCWSTR sExt) wstring sProgIDPath = sBasePath + szProgID; wstring sShellPath = sProgIDPath + L"\\shell"; wstring sShellActionPath = sShellPath + L"\\" + ACTION_NAME; - wstring sShellActionCommandPath = sShellActionPath + L"\\command"; wstring sBackupPath = sShellActionPath + ACTION_BACKUP_PATH; CRegKey keyShellAction; @@ -1047,7 +1045,6 @@ int CheckExt(LPCWSTR sExt, bool *pbRMenu, bool *pbDblClick) CharLower(szLowerExt); wstring sDotExt = sBasePath + L"." + szLowerExt; - wstring sGenProgID = wstring() + szLowerExt + L"file"; CRegKey keyExt; if((errorCode = keyExt.Open(HKEY_CURRENT_USER, sDotExt.c_str(), KEY_READ)) != 0) diff --git a/sakura_core/typeprop/CImpExpManager.cpp b/sakura_core/typeprop/CImpExpManager.cpp index 16fac0eaf9..9bf7966606 100644 --- a/sakura_core/typeprop/CImpExpManager.cpp +++ b/sakura_core/typeprop/CImpExpManager.cpp @@ -357,7 +357,6 @@ bool CImpExpType::Import( const wstring& sFileName, wstring& sErrMsg ) wchar_t* pSlashPos; wchar_t szFileName[_MAX_PATH+1]; bool bCase; - wstring sErrMag; CommonSetting& common = m_pShareData->m_Common; // 強調キーワード @@ -636,7 +635,7 @@ bool CImpExpRegex::Import( const wstring& sFileName, wstring& sErrMsg ) if( line.length() < 12 ) continue; if( wmemcmp(&line[0], L"RxKey[", 6) != 0 ) continue; if( wmemcmp(&line[9], L"]=", 2) != 0 ) continue; - auto sepPos = line.find_first_of(L",", 11); // ColorName と RegexKeyword の間の区切り文字の存在を確認する + auto sepPos = line.find_first_of(L',', 11); // ColorName と RegexKeyword の間の区切り文字の存在を確認する if( sepPos == decltype(line)::npos ) continue; line[sepPos] = L'\0'; // 区切り文字をNULL終端に置き換える事で標準Cライブラリの関数で ColorName を読み取りやすくする const wchar_t* pColorNameInLine = &line[11]; @@ -766,10 +765,10 @@ bool CImpExpKeyHelp::Import( const wstring& sFileName, wstring& sErrMsg ) WCHAR *p1, *p2, *p3; p1 = &buff[9]; p3 = p1; //結果確認用に初期化 - if( NULL != (p2=wcsstr(p1,LTEXT(","))) ){ + if( NULL != (p2=wcschr(p1,LTEXT(','))) ){ *p2 = LTEXT('\0'); p2 += 1; //カンマの次が、次の要素 - if( NULL != (p3=wcsstr(p2,LTEXT(","))) ){ + if( NULL != (p3=wcschr(p2,LTEXT(','))) ){ *p3 = LTEXT('\0'); p3 += 1; //カンマの次が、次の要素 } diff --git a/sakura_core/typeprop/CPropTypes.cpp b/sakura_core/typeprop/CPropTypes.cpp index 51cb5e57ec..44045bd959 100644 --- a/sakura_core/typeprop/CPropTypes.cpp +++ b/sakura_core/typeprop/CPropTypes.cpp @@ -109,9 +109,7 @@ CPropTypes::CPropTypes() (static_cast(this))->CPropTypes_Screen(); } -CPropTypes::~CPropTypes() -{ -} +CPropTypes::~CPropTypes() = default; /* 初期化 */ void CPropTypes::Create( HINSTANCE hInstApp, HWND hwndParent ) diff --git a/sakura_core/types/CType_Asm.cpp b/sakura_core/types/CType_Asm.cpp index c3b006bf83..b6603956c7 100644 --- a/sakura_core/types/CType_Asm.cpp +++ b/sakura_core/types/CType_Asm.cpp @@ -81,7 +81,7 @@ void CDocOutline::MakeTopicList_asm( CFuncInfoArr* pcFuncInfoArr ) } //行コメント削除 - p = wcsstr( pTmpLine, L";" ); + p = wcschr( pTmpLine, L';' ); if( p ) *p = L'\0'; length = wcslen( pTmpLine ); @@ -93,9 +93,9 @@ void CDocOutline::MakeTopicList_asm( CFuncInfoArr* pcFuncInfoArr ) token[ j ] = my_strtok( pTmpLine, length, &offset, L" \t\r\n" ); if( token[ j ] == NULL ) break; //トークンに含まれるべき文字でないか? - if( wcsstr( token[ j ], L"\"") != NULL - || wcsstr( token[ j ], L"\\") != NULL - || wcsstr( token[ j ], L"'" ) != NULL ){ + if( wcschr( token[ j ], L'\"') != NULL + || wcschr( token[ j ], L'\\') != NULL + || wcschr( token[ j ], L'\'' ) != NULL ){ token[ j ] = NULL; break; } diff --git a/sakura_core/uiparts/CGraphics.cpp b/sakura_core/uiparts/CGraphics.cpp index 04968462f5..d8f568077a 100644 --- a/sakura_core/uiparts/CGraphics.cpp +++ b/sakura_core/uiparts/CGraphics.cpp @@ -37,7 +37,7 @@ class CGDIStock using Me = CGDIStock; public: - CGDIStock(){} + CGDIStock() = default; CGDIStock(const Me&) = delete; Me& operator = (const Me&) = delete; CGDIStock(Me&&) noexcept = delete; diff --git a/sakura_core/util/design_template.h b/sakura_core/util/design_template.h index de2b60d007..bdccc0929a 100644 --- a/sakura_core/util/design_template.h +++ b/sakura_core/util/design_template.h @@ -62,7 +62,7 @@ class TSingleton{ } protected: - TSingleton(){} + TSingleton() = default; DISALLOW_COPY_AND_ASSIGN(TSingleton); }; diff --git a/sakura_core/util/file.cpp b/sakura_core/util/file.cpp index 5acb616072..79b0dce4cd 100644 --- a/sakura_core/util/file.cpp +++ b/sakura_core/util/file.cpp @@ -832,7 +832,6 @@ void GetExistPathW( wchar_t *po , const wchar_t *pi ) { wchar_t *pw,*ps; int cnt; - wchar_t drv[4] = L"_:\\"; int dl; /* ドライブの状態 */ /* pi の内容を @@ -851,6 +850,7 @@ void GetExistPathW( wchar_t *po , const wchar_t *pi ) dl = GetExistPath_NO_DriveLetter; /*「ドライブレターが無い」にしておく*/ if( *(po+1)==L':' && WCODE::IsAZ(*po) ){ /* 先頭にドライブレターがある。そのドライブが有効かどうか判定する */ + wchar_t drv[4] = L"_:\\"; drv[0] = *po; if( _waccess(drv,0) == 0 ) dl = GetExistPath_AV_Drive; /* 有効 */ else dl = GetExistPath_IV_Drive; /* 無効 */ diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index b78da3282e..3644b15aef 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -708,11 +708,10 @@ LRESULT CEditView::DispatchEvent( // MYTRACE( L" WM_VSCROLL nPos=%d\n", GetScrollPos( m_hwndVScrollBar, SB_CTL ) ); // Sep. 11, 2004 genta 同期スクロールの関数化 { - CLayoutInt Scroll = OnVScroll( - (int) LOWORD( wParam ), ((int) HIWORD( wParam )) * m_nVScrollRate ); - // シフトキーが押されていないときだけ同期スクロール if(!GetKeyState_Shift()){ + CLayoutInt Scroll = OnVScroll( + (int)LOWORD(wParam), ((int)HIWORD(wParam)) * m_nVScrollRate); SyncScrollV( Scroll ); } } @@ -723,11 +722,10 @@ LRESULT CEditView::DispatchEvent( // MYTRACE( L" WM_HSCROLL nPos=%d\n", GetScrollPos( m_hwndHScrollBar, SB_CTL ) ); // Sep. 11, 2004 genta 同期スクロールの関数化 { - CLayoutInt Scroll = OnHScroll( - (int) LOWORD( wParam ), ((int) HIWORD( wParam )) ); - // シフトキーが押されていないときだけ同期スクロール if(!GetKeyState_Shift()){ + CLayoutInt Scroll = OnHScroll( + (int)LOWORD(wParam), ((int)HIWORD(wParam))); SyncScrollH( Scroll ); } } @@ -1396,9 +1394,9 @@ void CEditView::ConvSelectedArea( EFunctionCode nFuncCode ) nIdxFrom = CLogicInt(0); nIdxTo = CLogicInt(0); } - CLogicInt nDelPos = nDelPosNext; nDelLen = nDelLenNext; if( nLineNum < rcSelLayout.bottom && 0 < nDelLen ){ + CLogicInt nDelPos = nDelPosNext; CLayoutPoint sPos; m_pcEditDoc->m_cLayoutMgr.GetLineStr( nLineNum + CLayoutInt(1), &nLineLen2, &pcLayout ); sPos.Set( @@ -1826,7 +1824,6 @@ bool CEditView::GetSelectedData( wchar_t* pszLineNum = NULL; const wchar_t* pszSpaces = L" "; const CLayout* pcLayout; - CEol appendEol( neweol ); /* 範囲選択がされていない */ if( !GetSelectionInfo().IsTextSelected() ){ @@ -1915,6 +1912,7 @@ bool CEditView::GetSelectedData( } } else{ + CEol appendEol(neweol); cmemBuf->SetString(L""); //<< 2002/04/18 Azumaiya @@ -2648,7 +2646,7 @@ bool CEditView::ShowKeywordHelp( POINT po, LPCWSTR pszHelp, LPRECT prcHokanWin) return false; } }else{ - m_cTipWnd.m_cKey = cmemCurText; + m_cTipWnd.m_cKey = std::move(cmemCurText); /* 検索実行 */ if(!KeySearchCore(&m_cTipWnd.m_cKey)) // 2006.04.10 fon return FALSE; diff --git a/sakura_core/view/CEditView_Command_New.cpp b/sakura_core/view/CEditView_Command_New.cpp index 54c7b63b23..128783ae5b 100644 --- a/sakura_core/view/CEditView_Command_New.cpp +++ b/sakura_core/view/CEditView_Command_New.cpp @@ -116,11 +116,11 @@ void CEditView::InsertData_CEditView( || m_pTypeData->m_bKinsokuKuto ); //@@@ 2002.04.19 MIK CLayoutInt nLineAllColLen; - CLogicInt nIdxFrom = CLogicInt(0); CLayoutInt nColumnFrom = ptInsertPos.GetX2(); CNativeW cMem(L""); COpeLineData insData; if( pLine ){ + CLogicInt nIdxFrom = CLogicInt(0); // 更新が前行からになる可能性を調べる // 2009.02.17 ryoji // ※折り返し行頭への句読点入力で前の行だけが更新される場合もある // ※挿入位置は行途中でも句読点入力+ワードラップで前の文字列から続けて前行に回り込む場合もある diff --git a/sakura_core/view/CEditView_Mouse.cpp b/sakura_core/view/CEditView_Mouse.cpp index d168cc4331..82e7407cc7 100644 --- a/sakura_core/view/CEditView_Mouse.cpp +++ b/sakura_core/view/CEditView_Mouse.cpp @@ -1572,7 +1572,7 @@ void CEditView::OnLBUTTONDBLCLK( WPARAM fwKeys, int _xPos , int _yPos ) strOPEN = L"ht" + strURL; } else{ - strOPEN = strURL; + strOPEN = std::move(strURL); } } { diff --git a/sakura_core/view/CEditView_Paint.cpp b/sakura_core/view/CEditView_Paint.cpp index 6d42eb6ca3..2d401e39b0 100644 --- a/sakura_core/view/CEditView_Paint.cpp +++ b/sakura_core/view/CEditView_Paint.cpp @@ -71,6 +71,7 @@ void CEditView_Paint::Call_OnPaint( //領域を作成 -> rc std::vector rcs; + rcs.reserve(3); if(nPaintFlag & PAINT_LINENUMBER)rcs.push_back(rcLineNumber); if(nPaintFlag & PAINT_RULER)rcs.push_back(rcRuler); if(nPaintFlag & PAINT_BODY)rcs.push_back(rcBody); diff --git a/sakura_core/window/CEditWnd.cpp b/sakura_core/window/CEditWnd.cpp index cd2ff90a3d..86146b4823 100644 --- a/sakura_core/window/CEditWnd.cpp +++ b/sakura_core/window/CEditWnd.cpp @@ -2195,7 +2195,7 @@ void CEditWnd::OnCommand( WORD wNotifyCode, WORD wID , HWND hwndCtl ) if( strText.length() < _MAX_PATH ){ CSearchKeywordManager().AddToSearchKeyArr( strText.c_str() ); } - GetActiveView().m_strCurSearchKey = strText; + GetActiveView().m_strCurSearchKey = std::move(strText); GetActiveView().m_bCurSearchUpdate = true; GetActiveView().ChangeCurRegexp(); } @@ -4840,7 +4840,7 @@ void CEditWnd::RegisterPluginCommand( CPlug* plug ) { int iBitmap = CMenuDrawer::TOOLBAR_ICON_PLUGCOMMAND_DEFAULT - 1; if( !plug->m_sIcon.empty() ){ - iBitmap = m_cMenuDrawer.m_pcIcons->Add( plug->m_cPlugin.GetFilePath( plug->m_sIcon.c_str() ).c_str() ); + iBitmap = m_cMenuDrawer.m_pcIcons->Add( plug->m_cPlugin.GetFilePath( plug->m_sIcon ).c_str() ); } m_cMenuDrawer.AddToolButton( iBitmap, plug->GetFunctionCode() ); diff --git a/sakura_core/window/CMainToolBar.cpp b/sakura_core/window/CMainToolBar.cpp index 354209a576..b2ea75db4e 100644 --- a/sakura_core/window/CMainToolBar.cpp +++ b/sakura_core/window/CMainToolBar.cpp @@ -68,7 +68,7 @@ void CMainToolBar::ProcSearchBox( MSG *msg ) //検索キーを登録 CSearchKeywordManager().AddToSearchKeyArr( strText.c_str() ); } - m_pOwner->GetActiveView().m_strCurSearchKey = strText; + m_pOwner->GetActiveView().m_strCurSearchKey = std::move(strText); m_pOwner->GetActiveView().m_bCurSearchUpdate = true; m_pOwner->GetActiveView().ChangeCurRegexp(); @@ -604,7 +604,7 @@ int CMainToolBar::GetSearchKey(std::wstring& strText) if( m_hwndSearchBox ){ ApiWrap::Wnd_GetText( m_hwndSearchBox, strText ); }else{ - strText = L""; + strText.clear(); } return strText.length(); } From 1fc1801a340c0d1ebb2b306d27b3d48c14ec2c17 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Tue, 19 Jul 2022 13:18:18 +0300 Subject: [PATCH 1017/1024] Additional fixes review by berryzplus Signed-off-by: lainon --- sakura_core/CDicMgr.cpp | 6 +++--- sakura_core/CGrepEnumFileBase.h | 4 ++-- sakura_core/basis/CMySize.h | 2 +- sakura_core/cmd/CViewCommander_Grep.cpp | 2 +- sakura_core/dlg/CDlgPluginOption.cpp | 4 ++-- sakura_core/extmodule/CBregexp.cpp | 4 ++-- sakura_core/macro/CSMacroMgr.h | 2 +- sakura_core/plugin/CPlugin.cpp | 4 ++-- sakura_core/typeprop/CImpExpManager.cpp | 2 +- sakura_core/util/design_template.h | 2 +- sakura_core/view/CEditView.cpp | 4 ++-- 11 files changed, 18 insertions(+), 18 deletions(-) diff --git a/sakura_core/CDicMgr.cpp b/sakura_core/CDicMgr.cpp index 1110b02f13..0532477fdc 100644 --- a/sakura_core/CDicMgr.cpp +++ b/sakura_core/CDicMgr.cpp @@ -52,7 +52,8 @@ BOOL CDicMgr::Search( CRunningTimer cRunningTimer( L"CDicMgr::Search" ); #endif long i; - const wchar_t* pszDelimit = L" /// "; + constexpr auto& pszDelimit = L" /// "; + constexpr auto cchDelimit = _countof(pszDelimit) - 1; wchar_t* pszWork; int nRes; wchar_t* pszToken; @@ -70,7 +71,6 @@ BOOL CDicMgr::Search( } wchar_t szLine[LINEREADBUFSIZE]; - size_t szDelimit = wcslen(pszDelimit); for(int line=1 ; in; line++ ){ // 2006.04.10 fon //1行読み込み { @@ -82,7 +82,7 @@ BOOL CDicMgr::Search( pszWork = wcsstr( szLine, pszDelimit ); if( NULL != pszWork && szLine[0] != L';' ){ *pszWork = L'\0'; - pszWork += szDelimit; + pszWork += cchDelimit; /* 最初のトークンを取得します。 */ wchar_t *context = NULL; diff --git a/sakura_core/CGrepEnumFileBase.h b/sakura_core/CGrepEnumFileBase.h index 9101385843..f59eb50394 100644 --- a/sakura_core/CGrepEnumFileBase.h +++ b/sakura_core/CGrepEnumFileBase.h @@ -115,9 +115,9 @@ class CGrepEnumFileBase { int Enumerates( LPCWSTR lpBaseFolder, VGrepEnumKeys& vecKeys, CGrepEnumOptions& option, CGrepEnumFileBase* pExceptItems = NULL ){ int found = 0; - size_t szBaseFolder = wcslen(lpBaseFolder); + const auto cchBaseFolder = lpBaseFolder ? wcsnlen_s(lpBaseFolder, _MAX_PATH - 1) : 0; for( int i = 0; i < (int)vecKeys.size(); i++ ){ - int baseLen = szBaseFolder; + int baseLen = cchBaseFolder; LPWSTR lpPath = new WCHAR[ baseLen + wcslen( vecKeys[ i ] ) + 2 ]; if( NULL == lpPath ) break; wcscpy( lpPath, lpBaseFolder ); diff --git a/sakura_core/basis/CMySize.h b/sakura_core/basis/CMySize.h index 6c7d67550a..dab1fe8d26 100644 --- a/sakura_core/basis/CMySize.h +++ b/sakura_core/basis/CMySize.h @@ -32,7 +32,7 @@ class CMySize : public SIZE{ public: //コンストラクタ・デストラクタ - CMySize() = default; //※初期化なし + CMySize() : CMySize(0, 0) {} CMySize(int _cx,int _cy){ cx=_cx; cy=_cy; } CMySize(const SIZE& rhs){ cx=rhs.cx; cy=rhs.cy; } diff --git a/sakura_core/cmd/CViewCommander_Grep.cpp b/sakura_core/cmd/CViewCommander_Grep.cpp index 650ac39e2b..7db4b7383d 100644 --- a/sakura_core/cmd/CViewCommander_Grep.cpp +++ b/sakura_core/cmd/CViewCommander_Grep.cpp @@ -250,7 +250,7 @@ void CViewCommander::Command_GREP_REPLACE( void ) if( cDlgGrepRep.m_bGrepSeparateFolder )wcscat( pOpt, L"D" ); if( cDlgGrepRep.m_bPaste )wcscat( pOpt, L"C" ); // クリップボードから貼り付け if( cDlgGrepRep.m_bBackup )wcscat( pOpt, L"O" ); // バックアップ作成 - if( pOpt[0] != '\0' ) { + if( pOpt[0] ) { cCmdLine.AppendString( L" -GOPT=" ); cCmdLine.AppendString( pOpt ); } diff --git a/sakura_core/dlg/CDlgPluginOption.cpp b/sakura_core/dlg/CDlgPluginOption.cpp index 6e1927bc61..010df6e5cc 100644 --- a/sakura_core/dlg/CDlgPluginOption.cpp +++ b/sakura_core/dlg/CDlgPluginOption.cpp @@ -148,7 +148,7 @@ void CDlgPluginOption::SetData( void ) if( !cProfile->IOProfileData( sSection.c_str(), sKey.c_str(), sValue ) ){ // Optionが見つからなかったらDefault値を設定 sValue = cOpt->GetDefaultVal(); - if( sValue != wstring() ){ + if( sValue.length() ){ bLoadDefault = true; cProfile->SetWritingMode(); cProfile->IOProfileData( sSection.c_str(), sKey.c_str(), sValue ); @@ -158,7 +158,7 @@ void CDlgPluginOption::SetData( void ) } if (cOpt->GetType() == OPTION_TYPE_BOOL) { - wcscpy( buf, sValue == wstring( L"0") || sValue == wstring() ? BOOL_DISP_FALSE : BOOL_DISP_TRUE ); + wcscpy_s( buf, sValue == L"0"s || sValue.empty() ? BOOL_DISP_FALSE : BOOL_DISP_TRUE ); } else if (cOpt->GetType() == OPTION_TYPE_INT) { // 数値へ正規化 diff --git a/sakura_core/extmodule/CBregexp.cpp b/sakura_core/extmodule/CBregexp.cpp index ec331d74ed..0b4d12fd1f 100644 --- a/sakura_core/extmodule/CBregexp.cpp +++ b/sakura_core/extmodule/CBregexp.cpp @@ -236,13 +236,13 @@ wchar_t* CBregexp::MakePattern( const wchar_t* szPattern, const wchar_t* szPatte static const wchar_t BOT_SUBST[] = L"s/\\$(\\)*)$/([\\\\r\\\\n]+)\\$$1/k"; //!< 行末パターンの置換用パターン int nLen; //!< szPatternの長さ BREGEXP_W* sReg = NULL; //!< コンパイル構造体 - wchar_t szAdd2[5] = L""; //!< 行末あり置換の $数字 格納用 + wchar_t szAdd2[5] = {}; //!< 行末あり置換の $数字 格納用 int nParens = 0; //!< 検索パターン(szPattern)中の括弧の数(行末時に使用) wchar_t *szNPattern; //!< 検索パターン nLen = CheckPattern( szPattern ); if( (m_ePatType & PAT_BOTTOM) != 0 ) { - wchar_t szMsg[80] = L""; //!< エラーメッセージ + wchar_t szMsg[80] = {}; //!< エラーメッセージ bool bJustDollar = false; // 行末指定の$のみであるフラグ($の前に \r\nが指定されていない) szNPattern = MakePatternSub(szPattern, NULL, NULL, nOption); int matched = BMatch( szNPattern, szCRLF, szCRLF+wcslen(szCRLF), &sReg, szMsg ); diff --git a/sakura_core/macro/CSMacroMgr.h b/sakura_core/macro/CSMacroMgr.h index c555a5edc4..1dc6652893 100644 --- a/sakura_core/macro/CSMacroMgr.h +++ b/sakura_core/macro/CSMacroMgr.h @@ -130,7 +130,7 @@ class CSMacroMgr { return ( 0 <= idx && idx < MAX_CUSTMACRO ) ? m_pShareData->m_Common.m_sMacro.m_MacroTable[idx].m_szFile : - ( (idx == STAND_KEYMACRO || idx == TEMP_KEYMACRO) && !m_sMacroPath.empty() ) ? + ( (idx == STAND_KEYMACRO || idx == TEMP_KEYMACRO) && m_sMacroPath.length() ) ? m_sMacroPath.c_str() : NULL; } diff --git a/sakura_core/plugin/CPlugin.cpp b/sakura_core/plugin/CPlugin.cpp index ab0a32e148..de473e9823 100644 --- a/sakura_core/plugin/CPlugin.cpp +++ b/sakura_core/plugin/CPlugin.cpp @@ -265,7 +265,7 @@ std::vector wstring_split( std::wstring sTrg, wchar_t cSep ) splitVec.push_back( sTrg.substr( 0, idx ) ); sTrg = sTrg.substr( ++idx ); } - if (!sTrg.empty()) { + if (sTrg.length()) { splitVec.push_back( sTrg ); } @@ -278,7 +278,7 @@ bool CPlugin::ReadPluginDefString( CDataProfile *cProfile, CDataProfile *cProfil { WCHAR bufKey[64]; m_aStrings.clear(); - m_aStrings.emplace_back( L"" ); // 0番目ダミー + m_aStrings.emplace_back( std::wstring() ); // 0番目ダミー for( int nCount = 1; nCount < MAX_PLUG_STRING; nCount++ ){ //添え字は1から始める wstring sVal = L""; _swprintf( bufKey, L"S[%d]", nCount ); diff --git a/sakura_core/typeprop/CImpExpManager.cpp b/sakura_core/typeprop/CImpExpManager.cpp index 9bf7966606..20730fcde9 100644 --- a/sakura_core/typeprop/CImpExpManager.cpp +++ b/sakura_core/typeprop/CImpExpManager.cpp @@ -765,7 +765,7 @@ bool CImpExpKeyHelp::Import( const wstring& sFileName, wstring& sErrMsg ) WCHAR *p1, *p2, *p3; p1 = &buff[9]; p3 = p1; //結果確認用に初期化 - if( NULL != (p2=wcschr(p1,LTEXT(','))) ){ + if( p2 = wcschr(p1, L',') ){ *p2 = LTEXT('\0'); p2 += 1; //カンマの次が、次の要素 if( NULL != (p3=wcschr(p2,LTEXT(','))) ){ diff --git a/sakura_core/util/design_template.h b/sakura_core/util/design_template.h index bdccc0929a..de2b60d007 100644 --- a/sakura_core/util/design_template.h +++ b/sakura_core/util/design_template.h @@ -62,7 +62,7 @@ class TSingleton{ } protected: - TSingleton() = default; + TSingleton(){} DISALLOW_COPY_AND_ASSIGN(TSingleton); }; diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index 3644b15aef..f8b65567d1 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -711,7 +711,7 @@ LRESULT CEditView::DispatchEvent( // シフトキーが押されていないときだけ同期スクロール if(!GetKeyState_Shift()){ CLayoutInt Scroll = OnVScroll( - (int)LOWORD(wParam), ((int)HIWORD(wParam)) * m_nVScrollRate); + LOWORD(wParam), HIWORD(wParam) * m_nVScrollRate); SyncScrollV( Scroll ); } } @@ -1913,7 +1913,7 @@ bool CEditView::GetSelectedData( } else{ CEol appendEol(neweol); - cmemBuf->SetString(L""); + cmemBuf->Clear(); //<< 2002/04/18 Azumaiya // これから貼り付けに使う領域の大まかなサイズを取得する。 From 1c71b64ecaf73a0b35662aa59289afe5b93158ad Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 20 Jul 2022 01:54:27 +0900 Subject: [PATCH 1018/1024] using namespace std::string_literals --- sakura_core/dlg/CDlgPluginOption.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sakura_core/dlg/CDlgPluginOption.cpp b/sakura_core/dlg/CDlgPluginOption.cpp index 010df6e5cc..0745d7b49f 100644 --- a/sakura_core/dlg/CDlgPluginOption.cpp +++ b/sakura_core/dlg/CDlgPluginOption.cpp @@ -47,6 +47,8 @@ #define BOOL_DISP_TRUE L"\u2611" #define BOOL_DISP_FALSE L"\u2610" +using namespace std::string_literals; + // 編集領域を表示、非表示にする static inline void CtrlShow(HWND hwndDlg, int id, BOOL bShow) { From c48328fbbb3568f11a6ac845f02a32cf0ca3db36 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 20 Jul 2022 02:27:47 +0900 Subject: [PATCH 1019/1024] Fix the maximum length of path strings. --- sakura_core/CGrepEnumFileBase.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sakura_core/CGrepEnumFileBase.h b/sakura_core/CGrepEnumFileBase.h index f59eb50394..3590e23fc6 100644 --- a/sakura_core/CGrepEnumFileBase.h +++ b/sakura_core/CGrepEnumFileBase.h @@ -115,7 +115,7 @@ class CGrepEnumFileBase { int Enumerates( LPCWSTR lpBaseFolder, VGrepEnumKeys& vecKeys, CGrepEnumOptions& option, CGrepEnumFileBase* pExceptItems = NULL ){ int found = 0; - const auto cchBaseFolder = lpBaseFolder ? wcsnlen_s(lpBaseFolder, _MAX_PATH - 1) : 0; + const auto cchBaseFolder = lpBaseFolder ? wcsnlen_s(lpBaseFolder, 4096 - 1) : 0; // FIXME: パス長の上限は暫定値。 for( int i = 0; i < (int)vecKeys.size(); i++ ){ int baseLen = cchBaseFolder; LPWSTR lpPath = new WCHAR[ baseLen + wcslen( vecKeys[ i ] ) + 2 ]; From d20e9d0c7699cc210f736a85843a61e9f5bae9db Mon Sep 17 00:00:00 2001 From: berryzplus Date: Wed, 20 Jul 2022 09:34:09 +0900 Subject: [PATCH 1020/1024] =?UTF-8?q?=E6=8C=87=E6=91=98=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Shiftを押さなかった場合にスクロールしなくなってしまっていたのを修正。 --- sakura_core/view/CEditView.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/sakura_core/view/CEditView.cpp b/sakura_core/view/CEditView.cpp index f8b65567d1..e4271b8e76 100644 --- a/sakura_core/view/CEditView.cpp +++ b/sakura_core/view/CEditView.cpp @@ -708,10 +708,11 @@ LRESULT CEditView::DispatchEvent( // MYTRACE( L" WM_VSCROLL nPos=%d\n", GetScrollPos( m_hwndVScrollBar, SB_CTL ) ); // Sep. 11, 2004 genta 同期スクロールの関数化 { + // 垂直スクロールする + auto Scroll = OnVScroll(LOWORD(wParam), HIWORD(wParam) * m_nVScrollRate); + // シフトキーが押されていないときだけ同期スクロール if(!GetKeyState_Shift()){ - CLayoutInt Scroll = OnVScroll( - LOWORD(wParam), HIWORD(wParam) * m_nVScrollRate); SyncScrollV( Scroll ); } } @@ -722,10 +723,11 @@ LRESULT CEditView::DispatchEvent( // MYTRACE( L" WM_HSCROLL nPos=%d\n", GetScrollPos( m_hwndHScrollBar, SB_CTL ) ); // Sep. 11, 2004 genta 同期スクロールの関数化 { + // 水平スクロールする + auto Scroll = OnHScroll(LOWORD(wParam), HIWORD(wParam)); + // シフトキーが押されていないときだけ同期スクロール if(!GetKeyState_Shift()){ - CLayoutInt Scroll = OnHScroll( - (int)LOWORD(wParam), ((int)HIWORD(wParam))); SyncScrollH( Scroll ); } } From 156fc3c78dd3b38830775e8e27675a80a87fdd24 Mon Sep 17 00:00:00 2001 From: Ikko Ashimine Date: Sun, 7 Aug 2022 19:28:08 +0900 Subject: [PATCH 1021/1024] =?UTF-8?q?CMakeLists.txt=E3=81=AE=E3=82=B3?= =?UTF-8?q?=E3=83=A1=E3=83=B3=E3=83=88=E3=82=BF=E3=82=A4=E3=83=9D=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit libary -> library --- tests/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index c6fac32ccc..7612ced300 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -10,7 +10,7 @@ enable_language(CXX) set(CMAKE_CXX_STANDARD 17) # C++17... set(CMAKE_CXX_STANDARD_REQUIRED ON) #...is required... -# switch DLL or static libary by specifying by command line +# switch DLL or static library by specifying by command line set (LIB_TYPE STATIC) if (BUILD_SHARED_LIBS) # User wants to build Dynamic Libraries, so change the LIB_TYPE variable to CMake keyword 'SHARED' From b76c2e0f27795c8c352c4dae18b94d1789de8a4e Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 10 Sep 2022 16:51:14 +0900 Subject: [PATCH 1022/1024] =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=B1?= =?UTF-8?q?=E3=83=BC=E3=82=B9=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit マルチユーザー設定ファイル(sakura.exe.ini)のテストが失敗したときに、テストのために作成したexe.iniが削除されず、他ケースが失敗していたのを修正 --- tests/unittests/test-file.cpp | 81 ++++++++++++++++++----------------- 1 file changed, 41 insertions(+), 40 deletions(-) diff --git a/tests/unittests/test-file.cpp b/tests/unittests/test-file.cpp index b9c166343d..ea21412588 100644 --- a/tests/unittests/test-file.cpp +++ b/tests/unittests/test-file.cpp @@ -209,10 +209,47 @@ TEST(file, GetIniFileName_InProcessNamedProfileUnInitialized) ASSERT_STREQ(path.c_str(), GetIniFileName().c_str()); } +/*! + * マルチユーザー設定ファイルを使うテストのためのフィクスチャクラス + * + * 設定ファイルを使うテストは「設定ファイルがない状態」からの始動を想定しているので + * 始動前に設定ファイルを削除するようにしている。 + * テスト実行後に設定ファイルを残しておく意味はないので終了後も削除している。 + */ +class CExeIniTest : public ::testing::Test { +protected: + /*! + * マルチユーザー構成設定ファイルのパス + */ + std::filesystem::path exeIniPath; + + /*! + * テストが起動される直前に毎回呼ばれる関数 + */ + void SetUp() override { + // マルチユーザー構成設定ファイルのパス + exeIniPath = GetExeFileName().concat(L".ini"); + } + + /*! + * テストが実行された直後に毎回呼ばれる関数 + */ + void TearDown() override { + // 存在チェック + if (std::filesystem::exists(exeIniPath)) { + // マルチユーザー構成設定ファイルを削除する + std::filesystem::remove(exeIniPath); + } + + // 削除チェック + ASSERT_FALSE(fexist(exeIniPath.c_str())); + } +}; + /*! * @brief iniファイルパスの取得 */ -TEST(file, GetIniFileName_PrivateRoamingAppData) +TEST_F(CExeIniTest, GetIniFileName_PrivateRoamingAppData) { // コマンドラインのインスタンスを用意する CCommandLine cCommandLine; @@ -222,9 +259,6 @@ TEST(file, GetIniFileName_PrivateRoamingAppData) // プロセスのインスタンスを用意する CControlProcess dummy(nullptr, LR"(-PROF="profile1")"); - // マルチユーザー構成設定ファイルのパス - auto exeIniPath = GetExeFileName().concat(L".ini"); - // 設定を書き込む ::WritePrivateProfileString(L"Settings", L"MultiUser", L"1", exeIniPath.c_str()); ::WritePrivateProfileString(L"Settings", L"UserRootFolder", L"0", exeIniPath.c_str()); @@ -241,18 +275,12 @@ TEST(file, GetIniFileName_PrivateRoamingAppData) // テスト実施 ASSERT_STREQ(expected.c_str(), GetIniFileName().c_str()); - - // INIファイルを削除する - std::filesystem::remove(exeIniPath); - - // 削除チェック - ASSERT_FALSE(fexist(exeIniPath.c_str())); } /*! * @brief iniファイルパスの取得 */ -TEST(file, GetIniFileName_PrivateDesktop) +TEST_F(CExeIniTest, GetIniFileName_PrivateDesktop) { // コマンドラインのインスタンスを用意する CCommandLine cCommandLine; @@ -262,9 +290,6 @@ TEST(file, GetIniFileName_PrivateDesktop) // プロセスのインスタンスを用意する CControlProcess dummy(nullptr, LR"(-PROF="")"); - // マルチユーザー構成設定ファイルのパス - auto exeIniPath = GetExeFileName().concat(L".ini"); - // 設定を書き込む ::WritePrivateProfileString(L"Settings", L"MultiUser", L"1", exeIniPath.c_str()); ::WritePrivateProfileString(L"Settings", L"UserRootFolder", L"3", exeIniPath.c_str()); @@ -281,18 +306,12 @@ TEST(file, GetIniFileName_PrivateDesktop) // テスト実施 ASSERT_STREQ(expected.c_str(), GetIniFileName().c_str()); - - // INIファイルを削除する - std::filesystem::remove(exeIniPath); - - // 削除チェック - ASSERT_FALSE(fexist(exeIniPath.c_str())); } /*! * @brief iniファイルパスの取得 */ -TEST(file, GetIniFileName_PrivateProfile) +TEST_F(CExeIniTest, GetIniFileName_PrivateProfile) { // コマンドラインのインスタンスを用意する CCommandLine cCommandLine; @@ -302,9 +321,6 @@ TEST(file, GetIniFileName_PrivateProfile) // プロセスのインスタンスを用意する CControlProcess dummy(nullptr, LR"(-PROF="")"); - // マルチユーザー構成設定ファイルのパス - auto exeIniPath = GetExeFileName().concat(L".ini"); - // 設定を書き込む ::WritePrivateProfileString(L"Settings", L"MultiUser", L"1", exeIniPath.c_str()); ::WritePrivateProfileString(L"Settings", L"UserRootFolder", L"1", exeIniPath.c_str()); @@ -321,18 +337,12 @@ TEST(file, GetIniFileName_PrivateProfile) // テスト実施 ASSERT_STREQ(expected.c_str(), GetIniFileName().c_str()); - - // INIファイルを削除する - std::filesystem::remove(exeIniPath); - - // 削除チェック - ASSERT_FALSE(fexist(exeIniPath.c_str())); } /*! * @brief iniファイルパスの取得 */ -TEST(file, GetIniFileName_PrivateDocument) +TEST_F(CExeIniTest, GetIniFileName_PrivateDocument) { // コマンドラインのインスタンスを用意する CCommandLine cCommandLine; @@ -342,9 +352,6 @@ TEST(file, GetIniFileName_PrivateDocument) // プロセスのインスタンスを用意する CControlProcess dummy(nullptr, LR"(-PROF="")"); - // マルチユーザー構成設定ファイルのパス - auto exeIniPath = GetExeFileName().concat(L".ini"); - // 設定を書き込む ::WritePrivateProfileString(L"Settings", L"MultiUser", L"1", exeIniPath.c_str()); ::WritePrivateProfileString(L"Settings", L"UserRootFolder", L"2", exeIniPath.c_str()); @@ -361,12 +368,6 @@ TEST(file, GetIniFileName_PrivateDocument) // テスト実施 ASSERT_STREQ(expected.c_str(), GetIniFileName().c_str()); - - // INIファイルを削除する - std::filesystem::remove(exeIniPath); - - // 削除チェック - ASSERT_FALSE(fexist(exeIniPath.c_str())); } /*! From 128f442ea1320fa3dacadd7c85ce743da40702f0 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 10 Sep 2022 17:02:53 +0900 Subject: [PATCH 1023/1024] =?UTF-8?q?=E3=83=9E=E3=83=AB=E3=83=81=E3=83=A6?= =?UTF-8?q?=E3=83=BC=E3=82=B6=E3=83=BC=E8=A8=AD=E5=AE=9A=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=A4=E3=83=AB=E3=81=AE=E4=B8=8D=E5=85=B7=E5=90=88=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit マルチユーザー設定ファイルのUserRootFolderに 2:ドキュメントフォルダ、3:デスクトップを指定した場合、 OneDriveのフォルダが取得されてしまう不具合を修正する。 この不具合はOneDriveをセットアップしないと再現しないのでCI/CDではチェックできない。 --- sakura_core/_main/CControlProcess.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/sakura_core/_main/CControlProcess.cpp b/sakura_core/_main/CControlProcess.cpp index 64a058f0c9..218d466ae4 100644 --- a/sakura_core/_main/CControlProcess.cpp +++ b/sakura_core/_main/CControlProcess.cpp @@ -64,24 +64,24 @@ std::filesystem::path CControlProcess::GetIniFileName() const */ std::filesystem::path CControlProcess::GetPrivateIniFileName(const std::wstring& exeIniPath, const std::wstring& filename) const { + const auto nFolder = ::GetPrivateProfileInt(L"Settings", L"UserRootFolder", 0, exeIniPath.c_str()); KNOWNFOLDERID refFolderId; - switch (int nFolder = ::GetPrivateProfileInt(L"Settings", L"UserRootFolder", 0, exeIniPath.c_str())) { + switch (nFolder) { case 1: + case 3: refFolderId = FOLDERID_Profile; // ユーザーのルートフォルダー break; case 2: refFolderId = FOLDERID_Documents; // ユーザーのドキュメントフォルダー break; - case 3: - refFolderId = FOLDERID_Desktop; // ユーザーのデスクトップフォルダー - break; + default: refFolderId = FOLDERID_RoamingAppData; // ユーザーのアプリケーションデータフォルダー break; } PWSTR pFolderPath = nullptr; - ::SHGetKnownFolderPath(refFolderId, KF_FLAG_DEFAULT, nullptr, &pFolderPath); + ::SHGetKnownFolderPath(refFolderId, KF_FLAG_DEFAULT_PATH, NULL, &pFolderPath); std::filesystem::path privateIniPath(pFolderPath); ::CoTaskMemFree(pFolderPath); @@ -92,6 +92,9 @@ std::filesystem::path CControlProcess::GetPrivateIniFileName(const std::wstring& { subFolder = L"sakura"; } + if (nFolder == 3) { + privateIniPath.append("Desktop"); + } privateIniPath.append(subFolder); if (const auto* pCommandLine = CCommandLine::getInstance(); pCommandLine->IsSetProfile() && *pCommandLine->GetProfileName()) { From 2610a2fc2d09f06a3e029530b0be6080975b13ef Mon Sep 17 00:00:00 2001 From: berryzplus Date: Thu, 1 Dec 2022 10:21:55 +0900 Subject: [PATCH 1024/1024] =?UTF-8?q?merge=E4=BF=AE=E6=AD=A3(master?= =?UTF-8?q?=E3=81=A8=E3=81=AE=E5=B7=AE=E5=88=86=E3=82=92=E3=82=BC=E3=83=AD?= =?UTF-8?q?=E3=81=AB=E3=81=99=E3=82=8B)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- help/sakura/res/HLP000001.html | 10 +++++----- sakura/githash.bat | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/help/sakura/res/HLP000001.html b/help/sakura/res/HLP000001.html index 6a95d94412..b275f57004 100644 --- a/help/sakura/res/HLP000001.html +++ b/help/sakura/res/HLP000001.html @@ -14,11 +14,11 @@ -->
    -

    -
    サクラエディタ Ver 2.4.2 (開発版)
    -
    ヘルプファイル最終更新日 2020/05/30
    -
    https://sakura-editor.github.io/
    -

    +
    +
    サクラエディタ Ver 2.4.2 (開発版)
    +
    ヘルプファイル最終更新日 2020/05/30
    + +
    サクラエディタ(旧称:テキストエディタ)は、「たけ(竹パンダ)」さんのテキストエディタSAKURAの公開ソース(2000/02/21付)を元に不具合修正および機能拡張を行ったものです。
    本ヘルプは、オリジナルのヘルプを元に、共同開発版で修正・変更された点について記述を加えています。

    diff --git a/sakura/githash.bat b/sakura/githash.bat index f7157406fb..70d39ae695 100644 --- a/sakura/githash.bat +++ b/sakura/githash.bat @@ -276,7 +276,7 @@ exit /b 0 ) @rem enable 'dev version' macro which will be disabled on release branches - @rem echo #define DEV_VERSION + echo #define DEV_VERSION if "%CI_ACCOUNT_NAME%" == "" ( echo // CI_ACCOUNT_NAME is not defined